chore(meta): hold asset track — T-1049/T-1050 -> backlog (needs sprite->3D re-scope)

Separated the asset pipeline from the cascade work. T-1049/T-1050 assume a sprite-centric
catalog; direction is 3D objects (Trellis .glb) in-world with textures as the only
flattened content. Held for re-scope. Cascade track (T-1044/T-1047) continues.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-16 16:03:49 +02:00
co-authored by Claude Opus 4.8
parent 711ac65d20
commit e3327a0d01
2 changed files with 322 additions and 0 deletions
+152
View File
@@ -2460,3 +2460,155 @@ 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 ('06FBPTXP5N42SSGW300FEDTS3M', 'status', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'c31076efc012fb05c5f0976f00aa91b5', 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 ('06FBPTXP5N42SSGW300FEDTS3M', 'status', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'c31076efc012fb05c5f0976f00aa91b5', 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', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'e9eec22ee21e54104fb9ce92ea89c65a', 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', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'e9eec22ee21e54104fb9ce92ea89c65a', 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 ('06FBPQ0381QWDAQABZAY7MRD8M', 'status', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'f92fd6c43fc29463faf961bc33407957', 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 ('06FBPQ0381QWDAQABZAY7MRD8M', 'status', 'backlog', 'in_progress', NULL, '2026-06-16 13:42:26', '2026-06-16 13:42:26', '2026-06-16 13:42:26', NULL, 'f92fd6c43fc29463faf961bc33407957', 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', 'description', '(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.', '(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).', NULL, '2026-06-16 14:01:36', '2026-06-16 14:01:36.325', '2026-06-16 14:01:36.325', NULL, 'a58e68e3da1bd6cb1e026134cd3f4d56', 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 ('06FBPTXPJ910NNR5T2R9F9NWQR', 'description', '(description follows in first append)
---
Refinement (2026-06-16, /whats-next Si pass) FULL scope (user decision). Two deliverables + conventions.
(1) CATALOG: instantiate the 5 docs/assets/visual/*.md files (sprites, furniture, tilesets, icons, effects) with per-category status tables. Template: docs/assets/_templates/sprite.md (SPR/FUR/TILE/ICO/FX prefixes); status vocab planned/in-progress/placeholder/final (docs/assets/README.md). Audio side (docs/assets/audio/README.md) is the working model.
(2) glb-gen PRODUCTION PATH: SKILL.md:115 names client/assets/models/ which does NOT exist. Create it + furniture/ + props/ subdirs (mirror the spike) + .gitkeep. Define client/assets/models/manifest.json schema MIRRORING the character manifest (docs/architecture/character-asset-organization.md) per-asset entries: name, category, source-model path, subdirectory. Promotion convention per D-241 (promotion = repo-canonical). Update SKILL.md to point at the new path + reference the manifest.
(3) CONVENTIONS (author NOW, full scope): door state-frame suffixes (e.g. <model>_open / <model>_closed), Godot TileSet resource organization (<tileset>/<tile_id>.tres), multi-tile footprint metadata, and renderer/textures/ naming keyed to D-235 tokens (current renderer/README.md:80-95 covers sprites only: <model>_<direction>_<resolution>.png). Author these in docs/assets/visual/conventions.md (single home) and cross-link from the SKILL.
OVERLAP: T-1053 (rewrite araminta briefing) softly depends on this catalog note the edge. T-1049''s per-class stories will reference these conventions do T-1050 first / concurrently so T-1049 can cite them.', '(description follows in first append)
---
Refinement (2026-06-16, /whats-next Si pass) FULL scope (user decision). Two deliverables + conventions.
(1) CATALOG: instantiate the 5 docs/assets/visual/*.md files (sprites, furniture, tilesets, icons, effects) with per-category status tables. Template: docs/assets/_templates/sprite.md (SPR/FUR/TILE/ICO/FX prefixes); status vocab planned/in-progress/placeholder/final (docs/assets/README.md). Audio side (docs/assets/audio/README.md) is the working model.
(2) glb-gen PRODUCTION PATH: SKILL.md:115 names client/assets/models/ which does NOT exist. Create it + furniture/ + props/ subdirs (mirror the spike) + .gitkeep. Define client/assets/models/manifest.json schema MIRRORING the character manifest (docs/architecture/character-asset-organization.md) per-asset entries: name, category, source-model path, subdirectory. Promotion convention per D-241 (promotion = repo-canonical). Update SKILL.md to point at the new path + reference the manifest.
(3) CONVENTIONS (author NOW, full scope): door state-frame suffixes (e.g. <model>_open / <model>_closed), Godot TileSet resource organization (<tileset>/<tile_id>.tres), multi-tile footprint metadata, and renderer/textures/ naming keyed to D-235 tokens (current renderer/README.md:80-95 covers sprites only: <model>_<direction>_<resolution>.png). Author these in docs/assets/visual/conventions.md (single home) and cross-link from the SKILL.
OVERLAP: T-1053 (rewrite araminta briefing) softly depends on this catalog note the edge. T-1049''s per-class stories will reference these conventions do T-1050 first / concurrently so T-1049 can cite them.
---
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).', NULL, '2026-06-16 14:01:36', '2026-06-16 14:01:36.350', '2026-06-16 14:01:36.350', NULL, '1d10d3452316fcc41f4ed669d28e67b5', 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', 'backlog', NULL, '2026-06-16 14:01:36', '2026-06-16 14:01:36.369', '2026-06-16 14:01:36.369', NULL, '1b6f54b4815c27985c5a1a7d8c983bb1', 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 ('06FBPTXPJ910NNR5T2R9F9NWQR', 'status', 'in_progress', 'backlog', NULL, '2026-06-16 14:01:36', '2026-06-16 14:01:36.371', '2026-06-16 14:01:36.371', NULL, 'd5b4d3133cd7d9428a028121e862bd07', 2) ON CONFLICT(hash) DO NOTHING;
+170
View File
@@ -3305,3 +3305,173 @@ SERIALIZE decision: TerrainAnalysis derives Debug+Clone only (features.rs:65); L
COMPOSE WITH T-1047 (same batch): T-1047 aggregates a per-district dominant-D8-direction in the SAME run_layer1 pass do both together to avoid double-touching layer1.rs/cascade.rs. COMPOSE WITH T-1047 (same batch): T-1047 aggregates a per-district dominant-D8-direction in the SAME run_layer1 pass do both together to avoid double-touching layer1.rs/cascade.rs.
Acceptance: T-1031 harness cost drops toward ~45ms/body; T-952 golden-seed byte-identity UNCHANGED. Files: layer1.rs, cascade.rs (+ CascadeSnapshot if transient).', 'in_progress', 'medium', NULL, 'server', 'D-203', '2026-06-12 10:23:50', '2026-06-16 13:42:26', NULL, 'acb7bf02efc3a7d7f4418f7d6c151204', 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); Acceptance: T-1031 harness cost drops toward ~45ms/body; T-952 golden-seed byte-identity UNCHANGED. Files: layer1.rs, cascade.rs (+ CascadeSnapshot if transient).', 'in_progress', 'medium', NULL, 'server', 'D-203', '2026-06-12 10:23:50', '2026-06-16 13:42:26', NULL, 'acb7bf02efc3a7d7f4418f7d6c151204', 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).', 'in_progress', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:58', '2026-06-16 14:01:36.325', NULL, '038b6bd5130fced6f3038983a03a709b', 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 ('06FBPTXPJ910NNR5T2R9F9NWQR', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Create the visual production-status catalog; fix glb-gen production path + naming conventions', '(description follows in first append)
---
Refinement (2026-06-16, /whats-next Si pass) FULL scope (user decision). Two deliverables + conventions.
(1) CATALOG: instantiate the 5 docs/assets/visual/*.md files (sprites, furniture, tilesets, icons, effects) with per-category status tables. Template: docs/assets/_templates/sprite.md (SPR/FUR/TILE/ICO/FX prefixes); status vocab planned/in-progress/placeholder/final (docs/assets/README.md). Audio side (docs/assets/audio/README.md) is the working model.
(2) glb-gen PRODUCTION PATH: SKILL.md:115 names client/assets/models/ which does NOT exist. Create it + furniture/ + props/ subdirs (mirror the spike) + .gitkeep. Define client/assets/models/manifest.json schema MIRRORING the character manifest (docs/architecture/character-asset-organization.md) per-asset entries: name, category, source-model path, subdirectory. Promotion convention per D-241 (promotion = repo-canonical). Update SKILL.md to point at the new path + reference the manifest.
(3) CONVENTIONS (author NOW, full scope): door state-frame suffixes (e.g. <model>_open / <model>_closed), Godot TileSet resource organization (<tileset>/<tile_id>.tres), multi-tile footprint metadata, and renderer/textures/ naming keyed to D-235 tokens (current renderer/README.md:80-95 covers sprites only: <model>_<direction>_<resolution>.png). Author these in docs/assets/visual/conventions.md (single home) and cross-link from the SKILL.
OVERLAP: T-1053 (rewrite araminta briefing) softly depends on this catalog note the edge. T-1049''s per-class stories will reference these conventions do T-1050 first / concurrently so T-1049 can cite them.
---
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).', 'in_progress', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:59', '2026-06-16 14:01:36.350', NULL, 'f6a5625e47450d6e4a37c65e3165c904', 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).', 'backlog', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:58', '2026-06-16 14:01:36.369', NULL, '24d0abe148f4ebd5536619cc12c94c06', 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 ('06FBPTXPJ910NNR5T2R9F9NWQR', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Create the visual production-status catalog; fix glb-gen production path + naming conventions', '(description follows in first append)
---
Refinement (2026-06-16, /whats-next Si pass) FULL scope (user decision). Two deliverables + conventions.
(1) CATALOG: instantiate the 5 docs/assets/visual/*.md files (sprites, furniture, tilesets, icons, effects) with per-category status tables. Template: docs/assets/_templates/sprite.md (SPR/FUR/TILE/ICO/FX prefixes); status vocab planned/in-progress/placeholder/final (docs/assets/README.md). Audio side (docs/assets/audio/README.md) is the working model.
(2) glb-gen PRODUCTION PATH: SKILL.md:115 names client/assets/models/ which does NOT exist. Create it + furniture/ + props/ subdirs (mirror the spike) + .gitkeep. Define client/assets/models/manifest.json schema MIRRORING the character manifest (docs/architecture/character-asset-organization.md) per-asset entries: name, category, source-model path, subdirectory. Promotion convention per D-241 (promotion = repo-canonical). Update SKILL.md to point at the new path + reference the manifest.
(3) CONVENTIONS (author NOW, full scope): door state-frame suffixes (e.g. <model>_open / <model>_closed), Godot TileSet resource organization (<tileset>/<tile_id>.tres), multi-tile footprint metadata, and renderer/textures/ naming keyed to D-235 tokens (current renderer/README.md:80-95 covers sprites only: <model>_<direction>_<resolution>.png). Author these in docs/assets/visual/conventions.md (single home) and cross-link from the SKILL.
OVERLAP: T-1053 (rewrite araminta briefing) softly depends on this catalog note the edge. T-1049''s per-class stories will reference these conventions do T-1050 first / concurrently so T-1049 can cite them.
---
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).', 'backlog', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:59', '2026-06-16 14:01:36.371', NULL, '21d429fe79add1fb53ca64a8113c8a82', 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);