diff --git a/.pql/changelog/ticket_deps/2026-07.sql b/.pql/changelog/ticket_deps/2026-07.sql index 1836d24b6..a4361903c 100644 --- a/.pql/changelog/ticket_deps/2026-07.sql +++ b/.pql/changelog/ticket_deps/2026-07.sql @@ -1,2 +1,3 @@ INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FKE0EW2617K9VE4QHSYSR9HW', '06FKCPBF41RWK9PW9M22Q7961C', '2026-07-06 10:38:33.017', '2026-07-06 10:38:33.017', NULL, '290574b958bce69afc8a81d7487f8fd5', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRWYHR72SC80F5T0TBW', '06FB0TNSRWGDT3AJJE5QD0E3FR', '2026-07-07 16:57:31.296', '2026-07-07 16:57:31.296', NULL, 'e6784e95e525cb6458fe258ab4b6e4c2', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); +INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXQGAX5GT4PTTBQYGJCV4', '06FB0TNSRZKXHAYMT7Q6WW3XDC', '2026-07-08 15:53:21.023', '2026-07-08 15:53:21.023', NULL, '64d1cc675b69a17b5e1ec1f59710e9eb', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index 06d3f7dc8..049d5058b 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -1115,3 +1115,44 @@ INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, chang INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRWGDT3AJJE5QD0E3FR', 'status', 'review', 'done', NULL, '2026-07-08 13:57:21', '2026-07-08 13:57:21.375', '2026-07-08 13:57:21.375', NULL, 'c14519c10e49aa58b51649dcc270b207', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRWYHR72SC80F5T0TBW', 'status', 'review', 'done', NULL, '2026-07-08 13:57:21', '2026-07-08 13:57:21.375', '2026-07-08 13:57:21.375', NULL, 'c2f0106efbb248444ee8829633830021', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRWMZBFV1V6F79VW8S4', 'status', 'backlog', 'done', NULL, '2026-07-08 13:57:27', '2026-07-08 13:57:27.196', '2026-07-08 13:57:27.196', NULL, '8315da7993ab8e37f2e85b04aefc6d78', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'description', 'THE primary gap (generator.rs is stubbed). Generate walkable tiles from the block/chunk skeleton: floors, walls, doors, placed objects, using tile-condition thresholds 0.63/0.43/0.23 (D-217). Output is the walkable world data. + +Refinement (round 2, 2026-05-25): Layer-5 fill is the D-230 on-demand derive phase (<5ms shell derivation Void/Wall/FloorSlab/Roof from the cached tags) plus the BuildingExteriorTag visual grammar and material vocabulary (D-235: WallMaterial/RoofForm/FacadeRhythm/StreetSurface, template-filtered (era = maintenance/wear, not a material gate)) plus interstitial and operations-surface fill driven by BulkClass coverage (D-233). Blocked by 957, 976, 977. + +Refinement (2026-05-26): READY behind 1006/957/976/977/1005. shell_derive = rectangle-containment + z-range over cached tags (~0.5ms/chunk). FillChunk pre-condition: only after SkeletonGenerated; re-enqueue High if block_tags absent. Wire chunk_streaming.rs to enqueue FillChunk on load-radius entry (no GenerationQueue interaction today). Interstitial token derived from setback_tier (D-235) x position; bulk operations-surface tagged built-infra, not open space. Child 988 = exterior grammar, now 3-step template-filtered (era is wear, not a material gate). Files: gen_queue.rs FillChunk arm, workers/stubs.rs, plugin.rs SkeletonGenerated handler.', 'THE primary gap (generator.rs is stubbed). Generate walkable tiles from the block/chunk skeleton: floors, walls, doors, placed objects, using tile-condition thresholds 0.63/0.43/0.23 (D-217). Output is the walkable world data. + +Refinement (round 2, 2026-05-25): Layer-5 fill is the D-230 on-demand derive phase (<5ms shell derivation Void/Wall/FloorSlab/Roof from the cached tags) plus the BuildingExteriorTag visual grammar and material vocabulary (D-235: WallMaterial/RoofForm/FacadeRhythm/StreetSurface, template-filtered (era = maintenance/wear, not a material gate)) plus interstitial and operations-surface fill driven by BulkClass coverage (D-233). Blocked by 957, 976, 977. + +Refinement (2026-05-26): READY behind 1006/957/976/977/1005. shell_derive = rectangle-containment + z-range over cached tags (~0.5ms/chunk). FillChunk pre-condition: only after SkeletonGenerated; re-enqueue High if block_tags absent. Wire chunk_streaming.rs to enqueue FillChunk on load-radius entry (no GenerationQueue interaction today). Interstitial token derived from setback_tier (D-235) x position; bulk operations-surface tagged built-infra, not open space. Child 988 = exterior grammar, now 3-step template-filtered (era is wear, not a material gate). Files: gen_queue.rs FillChunk arm, workers/stubs.rs, plugin.rs SkeletonGenerated handler. + +--- +Refinement (/whats-next 2026-07-08): SCOPE PINNED post-PR #173. T-987 (shell derivation) shipped; remaining T-959 scope = floors/walls/materials + interstitial fill. RESOLVED (user): "placed objects" DESCOPED — no D-record, vocabulary, or code path exists; exterior props arrive with the asset pipeline and interiors are Phase 6 (cascade). Title updated accordingly. Doors stay deferred to T-979/T-998 (BuildingPropertyTag.doors = empty, commented "#979"). Confirmed non-gaps (Si sweep): D-217 thresholds 0.63/0.43/0.23 unchanged, initial_condition frozen at plan time and consumed by T-999 (not here); Atlas tile-layer visualization is T-960''s scope — T-959''s deliverable is DATA only; chunk_streaming.rs FillChunk enqueue wiring is a deliberate Phase-5 deferral gated by T-962 (per T-987 close-out), not this ticket. D-233 operations-surface fill split to a new child task (BulkClass-driven, distinct from T-988''s density/setback-driven interstitial type).', NULL, '2026-07-08 15:52:56', '2026-07-08 15:52:56.968', '2026-07-08 15:52:56.968', NULL, 'd04423c0091daedf7a1f1340cb558718', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZWSSHC2S5KPKAZ5QR', 'description', '(architecture_flavor x zone_type x era x density) -> BuildingExteriorTag{wall_material, roof_form, setback_tier, facade_rhythm, color_range}. Vocabulary: WallMaterial/RoofForm/FacadeRhythm/StreetSurface (extends D-228 FloorMaterial). 4-step derivation: flavor filter -> zone bias -> era restrict -> density setback -> interstitial type. Color flavor-bounded/era-adjusted/seed-selected.', '(architecture_flavor x zone_type x era x density) -> BuildingExteriorTag{wall_material, roof_form, setback_tier, facade_rhythm, color_range}. Vocabulary: WallMaterial/RoofForm/FacadeRhythm/StreetSurface (extends D-228 FloorMaterial). 4-step derivation: flavor filter -> zone bias -> era restrict -> density setback -> interstitial type. Color flavor-bounded/era-adjusted/seed-selected. + +--- +Refinement (/whats-next 2026-07-08): AUTHORED-DEPTH v1 (user decision — "deliver what we want to deliver in the first run"; pull Miri + Araminta into the ticket for the content catalog). RESOLVED: +1. Derivation is 3-STEP, era-free (D-235 amendment / D-232 reframe): template visual_bundle filter -> zone_type bias -> density setback + interstitial type. Drop the stale "era restrict" step and "era-adjusted" color — era reads as wear via D-217 condition, never a material gate. +2. Phase timing (per the T-994 precedent, same rationale): BuildingExteriorTag is resolved at GenerateSkeleton dispatch/plan time — where context, catalog, and flavor_ref resolution are available — and stored FROZEN on BuildingPropertyTag; FillChunk only reads it (T-987 purity). Swerve(tag) refs resolve against the full catalog at the same point. +3. trait_catalog_reader must be extended to parse visual_bundle (+ the new fields below) — currently explicitly unparsed ("D-235 territory"). +4. Vocabulary becomes append-only integer-discriminant Rust enums (WallMaterial/RoofForm/FacadeRhythm/StreetSurface), matching the SeedDomain/DistrictType convention; unknown registry strings parse to the axis generic with a tracing warning (patch tolerance). Registry TOML remains the authoring source (V-TT-03/04 validated). +5. Zone bias is a REAL authored table: per-template zone_type -> token weight overrides (integer bps), authored by Miri (cultural meaning) + Araminta (visual coherence) into the catalog TOML alongside visual_bundle; importer-validated (new V-TT check: referenced tokens exist in the template''s own visual_bundle axis). Uniform fallback where unauthored. +6. color_range is a NUMERIC model now: per-color_register authored integer ranges (e.g. HSV/OKLCH components as integer bps bands, D-010 — no floats), one table keyed by the 28 color_register values, Araminta-authored; per-building seed pick within the template''s register band, stored as integers on BuildingExteriorTag. +7. StreetSurface is IN SCOPE here: derived per street/interstitial run with the same template filter (D-235 "same filter as buildings"), stored alongside the interstitial type. +8. setback_tier: fixed 5-tier vocabulary (zero_lot | tight | standard | generous | campus) derived from BlockSkeleton.density_pct bands (the shipped axis; D-220 DensityClass has no code representation) — thresholds documented as calibration placeholders. +Content deliverables (Miri + Araminta): zone-bias table + color_register numeric bands for all 28 templates/registers. Code deliverables: reader extension, enums, derivation fn at skeleton time, importer validation, tests.', NULL, '2026-07-08 15:52:57', '2026-07-08 15:52:57.845', '2026-07-08 15:52:57.845', NULL, '84fc98e8708bedffdd91ad226b6e6a18', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXQGAX5GT4PTTBQYGJCV4', 'description', '(description follows in first append)', '(description follows in first append) + +--- +RECOVERED DESCRIPTION (lost to a same-second create+append LWW tie-break on changelog rebuild; recovered from .pql/changelog/ticket_history/2026-06.sql — pql bug filed upstream): "The remaining Phase-4 spine is T-959 (Layer 5 tile fill) -> T-962 (validation + Phase-5 gate). Four open architecture questions sit directly under that work with no owners: Q-103 (tile-mutator op schema — needed before T-959 Layer 5), Q-102 (cohesion-matrix seam-free variation — needed for tile fill; relates to T-1042), Q-105 (region seasonal/clock state), Q-109 (generation-source dispatch: planet/station/mod/save). Answer or ticket each before T-959 kicks off; Q-103 and Q-102 are the most load-bearing. Also now open from the audit: Q-110 (scale anchoring — blocks the spine ticket) and Q-111 (live-econ coupling — gates T-1007/T-982 sequencing)." + +Refinement (/whats-next 2026-07-08): triage dispositions RESOLVED (user): +- Q-102: RESOLVED-IN-PRACTICE — close with a resolution note citing D-246 voxel_mosaic (noise basis/keying/determinism), T-1080 (meso gradients), T-1077 (ladder), and D-228''s categorical FloorMaterial override stack (authored features composite without bleed). +- Q-103: DEFER with dated note — its own text scopes to Phase 5+ save system; T-987 shipped Layer-5 shell fill without mutators (empirical non-blocker). Revisit at Phase-5 save-system kickoff. +- Q-109: DEFER with dated note — planetary path is the only live source; D-229''s 2026-06-05 amendment carved the station interim. Revisit before stations/mods/save-only bodies. +- Q-105: CLAIM THE D-RECORD NOW (user decision) — design the region transient mechanics as part of this ticket: seasonal phase stepping, tidal term, weather term, snow/ice depth rise/fall, crop-cycle cadence, recompute-on-phase-change; grounded in D-243 §3/§4 region-clock structure (T-1078) and the three shipped punts (freeze/snow model, region climate stack, water-body gen). Claim via pql decisions claim D architecture; resolve Q-105 against it. +Deliverables: governance notes for all four Q-records + the new Q-105 D-record. This ticket gates T-959''s start.', NULL, '2026-07-08 15:52:58', '2026-07-08 15:52:58.293', '2026-07-08 15:52:58.293', NULL, '919e715cde9bec58a6007ae86ed73710', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'title', 'Layer 5 — Chunk→Tile fill (floors, walls, doors, objects)', 'Layer 5 — Chunk→Tile fill (floors, walls, materials, interstitial)', NULL, '2026-07-08 15:53:07', '2026-07-08 15:53:07.204', '2026-07-08 15:53:07.204', NULL, '6a6d7aa508fe95084af2a868e13e0166', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'status', 'backlog', 'in_progress', NULL, '2026-07-08 20:44:50', '2026-07-08 20:44:50.729', '2026-07-08 20:44:50.729', NULL, '0feee4e1684c37612a36da511c19eb0d', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZWSSHC2S5KPKAZ5QR', 'status', 'backlog', 'in_progress', NULL, '2026-07-08 20:44:50', '2026-07-08 20:44:50.734', '2026-07-08 20:44:50.734', NULL, '9beaa140649f2715563a6d9199690295', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FM4VQCXZ9JEXPCM4ZQD5WXNW', 'status', 'backlog', 'in_progress', NULL, '2026-07-08 20:44:50', '2026-07-08 20:44:50.734', '2026-07-08 20:44:50.734', NULL, '9d5208a2ef70d0077dc110cb832cd4f6', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXQGAX5GT4PTTBQYGJCV4', 'status', 'backlog', 'in_progress', NULL, '2026-07-08 20:44:50', '2026-07-08 20:44:50.735', '2026-07-08 20:44:50.735', NULL, '8e5e77b2ba2e990390fcc89fadddd2af', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/ticket_idmap/2026-07.sql b/.pql/changelog/ticket_idmap/2026-07.sql index 2f4b567fd..93f74dbbe 100644 --- a/.pql/changelog/ticket_idmap/2026-07.sql +++ b/.pql/changelog/ticket_idmap/2026-07.sql @@ -10,3 +10,4 @@ INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_ INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FKJ25KG3ADM4M5XRXCVR2GQG', 'T-1094', '2026-07-06 20:04:59.393', '2026-07-06 20:04:59.393', NULL, 'e856fa3f89f621007a058db26aff2a05', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FKR283RTWYXD2M005K65S52M', 'T-1095', '2026-07-07 10:04:11.591', '2026-07-07 10:04:11.591', NULL, 'e0a6ad2c4dce20a444a5af47d49b36c7', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FKRZ29KH70NFAY0Z1GCVR4N0', 'T-1096', '2026-07-07 12:10:06.109', '2026-07-07 12:10:06.109', NULL, 'bdf196e11c21f894bf01c08b10371ab7', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); +INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FM4VQCXZ9JEXPCM4ZQD5WXNW', 'T-1097', '2026-07-08 15:53:13.713', '2026-07-08 15:53:13.713', NULL, 'd74a11a941817eb8f7049dc3a435bfa1', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index af9ed52c3..4c158c882 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -1056,3 +1056,77 @@ Scope note (2026-05-26): the catalog CONTENT authoring is split out to story #10 Refinement (2026-05-26): READY behind 1006/1005. Mechanism only. trait_templates + atlas_body_trait_bias DDL into import_economics.py MIGRATION_SQL + systems-schema.sql, integer-bps weights throughout. draw_body_vocabulary() inside the GenerateSkeleton Rayon task: hard-gate filter -> weight (mods x bias) -> SeedChain weighted draw of K (5/3/1/0 by ComplexityTier) -> trait_selection on skeleton; pin counts toward K; coverage-aware (>=1 template per present district type, else sparsity escape-hatch). pick_district_dominant() at the FillChunk head (zone_affinity-weighted). CI guardrails in importer validation (pool>=5, weight<=60pct, bias per-body). Swerve (1003) + fallback (1004) are child tasks. SeedChain complete, no change. Files: import_economics.py, generator.rs. --- From PR #148 review (Tyre): the trait_templates.geographic_sector column is a pool-narrowing hint for baseline/heritage sub-pools and a SOFT weight (never a gate); it composes with weight_mods.geographic_sector. The draw must join both, not treat the column as a gate. (D-232 corridor = two-part pool.)', 'done', 'high', NULL, 'server', 'D-232', '2026-05-25 19:08:55', '2026-07-08 13:57:27.196', NULL, '1f849322586a58890fdc6985f24ddfb5', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Layer 5 — Chunk→Tile fill (floors, walls, doors, objects)', 'THE primary gap (generator.rs is stubbed). Generate walkable tiles from the block/chunk skeleton: floors, walls, doors, placed objects, using tile-condition thresholds 0.63/0.43/0.23 (D-217). Output is the walkable world data. + +Refinement (round 2, 2026-05-25): Layer-5 fill is the D-230 on-demand derive phase (<5ms shell derivation Void/Wall/FloorSlab/Roof from the cached tags) plus the BuildingExteriorTag visual grammar and material vocabulary (D-235: WallMaterial/RoofForm/FacadeRhythm/StreetSurface, template-filtered (era = maintenance/wear, not a material gate)) plus interstitial and operations-surface fill driven by BulkClass coverage (D-233). Blocked by 957, 976, 977. + +Refinement (2026-05-26): READY behind 1006/957/976/977/1005. shell_derive = rectangle-containment + z-range over cached tags (~0.5ms/chunk). FillChunk pre-condition: only after SkeletonGenerated; re-enqueue High if block_tags absent. Wire chunk_streaming.rs to enqueue FillChunk on load-radius entry (no GenerationQueue interaction today). Interstitial token derived from setback_tier (D-235) x position; bulk operations-surface tagged built-infra, not open space. Child 988 = exterior grammar, now 3-step template-filtered (era is wear, not a material gate). Files: gen_queue.rs FillChunk arm, workers/stubs.rs, plugin.rs SkeletonGenerated handler. + +--- +Refinement (/whats-next 2026-07-08): SCOPE PINNED post-PR #173. T-987 (shell derivation) shipped; remaining T-959 scope = floors/walls/materials + interstitial fill. RESOLVED (user): "placed objects" DESCOPED — no D-record, vocabulary, or code path exists; exterior props arrive with the asset pipeline and interiors are Phase 6 (cascade). Title updated accordingly. Doors stay deferred to T-979/T-998 (BuildingPropertyTag.doors = empty, commented "#979"). Confirmed non-gaps (Si sweep): D-217 thresholds 0.63/0.43/0.23 unchanged, initial_condition frozen at plan time and consumed by T-999 (not here); Atlas tile-layer visualization is T-960''s scope — T-959''s deliverable is DATA only; chunk_streaming.rs FillChunk enqueue wiring is a deliberate Phase-5 deferral gated by T-962 (per T-987 close-out), not this ticket. D-233 operations-surface fill split to a new child task (BulkClass-driven, distinct from T-988''s density/setback-driven interstitial type).', 'backlog', 'high', NULL, 'server', 'D-217', '2026-05-22 17:42:34', '2026-07-08 15:52:56.968', NULL, '2d80b43d71983b54d5ee2010c311cc85', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZWSSHC2S5KPKAZ5QR', 'task', '06FB0TNSRZKXHAYMT7Q6WW3XDC', 'BuildingExteriorTag visual grammar + material vocabulary (template-filtered)', '(architecture_flavor x zone_type x era x density) -> BuildingExteriorTag{wall_material, roof_form, setback_tier, facade_rhythm, color_range}. Vocabulary: WallMaterial/RoofForm/FacadeRhythm/StreetSurface (extends D-228 FloorMaterial). 4-step derivation: flavor filter -> zone bias -> era restrict -> density setback -> interstitial type. Color flavor-bounded/era-adjusted/seed-selected. + +--- +Refinement (/whats-next 2026-07-08): AUTHORED-DEPTH v1 (user decision — "deliver what we want to deliver in the first run"; pull Miri + Araminta into the ticket for the content catalog). RESOLVED: +1. Derivation is 3-STEP, era-free (D-235 amendment / D-232 reframe): template visual_bundle filter -> zone_type bias -> density setback + interstitial type. Drop the stale "era restrict" step and "era-adjusted" color — era reads as wear via D-217 condition, never a material gate. +2. Phase timing (per the T-994 precedent, same rationale): BuildingExteriorTag is resolved at GenerateSkeleton dispatch/plan time — where context, catalog, and flavor_ref resolution are available — and stored FROZEN on BuildingPropertyTag; FillChunk only reads it (T-987 purity). Swerve(tag) refs resolve against the full catalog at the same point. +3. trait_catalog_reader must be extended to parse visual_bundle (+ the new fields below) — currently explicitly unparsed ("D-235 territory"). +4. Vocabulary becomes append-only integer-discriminant Rust enums (WallMaterial/RoofForm/FacadeRhythm/StreetSurface), matching the SeedDomain/DistrictType convention; unknown registry strings parse to the axis generic with a tracing warning (patch tolerance). Registry TOML remains the authoring source (V-TT-03/04 validated). +5. Zone bias is a REAL authored table: per-template zone_type -> token weight overrides (integer bps), authored by Miri (cultural meaning) + Araminta (visual coherence) into the catalog TOML alongside visual_bundle; importer-validated (new V-TT check: referenced tokens exist in the template''s own visual_bundle axis). Uniform fallback where unauthored. +6. color_range is a NUMERIC model now: per-color_register authored integer ranges (e.g. HSV/OKLCH components as integer bps bands, D-010 — no floats), one table keyed by the 28 color_register values, Araminta-authored; per-building seed pick within the template''s register band, stored as integers on BuildingExteriorTag. +7. StreetSurface is IN SCOPE here: derived per street/interstitial run with the same template filter (D-235 "same filter as buildings"), stored alongside the interstitial type. +8. setback_tier: fixed 5-tier vocabulary (zero_lot | tight | standard | generous | campus) derived from BlockSkeleton.density_pct bands (the shipped axis; D-220 DensityClass has no code representation) — thresholds documented as calibration placeholders. +Content deliverables (Miri + Araminta): zone-bias table + color_register numeric bands for all 28 templates/registers. Code deliverables: reader extension, enums, derivation fn at skeleton time, importer validation, tests.', 'backlog', 'medium', NULL, 'server', 'D-235', '2026-05-25 19:11:19', '2026-07-08 15:52:57.844', NULL, '5c1a1bc668ea235f97d6a89ff21b6d45', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXQGAX5GT4PTTBQYGJCV4', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Triage the Phase-4 question set before T-959 starts: Q-102, Q-103, Q-105, Q-109', '(description follows in first append) + +--- +RECOVERED DESCRIPTION (lost to a same-second create+append LWW tie-break on changelog rebuild; recovered from .pql/changelog/ticket_history/2026-06.sql — pql bug filed upstream): "The remaining Phase-4 spine is T-959 (Layer 5 tile fill) -> T-962 (validation + Phase-5 gate). Four open architecture questions sit directly under that work with no owners: Q-103 (tile-mutator op schema — needed before T-959 Layer 5), Q-102 (cohesion-matrix seam-free variation — needed for tile fill; relates to T-1042), Q-105 (region seasonal/clock state), Q-109 (generation-source dispatch: planet/station/mod/save). Answer or ticket each before T-959 kicks off; Q-103 and Q-102 are the most load-bearing. Also now open from the audit: Q-110 (scale anchoring — blocks the spine ticket) and Q-111 (live-econ coupling — gates T-1007/T-982 sequencing)." + +Refinement (/whats-next 2026-07-08): triage dispositions RESOLVED (user): +- Q-102: RESOLVED-IN-PRACTICE — close with a resolution note citing D-246 voxel_mosaic (noise basis/keying/determinism), T-1080 (meso gradients), T-1077 (ladder), and D-228''s categorical FloorMaterial override stack (authored features composite without bleed). +- Q-103: DEFER with dated note — its own text scopes to Phase 5+ save system; T-987 shipped Layer-5 shell fill without mutators (empirical non-blocker). Revisit at Phase-5 save-system kickoff. +- Q-109: DEFER with dated note — planetary path is the only live source; D-229''s 2026-06-05 amendment carved the station interim. Revisit before stations/mods/save-only bodies. +- Q-105: CLAIM THE D-RECORD NOW (user decision) — design the region transient mechanics as part of this ticket: seasonal phase stepping, tidal term, weather term, snow/ice depth rise/fall, crop-cycle cadence, recompute-on-phase-change; grounded in D-243 §3/§4 region-clock structure (T-1078) and the three shipped punts (freeze/snow model, region climate stack, water-body gen). Claim via pql decisions claim D architecture; resolve Q-105 against it. +Deliverables: governance notes for all four Q-records + the new Q-105 D-record. This ticket gates T-959''s start.', 'backlog', 'medium', NULL, 'server', NULL, '2026-06-12 10:40:59', '2026-07-08 15:52:58.293', NULL, 'b6296472a586d43f5a4005acc173ed3d', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Layer 5 — Chunk→Tile fill (floors, walls, materials, interstitial)', 'THE primary gap (generator.rs is stubbed). Generate walkable tiles from the block/chunk skeleton: floors, walls, doors, placed objects, using tile-condition thresholds 0.63/0.43/0.23 (D-217). Output is the walkable world data. + +Refinement (round 2, 2026-05-25): Layer-5 fill is the D-230 on-demand derive phase (<5ms shell derivation Void/Wall/FloorSlab/Roof from the cached tags) plus the BuildingExteriorTag visual grammar and material vocabulary (D-235: WallMaterial/RoofForm/FacadeRhythm/StreetSurface, template-filtered (era = maintenance/wear, not a material gate)) plus interstitial and operations-surface fill driven by BulkClass coverage (D-233). Blocked by 957, 976, 977. + +Refinement (2026-05-26): READY behind 1006/957/976/977/1005. shell_derive = rectangle-containment + z-range over cached tags (~0.5ms/chunk). FillChunk pre-condition: only after SkeletonGenerated; re-enqueue High if block_tags absent. Wire chunk_streaming.rs to enqueue FillChunk on load-radius entry (no GenerationQueue interaction today). Interstitial token derived from setback_tier (D-235) x position; bulk operations-surface tagged built-infra, not open space. Child 988 = exterior grammar, now 3-step template-filtered (era is wear, not a material gate). Files: gen_queue.rs FillChunk arm, workers/stubs.rs, plugin.rs SkeletonGenerated handler. + +--- +Refinement (/whats-next 2026-07-08): SCOPE PINNED post-PR #173. T-987 (shell derivation) shipped; remaining T-959 scope = floors/walls/materials + interstitial fill. RESOLVED (user): "placed objects" DESCOPED — no D-record, vocabulary, or code path exists; exterior props arrive with the asset pipeline and interiors are Phase 6 (cascade). Title updated accordingly. Doors stay deferred to T-979/T-998 (BuildingPropertyTag.doors = empty, commented "#979"). Confirmed non-gaps (Si sweep): D-217 thresholds 0.63/0.43/0.23 unchanged, initial_condition frozen at plan time and consumed by T-999 (not here); Atlas tile-layer visualization is T-960''s scope — T-959''s deliverable is DATA only; chunk_streaming.rs FillChunk enqueue wiring is a deliberate Phase-5 deferral gated by T-962 (per T-987 close-out), not this ticket. D-233 operations-surface fill split to a new child task (BulkClass-driven, distinct from T-988''s density/setback-driven interstitial type).', 'backlog', 'high', NULL, 'server', 'D-217', '2026-05-22 17:42:34', '2026-07-08 15:53:07.203', NULL, '469603b65fd57bb53f9c1e907f3ffedf', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FM4VQCXZ9JEXPCM4ZQD5WXNW', 'task', '06FB0TNSRZKXHAYMT7Q6WW3XDC', 'Operations-surface fill — BulkClass-driven built-infrastructure tag over the non-roofed block remainder (D-233)', 'D-233: for bulk-industry blocks (BulkSolid/BulkLiquid), the non-roofed remainder is operations surface (haul roads, ore pads, conveyor runs, tank berms) — tagged built economic infrastructure, NOT generic interstitial open space. Today skeleton_gen.rs::subdivide_block_footprints computes roofed_coverage_pct from BulkClass but treats 100% of the remainder as generic interstitial (yards/parks/lots); no operations-surface tag exists anywhere. Distinct derivation axis from T-988''s density/setback-driven interstitial TYPE: this is the economic signal (dominant_bulk_class on context). Split out of T-959 during /whats-next refinement 2026-07-08 so it has a visible owner.', 'backlog', 'medium', NULL, 'server', 'D-233', '2026-07-08 15:53:13.711', '2026-07-08 15:53:13.711', NULL, 'b1de043a6d6d9d8191a39ef3a70d9e5b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZKXHAYMT7Q6WW3XDC', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Layer 5 — Chunk→Tile fill (floors, walls, materials, interstitial)', 'THE primary gap (generator.rs is stubbed). Generate walkable tiles from the block/chunk skeleton: floors, walls, doors, placed objects, using tile-condition thresholds 0.63/0.43/0.23 (D-217). Output is the walkable world data. + +Refinement (round 2, 2026-05-25): Layer-5 fill is the D-230 on-demand derive phase (<5ms shell derivation Void/Wall/FloorSlab/Roof from the cached tags) plus the BuildingExteriorTag visual grammar and material vocabulary (D-235: WallMaterial/RoofForm/FacadeRhythm/StreetSurface, template-filtered (era = maintenance/wear, not a material gate)) plus interstitial and operations-surface fill driven by BulkClass coverage (D-233). Blocked by 957, 976, 977. + +Refinement (2026-05-26): READY behind 1006/957/976/977/1005. shell_derive = rectangle-containment + z-range over cached tags (~0.5ms/chunk). FillChunk pre-condition: only after SkeletonGenerated; re-enqueue High if block_tags absent. Wire chunk_streaming.rs to enqueue FillChunk on load-radius entry (no GenerationQueue interaction today). Interstitial token derived from setback_tier (D-235) x position; bulk operations-surface tagged built-infra, not open space. Child 988 = exterior grammar, now 3-step template-filtered (era is wear, not a material gate). Files: gen_queue.rs FillChunk arm, workers/stubs.rs, plugin.rs SkeletonGenerated handler. + +--- +Refinement (/whats-next 2026-07-08): SCOPE PINNED post-PR #173. T-987 (shell derivation) shipped; remaining T-959 scope = floors/walls/materials + interstitial fill. RESOLVED (user): "placed objects" DESCOPED — no D-record, vocabulary, or code path exists; exterior props arrive with the asset pipeline and interiors are Phase 6 (cascade). Title updated accordingly. Doors stay deferred to T-979/T-998 (BuildingPropertyTag.doors = empty, commented "#979"). Confirmed non-gaps (Si sweep): D-217 thresholds 0.63/0.43/0.23 unchanged, initial_condition frozen at plan time and consumed by T-999 (not here); Atlas tile-layer visualization is T-960''s scope — T-959''s deliverable is DATA only; chunk_streaming.rs FillChunk enqueue wiring is a deliberate Phase-5 deferral gated by T-962 (per T-987 close-out), not this ticket. D-233 operations-surface fill split to a new child task (BulkClass-driven, distinct from T-988''s density/setback-driven interstitial type).', 'in_progress', 'high', NULL, 'server', 'D-217', '2026-05-22 17:42:34', '2026-07-08 20:44:50.724', NULL, '421d158cca609e7bb33006da7e561f61', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FM4VQCXZ9JEXPCM4ZQD5WXNW', 'task', '06FB0TNSRZKXHAYMT7Q6WW3XDC', 'Operations-surface fill — BulkClass-driven built-infrastructure tag over the non-roofed block remainder (D-233)', 'D-233: for bulk-industry blocks (BulkSolid/BulkLiquid), the non-roofed remainder is operations surface (haul roads, ore pads, conveyor runs, tank berms) — tagged built economic infrastructure, NOT generic interstitial open space. Today skeleton_gen.rs::subdivide_block_footprints computes roofed_coverage_pct from BulkClass but treats 100% of the remainder as generic interstitial (yards/parks/lots); no operations-surface tag exists anywhere. Distinct derivation axis from T-988''s density/setback-driven interstitial TYPE: this is the economic signal (dominant_bulk_class on context). Split out of T-959 during /whats-next refinement 2026-07-08 so it has a visible owner.', 'in_progress', 'medium', NULL, 'server', 'D-233', '2026-07-08 15:53:13.711', '2026-07-08 20:44:50.734', NULL, '3834cff9f3de3b3667315816a26a26c0', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB0TNSRZWSSHC2S5KPKAZ5QR', 'task', '06FB0TNSRZKXHAYMT7Q6WW3XDC', 'BuildingExteriorTag visual grammar + material vocabulary (template-filtered)', '(architecture_flavor x zone_type x era x density) -> BuildingExteriorTag{wall_material, roof_form, setback_tier, facade_rhythm, color_range}. Vocabulary: WallMaterial/RoofForm/FacadeRhythm/StreetSurface (extends D-228 FloorMaterial). 4-step derivation: flavor filter -> zone bias -> era restrict -> density setback -> interstitial type. Color flavor-bounded/era-adjusted/seed-selected. + +--- +Refinement (/whats-next 2026-07-08): AUTHORED-DEPTH v1 (user decision — "deliver what we want to deliver in the first run"; pull Miri + Araminta into the ticket for the content catalog). RESOLVED: +1. Derivation is 3-STEP, era-free (D-235 amendment / D-232 reframe): template visual_bundle filter -> zone_type bias -> density setback + interstitial type. Drop the stale "era restrict" step and "era-adjusted" color — era reads as wear via D-217 condition, never a material gate. +2. Phase timing (per the T-994 precedent, same rationale): BuildingExteriorTag is resolved at GenerateSkeleton dispatch/plan time — where context, catalog, and flavor_ref resolution are available — and stored FROZEN on BuildingPropertyTag; FillChunk only reads it (T-987 purity). Swerve(tag) refs resolve against the full catalog at the same point. +3. trait_catalog_reader must be extended to parse visual_bundle (+ the new fields below) — currently explicitly unparsed ("D-235 territory"). +4. Vocabulary becomes append-only integer-discriminant Rust enums (WallMaterial/RoofForm/FacadeRhythm/StreetSurface), matching the SeedDomain/DistrictType convention; unknown registry strings parse to the axis generic with a tracing warning (patch tolerance). Registry TOML remains the authoring source (V-TT-03/04 validated). +5. Zone bias is a REAL authored table: per-template zone_type -> token weight overrides (integer bps), authored by Miri (cultural meaning) + Araminta (visual coherence) into the catalog TOML alongside visual_bundle; importer-validated (new V-TT check: referenced tokens exist in the template''s own visual_bundle axis). Uniform fallback where unauthored. +6. color_range is a NUMERIC model now: per-color_register authored integer ranges (e.g. HSV/OKLCH components as integer bps bands, D-010 — no floats), one table keyed by the 28 color_register values, Araminta-authored; per-building seed pick within the template''s register band, stored as integers on BuildingExteriorTag. +7. StreetSurface is IN SCOPE here: derived per street/interstitial run with the same template filter (D-235 "same filter as buildings"), stored alongside the interstitial type. +8. setback_tier: fixed 5-tier vocabulary (zero_lot | tight | standard | generous | campus) derived from BlockSkeleton.density_pct bands (the shipped axis; D-220 DensityClass has no code representation) — thresholds documented as calibration placeholders. +Content deliverables (Miri + Araminta): zone-bias table + color_register numeric bands for all 28 templates/registers. Code deliverables: reader extension, enums, derivation fn at skeleton time, importer validation, tests.', 'in_progress', 'medium', NULL, 'server', 'D-235', '2026-05-25 19:11:19', '2026-07-08 20:44:50.734', NULL, '45b8da75039bba5fb1037a6ad8f577ff', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXQGAX5GT4PTTBQYGJCV4', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Triage the Phase-4 question set before T-959 starts: Q-102, Q-103, Q-105, Q-109', '(description follows in first append) + +--- +RECOVERED DESCRIPTION (lost to a same-second create+append LWW tie-break on changelog rebuild; recovered from .pql/changelog/ticket_history/2026-06.sql — pql bug filed upstream): "The remaining Phase-4 spine is T-959 (Layer 5 tile fill) -> T-962 (validation + Phase-5 gate). Four open architecture questions sit directly under that work with no owners: Q-103 (tile-mutator op schema — needed before T-959 Layer 5), Q-102 (cohesion-matrix seam-free variation — needed for tile fill; relates to T-1042), Q-105 (region seasonal/clock state), Q-109 (generation-source dispatch: planet/station/mod/save). Answer or ticket each before T-959 kicks off; Q-103 and Q-102 are the most load-bearing. Also now open from the audit: Q-110 (scale anchoring — blocks the spine ticket) and Q-111 (live-econ coupling — gates T-1007/T-982 sequencing)." + +Refinement (/whats-next 2026-07-08): triage dispositions RESOLVED (user): +- Q-102: RESOLVED-IN-PRACTICE — close with a resolution note citing D-246 voxel_mosaic (noise basis/keying/determinism), T-1080 (meso gradients), T-1077 (ladder), and D-228''s categorical FloorMaterial override stack (authored features composite without bleed). +- Q-103: DEFER with dated note — its own text scopes to Phase 5+ save system; T-987 shipped Layer-5 shell fill without mutators (empirical non-blocker). Revisit at Phase-5 save-system kickoff. +- Q-109: DEFER with dated note — planetary path is the only live source; D-229''s 2026-06-05 amendment carved the station interim. Revisit before stations/mods/save-only bodies. +- Q-105: CLAIM THE D-RECORD NOW (user decision) — design the region transient mechanics as part of this ticket: seasonal phase stepping, tidal term, weather term, snow/ice depth rise/fall, crop-cycle cadence, recompute-on-phase-change; grounded in D-243 §3/§4 region-clock structure (T-1078) and the three shipped punts (freeze/snow model, region climate stack, water-body gen). Claim via pql decisions claim D architecture; resolve Q-105 against it. +Deliverables: governance notes for all four Q-records + the new Q-105 D-record. This ticket gates T-959''s start.', 'in_progress', 'medium', NULL, 'server', NULL, '2026-06-12 10:40:59', '2026-07-08 20:44:50.735', NULL, 'd598f7732eb21ee703709653dd76c509', 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); diff --git a/governance/README.md b/governance/README.md index 01b3336fa..3a1b86c0c 100644 --- a/governance/README.md +++ b/governance/README.md @@ -345,7 +345,6 @@ line in place — keep the Q-record for the audit trail rather than deleting it. - [Q-045: Axis 11 — Network Footprint NPC tag](questions/content.md#q-045-axis-11--network-footprint-npc-tag) — _content_ - [Q-047: Mobile environment social arc — structural representation of journey timeline](questions/content.md#q-047-mobile-environment-social-arc--structural-representation-of-journey-timeline) — _content_ - [Q-048: DramaDensity enum naming — 3-level vs 5-level](questions/content.md#q-048-dramadensity-enum-naming--3-level-vs-5-level) — _content_ -- [Q-049: ObjectTag vocabulary co-maintenance — Miri and Araminta shared dependency](questions/content.md#q-049-objecttag-vocabulary-co-maintenance--miri-and-araminta-shared-dependency) — _content_ - [Q-050: Assassination difficulty synthesis — formal spec combining stored baseline with on-demand computation](questions/content.md#q-050-assassination-difficulty-synthesis--formal-spec-combining-stored-baseline-with-on-demand-computation) — _content_ - [Q-051: Speech bubble indicator over speaking NPCs](questions/perception.md#q-051-speech-bubble-indicator-over-speaking-npcs) — _perception_ - [Q-052: Storyteller hint delivery — parallel diegetic channels when player does not act](questions/content.md#q-052-storyteller-hint-delivery--parallel-diegetic-channels-when-player-does-not-act) — _content_ @@ -432,6 +431,7 @@ line in place — keep the Q-record for the audit trail rather than deleting it. - [Q-043: Station internal transit — intra-station transport system between districts](questions/content.md#q-043-station-internal-transit--intra-station-transport-system-between-districts) — _content_ - [Q-044: Gate-train integration — do transport vehicles use gates directly or transfer on each side](questions/content.md#q-044-gate-train-integration--do-transport-vehicles-use-gates-directly-or-transfer-on-each-side) — _content_ - [Q-046: Departure schedule model — departure windows as generator output for docked vessels](questions/architecture.md#q-046-departure-schedule-model--departure-windows-as-generator-output-for-docked-vessels) — _architecture_ +- [Q-049: ObjectTag vocabulary co-maintenance — Miri and Araminta shared dependency](questions/content.md#q-049-objecttag-vocabulary-co-maintenance--miri-and-araminta-shared-dependency) — _content_ - [Q-057: Composable behavior generation — decompose culture × role × context into assembled behaviors](questions/content.md#q-057-composable-behavior-generation--decompose-culture--role--context-into-assembled-behaviors) — _content_ - [Q-059: PlatformInfo full interface scope](questions/architecture.md#q-059-platforminfo-full-interface-scope) — _architecture_ - [Q-064: 3D planet generator for wiki system screenshots](questions/architecture.md#q-064-3d-planet-generator-for-wiki-system-screenshots) — _architecture_