feat(simulation): T-1170 A1 — river_downstream pointers; pole-edge drains are not mouths
RiverNetwork gains river_downstream: Vec<u8> (serde-default, parallel to river_cells): values 0-7 index drainage::D8 (row,col deltas, N/S/E/ W/NE/NW/SE/SW order); sentinels MOUTH=8, EDGE_DRAIN=9, TERMINAL=10 (reserved — the future endorheic-basin hook, Ruling 2c/7b). Captured in extract_river_network's existing pass (fdir already in scope, one map, no new grid pass). Pole-edge D8 exits reclassify as EDGE_DRAIN and leave the mouths list (Ruling 3f); flat-peak interior no-outflow cells get EDGE_DRAIN too. cascade_golden deliberately re-pinned: GJ1c mouths 19->3 — sixteen were pole-edge artifacts, exactly Jeroen's 'circles with no sea in sight'; river_cells/attractors counts unchanged (pure reclassification + additive field). 21/21 drainage tests incl. mouth-sentinel/mouths-list bijection on the real fixture and a synthetic pole-draining-grid case. Tickets: T-1170 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,18 @@
|
||||
//! Golden captured on x86_64. The downsample and sub-biome cost use f32, so a
|
||||
//! different architecture could in principle round differently — regenerate
|
||||
//! per-arch if CI ever moves off x86_64.
|
||||
//!
|
||||
//! **Deliberate re-pin (T-1170 Ruling 2a/2c/3f, A1):** `RiverNetwork` gained
|
||||
//! an additive `river_downstream: Vec<u8>` field (per-`river_cells`-entry D8
|
||||
//! downstream pointer + MOUTH/EDGE_DRAIN sentinel), and `extract_river_network`
|
||||
//! stopped classifying pole-edge D8 exits (flow running off the grid's
|
||||
//! top/bottom row) as `mouths` — they are grid artifacts, not river-meets-sea
|
||||
//! events (Ruling 3f, Jeroen's capture question). On this fixture (GJ1c,
|
||||
//! 256×128 downsample) that drops `mouths` from 19 to 3: 16 of the 19 were
|
||||
//! pole-edge exits (now `RIVER_DOWNSTREAM_EDGE_DRAIN`), leaving the 3 real
|
||||
//! sea-adjacent mouths (`RIVER_DOWNSTREAM_MOUTH`). `river_cells`/`attractors`
|
||||
//! counts are unchanged (93/256) — this is a pure re-classification + one new
|
||||
//! additive field, not a drainage-algorithm change.
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user