chore(meta): T-1156 wave 1 to review — PR #195 up (rivers-ladder)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 09:03:15 +02:00
co-authored by Claude Fable 5
parent 5155474d14
commit f4711d631d
2 changed files with 4 additions and 0 deletions
@@ -1700,3 +1700,4 @@ INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, chang
CANCELLED 2026-07-22 (PR #194 merge): superseded by T-1161''s two-axes outcome COMPOSITE_SMOOTH survives as the compile-time pipeline axis (crisp draw_rect path kept for debug/compare); the crispness-at-sparse-rungs requirement is delivered by the per-rung sampling-filter policy (_filter_for_granularity_v2) instead of deleting the const. Design doc §8 step 6 errata''d + D-226 filter-axis note added in the same PR. No partial version of this ticket survives that outcome (Si audit + Tyre''s Q4 ruling agree: close-both, not do-first).', NULL, '2026-07-22 21:39:25', '2026-07-22 21:39:25.586', '2026-07-22 21:39:25.586', NULL, 'a0b8ff87488ca33009bff81f18ff0689', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRJD57678SVWD7XTSV9E3MSW', 'status', 'backlog', 'in_progress', NULL, '2026-07-23 05:48:12', '2026-07-23 05:48:12.602', '2026-07-23 05:48:12.602', NULL, '6afbef11d2d6391784bbc1e4686e13cb', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRJD57678SVWD7XTSV9E3MSW', 'status', 'in_progress', 'review', NULL, '2026-07-23 07:03:09', '2026-07-23 07:03:09.251', '2026-07-23 07:03:09.251', NULL, 'f7b016fa815ab8b383b06a37e5afa513', 2) ON CONFLICT(hash) DO NOTHING;
+3
View File
@@ -2501,3 +2501,6 @@ RE-SCOPED (Jeroen, 2026-07-22): ''we are aiming for not coloring in the cities a
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRV224PD3NMWKR1AAC0J0D58', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Thread drainage skeleton into derive_at_metres as per-cell riparian signal (near_perennial_water)', 'derive_at_metres (district_profile.rs:1461-1469) hardcodes near_perennial_water = false into derive_vegetation, so district/quarter windows cannot render riparian bands (RiparianScrub/RiparianThicket) or the hyper-arid micro-oasis (:421) even where a trunk river crosses the cell. After T-1156 puts rivers on the ladder, this surfaces as a visible mismatch: a drawn river over vegetation painted barren. Fix: thread the Layer-1 river-cell set into the window derive and compute per-cell near_perennial_water as a ''within riparian-band distance of a river cell'' test. Rivers sample the drainage GEOGRAPHY; vegetation''s moisture influence rides T-1162''s perturbed moisture_q — never a re-derivation of base moisture (forward contract from T-1156 wave-1 ruling 3, Tyre 2026-07-23). Re-pin the believability/derivation golden harnesses. Gated: not wave 1.', 'backlog', 'medium', NULL, 'server', 'D-226', '2026-07-23 05:52:25.779', '2026-07-23 05:52:25.779', NULL, '6906c3392598a731e3587ec7b5efd3c1', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRV2EV5QK4BCZ1P9H85JH2YM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Natural-feature name labels on the ladder (wire attach_feature_names, populate atlas_feature_names, feature-names proxy)', 'T-1156 wave 1''s ''labels if cheap'' clause, split out after Si''s audit (2026-07-23): cheap but not free — three dormant pieces exist and nothing connects them. (1) layer1::attach_feature_names (layer1.rs:213-262) is unit-tested with zero production callers — wire it into run_layer1''s call path with name pools; (2) atlas_feature_names (systems-schema.sql:537-544) is created-but-never-populated — add the INSERT step at regen time from the D-223 names-only markers.json pools, mirroring populate_atlas_city_names (generator change: import_economics/atlas.py — watchlist/regen-db implications); (3) add a feature-names read proxy mirroring atlas_data_proxy.rs handle_city_names_request (D-236 pattern — its own message type, outside the AtlasLayerResponse ceilings) + client label draw on the ladder (the retired _draw_named_features at atlas_marker_overlay.gd:239-264 reads the pre-D-223 dict shape and would silently no-op — rewrite, don''t reactivate).', 'backlog', 'low', NULL, 'server', 'D-226', '2026-07-23 05:54:09.837', '2026-07-23 05:54:09.837', NULL, 'db3934783e20d14abbcc124d911d5d5f', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRV2GT1FQVATWX641KY9K66C', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Invent river courses below heightmap resolution — deterministic warped polylines between D8 cells', 'Named experience gap from T-1156 wave 1 (Si audit + lead, 2026-07-23): the D8 river skeleton lives at heightmap working-grid resolution (512x256 — ~76.6 km per river cell on Lendel). Wave 1''s per-rung class filtering makes planetary/Region river courses real, but at District (2 km cells, ~65 km window) and Quarter the geometry is SPARSER THAN THE WINDOW — a window typically contains zero or one river cell, so ''tributaries at District, streams at Quarter'' cannot materialize as visible courses from the stored skeleton alone. The fix is the linear-feature analog of T-1162''s coast crinkle: deterministically INVENT river course geometry between/below D8 cells — domain-warped polyline interpolation between adjacent river cells (seeded per body+cell pair, D-227 discipline, elevation-aware so courses prefer invented-terrain valleys where feasible), refining with rung the same way the coast warp refines the coastline. Also the natural home for reconciling rivers with T-1162''s invented relief (a wave-1 known gap: drawn rivers may cross invented hills — acceptable at 76 km dot spacing, glaring once courses are continuous). Depends on wave 1''s carrier (river_class on RiverNetwork) landing first.', 'backlog', 'medium', NULL, 'server', 'D-227', '2026-07-23 05:54:25.931', '2026-07-23 05:54:25.931', NULL, 'cd2fad68b3f4b4c85c7f5676bbdd9366', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRJD57678SVWD7XTSV9E3MSW', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Port whole-body Atlas overlays onto the zoom ladder (markers, city sidebar, POL/POP/gen overlays)', 'T-1153/T-1152 retired the AtlasViewer heightmap screen as the atlas entry; its 17-entry overlay surface did NOT carry to the Region-rung ladder view (AtlasWindowViewer has only gen_dw_temp/moisture/veg). Deferred wholesale by Stig with rationale: these overlays key off markers.json/city-names/road-graph/settlement data the DistrictWindowLayer wire shape does not carry — porting is a per-overlay design + wire question (at what rung does a settlement marker fade in? does POL make sense over a Region composite?), not a mechanical copy. Deferred set: city markers + click-to-inspect city data sidebar; roads/rail/settlements/quarter-footprint generation overlays (gen_l1_rivers/basins/attractors, gen_district, gen_l2_roads, gen_l3_settlements, gen_region_grid, gen_l4_quarters); political zones, population density, corp presence, production/stockpile toggles, gate markers, named features. The retired code survives intact and unreachable on atlas_viewer.gd — reuse it or retire it explicitly per overlay. Needs Araminta (per-rung affordance/fade rules) + Tyre/Dudley (which overlays need new wire fields vs client-side joins). Until this lands the ladder view is terrain-only — a real capability regression vs the old planetary screen, accepted knowingly in the T-1152/T-1153 batch.
RE-SCOPED (Jeroen, 2026-07-22): ''we are aiming for not coloring in the cities at the moment the nature layer (geo and wild growth) first,'' matching D-166''s outside-in order. SPLIT this ticket''s overlay set into two waves. WAVE 1 (this ticket, promoted): the NATURE overlays gen_l1_rivers/basins/attractors onto the ladder (rivers as per-rung refining features: trunk rivers at Region, tributaries at District, streams at Quarter the wire/derivation question of serving river skeletons windowed is the real work), plus named natural features (rivers/oceans/ranges labels) if cheap. WAVE 2 (deferred until the nature layer stands, per Jeroen): everything civilizational city markers + sidebar, settlements/quarters footprints, roads/rail, POL/POP/CRP/gate markers. Do not port wave 2 with wave 1.', 'review', 'high', NULL, 'client', 'D-226', '2026-07-22 09:42:37.105', '2026-07-23 07:03:09.251', NULL, '507ba12c13ff0785eeb760ffbf434e31', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);