--- title: "Workshop Outcomes" description: "Final outcomes: D-255 (new) + 12 amendments, the six-level Atlas step ladder (Global opener + Region-District-Quarter-Block-Chunk), the tagged-envelope wire contract, cache-tier architecture, the lakes/hydrology sourcing fix, and the full deprecation sweep." type: workshop status: archived workshop: body-map-viewer agent: qatux round: 0 created: 2026-07-25 decision_refs: [D-010, D-166, D-169, D-170, D-192, D-223, D-225, D-226, D-227, D-228, D-239, D-243, D-253, D-255] --- # Body Map Viewer Workshop — Outcomes **Workshop:** Body Map Viewer (the stepped map handler) **Dates:** 2026-07-25 (round 1) – 2026-07-23 (final ratification and filing) **Rounds:** 2 core rounds + two lead interviews, extended with a post-ratification addendum round (the lakes/hydrology gap Jeroen raised after reviewing the as-built briefing) — the workshop was kept open across all three review passes rather than closed on partial convergence, per standing team practice. **Participants:** Dudley, Araminta, Stig, Tyre, Troblum (round 2 + adversarial), Qatux (documenting), SI (reviewing ticket outputs) **Decisions produced:** D-255 (new) + 12 amendments (D-166, D-192, D-225, D-226 ×4, D-227 ×4, D-243, river-courses-t1170.md note) **Compiled by:** Qatux --- ## 0. Workshop trace | Stage | Document | Status | |---|---|---| | Brief | [body-map-viewer-workshop-brief.md](body-map-viewer-workshop-brief.md) | complete | | Prep: outline, clarifications, implications | [jeroen-outline.md](jeroen-outline.md), [clarifications.md](clarifications.md), [tyre-implications.md](tyre-implications.md) | complete | | Pre-workshop measurements ①–⑤ | `measurements/t1177-hydrology.md`, `t1178-t1154-derive-bench.md`, `t1179-wire-table.md`, `t1180-imagetexture.md` | complete | | Round 1 positions | dudley/araminta/stig/tyre-round1.md | complete | | Round 1 synthesis | [round-1-notes.md](round-1-notes.md) | complete | | Lead interview 1 | [lead-interview-1.md](lead-interview-1.md) | complete | | Measurement ⑥ (post-interview-1) | `measurements/t-setpixel-c1.md` | complete | | Hydrology population survey (post-interview-1) | `measurements/t1177-hydrology.md` §POPULATION SURVEY | complete | | Round 2 synthesis | dudley/araminta/stig/tyre-round2.md | complete | | Round 2 adversarial pass | [troblum-round2.md](troblum-round2.md) (incl. ADDENDUM + FINAL UPDATE) | complete | | Round 2 synthesis notes | [round-2-notes.md](round-2-notes.md) | complete | | **Lead interview 2** (ladder-bottom narrowing, seed-chaining ruling) | rulings folded into [dudley-interview2-response.md](dudley-interview2-response.md), [tyre-round2.md](tyre-round2.md) §(a.8b)/§(a.10) | complete | | Chunk-64m bench, Option D, S2 courses-density bench, S4 TTL formula | [dudley-interview2-response.md](dudley-interview2-response.md) §1–4 | complete | | **Post-ratification review** (Global/Region rung split, lakes gap) | [dudley-interview2-response.md](dudley-interview2-response.md) POST-RATIFICATION ADDENDUM + LAKES CONVERGENCE | complete | | Lakes convergence (message-crossing + resolution) | [araminta-round2.md](araminta-round2.md) §(e), [dudley-interview2-response.md](dudley-interview2-response.md) §5/LAKES CONVERGENCE, [tyre-round2.md](tyre-round2.md) §(a.11) | complete | | Final governance package | [tyre-round2.md](tyre-round2.md) (final, §(a)–(d)) | complete | | As-built plain-language briefing | [architecture-briefing-final.md](architecture-briefing-final.md) | complete | | Filing (D-record + 12 amendments) | this document §2 | **complete — D-255 claimed** | | Deprecation sweep / Clerk audit | this document §5 | complete | | Ticket plan | this document §6 | complete (12 DQR + 10 ticket dispositions, drafted by Tyre, SI review per standing workflow) | | This document, final | — | **complete** | --- ## 1. Interview rulings — the full sequence Three review passes ruled on this workshop's open items, in order. Each is recorded here as process history — the corrections across passes are not noise; they are exactly the kind of thing this document exists to make visible rather than silently overwrite. ### Interview 1 (post round 1) Full record: [lead-interview-1.md](lead-interview-1.md). Ratified by silence: tagged-envelope migration triggered; viewport-sized canvases below the canonical tier; the T-1177 cliff representation (`elevation` + `channel_depth` + `cliff_edge`); cache composition (server global tier + client `FileAccess` dir, compose not compete). Ruled: step ladder deferred to round 2's concrete tables; map time axis = current-state-via-TTL-split with the staleness-vs- storage eviction-axis distinction; cliffs sparse + Phase-4 scope; round 2 GO with measurement ⑥ run in parallel. ### Interview 2 (post round 2) — two rulings that reworked the round-2 package 1. **Ladder bottom narrowed from tile/voxel (1 m) to chunk (64 m).** Jeroen, verbatim: *"the actual tile level rung seems unusable. maybe replace with 64?"* — reasoning: a full-screen Atlas view at 10 px/tile shows ~192×108 m of ground, which is in-world viewport content (Phase 5), not map content. This is a **deliberate narrowing of the D-226(d) floor's interview-1 opening, not a reversal of it** — block and chunk remain legal Atlas rungs under the viewport-sized carve-out; tile/voxel re-close, exactly as item (d) originally required, now scoped to the tier where the opening was never meant to reach. Dudley benched the never-measured chunk rung in response (`dudley-interview2-response.md` §1) and built **Option D** — the adopted ladder. 2. **Seed-chaining ruled the OPPOSITE of Dudley's round-2 default.** Jeroen answered **NO** to Dudley's round-2 "independent re-derivation, coarser rung called only as a nested function" ruling — he meant the finer step genuinely **consumes** the coarser step's *resolved* output. Reconciled without weakening D-227 via the **cache-accelerated pure function** model (§2 below; `tyre-round2.md` §(a.10)). Both rulings triggered new measurement work (the chunk-64m bench, the S2 courses-density bench at chunk/block, the S4 TTL-cadence formula) rather than being filed as bare architectural pronouncements — consistent with this workshop's standing discipline of ruling from real tables, not principles. ### Post-ratification review (after the as-built briefing) Jeroen reviewed [architecture-briefing-final.md](architecture-briefing-final.md) (the plain-language as-built writeback he requested) and raised two further items: 1. **Global-tier byte math was wrong.** Round 2's ~174 MB figure had priced the canonical always-kept tier as a full District-spacing canvas (8.3M cells/body). Jeroen's own review caught that the opener is a **variable, region-grid canvas** (one gridunit per region, not per District cell) — correcting this produced a **rung-identity split**: rung 0 = **Global** (the variable, always-kept opener) and rung 1 = **Region** (the largest *fixed*, evictable rung) — previously conflated as one "step 0 = Region" tier. Recomputed against the real 267-body population: **~8.85 MB PNG-encoded, all bodies** (not ~174 MB — roughly 20× smaller). 2. **The lakes gap.** Jeroen's direct question: *"when filling basins to find an overflow, is that body flagged as lake or flooded or something? do we draw lakes on the map?"* This surfaced a real gap (§4 below) and produced a genuine message-crossing between Araminta and Dudley, resolved convergently — documented in full as process history in §4. --- ## 2. Governance record — filing package (final) **D-255 claimed** (`architecture` domain). One new record + twelve amendment texts, all record-ready as drafted in `tyre-round2.md` §(a). | # | Record | Type | Source text | |---|---|---|---| | 1 | **D-255 — Body-map-viewer stepped render architecture** | NEW | tyre-round2.md §(a.0) | | 2 | D-166 corollary — per-step repoint (owns between-step magnification) | AMEND | §(a.1) | | 3 | D-226 T-1143 ruling 2/3 — tagged-envelope + continuous-zoom superseded | AMEND | §(a.2) | | 4 | `select_rung` / rung model — replaced by the discrete step index | AMEND | §(a.3) | | 5 | D-243 — gridunit vocabulary entry (additive; Atlas floor = chunk) | AMEND | §(a.4) | | 6 | D-226 T-1124 §2 windowed-family ceiling — tagged-envelope triggered, re-scoped | AMEND | §(a.5) | | 7 | D-227 — map-time TTL-split + staleness/storage eviction-axis distinction | AMEND | §(a.6) | | 8 | river-courses-t1170.md carrier rule + cliff sparse-list | AMEND (note) | §(a.7) | | 9 | D-226(d) whole-body prohibition — per-request framing + client-cache accumulation cap | AMEND | §(a.8) | | 10 | D-226 T-1143 ruling 1 — floor narrowed to chunk (tile/voxel re-close) | AMEND | §(a.8b) | | 11 | D-227/D-192 — persistent client-cache schema/version tag | AMEND | §(a.9) | | 12 | D-227 — seed-chaining as "cache-accelerated pure function" | AMEND | §(a.10) | | 13 | D-227 — lakes sourced from settled hydrology; endorheic cue via outflow-course presence | AMEND | §(a.11) | **Records confirmed surviving untouched** (stated explicitly per Tyre's list, so the Clerk audit does not over-rewrite them): D-010 (four principles — the server relocation *reinforces* principle 4); D-166 cascade + phase gating (still Phase-4 Atlas); D-169/D-170 (implant UI, unchanged); D-223 (`atlas_city_names`, unchanged); D-239 (the frozen 17-zone morphology + vegetation/glaciation vocabulary — the lakes fix explicitly does **not** touch it, reusing the existing `MorphologyZone::Lake` discriminant and routing the endorheic cue through `courses` precisely to avoid an 18th zone). **D-record text:** the full, final amendment text for every item above is authoritative in `tyre-round2.md` §(a.0)–(a.11) — this table is an index with citations, not a duplicate copy, per the project's single-source-of-truth convention for governance text (`governance/README.md`). Sync into `governance/decisions/architecture.md` via `pql decisions claim D architecture "Body-map-viewer stepped render architecture"` (already reserved as D-255) followed by `pql decisions sync`. --- ## 3. Architecture summary (as-built) The full plain-language writeback is [architecture-briefing-final.md](architecture-briefing-final.md) — Jeroen's own outline, rewritten in the same style and brevity to reflect what actually shipped. Condensed here: - **Three locked premises, unchanged since the brief:** server-side content determination (per-gridunit data canvases per zoom step), client as a pure map-art function (colorize/style/annotate, never invent geometry), stepped zoom (discrete rungs, cursor-anchored, no continuous zoom-scaled canvas). - **The Atlas step ladder — six levels, final (Option D):** | Rung | Level | Spacing | Canvas | Cost (parallel, measured) | |---:|---|---:|---|---:| | 0 | **Global** (opener, canonical, always-kept) | 1 gridunit/region (variable, ~205 km) | body's own region grid, ~18K cells avg | ~16–21 ms/body; ~8.85 MB PNG all 267 bodies | | 1 | Region | 204.8 km | 3840×2160 fixed | 1,827 ms | | 2 | District | 2,048 m | 3840×2160 fixed | 1,827 ms | | 3 | Quarter | 512 m | 3840×2160 fixed | ~1,827 ms (same-band) | | 4 | Block | 128 m | 3840×2160 fixed | ~1,827 ms (measured) | | 5 (deepest) | **Chunk** | 64 m | 3840×2160 fixed | 1,724–1,733 ms (measured) | Bottom-out rule: **1 screen px per 64 m gridunit, no magnification margin** (the old 10×-per-tile legibility margin does not apply — a chunk-scale feature is already legible at 1×1). Tile/voxel (1 m) is Phase-5 in-world content, never Atlas-mapped. Every fixed row is directly measured; rung 0 is measured too (Dudley's `bmv_global_tier_bench.rs`). - **Wire:** tagged-envelope carrier (`StepCanvasRequest`/`StepCanvasResponse`, a sixth discriminated `Inbound` variant extending an already-five-times- proven pattern in `server/src/bridge/mod.rs`). 8 dense fields (6 static + 2 sim-state) PNG-per-field, 2 sparse lists (`courses`, `cliffs`) MessagePack-native. No `water` field — lakes ride the existing `MorphologyZone::Lake` (§4). - **Cache:** three tiers — client in-memory LRU → client disk `FileAccess` (two independent sweep axes: staleness for sim-state, storage-budget for everything else) → server (Tier 1 rung-0 resident resource, ~8.85 MB all bodies, keep-always; Tier 2 sub-global geometry, storage-evicted on time-since-last-visit). Sim-state TTL bound to 1× the field's own fastest driving sim-clock bucket (tidal-or-seasonal for flooded, seasonal for glaciation) — a formula, not a fixed number, confirmed cost-affordable at 1× with no multiplier needed. - **Client render:** RTT terrain layer, CPU `Image.set_pixel` colorize (confirmed cheap at realistic canvas sizes by measurement ⑥, ~78 ns/cell flat) + unscaled screen-space annotation layer, replacing `_canvas.scale` and the entire `_zs()`/`_zs_stroke()`/`_zs_ring_radius()` compensation family by construction. - **Seed-chaining:** cache-accelerated pure function — a finer rung's derivation may read a resident coarser rung's continuous baseline as an *optimization* (falling back to fresh derivation when not resident); the ①②③ benched costs remain valid as the cache-cold worst-case ceiling. A mandatory cache-hit == cache-miss byte-identical determinism test is the correctness gate. - **Lakes:** sourced from `HydrologyResult`'s settled equilibrium, riding the existing `MorphologyZone::Lake` — zero new wire fields, zero vocabulary change (§4). --- ## 4. Process history — the lakes arc (documented in full, not condensed away) This is recorded at length deliberately: it is a clean example of the workshop's own discipline working correctly under a genuine, in-flight message-crossing, and the coordinator specifically asked that it be preserved as process history rather than silently resolved into a single final answer. **The catch.** After reviewing the as-built briefing, Jeroen asked directly whether basin-filling from settled hydrology gets flagged as a lake on the map at all. Checked against the real code (not assumed): the gap was more specific than a missing field. `MorphologyZone::Lake` (discriminant 1) **already exists** in the frozen 17-zone vocabulary — the gap was a missing **data source**. Today's `Lake` emission comes from a crude heightmap threshold (`ocean_fraction_q >= 60`, a bilinear sample of the raw below-sea-level mask) with **zero connection** to `HydrologyResult`'s settled basins — a gap the code's own comment already flagged as known, just never connected to the solver this workshop's own measurement ① is about. **The crossing.** Dudley answered the coordinator's routed lake-schema question with a proposal for a **new `water: Vec` dense field** (`{None, Lake, Sea}`), reasoning from first principles about wire cost and vocabulary freezing. Independently, in flight, Araminta specced her own `water: Vec` field with the same shape and posed three questions back to Dudley (endorheic-carrier sizing, pipeline slot, struct reconciliation). Dudley answered those three questions fully (visible in his document as §1–3 under "LAKES CONVERGENCE," including a full crossover-cost bench comparing a sparse `Vec` list against the dense `water` field across the real 267-body basin-size distribution). **The resolution.** Later the same day, both Dudley and Araminta **independently discovered the better answer and converged on it without either conceding to the other**: fold lake/sea classification into the **existing** `MorphologyZone::Lake` discriminant instead of adding any new field at all. Araminta reached this by re-verifying Dudley's own code-read directly against source (`district_profile.rs:556-565`, `generator.rs:1198- 1223`, `features.rs:104-105`) and recognizing her own original objection (that folding into morphology would require widening a frozen vocabulary) was built on a false premise — the vocabulary entry already existed; only the data source was missing. Dudley reached the same place from his own post-ratification code investigation. Both documents mark the earlier `water`-field material explicitly as **SUPERSEDED-BY-CROSSING** rather than silently deleting it — Dudley's document states plainly: *"it isn't one of us conceding to the other, it's convergent verification."* **What survived the crossing unmodified:** the pipeline/projection ruling (sample `HydrologyResult`'s continuous `filled_scaled` field bilinearly per rung — never project discrete basin-cell membership, which would produce a blocky, non-refining lake edge, exactly the magnified-coarser-composite artifact D-166's corollary forbids). This reasoning is agnostic to which field carries the result, so it applied unchanged to both the abandoned `water` field and the final morphology-fold. **Final, converged answer (D-227 amendment §(a.11)):** - Lakes ride the **existing** `MorphologyZone::Lake` — zero new wire field, zero vocabulary change. The fix is a **data-source correction**: `derive_morphology_zone` sources `Lake` from settled hydrology's continuous `filled_scaled` field (sampled bilinearly, the same mechanism `ocean_fraction_q`/`sea_level` already use), falling through to today's heuristic where no basin exists. - Lake geometry is **static** (a pure function of seed + terrain, cached indefinitely-fresh), explicitly distinct from Araminta's sim-state `flooded` plane — a lake's existence doesn't flicker on the seasonal TTL. - **Endorheic-vs-overflow cue: outflow-course presence, zero wire bits, zero new zone.** Dudley's original crossover-cost analysis (dense-bit vs. sparse-list) was correctly identified by the coordinator as not actually answering this question — both of those carriers were foreclosed once the morphology-fold landed. The real choice was reasoned fresh: an overflow basin's guaranteed non-empty `outlet_path` becomes a visible exit river in `courses`; an endorheic basin's absence of one is the honest "no drain" signal. Three reasons this wins over a dense vocabulary bit: proportionality (endorheic is 4.63% of real basins — too rare to justify a permanent 18th `MorphologyZone` arm every consumer inherits forever), the outlet-wiring work is required regardless (an overflow lake must show its exit river to be hydrologically honest — the cue is a free side effect, not a feature built to carry it), and the inference is definitionally sound with no misfire case (every `Overflow` basin has a guaranteed outlet path, every `Endorheic` basin has none — tested directly: `overflowing_basin_has_nonempty_outlet_path`). - **Honest sequencing stated plainly, not glossed over:** until the basin-outlet→D8 wiring ticket ships (pre-cleared as additive by T-1170 Ruling 7b's reserved `TERMINAL` sentinel), the map shows lakes but not the drains-vs-closed distinction. This is not a design gap — it is two distinct, sequenced deliverables, and the outcomes record states which one ships first rather than implying the distinction arrives automatically the day the sourcing fix lands. - The originally-proposed cliffs-based endorheic cue was independently ruled out by Araminta after directly re-checking the population survey: zero carved cells across all 267 real bodies means a cliff-wired cue would never fire in practice. --- ## 5. Deprecation sweep **DQR records** (13 dispositions — the 12 amendments in §2 plus D-192's cross-reference note; full text in `tyre-round2.md` §(d)): | Record | Disposition | |---|---| | D-166 corollary (2026-07-21) | AMEND — repointed per-step, not deleted | | D-226 T-1124 §2 ceiling | AMEND — re-scoped to the legacy `district_window` carrier only; re-scope is **final**, the conditional supersede branch does not fire | | D-226 T-1143 ruling 2 | SUPERSEDE — tagged-envelope migration now triggered | | D-226 T-1143 ruling 3 | SUPERSEDE for transport (stepped); cursor-centering/edge-scroll/full-reset survive | | D-226 T-1143 §6 `select_rung`/`MAX_COVERAGE_M` | SUPERSEDE — replaced by the discrete step index | | D-226 T-1143 ruling 1 (item-(d) floor opened) | AMEND/NARROW — opening now lands at chunk (64 m); tile/voxel re-close | | D-243 item (5) vocabulary | AMEND (additive) — `gridunit` role name; Atlas floor bottoms at chunk | | D-225 (tagged-envelope deferral) | SATISFY (note) — constraint discharged by this workshop's envelope | | D-226 item (d) whole-body prohibition | AMEND — per-request/per-derivation framing + client-cache accumulation cap + the chunk-floor narrowing | | D-227 (derive-don't-store) | AMEND (additive ×4) — TTL-split/eviction axes; persistent-cache schema tag; seed-chaining cache-accelerated model; lakes sourcing fix | | D-192 (no version handshake) | CROSS-REF note — the co-ship guarantee does not extend to the persistent disk cache | | river-courses-t1170.md (Ruling 1c) | AMEND (note) — terminology repoint + `cliffs` as rule (iii)'s second vector member | **Surviving untouched:** D-010, D-166 cascade/phase gating, D-169/D-170, D-223, D-239 (see §2 for the explicit no-touch statement on each). **Tickets** (10 dispositions): | Ticket | Disposition | |---|---| | T-1176 | CLOSE as delivered — this workshop is its output | | T-1158 | CANCEL with supersession note — the canonical-frame cluster it wanted to extract is exactly what the stepped model deletes | | T-1175 | RE-SCOPE, unblocked — the c1 blocker (measurement ⑥) is discharged; tapering lands on the new screen-space annotation layer | | T-1157 | RE-SCOPE as the stepped mechanism's capture harness — the dead-goldens problem it targets is a direct consequence of the split the stepped model collapses | | T-1174 | KEEP unchanged — a derivation-correctness bug orthogonal to the render pivot, priority raised (more derive paths now share the same position math) | | T-1153 | stays `done`; shipped code (`_view_zoom`, continuous-zoom transport) on the `_canvas.scale` retirement path | | T-1152 | stays `done`; `compute_tile_grid()` mosaic superseded by the rung-0 Global canvas | | T-1153/T-1152 test suites | retired with their code; replaced by re-scoped T-1157 | | **NEW — lake morphology sourcing** | CREATE — source `MorphologyZone::Lake` from `HydrologyResult`'s `filled_scaled`, self-contained, no wire change | | **NEW — hydrology basin-outlet → D8 wiring** | CREATE — thread overflow basin outlets into `RiverNetwork`/`courses`; pre-cleared additive by T-1170 Ruling 7b; this is the ticket the endorheic cue ships on | **`_canvas.scale` retirement path** (explicit list for the implementation ticket, full text `tyre-round2.md` §(d)): `_canvas.scale`/`_canvas.position`/ `_apply_transform()`; the `_zs()`/`_zs_stroke()`/`_zs_ring_radius()` compensation family; `select_rung()`/`MAX_COVERAGE_M`/`compute_tile_grid()`; the `AtlasViewer`/orbital-mosaic-vs-window split (collapses to "the Global opener is rung 0, one path"); `_view_zoom`/`_canonical_fit_zoom()` (replaced by the discrete rung index + the rung-0 canonical frame). **Clerk consistency audit:** the known-conflicts starting set above (13 DQR + 10 ticket dispositions) is the complete, agent-produced sweep. A systematic audit pass beyond this named set is the standing pre-dismissal check per the brief's Expected Output 2 — run against the filed `governance/decisions/ architecture.md` text once D-255 and the twelve amendments are synced, to catch any conflict the delta did not explicitly name. --- ## 6. Measurement summary | # | Ticket | Headline | Doc | |---|---|---|---| | ① | T-1177 | Hydrology viable; cliff repr. = elevation+channel_depth+cliff_edge; population survey: 0/267 real bodies carve | measurements/t1177-hydrology.md | | ② | T-1178 | Parallel throughput flat 190–220 ns/cell, 330K–8.3M cells | measurements/t1178-t1154-derive-bench.md | | ③ | T-1154 | Block GO; original deep-step (voxel) bench superseded by chunk bench below | measurements/t1178-t1154-derive-bench.md | | ④ | T-1179 | PNG-per-field wins; 21×–563× over 30KB cap → tagged envelope triggered | measurements/t1179-wire-table.md | | ⑤ | T-1180 | Texture upload non-issue, 0.03–4.6ms | measurements/t1180-imagetexture.md | | ⑥ | (round 2) | CPU colorize 77.5 ns/cell flat; beats byte-buffer ~2×; c1 = CPU-first, confirmed | measurements/t-setpixel-c1.md | | interview-2 | (Dudley) | Chunk (64m) bench: 1,724–1,733 ms parallel full-canvas; Option D adopted | dudley-interview2-response.md §1 | | S2 | (Dudley, Troblum-requested) | Courses cost at chunk/block: +38%–87% (vs. District's <5%) — real, traced mechanism, still affordable | dudley-interview2-response.md §3, filed as addendum in measurements/t1178-t1154-derive-bench.md | | S4 | (Dudley + Araminta) | Sim-state TTL formula: 1× fastest driving sim-clock bucket, confirmed cost-affordable at 1× | dudley-interview2-response.md §4 | | global-tier recheck | (Dudley, post-ratification) | Rung-0 corrected: ~8.85 MB PNG all 267 bodies (not ~174 MB) — Global/Region rung split | dudley-interview2-response.md POST-RATIFICATION ADDENDUM §6 | | lake basin distribution | (Dudley, post-ratification) | Real population: 22,270 basins, dense wins 100% vs. sparse for lake carrying | dudley-interview2-response.md LAKES CONVERGENCE §1 | --- ## 7. Adversarial pass disposition (Troblum) Final scorecard (`troblum-round2.md` FINAL UPDATE): of seven original findings (2 BLOCKING, 5 SERIOUS), **all seven are resolved** by the time of filing: | Finding | Resolution | |---|---| | B1 (population-scale cliff survey never run) | RESOLVED — 267/267 real bodies surveyed, 0 carve | | B2 (seed-chaining fork unresolved) | RESOLVED — interview-2 ruling + Dudley's source-verified cache-accelerated model | | S1 (evict-then-revisit costing) | RESOLVED (mechanism) — both cache specs converge on dropping `distance_decay`; end-to-end revisit number correctly deferred as tuning | | S2 (courses-density coverage gap) | RESOLVED — Dudley's chunk/block courses bench, real finding, filed | | S3 (D-226(d) letter vs. purpose) | RESOLVED — per-request framing + client-cache accumulation cap, §(a.8) | | S4 (sim-state phase cadence unnamed) | RESOLVED — Dudley+Araminta joint formula, 1× confirmed affordable | | S5 (disk-cache version tag) | RESOLVED — §(a.9), complete fix | N1 (units convention), N2 (informational), N3 (clean bill) — all closed or never live concerns. No finding required walking back a round-1 or round-2 position; every fix Troblum checked against primary source held up exactly as documented. --- ## 8. Diagrams Pending — to be created via `/d2-diagram` in `docs/diagrams/architecture/` following the standard post-filing diagram pass: - Step-ladder diagram (Global opener → Region → District → Quarter → Block → Chunk, with the variable/fixed and canonical/evictable seams marked). - Cache-tier diagram (three tiers, the two eviction axes, the rung-0/rung-1 seam). - Wire-envelope diagram (tagged `StepCanvasRequest`/`Response` vs. legacy `district_window`, the re-scoped ceiling boundary). - Lakes data-flow diagram (`HydrologyResult` → `filled_scaled` bilinear sample → `MorphologyZone::Lake` → `courses` outlet presence → endorheic cue), given the arc's own complexity documented in §4 above. **Not yet started** — first post-filing task, per standing practice (diagrams follow filed decisions, not the reverse).