docs(assets): 3D asset catalog, production path + Phase-4 style bible #211

Closed
jpmschweitzer wants to merge 0 commits from visual-asset-catalog into main
Owner

Summary

Batch-5 visual track: T-1050 + T-1052, implementing the batch-5 Si re-scope (sprite-era plan invalidated by D-244).

T-1050 (justine): the five D-244 catalog files (models/textures/artwork/icons/effects — icons carries the 13 as-built SVGs with traced consumers), client/assets/models/{furniture,props}/ + schema-documented manifest.json mirroring the character manifest, glb-gen SKILL.md stale-path fix, and docs/assets/visual/conventions.md (model naming, mask sidecars, D-235-token texture naming, footprint_tiles; door-state + TileSet recorded as explicit Phase-5 deferrals).

T-1052 (araminta): full Phase-4 style bible in palette.md — D-148/D-019 camera split, color/material register for every D-235 ObjectTag, survives-vs-superseded reconciliation with visual-grammar-v01.md and the mood-board transcript.

Two delegated art rulings recorded (flagged for Jeroen veto): category-first model naming (table_baroque.glb); environment props share the character toon treatment with a minimal-PBR carve-out for glass/polished metal (sightline truthfulness under occlusion-based perception).

Test plan

  • Docs + empty scaffolding only; no rendered path changes (no eyeball owed)
  • Pre-push gate green: full gdUnit 3638/3638
  • All catalog links verified resolving; manifest schema self-documenting with labeled example block
## Summary Batch-5 visual track: T-1050 + T-1052, implementing the batch-5 Si re-scope (sprite-era plan invalidated by D-244). **T-1050 (justine):** the five D-244 catalog files (models/textures/artwork/icons/effects — icons carries the 13 as-built SVGs with traced consumers), client/assets/models/{furniture,props}/ + schema-documented manifest.json mirroring the character manifest, glb-gen SKILL.md stale-path fix, and docs/assets/visual/conventions.md (model naming, mask sidecars, D-235-token texture naming, footprint_tiles; door-state + TileSet recorded as explicit Phase-5 deferrals). **T-1052 (araminta):** full Phase-4 style bible in palette.md — D-148/D-019 camera split, color/material register for every D-235 ObjectTag, survives-vs-superseded reconciliation with visual-grammar-v01.md and the mood-board transcript. **Two delegated art rulings recorded (flagged for Jeroen veto):** category-first model naming (table_baroque.glb); environment props share the character toon treatment with a minimal-PBR carve-out for glass/polished metal (sightline truthfulness under occlusion-based perception). ## Test plan - Docs + empty scaffolding only; no rendered path changes (no eyeball owed) - Pre-push gate green: full gdUnit 3638/3638 - All catalog links verified resolving; manifest schema self-documenting with labeled example block
jpmschweitzer added 2 commits 2026-07-25 20:26:57 +02:00
Instantiates the five D-244 catalog files (models/textures/artwork/icons/
effects — icons carries the 13 as-built SVGs, stance icons traced to their
consumer and marked final), creates client/assets/models/{furniture,props}
with a schema-documented manifest.json mirroring the character manifest,
fixes glb-gen SKILL.md's stale 'path does not exist' paragraph, and authors
docs/assets/visual/conventions.md: category-first model naming (araminta
ruling), mask sidecars per the character convention, D-235-token-keyed
texture naming, footprint_tiles as manifest metadata. Door-state and
TileSet conventions are recorded as explicit deferrals (Phase-5 owned).
visual/README.md carries both this ticket's count/link updates and
T-1052's palette-section rewrite (shared file, committed here).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Authors the full style bible: camera table separating D-148 gameplay from
D-019 offline-renderer use; the delegated toon-vs-PBR ruling (environment
props share the character toon treatment, with a minimal-PBR carve-out for
glass/polished metal so sightlines read truthfully under occlusion-based
perception); a color/material register for every D-235 ObjectTag (hue,
grain, D-217-keyed weathering); and explicit supersession notes both ways
with visual-grammar-v01.md and the mood-board workshop transcript.
Includes branch-side pql changelog rows (T-1050/T-1052 -> review); the
worktree pre-commit export step failed benignly (write-through had
already refreshed the files) so they are staged explicitly here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Owner

Review: visual-asset-catalog -> main (type: mixed docs/assets)

Reviewers: Hoshe (QA) + Tyre (architecture/governance). Both REQUEST_CHANGES.

Hoshe (QA): REQUEST_CHANGES

# File Issue
1 docs/assets/README.md:17 Master pipeline table's Visual row still reads Status: Stub — contradicted by this PR's own visual/README.md ("Active — catalog structure instantiated, T-1050") and palette.md ("Active — Phase-4 style bible, T-1052"). Update to Active, matching the audio row's convention.

Verified clean (no action): icons.md 13-SVG inventory + consumer trace exact (4 stance icons wired via stance_indicator.gd ICON_MAP, 9 unconsumed, no other consumers); manifest.json valid + mirrors the character manifest's keyed-object pattern, and the actual loader precedent (manifest.get("furniture", {})) never iterates top-level keys; all acceptance criteria met item-by-item; every added link/anchor resolves; status vocab consistent; empty-table discipline held; palette.md's register covers all 32 D-235 tags + 4 generics with accurate D-217 weathering language. Noted: pre-existing broken D-066 links (workshop-outcomes.md:93,122, stale relative paths) predate the branch — folded into the fix round as leave-cleaner since the PR touches the file.

Tyre (architecture/governance): REQUEST_CHANGES

# File Issue
1 HIGH palette.md §2.1/§2.2 The binding glass carve-out is keyed to precision_glass/smart_facade — retired pre-amendment example tokens the 2026-07-07 D-235 amendment says "never shipped"; zero matches in object_tag_vocabulary.toml. §2 thereby contradicts §3's own ratified list in the same file, and precision_glass is axis-mislabeled "(facade)" (it was a wall label in the dead list). Replace with the ratified glass_curtain_wall (wall) + industrial_glazing (facade); fix the axis label.
2 conventions.md §2 Mask-channel semantics attributed to character-asset-organization.md "Section 3" — the channel/color semantics live in Section 5 (Mask Sidecar Convention); Section 3 only covers the filename. Fix the pointer.
3 palette.md §2 (governance) Ruling: the toon/PBR treatment needs a D-record; category-first naming does not. The ruling binds all future environment shader work, carves a PBR exception on occlusion-perception gameplay load, and reconciles against D-235/D-244 — the exact profile those records have. Claim + write the record (cross-ref D-043/D-044/D-235/D-244); palette.md §2 points at it rather than being the authority. Gives the veto a durable target.
4 client/assets/models/manifest.json Underscore pseudo-keys (_comment/_fields/_example_only_not_a_real_asset) diverge from the character manifest (pure data, external docs) and the example block contains a structurally-valid phantom entry (furniture/table_baroque.glb). No loader exists yet, but a naive top-level-key iterator inherits a trap with no stated skip contract. Cheapest fix: add an explicit "keys prefixed _ are metadata — loaders must skip them" line to _comment.
5 palette.md:6 (LOW) decision_refs frontmatter omits D-149, which the body load-bears at line 31. Add it.

Verified clean (no action): all 32+4 D-235 tokens exact vs the ratified TOML; D-148/D-019 camera split correct; D-217 weathering faithful; setup_materials() claim exact (postprocess_glb.py:290,300-301); door-state + TileSet deferrals correctly Phase-5-owned per D-166 with nothing built on Phase-5 code; supersession notes leave exactly one live style authority; T-961 "production path, not world population" boundary respected.

Verdict: CHANGES REQUESTED

Fix round dispatched to the authoring agents (araminta: T1/T3/T5 + the D-066 leave-cleaner; justine: H1/T2/T4). Lead verifies, commits, re-pushes through the gate.

# Review: visual-asset-catalog -> main (type: mixed docs/assets) Reviewers: Hoshe (QA) + Tyre (architecture/governance). Both REQUEST_CHANGES. ## Hoshe (QA): REQUEST_CHANGES | # | File | Issue | |---|------|-------| | 1 | docs/assets/README.md:17 | Master pipeline table's Visual row still reads `Status: Stub` — contradicted by this PR's own visual/README.md ("Active — catalog structure instantiated, T-1050") and palette.md ("Active — Phase-4 style bible, T-1052"). Update to Active, matching the audio row's convention. | Verified clean (no action): icons.md 13-SVG inventory + consumer trace exact (4 stance icons wired via stance_indicator.gd ICON_MAP, 9 unconsumed, no other consumers); manifest.json valid + mirrors the character manifest's keyed-object pattern, and the actual loader precedent (`manifest.get("furniture", {})`) never iterates top-level keys; all acceptance criteria met item-by-item; every added link/anchor resolves; status vocab consistent; empty-table discipline held; palette.md's register covers all 32 D-235 tags + 4 generics with accurate D-217 weathering language. Noted: pre-existing broken D-066 links (workshop-outcomes.md:93,122, stale relative paths) predate the branch — folded into the fix round as leave-cleaner since the PR touches the file. ## Tyre (architecture/governance): REQUEST_CHANGES | # | File | Issue | |---|------|-------| | 1 | **HIGH** palette.md §2.1/§2.2 | The binding glass carve-out is keyed to `precision_glass`/`smart_facade` — retired pre-amendment example tokens the 2026-07-07 D-235 amendment says "never shipped"; zero matches in object_tag_vocabulary.toml. §2 thereby contradicts §3's own ratified list in the same file, and `precision_glass` is axis-mislabeled "(facade)" (it was a wall label in the dead list). Replace with the ratified `glass_curtain_wall` (wall) + `industrial_glazing` (facade); fix the axis label. | | 2 | conventions.md §2 | Mask-channel semantics attributed to character-asset-organization.md "Section 3" — the channel/color semantics live in Section 5 (Mask Sidecar Convention); Section 3 only covers the filename. Fix the pointer. | | 3 | palette.md §2 (governance) | **Ruling: the toon/PBR treatment needs a D-record; category-first naming does not.** The ruling binds all future environment shader work, carves a PBR exception on occlusion-perception gameplay load, and reconciles against D-235/D-244 — the exact profile those records have. Claim + write the record (cross-ref D-043/D-044/D-235/D-244); palette.md §2 points at it rather than being the authority. Gives the veto a durable target. | | 4 | client/assets/models/manifest.json | Underscore pseudo-keys (`_comment`/`_fields`/`_example_only_not_a_real_asset`) diverge from the character manifest (pure data, external docs) and the example block contains a structurally-valid phantom entry (`furniture/table_baroque.glb`). No loader exists yet, but a naive top-level-key iterator inherits a trap with no stated skip contract. Cheapest fix: add an explicit "keys prefixed `_` are metadata — loaders must skip them" line to `_comment`. | | 5 | palette.md:6 (LOW) | `decision_refs` frontmatter omits D-149, which the body load-bears at line 31. Add it. | Verified clean (no action): all 32+4 D-235 tokens exact vs the ratified TOML; D-148/D-019 camera split correct; D-217 weathering faithful; setup_materials() claim exact (postprocess_glb.py:290,300-301); door-state + TileSet deferrals correctly Phase-5-owned per D-166 with nothing built on Phase-5 code; supersession notes leave exactly one live style authority; T-961 "production path, not world population" boundary respected. ## Verdict: CHANGES REQUESTED Fix round dispatched to the authoring agents (araminta: T1/T3/T5 + the D-066 leave-cleaner; justine: H1/T2/T4). Lead verifies, commits, re-pushes through the gate.
jpmschweitzer added 2 commits 2026-07-25 20:51:11 +02:00
Review round (Hoshe + Tyre, both REQUEST_CHANGES) fully addressed:
palette.md's glass carve-out re-keyed from retired never-shipped tokens
(precision_glass/smart_facade) to the ratified glass_curtain_wall (wall)
+ industrial_glazing (facade); the toon/PBR treatment promoted from a
docs-only ruling to D-257 (architecture, cross-refs D-235/D-244/D-043/
D-044/D-033) with palette.md §2 now citing it as authority; D-149 +
D-257 added to decision_refs; manifest.json _comment gains the explicit
underscore-prefix loader skip contract; master pipeline table Visual row
Stub -> Active; conventions.md mask pointer Section 3 -> 5; pre-existing
broken D-066 links in the mood-board transcript repaired (leave-cleaner).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Owner

Fix round — all 6 findings addressed in 2ca70d022

Reviewer # Resolution
Hoshe 1 Fixed — docs/assets/README.md Visual row StubActive — catalog + style bible instantiated (T-1050/T-1052), matching the Audio row's phrasing convention
Tyre 1 (HIGH) Fixed — palette.md §2.1/§2.2 re-keyed to the ratified glass_curtain_wall (wall) + industrial_glazing (facade); axis mislabel corrected; grep confirms zero remaining precision_glass/smart_facade references; §3.1 cross-ref verified still correct
Tyre 2 Fixed — conventions.md mask-channel pointer Section 3 → Section 5, verified against the actual doc structure (Section 3 = filename only; Section 5 = channel semantics)
Tyre 3 FixedD-257 claimed + written in governance/decisions/architecture.md (filed in architecture alongside D-235/D-244/D-148 rather than perception — the binding content is rendering treatment; D-043/D-044 cross-referenced for the perception rationale). palette.md §2 now cites D-257 as authority instead of being it. pql decisions validate passes; sync clean (0 broken refs)
Tyre 4 Fixed — manifest.json _comment now states the explicit contract: _-prefixed top-level keys are metadata, loaders must skip them. Example block retained (well-labeled). JSON re-validated
Tyre 5 (LOW) Fixed — D-149 + D-257 added to palette.md decision_refs and the appendix cross-reference table

Bonus (leave-cleaner, from Hoshe's notes): the pre-existing broken D-066 links in workshop-outcomes.md (lines 93/122, stale relative paths missing the governance/ segment) repaired and verified against the real anchor.

No retractions — every finding was accurate.

Gate detour (for the record): the fix-round push first bounced on 2 viewer-test failures this docs branch could not have caused — a latent main-side isolation defect (viewer unit tests riding the machine-shared user://atlas_cache/; the T-1183 disk lookup short-circuits before test_mode's no-op IPC), exposed by a concurrent live GJ380c capture from the T-1157 work warming the exact key the tests assume cold. Fixed at root on main (9ac98542d: disk_cache_root_override seam + hermetic _make_viewer() helpers — the first slice of T-1193, verified passing against a deliberately warm cache), merged back into this branch. Gate then green (full gdUnit 3638/3638). Proceeding to merge.

# Fix round — all 6 findings addressed in `2ca70d022` | Reviewer | # | Resolution | |----------|---|------------| | Hoshe | 1 | **Fixed** — docs/assets/README.md Visual row `Stub` → `Active — catalog + style bible instantiated (T-1050/T-1052)`, matching the Audio row's phrasing convention | | Tyre | 1 (HIGH) | **Fixed** — palette.md §2.1/§2.2 re-keyed to the ratified `glass_curtain_wall` (wall) + `industrial_glazing` (facade); axis mislabel corrected; grep confirms zero remaining `precision_glass`/`smart_facade` references; §3.1 cross-ref verified still correct | | Tyre | 2 | **Fixed** — conventions.md mask-channel pointer Section 3 → Section 5, verified against the actual doc structure (Section 3 = filename only; Section 5 = channel semantics) | | Tyre | 3 | **Fixed** — **D-257** claimed + written in governance/decisions/architecture.md (filed in architecture alongside D-235/D-244/D-148 rather than perception — the binding content is rendering treatment; D-043/D-044 cross-referenced for the perception rationale). palette.md §2 now cites D-257 as authority instead of being it. `pql decisions validate` passes; sync clean (0 broken refs) | | Tyre | 4 | **Fixed** — manifest.json `_comment` now states the explicit contract: `_`-prefixed top-level keys are metadata, loaders must skip them. Example block retained (well-labeled). JSON re-validated | | Tyre | 5 (LOW) | **Fixed** — D-149 + D-257 added to palette.md `decision_refs` and the appendix cross-reference table | Bonus (leave-cleaner, from Hoshe's notes): the pre-existing broken D-066 links in workshop-outcomes.md (lines 93/122, stale relative paths missing the `governance/` segment) repaired and verified against the real anchor. No retractions — every finding was accurate. **Gate detour (for the record):** the fix-round push first bounced on 2 viewer-test failures this docs branch could not have caused — a latent main-side isolation defect (viewer unit tests riding the machine-shared `user://atlas_cache/`; the T-1183 disk lookup short-circuits before test_mode's no-op IPC), exposed by a concurrent live GJ380c capture from the T-1157 work warming the exact key the tests assume cold. Fixed at root on main (`9ac98542d`: `disk_cache_root_override` seam + hermetic `_make_viewer()` helpers — the first slice of T-1193, verified passing against a deliberately warm cache), merged back into this branch. Gate then green (full gdUnit 3638/3638). Proceeding to merge.
jpmschweitzer closed this pull request 2026-07-25 20:54:56 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jpmschweitzer/settled-reach#211