`reach character {logo, strip-glb, qa, qa-analyze}` replaces make_logo.py,
glb_strip_utility_nodes.py, analyze_captures.py and the run-garment-qa bash
driver. The QA configs and method doc move beside the domain (qa_configs/,
GARMENT_QA.md), and `qa` takes a config name (`reach character qa hoodie_modern`)
or a path.
Parity, from baselines taken before anything moved:
- the logo PNG is byte-identical
- a synthetic GLB with three real utility nodes strips to identical bytes
(the committed bodies strip 0 nodes, so they proved nothing)
- re-analyzing a cached capture set gives a byte-identical report.json and
summary
run-garment-qa is rewritten, not wrapped (D-263). Its decisions — which config,
which Godot ($GODOT, then ~/bin/godot4, then PATH), and whether xvfb-run is
needed — are capture_plan(), pinned by tooling/test_character.py without
launching Godot. The bash exit codes are kept: 2 for a missing config, 3 for
no Godot.
The T-1271 domain map was wrong about this domain. Six of its ten files import
bpy: convert_outfit, inspect_glb, check_hair_symmetry, check_icosphere,
render_quaternius_test and test_quaternius_raw. They are Blender payloads and
joined the carve-out as blender_* (41 payloads now). The 22 existing payloads'
docstrings still cited tooling/garment-fit/ from before T-1273; fixed.
Archived, with reasons in tooling/archive/README.md:
- setup_clothing_metadata.py wrote coverage data for five garments that no
longer exist in the 24-garment wardrobe
- wipe-bodies.sh ran raw DELETEs on systems.db
segment_reference_distribution.md moved to docs/assets/visual/.
Behaviour changes:
- The QA analyzer exited 0 whatever it found, though its own README says
clip-through "is the real defect and it gates". qa and qa-analyze now exit 1
on clip-through, and the remedy names --min-pixels (Wave 1/2 were accepted
at 150). The cached peasant set has 33 failures at the default 8 px.
- glb strip re-reported the same nodes as stripped on every re-run and
rewrote an unchanged file: it left them as orphans and then found them
again. Only nodes still linked into the graph count now, and a first pass
writes the same bytes as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
title, description, type, status
| title | description | type | status |
|---|---|---|---|
| Asset Pipeline Index | Master index linking all asset pipelines (audio, visual, video) with structure and conventions | design | active |
Asset Pipeline Index
Centralized tracking for all production assets across pipelines. Each pipeline has its own index, palette (style bible), and per-category asset tables.
Pipelines
| Pipeline | Index | Palette | Status |
|---|---|---|---|
| Audio | audio/README.md | audio/palette.md | Active — Sprint 7 |
| Visual | visual/README.md | visual/palette.md | Active — catalog + style bible instantiated (T-1050/T-1052) |
| Video | video/README.md | video/palette.md | Stub |
Structure
docs/assets/
README.md # This file — master index
_templates/
audio.md # Row template + detailed entry template for audio
sprite.md # LEGACY object-sprite row template (D-244 retired sprites; model/texture/artwork rows are inline in each visual/*.md file, T-1050)
video.md # Row template + detailed entry template for video
asset-brief.md # One-page per-class brief template (scope/visual reference/naming/gen path/acceptance) — T-1049
briefs/ # Per-asset-class briefs gating T-961's child stories (T-1049) + deferred.md formal deferral note
audio/
README.md # Audio pipeline index — categories, status summary
palette.md # Sonic palette, aesthetic guide, generation approach
ambient.md # All ambient loops (station, planet, biome, weather)
sfx.md # All SFX (footsteps, doors, impacts, events)
ui.md # All UI sounds (cursor, chimes, insert-tech)
visual/ # 3D models + textures + flat artwork (D-244 — no per-object sprites)
README.md # Visual pipeline index
palette.md # Art direction, "the angle", color relationships
models.md # 3D objects/props (.glb via Trellis /glb-gen)
textures.md # PBR surface maps (BaseColor/Normal/Roughness) for 3D models
artwork.md # Flat 2D art — paintings, flags, billboards, signage (via /sprite-gen)
icons.md # UI icons, status indicators (UI layer)
effects.md # Shaders, particles, overlays
conventions.md # Model naming, mask sidecars, D-235-keyed texture naming, footprint metadata (T-1050)
video/
README.md # Video pipeline index
palette.md # Motion/editing style guide
trailers.md # Marketing / Steam page trailers
cutscenes.md # In-game narrative moments
Conventions
- One .md per category — asset table with one row per asset, detailed entries below for complex items
- palette.md per pipeline — the style bible. Aesthetic baseline, theme, generation approach.
- Status values:
planned|in-progress|placeholder|final - Templates:
_templates/{type}.md— row format + detailed entry format - Asset files live in
client/assets/{type}/— these docs track design and production metadata - Category splitting: When a category file grows too long, split by domain (e.g.,
furniture-station.md,furniture-colony.md)
Cross-References
- Decision files:
decisions/(D-038 audio scope, D-033 entity colors, D-019 camera angle) - Art direction workshop:
docs/workshops/art-direction-mood-board/ - Sprint briefings:
docs/sprints/sprint-N/{team}.md - Per-class asset briefs: briefs/ — station walls, rural walls, doors, floors, furniture/props, each gating a T-961 child story (T-1049); briefs/deferred.md records the formal deferral for lamp posts / TVs / billboards / barns (T-1051) + cars (Q-067).