chore(meta): changelog + pql — batch 6 closed (T-1049/T-1051/T-1053 done; stories T-1200..T-1204 created under T-961)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 23:11:44 +02:00
co-authored by Claude Fable 5
parent 8db1d92733
commit 3f63ccf8ce
3 changed files with 291 additions and 0 deletions
+50
View File
@@ -3061,3 +3061,53 @@ 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 ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'assigned_to', NULL, 'qatux', NULL, '2026-07-25 20:54:36', '2026-07-25 20:54:36.535', '2026-07-25 20:54:36.535', NULL, '8d500e97152680a0b4b83d45e614cff9', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'status', 'in_progress', 'review', NULL, '2026-07-25 21:01:13', '2026-07-25 21:01:13.522', '2026-07-25 21:01:13.522', NULL, 'c1c914bd42a1bbce8315aecb9f722d40', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'status', 'in_progress', 'review', NULL, '2026-07-25 21:01:13', '2026-07-25 21:01:13.529', '2026-07-25 21:01:13.529', NULL, '01322543711363e4d353f07a045a5255', 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 ('06FBPTXPPHC9FZ4T0GNKR615PR', 'description', '(description follows in first append)
Refinement (batch-5 Si pass, 2026-07-25) GAPS. Formally deferred rather than refined into an
actionable brief-writing task now.
WHY: T-1051 was filed as a child of T-1049''s per-class breakdown (the fable-ous.md audit T-1049 cites,
2026-06-12). T-1049 itself is HELD pending the same sprite-to-3D re-scope as T-1050 (its "Refinement
2026-06-16 READY" block still frames the per-class stories, briefs, and catalog files in sprite-era
language, and its own text says "sequence T-1049 to consume T-1050''s conventions where they overlap"
so T-1049 cannot be un-held before T-1050 lands). T-1051 is one layer further down that same
dependency: it cannot be meaningfully scoped (what does a "one-page brief" even template against?)
until (1) T-1050 lands conventions.md + the catalog structure a brief would reference, AND (2) T-1049
is re-scoped and un-held (it owns the per-class story breakdown T-1051 is part of).
Zero repo hits exist for lamp posts, barns, TVs, or billboards beyond the T-750 epic description text
(confirmed by T-1049''s own audit matrix) there is no existing partial work this ticket would be
resuming, so there is no cost to deferring it cleanly.
DISPOSITION: blocker edge wired (T-1051 blocked-by T-1049). When T-1049 is re-scoped (a future Si
pass, after T-1050 lands), that re-scope explicitly decides whether lamp posts/barns/TVs/billboards
get real briefs or a formal deferral note (T-1049''s existing block already leaned toward "explicitly
record which classes are deferred" for cars via Q-067 — the same treatment likely applies to these
four, but that is T-1049''s call when re-scoped, not this ticket''s in isolation).', '(description follows in first append)
Refinement (batch-5 Si pass, 2026-07-25) GAPS. Formally deferred rather than refined into an
actionable brief-writing task now.
WHY: T-1051 was filed as a child of T-1049''s per-class breakdown (the fable-ous.md audit T-1049 cites,
2026-06-12). T-1049 itself is HELD pending the same sprite-to-3D re-scope as T-1050 (its "Refinement
2026-06-16 READY" block still frames the per-class stories, briefs, and catalog files in sprite-era
language, and its own text says "sequence T-1049 to consume T-1050''s conventions where they overlap"
so T-1049 cannot be un-held before T-1050 lands). T-1051 is one layer further down that same
dependency: it cannot be meaningfully scoped (what does a "one-page brief" even template against?)
until (1) T-1050 lands conventions.md + the catalog structure a brief would reference, AND (2) T-1049
is re-scoped and un-held (it owns the per-class story breakdown T-1051 is part of).
Zero repo hits exist for lamp posts, barns, TVs, or billboards beyond the T-750 epic description text
(confirmed by T-1049''s own audit matrix) there is no existing partial work this ticket would be
resuming, so there is no cost to deferring it cleanly.
DISPOSITION: blocker edge wired (T-1051 blocked-by T-1049). When T-1049 is re-scoped (a future Si
pass, after T-1050 lands), that re-scope explicitly decides whether lamp posts/barns/TVs/billboards
get real briefs or a formal deferral note (T-1049''s existing block already leaned toward "explicitly
record which classes are deferred" for cars via Q-067 — the same treatment likely applies to these
four, but that is T-1049''s call when re-scoped, not this ticket''s in isolation).
DELIVERED BY DEFERRAL (2026-07-25, PR #213): docs/assets/briefs/deferred.md is the formal deferral record this ticket''s title asked for lamp posts, barns, TVs, billboards each recorded with rationale (Phase-4 walkability needs exteriors; these are set-dressing for a walkable world Phase 6 or late-4 polish), the Q-067 precedent, and the revisit trigger (Phase-4 exterior generation complete). Ratified on T-1049 (batch-6 activation), reviewed by Tyre (PR #213 including his ruling that no D-record is needed) with the axis-completeness note ensuring the register accounts for all four D-235 axes. The ''or record formal deferral'' arm of this ticket''s deliverable is satisfied; closing done.', NULL, '2026-07-25 21:11:23', '2026-07-25 21:11:23.912', '2026-07-25 21:11:23.912', NULL, 'e4bc916a158945bf54d40d9585473f90', 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 ('06FBPTXPPHC9FZ4T0GNKR615PR', 'status', 'backlog', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.653', '2026-07-25 21:11:27.653', NULL, 'dafe6739e5ec3e606557ef89f48a59e5', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'status', 'review', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.660', '2026-07-25 21:11:27.660', NULL, 'ec46f47d92d5c6fe9490a72aa929c9f2', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'status', 'review', 'done', NULL, '2026-07-25 21:11:27', '2026-07-25 21:11:27.661', '2026-07-25 21:11:27.661', NULL, '8cebf78377da9513e22843c0e0c72a02', 2) ON CONFLICT(hash) DO NOTHING;
+240
View File
@@ -5041,3 +5041,243 @@ framing, lists araminta''s actual current/open tickets.
SEQUENCING: independent of T-1049 (different files, no shared input) both can
run in the same batch.', 'review', 'medium', 'qatux', 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 21:01:13.529', NULL, '39fd0f0834893092949d4ccbb46647cf', 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 ('06FSP7EJPBDP1JB4FFMG0BV11M', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Station walls asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/station-walls.md — the one-page contract: D-235 wall-axis tokens for station/urban/industrial types, palette.md §3 register rows, conventions.md naming/mask/texture rules, image-gen -> glb-gen -> promotion into client/assets/models/ + manifest.json. Prior art: renderer/models/wall_structural.tscn (unrendered GLB) — re-promote through the current 3D pipeline. Acceptance per the brief (starter assets enter manifest.json at ''planned''). Roof/facade/street textures ride this class family''s texture convention as a follow-on (deferred.md axis-completeness note). Q-119 generic-parent milestone-0 conditionality noted in the brief, unresolved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-07-25 21:10:50.802', '2026-07-25 21:10:50.802', NULL, 'de3474e555baaa5182138e98d70b2b42', 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 ('06FSP7F5THEPJWGV04B4542SFR', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Rural walls asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/rural-walls.md — D-235 wall-axis tokens for rural/vernacular types (stone/timber/rammed-earth/stucco/brick), palette.md §3 register rows, conventions.md rules, image-gen -> glb-gen -> promotion path. Clean slate, no prior art. Acceptance per the brief. Q-119 conditionality noted, unresolved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-07-25 21:10:55.700', '2026-07-25 21:10:55.700', NULL, 'a55a60ef67f9f81cd46804f68704dc07', 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 ('06FSP7FZ4F20AMWCXSP23Q5H54', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Doors asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/doors.md — door models (no D-235 axis; D-257 toon default), conventions.md rules incl. the BINDING negative constraint: no baked state-file variants (door_open/door_closed) — D-231''s initial_state (Open/Closed/Locked/Sealed) is runtime; the credential field (None/TemporalWindow/Corporate/Resident/Authority/Social) is independent metadata. The Phase-5 rendering mechanism attaches to initial_state and is explicitly out of this story''s scope. Visual asset only — does not touch T-979/T-998 DoorSpec derivation logic. Acceptance per the brief.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-07-25 21:11:02.179', '2026-07-25 21:11:02.179', NULL, '9c04e928128ecaca82310e838055ca28', 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 ('06FSP7GX9J2SSHE7ZJB3PH0FEW', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Floors asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/floors.md — floor surface textures on D-228''s FloorMaterial axis (distinct from D-235 StreetSurface), texture-only pipeline (no Trellis step), conventions.md D-235-token-style texture naming, palette.md treatment. Acceptance per the brief. Q-119 conditionality noted, unresolved.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-07-25 21:11:09.900', '2026-07-25 21:11:09.900', NULL, '9cc31cc39392291e6ee4ae075428bea0', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSP7HT5ES8D83VZA6ETACRAW', 'story', '06FB0TNSRXDCJS4P9Z5JQ1DAAM', 'Furniture/props asset production', 'Per-class production story (T-1049 breakdown, batch 6). Brief: docs/assets/briefs/furniture-props.md — interior furniture + small props (manifest categories furniture|props), D-257 toon treatment, conventions.md naming/mask/footprint_tiles rules. FIRST acceptance: promote + rename the 4 promotable spike GLBs (baroque_table, modernist_chair, scifi_desk + props/lion_statue) into client/assets/models/ + manifest.json per D-241 — no new generation needed; vw_beetle stays excluded (Q-067 car deferral, see briefs/deferred.md). Note: spike GLB binaries are gitignored — regenerate or restore locally at promotion time per the spike README.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-07-25 21:11:17.291', '2026-07-25 21:11:17.291', NULL, '6157e2bfc58eb3ce34ba64396e4bd162', 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 ('06FBPTXPPHC9FZ4T0GNKR615PR', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Author one-page briefs (or record formal deferral) for lamp posts, barns, TVs, billboards', '(description follows in first append)
Refinement (batch-5 Si pass, 2026-07-25) GAPS. Formally deferred rather than refined into an
actionable brief-writing task now.
WHY: T-1051 was filed as a child of T-1049''s per-class breakdown (the fable-ous.md audit T-1049 cites,
2026-06-12). T-1049 itself is HELD pending the same sprite-to-3D re-scope as T-1050 (its "Refinement
2026-06-16 READY" block still frames the per-class stories, briefs, and catalog files in sprite-era
language, and its own text says "sequence T-1049 to consume T-1050''s conventions where they overlap"
so T-1049 cannot be un-held before T-1050 lands). T-1051 is one layer further down that same
dependency: it cannot be meaningfully scoped (what does a "one-page brief" even template against?)
until (1) T-1050 lands conventions.md + the catalog structure a brief would reference, AND (2) T-1049
is re-scoped and un-held (it owns the per-class story breakdown T-1051 is part of).
Zero repo hits exist for lamp posts, barns, TVs, or billboards beyond the T-750 epic description text
(confirmed by T-1049''s own audit matrix) there is no existing partial work this ticket would be
resuming, so there is no cost to deferring it cleanly.
DISPOSITION: blocker edge wired (T-1051 blocked-by T-1049). When T-1049 is re-scoped (a future Si
pass, after T-1050 lands), that re-scope explicitly decides whether lamp posts/barns/TVs/billboards
get real briefs or a formal deferral note (T-1049''s existing block already leaned toward "explicitly
record which classes are deferred" for cars via Q-067 — the same treatment likely applies to these
four, but that is T-1049''s call when re-scoped, not this ticket''s in isolation).
DELIVERED BY DEFERRAL (2026-07-25, PR #213): docs/assets/briefs/deferred.md is the formal deferral record this ticket''s title asked for lamp posts, barns, TVs, billboards each recorded with rationale (Phase-4 walkability needs exteriors; these are set-dressing for a walkable world Phase 6 or late-4 polish), the Q-067 precedent, and the revisit trigger (Phase-4 exterior generation complete). Ratified on T-1049 (batch-6 activation), reviewed by Tyre (PR #213 including his ruling that no D-record is needed) with the axis-completeness note ensuring the register accounts for all four D-235 axes. The ''or record formal deferral'' arm of this ticket''s deliverable is satisfied; closing done.', 'backlog', 'medium', NULL, 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 21:11:23.912', NULL, '8d2a1c6f1e65787cd02d4f2daf01db8a', 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 ('06FBPTXPPHC9FZ4T0GNKR615PR', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Author one-page briefs (or record formal deferral) for lamp posts, barns, TVs, billboards', '(description follows in first append)
Refinement (batch-5 Si pass, 2026-07-25) GAPS. Formally deferred rather than refined into an
actionable brief-writing task now.
WHY: T-1051 was filed as a child of T-1049''s per-class breakdown (the fable-ous.md audit T-1049 cites,
2026-06-12). T-1049 itself is HELD pending the same sprite-to-3D re-scope as T-1050 (its "Refinement
2026-06-16 READY" block still frames the per-class stories, briefs, and catalog files in sprite-era
language, and its own text says "sequence T-1049 to consume T-1050''s conventions where they overlap"
so T-1049 cannot be un-held before T-1050 lands). T-1051 is one layer further down that same
dependency: it cannot be meaningfully scoped (what does a "one-page brief" even template against?)
until (1) T-1050 lands conventions.md + the catalog structure a brief would reference, AND (2) T-1049
is re-scoped and un-held (it owns the per-class story breakdown T-1051 is part of).
Zero repo hits exist for lamp posts, barns, TVs, or billboards beyond the T-750 epic description text
(confirmed by T-1049''s own audit matrix) there is no existing partial work this ticket would be
resuming, so there is no cost to deferring it cleanly.
DISPOSITION: blocker edge wired (T-1051 blocked-by T-1049). When T-1049 is re-scoped (a future Si
pass, after T-1050 lands), that re-scope explicitly decides whether lamp posts/barns/TVs/billboards
get real briefs or a formal deferral note (T-1049''s existing block already leaned toward "explicitly
record which classes are deferred" for cars via Q-067 — the same treatment likely applies to these
four, but that is T-1049''s call when re-scoped, not this ticket''s in isolation).
DELIVERED BY DEFERRAL (2026-07-25, PR #213): docs/assets/briefs/deferred.md is the formal deferral record this ticket''s title asked for lamp posts, barns, TVs, billboards each recorded with rationale (Phase-4 walkability needs exteriors; these are set-dressing for a walkable world Phase 6 or late-4 polish), the Q-067 precedent, and the revisit trigger (Phase-4 exterior generation complete). Ratified on T-1049 (batch-6 activation), reviewed by Tyre (PR #213 including his ruling that no D-record is needed) with the axis-completeness note ensuring the register accounts for all four D-235 axes. The ''or record formal deferral'' arm of this ticket''s deliverable is satisfied; closing done.', 'done', 'medium', NULL, 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 21:11:27.653', NULL, 'e37d290f426f3bf7c1ab4d979f29088d', 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 ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Refine T-961 into per-asset-class stories, each gated on a written brief', '(description follows in first append)
Filed 2026-06-12 from the fable-ous.md audit (S-43; citations adversarially verified).
T-961 (two-sentence description, no acceptance criteria, no brief links) is the only asset-production ticket under T-750, while the epic names eight classes; cars, barns, TVs, billboards appear in NO ticket at all (verified against the full corpus). Refine into child stories per class station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (billboards/TVs), rural structures (barns) each gated on a one-page brief; explicitly record which classes are deferred (cars: see Q-067 audit note). Decide Q-119 (generic-parent placeholder set as first milestone) before sequencing.
Audit per-class status matrix (verified 2026-06-12):
# docs/assets/ survey (13 files + downloads/)
| File | One-line summary |
|---|---|
| README.md | Master index: audio/visual/video pipelines, status vocabulary (planned/in-progress/placeholder/final), structure that promises visual/{sprites,furniture,tilesets,icons,effects}.md |
| _templates/audio.md | Row + detailed-entry template for audio assets |
| _templates/sprite.md | Row + detailed-entry template for sprites (ID prefixes SPR/FUR/TILE/ICO/FX, status, method, directions columns) |
| _templates/video.md | Row + detailed-entry template for video |
| audio/README.md | ACTIVE production-status catalog per-category counts table (12 assets tracked), generation tools, bus architecture |
| audio/palette.md | Sonic style bible |
| audio/ambient.md / sfx.md / ui.md | Per-category audio asset tables |
| visual/README.md | STUB links 5 category files that do not exist, all counts 0 |
| visual/palette.md | STUB 4 bullet decisions (D-019/D-033/D-045, "functional warmth"), defers to art-direction workshop |
| video/README.md / palette.md | Stubs |
| downloads/ | Purchased character sources (Quaternius Universal Base Characters, Modular Character Outfits FBX) characters only |
# Per-asset-class matrix
| Class | Written brief | Style guide | Naming/res conventions | Gen path | Produced assets | Tickets |
|---|---|---|---|---|---|---|
| Walls (station) | art-direction workshop-outcomes.md §3.3 (v0.1.1 set, pre-cascade) + docs/design/placeholder-art-spec-v01.md §2.1 | visual-grammar-v01.md §1/§4.3, workshop-outcomes §1.8 era palette (partly superseded by D-235), D-235 WallMaterial vocab | renderer/README.md:80-95 (`<model>_<dir>_<res>.png`, 102425664 chain) | working renderer/models/wall_structural.tscn rendered | wall_structural ×4 dirs in client/assets/sprites/; wall_bar_green model unrendered; 2 textures | T-961 (backlog), T-988 (token vocab, backlog) |
| Walls (rural) | none found | D-235 tokens only (timber/rammed-earth etc.) | renderer/README.md (generic) | same path, unused | none | T-961 text mention only |
| Doors | placeholder-art-spec-v01.md §2.1 (procedural rects, v0.1) + workshop-outcomes §3.3 `door_sliding` | none for generated world | none for open/closed state frames | same path, unused | none | T-979/T-998 (DoorSpec logical only), T-961 |
| Floors | placeholder-art-spec-v01.md §2.1 + workshop-outcomes §3.3 (4 floor sprites) | D-228 FloorMaterial axis (open vocab) | 64px visual tile (placeholder-art-spec §1) | same path, unused | none client/assets/tilesets/ is .gitkeep only | T-959 (tile fill, logical), T-961 |
| Styled buildings | D-232 + D-235 + wiki/economics/architecture_trait_catalog.toml (T-1005 done, ~35 visual bundles) | D-235 material/color-register grammar tokens only, no rendered art direction | tokenfallback-parent chain (catalog header :34-44) | no model/texture path defined for building exteriors | none | T-977, T-988, T-994, T-1004 (all backlog), T-1005 (done) |
| Furniture | docs/assets/visual/furniture.md MISSING (linked); workshop-outcomes §3.3 lists 8-10 objects (pre-cascade) | era table §1.8 only | character-asset-organization.md explicitly excludes furniture ("follow Trellis spike conventions") | proven in spike | spikes/3dpipeline/models/furniture/ ×3 GLB (unpromoted); zero in client/assets | T-961, T-995 (ObjectTag vocab, backlog) |
| Items | docs/design/icon-set-v01.md (HUD/inventory icons only) | D-086 icon constraints | SVG icon_ prefix (client/assets/icons/) | n/a for icons | 13 SVGs in client/assets/icons/ | none for in-world item sprites |
| Cars/vehicles | none found | none | none | spike only | spikes/3dpipeline/models/props/vw_beetle.glb (spike) | none Q-067 open ("driveable vs NPC traffic?") |
| Lamp posts | none found (zero repo hits) | none | none | unused | none | T-961 text mention only |
| Barns | none found (only T-750 epic text) | none | none | unused | none | none |
| TVs | none found (only T-750 epic text) | none | none | unused | none | none |
| Billboards | none found (only T-750 epic text; other hits = LOD impostors) | none | none | unused | none | none |
| Characters (reference class the working model) | docs/architecture/character-asset-organization.md + docs/design/character-visuals-spec.md | yes | full (manifest.json, seg_ naming, body-type keys) | proven end-to-end | 1002 files in client/assets/characters/ | done |
# Generation path (verified files)
image-gen (.claude/skills/image-gen/SKILL.md + scripts/image_connector.py, Gemini) glb-gen (SKILL.md + tooling/db/trellis_connector.py + tooling/trellis-batch.sh + Blender postprocess scripts) sprite-gen (SKILL.md + scripts/render.sh) renderer/ (project.godot, render_scene.tscn, render_export.gd; D-019 camera, 3-light rig, 1024/256/64 chain) client/assets/sprites/. renderer/output/ holds only .gdignore (intermediates gitignored).
# Produced assets in client/assets (non-.import files)
audio 16 · characters 1002 · fonts 3 · icons 13 · planets 7 · sprites 9 (npc_generic ×4, wall_structural ×4, .gitkeep) · theme 1 · tilesets 1 (.gitkeep only)
---
Refinement (2026-06-16, /whats-next Si pass) READY. This is a PLANNING task: break T-961 into per-class child stories.
CLASS LIST (8 stories, parented under T-961, each gated on a one-page brief): station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (TVs/billboards), rural structures (barns).
- CARS (9th class named in T-750): DEFERRED Q-067 needs a phase decision (Phase-4 deliverable vs Phase-5+) before any car story. File a deferral note, not a story.
- Q-119 (generic-parent placeholder set as milestone-0): NOT a blocker sequencing only. On each relevant story note that the generic parents (generic_wall/roof/facade/street + generic_door/floor/furniture; D-235 / wiki/economics/architecture_trait_catalog.toml:33-41) are milestone-0 IF Q-119 resolves "yes".
BRIEF TEMPLATE: none exists. Create docs/assets/_templates/asset-brief.md (scope · visual reference · naming/resolution conventions · generation path · acceptance), or adopt docs/_templates/design.md. Each story states where its brief + catalog file live under docs/assets/visual/.
READ before filing: docs/assets/README.md, docs/design/{placeholder-art-spec-v01,visual-grammar-v01}.md, docs/workshops/art-direction-mood-board/workshop-outcomes.md, D-235/D-228/D-232, docs/architecture/character-asset-organization.md (the reference model).
NOTE: T-1050 (sibling) owns the catalog + naming conventions these stories reference sequence T-1049 to consume T-1050''s conventions where they overlap.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).
Lead ratification (batch-6 activation, 2026-07-25): the refinement block''s T-1051 recommendation is RATIFIED lamp posts, barns, TVs, billboards get a formal Q-067-style deferral, not briefs. Implementation of this ticket authors the deferral note (four classes, rationale, Q-067 precedent, ''revisit when Phase-4 exterior generation completes'') alongside the real briefs; T-1051''s own deliverable (''or record formal deferral'') is satisfied by that note and T-1051 closes when it lands. Child story tickets under T-961: the implementing agent DRAFTS the story list (title + one-line scope + brief path per class) in its report; the lead creates them on main at merge (avoids cross-vault worktree pql writes, FR-4). Surfaced to Jeroen in the batch report for cheap veto.', 'done', 'high', 'araminta', 'visual', NULL, '2026-06-12 10:40:58', '2026-07-25 21:11:27.660', NULL, 'feddf82eb748e9b8106743886529d69f', 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 ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Rewrite docs/briefings/araminta.md around the Phase-4 asset pipeline', '(description follows in first append)
Refinement (batch-6 Si pass, 2026-07-25) READY.
WHAT''S WRONG WITH THE CURRENT BRIEFING: frozen at the 2026-03-13 v0.2 pivot.
(1) Frames the role around "v0.2 Pivot — Key Changes" v0.2 is formally dropped
("No scoping negotiations. Build the base systems fully"), so the framing section
is obsolete, not just outdated. (2) Assumes the sprite-era pipeline throughout
("Phase 1-3 placeholder art pipeline," "sprite replacements" in Phase 4)
contradicted by D-244 (3D objects in-world, no per-object sprite layer) and D-149
(live 3D characters). (3) Cites D-019 as simply "top-down art style" with no note
that D-148 superseded it for gameplay (palette.md §1 had to correct exactly this
conflation in its own stub the briefing repeats the same error). (4) Zone visual
grammar / tile palette framing predates D-235''s ObjectTag vocabulary and D-232''s
trait-template catalog entirely. (5) Character customisation section (D-126,
Q-WTF-039/040) predates the shipped D-159D-164 body-type + slot-compositing
system and the wardrobe/garment-token pipeline describes a design question that
has since been built. (6) No mention of the Atlas at all (D-255 stepped ladder,
D-169/D-170 implant UI) despite araminta being a named co-designer of D-255''s
named-feature encoding/payload schema/lakes work.
WHAT THE REWRITE MUST CONTAIN:
- Role framing: visual art direction for the Phase-4 asset pipeline + Atlas
map-art rendering (not "generator spike prerequisites").
- palette.md (T-1052, merged) as the SINGLE LIVE STYLE AUTHORITY point to it,
do not restate camera/color/material content (avoids a second drifting copy;
visual-grammar-v01.md / workshop-outcomes.md supersession is palette.md §5''s
to state, the briefing defers).
- conventions.md (T-1050, merged) for naming/mask/manifest mechanics note the
category-first naming ruling (conventions.md §1) and the D-257 toon/PBR ruling
with glazing carve-out as HER standing rulings she''ll be asked to extend.
- D-235 ObjectTag vocabulary as the logical layer she renders a look on top of
co-maintained with Miri per D-235''s own text.
- The character wardrobe pipeline (character-asset-organization.md) as the proven
reference model conventions.md imitates (mask sidecars, manifest schema).
- D-255 stepped Atlas as active/ongoing work she co-designed.
- Current open items: T-1049 (per-class asset stories, re-scoped this batch), the
D-257 glazing shader implementation (unassigned per palette.md §2.3), Q-119
(generic-parent milestone question, hers to weigh in on per D-235
co-maintenance).
- Drop: v0.2 pivot section, Q-WTF-039/040, tycoon-bookmark/apartment-wakeup
framing, and the v0.2-era decision list (D-114/D-117/D-119/D-122/D-128/D-131/
D-135) verify each against current decision status before dropping outright;
a few (D-033 entity color, D-126 customisation dimensions) may still have live
sub-parts even though the surrounding section is obsolete.
ACCEPTANCE: rewritten briefing reflects the current Phase-4 landscape (D-235,
D-244, D-257, D-255), points to palette.md/conventions.md as live authorities
rather than duplicating content, drops v0.2-pivot and superseded-question
framing, lists araminta''s actual current/open tickets.
SEQUENCING: independent of T-1049 (different files, no shared input) both can
run in the same batch.', 'done', 'medium', 'qatux', 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 21:11:27.661', NULL, 'df35c3bfd15e38822bc24019e04cadd1', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
+1
View File
@@ -7,6 +7,7 @@ Format based on [Keep a Changelog](https://keepachangelog.com/).
## [Unreleased]
### Added
- **Every asset class now has a production contract** (T-1049, T-1051, T-1053) — one-page briefs for the first five environment asset classes (station walls, rural walls, doors, floors, furniture/props), each pinning its materials, look, naming, generation path, and concrete acceptance against the merged style bible and conventions; a formal deferral register for the set-dressing classes (lamp posts, barns, TVs, billboards, cars) with recorded revisit triggers; and the art director's briefing rewritten from its year-old shape to the current landscape. Five production stories are now queued — the first real environment assets of the game have a defined path from concept to the world
- **The visual asset pipeline has a production home** (D-244, T-1050) — the 3D-model/texture/artwork/icon/effect catalogs are instantiated with live status tables (the icon set's 13 as-built SVGs inventoried with their real wiring), `client/assets/models/` exists as the promotion target for glb-gen output with a schema-documented manifest, and a single conventions document fixes model naming (category-first), mask sidecars, and D-235-token texture naming — with door-state and TileSet conventions recorded as explicit Phase-5 deferrals rather than silent gaps
- **The Phase-4 visual style bible** (D-257, T-1052) — palette.md is no longer a stub: gameplay vs offline-render cameras untangled, a rendered-look register for every ratified building material/roof/facade/street tag (hue range, grain, weathering), and the newly-recorded D-257 rendering treatment — environment props share the character toon look, with a minimal-PBR carve-out for glazing so glass reads truthfully about sightlines. Exactly one live style authority remains; the superseded v0.1 documents now say so themselves
- **The Atlas can be driven by agents** (D-226, T-971) — a named-intent control channel (AtlasAgentInterface) lets automated QA agents navigate the real Atlas UI through the exact same handlers a click calls: open/select/descend, jump straight to any world coordinate at any zoom step, toggle overlays, and read back a summary of what's on screen — turning the hand-scripted verification drives into a first-class, repeatable QA capability. In-process consumers only for now; a shipped reference driver replaces the ad-hoc scripts