chore(meta): pql changelog — batch 6 activated (T-1049/araminta, T-1053/qatux; T-1051 deferral ratified)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 22:55:21 +02:00
co-authored by Claude Fable 5
parent a223af66fb
commit 9afcff0b54
2 changed files with 767 additions and 0 deletions
+265
View File
@@ -2794,3 +2794,268 @@ refine. Both bodies confirmed planet_class=''oceanic'' -> TectonicClass::Active.
VERDICT (araminta, 2026-07-25): PASS closes the PR #192 companion concern. District shows the massif as soft formless high-elevation blobs; Quarter at the identical center resolves an elongated NW-SE ridge spine with perpendicular lobate spurs, slope stipple, and a localized feature District has no resolution to show organized directional structure absent at District, not a rescale. Judged the harder test than the accepted GJ380c plains case and a cleaner pass. Region frame correctly shows no relief signature (a ~10km massif is near-sub-pixel at 204.8km/gridunit; Region''s job is context, no claim staked there). Evidence: scratchpad t1196/gj1002b_{quarter,district,region}.png, matched world_center (385024,-598016) proven by view-transform logs. Secondary observations ticketed separately: header-ghosting artifact (client) and elevation-white vs ice-white grammar split (visual); the dark-red speckle inside the massif is explicitly NOT actioned off one frame re-examine only if it recurs at other Alpine sites.', NULL, '2026-07-25 20:53:29', '2026-07-25 20:53:29.301', '2026-07-25 20:53:29.301', NULL, '71380c1e173d5397ee5d61c3a740a151', 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 ('06FSM3MQ5GFSPKKFJF6GGZN8CM', 'status', 'in_progress', 'done', NULL, '2026-07-25 20:53:47', '2026-07-25 20:53:47.773', '2026-07-25 20:53:47.773', NULL, '9937b3a9176ac2add998310b7bedbad6', 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.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).', '(description follows in first append)
Filed 2026-06-12 from the fable-ous.md audit (S-43; citations adversarially verified).
T-961 (two-sentence description, no acceptance criteria, no brief links) is the only asset-production ticket under T-750, while the epic names eight classes; cars, barns, TVs, billboards appear in NO ticket at all (verified against the full corpus). Refine into child stories per class station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (billboards/TVs), rural structures (barns) each gated on a one-page brief; explicitly record which classes are deferred (cars: see Q-067 audit note). Decide Q-119 (generic-parent placeholder set as first milestone) before sequencing.
Audit per-class status matrix (verified 2026-06-12):
# docs/assets/ survey (13 files + downloads/)
| File | One-line summary |
|---|---|
| README.md | Master index: audio/visual/video pipelines, status vocabulary (planned/in-progress/placeholder/final), structure that promises visual/{sprites,furniture,tilesets,icons,effects}.md |
| _templates/audio.md | Row + detailed-entry template for audio assets |
| _templates/sprite.md | Row + detailed-entry template for sprites (ID prefixes SPR/FUR/TILE/ICO/FX, status, method, directions columns) |
| _templates/video.md | Row + detailed-entry template for video |
| audio/README.md | ACTIVE production-status catalog per-category counts table (12 assets tracked), generation tools, bus architecture |
| audio/palette.md | Sonic style bible |
| audio/ambient.md / sfx.md / ui.md | Per-category audio asset tables |
| visual/README.md | STUB links 5 category files that do not exist, all counts 0 |
| visual/palette.md | STUB 4 bullet decisions (D-019/D-033/D-045, "functional warmth"), defers to art-direction workshop |
| video/README.md / palette.md | Stubs |
| downloads/ | Purchased character sources (Quaternius Universal Base Characters, Modular Character Outfits FBX) characters only |
# Per-asset-class matrix
| Class | Written brief | Style guide | Naming/res conventions | Gen path | Produced assets | Tickets |
|---|---|---|---|---|---|---|
| Walls (station) | art-direction workshop-outcomes.md §3.3 (v0.1.1 set, pre-cascade) + docs/design/placeholder-art-spec-v01.md §2.1 | visual-grammar-v01.md §1/§4.3, workshop-outcomes §1.8 era palette (partly superseded by D-235), D-235 WallMaterial vocab | renderer/README.md:80-95 (`<model>_<dir>_<res>.png`, 102425664 chain) | working renderer/models/wall_structural.tscn rendered | wall_structural ×4 dirs in client/assets/sprites/; wall_bar_green model unrendered; 2 textures | T-961 (backlog), T-988 (token vocab, backlog) |
| Walls (rural) | none found | D-235 tokens only (timber/rammed-earth etc.) | renderer/README.md (generic) | same path, unused | none | T-961 text mention only |
| Doors | placeholder-art-spec-v01.md §2.1 (procedural rects, v0.1) + workshop-outcomes §3.3 `door_sliding` | none for generated world | none for open/closed state frames | same path, unused | none | T-979/T-998 (DoorSpec logical only), T-961 |
| Floors | placeholder-art-spec-v01.md §2.1 + workshop-outcomes §3.3 (4 floor sprites) | D-228 FloorMaterial axis (open vocab) | 64px visual tile (placeholder-art-spec §1) | same path, unused | none client/assets/tilesets/ is .gitkeep only | T-959 (tile fill, logical), T-961 |
| Styled buildings | D-232 + D-235 + wiki/economics/architecture_trait_catalog.toml (T-1005 done, ~35 visual bundles) | D-235 material/color-register grammar tokens only, no rendered art direction | tokenfallback-parent chain (catalog header :34-44) | no model/texture path defined for building exteriors | none | T-977, T-988, T-994, T-1004 (all backlog), T-1005 (done) |
| Furniture | docs/assets/visual/furniture.md MISSING (linked); workshop-outcomes §3.3 lists 8-10 objects (pre-cascade) | era table §1.8 only | character-asset-organization.md explicitly excludes furniture ("follow Trellis spike conventions") | proven in spike | spikes/3dpipeline/models/furniture/ ×3 GLB (unpromoted); zero in client/assets | T-961, T-995 (ObjectTag vocab, backlog) |
| Items | docs/design/icon-set-v01.md (HUD/inventory icons only) | D-086 icon constraints | SVG icon_ prefix (client/assets/icons/) | n/a for icons | 13 SVGs in client/assets/icons/ | none for in-world item sprites |
| Cars/vehicles | none found | none | none | spike only | spikes/3dpipeline/models/props/vw_beetle.glb (spike) | none Q-067 open ("driveable vs NPC traffic?") |
| Lamp posts | none found (zero repo hits) | none | none | unused | none | T-961 text mention only |
| Barns | none found (only T-750 epic text) | none | none | unused | none | none |
| TVs | none found (only T-750 epic text) | none | none | unused | none | none |
| Billboards | none found (only T-750 epic text; other hits = LOD impostors) | none | none | unused | none | none |
| Characters (reference class the working model) | docs/architecture/character-asset-organization.md + docs/design/character-visuals-spec.md | yes | full (manifest.json, seg_ naming, body-type keys) | proven end-to-end | 1002 files in client/assets/characters/ | done |
# Generation path (verified files)
image-gen (.claude/skills/image-gen/SKILL.md + scripts/image_connector.py, Gemini) glb-gen (SKILL.md + tooling/db/trellis_connector.py + tooling/trellis-batch.sh + Blender postprocess scripts) sprite-gen (SKILL.md + scripts/render.sh) renderer/ (project.godot, render_scene.tscn, render_export.gd; D-019 camera, 3-light rig, 1024/256/64 chain) client/assets/sprites/. renderer/output/ holds only .gdignore (intermediates gitignored).
# Produced assets in client/assets (non-.import files)
audio 16 · characters 1002 · fonts 3 · icons 13 · planets 7 · sprites 9 (npc_generic ×4, wall_structural ×4, .gitkeep) · theme 1 · tilesets 1 (.gitkeep only)
---
Refinement (2026-06-16, /whats-next Si pass) READY. This is a PLANNING task: break T-961 into per-class child stories.
CLASS LIST (8 stories, parented under T-961, each gated on a one-page brief): station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (TVs/billboards), rural structures (barns).
- CARS (9th class named in T-750): DEFERRED Q-067 needs a phase decision (Phase-4 deliverable vs Phase-5+) before any car story. File a deferral note, not a story.
- Q-119 (generic-parent placeholder set as milestone-0): NOT a blocker sequencing only. On each relevant story note that the generic parents (generic_wall/roof/facade/street + generic_door/floor/furniture; D-235 / wiki/economics/architecture_trait_catalog.toml:33-41) are milestone-0 IF Q-119 resolves "yes".
BRIEF TEMPLATE: none exists. Create docs/assets/_templates/asset-brief.md (scope · visual reference · naming/resolution conventions · generation path · acceptance), or adopt docs/_templates/design.md. Each story states where its brief + catalog file live under docs/assets/visual/.
READ before filing: docs/assets/README.md, docs/design/{placeholder-art-spec-v01,visual-grammar-v01}.md, docs/workshops/art-direction-mood-board/workshop-outcomes.md, D-235/D-228/D-232, docs/architecture/character-asset-organization.md (the reference model).
NOTE: T-1050 (sibling) owns the catalog + naming conventions these stories reference sequence T-1049 to consume T-1050''s conventions where they overlap.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).
Lead ratification (batch-6 activation, 2026-07-25): the refinement block''s T-1051 recommendation is RATIFIED lamp posts, barns, TVs, billboards get a formal Q-067-style deferral, not briefs. Implementation of this ticket authors the deferral note (four classes, rationale, Q-067 precedent, ''revisit when Phase-4 exterior generation completes'') alongside the real briefs; T-1051''s own deliverable (''or record formal deferral'') is satisfied by that note and T-1051 closes when it lands. Child story tickets under T-961: the implementing agent DRAFTS the story list (title + one-line scope + brief path per class) in its report; the lead creates them on main at merge (avoids cross-vault worktree pql writes, FR-4). Surfaced to Jeroen in the batch report for cheap veto.', NULL, '2026-07-25 20:54:28', '2026-07-25 20:54:28.647', '2026-07-25 20:54:28.647', NULL, '4187fc690799214fd6d8e8ba02188396', 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-07-25 20:54:32', '2026-07-25 20:54:32.387', '2026-07-25 20:54:32.387', NULL, '120f745556e6aeb64c5a37639588b30e', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 20:54:32', '2026-07-25 20:54:32.393', '2026-07-25 20:54:32.393', NULL, 'ed387adc6da3e7bae2b2314473e1fe7f', 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', 'assigned_to', NULL, 'araminta', NULL, '2026-07-25 20:54:32', '2026-07-25 20:54:32.547', '2026-07-25 20:54:32.547', NULL, '595f59f8b831ba9192ec4ab6312900a4', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'assigned_to', NULL, 'qatux', NULL, '2026-07-25 20:54:36', '2026-07-25 20:54:36.535', '2026-07-25 20:54:36.535', NULL, '8d500e97152680a0b4b83d45e614cff9', 2) ON CONFLICT(hash) DO NOTHING;
+502
View File
@@ -4353,3 +4353,505 @@ stride-8 full-body scan -> union-find clustering -> dense stride-1 5x5-window
refine. Both bodies confirmed planet_class=''oceanic'' -> TectonicClass::Active.
VERDICT (araminta, 2026-07-25): PASS closes the PR #192 companion concern. District shows the massif as soft formless high-elevation blobs; Quarter at the identical center resolves an elongated NW-SE ridge spine with perpendicular lobate spurs, slope stipple, and a localized feature District has no resolution to show organized directional structure absent at District, not a rescale. Judged the harder test than the accepted GJ380c plains case and a cleaner pass. Region frame correctly shows no relief signature (a ~10km massif is near-sub-pixel at 204.8km/gridunit; Region''s job is context, no claim staked there). Evidence: scratchpad t1196/gj1002b_{quarter,district,region}.png, matched world_center (385024,-598016) proven by view-transform logs. Secondary observations ticketed separately: header-ghosting artifact (client) and elevation-white vs ice-white grammar split (visual); the dark-red speckle inside the massif is explicitly NOT actioned off one frame re-examine only if it recurs at other Alpine sites.', 'done', 'low', 'hoshe', 'client', NULL, '2026-07-25 16:14:35.308', '2026-07-25 20:53:47.773', NULL, 'ce4cc02ea489aaa9e0fd882a2713978a', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Refine T-961 into per-asset-class stories, each gated on a written brief', '(description follows in first append)
Filed 2026-06-12 from the fable-ous.md audit (S-43; citations adversarially verified).
T-961 (two-sentence description, no acceptance criteria, no brief links) is the only asset-production ticket under T-750, while the epic names eight classes; cars, barns, TVs, billboards appear in NO ticket at all (verified against the full corpus). Refine into child stories per class station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (billboards/TVs), rural structures (barns) each gated on a one-page brief; explicitly record which classes are deferred (cars: see Q-067 audit note). Decide Q-119 (generic-parent placeholder set as first milestone) before sequencing.
Audit per-class status matrix (verified 2026-06-12):
# docs/assets/ survey (13 files + downloads/)
| File | One-line summary |
|---|---|
| README.md | Master index: audio/visual/video pipelines, status vocabulary (planned/in-progress/placeholder/final), structure that promises visual/{sprites,furniture,tilesets,icons,effects}.md |
| _templates/audio.md | Row + detailed-entry template for audio assets |
| _templates/sprite.md | Row + detailed-entry template for sprites (ID prefixes SPR/FUR/TILE/ICO/FX, status, method, directions columns) |
| _templates/video.md | Row + detailed-entry template for video |
| audio/README.md | ACTIVE production-status catalog per-category counts table (12 assets tracked), generation tools, bus architecture |
| audio/palette.md | Sonic style bible |
| audio/ambient.md / sfx.md / ui.md | Per-category audio asset tables |
| visual/README.md | STUB links 5 category files that do not exist, all counts 0 |
| visual/palette.md | STUB 4 bullet decisions (D-019/D-033/D-045, "functional warmth"), defers to art-direction workshop |
| video/README.md / palette.md | Stubs |
| downloads/ | Purchased character sources (Quaternius Universal Base Characters, Modular Character Outfits FBX) characters only |
# Per-asset-class matrix
| Class | Written brief | Style guide | Naming/res conventions | Gen path | Produced assets | Tickets |
|---|---|---|---|---|---|---|
| Walls (station) | art-direction workshop-outcomes.md §3.3 (v0.1.1 set, pre-cascade) + docs/design/placeholder-art-spec-v01.md §2.1 | visual-grammar-v01.md §1/§4.3, workshop-outcomes §1.8 era palette (partly superseded by D-235), D-235 WallMaterial vocab | renderer/README.md:80-95 (`<model>_<dir>_<res>.png`, 102425664 chain) | working renderer/models/wall_structural.tscn rendered | wall_structural ×4 dirs in client/assets/sprites/; wall_bar_green model unrendered; 2 textures | T-961 (backlog), T-988 (token vocab, backlog) |
| Walls (rural) | none found | D-235 tokens only (timber/rammed-earth etc.) | renderer/README.md (generic) | same path, unused | none | T-961 text mention only |
| Doors | placeholder-art-spec-v01.md §2.1 (procedural rects, v0.1) + workshop-outcomes §3.3 `door_sliding` | none for generated world | none for open/closed state frames | same path, unused | none | T-979/T-998 (DoorSpec logical only), T-961 |
| Floors | placeholder-art-spec-v01.md §2.1 + workshop-outcomes §3.3 (4 floor sprites) | D-228 FloorMaterial axis (open vocab) | 64px visual tile (placeholder-art-spec §1) | same path, unused | none client/assets/tilesets/ is .gitkeep only | T-959 (tile fill, logical), T-961 |
| Styled buildings | D-232 + D-235 + wiki/economics/architecture_trait_catalog.toml (T-1005 done, ~35 visual bundles) | D-235 material/color-register grammar tokens only, no rendered art direction | tokenfallback-parent chain (catalog header :34-44) | no model/texture path defined for building exteriors | none | T-977, T-988, T-994, T-1004 (all backlog), T-1005 (done) |
| Furniture | docs/assets/visual/furniture.md MISSING (linked); workshop-outcomes §3.3 lists 8-10 objects (pre-cascade) | era table §1.8 only | character-asset-organization.md explicitly excludes furniture ("follow Trellis spike conventions") | proven in spike | spikes/3dpipeline/models/furniture/ ×3 GLB (unpromoted); zero in client/assets | T-961, T-995 (ObjectTag vocab, backlog) |
| Items | docs/design/icon-set-v01.md (HUD/inventory icons only) | D-086 icon constraints | SVG icon_ prefix (client/assets/icons/) | n/a for icons | 13 SVGs in client/assets/icons/ | none for in-world item sprites |
| Cars/vehicles | none found | none | none | spike only | spikes/3dpipeline/models/props/vw_beetle.glb (spike) | none Q-067 open ("driveable vs NPC traffic?") |
| Lamp posts | none found (zero repo hits) | none | none | unused | none | T-961 text mention only |
| Barns | none found (only T-750 epic text) | none | none | unused | none | none |
| TVs | none found (only T-750 epic text) | none | none | unused | none | none |
| Billboards | none found (only T-750 epic text; other hits = LOD impostors) | none | none | unused | none | none |
| Characters (reference class the working model) | docs/architecture/character-asset-organization.md + docs/design/character-visuals-spec.md | yes | full (manifest.json, seg_ naming, body-type keys) | proven end-to-end | 1002 files in client/assets/characters/ | done |
# Generation path (verified files)
image-gen (.claude/skills/image-gen/SKILL.md + scripts/image_connector.py, Gemini) glb-gen (SKILL.md + tooling/db/trellis_connector.py + tooling/trellis-batch.sh + Blender postprocess scripts) sprite-gen (SKILL.md + scripts/render.sh) renderer/ (project.godot, render_scene.tscn, render_export.gd; D-019 camera, 3-light rig, 1024/256/64 chain) client/assets/sprites/. renderer/output/ holds only .gdignore (intermediates gitignored).
# Produced assets in client/assets (non-.import files)
audio 16 · characters 1002 · fonts 3 · icons 13 · planets 7 · sprites 9 (npc_generic ×4, wall_structural ×4, .gitkeep) · theme 1 · tilesets 1 (.gitkeep only)
---
Refinement (2026-06-16, /whats-next Si pass) READY. This is a PLANNING task: break T-961 into per-class child stories.
CLASS LIST (8 stories, parented under T-961, each gated on a one-page brief): station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (TVs/billboards), rural structures (barns).
- CARS (9th class named in T-750): DEFERRED Q-067 needs a phase decision (Phase-4 deliverable vs Phase-5+) before any car story. File a deferral note, not a story.
- Q-119 (generic-parent placeholder set as milestone-0): NOT a blocker sequencing only. On each relevant story note that the generic parents (generic_wall/roof/facade/street + generic_door/floor/furniture; D-235 / wiki/economics/architecture_trait_catalog.toml:33-41) are milestone-0 IF Q-119 resolves "yes".
BRIEF TEMPLATE: none exists. Create docs/assets/_templates/asset-brief.md (scope · visual reference · naming/resolution conventions · generation path · acceptance), or adopt docs/_templates/design.md. Each story states where its brief + catalog file live under docs/assets/visual/.
READ before filing: docs/assets/README.md, docs/design/{placeholder-art-spec-v01,visual-grammar-v01}.md, docs/workshops/art-direction-mood-board/workshop-outcomes.md, D-235/D-228/D-232, docs/architecture/character-asset-organization.md (the reference model).
NOTE: T-1050 (sibling) owns the catalog + naming conventions these stories reference sequence T-1049 to consume T-1050''s conventions where they overlap.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).
Lead ratification (batch-6 activation, 2026-07-25): the refinement block''s T-1051 recommendation is RATIFIED lamp posts, barns, TVs, billboards get a formal Q-067-style deferral, not briefs. Implementation of this ticket authors the deferral note (four classes, rationale, Q-067 precedent, ''revisit when Phase-4 exterior generation completes'') alongside the real briefs; T-1051''s own deliverable (''or record formal deferral'') is satisfied by that note and T-1051 closes when it lands. Child story tickets under T-961: the implementing agent DRAFTS the story list (title + one-line scope + brief path per class) in its report; the lead creates them on main at merge (avoids cross-vault worktree pql writes, FR-4). Surfaced to Jeroen in the batch report for cheap veto.', 'backlog', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:58', '2026-07-25 20:54:28.647', NULL, 'f5d39a7155b5b624547958856e99cd29', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Refine T-961 into per-asset-class stories, each gated on a written brief', '(description follows in first append)
Filed 2026-06-12 from the fable-ous.md audit (S-43; citations adversarially verified).
T-961 (two-sentence description, no acceptance criteria, no brief links) is the only asset-production ticket under T-750, while the epic names eight classes; cars, barns, TVs, billboards appear in NO ticket at all (verified against the full corpus). Refine into child stories per class station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (billboards/TVs), rural structures (barns) each gated on a one-page brief; explicitly record which classes are deferred (cars: see Q-067 audit note). Decide Q-119 (generic-parent placeholder set as first milestone) before sequencing.
Audit per-class status matrix (verified 2026-06-12):
# docs/assets/ survey (13 files + downloads/)
| File | One-line summary |
|---|---|
| README.md | Master index: audio/visual/video pipelines, status vocabulary (planned/in-progress/placeholder/final), structure that promises visual/{sprites,furniture,tilesets,icons,effects}.md |
| _templates/audio.md | Row + detailed-entry template for audio assets |
| _templates/sprite.md | Row + detailed-entry template for sprites (ID prefixes SPR/FUR/TILE/ICO/FX, status, method, directions columns) |
| _templates/video.md | Row + detailed-entry template for video |
| audio/README.md | ACTIVE production-status catalog per-category counts table (12 assets tracked), generation tools, bus architecture |
| audio/palette.md | Sonic style bible |
| audio/ambient.md / sfx.md / ui.md | Per-category audio asset tables |
| visual/README.md | STUB links 5 category files that do not exist, all counts 0 |
| visual/palette.md | STUB 4 bullet decisions (D-019/D-033/D-045, "functional warmth"), defers to art-direction workshop |
| video/README.md / palette.md | Stubs |
| downloads/ | Purchased character sources (Quaternius Universal Base Characters, Modular Character Outfits FBX) characters only |
# Per-asset-class matrix
| Class | Written brief | Style guide | Naming/res conventions | Gen path | Produced assets | Tickets |
|---|---|---|---|---|---|---|
| Walls (station) | art-direction workshop-outcomes.md §3.3 (v0.1.1 set, pre-cascade) + docs/design/placeholder-art-spec-v01.md §2.1 | visual-grammar-v01.md §1/§4.3, workshop-outcomes §1.8 era palette (partly superseded by D-235), D-235 WallMaterial vocab | renderer/README.md:80-95 (`<model>_<dir>_<res>.png`, 102425664 chain) | working renderer/models/wall_structural.tscn rendered | wall_structural ×4 dirs in client/assets/sprites/; wall_bar_green model unrendered; 2 textures | T-961 (backlog), T-988 (token vocab, backlog) |
| Walls (rural) | none found | D-235 tokens only (timber/rammed-earth etc.) | renderer/README.md (generic) | same path, unused | none | T-961 text mention only |
| Doors | placeholder-art-spec-v01.md §2.1 (procedural rects, v0.1) + workshop-outcomes §3.3 `door_sliding` | none for generated world | none for open/closed state frames | same path, unused | none | T-979/T-998 (DoorSpec logical only), T-961 |
| Floors | placeholder-art-spec-v01.md §2.1 + workshop-outcomes §3.3 (4 floor sprites) | D-228 FloorMaterial axis (open vocab) | 64px visual tile (placeholder-art-spec §1) | same path, unused | none client/assets/tilesets/ is .gitkeep only | T-959 (tile fill, logical), T-961 |
| Styled buildings | D-232 + D-235 + wiki/economics/architecture_trait_catalog.toml (T-1005 done, ~35 visual bundles) | D-235 material/color-register grammar tokens only, no rendered art direction | tokenfallback-parent chain (catalog header :34-44) | no model/texture path defined for building exteriors | none | T-977, T-988, T-994, T-1004 (all backlog), T-1005 (done) |
| Furniture | docs/assets/visual/furniture.md MISSING (linked); workshop-outcomes §3.3 lists 8-10 objects (pre-cascade) | era table §1.8 only | character-asset-organization.md explicitly excludes furniture ("follow Trellis spike conventions") | proven in spike | spikes/3dpipeline/models/furniture/ ×3 GLB (unpromoted); zero in client/assets | T-961, T-995 (ObjectTag vocab, backlog) |
| Items | docs/design/icon-set-v01.md (HUD/inventory icons only) | D-086 icon constraints | SVG icon_ prefix (client/assets/icons/) | n/a for icons | 13 SVGs in client/assets/icons/ | none for in-world item sprites |
| Cars/vehicles | none found | none | none | spike only | spikes/3dpipeline/models/props/vw_beetle.glb (spike) | none Q-067 open ("driveable vs NPC traffic?") |
| Lamp posts | none found (zero repo hits) | none | none | unused | none | T-961 text mention only |
| Barns | none found (only T-750 epic text) | none | none | unused | none | none |
| TVs | none found (only T-750 epic text) | none | none | unused | none | none |
| Billboards | none found (only T-750 epic text; other hits = LOD impostors) | none | none | unused | none | none |
| Characters (reference class the working model) | docs/architecture/character-asset-organization.md + docs/design/character-visuals-spec.md | yes | full (manifest.json, seg_ naming, body-type keys) | proven end-to-end | 1002 files in client/assets/characters/ | done |
# Generation path (verified files)
image-gen (.claude/skills/image-gen/SKILL.md + scripts/image_connector.py, Gemini) glb-gen (SKILL.md + tooling/db/trellis_connector.py + tooling/trellis-batch.sh + Blender postprocess scripts) sprite-gen (SKILL.md + scripts/render.sh) renderer/ (project.godot, render_scene.tscn, render_export.gd; D-019 camera, 3-light rig, 1024/256/64 chain) client/assets/sprites/. renderer/output/ holds only .gdignore (intermediates gitignored).
# Produced assets in client/assets (non-.import files)
audio 16 · characters 1002 · fonts 3 · icons 13 · planets 7 · sprites 9 (npc_generic ×4, wall_structural ×4, .gitkeep) · theme 1 · tilesets 1 (.gitkeep only)
---
Refinement (2026-06-16, /whats-next Si pass) READY. This is a PLANNING task: break T-961 into per-class child stories.
CLASS LIST (8 stories, parented under T-961, each gated on a one-page brief): station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (TVs/billboards), rural structures (barns).
- CARS (9th class named in T-750): DEFERRED Q-067 needs a phase decision (Phase-4 deliverable vs Phase-5+) before any car story. File a deferral note, not a story.
- Q-119 (generic-parent placeholder set as milestone-0): NOT a blocker sequencing only. On each relevant story note that the generic parents (generic_wall/roof/facade/street + generic_door/floor/furniture; D-235 / wiki/economics/architecture_trait_catalog.toml:33-41) are milestone-0 IF Q-119 resolves "yes".
BRIEF TEMPLATE: none exists. Create docs/assets/_templates/asset-brief.md (scope · visual reference · naming/resolution conventions · generation path · acceptance), or adopt docs/_templates/design.md. Each story states where its brief + catalog file live under docs/assets/visual/.
READ before filing: docs/assets/README.md, docs/design/{placeholder-art-spec-v01,visual-grammar-v01}.md, docs/workshops/art-direction-mood-board/workshop-outcomes.md, D-235/D-228/D-232, docs/architecture/character-asset-organization.md (the reference model).
NOTE: T-1050 (sibling) owns the catalog + naming conventions these stories reference sequence T-1049 to consume T-1050''s conventions where they overlap.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).
Lead ratification (batch-6 activation, 2026-07-25): the refinement block''s T-1051 recommendation is RATIFIED lamp posts, barns, TVs, billboards get a formal Q-067-style deferral, not briefs. Implementation of this ticket authors the deferral note (four classes, rationale, Q-067 precedent, ''revisit when Phase-4 exterior generation completes'') alongside the real briefs; T-1051''s own deliverable (''or record formal deferral'') is satisfied by that note and T-1051 closes when it lands. Child story tickets under T-961: the implementing agent DRAFTS the story list (title + one-line scope + brief path per class) in its report; the lead creates them on main at merge (avoids cross-vault worktree pql writes, FR-4). Surfaced to Jeroen in the batch report for cheap veto.', 'in_progress', 'high', NULL, 'visual', NULL, '2026-06-12 10:40:58', '2026-07-25 20:54:32.386', NULL, '90292db4d108f4bfaf6d421942c0df1d', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Rewrite docs/briefings/araminta.md around the Phase-4 asset pipeline', '(description follows in first append)
Refinement (batch-6 Si pass, 2026-07-25) READY.
WHAT''S WRONG WITH THE CURRENT BRIEFING: frozen at the 2026-03-13 v0.2 pivot.
(1) Frames the role around "v0.2 Pivot — Key Changes" v0.2 is formally dropped
("No scoping negotiations. Build the base systems fully"), so the framing section
is obsolete, not just outdated. (2) Assumes the sprite-era pipeline throughout
("Phase 1-3 placeholder art pipeline," "sprite replacements" in Phase 4)
contradicted by D-244 (3D objects in-world, no per-object sprite layer) and D-149
(live 3D characters). (3) Cites D-019 as simply "top-down art style" with no note
that D-148 superseded it for gameplay (palette.md §1 had to correct exactly this
conflation in its own stub the briefing repeats the same error). (4) Zone visual
grammar / tile palette framing predates D-235''s ObjectTag vocabulary and D-232''s
trait-template catalog entirely. (5) Character customisation section (D-126,
Q-WTF-039/040) predates the shipped D-159D-164 body-type + slot-compositing
system and the wardrobe/garment-token pipeline describes a design question that
has since been built. (6) No mention of the Atlas at all (D-255 stepped ladder,
D-169/D-170 implant UI) despite araminta being a named co-designer of D-255''s
named-feature encoding/payload schema/lakes work.
WHAT THE REWRITE MUST CONTAIN:
- Role framing: visual art direction for the Phase-4 asset pipeline + Atlas
map-art rendering (not "generator spike prerequisites").
- palette.md (T-1052, merged) as the SINGLE LIVE STYLE AUTHORITY point to it,
do not restate camera/color/material content (avoids a second drifting copy;
visual-grammar-v01.md / workshop-outcomes.md supersession is palette.md §5''s
to state, the briefing defers).
- conventions.md (T-1050, merged) for naming/mask/manifest mechanics note the
category-first naming ruling (conventions.md §1) and the D-257 toon/PBR ruling
with glazing carve-out as HER standing rulings she''ll be asked to extend.
- D-235 ObjectTag vocabulary as the logical layer she renders a look on top of
co-maintained with Miri per D-235''s own text.
- The character wardrobe pipeline (character-asset-organization.md) as the proven
reference model conventions.md imitates (mask sidecars, manifest schema).
- D-255 stepped Atlas as active/ongoing work she co-designed.
- Current open items: T-1049 (per-class asset stories, re-scoped this batch), the
D-257 glazing shader implementation (unassigned per palette.md §2.3), Q-119
(generic-parent milestone question, hers to weigh in on per D-235
co-maintenance).
- Drop: v0.2 pivot section, Q-WTF-039/040, tycoon-bookmark/apartment-wakeup
framing, and the v0.2-era decision list (D-114/D-117/D-119/D-122/D-128/D-131/
D-135) verify each against current decision status before dropping outright;
a few (D-033 entity color, D-126 customisation dimensions) may still have live
sub-parts even though the surrounding section is obsolete.
ACCEPTANCE: rewritten briefing reflects the current Phase-4 landscape (D-235,
D-244, D-257, D-255), points to palette.md/conventions.md as live authorities
rather than duplicating content, drops v0.2-pivot and superseded-question
framing, lists araminta''s actual current/open tickets.
SEQUENCING: independent of T-1049 (different files, no shared input) both can
run in the same batch.', 'in_progress', 'medium', NULL, 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 20:54:32.393', NULL, '6a6439b0cf47677bae891287d4cb9251', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPE8FR7TGEM7X6QVPV4M', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Refine T-961 into per-asset-class stories, each gated on a written brief', '(description follows in first append)
Filed 2026-06-12 from the fable-ous.md audit (S-43; citations adversarially verified).
T-961 (two-sentence description, no acceptance criteria, no brief links) is the only asset-production ticket under T-750, while the epic names eight classes; cars, barns, TVs, billboards appear in NO ticket at all (verified against the full corpus). Refine into child stories per class station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (billboards/TVs), rural structures (barns) each gated on a one-page brief; explicitly record which classes are deferred (cars: see Q-067 audit note). Decide Q-119 (generic-parent placeholder set as first milestone) before sequencing.
Audit per-class status matrix (verified 2026-06-12):
# docs/assets/ survey (13 files + downloads/)
| File | One-line summary |
|---|---|
| README.md | Master index: audio/visual/video pipelines, status vocabulary (planned/in-progress/placeholder/final), structure that promises visual/{sprites,furniture,tilesets,icons,effects}.md |
| _templates/audio.md | Row + detailed-entry template for audio assets |
| _templates/sprite.md | Row + detailed-entry template for sprites (ID prefixes SPR/FUR/TILE/ICO/FX, status, method, directions columns) |
| _templates/video.md | Row + detailed-entry template for video |
| audio/README.md | ACTIVE production-status catalog per-category counts table (12 assets tracked), generation tools, bus architecture |
| audio/palette.md | Sonic style bible |
| audio/ambient.md / sfx.md / ui.md | Per-category audio asset tables |
| visual/README.md | STUB links 5 category files that do not exist, all counts 0 |
| visual/palette.md | STUB 4 bullet decisions (D-019/D-033/D-045, "functional warmth"), defers to art-direction workshop |
| video/README.md / palette.md | Stubs |
| downloads/ | Purchased character sources (Quaternius Universal Base Characters, Modular Character Outfits FBX) characters only |
# Per-asset-class matrix
| Class | Written brief | Style guide | Naming/res conventions | Gen path | Produced assets | Tickets |
|---|---|---|---|---|---|---|
| Walls (station) | art-direction workshop-outcomes.md §3.3 (v0.1.1 set, pre-cascade) + docs/design/placeholder-art-spec-v01.md §2.1 | visual-grammar-v01.md §1/§4.3, workshop-outcomes §1.8 era palette (partly superseded by D-235), D-235 WallMaterial vocab | renderer/README.md:80-95 (`<model>_<dir>_<res>.png`, 102425664 chain) | working renderer/models/wall_structural.tscn rendered | wall_structural ×4 dirs in client/assets/sprites/; wall_bar_green model unrendered; 2 textures | T-961 (backlog), T-988 (token vocab, backlog) |
| Walls (rural) | none found | D-235 tokens only (timber/rammed-earth etc.) | renderer/README.md (generic) | same path, unused | none | T-961 text mention only |
| Doors | placeholder-art-spec-v01.md §2.1 (procedural rects, v0.1) + workshop-outcomes §3.3 `door_sliding` | none for generated world | none for open/closed state frames | same path, unused | none | T-979/T-998 (DoorSpec logical only), T-961 |
| Floors | placeholder-art-spec-v01.md §2.1 + workshop-outcomes §3.3 (4 floor sprites) | D-228 FloorMaterial axis (open vocab) | 64px visual tile (placeholder-art-spec §1) | same path, unused | none client/assets/tilesets/ is .gitkeep only | T-959 (tile fill, logical), T-961 |
| Styled buildings | D-232 + D-235 + wiki/economics/architecture_trait_catalog.toml (T-1005 done, ~35 visual bundles) | D-235 material/color-register grammar tokens only, no rendered art direction | tokenfallback-parent chain (catalog header :34-44) | no model/texture path defined for building exteriors | none | T-977, T-988, T-994, T-1004 (all backlog), T-1005 (done) |
| Furniture | docs/assets/visual/furniture.md MISSING (linked); workshop-outcomes §3.3 lists 8-10 objects (pre-cascade) | era table §1.8 only | character-asset-organization.md explicitly excludes furniture ("follow Trellis spike conventions") | proven in spike | spikes/3dpipeline/models/furniture/ ×3 GLB (unpromoted); zero in client/assets | T-961, T-995 (ObjectTag vocab, backlog) |
| Items | docs/design/icon-set-v01.md (HUD/inventory icons only) | D-086 icon constraints | SVG icon_ prefix (client/assets/icons/) | n/a for icons | 13 SVGs in client/assets/icons/ | none for in-world item sprites |
| Cars/vehicles | none found | none | none | spike only | spikes/3dpipeline/models/props/vw_beetle.glb (spike) | none Q-067 open ("driveable vs NPC traffic?") |
| Lamp posts | none found (zero repo hits) | none | none | unused | none | T-961 text mention only |
| Barns | none found (only T-750 epic text) | none | none | unused | none | none |
| TVs | none found (only T-750 epic text) | none | none | unused | none | none |
| Billboards | none found (only T-750 epic text; other hits = LOD impostors) | none | none | unused | none | none |
| Characters (reference class the working model) | docs/architecture/character-asset-organization.md + docs/design/character-visuals-spec.md | yes | full (manifest.json, seg_ naming, body-type keys) | proven end-to-end | 1002 files in client/assets/characters/ | done |
# Generation path (verified files)
image-gen (.claude/skills/image-gen/SKILL.md + scripts/image_connector.py, Gemini) glb-gen (SKILL.md + tooling/db/trellis_connector.py + tooling/trellis-batch.sh + Blender postprocess scripts) sprite-gen (SKILL.md + scripts/render.sh) renderer/ (project.godot, render_scene.tscn, render_export.gd; D-019 camera, 3-light rig, 1024/256/64 chain) client/assets/sprites/. renderer/output/ holds only .gdignore (intermediates gitignored).
# Produced assets in client/assets (non-.import files)
audio 16 · characters 1002 · fonts 3 · icons 13 · planets 7 · sprites 9 (npc_generic ×4, wall_structural ×4, .gitkeep) · theme 1 · tilesets 1 (.gitkeep only)
---
Refinement (2026-06-16, /whats-next Si pass) READY. This is a PLANNING task: break T-961 into per-class child stories.
CLASS LIST (8 stories, parented under T-961, each gated on a one-page brief): station walls, rural walls, doors, floors, furniture/props, street furniture (lamp posts), signage/screens (TVs/billboards), rural structures (barns).
- CARS (9th class named in T-750): DEFERRED Q-067 needs a phase decision (Phase-4 deliverable vs Phase-5+) before any car story. File a deferral note, not a story.
- Q-119 (generic-parent placeholder set as milestone-0): NOT a blocker sequencing only. On each relevant story note that the generic parents (generic_wall/roof/facade/street + generic_door/floor/furniture; D-235 / wiki/economics/architecture_trait_catalog.toml:33-41) are milestone-0 IF Q-119 resolves "yes".
BRIEF TEMPLATE: none exists. Create docs/assets/_templates/asset-brief.md (scope · visual reference · naming/resolution conventions · generation path · acceptance), or adopt docs/_templates/design.md. Each story states where its brief + catalog file live under docs/assets/visual/.
READ before filing: docs/assets/README.md, docs/design/{placeholder-art-spec-v01,visual-grammar-v01}.md, docs/workshops/art-direction-mood-board/workshop-outcomes.md, D-235/D-228/D-232, docs/architecture/character-asset-organization.md (the reference model).
NOTE: T-1050 (sibling) owns the catalog + naming conventions these stories reference sequence T-1049 to consume T-1050''s conventions where they overlap.
---
HELD 2026-06-16 (separated from the cascade batch; needs re-scoping before resuming).
The asset pipeline this ticket assumes is sprite-centric (docs/assets/visual/sprites.md
"Entities", _templates/sprite.md, SPR/FUR/TILE/ICO/FX prefixes, the /sprite-gen
render-3D->2D-sprites step). Direction correction: we are NOT producing sprites Trellis
produces 3D objects (.glb) displayed in-world; the only flattened 2D content is TEXTURES.
Re-scope this ticket around a 3D-model + texture catalog (not a sprite catalog) before
activating. See the sprite-vs-3D root-cause note (this session).
Refinement (batch-6 Si pass, 2026-07-25) SUPERSEDES the 2026-06-16 READY block
(sprite-era, invalidated by D-244) and the 2026-06-16 HELD note. T-1050 (catalog +
conventions.md + manifest.json) and T-1052 (palette.md style bible) are both DONE
(PR #211, merged 2026-07-25) the conventions this ticket needed to consume now
exist and are read, not hypothetical.
SCOPE, 3D REALITY: T-961 breaks into per-asset-class stories, each gated on a
one-page brief. A "written brief" is now a short doc that states, per class:
(1) scope which manifest category (furniture|props) and which D-235 ObjectTag
axis if any; (2) visual reference cites palette.md §3''s hue/grain/weathering
register for the relevant token(s), or palette.md §2 toon/PBR default for classes
with no D-235 token; (3) naming conventions.md §1 model naming
(<category>_<descriptor>.glb), §2 mask sidecar if tintable, §4 footprint_tiles if
multi-tile; (4) generation path /image-gen concept /glb-gen (Trellis)
postprocess promotion into client/assets/models/{furniture,props}/ +
manifest.json entry (conventions.md, models.md); (5) acceptance N assets at
"planned" status registered in the manifest with a real manifest.json entry,
status flips as production proceeds (models.md''s shared status vocab).
BRIEF TEMPLATE (create docs/assets/_templates/asset-brief.md): the five headers
above (scope / visual reference / naming / gen path / acceptance), one page,
adopting docs/_templates/design.md frontmatter. Do NOT reuse _templates/sprite.md
(SPR/FUR/TILE/ICO/FX prefixes) explicitly retired by D-244/T-1050.
CLASS LIST station walls, rural walls, doors, floors, furniture/props already
have partial prior art (station walls: wall_structural GLB exists unrendered per
the 2026-06-12 audit matrix; doors: DoorSpec logical model exists, T-979/T-998;
floors: D-228 FloorMaterial axis exists) each gets a real story + brief, citing
its relevant D-235 axis (wall/roof/facade/street) or, for doors/floors/furniture,
the non-ObjectTag conventions (mask sidecars, footprint_tiles).
STREET FURNITURE / SIGNAGE-SCREENS / RURAL STRUCTURES (lamp posts, barns,
TVs, billboards T-1051''s four classes): RECOMMEND FORMAL DEFERRAL, not real
briefs, this batch. Rationale: Phase 4''s deliverable is "deterministic
walkable-world data + per-layer Atlas maps + asset catalog" (cascade table) —
outside-in generation (D-166) needs building EXTERIOR templates
(D-235 wall/roof/facade/street axes) to make districts/blocks walkable and
Atlas-legible. Lamp posts (street furniture), TVs/billboards (signage/screens
placed as interior or exterior set-dressing), and barns (a rural building
*type*, not a wall/roof/facade axis token) are furniture-tier detail objects
that populate a walkable exterior once it exists they read as Phase 6
"detail coloring / room-level population" (cascade table) or, at best, late
Phase 4 polish, not blocking asset classes for getting the world walkable.
Zero repo hits exist for any of the four beyond epic text (T-1049''s own 2026-06-12
audit matrix, unchanged) there is no partial work to protect by deferring.
Treat identically to Q-067''s car deferral: file a deferral note on the story
(or fold into one placeholder story "T-1051 classes — deferred pending Phase 4
exterior-generation completion"), do not write real briefs now. Distinguish from
cars only in degree, not in kind Q-067 is a still-open decision question
(vehicle simulation is a bigger unresolved design surface); the T-1051 four are
simpler set-dressing whose deferral needs no open question, just a scope note,
because nothing about their eventual brief depends on an undecided mechanic.
Q-119 (generic-parent placeholder set as milestone-0) is STILL OPEN (unresolved
as of this pass) unchanged from the prior block: not a blocker, sequencing-only.
Each relevant story notes the generic_wall/roof/facade/street (+ generic
door/floor/furniture) parents as milestone-0 IF Q-119 resolves yes.
READ before filing: docs/assets/visual/{conventions,palette,models,textures,
artwork}.md (T-1050/T-1052, merged), D-244, D-257, D-235 (ratified token list),
D-243 (footprint unit), docs/architecture/character-asset-organization.md
(mask/manifest precedent).
VERDICT: READY (activation = batch 6; the T-1051 deferral recommendation above is
ratified at activation, then T-1051 is updated to match the ruling this ticket records).
Lead ratification (batch-6 activation, 2026-07-25): the refinement block''s T-1051 recommendation is RATIFIED lamp posts, barns, TVs, billboards get a formal Q-067-style deferral, not briefs. Implementation of this ticket authors the deferral note (four classes, rationale, Q-067 precedent, ''revisit when Phase-4 exterior generation completes'') alongside the real briefs; T-1051''s own deliverable (''or record formal deferral'') is satisfied by that note and T-1051 closes when it lands. Child story tickets under T-961: the implementing agent DRAFTS the story list (title + one-line scope + brief path per class) in its report; the lead creates them on main at merge (avoids cross-vault worktree pql writes, FR-4). Surfaced to Jeroen in the batch report for cheap veto.', 'in_progress', 'high', 'araminta', 'visual', NULL, '2026-06-12 10:40:58', '2026-07-25 20:54:32.546', NULL, 'c4fa92cd096b4a796ed72b61468e418d', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FBPTXPZ0ZTM1QQXD5K972CMM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Rewrite docs/briefings/araminta.md around the Phase-4 asset pipeline', '(description follows in first append)
Refinement (batch-6 Si pass, 2026-07-25) READY.
WHAT''S WRONG WITH THE CURRENT BRIEFING: frozen at the 2026-03-13 v0.2 pivot.
(1) Frames the role around "v0.2 Pivot — Key Changes" v0.2 is formally dropped
("No scoping negotiations. Build the base systems fully"), so the framing section
is obsolete, not just outdated. (2) Assumes the sprite-era pipeline throughout
("Phase 1-3 placeholder art pipeline," "sprite replacements" in Phase 4)
contradicted by D-244 (3D objects in-world, no per-object sprite layer) and D-149
(live 3D characters). (3) Cites D-019 as simply "top-down art style" with no note
that D-148 superseded it for gameplay (palette.md §1 had to correct exactly this
conflation in its own stub the briefing repeats the same error). (4) Zone visual
grammar / tile palette framing predates D-235''s ObjectTag vocabulary and D-232''s
trait-template catalog entirely. (5) Character customisation section (D-126,
Q-WTF-039/040) predates the shipped D-159D-164 body-type + slot-compositing
system and the wardrobe/garment-token pipeline describes a design question that
has since been built. (6) No mention of the Atlas at all (D-255 stepped ladder,
D-169/D-170 implant UI) despite araminta being a named co-designer of D-255''s
named-feature encoding/payload schema/lakes work.
WHAT THE REWRITE MUST CONTAIN:
- Role framing: visual art direction for the Phase-4 asset pipeline + Atlas
map-art rendering (not "generator spike prerequisites").
- palette.md (T-1052, merged) as the SINGLE LIVE STYLE AUTHORITY point to it,
do not restate camera/color/material content (avoids a second drifting copy;
visual-grammar-v01.md / workshop-outcomes.md supersession is palette.md §5''s
to state, the briefing defers).
- conventions.md (T-1050, merged) for naming/mask/manifest mechanics note the
category-first naming ruling (conventions.md §1) and the D-257 toon/PBR ruling
with glazing carve-out as HER standing rulings she''ll be asked to extend.
- D-235 ObjectTag vocabulary as the logical layer she renders a look on top of
co-maintained with Miri per D-235''s own text.
- The character wardrobe pipeline (character-asset-organization.md) as the proven
reference model conventions.md imitates (mask sidecars, manifest schema).
- D-255 stepped Atlas as active/ongoing work she co-designed.
- Current open items: T-1049 (per-class asset stories, re-scoped this batch), the
D-257 glazing shader implementation (unassigned per palette.md §2.3), Q-119
(generic-parent milestone question, hers to weigh in on per D-235
co-maintenance).
- Drop: v0.2 pivot section, Q-WTF-039/040, tycoon-bookmark/apartment-wakeup
framing, and the v0.2-era decision list (D-114/D-117/D-119/D-122/D-128/D-131/
D-135) verify each against current decision status before dropping outright;
a few (D-033 entity color, D-126 customisation dimensions) may still have live
sub-parts even though the surrounding section is obsolete.
ACCEPTANCE: rewritten briefing reflects the current Phase-4 landscape (D-235,
D-244, D-257, D-255), points to palette.md/conventions.md as live authorities
rather than duplicating content, drops v0.2-pivot and superseded-question
framing, lists araminta''s actual current/open tickets.
SEQUENCING: independent of T-1049 (different files, no shared input) both can
run in the same batch.', 'in_progress', 'medium', 'qatux', 'visual', NULL, '2026-06-12 10:40:59', '2026-07-25 20:54:36.535', NULL, '23d0250d37a3a109902cb6e96adf5ca2', 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);