Ratifies the asset-rendering direction and roots out the sprite-vs-3D drift surfaced this session.
D-244 records what the character architecture (D-159–D-164, runtime CharacterVisualDescriptor compositing) and the Trellis environment pipeline already implied but no decision had captured: the in-world view renders 3D objects directly; the only flattened 2D content is textures + flat 2D artwork (paintings, flags, billboards, signage). There is no per-object sprite layer — a character with runtime slot compositing (body × head × hair × clothing × shape-keys × …) is combinatorially impossible to express as pre-rendered sprites.
Root cause it fixes
The early-spike 3D→2D sprite pipeline (#541) and the sprite-centric docs/assets/visual/ catalog were never cleaned out when the project went 3D, so the 2026-06-12 fable-ous audit read them as live ground truth and re-injected the dead sprite model into T-1049/T-1050. Leaving retired scaffolding in the repo with no decision marking it dead is exactly how it re-propagated.
Changes
D-244 (governance/decisions/architecture.md) — the ratifying record.
docs/assets/visual/README.md + docs/assets/README.md — re-scoped from a sprite catalog (sprites/tilesets-as-entities) to 3D models + textures + flat artwork.
/sprite-gen skill + renderer/README.md — repurposed as the 2D-artwork generator (paintings/flags/billboards/signage); the legacy 4-direction object-sprite mode flagged as retired.
T-961/T-1049/T-1050 already held in backlog pending re-scope (the asset-hold meta commit rides along).
Notes
Docs/governance/skill only — no code; pre-push gate skipped Rust/GDScript/Python.
Follow-up (not in scope): a flat-artwork single-view mode for the render script; re-scoping T-961/T-1049/T-1050 around 3D models + textures.
## Summary
Ratifies the asset-rendering direction and roots out the sprite-vs-3D drift surfaced this session.
**D-244** records what the character architecture (D-159–D-164, runtime `CharacterVisualDescriptor` compositing) and the Trellis environment pipeline already implied but no decision had captured: **the in-world view renders 3D objects directly; the only flattened 2D content is textures + flat 2D artwork** (paintings, flags, billboards, signage). There is **no per-object sprite layer** — a character with runtime slot compositing (body × head × hair × clothing × shape-keys × …) is combinatorially impossible to express as pre-rendered sprites.
### Root cause it fixes
The early-spike 3D→2D sprite pipeline (#541) and the sprite-centric `docs/assets/visual/` catalog were **never cleaned out** when the project went 3D, so the 2026-06-12 `fable-ous` audit read them as live ground truth and re-injected the dead sprite model into T-1049/T-1050. Leaving retired scaffolding in the repo with no decision marking it dead is exactly how it re-propagated.
### Changes
- **D-244** (governance/decisions/architecture.md) — the ratifying record.
- **docs/assets/visual/README.md** + **docs/assets/README.md** — re-scoped from a sprite catalog (sprites/tilesets-as-entities) to **3D models + textures + flat artwork**.
- **/sprite-gen skill + renderer/README.md** — **repurposed as the 2D-artwork generator** (paintings/flags/billboards/signage); the legacy 4-direction object-sprite mode flagged as retired.
- T-961/T-1049/T-1050 already held in backlog pending re-scope (the asset-hold meta commit rides along).
### Notes
- Docs/governance/skill only — no code; pre-push gate skipped Rust/GDScript/Python.
- Follow-up (not in scope): a flat-artwork single-view mode for the render script; re-scoping T-961/T-1049/T-1050 around 3D models + textures.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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>
D-244 ratifies what the character architecture (D-159..D-164, runtime
CharacterVisualDescriptor compositing) and the Trellis env pipeline already implied
but no decision had recorded: the in-world view renders 3D objects directly; the only
flattened 2D content is textures + flat 2D artwork (paintings/flags/billboards/signage).
There is no per-object sprite layer.
Roots out the drift: the early-spike 3D->2D sprite pipeline (#541) and the sprite-centric
docs/assets/visual catalog were never cleaned out when the project went 3D, so the
2026-06-12 fable-ous audit read them as live and re-injected the dead sprite model into
T-1049/T-1050. Fix:
- docs/assets/visual/README.md + docs/assets/README.md re-scoped to 3D models + textures
+ flat artwork (dropped the sprites/tilesets-as-entities framing).
- /sprite-gen + renderer/README repurposed as the 2D-artwork generator (paintings/flags/
billboards/signage), not the in-world object format; legacy 4-direction object-sprite
mode flagged as retired.
- T-961/T-1049/T-1050 already held in backlog pending this.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR #169 Review — asset-direction-3d → main (decision + docs)
Reviewers: Tyre (architecture) + Hoshe (doc QA), both on the branch via git show.
Verdict: CHANGES REQUESTED. D-244's rationale and scope are correct and the repurpose is coherent — but the record landed disconnected from the decision graph, and there are concrete doc defects. All findings below verified against the tree.
Tyre (Architecture) — REQUEST_CHANGES
D-244 must reference its precedent.D-148 (30° camera, supersedes D-019) and D-149 ("3D characters rendered live in scene — not pre-rendered sprites") already ratified the 3D pivot for camera + characters in Sprint 28. D-244 completes it (objects + assets) but doesn't cite either.
Reconcile the 5 sprite-era decisions D-244 contradicts/obsoletes — none are mentioned by D-244:
D-049 — z-stack "Entity sprites" / CanvasLayer y-sort (logical layering survives; implementation language is sprite-era).
D-066 — "sprite footprint" / "sprites look right" language (coordinate model + 2×2 geometry minimum survive).
D-019 — already superseded by D-148, but renderer/README still cites it as the active camera spec.
Hoshe (Doc QA) — REQUEST_CHANGES
#
File
Issue
1
architecture.md D-244
Broken anchors — [D-159](#d-159) and [D-241](#d-241) resolve to architecture.md, but D-159 lives in scope.md and D-241 in process.md. Use the cross-file slug form.
2
renderer/README.md:4
Bare [D-244] — not a link.
3
renderer/README.md
"Adding a New Model" step 6 (client/assets/sprites/), Material Guidelines, Design Constraints, Models table — unmarked legacy object-sprite instructions under the "repurposed" header.
4
docs/assets/README.md
_templates/sprite.md comment relabeled "2D artwork rows" but the template file still carries the full object-sprite schema (SPR-001, 4-dir, resolutions) — inconsistent.
Disposition (decided: amend all 5 now)
In this PR: D-244 references D-148/D-149 + lists all 5 in cross-refs with status notes; D-043/D-044/D-049/D-066 amended with superseded/clarified notes; renderer/README camera note → D-148, legacy markers added; broken anchors + bare link + template inconsistency fixed.
## PR #169 Review — `asset-direction-3d` → main (decision + docs)
Reviewers: **Tyre** (architecture) + **Hoshe** (doc QA), both on the branch via `git show`.
**Verdict: CHANGES REQUESTED.** D-244's rationale and scope are correct and the repurpose is coherent — but the record landed disconnected from the decision graph, and there are concrete doc defects. All findings below verified against the tree.
### Tyre (Architecture) — REQUEST_CHANGES
- **D-244 must reference its precedent.** **D-148** (30° camera, supersedes D-019) and **D-149** ("3D characters rendered live in scene — not pre-rendered sprites") already ratified the 3D pivot for camera + characters in Sprint 28. D-244 *completes* it (objects + assets) but doesn't cite either.
- **Reconcile the 5 sprite-era decisions D-244 contradicts/obsoletes** — none are mentioned by D-244:
- **D-043** (`perception.md`) — *"not 3D… Light2D pipeline"* — sharpest contradiction; needs a superseded-for-in-world amendment.
- **D-044** — entity 2×2 sprite footprint / 24×32px (sim occupancy survives; pixel footprint is sprite-era).
- **D-049** — z-stack "Entity sprites" / CanvasLayer y-sort (logical layering survives; implementation language is sprite-era).
- **D-066** — "sprite footprint" / "sprites look right" language (coordinate model + 2×2 geometry minimum survive).
- **D-019** — already superseded by D-148, but `renderer/README` still cites it as the active camera spec.
### Hoshe (Doc QA) — REQUEST_CHANGES
| # | File | Issue |
|---|------|-------|
| 1 | `architecture.md` D-244 | Broken anchors — `[D-159](#d-159)` and `[D-241](#d-241)` resolve to `architecture.md`, but D-159 lives in `scope.md` and D-241 in `process.md`. Use the cross-file slug form. |
| 2 | `renderer/README.md:4` | Bare `[D-244]` — not a link. |
| 3 | `renderer/README.md` | "Adding a New Model" step 6 (`client/assets/sprites/`), Material Guidelines, Design Constraints, Models table — unmarked legacy object-sprite instructions under the "repurposed" header. |
| 4 | `docs/assets/README.md` | `_templates/sprite.md` comment relabeled "2D artwork rows" but the template file still carries the full object-sprite schema (SPR-001, 4-dir, resolutions) — inconsistent. |
### Disposition (decided: amend all 5 now)
In this PR: D-244 references D-148/D-149 + lists all 5 in cross-refs with status notes; **D-043/D-044/D-049/D-066 amended** with superseded/clarified notes; `renderer/README` camera note → D-148, legacy markers added; broken anchors + bare link + template inconsistency fixed.
All findings resolved; decisions sync + validate clean.
Tyre (architecture) — decision-graph reconciliation
D-244 now references its precedent: [D-148] (3D camera, supersedes D-019) + [D-149] (live 3D characters, not sprites) — D-244 completes that pivot for all objects + the asset pipeline.
The 5 sprite-era decisions reconciled, all amended 2026-06-17:
D-043 — "not 3D"/Light2D scoped to the overlay layers; in-world is 3D.
renderer/README.md:4 bare [D-244] now a proper link.
3
renderer/README: D-019→D-148 camera note; a "⚠️ Legacy: object-sprite workflow (retired)" banner over the object-sprite sections; the resolution-chain output path qualified (artwork → textures/artwork, not sprites/).
4
_templates/sprite.md marked the legacy object-sprite row schema (model/texture/artwork template TBD); the docs/assets/README.md comment updated to match.
Ready for re-review or merge.
## Review findings addressed — `ae7606ed8`
All findings resolved; decisions sync + validate clean.
### Tyre (architecture) — decision-graph reconciliation
- **D-244 now references its precedent:** [D-148] (3D camera, supersedes D-019) + [D-149] (live 3D characters, not sprites) — D-244 *completes* that pivot for all objects + the asset pipeline.
- **The 5 sprite-era decisions reconciled, all amended 2026-06-17:**
- **D-043** — "not 3D"/Light2D scoped to the overlay layers; in-world is 3D.
- **D-044** — 2×2/24×32px sprite footprint retired; 1×1 sim occupancy + visual hierarchy survive.
- **D-049** — z-stack as a *logical* layering model survives; "entity sprites"/CanvasLayer y-sort implementation language retired.
- **D-066** — dual-scale coordinate model + 2×2 geometry minimum survive; "sprite footprint" language flagged legacy.
- D-244's cross-references now list all of the above with status notes.
### Hoshe (doc QA)
| # | Fix |
|---|-----|
| 1 | D-244 broken anchors corrected — `[D-159]`→`scope.md#…`, `[D-241]`→`process.md#…` (cross-file slug form). |
| 2 | `renderer/README.md:4` bare `[D-244]` now a proper link. |
| 3 | `renderer/README`: D-019→D-148 camera note; a "⚠️ Legacy: object-sprite workflow (retired)" banner over the object-sprite sections; the resolution-chain output path qualified (artwork → textures/artwork, not sprites/). |
| 4 | `_templates/sprite.md` marked the legacy object-sprite row schema (model/texture/artwork template TBD); the `docs/assets/README.md` comment updated to match. |
Ready for re-review or merge.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Ratifies the asset-rendering direction and roots out the sprite-vs-3D drift surfaced this session.
D-244 records what the character architecture (D-159–D-164, runtime
CharacterVisualDescriptorcompositing) and the Trellis environment pipeline already implied but no decision had captured: the in-world view renders 3D objects directly; the only flattened 2D content is textures + flat 2D artwork (paintings, flags, billboards, signage). There is no per-object sprite layer — a character with runtime slot compositing (body × head × hair × clothing × shape-keys × …) is combinatorially impossible to express as pre-rendered sprites.Root cause it fixes
The early-spike 3D→2D sprite pipeline (#541) and the sprite-centric
docs/assets/visual/catalog were never cleaned out when the project went 3D, so the 2026-06-12fable-ousaudit read them as live ground truth and re-injected the dead sprite model into T-1049/T-1050. Leaving retired scaffolding in the repo with no decision marking it dead is exactly how it re-propagated.Changes
Notes
🤖 Generated with Claude Code
PR #169 Review —
asset-direction-3d→ main (decision + docs)Reviewers: Tyre (architecture) + Hoshe (doc QA), both on the branch via
git show.Verdict: CHANGES REQUESTED. D-244's rationale and scope are correct and the repurpose is coherent — but the record landed disconnected from the decision graph, and there are concrete doc defects. All findings below verified against the tree.
Tyre (Architecture) — REQUEST_CHANGES
perception.md) — "not 3D… Light2D pipeline" — sharpest contradiction; needs a superseded-for-in-world amendment.renderer/READMEstill cites it as the active camera spec.Hoshe (Doc QA) — REQUEST_CHANGES
architecture.mdD-244[D-159](#d-159)and[D-241](#d-241)resolve toarchitecture.md, but D-159 lives inscope.mdand D-241 inprocess.md. Use the cross-file slug form.renderer/README.md:4[D-244]— not a link.renderer/README.mdclient/assets/sprites/), Material Guidelines, Design Constraints, Models table — unmarked legacy object-sprite instructions under the "repurposed" header.docs/assets/README.md_templates/sprite.mdcomment relabeled "2D artwork rows" but the template file still carries the full object-sprite schema (SPR-001, 4-dir, resolutions) — inconsistent.Disposition (decided: amend all 5 now)
In this PR: D-244 references D-148/D-149 + lists all 5 in cross-refs with status notes; D-043/D-044/D-049/D-066 amended with superseded/clarified notes;
renderer/READMEcamera note → D-148, legacy markers added; broken anchors + bare link + template inconsistency fixed.Review findings addressed —
ae7606ed8All findings resolved; decisions sync + validate clean.
Tyre (architecture) — decision-graph reconciliation
Hoshe (doc QA)
[D-159]→scope.md#…,[D-241]→process.md#…(cross-file slug form).renderer/README.md:4bare[D-244]now a proper link.renderer/README: D-019→D-148 camera note; a "⚠️ Legacy: object-sprite workflow (retired)" banner over the object-sprite sections; the resolution-chain output path qualified (artwork → textures/artwork, not sprites/)._templates/sprite.mdmarked the legacy object-sprite row schema (model/texture/artwork template TBD); thedocs/assets/README.mdcomment updated to match.Ready for re-review or merge.
Pull request closed