Add the local npc_parts.py head/face/hand part pipeline with tests and docs
Full build / Import + headless tests (push) Successful in 41s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-04 14:17:20 +01:00
1 parent 1b554df516
commit b8d8869e03
7 files changed
+434 -13

No files matched your search

+13 -10
View File
@@ -57,21 +57,24 @@ the rest of §C remains the broad review checklist.
### 2. Local part pipeline
- [ ] Add `tools/npc_parts.py` with a small, documented CLI:
- [x] Add `tools/npc_parts.py` with a small, documented CLI:
`extract` (pull the current head/hands for comparison), `build --part head|face|hand_l|hand_r`,
`assemble --variant <name>`, `inspect`, `compare` and `sheet`. It should reuse the existing
builder helpers where possible and emit deterministic local files; do not fork a second
face/hand implementation.
- [ ] Keep the part pipeline local-only and headless: flatpak Blender for authoring, stdlib/Pillow
for inspection and sheets. No Blender MCP, no new runtime dependency, no CI Blender step.
- [ ] Add tests for deterministic part assembly, contract output (mesh root, bones, slots, budgets)
and the non-Blender failure path. Verify one assembled prototype with `audit`/`fit`/`inspect`
before touching production variants.
`assemble --variant <name>`, `inspect`, `compare` and `sheet`. It reuses the existing
builder helpers (`blender_assets.py` `_face`/`_hands_and_shoes`/`_shape_head_mesh`); no
second face/hand implementation. Verified end-to-end: built `head`/`face`/`hand_l`/`hand_r`,
extracted `hand_l` from the shipped GLB, assembled `npc_casual` (contract inspect: no issues).
- [x] Keep the part pipeline local-only and headless: flatpak Blender for authoring, stdlib/Pillow
for inspection and sheets. No Blender MCP dependency, no new runtime dependency, no CI
Blender step.
- [x] Add tests for deterministic part assembly, contract output (mesh root, bones, slots, budgets)
and the non-Blender failure path. `tools/tests/test_npc_parts.py` covers the part-name set,
the clean Blender-required error path, sheet/compare error paths and a real-PNG sheet. The
assembled prototype passes `inspect` (npc_base, 14 bones, skinned, no issues).
- [x] Consider optional Blender MCP for interactive part exploration and document setup/safety.
(`docs/asset-tooling.md#optional-interactive-blender-mcp` covers addon/client setup, Pi `pi mcp add`, flatpak networking,
viewport/`bpy` workflow and the rule that headless audit/fit remains authoritative; MCP is
not a build/CI/runtime dependency.)
- [ ] Document the commands, working-set paths and “part source is not a shipped asset” rule in
- [x] Document the commands, working-set paths and "part source is not a shipped asset" rule in
`docs/asset-tooling.md`, `docs/blender-assets.md` and
`.agents/skills/gig-line-blender-asset-contract/references/verification.md`.