Files
settled-reach/docs/workshops/body-map-viewer/round-2-notes.md
T
jpmschweitzerandClaude Fable 5 29c22cb728 docs(meta): body-map-viewer workshop — rounds, measurements, outcomes, as-built briefing
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>
2026-07-24 10:57:45 +02:00

27 KiB
Raw Blame History

title, description, type, status, workshop, agent, round, created
title description type status workshop agent round created
Round 2 Notes — Body Map Viewer Workshop Compiled record of Round 2 synthesis positions: convergences, verified-absent tensions, and the exact interview-2 decision list against lead-interview-1's rulings. workshop active body-map-viewer qatux 2 2026-07-25

Body Map Viewer — Round 2 Notes

Compiled by: Qatux Round: 2 — Synthesis (envelope mechanics, seed-chaining, step-ladder tables, final cache spec, TTL-split payload, adversarial pass) Participants: Dudley, Araminta, Stig, Tyre, Troblum (adversarial) Sources: dudley-round2.md, araminta-round2.md, stig-round2.md, tyre-round2.md, troblum-round2.md (920 lines, incl. ADDENDUM + FINAL UPDATE scorecard), lead-interview-1.md, measurements/t-setpixel-c1.md (⑥), measurements/t1177-hydrology.md (POPULATION SURVEY addendum, 2026-07-23)

This round produced a filing-ready package: 1 new D-record + 11 amendment texts + 8 ticket dispositions (Tyre §a/§d), all four round-1 open items closed (envelope mechanics, seed-chaining, step-ladder tables, cache tiers), a population-scale re-verification of the cliff rarity claim, and a full adversarial pass that resolved 5 of 7 original findings in-round. Troblum's own FINAL UPDATE scorecard is the authoritative statement of what remains open — this document verifies it against the four synthesis documents rather than restating it blind.


1. Per-agent positions, round 2

Dudley — envelope wire/serving design, seed-chaining ruling, step-ladder cost fills, final cache spec

  • (a) Envelope mechanics: read server/src/bridge/mod.rs directly and found the "tagged marker" pattern D-225 asked for already implemented five times (star_map/city_names/browse each carry a mandatory boolean discriminator, ShapeProbe enforces mutual exclusivity). Recommends extending the exact pattern: StepCanvasRequest { step_canvas: bool, body_id, step_index, center, extent, min_wl_m } as a sixth Inbound variant; response is a dedicated StepCanvasResponse message (not a field on AtlasLayerResponse — D-226 T-1124 §2's own rule names this exact case). Legacy district_window survives byte-unchanged with no coexistence engineering — it just goes cold once its only client (the retiring AtlasWindowViewer) is deleted. Step-0/Region rides the new envelope, not the legacy whole-body family. Answers Araminta's relayed dense/sparse framing question: one flat tagged message (her default shape), not a split — no server-side compute is saved by splitting, and the progressive-paint UX case is cheaper to solve client-side.
  • Cliff wire-shape self-correction: explicitly adopts Araminta's sparse Vec<CliffSegment> shape over his own round-1 implicit dense-array framing, stating plainly he was "underspecified, not actually disagreeing" — resolves round-1 conflict #1.
  • (b) Seed-chaining ruling: independent re-derivation — each step calls derive_at_metres(seed, position, ...) fresh; a finer step may call a coarser rung's derivation function internally (the existing region-baseline-feeds- district precedent) but never reads a coarser step's cached response as literal input. Argued from D-227 purity (cache-dependency chains and determinism-ordering hazards are exactly what independent re-derivation avoids) and states this validates his own round-1 cost numbers as the correct model.
  • (c) Step-ladder tables: live-coordinated with Tyre mid-draft; corrected his own first-pass error (an invented, non-D-243 "4 m Tile-adjacent" spacing). Cost-filled three D-243-disciplined skeletons (Options A/B/C). Recommends Option B (skip-chunk, 5 steps) as the only skeleton where every row is directly measured or same-band-confirmed — chunk (64 m) was never benched, and B is the one option that doesn't need it. States plainly that cost does not distinguish B from C (identical per-row costs); the choice is pure UX pacing, which he explicitly hands to Jeroen.
  • (d) Final cache spec: Jeroen's storage-eviction amendment simplifies his round-1 three-term TTL formula, not complicates it — drops distance_decay entirely once staleness and storage-thrift stop being conflated, landing on one axis: evict_if: time_since_last_visit(entry) > STORAGE_TTL[rung]. Global tier (~174 MB PNG-encoded, D-203-shaped resource, keep-always) unchanged from round 1. Notes his own design and Stig's independently-designed client tier converged on the identical two-axis shape.

Araminta — final payload schema (TTL-split), region-as-step-0, label de-dup, final wire schema

  • (a) TTL-split payload: the field set doesn't change (ratified by lead-interview-1); this section assigns each field to a static-geometry plane (cached indefinitely-fresh) or a sim-state plane (short-TTL, re-requested on clock-bucket rollover) as a physical field separation, not a policy layered on afterward. States the reasoning per field, not inferred from name: glaciation/new flooded → sim-state (their live value is the map-relevant fact); temp_dc → static (the map consumes it as a climate-baseline classification, not a live weather reading — same D-226 clock mechanism, different consumer question). Rules against bit-packing the two sim-state fields, citing T-1179's own finding that packing hurts DEFLATE on low-entropy fields — separate L8 planes win on both compression and independent-re-fetchability grounds.
  • (b) Region-as-step-0: CLOSED three-way (Araminta + Tyre + Jeroen's ruling) — states two clauses together per Tyre's wording nuance: Region = step 0, and step 0 is the sole canonical/always-keep tier; nothing coarser than Region is a rung (the planetary seam is elastic, not steppable). Three independent arguments given (Tyre's snap ruling forces it structurally; continuity with the existing orbital mosaic; elimination — no coarser D-243 rung exists).
  • (c) Label de-dup: a deterministic, identity-keyed anchor rule — mean-cell position (point features) or cropped arc-length midpoint (line features), computed independently per canvas/tile, explicitly not a cross-tile coordination protocol. Adds a corollary no round-1 document stated explicitly: during hold-fetch-swap, only the currently-authoritative canvas's annotation layer draws — the held/stale canvas's terrain texture shows (magnified) but its labels do not.
  • (d) Final wire schema: CLOSED, envelope framing confirmed by Dudley's design. Flags one sequencing note (not a disagreement): Dudley's struct as literally drafted predates her flooded field and needs it added as a ninth field — doesn't reopen the flat-envelope ruling.

Stig — measurement ⑥, final c1 call, cache-store spec, px-per-gridunit band

  • (a) Measurement ⑥ headline: Image.set_pixel flat ~78 ns/cell across 330K8.3M cells (25.7 ms / 165.2 ms / 643.5 ms); a hand-rolled PackedByteArray direct write is ~2× slower, counter to his own going-in assumption — explicitly flags this as a "don't hand-roll the buffer write" finding for implementers.
  • (b) C1 final call: CONFIRMED CPU-first, not a flip to shaders. States the number "changes how I'd frame the recommendation" — colorize is trivial at the realistic 330K per-step size (25.7 ms) but meaningful at the 8.3M stress-ceiling size (~1/3 of server derive time there) — reads this as a second, independent validation of Dudley's viewport-sizing policy rather than a new risk, since the policy structurally avoids ever requesting an 8.3M-cell canvas as a real payload. Names the shader path's trigger condition precisely (T-1175's tapering work landing, or a future step-count decision pushing the realistic per-step size meaningfully above ~2M cells) rather than leaving it a vague someday.
  • (c) Cache-store spec, final: extends round 1's two-mechanism design (retention-floor+LRU for geometry, TTL for sim-state) to three independent sweep mechanisms kept structurally separate: Tier 1 (global/step-0) — retention floor only, no sweep ever; Tier 2 (sub-global geometry) — two independent triggers, (2a) time-since-last-visit and (2b) LRU-capacity budget; Tier 3 (sim-state planes) — explicit staleness TTL. Gives a concrete IndexEntry schema. Explicitly defers STORAGE_TTL/budget constants as "a tuning pass once real play-pattern data exists," not an architecture call.
  • (d) Px-per-gridunit band: step-dependent, not flat — 1×1 at the deep/ ground steps (full fidelity where the player is nearest visible detail), 1×1 preferred at mid steps while realistic canvas count stays under ~2M cells, ~5×5 reserved for the shallow/orbital step only. Grounded in ⑤+⑥ together: upload cost is flat regardless of display density, and colorize cost is cell-count-bound, not density-bound — so there's no cost reason to sacrifice fidelity at the deep end.

Tyre — final amendment texts, envelope governance disposition, step-ladder tables, deprecation sweep

  • (a) One new D-record + 11 amendment texts, each stated as record-ready ("paste directly into the named record"): the new render-architecture record (a.0); D-166 corollary repoint (a.1); T-1143 ruling 3 supersession (a.2); select_rung replacement (a.3); D-243 gridunit vocabulary entry, including Stig's ⑥-derived step-dependent display-ratio band (a.4); D-226 ceiling re-scope, not retirement (a.5); the map-time TTL-split + staleness/storage axis distinction, verbatim-grounded in Jeroen's amendment (a.6); the cliff sparse-list terminology repoint, now survey-confirmed by the population addendum (a.7); the D-226(d) per-request/per-derivation framing + client-cache accumulation cap, closing Troblum's S3 (a.8); the persistent-cache schema/version tag, closing Troblum's S5 (a.9).
  • (b) Envelope governance disposition: the windowed-family ceiling's purpose survives untouched; its mechanism is re-scoped to the legacy district_window carrier only — the tagged envelope is a new carrier the old rule does not apply to by construction. States explicitly: "the ceiling rule is RE-SCOPED, not retired" and that the deprecation table's conditional SUPERSEDE branch "does NOT fire." Folds in Dudley's three wire rulings verbatim as confirmation his own drafted text required no changes.
  • (c) Step-ladder tables: supplies the D-243-disciplined skeleton constraints (six rungs only, step 0 = Region, deepest = voxel, display ratio decoupled from spacing); Dudley fills costs. Joint recommendation: Option B — states this is "an evidence argument, not a taste one... Dudley and I both land here independently." Names the one real seam explicitly: the Region→District ÷100 jump lines up with the global/sub-global cache-tier boundary; every factor below it is pure UX pacing with no serving-side consequence, which he states can be decided "on feel alone."
  • (d) Deprecation sweep: 11 DQR dispositions (including two added directly from Troblum's findings: D-226(d) AMEND for the accumulation cap, and a D-192 cross-reference note) + 8 ticket dispositions (T-1176 close-as-delivered, T-1158 cancel, T-1175 re-scope-and-unblock, T-1157 re-scope, T-1174 keep unchanged, T-1153/T-1152 stay done with code-retirement flagged, their test suites retired with their code) + an explicit _canvas.scale retirement path for the implementation ticket.
  • Names the exact interview-2 items himself, at the end of his document (see §3 below — verified against this).

Troblum — adversarial pass (BLOCKING/SERIOUS/NOTE, then ADDENDUM, then FINAL UPDATE)

Three-part document, read in full. Initial pass (before any round-2 files existed) found 2 BLOCKING (B1: the "273 bodies" hydrology bench is one body solved 273 times, not a population survey; B2: the seed-chaining fork was unresolved and every cost number implicitly assumed one answer to it), 5 SERIOUS (S1 eviction-interaction costing; S2 courses-density coverage gap; S3 D-226(d) letter-vs-purpose on client-cache accumulation; S4 sim-state phase cadence; S5 disk-cache schema/version tag), and 3 NOTE items (N1 units convention; N2 Region-as-step-0 unconfirmed at time of writing; N3 clean bill on the courses cost bound itself).

ADDENDUM (after reading all four round-2 files): re-verified every finding against source code, not agent prose. B2 RESOLVED — checked district_profile.rs:1705-1732 directly and confirmed the nested-function-call pattern Dudley's ruling describes is already what every measured ns/cell number exercises, not merely argued to be consistent with it. Attacked the envelope design directly with three angles: a discriminator-collision attack that did not pan out (cleared on inspection of bridge/mod.rs:96-152), the version-skew angle that found Tyre's §(a.9) had already closed the gap before Troblum could report it as new, and a genuinely new cache-format cutover angle that traced to a clean bill (the legacy viewer never had a disk cache to begin with, so there's no stale-key orphaning risk). Checked Option B's "zero asterisks" claim row-by-row and found one precision note (the Quarter row is same-band-inferred, not this-session-remeasured at 8.3M) — explicitly states this doesn't change the recommendation. S1 downgraded to NOTE (mechanism fully resolved by both Dudley's and Stig's independently converging designs; only a tuning-pass number remains, correctly deferred). S3 and S5 confirmed RESOLVED against Tyre's exact amendment texts.

FINAL UPDATE (after independently verifying the new population-survey bench against source): confirmed the new bench (bench_population_survey_all_ committed_bodies) is genuinely distinct from the original defective bench — loads each of 267 real heightmap PNGs independently inside the par_iter closure, distinct body_id/sea_level per iteration, carries its own determinism spot-check and a discovery-count guard. B1 → RESOLVED. States the final scorecard explicitly: of seven original findings, five are resolved (B1, B2, S3, S5, and S1's mechanism half — with S1's cost-number half correctly deferred as tuning), and exactly two remain open for interview 2: S2 (courses-inclusive derive cost has zero measured coverage at the deep-step × high-river-density combination) and the S4 residual (sim-state TTL phase-cadence is still an unnamed numeric variable, though the field-assignment half Araminta resolved is fully closed).


2. Convergences (many this round — verified against the source documents, not merely asserted)

  • Flat envelope, one message, not a dense/sparse split. Araminta's round-1 default assumption; Dudley independently designs and confirms it in his own StepCanvasResponse struct with an explicit cost argument (no server compute saved by splitting, since every field comes off the same row-chunked pass); Tyre folds Dudley's ruling into the governance text verbatim. Three-way agreement, not two citing one.
  • D-226 §2 ceiling re-scope, not retirement — both seats that address it say re-scope. Tyre's governance framing ("its purpose survives... its mechanism is re-scoped to the legacy carrier only") and Dudley's serving-level design (legacy district_window "survives unchanged," the envelope "carries only NEW step-canvas traffic") independently land on the identical disposition. Tyre states explicitly in his own document that his §(d) deprecation table's conditional SUPERSEDE branch "does NOT fire" — re-scope is final, not a live option still being weighed.
  • Option B (skip-chunk, 5-step ladder) — joint, independently-reached recommendation. Tyre states this plainly: "Dudley and I both land here independently... an evidence argument, not a taste one." The shared reasoning (chunk/64m was never benched; B is the only skeleton with zero unmeasured rungs) appears in both documents in the same form, cost-argued rather than preference-argued.
  • Two-axis cache eviction (staleness vs. storage-budget) reached independently twice. Dudley's server-side spec (§(d), the collapsed one-term time_since_last_visit > STORAGE_TTL[rung] formula, replacing his own round-1 three-term formula) and Stig's client-side spec (§(c), Tier 2's two independent sweep triggers with no distance term at all) were designed separately and converged on the same shape. Troblum's ADDENDUM explicitly names this convergence as evidence the simplification is correct, "not just convenient."
  • Step-dependent px-per-gridunit ratio, not a flat display ratio. Stig proposes it (§(d), grounded in ⑤+⑥ together); Tyre files it directly into the D-243 gridunit amendment text (§(a.4)) attributed to Stig's measurement ⑥, and Dudley's ladder-table narrative independently confirms the same policy from a different cost driver (server-side colorize is cell-count- bound, not density-bound — so relaxing to 5×5 wouldn't even help at the steps where it doesn't need to). Dudley states this as "two independently measured cost models agreeing on a policy neither one was designed to argue for" — worth flagging as convergence, not restating as one position echoing another.
  • Cliff wire shape: sparse Vec<CliffSegment>, resolved unanimously. Dudley explicitly retracts his own round-1 implicit dense-array framing in favor of Araminta's sparse-list shape; Tyre's filed amendment text adopts the same shape and states his own round-1 "new arrays" language was about rejecting bit-stealing, not endorsing dense arrays — the round-1 tension (round-1-notes.md §3) is fully closed, three ways, with each agent's own document stating why they landed where they did rather than silently adopting a consensus.
  • SQLite rejected in every shape, independently, by both cache-tier owners. Restated and reconfirmed in round 2 (Dudley's D-203-shaped resource for the server global tier; Stig's plain FileAccess dir for the client) — not a new convergence this round but confirmed unchanged from the lead-interview-1 ratification-by-silence.

3. Tensions — verified against the documents: NONE survive into interview 2

The coordinator's belief that no tensions remain was checked directly, not assumed. Two items that were live tensions or open questions at the close of round 1 are confirmed closed by round 2, each with an explicit closing statement in the record (not merely implied by silence):

  • Round-1 conflict #1 (Dudley vs. Araminta, dense-vs-sparse cliff wire shape): closed. Dudley's round-2 document states outright: "Reading her argument again against my own hydrology numbers, she's right and I was underspecified, not actually disagreeing." Tyre's filed text adopts the same shape and states his own prior "new arrays" phrasing was about the bit- stealing question, not a competing dense-array position. Three-way resolution with each party's reasoning on record — no residual disagreement found.
  • Round-1 conflict #2 (Tyre ruling Phase-4-not-Phase-5 for cliffs without an independent Araminta confirmation): closed by the population-survey addendum plus Araminta's own round-2 document, which adopts the ratified Phase-4 sparse-list shape without objection and builds her final TTL-split schema directly on it (cliffs listed in her static-geometry plane table with no caveat). Lead-interview-1 ruling 3 already resolved this ("aligns the rarity finding, Araminta's encoding logic, and Tyre's scope ruling") before round 2 began; round 2's population survey (Troblum's B1, now RESOLVED) strengthens rather than reopens it.

What is NOT a tension, despite surface appearance, and should not be treated as one at interview 2: Troblum's two remaining open items (S2, S4-residual) are not disagreements between agents — no participant contests them, no two documents give conflicting answers, and Troblum's own FINAL UPDATE frames both as measurement/tuning gaps rather than architectural disputes. These belong in the decision list below as [decide] items (does the gap get closed before filing or deferred), not as tensions to relitigate. The coordinator's framing (list them as decisions, not conflicts) matches what the documents actually show.

One asymmetry worth naming, not a tension: Stig's round-2 §(d) phrases the step-dependent display-ratio policy from the deep end ("1×1 at the deep/ground steps... relaxing toward 5×5 only at the shallower steps"), while Dudley's narrative phrases the same policy from the cost-driver end ("1×1 wherever the resulting cell count is affordable... reserving the coarser ratio only for the one place canvas extent is the pressure"). These are the same policy stated in two directions, not two different policies — Tyre's filed amendment text (§(a.4)) reconciles both into one canonical statement. Flagging only so this isn't mistaken for a wording drift at interview 2.


4. EXACT interview-2 decision list

Cross-checked against Tyre's own explicit "For interview 2, the calls left for Jeroen" list (tyre-round2.md, final section) and Troblum's FINAL UPDATE scorecard (troblum-round2.md). The coordinator's proposed list is correct as stated, with one addition Tyre's own document makes explicit that should be folded in rather than treated as separate — see item 3's note below.

  1. [ratify] Step ladder: Option B vs. Option C. Pure pacing choice — every costed row is byte-identical between the two skeletons (Tyre: "it costs identically to B row-for-row... District's absence is not a cost saving, it's purely a pacing choice"). B is the joint recommendation (5 steps, gradual ÷100-then-÷4-then-÷4-then-÷128 descent); C is 4 steps with a single blunt ÷400 top jump. Option A (6 steps, including the unmeasured chunk rung) is ranked last by both agents and is not presented as a live choice for Jeroen — it is named only to show why it was excluded.

  2. [ratify] D-226 §2 ceiling disposition: re-scope vs. retire. Both seats that address this — Tyre's governance framing and Dudley's serving-level design — say re-scope (the rule keeps governing the legacy district_window carrier verbatim; the tagged envelope is a new carrier outside its scope, not an exemption from it). This is presented as a one-line ratification, not a live fork — Tyre states his own deprecation table's conditional retire-branch "does NOT fire."

  3. [ratify] Seed-chaining = function-composition, confirmed as Jeroen's outline intent. Dudley's round-2 ruling (independent re-derivation; a finer step may call a coarser rung's derivation function, never read a coarser step's cached response) is source-verified by Troblum's ADDENDUM — not merely argued, but checked directly against district_profile.rs:1705-1732 and confirmed to be the exact pattern every measured cost number in the appendix already exercises. What remains for interview 2 is narrower than "does the ruling hold" (it does, on the code) — it is authorial confirmation: does "this at the same time serves as seed information for the deeper cascade" in Jeroen's original outline mean this function-composition reading, or did he intend literal consumption of a coarser step's already-computed response bytes? Troblum frames this precisely as a one-line confirmation item, "very likely to confirm cleanly," not a re-open — but notes if Jeroen meant the second reading, Dudley's cost model needs a re-bench before the ladder table is authoritative. This is exactly the coordinator's item 3, stated with the precision both Tyre and Troblum give it — no correction needed.

  4. [decide] Troblum's two residuals — close before filing, or defer. Confirmed as the only two items remaining open on Troblum's own final scorecard (of seven original findings, five are resolved; these two are not):

    • S2 — deep-step × high-river-density courses bench. The one courses-inclusive-at-real-density number in the whole appendix (T-1178 Cross-check 1, 195.0 ns/cell, 18 courses, District spacing, one body) has zero coverage at the deepest step (Block/Tile spacing, where the deep-step 83K-cell bench is courses-EMPTY by construction) crossed with high river density (a BraidedDelta/MeanderReach-class body, not yet sampled). Troblum's own framing: "not blocking... but it is the one combination in the whole measured appendix with literally zero data point." His ask is explicit: "run one more bench... before or shortly after filing; not a blocker for filing itself" — meaning the decision Jeroen faces is run-now vs. defer-to-a-named-follow-up, not whether the finding is valid.
    • S4 residual — sim-state TTL phase-cadence. Araminta's round-2 work fully resolved which fields are sim-state and why (per-field reasoning, not name-inference); what remains is a numeric gap — D-228's "computed once per phase" water-height/glaciation model never states how long a phase lasts, so the sim-state plane's TTL has no number to size it by. Troblum's framing: fold into the same tuning-pass deferral Stig/Dudley already used for their own unresolved constants (acceptable), or if Jeroen wants a concrete number before filing, that's a named Dudley/ Araminta follow-up question at interview 2. Same shape as S2: a run-now-vs-defer choice, not a contested finding.

Nothing else requires a Jeroen ruling at interview 2. Every other item any agent flagged as open at the close of round 1 (envelope mechanics, cliff wire shape + Phase-4 scope, region-as-step-0, label de-dup, the c1 shader-vs-CPU call, TTL-split field assignment) is closed in round 2 with an explicit closing statement traceable to a specific document and section, verified above.


Summary for the lead interview

Round 2 delivered a complete, cross-verified filing package — not a set of independent positions still needing reconciliation. Every one of round 1's open items closed, most of them multiple ways (region-as-step-0 three-way; cliff wire shape three-way with each party's reasoning stated; the envelope ceiling disposition two ways with an explicit "does not fire" statement on the untaken branch). Five distinct convergences were independently reached by different agents from different starting arguments — worth Jeroen hearing as confidence signal, not restated agreement. Troblum's adversarial pass is the strongest evidence the package is filing-ready: of seven original findings (two BLOCKING), five are now fully resolved and verified against primary source, not merely re-asserted by the agent being checked — including a brand-new, population-scale (267/267 real bodies) re-run of the cliff-rarity claim that came back stronger than the original one-body finding. Exactly four items need Jeroen's voice at interview 2: two ratifications on facts already agreed (step count B-vs-C is pure pacing; the ceiling re-scope is unanimous), one authorial-intent confirmation that the code already supports (seed-chaining), and two narrow run-now-vs-defer calls on measurement/tuning gaps that nobody disputes are real but that nobody has treated as architecture-blocking either.