Commit Graph
2769 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Fable 5 307a77ce84 feat(skills): pql board copy-ref — one-gesture 'viewing T-NNN' handoff to Claude
The artifact tab is sandboxed (no phone-home), so Claude cannot query the
tab's live selection; the copy-ref button in the ticket header copies
'viewing T-NNN — title' for a click-paste handoff (clipboard API with
prompt fallback). Selection also remains in the URL hash.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 22:22:34 +02:00
jpmschweitzerandClaude Fable 5 e148e7258d docs(meta): secure the cascade as the Phase-5 walkable-world mechanism (D-012 amendment)
Jeroen's gap catch: T-750 never stated that the seed-to-tile cascade is
also what determines the world where the player walks. Now connected in
one statement across three homes: D-012 amendment (the founding 'chunks
load/unload around the player' driver now concretely = the D-227/D-239
cascade; 3x3 chunk neighborhood minimum, coarser context self-provided by
D-255(f) function composition, Atlas interaction never a precondition,
byte-identical either way), the matching T-750 deliverable note (in
changelog), and a one-truth consumer note on Q-093 for the Phase-5 insert
minimap (design deferred, no independent map pipeline expected).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:54:40 +02:00
jpmschweitzerandClaude Fable 5 bdd1b319bc feat(skills): pql-board — clide-style ticket board as a stable claude.ai Artifact
tooling/pql-board-html: self-contained interactive board snapshot from
pql-native JSON (ticket list --full + batched --with-blockers for non-terminal
tickets + plan status) — status-grouped rail with filter/type chips, ticket
dossier with status pills, dep/children chips, deep links, keyboard nav;
clide's visual identity (amber on warm near-black, mono data type). The
/pql-board skill regenerates and redeploys to the canonical artifact URL so
the user's open tab survives refreshes across sessions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 12:51:18 +02:00
jpmschweitzerandClaude Fable 5 f44f9a2067 style(simulation): cargo fmt on the workshop benches (gate bounce; clippy and tests were green)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:59:34 +02:00
jpmschweitzerandClaude Fable 5 4e2d56f40f chore(meta): pql changelog remainder — T-1181–T-1185 dependency edges + idmap
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:58:19 +02:00
jpmschweitzerandClaude Fable 5 18c731a5de docs(meta): D-255 body-map-viewer stepped render architecture + deprecation sweep
D-255 filed (server-determines-content / client map-art function / stepped
six-level ladder Global+Region→Chunk / tagged-envelope wire discharging D-225 /
three-tier cache with distinct staleness-storage axes / cache-accelerated-pure-
function seed-chaining / lakes from settled hydrology, endorheic cue =
outflow-course presence). Twelve in-place amendments: D-166 corollary repoint,
D-192 persistent-cache boundary, D-225 deferral discharged, D-226 consolidated
(ceiling re-scope, select_rung→step-index, stepped transport, item-(d)
per-request + retention cap + chunk-floor partial restore, courses gloss +
cliff sparse-list), D-227 four-part (TTL-split, version tag, seed-chaining,
lakes), D-243 gridunit vocabulary. Clerk-audit fixes: atlas-zoom-ladder-t1143
superseded banner, CLAUDE.md Phase-4 cascade row updated to the stepped model,
Q-093 prior-art cross-ref. river-courses-t1170 carrier gloss. governance
README index regenerated (109 decisions through D-255); validate clean, sync
1344 refs 0 broken. Ticket chain T-1181–T-1185 + reconciliations in changelog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:58:02 +02:00
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
jpmschweitzerandClaude Fable 5 b613443d51 test(simulation): post-adversarial workshop benches — population survey, chunk rung, S2 density, global tier
hydrology_equilibrium_bench: bench_population_survey_all_committed_bodies
(all 267 real heightmaps solved independently — zero carved cells population-
wide, ~0.86s total, byte-exact determinism; closes Troblum B1) +
bench_per_basin_size_distribution_real_population (22,270 basins: dense wins
100% for lake carriers). bmv_gridunit_bench: chunk-64m per-cell + deep-step
canvas benches (1,838 ns/cell, ~1.7s full 4K; Option D's missing row) + S2
courses-density benches (+38-87% at chunk/block, mechanism traced to station
spacing scaling with rung cutoff). bmv_global_tier_bench (new): real per-body
radii from systems.db via BodyParamsReader — global tier ~8.85MB PNG across
the population (supersedes the ~174MB mis-priced figure), rung-0 derive
~16-21ms/body measured. All #[ignore]d release tests, stability re-run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:57:27 +02:00
jpmschweitzerandClaude Fable 5 63e299adc6 chore(meta): close bmv measurement batch — T-1177/T-1178/T-1154/T-1179/T-1180 done (PR #198 merged, dual review, one fix round); T-1176 workshop gate open
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 20:06:30 +02:00
jpmschweitzer 23d7d571db Merge remote-tracking branch 'origin/bmv-measurements' 2026-07-23 20:04:28 +02:00
jpmschweitzerandClaude Fable 5 3f6b3ec928 fix(simulation): PR #198 review round — spillway split, courses disclosure, appendix fidelity
Tyre C2: DownstreamTarget::OpenSpillway added — success (open low ground,
complete carved path) split from EdgeUnreachable (strict search exhaustion);
both doc comments exact; test updated. Tyre C3: determinism docstring
corrected (no BTreeMap; the endorheic f64 gate stated as deterministic-by-
derivation). Hoshe H1: vacuous cliff_edge test replaced by
single_basin_bowl_never_carves_a_gorge asserting the known-empty outcome.
Hoshe H2/H3: courses-force-empty disclosure at rect_window_replica and in
the results doc; courses.len() print added to the square production-fn
bench — measured 3/6/10 courses in window (NOT courses-empty, verified
twice); 'faithful stand-in' claim retracted for a precise scope statement;
GJ1c 18-course run identified as the sole production-density rate. Tyre C1:
appendix (4) headline rephrased — the tagged-envelope migration cannot be
dodged by payload optimization (byte math), field-count-rule trigger is a
workshop synthesis call; appendix (2) scope split per-shape.

Hydrology unit suite 15/15; atlas lib suite 679 green; benches compile.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:59:58 +02:00
jpmschweitzerandClaude Fable 5 127fa65751 chore(meta): pql changelog — measurement batch activated to in_progress
The T-1177/T-1178/T-1154/T-1179/T-1180 in_progress transition wrote through
to the changelog after the sign-off commit; landing it per the
ticket-mutating-turn persistence rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:26:33 +02:00
jpmschweitzerandClaude Fable 5 976d4016e9 style(simulation): fmt + clippy fixes for the measurement batch (gate bounce)
cargo fmt across the four new files; needless_range_loop x2 (enumerate /
iter_mut) and identity_op in hydrology_equilibrium.rs. cargo test was green
on the bounced push — lint-only fixes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:25:08 +02:00
jpmschweitzerandClaude Fable 5 473b654787 docs(meta): body-map-viewer measurement results + brief appendix (T-1177/T-1178/T-1154/T-1179/T-1180)
Four results docs under docs/workshops/body-map-viewer/measurements/ and the
brief's measurement appendix rewritten from owners/effort to MEASURED
headlines: settled hydrology viable (~24 ms/body, 273 bodies ~0.8 s);
parallel derive throughput holds 330K-8.3M cells (~64 ms / ~1.8 s); block+tile
cost-cleared (deepest step 83K cells ~17 ms); PNG-per-field smallest and
fastest with the tagged-envelope migration foreclosed by byte math (21x the
ceiling at the smallest size); texture upload a non-issue (8.3M px ~3.2 ms,
L8 4-9x cheaper). All numbers post-date the background-load closure with
stability re-runs. The workshop round-1 gate is satisfied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:23:02 +02:00
jpmschweitzerandClaude Fable 5 53a4c65d62 test(simulation): gridunit derive + wire encoding benches (T-1178, T-1154, T-1179)
bmv_gridunit_bench: production build_district_window_layer par_iter path at
330K/2.07M/8.3M cells (throughput holds, ~190-220 ns/cell parallel), block
(128m) and tile (1m/4m) spacing costs, the 83K-cell deepest-step viewport
shape, and the verified zero-savings octave-cutoff finding below District
spacing. wire_encoding_bench: real GJ338Bd derived canvases through
derive_at_metres, five encodings (raw rmp / bit-packed / RLE / PNG-per-field
/ PNG-of-packed) with measured bytes + encode/decode round-trips; corrected
raw density 6.00 B/cell. All #[ignore]d release tests.

Workshop gate measurements (2)(3)(4) for body-map-viewer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:22:47 +02:00
jpmschweitzerandClaude Fable 5 05f9630cb4 feat(simulation): equilibrium hydrology solver prototype + bench (T-1177)
Priority-flood fill with basin grouping, topographic-saddle spill points,
moisture-governed endorheic classification (reuses the reserved
RIVER_DOWNSTREAM_TERMINAL sentinel), and Dijkstra overflow/carving. Pure
function of (elevation, sea_level, climate) — deterministic per D-010, no
stateful simulation. 15 unit tests incl. determinism proofs and direct
carving-mechanism verification; #[ignore]d release benches at 512x256 /
768x432 / 3840x2160 plus the 273-bodies-parallel production shape.

Workshop gate measurement (1) for body-map-viewer: settled hydrology is
VIABLE per body-open (~24 ms at 512x256; ~0.7-0.8 s all 273 bodies).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:22:28 +02:00
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
jpmschweitzerandClaude Fable 5 367f27c6c3 chore(meta): close T-1170 + T-1168 — PR #197 merged (river courses + riparian signal, triple review)
The nature arc's biggest batch: courses invented per window (the
carrier-rule three-way refinement), coast termination, riparian
signal, mouths honest at every rung. Tyre APPROVE (his own ruling
implemented; on-record that Hoshe's blocking find was his miss);
Hoshe APPROVE (the seaward-discard find — ship-visible mouth
vanishing — plus three permanent invariant pins from the live rounds,
everything re-broken by his own hand); Araminta APPROVED (tables
final; her pixel audits drove two of the three Godot rasterizer-
regime discoveries now recorded in D-226 for T-1176). Cold re-checked
on MERGED main (.cache/screenshots/river-courses-main/ — the estuary
ring shot). Unblocks nothing gated; next per Jeroen: the T-1176
render-mechanism design discussion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 16:10:29 +02:00
jpmschweitzer 6b1fbf2222 Merge remote-tracking branch 'origin/river-courses' 2026-07-23 16:08:14 +02:00
jpmschweitzerandClaude Fable 5 1c21863b72 style(simulation): cargo fmt — review-round test code wraps
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 16:04:36 +02:00
jpmschweitzerandClaude Fable 5 f9ab3088ab fix(ui): mouth-ring radius floored at 2x stroke — the radius-smaller-than-stroke draw_arc regime
Two separable findings from the live A/B (real driver): (1) the
original zero-ring report was a viewport-framing crop — the ring
fired all along at screen (1755,-191), above the frame under the
COVER fit; recentering via set_view proved the path live. (2) The
real bug once in-frame: at Quarter fit zoom the compensated ring
radius (5.0/7.5=0.667 canvas) fell below the floored stroke (1.0
canvas) and draw_arc's stroke filled its own hole — a solid blob,
not a ring. Bracket: 1x stroke=blob, 1.5x=hollow recovers, 2x=clean.
Fix: zoom_compensated_ring_radius() floors the radius at 2x the
paired stroke, wired through _zs_ring_radius() for both ring and
halo arcs; verified live producing a clean hollow double-ring. The
third member of the Godot sub-canvas-unit rasterizer family (width
floor, stroke-vs-width sites, now radius-vs-stroke) — all recorded
for the T-1176 render-mechanism discussion. 10 pin tests in the
stroke-width suite; revert-verified (floor drop -> named failures);
full client suite 3956/3956; gdlint clean.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:47:33 +02:00
jpmschweitzerandClaude Fable 5 c804f2c239 test(simulation): walk/paint agreement invariant pinned on the live Quarter mouth window (not-a-bug determination)
The apparent course-over-drawn-water contradiction resolved to two
reconciliation errors, neither in production: (1) the probe's first
reconstruction bypassed the request layer's wire clamp (Quarter n=32
serves as n=16 — build_district_window_layer trusts n verbatim by
doc); (2) the lead's capture read overestimated — the window frames
only the estuarine tail of a 213-station course (178 land stations
out of frame upstream; the visible water run is genuine Lake/
OpenOcean paint, RGB-verified against MORPHOLOGY_RGB_OPAQUE x
elevation-lightness) and the terminus sits ~240m from the painted
land->water crossing, not tens of km. Walk and paint agree at every
instrumented position (zero flip-flops across the monotonic 178-land/
35-water station sequence). New permanent test reproduces the exact
live window (real GJ380c + systems.db params, district (13195,-2383),
Quarter, clamped n=16; asserts 44 pts + Mouth as identity) and pins
the terminus-lands-in-painted-water invariant mechanism-agnostically;
revert-verified with an injected 500km positional slip. Probe
deleted. cargo test --lib 1878/1878.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:38:08 +02:00
jpmschweitzerandClaude Fable 5 663bc9e363 chore(meta): T-1176 filed — Atlas render-mechanism design discussion (Jeroen, after this cycle; bypass the zoom-scaled-canvas error class)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:26:16 +02:00
jpmschweitzerandClaude Fable 5 270dba0147 test(simulation): upstream-cut Mouth-terminus regression pin (PR #197 acceptance follow-through)
The live acceptance question (Mouth flag apparently not surviving
crop) resolved to hypothesis (b): the terminus genuinely lay outside
both test windows — the Lendel mouth chord is ~108.5km, not the ~38km
estimated, so a District n=32 window centered on the cell OR the
midpoint misses the bisected waterline; a seaward-cell-centered
window provably ships Mouth. Hypothesis (a) — upstream-only crops
collapsing the flag — was FALSIFIED directly with a constructed
window (upstream anchor cut, true terminus in range -> Mouth ships;
crop reads only last_in). This test converts that probe into a
permanent pin with construction-sanity asserts, closing the blind
spot where the existing GJ1c acceptance test's bbox-derived window
always contains the whole course. Revert-verified: reintroducing a
first_in==0 requirement fails this test by name while the whole-
course test blindly passes — exactly the gap. Probe file deleted.
cargo test --lib 1877/1877.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:22:27 +02:00
jpmschweitzerandClaude Fable 5 d256233faf fix(simulation): PR #197 review round — real seaward chord for Mouth edges (Hoshe #1/#2, Tyre 1/2)
The batch's real bug: extract_river_network computed the seaward
neighbor (nr,nc) to decide the MOUTH sentinel then discarded it, and
build_edges placeholder-pointed mouth edges at themselves — zero
chord, invent_course's degenerate 1-point return, resolve_mouth_
terminus dead code on real data, ALL real mouths resolving None, and
(because Ruling 3g retired the D/Q clip on the promise of real
termini) mouths vanishing at District/Quarter. The second instance of
the threw-away-the-answer anti-pattern Ruling 2b fixed for interior
pointers. Fix: river_seaward: Vec<(u16,u16)> on RiverNetwork
(additive, serde-default, parallel array; meaningful only at MOUTH
entries), captured in the same extraction pass; build_edges gives
Mouth edges the real one-D8-step chord. Permanent acceptance:
all_real_gj1c_mouths_resolve_to_mouth_terminus_not_none — 3/3, revert-
verified failing at the golden's first mouth (38,47). Mouth golden
coverage added (river_course_golden gains district_mouth/quarter_mouth
samples + non-degeneracy test; the previously Interior-only filter
gap closed). Tyre 1: the land-probe's dead dx/len*len arithmetic
replaced — station_spacing_m threaded through the crop path, probe
steps one real cell spacing, comment reconciled. Tyre 2: boxing
comment reattributed to variant-size balancing (Layer1Output retention
lives on TerrainAnalysisCache, not BodyWorldState). Hoshe #4:
cascade_golden's doc now states the attractor cascade accurately
(count-parity, not byte-identity — water_dist seeds from mouths).
Full cargo test green; goldens re-pinned deliberately; bench +3.0%.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:16 +02:00
jpmschweitzerandClaude Fable 5 581be31549 test(ui): spy tests for the B3 arrival-redraw fix (PR #197 Hoshe #3)
Two _CountingNatureOverlay draw-spy tests (the PR #196 pattern):
window arrival and rung-swap arrival both advance the nature
overlay's draw count past baseline. Two isolation bugs caught before
reporting: (1) _on_window_ready has a second pre-existing redraw path
via _fit_and_center -> _apply_transform that fires on first arrivals
and masks a sabotaged line 507 — isolated by setting _user_adjusted
(the real pan/zoom guard, a reachable state); (2) simulating the swap
via _enter_at_rung resets _awaiting_first_window and takes the same
masked branch — the real production trigger is _maybe_reselect_rung's
request path, so the test drives request_now directly. Revert-
verified: dropping the queue_redraw line fails exactly both tests by
name; 82/82 restored. Viewer file itself zero net diff.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:54:10 +02:00
jpmschweitzerandClaude Fable 5 b9afa19d65 docs(meta): PR #197 review captures — stroke-floor width-inertness + unreachable-pole-branch notes; bench reflow
Tyre's two governance sentences on the D-226 course note: (a) the
Godot rasterizer floor makes per-class course WIDTH differentiation
inert at every shipping fit zoom — classes distinguish by opacity
alone until T-1175's per-vertex tapering; the 'trunk widest' promise
is design intent, not current pixels. (b) The pole-row edge-drain
branch is structurally unreachable; the real mechanism is interior
k<0 (revert-verification discovery). Plus the dangling cargo-fmt
reflow in the course-cost bench from the gate-bounce round.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:46:27 +02:00
jpmschweitzerandClaude Fable 5 4a23631f9b chore(meta): T-1170/T-1168 to review — PR #197 up (river-courses)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:17:52 +02:00
jpmschweitzerandClaude Fable 5 958de5420e style(simulation): gate bounce — box GenCompletion::BodyAnalyzed state; clippy/fmt sweeps
BodyWorldState grew past clippy's large-enum-variant threshold when it
began retaining Layer1Output (T-1170 Ruling 4b) — boxed, with the two
insert sites deref'd; manual_contains x2 (drainage tests),
cloned_ref_to_slice_refs x3 (river_course tests), fmt wraps.
gen_queue 18/18; clippy -D warnings clean; fmt --check clean.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:14:23 +02:00
jpmschweitzerandClaude Fable 5 27fab8566a fix(ui): stroke widths floored against Godot's line-rasterizer hairline collapse (Araminta's pixel finding)
Her audit of the course captures found a uniform 1px alpha-255 line
where trunk should draw 2.2 screen px. Live A/B bracket (20/1.5/1.1/
0.6 forced widths + draw_line-vs-draw_polyline control) localized the
cause: Godot's line rasterizer floors stroke widths below ~1.0 canvas
units to hairline — the _zs arithmetic was correct (1.4/3.75=0.373
round-trips exactly); the value died at the driver. Fix: zoom_
compensated_stroke_width() (the _zs divide maxf'd at 1.0) via a
_zs_stroke() wrapper on EVERY stroke-width site (course polyline,
skeleton chords, mouth-ring arcs, basin boundary, attractor outlines
— same latent class everywhere even where not yet visible); radius
args proven unaffected and left on _zs. Honest degradation direction
documented: at high zoom effective width grows rather than pinning.
Class question resolved with printed ground truth: the original
window is genuinely single-drawable-class (trunk course degenerate at
1 point); a confluence window confirms real multi-class rendering.
The drive now prints per-course class/width/effective-px tables every
run. New 14-test stroke-width suite (own file, line-cap split) pins
the exact floor-engagement numbers and the PR#195-shape effective-
width >= table-value invariant; revert-verified (floor drop -> 4
named failures). Full client suite 3942/3942; gdlint clean.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:06:56 +02:00
jpmschweitzerandClaude Fable 5 f72ff2b8bd docs(design): RimWorld world-map fluency reference — screenshot + extracted-techniques note (T-1175)
Jeroen's benchmark capture for the Atlas polish pass, saved in-repo
with the technique extraction (rivers-as-networks/taper, road-vs-river
color+straightness disambiguation, coast gradient, data-driven stipple,
labels) so the future Araminta-led pass has the source material.

Tickets: T-1175

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:54:13 +02:00
jpmschweitzerandClaude Fable 5 f4f0f88627 chore(meta): T-1175 — RimWorld world-map fluency reference captured (rivers-as-networks, road/river disambiguation, coast gradient, data-driven stipple, labels)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:51:39 +02:00
jpmschweitzerandClaude Fable 5 e5f38ca5e8 chore(meta): T-1175 filed — Atlas map-polish collector pass (Jeroen's deferral ruling: aesthetics accumulate, land as one pass later)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:48:23 +02:00
jpmschweitzerandClaude Fable 5 5b5f972f52 chore(meta): T-1174 filed — batch/window sampling-position divergence (Dudley's T-1168 finding)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:36:44 +02:00
jpmschweitzerandClaude Fable 5 4320df9b60 feat(simulation): T-1170 A2/A3 + T-1168 A5 — course inventor, coast termination, riparian signal
A2 (river_course.rs): Stage A rung-independent valley-seeking control
path (chord/8 stations, k=5 bilinear-scored candidates + continuity
penalty); Stage B rung-indexed perpendicular warp on GLOBAL arc-length
(window-independence, Ruling 1e), band chord/2 down to min_wavelength_m
hard-truncate, sine taper to zero at anchors, amplitude min(8% chord,
half-cell) slope/class-scaled. SeedDomain::RiverCourse=17, distinct
salt. Wire: RiverCourse{edge_id,class,points,terminus} on
DistrictWindowLayer.courses (serde-default); bbox-culled, window-
cropped +1 station. TerrainAnalysisCache retains Layer1Output (the
gen_queue:626 discard, Ruling 4b). A3: mouth termination walks
stations sampling the window's OWN rung-consistent morphology verdict,
6-iteration bisect; land-at-anchor probes one segment then None;
EdgeDrain never probes. A5: near_perennial_water point-to-segment
predicate (D-239 §8 governed bands 1-3m class-scaled) threaded through
both batch and window paths; Region always false; never touches
moisture_q. Discipline closed: dormant zoom-ladder bench run + numbers
recorded in the design doc (District 3.009/1.785, Quarter 1.823
us/cell, Region window 0.617ms); course-cost bench CAUGHT a real
+12-36% per-cell riparian scan regression -> precomputed bbox O(1)
reject (60ns->2.2ns/call), final delta +3.4-6.9% at budget; three
determinism tests (overlapping-window byte-identity, cross-rung
amplitude bound, warp-stream cross-correlation r<0.3); goldens: window
sweep gained a verified course-bearing position (pure append), new
river_course golden at both rungs, believability verified unchanged.
Revert-verification discovered the pole-row branch is structurally
unreachable (flow_direction bounds-check) — the real edge-drain path
is k<0 flat-plateau; test fixture rewritten to exercise reality.
scale.rs stale comment fixed. Full cargo test green.

Tickets: T-1170, T-1168

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:36:16 +02:00
jpmschweitzerandClaude Fable 5 c31cc6220e feat(ui): T-1170 B3 — course polyline drawing at District/Quarter; clip restructured per Ruling 3g
_draw() splits into two independent gates: the Layer-1-gated skeleton
path (Region chords, clip retained) and the NEW DistrictWindowLayer-
gated course path — build_course_render_plan() (pure, render-free-
testable) consumed by draw_polyline with _zs-compensated widths and
opacities from the Araminta revisit tables; mouth double-rings at
Mouth termini only (EdgeDrain/ContinuesBeyondWindow/None: three
meanings, one presentation — draw to last point, stop, documented);
zero water clip on the course path by construction (courses carry
rung-consistent termini). CourseTerminus wire vocabulary kept re-
pointable pending A2's real serde names; synthetic Ruling-3h fixtures
mean the suites need zero changes when the server payload lands. Real
gap found and fixed: window arrival never redrew the nature overlay
after the first fit (one line in _on_window_ready — courses would
miss every window swap post-pan). Water-clip header rewritten to
RESTRUCTURED status (retired on course rungs; permanent at Region
until Region goes windowed, T-1143 ruling 2). Revert-verified
(visibility-gate bypass -> 4 named failures). geometry-nature
112/112, nature-overlay 58/58, viewer 78/78, zero collateral; full
sweep 3928/3928 after the full-import bootstrap; gdlint clean (viewer
1016->1017, pre-existing overage rides T-1158).

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 13:05:40 +02:00
jpmschweitzerandClaude Fable 5 9d7c01de02 feat(ui): T-1170 B1+B2 — visibility-table split; Region skeleton chords from downstream pointers
B1 (Ruling 5c): nature block split out of atlas_window_geometry.gd
(954/1000 cap pressure) into atlas_window_geometry_nature.gd; RIVER_
CLASS_VISIBLE_BY_RUNG replaced by SKELETON_CLASS_VISIBLE_BY_RUNG
(Region-only now) + COURSE_CLASS_VISIBLE_BY_RUNG (District trunk+
tributary; Quarter all three — the pre-announced Quarter-rivers-
return) with width/opacity companion tables as Araminta's single
revisit point; deliberately opposite unknown-tag fallbacks per reader
(skeleton->full, course->empty), documented.

B2 (Ruling 5a): Region dot-scatter upgraded to connected chords via
river_downstream — D8 direction decode (0-7 into drainage.rs's
(row,col) delta table, antimeridian wrap-aware), sentinel chain ends
(MOUTH=8 ring-on-land, EDGE_DRAIN=9 no ring, TERMINAL=10 reserved,
decodes like EDGE_DRAIN so the future endorheic server needs no
client change). Pure build_skeleton_chords() split from drawing for
render-free testability. Chord clip rule (3g pick): segment clips if
either endpoint OR midpoint is drawn water — three-point catches both
narrow-inlet and long-chord failure modes at one extra lookup;
documented. Self-caught during build: first draft misdecoded the
pointer as a river_cells INDEX; rewired to direction decode against
A1's real convention before leaving the branch. Dual revert-verified
(direction sabotage -> 6 named failures incl. the chain-threading
pin; midpoint-drop -> exactly the 1 named clip test). Suites:
geometry-nature 86/86, geometry 130/130, nature-overlay 24/24; full
sweep 3892 with only the 6 known pre-existing garment/gait failures
untouched by this batch; gdlint clean.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:54:25 +02:00
jpmschweitzerandClaude Fable 5 0fea69feb2 feat(simulation): T-1170 A1 — river_downstream pointers; pole-edge drains are not mouths
RiverNetwork gains river_downstream: Vec<u8> (serde-default, parallel
to river_cells): values 0-7 index drainage::D8 (row,col deltas, N/S/E/
W/NE/NW/SE/SW order); sentinels MOUTH=8, EDGE_DRAIN=9, TERMINAL=10
(reserved — the future endorheic-basin hook, Ruling 2c/7b). Captured
in extract_river_network's existing pass (fdir already in scope, one
map, no new grid pass). Pole-edge D8 exits reclassify as EDGE_DRAIN
and leave the mouths list (Ruling 3f); flat-peak interior no-outflow
cells get EDGE_DRAIN too. cascade_golden deliberately re-pinned: GJ1c
mouths 19->3 — sixteen were pole-edge artifacts, exactly Jeroen's
'circles with no sea in sight'; river_cells/attractors counts
unchanged (pure reclassification + additive field). 21/21 drainage
tests incl. mouth-sentinel/mouths-list bijection on the real fixture
and a synthetic pole-draining-grid case.

Tickets: T-1170

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:39:47 +02:00
jpmschweitzerandClaude Fable 5 884f698a77 docs(meta): T-1170/T-1168 design ruling — courses are invention and ride the windowed payload
Tyre's binding ruling from the three-audit design pass (full text:
docs/architecture/river-courses-t1170.md). Keystone: the wave-1
carrier rule refines three-way — rung-independent discrete features
ride whole-body; continuous fields ride windowed per-cell arrays;
RUNG-INDEXED INVENTED DETAIL rides the windowed payload regardless of
geometric kind (courses = the coast crinkle's vector sibling; no
ceiling impact — content of the one windowed payload, not a second
query). Courses invented server-side per window on the T-1137 queue,
terminated against the window's own rung-consistent water verdict
(the two-waterline terminus fork dissolves); Region's skeleton chords
ARE the rung-truncated course. river_downstream sentinels reserve
TERMINAL for future endorheic basins. D-226 + D-227 captures added.

Tickets: T-1170, T-1168

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:32:20 +02:00
jpmschweitzerandClaude Fable 5 da4d8073e7 chore(meta): activate T-1170 + T-1168 — river course invention + riparian vegetation (river-courses worktree)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:17:31 +02:00
jpmschweitzerandClaude Fable 5 b62c252ebb chore(meta): T-1170 mouth-semantics follow-up — inland-reading mouths + pole-edge drains (Jeroen's capture question)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:14:36 +02:00
jpmschweitzerandClaude Fable 5 64928cd579 chore(meta): close T-1172 — PR #196 merged (waterline clip; rivers no longer draw over drawn ocean)
Hoshe APPROVE zero findings (incl. a 500k-case randomized proof of the
fixture-limit honesty note and his own wrap-direction revert-test);
Araminta APPROVED all points (pixel-scanned the ocean basin: zero
river-teal hits; land read pixel-identical; mouth suppression accepted
on visual merits). Design was Tyre's pre-implementation ruling (rung-
indexed coast -> presentation-frame clip; D-226 two-waterline note).
Cold re-verified on MERGED main (.cache/screenshots/waterline-main/).
Clip retires into T-1170. Gate trap discovered en route ticketed as
T-1173 (orphan-leaking binary-gated skips on client-only branches).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:52:45 +02:00
jpmschweitzer 0a394bde52 Merge remote-tracking branch 'origin/waterline-clip' 2026-07-23 11:51:29 +02:00
jpmschweitzerandClaude Fable 5 d30c8b72ca chore(meta): T-1172 to review — PR #196 up (waterline-clip)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:42:21 +02:00
jpmschweitzerandClaude Fable 5 94a2577456 chore(meta): T-1173 filed — client-only branches bounce off the gate via orphan-leaking binary-gated skips
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:40:45 +02:00
jpmschweitzerandClaude Fable 5 0b14cdb21d fix(ui): T-1172 round 2 — tile wrap resolution mirrored to the painter's own direction
Live round: the first clip removed only 133 pixels. Root cause (dossier-
traced): resolve_morphology_zone wrapped the QUERY toward a tile's raw
canonical center — the inverse of the painter's draw_col =
nearest_wrap_image(tile_center, held_center) — so seam tiles tested
containment against the wrong wrap-image and read real-but-wrong-
location land cells. Fix mirrors the painter exactly: wrap the tile's
own center toward held_center, test the (already held-wrapped) query
against that. Index math itself was confirmed correct end-to-end and
is now factored into shared AtlasWindowGeometry.cell_index_for_local_
offset() (full painter unification not applicable — the painter only
iterates forward, never reverse-looks-up; documented). Post-fix: 1082
traced positions cross-checked against actual painted pixels, 0 real
mismatches; regenerated captures show every dot/mouth on land. The one
pre-existing test encoding the buggy direction as correct was replaced
by positive+negative wrap-semantics tests (the negative one is the
reliable revert discriminator) plus a wire-accurate seam-tile fixture
with an honestly-documented proof limit (a single-tile fixture cannot
distinguish the wrap directions; the multi-tile scan tests can).
Also: two harness traps found and fixed in the lead's drive scratch —
canvas_items stretch factor (root.size now matches the 1920x1080 base
viewport) and mid-arrival snapshots (explicit is_fully_arrived wait;
the round-1 faint result was partly a 4-of-6-tiles capture). 46/46 +
50/50 + five sibling suites regression-free; gdlint clean.

Tickets: T-1172

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:33:31 +02:00
jpmschweitzerandClaude Fable 5 9914dc0d91 fix(ui): T-1172 — clip river dots/confluences/mouths against the drawn waterline
Jeroen's hands-on report: rivers continuing under the ocean. Tyre's
ruling implemented: the skeleton is rung-independent, the drawn coast
is rung-indexed (warp cutoff admits more octaves per rung), so
reconciliation is a presentation-frame operation — a draw-time clip
against the SAME per-cell morphology verdict the terrain painter used,
at the rung on screen. New pure module atlas_window_water_clip.gd:
cell resolution across both paths (single-window direct; tile mode
selects the containing tile by each tile's OWN echoed n with nearest-
wrap re-expression against that tile's canonical center — response-is-
source-of-truth + wrap discipline reused, not reinvented). Strict drop
(no snap); offshore mouths suppressed (return with real termini in
T-1170 — retirement markers at the clip sites); basins untouched;
fail-open wherever no composite data has arrived (the clip refines
presentation, never gates data). The _pos split feeds the SAME wrap-
resolved district to both draw position and clip test so they can
never disagree about the wrap image. 49 new tests incl. antimeridian
and mid-progressive-arrival fail-open; revert-verified with precise
attribution (breaking water detection fails exactly the 3 water tests,
fail-open/land tests stay green); smoke-suite stub crash under a real
driver caught and fixed (headless skip-gating masked it). 7 suites
regression-free; gdlint clean.

Tickets: T-1172

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:37:56 +02:00
jpmschweitzerandClaude Fable 5 7c5dc35b38 docs(meta): D-226 two-waterline note (T-1172 — Tyre's rung-indexed-coast ruling)
The drawn coastline is a family of curves indexed by rung (warp cutoff
admits more octaves at finer rungs), so no single authoritative server-
side waterline exists — reconciliation is a presentation-frame
operation at the draw site; the skeleton stays rung-independent. Clip
retires into T-1170's coast-terminating courses.

Tickets: T-1172

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:19:08 +02:00
jpmschweitzerandClaude Fable 5 93779b12cd chore(meta): activate T-1172 waterline clip — Tyre's rung-indexed-coast ruling recorded, T-1170 retirement dependency noted
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:17:56 +02:00
jpmschweitzerandClaude Fable 5 48340cb6f6 chore(meta): T-1172 filed — river skeleton draws over drawn ocean (two-waterline disagreement, Jeroen's hands-on report)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:14:07 +02:00