Verify all pinned survival families through feature predicates

This commit is contained in:
Ludovic Marie
2026-10-06 11:53:58 +02:00
parent 772d84c731
commit 097638b4f1
3 changed files with 52 additions and 48 deletions
@@ -8,12 +8,12 @@
"block_states": 35723,
"blocks": 1286,
"integer_properties": 146,
"codec_inputs": 299507,
"codec_inputs": 356935,
"provider_types": 10,
"named_providers": 22,
"rule_predicate_types": 16,
"survival_supported_blocks": 1138,
"survival_supported_states": 31171,
"survival_supported_blocks": 1286,
"survival_supported_states": 35723,
"support_cached_states": 35524,
"support_dynamic_states": 199,
"biomes": 67,
@@ -21,23 +21,23 @@
"fluid_tag_files": 11,
"bundled_provider_definitions": 8,
"block_tag_files": 302,
"requested_samples": 39270062,
"requested_samples": 79473574,
"sources_sha256": {
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaStateProviderOracle.java": "33ca3001656490ad4eb66e1e61ded306de4e448210eb7aca6299a068780761a0",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaStateProviderOracle.java": "3dcf6c76e1a0d8f80946ef7773c52343e542977414fe269f46ebd7b77a3340c0",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockStateCodecOracle.java": "5c217a8cb72094020082bd4846ed675a6399b9fa371be95a221bd92d227b2e09",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaHeightmapOracle.java": "145c943637ed177cc4ef8a85f2484da8afd164868e84a8463882feec1653a860",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaMaterialConditionOracle.java": "04a87405fd2a1c79baf4eb3a8895aa66dc96b8f6baffb9b486ef207f8b91b5ee",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBiomeTemperatureOracle.java": "243bbc525c6aec24674e7f172c5fb4f7b50f9a679d8b9dfba40ea278219a2d28",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaAnchorOracle.java": "226628d98b89aadbdd374936575d033945e7064a900dbb050c662204dbc7e119",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockPropertiesOracle.java": "82e5cadbcdcba5b4577c56c5a033262b066ccc4cc4a14c7c48ce46c4c6247a03",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockPropertiesOracle.java": "99a396b9b983f6ca9149133251f3ece9aaf76d3d16dafa1f322378212a19490c",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockSupportOracle.java": "04350901a2d708fb8fa672de61d058f73f332d2e90df1b93a67781862f89c1ad",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockSurvivalOracle.java": "00010bad8feea549c4243787e0d594b467a3227236a38c2e528d4247c7ba1c70",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaCollisionOracle.java": "02acfbae94aee306c5a4e1db7c86c68f7d6156ddd3dd477dc9e9d06e5ca98118",
"tools/test_block_survival_parity.py": "e2f661afbf67a8726c9423d610f8b05b9e348c8140c40efb3aafaca0291efe31",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaBlockSurvivalOracle.java": "4e7cc151617c1b02e872f9ca3e9fe4632379f225f4f07718ff6492df4ee551e7",
"mods/horizon/src/test/java/dev/horizonlab/parity/VanillaCollisionOracle.java": "60ff9ef7c1d5e23c080f9aec95ab2e7d3b7c5b5bcd67b9efa9518776c400629a",
"tools/test_block_survival_parity.py": "9e8dff3bd4b95dbfd29f8adc6a2f6d66abf19a6b1cd91423b794a345d4ec244a",
"tools/test_biome_temperature_parity.py": "68f84d02e7802349e491b8cb66e18d9b08c9e72ab2306b663667259e852cc2b1",
"tools/test_material_condition_parity.py": "01c82e1a768d9131f8f7e6d59d01ddb06272074469dbdcd8547f44f0a8fa152d",
"tools/test_worldgen_parity.py": "b40972ab2ad222aa6d77537cc36b434a217baa1f1b56bbaad945d6e12fe776af",
"tools/test_state_provider_parity.py": "f52ab05832e9e9acf8aae779c3e199a1cd836592f1a993837edb0757d87b0f55",
"tools/test_state_provider_parity.py": "7e39c1497e9f535998a70bcfbe38852a791e65c9688ce6f92f25547a07d040f6",
"tools/test_rust_parity.py": "7efa699a38c5820424f5fc8992ee601dbfe26d6482da9d2dab2c17c41fe8f12a",
"tools/lab.py": "d00bf107fa01b6c579734a082c3ca4ade3018f0d6851d46844acf17574f66e64",
"Cargo.toml": "dc370d5fdde37238c3e4820046f11c3201020406a4edfa1308257c13edbdcda4",
@@ -101,17 +101,18 @@
"crates/horizon-core/src/ticks/index.rs": "1f1a6a568c2a30eafecb020ca4d5f5fc414860de85b8b381fc419a2e3e65c24a",
"crates/horizon-core/src/ticks/mod.rs": "84852599dde78687d782f115a5b4b3ef6856c1f9cc92917255167e89c72ab01e",
"crates/horizon-world/src/bin/worldgen_parity.rs": "3143ceb9b56eecfd7667e5feb5f9f0cd13cfb8754b38d4ea338dbba97f2819da",
"crates/horizon-world/src/block_properties.rs": "e74b368012d4d440dcdbd4d9bcaf80495220b90557f0e0c733b0aa21ad03c53c",
"crates/horizon-world/src/block_collision.rs": "cec2af81d212d5eed7a2196e4cf0be2daf4cecf53248f78cc68f2190e4d83f9a",
"crates/horizon-world/src/block_properties.rs": "b3caf26bd3afc9d10cdcca3f7e794c30abf5ba09afa1fe80ba8f44713acdb274",
"crates/horizon-world/src/block_support.rs": "ade4fbd47284b450dabdd682dc86138b2ac05a0fd379525d7110648908245476",
"crates/horizon-world/src/block_survival.rs": "d7e4ba3709fe1fe1b4998d067080bf48ebfc549cdfc883d8d648d13d6fdf4e3f",
"crates/horizon-world/src/block_survival.rs": "2c882aeb095c27a8edfda1e934ac829102e4be136d53fd83110132150b7293b1",
"crates/horizon-world/src/chunk.rs": "8843e6f48dbbc4245ce4e95564dfba3a4d7a051ba0b1577fb038c07adb0ff0f9",
"crates/horizon-world/src/collision.rs": "05313e0c1f3089524fe029f9aac3e439cd47f1c9584c8c7e154c9adcfa88c335",
"crates/horizon-world/src/compression.rs": "4db73e6ca9a0d552d415ce60e7e88b89c9cf2b7d060a669ff8328f518316e101",
"crates/horizon-world/src/dynamic_support.rs": "1bf4ad95fcdf7f2df4e33dde38e08959d9b76a6260838c13e97c2bb59e006294",
"crates/horizon-world/src/dynamic_support.rs": "e799b31e5120cfdb04e0b342f2097d610ed98ef8c4be031620ee00368d82df59",
"crates/horizon-world/src/entity_obstruction.rs": "a4b28a19bf83b23611c59d94535c488db37e4aee24b22c973c545910894a809f",
"crates/horizon-world/src/fluid.rs": "8a2834a9347ee2c2db7cf1c86a064907ec06e9ac16ba9cc3936e315fc4ad49ca",
"crates/horizon-world/src/heightmap.rs": "a5edef082b5af40d814421ea17e129b3b06d70abee6434ed263e4bba58571698",
"crates/horizon-world/src/lib.rs": "69cdc611b7a7e20a7da705fcc25de6b97cdb64cf63f954be49d0a11f9a820465",
"crates/horizon-world/src/lib.rs": "09f697d8d4e709acacc8e9f7c35c5fd307bab6ab0df4a1339fe760afc655cdab",
"crates/horizon-world/src/main.rs": "fce57418b8c22a6a0a9044baa89ed3d9c243bc2e8413fea3ff0f32985daba021",
"crates/horizon-world/src/nbt.rs": "60262c3de8c8f68bc2da0370ccb17393d32b85f5f5022c6358599a7d32119ea6",
"crates/horizon-world/src/piston_shape.rs": "399c2337103b8e7e0eb5667227c5aa14f9549d6a467b7be7da3d0717f0263500",
@@ -130,7 +131,7 @@
"crates/horizon-world/src/worldgen/biome_source/runtime.rs": "f0b02c1521178e4d0377c6ca62694604b6a773f1f234f070ff0cde4685911d45",
"crates/horizon-world/src/worldgen/biome_source.rs": "e181e1736f3e0b75f7091a24c88de3fd116e01b98424d02382aea7a503d1eb54",
"crates/horizon-world/src/worldgen/biome_temperature.rs": "cde4bbab5e260c4065b113376c423b8511ade93c5aa5fd976e245ee8a58b5ad1",
"crates/horizon-world/src/worldgen/block_feature.rs": "6be7c0161cecf1362c196e91ecbeb166e16c8da3731d988ce8f2308f06209265",
"crates/horizon-world/src/worldgen/block_feature.rs": "82a424d3b20837dc401005f5fe038616659eb17b5bbd78d0c8c29f8bdeb1104a",
"crates/horizon-world/src/worldgen/block_predicate.rs": "074c692367e3f2191a1bb28d87b23402430a843c246bd30a4ea838ee3500280e",
"crates/horizon-world/src/worldgen/bulk_section.rs": "eecf61532d7793f853884c5a18a7f436a59835c7b13d3ec9075804511553c9ba",
"crates/horizon-world/src/worldgen/carver/canyon.rs": "509c4d5a9d689849e98e894ab14a9fbf82d10707d38e9cc688ded3c4778df3e2",
@@ -169,21 +170,24 @@
"crates/horizon-world/src/worldgen/state_provider/catalog.rs": "fa0616353f07460975ab323357ab280b7f35e7bfe2de6edc08d304316766ed26",
"crates/horizon-world/src/worldgen/state_provider/noise.rs": "7ee369c2a032e5620cb9bdf9ee7adad1f70870fb0a27efb7b7c514d92f83491f",
"crates/horizon-world/src/worldgen/state_provider/properties.rs": "9909139aaca1dc4f743957257fadaa9d423d21fa401fa9abc050505f79365139",
"crates/horizon-world/src/worldgen/state_provider.rs": "89cb0410899608545aa1ba3b1b4c1babf533fb25efd341feab1c87661f44f7b9",
"crates/horizon-world/src/worldgen/state_provider.rs": "9cc353d474184f4db880c4305137ec6e35a564a983f602c76af39349ecb58541",
"crates/horizon-world/src/worldgen/tags.rs": "d35ded93fe6e95ea045cadcf4925e656dc34ef832b742179b9ad0cc49f902f31",
"crates/horizon-world/src/worldgen/terrain.rs": "7fb7130111654563f7217f7b84563adde0b11c3ebd6a499a514dc98ebef7c733",
"crates/horizon-world/src/worldgen/value_provider.rs": "3358b563db8cb0bc8a9cfbbe2b8b3e70941cd2d37a0b519fbb6545f8d0dcbb69",
"crates/horizon-world/src/worldgen/weighted.rs": "839840aae25302933bbd97a81a2336330e2d03a0ad1684e1e16ac769ed408e6b",
"crates/horizon-world/src/worldgen.rs": "821981c893fc84312351503f2be0c06c681d8bc768dade14576697cf047a9f8f",
"crates/horizon-world/examples/state_provider_fixture.rs": "ec20f6ee5b3d1f2e69c4c5345fd31ef98ef660fc26b69ac0145e4d8473bca498"
"crates/horizon-world/examples/state_provider_fixture.rs": "76c4648eb1b873b8e30c60da5350bb31794e5c539f8719ed914503538db0347b"
},
"fixtures_sha256": {
".local/rust-state-provider-parity/inputs.txt": "8b4ebd390ba64d0c9af15df6355c1722dffb4485248deb784e141d447cec512d",
".local/rust-state-provider-parity/inputs.txt": "536f1388bc26c0ceb87cb656934b3600e567ef594b15e818108c8a25a0d900fa",
".local/rust-state-provider-parity/survival-extra-definitions.json": "170f2db5bc97a49fa25cc249540aa7f04beea455cdbaf43742ed9415f5090a02",
".local/rust-state-provider-parity/survival-placement-classes.json": "7fdbf48ab18c87098bbe1b6176cb81f4842b6c5d9a4d6bbaf7037ff61cb1848c",
".local/rust-state-provider-parity/survival-support-tags.json": "15d88d5bb5ad10d65124d5abb2cc055d251b06d129bca7be06f55b43dc13f6fd",
".local/rust-state-provider-parity/survival-classes.json": "361832008eea0aa9151d367a125a19c6353d99a0b88b27dd0682f55b7954553e",
".local/rust-state-provider-parity/survival-rules.json": "2d82abb640c1235179e195b0234b13f3b74af84741b1b739aa6cec648ab3b3d2",
".local/rust-state-provider-parity/survival-rules.json": "8805c18b3195bb1eac1f1e5281333df56e2892505f64023e5403c58ce2ec4368",
".local/rust-state-provider-parity/cached-support.nbt": "b6fdc9471b0b61e904206d3f099f4dc235aad6d723536c210be0cb7c3560d82c",
".local/rust-state-provider-parity/support-cached-states.json": "353945a58fe69b352925473f1693f9b14a9ad19f13c15159c4184f2c29258622",
".local/rust-state-provider-parity/block-properties.nbt": "699a994c5c0c9f7ee58e35b9c23c4503a5936efe84133643113232f825ae2216",
".local/rust-state-provider-parity/block-properties.nbt": "1aba22092f70d16b8092014c058ddc210e4aaa77bac32f6ec62e4d0e91d92a99",
".local/rust-state-provider-parity/cached-collision.nbt": "f3a5c6a5b2d51dad6c52e486e2b9989e79fd55db1a9bda6196db399550b04078",
".local/rust-state-provider-parity/biomes.json": "9b26dc3b662627dc3bbbf8da209f287882ce79ff4daf8f454b994ddc7510df99",
".local/rust-state-provider-parity/biome_tags.json": "2c0193d998b196c2b909e92f51e8158f5e8773f5387ade5a8b85a85f063ca560",
@@ -194,20 +198,20 @@
".local/rust-state-provider-parity/facts-client.json": "5e89a805514cabfe46e082d651db406b9479781e1d97b65faa2ab9f6f871309b",
".local/rust-state-provider-parity/facts-server.json": "5e89a805514cabfe46e082d651db406b9479781e1d97b65faa2ab9f6f871309b"
},
"rust_output_sha256": "aa089984db4632a9b1e2d1c965fa0429f9d8b034e2ceb200bccbe2a4a5b545c8",
"rust_output_sha256": "fd4afc0b54a8891aabf15f6b52fb47a50f73ebc4fa07200080a42741a905b594",
"references": [
{
"side": "client",
"jar_sha256": "4508d006323f24fa02876310c192d739af56516eb259000ac50f0909a68c9a2d",
"output_sha256": "aa089984db4632a9b1e2d1c965fa0429f9d8b034e2ceb200bccbe2a4a5b545c8",
"matched_output_lines": 105340143
"output_sha256": "fd4afc0b54a8891aabf15f6b52fb47a50f73ebc4fa07200080a42741a905b594",
"matched_output_lines": 257299719
},
{
"side": "server",
"jar_sha256": "a362163eec5d1612d520772bc16e5b39c09e3b234fdc045f56bf544284ee8ae6",
"output_sha256": "aa089984db4632a9b1e2d1c965fa0429f9d8b034e2ceb200bccbe2a4a5b545c8",
"matched_output_lines": 105340143
"output_sha256": "fd4afc0b54a8891aabf15f6b52fb47a50f73ebc4fa07200080a42741a905b594",
"matched_output_lines": 257299719
}
],
"scope": "Actual BlockStateProvider DIRECT_CODEC/TYPED_CODEC and simple, weighted, random_block, rotated, copy_properties, randomized_int three noise-based providers and rule_based over the pinned state registry. All states and block defaults, full-state versus typed exclusive decoding, ordered holder sets/tags, duplicates, empty optional results versus world-state fallback, zero/overflow weights, query failures, every state across six fixed rotations, nested random rotations, property copying for every target state against representatives of every compatible property value, integer-property ranges/missing properties, composed transforms and subsequent random consumption. Native property equality families are checked for ambiguity; Rust validates Cartesian state tables and uses compact property strides. Both legacy/xoroshiro streams execute directly and through WorldgenRandom. Noise comparisons include every bundled provider definition, independent legacy seeding, float/double scaling, dual-noise variety selection, threshold draw order and coordinate/codec boundaries. Rule-based comparisons cover true/not/all_of/any_of/inside_world_bounds/height_range/volume_match/matching_block_tag/matching_blocks/matching_fluids/matching_biomes/unobstructed/solid/replaceable/has_sturdy_face/would_survive predicates, ordered optional results, fallbacks, nested rules and world-query failures. Every pinned block-state fluid identity, amount, falling/source flag and own-height bits are derived from descriptors and compared. Fluid-holder sets and all bundled fluid tags are tested against every state. Biome-holder membership and all bundled biome tags are compared across every pinned biome identity, including empty sets, missing names, ordered world queries and short-circuit composition. Unobstructed predicates compare null excluded entities, exact translated unit-shape bounds, ignored-but-validated offsets, true/false world results and failures. Named holder versus direct/typed decoding, nested named providers, missing names, inline ambiguity, ordered resource registration and all bundled named definitions are compared. Solidity and replacement predicates cover every block state, offset wrapping/validation, empty-child fallthrough, composed predicates and query failures using privately imported definition flags and Rust-calculated collision solidity. Has-sturdy-face predicates cover all 35,723 states through unified cached/dynamic support dispatch across six directions, native offset rules, failed state reads, block-entity query failures and ordered optional-child/boolean composition. Block entities are absent in this integration corpus; shulker animation-state shape selection is separately tested and active moving-piston entity collision generation remains pending. Would-survive decodes candidate states and bounded offsets, evaluates all supported candidate states and each rule against every neighbor state, and preserves world read/entity failures and short-circuit/optional-child behavior. Survival support is limited to the rule families explicitly recorded here; unsupported survival families, complete registry loading/reloading, full block placement behavior and full feature generation remain pending."
"scope": "Actual BlockStateProvider DIRECT_CODEC/TYPED_CODEC and simple, weighted, random_block, rotated, copy_properties, randomized_int three noise-based providers and rule_based over the pinned state registry. All states and block defaults, full-state versus typed exclusive decoding, ordered holder sets/tags, duplicates, empty optional results versus world-state fallback, zero/overflow weights, query failures, every state across six fixed rotations, nested random rotations, property copying for every target state against representatives of every compatible property value, integer-property ranges/missing properties, composed transforms and subsequent random consumption. Native property equality families are checked for ambiguity; Rust validates Cartesian state tables and uses compact property strides. Both legacy/xoroshiro streams execute directly and through WorldgenRandom. Noise comparisons include every bundled provider definition, independent legacy seeding, float/double scaling, dual-noise variety selection, threshold draw order and coordinate/codec boundaries. Rule-based comparisons cover true/not/all_of/any_of/inside_world_bounds/height_range/volume_match/matching_block_tag/matching_blocks/matching_fluids/matching_biomes/unobstructed/solid/replaceable/has_sturdy_face/would_survive predicates, ordered optional results, fallbacks, nested rules and world-query failures. Every pinned block-state fluid identity, amount, falling/source flag and own-height bits are derived from descriptors and compared. Fluid-holder sets and all bundled fluid tags are tested against every state. Biome-holder membership and all bundled biome tags are compared across every pinned biome identity, including empty sets, missing names, ordered world queries and short-circuit composition. Unobstructed predicates compare null excluded entities, exact translated unit-shape bounds, ignored-but-validated offsets, true/false world results and failures. Named holder versus direct/typed decoding, nested named providers, missing names, inline ambiguity, ordered resource registration and all bundled named definitions are compared. Solidity and replacement predicates cover every block state, offset wrapping/validation, empty-child fallthrough, composed predicates and query failures using privately imported definition flags and Rust-calculated collision solidity. Has-sturdy-face predicates cover all 35,723 states through unified cached/dynamic support dispatch across six directions, native offset rules, failed state reads, block-entity query failures and ordered optional-child/boolean composition. Block entities are absent in this integration corpus; shulker animation-state shape selection is separately tested and active moving-piston shape generation is tested separately. Would-survive decodes candidate states and bounded offsets, evaluates all supported candidate states and each rule against every neighbor state, and preserves world read/entity failures and short-circuit/optional-child behavior. All pinned survival families are bound through the recorded definition inputs. Complete registry loading/reloading, full block placement behavior and full feature generation remain pending."
}
+13 -10
View File
@@ -458,8 +458,8 @@ a parity report is written only after both native comparisons pass.
Run `python3 tools/test_state_provider_parity.py`. The
[provider report](../benchmarks/rust-state-provider-2026-10-06/scoped-parity.json)
records **105,340,143 matching lines per JAR**, with 299,507 codec inputs
and 39,270,062 requested samples across ten provider kinds. Every pinned state is decoded and tested
records **257,299,719 matching lines per JAR**, with 356,935 codec inputs
and 79,473,574 requested samples across ten provider kinds. Every pinned state is decoded and tested
under all six fixed rotations; random/nested rotations, both sampling methods,
empty tags, weighted boundaries, fallback query failures and four random-stream
combinations are compared. Every target state is also tested against
@@ -533,11 +533,14 @@ The `would_survive` predicate now decodes a candidate block state and bounded
offset, then invokes survival at the translated position without placing it.
Both provider and feature bindings use the shared block-state codec; placement
chains forward the survival query. The refreshed provider report records
**105,340,143 matching lines per JAR**, **299,507 inputs**, **39,270,062 requested
samples** and **16 predicate kinds**. Its survival snapshot covers 15 rules,
1,138 definitions and 31,171 candidate states, with each rule tested against the
entire neighbor-state registry, malformed definitions, wrapped offsets,
short-circuit conditions, optional-child fallthrough and query failures.
Unsupported survival definitions remain errors. This report does not establish
full block placement or every block's survival behavior. Workspace tests,
warning-free Clippy and **143 Python tests** passed at this snapshot.
**257,299,719 matching lines per JAR**, **356,935 inputs**, **79,473,574 requested
samples** and **16 predicate kinds**. Its survival snapshot now covers all
**51 pinned survival families, 1,286 definitions and 35,723 states**. Behavior
representatives run against the entire neighbor-state registry, with malformed
definitions, wrapped offsets, brightness thresholds, short-circuit conditions,
optional-child fallthrough and query failures. Dynamic support and empty-context
collision use absent block entities in this integration corpus; animated shulker
and active-piston snapshots have separate geometry comparisons. This establishes
the recorded provider/predicate integration, while full block placement, updates
and gameplay remain pending. Workspace tests, warning-free Clippy and the
**147-test Python suite** passed.
+9 -12
View File
@@ -3,17 +3,14 @@
The behavior target is the repository's pinned **Minecraft Java Edition 26.3**.
One-to-one vanilla gameplay parity is the acceptance criterion. It has **not**
been reached: Horizon's Rust code does not yet run a client, server, or simulation.
It can read and export region files and access saved and resident block sections.
Scheduled block/fluid queues can now collect and dispatch callbacks with
vanilla-checked ordering; the actual block/fluid behavior is still absent.
Double-precision geometry and voxel-grid queries are implemented, with a registry
adapter for vanilla's no-context cached collision branch.
Base noise samplers, octave stacks, normal-noise definitions and bulk density
sampling are implemented. Compiled density samplers now evaluate constants, gradients,
shifted noise, all eleven unary operators, rounding and selected arithmetic operations. An initial density graph compiler
integrates range analysis, specialization, uniform-axis slicing, shared caches,
nested splines and seeded noise;
complete graph coverage, serialized graphs and generated terrain remain absent.
The Rust workspace implements core arithmetic/random streams, world data and
resident sections, scheduled tick ordering, geometry, contained fluid states,
noise/density evaluation, biome and terrain generation kernels, material rules,
and parts of feature placement and decoration. All pinned block-survival
families now have native differential coverage. Full simulation callbacks,
complete chunk generation, entity behavior, networking, rendering and playable
integration remain unfinished. The linked subsystem documents and hashed reports
record the exact tested scope and remaining gaps.
The playable Java performance packs remain available during development.
## Completion criteria and playable builds
@@ -389,7 +386,7 @@ graphs, block writes and live heightmaps. It compares complete final resident
sections; structures, lighting and the full generation lifecycle remain pending.
The [block-state provider comparison](feature-placement.md#block-state-providers)
adds **105,340,143 matching lines per JAR** for ten state-provider kinds, including
adds **257,299,719 matching lines per JAR** for ten state-provider kinds, including
all eight bundled provider definitions. It includes every state under six
directions, property transforms, nested draw order and empty selections. Rule-based
selection includes twelve predicate kinds, ordered conditions, empty results and