The complete workshop record: four round-1 positions, five round-2 syntheses (incl. Troblum's adversarial pass with addendum + final scorecard — all seven findings resolved), both lead interviews, Qatux's round notes and the 8-section workshop-outcomes.md (the lakes message-crossing documented as process history), measurement ⑥ (set_pixel/c1) + the population-survey and chunk/S2 addenda in the measurement docs, the brief's appendix updated through ⑥, and architecture-briefing-final.md — Jeroen's outline written back as-built (six-level ladder, lakes, ~9MB resident global tier). README row: Complete. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27 KiB
title, description, type, status, workshop, agent, round, created, decision_refs
| title | description | type | status | workshop | agent | round | created | decision_refs | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Workshop Outcomes | 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. | workshop | archived | body-map-viewer | qatux | 0 | 2026-07-25 |
|
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 | complete |
| Prep: outline, clarifications, implications | jeroen-outline.md, clarifications.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 | complete |
| Lead interview 1 | 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 (incl. ADDENDUM + FINAL UPDATE) | complete |
| Round 2 synthesis notes | round-2-notes.md | complete |
| Lead interview 2 (ladder-bottom narrowing, seed-chaining ruling) | rulings folded into dudley-interview2-response.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 §1–4 | complete |
| Post-ratification review (Global/Region rung split, lakes gap) | dudley-interview2-response.md POST-RATIFICATION ADDENDUM + LAKES CONVERGENCE | complete |
| Lakes convergence (message-crossing + resolution) | araminta-round2.md §(e), dudley-interview2-response.md §5/LAKES CONVERGENCE, tyre-round2.md §(a.11) | complete |
| Final governance package | tyre-round2.md (final, §(a)–(d)) | complete |
| As-built plain-language briefing | 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. 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 + clientFileAccessdir, 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
- 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. - 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 (the plain-language as-built writeback he requested) and raised two further items:
- 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).
- 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 — 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 discriminatedInboundvariant extending an already-five-times- proven pattern inserver/src/bridge/mod.rs). 8 dense fields (6 static + 2 sim-state) PNG-per-field, 2 sparse lists (courses,cliffs) MessagePack-native. Nowaterfield — lakes ride the existingMorphologyZone::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_pixelcolorize (confirmed cheap at realistic canvas sizes by measurement ⑥, ~78 ns/cell flat) + unscaled screen-space annotation layer, replacing_canvas.scaleand 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 existingMorphologyZone::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<u8> dense field
({None, Lake, Sea}), reasoning from first principles about wire cost and
vocabulary freezing. Independently, in flight, Araminta specced her own
water: Vec<u8> 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<LakeBasin> 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_zonesourcesLakefrom settled hydrology's continuousfilled_scaledfield (sampled bilinearly, the same mechanismocean_fraction_q/sea_levelalready 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
floodedplane — 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_pathbecomes a visible exit river incourses; 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 18thMorphologyZonearm 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 (everyOverflowbasin has a guaranteed outlet path, everyEndorheicbasin 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
TERMINALsentinel), 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/Responsevs. legacydistrict_window, the re-scoped ceiling boundary). - Lakes data-flow diagram (
HydrologyResult→filled_scaledbilinear sample →MorphologyZone::Lake→coursesoutlet 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).