test(cliffs): sweep cliff_smoothing IN THE GAME - it is NOT the residual (#18) - #80
Merged
Merged
Conversation
…ual (#18) Refutes this morning's conclusion, and refutes it with one setting. `cliff_smoothing` is the one code path that runs on Vulcanus and not on Nauvis, so it was the natural home for a residual Nauvis does not have. It was swept exhaustively inside the port earlier today - knot span, clamp, lattice anchor, blend strength, per-axis, interpolation family - and every parameter came back at a sharp optimum on the shipping value. That was read as "the model is right, so the fault is somewhere inside it". Wrong. `cliff_smoothing` is a map_gen_settings.cliff_settings field, so it can be OVERRIDDEN on the created surface instead of accepted as the planet ships it, which turns one data point into a family. `s = 0` is decisive: with smoothing off the cliff elevation IS the raw field - measured accurate to a max of 4.8e-2 - fed to the rule that reproduces Nauvis 334/334. A port whose only defect were the smoothing would be EXACT there. Region [0,0], captured against the 2.1.12 binary: s=0 game 352 ours 432 matched 289 wrong 83 = 28.7% s=0.5 game 315 ours 374 matched 267 wrong 73 = 27.3% s=1 game 283 ours 335 matched 228 wrong 68 = 29.8% The error is FLAT in s. Turning the suspect off does not move it. The general lesson, which this repo keeps re-learning: a sweep inside the port can only rank models within the family the port already implements, so a sharp optimum says "best in family", never "correct". The whole family was wrong here and no amount of internal sweeping could have said so. When a suspect is reachable as a game SETTING, vary it in the game - that is a one-run experiment which indicts or clears it without needing to be right about the mechanism. Mechanics: - `sampleCliffEntitiesFull` returns the cliff_settings the SURFACE reports back, not what was written. That is what makes the sweep non-vacuous: an override that silently failed to apply is otherwise indistinguishable from a setting that does not matter, which is the exact conclusion being drawn. `sampleCliffEntities` keeps its signature and delegates. - Those dumped settings are also the only direct evidence outside the .lua data files that Vulcanus generates with cliff_elevation_0 = 70, cliff_elevation_interval = 120, cliff_smoothing = 1. - The s=1 arm reproduces the 283 cliffs the default-preset fixture already holds for that region, tying the new fixture to the existing ones. Also cleared, against the new s=0 fixture: the cliffiness gate. `avg > 0.5` 28.7%, requiring BOTH corners 37.1%, `max` arithmetically identical to `avg` because cliffiness_basic is confined to [0.5, 1.5]; the threshold bottoms exactly at 0.5, and `min` is refuted outright by Nauvis (334/334 -> 295 placed / 32 wrong). Notes record one measurement trap met on the way: scoring edges over ALL the game's cells rather than the cells both place reports ~57% agreement and ~260 "sign flips" - an artifact of the denominator, caught by the rate being flat in s. DOES NOT FIX #18. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GRx1CU29RKLsRuUAErEDRB
CI's verify failed on this branch with
FAIL test/vulcanusRender.spec.ts > composites Vulcanus rocks and cliffs
ON TOP of resource patches in view:'all'
Error: Test timed out in 15000ms.
Not a hang and not a logic failure. That test measures 3001ms locally; the
4-core runner is ~3x slower and this branch's new spec adds suite load, which
was enough to tip a 5x margin.
The three `}, 15000)` in this file were the ONLY annotations in the suite
below `vite.config.ts`'s 30s `testTimeout`. That default was raised to ~3x the
slowest measured case precisely to absorb runner variance, so an annotation
under it opts the test out of the margin it exists to provide - the failure
mode the default was introduced to prevent, reintroduced by hand. Removing
them leaves ~10x the measured cost and still fails a real hang far inside the
job's 15-minute cap.
Retry was NOT used: nothing here is nondeterministic, so a retry would hide a
genuine regression instead of a slow machine.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GRx1CU29RKLsRuUAErEDRB
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.
Refutes the conclusion of #79, which merged this morning. Same day, one setting.
cliff_smoothingis the only code path that runs on Vulcanus and not on Nauvis, so it was the natural home for a residual Nauvis does not have. #79 swept it exhaustively inside the port - knot span, clamp, lattice anchor, blend strength, per-axis, interpolation family - and every parameter came back at a sharp optimum on the shipping value. That was read as "the model is right, so the fault is somewhere inside it."Wrong.
cliff_smoothingis amap_gen_settings.cliff_settingsfield, so it can be overridden on the created surface rather than accepted as the planet ships it - which turns one data point into a family.s = 0is decisive: with smoothing off the cliff elevation is the raw field (accurate to a max of 4.8e-2) fed to the rule that reproduces Nauvis 334/334. A port whose only defect were the smoothing would be exact there.Region
[0,0], captured against the 2.1.12 binary:cliff_smoothingThe error is flat in
s. Turning the suspect off does not move it.The lesson
A sweep inside the port can only rank models within the family the port already implements, so a sharp optimum says "best in family", never "correct". The whole family was wrong here and no amount of internal sweeping could have said so. When a suspect is reachable as a game setting, vary it in the game - a one-run experiment that indicts or clears it without needing to be right about the mechanism.
Mechanics
sampleCliffEntitiesFullreturns thecliff_settingsthe surface reports back, not what was written. That is what makes the sweep non-vacuous: an override that silently failed to apply is otherwise indistinguishable from a setting that does not matter - the exact conclusion being drawn.sampleCliffEntitieskeeps its signature and delegates..luafiles that Vulcanus generates withcliff_elevation_0 = 70,cliff_elevation_interval = 120,cliff_smoothing = 1.s = 1arm reproduces the 283 cliffs the default-preset fixture already holds for that region, tying the new fixture to the existing ones.Also cleared
The cliffiness gate, against the new
s = 0fixture:avg > 0.528.7%, requiring BOTH corners 37.1%,maxarithmetically identical toavgbecausecliffiness_basicis confined to[0.5, 1.5]. The threshold bottoms exactly at 0.5, andminis refuted outright by Nauvis (334/334 → 295 placed / 32 wrong).A trap recorded in the notes
Scoring edges over all the game's cells rather than the cells both place reports ~57% agreement and ~260 "sign flips" at every smoothing value - an artifact of the wider denominator, caught by the rate being flat in
s.Does not fix #18.
pnpm run verify: 307 files clean, 1293 passed / 3 skipped, preview 12 passed.🤖 Generated with Claude Code
https://claude.ai/code/session_01GRx1CU29RKLsRuUAErEDRB