islaApocalypse-v2/Tools/Scripts
beezm 639dc5f5a9 Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess
chat2/02 dissolved the terraces and lost two thirds of the mountain with them, then
concluded the loss was structural and needed a Phase-1 noise change. That conclusion
was wrong, and this commit is the refutation.

A monotone curve is a free reparametrization: it may be gentle in one place and steep
in another, and can lift bottom-heavy input into a substantial massif without ever
going flat. The area above a height is set by where the percentile->height mapping
crosses it, and that mapping is entirely ours to choose. The 02 sweep that "proved"
the loss structural varied climbFeather, which shapes the JOIN, not the mass
distribution — the wrong knob, and too strong a conclusion drawn from it.

Core/ClimbCalibration — the climb's control points are now MEASURED off the staircase
instead of invented from shape knobs. For p in {10,30,50,70,85,95} of above-ceiling
land, take that percentile's raw height and its staircase output height; PCHIP through
the pairs. That reproduces the staircase's elevation envelope, so the mountain mass
returns, while MinNormalizedSecant floors every grade so the flat bench and plateau
interiors become slope. The floor bites on exactly one segment — the plateau — which
is precisely where the staircase was flat.

ContinuousCurve.BuildCalibrated joins it to the same pinned lowland handover, the same
C1 join and the same per-seed spikeMax. The 02 analytic path survives unchanged as the
"before" contrast, and deliberately keeps its strictly-increasing-secant rule: a
calibrated curve is WAVY by design, so convexity is the wrong invariant for it and the
secant floor is the right one.

peakSharpness replaces summitDrama and fixes its bad trade. Drama steepened the peak by
pulling the summit ONSET down, dragging the whole massif with it (p99 199 -> 121 m).
Sharpness reshapes only above the last measured percentile, leaving that height fixed,
so peak and massif are independent: raising it leaves p90, >100 m and >220 m untouched
and only moves land within the summit.

Measured, both seeds, 2048:

  variant                >100 m   >220 m    p90
  staircase (target)     16.05%    4.53%  127.4 m
  continuous_02default    4.80%    0.63%   58.4 m
  continuous_restored    14.25%    3.45%  123.2 m
  continuous_bigger      19.70%    5.80%  163.5 m

Oracle all hard checks pass, including (a2) staircase still bit-identical to task 01's
dump and (d) lowlands bit-identical across every calibrated variant. New (g) reports
land above 100/220 m per variant and is deliberately NOT gated — it is a taste target
the developer tunes, and gating it would make mountainLift unusable. What it must never
do is stay silent, which is how 02 lost the mountain unnoticed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DCWNaDZPfTiAy3meGNGgqt
2026-08-20 04:14:47 -04:00
..
CurveBaselineTool.cs Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
CurveBaselineTool.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
CurveContinuousTool.cs Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
CurveContinuousTool.cs.uid Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
GrayscaleRenderer.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
GrayscaleRenderer.cs.uid Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
HeightField.cs Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
HeightField.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
Hillshade.cs Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
Hillshade.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
HistogramRenderer.cs Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
HistogramRenderer.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
IslandFalloff.cs Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
IslandFalloff.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
LandHistogram.cs Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
LandHistogram.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
LegendRenderer.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
LegendRenderer.cs.uid Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
LookConfig.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
LookConfig.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
MountainRestoreTool.cs Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
MountainRestoreTool.cs.uid Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
NoiseDefaultsProbe.cs Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
NoiseDefaultsProbe.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
Pass1Result.cs Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
Pass1Result.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
Pass2Result.cs Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
Pass2Result.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
ReliefPalette.cs Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
ReliefPalette.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
ReliefRenderer.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
ReliefRenderer.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
ReliefRenderTool.cs Fix the ISLA_SOURCE default the batch rename broke 2026-08-19 23:38:10 -04:00
ReliefRenderTool.cs.uid Phase 1: shaded relief and the Hispaniola palette — the grin gate 2026-08-19 21:58:44 -04:00
ReviewBatchTool.cs Fix the ISLA_SOURCE default the batch rename broke 2026-08-19 23:38:10 -04:00
ReviewBatchTool.cs.uid Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
Shaping.cs Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
Shaping.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
ShapingOracle.cs Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
ShapingOracle.cs.uid Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
TerrainGenConfig.cs Phase 2a: restore the mountain — calibrate the climb to the staircase, not to a guess 2026-08-20 04:14:47 -04:00
TerrainGenConfig.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
TerrainGenTool.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
TerrainGenTool.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
TerrainNoise.cs Phase 2a: the faithful redistribution curve, re-measured against v2's own output 2026-08-20 01:38:10 -04:00
TerrainNoise.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
TinyFont.cs Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
TinyFont.cs.uid Phase 1 review: raw grayscale, the wide gradient as hero, fixed batch naming 2026-08-19 22:55:53 -04:00
Topography.cs Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
Topography.cs.uid Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
UserDirProbe.cs Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
UserDirProbe.cs.uid Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00