fix(simulation): PR #197 review round — real seaward chord for Mouth edges (Hoshe #1/#2, Tyre 1/2)
The batch's real bug: extract_river_network computed the seaward neighbor (nr,nc) to decide the MOUTH sentinel then discarded it, and build_edges placeholder-pointed mouth edges at themselves — zero chord, invent_course's degenerate 1-point return, resolve_mouth_ terminus dead code on real data, ALL real mouths resolving None, and (because Ruling 3g retired the D/Q clip on the promise of real termini) mouths vanishing at District/Quarter. The second instance of the threw-away-the-answer anti-pattern Ruling 2b fixed for interior pointers. Fix: river_seaward: Vec<(u16,u16)> on RiverNetwork (additive, serde-default, parallel array; meaningful only at MOUTH entries), captured in the same extraction pass; build_edges gives Mouth edges the real one-D8-step chord. Permanent acceptance: all_real_gj1c_mouths_resolve_to_mouth_terminus_not_none — 3/3, revert- verified failing at the golden's first mouth (38,47). Mouth golden coverage added (river_course_golden gains district_mouth/quarter_mouth samples + non-degeneracy test; the previously Interior-only filter gap closed). Tyre 1: the land-probe's dead dx/len*len arithmetic replaced — station_spacing_m threaded through the crop path, probe steps one real cell spacing, comment reconciled. Tyre 2: boxing comment reattributed to variant-size balancing (Layer1Output retention lives on TerrainAnalysisCache, not BodyWorldState). Hoshe #4: cascade_golden's doc now states the attractor cascade accurately (count-parity, not byte-identity — water_dist seeds from mouths). Full cargo test green; goldens re-pinned deliberately; bench +3.0%. Tickets: T-1170 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -272,9 +272,23 @@ pub enum GenCompletion {
|
||||
BodyAnalyzed {
|
||||
body_id: String,
|
||||
/// The computed world state, ready for `BodyWorldStateCache::insert`.
|
||||
/// Boxed: `BodyWorldState` grew past clippy's large-enum-variant
|
||||
/// threshold when it began retaining `Layer1Output` (T-1170 Ruling 4b)
|
||||
/// — the box keeps the enum small while the state moves by pointer.
|
||||
/// Boxed to keep `GenCompletion` variant sizes balanced — the same
|
||||
/// discipline as `SkeletonGenerated`/`ChunkFilled`/`WindowDerived`
|
||||
/// below, all boxed for the same reason (`GenCompletion`'s overall
|
||||
/// size is bounded by its largest unboxed variant; a `BodyWorldState`
|
||||
/// field carried by value here would force every other variant to
|
||||
/// pay for its full stack size on every match/move).
|
||||
///
|
||||
/// **Not this variant's own recent growth** (T-1170 PR #197 review,
|
||||
/// Tyre issue 2 — the prior comment here overattributed the boxing
|
||||
/// rationale): `BodyWorldState` itself only grew by
|
||||
/// `RiverNetwork`'s two new `Vec` fields (`river_downstream`,
|
||||
/// `river_seaward` — a few bytes/river-cell, Ruling 2a / Hoshe #1).
|
||||
/// The much larger `Layer1Output` retention (T-1170 Ruling 4b) lives
|
||||
/// on `TerrainAnalysisCache` — a queue-scoped struct further down
|
||||
/// this file, never part of `BodyWorldState`/`BodyWorldStateCache` at
|
||||
/// all. The box here predates T-1170 and stays for the pre-existing
|
||||
/// variant-size-balancing reason, unrelated to this ticket's growth.
|
||||
state: Box<BodyWorldState>,
|
||||
},
|
||||
SkeletonGenerated {
|
||||
|
||||
Reference in New Issue
Block a user