Commit Graph

48 Commits

Author SHA1 Message Date
Ludovic Marie 6fab5eb279 Merge branch 'main' into parity-base
# Conflicts:
#	README.md
#	crates/horizon-client/src/game.rs
2026-10-12 19:02:09 +02:00
Ludovic Marie cdd05f8e8b Trial-merge branches before integrating them
supervise.py check trial-merges every candidate branch into the integration
branch with git merge-tree, without touching a worktree: each alone, every
pair, then the largest set that merges cleanly together, in about a second.
integrate starts from that set (or every parity/* branch with new commits,
with --ready), gates it once, and if the gate fails tries each half, so the
branches that pass still land.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:43:58 +02:00
Ludovic Marie f5ab40d415 Shard harnesses, narrow their Rust sources, keep the desktop light
parity.py:
- A harness declaring PARITY_SHARDS = N runs as N entries, NAME#1..NAME#N,
  each told its share through PARITY_SHARD; NAME selects them all.
- PARITY_RUST_SCOPE lists the Rust sources a harness's probes can reach.
  It applies only if closed (nothing in it names a module, crate-root
  re-export or macro outside it, and nothing outside implements anything for
  its types); crate roots then count without their other module declarations.
- Bytecode caches no longer count as dependencies.
- With other hosts, this machine runs 3 harnesses at once and only those
  under 800 MB, admitted against the memory free at each start; hosts can
  exclude harnesses and run at a nice level.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:41:51 +02:00
Ludovic Marie 6fdd7f3bd7 Add the Horizon logo, banner and in-game screenshots to the README
An original logo (a sun setting behind a blocky horizon), a banner and a social
preview card, and six screenshots captured in the Rust client. The README opens
with badges, a short pitch and a gallery; a test keeps the parity badge in step
with the subsystem table. Packaged builds use the logo as their menu icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:47:52 +02:00
Ludovic Marie 37898e856b Build from the user's own copy of the game instead of downloading it
Horizon no longer fetches anything of Minecraft from Mojang's servers. The
client jar, version JSON, libraries and assets come from the user's official
launcher install, and the server jar is one they downloaded themselves
(--server-jar or HORIZON_SERVER_JAR). Every file is checked against checksums
pinned in research-lock.json, and the prepared .local/ layout is byte-identical
to the old downloads, so the harnesses and the native client are unchanged.

CI keeps the offline checks on GitHub's runners; the vanilla comparisons and
the mod build need the game, so they move to a manual job on a self-hosted
runner that holds the maintainer's own copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:00:18 +02:00
Ludovic Marie d061bdf2fb Share harness passes between worktrees and cap harnesses machine-wide
A pass is keyed by the content of the harness's dependencies, so it is
also valid in any worktree with the same files. Passes are published to
parity-shared/ beside the shared vanilla data, and a worktree adopts one
whose key matches its own files instead of running the harness: an
agent's gate only runs what its own changes affect, instead of the whole
suite from scratch. Every runner on the machine also shares
PARITY_MACHINE_JOBS slots, so several agents' gates can't overload it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 16:42:52 +02:00
Ludovic Marie 13759ef16b Reuse unchanged vanilla oracle runs, and keep test games silent
tools/parity_shim.py stands in for java and javac in harness runs: it
records each oracle run's outputs and the content of every file under the
paths its arguments name, and replays the run while those are unchanged.
After a Rust-only change a harness only pays for its Rust side
(block_update 53 s -> 5 s). A harness that fails while reusing oracle
results is rerun fresh, and stops reusing them if that passes; --all and
--fresh never reuse them.

Harness probes built in the dev profile are optimised (overflow checks
and debug assertions kept), and the chunk generation harness runs its
vanilla and Horizon sides concurrently.

HORIZON_NO_AUDIO keeps the game off the speakers; tools/parity.py sets it,
since the save round-trip harness launches the game on a virtual screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:43:26 +02:00
Ludovic Marie 6396e8c161 Run the vanilla harnesses in parallel, only when their inputs change
tools/parity.py traces each harness (its Python, Java oracle sources and
the Rust sources of the probes it runs, from Cargo's dep-info) and reruns
it only when one of those, the vanilla artifacts or the toolchains change.
Harnesses run in parallel within the available memory, and their probes
build without LTO and with 16 codegen units into .local/parity-target: a
one-line change rebuilds every horizon-world probe in 3 seconds instead of
122. The full suite takes about 20 minutes instead of an hour.

tools/gate.py is the check a branch passes before integration, and
tools/supervise.py manages the per-area worktrees: status, new worktrees,
saving unfinished work, and integrating a branch only when the gate passes.

Harnesses find probes through lab.cargo_target() instead of a hard-coded
target/, the save round-trip harness builds the binaries it launches, and
the mob AI harness now fails on divergences like every other harness
(--report-only keeps the old behaviour). Debug builds keep line tables
only, so worktrees stay small.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:05:36 +02:00
Ludovic Marie 34f4722e42 Show audited Java parity in the README and correct stale status
Score fourteen subsystems against the code (55% overall) and test that the
README percentage matches the table. Fluids, redstone, crop growth and the
Nether already run in the client; the native-client status still described
the old test-generator terrain without mobs or containers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:21:53 +02:00
Ludovic Marie 18d0c44e8d Retain vanilla biomes during below-zero regeneration 2026-10-06 19:49:00 +02:00
Ludovic Marie b1505adc54 Enforce generation write heights during below-zero upgrades 2026-10-06 15:28:26 +02:00
Ludovic Marie e9a082517b Enforce generation write radii before feature mutations 2026-10-06 14:38:35 +02:00
Ludovic Marie 0a63903b91 Connect generation-time destruction to resident region writes 2026-10-06 14:20:49 +02:00
Ludovic Marie 619f319924 Keep decoration fixtures independent of region tick and query probes 2026-10-06 14:03:31 +02:00
Ludovic Marie 895af92d12 Implement ordered overlay feature composition 2026-10-06 12:13:34 +02:00
Ludovic Marie 4998765408 Accelerate large differential trace comparisons 2026-10-06 12:07:41 +02:00
Ludovic Marie cb19660fbe Build Horizon Rust parity foundations and differential validation
Add version-bound core, world data, geometry, generation and feature implementations with native client/server comparison tools and scoped evidence reports. Apply Horizon project branding.

Workspace tests, Clippy and 147 Python tests passed. Full 51-family survival and expanded provider comparisons are still running; complete gameplay parity and a playable Rust client remain unfinished. Private game artifacts and the isolated simple-block placement work are excluded.
2026-10-06 11:24:51 +02:00
Ludovic Marie b3dda5152c Merge pull request #33 from ludovic111/integrated-tick-context
Capture shared graphics context in integrated-server tick reports
2026-10-04 14:24:03 +02:00
Ludovic Marie 357cc90326 Capture shared client graphics in integrated-server reports 2026-10-04 14:09:19 +02:00
Ludovic Marie ed416c91cf Retain shader failures and private graphics timeout stages 2026-10-04 13:45:29 +02:00
Ludovic Marie 99d6aae5e0 Verify actual cinematic shader activation in private world probes 2026-10-04 13:09:45 +02:00
Ludovic Marie 213498c77e Separate failed readback assertions from independently logged Vulkan errors 2026-10-04 12:07:25 +02:00
Ludovic Marie a77476b54e Locate failed Mac Vulkan probes without exposing private logs 2026-10-04 11:59:57 +02:00
Ludovic Marie a5000edf11 Check recommended Mac profiles in demo worlds and retain separate Vulkan research 2026-10-04 11:26:47 +02:00
Ludovic Marie 02d7a5189d Capture sampled tick-manager changes without altering simulation 2026-10-04 08:43:00 +02:00
Ludovic Marie 470022f10b Add core performance profile for matched view-distance comparisons 2026-10-04 07:14:50 +02:00
Ludovic Marie 970f466d8b Merge pull request #21 from ludovic111/fixture-diagnostics
Report bounded dispatcher fixture failures and clean up child processes
2026-10-04 07:02:54 +02:00
Ludovic Marie 8bd42c782d Keep dispatcher fixture diagnostics useful and bounded 2026-10-04 06:54:31 +02:00
Ludovic Marie 257144a481 Apply official conditional client JVM flags 2026-10-04 06:52:40 +02:00
Ludovic Marie 0a0cd667d5 Reuse discarded terrain quads at fresh allocation sites with isolated controls 2026-10-04 06:00:07 +02:00
Ludovic Marie 110c75d712 Capture Java and loaded mod identity in client and server comparisons 2026-10-04 05:24:44 +02:00
Ludovic Marie c6ec0b5e14 Test equivalent arithmetic in the sampled terrain data lookup 2026-10-04 04:26:04 +02:00
Ludovic Marie 349724b3b6 Record independent ray geometry results and disclose excluded CLI frames 2026-10-04 03:42:11 +02:00
Ludovic Marie 7cbe37b605 Reuse per-instance numeric vectors in optional culling ray checks 2026-10-04 03:32:06 +02:00
Ludovic Marie 9a1b22aa56 Release interrupted DH metadata reads without cancelling shared futures 2026-10-04 02:49:54 +02:00
Ludovic Marie 1f97a8e487 Record actual world difficulty and preserve sanitized culling fixture evidence 2026-10-04 02:17:00 +02:00
Ludovic Marie 35dd69e9a6 Avoid empty culling whitelist iterator allocation while keeping live registration 2026-10-04 02:07:55 +02:00
Ludovic Marie e091816ce0 Reuse private terrain tick membership without changing published action order 2026-10-04 01:48:12 +02:00
Ludovic Marie 77510755bf Capture effective terrain quality and shader state at benchmark boundaries 2026-10-04 01:27:45 +02:00
Ludovic Marie 33f9f5a5ef Combine foreground terrain controls and validate collector experiments 2026-10-04 00:53:12 +02:00
Ludovic Marie 9c2b5066ec Bound rejected DH dispatch retries and validate applied hooks 2026-10-04 00:31:37 +02:00
Ludovic Marie 360a30cb60 Stream private JFR profiles and verify allocation counters across platforms 2026-10-03 23:26:13 +02:00
Ludovic Marie 4bf82ef530 Preserve fresh render budgets and measure compact Java headers 2026-10-03 23:06:36 +02:00
Ludovic Marie 5f24e2807c Preserve requested graphics backend by marking current option version 2026-10-03 22:44:49 +02:00
Ludovic Marie a5bbebf89b Preserve prior original mod builds when upgrading test instances 2026-10-03 20:52:31 +02:00
Ludovic Marie 9c2100563e Add optional adaptive distant terrain budget and resource telemetry 2026-10-03 20:38:34 +02:00
Ludovic Marie 702e59372f Ship portable optimization packs with original frame and tick measurement 2026-10-03 20:06:01 +02:00
Ludovic Marie 32a4383459 Build local Minecraft 26.3 decompilation and Rust optimization lab 2026-10-03 19:08:33 +02:00