horizon-client, horizon-world and horizon-protocol each had an example
named `probe`. Cargo copies every crate's examples into one
<profile>/examples/ directory, so parallel parity harnesses sharing a
target dir could run another crate's probe (CI parity run 40055656303:
command_parse ran the horizon-world dispatcher). The examples are now
client_probe, world_probe and protocol_probe ([[example]] in each
Cargo.toml; the files stay where they are), and every harness builds
and runs its own crate's name.
tools/parity.py recognises the new names when it counts the probes a
harness ran, and renames the old `probe` in recorded artifacts to the
crate's target (from the record's -p, else its probe sources), so the
prebuild still builds them instead of dropping them as unknown.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 168 horizon-world examples the parity harnesses run become modules of
one example, examples/probe, that dispatches on its first argument;
crate::args() gives each the command line its example saw. Linking ~170
binaries, each instantiating horizon-world's generics again, was most of
the parity job's probe build (review plan, section 1).
The harnesses build `--example probe` and run `probe <name> ...`.
tools/parity.py counts only the probes a harness ran, and the support
modules they name, as its dependencies, so editing one probe still reruns
only its own harnesses (and PARITY_RUST_SCOPE keeps working).
The six manual tools (benches, loot_fill, structure_blocks, vanilla_diff,
attribute_memory, behaviour_load_profile) stay separate examples.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tree fixture world now applies vanilla's edge shape updates for its
obstacles (faceless vines, unsupported short grass), the vanilla fixture
world answers environment attributes with defaults, and features that
need structure templates or the pale moss registry, directly or through
named features, are left to the decoration harnesses. The scene probes
build their scene with World::test_scene since TestWorld was removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Oracles reference shared helper oracles (heightmap, level shape...) that
javac could not find when only the entry files were listed. Also let
chunkgen_bench list unsupported features (HORIZON_LIST_UNSUPPORTED=1).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unit tests pin Java HashSet bucket iteration, Fisher-Yates draw order and
the seed-derived End spike layout. The oracle ignores sounds, level
events and entity queries; the Rust fixture accepts end-gateway
configuration; FEATURE_FILTER limits a rerun to matching features.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Adds minecraft:speleothem_cluster (Column scans, pools, merged tips) and
minecraft:large_dripstone (wind offsets, base embedding, height curve).
The differential harness now resolves named features and placed features
lazily on the Java side, logs dungeon loot/spawner block entities, uses
the world seed and survival rules, and exercises every other configured
feature over surface, cave, flooded-cave, ocean and nether worlds.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Decodes every vanilla 26.3 tree, fallen_tree, ore and scattered_ore
configured feature from the authenticated JAR, places each with both
random kinds over layered synthetic worlds backed by native proto-chunk
sections, and compares ordered writes, beehive occupants, post-processing
marks, results, random tails and the final block diff with Rust.
First run: 2783 of 3018 fixtures identical; every ore fixture matches.
The remaining differences are StructureTemplate.updateShapeAtEdge
neighbor shape updates (faceless vines and unsupported plants beside the
tree), which the Rust world hook does not yet implement.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>