Ports the ROUTING PORTION of the reference's RiverCarvePass (RouteToOcean, the
routed/lake-ender sort, SmoothCourse). NOT CarveRiver (bed stamp) and NOT
AddSteppedWater (water bodies) — those are later tasks.
RED LINE: no height mutated, no water filled, nothing carved. Asserted per seed
by an FNV digest of both height fields before/after routing.
- RiverRouting: deterministic LOWGROUND Dijkstra, uphill penalised so a route may
cross the basin rim, empty-list-on-no-path. Effective == declared constants
(verified: private const, no ConfigManager key, no [Export] in the reference).
- The sort is the REFERENCE's — Kind = basinHasLake ? lake-ender : routed. The
task's stated "a path exists -> routed" cannot discriminate: on an 8-connected
grid a path to the ocean always exists, confirmed empirically (43/43 probes
reached). The ocean route is probed for every giant anyway, so the missing
affordability threshold is reported as a number rather than guessed.
- RegionLabeling.SignificantWaterMask: interim substitute for v2's missing
water-bodies table — 8-connected classify-water components >= 20,000 px.
- RiverCandidates: the candidate enumeration extracted out of RiverPromotionTool
so routing ranks the identical set the count gate was judged on. Behaviour
neutral — rivers/02b's twelve plates are byte-identical across the extraction.
- DrainageRenderer.RoutedMix: three classes, with each routed river's added
lowland reach and the rim it crossed drawn distinctly from its natural stem.
Taste gate: no count, no K, no style, no default set.