test(cliffs): the field is RIGHT - the fine sweep refutes #106's conclusion (#84) - #107
Merged
Merged
Conversation
…lusion (#84) #106 concluded, from the band oracle, that the port's grid-4 cliff-elevation field is wrong at [1500,1500]'s high bands, and handed over "it lives in the mountains branch of vulcanus_elev". This sweep was run to quantify that. It refutes it. Sweeping `cliff_elevation_0` across [700,900] step 5 under the same collapsed rule turns each placed cell's orientation into one-sided constraints on its corners - a crossing at L says "this corner > L, that one < L" - so 41 levels bracket a corner to the step. Only POSITIVE observations are used, which is what makes it sound: an absent cliff is ambiguous (the lava/ore rejections drop whole cells) but a present crossing is not, because `fixImpossibleCellsSweep` only ever writes 0 and the rejections never touch the edge registers. - **996 of 998** two-sided brackets contain the port's value, mean bracket width **5.72**, in the worst region. - The other two miss by **6.7e-4** - the port sits ON a swept level, where the strict test yields no observation. The open endpoint, not an error. - At the disputed-edge corners: **26 of 26** bracketed ones contain it. So the field is exonerated by direct measurement, and the lattice is re-confirmed on the way: a wrong sampling site could not put 996 of 998 values inside 5-unit brackets. **Where #106 went wrong.** It established what the residual is NOT (not smoothing, not the gate, not the repair, not the rejections, not a boundary tie) and treated the field as the last man standing - but it never measured the game's field, only that OUR value sits a median 18.8 from the level. "Everything else is excluded, so it must be X" is only as good as the list, and the list was not closed. The lower bound was real; the attribution was not. Same shape as #88. What is left: across all 41 levels the game's code is the port's **minus edges** in **1231 of 1235** disputed cells. The lead is the coverage number - only 26 of 72 disputed corner slots get a bracket, and 661 of 1,659 corners in range get none, because the game emits nothing beside them. One chunk at L=790 shows it directly: cell 1634,1706.5 keeps its TIGHT edge (margin 5.9) and loses its WIDE one (margin 69), and the cell sharing that wide edge is absent from the game entirely. That points at the emission/rejection path - stated as a hypothesis, with the control named. Determinism check: the two fixtures overlap at L=790 and agree 494/494. Vacuity: shifting the field by 10 fails 3 of the spec's 5 tests. Item of #84; the issue stays open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011DckiyMmb4zDPBV8NSyxTg
This was referenced Aug 3, 2026
wormeyman
added a commit
that referenced
this pull request
Aug 3, 2026
) (#108) #107 handed over one untested hypothesis with its control named: "disputed edges sit adjacent to rejected cells above the base rate of all crossing edges". Run, it is not an enrichment over a base rate - it is a dichotomy, and it refutes the STAGE at which the port applies both Vulcanus cliff rejections. Of the 1235 edges the port has and the game does not, **1233** sit against a cell the game did not emit. Of the 36,103 in-region edges both sides agree on, **0** do. A cell's edge register is the same array slot as its neighbour's (#103), so the game's absences take their crossings with them. **The refutation is structural, not a score.** A pure post-filter makes a falsifiable prediction: when cell N is rejected, its surviving neighbour C still holds the shared crossing and is emitted carrying it. Counted with the port's own rejection predicate over the fine sweep's 41 levels, that should happen **1,662 times**. The game does it **0 times**. The vacuity arm is the identical counter reading the port's own post-filter output, where it fires on all 1,662 - so the zero is a property of the game's cliffs, not a dead branch. `tryToAddCliff` really does ignore `wouldCollide`'s return value; the #71/#73 disassembly reading was not misread. What is refuted is the conclusion drawn from it - "and therefore no effect on the neighbouring cells". Both doc comments that asserted it are corrected rather than left standing. `rejectAtCrossingStage` zeroes a rejected cell's four edge registers after the repair sweep, before any code is read. Collapsed rule: wrong orientations **1235 -> 693**, surplus 1366 -> 1200, matched 18130 -> 18654. At the SHIPPING settings across the three entity regions: wrong orientations **33 -> 21**, precision 0.9839 -> 0.9858, and the matched set IDENTICAL at 1525 - it removes wrong edges and costs no recall. Not free: 18 more of the game's cells go missing under the collapsed rule, because an edge taken off a survivor can leave its code non-placing. Reported rather than buried. Nauvis is byte-identical either way (it already matched 1.0000 both directions), so this is not a regression risk there and not corroboration from there either. Tiling stays byte-identical - the zeroing runs over the whole chunk, including cells outside the query box - and `tiledEquality.spec.ts`'s Vulcanus cliff seam and chunk-boundary cases verify it rather than the comment asserting it. What is left is the PREDICATE, not the stage: 693 wrong and 1200 surplus survive, and the sweep cannot measure the field where the game emits nothing at any level. Item of #84; the issue stays open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ExK3ASs5i2KMm9NwWqnZuj
wormeyman
added a commit
that referenced
this pull request
Aug 3, 2026
…ot worth capturing (#84) (#109) #108's handoff proposed ~40 more headless captures - "a sweep well outside [700,900] is the measurement that would close the gap". Don't capture it. `oracle-vulcanus-cliff-bands`'s constant1 arm already covers the SAME region under the SAME collapsed rule at 70..1150, so its observations fold straight into the fine sweep's and answer the question for free. **The field's exoneration is much wider than #107 stated.** That PR checked 998 two-sided brackets and left the ONE-SIDED bounds unused - but those falsify just as well, since "this corner is above 910" is refuted by a port value of 800. **1,711 one-sided bounds, 0 contradicting the port.** **The silence is not the field running out of range.** Widening the window 5x rescues exactly **1** of the 681 corners the fine sweep left unbracketed. 294 corners whose port value sits in [700,900] get no constraint of any kind across all 50 levels, while the port asserts **8,906** crossings on their edges over the same levels - and there is not one of the 294 where the port is silent too. A field error would have to move those corners outside [70,1150] entirely AND leave all 1,711 one-sided bounds satisfied. **Two suppressor candidates refuted, each against a base rate:** | population | n | rock in box | default gate shut | | --- | --- | --- | --- | | matched (base) | 18654 | 7.03% | 46.0% | | surplus | 1200 | 10.58% | 51.4% | | wrong orientation | 693 | 5.05% | 44.9% | Rocks - `wouldCollide`'s unported ENTITY half, the obvious candidate - do not survive: 1.5x on the surplus is weak and the wrong-orientation cells are ANTI-correlated at 5.05% against 7.03%. A suppressor cannot be anti-correlated with half the defect it is supposed to cause. **The gate row is worth more than the refutation it came from.** It was a confound check, not a candidate: if routing `cliffiness` at a literal 1 had silently not taken, the whole residual would just be the gate. The game emits **8,588** cells the default gate would have blocked outright, so the routing genuinely opened it - the collapsed-rule oracle that #106, #107 and #108 all rest on is not confounded on this axis, which had never been checked. Excluded for the suppression now: the field (twice over), rocks, the cliffiness gate, the smoothing, the repair, and since #108 the STAGE. What remains is WHICH cells the game refuses, and the list is stated as open - #106's trap is available here, so the next candidate needs a positive measurement rather than promotion by elimination. Item of #84; the issue stays open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ExK3ASs5i2KMm9NwWqnZuj
wormeyman
added a commit
that referenced
this pull request
Aug 3, 2026
#115 handed over two threads on the far ten and named the first unmeasured: `applyCliffs` assumes destruction, but a strict superset says nothing about whether the game's crossing field emitted those cells at all. It is decidable from a fixture already on disk, because the two hypotheses leave different marks on the NEIGHBOURS. `Cliff::onDestroy` trims a connected neighbour's facing end unconditionally; a cell that was never queued only costs its neighbour that end if `updateConnections` runs on it, and that is gated on the neighbour sitting on its chunk's outer ring. So a disputed cell with a non-border neighbour the game KEPT is settled by the game's own orientation. - `1546,1550.5` and `1746,1538.5` are decidable and both say DESTROYED, one in each of the far group's two multi-cell clusters. Across all 225 cells the game destroys, the never-queued signature appears ZERO times. - The counterfactual is what makes that more than reading a table: removing either from the QUEUE contradicts the game at its neighbour (wrong 1 each, 2 together), while removing four far cells with no decidable neighbour changes nothing. - #114's `1531 of 1531` is informative for only 14 of the 225 destructions and VACUOUS for the other 211. Those 14 are exactly #114's 14 no-cascade rewrites, cell for cell - two independent routes to the same set. - The verdict is CONDITIONAL on the chunk-border gate, which `cliffConnections.spec.ts` records as unscored and which has been inert until now. Switch it off and both counterfactuals stop disagreeing with the game. Planting `onChunkBorder` returning true fails 7 of this file's 10 tests. If the gate was misread those cells revert to UNDECIDABLE, not to never-queued. So the search stays on the unmodelled half of `Surface::wouldCollide` and not on the crossing field, which #107 already exonerated once. Measurement only - nothing shipping changed; recall 0.9961, precision 0.9858. Claude-Session: https://claude.ai/code/session_015jeznBmWiZywUc7cBw9xFU Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#106 was wrong about the attribution, and this corrects it. That PR concluded the port's grid-4 cliff-elevation field is wrong at
[1500,1500]'s high bands and handed over "it lives in the mountains branch ofvulcanus_elev". The fine sweep was run to quantify that. It refutes it.The measurement
Sweeping
cliff_elevation_0across[700,900]step 5 under the same collapsed rule turns each placed cell's orientation into one-sided constraints on its corners - a crossing atLsays "this corner > L, that one < L", and the sign says which. 41 levels bracket a corner to the step.Only positive observations are used, which is what makes it sound: an absent cliff is ambiguous (the lava/ore rejections drop whole cells) but a present crossing is not, because
fixImpossibleCellsSweeponly ever writes0- it can delete a crossing, never invent one - and the rejections never touch the edge registers.The two misses are the port sitting on a swept level, where
crossesCliff's strictdA < 0 && dB > 0yields no crossing and so no observation - the bracket's open endpoint, not an error. At 4e-4 of a 5-unit bracket there is no room for it to be anything else.The field is exonerated by direct measurement, and the
(i*4, j*4)lattice is re-confirmed on the way: a wrong sampling site could not put 996 of 998 values inside 5-unit brackets.Where #106 went wrong
It established what the residual is NOT - not smoothing, not the gate, not the repair, not the rejections, not a boundary tie - and then treated the field as the last man standing. But it never measured the game's field; it measured that OUR value sits a median 18.8 from the level at the disputed edges, which is a statement about our field. "Everything else is excluded, so it must be X" is only as good as the list, and the list was not closed. The lower bound was real; the attribution was not. Same shape as #88, where the best-scoring model was the wrong one.
What is actually left
Across all 41 levels the game's cell code is the port's with edges removed in 1231 of 1235 disputed cells - the port finds crossings the game does not, essentially never the reverse.
The lead is the coverage number: only 26 of 72 disputed corner slots get a two-sided bracket, and 661 of the 1,659 corners whose value lies in
[700,900]get none - a corner goes unbracketed when the game emits no entity beside it at any level, which is what the rejections do to whole neighbourhoods. One chunk atL=790shows it directly: cell1634,1706.5keeps its tight edge (714.4 → 795.9, margin 5.9) and loses its wide one (721.0 → 875.4, margin 69), and the cell sharing that wide edge is absent from the game entirely.That points at the emission/rejection path rather than the field. Stated as a hypothesis from one chunk plus coverage statistics, with the control named: whether disputed edges sit adjacent to rejected cells above the base rate of all crossing edges.
Determinism: the two fixtures overlap at L=790 and agree 494/494.
Vacuity: shifting the field by 10 fails 3 of the spec's 5 tests.
Item of #84; the issue stays open.
🤖 Generated with Claude Code
https://claude.ai/code/session_011DckiyMmb4zDPBV8NSyxTg