Threads each Overflow basin resolved outlet_path into RiverNetwork as real D8 downstream continuations (extend_river_network_with_basin_outlets in hydrology_equilibrium.rs): an overflow lake exit river appears in served courses; an endorheic basin gains nothing — the ruled zero-bit cue (D-227 amendment (4)) is outflow-course PRESENCE. Additive per T-1170 Ruling 7b: Sea targets end at RIVER_DOWNSTREAM_MOUTH with a seaward entry, Basin/OpenSpillway at RIVER_DOWNSTREAM_EDGE_DRAIN; no wire migration, no new zone, no endorheic bit.
Key properties
Wired in run_layer1_with_moisture strictly AFTER attractor extraction — outlet cells never perturb settlement placement (dedicated test).
Edge identity = the existing pack_cell_id (row,col) convention; determinism proven by three independent double-solve byte-identity tests (basins walked in fixed label order, Dijkstra came-chain reconstruction, hash-free direction table).
Known scope boundary, documented in-code: outlet cells carry river_class 0 (stream); catchment-scaled outlet classification is a named follow-up.
Verification
13 new tests (overflow course appears end-to-end incl. build_edges survival; endorheic positive-absence; TERMINAL no-op safety; determinism x3; dedup; D8 table incl. antimeridian wrap). Goldens: cascade_layer1.json re-pinned (third deliberate re-pin, documented in cascade_golden.rs — river_cells 93->143 on GJ1c, append-only prefix byte-identical; 51/53 real basins are Overflow with short OpenSpillway stubs, the honest dominant pattern). window_derivation_golden + river_course_golden verified structurally unreachable, unchanged. Full workspace suite green; gate green on push.
What the map now shows
Drains-vs-closed is mechanically readable: overflow lakes have an exit course at their spill point, endorheic lakes have none. Visual styling of short spillway stubs is a client-side question noted for the T-1182+ line.
## Summary
Threads each Overflow basin resolved outlet_path into RiverNetwork as real D8 downstream continuations (extend_river_network_with_basin_outlets in hydrology_equilibrium.rs): an overflow lake exit river appears in served courses; an endorheic basin gains nothing — the ruled zero-bit cue (D-227 amendment (4)) is outflow-course PRESENCE. Additive per T-1170 Ruling 7b: Sea targets end at RIVER_DOWNSTREAM_MOUTH with a seaward entry, Basin/OpenSpillway at RIVER_DOWNSTREAM_EDGE_DRAIN; no wire migration, no new zone, no endorheic bit.
## Key properties
- Wired in run_layer1_with_moisture strictly AFTER attractor extraction — outlet cells never perturb settlement placement (dedicated test).
- Edge identity = the existing pack_cell_id (row,col) convention; determinism proven by three independent double-solve byte-identity tests (basins walked in fixed label order, Dijkstra came-chain reconstruction, hash-free direction table).
- Known scope boundary, documented in-code: outlet cells carry river_class 0 (stream); catchment-scaled outlet classification is a named follow-up.
## Verification
13 new tests (overflow course appears end-to-end incl. build_edges survival; endorheic positive-absence; TERMINAL no-op safety; determinism x3; dedup; D8 table incl. antimeridian wrap). Goldens: cascade_layer1.json re-pinned (third deliberate re-pin, documented in cascade_golden.rs — river_cells 93->143 on GJ1c, append-only prefix byte-identical; 51/53 real basins are Overflow with short OpenSpillway stubs, the honest dominant pattern). window_derivation_golden + river_course_golden verified structurally unreachable, unchanged. Full workspace suite green; gate green on push.
## What the map now shows
Drains-vs-closed is mechanically readable: overflow lakes have an exit course at their spill point, endorheic lakes have none. Visual styling of short spillway stubs is a client-side question noted for the T-1182+ line.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
extend_river_network_with_basin_outlets threads each Overflow basin's
resolved outlet_path into RiverNetwork as real D8 downstream
continuations (spill cell skipped as lake interior; Sea target ends at
RIVER_DOWNSTREAM_MOUTH with a seaward entry, Basin/OpenSpillway at
RIVER_DOWNSTREAM_EDGE_DRAIN); Endorheic basins contribute nothing —
the ruled zero-bit cue is outflow-course PRESENCE (D-227 amendment
(4)): a lake with no outgoing course reads as closed. Additive per
T-1170 Ruling 7b; no wire migration, no new zone, no endorheic bit.
Wired in run_layer1_with_moisture strictly AFTER attractor extraction
so outlet cells never perturb settlement placement (tested). Edge
identity is the existing pack_cell_id (row,col) convention; wiring
determinism proven by three independent double-solve byte-identity
tests. 13 new tests across hydrology_equilibrium and layer1.
Goldens: cascade_layer1.json re-pinned (third deliberate re-pin,
documented in cascade_golden.rs) — river_cells 93->143 on GJ1c,
append-only prefix byte-identical, 51/53 real basins Overflow with
short OpenSpillway stubs (the dominant honest pattern: most basins
spill onto adjacent open ground, not a long channel to sea).
window_derivation_golden and river_course_golden verified structurally
unreachable and unchanged.
Known scope boundary (documented in-code): outlet cells carry
river_class 0 (stream) — outlet-channel classification/meander width
scaled to catchment is a named follow-up, not guessed at here.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hoshe finding 1 (live-firing on GJ1c: 2 spill collisions + 1 i==1
collision among 51 Overflow basins): adjacency adjudicated
INSUFFICIENT for the cue — a course's visible anchor is its upstream
cell, so nothing pre-existing belongs to the lake unless wired. The
spill cell (outlet_path[0]) now always gets a real entry: appended
when new, OVERWRITTEN IN PLACE when it collided with an existing river
cell (append would duplicate edge_id; the hydrology solve is the more
authoritative downstream answer for that cell than flat D8
extraction). Interior stop-on-collision stays, now provably safe.
Internal lookup is a dense Vec<Option<usize>>, never iterated (D-010).
Two non-vacuous regression tests prove the cue through build_edges
output; end-to-end on GJ1c all 51 Overflow basins now build a readable
edge (was: one silently missing).
Hoshe finding 2: both doc sites now state the fallback-vs-production
split explicitly (fallback moisture 55: 51/2; production GJ1c moisture
80: 53/53 all-Overflow) — the golden's Endorheic pair is a
fallback-constant artifact, not a fact about GJ1c.
Golden re-regenerated: river_cells 143->192, position-identity diff
purely additive (zero removed, one legitimate in-place overwrite at
the spill-collision cell); attractors/basins/mouths/confluences
byte-identical. Suites: hydrology 26/26, full lib 1943, cascade_golden
1/1, window goldens + believability untouched green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
D-227 amendment (4) conformance verified: no endorheic bit/flag/zone anywhere, MorphologyZone untouched, zero new wire fields (the extension only appends into the four pre-existing parallel river arrays — golden-verified: mouths/confluences/attractors/basins byte-identical). The one ticket-text divergence — Endorheic basins skipped outright instead of mapped to TERMINAL — was explicitly adjudicated as the BETTER implementation: behaviorally identical to every consumer (build_edges no-ops TERMINAL anyway), cheaper, and semantically right (a lake-interior cell's identity belongs to MorphologyZone::Lake, not the river-cell vocabulary); the golden confirms zero TERMINAL sentinels in production data. T-1170 invariants unaffected (extension is upstream of course invention; outlet cells indistinguishable from native D8 cells by invention time); the after-attractors ordering verified consumer-by-consumer; D-010 determinism sound (data-derived walk order, back-pointer reconstruction, table lookup that panics rather than misbehaves). No comments.
Hoshe (Code Quality): REQUEST_CHANGES (2 findings — both fixed, see author response)
Core verified correct under direct inspection: D8 wraparound table hand-traced, no ordering leak into attractors/survey-basin-dirs/road-graph/riparian consumers, golden append-only claim independently re-derived.
#
File
Issue
1
hydrology_equilibrium.rs (outlet loop)
i==1 collision silent drop: an Overflow basin whose first outlet cell collides with a pre-existing river cell contributes ZERO cells — indistinguishable from Endorheic on the map, breaking the exact cue this ticket delivers. Dedup test checked array parallelism, not chain continuity.
The 51/53 Overflow ratio is a fallback-path (moisture 55) statement; production GJ1c derives moisture 80 -> 53/53 all-Overflow. Framing invited miscitation.
Finding 1: confirmed LIVE-FIRING on real data (2 spill collisions + 1 i==1 collision among GJ1c's 51 Overflow basins — not theoretical). The adjacency question was adjudicated: adjacency does NOT suffice (a course's visible anchor is its upstream cell; nothing pre-existing belongs to the lake unless wired), so the connection is wired: the spill cell always gets a real entry — appended when new, OVERWRITTEN IN PLACE when pre-existing (append would duplicate edge_id; the hydrology solve is the more authoritative downstream answer for that cell than flat D8 extraction). Two non-vacuous regression tests prove the cue through build_edges output; end-to-end on GJ1c, all 51 Overflow basins now build a readable edge (previously one silently missing). Internal lookup is a dense Vec, never iterated (D-010).
Finding 2: both docs now state the split explicitly — fallback (55): 51/2; production GJ1c (80): 53/53 all-Overflow — with a warning against citing fallback-constant ratios as production-representative.
Golden re-regenerated (143->192), position-identity diff purely additive with exactly one legitimate in-place overwrite at the spill-collision cell. Gate green on re-push (1,943 lib + all integration binaries).
## Review: t1185-outlet-wiring -> main (type: code)
### Tyre (Architecture): APPROVE
D-227 amendment (4) conformance verified: no endorheic bit/flag/zone anywhere, MorphologyZone untouched, zero new wire fields (the extension only appends into the four pre-existing parallel river arrays — golden-verified: mouths/confluences/attractors/basins byte-identical). The one ticket-text divergence — Endorheic basins skipped outright instead of mapped to TERMINAL — was explicitly adjudicated as the BETTER implementation: behaviorally identical to every consumer (build_edges no-ops TERMINAL anyway), cheaper, and semantically right (a lake-interior cell's identity belongs to MorphologyZone::Lake, not the river-cell vocabulary); the golden confirms zero TERMINAL sentinels in production data. T-1170 invariants unaffected (extension is upstream of course invention; outlet cells indistinguishable from native D8 cells by invention time); the after-attractors ordering verified consumer-by-consumer; D-010 determinism sound (data-derived walk order, back-pointer reconstruction, table lookup that panics rather than misbehaves). No comments.
### Hoshe (Code Quality): REQUEST_CHANGES (2 findings — both fixed, see author response)
Core verified correct under direct inspection: D8 wraparound table hand-traced, no ordering leak into attractors/survey-basin-dirs/road-graph/riparian consumers, golden append-only claim independently re-derived.
| # | File | Issue |
|---|------|-------|
| 1 | hydrology_equilibrium.rs (outlet loop) | i==1 collision silent drop: an Overflow basin whose first outlet cell collides with a pre-existing river cell contributes ZERO cells — indistinguishable from Endorheic on the map, breaking the exact cue this ticket delivers. Dedup test checked array parallelism, not chain continuity. |
| 2 | cascade_golden.rs re-pin doc + DEFAULT_HYDROLOGY_MOISTURE_Q doc | The 51/53 Overflow ratio is a fallback-path (moisture 55) statement; production GJ1c derives moisture 80 -> 53/53 all-Overflow. Framing invited miscitation. |
## Author response — both fixed in 1d2cac9e6
**Finding 1**: confirmed LIVE-FIRING on real data (2 spill collisions + 1 i==1 collision among GJ1c's 51 Overflow basins — not theoretical). The adjacency question was adjudicated: adjacency does NOT suffice (a course's visible anchor is its upstream cell; nothing pre-existing belongs to the lake unless wired), so the connection is wired: the spill cell always gets a real entry — appended when new, OVERWRITTEN IN PLACE when pre-existing (append would duplicate edge_id; the hydrology solve is the more authoritative downstream answer for that cell than flat D8 extraction). Two non-vacuous regression tests prove the cue through build_edges output; end-to-end on GJ1c, all 51 Overflow basins now build a readable edge (previously one silently missing). Internal lookup is a dense Vec, never iterated (D-010).
**Finding 2**: both docs now state the split explicitly — fallback (55): 51/2; production GJ1c (80): 53/53 all-Overflow — with a warning against citing fallback-constant ratios as production-representative.
Golden re-regenerated (143->192), position-identity diff purely additive with exactly one legitimate in-place overwrite at the spill-collision cell. Gate green on re-push (1,943 lib + all integration binaries).
### Verdict: CHANGES REQUESTED -> resolved; merge pending a light outlet-stub screenshot pair (rendered-path discipline)
Paired protocol (cold release server, main vs branch), capture sets at .cache/screenshots/t1185-{main,eyeball}/:
Pair
Surface
Evidence
Verdict
A
District window at the REAL basin-19 spill point (center (13713, 4259), located via a direct hydrology-solve probe, not guessing)
Wire-level: main serves 0 courses in the window; branch serves 1 stream course whose first_point (28083519, 8722669) matches the solver's own spill-cell world coordinates exactly, terminus ContinuesBeyondWindow (the short-stub pattern the commit describes). Screenshot AE=0 — the stub is sub-visible against uniform lake-blue in this crop; the wire evidence is load-bearing, per protocol.
PASS
B
GJ338Bd whole-body orbital
AE=57 (0.0027%), scattered 1-2px course-line marks at multiple basin locations — course-shaped, small, distributed; nothing unrelated moved.
PASS
Process note recorded for future lake/outlet verification: blind grid-probing fails on large lakes; the reliable method is a direct hydrology_equilibrium::solve() probe printing every Overflow basin's spill-cell coordinates (one-shot targeting).
Merging.
## Screenshot + wire eyeball: PASS — merge clear
Paired protocol (cold release server, main vs branch), capture sets at `.cache/screenshots/t1185-{main,eyeball}/`:
| Pair | Surface | Evidence | Verdict |
|---|---|---|---|
| A | District window at the REAL basin-19 spill point (center (13713, 4259), located via a direct hydrology-solve probe, not guessing) | Wire-level: main serves **0 courses** in the window; branch serves **1 stream course whose first_point (28083519, 8722669) matches the solver's own spill-cell world coordinates exactly**, terminus ContinuesBeyondWindow (the short-stub pattern the commit describes). Screenshot AE=0 — the stub is sub-visible against uniform lake-blue in this crop; the wire evidence is load-bearing, per protocol. | PASS |
| B | GJ338Bd whole-body orbital | AE=57 (0.0027%), scattered 1-2px course-line marks at multiple basin locations — course-shaped, small, distributed; nothing unrelated moved. | PASS |
Process note recorded for future lake/outlet verification: blind grid-probing fails on large lakes; the reliable method is a direct hydrology_equilibrium::solve() probe printing every Overflow basin's spill-cell coordinates (one-shot targeting).
Merging.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Threads each Overflow basin resolved outlet_path into RiverNetwork as real D8 downstream continuations (extend_river_network_with_basin_outlets in hydrology_equilibrium.rs): an overflow lake exit river appears in served courses; an endorheic basin gains nothing — the ruled zero-bit cue (D-227 amendment (4)) is outflow-course PRESENCE. Additive per T-1170 Ruling 7b: Sea targets end at RIVER_DOWNSTREAM_MOUTH with a seaward entry, Basin/OpenSpillway at RIVER_DOWNSTREAM_EDGE_DRAIN; no wire migration, no new zone, no endorheic bit.
Key properties
Verification
13 new tests (overflow course appears end-to-end incl. build_edges survival; endorheic positive-absence; TERMINAL no-op safety; determinism x3; dedup; D8 table incl. antimeridian wrap). Goldens: cascade_layer1.json re-pinned (third deliberate re-pin, documented in cascade_golden.rs — river_cells 93->143 on GJ1c, append-only prefix byte-identical; 51/53 real basins are Overflow with short OpenSpillway stubs, the honest dominant pattern). window_derivation_golden + river_course_golden verified structurally unreachable, unchanged. Full workspace suite green; gate green on push.
What the map now shows
Drains-vs-closed is mechanically readable: overflow lakes have an exit course at their spill point, endorheic lakes have none. Visual styling of short spillway stubs is a client-side question noted for the T-1182+ line.
🤖 Generated with Claude Code
Review: t1185-outlet-wiring -> main (type: code)
Tyre (Architecture): APPROVE
D-227 amendment (4) conformance verified: no endorheic bit/flag/zone anywhere, MorphologyZone untouched, zero new wire fields (the extension only appends into the four pre-existing parallel river arrays — golden-verified: mouths/confluences/attractors/basins byte-identical). The one ticket-text divergence — Endorheic basins skipped outright instead of mapped to TERMINAL — was explicitly adjudicated as the BETTER implementation: behaviorally identical to every consumer (build_edges no-ops TERMINAL anyway), cheaper, and semantically right (a lake-interior cell's identity belongs to MorphologyZone::Lake, not the river-cell vocabulary); the golden confirms zero TERMINAL sentinels in production data. T-1170 invariants unaffected (extension is upstream of course invention; outlet cells indistinguishable from native D8 cells by invention time); the after-attractors ordering verified consumer-by-consumer; D-010 determinism sound (data-derived walk order, back-pointer reconstruction, table lookup that panics rather than misbehaves). No comments.
Hoshe (Code Quality): REQUEST_CHANGES (2 findings — both fixed, see author response)
Core verified correct under direct inspection: D8 wraparound table hand-traced, no ordering leak into attractors/survey-basin-dirs/road-graph/riparian consumers, golden append-only claim independently re-derived.
Author response — both fixed in
1d2cac9e6Finding 1: confirmed LIVE-FIRING on real data (2 spill collisions + 1 i==1 collision among GJ1c's 51 Overflow basins — not theoretical). The adjacency question was adjudicated: adjacency does NOT suffice (a course's visible anchor is its upstream cell; nothing pre-existing belongs to the lake unless wired), so the connection is wired: the spill cell always gets a real entry — appended when new, OVERWRITTEN IN PLACE when pre-existing (append would duplicate edge_id; the hydrology solve is the more authoritative downstream answer for that cell than flat D8 extraction). Two non-vacuous regression tests prove the cue through build_edges output; end-to-end on GJ1c, all 51 Overflow basins now build a readable edge (previously one silently missing). Internal lookup is a dense Vec, never iterated (D-010).
Finding 2: both docs now state the split explicitly — fallback (55): 51/2; production GJ1c (80): 53/53 all-Overflow — with a warning against citing fallback-constant ratios as production-representative.
Golden re-regenerated (143->192), position-identity diff purely additive with exactly one legitimate in-place overwrite at the spill-collision cell. Gate green on re-push (1,943 lib + all integration binaries).
Verdict: CHANGES REQUESTED -> resolved; merge pending a light outlet-stub screenshot pair (rendered-path discipline)
Screenshot + wire eyeball: PASS — merge clear
Paired protocol (cold release server, main vs branch), capture sets at
.cache/screenshots/t1185-{main,eyeball}/:Process note recorded for future lake/outlet verification: blind grid-probing fails on large lakes; the reliable method is a direct hydrology_equilibrium::solve() probe printing every Overflow basin's spill-cell coordinates (one-shot targeting).
Merging.
Pull request closed