islaApocalypse-v2/Tools/Scripts
beezm ea301f7a8c rivers/02: river promotion — unified ranking over both termini, and the count gate
Choose the river count against the terrain that actually exists. The M3 count of
3 was tuned on topography the southern stretch (D-065) and coastal fragmentation
(D-063) have since replaced, and TrunkCount/GiantCount/EndorheicMaxCount = 3 are
LEAN REPORTING CAPS, not a statement about this island.

UNIFIED RANKING. The reference promoted from two lists with two quotas — N sea
trunks, N endorheic giants — which encodes the assumption that reaching the sea
is what makes a drainage a river. This terrain does not satisfy it: 54-78% of
land drains inland across the gallery, 106-121 terminal basins per seed. So
selection is unified — every major drainage ranked by contributing-cell count in
ONE list, top N promoted, and the sea/endorheic split FALLS OUT. A quota would
have promoted small coastal drainages over far larger inland ones purely because
of where they end. Deliberate departure from the reference's structure (D-050
noted, approved in chat). Only SELECTION is unified: the per-terminus tag is
retained per river because rivers/03's routing branches on it, and Trunk/Giant
are untouched.

  The metric is the same unit on both sides, and that is now ASSERTED rather
  than argued: sea Acc and endorheic BasinInflow are both counts of contributing
  land cells on the same D8 field, and every land cell has exactly one
  destination, so Σ sea Acc + Σ BasinInflow + unrouted == LandCells exactly. The
  tool refuses to rank unless it holds, per seed. It held on all 8.

DrainageAnalysis.cs is NOT modified. The complete candidate set is re-derived
from state it already exposes (Dir/Acc/BasinId/BasinInflow/FullFilled); the
three internal per-basin values that are not exposed are exactly reconstructible
because terminal basins are reverted to the real surface while FullFilled keeps
the fill. Only REPORTING caps were raised, and only so the analysis's own
TraceStem produces a real upland course per promotable candidate.
EndorheicMinDepthM/MinAreaPx were left alone — they decide which depressions
BECOME terminal basins, i.e. they define the routing surface itself, and a count
chosen on a moved surface would be a count for terrain that does not exist.

TWO FINDINGS.

  1. THE TERRAIN HAS NO NATURAL COUNT. The knee (largest ratio between
     consecutive ranks) lands at rank 19/7/15/5/4/12/3/8 across the eight
     gallery seeds at ratios of 1.33-1.57x, with one uncorroborated 2.37x. A
     break that wanders across the whole plausible range at that strength is not
     a break — on a log axis the candidates fall on a near-straight line.
     N is a DESIGN choice, and the diagnostic says so instead of inventing one.

  2. THE ISLAND'S MAJOR RIVERS ARE INLAND RIVERS. Six of eight seeds have ZERO
     sea-reaching drainages in their top 8; the median at N=16 is one; one seed
     has none at 16. On the primary seed the largest sea drainage ranks 11th at
     736,088 px against 2,329,573 px for the largest endorheic — 3.2x. (That
     outlet is exactly batch 12's recorded top trunk, to the cell.)

A concern I raised and then CLOSED by measuring: MinOutletSeparationPx is a
plain Euclidean test with no notion of which landmass a coastline belongs to, so
on a fragmented archipelago it could suppress an island's only river. Measured:
0-6 cross-landmass suppressions per seed, and — decisively — the largest
suppressed above-floor outlet anywhere is 209,611 px against a smallest ladder
cutoff of 439,592 px, so ZERO suppressed outlets clear any rung on any seed. The
rule provably cannot have altered the ladder. Real but harmless; flagged for
rivers/03, not a blocker. The rule was NOT changed — it belongs to the analysis,
and moving it would move the candidate set the developer is being asked to judge.

Also found: the params are ABSOLUTE pixel counts, so this analysis is only valid
at the size they were tuned for. At 1024 nothing qualifies as endorheic (the
whole endorheic half cannot be exercised) and separation suppresses 15,043 of
15,048 outlets. The tool now refuses loudly to have a non-8192 run read as a
count decision. Flagged for rivers/03: these want to become scale-free fractions
as MinLandComponentFrac already is.

Giant.ProvisionalRoute is never rendered — the "comb" is rivers/03's to replace,
and drawing it would make a count judgment look like a finished network. The
plates draw the real erosion-carved upland stems. Endorheic rivers are marked at
where their stem POOLS, not at the basin's deepest cell: the analysis
distinguishes these deliberately and they sit up to 395 px apart, which drew
every stem detached from its own endpoint until it was fixed.

TASTE GATE: 8/12/16 are presented and nothing is decided. No count is chosen, no
default is set, and neither TerrainGenConfig nor DrainageAnalysis.Params changed.

-> XX_Human/output/rivers/02_promotion.report.md
-> batches/rivers/02_promotion/INDEX.md

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WhkXBQh2tDmcWKpXYcj8vj
2026-08-23 06:13:03 -04:00
..
CoastalFragment.cs chat2/09: coastal fragmentation — a perimeter-wide, band-limited noise, amplitude laddered at a fixed stretch 2026-08-22 07:09:27 -04:00
CoastalFragment.cs.uid chat2/09: coastal fragmentation — a perimeter-wide, band-limited noise, amplitude laddered at a fixed stretch 2026-08-22 07:09:27 -04:00
CoastalFragmentTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
CoastalFragmentTool.cs.uid chat2/09: coastal fragmentation — a perimeter-wide, band-limited noise, amplitude laddered at a fixed stretch 2026-08-22 07:09:27 -04:00
CurveBaselineTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
CurveContinuousTool.cs.uid Phase 2a: continuous grade — smooth the upper staircase, preserve the lowlands 2026-08-20 03:41:27 -04:00
DrainageRenderer.cs rivers/02: river promotion — unified ranking over both termini, and the count gate 2026-08-23 06:13:03 -04:00
DrainageRenderer.cs.uid chat2/12: drainage analysis (minimal-first) — the reference river plan ported, analysis only, on the eroded terrain 2026-08-22 20:51:51 -04:00
DrainageTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
DrainageTool.cs.uid chat2/12: drainage analysis (minimal-first) — the reference river plan ported, analysis only, on the eroded terrain 2026-08-22 20:51:51 -04:00
ErosionPass.cs chat2/11: hydraulic erosion — the faithful droplet pass on the locked shape, render-only, judged off vs on 2026-08-22 12:19:20 -04:00
ErosionPass.cs.uid chat2/11: hydraulic erosion — the faithful droplet pass on the locked shape, render-only, judged off vs on 2026-08-22 12:19:20 -04:00
ErosionTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
ErosionTool.cs.uid chat2/11: hydraulic erosion — the faithful droplet pass on the locked shape, render-only, judged off vs on 2026-08-22 12:19:20 -04:00
FragGalleryTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
FragGalleryTool.cs.uid chat2/10: frag_4 seed gallery — render-only, the 09 setting frozen across 2 anchors + 6 fresh seeds at 8192 2026-08-22 10:24:56 -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 chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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
OffshoreAnalysis.cs chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -04:00
OffshoreAnalysis.cs.uid chat2/05: offshore islands — rejoin the stub faithfully, then reshape to a guaranteed hybrid 2026-08-21 05:14:53 -04:00
OffshoreDiagnosis.cs chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -04:00
OffshoreDiagnosis.cs.uid chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -04:00
OffshoreIslandsTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
OffshoreIslandsTool.cs.uid chat2/05: offshore islands — rejoin the stub faithfully, then reshape to a guaranteed hybrid 2026-08-21 05:14:53 -04:00
OffshorePass.cs chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -04:00
OffshorePass.cs.uid chat2/05: offshore islands — rejoin the stub faithfully, then reshape to a guaranteed hybrid 2026-08-21 05:14:53 -04:00
OffshoreSettings.cs chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -04:00
OffshoreSettings.cs.uid chat2/05: offshore islands — rejoin the stub faithfully, then reshape to a guaranteed hybrid 2026-08-21 05:14:53 -04:00
Pass1Result.cs chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -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 chat2/11: hydraulic erosion — the faithful droplet pass on the locked shape, render-only, judged off vs on 2026-08-22 12:19:20 -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
RegionLabelingTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
RegionLabelingTool.cs.uid chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -04:00
RegionOverlayRenderer.cs chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -04:00
RegionOverlayRenderer.cs.uid chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -04:00
RegionPass.cs chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -04:00
RegionPass.cs.uid chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45: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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45: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
RiverCandidate.cs rivers/02: river promotion — unified ranking over both termini, and the count gate 2026-08-23 06:13:03 -04:00
RiverPromotionTool.cs rivers/02: river promotion — unified ranking over both termini, and the count gate 2026-08-23 06:13:03 -04:00
SeedGalleryTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
SeedGalleryTool.cs.uid chat2/04: the seed gallery — render-only, plus the terrain-curve-v1 checkpoint 2026-08-21 00:20:42 -04:00
ShadeRenderer.cs chat2/11: hydraulic erosion — the faithful droplet pass on the locked shape, render-only, judged off vs on 2026-08-22 12:19:20 -04:00
ShadeRenderer.cs.uid chat2/12: drainage analysis (minimal-first) — the reference river plan ported, analysis only, on the eroded terrain 2026-08-22 20:51:51 -04:00
Shaping.cs chat2/07: the region-labeling layer — label all land, tag by construction, tunable speck revert 2026-08-22 03:50:33 -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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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
SouthernStretch.cs chat2/08: southern stretch, EXPLORATION — the fragmentation knob space, diagnosed then laddered 2026-08-22 05:54:12 -04:00
SouthernStretch.cs.uid chat2/08: southern stretch, EXPLORATION — the fragmentation knob space, diagnosed then laddered 2026-08-22 05:54:12 -04:00
SouthernStretchTool.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -04:00
SouthernStretchTool.cs.uid chat2/08: southern stretch, EXPLORATION — the fragmentation knob space, diagnosed then laddered 2026-08-22 05:54:12 -04:00
TagOverlayRenderer.cs chat2/06: offshore islands — revert the forced floor, tune the organic layer for coverage 2026-08-21 06:22:54 -04:00
TagOverlayRenderer.cs.uid chat2/05: offshore islands — rejoin the stub faithfully, then reshape to a guaranteed hybrid 2026-08-21 05:14:53 -04:00
TerrainGenConfig.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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 rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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
TerrainShapeV1.cs rivers/01: re-baseline — bare defaults reproduce terrain-shape-v1 (calibration pinned family-off); retire stale oracles; namespace batch root by chat 2026-08-23 04:45:10 -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 chat2/09: coastal fragmentation — a perimeter-wide, band-limited noise, amplitude laddered at a fixed stretch 2026-08-22 07:09:27 -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