Skip to content

test(cliffs): the crater RNG hypothesis is UNSUPPORTED - n is 1 (#84) - #136

Merged
wormeyman merged 1 commit into
mainfrom
crater-rng-unsupported
Aug 4, 2026
Merged

test(cliffs): the crater RNG hypothesis is UNSUPPORTED - n is 1 (#84)#136
wormeyman merged 1 commit into
mainfrom
crater-rng-unsupported

Conversation

@wormeyman

Copy link
Copy Markdown
Owner

#130 proposed a mechanism class new to #84 — entity autoplace rolls, so removing calcite shifts the per-chunk RNG stream — and honestly marked itself "a hypothesis, not a result: nothing here tests it". This is that test.

No capture. Every fact below is in fixtures already committed, one of them since #111.

The hypothesis is not refuted. The evidence for it is.

1. n is ONE crater, not eight

The eight crater-cliff entities are eight segments of a single ring — centre (1646.62, 1679.75), radii 4.95 to 7.00, against the prototype's own crater_radius = 7. FFF #386 describes exactly this: "a ring of special cliffs where sections of the ring can randomly be removed."

Effective sample size 1. #130's table invites reading it as 8.

2. The spatial reading would have been vacuous

All eight segments sit within 0.33 tiles of a calcite entity — which looks decisive and is not. Their chunk (51,52) holds 805 calcite entities over 1024 tiles, 78.6% coverage. A ring landing on calcite there is the expected outcome.

3. #130's control row is VACUOUS

It offers "geyser OFF → 0 craters" as the arm separating calcite from resources generally. There are zero geysers in the ring's chunk — all 19 are in (48,48), (48,49), (53,54). The lever works globally (removes all 19, moves cliff-vulcanus 885 → 889) and cannot touch that chunk's stream by construction. Both halves are asserted, because "the lever did something" and "it did nothing here" are different claims.

4. A lever unrelated to calcite also produces craters

Sitting unread in oracle-vulcanus-cliff-suppressor-levers since #111:

arm cliff-vulcanus crater-cliff
default, resources ON 885 0
resources OFF via controls 916 8
LAVA TILES OFF only 1053 7
resources OFF + LAVA TILES OFF 1082 18

Craters appear with calcite still ON. Every #84 spec filters to name === "cliff-vulcanus", so the column was never looked at — the same failure #94 caught once already, in the same investigation.

5. And that row is a data fact, not a hypothesis

crater-cliff overrides the default cliff mask with an explicit {item, object, player, water_tile}. On Vulcanus only lava and lava-hot carry water_tile. Lava blocks crater segments by prototype; row 3 needs no RNG at all.

Where calcite stands

Its route is still unexplained and the RNG stream is still the only unclosed candidate. Two others are now closed by reading rather than assuming:

A third fact from the same file closes a route this session had to consider: the default cliff mask carries not_colliding_with_itself = true, so cliffs never collide with cliffs of their own prototype. That matters because applyCliffs adds each cliff to the surface before testing the next one, and 57 of 400 adjacent orientation pairs have overlapping boxes — without the flag the entire run would be placement-order dependent.

Status and the real test

UNSUPPORTED, not refuted. Testing it properly needs a lever that changes the roll count in the ring's own chunk without touching that chunk's tiles or lava — switching off one of the rock prototypes listed before crater-cliff in autoplace_settings.entity would do it. One capture arm, and worth having a real control before spending it.

No new fixtures, no shipping behaviour change. pnpm run verify green (183 files, 1514 tests).

🤖 Generated with Claude Code

https://claude.ai/code/session_01MmitdaFJxN9Wm8LkQu33kc

#130 proposed a mechanism class new to #84 - entity autoplace ROLLS, so removing
calcite shifts the per-chunk RNG stream - and said "nothing here tests it".
This is that test. No capture: every fact is in fixtures already committed, one
of them since #111.

The hypothesis is not refuted. The evidence for it is.

1. **n is ONE crater, not eight.** The eight `crater-cliff` entities are eight
   segments of a single ring - centre (1646.62, 1679.75), radii 4.95 to 7.00,
   against the prototype's own `crater_radius = 7`. FFF #386 describes exactly
   that. Effective sample size 1; #130's table invites reading it as 8.

2. **The spatial reading would have been vacuous.** All eight sit within 0.33
   tiles of a calcite entity - and their chunk holds 805 calcite over 1024
   tiles, 78.6% coverage. Landing on calcite there is expected.

3. **#130's `geyser OFF` control is VACUOUS.** Zero geysers in the ring's chunk;
   all 19 are in (48,48), (48,49), (53,54). The lever works globally - removes
   all 19, moves cliff-vulcanus 885 -> 889 - and cannot touch that chunk's
   stream by construction.

4. **A lever unrelated to calcite also produces craters**, unread in the #111
   fixture: `LAVA TILES OFF only` gives 7 craters with resources still ON, and
   both levers together give 18 against 8 and 7 alone.

5. **And that row is a data fact.** `crater-cliff` overrides the default cliff
   mask with `{item, object, player, water_tile}`, and on Vulcanus only lava and
   lava-hot carry `water_tile`. No RNG needed.

Calcite's own route stays open, with two more closed by reading rather than
assuming: not entity collision (`resource` mask is `{resource}`, disjoint from
every cliff mask including crater-cliff's - #124's argument extended rather than
carried over), and not lava tiles (#128 measured zero blocking tiles moved).

A third fact from the same file closes a route this session had to consider: the
default `cliff` mask carries `not_colliding_with_itself = true`, so cliffs never
collide with same-prototype cliffs. That matters because `applyCliffs` adds each
cliff to the surface before testing the next, and 57 of 400 adjacent orientation
pairs have overlapping boxes.

No new fixtures, no shipping behaviour change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmitdaFJxN9Wm8LkQu33kc
@wormeyman
wormeyman merged commit 90776d1 into main Aug 4, 2026
6 checks passed
@wormeyman
wormeyman deleted the crater-rng-unsupported branch August 4, 2026 05:39
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