2026-08-18
Gap: River junctions had inconsistent water levels
The previous build had each river carve its own copy of ground, with a later merge step reconciling differences inconsistently. This work replaced it with one network-wide solve, tracing several unrelated defects to a single cause.
Gap: River junctions had inconsistent water levels
Each river cut its terrain independently under the old system; where cuts overlapped at a junction, the merge step picked a winner inconsistently, producing stair-step drops, mismatched confluence heights, and carved floors wandering into neighbouring terrain.
The replacement solves the river network in three stages. The first solves every junction's water level as one system across all 164 rivers. The second carves the terrain once, assigning each of 215,726 cells to its nearest river centreline. The third lays water at the solved levels for 164 qualifying rivers, the first time every river completes in one build.
Gap: River cuts extended past their own endpoints
Each river's cut previously extended past its endpoints: a downhill river's deepest point near its lower end bled into the next river's terrain, producing channels up to 0.8 metres deeper than designed, water sitting above the true floor. Assigning each cell to its nearest centreline removes the overshoot.
Gap: Twelve rivers had been excluded despite already-carved valleys
Twelve rivers had been excluded from earlier builds on failed validation, though their carved valleys, dry, existed. Under the network-wide solve, all twelve now clear validation, the solver resolving junctions as one connected system.
Gap: A stricter validation check is blocking the final merge
A check refusing any cell where water sits more than a centimetre above carved ground is blocking this work. Part is geometric: the grid's 4-metre resolution cannot represent a centimetre-tight surface at steep transitions. Part is a defect: a handful of coastal sites with steep slopes are hard to carve to that tolerance. Deciding the tolerance, and whether it needs a different form, is the next task; the diagnostic build is already playable.