Skip to content

Wide parity: the game on many random seeds, compared with Chunkscope - #29

Merged
byRandom merged 2 commits into
mainfrom
verify/wide
Nov 15, 2026
Merged

byRandom merged 2 commits into
mainfrom
verify/wide

Conversation

@byRandom

Copy link
Copy Markdown
Owner

First part of 0.7, large-scale verification: the real game is run on many random seeds and compared with Chunkscope. Nothing generated by the wide check is committed.

What changes

  • parity/game-oracle/WideOracle.java reuses GameOracle's helpers and writes, for every seed (drawn from a salt) and dimension:

    • biomes at 64 random quart positions, near and far;
    • getBaseHeight (WORLD_SURFACE_WG, OCEAN_FLOOR_WG) at 6 columns;
    • every structure attempt of every random-spread set around (0, 0) and around a random far block, in GameOracle's trace format. Candidates a set rejects are written as (no attempt), so Chunkscope cannot add attempts either;
    • whether each end city that generates has a ship.

    For the Overworld it also writes the spawn origin and, every n-th seed, all 128 strongholds.

  • crates/mc-core/tests/wide.rs compares Chunkscope with that output when CHUNKSCOPE_WIDE is set. It prints a summary per dimension and set, and every difference with its seed and position, also saved as report-*.txt. Without the variable the tests do nothing, so cargo test is unchanged.

  • parity/game-oracle/wide.sh [seeds] [salt] [n] compiles and runs the oracle, then the comparison. Reusing a salt reruns the same seeds.

  • .github/workflows/wide.yml runs it weekly (Mondays 03:17 UTC, 200 seeds) and by hand, with seed count and salt as inputs. It also runs on pull requests that change the check itself, with 10 seeds. The job summary and the wide-parity artifact hold the results.

  • release.yml calls it with 100 seeds before publishing: a release now waits about half an hour longer, and is not published if the game and Chunkscope disagree.

  • The server jar download moves from run.sh to fetch.sh, shared by both scripts. GameOracle.strongholds is split so the wide oracle can reuse it. Its output is unchanged: run.sh regenerates every fixture byte for byte.

  • Docs: a PARITY.md tier 3 section with the first run's numbers, ROADMAP, README and GLOSSARY.

First run

200 seeds, salt 20261115: about 27 min for the game and 8 min for the comparison on 4 cores. No difference in:

  • 38,400 biomes;
  • 3,600 columns (two heightmaps each);
  • 363,728 structure attempts and rejected candidates across 21 sets in 3 dimensions;
  • 2,592 end city ships;
  • 200 spawn origins;
  • 20 × 128 strongholds.

I also checked the comparer itself: a corrupted biome line and a corrupted structure point are each reported as one difference.


Generated by Claude Code

byRandom and others added 2 commits November 15, 2026 06:24
WideOracle.java runs the real game classes on random seeds (from a salt)
and writes, in every dimension, biomes, base heights and every structure
attempt around two centers (rejected candidates included), plus end city
ships, the spawn origin and strongholds. tests/wide.rs compares Chunkscope
with it when CHUNKSCOPE_WIDE is set, reporting each difference with its
seed and position. wide.sh runs both; the Wide parity workflow runs it
weekly, by hand, and before each release.

The server jar download moves from run.sh to fetch.sh, shared by both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SenGxDDRwLejx8nir8GXKG
200 random seeds (salt 20261115) in every dimension: no difference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SenGxDDRwLejx8nir8GXKG
@byRandom
byRandom merged commit 33368d2 into main Nov 15, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant