data(assets): first production environment assets — four spike GLBs promoted (T-1204) #214

Closed
jpmschweitzer wants to merge 0 commits from furniture-promotion into main
Owner

Summary

Batch-7 visual track: the first real environment assets enter the game per the furniture-props brief (T-1049/PR #213).

  • table_baroque, chair_modernist, desk_scifi (furniture, with mask sidecars) and lion_statue (props, non-tintable) promoted into client/assets/models/ under the category-first convention — byte-identical to the spike sources (MD5-verified), spikes/ untouched, vw_beetle excluded per the Q-067 deferral.
  • Postprocess verified already-applied by Blender node-graph inspection (mat_primary, roughness=1.0/specular=0.0 at the shader-input level) — not re-run.
  • All four registered in manifest.json at 'planned'; models.md catalog rows + README counts updated.
  • Discovery documented (conventions.md §2 + glb-gen SKILL.md): Godot externalizes each GLB's embedded texture as a loose <model>_Image_0.png referenced by binary UID even with embedded_image_handling=3 — a mandatory, previously-undocumented commit-with-the-model sidecar; deleting it breaks loading with an error no text-grep can trace.

For the review round (araminta)

footprint_tiles ruling needed: all four spike GLBs are Blender-normalized to 1m max dimension, so real-world footprint is not derivable from geometry. The brief's [2,1] example turns out to be illustrative, not derivable. This PR sets [1,1] for all four as a flagged judgment call — rule whether normalized spike assets default [1,1] or whether promotion requires an author-supplied real-world scale, and whether the brief gets amended.

Test plan

  • In-engine proof: clean headless import; ResourceLoader.load + instantiate verified for all four
  • Pre-push gate green (full gdUnit)
  • No runtime rendering path consumes these yet (Phase-5 concern) — no eyeball owed; the load proof is the acceptance
## Summary Batch-7 visual track: the first real environment assets enter the game per the furniture-props brief (T-1049/PR #213). - **table_baroque, chair_modernist, desk_scifi** (furniture, with mask sidecars) and **lion_statue** (props, non-tintable) promoted into client/assets/models/ under the category-first convention — byte-identical to the spike sources (MD5-verified), spikes/ untouched, vw_beetle excluded per the Q-067 deferral. - Postprocess verified already-applied by Blender node-graph inspection (mat_primary, roughness=1.0/specular=0.0 at the shader-input level) — not re-run. - All four registered in manifest.json at 'planned'; models.md catalog rows + README counts updated. - **Discovery documented** (conventions.md §2 + glb-gen SKILL.md): Godot externalizes each GLB's embedded texture as a loose `<model>_Image_0.png` referenced by binary UID even with embedded_image_handling=3 — a mandatory, previously-undocumented commit-with-the-model sidecar; deleting it breaks loading with an error no text-grep can trace. ## For the review round (araminta) **footprint_tiles ruling needed:** all four spike GLBs are Blender-normalized to 1m max dimension, so real-world footprint is not derivable from geometry. The brief's [2,1] example turns out to be illustrative, not derivable. This PR sets [1,1] for all four as a flagged judgment call — rule whether normalized spike assets default [1,1] or whether promotion requires an author-supplied real-world scale, and whether the brief gets amended. ## Test plan - In-engine proof: clean headless import; ResourceLoader.load + instantiate verified for all four - Pre-push gate green (full gdUnit) - No runtime rendering path consumes these yet (Phase-5 concern) — no eyeball owed; the load proof is the acceptance
jpmschweitzer added 1 commit 2026-07-26 12:59:24 +02:00
table_baroque, chair_modernist, desk_scifi (furniture, with mask
sidecars) and lion_statue (props, non-tintable) enter
client/assets/models/ under the category-first convention, byte-
identical to the spike sources (MD5-verified; spikes/ untouched,
vw_beetle excluded per the Q-067 deferral). Postprocess verified
already-applied by Blender node-graph inspection (mat_primary,
roughness=1.0/specular=0.0 shader inputs — the convenience properties
read stale defaults, the graph is authoritative), so not re-run. All
four registered in manifest.json at 'planned' with footprint_tiles
[1,1] (a flagged judgment call — normalized spike geometry erases
real-world scale; the brief ruling goes to araminta in review).
In-engine proof: clean headless import + ResourceLoader load +
instantiate for all four. Discovery documented in conventions.md §2 +
glb-gen SKILL.md: Godot externalizes the GLB's embedded texture as a
<model>_Image_0.png sidecar referenced by binary UID — it must be
committed or loading breaks with an undiscoverable dependency error.

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

Review: furniture-promotion -> main (type: visual/assets)

Reviewers: Hoshe (QA) + Araminta (art direction — the ruling this PR requested is hers). Hoshe APPROVE; Araminta REQUEST_CHANGES (one doc amendment).

Hoshe (QA): APPROVE

No defects. Independently re-verified: MD5 byte-identity of all 4 GLBs + 3 masks against the spike sources; spikes/ untouched; vw_beetle and lion_statue_mask.png correctly absent; manifest.json valid and schema-exact with correct mask presence/absence and the _-prefix skip contract intact; models.md rows and README count exact; the conventions/SKILL sidecar docs mutually consistent; the mat_primary/roughness/specular claim corroborated against postprocess_glb.py source; live re-verification — clean headless import + ResourceLoader load/instantiate of chair_modernist and lion_statue, script deleted, processes clean.

Araminta (art direction): REQUEST_CHANGES

THE RULING (on the PR's own question): [1,1] STANDS for all four items — each justified by real-world class (café-scale table, chair, compact desk, statue), none misrepresented at 1 tile = 1m (D-243). The judgment call was sound.

General rule (binding going forward): a normalized promotion never infers footprint from geometry — normalization erases real-world scale. footprint_tiles is an AUTHORED value: [1,1] only when the object's real-world class is plausibly single-tile; ordinarily-multi-tile classes require the promoting author to state an intended footprint explicitly. The manifest stays the field of record; the authoring step is what was missing.

# File Issue
1 briefs/furniture-props.md §3 + conventions.md §4 The rule above must be codified BEFORE merge (her exact wording supplied) — the texture-heavy wall stories start next and must inherit a written rule, not tribal knowledge from this PR. Applied lead-side in the fix commit (her wording verbatim; conventions.md §4 gains the authored-not-derived sentence with a pointer to the brief's full rule; a pre-existing "Single Sunday-tile" typo in the same paragraph fixed to "Single-tile" in passing).

Her confirmations on record: category-first renames all correct (desk_scifi's direction verified against the spike source name); mask handling per §3 exact (lion_statue ships NO mask file, not an empty one); the extracted-texture subsection is correctly placed in §2 and stays mechanics-not-taste, no wording changes; D-257 conformance verified at the node-graph level and none of the four is glazing-class; the models.md row honestly carries the spike's known "mask too aggressive" issue rather than silently promoting it as clean; the manifest schema generalizes structurally to the wall stories — the transferable lesson ("don't let a pipeline artifact stand in for an authored value") is exactly why the rule is now written.

Verdict: CHANGES REQUESTED -> amendment applied; merging after gate.

# Review: furniture-promotion -> main (type: visual/assets) Reviewers: Hoshe (QA) + Araminta (art direction — the ruling this PR requested is hers). Hoshe APPROVE; Araminta REQUEST_CHANGES (one doc amendment). ## Hoshe (QA): APPROVE No defects. Independently re-verified: MD5 byte-identity of all 4 GLBs + 3 masks against the spike sources; spikes/ untouched; vw_beetle and lion_statue_mask.png correctly absent; manifest.json valid and schema-exact with correct mask presence/absence and the _-prefix skip contract intact; models.md rows and README count exact; the conventions/SKILL sidecar docs mutually consistent; the mat_primary/roughness/specular claim corroborated against postprocess_glb.py source; live re-verification — clean headless import + ResourceLoader load/instantiate of chair_modernist and lion_statue, script deleted, processes clean. ## Araminta (art direction): REQUEST_CHANGES **THE RULING (on the PR's own question): `[1,1]` STANDS for all four items** — each justified by real-world class (café-scale table, chair, compact desk, statue), none misrepresented at 1 tile = 1m (D-243). The judgment call was sound. **General rule (binding going forward):** a normalized promotion never infers footprint from geometry — normalization erases real-world scale. `footprint_tiles` is an AUTHORED value: `[1,1]` only when the object's real-world class is plausibly single-tile; ordinarily-multi-tile classes require the promoting author to state an intended footprint explicitly. The manifest stays the field of record; the authoring step is what was missing. | # | File | Issue | |---|------|-------| | 1 | briefs/furniture-props.md §3 + conventions.md §4 | The rule above must be codified BEFORE merge (her exact wording supplied) — the texture-heavy wall stories start next and must inherit a written rule, not tribal knowledge from this PR. **Applied lead-side in the fix commit** (her wording verbatim; conventions.md §4 gains the authored-not-derived sentence with a pointer to the brief's full rule; a pre-existing "Single Sunday-tile" typo in the same paragraph fixed to "Single-tile" in passing). | Her confirmations on record: category-first renames all correct (desk_scifi's direction verified against the spike source name); mask handling per §3 exact (lion_statue ships NO mask file, not an empty one); the extracted-texture subsection is correctly placed in §2 and stays mechanics-not-taste, no wording changes; D-257 conformance verified at the node-graph level and none of the four is glazing-class; the models.md row honestly carries the spike's known "mask too aggressive" issue rather than silently promoting it as clean; the manifest schema generalizes structurally to the wall stories — the transferable lesson ("don't let a pipeline artifact stand in for an authored value") is exactly why the rule is now written. ## Verdict: CHANGES REQUESTED -> amendment applied; merging after gate.
jpmschweitzer added 1 commit 2026-07-26 13:04:07 +02:00
footprint_tiles is an authored value, never derived from normalized
mesh geometry — [1,1] defaults only for plausibly-single-tile classes;
ordinarily-multi-tile classes require an explicitly stated footprint at
promotion. Her exact wording in furniture-props.md §3; conventions.md
§4 gains the authored-not-derived sentence pointing at the full rule
(and a pre-existing 'Single Sunday-tile' typo fixed in passing). The
[1,1] values shipped for the four promoted items stand as ruled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
jpmschweitzer closed this pull request 2026-07-26 13:13:21 +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#214