Files
settled-reach/docs/workshops/body-map-viewer/tyre-implications.md
T
jpmschweitzerandClaude Fable 5 77531a0eab docs(meta): body-map-viewer workshop brief signed off — T-1176 prep session
Three-way prep session (Jeroen + lead + Tyre) for the map-handler revision:
Jeroen's design outline captured verbatim, two clarification rounds, Tyre's
governance-delta/implications pass, brief co-written and ratified (zero
misrepresentations, zero blocking gaps), signed off by Jeroen with three edit
rounds (vocabulary repair tile->gridunit, client cache-store question with
SQLite fact base, explicit DQR/ticket deprecation sweep as gated deliverable).

Workshop: 5 seats (Dudley/Araminta/Stig/Tyre + Troblum r2), 2 rounds + lead
interview extendable at Jeroen's call, round 1 gated on measurements
T-1177/T-1178/T-1154/T-1179 (T-1180 non-gating). T-1176 in_progress with gate
blocker edges; T-1154 repurposed as measurement (3) and set ready.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 18:29:21 +02:00

14 KiB
Raw Blame History

title, description, type, status, workshop, created
title description type status workshop created
Body Map Viewer — Tyre's Implications Pass Tyre's five-section implications analysis of Jeroen's clarified outline (T-1176 prep session): governance delta, candidate re-ranking, measurements, workshop shape, red flags workshop active body-map-viewer 2026-07-25

Tyre's Implications Pass (prep session, verbatim)

Delivered after the clarification rounds (clarifications.md), before the brief was drafted. Jeroen's prep rulings on its proposals are recorded in the brief. Unedited below.


1. GOVERNANCE DELTA

AMENDS / SUPERSEDES:

  • D-166 corollary (2026-07-21) — sentence at stake: "Display at every rung samples the derivation at canvas resolution (the ladder is a continuous field, not a stack of fixed display rasters)." The stepped model is exactly "a stack of fixed display rasters" — one server-generated data canvas per zoom step. Amendment direction: the corollary's intent survives (no magnified interpolation of a coarser composite; each step's data is derived at that step's native gridunit spacing), but "continuous field, not fixed display rasters" is narrowed to "each step is a derivation sampled at gridunit resolution; display between steps holds that step's canvas." The anti-oversample/anti-undersample guarantee is re-expressed as a per-step property (a gridunit is never smaller than one screen px times the tunable, never coarser than the source-raster floor). Do NOT delete the corollary — repoint it.

  • T-1143 ruling 3 (entry seam, continuous cursor-anchored zoom)Superseded for the zoom-transport mechanism: scroll steps through discrete levels. What SURVIVES: cursor-anchored centering, edge-scroll pan, and the "full zoom-out resets to the canonical planetary frame" HARD condition (orthogonal to stepped-vs-continuous). The client-side morph/tween is an investigation item, not a reinstatement of continuous derivation.

  • T-1143 §2–§5 rung model / select_rung coverage-ceiling walk — the shipped Quarter/District/Region "rung" selector keyed on MAX_COVERAGE_M is superseded by the stepped gridunit ladder (global → step1 n×n → … → 10px/1m-tile). Rungs-as-derivation-granularity survives conceptually, but the selector is no longer a coverage-ceiling walk — it's a discrete step index. The workshop's step-count decision defines the new ladder; select_rung is replaced, not patched.

  • D-243 spatial ladderadditive, not superseded. "tile = 1×1 m" is CONFIRMED (matches D-243's voxel row — Jeroen repaired his own misuse toward D-243). "gridunit (at zoom level)" is a NEW vocabulary term for the per-step data cell and must be added to the locked vocabulary block. Critical open point: a gridunit is a display-derived spacing (viewport px ÷ tunable) which floats with monitor and step — D-243 rungs are absolute metres, fixed on every body. The brief must state whether gridunit spacing SNAPS to D-243 rung spacings or floats freely. The single most load-bearing vocabulary reconciliation — surface as a workshop question, don't pre-decide.

  • D-226 T-1124 §2 windowed-family ceiling [HARD] — sentence at stake: "exactly one windowed-query field on AtlasLayerResponse; a second forces the tagged-envelope migration." Server-side per-step content determination with a richer payload likely EXCEEDS what one additive field can hold cleanly. This is where the tagged-envelope migration D-225 deferred probably lands. The brief should NOT assume it's avoidable this time. Named-feature encoding IS the decision that determines whether the ceiling breaks. The ceiling's purpose (prevent uncorrelated concurrent windowed queries) survives; the tagged envelope is the sanctioned way past it.

  • river-courses-t1170.md carrier three-way rule — rule (iii) "rung-indexed invented detail rides the windowed payload" SURVIVES structurally: courses are still invention, still step-indexed, still server-side. "The windowed payload" becomes "the per-step data canvas payload" (same idea, new carrier name). Rules (i) and (ii) survive too. This ruling is robust to the pivot — it was cut on the axis (skeleton vs continuous vs invention) that the server relocation doesn't touch.

SURVIVES UNTOUCHED (state explicitly to prevent over-rewrite):

  • D-227 derive-don't-store — fully intact. The TTL cache is a concrete eviction policy layered on "transient evictable caches only." Nothing persisted as source-of-truth. (Workshop must confirm any disk-persisted-global-tier option stays consistent with D-227 — the one place it could drift.)
  • D-010 four principles — the server relocation reinforces principle 4 (server owns simulation state). Client art-function is pure presentation. The determinism boundary moves toward the server.
  • D-166 cascade + phase gating — unchanged; still Phase-4 Atlas work.
  • D-226(d) whole-body prohibition — survives, stress-tested by the deepest step (Red Flag 3). Chunk/tile output still never becomes a whole-body planetary layer.
  • D-169/D-170 implant UI — the map component lives inside the implant Atlas app, occludes gameplay, uses HudGroups. Unchanged.

2. CANDIDATE DIRECTIONS UNDER THE NEW PREMISES

The new premises pre-decide most of T-1176: server owns content determination → the client no longer does immediate-mode draw_* of derived data. The entire error class (zoom-scaled-canvas compensation, _zs/_zs_stroke/_zs_ring_radius, the line-rasterizer floor) exists because the client draws derived features inside a _canvas.scale = _view_zoom node. Stepped zoom + server-resolved per-step canvas kills the root cause, not the symptoms.

Baseline (recommended, not the workshop's to relitigate):

  • (b) render-to-texture per step, for the terrain/classification raster. Each step's data canvas → one ImageTexture → drawn 1:1 (or at the tunable px ratio). Sizes are texel-exact by construction — the rasterizer floor and per-call compensation cannot occur. Already half-built: _tile_texture_cache + _rebuild_texture_if_needed + _filter_for_granularity_v2 are a render-to-texture path today; the stepped model makes RTT the primary path.
  • (a) unscaled screen-space sibling layer, for vector annotations (labels, settlement glyphs, POI markers, mouth rings). Screen-space at literal px sizes — no zoom compensation. Positions transform world→screen; sizes are constants.

Genuinely open for the workshop:

  • (c1) shader colorize/style of the classification raster vs CPU set_pixel — perf/quality call; where T-1175's per-vertex river tapering "comes free."
  • (c2) GPU-side derivation — almost certainly NO (determinism, the two-language-mirror liability rejected for T-1170 applies doubly to GLSL). Pre-empt in the brief: derivation stays CPU/Rust server-side; GPU is presentation only.
  • Client-side morph between steps — a presentation tween of the held texture, NOT re-derivation. Open, low-risk, scoped as "cosmetic interpolation while the next step's canvas is in flight."

(d) hybrid isn't a separate option; (b)+(a)+optional-(c1) IS the hybrid.


3. PRE-WORKSHOP MEASUREMENTS

The T-1143 lesson: the planetary rung died of stacked extrapolation. Priority order:

  1. Equilibrium hydrology solver cost — highest priority, biggest unknown, critical path for "settled hydrology" feasibility. Lake-fill + overflow re-routing + gorge carving as single-pass priority-flood (Barnes/Planchon-Darboux class). Measure at 512×256 AND 4K-class (~330K8.3M cells). Effort: 12 days (the overflow+carve variant needs prototyping, not just benchmarking). Who: Dudley. Could invalidate per-body-open settled hydrology if it's seconds not milliseconds. Should also output the cliff representation, not just the cost (Red Flag 4).
  2. Per-gridunit derive cost at 1×1 vs 5×5, at real canvas sizes — known: 1.785 µs/cell (District cutoff), 1.454 µs/cell (orbital), 0.617 ms per 4,096-cell served window. Scale math: 330K gridunits × ~1.5 µs ≈ ~0.5 s single-thread, ~3550 ms across 14 workers if par_iter chunking holds at that scale (measured at 4,096 cells only). 8.3M × 1.5 µs ≈ ~12 s single-thread, ~0.9 s parallel — the "computer catches fire" case. Effort: 0.5 day — run zoom_ladder_bench at 330K and 8.3M cells on the production path; don't extrapolate. Who: Dudley. Closes the exact gap that killed the T-1143 planetary story.
  3. Wire-size table for candidate encodings — 330K-gridunit canvas: dense classification ≈ 45 bytes/gridunit ≈ 1.31.6 MB/step raw, before MessagePack overhead and named-feature lists. Compare raw dense vs bit-packed vs run-length vs PNG-encoded. Effort: 0.5 day. Who: Araminta with a number from Dudley. Feeds named-feature encoding + the tagged-envelope call.
  4. T-1154 block/tile rung numbers (now unblocked) — deepest steps derive at metre spacing over a viewport canvas; never benchmarked. Effort: 0.5 day (cutoff plumbing exists since T-1162). Who: Dudley. Prices the bottom of the ladder.
  5. Godot ImageTexture upload cost per stepcreate_from_image for a 330K8.3M px image on step-cross; could stutter. Effort: 0.25 day. Who: Stig. Interactive-latency input, not a blocker.

Discipline line: items 1, 2, 4 must be MEASURED and in the brief's appendix before round 1. Cite the T-1143 planetary rung by name as the cautionary tale.


4. WORKSHOP SHAPE

Roster (small as honesty allows): Dudley — CORE (server owns content determination; hydrology, per-gridunit derive, step-canvas generation, compute-chunk partitioning). Araminta — CORE (the map-art function AND named-feature encoding). Stig — CORE (the client component: RTT + screen-space rebuild; owns the atlas/ cluster). Tyre — architecture/feasibility, governance delta, determinism boundary, tagged-envelope call. Troblum — adversarial/perf, round-2 reviewer, not round-1 designer (stress the cost story and memory budget; the extrapolation-hunting from PR #185). Gestalt — NO: deterministic geology, not systems design; seating him drags toward live-sim scope the clarifications parked. Pull in async for the one map-time question if it grows sim coupling. Five seats.

Format: 2-round + lead interview (tile-derivation-contract precedent). Round 1: per-seat positions against pre-measured numbers. Round 2: synthesis + cross-cutting decisions (tagged-envelope yes/no, gridunit↔D-243, canonical-vs-viewport). Lead interviews Jeroen each round. Gate round 1 on the §3 measurements landing.

Question list per participant: (folded into the brief's Questions section.)


5. RED FLAGS (for the brief to state honestly)

  1. Stepped zoom vs D-166's "no over/undersampling" — the between-steps gap. Between two steps the held texture is scaled by the display transform: at the moment before a step-cross you ARE magnifying step-N's canvas — the exact thing D-166 was written against, for the width of one step interval. Step count + px-per-gridunit tunable jointly bound how bad this gets; they are the knobs that keep between-step magnification below perceptibility. The D-166 corollary amendment must own this honestly.
  2. Global-tier "always keep" across ~273 inhabited bodies. ~330K gridunits × ~5 bytes ≈ 1.6 MB/body ≈ ~440 MB resident at 5×5 if never-evict and all-bodies; ~13 GB at 1×1 — infeasible. Force the question: "always keep" = always-derivable-fast (cache is a bonus) or a permanent resident allocation (needs a budget and probably a disk tier, which stress-tests D-227). The cache deliverable must produce a number, not a vibe.
  3. Deepest step (10 px/1 m tile) vs D-226(d). At 10 px/tile on a 2160 px axis: ~216 m across — a viewport-scale window of metre-resolution derivation. Within the opened windowed-viewport carve-out (gated on T-1154 numbers) — allowed. But: if the workshop picks "canonical fixed canvas for all steps," the deepest step's canonical canvas at 1 m spacing IS a near-whole-body metre-resolution derivation, which violates the surviving D-226(d) prohibition. Canonical-vs-viewport is not just a cache tradeoff — at the deep end it's a governance boundary. The sharpest thing in the whole design.
  4. Cliff/multi-height data-model gap. Settled hydrology produces gorges; a gorge is two heights in one gridunit; the sketched payload carries one. Either the gridunit payload gains a vertical-structure field (min/max height + cliff-edge flag) at Phase-4 Atlas scope, or cliffs are declared Phase-5 in-world geometry and the Atlas shows dominant height + a "steep" classification. Hydrology can't be "settled as producing gorges" while the data model can't represent one.
  5. The tagged-envelope migration is probably now unavoidable — and that's fine, but it's work. Present it as expected scope, not a risk to avoid; under-scoping repeats the T-1143 §8-step-4 mistake. Honest tier: challenging but doable — the envelope framing already exists in D-225's deferral; we're executing a planned migration, not inventing one.

Meta-note: this pivot is architecturally cleaner than what ships today, not messier. Server-owns-content + client-art-function + RTT+screen-space-vectors eliminates the entire error class at the root, makes the render auditable (the data canvas is inspectable server-side, decoupled from draw), and the one hard part I'd have feared — reconciling derived geometry with a zoom-scaled canvas — stops existing because there's no zoom-scaled canvas anymore. The T-1170 carrier rule survives the pivot untouched because it was cut on the right axis. The genuine risks are the four measured-cost questions and the two governance boundaries (D-226(d) canonical-canvas coupling, D-166 between-step magnification) — all nameable, none fatal. Feasible. Challenging but doable.