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:
@@ -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`, 1024→256→64 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 | token→fallback-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`, 1024→256→64 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 | token→fallback-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;
|
||||||
|
|||||||
@@ -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`, 1024→256→64 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 | token→fallback-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`, 1024→256→64 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 | token→fallback-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);
|
||||||
|
|||||||
Reference in New Issue
Block a user