diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index 9f930f84a..43a6bb232 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -3111,3 +3111,15 @@ DELIVERED BY DEFERRAL (2026-07-25, PR #213): docs/assets/briefs/deferred.md is t 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 ('06FBPTXPPHC9FZ4T0GNKR615PR', 'status', 'backlog', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.653', '2026-07-25 21:11:27.653', NULL, 'dafe6739e5ec3e606557ef89f48a59e5', 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 ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'status', 'review', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.660', '2026-07-25 21:11:27.660', NULL, 'ec46f47d92d5c6fe9490a72aa929c9f2', 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 ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'status', 'review', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.661', '2026-07-25 21:11:27.661', NULL, '8cebf78377da9513e22843c0e0c72a02', 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 ('06FSP4MX7C66N76V31EB88YC78', 'description', 'Found during the T-1053 briefing rewrite (2026-07-25): D-126 and D-131 have been repurposed to content unrelated to what v0.2-era documents cite them for. The old araminta briefing cited ''D-126 = character customisation dimensions'' — current D-126 reads ''Groundhog Day alarm clock homage — first game day only'' (the customisation work actually shipped as D-159–D-164). The old briefing cited ''D-131 = apartment/insert first-moment priority'' — current D-131 is ''broad economic verb vocabulary (life verbs, not tycoon-specific)''. This is ID-drift, not staleness: any document still citing the old meanings cites the WRONG decision entirely. Task: (1) first establish the MECHANISM — were these IDs renumbered during the DQR-tree migration, or were the era documents mis-cited at write time? If renumbering, derive the full affected-ID set from the migration mapping, not just these two. (2) Repo-wide grep for D-126/D-131 (and any other affected IDs) across docs/, wiki/, governance/ prose, and .claude/, classifying each hit as current-meaning (fine) vs era-meaning (fix or annotate). (3) Fix or annotate the stale citations; note the outcome here. The rewritten araminta.md (T-1053) is already clean. Clerk-profile work — D-record consistency audit.', 'Found during the T-1053 briefing rewrite (2026-07-25): D-126 and D-131 have been repurposed to content unrelated to what v0.2-era documents cite them for. The old araminta briefing cited ''D-126 = character customisation dimensions'' — current D-126 reads ''Groundhog Day alarm clock homage — first game day only'' (the customisation work actually shipped as D-159–D-164). The old briefing cited ''D-131 = apartment/insert first-moment priority'' — current D-131 is ''broad economic verb vocabulary (life verbs, not tycoon-specific)''. This is ID-drift, not staleness: any document still citing the old meanings cites the WRONG decision entirely. Task: (1) first establish the MECHANISM — were these IDs renumbered during the DQR-tree migration, or were the era documents mis-cited at write time? If renumbering, derive the full affected-ID set from the migration mapping, not just these two. (2) Repo-wide grep for D-126/D-131 (and any other affected IDs) across docs/, wiki/, governance/ prose, and .claude/, classifying each hit as current-meaning (fine) vs era-meaning (fix or annotate). (3) Fix or annotate the stale citations; note the outcome here. The rewritten araminta.md (T-1053) is already clean. Clerk-profile work — D-record consistency audit. + +Batch-7 Si pre-answer (2026-07-25): the ticket''s question (1) is RESOLVED — the pql migration did NOT renumber decision ids. tooling/pql-migrate/restructure_decisions.py''s own docstring states the migration is token-preserving (''the [D-NNN] bracket text and #d-nnn-... anchor stay byte-identical'' — only file locations and link paths changed), and seed_tickets.py preserves decision_ref verbatim. Therefore the D-126/D-131 drift is write-time mis-citation in the era documents (or later reuse/repurposing through ordinary record editing), and the sweep scope is exactly D-126/D-131 (plus any other ids the sweep itself surfaces as suspicious), not a migration-derived affected set. Start at step (2).', NULL, '2026-07-25 21:15:56', '2026-07-25 21:15:56.268', '2026-07-25 21:15:56.268', NULL, 'a7f3bab5f499e3a21715219db421e630', 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 ('06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'description', 'Parallel asset pipeline producing the walls/doors/props/lamp-posts/etc. the tile fill places, with rural and station variants, tracked in a production-status catalog. Runs alongside generation.', 'Parallel asset pipeline producing the walls/doors/props/lamp-posts/etc. the tile fill places, with rural and station variants, tracked in a production-status catalog. Runs alongside generation. + +Q-119 sequencing ruling (lead, batch-7 activation, 2026-07-25): the child stories T-1200..T-1204 follow the BRIEFS'' narrow reading — Q-119 gates only whether the generic-parent placeholder line-item counts as milestone-0; it never gates specific-token production. T-1049''s older ''Decide Q-119 before sequencing'' line is superseded as imprecise (the reviewed, merged briefs are the work contracts). Specific-token work on any story may start immediately; the generic-parent line items stay provisional until Q-119 resolves. Surfaced to Jeroen for cheap veto in the batch-7 report.', NULL, '2026-07-25 21:16:03', '2026-07-25 21:16:03.830', '2026-07-25 21:16:03.830', NULL, '36ca919e5e410cf99feb6bbfc3c91889', 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 ('06FPPM0KP850FN6WQ5PDEX9ZS4', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 21:16:09', '2026-07-25 21:16:09.468', '2026-07-25 21:16:09.468', NULL, '074ebb15c9da80c5ae6778b969dad0bb', 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 ('06FSP4MX7C66N76V31EB88YC78', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 21:16:09', '2026-07-25 21:16:09.474', '2026-07-25 21:16:09.474', NULL, 'c2cc60713ad1366da71e1d5c1071f21d', 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 ('06FSP7HT5ES8D83VZA6ETACRAW', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 21:16:09', '2026-07-25 21:16:09.474', '2026-07-25 21:16:09.474', NULL, 'e04031c2f45d76cfaec042afa34b2863', 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 ('06FPPM0KP850FN6WQ5PDEX9ZS4', 'assigned_to', NULL, 'dudley', NULL, '2026-07-25 21:16:12', '2026-07-25 21:16:12.993', '2026-07-25 21:16:12.993', NULL, '5a1279c95e7f72db48cd78cbc492cc35', 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 ('06FSP7HT5ES8D83VZA6ETACRAW', 'assigned_to', NULL, 'justine', NULL, '2026-07-25 21:16:13', '2026-07-25 21:16:13.465', '2026-07-25 21:16:13.465', NULL, 'c00c4231a9e967524b556aadf3255cb8', 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 ('06FSP4MX7C66N76V31EB88YC78', 'assigned_to', NULL, 'clerk', NULL, '2026-07-25 21:16:14', '2026-07-25 21:16:14.050', '2026-07-25 21:16:14.050', NULL, 'a1bb4b5b3f1fba52fc7fa1a6be8e5e02', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index a9e673619..2750fcc36 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -5281,3 +5281,19 @@ framing, lists araminta''s actual current/open tickets. SEQUENCING: independent of T-1049 (different files, no shared input) — both can run in the same batch.', 'done', 'medium', 'qatux', 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 21:11:27.661', NULL, 'df35c3bfd15e38822bc24019e04cadd1', 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 ('06FSP4MX7C66N76V31EB88YC78', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Sweep stale D-126/D-131 citations — decision-ID drift audit', 'Found during the T-1053 briefing rewrite (2026-07-25): D-126 and D-131 have been repurposed to content unrelated to what v0.2-era documents cite them for. The old araminta briefing cited ''D-126 = character customisation dimensions'' — current D-126 reads ''Groundhog Day alarm clock homage — first game day only'' (the customisation work actually shipped as D-159–D-164). The old briefing cited ''D-131 = apartment/insert first-moment priority'' — current D-131 is ''broad economic verb vocabulary (life verbs, not tycoon-specific)''. This is ID-drift, not staleness: any document still citing the old meanings cites the WRONG decision entirely. Task: (1) first establish the MECHANISM — were these IDs renumbered during the DQR-tree migration, or were the era documents mis-cited at write time? If renumbering, derive the full affected-ID set from the migration mapping, not just these two. (2) Repo-wide grep for D-126/D-131 (and any other affected IDs) across docs/, wiki/, governance/ prose, and .claude/, classifying each hit as current-meaning (fine) vs era-meaning (fix or annotate). (3) Fix or annotate the stale citations; note the outcome here. The rewritten araminta.md (T-1053) is already clean. Clerk-profile work — D-record consistency audit. + +Batch-7 Si pre-answer (2026-07-25): the ticket''s question (1) is RESOLVED — the pql migration did NOT renumber decision ids. tooling/pql-migrate/restructure_decisions.py''s own docstring states the migration is token-preserving (''the [D-NNN] bracket text and #d-nnn-... anchor stay byte-identical'' — only file locations and link paths changed), and seed_tickets.py preserves decision_ref verbatim. Therefore the D-126/D-131 drift is write-time mis-citation in the era documents (or later reuse/repurposing through ordinary record editing), and the sweep scope is exactly D-126/D-131 (plus any other ids the sweep itself surfaces as suspicious), not a migration-derived affected set. Start at step (2).', 'backlog', 'medium', NULL, 'server', NULL, '2026-07-25 20:58:36.219', '2026-07-25 21:15:56.268', NULL, '7a49fda7edb41f75cb7b566ff6b26f4d', 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 ('06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Asset pipeline + catalog (walls, doors, props; rural & station variants)', 'Parallel asset pipeline producing the walls/doors/props/lamp-posts/etc. the tile fill places, with rural and station variants, tracked in a production-status catalog. Runs alongside generation. + +Q-119 sequencing ruling (lead, batch-7 activation, 2026-07-25): the child stories T-1200..T-1204 follow the BRIEFS'' narrow reading — Q-119 gates only whether the generic-parent placeholder line-item counts as milestone-0; it never gates specific-token production. T-1049''s older ''Decide Q-119 before sequencing'' line is superseded as imprecise (the reviewed, merged briefs are the work contracts). Specific-token work on any story may start immediately; the generic-parent line items stay provisional until Q-119 resolves. Surfaced to Jeroen for cheap veto in the batch-7 report.', 'backlog', 'medium', NULL, 'visual', 'D-166', '2026-05-22 17:42:34', '2026-07-25 21:16:03.830', NULL, '08365e80c93106caa1a8e1068a7dcd7c', 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 ('06FPPM0KP850FN6WQ5PDEX9ZS4', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Road graph: 0 routable edges on water-heavy bodies — placements land in water-majority routing cells, every A* pair drops', 'Found during T-1076 (road-hub refinement) verification: several real bodies (GJ251c, GJ380c) produce 0 routable road edges because settlement placements land in water-majority routing cells, so every A* pair is dropped. PRE-EXISTING behavior (T-1038''s core had the same drop path) but now more visible with hub/spur semantics and on the Atlas road overlay. Candidate fixes per Dudley: coastal-cell routing relaxation (allow routing through coast-adjacent cells at a cost penalty) or a placement nudge (settlements snap out of water-majority cells at L3). Affects the Atlas planet-browsing experience directly: water-heavy bodies show settlements but no roads.', 'in_progress', 'medium', NULL, 'server', NULL, '2026-07-16 14:23:57.874', '2026-07-25 21:16:09.467', NULL, '359b2d1d0c0e27b724af7a73908238a3', 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 ('06FSP4MX7C66N76V31EB88YC78', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Sweep stale D-126/D-131 citations — decision-ID drift audit', 'Found during the T-1053 briefing rewrite (2026-07-25): D-126 and D-131 have been repurposed to content unrelated to what v0.2-era documents cite them for. The old araminta briefing cited ''D-126 = character customisation dimensions'' — current D-126 reads ''Groundhog Day alarm clock homage — first game day only'' (the customisation work actually shipped as D-159–D-164). The old briefing cited ''D-131 = apartment/insert first-moment priority'' — current D-131 is ''broad economic verb vocabulary (life verbs, not tycoon-specific)''. This is ID-drift, not staleness: any document still citing the old meanings cites the WRONG decision entirely. Task: (1) first establish the MECHANISM — were these IDs renumbered during the DQR-tree migration, or were the era documents mis-cited at write time? If renumbering, derive the full affected-ID set from the migration mapping, not just these two. (2) Repo-wide grep for D-126/D-131 (and any other affected IDs) across docs/, wiki/, governance/ prose, and .claude/, classifying each hit as current-meaning (fine) vs era-meaning (fix or annotate). (3) Fix or annotate the stale citations; note the outcome here. The rewritten araminta.md (T-1053) is already clean. Clerk-profile work — D-record consistency audit. + +Batch-7 Si pre-answer (2026-07-25): the ticket''s question (1) is RESOLVED — the pql migration did NOT renumber decision ids. tooling/pql-migrate/restructure_decisions.py''s own docstring states the migration is token-preserving (''the [D-NNN] bracket text and #d-nnn-... anchor stay byte-identical'' — only file locations and link paths changed), and seed_tickets.py preserves decision_ref verbatim. Therefore the D-126/D-131 drift is write-time mis-citation in the era documents (or later reuse/repurposing through ordinary record editing), and the sweep scope is exactly D-126/D-131 (plus any other ids the sweep itself surfaces as suspicious), not a migration-derived affected set. Start at step (2).', 'in_progress', 'medium', NULL, 'server', NULL, '2026-07-25 20:58:36.219', '2026-07-25 21:16:09.474', NULL, '1de606d715fe694573edb517b86f6172', 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 ('06FSP7HT5ES8D83VZA6ETACRAW', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Furniture/props asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/furniture-props.md — interior furniture + small props (manifest categories furniture|props), D-257 toon treatment, conventions.md naming/mask/footprint_tiles rules. FIRST acceptance: promote + rename the 4 promotable spike GLBs (baroque_table, modernist_chair, scifi_desk + props/lion_statue) into client/assets/models/ + manifest.json per D-241 — no new generation needed; vw_beetle stays excluded (Q-067 car deferral, see briefs/deferred.md). Note: spike GLB binaries are gitignored — regenerate or restore locally at promotion time per the spike README.', 'in_progress', 'medium', NULL, 'visual', NULL, '2026-07-25 21:11:17.291', '2026-07-25 21:16:09.474', NULL, 'f5187b399a214c444d8314e6c37f70b6', 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 ('06FPPM0KP850FN6WQ5PDEX9ZS4', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Road graph: 0 routable edges on water-heavy bodies — placements land in water-majority routing cells, every A* pair drops', 'Found during T-1076 (road-hub refinement) verification: several real bodies (GJ251c, GJ380c) produce 0 routable road edges because settlement placements land in water-majority routing cells, so every A* pair is dropped. PRE-EXISTING behavior (T-1038''s core had the same drop path) but now more visible with hub/spur semantics and on the Atlas road overlay. Candidate fixes per Dudley: coastal-cell routing relaxation (allow routing through coast-adjacent cells at a cost penalty) or a placement nudge (settlements snap out of water-majority cells at L3). Affects the Atlas planet-browsing experience directly: water-heavy bodies show settlements but no roads.', 'in_progress', 'medium', 'dudley', 'server', NULL, '2026-07-16 14:23:57.874', '2026-07-25 21:16:12.993', NULL, '2576e01eff3fd0ea9c8cc5477c082be2', 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 ('06FSP7HT5ES8D83VZA6ETACRAW', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Furniture/props asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/furniture-props.md — interior furniture + small props (manifest categories furniture|props), D-257 toon treatment, conventions.md naming/mask/footprint_tiles rules. FIRST acceptance: promote + rename the 4 promotable spike GLBs (baroque_table, modernist_chair, scifi_desk + props/lion_statue) into client/assets/models/ + manifest.json per D-241 — no new generation needed; vw_beetle stays excluded (Q-067 car deferral, see briefs/deferred.md). Note: spike GLB binaries are gitignored — regenerate or restore locally at promotion time per the spike README.', 'in_progress', 'medium', 'justine', 'visual', NULL, '2026-07-25 21:11:17.291', '2026-07-25 21:16:13.465', NULL, 'ae6be73a0e4fe79e1883fee45871402b', 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 ('06FSP4MX7C66N76V31EB88YC78', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Sweep stale D-126/D-131 citations — decision-ID drift audit', 'Found during the T-1053 briefing rewrite (2026-07-25): D-126 and D-131 have been repurposed to content unrelated to what v0.2-era documents cite them for. The old araminta briefing cited ''D-126 = character customisation dimensions'' — current D-126 reads ''Groundhog Day alarm clock homage — first game day only'' (the customisation work actually shipped as D-159–D-164). The old briefing cited ''D-131 = apartment/insert first-moment priority'' — current D-131 is ''broad economic verb vocabulary (life verbs, not tycoon-specific)''. This is ID-drift, not staleness: any document still citing the old meanings cites the WRONG decision entirely. Task: (1) first establish the MECHANISM — were these IDs renumbered during the DQR-tree migration, or were the era documents mis-cited at write time? If renumbering, derive the full affected-ID set from the migration mapping, not just these two. (2) Repo-wide grep for D-126/D-131 (and any other affected IDs) across docs/, wiki/, governance/ prose, and .claude/, classifying each hit as current-meaning (fine) vs era-meaning (fix or annotate). (3) Fix or annotate the stale citations; note the outcome here. The rewritten araminta.md (T-1053) is already clean. Clerk-profile work — D-record consistency audit. + +Batch-7 Si pre-answer (2026-07-25): the ticket''s question (1) is RESOLVED — the pql migration did NOT renumber decision ids. tooling/pql-migrate/restructure_decisions.py''s own docstring states the migration is token-preserving (''the [D-NNN] bracket text and #d-nnn-... anchor stay byte-identical'' — only file locations and link paths changed), and seed_tickets.py preserves decision_ref verbatim. Therefore the D-126/D-131 drift is write-time mis-citation in the era documents (or later reuse/repurposing through ordinary record editing), and the sweep scope is exactly D-126/D-131 (plus any other ids the sweep itself surfaces as suspicious), not a migration-derived affected set. Start at step (2).', 'in_progress', 'medium', 'clerk', 'server', NULL, '2026-07-25 20:58:36.219', '2026-07-25 21:16:14.050', NULL, '6af3687d11dbacd7098b1b479876423e', 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);