chore(meta): fix 3 board-hygiene items from the T-750 sweep

- T-1017: removed 5 stale done-blocker edges (T-957/993/1005/1010/1016); only
  T-977 (architecture-flavor pipeline) genuinely blocks it now, so it auto-unblocks
  when T-977 ships.
- T-999: resolved the description contradiction — appended a clarification that the
  condition overlay does NOT feed D-100 DamageOverlay (the T-979 refinement is
  authoritative); BuildingConditionState is standalone.
- T-960: noted the sole remaining gap to close (gen_l0_heightmap overlay absent from
  OVERLAY_DEFS, required by D-226 acceptance criteria).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-07 10:40:39 +02:00
co-authored by Claude Opus 4.8
parent 4c95cad7a4
commit 6b07ab5070
3 changed files with 44 additions and 0 deletions
+5
View File
@@ -479,3 +479,8 @@ INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1005', 'T-1017', '2026-06-06 00:00:00', '2026-06-06 00:00:00', NULL, NULL, 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-977', 'T-1017', '2026-06-06 00:00:00', '2026-06-06 00:00:00', NULL, NULL, 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-957', 'T-1017', '2026-06-06 00:00:00', '2026-06-06 00:00:00', NULL, NULL, 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-957', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', 'a3b8f09ec8784be1fa1d25fa75809b06', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-993', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', '41932a4d0c616cf460a599a695d17ab9', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1005', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', 'f78a109d670758531481573ad46c25da', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1010', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', '966893fc9b75268b6e482512dcf7f5fa', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-1016', 'T-1017', '2026-06-06 00:00:00', '2026-06-07 08:40:15', '2026-06-07 08:40:15', 'bc6e69d4f58ad47ad3fed4a5031c17e3', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
+24
View File
@@ -50,3 +50,27 @@ Closed via Si sweep (2026-06-07): all four fields (morphology_zone, trait_select
INSERT INTO ticket_history (ticket_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-975', 'description', 'Concrete current gap surfaced by Tyre in the atlas-derivation workshop: D-223 stripped the topographic polygons from markers.json, but D-209 CoastalAccess/LakeShore attractor extraction still references oceans[]/lake polygons that no longer exist. The ocean/lake mask must instead be derived from the heightmap sea-level threshold (or a baked water-bodies layer). Unlike the rest of the epic (which lands with future cascade layers), this affects attractor extraction today.', 'Concrete current gap surfaced by Tyre in the atlas-derivation workshop: D-223 stripped the topographic polygons from markers.json, but D-209 CoastalAccess/LakeShore attractor extraction still references oceans[]/lake polygons that no longer exist. The ocean/lake mask must instead be derived from the heightmap sea-level threshold (or a baked water-bodies layer). Unlike the rest of the epic (which lands with future cascade layers), this affects attractor extraction today.
Closed via Si sweep (2026-06-07): ocean_mask/lake_mask derived from heightmap sea-level in features.rs:10-14, consumed by CoastalAccess/LakeShore (426/452). D-209/D-223 reconciliation done. Drift.', NULL, '2026-06-07 08:32:25', '2026-06-07 08:32:25', '2026-06-07 08:32:25', NULL, '39512880e8427a80682ae23de221e4cd', 1) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-999', 'description', 'Separate Bevy system triggered by EconEvent (D-180), painting over the frozen structural fill: BuildingConditionState{New|Maintained|Worn|Derelict|Abandoned}, OccupancyState, VegetationEncroachment; feeds D-100 DamageOverlay. Hard wall: cannot change a BuildingTag; holds no PressureState ref.', 'Separate Bevy system triggered by EconEvent (D-180), painting over the frozen structural fill: BuildingConditionState{New|Maintained|Worn|Derelict|Abandoned}, OccupancyState, VegetationEncroachment; feeds D-100 DamageOverlay. Hard wall: cannot change a BuildingTag; holds no PressureState ref.
Clarification (Si sweep 2026-06-07): supersedes the description''s ''feeds D-100 DamageOverlay'' line. Per the T-979 refinement (authoritative), the condition overlay does NOT feed D-100 BuildingConditionState is a standalone system (OccupancyState/VegetationEncroachment over EconEvent). Implementer: ignore the D-100 reference; do not wire DamageOverlay.', NULL, '2026-06-07 08:40:15', '2026-06-07 08:40:15', '2026-06-07 08:40:15', NULL, '82011bcbccb8cb64674629c9b1593022', 1) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-960', 'description', 'Render each cascade layer as a MAP in the implant Atlas (D-191, the Phase 3 viewer — D-166 amendment): terrain → water → biome → settlements → political zones → quarter/block skeleton → tiles. This is the progress-viewer deliverable; NO in-world rendering. Grows as each layer lands.
---
Refinement (2026-05-23, /whats-next):
- DATA TRANSPORT (resolves Q-098): NO bake baking derived layer data makes mods second-class. A server-side FILE STREAM PROXY: resolves a body source files across base + mod paths, runs the deterministic cascade on demand (run_cascade, LRU-cached per D-203, ~45ms), and streams serialized layer data to the Godot client over IPC. First-party and mod bodies use the identical path; no pre-baked derived artifacts. Protocol/stream spec designed with Tyre and recorded in a D-record resolving Q-098.
- UI: layer selector in the existing regional Atlas view; layers are ADDITIVE overlays (toggle heightmap + rivers + attractors + sub-biome together and composite), not one-at-a-time matching the existing overlay-bar model (D-191).
- SCOPE NOW: only Layer 0 (heightmap) + Layer 1 (rivers/basins/attractors/sub-biome) exist; the viewer grows as layers land (D-166). Acceptance: Layer 0 + Layer 1 render as additive, toggleable overlays for a body, fed by the proxy.
---
Design (D-226, Araminta, 2026-05-24) human-visual layer of the inspection harness. Extend OVERLAY_DEFS / AtlasOverlayBar with a generation overlay group (second row) + a left-side legend panel; do NOT build a separate viewer. Encoding: relief base; rivers as blue polylines (mouths = double-circle markers, confluences where in-degree >= 3); basin fills very translucent + thin boundary polylines; attractors as markers where SHAPE encodes the 7 AttractorTypes (circle/half-circle/diamond/down-tri/up-tri/hollow-circle/square) and COLOR encodes sub-biome (shape carries identity in headless/monochrome; color is additive); size scales with strength, skip strength < 0.15. Stable button ids gen_l0_heightmap / gen_l1_rivers / gen_l1_basins / gen_l1_attractors; start pending/locked, unlock+activate via notify_gen_layer_ready(id) as data arrives (grows as layers land, D-166). Consumes the live proxy (#969); the agent channel (#971) drives this same UI.', 'Render each cascade layer as a MAP in the implant Atlas (D-191, the Phase 3 viewer D-166 amendment): terrain water biome settlements political zones quarter/block skeleton tiles. This is the progress-viewer deliverable; NO in-world rendering. Grows as each layer lands.
---
Refinement (2026-05-23, /whats-next):
- DATA TRANSPORT (resolves Q-098): NO bake baking derived layer data makes mods second-class. A server-side FILE STREAM PROXY: resolves a body source files across base + mod paths, runs the deterministic cascade on demand (run_cascade, LRU-cached per D-203, ~45ms), and streams serialized layer data to the Godot client over IPC. First-party and mod bodies use the identical path; no pre-baked derived artifacts. Protocol/stream spec designed with Tyre and recorded in a D-record resolving Q-098.
- UI: layer selector in the existing regional Atlas view; layers are ADDITIVE overlays (toggle heightmap + rivers + attractors + sub-biome together and composite), not one-at-a-time matching the existing overlay-bar model (D-191).
- SCOPE NOW: only Layer 0 (heightmap) + Layer 1 (rivers/basins/attractors/sub-biome) exist; the viewer grows as layers land (D-166). Acceptance: Layer 0 + Layer 1 render as additive, toggleable overlays for a body, fed by the proxy.
---
Design (D-226, Araminta, 2026-05-24) human-visual layer of the inspection harness. Extend OVERLAY_DEFS / AtlasOverlayBar with a generation overlay group (second row) + a left-side legend panel; do NOT build a separate viewer. Encoding: relief base; rivers as blue polylines (mouths = double-circle markers, confluences where in-degree >= 3); basin fills very translucent + thin boundary polylines; attractors as markers where SHAPE encodes the 7 AttractorTypes (circle/half-circle/diamond/down-tri/up-tri/hollow-circle/square) and COLOR encodes sub-biome (shape carries identity in headless/monochrome; color is additive); size scales with strength, skip strength < 0.15. Stable button ids gen_l0_heightmap / gen_l1_rivers / gen_l1_basins / gen_l1_attractors; start pending/locked, unlock+activate via notify_gen_layer_ready(id) as data arrives (grows as layers land, D-166). Consumes the live proxy (#969); the agent channel (#971) drives this same UI.
Remaining to close (Si sweep 2026-06-07): add the gen_l0_heightmap overlay to OVERLAY_DEFS + render path in atlas_viewer.gd / atlas_marker_overlay.gd required by the D-226/T-960 acceptance criteria but currently absent. Layer-1 overlays (rivers/basins/attractors) + proxy wire + pending indicator are already implemented; this Layer-0 overlay is the sole remaining piece.', NULL, '2026-06-07 08:40:15', '2026-06-07 08:40:15', '2026-06-07 08:40:15', NULL, 'f7e6ccc4036a83f06ec6301b6bfe738b', 1) ON CONFLICT(hash) DO NOTHING;
+15
View File
@@ -217,3 +217,18 @@ Closed via Si sweep (2026-06-07): all four fields (morphology_zone, trait_select
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-975', 'story', 'T-974', 'Own the ocean/lake water mask', 'Concrete current gap surfaced by Tyre in the atlas-derivation workshop: D-223 stripped the topographic polygons from markers.json, but D-209 CoastalAccess/LakeShore attractor extraction still references oceans[]/lake polygons that no longer exist. The ocean/lake mask must instead be derived from the heightmap sea-level threshold (or a baked water-bodies layer). Unlike the rest of the epic (which lands with future cascade layers), this affects attractor extraction today.
Closed via Si sweep (2026-06-07): ocean_mask/lake_mask derived from heightmap sea-level in features.rs:10-14, consumed by CoastalAccess/LakeShore (426/452). D-209/D-223 reconciliation done. Drift.', 'done', 'medium', NULL, 'server', 'Q-101', '2026-05-25 10:52:23', '2026-06-07 08:32:25', NULL, 'f0e14edd2b89ca2ef3491ef55c6b2625', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_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 (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-999', 'task', 'T-979', 'Condition overlay Bevy system (BuildingConditionState/OccupancyState) on EconEvent', 'Separate Bevy system triggered by EconEvent (D-180), painting over the frozen structural fill: BuildingConditionState{New|Maintained|Worn|Derelict|Abandoned}, OccupancyState, VegetationEncroachment; feeds D-100 DamageOverlay. Hard wall: cannot change a BuildingTag; holds no PressureState ref.
Clarification (Si sweep 2026-06-07): supersedes the description''s ''feeds D-100 DamageOverlay'' line. Per the T-979 refinement (authoritative), the condition overlay does NOT feed D-100 BuildingConditionState is a standalone system (OccupancyState/VegetationEncroachment over EconEvent). Implementer: ignore the D-100 reference; do not wire DamageOverlay.', 'backlog', 'medium', NULL, 'server', 'D-198', '2026-05-25 19:11:55', '2026-06-07 08:40:15', NULL, '96529c647d500ec6989667921b742c25', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_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 (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-960', 'story', 'T-750', 'Per-layer Atlas map viewer (generation progress viewer)', 'Render each cascade layer as a MAP in the implant Atlas (D-191, the Phase 3 viewer — D-166 amendment): terrain → water → biome → settlements → political zones → quarter/block skeleton → tiles. This is the progress-viewer deliverable; NO in-world rendering. Grows as each layer lands.
---
Refinement (2026-05-23, /whats-next):
- DATA TRANSPORT (resolves Q-098): NO bake baking derived layer data makes mods second-class. A server-side FILE STREAM PROXY: resolves a body source files across base + mod paths, runs the deterministic cascade on demand (run_cascade, LRU-cached per D-203, ~45ms), and streams serialized layer data to the Godot client over IPC. First-party and mod bodies use the identical path; no pre-baked derived artifacts. Protocol/stream spec designed with Tyre and recorded in a D-record resolving Q-098.
- UI: layer selector in the existing regional Atlas view; layers are ADDITIVE overlays (toggle heightmap + rivers + attractors + sub-biome together and composite), not one-at-a-time matching the existing overlay-bar model (D-191).
- SCOPE NOW: only Layer 0 (heightmap) + Layer 1 (rivers/basins/attractors/sub-biome) exist; the viewer grows as layers land (D-166). Acceptance: Layer 0 + Layer 1 render as additive, toggleable overlays for a body, fed by the proxy.
---
Design (D-226, Araminta, 2026-05-24) human-visual layer of the inspection harness. Extend OVERLAY_DEFS / AtlasOverlayBar with a generation overlay group (second row) + a left-side legend panel; do NOT build a separate viewer. Encoding: relief base; rivers as blue polylines (mouths = double-circle markers, confluences where in-degree >= 3); basin fills very translucent + thin boundary polylines; attractors as markers where SHAPE encodes the 7 AttractorTypes (circle/half-circle/diamond/down-tri/up-tri/hollow-circle/square) and COLOR encodes sub-biome (shape carries identity in headless/monochrome; color is additive); size scales with strength, skip strength < 0.15. Stable button ids gen_l0_heightmap / gen_l1_rivers / gen_l1_basins / gen_l1_attractors; start pending/locked, unlock+activate via notify_gen_layer_ready(id) as data arrives (grows as layers land, D-166). Consumes the live proxy (#969); the agent channel (#971) drives this same UI.
Remaining to close (Si sweep 2026-06-07): add the gen_l0_heightmap overlay to OVERLAY_DEFS + render path in atlas_viewer.gd / atlas_marker_overlay.gd required by the D-226/T-960 acceptance criteria but currently absent. Layer-1 overlays (rivers/basins/attractors) + proxy wire + pending indicator are already implemented; this Layer-0 overlay is the sole remaining piece.', 'in_progress', 'high', NULL, 'client', 'D-191', '2026-05-22 17:42:34', '2026-06-07 08:40:15', NULL, 'c92d9a6e152f0c535a8c2001c0ed4a5f', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_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);