chore(meta): Layer 5 batch to review (PR #174) + T-1098 interstitial follow-up

T-988/T-959/T-1097/T-1057 → review. T-1098 filed (interstitial-fill,
deferred slice of T-959 with design brief).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 10:34:41 +02:00
co-authored by Claude Fable 5
parent b25860dd04
commit 5a31a50874
3 changed files with 39 additions and 0 deletions
@@ -1156,3 +1156,7 @@ 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 ('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;
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', 'in_progress', 'review', NULL, '2026-07-11 08:34:23', '2026-07-11 08:34:23.127', '2026-07-11 08:34:23.127', NULL, '3f73ba07eb259af532e55efd90b94457', 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', 'in_progress', 'review', NULL, '2026-07-11 08:34:23', '2026-07-11 08:34:23.130', '2026-07-11 08:34:23.130', NULL, '2bb7676b99d3663b810cddc0a345e2c4', 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', 'in_progress', 'review', NULL, '2026-07-11 08:34:23', '2026-07-11 08:34:23.130', '2026-07-11 08:34:23.130', NULL, '38f22584bb357e186b0b816bc16e55d3', 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', 'in_progress', 'review', NULL, '2026-07-11 08:34:23', '2026-07-11 08:34:23.130', '2026-07-11 08:34:23.130', NULL, '50bab55442eba405f747c5002ec8093d', 2) ON CONFLICT(hash) DO NOTHING;
+1
View File
@@ -11,3 +11,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 ('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);
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FMZZ0184R5B8YMFJW5NWPNXW', 'T-1098', '2026-07-11 07:02:23.299', '2026-07-11 07:02:23.299', NULL, '44a6954e72fc725b13df30b6b59501ec', 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);
+34
View File
@@ -1130,3 +1130,37 @@ Refinement (/whats-next 2026-07-08): triage dispositions RESOLVED (user):
- 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);
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 ('06FMZZ0184R5B8YMFJW5NWPNXW', 'task', '06FB0TNSRZKXHAYMT7Q6WW3XDC', 'Interstitial fill — tile character between building footprints (setback-driven open space vs. built ops-surface) at chunk derive', 'Deferred slice of T-959 (Layer 5 fill), split out during /whats-next review 2026-07-08. T-988 landed BuildingExteriorTag.setback_tier + BlockSkeleton.interstitial_character (OpenSpace|OperationsSurface, D-233 bulk-driven), and FillChunk now reads materials onto Wall/Roof shell voxels. What remains: actually FILL the between-footprint tiles at chunk-derive time — resolve each non-footprint ground tile to its character (setback-driven interstitial type: void/court/garden/plaza/dock_slip/market_pad/open_lawn per D-235; or the block''s OperationsSurface tag for bulk industry per D-233/T-1097).\n\nWHY DEFERRED (Dudley''s rationale, PR review): FillChunk''s work item today carries only Vec<BuildingPropertyTag> (per-building) with zero block-level metadata; setback_tier is per-building on exterior, but ''the gap between buildings'' is block-shaped. And ''what is an interstitial tile inside a 64m chunk derive'' is a real geometry question (the BSP leaves that lost the coverage roll in subdivide_block_footprints? a separate ground-fill pass?) that needs a design pass, not a guess. Nothing consumes FillChunk in production until Phase 5, so this blocks nothing today.\n\nSCOPE: (1) thread block-level metadata (interstitial_character + setback/density) into the FillChunk work item; (2) decide + implement the ground-fill geometry (which chunk tiles are interstitial vs footprint-covered vs street); (3) resolve each to its D-235 interstitial type / D-233 ops-surface tag; (4) stays pure/cache-free (T-987). Write a short brief pinning the geometry model before implementing.', 'backlog', 'medium', NULL, 'server', 'D-235', '2026-07-11 07:02:23.297', '2026-07-11 07:02:23.297', NULL, '686857e9be72d86ffaadb08b37298f50', 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.', 'review', 'medium', NULL, 'server', 'D-235', '2026-05-25 19:11:19', '2026-07-11 08:34:23.126', NULL, 'ecb09db587b56ff2b5b53dd1abef0085', 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).', 'review', 'high', NULL, 'server', 'D-217', '2026-05-22 17:42:34', '2026-07-11 08:34:23.130', NULL, '62adad6eba716c26c983f29f5eef701e', 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.', 'review', 'medium', NULL, 'server', NULL, '2026-06-12 10:40:59', '2026-07-11 08:34:23.130', NULL, '8081e7d8a6e0e4a9620dd98b7765275d', 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.', 'review', 'medium', NULL, 'server', 'D-233', '2026-07-08 15:53:13.711', '2026-07-11 08:34:23.130', NULL, '9e81bcabefcaeefeeff5ab0da3dde4f6', 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);