INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYXCMB1D08PW87FR9C','description',NULL,'Parked under Phase 5 epic per cascade refocus 2026-06-12 — art direction (Q-003, still open) is decided when in-world rendering with final-version assets begins.',NULL,'2026-06-12 10:23:02','2026-06-12 10:23:02','2026-06-12 10:23:02',NULL,'acc5b2b585797cc26b0c657f5bc70f66',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYWZ8VC3HVQJ6HA59R','description',NULL,'Parked post-cascade per refocus 2026-06-12 — licensing/distribution (Q-008, still open) is a making-it-a-game/shipping concern with no generation dependency.',NULL,'2026-06-12 10:23:02','2026-06-12 10:23:02','2026-06-12 10:23:02',NULL,'ac5e3e61c3e2fd426eac582e35e9dbc1',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY7PWMK1F1DAWC08T8','description',NULL,'Parked post-cascade per refocus 2026-06-12 — storyteller AI (Q-010, still open) is a gameplay system with no generation dependency; functional requirement preserved.',NULL,'2026-06-12 10:23:02','2026-06-12 10:23:02','2026-06-12 10:23:02',NULL,'6b090290ac932f4a707ffedd091699f2',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWCSXFAG1E4TS7HAB4','description','LOS-based shadowcasting per z-level. Vision cone (forward/peripheral/behind). Walls block vision, fog returns on departure. Universal for all entities.','LOS-based shadowcasting per z-level. Vision cone (forward/peripheral/behind). Walls block vision, fog returns on departure. Universal for all entities.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—fog-of-perceptionvisionisaplayer-surfacesystembuiltongeneratedtiles;functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'f27fb8bb3f82aa2c2e640ac1bcb2a0c2', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY3PA3E31NAVQHR5GC','description','Locked to character, no panning. Optional rotation to facing direction (deferred to post-v0.1). Fixed-north for v0.1.','Locked to character, no panning. Optional rotation to facing direction (deferred to post-v0.1). Fixed-north for v0.1.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—lockedcameraisplayer-controlwork;functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '2935f673242e4ff88f0c7b14ce178227', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWBH6313PF00570RGR','description','Character voice narration for non-visual perception, atmosphere, diegetic hints. Contextual line selection based on situation, character personality, knowledge state.','Character voice narration for non-visual perception, atmosphere, diegetic hints. Contextual line selection based on situation, character personality, knowledge state.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—internalmonologueisaplayerperceptionsurface;line-contentdetailcandeepeninPhase6.Functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '5cb0f2cc30572fbd4e0c4e326a690fd6', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYTW3T8YYBJ0VSSZM8','description','First-class information tagging. Every piece of game state tagged with observer access. Foundation for fog, perception modes, NPC knowledge.','First-class information tagging. Every piece of game state tagged with observer access. Foundation for fog, perception modes, NPC knowledge.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—observer-accessinformationtaggingisthefoundationforfog/perceptionplayersurfaces;functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'f56430bad89233185505cfd24fd56f44', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXZK7C4X2DHQ6A0CKR','description','Neural insert UI. POI discovery system (background, NPC tips, research, discovery). Minimap with directional arrows for distant POIs.','Neural insert UI. POI discovery system (background, NPC tips, research, discovery). Minimap with directional arrows for distant POIs.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—minimap/POIdiscoveryisaHUDnavigationsurfaceforin-worldplay;functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'c28b1ea27a5afab3f9e6a5960270178a', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY5H0R4JCAJ6MY4X44','description','Revise D-014 for vertical slice: station district layout, workplace/bar/smuggling ring locations, 15-40 tile functional clusters, 2-3 z-levels.','Revise D-014 for vertical slice: station district layout, workplace/bar/smuggling ring locations, 15-40 tile functional clusters, 2-3 z-levels.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—thev0.1vertical-sliceframingissuperseded,butstationdistrictlayoutwithfunctionalclusterssurvivesasecon-layer/building-placementgenerationwork.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '387bd6989f40f1223efdff0357cd71ac', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXYZC8QDKK423KFSKC','description','30/50/20 entanglement ratio (flat/mundane/intrigue). Variable per seed. Module attachment to known NPCs (60-70/30-40 ratio, also variable).','30/50/20 entanglement ratio (flat/mundane/intrigue). Variable per seed. Module attachment to known NPCs (60-70/30-40 ratio, also variable).
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—populationentanglementratiosarebackground-NPC-layerwork;functionalrequirementpreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '57ee2ecbff7e57e7c04c9db0bce007f9', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ5AP28E96W00KB0R4','description','Test harness for simulation server. External test modules, deterministic replay, ECS state inspection, behavior validation. Minimal production code pollution.','Test harness for simulation server. External test modules, deterministic replay, ECS state inspection, behavior validation. Minimal production code pollution.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—servertestinfrastructureisongoinginfrahygiene(muchalreadydeliveredviatheGauntlet/verificationharness);remainingscopepreserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'fd801d30de40ef78e44be5f0c73d4ce7', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWRV5KJ6DVD742S678','description','Run simulation headless via terminal. Log output for verification. No GUI dependency.','Run simulation headless via terminal. Log output for verification. No GUI dependency.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—headlessCLIharnessistesttoolinghygieneunderdoneepicT-35;verifyremaininggapvstheexisting--test-mode/Gauntlet headless path.', NULL, '2026-06-12 10:23:02', '2026-06-12 10:23:02', '2026-06-12 10:23:02', NULL, '66839fb3d4e996acc7300d364dbc7450', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRX13JY1N9BF76CK8WW','description','TCP-based bridge for future multiplayer. Same interface as LocalBridge, deferred implementation.','TCP-based bridge for future multiplayer. Same interface as LocalBridge, deferred implementation.
Parkedpost-cascadeperrefocus2026-06-12—theTCPNetworkBridgeforfuturemultiplayerhasnogenerationdependencyandstaysdeferred;functionalrequirementpreserved(sameinterfaceasLocalBridge).', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '0bc66738b138867012998db30c3e47ac', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYHPH9Q44CERYSRYJC','description','Monologue can be wrong. Character misinterpretations. Knowledge-gated accuracy.','Monologue can be wrong. Character misinterpretations. Knowledge-gated accuracy.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;functionalrequirement(knowledge-gatedmonologueaccuracy)preserved,notcancelled.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '47e981f0914997d744de13d003d99aa9', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWEGYAEQXDVSMF4THG','description','Colored boxes, simple sprites, labels. Functional but not polished. Per D-014 guidance.','Colored boxes, simple sprites, labels. Functional but not polished. Per D-014 guidance.
Re-parentedunderPhase4epic(T-750)percascaderefocus2026-06-12;scopeupdatedfromv0.1placeholderarttothefinal-versionassetpipelineperD-166(noplaceholders,notestmap)—functionalrequirement(assetproductionpipeline)preserved.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'dda68f7fbce543e1d4483060a27976f0', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYR09VY1F6C42PACGW','description','Different characters see different POIs. Profession-based, faction-based, relationship-based visibility.','Different characters see different POIs. Profession-based, faction-based, relationship-based visibility.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;profession/faction/relationship-gatedPOIvisibilitypreserved,notcancelled.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, 'b03d0c586f36e9e08e47b1993ec5b31e', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYX9R1F6SDN27PDND8','description','60-70/30-40 known vs stranger ratio for module attachment. Variable per seed. Anti-metagaming.','60-70/30-40 known vs stranger ratio for module attachment. Variable per seed. Anti-metagaming.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;drama-moduleattachmentratios(anti-metagaming)preserved,notcancelled.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '5e39ddd2b0467615325fb3c7371cc08c', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY9FP8GJSR96661J9M','description','Define rules: what test hooks are acceptable in production code, what must stay external. Pollution boundaries.','Define rules: what test hooks are acceptable in production code, what must stay external. Pollution boundaries.
Re-homedundermaintenancepercascaderefocus2026-06-12;production-codetest-hookpolicyisengineering-hygienedocumentation.', NULL, '2026-06-1210:23:02', '2026-06-1210:23:02', '2026-06-1210:23:02', NULL, '131a8ef9207d04512a3c52e8a794b3f5', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY8KWVN9TCM2G5XXG8','description','Tile collision, pathfinding, NPC movement, and game clock systems. Hard blockers identified in v0.1 gap analysis workshop. Without these, NPCs cannot physically navigate the station.','Tile collision, pathfinding, NPC movement, and game clock systems. Hard blockers identified in v0.1 gap analysis workshop. Without these, NPCs cannot physically navigate the station.
ParkedunderPhase5epic(T-749)percascaderefocus2026-06-12;previousparentinitiativeT-29iscancelled—tilecollision/pathfinding/clockistheplayer-walkingfoundation(NPCmovementportionfollowsinPhase6).', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '1329583e026c26024db16b70da7878f3', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ202MPMFH0EDH2BT4','description','Unified observation pipeline and player interaction systems. The experience layer that connects perception, knowledge, and monologue into the core gameplay loop. Identified as the missing spine in gap analysis workshop.','Unified observation pipeline and player interaction systems. The experience layer that connects perception, knowledge, and monologue into the core gameplay loop. Identified as the missing spine in gap analysis workshop.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;theobservation/interactionspineofthecoregameplayloopispreserved,notcancelled.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '26149fcd78db4ea4888549edb6a66308', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZP48TDBTW18P88WNW','description','Save/load, session management, and game state serialization systems. Required for playable v0.1 sessions.','Save/load, session management, and game state serialization systems. Required for playable v0.1 sessions.
ParkedunderPhase5epic(T-749)percascaderefocus2026-06-12;save/loadandsessionmanagementaretiedtoplayablesessions(savegamelineageisdocumentedasPhase5+).', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'e6ea3e6e6ce541d5a4140209eac0f075', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXVMATNG8QEJVVVCH0','description','Design workshop for KnowledgeGraph component to replace Vec<String> placeholder.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ8NCH53C9VAC2N3V8','description','Design workshop for perception query algorithm that generates ObserverSnapshot.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZVC39DY5152CXZMB0','description','Design workshop for save/load system architecture.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWSBWTKM42BVVMPXJG','description','Design workshop for map authoring toolchain and format.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWYBGV0A6RBVS1NSP0','description',NULL,'Parked under Phase 5 epic per cascade refocus 2026-06-12; player control workshop runs when player work begins.',NULL,'2026-06-12 10:23:03','2026-06-12 10:23:03','2026-06-12 10:23:03',NULL,'485da6b215d9f0942e2e5736cc227d55',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXTV61ZRF9RZ6V1NXR','description','Broad design discussion to map out ALL the data feed systems the insert will eventually surface, identify common patterns, and design foundational plumbing that serves them all. This is bigger than the onboarding dossier — it is the insert as an information platform.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWJ60W2RFN2FQ2P3EW','description','Sprint 25 spike: generator must produce usable output before anything else matters. Prove auto-generated locations at scale with legible characters. Template assembly (not procedural geography) for v0.2. See workshop decisions #1, #7, #22, #23. Estimated 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3) — Tyre estimate.','Sprint 25 spike: generator must produce usable output before anything else matters. Prove auto-generated locations at scale with legible characters. Template assembly (not procedural geography) for v0.2. See workshop decisions #1, #7, #22, #23. Estimated 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3) — Tyre estimate.
Parkedingameplaybacklogpercascaderefocus2026-06-12;template-assemblygenerationsupersededbytheT-750cascade—proof-of-lifeplaytestconceptpreserved.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '8637267369c90396682245eaf70e3583', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXD5W32VCV5YZY3NX0','description','Tycoon is the v0.2 bookmark: small business owner, existing in the Krenn System. Zero investigation content. Tycoon = aspiration not starting state. Workshop decisions #4, #19, #20. Broad economic verb vocabulary serving all careers. Auto-generated apartment reflecting wealth + cultural context. CK3-style bookmark selection flow.','Tycoon is the v0.2 bookmark: small business owner, existing in the Krenn System. Zero investigation content. Tycoon = aspiration not starting state. Workshop decisions #4, #19, #20. Broad economic verb vocabulary serving all careers. Auto-generated apartment reflecting wealth + cultural context. CK3-style bookmark selection flow.
Parkedingameplaybacklogpercascaderefocus2026-06-12;bookmarkconceptpreservedforpost-cascadegame-making.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'f48ed040780f6cda4ee5a5d83d4be639', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXE0VWDHVQTXPVPEW0','description','CK3-style character creation: skills + bookmark selection. Full cosmetic customisation (hair, clothing, colours — workshop decision #11). Culture implicit in starting location (decision #16). No family/culture/religion sliders in creation — those are deferred. Decision #2.','CK3-style character creation: skills + bookmark selection. Full cosmetic customisation (hair, clothing, colours — workshop decision #11). Culture implicit in starting location (decision #16). No family/culture/religion sliders in creation — those are deferred. Decision #2.
Parkedingameplaybacklogpercascaderefocus2026-06-12;bookmark-selectionflowpreserved—cosmeticcustomisationtrackedseparatelyunderPhase5(T-619).', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '952fc393969df30789555e0e1c86cd3a', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ65H50N3XJKJ3F5XM','description','The world is quietly responsive, not indifferent. Gradient of caring by social proximity — world doesn''t care globally but notices locally. Dual-scale consequence model: Rimworld sharp events (crises, reversals) + DF slow accumulation (reputation, debt, relationship erosion). Setting delivery via both visual and insert layers in parallel. Workshop decisions #10, #12, #13, #21.','The world is quietly responsive, not indifferent. Gradient of caring by social proximity — world doesn''t care globally but notices locally. Dual-scale consequence model: Rimworld sharp events (crises, reversals) + DF slow accumulation (reputation, debt, relationship erosion). Setting delivery via both visual and insert layers in parallel. Workshop decisions #10, #12, #13, #21.
Parkedingameplaybacklogpercascaderefocus2026-06-12;world-feeldecisionspreservedforpost-cascadegame-making.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'f73bbff50e3086e97148bbec5e270859', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZHHSBPQS9VB8S7D5M','description','Cosmetic customisation: hair, clothing, colours. Decision #11. Separate from skills/bookmark — aesthetic only. Question open: do creation choices trace into the generated apartment? (Q-WTF-040).','Cosmetic customisation: hair, clothing, colours. Decision #11. Separate from skills/bookmark — aesthetic only. Question open: do creation choices trace into the generated apartment? (Q-WTF-040).
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualscustomisationresumeswithplayerrendering(overlapsT-694).', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '93028af6bfd2b06dd2b1e7f143b6306e', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZBZHXAK3DYTK1C19R','description','NPC-to-NPC and NPC-to-player relationships form through: Sims-style direct interaction + Rimworld-style shared adversity. Decision #17. Relationships must be readable from the outside. Codify for systems. Decision #18: prove relationships readable before layering narrative depth.','NPC-to-NPC and NPC-to-player relationships form through: Sims-style direct interaction + Rimworld-style shared adversity. Decision #17. Relationships must be readable from the outside. Codify for systems. Decision #18: prove relationships readable before layering narrative depth.
ParkedunderPhase6epicpercascaderefocus2026-06-12(previousparentT-607cancelled);relationship-formationrequirementpreservedfortheNPClayer.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'db160085efbdb1baa50e081cee38348c', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXK4NDX3Y242QK7BC8','description','The world notices locally but doesn''t care globally. Gradient of caring based on social proximity. Decision #10. Primary social contacts develop responsiveness over time. Indifferent world is wrong — quietly responsive world is right. Implementation: proximity-weighted NPC attention and reaction systems.','The world notices locally but doesn''t care globally. Gradient of caring based on social proximity. Decision #10. Primary social contacts develop responsiveness over time. Indifferent world is wrong — quietly responsive world is right. Implementation: proximity-weighted NPC attention and reaction systems.
ParkedunderPhase6epicpercascaderefocus2026-06-12;quietly-responsive-worldrequirementpreservedfortheNPClayer.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '0222df0f946a02c1b17fc43a5d501275', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXJDMPQNP05JFD2P6G','description','sr-voice has cargo features for rocm/vulkan/cuda/metal but builds CPU-only (~13 t/s). Enable after code stable. GPU would reach 50+ t/s. LIBCLANG_PATH already in Makefile.','sr-voice has cargo features for rocm/vulkan/cuda/metal but builds CPU-only (~13 t/s). Enable after code stable. GPU would reach 50+ t/s. LIBCLANG_PATH already in Makefile.
Re-homedundermaintenancepercascaderefocus2026-06-12;GPUbuild-featureenablementisinfrahygieneontheexistingvoicepipeline.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '9ce4fe243def647e8b9e361acbc388ad', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRW36DF5F95406ETRGR','description','Trigger ticket: when any server module beyond voice/hardware.rs needs OS-dependent info (CPU, memory, battery, GPU), extract shared platform queries into server/src/platform.rs. Currently all OS detection lives in server/src/voice/hardware.rs (sysinfo crate, on_battery(), VRAM probes, available_parallelism). Single consumer, no duplication — no action needed until a second consumer appears. Trigger conditions: (1) a second system needs CPU/memory info independently of voice pipeline, (2) battery detection needed outside voice scaling (e.g. tick rate throttling), (3) server exposes system info over IPC (multiplayer diagnostics). Extraction is ~30 minutes: pull on_battery(), probe_current_free(), sysinfo calls into platform.rs, leave voice-specific scaling logic in hardware.rs.','Trigger ticket: when any server module beyond voice/hardware.rs needs OS-dependent info (CPU, memory, battery, GPU), extract shared platform queries into server/src/platform.rs. Currently all OS detection lives in server/src/voice/hardware.rs (sysinfo crate, on_battery(), VRAM probes, available_parallelism). Single consumer, no duplication — no action needed until a second consumer appears. Trigger conditions: (1) a second system needs CPU/memory info independently of voice pipeline, (2) battery detection needed outside voice scaling (e.g. tick rate throttling), (3) server exposes system info over IPC (multiplayer diagnostics). Extraction is ~30 minutes: pull on_battery(), probe_current_free(), sysinfo calls into platform.rs, leave voice-specific scaling logic in hardware.rs.
Re-homedundermaintenancepercascaderefocus2026-06-12;triggerconditionsunchanged.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'fa543df4e53e1f4640de0f2d8fd0e564', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY4CMF4W57DCQASQNW','description','When team agents discover new work during a sprint (like #661 zone-type templates in Sprint 26), they should message the lead immediately for retroactive ticket creation rather than just doing the work uncaptured. Document this in the sprint-start skill agent spawn prompt and/or team-patterns.md.','When team agents discover new work during a sprint (like #661 zone-type templates in Sprint 26), they should message the lead immediately for retroactive ticket creation rather than just doing the work uncaptured. Document this in the sprint-start skill agent spawn prompt and/or team-patterns.md.
Re-homedundermaintenancepercascaderefocus2026-06-12;recastsprintprotocolforkanban/batchmode—functionalrequirementpreserved.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '51ed1f7c869ab7763db1515b15da102b', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRX1PW1RXYRBNRHVNYW','description',NULL,'Parked in gameplay backlog per cascade refocus 2026-06-12; star-map travel planner preserved for when in-game travel exists.',NULL,'2026-06-12 10:23:03','2026-06-12 10:23:03','2026-06-12 10:23:03',NULL,'6144e08786ba401cc57e91c7fcbe0bad',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYXPA202KSKKJ15KZ8','description','Full character creation UI using the game UI kit and widget system — not a debug/test wrapper. This is the production character creation screen that players use at game start.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWQEZ7D8AX2PRS2FWM','description','Research and prototype LOD strategy for 400+ simultaneous characters on screen (crowd scenes, protests, battles).\n\nCurrent budget: 80 NPCs at full detail. This ticket defines the path to 400+.\n\nKey constraints from workshop:\n- LOD degradation is performance-driven, NOT distance/count threshold\n- Degradation is proactive (triggers on PROJECTED viewport character count, not measured frame drop — reactive causes hitching)\n- Progressive from player outward: furthest degrade first (full mesh -> simplified mesh -> billboard)\n- When paused: restore full detail on all characters\n- At billboard tier: body size tier and dominant clothing color must remain visually distinct\n- Outline baked into impostor sprite at billboard tier\n\nDeliverable: technical spec + prototype result. Does not produce shippable code.\n\nNot in Sprint 28 — backlog for when crowd-scale systems begin.','Research and prototype LOD strategy for 400+ simultaneous characters on screen (crowd scenes, protests, battles).\n\nCurrent budget: 80 NPCs at full detail. This ticket defines the path to 400+.\n\nKey constraints from workshop:\n- LOD degradation is performance-driven, NOT distance/count threshold\n- Degradation is proactive (triggers on PROJECTED viewport character count, not measured frame drop — reactive causes hitching)\n- Progressive from player outward: furthest degrade first (full mesh -> simplified mesh -> billboard)\n- When paused: restore full detail on all characters\n- At billboard tier: body size tier and dominant clothing color must remain visually distinct\n- Outline baked into impostor sprite at billboard tier\n\nDeliverable: technical spec + prototype result. Does not produce shippable code.\n\nNot in Sprint 28 — backlog for when crowd-scale systems begin.
ParkedunderPhase5epicpercascaderefocus2026-06-12;crowd-renderingresearchresumeswithin-worldrenderingwork.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '4a9d9c7110d535cea09345cae53cb0c4', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY6TPACQSYVFGDEMPR','description','Visual overlay system for scars on character bodies. Scars are per-segment (leveraging the 18-segment body architecture for placement). Each scar is a visual modification to a specific body segment — either a decal/texture overlay or a small mesh overlay attached to the segment. Requirements: scars placed per body segment, multiple scars per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via toon shader for skin tone matching. Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160.','Visual overlay system for scars on character bodies. Scars are per-segment (leveraging the 18-segment body architecture for placement). Each scar is a visual modification to a specific body segment — either a decal/texture overlay or a small mesh overlay attached to the segment. Requirements: scars placed per body segment, multiple scars per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via toon shader for skin tone matching. Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'd7bdc6daa348e5174a109160ea402783', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWS9B34T2HPJCYMGK0','description','Visual overlay system for tattoos on character bodies. Tattoos are per-segment texture overlays with their own recolor masks for ink color variation. Requirements: tattoos placed per body segment, multiple tattoos per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via multi-region mask for multi-color tattoos. May share implementation approach with scar system (#715). Architecture uses per-segment addressability from D-160.','Visual overlay system for tattoos on character bodies. Tattoos are per-segment texture overlays with their own recolor masks for ink color variation. Requirements: tattoos placed per body segment, multiple tattoos per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via multi-region mask for multi-color tattoos. May share implementation approach with scar system (#715). Architecture uses per-segment addressability from D-160.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'ceaf1f9cd8543b84b113a5fa0eec9a63', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWEDR71D90K594P7DG','description','Visual overlay system for injuries on character bodies. Injuries are per-segment visual states showing damage (bruises, cuts, burns) and healing progression. Requirements: injuries placed per body segment, severity/type affects visual appearance, healing progression over time changes the overlay, hidden under clothing via coverage system, interacts with amputation system (injury on a removed limb is moot). Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160 and limb removal capability.','Visual overlay system for injuries on character bodies. Injuries are per-segment visual states showing damage (bruises, cuts, burns) and healing progression. Requirements: injuries placed per body segment, severity/type affects visual appearance, healing progression over time changes the overlay, hidden under clothing via coverage system, interacts with amputation system (injury on a removed limb is moot). Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160 and limb removal capability.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '8df024d88478e4c5ccb02746b2533f20', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY5J5AWB356FT9WK0M','description','_get_accessory_ids_for_slot(slot) accepts a slot parameter but returns all accessories unfiltered. Every accessory slot shows the full catalogue. Should filter by slot-appropriate prefix (hat_*, goggles_*, etc.) matching the clothing tab''s approach. Currently invisible with placeholder assets but will be wrong when real accessories are added.','_get_accessory_ids_for_slot(slot) accepts a slot parameter but returns all accessories unfiltered. Every accessory slot shows the full catalogue. Should filter by slot-appropriate prefix (hat_*, goggles_*, etc.) matching the clothing tab''s approach. Currently invisible with placeholder assets but will be wrong when real accessories are added.
ParkedunderPhase5epicpercascaderefocus2026-06-12;latentcreation-UIbugfixedalongsidecharacter-visualsleftovers.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '12b79e07db27041708b58a1bdf1a9878', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYS8J5T5CV3EKNPJMR','description','Evaluate GodotFontAutoSizeLabels (https://github.com/LuisEscorza/GodotFontAutoSizeLabels) for handling text that must fit a fixed container. We will hit this with: NPC name labels, item names in grids, clothing/hair button labels, dialogue boxes, any server-generated text rendered in fixed UI elements. Adopt the pattern early (either this plugin or our own implementation) before overflow bugs accumulate.','Evaluate GodotFontAutoSizeLabels (https://github.com/LuisEscorza/GodotFontAutoSizeLabels) for handling text that must fit a fixed container. We will hit this with: NPC name labels, item names in grids, clothing/hair button labels, dialogue boxes, any server-generated text rendered in fixed UI elements. Adopt the pattern early (either this plugin or our own implementation) before overflow bugs accumulate.
ParkedunderPhase5epicpercascaderefocus2026-06-12;adoptthepatternwhengameplayUIsurfacesarebuilt.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'afff3234f7568416f12bf3798f3430a2', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXJ3WZ2AQMWBNB4D2W','description','Godot Icons Fonts (https://github.com/rakugoteam/Godot-Icons-Fonts) — searchable icon font library (FontAwesome, Material Icons, etc.) directly in the Godot editor. MIT. Saves time hunting for individual icon assets during UI development. Install from asset library. Use for: HUD icons, status indicators, navigation symbols, button icons, inventory categories.','Godot Icons Fonts (https://github.com/rakugoteam/Godot-Icons-Fonts) — searchable icon font library (FontAwesome, Material Icons, etc.) directly in the Godot editor. MIT. Saves time hunting for individual icon assets during UI development. Install from asset library. Use for: HUD icons, status indicators, navigation symbols, button icons, inventory categories.
ParkedunderPhase5epicpercascaderefocus2026-06-12;installwhenHUD/gameplayUIdevelopmentresumes.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '4e602b09bdc4bb576bd084869518b5d1', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYKBBN824V9KB9NEN0','description','Extend the character creator screenshot test config JSON with a resolution field. The system sets viewport size before capturing, enabling automated visual regression across common resolutions (1080p, 1440p, 4K, ultrawide, Steam Deck 800p). Batch script iterates the manifest body types × resolutions for full coverage. No plugin needed — just OS.window_size or viewport size override. Inspired by Project Resolution plugin (https://github.com/Danim3D/Godot-4-Plugin-Project-Resolution) but built into our existing test infrastructure.','Extend the character creator screenshot test config JSON with a resolution field. The system sets viewport size before capturing, enabling automated visual regression across common resolutions (1080p, 1440p, 4K, ultrawide, Steam Deck 800p). Batch script iterates the manifest body types × resolutions for full coverage. No plugin needed — just OS.window_size or viewport size override. Inspired by Project Resolution plugin (https://github.com/Danim3D/Godot-4-Plugin-Project-Resolution) but built into our existing test infrastructure.
ParkedunderPhase5epicpercascaderefocus2026-06-12;functionalrequirement(multi-resolutionvisualregression)preserved—resumeswithcharacterrenderingwork.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, '97136ab4f9f1f22de5a449b159c72d6d', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXBTTPTBFJN0DGX2YC','description','Add a licenses/credits screen accessible from the main menu settings. Must display all third-party licenses: Quaternius (CC0), Godot engine, any adopted plugins (MIT), font licenses, audio assets. Pattern reference: godot-licensing (https://github.com/nathanfranke/godot-licensing) — auto-collects license info. We don''t need the plugin but need the pattern: scan for LICENSE files, Godot''s built-in Engine.get_license_info(), and our own attribution list. Legal requirement for distribution.','Add a licenses/credits screen accessible from the main menu settings. Must display all third-party licenses: Quaternius (CC0), Godot engine, any adopted plugins (MIT), font licenses, audio assets. Pattern reference: godot-licensing (https://github.com/nathanfranke/godot-licensing) — auto-collects license info. We don''t need the plugin but need the pattern: scan for LICENSE files, Godot''s built-in Engine.get_license_info(), and our own attribution list. Legal requirement for distribution.
Parkedunderpost-cascadegameplay/releasebacklogpercascaderefocus2026-06-12;legalattributionrequirementpreservedforreleasepreparation.', NULL, '2026-06-1210:23:03', '2026-06-1210:23:03', '2026-06-1210:23:03', NULL, 'b02383d6350c79eba1708421aece23a2', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY35YGQ1PGBXE4B7KM','description','Up up down down left right left right B A. Because reasons. https://github.com/aravikusu/konamicode — reference implementation. Trigger: unlock debug panel in release builds, or something fun.','Up up down down left right left right B A. Because reasons. https://github.com/aravikusu/konamicode — reference implementation. Trigger: unlock debug panel in release builds, or something fun.
Parkedunderpost-cascadegameplaybacklogpercascaderefocus2026-06-12;preserved,notcancelled.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '837ba526ee51d3d1b1dbe0e57fc2ba1f', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWJAKQQ33BNCFZGV3W','description','The minimap needs to render from server-sent exploration and visibility data. No existing Godot minimap plugin fits because our information boundary is server-authoritative. Architecture: server sends explored tile states (unexplored/explored/visible) as part of ObserverSnapshot. Client renders a top-down 2D minimap from this data — fog for unexplored, dim for explored-not-visible, lit for currently visible. Player position centered. Needs a dedicated data stream or section in the snapshot for minimap tile states. Reference: the existing 2D fog_state.gd has the rendering patterns (texture from tile data), but the 3D minimap may use a separate overhead Camera3D in a SubViewport instead.','The minimap needs to render from server-sent exploration and visibility data. No existing Godot minimap plugin fits because our information boundary is server-authoritative. Architecture: server sends explored tile states (unexplored/explored/visible) as part of ObserverSnapshot. Client renders a top-down 2D minimap from this data — fog for unexplored, dim for explored-not-visible, lit for currently visible. Player position centered. Needs a dedicated data stream or section in the snapshot for minimap tile states. Reference: the existing 2D fog_state.gd has the rendering patterns (texture from tile data), but the 3D minimap may use a separate overhead Camera3D in a SubViewport instead.
ParkedunderPhase5epicpercascaderefocus2026-06-12;server-authoritativeminimaprequirementpreserved—resumeswithplayerrendering.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'fcb9b5c82f6c26c92293090c073d1211', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXGNK7WHD9DEGPY4BC','description','Implement nested/recursive tooltips for the information-dense UI. Reference: Nested-Tooltips (https://github.com/duzychri/Nested-Tooltips). Pattern: hover over text → tooltip appears → hover over a keyword in the tooltip → nested tooltip explains that keyword. Use cases: NPC names (→ disposition, role), items (→ stats → stat modifier explanations), zone names (→ zone type, danger level), factions (→ relationship, territory). This is core to the asymmetric information design — tooltips reveal what your character KNOWS, with depth proportional to familiarity. Study the plugin for the recursive hover detection pattern, implement with our diegetic UI aesthetic.','Implement nested/recursive tooltips for the information-dense UI. Reference: Nested-Tooltips (https://github.com/duzychri/Nested-Tooltips). Pattern: hover over text → tooltip appears → hover over a keyword in the tooltip → nested tooltip explains that keyword. Use cases: NPC names (→ disposition, role), items (→ stats → stat modifier explanations), zone names (→ zone type, danger level), factions (→ relationship, territory). This is core to the asymmetric information design — tooltips reveal what your character KNOWS, with depth proportional to familiarity. Study the plugin for the recursive hover detection pattern, implement with our diegetic UI aesthetic.
ParkedunderPhase5epicpercascaderefocus2026-06-12;asymmetric-informationtooltiprequirementpreserved—resumeswithgameplayUIwork.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'e08809c3d8eb525b1be278e52a4ece9f', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXY24QTYKWPERE52X4','description','Unified design and implementation pass for player-facing settings and input: (a) Key binding remapper with save/load. (b) Save browser with thumbnails and metadata. (c) Context-sensitive cursors (examine, talk, use, attack, walk). (d) Controller/gamepad support with radial menus. Design all four together in Frame0 for visual consistency, then implement as a cohesive system. These share UI patterns (settings panels, modal dialogs, input feedback) and should not be built independently.','Unified design and implementation pass for player-facing settings and input: (a) Key binding remapper with save/load. (b) Save browser with thumbnails and metadata. (c) Context-sensitive cursors (examine, talk, use, attack, walk). (d) Controller/gamepad support with radial menus. Design all four together in Frame0 for visual consistency, then implement as a cohesive system. These share UI patterns (settings panels, modal dialogs, input feedback) and should not be built independently.
ParkedunderPhase5epicpercascaderefocus2026-06-12;unifiedsettings/inputdesignrequirementpreserved—resumeswithplayercontrolwork.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '1bc7c74d446e342f697d8d9ad596184a', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ3GAN6QKTNJWVKPDG','description','Godot Poly Haven Downloader (https://github.com/P3ntest/godot-polyhaven-downloader) — browse and download CC0 models, textures, and HDRIs from Poly Haven directly in the Godot editor. Removes friction from asset sourcing. Install when environment art work begins.','Godot Poly Haven Downloader (https://github.com/P3ntest/godot-polyhaven-downloader) — browse and download CC0 models, textures, and HDRIs from Poly Haven directly in the Godot editor. Removes friction from asset sourcing. Install when environment art work begins.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—asset-pipelinetoolingfeedingthePhase-4assetcatalog.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '6fa7e591ddac231484991527587cb530', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY9W1MWNKMS803195C','description','Soft glow border on hovered/selected objects and characters. Reference: GlowBorderEffect (https://github.com/Magodra/GlowBorderEffect). Distinct from our inverted hull outline (permanent character silhouette) — this is a context-sensitive highlight: hover over an NPC to see a soft glow indicating they''re interactable, selected items glow in inventory, quest-relevant objects pulse. Could be a simple shader (stencil + blur) or adopt the plugin. Evaluate when interaction system is built.','Soft glow border on hovered/selected objects and characters. Reference: GlowBorderEffect (https://github.com/Magodra/GlowBorderEffect). Distinct from our inverted hull outline (permanent character silhouette) — this is a context-sensitive highlight: hover over an NPC to see a soft glow indicating they''re interactable, selected items glow in inventory, quest-relevant objects pulse. Could be a simple shader (stencil + blur) or adopt the plugin. Evaluate when interaction system is built.
ParkedunderPhase5epicpercascaderefocus2026-06-12;interactable-highlightrequirementpreserved—evaluatewhentheinteractionsystemisbuilt.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'cefee7bdb82d9c9b16a18e6af89a7917', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWKAS60B0F9E8QHZ10','description','Replace standalone stance indicator with an icon bar docked to the HUD status panel. Shows active states as small icons: stance (walk/sprint/crouch/careful), perception mode, future buffs/debuffs, implant status. Each icon color-coded per existing stance colors. Tooltip on hover shows label. Bar sits above or beside the HUD status ImplantPanel. Requires: icon set design (Araminta), bar layout component (ImplantIconBar), stance indicator refactored from panel to icon.','Replace standalone stance indicator with an icon bar docked to the HUD status panel. Shows active states as small icons: stance (walk/sprint/crouch/careful), perception mode, future buffs/debuffs, implant status. Each icon color-coded per existing stance colors. Tooltip on hover shows label. Bar sits above or beside the HUD status ImplantPanel. Requires: icon set design (Araminta), bar layout component (ImplantIconBar), stance indicator refactored from panel to icon.
ParkedunderPhase5epicpercascaderefocus2026-06-12;HUDstatus-iconrequirementpreserved—resumeswithgameplayUIwork.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'a6c4857ba57ea9ffa1c933f2c133f194', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXZSXNPA5Q55JN5K54','description','Two deliverables: (1) A keybind reference document listing all current key bindings (InputMap actions + hardcoded _unhandled_key_input keys like M/J/N/[/]). (2) A keybind mapper in the settings dialog that lets the player rebind keys at runtime. Triggered by Sprint 34 E-key conflict where economics panel was bound to a key already used by InputMap interact action.','Two deliverables: (1) A keybind reference document listing all current key bindings (InputMap actions + hardcoded _unhandled_key_input keys like M/J/N/[/]). (2) A keybind mapper in the settings dialog that lets the player rebind keys at runtime. Triggered by Sprint 34 E-key conflict where economics panel was bound to a key already used by InputMap interact action.
ParkedunderPhase5epicpercascaderefocus2026-06-12;keybinddocumentationandremappingrequirementpreserved—pairswithT-735.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '7551e65c0732fbcbc9f32f9ec75a1388', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXMTJBWMXJBANMD6C4','description','Review follow-up from PR #128 (Hoshe #17). Add unit-test coverage for compute_gdp, infer_tier_from_population, build_adjacency, parse_wiki_index in tooling/generate-star-map-data.py. Explicit boundary-condition test worth adding: compute_gdp at exactly 1T Tr (the BTr → TTr format switch). Non-blocker on the atlas landing PR but the generator is now on the pre-pr-client path, so it earns the regression coverage.','Review follow-up from PR #128 (Hoshe #17). Add unit-test coverage for compute_gdp, infer_tier_from_population, build_adjacency, parse_wiki_index in tooling/generate-star-map-data.py. Explicit boundary-condition test worth adding: compute_gdp at exactly 1T Tr (the BTr → TTr format switch). Non-blocker on the atlas landing PR but the generator is now on the pre-pr-client path, so it earns the regression coverage.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—generation-toolingtestcoverage(atlasstar-mapgenerator).', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '28b48f03517057f089201fa0be6bcea9', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZN95D8BBZ28Q92BQW','description','Review follow-up from PR #128 (blocker #3 fix). AtlasMarkerOverlay currently derives production_zones / shadow_economy / corp_presence from cities[].primary_function and cities[].commission_presence because D-191 §8''s schema (cities, roads, railroads, pois, rivers, oceans, mountain_ranges) has no dedicated arrays for production zones, shadow bands, or per-corp dots. Options: (a) amend D-191 §8 to list these explicitly and update the server generator, or (b) keep deriving from cities forever. Work with server team to pick and land the schema change so the MVP overlays read first-class data.','Review follow-up from PR #128 (blocker #3 fix). AtlasMarkerOverlay currently derives production_zones / shadow_economy / corp_presence from cities[].primary_function and cities[].commission_presence because D-191 §8''s schema (cities, roads, railroads, pois, rivers, oceans, mountain_ranges) has no dedicated arrays for production zones, shadow bands, or per-corp dots. Options: (a) amend D-191 §8 to list these explicitly and update the server generator, or (b) keep deriving from cities forever. Work with server team to pick and land the schema change so the MVP overlays read first-class data.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—atlasmarkersschemaisgeneration-outputdata.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '4e23b109798083d8dc6c365ca5602d6f', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRX6RK3GGV1A1TWQSMC','description','The game will ship on multiple GPU vendors. The current sr-voice Cargo.toml has optional feature flags for metal / vulkan / cuda / rocm but default = [] — which means `cargo build --release` produces a CPU-only binary. Release binaries need to cover at minimum:
-NVIDIA:--features cuda (Windows, Linux gaming rigs)
-AMD:--features rocm (Linux) or vulkan (Windows, macOS, broader)
Alsoneeds:releasebuildpipeline(CI/cross-compilation)foreachtargetplatform,devpackageinstallationinstructionsforeachbackend(e.g.ROCmrocm-hip-develonFedoraisrequiredfor--features rocm to build), runtime hardware detection in the game launcher to pick the right binary.
Filedduringthe#833namingpipelinework—theROCmrebuildonthedevmachinesurfacedthatthecurrentMakefiletarget`build-sr-voice`producesCPU-onlybinariesregardlessofthehardwarepresent,whichisfineforthedev''s#833batchbutabsolutelywrongforshippedreleasebinaries.Parentwork:D-138(Gemma2voicepipeline).', 'ThegamewillshiponmultipleGPUvendors.Thecurrentsr-voiceCargo.tomlhasoptionalfeatureflagsformetal/vulkan/cuda/rocmbutdefault=[]—whichmeans`cargobuild--release` produces a CPU-only binary. Release binaries need to cover at minimum:
-NVIDIA:--features cuda (Windows, Linux gaming rigs)
-AMD:--features rocm (Linux) or vulkan (Windows, macOS, broader)
Alsoneeds:releasebuildpipeline(CI/cross-compilation)foreachtargetplatform,devpackageinstallationinstructionsforeachbackend(e.g.ROCmrocm-hip-develonFedoraisrequiredfor--features rocm to build), runtime hardware detection in the game launcher to pick the right binary.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWBJ1XC9V5ZQHSXAXG','description','test_monologue_display_visible_hidden in test_client_p2.gd accessed mono.is_visible (a custom bool property). MonologueDisplay was refactored to use _visible: Array[Dictionary] instead. Test skipped (skip_test_) pending rewrite. New test should check _visible.size() > 0 after show_monologue, and == 0 when idle.','test_monologue_display_visible_hidden in test_client_p2.gd accessed mono.is_visible (a custom bool property). MonologueDisplay was refactored to use _visible: Array[Dictionary] instead. Test skipped (skip_test_) pending rewrite. New test should check _visible.size() > 0 after show_monologue, and == 0 when idle.
Re-homedundermaintenance(testdebt)percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '4b580afc32e9395363db47830ae00254', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZGSKN39GSW39JNZDG','description','test_journal_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: GameState.player_knowledge snapshot parsing/persistence, journal_panel.tscn scene lifecycle, entry rendering from player_knowledge entities, UIStrings confidence/source keys (D-042), _state_color() for Contradicted/Stale/Active states. No other journal-specific test file exists. Spec: D-041, D-042, #264.','test_journal_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: GameState.player_knowledge snapshot parsing/persistence, journal_panel.tscn scene lifecycle, entry rendering from player_knowledge entities, UIStrings confidence/source keys (D-042), _state_color() for Contradicted/Stale/Active states. No other journal-specific test file exists. Spec: D-041, D-042, #264.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'd6bbde49b03c7193e985e2c8edae61b9', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYDPBFJVAQAN7T56VR','description','test_minimap_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: minimap.tscn scene, POI rendering from GameState.discovered_pois, circular insert overlay visibility, insert_active toggle behavior. No other minimap test file exists. Spec: D-013, D-015, D-049, #151.','test_minimap_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: minimap.tscn scene, POI rendering from GameState.discovered_pois, circular insert overlay visibility, insert_active toggle behavior. No other minimap test file exists. Spec: D-013, D-015, D-049, #151.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, '9eb2d0145e5d69b8a9a1da782a2cae33', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWYRBKFQ1W3S8DS21W','description','test_sprite_integration.gd was deleted in Sprint 37 (#870 parse-error cleanup). It was the sole asserter of D-044 sprite dimensions: EntityRenderer.ENTITY_WIDTH == 24 and ENTITY_HEIGHT == 32 (client/scripts/rendering/entity_renderer.gd:19-20). These values are load-bearing for tile-anchored y-sort (ENTITY_OFFSET_Y = TILE_SIZE - ENTITY_HEIGHT, line 22, D-019 tilt). Revive a focused test that asserts both constants and the derived offset — rewrite against current EntityRenderer API. Surfaced in PR #135 review (Tyre T2). Spec: D-044, D-019, D-049.','test_sprite_integration.gd was deleted in Sprint 37 (#870 parse-error cleanup). It was the sole asserter of D-044 sprite dimensions: EntityRenderer.ENTITY_WIDTH == 24 and ENTITY_HEIGHT == 32 (client/scripts/rendering/entity_renderer.gd:19-20). These values are load-bearing for tile-anchored y-sort (ENTITY_OFFSET_Y = TILE_SIZE - ENTITY_HEIGHT, line 22, D-019 tilt). Revive a focused test that asserts both constants and the derived offset — rewrite against current EntityRenderer API. Surfaced in PR #135 review (Tyre T2). Spec: D-044, D-019, D-049.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:04', '2026-06-1210:23:04', '2026-06-1210:23:04', NULL, 'd1200b1c150086e91d428b6806d6dca1', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY05Z5JJRN1ND5ZFGC','description','main_menu.gd:72-74 _process loop polls SimBridge.poll_snapshot while _waiting_for_catalog is true. If the server never delivers bookmark_catalog (crash, new-server bug, decode dropout), the loading screen hangs forever. #872 patched the specific TCP-batch race where catalog was overwritten in receive_bytes, but the systemic class — ''catalog never arrives'' — remains.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXT5QXNT1QST51NKZR','description','Scene-level UI flow tests landed as a 4th tier beyond the 3 in CLAUDE.md (live Gauntlet / MessagePack replay / TestHarness mock). test_merge_path_flows_sprint37.gd is the first concrete example. Two rough edges surfaced in PR #135 review (Tyre T5, T6):
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRW77B3T7GXT6ZASX88','description','**Follow-up to PR #137 / Hoshe review H8.**
PR#137includes21fileeditsunder`wiki/`authoredbytheserverteam(6newcorpwikipages+15tagupdates,shippedunder#860—"Close D-175 Phase 2 coverage gate").`CLAUDE.md`team-boundariespolicysays:*"Stay within your team''s scope. Server team modifies `server/`. Copy team modifies `wiki/`."*Thewikiwriteswereacceptedforthissprintasapragmaticfix(andcopy-teamfollow-upreviewfiledas#884),butHoshecorrectlyflaggedtheprecedentconcern:
>"If cross-scope writes are structurally necessary for coverage gates, process should note this explicitly rather than route as a copy-team follow-up after merge."
**Cross-reference:**PR#137,#860(D-175Phase2coveragegate),#884(copy-teamvoice/lorereviewofthewikiwrites),`CLAUDE.md`"Agent Instructions → Team boundaries"section.
PR#137includes21fileeditsunder`wiki/`authoredbytheserverteam(6newcorpwikipages+15tagupdates,shippedunder#860—"Close D-175 Phase 2 coverage gate").`CLAUDE.md`team-boundariespolicysays:*"Stay within your team''s scope. Server team modifies `server/`. Copy team modifies `wiki/`."*Thewikiwriteswereacceptedforthissprintasapragmaticfix(andcopy-teamfollow-upreviewfiledas#884),butHoshecorrectlyflaggedtheprecedentconcern:
>"If cross-scope writes are structurally necessary for coverage gates, process should note this explicitly rather than route as a copy-team follow-up after merge."
**Cross-reference:**PR#137,#860(D-175Phase2coveragegate),#884(copy-teamvoice/lorereviewofthewikiwrites),`CLAUDE.md`"Agent Instructions → Team boundaries"section.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZBH1C2R0DXM00C66R','description','v01_integration_playthrough.rs was deleted in #878 as archetype-dependent. Its only non-archetype coverage — D-027 criterion 4 (RoutineDeviation tell after triangle activation) — was already #[ignore]-blocked on #589 (escalate_tells_on_activation). Layer 1 tell priority is covered by tell_escalation.rs. This ticket tracks the missing Layer 2 ECS-world test: activation event → RoutineDeviation insertion, and (optionally) a Layer 3 subprocess proof once #589 lands. Non-blocking for sprint 37 merge.','v01_integration_playthrough.rs was deleted in #878 as archetype-dependent. Its only non-archetype coverage — D-027 criterion 4 (RoutineDeviation tell after triangle activation) — was already #[ignore]-blocked on #589 (escalate_tells_on_activation). Layer 1 tell priority is covered by tell_escalation.rs. This ticket tracks the missing Layer 2 ECS-world test: activation event → RoutineDeviation insertion, and (optionally) a Layer 3 subprocess proof once #589 lands. Non-blocking for sprint 37 merge.
Parkedunderpost-cascadegameplaybacklogpercascaderefocus2026-06-12;D-027criterion-4coveragerequirementpreserved—picksupwhentellescalation(#589)lands.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '9c1136adea956745fd8c509a5220d750', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXN360AQN3973AHS8M','description','5 failing test cases in test_dialogue_sprint20.gd. The suite tests D-020 signal decoupling for dialogue_box. Likely failure: test_show_dialogue_does_not_call_audio_manager_directly compares AudioManager.get_active_dip() before/after show_dialogue — if AudioManager.get_active_dip() behavior changed or is not returning clean state, this would fail. Investigate by running the suite in isolation and reading specific assertion failures from the log. Sprint 38 triage #871.','5 failing test cases in test_dialogue_sprint20.gd. The suite tests D-020 signal decoupling for dialogue_box. Likely failure: test_show_dialogue_does_not_call_audio_manager_directly compares AudioManager.get_active_dip() before/after show_dialogue — if AudioManager.get_active_dip() behavior changed or is not returning clean state, this would fail. Investigate by running the suite in isolation and reading specific assertion failures from the log. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, 'aafb0b06053995e8abd23fa978f55329', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXMVYQJV2QDHH8H7P8','description','3 failing test cases in test_input_roundtrip.gd. All tests check _connect_to_server() which skips if server binary not found — but 3 still fail, suggesting either: (1) server binary is present but something in LocalBridge.send_message, poll, or Protocol.encode_player_inputs changed, or (2) test environment returns false from _connect_to_server but then asserts fail. Investigate by running with --filter test_input_roundtrip and checking the log for exact assertion sites. Sprint 38 triage #871.','3 failing test cases in test_input_roundtrip.gd. All tests check _connect_to_server() which skips if server binary not found — but 3 still fail, suggesting either: (1) server binary is present but something in LocalBridge.send_message, poll, or Protocol.encode_player_inputs changed, or (2) test environment returns false from _connect_to_server but then asserts fail. Investigate by running with --filter test_input_roundtrip and checking the log for exact assertion sites. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '2e20c8d57ebb36df3ec4c62a4019a0ae', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY3TXD5HDKHFVGDG18','description','1 failing test case in test_implant_app_lifecycle.gd. Suite tests ImplantApp._internal_app_changed, nav stack, preserves_state, and HudGroups state. after_test resets HudGroups._active_app, _active_mode, _groups — if these private fields were renamed or removed, after_test would fail and bleed state. Or a specific on_open/on_close hook fires differently. Run --filter test_implant_app_lifecycle and check specific assertion. Sprint 38 triage #871.','1 failing test case in test_implant_app_lifecycle.gd. Suite tests ImplantApp._internal_app_changed, nav stack, preserves_state, and HudGroups state. after_test resets HudGroups._active_app, _active_mode, _groups — if these private fields were renamed or removed, after_test would fail and bleed state. Or a specific on_open/on_close hook fires differently. Run --filter test_implant_app_lifecycle and check specific assertion. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '66a1757301b4be02a42e6fe14cb907e4', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWK87PCWGZ6GWT2TBM','description','1 failing test case in test_game_state_sprint20.gd. before_each resets SnapshotHandler._prev_player_position. If this static var was renamed or moved, the before_each hook would error. Alternatively a stationary_ticks path changed in SnapshotHandler. Verify SnapshotHandler still has static var _prev_player_position at that exact name. Sprint 38 triage #871.','1 failing test case in test_game_state_sprint20.gd. before_each resets SnapshotHandler._prev_player_position. If this static var was renamed or moved, the before_each hook would error. Alternatively a stationary_ticks path changed in SnapshotHandler. Verify SnapshotHandler still has static var _prev_player_position at that exact name. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '15fd6bc1637771fb36b0361658f5b12f', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYF23MZ86S1XF1542G','description','1 failing test case in test_fog_shader.gd. The most likely failure is test_fog_state_forward_vs_peripheral: it asserts Forward > Peripheral visibility values, but Sprint 22 (#569) removed peripheral sector. Now all visible tiles write VIS_FORWARD regardless. The test checks the texture is non-null (not the actual byte values), so it should pass... unless the failure is in test_fog_state_exploration_persists which has a weak assertion. Run --filter test_fog_shader to identify the specific failure. Sprint 38 triage #871.','1 failing test case in test_fog_shader.gd. The most likely failure is test_fog_state_forward_vs_peripheral: it asserts Forward > Peripheral visibility values, but Sprint 22 (#569) removed peripheral sector. Now all visible tiles write VIS_FORWARD regardless. The test checks the texture is non-null (not the actual byte values), so it should pass... unless the failure is in test_fog_state_exploration_persists which has a weak assertion. Run --filter test_fog_shader to identify the specific failure. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '627f13f72010cc6e168d832ba4dadce6', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZYDBRV5T9QVQAXGV0','description','1 failing test case in test_e2e_connection.gd. test_send_input_receive_snapshot skips if server binary not found. If it fails, either: (1) server binary exists but connection fails (port collision, timing), or (2) LocalBridge.reset() method was removed (the test calls _bridge.reset() but this may not exist on LocalBridge). Verify LocalBridge has a reset() method. Sprint 38 triage #871.','1 failing test case in test_e2e_connection.gd. test_send_input_receive_snapshot skips if server binary not found. If it fails, either: (1) server binary exists but connection fails (port collision, timing), or (2) LocalBridge.reset() method was removed (the test calls _bridge.reset() but this may not exist on LocalBridge). Verify LocalBridge has a reset() method. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '8e04e917f9de6e7ab8b8c70b39826d9d', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY9FV0S9RE42WY7SHW','description','1 failing test case in test_audio_sprint13.gd. before_test calls AudioManager.clear_dip(), stop_all_loops(), set_volume() for all buses. If any of these methods were renamed or a bus constant changed, setup would fail and cascade. Or a specific dip timing assertion is stale. Run --filter test_audio_sprint13 and read the specific failure. Sprint 38 triage #871.','1 failing test case in test_audio_sprint13.gd. before_test calls AudioManager.clear_dip(), stop_all_loops(), set_volume() for all buses. If any of these methods were renamed or a bus constant changed, setup would fail and cascade. Or a specific dip timing assertion is stale. Run --filter test_audio_sprint13 and read the specific failure. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, 'bf9041705c59d84b0ccee690f5eb57a5', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXCE9D9JYBZWVXMG68','description','1 failing test case in test_ai_dialogue_sprint26.gd. The HardwareDetector tests skip if autoload not found. The GameState field tests (ai_enhanced_dialogue_enabled) look correct. The failing test is likely in the settings_dialog section: SETTINGS_DIALOG_SCENE preloaded at class level — if settings_dialog.tscn doesn''t exist or a method was renamed, class-level preload would fail. Check res://ui/settings_dialog.tscn exists and the relevant methods. Sprint 38 triage #871.','1 failing test case in test_ai_dialogue_sprint26.gd. The HardwareDetector tests skip if autoload not found. The GameState field tests (ai_enhanced_dialogue_enabled) look correct. The failing test is likely in the settings_dialog section: SETTINGS_DIALOG_SCENE preloaded at class level — if settings_dialog.tscn doesn''t exist or a method was renamed, class-level preload would fail. Check res://ui/settings_dialog.tscn exists and the relevant methods. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '80a3b0d7891f6d8a3dbd5d4210a1d283', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ9Q7NHVDRT6ARMCWW','description','D-210 defines SubBiomeVariant for fine-grained biome classification within SettingType::Wilderness districts. Currently deferred — SettingType::Wilderness carries a plain String biome field. Implement SubBiomeVariant enum and wire it into the atlas skeleton generator when the biome taxonomy is finalized.','D-210 defines SubBiomeVariant for fine-grained biome classification within SettingType::Wilderness districts. Currently deferred — SettingType::Wilderness carries a plain String biome field. Implement SubBiomeVariant enum and wire it into the atlas skeleton generator when the biome taxonomy is finalized.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—biometaxonomyfortheatlas/cascadegenerator.', NULL, '2026-06-1210:23:05', '2026-06-1210:23:05', '2026-06-1210:23:05', NULL, '7f7f52c2e35c84f0a91c571949aeebbe', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRW2ZSPJ3D9NEZ6JBW8','description','The client currently reads markers.json and star_map_data.json directly from the filesystem. This bypasses the server layer entirely — the client should request all game data through IPC calls to the Rust backend.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYEM4VSX74MS4NKQ1C','description','Surfaced 2026-05-24 running the full client suite (tests/run-godot, no server) during #960. NOT caused by #960 — verified: test_input_roundtrip fails identically at the pre-change baseline, and the rest are unrelated subsystems. Two categories to triage:
Goal:agreen(orexplicitly-gated)bare`maketest-client`soclientregressionsaredetectable.Untilthen,runtargetedsuites(run-godot--filter <stem>).', 'Surfaced 2026-05-24 running the full client suite (tests/run-godot, no server) during #960. NOT caused by #960 — verified: test_input_roundtrip fails identically at the pre-change baseline, and the rest are unrelated subsystems. Two categories to triage:
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRYYR0QJC12EMA0SV1W','description','The #1016 cultural pass found two systems founded by East-African-INTERIOR peoples that the canonical 47-value heritage taxonomy has no token for, so they currently borrow ''swahili'' (a coastal value) as the nearest fit (documented inline in wiki/economics/system_specialization.toml):
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ9NXNX40J476N2EQM','description','Deferred from the #955 pair session. The Phase-4 cascade (Layers 0-5) is fully deterministic (D-010 + SeedChain) — its output (settlement placements, and eventually the full BodyWorldState) is a pure function of (heightmap, authored context, world seed), so it can be cached rather than re-derived on every cold load.
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXXP903QTD8Q2YWRJ8','description',NULL,'Cancelled 2026-06-12: administrative mirror of Q-004 (resolved); no surviving open requirement.',NULL,'2026-06-12 10:23:06','2026-06-12 10:23:06','2026-06-12 10:23:06',NULL,'f408f179e7ba0878439945b01b31e6e2',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZYTPACQCYNGVK5XSC','description',NULL,'Cancelled 2026-06-12: administrative mirror of Q-005 (resolved); no surviving open requirement.',NULL,'2026-06-12 10:23:06','2026-06-12 10:23:06','2026-06-12 10:23:06',NULL,'6673e5f40b6cc09073de805af7eda714',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRW3ASVAZZNYN9M59AW','description',NULL,'Cancelled 2026-06-12: administrative mirror of Q-007 (resolved); no surviving open requirement.',NULL,'2026-06-12 10:23:06','2026-06-12 10:23:06','2026-06-12 10:23:06',NULL,'39050e099a4d3e7242802e867acd5fd9',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRWJYV3ZVY7D7G3P4FW','description',NULL,'Cancelled 2026-06-12: administrative mirror of Q-011 (resolved); no surviving open requirement.',NULL,'2026-06-12 10:23:06','2026-06-12 10:23:06','2026-06-12 10:23:06',NULL,'19482df4281101fcc70c9ed330278298',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY3XYFKDGVPQR87JHM','description','Implement D-023 (three-tier content model), D-025 (social site templates), D-028 (dialogue system), D-029 (population entanglement). Template system and dialogue.','Implement D-023 (three-tier content model), D-025 (social site templates), D-028 (dialogue system), D-029 (population entanglement). Template system and dialogue.
Cancelled2026-06-12:pre-cascadeumbrellaemptiedbythecascaderefocus—childrenre-homed(T-54toPhase4,T-55/T-56toPhase6,T-53togameplayparkingT-1036).', NULL, '2026-06-1210:23:06', '2026-06-1210:23:06', '2026-06-1210:23:06', NULL, 'ff38957b48287803e268bc019bba7bed', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZK0EWD2NW4D2MGGV0','description','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.
Cancelled2026-06-12:pre-cascadeumbrella—test-infrachildrenre-homedundermaintenanceinitiativeT-1037;discussionchildT-64cancelled(testingapproachlongestablished).', NULL, '2026-06-1210:23:06', '2026-06-1210:23:06', '2026-06-1210:23:06', NULL, '75630490b06810bdd8b4f04b2bbf6dd7', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRXG2Z9ZAR42SQ9GNP4','description','Discussion: Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code execution. Define patterns, constraints, tooling needs.','Discussion: Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code execution. Define patterns, constraints, tooling needs.
Cancelled2026-06-12:discussionpremisefulfilled—testingapproachestablishedanddocumented(three-tierstrategy,Gauntlet-first,D-239harness);docdeliverablesliveoninT-215/T-216/T-217underT-1037.', NULL, '2026-06-1210:23:06', '2026-06-1210:23:06', '2026-06-1210:23:06', NULL, 'e524883fd40476112076fdadb5902f62', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRY5G9GMPV8B0RDD1JR','description',NULL,'Closed 2026-06-12: decision-mirror initiative for D-011 (fog of perception non-negotiable). D-011 is confirmed and the fog/perception system is implemented (shadowcasting, vision cone, observer snapshots); the mirror served its purpose. Cleared from the perpetual review queue.',NULL,'2026-06-12 10:23:07','2026-06-12 10:23:07','2026-06-12 10:23:07',NULL,'f10612048b81230c3c2ffc608a2125bb',2)ONCONFLICT(hash)DONOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZK0EWD2NW4D2MGGV0','description','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.
Cancelled2026-06-12:pre-cascadeumbrella—test-infrachildrenre-homedundermaintenanceinitiativeT-1037;discussionchildT-64cancelled(testingapproachlongestablished).', NULL, '2026-06-1210:23:17', '2026-06-1210:23:17', '2026-06-1210:23:17', NULL, '949dfa994e19abe55b5c87c45acea3a7', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRX3R6G3Y7QR4FAJPNM','description','Consolidate all wiki content (pages + heightmaps + markers + architecture-flavor) into one first-class, baked Atlas/gamedata content set with a unified bake pipeline -- instead of per-feature file conventions. Resolves where authored per-body content lives (the D-232 flavor source). BLOCKED on Q-107 (open question -- the target tree structure must be decided first). The generator-facing trait_templates + atlas_body_trait_bias tables (D-232) is invariant to this, so it does NOT block the fill seam; sequence this AFTER the fill-seam work. Jeroen: ''the wiki needs to become part of the atlas content set ... not yet another hack.''','Consolidate all wiki content (pages + heightmaps + markers + architecture-flavor) into one first-class, baked Atlas/gamedata content set with a unified bake pipeline -- instead of per-feature file conventions. Resolves where authored per-body content lives (the D-232 flavor source). BLOCKED on Q-107 (open question -- the target tree structure must be decided first). The generator-facing trait_templates + atlas_body_trait_bias tables (D-232) is invariant to this, so it does NOT block the fill seam; sequence this AFTER the fill-seam work. Jeroen: ''the wiki needs to become part of the atlas content set ... not yet another hack.''
Hygienenote2026-06-12:titlesays''blocked''butnoblockeredgeexists,sothissurfacedinthe--unblocked feed. Labelled needs-decision; genuinely gated on Q-107 (wiki→Atlas content consolidation) — resolve Q-107 before picking this up.', NULL, '2026-06-12 10:23:21', '2026-06-12 10:23:21', '2026-06-12 10:23:21', NULL, 'ad4d2baf54fc5b4b633a7783ea966162', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FB0TNSRZ8Z6NN74YKCCRCPMR','description','Validation pass: generated content reads correctly (settlements legible, walkable, named). Establishes the dependency gate that locks Phase 5 (player control, epic #749) behind Phase 4 completion per the cascade rule (D-166 amended 2026-05-22).','Validation pass: generated content reads correctly (settlements legible, walkable, named). Establishes the dependency gate that locks Phase 5 (player control, epic #749) behind Phase 4 completion per the cascade rule (D-166 amended 2026-05-22).
GatetriggerupdatedperD-166amendment(2026-06-12):Phase5rampsinparallelonceOUTSIDEgenerationproducesdeterministic,walkableexteriors—thegatethisticketholdsis''outsidesgeneratedeterministicallyandarewalkable''(validationpass:settlementslegible,walkable,named),not''allPhase-4polishcomplete''.Door-boundarycontractsandremainingPhase-4detailmaycontinuealongsideearlyPhase-5work.', NULL, '2026-06-1210:23:21', '2026-06-1210:23:21', '2026-06-1210:23:21', NULL, '95c4da6eebe02dc3d59875a7ff11646e', 2) ON CONFLICT(hash) DO NOTHING;
INSERTINTOticket_history(ticket_record_id,field,old_value,new_value,changed_by,changed_at,created_at,updated_at,deleted_at,hash,canonical_version)VALUES('06FBPQ02F02JDDBSFMGPX0XASR','description','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
INSERTINTOtickets(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('06FB0TNSRW8G7MTH1FRGR1FN1W','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Atlas-to-tile derivation model','Foundational world-derivation model from the atlas-derivation workshop. D-227 (deterministic-rebuild world model: pure function of seed+atlas, derived on demand + cached, only tile mutators persisted, fully volumetric voxel/subvoxel, vertical extent physical not floor-count, variable-height floors) + D-228 (composite tile schema: orthogonal axes TerrainMaterial/FloorMaterial/Vegetation/Water/elevation, derived shape/tactical-form, region-level morphology zones, cohesion matrix, dynamic clock-bound region seasonal state). Most implementation lands as the cascade reaches the tile layers (Phase 4+). Open design tracked in Q-100 (biome authority), Q-101 (refinement contract + body-class river density + ocean mask), Q-102 (cohesion-matrix algorithm), Q-103 (mutator op schema), Q-104 (floor-to-voxel-z mapping), Q-105 (region seasonal/clock state: water/snow/weather/crops).','done','high',NULL,'server','D-228','2026-05-25 10:51:49','2026-06-08 21:01:34',NULL,'3ee28eefc0cb8acf63bdd59bd24a5eb5',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWHN6KDZ5F97XDBD48','bug','06FB0TNSRW8G7MTH1FRGR1FN1W','derive_moisture_q hydrosphere vocab mismatch — liquid_water etc. fall to default','derive_moisture_q (region_profile.rs) matches hydrosphere on ''ocean''/''rivers''/''ice''/''subsurface''/''none'', but the actual bodies.hydrosphere vocab in systems.db is: liquid_water (175 bodies), ice (962), rivers (31), moderate (21), ocean (only 19), minimal (10), trace (8), subsurface_liquid (7), rivers-lakes (4), extensive (4), subsurface_ice (3), ocean-coastal (1), plus NULL (1649). So ''liquid_water'' and most surface-water worlds fall to the ''_ => 30'' default instead of high moisture — propagating wrong precipitation_class / glaciation_grade / vegetation_class for ~175+ water worlds. Same root cause as D-240 (code keying on a vocab the data doesn''t use). Fix: align derive_moisture_q (and audit any other hydrosphere consumer) to the real vocab — surface liquid (liquid_water/ocean/ocean-coastal/extensive) -> high; rivers/rivers-lakes/moderate -> mid; ice/subsurface* -> low; minimal/trace/none/NULL -> arid. T-1033''s maritime_factor table already maps the real vocab and can be the reference. Found during T-1033 verification (2026-06-08).','done','high',NULL,'server','D-240','2026-06-08 17:00:07','2026-06-08 21:01:34',NULL,'9b9e1f52e3e4ef7ad71febff14cd0e2c',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ9FH06QVXD4T20BF8','bug',NULL,'voice::lookup tests share an on-disk cache dir — flaky under parallelism','voice::lookup::cache_miss_returns_base_text intermittently fails the full-suite push gate under cargo''s default parallel execution (passes in isolation). Root cause is test-isolation, not production nondeterminism: the test helper test_cache() builds every store with the SAME base_dir (temp_dir/sr-voice-lookup-test) and world_seed (99), so all four module tests share the on-disk zone path .../99/100.msgpack. VoiceCacheStore persists to disk on Drop (save_all) and reads it back on first zone access (load_zone). cache_hit_returns_voiced_text stores ''Voiced line.'' under the IDENTICAL (zone_id=100, CacheKey) that cache_miss_returns_base_text looks up; model/injector versions match so the invalidation guard doesn''t help. When the hit test''s Drop/save interleaves with the miss test (after its remove_dir_all, before its lookup), the miss test loads the leaked entry and returns ''Voiced line.'' instead of ''Base line.'' -> assertion fails. Fix: isolate each test''s cache directory (per-test label + process id) so neither parallel tests nor concurrent cargo test runs collide. Found during T-1031/T-1034 verification (2026-06-08).','done','medium',NULL,'server',NULL,'2026-06-08 21:24:06','2026-06-09 06:18:57',NULL,'edfdf21f37c9610d280b0ff16e49f7f2',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPPMMF7HS6FWRYAKMECTXX0','epic','06FB0TNSRZE4CSS8YR0FCEXMK8','Post-cascade gameplay & scenario parking lot','Parking lot for game-making work that resumes only after the cascade delivers a traversable world (D-166 amendment 2026-06-12: ''Before this is a game I want it to be a Reach a character can travel through''). Holds scenario/bookmark/storyteller/gameplay-system tickets — including the surviving functional ideas from the dropped v0.2 target (tycoon bookmark, verbs, world feel; D-114/D-115/D-117/D-118/D-120 superseded by D-166). Tickets here are deliberately preserved, not cancelled: functional requirements survive scope pivots. Not a phase — sits beside the six phase epics under T-745 and is excluded from phase kanban queries.','backlog','low',NULL,NULL,NULL,'2026-06-12 10:22:16','2026-06-12 10:22:16',NULL,'7d9a8938d359f9aaacec225f934e08f1',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPPMZNNEV052DBYYY3A897C','initiative',NULL,'Maintenance & test debt (phase-independent)','Standing home for test-failure debt, test-infrastructure work, build/process hygiene, and other phase-independent maintenance (created 2026-06-12 during the cascade-refocus cleanup; absorbs the open children of done umbrella T-871, the former T-34 test-infrastructure tree, and stray hygiene tasks). Deliberately parentless: maintenance is not a cascade phase. Per the broken-tests rule, failing-test children here need a fix or a dated disposition — parking is tracking, not forgetting.','backlog','medium',NULL,NULL,NULL,'2026-06-12 10:22:19','2026-06-12 10:22:19',NULL,'01f97e13a5afcaf96fcd48d06d33c09d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYXCMB1D08PW87FR9C','story','06FB0TNSRXX29H5X0EB0F0GBW4','Art direction','Parked under Phase 5 epic per cascade refocus 2026-06-12 — art direction (Q-003, still open) is decided when in-world rendering with final-version assets begins.','backlog','medium',NULL,NULL,'Q-003','2026-02-09 15:21:44','2026-06-12 10:23:02',NULL,'fdbc63dd9b6518a2796c6f7738ba56fd',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYWZ8VC3HVQJ6HA59R','story','06FBPPMMF7HS6FWRYAKMECTXX0','Licensing/distribution','Parked post-cascade per refocus 2026-06-12 — licensing/distribution (Q-008, still open) is a making-it-a-game/shipping concern with no generation dependency.','backlog','medium',NULL,NULL,'Q-008','2026-02-09 15:21:44','2026-06-12 10:23:02',NULL,'c01966c995b3da12b11764132eb84b42',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY7PWMK1F1DAWC08T8','story','06FBPPMMF7HS6FWRYAKMECTXX0','Storyteller AI design',NULL,'backlog','medium',NULL,NULL,'Q-010','2026-02-09 15:21:44','2026-06-12 10:23:02',NULL,'1d86a79a61e8d3d21e36136a3682b8ca',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY7PWMK1F1DAWC08T8','story','06FBPPMMF7HS6FWRYAKMECTXX0','Storyteller AI design','Parked post-cascade per refocus 2026-06-12 — storyteller AI (Q-010, still open) is a gameplay system with no generation dependency; functional requirement preserved.','backlog','medium',NULL,NULL,'Q-010','2026-02-09 15:21:44','2026-06-12 10:23:02',NULL,'d9ea9b1f8fa208612bf39d2f48ab71c8',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—backgroundNPCsimulationtiersfollowworldgenerationanddoorboundarycontracts;formerparentT-29iscancelled.Functionalrequirementpreserved.', 'backlog', 'critical', NULL, NULL, 'D-026', '2026-02-1023:15:58', '2026-06-1210:23:02', NULL, 'fdc0c5552ef65c813d90b71e2257ce35', 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);
INSERTINTOtickets(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('06FB0TNSRWCSXFAG1E4TS7HAB4','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Fog of Perception - Vision System','LOS-based shadowcasting per z-level. Vision cone (forward/peripheral/behind). Walls block vision, fog returns on departure. Universal for all entities.','backlog','critical',NULL,NULL,'D-011','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'418e201b566c298be5b1dc9f6d42ccd3',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWCSXFAG1E4TS7HAB4','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Fog of Perception - Vision System','LOS-based shadowcasting per z-level. Vision cone (forward/peripheral/behind). Walls block vision, fog returns on departure. Universal for all entities.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—fog-of-perceptionvisionisaplayer-surfacesystembuiltongeneratedtiles;functionalrequirementpreserved.', 'backlog', 'critical', NULL, NULL, 'D-011', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, '948a7539aa2cb43aea76a350323d9150', 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);
INSERTINTOtickets(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('06FB0TNSRY3PA3E31NAVQHR5GC','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Camera System','Locked to character, no panning. Optional rotation to facing direction (deferred to post-v0.1). Fixed-north for v0.1.','backlog','critical',NULL,NULL,'D-015','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'8c5fb1850e23d3661badb36c2e867abc',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY3PA3E31NAVQHR5GC','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Camera System','Locked to character, no panning. Optional rotation to facing direction (deferred to post-v0.1). Fixed-north for v0.1.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—lockedcameraisplayer-controlwork;functionalrequirementpreserved.', 'backlog', 'critical', NULL, NULL, 'D-015', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, 'cd374ab66d33b4281051389fed254d64', 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);
INSERTINTOtickets(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('06FB0TNSRWBH6313PF00570RGR','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Internal Monologue System','Character voice narration for non-visual perception, atmosphere, diegetic hints. Contextual line selection based on situation, character personality, knowledge state.','backlog','high',NULL,NULL,'D-016','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'296e9334c952731fe3627f0c1f58583e',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWBH6313PF00570RGR','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Internal Monologue System','Character voice narration for non-visual perception, atmosphere, diegetic hints. Contextual line selection based on situation, character personality, knowledge state.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—internalmonologueisaplayerperceptionsurface;line-contentdetailcandeepeninPhase6.Functionalrequirementpreserved.', 'backlog', 'high', NULL, NULL, 'D-016', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, 'c1f745b624eea830933397d905d5062a', 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);
INSERTINTOtickets(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('06FB0TNSRZP5KQ8RHFQQZK1ZJ0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Sound Propagation Model','Three-range sound: Close (stereo audio), Medium (fog-edge indicators + monologue), Long (insert notifications - stretch). Event classification, directional info.','backlog','high',NULL,NULL,'D-018','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'fd9cab58eca1544e079a621d05687d28',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZP5KQ8RHFQQZK1ZJ0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Sound Propagation Model','Three-range sound: Close (stereo audio), Medium (fog-edge indicators + monologue), Long (insert notifications - stretch). Event classification, directional info.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—three-rangesoundpropagationisaplayerperceptionsurface;functionalrequirementpreserved.', 'backlog', 'high', NULL, NULL, 'D-018', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, 'f6535180332df2caba5223f657bc8743', 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);
INSERTINTOtickets(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('06FB0TNSRW1VJS6GTSSYHK63F8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Top-down Renderer','Tile-based rendering, sprite system, z-level visualization, fog overlay. 3D cutscenes deferred post-v0.1.','backlog','critical',NULL,NULL,'D-019','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'43d6b62fb3f70b687a9426379c460dec',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRW1VJS6GTSSYHK63F8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Top-down Renderer','Tile-based rendering, sprite system, z-level visualization, fog overlay. 3D cutscenes deferred post-v0.1.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—in-worldtile/spriterenderingongeneratedtiles(D-019supersededbyD-148);functionalrequirementpreserved.', 'backlog', 'critical', NULL, NULL, 'D-019', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, 'b2d399cf427665ffc8b0b3f330306dec', 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);
INSERTINTOtickets(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('06FB0TNSRY8XYH2CGTVR0TJ7W8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Perception Mode Framework','Natural vision baseline for v0.1. Modular architecture for future modes (thermal, camera feeds, unisphere tracking, audio analysis). Observer query pattern.','backlog','medium',NULL,NULL,'D-017','2026-02-10 23:16:24','2026-06-12 10:23:02',NULL,'1ed0c69966f724d8c4660bb7cf24b9a6',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY8XYH2CGTVR0TJ7W8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Perception Mode Framework','Natural vision baseline for v0.1. Modular architecture for future modes (thermal, camera feeds, unisphere tracking, audio analysis). Observer query pattern.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—perceptionmodeframeworkextendstheplayervisionbaseline;functionalrequirementpreserved.', 'backlog', 'medium', NULL, NULL, 'D-017', '2026-02-1023:16:24', '2026-06-1210:23:02', NULL, '00139894e437d285a7ceed4480545f56', 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);
INSERTINTOtickets(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('06FB0TNSRYTW3T8YYBJ0VSSZM8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Information Boundary System','First-class information tagging. Every piece of game state tagged with observer access. Foundation for fog, perception modes, NPC knowledge.','backlog','critical',NULL,NULL,'D-010','2026-02-10 23:16:38','2026-06-12 10:23:02',NULL,'62e43e4e91964a85e046320911ea5dc3',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYTW3T8YYBJ0VSSZM8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Information Boundary System','First-class information tagging. Every piece of game state tagged with observer access. Foundation for fog, perception modes, NPC knowledge.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—observer-accessinformationtaggingisthefoundationforfog/perceptionplayersurfaces;functionalrequirementpreserved.', 'backlog', 'critical', NULL, NULL, 'D-010', '2026-02-1023:16:38', '2026-06-1210:23:02', NULL, '0d391cbe9651a3bc75c75137de845597', 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);
INSERTINTOtickets(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('06FB0TNSRXX5X1PDENVXC4DRJ4','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Chunk-based Map System','Chunk generation and loading. Bounded maps with internal chunks for v0.1. Architecture supports future borderless generation.','backlog','high',NULL,NULL,'D-012','2026-02-10 23:16:38','2026-06-12 10:23:02',NULL,'ce059616258642310cecff6f8c5b625a',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXX5X1PDENVXC4DRJ4','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Chunk-based Map System','Chunk generation and loading. Bounded maps with internal chunks for v0.1. Architecture supports future borderless generation.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—chunkgeneration/loadingistile/chunkworld-generationwork;functionalrequirementpreserved.', 'backlog', 'high', NULL, NULL, 'D-012', '2026-02-1023:16:38', '2026-06-1210:23:02', NULL, 'a9173a092dbf6fb17794659f7cdf2ce9', 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);
INSERTINTOtickets(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('06FB0TNSRXZK7C4X2DHQ6A0CKR','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Diegetic Insert/Minimap','Neural insert UI. POI discovery system (background, NPC tips, research, discovery). Minimap with directional arrows for distant POIs.','backlog','high',NULL,NULL,'D-013','2026-02-10 23:16:38','2026-06-12 10:23:02',NULL,'ff9c54ef6d3119a5c00a43718ca88737',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXZK7C4X2DHQ6A0CKR','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Diegetic Insert/Minimap','Neural insert UI. POI discovery system (background, NPC tips, research, discovery). Minimap with directional arrows for distant POIs.
Re-parentedunderPhase5epicpercascaderefocus2026-06-12—minimap/POIdiscoveryisaHUDnavigationsurfaceforin-worldplay;functionalrequirementpreserved.', 'backlog', 'high', NULL, NULL, 'D-013', '2026-02-1023:16:38', '2026-06-1210:23:02', NULL, 'd3d9d1682a09c509a70f316799bc8e06', 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);
INSERTINTOtickets(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('06FB0TNSRY5H0R4JCAJ6MY4X44','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Station District Map - v0.1 Revision','Revise D-014 for vertical slice: station district layout, workplace/bar/smuggling ring locations, 15-40 tile functional clusters, 2-3 z-levels.','backlog','high',NULL,NULL,'D-014, D-027','2026-02-10 23:16:38','2026-06-12 10:23:02',NULL,'002412bb8ab724eaf4ae4ed60c863576',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY5H0R4JCAJ6MY4X44','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Station District Map - v0.1 Revision','Revise D-014 for vertical slice: station district layout, workplace/bar/smuggling ring locations, 15-40 tile functional clusters, 2-3 z-levels.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—thev0.1vertical-sliceframingissuperseded,butstationdistrictlayoutwithfunctionalclusterssurvivesasecon-layer/building-placementgenerationwork.', 'backlog', 'high', NULL, NULL, 'D-014,D-027', '2026-02-1023:16:38', '2026-06-1210:23:02', NULL, '6bb3ffd815431c28f75ab8386cc26db9', 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);
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—thespatialfunctional-clustertemplate(15-40tilespaces,sightlines,template-to-instancelifecycle)isthebuilding-templatescascadestep;NPC-rolepopulationdetailfollowsinPhase6.', 'backlog', 'high', NULL, NULL, 'D-025', '2026-02-1023:16:54', '2026-06-1210:23:02', NULL, '92d805f095da86db0877be554f74f8e3', 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);
INSERTINTOtickets(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('06FB0TNSRXXVCGN5D35ZJ7M0MW','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Dialogue System Architecture','Tagged line pools with systemic selection. Four relational layers: access tiers, relationship history, trust-gated gossip, unprompted disclosure. Trait modifier system.','backlog','high',NULL,NULL,'D-028','2026-02-10 23:16:54','2026-06-12 10:23:02',NULL,'1c766a202d0efda4006ca96ef5fbb7c4',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXXVCGN5D35ZJ7M0MW','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Dialogue System Architecture','Tagged line pools with systemic selection. Four relational layers: access tiers, relationship history, trust-gated gossip, unprompted disclosure. Trait modifier system.
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—dialoguearchitectureandrelationallayersareNPCdetail-coloringwork;functionalrequirementpreserved.', 'backlog', 'high', NULL, NULL, 'D-028', '2026-02-1023:16:54', '2026-06-1210:23:02', NULL, '55e50c06c24a105e4f983df2a467974e', 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);
INSERTINTOtickets(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('06FB0TNSRXYZC8QDKK423KFSKC','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Population Management','30/50/20 entanglement ratio (flat/mundane/intrigue). Variable per seed. Module attachment to known NPCs (60-70/30-40 ratio, also variable).','backlog','medium',NULL,NULL,'D-029','2026-02-10 23:16:54','2026-06-12 10:23:02',NULL,'ad5d5cec3164efa8ed7e4cbf2577a574',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXYZC8QDKK423KFSKC','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Population Management','30/50/20 entanglement ratio (flat/mundane/intrigue). Variable per seed. Module attachment to known NPCs (60-70/30-40 ratio, also variable).
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—populationentanglementratiosarebackground-NPC-layerwork;functionalrequirementpreserved.', 'backlog', 'medium', NULL, NULL, 'D-029', '2026-02-1023:16:54', '2026-06-1210:23:02', NULL, 'd8067a374a5a7cdcdac989c5ee413577', 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);
INSERTINTOtickets(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('06FB0TNSRZ5AP28E96W00KB0R4','epic','06FBPPMZNNEV052DBYYY3A897C','Rust/bevy_ecs Test Infrastructure','Test harness for simulation server. External test modules, deterministic replay, ECS state inspection, behavior validation. Minimal production code pollution.','backlog','high',NULL,NULL,NULL,'2026-02-10 23:17:38','2026-06-12 10:23:02',NULL,'f35b5e6fc0a225aafdea63a0b9507e70',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ5AP28E96W00KB0R4','epic','06FBPPMZNNEV052DBYYY3A897C','Rust/bevy_ecs Test Infrastructure','Test harness for simulation server. External test modules, deterministic replay, ECS state inspection, behavior validation. Minimal production code pollution.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—servertestinfrastructureisongoinginfrahygiene(muchalreadydeliveredviatheGauntlet/verificationharness);remainingscopepreserved.', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:02', NULL, '9f77e277d1467a352082bb0594e73233', 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);
INSERTINTOtickets(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('06FB0TNSRYDYTDC36V3EPDD7VR','epic','06FBPPMZNNEV052DBYYY3A897C','Godot Client Test Infrastructure','Test harness for rendering client. Scene testing, input simulation, rendering verification, fog/UI validation.','backlog','high',NULL,NULL,NULL,'2026-02-10 23:17:38','2026-06-12 10:23:02',NULL,'2ca6965b9f752c1b212d0d0a2667ba15',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYDYTDC36V3EPDD7VR','epic','06FBPPMZNNEV052DBYYY3A897C','Godot Client Test Infrastructure','Test harness for rendering client. Scene testing, input simulation, rendering verification, fog/UI validation.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—clienttestinfrastructureisongoinginfrahygiene(TestHarnessandlive-tiertestingalreadyexist);remainingscopepreserved.', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:02', NULL, '270d69970b9b853bcb0954e8be3d50f5', 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);
INSERTINTOtickets(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('06FB0TNSRWYX9HMVEXES6GHXPW','epic','06FBPPMZNNEV052DBYYY3A897C','Integration Test Framework','End-to-end tests across IPC boundary. Protocol validation, sync verification, full playthrough automation.','backlog','medium',NULL,NULL,NULL,'2026-02-10 23:17:38','2026-06-12 10:23:02',NULL,'80285c89dd7722c73cde7a3360f2a137',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWYX9HMVEXES6GHXPW','epic','06FBPPMZNNEV052DBYYY3A897C','Integration Test Framework','End-to-end tests across IPC boundary. Protocol validation, sync verification, full playthrough automation.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—cross-IPCintegrationtestingisongoinginfrahygiene(liveGauntletpipelinealreadycoversmuchofit);remainingscopepreserved.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:02', NULL, 'cc7067391bc544ed46b17b432699e980', 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);
INSERTINTOtickets(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('06FB0TNSRWRV5KJ6DVD742S678','story','06FBPPMZNNEV052DBYYY3A897C','Standalone CLI test harness','Run simulation headless via terminal. Log output for verification. No GUI dependency.','backlog','high',NULL,NULL,NULL,'2026-02-10 23:17:59','2026-06-12 10:23:02',NULL,'f353d713819ff7e22f95584bedaf25e0',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWRV5KJ6DVD742S678','story','06FBPPMZNNEV052DBYYY3A897C','Standalone CLI test harness','Run simulation headless via terminal. Log output for verification. No GUI dependency.
Re-homedunderthemaintenanceumbrellapercascaderefocus2026-06-12—headlessCLIharnessistesttoolinghygieneunderdoneepicT-35;verifyremaininggapvstheexisting--test-mode/Gauntlet headless path.', 'backlog', 'high', NULL, NULL, NULL, '2026-02-10 23:17:59', '2026-06-12 10:23:02', NULL, '25d05d75c596cc3aa92391d93bcc9ccb', 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);
INSERTINTOtickets(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('06FB0TNSRX13JY1N9BF76CK8WW','story','06FBPPMMF7HS6FWRYAKMECTXX0','NetworkBridge stub','TCP-based bridge for future multiplayer. Same interface as LocalBridge, deferred implementation.','backlog','low',NULL,NULL,NULL,'2026-02-10 23:18:24','2026-06-12 10:23:02',NULL,'2a50025cfd384bb89d2128f754308654',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRX13JY1N9BF76CK8WW','story','06FBPPMMF7HS6FWRYAKMECTXX0','NetworkBridge stub','TCP-based bridge for future multiplayer. Same interface as LocalBridge, deferred implementation.
Parkedpost-cascadeperrefocus2026-06-12—theTCPNetworkBridgeforfuturemultiplayerhasnogenerationdependencyandstaysdeferred;functionalrequirementpreserved(sameinterfaceasLocalBridge).', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1023:18:24', '2026-06-1210:23:02', NULL, '3b4aecc006ff0f423a503cbbbacd8d0e', 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);
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—NPCmoodsimulationisbackground-NPC-layerwork;rescuedfromcancelledparentepicT-41.Functionalrequirementpreserved.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1023:19:21', '2026-06-1210:23:02', NULL, '783e82c9d93ad5a7cdee581651902ab6', 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);
INSERTINTOtickets(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('06FB0TNSRY0PTZ1MKJEGCR2NYC','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Job performance simulation','Work activity states. Job satisfaction tracking. Performance affects mood and relationships.','backlog','low',NULL,NULL,NULL,'2026-02-10 23:19:21','2026-06-12 10:23:02',NULL,'0217076ad4addac86308cc1f680ed3eb',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY0PTZ1MKJEGCR2NYC','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Job performance simulation','Work activity states. Job satisfaction tracking. Performance affects mood and relationships.
Re-parentedunderPhase6epicpercascaderefocus2026-06-12—NPCjob-performancesimulationisbackground-NPC-layerwork;rescuedfromcancelledparentepicT-41.Functionalrequirementpreserved.', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1023:19:21', '2026-06-1210:23:02', NULL, 'b16bda5453b92497d390622f15526d29', 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);
INSERTINTOtickets(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('06FB0TNSRYHPH9Q44CERYSRYJC','story','06FBPPMMF7HS6FWRYAKMECTXX0','Unreliable narrator mechanics','Monologue can be wrong. Character misinterpretations. Knowledge-gated accuracy.','backlog','low',NULL,NULL,NULL,'2026-02-10 23:20:40','2026-06-12 10:23:02',NULL,'f13672adbdb2b1164bdd7598d6b25aff',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYHPH9Q44CERYSRYJC','story','06FBPPMMF7HS6FWRYAKMECTXX0','Unreliable narrator mechanics','Monologue can be wrong. Character misinterpretations. Knowledge-gated accuracy.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;functionalrequirement(knowledge-gatedmonologueaccuracy)preserved,notcancelled.', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1023:20:40', '2026-06-1210:23:02', NULL, '770b2bee51d65f264ed58fa9ce72bc54', 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);
INSERTINTOtickets(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('06FB0TNSRWEGYAEQXDVSMF4THG','story','06FB0TNSRZXCHGS16BFHSSGSV4','Placeholder art pipeline','Colored boxes, simple sprites, labels. Functional but not polished. Per D-014 guidance.','backlog','high',NULL,NULL,NULL,'2026-02-10 23:21:12','2026-06-12 10:23:02',NULL,'685ae03697216b9f5f4e791d5cfee252',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWEGYAEQXDVSMF4THG','story','06FB0TNSRZXCHGS16BFHSSGSV4','Placeholder art pipeline','Colored boxes, simple sprites, labels. Functional but not polished. Per D-014 guidance.
Re-parentedunderPhase4epic(T-750)percascaderefocus2026-06-12;scopeupdatedfromv0.1placeholderarttothefinal-versionassetpipelineperD-166(noplaceholders,notestmap)—functionalrequirement(assetproductionpipeline)preserved.', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:21:12', '2026-06-1210:23:02', NULL, '6718c338eb00f8fa703c1f6c12c47061', 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);
INSERTINTOtickets(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('06FB0TNSRW4WB0PWAXS6D67J8R','story','06FBPPMMF7HS6FWRYAKMECTXX0','Additional mode stubs','Thermal, camera feeds, unisphere tracking, audio analysis. Interface only, no implementation. Post-v0.1 features.','backlog','low',NULL,NULL,NULL,'2026-02-10 23:21:23','2026-06-12 10:23:02',NULL,'df1325f7c62d8454b433391b168f8bad',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRW4WB0PWAXS6D67J8R','story','06FBPPMMF7HS6FWRYAKMECTXX0','Additional mode stubs','Thermal, camera feeds, unisphere tracking, audio analysis. Interface only, no implementation. Post-v0.1 features.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;thermal/camera-feed/unisphere/audiomodesareD-017character-buildfeatures,preservednotcancelled.', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1023:21:23', '2026-06-1210:23:02', NULL, '4d38b67572b5c02ac8d4d5b49b010f3c', 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);
INSERTINTOtickets(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('06FB0TNSRYR09VY1F6C42PACGW','story','06FBPPMMF7HS6FWRYAKMECTXX0','Character-specific POI filtering','Different characters see different POIs. Profession-based, faction-based, relationship-based visibility.','backlog','medium',NULL,NULL,NULL,'2026-02-10 23:22:17','2026-06-12 10:23:02',NULL,'bc869a5613c10871e32804f3e898867d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYR09VY1F6C42PACGW','story','06FBPPMMF7HS6FWRYAKMECTXX0','Character-specific POI filtering','Different characters see different POIs. Profession-based, faction-based, relationship-based visibility.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;profession/faction/relationship-gatedPOIvisibilitypreserved,notcancelled.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1023:22:17', '2026-06-1210:23:02', NULL, '78d416703703c36d4191f263e2f5f1d8', 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);
ParkedunderPhase6epic(T-751)percascaderefocus2026-06-12;shared-NPC/relationshiplinksbetweentemplatesbelongtotheNPCdetaillayer.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1023:24:06', '2026-06-1210:23:02', NULL, '67678194e45fc82bf34e96a61c834883', 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);
INSERTINTOtickets(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('06FB0TNSRYX9R1F6SDN27PDND8','story','06FBPPMMF7HS6FWRYAKMECTXX0','Module attachment logic','60-70/30-40 known vs stranger ratio for module attachment. Variable per seed. Anti-metagaming.','backlog','low',NULL,NULL,NULL,'2026-02-10 23:24:37','2026-06-12 10:23:02',NULL,'9e840a81b854503f2576474ebd8d7d6c',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYX9R1F6SDN27PDND8','story','06FBPPMMF7HS6FWRYAKMECTXX0','Module attachment logic','60-70/30-40 known vs stranger ratio for module attachment. Variable per seed. Anti-metagaming.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;drama-moduleattachmentratios(anti-metagaming)preserved,notcancelled.', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1023:24:37', '2026-06-1210:23:02', NULL, 'eff4a3b8d1df1f4b223faf50dbab8c46', 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);
Re-homedundermaintenancepercascaderefocus2026-06-12;test-toolingrequirementsspecisinfrahygiene(muchisdefactosettled:gdUnit4,cargotest,Gauntlet).', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:27:10', '2026-06-1210:23:02', NULL, '85430c9483f3f62444bf0dfd8db39cd1', 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);
INSERTINTOtickets(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('06FB0TNSRY9FP8GJSR96661J9M','story','06FBPPMZNNEV052DBYYY3A897C','Production code constraints','Define rules: what test hooks are acceptable in production code, what must stay external. Pollution boundaries.','backlog','high',NULL,NULL,NULL,'2026-02-10 23:27:10','2026-06-12 10:23:02',NULL,'959a0000a9e6b4f20ce8eaa5fc4d76cc',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY9FP8GJSR96661J9M','story','06FBPPMZNNEV052DBYYY3A897C','Production code constraints','Define rules: what test hooks are acceptable in production code, what must stay external. Pollution boundaries.
Re-homedundermaintenancepercascaderefocus2026-06-12;production-codetest-hookpolicyisengineering-hygienedocumentation.', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:27:10', '2026-06-1210:23:02', NULL, 'd71e4a0bb47bc8f488d408b8ba19afa2', 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);
INSERTINTOtickets(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('06FB0TNSRY8KWVN9TCM2G5XXG8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Movement & Collision','Tile collision, pathfinding, NPC movement, and game clock systems. Hard blockers identified in v0.1 gap analysis workshop. Without these, NPCs cannot physically navigate the station.','backlog','critical',NULL,NULL,NULL,'2026-02-11 00:00:57','2026-06-12 10:23:03',NULL,'b1dadd77544073516a99f3db850d6735',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY8KWVN9TCM2G5XXG8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Movement & Collision','Tile collision, pathfinding, NPC movement, and game clock systems. Hard blockers identified in v0.1 gap analysis workshop. Without these, NPCs cannot physically navigate the station.
ParkedunderPhase5epic(T-749)percascaderefocus2026-06-12;previousparentinitiativeT-29iscancelled—tilecollision/pathfinding/clockistheplayer-walkingfoundation(NPCmovementportionfollowsinPhase6).', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1100:00:57', '2026-06-1210:23:03', NULL, '150ea94645f47777383e0eccef421055', 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);
INSERTINTOtickets(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('06FB0TNSRZ202MPMFH0EDH2BT4','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Observation & Interaction','Unified observation pipeline and player interaction systems. The experience layer that connects perception, knowledge, and monologue into the core gameplay loop. Identified as the missing spine in gap analysis workshop.','backlog','critical',NULL,NULL,NULL,'2026-02-11 00:01:05','2026-06-12 10:23:03',NULL,'3421d4a2b8fb1e403763a83876246fc3',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ202MPMFH0EDH2BT4','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Observation & Interaction','Unified observation pipeline and player interaction systems. The experience layer that connects perception, knowledge, and monologue into the core gameplay loop. Identified as the missing spine in gap analysis workshop.
Parkedaspost-cascadegameplaypercascaderefocus2026-06-12;theobservation/interactionspineofthecoregameplayloopispreserved,notcancelled.', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1100:01:05', '2026-06-1210:23:03', NULL, 'fdb933b02ac2af9d0585e9ff2f0af3a5', 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);
INSERTINTOtickets(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('06FB0TNSRZP48TDBTW18P88WNW','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Game State Management','Save/load, session management, and game state serialization systems. Required for playable v0.1 sessions.','backlog','high',NULL,NULL,NULL,'2026-02-11 00:01:13','2026-06-12 10:23:03',NULL,'9b5824a7c03adcb2281dfa143444a4cb',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZP48TDBTW18P88WNW','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Game State Management','Save/load, session management, and game state serialization systems. Required for playable v0.1 sessions.
ParkedunderPhase5epic(T-749)percascaderefocus2026-06-12;save/loadandsessionmanagementaretiedtoplayablesessions(savegamelineageisdocumentedasPhase5+).', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1100:01:13', '2026-06-1210:23:03', NULL, '125b493b4c861ba2a04ae2a9185ed944', 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);
Re-homedundermaintenancepercascaderefocus2026-06-12;testtooling,notphasework.', 'backlog', 'low', NULL, NULL, NULL, '2026-02-1100:05:00', '2026-06-1210:23:03', NULL, '67ea9105ad606a6e386d2f7fcdb155b1', 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);
INSERTINTOtickets(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('06FB0TNSRZHW11BZWVZKB5YTH8','story','06FBPPMZNNEV052DBYYY3A897C','Crash reporting infrastructure','Crash reporting infrastructure for both codebases:\n- Rust panic handler writes crash.log with backtrace\n- Godot push_error captures client crashes\n- Include version, platform, last 100 log lines\n- Needed before external playtesting\n\nEffort: M\nCodebase: server + client\nSource: Architecture Review Audit 2026-02-11\nSprint: 2+ (before vertical slice playtest)','backlog','medium',NULL,NULL,NULL,'2026-02-11 20:27:45','2026-06-12 10:23:03',NULL,'3bb30edc990fb63ea6b0ba530e1fe0a4',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZHW11BZWVZKB5YTH8','story','06FBPPMZNNEV052DBYYY3A897C','Crash reporting infrastructure','Crash reporting infrastructure for both codebases:\n- Rust panic handler writes crash.log with backtrace\n- Godot push_error captures client crashes\n- Include version, platform, last 100 log lines\n- Needed before external playtesting\n\nEffort: M\nCodebase: server + client\nSource: Architecture Review Audit 2026-02-11\nSprint: 2+ (before vertical slice playtest)
Re-homedundermaintenancepercascaderefocus2026-06-12;infrarequirementpreservedunchanged.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1120:27:45', '2026-06-1210:23:03', NULL, '3046ccac1355ecf98b7ff730d8abd03d', 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);
INSERTINTOtickets(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('06FB0TNSRXVMATNG8QEJVVVCH0','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Workshop: Knowledge Graph & Information Boundaries','Design workshop for KnowledgeGraph component to replace Vec<String> placeholder.
Scope:
-Graphstructure(nodes,edges,timestamps,certainty)
-Informationboundaries(whatNPCsknowvsdonotknow)
-Propagationrules(gossip,observation,inference)
-Queryinterfacefordialogue/behaviorsystems
-Memorylimitsandforgettingmechanics
Pillar-1mechanic.CRITICALpriority.
Sprint2blocker.
Participants:Tyre(lead),Morve,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1120:27:52', '2026-06-1210:23:03', NULL, 'f506ed016009ecb27393e8ce71c41b04', 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);
INSERTINTOtickets(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('06FB0TNSRXVMATNG8QEJVVVCH0','epic','06FB0TNSRZGGNZMAP8GDMXSCMW','Workshop: Knowledge Graph & Information Boundaries','Design workshop for KnowledgeGraph component to replace Vec<String> placeholder.
Scope:
-Graphstructure(nodes,edges,timestamps,certainty)
-Informationboundaries(whatNPCsknowvsdonotknow)
-Propagationrules(gossip,observation,inference)
-Queryinterfacefordialogue/behaviorsystems
-Memorylimitsandforgettingmechanics
Pillar-1mechanic.CRITICALpriority.
Sprint2blocker.
Participants:Tyre(lead),Morve,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11
ParkedunderPhase6epicpercascaderefocus2026-06-12;NPCknowledgesystemsfollowthebackgroundNPClayer.', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1120:27:52', '2026-06-1210:23:03', NULL, '41396f69c018ecf29aff0e17689172bc', 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);
INSERTINTOtickets(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('06FB0TNSRZ8NCH53C9VAC2N3V8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Observer Snapshot Generation Pipeline','Design workshop for perception query algorithm that generates ObserverSnapshot.
Pipelinestages:
1.Spatialquery(entitiesinrange)
2.Line-of-sightfiltering
3.Soundpropagation
4.Knowledgegraphintegration
5.Snapshotassembly
CRITICALpriority.Sprint2blocker.
DependsonWorkshop1(KnowledgeGraph).
Participants:Tyre(lead),Morve,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1120:28:05', '2026-06-1210:23:03', NULL, 'a7c69a12c7a6c9e2143a80641947e548', 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);
INSERTINTOtickets(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('06FB0TNSRZ8NCH53C9VAC2N3V8','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Observer Snapshot Generation Pipeline','Design workshop for perception query algorithm that generates ObserverSnapshot.
Pipelinestages:
1.Spatialquery(entitiesinrange)
2.Line-of-sightfiltering
3.Soundpropagation
4.Knowledgegraphintegration
5.Snapshotassembly
CRITICALpriority.Sprint2blocker.
DependsonWorkshop1(KnowledgeGraph).
Participants:Tyre(lead),Morve,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11
ParkedunderPhase5epicpercascaderefocus2026-06-12;playerperceptionpipelineactivateswithplayerviewportwork.', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1120:28:05', '2026-06-1210:23:03', NULL, '7e004de68834eca5c9a9038ef1bbe277', 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);
INSERTINTOtickets(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('06FB0TNSRZVC39DY5152CXZMB0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Save/Load Architecture','Design workshop for save/load system architecture.
Keydecisions:
-CustomSaveStatestructvsbevy_reflect
-Versionnumberschemeandmigrationstrategy
-Relationshiptotiersystem(serializebytier?)
-Incrementalsavesvsfullsnapshots
-Quicksavevsnamedsaves
MEDIUMpriority.Mustberesolvedbeforeverticalslice.
Participants:Dudley(lead),Tyre,Morve,SI
Source:ArchitectureReviewAudit2026-02-11', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1120:28:16', '2026-06-1210:23:03', NULL, 'a88b7b40aa2b05fd5baeb91363890c87', 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);
INSERTINTOtickets(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('06FB0TNSRZVC39DY5152CXZMB0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Save/Load Architecture','Design workshop for save/load system architecture.
Keydecisions:
-CustomSaveStatestructvsbevy_reflect
-Versionnumberschemeandmigrationstrategy
-Relationshiptotiersystem(serializebytier?)
-Incrementalsavesvsfullsnapshots
-Quicksavevsnamedsaves
MEDIUMpriority.Mustberesolvedbeforeverticalslice.
Participants:Dudley(lead),Tyre,Morve,SI
Source:ArchitectureReviewAudit2026-02-11
ParkedunderPhase5epicpercascaderefocus2026-06-12;savegamelineagealreadyplannedasPhase5+inasset-pipeline.md.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1120:28:16', '2026-06-1210:23:03', NULL, '54cec88f34afca4fb300884337cab649', 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);
INSERTINTOtickets(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('06FB0TNSRWSBWTKM42BVVMPXJG','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Workshop: Map Authoring Pipeline','Design workshop for map authoring toolchain and format.
Keydecisions:
-Toolselection:TiledvsGodotTileMapvsYAML
-Mapformat(JSON,TMX,custom?)
-Collisionlayerspecification
-Entityspawnpoints
-Loaderimplementation(server+client)
-Hotreloadsupportforiteration
MEDIUMpriority.Sprint2-3target.
Participants:Morve(lead),Tyre,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1120:28:22', '2026-06-1210:23:03', NULL, 'f62afde5bfff20014eae53dffaec16ed', 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);
INSERTINTOtickets(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('06FB0TNSRWSBWTKM42BVVMPXJG','epic','06FB0TNSRZXCHGS16BFHSSGSV4','Workshop: Map Authoring Pipeline','Design workshop for map authoring toolchain and format.
Keydecisions:
-Toolselection:TiledvsGodotTileMapvsYAML
-Mapformat(JSON,TMX,custom?)
-Collisionlayerspecification
-Entityspawnpoints
-Loaderimplementation(server+client)
-Hotreloadsupportforiteration
MEDIUMpriority.Sprint2-3target.
Participants:Morve(lead),Tyre,Dudley,SI
Source:ArchitectureReviewAudit2026-02-11
Re-parentedunderPhase4epicpercascaderefocus2026-06-12;authoring-toolframingsupersededbyD-166(nohand-mademaps)—survivingscopeisformat/collision/loaderforgeneratoroutput.', 'backlog', 'medium', NULL, NULL, NULL, '2026-02-1120:28:22', '2026-06-1210:23:03', NULL, '49700ba92cebf77fd899a98be505eb73', 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);
INSERTINTOtickets(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('06FB0TNSRWYBGV0A6RBVS1NSP0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Control & Interaction Scheme',NULL,'backlog','critical',NULL,NULL,'D-053','2026-02-13 21:05:22','2026-06-12 10:23:03',NULL,'6cee19a63a5ba848bce561b550e60274',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWYBGV0A6RBVS1NSP0','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Workshop: Control & Interaction Scheme','Parked under Phase 5 epic per cascade refocus 2026-06-12; player control workshop runs when player work begins.','backlog','critical',NULL,NULL,'D-053','2026-02-13 21:05:22','2026-06-12 10:23:03',NULL,'001e82e401ddfc49aa6d8731f8748d8a',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXTV61ZRF9RZ6V1NXR','story','06FBPPMMF7HS6FWRYAKMECTXX0','Design discussion: insert data feeds — documenting feature systems and plumbing patterns','Broad design discussion to map out ALL the data feed systems the insert will eventually surface, identify common patterns, and design foundational plumbing that serves them all. This is bigger than the onboarding dossier — it is the insert as an information platform.
D-065(insertUI),D-012(informationboundary),D-010(determinism),Q-055', 'backlog', 'high', NULL, NULL, 'D-065,Q-055', '2026-03-0510:28:30', '2026-06-1210:23:03', NULL, 'cf5fb202dd6dff99f0d8d9e5170fc22e', 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);
INSERTINTOtickets(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('06FB0TNSRXTV61ZRF9RZ6V1NXR','story','06FBPPMMF7HS6FWRYAKMECTXX0','Design discussion: insert data feeds — documenting feature systems and plumbing patterns','Broad design discussion to map out ALL the data feed systems the insert will eventually surface, identify common patterns, and design foundational plumbing that serves them all. This is bigger than the onboarding dossier — it is the insert as an information platform.
Parkedingameplaybacklogpercascaderefocus2026-06-12;feedplumbingdesignresumeswhengameplaysystemsexisttofeedit.', 'backlog', 'high', NULL, NULL, 'D-065,Q-055', '2026-03-0510:28:30', '2026-06-1210:23:03', NULL, '19bcd44c46ca50f81b75d8e9e08e1353', 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);
INSERTINTOtickets(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('06FB0TNSRWJ60W2RFN2FQ2P3EW','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Generator Proof-of-Life','Sprint 25 spike: generator must produce usable output before anything else matters. Prove auto-generated locations at scale with legible characters. Template assembly (not procedural geography) for v0.2. See workshop decisions #1, #7, #22, #23. Estimated 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3) — Tyre estimate.','backlog','critical',NULL,NULL,NULL,'2026-03-05 23:11:39','2026-06-12 10:23:03',NULL,'5c2c3dc4e338bee268b571675061df7b',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWJ60W2RFN2FQ2P3EW','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Generator Proof-of-Life','Sprint 25 spike: generator must produce usable output before anything else matters. Prove auto-generated locations at scale with legible characters. Template assembly (not procedural geography) for v0.2. See workshop decisions #1, #7, #22, #23. Estimated 7 sprints to proof-of-life playtest (generated location + legible characters + tycoon bookmark from creation to Day 3) — Tyre estimate.
Parkedingameplaybacklogpercascaderefocus2026-06-12;template-assemblygenerationsupersededbytheT-750cascade—proof-of-lifeplaytestconceptpreserved.', 'backlog', 'critical', NULL, NULL, NULL, '2026-03-0523:11:39', '2026-06-1210:23:03', NULL, 'eb2c4463ff919778f8bdc5a76a8c2546', 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);
INSERTINTOtickets(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('06FB0TNSRXD5W32VCV5YZY3NX0','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Tycoon Bookmark','Tycoon is the v0.2 bookmark: small business owner, existing in the Krenn System. Zero investigation content. Tycoon = aspiration not starting state. Workshop decisions #4, #19, #20. Broad economic verb vocabulary serving all careers. Auto-generated apartment reflecting wealth + cultural context. CK3-style bookmark selection flow.','backlog','high',NULL,NULL,NULL,'2026-03-05 23:11:42','2026-06-12 10:23:03',NULL,'1830a6e517710899abeb534c6445db64',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXD5W32VCV5YZY3NX0','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Tycoon Bookmark','Tycoon is the v0.2 bookmark: small business owner, existing in the Krenn System. Zero investigation content. Tycoon = aspiration not starting state. Workshop decisions #4, #19, #20. Broad economic verb vocabulary serving all careers. Auto-generated apartment reflecting wealth + cultural context. CK3-style bookmark selection flow.
Parkedingameplaybacklogpercascaderefocus2026-06-12;bookmarkconceptpreservedforpost-cascadegame-making.', 'backlog', 'high', NULL, NULL, NULL, '2026-03-0523:11:42', '2026-06-1210:23:03', NULL, '004369aee4878e3aa3d419f3f1bcd73e', 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);
INSERTINTOtickets(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('06FB0TNSRXE0VWDHVQTXPVPEW0','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Character Creation','CK3-style character creation: skills + bookmark selection. Full cosmetic customisation (hair, clothing, colours — workshop decision #11). Culture implicit in starting location (decision #16). No family/culture/religion sliders in creation — those are deferred. Decision #2.','backlog','high',NULL,NULL,NULL,'2026-03-05 23:11:48','2026-06-12 10:23:03',NULL,'a4c743376eeb5a1ba1cbed47deac12c1',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXE0VWDHVQTXPVPEW0','epic','06FBPPMMF7HS6FWRYAKMECTXX0','Character Creation','CK3-style character creation: skills + bookmark selection. Full cosmetic customisation (hair, clothing, colours — workshop decision #11). Culture implicit in starting location (decision #16). No family/culture/religion sliders in creation — those are deferred. Decision #2.
Parkedingameplaybacklogpercascaderefocus2026-06-12;bookmark-selectionflowpreserved—cosmeticcustomisationtrackedseparatelyunderPhase5(T-619).', 'backlog', 'high', NULL, NULL, NULL, '2026-03-0523:11:48', '2026-06-1210:23:03', NULL, '57f07a5f9d963bde7eccd2fddbef96dc', 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);
INSERTINTOtickets(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('06FB0TNSRZ65H50N3XJKJ3F5XM','epic','06FBPPMMF7HS6FWRYAKMECTXX0','World Feel','The world is quietly responsive, not indifferent. Gradient of caring by social proximity — world doesn''t care globally but notices locally. Dual-scale consequence model: Rimworld sharp events (crises, reversals) + DF slow accumulation (reputation, debt, relationship erosion). Setting delivery via both visual and insert layers in parallel. Workshop decisions #10, #12, #13, #21.','backlog','high',NULL,NULL,NULL,'2026-03-05 23:11:59','2026-06-12 10:23:03',NULL,'8d6818d100f2017e9bf2cb033291fa53',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ65H50N3XJKJ3F5XM','epic','06FBPPMMF7HS6FWRYAKMECTXX0','World Feel','The world is quietly responsive, not indifferent. Gradient of caring by social proximity — world doesn''t care globally but notices locally. Dual-scale consequence model: Rimworld sharp events (crises, reversals) + DF slow accumulation (reputation, debt, relationship erosion). Setting delivery via both visual and insert layers in parallel. Workshop decisions #10, #12, #13, #21.
Parkedingameplaybacklogpercascaderefocus2026-06-12;world-feeldecisionspreservedforpost-cascadegame-making.', 'backlog', 'high', NULL, NULL, NULL, '2026-03-0523:11:59', '2026-06-1210:23:03', NULL, '7271e54ba535dfdedd73d4f22a058a5a', 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);
INSERTINTOtickets(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('06FB0TNSRZHHSBPQS9VB8S7D5M','story','06FB0TNSRXX29H5X0EB0F0GBW4','Full character customisation','Cosmetic customisation: hair, clothing, colours. Decision #11. Separate from skills/bookmark — aesthetic only. Question open: do creation choices trace into the generated apartment? (Q-WTF-040).','backlog','high',NULL,'client',NULL,'2026-03-05 23:12:52','2026-06-12 10:23:03',NULL,'fe1f1ccdd1755cde45c229df7fc25a77',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZHHSBPQS9VB8S7D5M','story','06FB0TNSRXX29H5X0EB0F0GBW4','Full character customisation','Cosmetic customisation: hair, clothing, colours. Decision #11. Separate from skills/bookmark — aesthetic only. Question open: do creation choices trace into the generated apartment? (Q-WTF-040).
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualscustomisationresumeswithplayerrendering(overlapsT-694).', 'backlog', 'high', NULL, 'client', NULL, '2026-03-0523:12:52', '2026-06-1210:23:03', NULL, '5781aff24e5ef5f6789a1d7ae171bc40', 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);
INSERTINTOtickets(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('06FB0TNSRZBZHXAK3DYTK1C19R','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Relationship formation system','NPC-to-NPC and NPC-to-player relationships form through: Sims-style direct interaction + Rimworld-style shared adversity. Decision #17. Relationships must be readable from the outside. Codify for systems. Decision #18: prove relationships readable before layering narrative depth.','backlog','high',NULL,'server',NULL,'2026-03-05 23:13:08','2026-06-12 10:23:03',NULL,'675b52e99220f082d111cec3d9ddbf5f',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZBZHXAK3DYTK1C19R','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Relationship formation system','NPC-to-NPC and NPC-to-player relationships form through: Sims-style direct interaction + Rimworld-style shared adversity. Decision #17. Relationships must be readable from the outside. Codify for systems. Decision #18: prove relationships readable before layering narrative depth.
ParkedunderPhase6epicpercascaderefocus2026-06-12(previousparentT-607cancelled);relationship-formationrequirementpreservedfortheNPClayer.', 'backlog', 'high', NULL, 'server', NULL, '2026-03-0523:13:08', '2026-06-1210:23:03', NULL, '5b91cc368402eedd0da8f5e0e245474b', 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);
INSERTINTOtickets(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('06FB0TNSRXK4NDX3Y242QK7BC8','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Quietly responsive world','The world notices locally but doesn''t care globally. Gradient of caring based on social proximity. Decision #10. Primary social contacts develop responsiveness over time. Indifferent world is wrong — quietly responsive world is right. Implementation: proximity-weighted NPC attention and reaction systems.','backlog','high',NULL,'server',NULL,'2026-03-05 23:13:22','2026-06-12 10:23:03',NULL,'be5e2012a0ee6dd1a07398ec2d1b261d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXK4NDX3Y242QK7BC8','story','06FB0TNSRZGGNZMAP8GDMXSCMW','Quietly responsive world','The world notices locally but doesn''t care globally. Gradient of caring based on social proximity. Decision #10. Primary social contacts develop responsiveness over time. Indifferent world is wrong — quietly responsive world is right. Implementation: proximity-weighted NPC attention and reaction systems.
ParkedunderPhase6epicpercascaderefocus2026-06-12;quietly-responsive-worldrequirementpreservedfortheNPClayer.', 'backlog', 'high', NULL, 'server', NULL, '2026-03-0523:13:22', '2026-06-1210:23:03', NULL, 'fd6c2a9e3e2b1ca57462596be2ff799a', 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);
INSERTINTOtickets(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('06FB0TNSRXJDMPQNP05JFD2P6G','story','06FBPPMZNNEV052DBYYY3A897C','Voice pipeline: GPU acceleration (ROCm/Vulkan)','sr-voice has cargo features for rocm/vulkan/cuda/metal but builds CPU-only (~13 t/s). Enable after code stable. GPU would reach 50+ t/s. LIBCLANG_PATH already in Makefile.','backlog','low',NULL,'server',NULL,'2026-03-07 18:19:29','2026-06-12 10:23:03',NULL,'1904c59cef77c9a6db8bb047f9a8ada7',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXJDMPQNP05JFD2P6G','story','06FBPPMZNNEV052DBYYY3A897C','Voice pipeline: GPU acceleration (ROCm/Vulkan)','sr-voice has cargo features for rocm/vulkan/cuda/metal but builds CPU-only (~13 t/s). Enable after code stable. GPU would reach 50+ t/s. LIBCLANG_PATH already in Makefile.
Re-homedundermaintenancepercascaderefocus2026-06-12;GPUbuild-featureenablementisinfrahygieneontheexistingvoicepipeline.', 'backlog', 'low', NULL, 'server', NULL, '2026-03-0718:19:29', '2026-06-1210:23:03', NULL, '169b8c3c22eeba4ed8e0dbf1042364bc', 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);
INSERTINTOtickets(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('06FB0TNSRW36DF5F95406ETRGR','story','06FBPPMZNNEV052DBYYY3A897C','Server: extract platform abstraction module when second consumer appears','Trigger ticket: when any server module beyond voice/hardware.rs needs OS-dependent info (CPU, memory, battery, GPU), extract shared platform queries into server/src/platform.rs. Currently all OS detection lives in server/src/voice/hardware.rs (sysinfo crate, on_battery(), VRAM probes, available_parallelism). Single consumer, no duplication — no action needed until a second consumer appears. Trigger conditions: (1) a second system needs CPU/memory info independently of voice pipeline, (2) battery detection needed outside voice scaling (e.g. tick rate throttling), (3) server exposes system info over IPC (multiplayer diagnostics). Extraction is ~30 minutes: pull on_battery(), probe_current_free(), sysinfo calls into platform.rs, leave voice-specific scaling logic in hardware.rs.','backlog','low',NULL,'server',NULL,'2026-03-13 09:49:07','2026-06-12 10:23:03',NULL,'d2f3dc06ebad5f9c538aa09653b33812',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRW36DF5F95406ETRGR','story','06FBPPMZNNEV052DBYYY3A897C','Server: extract platform abstraction module when second consumer appears','Trigger ticket: when any server module beyond voice/hardware.rs needs OS-dependent info (CPU, memory, battery, GPU), extract shared platform queries into server/src/platform.rs. Currently all OS detection lives in server/src/voice/hardware.rs (sysinfo crate, on_battery(), VRAM probes, available_parallelism). Single consumer, no duplication — no action needed until a second consumer appears. Trigger conditions: (1) a second system needs CPU/memory info independently of voice pipeline, (2) battery detection needed outside voice scaling (e.g. tick rate throttling), (3) server exposes system info over IPC (multiplayer diagnostics). Extraction is ~30 minutes: pull on_battery(), probe_current_free(), sysinfo calls into platform.rs, leave voice-specific scaling logic in hardware.rs.
Re-homedundermaintenancepercascaderefocus2026-06-12;triggerconditionsunchanged.', 'backlog', 'low', NULL, 'server', NULL, '2026-03-1309:49:07', '2026-06-1210:23:03', NULL, '7aa6eca7e7350f0992f285fa7325786a', 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);
INSERTINTOtickets(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('06FB0TNSRY4CMF4W57DCQASQNW','task','06FBPPMZNNEV052DBYYY3A897C','Mid-sprint ticket creation protocol for team agents','When team agents discover new work during a sprint (like #661 zone-type templates in Sprint 26), they should message the lead immediately for retroactive ticket creation rather than just doing the work uncaptured. Document this in the sprint-start skill agent spawn prompt and/or team-patterns.md.','backlog','low',NULL,'meta',NULL,'2026-03-13 11:37:34','2026-06-12 10:23:03',NULL,'a40b8568dfffec237478189f140ba8a9',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY4CMF4W57DCQASQNW','task','06FBPPMZNNEV052DBYYY3A897C','Mid-sprint ticket creation protocol for team agents','When team agents discover new work during a sprint (like #661 zone-type templates in Sprint 26), they should message the lead immediately for retroactive ticket creation rather than just doing the work uncaptured. Document this in the sprint-start skill agent spawn prompt and/or team-patterns.md.
Re-homedundermaintenancepercascaderefocus2026-06-12;recastsprintprotocolforkanban/batchmode—functionalrequirementpreserved.', 'backlog', 'low', NULL, 'meta', NULL, '2026-03-1311:37:34', '2026-06-1210:23:03', NULL, '9f08d77f1d757206ac431d91820a63b8', 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);
INSERTINTOtickets(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('06FB0TNSRX1PW1RXYRBNRHVNYW','story','06FBPPMMF7HS6FWRYAKMECTXX0','Gate network travel planner — interactive route-finding overlay on the star map insert, showing hop paths between systems with transit time estimates and corridor information',NULL,'backlog','medium',NULL,'client',NULL,'2026-03-15 10:20:07','2026-06-12 10:23:03',NULL,'d5ed14ff7a71cd5357bd3cf8b127d639',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRX1PW1RXYRBNRHVNYW','story','06FBPPMMF7HS6FWRYAKMECTXX0','Gate network travel planner — interactive route-finding overlay on the star map insert, showing hop paths between systems with transit time estimates and corridor information','Parked in gameplay backlog per cascade refocus 2026-06-12; star-map travel planner preserved for when in-game travel exists.','backlog','medium',NULL,'client',NULL,'2026-03-15 10:20:07','2026-06-12 10:23:03',NULL,'29e604f79ca25dbe8ce14536932429c1',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
ParkedunderPhase6epicpercascaderefocus2026-06-12;interior/furnituregenerationisroom-leveldetail—pairswithT-682(parkedgameplay).', 'backlog', 'high', NULL, 'server', NULL, '2026-03-1707:06:30', '2026-06-1210:23:03', NULL, '47edbff461c36e23bbfdaf07a48c8cad', 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);
INSERTINTOtickets(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('06FB0TNSRYXPA202KSKKJ15KZ8','story','06FB0TNSRXX29H5X0EB0F0GBW4','Character creation screen','Full character creation UI using the game UI kit and widget system — not a debug/test wrapper. This is the production character creation screen that players use at game start.
Blockedby:#693(compositor)', 'backlog', 'high', NULL, 'client', NULL, '2026-03-1708:21:47', '2026-06-1210:23:03', NULL, 'ed3c0ae9f3ab466ad63d40c3192d644e', 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);
INSERTINTOtickets(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('06FB0TNSRYXPA202KSKKJ15KZ8','story','06FB0TNSRXX29H5X0EB0F0GBW4','Character creation screen','Full character creation UI using the game UI kit and widget system — not a debug/test wrapper. This is the production character creation screen that players use at game start.
ParkedunderPhase5epicpercascaderefocus2026-06-12;creationscreenshipswithplayercontrolandcharacterrendering.', 'backlog', 'high', NULL, 'client', NULL, '2026-03-1708:21:47', '2026-06-1210:23:03', NULL, '687fce3729c26231a6d9635dfcbfc6ca', 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);
INSERTINTOtickets(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('06FB0TNSRWQEZ7D8AX2PRS2FWM','task','06FB0TNSRXX29H5X0EB0F0GBW4','LOD crowd rendering research — performance-driven strategy for 400+ characters','Research and prototype LOD strategy for 400+ simultaneous characters on screen (crowd scenes, protests, battles).\n\nCurrent budget: 80 NPCs at full detail. This ticket defines the path to 400+.\n\nKey constraints from workshop:\n- LOD degradation is performance-driven, NOT distance/count threshold\n- Degradation is proactive (triggers on PROJECTED viewport character count, not measured frame drop — reactive causes hitching)\n- Progressive from player outward: furthest degrade first (full mesh -> simplified mesh -> billboard)\n- When paused: restore full detail on all characters\n- At billboard tier: body size tier and dominant clothing color must remain visually distinct\n- Outline baked into impostor sprite at billboard tier\n\nDeliverable: technical spec + prototype result. Does not produce shippable code.\n\nNot in Sprint 28 — backlog for when crowd-scale systems begin.','backlog','medium',NULL,'client',NULL,'2026-03-17 17:48:12','2026-06-12 10:23:03',NULL,'c569b5b1c7c5896c9d0678c8efa405d3',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWQEZ7D8AX2PRS2FWM','task','06FB0TNSRXX29H5X0EB0F0GBW4','LOD crowd rendering research — performance-driven strategy for 400+ characters','Research and prototype LOD strategy for 400+ simultaneous characters on screen (crowd scenes, protests, battles).\n\nCurrent budget: 80 NPCs at full detail. This ticket defines the path to 400+.\n\nKey constraints from workshop:\n- LOD degradation is performance-driven, NOT distance/count threshold\n- Degradation is proactive (triggers on PROJECTED viewport character count, not measured frame drop — reactive causes hitching)\n- Progressive from player outward: furthest degrade first (full mesh -> simplified mesh -> billboard)\n- When paused: restore full detail on all characters\n- At billboard tier: body size tier and dominant clothing color must remain visually distinct\n- Outline baked into impostor sprite at billboard tier\n\nDeliverable: technical spec + prototype result. Does not produce shippable code.\n\nNot in Sprint 28 — backlog for when crowd-scale systems begin.
ParkedunderPhase5epicpercascaderefocus2026-06-12;crowd-renderingresearchresumeswithin-worldrenderingwork.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-1717:48:12', '2026-06-1210:23:03', NULL, '68e3c19b17316e74a3a77812bd20f63e', 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);
INSERTINTOtickets(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('06FB0TNSRY6TPACQSYVFGDEMPR','story','06FB0TNSRXX29H5X0EB0F0GBW4','Scar overlay system — per-segment scar meshes or textures','Visual overlay system for scars on character bodies. Scars are per-segment (leveraging the 18-segment body architecture for placement). Each scar is a visual modification to a specific body segment — either a decal/texture overlay or a small mesh overlay attached to the segment. Requirements: scars placed per body segment, multiple scars per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via toon shader for skin tone matching. Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160.','backlog','medium',NULL,'visual',NULL,'2026-03-22 14:30:36','2026-06-12 10:23:03',NULL,'9adb71b9124bbc8c9db1ebe65acfbe61',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY6TPACQSYVFGDEMPR','story','06FB0TNSRXX29H5X0EB0F0GBW4','Scar overlay system — per-segment scar meshes or textures','Visual overlay system for scars on character bodies. Scars are per-segment (leveraging the 18-segment body architecture for placement). Each scar is a visual modification to a specific body segment — either a decal/texture overlay or a small mesh overlay attached to the segment. Requirements: scars placed per body segment, multiple scars per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via toon shader for skin tone matching. Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-03-2214:30:36', '2026-06-1210:23:03', NULL, '4645267811b9c4979915f196f771d988', 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);
INSERTINTOtickets(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('06FB0TNSRWS9B34T2HPJCYMGK0','story','06FB0TNSRXX29H5X0EB0F0GBW4','Tattoo overlay system — per-segment tattoo textures','Visual overlay system for tattoos on character bodies. Tattoos are per-segment texture overlays with their own recolor masks for ink color variation. Requirements: tattoos placed per body segment, multiple tattoos per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via multi-region mask for multi-color tattoos. May share implementation approach with scar system (#715). Architecture uses per-segment addressability from D-160.','backlog','medium',NULL,'visual',NULL,'2026-03-22 14:30:42','2026-06-12 10:23:03',NULL,'ae7e0e08a8627d75a9949bb4ce978001',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWS9B34T2HPJCYMGK0','story','06FB0TNSRXX29H5X0EB0F0GBW4','Tattoo overlay system — per-segment tattoo textures','Visual overlay system for tattoos on character bodies. Tattoos are per-segment texture overlays with their own recolor masks for ink color variation. Requirements: tattoos placed per body segment, multiple tattoos per character, persist across clothing changes (visible on exposed segments), hidden under clothing via coverage system, recolorable via multi-region mask for multi-color tattoos. May share implementation approach with scar system (#715). Architecture uses per-segment addressability from D-160.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-03-2214:30:42', '2026-06-1210:23:03', NULL, '16d146e23b58cc8467f6e0ca59151343', 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);
INSERTINTOtickets(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('06FB0TNSRWEDR71D90K594P7DG','story','06FB0TNSRXX29H5X0EB0F0GBW4','Visible injury overlay system — per-segment injury visualization','Visual overlay system for injuries on character bodies. Injuries are per-segment visual states showing damage (bruises, cuts, burns) and healing progression. Requirements: injuries placed per body segment, severity/type affects visual appearance, healing progression over time changes the overlay, hidden under clothing via coverage system, interacts with amputation system (injury on a removed limb is moot). Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160 and limb removal capability.','backlog','medium',NULL,'visual',NULL,'2026-03-22 14:30:49','2026-06-12 10:23:03',NULL,'acf72109f46ac3786b587751e34a7133',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWEDR71D90K594P7DG','story','06FB0TNSRXX29H5X0EB0F0GBW4','Visible injury overlay system — per-segment injury visualization','Visual overlay system for injuries on character bodies. Injuries are per-segment visual states showing damage (bruises, cuts, burns) and healing progression. Requirements: injuries placed per body segment, severity/type affects visual appearance, healing progression over time changes the overlay, hidden under clothing via coverage system, interacts with amputation system (injury on a removed limb is moot). Depends on compositor (#704) and body segments (#707) — both done. Architecture uses per-segment addressability from D-160 and limb removal capability.
ParkedunderPhase5epicpercascaderefocus2026-06-12;character-visualsleftoverpreserved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-03-2214:30:49', '2026-06-1210:23:03', NULL, '66e1c70cdf25354a92e8952bf92c32c2', 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);
INSERTINTOtickets(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('06FB0TNSRY5J5AWB356FT9WK0M','story','06FB0TNSRXX29H5X0EB0F0GBW4','Accessory slot filtering — _get_accessory_ids_for_slot() ignores slot param','_get_accessory_ids_for_slot(slot) accepts a slot parameter but returns all accessories unfiltered. Every accessory slot shows the full catalogue. Should filter by slot-appropriate prefix (hat_*, goggles_*, etc.) matching the clothing tab''s approach. Currently invisible with placeholder assets but will be wrong when real accessories are added.','backlog','low','client',NULL,NULL,'2026-03-22 16:33:07','2026-06-12 10:23:03',NULL,'e248cf9c02444e3ce27dcb5666040d3e',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY5J5AWB356FT9WK0M','story','06FB0TNSRXX29H5X0EB0F0GBW4','Accessory slot filtering — _get_accessory_ids_for_slot() ignores slot param','_get_accessory_ids_for_slot(slot) accepts a slot parameter but returns all accessories unfiltered. Every accessory slot shows the full catalogue. Should filter by slot-appropriate prefix (hat_*, goggles_*, etc.) matching the clothing tab''s approach. Currently invisible with placeholder assets but will be wrong when real accessories are added.
ParkedunderPhase5epicpercascaderefocus2026-06-12;latentcreation-UIbugfixedalongsidecharacter-visualsleftovers.', 'backlog', 'low', 'client', NULL, NULL, '2026-03-2216:33:07', '2026-06-1210:23:03', NULL, 'b8b7a3fb5061192a31f267b490569b39', 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);
INSERTINTOtickets(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('06FB0TNSRYS8J5T5CV3EKNPJMR','task','06FB0TNSRXX29H5X0EB0F0GBW4','Adopt auto-sizing label pattern for dynamic text','Evaluate GodotFontAutoSizeLabels (https://github.com/LuisEscorza/GodotFontAutoSizeLabels) for handling text that must fit a fixed container. We will hit this with: NPC name labels, item names in grids, clothing/hair button labels, dialogue boxes, any server-generated text rendered in fixed UI elements. Adopt the pattern early (either this plugin or our own implementation) before overflow bugs accumulate.','backlog','low',NULL,'client',NULL,'2026-03-23 17:42:32','2026-06-12 10:23:03',NULL,'951b59ccff83e6b34252e3a5b4d750b5',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYS8J5T5CV3EKNPJMR','task','06FB0TNSRXX29H5X0EB0F0GBW4','Adopt auto-sizing label pattern for dynamic text','Evaluate GodotFontAutoSizeLabels (https://github.com/LuisEscorza/GodotFontAutoSizeLabels) for handling text that must fit a fixed container. We will hit this with: NPC name labels, item names in grids, clothing/hair button labels, dialogue boxes, any server-generated text rendered in fixed UI elements. Adopt the pattern early (either this plugin or our own implementation) before overflow bugs accumulate.
ParkedunderPhase5epicpercascaderefocus2026-06-12;adoptthepatternwhengameplayUIsurfacesarebuilt.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2317:42:32', '2026-06-1210:23:03', NULL, 'a0fb59fc7e5fb140cc7377d2b3d0f8cd', 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);
INSERTINTOtickets(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('06FB0TNSRXJ3WZ2AQMWBNB4D2W','task','06FB0TNSRXX29H5X0EB0F0GBW4','Install Godot Icons Fonts addon for UI development','Godot Icons Fonts (https://github.com/rakugoteam/Godot-Icons-Fonts) — searchable icon font library (FontAwesome, Material Icons, etc.) directly in the Godot editor. MIT. Saves time hunting for individual icon assets during UI development. Install from asset library. Use for: HUD icons, status indicators, navigation symbols, button icons, inventory categories.','backlog','low',NULL,'client',NULL,'2026-03-23 18:19:22','2026-06-12 10:23:03',NULL,'52acb96e3d678b612814b021d7f2a1a8',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXJ3WZ2AQMWBNB4D2W','task','06FB0TNSRXX29H5X0EB0F0GBW4','Install Godot Icons Fonts addon for UI development','Godot Icons Fonts (https://github.com/rakugoteam/Godot-Icons-Fonts) — searchable icon font library (FontAwesome, Material Icons, etc.) directly in the Godot editor. MIT. Saves time hunting for individual icon assets during UI development. Install from asset library. Use for: HUD icons, status indicators, navigation symbols, button icons, inventory categories.
ParkedunderPhase5epicpercascaderefocus2026-06-12;installwhenHUD/gameplayUIdevelopmentresumes.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2318:19:22', '2026-06-1210:23:03', NULL, '3b8b8c17b1d6894cfc7f2551109d4682', 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);
INSERTINTOtickets(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('06FB0TNSRYKBBN824V9KB9NEN0','task','06FB0TNSRXX29H5X0EB0F0GBW4','Add resolution parameter to screenshot test config','Extend the character creator screenshot test config JSON with a resolution field. The system sets viewport size before capturing, enabling automated visual regression across common resolutions (1080p, 1440p, 4K, ultrawide, Steam Deck 800p). Batch script iterates the manifest body types × resolutions for full coverage. No plugin needed — just OS.window_size or viewport size override. Inspired by Project Resolution plugin (https://github.com/Danim3D/Godot-4-Plugin-Project-Resolution) but built into our existing test infrastructure.','backlog','medium',NULL,'client',NULL,'2026-03-23 18:27:51','2026-06-12 10:23:03',NULL,'aecb1b1d6a5491ce4705a0ec2454d853',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYKBBN824V9KB9NEN0','task','06FB0TNSRXX29H5X0EB0F0GBW4','Add resolution parameter to screenshot test config','Extend the character creator screenshot test config JSON with a resolution field. The system sets viewport size before capturing, enabling automated visual regression across common resolutions (1080p, 1440p, 4K, ultrawide, Steam Deck 800p). Batch script iterates the manifest body types × resolutions for full coverage. No plugin needed — just OS.window_size or viewport size override. Inspired by Project Resolution plugin (https://github.com/Danim3D/Godot-4-Plugin-Project-Resolution) but built into our existing test infrastructure.
ParkedunderPhase5epicpercascaderefocus2026-06-12;functionalrequirement(multi-resolutionvisualregression)preserved—resumeswithcharacterrenderingwork.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-2318:27:51', '2026-06-1210:23:03', NULL, 'e8f991a475031b43cd083b4a1b1c995a', 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);
INSERTINTOtickets(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('06FB0TNSRZGD6VYZM7BT6PC5WM','task','06FBPPMMF7HS6FWRYAKMECTXX0','First-launch install wizard for distribution','Evaluate Godot4xInstallWizard (https://github.com/untamedlabs/Godot4xInstallWizard) for first-launch experience: EULA acceptance, initial settings (resolution, audio, controls), install path selection. Needed when packaging for Steam or standalone distribution. Low priority until release preparation begins.','backlog','low',NULL,'client',NULL,'2026-03-23 18:31:35','2026-06-12 10:23:03',NULL,'04bc75bb1b687c91751a9d7292536a12',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZGD6VYZM7BT6PC5WM','task','06FBPPMMF7HS6FWRYAKMECTXX0','First-launch install wizard for distribution','Evaluate Godot4xInstallWizard (https://github.com/untamedlabs/Godot4xInstallWizard) for first-launch experience: EULA acceptance, initial settings (resolution, audio, controls), install path selection. Needed when packaging for Steam or standalone distribution. Low priority until release preparation begins.
Parkedunderpost-cascadegameplay/releasebacklogpercascaderefocus2026-06-12;functionalrequirementpreservedforreleasepreparation.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2318:31:35', '2026-06-1210:23:03', NULL, 'fbaf3da1d89d8b99e87bcf7f3a44fc55', 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);
INSERTINTOtickets(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('06FB0TNSRXBTTPTBFJN0DGX2YC','task','06FBPPMMF7HS6FWRYAKMECTXX0','License and attribution screen in settings menu','Add a licenses/credits screen accessible from the main menu settings. Must display all third-party licenses: Quaternius (CC0), Godot engine, any adopted plugins (MIT), font licenses, audio assets. Pattern reference: godot-licensing (https://github.com/nathanfranke/godot-licensing) — auto-collects license info. We don''t need the plugin but need the pattern: scan for LICENSE files, Godot''s built-in Engine.get_license_info(), and our own attribution list. Legal requirement for distribution.','backlog','medium',NULL,'client',NULL,'2026-03-23 18:33:04','2026-06-12 10:23:03',NULL,'2bd2d6790d3004cb8f03393af5ddaf99',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXBTTPTBFJN0DGX2YC','task','06FBPPMMF7HS6FWRYAKMECTXX0','License and attribution screen in settings menu','Add a licenses/credits screen accessible from the main menu settings. Must display all third-party licenses: Quaternius (CC0), Godot engine, any adopted plugins (MIT), font licenses, audio assets. Pattern reference: godot-licensing (https://github.com/nathanfranke/godot-licensing) — auto-collects license info. We don''t need the plugin but need the pattern: scan for LICENSE files, Godot''s built-in Engine.get_license_info(), and our own attribution list. Legal requirement for distribution.
Parkedunderpost-cascadegameplay/releasebacklogpercascaderefocus2026-06-12;legalattributionrequirementpreservedforreleasepreparation.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-2318:33:04', '2026-06-1210:23:03', NULL, '3206a8cd8f6a79b0ce11f22da0e96e4d', 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);
INSERTINTOtickets(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('06FB0TNSRY35YGQ1PGBXE4B7KM','task','06FBPPMMF7HS6FWRYAKMECTXX0','Konami code easter egg','Up up down down left right left right B A. Because reasons. https://github.com/aravikusu/konamicode — reference implementation. Trigger: unlock debug panel in release builds, or something fun.','backlog','low',NULL,'client',NULL,'2026-03-23 18:38:37','2026-06-12 10:23:04',NULL,'f0543594e7aa617efff4d564ca41e7cc',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY35YGQ1PGBXE4B7KM','task','06FBPPMMF7HS6FWRYAKMECTXX0','Konami code easter egg','Up up down down left right left right B A. Because reasons. https://github.com/aravikusu/konamicode — reference implementation. Trigger: unlock debug panel in release builds, or something fun.
Parkedunderpost-cascadegameplaybacklogpercascaderefocus2026-06-12;preserved,notcancelled.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2318:38:37', '2026-06-1210:23:04', NULL, 'fd91252b7ed5cbd0204a4d9b1cfa0a1e', 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);
INSERTINTOtickets(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('06FB0TNSRWJAKQQ33BNCFZGV3W','task','06FB0TNSRXX29H5X0EB0F0GBW4','Minimap rendering from server exploration data','The minimap needs to render from server-sent exploration and visibility data. No existing Godot minimap plugin fits because our information boundary is server-authoritative. Architecture: server sends explored tile states (unexplored/explored/visible) as part of ObserverSnapshot. Client renders a top-down 2D minimap from this data — fog for unexplored, dim for explored-not-visible, lit for currently visible. Player position centered. Needs a dedicated data stream or section in the snapshot for minimap tile states. Reference: the existing 2D fog_state.gd has the rendering patterns (texture from tile data), but the 3D minimap may use a separate overhead Camera3D in a SubViewport instead.','backlog','medium',NULL,'client',NULL,'2026-03-23 18:48:16','2026-06-12 10:23:04',NULL,'03a0cee44b63f54f36f1298d30b696d2',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWJAKQQ33BNCFZGV3W','task','06FB0TNSRXX29H5X0EB0F0GBW4','Minimap rendering from server exploration data','The minimap needs to render from server-sent exploration and visibility data. No existing Godot minimap plugin fits because our information boundary is server-authoritative. Architecture: server sends explored tile states (unexplored/explored/visible) as part of ObserverSnapshot. Client renders a top-down 2D minimap from this data — fog for unexplored, dim for explored-not-visible, lit for currently visible. Player position centered. Needs a dedicated data stream or section in the snapshot for minimap tile states. Reference: the existing 2D fog_state.gd has the rendering patterns (texture from tile data), but the 3D minimap may use a separate overhead Camera3D in a SubViewport instead.
ParkedunderPhase5epicpercascaderefocus2026-06-12;server-authoritativeminimaprequirementpreserved—resumeswithplayerrendering.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-2318:48:16', '2026-06-1210:23:04', NULL, 'f4e0d43c19fa89cdf89e91357498bfe5', 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);
INSERTINTOtickets(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('06FB0TNSRXGNK7WHD9DEGPY4BC','task','06FB0TNSRXX29H5X0EB0F0GBW4','Nested tooltip system for information layering','Implement nested/recursive tooltips for the information-dense UI. Reference: Nested-Tooltips (https://github.com/duzychri/Nested-Tooltips). Pattern: hover over text → tooltip appears → hover over a keyword in the tooltip → nested tooltip explains that keyword. Use cases: NPC names (→ disposition, role), items (→ stats → stat modifier explanations), zone names (→ zone type, danger level), factions (→ relationship, territory). This is core to the asymmetric information design — tooltips reveal what your character KNOWS, with depth proportional to familiarity. Study the plugin for the recursive hover detection pattern, implement with our diegetic UI aesthetic.','backlog','medium',NULL,'client',NULL,'2026-03-23 18:49:04','2026-06-12 10:23:04',NULL,'d003693816cfa6ceb1c8f4f3332da2dc',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXGNK7WHD9DEGPY4BC','task','06FB0TNSRXX29H5X0EB0F0GBW4','Nested tooltip system for information layering','Implement nested/recursive tooltips for the information-dense UI. Reference: Nested-Tooltips (https://github.com/duzychri/Nested-Tooltips). Pattern: hover over text → tooltip appears → hover over a keyword in the tooltip → nested tooltip explains that keyword. Use cases: NPC names (→ disposition, role), items (→ stats → stat modifier explanations), zone names (→ zone type, danger level), factions (→ relationship, territory). This is core to the asymmetric information design — tooltips reveal what your character KNOWS, with depth proportional to familiarity. Study the plugin for the recursive hover detection pattern, implement with our diegetic UI aesthetic.
ParkedunderPhase5epicpercascaderefocus2026-06-12;asymmetric-informationtooltiprequirementpreserved—resumeswithgameplayUIwork.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-2318:49:04', '2026-06-1210:23:04', NULL, 'c93be2af1a2358d4f53a341e64726ada', 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);
INSERTINTOtickets(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('06FB0TNSRXY24QTYKWPERE52X4','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Settings and input system — keybinds, save browser, cursors, controller','Unified design and implementation pass for player-facing settings and input: (a) Key binding remapper with save/load. (b) Save browser with thumbnails and metadata. (c) Context-sensitive cursors (examine, talk, use, attack, walk). (d) Controller/gamepad support with radial menus. Design all four together in Frame0 for visual consistency, then implement as a cohesive system. These share UI patterns (settings panels, modal dialogs, input feedback) and should not be built independently.','backlog','medium',NULL,'client',NULL,'2026-03-23 18:53:39','2026-06-12 10:23:04',NULL,'2d10d4586473fd67b035a7cb57d2ec47',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXY24QTYKWPERE52X4','epic','06FB0TNSRXX29H5X0EB0F0GBW4','Settings and input system — keybinds, save browser, cursors, controller','Unified design and implementation pass for player-facing settings and input: (a) Key binding remapper with save/load. (b) Save browser with thumbnails and metadata. (c) Context-sensitive cursors (examine, talk, use, attack, walk). (d) Controller/gamepad support with radial menus. Design all four together in Frame0 for visual consistency, then implement as a cohesive system. These share UI patterns (settings panels, modal dialogs, input feedback) and should not be built independently.
ParkedunderPhase5epicpercascaderefocus2026-06-12;unifiedsettings/inputdesignrequirementpreserved—resumeswithplayercontrolwork.', 'backlog', 'medium', NULL, 'client', NULL, '2026-03-2318:53:39', '2026-06-1210:23:04', NULL, 'c441081d01ef7302c48f6dc9a4c53e10', 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);
INSERTINTOtickets(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('06FB0TNSRZ3GAN6QKTNJWVKPDG','task','06FB0TNSRZXCHGS16BFHSSGSV4','Install Poly Haven downloader addon','Godot Poly Haven Downloader (https://github.com/P3ntest/godot-polyhaven-downloader) — browse and download CC0 models, textures, and HDRIs from Poly Haven directly in the Godot editor. Removes friction from asset sourcing. Install when environment art work begins.','backlog','low',NULL,'client',NULL,'2026-03-23 19:08:40','2026-06-12 10:23:04',NULL,'9fef3041737e4c15b600a0df2f7864a8',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ3GAN6QKTNJWVKPDG','task','06FB0TNSRZXCHGS16BFHSSGSV4','Install Poly Haven downloader addon','Godot Poly Haven Downloader (https://github.com/P3ntest/godot-polyhaven-downloader) — browse and download CC0 models, textures, and HDRIs from Poly Haven directly in the Godot editor. Removes friction from asset sourcing. Install when environment art work begins.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—asset-pipelinetoolingfeedingthePhase-4assetcatalog.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2319:08:40', '2026-06-1210:23:04', NULL, '0f2d6e36be6c2e3968f73d9ae2fb74c2', 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);
INSERTINTOtickets(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('06FB0TNSRY9W1MWNKMS803195C','task','06FB0TNSRXX29H5X0EB0F0GBW4','Selection glow effect for interactable objects','Soft glow border on hovered/selected objects and characters. Reference: GlowBorderEffect (https://github.com/Magodra/GlowBorderEffect). Distinct from our inverted hull outline (permanent character silhouette) — this is a context-sensitive highlight: hover over an NPC to see a soft glow indicating they''re interactable, selected items glow in inventory, quest-relevant objects pulse. Could be a simple shader (stencil + blur) or adopt the plugin. Evaluate when interaction system is built.','backlog','low',NULL,'client',NULL,'2026-03-23 19:28:45','2026-06-12 10:23:04',NULL,'db589d42de20c93bfcbc22167c0b2a84',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY9W1MWNKMS803195C','task','06FB0TNSRXX29H5X0EB0F0GBW4','Selection glow effect for interactable objects','Soft glow border on hovered/selected objects and characters. Reference: GlowBorderEffect (https://github.com/Magodra/GlowBorderEffect). Distinct from our inverted hull outline (permanent character silhouette) — this is a context-sensitive highlight: hover over an NPC to see a soft glow indicating they''re interactable, selected items glow in inventory, quest-relevant objects pulse. Could be a simple shader (stencil + blur) or adopt the plugin. Evaluate when interaction system is built.
ParkedunderPhase5epicpercascaderefocus2026-06-12;interactable-highlightrequirementpreserved—evaluatewhentheinteractionsystemisbuilt.', 'backlog', 'low', NULL, 'client', NULL, '2026-03-2319:28:45', '2026-06-1210:23:04', NULL, 'bbfcec7a05f37c80dd18da9bb9678323', 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);
INSERTINTOtickets(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('06FB0TNSRWKAS60B0F9E8QHZ10','task','06FB0TNSRXX29H5X0EB0F0GBW4','feat(ui): status/buff icon bar docked to HUD panel','Replace standalone stance indicator with an icon bar docked to the HUD status panel. Shows active states as small icons: stance (walk/sprint/crouch/careful), perception mode, future buffs/debuffs, implant status. Each icon color-coded per existing stance colors. Tooltip on hover shows label. Bar sits above or beside the HUD status ImplantPanel. Requires: icon set design (Araminta), bar layout component (ImplantIconBar), stance indicator refactored from panel to icon.','backlog','medium',NULL,'client',NULL,'2026-04-05 10:28:05','2026-06-12 10:23:04',NULL,'d6afefbdecde3653f5a359b8686cd2b2',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWKAS60B0F9E8QHZ10','task','06FB0TNSRXX29H5X0EB0F0GBW4','feat(ui): status/buff icon bar docked to HUD panel','Replace standalone stance indicator with an icon bar docked to the HUD status panel. Shows active states as small icons: stance (walk/sprint/crouch/careful), perception mode, future buffs/debuffs, implant status. Each icon color-coded per existing stance colors. Tooltip on hover shows label. Bar sits above or beside the HUD status ImplantPanel. Requires: icon set design (Araminta), bar layout component (ImplantIconBar), stance indicator refactored from panel to icon.
ParkedunderPhase5epicpercascaderefocus2026-06-12;HUDstatus-iconrequirementpreserved—resumeswithgameplayUIwork.', 'backlog', 'medium', NULL, 'client', NULL, '2026-04-0510:28:05', '2026-06-1210:23:04', NULL, '7ad8abce59fdb438744317556b2f1ada', 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);
INSERTINTOtickets(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('06FB0TNSRXZSXNPA5Q55JN5K54','task','06FB0TNSRXX29H5X0EB0F0GBW4','Keybind document and settings keybind mapper','Two deliverables: (1) A keybind reference document listing all current key bindings (InputMap actions + hardcoded _unhandled_key_input keys like M/J/N/[/]). (2) A keybind mapper in the settings dialog that lets the player rebind keys at runtime. Triggered by Sprint 34 E-key conflict where economics panel was bound to a key already used by InputMap interact action.','backlog','medium',NULL,'client',NULL,'2026-04-10 20:20:28','2026-06-12 10:23:04',NULL,'e64fbf417a5835eb33b3cc3226915fa6',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXZSXNPA5Q55JN5K54','task','06FB0TNSRXX29H5X0EB0F0GBW4','Keybind document and settings keybind mapper','Two deliverables: (1) A keybind reference document listing all current key bindings (InputMap actions + hardcoded _unhandled_key_input keys like M/J/N/[/]). (2) A keybind mapper in the settings dialog that lets the player rebind keys at runtime. Triggered by Sprint 34 E-key conflict where economics panel was bound to a key already used by InputMap interact action.
ParkedunderPhase5epicpercascaderefocus2026-06-12;keybinddocumentationandremappingrequirementpreserved—pairswithT-735.', 'backlog', 'medium', NULL, 'client', NULL, '2026-04-1020:20:28', '2026-06-1210:23:04', NULL, 'fd783602a1e24f812acedefa8700c5c1', 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);
INSERTINTOtickets(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('06FB0TNSRXMTJBWMXJBANMD6C4','task','06FB0TNSRZXCHGS16BFHSSGSV4','Unit tests for generate-star-map-data.py helpers','Review follow-up from PR #128 (Hoshe #17). Add unit-test coverage for compute_gdp, infer_tier_from_population, build_adjacency, parse_wiki_index in tooling/generate-star-map-data.py. Explicit boundary-condition test worth adding: compute_gdp at exactly 1T Tr (the BTr → TTr format switch). Non-blocker on the atlas landing PR but the generator is now on the pre-pr-client path, so it earns the regression coverage.','backlog','low',NULL,'client',NULL,'2026-04-15 07:06:33','2026-06-12 10:23:04',NULL,'5b18f343adaed70a977c125c84a993c1',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXMTJBWMXJBANMD6C4','task','06FB0TNSRZXCHGS16BFHSSGSV4','Unit tests for generate-star-map-data.py helpers','Review follow-up from PR #128 (Hoshe #17). Add unit-test coverage for compute_gdp, infer_tier_from_population, build_adjacency, parse_wiki_index in tooling/generate-star-map-data.py. Explicit boundary-condition test worth adding: compute_gdp at exactly 1T Tr (the BTr → TTr format switch). Non-blocker on the atlas landing PR but the generator is now on the pre-pr-client path, so it earns the regression coverage.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—generation-toolingtestcoverage(atlasstar-mapgenerator).', 'backlog', 'low', NULL, 'client', NULL, '2026-04-1507:06:33', '2026-06-1210:23:04', NULL, '4d9aeeb2e34f398dd75ff933247462d4', 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);
INSERTINTOtickets(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('06FB0TNSRZN95D8BBZ28Q92BQW','task','06FB0TNSRZXCHGS16BFHSSGSV4','Amend D-191 §8 markers schema to formalize overlay arrays','Review follow-up from PR #128 (blocker #3 fix). AtlasMarkerOverlay currently derives production_zones / shadow_economy / corp_presence from cities[].primary_function and cities[].commission_presence because D-191 §8''s schema (cities, roads, railroads, pois, rivers, oceans, mountain_ranges) has no dedicated arrays for production zones, shadow bands, or per-corp dots. Options: (a) amend D-191 §8 to list these explicitly and update the server generator, or (b) keep deriving from cities forever. Work with server team to pick and land the schema change so the MVP overlays read first-class data.','backlog','low',NULL,'client',NULL,'2026-04-15 07:06:42','2026-06-12 10:23:04',NULL,'3a94a8f8f9e6e9d269467cad79f5666d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZN95D8BBZ28Q92BQW','task','06FB0TNSRZXCHGS16BFHSSGSV4','Amend D-191 §8 markers schema to formalize overlay arrays','Review follow-up from PR #128 (blocker #3 fix). AtlasMarkerOverlay currently derives production_zones / shadow_economy / corp_presence from cities[].primary_function and cities[].commission_presence because D-191 §8''s schema (cities, roads, railroads, pois, rivers, oceans, mountain_ranges) has no dedicated arrays for production zones, shadow bands, or per-corp dots. Options: (a) amend D-191 §8 to list these explicitly and update the server generator, or (b) keep deriving from cities forever. Work with server team to pick and land the schema change so the MVP overlays read first-class data.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—atlasmarkersschemaisgeneration-outputdata.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-1507:06:42', '2026-06-1210:23:04', NULL, 'ea39b95f484e0cd5115a261b64df9193', 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);
INSERTINTOtickets(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('06FB0TNSRX6RK3GGV1A1TWQSMC','task','06FBPPMZNNEV052DBYYY3A897C','sr-voice release binary: multi-backend build (ROCm + CUDA + Vulkan + CPU)','The game will ship on multiple GPU vendors. The current sr-voice Cargo.toml has optional feature flags for metal / vulkan / cuda / rocm but default = [] — which means `cargo build --release` produces a CPU-only binary. Release binaries need to cover at minimum:
-NVIDIA:--features cuda (Windows, Linux gaming rigs)
-AMD:--features rocm (Linux) or vulkan (Windows, macOS, broader)
Alsoneeds:releasebuildpipeline(CI/cross-compilation)foreachtargetplatform,devpackageinstallationinstructionsforeachbackend(e.g.ROCmrocm-hip-develonFedoraisrequiredfor--features rocm to build), runtime hardware detection in the game launcher to pick the right binary.
Filedduringthe#833namingpipelinework—theROCmrebuildonthedevmachinesurfacedthatthecurrentMakefiletarget`build-sr-voice`producesCPU-onlybinariesregardlessofthehardwarepresent,whichisfineforthedev''s#833batchbutabsolutelywrongforshippedreleasebinaries.Parentwork:D-138(Gemma2voicepipeline).', 'backlog', 'medium', NULL, 'server', NULL, '2026-04-1510:57:11', '2026-06-1210:23:04', NULL, 'ffdbfda98db560272286a4557f559773', 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);
INSERTINTOtickets(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('06FB0TNSRX6RK3GGV1A1TWQSMC','task','06FBPPMZNNEV052DBYYY3A897C','sr-voice release binary: multi-backend build (ROCm + CUDA + Vulkan + CPU)','The game will ship on multiple GPU vendors. The current sr-voice Cargo.toml has optional feature flags for metal / vulkan / cuda / rocm but default = [] — which means `cargo build --release` produces a CPU-only binary. Release binaries need to cover at minimum:
-NVIDIA:--features cuda (Windows, Linux gaming rigs)
-AMD:--features rocm (Linux) or vulkan (Windows, macOS, broader)
Alsoneeds:releasebuildpipeline(CI/cross-compilation)foreachtargetplatform,devpackageinstallationinstructionsforeachbackend(e.g.ROCmrocm-hip-develonFedoraisrequiredfor--features rocm to build), runtime hardware detection in the game launcher to pick the right binary.
Re-homedundermaintenancepercascaderefocus2026-06-12—build-pipelineinfrastructure;multi-GPUrelease-binaryrequirementpreserved.', 'backlog', 'medium', NULL, 'server', NULL, '2026-04-1510:57:11', '2026-06-1210:23:04', NULL, '57831b4b04fe0e4ea0177b5cf5215aca', 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);
INSERTINTOtickets(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('06FB0TNSRWBJ1XC9V5ZQHSXAXG','bug','06FBPPMZNNEV052DBYYY3A897C','Rewrite P2-U01 monologue_display_visible_hidden test against current _visible array API','test_monologue_display_visible_hidden in test_client_p2.gd accessed mono.is_visible (a custom bool property). MonologueDisplay was refactored to use _visible: Array[Dictionary] instead. Test skipped (skip_test_) pending rewrite. New test should check _visible.size() > 0 after show_monologue, and == 0 when idle.','backlog','low',NULL,'client',NULL,'2026-04-20 11:17:20','2026-06-12 10:23:04',NULL,'1ce2547723d3dd385d5843f331cfd5aa',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWBJ1XC9V5ZQHSXAXG','bug','06FBPPMZNNEV052DBYYY3A897C','Rewrite P2-U01 monologue_display_visible_hidden test against current _visible array API','test_monologue_display_visible_hidden in test_client_p2.gd accessed mono.is_visible (a custom bool property). MonologueDisplay was refactored to use _visible: Array[Dictionary] instead. Test skipped (skip_test_) pending rewrite. New test should check _visible.size() > 0 after show_monologue, and == 0 when idle.
Re-homedundermaintenance(testdebt)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2011:17:20', '2026-06-1210:23:04', NULL, '02af47396ed1d708fa5d50b13a0e6fb9', 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);
INSERTINTOtickets(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('06FB0TNSRZGSKN39GSW39JNZDG','task','06FBPPMZNNEV052DBYYY3A897C','Revive journal panel tests (player_knowledge, UIStrings, state colors)','test_journal_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: GameState.player_knowledge snapshot parsing/persistence, journal_panel.tscn scene lifecycle, entry rendering from player_knowledge entities, UIStrings confidence/source keys (D-042), _state_color() for Contradicted/Stale/Active states. No other journal-specific test file exists. Spec: D-041, D-042, #264.','backlog','low',NULL,'client',NULL,'2026-04-21 15:01:17','2026-06-12 10:23:04',NULL,'acafbf18f2a8fd4ef0b5ea666b394e4d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZGSKN39GSW39JNZDG','task','06FBPPMZNNEV052DBYYY3A897C','Revive journal panel tests (player_knowledge, UIStrings, state colors)','test_journal_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: GameState.player_knowledge snapshot parsing/persistence, journal_panel.tscn scene lifecycle, entry rendering from player_knowledge entities, UIStrings confidence/source keys (D-042), _state_color() for Contradicted/Stale/Active states. No other journal-specific test file exists. Spec: D-041, D-042, #264.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2115:01:17', '2026-06-1210:23:04', NULL, 'e1cb97d054ae2bbec781509018e0e5b3', 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);
INSERTINTOtickets(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('06FB0TNSRYDPBFJVAQAN7T56VR','task','06FBPPMZNNEV052DBYYY3A897C','Revive minimap rendering tests (discovered POIs, circular overlay, insert visibility)','test_minimap_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: minimap.tscn scene, POI rendering from GameState.discovered_pois, circular insert overlay visibility, insert_active toggle behavior. No other minimap test file exists. Spec: D-013, D-015, D-049, #151.','backlog','low',NULL,'client',NULL,'2026-04-21 15:01:23','2026-06-12 10:23:04',NULL,'15593bb56dde167057a4695811dee09c',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYDPBFJVAQAN7T56VR','task','06FBPPMZNNEV052DBYYY3A897C','Revive minimap rendering tests (discovered POIs, circular overlay, insert visibility)','test_minimap_sprint18.gd was deleted in Sprint 37 (#870 parse-error cleanup). It contained unique tests for: minimap.tscn scene, POI rendering from GameState.discovered_pois, circular insert overlay visibility, insert_active toggle behavior. No other minimap test file exists. Spec: D-013, D-015, D-049, #151.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2115:01:23', '2026-06-1210:23:04', NULL, '7d0fe65f85fc02c4eac924fd91e2d0ad', 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);
INSERTINTOtickets(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('06FB0TNSRWYRBKFQ1W3S8DS21W','task','06FBPPMZNNEV052DBYYY3A897C','Revive EntityRenderer sprite constants coverage (D-044 ENTITY_WIDTH/HEIGHT)','test_sprite_integration.gd was deleted in Sprint 37 (#870 parse-error cleanup). It was the sole asserter of D-044 sprite dimensions: EntityRenderer.ENTITY_WIDTH == 24 and ENTITY_HEIGHT == 32 (client/scripts/rendering/entity_renderer.gd:19-20). These values are load-bearing for tile-anchored y-sort (ENTITY_OFFSET_Y = TILE_SIZE - ENTITY_HEIGHT, line 22, D-019 tilt). Revive a focused test that asserts both constants and the derived offset — rewrite against current EntityRenderer API. Surfaced in PR #135 review (Tyre T2). Spec: D-044, D-019, D-049.','backlog','low',NULL,'client',NULL,'2026-04-22 07:56:26','2026-06-12 10:23:04',NULL,'eac19435ce3c097daa1b470c1ce56edb',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWYRBKFQ1W3S8DS21W','task','06FBPPMZNNEV052DBYYY3A897C','Revive EntityRenderer sprite constants coverage (D-044 ENTITY_WIDTH/HEIGHT)','test_sprite_integration.gd was deleted in Sprint 37 (#870 parse-error cleanup). It was the sole asserter of D-044 sprite dimensions: EntityRenderer.ENTITY_WIDTH == 24 and ENTITY_HEIGHT == 32 (client/scripts/rendering/entity_renderer.gd:19-20). These values are load-bearing for tile-anchored y-sort (ENTITY_OFFSET_Y = TILE_SIZE - ENTITY_HEIGHT, line 22, D-019 tilt). Revive a focused test that asserts both constants and the derived offset — rewrite against current EntityRenderer API. Surfaced in PR #135 review (Tyre T2). Spec: D-044, D-019, D-049.
Re-homedundermaintenance(test-revivaldebtfrom#870deletions)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2207:56:26', '2026-06-1210:23:04', NULL, '00b2a12967d051a228c42a3acb114654', 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);
INSERTINTOtickets(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('06FB0TNSRY05Z5JJRN1ND5ZFGC','story','06FBPPMMF7HS6FWRYAKMECTXX0','UI timeout fallback for bookmark catalog wait (main_menu)','main_menu.gd:72-74 _process loop polls SimBridge.poll_snapshot while _waiting_for_catalog is true. If the server never delivers bookmark_catalog (crash, new-server bug, decode dropout), the loading screen hangs forever. #872 patched the specific TCP-batch race where catalog was overwritten in receive_bytes, but the systemic class — ''catalog never arrives'' — remains.
Spec:#872(TCP-batchracefix),#258(mainmenuflow).', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2207:56:41', '2026-06-1210:23:04', NULL, '9514a83e929bc2a6cf73028fcc706250', 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);
INSERTINTOtickets(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('06FB0TNSRY05Z5JJRN1ND5ZFGC','story','06FBPPMMF7HS6FWRYAKMECTXX0','UI timeout fallback for bookmark catalog wait (main_menu)','main_menu.gd:72-74 _process loop polls SimBridge.poll_snapshot while _waiting_for_catalog is true. If the server never delivers bookmark_catalog (crash, new-server bug, decode dropout), the loading screen hangs forever. #872 patched the specific TCP-batch race where catalog was overwritten in receive_bytes, but the systemic class — ''catalog never arrives'' — remains.
Parkedunderpost-cascadegameplaybacklogpercascaderefocus2026-06-12;loading-timeoutrobustnessrequirementpreservedwiththebookmarkflow.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2207:56:41', '2026-06-1210:23:04', NULL, 'dcbf33e897de752ca35ad3bd4268f24c', 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);
INSERTINTOtickets(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('06FB0TNSRXT5QXNT1QST51NKZR','story','06FBPPMZNNEV052DBYYY3A897C','Scene-flow test tier: doc + encapsulated reset helpers','Scene-level UI flow tests landed as a 4th tier beyond the 3 in CLAUDE.md (live Gauntlet / MessagePack replay / TestHarness mock). test_merge_path_flows_sprint37.gd is the first concrete example. Two rough edges surfaced in PR #135 review (Tyre T5, T6):
Spec:#873(merge-pathtests),D-020(IPCarchitecture—testharnesslayer).', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2207:57:10', '2026-06-1210:23:05', NULL, 'b110da7b2a0d1b36136af9cc78f128f0', 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);
INSERTINTOtickets(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('06FB0TNSRXT5QXNT1QST51NKZR','story','06FBPPMZNNEV052DBYYY3A897C','Scene-flow test tier: doc + encapsulated reset helpers','Scene-level UI flow tests landed as a 4th tier beyond the 3 in CLAUDE.md (live Gauntlet / MessagePack replay / TestHarness mock). test_merge_path_flows_sprint37.gd is the first concrete example. Two rough edges surfaced in PR #135 review (Tyre T5, T6):
Re-homedundermaintenance(test-infrahygiene)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-04-2207:57:10', '2026-06-1210:23:05', NULL, '910cc3678b98f58ce2fd10287c3bf8eb', 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);
INSERTINTOtickets(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('06FB0TNSRW77B3T7GXT6ZASX88','task','06FBPPMZNNEV052DBYYY3A897C','CLAUDE.md carveout for server wiki writes driven by coverage gates','**Follow-up to PR #137 / Hoshe review H8.**
PR#137includes21fileeditsunder`wiki/`authoredbytheserverteam(6newcorpwikipages+15tagupdates,shippedunder#860—"Close D-175 Phase 2 coverage gate").`CLAUDE.md`team-boundariespolicysays:*"Stay within your team''s scope. Server team modifies `server/`. Copy team modifies `wiki/`."*Thewikiwriteswereacceptedforthissprintasapragmaticfix(andcopy-teamfollow-upreviewfiledas#884),butHoshecorrectlyflaggedtheprecedentconcern:
>"If cross-scope writes are structurally necessary for coverage gates, process should note this explicitly rather than route as a copy-team follow-up after merge."
**Cross-reference:**PR#137,#860(D-175Phase2coveragegate),#884(copy-teamvoice/lorereviewofthewikiwrites),`CLAUDE.md`"Agent Instructions → Team boundaries"section.
**Rationale:**Theboundaryexiststokeepvoice/loreauthoringincopy-teamhandsandpreventdrift.Coveragegatescreatelegitimatecross-scopewritesthataren''tauthoring.Theboundaryshouldaccommodatethisorprovideanalternativethatkeepstheboundaryclean.', 'backlog', 'low', NULL, 'planning', NULL, '2026-04-2208:00:12', '2026-06-1210:23:05', NULL, 'e9d64f2cc8b6ebcb29abdf0b569e9979', 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);
INSERTINTOtickets(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('06FB0TNSRW77B3T7GXT6ZASX88','task','06FBPPMZNNEV052DBYYY3A897C','CLAUDE.md carveout for server wiki writes driven by coverage gates','**Follow-up to PR #137 / Hoshe review H8.**
PR#137includes21fileeditsunder`wiki/`authoredbytheserverteam(6newcorpwikipages+15tagupdates,shippedunder#860—"Close D-175 Phase 2 coverage gate").`CLAUDE.md`team-boundariespolicysays:*"Stay within your team''s scope. Server team modifies `server/`. Copy team modifies `wiki/`."*Thewikiwriteswereacceptedforthissprintasapragmaticfix(andcopy-teamfollow-upreviewfiledas#884),butHoshecorrectlyflaggedtheprecedentconcern:
>"If cross-scope writes are structurally necessary for coverage gates, process should note this explicitly rather than route as a copy-team follow-up after merge."
**Cross-reference:**PR#137,#860(D-175Phase2coveragegate),#884(copy-teamvoice/lorereviewofthewikiwrites),`CLAUDE.md`"Agent Instructions → Team boundaries"section.
Re-homedundermaintenance(process/docshygiene)percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'planning', NULL, '2026-04-2208:00:12', '2026-06-1210:23:05', NULL, 'e4b38eace7ca5713b74b8e4206e6637a', 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);
INSERTINTOtickets(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('06FB0TNSRZBH1C2R0DXM00C66R','task','06FBPPMMF7HS6FWRYAKMECTXX0','D-027 criterion 4: Layer 2/3 E2E test for RoutineDeviation tell after triangle activation','v01_integration_playthrough.rs was deleted in #878 as archetype-dependent. Its only non-archetype coverage — D-027 criterion 4 (RoutineDeviation tell after triangle activation) — was already #[ignore]-blocked on #589 (escalate_tells_on_activation). Layer 1 tell priority is covered by tell_escalation.rs. This ticket tracks the missing Layer 2 ECS-world test: activation event → RoutineDeviation insertion, and (optionally) a Layer 3 subprocess proof once #589 lands. Non-blocking for sprint 37 merge.','backlog','low',NULL,'server',NULL,'2026-04-22 08:06:52','2026-06-12 10:23:05',NULL,'35fe3775c85a044230ef004c5c3ad68d',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZBH1C2R0DXM00C66R','task','06FBPPMMF7HS6FWRYAKMECTXX0','D-027 criterion 4: Layer 2/3 E2E test for RoutineDeviation tell after triangle activation','v01_integration_playthrough.rs was deleted in #878 as archetype-dependent. Its only non-archetype coverage — D-027 criterion 4 (RoutineDeviation tell after triangle activation) — was already #[ignore]-blocked on #589 (escalate_tells_on_activation). Layer 1 tell priority is covered by tell_escalation.rs. This ticket tracks the missing Layer 2 ECS-world test: activation event → RoutineDeviation insertion, and (optionally) a Layer 3 subprocess proof once #589 lands. Non-blocking for sprint 37 merge.
Parkedunderpost-cascadegameplaybacklogpercascaderefocus2026-06-12;D-027criterion-4coveragerequirementpreserved—picksupwhentellescalation(#589)lands.', 'backlog', 'low', NULL, 'server', NULL, '2026-04-2208:06:52', '2026-06-1210:23:05', NULL, '818c1064298b607a49a4c1b81c8bc13c', 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);
INSERTINTOtickets(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('06FB0TNSRXN360AQN3973AHS8M','bug','06FBPPMZNNEV052DBYYY3A897C','test_dialogue_sprint20: 5 failures — AudioManager.get_active_dip or other API drift','5 failing test cases in test_dialogue_sprint20.gd. The suite tests D-020 signal decoupling for dialogue_box. Likely failure: test_show_dialogue_does_not_call_audio_manager_directly compares AudioManager.get_active_dip() before/after show_dialogue — if AudioManager.get_active_dip() behavior changed or is not returning clean state, this would fail. Investigate by running the suite in isolation and reading specific assertion failures from the log. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:11:54','2026-06-12 10:23:05',NULL,'e148dfda5fd7150e055f2b5bde931544',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXN360AQN3973AHS8M','bug','06FBPPMZNNEV052DBYYY3A897C','test_dialogue_sprint20: 5 failures — AudioManager.get_active_dip or other API drift','5 failing test cases in test_dialogue_sprint20.gd. The suite tests D-020 signal decoupling for dialogue_box. Likely failure: test_show_dialogue_does_not_call_audio_manager_directly compares AudioManager.get_active_dip() before/after show_dialogue — if AudioManager.get_active_dip() behavior changed or is not returning clean state, this would fail. Investigate by running the suite in isolation and reading specific assertion failures from the log. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:11:54', '2026-06-1210:23:05', NULL, '40788a6ba0cfe9aa73c10849ff2a77b2', 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);
INSERTINTOtickets(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('06FB0TNSRXMVYQJV2QDHH8H7P8','bug','06FBPPMZNNEV052DBYYY3A897C','test_input_roundtrip: 3 failures — server binary missing or LocalBridge API change','3 failing test cases in test_input_roundtrip.gd. All tests check _connect_to_server() which skips if server binary not found — but 3 still fail, suggesting either: (1) server binary is present but something in LocalBridge.send_message, poll, or Protocol.encode_player_inputs changed, or (2) test environment returns false from _connect_to_server but then asserts fail. Investigate by running with --filter test_input_roundtrip and checking the log for exact assertion sites. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:11:59','2026-06-12 10:23:05',NULL,'be5c5f0ba84eed9f4703b19bc8a01b3e',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXMVYQJV2QDHH8H7P8','bug','06FBPPMZNNEV052DBYYY3A897C','test_input_roundtrip: 3 failures — server binary missing or LocalBridge API change','3 failing test cases in test_input_roundtrip.gd. All tests check _connect_to_server() which skips if server binary not found — but 3 still fail, suggesting either: (1) server binary is present but something in LocalBridge.send_message, poll, or Protocol.encode_player_inputs changed, or (2) test environment returns false from _connect_to_server but then asserts fail. Investigate by running with --filter test_input_roundtrip and checking the log for exact assertion sites. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:11:59', '2026-06-1210:23:05', NULL, 'dfe49e914543e46781fb2f5b462cafad', 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);
INSERTINTOtickets(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('06FB0TNSRY3TXD5HDKHFVGDG18','bug','06FBPPMZNNEV052DBYYY3A897C','test_implant_app_lifecycle: 1 failure — ImplantApp or HudGroups state API','1 failing test case in test_implant_app_lifecycle.gd. Suite tests ImplantApp._internal_app_changed, nav stack, preserves_state, and HudGroups state. after_test resets HudGroups._active_app, _active_mode, _groups — if these private fields were renamed or removed, after_test would fail and bleed state. Or a specific on_open/on_close hook fires differently. Run --filter test_implant_app_lifecycle and check specific assertion. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:12:32','2026-06-12 10:23:05',NULL,'d4da304caced40c2c10675937368d0c0',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY3TXD5HDKHFVGDG18','bug','06FBPPMZNNEV052DBYYY3A897C','test_implant_app_lifecycle: 1 failure — ImplantApp or HudGroups state API','1 failing test case in test_implant_app_lifecycle.gd. Suite tests ImplantApp._internal_app_changed, nav stack, preserves_state, and HudGroups state. after_test resets HudGroups._active_app, _active_mode, _groups — if these private fields were renamed or removed, after_test would fail and bleed state. Or a specific on_open/on_close hook fires differently. Run --filter test_implant_app_lifecycle and check specific assertion. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:12:32', '2026-06-1210:23:05', NULL, 'b2dbffcf6181766c4d024b912ab6ee90', 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);
INSERTINTOtickets(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('06FB0TNSRWK87PCWGZ6GWT2TBM','bug','06FBPPMZNNEV052DBYYY3A897C','test_game_state_sprint20: 1 failure — SnapshotHandler or stationary_ticks path','1 failing test case in test_game_state_sprint20.gd. before_each resets SnapshotHandler._prev_player_position. If this static var was renamed or moved, the before_each hook would error. Alternatively a stationary_ticks path changed in SnapshotHandler. Verify SnapshotHandler still has static var _prev_player_position at that exact name. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:12:38','2026-06-12 10:23:05',NULL,'2689f06827000dc8c864d171238dbe69',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWK87PCWGZ6GWT2TBM','bug','06FBPPMZNNEV052DBYYY3A897C','test_game_state_sprint20: 1 failure — SnapshotHandler or stationary_ticks path','1 failing test case in test_game_state_sprint20.gd. before_each resets SnapshotHandler._prev_player_position. If this static var was renamed or moved, the before_each hook would error. Alternatively a stationary_ticks path changed in SnapshotHandler. Verify SnapshotHandler still has static var _prev_player_position at that exact name. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:12:38', '2026-06-1210:23:05', NULL, '993364218aebbbc6986cf535566b1990', 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);
INSERTINTOtickets(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('06FB0TNSRYF23MZ86S1XF1542G','bug','06FBPPMZNNEV052DBYYY3A897C','test_fog_shader: 1 failure — stale VIS_PERIPHERAL or peripheral sector assertion','1 failing test case in test_fog_shader.gd. The most likely failure is test_fog_state_forward_vs_peripheral: it asserts Forward > Peripheral visibility values, but Sprint 22 (#569) removed peripheral sector. Now all visible tiles write VIS_FORWARD regardless. The test checks the texture is non-null (not the actual byte values), so it should pass... unless the failure is in test_fog_state_exploration_persists which has a weak assertion. Run --filter test_fog_shader to identify the specific failure. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:12:45','2026-06-12 10:23:05',NULL,'3c27c41707376c03b0ca5a0acf24035b',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRYF23MZ86S1XF1542G','bug','06FBPPMZNNEV052DBYYY3A897C','test_fog_shader: 1 failure — stale VIS_PERIPHERAL or peripheral sector assertion','1 failing test case in test_fog_shader.gd. The most likely failure is test_fog_state_forward_vs_peripheral: it asserts Forward > Peripheral visibility values, but Sprint 22 (#569) removed peripheral sector. Now all visible tiles write VIS_FORWARD regardless. The test checks the texture is non-null (not the actual byte values), so it should pass... unless the failure is in test_fog_state_exploration_persists which has a weak assertion. Run --filter test_fog_shader to identify the specific failure. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:12:45', '2026-06-1210:23:05', NULL, 'bb63cf321016aa94052c0eca3ad7ec77', 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);
INSERTINTOtickets(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('06FB0TNSRZYDBRV5T9QVQAXGV0','bug','06FBPPMZNNEV052DBYYY3A897C','test_e2e_connection: 1 failure — server binary path or TCP connection state','1 failing test case in test_e2e_connection.gd. test_send_input_receive_snapshot skips if server binary not found. If it fails, either: (1) server binary exists but connection fails (port collision, timing), or (2) LocalBridge.reset() method was removed (the test calls _bridge.reset() but this may not exist on LocalBridge). Verify LocalBridge has a reset() method. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:12:51','2026-06-12 10:23:05',NULL,'7ab8b3846917c88efeca3d50990e3d89',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZYDBRV5T9QVQAXGV0','bug','06FBPPMZNNEV052DBYYY3A897C','test_e2e_connection: 1 failure — server binary path or TCP connection state','1 failing test case in test_e2e_connection.gd. test_send_input_receive_snapshot skips if server binary not found. If it fails, either: (1) server binary exists but connection fails (port collision, timing), or (2) LocalBridge.reset() method was removed (the test calls _bridge.reset() but this may not exist on LocalBridge). Verify LocalBridge has a reset() method. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:12:51', '2026-06-1210:23:05', NULL, 'deffb71bafcbd07b22c520943f7a846f', 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);
INSERTINTOtickets(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('06FB0TNSRY9FV0S9RE42WY7SHW','bug','06FBPPMZNNEV052DBYYY3A897C','test_audio_sprint13: 1 failure — AudioManager.clear_dip or API drift','1 failing test case in test_audio_sprint13.gd. before_test calls AudioManager.clear_dip(), stop_all_loops(), set_volume() for all buses. If any of these methods were renamed or a bus constant changed, setup would fail and cascade. Or a specific dip timing assertion is stale. Run --filter test_audio_sprint13 and read the specific failure. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:12:56','2026-06-12 10:23:05',NULL,'5cec2383dbf80f22833e696c8ed290ab',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY9FV0S9RE42WY7SHW','bug','06FBPPMZNNEV052DBYYY3A897C','test_audio_sprint13: 1 failure — AudioManager.clear_dip or API drift','1 failing test case in test_audio_sprint13.gd. before_test calls AudioManager.clear_dip(), stop_all_loops(), set_volume() for all buses. If any of these methods were renamed or a bus constant changed, setup would fail and cascade. Or a specific dip timing assertion is stale. Run --filter test_audio_sprint13 and read the specific failure. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:12:56', '2026-06-1210:23:05', NULL, 'e163d908f7547e589b11a97343cbf93c', 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);
INSERTINTOtickets(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('06FB0TNSRXCE9D9JYBZWVXMG68','bug','06FBPPMZNNEV052DBYYY3A897C','test_ai_dialogue_sprint26: 1 failure — HardwareDetector autoload missing or settings_dialog API','1 failing test case in test_ai_dialogue_sprint26.gd. The HardwareDetector tests skip if autoload not found. The GameState field tests (ai_enhanced_dialogue_enabled) look correct. The failing test is likely in the settings_dialog section: SETTINGS_DIALOG_SCENE preloaded at class level — if settings_dialog.tscn doesn''t exist or a method was renamed, class-level preload would fail. Check res://ui/settings_dialog.tscn exists and the relevant methods. Sprint 38 triage #871.','backlog','low',NULL,'client',NULL,'2026-05-02 08:13:02','2026-06-12 10:23:05',NULL,'ed7e0cd1fa885a1a9d20b79a3917f417',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXCE9D9JYBZWVXMG68','bug','06FBPPMZNNEV052DBYYY3A897C','test_ai_dialogue_sprint26: 1 failure — HardwareDetector autoload missing or settings_dialog API','1 failing test case in test_ai_dialogue_sprint26.gd. The HardwareDetector tests skip if autoload not found. The GameState field tests (ai_enhanced_dialogue_enabled) look correct. The failing test is likely in the settings_dialog section: SETTINGS_DIALOG_SCENE preloaded at class level — if settings_dialog.tscn doesn''t exist or a method was renamed, class-level preload would fail. Check res://ui/settings_dialog.tscn exists and the relevant methods. Sprint 38 triage #871.
Re-homedundermaintenancefromdoneumbrellaT-871percascaderefocus2026-06-12.', 'backlog', 'low', NULL, 'client', NULL, '2026-05-0208:13:02', '2026-06-1210:23:05', NULL, 'd30ab47be78dcd540d431e8ed6a8c352', 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);
INSERTINTOtickets(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('06FB0TNSRZ9Q7NHVDRT6ARMCWW','task','06FB0TNSRZXCHGS16BFHSSGSV4','D-210 SubBiomeVariant implementation','D-210 defines SubBiomeVariant for fine-grained biome classification within SettingType::Wilderness districts. Currently deferred — SettingType::Wilderness carries a plain String biome field. Implement SubBiomeVariant enum and wire it into the atlas skeleton generator when the biome taxonomy is finalized.','backlog','low',NULL,'server',NULL,'2026-05-03 10:30:14','2026-06-12 10:23:05',NULL,'bfb4923b6526a378a3baf298854b4083',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZ9Q7NHVDRT6ARMCWW','task','06FB0TNSRZXCHGS16BFHSSGSV4','D-210 SubBiomeVariant implementation','D-210 defines SubBiomeVariant for fine-grained biome classification within SettingType::Wilderness districts. Currently deferred — SettingType::Wilderness carries a plain String biome field. Implement SubBiomeVariant enum and wire it into the atlas skeleton generator when the biome taxonomy is finalized.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—biometaxonomyfortheatlas/cascadegenerator.', 'backlog', 'low', NULL, 'server', NULL, '2026-05-0310:30:14', '2026-06-1210:23:05', NULL, 'a1cd9d5b72f7a9748c52d23ed948b0b6', 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);
INSERTINTOtickets(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('06FB0TNSRW2ZSPJ3D9NEZ6JBW8','story','06FB0TNSRZXCHGS16BFHSSGSV4','Atlas data delivery — replace client-side file reads with server API calls','The client currently reads markers.json and star_map_data.json directly from the filesystem. This bypasses the server layer entirely — the client should request all game data through IPC calls to the Rust backend.
Affects:atlasapp(reach,system,planet,regionalscreens),economicsmonitor.Theserver-sidehandlercanstartasathinproxy(readfile,returncontents)andevolveintoperception-filteredqueries(D-012)later.', 'backlog', 'medium', NULL, 'client', NULL, '2026-05-0314:14:23', '2026-06-1210:23:05', NULL, '026273cf1c27b3c46ca83df235265d72', 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);
INSERTINTOtickets(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('06FB0TNSRW2ZSPJ3D9NEZ6JBW8','story','06FB0TNSRZXCHGS16BFHSSGSV4','Atlas data delivery — replace client-side file reads with server API calls','The client currently reads markers.json and star_map_data.json directly from the filesystem. This bypasses the server layer entirely — the client should request all game data through IPC calls to the Rust backend.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—atlasdatadeliveryunderpinsviewingcascadelayersthroughtheimplantAtlas.', 'backlog', 'medium', NULL, 'client', NULL, '2026-05-0314:14:23', '2026-06-1210:23:05', NULL, 'ff64aa82b1f15c4cea86ee3268f20995', 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);
INSERTINTOtickets(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('06FB0TNSRYEM4VSX74MS4NKQ1C','bug','06FBPPMZNNEV052DBYYY3A897C','Client test suite — pre-existing failures under bare run-godot','Surfaced 2026-05-24 running the full client suite (tests/run-godot, no server) during #960. NOT caused by #960 — verified: test_input_roundtrip fails identically at the pre-change baseline, and the rest are unrelated subsystems. Two categories to triage:
Goal:agreen(orexplicitly-gated)bare`maketest-client`soclientregressionsaredetectable.Untilthen,runtargetedsuites(run-godot--filter <stem>).', 'backlog', 'medium', NULL, 'client', NULL, '2026-05-24 16:49:54', '2026-06-12 10:23:05', NULL, 'f0d9f237aabd31e5f8c0d43d7e626f1e', 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);
INSERTINTOtickets(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('06FB0TNSRYEM4VSX74MS4NKQ1C','bug','06FBPPMZNNEV052DBYYY3A897C','Client test suite — pre-existing failures under bare run-godot','Surfaced 2026-05-24 running the full client suite (tests/run-godot, no server) during #960. NOT caused by #960 — verified: test_input_roundtrip fails identically at the pre-change baseline, and the rest are unrelated subsystems. Two categories to triage:
Re-homedundermaintenance(test-failuredebt/suitehygiene)percascaderefocus2026-06-12.', 'backlog', 'medium', NULL, 'client', NULL, '2026-05-2416:49:54', '2026-06-1210:23:05', NULL, '48c6b07c7558342430ef5822e873ce5a', 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);
INSERTINTOtickets(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('06FB0TNSRYYR0QJC12EMA0SV1W','task','06FB0TNSRZXCHGS16BFHSSGSV4','Add East-African-interior heritage token to cultural_specialization taxonomy','The #1016 cultural pass found two systems founded by East-African-INTERIOR peoples that the canonical 47-value heritage taxonomy has no token for, so they currently borrow ''swahili'' (a coastal value) as the nearest fit (documented inline in wiki/economics/system_specialization.toml):
SurfacedbythePR#147(#1016)review(PaulaHIGH/Miri).Lowpriority—current''swahili''approximationisdocumented,notsilentlywrong.', 'backlog', 'low', NULL, 'server', 'D-237', '2026-06-0308:27:09', '2026-06-1210:23:06', NULL, 'ec06b91574202a0b7377d07afdd15cde', 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);
INSERTINTOtickets(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('06FB0TNSRYYR0QJC12EMA0SV1W','task','06FB0TNSRZXCHGS16BFHSSGSV4','Add East-African-interior heritage token to cultural_specialization taxonomy','The #1016 cultural pass found two systems founded by East-African-INTERIOR peoples that the canonical 47-value heritage taxonomy has no token for, so they currently borrow ''swahili'' (a coastal value) as the nearest fit (documented inline in wiki/economics/system_specialization.toml):
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—cultural_specializationtaxonomyisageneration-inputdatafix(D-237).', 'backlog', 'low', NULL, 'server', 'D-237', '2026-06-0308:27:09', '2026-06-1210:23:06', NULL, 'e72c53971dca82a234a7129493fbfca0', 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);
INSERTINTOtickets(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('06FB0TNSRZ9NXNX40J476N2EQM','task','06FB0TNSRZXCHGS16BFHSSGSV4','Persist deterministic cascade output (build-time bake or local cache)','Deferred from the #955 pair session. The Phase-4 cascade (Layers 0-5) is fully deterministic (D-010 + SeedChain) — its output (settlement placements, and eventually the full BodyWorldState) is a pure function of (heightmap, authored context, world seed), so it can be cached rather than re-derived on every cold load.
Seam:run_layer3(andeachrun_layerN)ispure—wrapattherun_cascadecallsite(a//cacheseamcommentmarksit).', 'backlog', 'low', NULL, 'server', 'D-200', '2026-06-0310:46:13', '2026-06-1210:23:06', NULL, '1bf12c7eeaa86d0d9cfac470577f0419', 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);
INSERTINTOtickets(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('06FB0TNSRZ9NXNX40J476N2EQM','task','06FB0TNSRZXCHGS16BFHSSGSV4','Persist deterministic cascade output (build-time bake or local cache)','Deferred from the #955 pair session. The Phase-4 cascade (Layers 0-5) is fully deterministic (D-010 + SeedChain) — its output (settlement placements, and eventually the full BodyWorldState) is a pure function of (heightmap, authored context, world seed), so it can be cached rather than re-derived on every cold load.
Re-parentedunderPhase4epicpercascaderefocus2026-06-12—cascade-outputpersistence;triggerremainsend-to-endcascade(post#959)orLayer-2contextfreeze.', 'backlog', 'low', NULL, 'server', 'D-200', '2026-06-0310:46:13', '2026-06-1210:23:06', NULL, '3c1d1e516c50c02cc3064888b530ca27', 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);
INSERTINTOtickets(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('06FB0TNSRW7FZPYXXCGWBBRBEC','initiative',NULL,'v0.2 Life-Sim Pivot','Generator-first life sim pivot following the Where''s the Fun? workshop (2026-03-05). 24 decisions locked: all NPCs generated, tycoon bookmark, culture-implicit-in-location, broad life verbs, dual-scale consequence model. Detective/smuggler framing retired. Critical path: Sprint 25 generator spike. See docs/workshops/wheres-the-fun/workshop-outcomes.md.','cancelled','critical',NULL,NULL,NULL,'2026-03-05 23:11:31','2026-06-12 10:23:06',NULL,'aa6302dbd4a06a68ef49847672d55a98',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRW7FZPYXXCGWBBRBEC','initiative',NULL,'v0.2 Life-Sim Pivot','Generator-first life sim pivot following the Where''s the Fun? workshop (2026-03-05). 24 decisions locked: all NPCs generated, tycoon bookmark, culture-implicit-in-location, broad life verbs, dual-scale consequence model. Detective/smuggler framing retired. Critical path: Sprint 25 generator spike. See docs/workshops/wheres-the-fun/workshop-outcomes.md.
Cancelled2026-06-12:thev0.2Life-SimPivotinitiativeshell—thev0.2targetisdropped(D-166,amendment2026-06-12;D-114/D-115/D-117/D-118/D-120superseded).Itschildrenwithsurvivingfunctionalcontent(T-604proof-of-lifeplaytestconcept,T-605tycoonbookmark,T-606creationflow,T-608worldfeel)arepreservedunderthepost-cascadegameplayparkingepicT-1036.', 'cancelled', 'critical', NULL, NULL, NULL, '2026-03-0523:11:31', '2026-06-1210:23:06', NULL, 'f274d9d9b2b4e4d642160d2a5939e400', 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);
INSERTINTOtickets(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('06FB0TNSRXXP903QTD8Q2YWRJ8','story',NULL,'One campaign or separate eras',NULL,'cancelled','medium',NULL,NULL,'Q-004','2026-02-09 15:21:44','2026-06-12 10:23:06',NULL,'02d52e37abbfcc5c53bc5102a7bcca63',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXXP903QTD8Q2YWRJ8','story',NULL,'One campaign or separate eras','Cancelled 2026-06-12: administrative mirror of Q-004 (resolved); no surviving open requirement.','cancelled','medium',NULL,NULL,'Q-004','2026-02-09 15:21:44','2026-06-12 10:23:06',NULL,'b7de7f9179cf45b865a5213b4ef73f71',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZYTPACQCYNGVK5XSC','story',NULL,'Prototype scale','Cancelled 2026-06-12: administrative mirror of Q-005 (resolved); no surviving open requirement.','cancelled','medium',NULL,NULL,'Q-005','2026-02-09 15:21:44','2026-06-12 10:23:06',NULL,'187fa74f3477b1c151aab02f1141e09f',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRW3ASVAZZNYN9M59AW','story',NULL,'Target platforms','Cancelled 2026-06-12: administrative mirror of Q-007 (resolved); no surviving open requirement.','cancelled','medium',NULL,NULL,'Q-007','2026-02-09 15:21:44','2026-06-12 10:23:06',NULL,'858b65923473224fabb431a3fd8901bb',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWJYV3ZVY7D7G3P4FW','story',NULL,'Character selection roster','Cancelled 2026-06-12: administrative mirror of Q-011 (resolved); no surviving open requirement.','cancelled','medium',NULL,NULL,'Q-011','2026-02-09 15:21:44','2026-06-12 10:23:06',NULL,'167022f80bd2d726d24acf15ad1d2a9f',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWXPRPS7G2MA786GR0','initiative',NULL,'Map & Navigation','Implement D-010 (information boundaries), D-012 (chunk-based maps), D-013 (diegetic insert/POI navigation), D-014 revised (station district map). World structure and player navigation.','cancelled','high',NULL,NULL,'D-010, D-012, D-013, D-014','2026-02-10 23:14:31','2026-06-12 10:23:06',NULL,'61398f7c2b04f52e511045b668574972',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRWXPRPS7G2MA786GR0','initiative',NULL,'Map & Navigation','Implement D-010 (information boundaries), D-012 (chunk-based maps), D-013 (diegetic insert/POI navigation), D-014 revised (station district map). World structure and player navigation.
Cancelled2026-06-12:pre-cascadeumbrellaemptiedbythecascaderefocus—childrenre-homed(T-50/T-52toPhase4,T-49/T-51toPhase5).', 'cancelled', 'high', NULL, NULL, 'D-010,D-012,D-013,D-014', '2026-02-1023:14:31', '2026-06-1210:23:06', NULL, '95c525f21dd7543ce253a5740edc5c82', 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);
INSERTINTOtickets(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('06FB0TNSRY3XYFKDGVPQR87JHM','initiative',NULL,'Content Architecture','Implement D-023 (three-tier content model), D-025 (social site templates), D-028 (dialogue system), D-029 (population entanglement). Template system and dialogue.','cancelled','high',NULL,NULL,'D-023, D-025, D-028, D-029','2026-02-10 23:14:31','2026-06-12 10:23:06',NULL,'d8df203786f39c6e92a9d2913e10fe92',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY3XYFKDGVPQR87JHM','initiative',NULL,'Content Architecture','Implement D-023 (three-tier content model), D-025 (social site templates), D-028 (dialogue system), D-029 (population entanglement). Template system and dialogue.
Cancelled2026-06-12:pre-cascadeumbrellaemptiedbythecascaderefocus—childrenre-homed(T-54toPhase4,T-55/T-56toPhase6,T-53togameplayparkingT-1036).', 'cancelled', 'high', NULL, NULL, 'D-023,D-025,D-028,D-029', '2026-02-1023:14:31', '2026-06-1210:23:06', NULL, '0cbd1450dd90539f8c3832dcbc9d4777', 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);
INSERTINTOtickets(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('06FB0TNSRZK0EWD2NW4D2MGGV0','initiative',NULL,'Testability Infrastructure','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.
Cancelled2026-06-12:pre-cascadeumbrella—test-infrachildrenre-homedundermaintenanceinitiativeT-1037;discussionchildT-64cancelled(testingapproachlongestablished).', 'backlog', 'high', NULL, NULL, NULL, '2026-02-1023:14:31', '2026-06-1210:23:06', NULL, 'fec9f2d05551b0cba66b78a3551a0365', 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);
INSERTINTOtickets(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('06FB0TNSRXG2Z9ZAR42SQ9GNP4','epic','06FB0TNSRZK0EWD2NW4D2MGGV0','Testability Architecture Refinement','Discussion: Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code execution. Define patterns, constraints, tooling needs.
Cancelled2026-06-12:discussionpremisefulfilled—testingapproachestablishedanddocumented(three-tierstrategy,Gauntlet-first,D-239harness);docdeliverablesliveoninT-215/T-216/T-217underT-1037.', 'backlog', 'critical', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:06', NULL, '3e6e5ff3e35895a0ef31c0aa471eaaac', 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);
INSERTINTOtickets(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('06FB0TNSRZS8C6ZGVR5M7D3974','story','06FB0TNSRXG2Z9ZAR42SQ9GNP4','Refinement discussion - Multi-agent','NEEDS REFINEMENT. Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code. External vs integrated, patterns, constraints.','cancelled','critical',NULL,NULL,NULL,'2026-02-10 23:27:10','2026-06-12 10:23:06',NULL,'29df606f5a3cb9358100b4f1a045ee95',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZS8C6ZGVR5M7D3974','story','06FB0TNSRXG2Z9ZAR42SQ9GNP4','Refinement discussion - Multi-agent','NEEDS REFINEMENT. Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code. External vs integrated, patterns, constraints.
Cancelled2026-06-12:refinement-discussionartifact;testingapproachsincedecidedanddocumented;survivingdocworkinT-215/T-216/T-217.', 'cancelled', 'critical', NULL, NULL, NULL, '2026-02-1023:27:10', '2026-06-1210:23:06', NULL, '135f59c8ac7fd5c181164665618c24b6', 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);
INSERTINTOtickets(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('06FB0TNSRXMPF6176KB9CSBH2C','story','06FB0TNSRXD5W32VCV5YZY3NX0','Auto-generated apartment','SPLIT — see #681 (server: apartment generator logic) and #682 (client: visual rendering + first-moment sequence). Original: Player starting apartment is auto-generated to reflect economic position and cultural context. Decision D-136 (First Settled Reach moment: apartment + insert activation). Decision D-126 (Groundhog Day alarm clock homage).','cancelled','high',NULL,'server',NULL,'2026-03-05 23:12:44','2026-06-12 10:23:06',NULL,'bde5feed7399cfe87c04b2c282a1ad66',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXMPF6176KB9CSBH2C','story','06FB0TNSRXD5W32VCV5YZY3NX0','Auto-generated apartment','SPLIT — see #681 (server: apartment generator logic) and #682 (client: visual rendering + first-moment sequence). Original: Player starting apartment is auto-generated to reflect economic position and cultural context. Decision D-136 (First Settled Reach moment: apartment + insert activation). Decision D-126 (Groundhog Day alarm clock homage).
Cancelled2026-06-12:administrativesplitshell—fullscopecarriedbyT-681(Phase6)andT-682(gameplayparking);nofunctionalrequirementlost.', 'cancelled', 'high', NULL, 'server', NULL, '2026-03-0523:12:44', '2026-06-1210:23:06', NULL, '1e10bbf0334bf20ff35499bb2e9fe499', 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);
Closed2026-06-12:enginearchitecturedelivered(T-35–T-38done);theoneopenchild(T-235gamestatemanagement)re-homedunderPhase5epicT-749.Umbrellacomplete.', 'done', 'critical', NULL, NULL, 'D-020', '2026-02-1023:14:11', '2026-06-1210:23:06', NULL, 'b481c1488565c0b7a0457c3454b3a367', 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);
INSERTINTOtickets(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('06FB0TNSRY5G9GMPV8B0RDD1JR','initiative',NULL,'Fog of perception non-negotiable',NULL,'done','medium',NULL,NULL,'D-011','2026-02-09 15:21:44','2026-06-12 10:23:07',NULL,'72ba932e57b004c9e757e0627496adc6',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRY5G9GMPV8B0RDD1JR','initiative',NULL,'Fog of perception non-negotiable','Closed 2026-06-12: decision-mirror initiative for D-011 (fog of perception non-negotiable). D-011 is confirmed and the fog/perception system is implemented (shadowcasting, vision cone, observer snapshots); the mirror served its purpose. Cleared from the perpetual review queue.','done','medium',NULL,NULL,'D-011','2026-02-09 15:21:44','2026-06-12 10:23:07',NULL,'26db2495bc0c57c0411dc6ffcd123da3',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRZE4CSS8YR0FCEXMK8','initiative',NULL,'Development Cascade — 6-phase first-things-first build order','The Settled Reach builds core system to core system in strict cascade order. Each phase completes before the next begins. No scoping negotiations, no v0.2 target. Established 2026-03-24 during world generation workshop. See CLAUDE.md for the full cascade table.','in_progress','critical',NULL,NULL,NULL,'2026-03-25 13:28:54','2026-06-12 10:23:07',NULL,'77e2967b4c7c1916c90b3a1320d08716',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FB0TNSRXG2Z9ZAR42SQ9GNP4','epic','06FB0TNSRZK0EWD2NW4D2MGGV0','Testability Architecture Refinement','Discussion: Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code execution. Define patterns, constraints, tooling needs.
Cancelled2026-06-12:discussionpremisefulfilled—testingapproachestablishedanddocumented(three-tierstrategy,Gauntlet-first,D-239harness);docdeliverablesliveoninT-215/T-216/T-217underT-1037.', 'cancelled', 'critical', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:17', NULL, '232d6129e2016ef3d34b1968d322a881', 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);
INSERTINTOtickets(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('06FB0TNSRXG2Z9ZAR42SQ9GNP4','epic','06FB0TNSRZK0EWD2NW4D2MGGV0','Testability Architecture Refinement','Discussion: Jeroen + Tyre + Gestalt + Hoshe + Troblum. Determine optimal testing approach for Claude Code execution. Define patterns, constraints, tooling needs.
Cancelled2026-06-12:discussionpremisefulfilled—testingapproachestablishedanddocumented(three-tierstrategy,Gauntlet-first,D-239harness);docdeliverablesliveoninT-215/T-216/T-217underT-1037.', 'cancelled', 'critical', NULL, NULL, NULL, '2026-02-1023:17:38', '2026-06-1210:23:17', NULL, '7d0b7fdb0c114f9307b9c392173c3b4f', 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);
INSERTINTOtickets(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('06FB0TNSRZK0EWD2NW4D2MGGV0','initiative',NULL,'Testability Infrastructure','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.
Cancelled2026-06-12:pre-cascadeumbrella—test-infrachildrenre-homedundermaintenanceinitiativeT-1037;discussionchildT-64cancelled(testingapproachlongestablished).', 'cancelled', 'high', NULL, NULL, NULL, '2026-02-1023:14:31', '2026-06-1210:23:17', NULL, '9dfd8085ccf2ad48acc1aebf61e46dc1', 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);
INSERTINTOtickets(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('06FB0TNSRZK0EWD2NW4D2MGGV0','initiative',NULL,'Testability Infrastructure','Build comprehensive testing framework for both Rust/bevy_ecs simulation and Godot 4 client. External test harness, minimal production code pollution. NEEDS REFINEMENT.
Cancelled2026-06-12:pre-cascadeumbrella—test-infrachildrenre-homedundermaintenanceinitiativeT-1037;discussionchildT-64cancelled(testingapproachlongestablished).', 'cancelled', 'high', NULL, NULL, NULL, '2026-02-1023:14:31', '2026-06-1210:23:17', NULL, '7df7fb4a456a62bce10e65ca10c93f60', 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);
INSERTINTOtickets(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('06FB0TNSRX3R6G3Y7QR4FAJPNM','story','06FB0TNSRZXCHGS16BFHSSGSV4','Wiki to Atlas content-set consolidation (Q-107, blocked)','Consolidate all wiki content (pages + heightmaps + markers + architecture-flavor) into one first-class, baked Atlas/gamedata content set with a unified bake pipeline -- instead of per-feature file conventions. Resolves where authored per-body content lives (the D-232 flavor source). BLOCKED on Q-107 (open question -- the target tree structure must be decided first). The generator-facing trait_templates + atlas_body_trait_bias tables (D-232) is invariant to this, so it does NOT block the fill seam; sequence this AFTER the fill-seam work. Jeroen: ''the wiki needs to become part of the atlas content set ... not yet another hack.''
Hygienenote2026-06-12:titlesays''blocked''butnoblockeredgeexists,sothissurfacedinthe--unblocked feed. Labelled needs-decision; genuinely gated on Q-107 (wiki→Atlas content consolidation) — resolve Q-107 before picking this up.', 'backlog', 'low', NULL, 'server', 'Q-107', '2026-05-25 19:09:10', '2026-06-12 10:23:21', NULL, 'f2c2f8265f943f2441ea521aa63b716d', 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);
INSERTINTOtickets(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('06FB0TNSRZ8Z6NN74YKCCRCPMR','story','06FB0TNSRZXCHGS16BFHSSGSV4','Generation validation pass + Phase 5 dependency gate','Validation pass: generated content reads correctly (settlements legible, walkable, named). Establishes the dependency gate that locks Phase 5 (player control, epic #749) behind Phase 4 completion per the cascade rule (D-166 amended 2026-05-22).
GatetriggerupdatedperD-166amendment(2026-06-12):Phase5rampsinparallelonceOUTSIDEgenerationproducesdeterministic,walkableexteriors—thegatethisticketholdsis''outsidesgeneratedeterministicallyandarewalkable''(validationpass:settlementslegible,walkable,named),not''allPhase-4polishcomplete''.Door-boundarycontractsandremainingPhase-4detailmaycontinuealongsideearlyPhase-5work.', 'backlog', 'medium', NULL, 'server', 'D-166', '2026-05-2217:42:34', '2026-06-1210:23:21', NULL, '4c0e71f60b98b366e6c2f7605ef4d2b1', 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);
INSERTINTOtickets(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('06FBPQ02F02JDDBSFMGPX0XASR','story','06FB0TNSRZXCHGS16BFHSSGSV4','Layer 2 — inter-settlement road/rail graph (MST + A* over terrain cost, MaintenanceAuthority, named-route identity)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','backlog','high',NULL,'server','D-211','2026-06-12 10:23:49','2026-06-12 10:23:49',NULL,'08588aaf4eda07347d750feb1ea23e3c',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPQ02F02JDDBSFMGPX0XASR','story','06FB0TNSRZXCHGS16BFHSSGSV4','Layer 2 — inter-settlement road/rail graph (MST + A* over terrain cost, MaintenanceAuthority, named-route identity)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
Acceptance:dispatchabodywithaFjordWall-regioncoastalplacementinaCorpTerritoryprovince->thegeneratedquarterusesRibbontopologyandCompanyTown-classlayout,notmesh+Commission.Parent:T-750.Refs:D-214,D-215,D-228,D-234,D-239§6;T-1022(predecessor),T-983,T-1014(adjacent,differentfields).', 'backlog', 'high', NULL, 'server', 'D-234', '2026-06-1210:23:49', '2026-06-1210:23:49', NULL, '5079cc1b2a704183c368b377244a8a4e', 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);
INSERTINTOtickets(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('06FBPQ02QTVSZ1PXTGNCN6Y8KM','bug','06FB0TNSRZXCHGS16BFHSSGSV4','BUG: river channel centrelines anchored to the world-origin axis — channels absent in almost every chunk','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','backlog','high',NULL,'server','D-239','2026-06-12 10:23:49','2026-06-12 10:23:49',NULL,'14718b3824035133a5f018e209941e99',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPQ02QTVSZ1PXTGNCN6Y8KM','bug','06FB0TNSRZXCHGS16BFHSSGSV4','BUG: river channel centrelines anchored to the world-origin axis — channels absent in almost every chunk','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
AddaT-1031-harnessbelievabilitycheck:ahas_active_channelchunkatanarbitrarylargeworldoffset(e.g.chunk_pos(1000,-750))containsin-channelvoxels;channelpositioniscontinuousacrossadjacentchunkpairs.Siblingbug:landform-64m-repeat(samefamily,oppositedirection—channelsappearnowhere,landformsappeareverywhere).Parent:T-750.Refs:D-239§10,D-208(D8),D-010;T-1029(origin),T-1031(harness).', 'backlog', 'high', NULL, 'server', 'D-239', '2026-06-1210:23:49', '2026-06-1210:23:49', NULL, 'f260380c0c57cab5233fc47a0b220461', 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);
INSERTINTOtickets(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('06FBPQ02VWJGXWDYT2SMXM9DTC','bug','06FB0TNSRZXCHGS16BFHSSGSV4','BUG: fjord/cliff/gorge/delta landforms repeat on the 64 m chunk grid (D-239 §10 violation)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','backlog','high',NULL,'server','D-239','2026-06-12 10:23:49','2026-06-12 10:23:49',NULL,'be00a918d51ac4a1529097175f01dcd2',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPQ02VWJGXWDYT2SMXM9DTC','bug','06FB0TNSRZXCHGS16BFHSSGSV4','BUG: fjord/cliff/gorge/delta landforms repeat on the 64 m chunk grid (D-239 §10 violation)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
Acceptance:T-1031harnesscross-regionchunkpairsshownoelevationstepexceedingthelithology-permittedslope(D-239§8)atregionborders;familyseamsremainsharp;determinismgolden-seedunchangedforchunksfarfromborders.Parent:T-750.Refs:D-239§4/§7/§8,D-010;Q-102;T-1026/T-1028/T-1029(predecessors).', 'backlog', 'medium', NULL, 'server', 'D-239', '2026-06-1210:23:50', '2026-06-1210:23:50', NULL, 'fb33e89b93753d08f1056f28a9dcf6dc', 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);
INSERTINTOtickets(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('06FBPQ034DKN4ENSGX5HTYTBJG','task','06FB0TNSRZXCHGS16BFHSSGSV4','Derive road_entry_directions at L3 and thread through the dispatch (interim: MST-neighbor bearings + water_bearing)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','backlog','medium',NULL,'server','D-234','2026-06-12 10:23:50','2026-06-12 10:23:50',NULL,'4b3a52bda75e3abf6bed5fbbb566a76c',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPQ034DKN4ENSGX5HTYTBJG','task','06FB0TNSRZXCHGS16BFHSSGSV4','Derive road_entry_directions at L3 and thread through the dispatch (interim: MST-neighbor bearings + water_bearing)','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
Acceptance:adispatchedsettlementwith>=1neighborproduces>=1AccessKind::QuarterEdgenodeonthecorrectoctant;theBlockJunctionfallbackfiresonlyforgenuinelyisolatedsettlements.Parent:T-750.Blocked-by(soft):inter-settlement-transportticketforfullfidelity.Refs:D-234,D-213,D-204;T-990(consumer,done),T-1022(dispatch,done).', 'backlog', 'medium', NULL, 'server', 'D-234', '2026-06-1210:23:50', '2026-06-1210:23:50', NULL, '6fd8ab9c614fad67a56d43d9a7d1f9bf', 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);
INSERTINTOtickets(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('06FBPQ0381QWDAQABZAY7MRD8M','task','06FB0TNSRZXCHGS16BFHSSGSV4','Cache TerrainAnalysis on Layer1Output — drop the redundant per-body drainage re-run','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.','backlog','medium',NULL,'server','D-203','2026-06-12 10:23:50','2026-06-12 10:23:50',NULL,'faf98efa168dfd6a6d1b5e49ff6e63e2',2)ONCONFLICT(record_id)DOUPDATESETtype=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_versionWHEREexcluded.updated_at>tickets.updated_atOR(excluded.updated_at=tickets.updated_atANDexcluded.hash>tickets.hash);
INSERTINTOtickets(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('06FBPQ0381QWDAQABZAY7MRD8M','task','06FB0TNSRZXCHGS16BFHSSGSV4','Cache TerrainAnalysis on Layer1Output — drop the redundant per-body drainage re-run','Workshopped-but-unticketed cascade work captured 2026-06-12 (cascade-refocus grounding pass). Full grounded scope follows.
Purerefactor:derivationinputsunchanged,soT-952golden-seedoutputsmustbebyte-identical—assertit.AlsoupdatethestaleTODOtext(itreferencesaclosedticket).Parent:T-750.Refs:D-239§10,D-203;T-1028/T-1031/T-1032(context),T-952(determinismgate).', 'backlog', 'medium', NULL, 'server', 'D-203', '2026-06-1210:23:50', '2026-06-1210:23:50', NULL, '63b7bd8220b902524fb879256990dfb1', 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);
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.