diff --git a/DONE.md b/DONE.md index ee00999..1334aa2 100644 --- a/DONE.md +++ b/DONE.md @@ -2033,3 +2033,122 @@ with a 0.291 Pillow gap. A clean worktree built Linux/Windows/macOS/Web/HQ at 161.5/197.1/148.0/97.8/241.5 MB; the Web zip and HQ override were checked and the HQ binary launched headless. Tagged `v0.9.6`; Gitea run 1296 passed checks and the full build and published seven assets. + +## Character development + +Completed 2026-11-04. The procedural crowd-variety roster (four new variants, per-role pools) +shipped with the realistic face; the external-asset intake and the MakeHuman body pipeline were +promoted to the active **MakeHuman character pipeline** track in `TODO.md`. + +## Character development + +Goal: break the eight-character clone effect with four licence-cleared crowd-variety looks while +keeping the frozen `npc_base` bone, tint-slot and gear-attach contract. The procedural generator is +the primary path; Quaternius is a reviewed reference and MakeHuman is deferred to a separate local +development pipeline. + +The roster build is deliberately sequenced **after** the 3D model and local map re-evaluation: the new variants +must inherit the reviewed face/hand/gear baseline instead of multiplying whatever it finds. + +*Skill route: `character-artist`, `retopology`, `rigging`, `uv-workflow`, `materials`, +`asset-optimization`, `lowpoly-style`, `godot-export`, `qa-review`.* + +### Source review and decision + +- [x] Research free/open-source character sources and evaluate at least three downloads against + the existing Blender contract. (Measured Quaternius CC0, Kenney CC0, Khronos + CesiumMan/RiggedFigure CC-BY and the MakeHuman CC0 base mesh; none is a drop-in. + Results, local preview sheet and SHA-256 provenance are in + `docs/npc-model-sourcing.md`.) +- [x] Review the sourcing research with the project owner and choose Option A (procedural), + Option B (Quaternius CC0 intake) or Option C (MakeHuman/MPFB body pipeline); record the + decision in an ADR and in `MEMORY.md`. (2026-11-03: extend the procedural generator as the + primary path, keep Quaternius as a reviewed prototype/reference, defer MakeHuman to a + separate local pipeline. Recorded in ADR-0015 and `MEMORY.md`.) +- [x] Add a source licence allow-list and provenance rule: CC0 preferred, CC-BY only with + attribution in `CREDITS.md`, and no service assets whose terms restrict redistribution. + (ADR-0015; the CC-BY research previews are attributed in `CREDITS.md`.) +- [x] Decide whether the external preview sheet stays local under `tmp/` or is committed with + the required CC-BY attribution. (Committed as + `docs/blender_previews/sheet_npc_sources_research.jpg` with Cesium CC-BY attribution; + the project-owned crowd prototype sheet is also committed.) + +### Intake and validation + +- [x] Add a Blender `inspect` path that imports a GLB, applies node transforms, reports + tris/verts, bounds, bones, materials, UVs and skinning, and lists contract failures. + (`blender_assets.py inspect --file ...` applies parent/object transforms, converts to + Godot Y-up, ignores the importer's bone-shape helper and prints budgets, bones, slots, + UVs, skinning and animations with issues/warnings; `--json` and `--category` supported. + Seven synthetic contract tests added; all 46 library GLBs inspect clean. `audit` remains + the final gate.) +- [x] `adapt` path: promoted to the **MakeHuman character pipeline** track (2026-11-04).: scale/ground, weld seams, decimate, map the + five tint slots, and either rebuild the contract armature or record an explicit second-rig + contract. Use `retopology`/`rigging`/`uv-workflow` guidance for the manual steps, but keep + the Quaternius no-go: a contract rebuild needs a proportion warp, so this is not on the + character critical path. +- [x] Audit gate + intake regression test: promoted to the **MakeHuman character pipeline** track. +- [x] Adapter documentation: promoted to the **MakeHuman character pipeline** track. + +### Quaternius prototype + +- [x] Prototype one Quaternius CC0 variant: weld/decimate to budget and capture Idle/Walk + renders. (12,518 imported verts -> 3,199 after weld -> 2,423 / 4,654 tris after a 0.75 + decimate; Idle/Walk quality is good. Preview in + `docs/blender_previews/sheet_npc_sources_research.jpg`.) +- [x] Measure the prototype against the `npc_casual` controls: silhouette, rest pose, body + proportions and gear fit. (No-go for a contract rebuild: T-pose 62-bone realistic rig, + ~0.96 m hip, ~1.68 m arm span and ~0.153 m shoulder joint do not match the arm-down + 13-bone contract. Keep as reference; a second rig/animation path needs its own ADR.) +- [x] Make a go/no-go decision on Option B. (No-go for the current pass; proceed with the procedural + generator and keep Quaternius as a visual/style reference.) + +### Roster and runtime + +- [x] Approve four crowd-variety looks (build, head silhouette, hair/beard, outer layer and + accessory; no clothing that labels the NPC's behaviour). (`npc_crowd_a` bun/slim/sunglasses, + `npc_crowd_b` bald/broad/beard/shoulder bag, `npc_crowd_c` coat/umbrella, `npc_crowd_d` + hood/cup; prototype sheet committed.) +- [x] Re-derive the four specs against the new baseline: the four crowd entries inherit the + realistic face (`seg=24/rings=16`) and the reviewed hand/gear offsets automatically because + they share `_face`/`_hands_and_shoes`/`GEAR_ATTACH`. +- [x] Generate the four variants: built via `blender_assets.py build`, AO re-baked, `audit` clean + (4,734–5,814 tris), `inspect` clean, proportions pass. +- [x] Add the four specs to `CHARACTERS`, commit their GLBs/AO maps and manifest roles/tint data. + (Note: this adds ~2 MB to the next release build via `export_filter=all_resources` — accepted + for the crowd-variety roster.) +- [x] Per-role pools: `character_model_for()` now picks from `CHARACTER_POOLS` by seed — the + routine crowd roles gain the crowd variants (tourist → casual/crowd_a/crowd_d, + confused_visitor → casual/crowd_b, intoxicated → casual/crowd_c) while the special roles + keep their existing alternation (guest ⅓ jacket, trespasser/threat ½ hoodie). The test + now checks seed-stability plus that every pool entry resolves to a committed GLB + (277/277). +- [x] Gear fit + inspect for the four new variants: `fit` is clean (sunglasses band=inside, + shoulder bag clear; cup/umbrella are hand gear with the forward offset), `inspect` clean, + proportions pass. +- [x] Crowd-variety reference: five licence-cleared Commons photos fetched to + `tmp/research/crowd-variety/`; the AI proposal set stays the next step for detail. +- [x] Baseline + portrait rows: the four variants are in `capture_npc_baseline.gd` and + `sheet_npc_baseline.jpg` (12 variants × 6 views); review-doc rows added. + +### QA and release + +- [x] Gates with the expanded library: 24-NPC budget smoke 152,464 tris / 168 meshes / 6.94 ms + (under 50 ms), portrait baseline 12 variants × 6 views, `fit` clean, Godot 277/277, Python + 160/160. No release build is created for this unversioned track. +- [x] Docs: `docs/development-status.md`, `docs/3d-model-review.md` and the baseline sheet updated; + `CREDITS.md` needs no change (the crowd variants are procedural, no new source). Accepted + visual limits: the crowd accessories (umbrella canopy, cup, sunglasses, beard) read at + full-body distance but not in the head-only portrait framing. +- [x] Exit: the 12-character library passes contract audit, portrait/gear acceptance, the 24-NPC + budget and licence/provenance review; the runtime contract (13 bones, five tint slots, + `npc_base` fallback) is unchanged. + +### Deferred MakeHuman local pipeline + +- [x] Evaluate the MakeHuman CC0 base mesh for a later separate local development pipeline. + (19,158 verts / 36,972 tris; scaled to 1.82 m; decimate 0.35 -> 3,780 verts / 6,468 tris; + UVs present, no normals/material groups/rig. Feasible only with retopology, a custom rig and + project-owned clothing; keep out of CI/build.) +- [x] Body-shape diversity decision (2026-11-04, owner): **yes** — use MakeHuman for the next + character pass. Promoted to the **MakeHuman character pipeline** track. diff --git a/MEMORY.md b/MEMORY.md index 28fa59c..1530396 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -175,8 +175,10 @@ canonical implemented-features list in `docs/development-status.md`. The playable build covers the three venues, tutorial/campaign/checkpoints, the 0.9.3–0.9.6 polish/texture/integration passes and the Blender + realism asset pipeline (see `DONE.md` and -`CHANGELOG.md`). Active work is the unversioned **3D model and local map re-evaluation** track, -then character development, then the 0.10.0 release candidate — `TODO.md` is the priority source. -Test counts as of 2026-11-03: Godot 277/277, Python 160/160, `check_docs` OK. +`CHANGELOG.md`). The 12-character library (realistic face + four crowd variants) and the +Comedy Store map rebuild are complete. **Priority (2026-11-04, owner):** 1) fix the `Rig` pose +harness, 2) the MakeHuman character pipeline, 3) re-evaluate the 3D models, 4) ship the **0.11.0** +minor release — `TODO.md` is the priority source. Test counts as of 2026-11-04: Godot 277/277, +Python 160/160, `check_docs` OK. diff --git a/TODO.md b/TODO.md index be53732..7f42aec 100644 --- a/TODO.md +++ b/TODO.md @@ -3,14 +3,62 @@ Work is grouped by theme. Each item should be small enough to complete and verify on its own; see `AGENTS.md` for the workflow and `MEMORY.md` for the decisions behind these plans. -**Priority order:** 3D model and local map re-evaluation → character development → -versioned release milestones (0.10.0) → future/deferred work. See `AGENTS.md` §Priority and -Versioning and §Local Blender skills. +**Priority order (2026-11-04, owner):** 1) fix the `Rig` pose harness (unblocks pose/weight +and portrait evidence), 2) the MakeHuman character pipeline (more realistic bodies than the +procedural generator), 3) re-evaluate the 3D models against the new characters, 4) push the +**0.11.0** minor release. See `AGENTS.md` §Priority and Versioning and §Local Blender skills. The MIT Blender skill pack lives locally at `.agents/skills/blender-skills/` (gitignored). Every 3D workstream below names the skills to load; they are guidance only, and the project contract, `blender_assets.py audit`/`fit`/`inspect` and the capture gates stay authoritative. +## Fix the Rig pose harness + +Goal: `src/test/capture_npc_pose.gd` reports a pose but saves rest frames; the root cause is +narrowed to the skinned mesh ignoring its `Rig` parent transform. Fixing it unblocks the +weights/pose column of the 3D review and the pose/portrait evidence for the MakeHuman intake. + +*Skill route: `rigging`; evidence in `docs/3d-model-review.md` §"Pose evidence is blocked".* + +- [ ] Answer why the skinned mesh ignores its `Rig` Node3D transform. Decisive probe (2026-11-03): + teleporting the **avatar** (CharacterBody3D) renders (diff 10), but moving its **`Rig` child** + (the GLB model's parent) does not (diff 0). Suspects: the skeleton re-bakes bone global poses + from a stale parent transform, or the harness stages the avatar outside the scene tree. +- [ ] Rebuild the harness once the cause is understood, using the verified recipe (SubViewport + + `RenderingServer.force_draw()` + `force_update_all_bone_transforms()` with process/physics + disabled), or fall back to staging poses via the known-good `capture_npc_review.gd`. +- [ ] Capture idle / walk / sit / wave for every variant; inspect shoulder, hip and neck collapse + and fix the worst offenders without changing the 13-bone contract. + +## MakeHuman character pipeline + +Goal: replace the procedural body generator with the CC0 MakeHuman base for the next character +pass — retopologised, rigged and dressed in project-owned clothing — so bodies read more +realistic than the current primitive shapes. This promotes the deferred MakeHuman evaluation to +an active track; ADR-0015 (CC0 / CC-BY with attribution) still governs every intake. + +*Skill route: `retopology`, `rigging`, `uv-workflow`, `materials`, `character-artist`, +`asset-optimization`, `godot-export`, `qa-review`.* + +### Intake and adaptation + +- [ ] Add an `adapt` path in `tools/blender_assets.py` for external meshes: scale/ground, weld + seams, decimate to the 8,000-triangle budget, map the five tint slots, and either rebuild the + 13-bone contract armature or record an explicit second-rig contract. +- [ ] Keep `blender_assets.py audit` as the single final gate; add a regression test for the intake + report/adaptation using a deterministic synthetic or licence-cleared fixture. +- [ ] Document the adapter commands and go/no-go checks in `docs/asset-tooling.md`. + +### MPFB / MakeHuman body pipeline + +- [ ] Prototype the local MPFB/MakeHuman pipeline outside the repo (retopology, custom rig, + project-owned clothing) and commit only the final CC0-derived assets with provenance. +- [ ] Decide the rig strategy: retarget the MakeHuman mesh to the frozen 13-bone `npc_base` + contract (needs a proportion warp, like the Quaternius no-go), or add a second rig/animation + path behind its own ADR. +- [ ] Re-run `inspect`/`audit`/`fit`/proportions and the 24-NPC budget after each intake; keep the + procedural generator as the fallback until a MakeHuman variant ships. + ## 3D model and local map re-evaluation Goal: re-judge every shipped 3D asset against the newly available Blender skill guidance, rank @@ -25,7 +73,8 @@ the 0.10.0 release candidate. rebuilds and the face/foliage prototypes) stay **blocked** until the full local map rebuild (H–M) is done **and** a fresh 3D model review runs against the new maps. The measurements and scorecard in `docs/3d-model-review.md` stand as the pre-rebuild baseline, not a go-ahead to start -character work now. Character development stays gated behind that second review. +character work now. (Character development has since shipped — see `DONE.md` — and the next +character pass is the MakeHuman pipeline above.) **Map rebuild status (2026-11-03):** H–M are complete — the Joke Shop is now a 6.0 m low hall (dark stucco, white signature fascia, tied-back curtains, hotel tower) and Hollywood/TV Studio @@ -131,19 +180,8 @@ licence-free zone only. the open palm + forward offset; a finger-curl rig stays out of scope** — there are no finger bones in the 13-bone contract, so a curl rig is a contract decision, not a modelling tidy-up. Recorded as ranked gap #6 (accept; revisit only if face work opens the budget). -- [ ] Weights/pose: capture idle, walk, sit and wave; inspect shoulder, hip and neck collapse; - fix the worst offenders using `rigging` practice without changing the 13-bone contract. - **Blocked:** the new `capture_npc_pose.gd` reports the seated/walking pose while the saved - frames still show the rest pose; direct bone writes deform the mesh, so this is a staging/ - capture discrepancy that may also affect live venue frames. See - `docs/3d-model-review.md` §"Pose evidence is blocked". -- [ ] Rebuild the pose harness. **Re-attempt 2026-11-03 narrowed the root cause:** the recipe - (SubViewport + `force_draw()` + `force_update_all_bone_transforms()` + disabled process/physics) - still produced byte-identical rest frames. Decisive probe: teleporting the avatar renders - (diff 10) but moving the `Rig` child does not (diff 0) — the skinned mesh ignores its `Rig` - parent transform, so `rig_y=-0.339` never reaches the render. Next attempt must answer why - the skinned model ignores the `Rig` node, or stage poses via the known-good - `capture_npc_review.gd` fallback. +- [ ] Weights/pose: captured after the pose harness is fixed (see the top-level + **Fix the Rig pose harness** track); shoulder/hip/neck collapse remains unmeasured until then. - [x] UV/texel density: measured (64–122 px/m authored, 287–440 px/m effective fabric on the 4× repeat; table in `docs/3d-model-review.md`). Decision: **accept as-is** — the maps are neutral/runtime-tinted (not painted skin), so density controls only subtle weave/noise, and @@ -561,121 +599,6 @@ pass. The current `_build_comedy_store_building()` stays as the fallback.* passes performance/navigation/visual QA with complete provenance; the rounded west corner and hillside detail are recorded as accepted simplifications. -## Character development - -Goal: break the eight-character clone effect with four licence-cleared crowd-variety looks while -keeping the frozen `npc_base` bone, tint-slot and gear-attach contract. The procedural generator is -the primary path; Quaternius is a reviewed reference and MakeHuman is deferred to a separate local -development pipeline. - -The roster build is deliberately sequenced **after** the 3D model and local map re-evaluation: the new variants -must inherit the reviewed face/hand/gear baseline instead of multiplying whatever it finds. - -*Skill route: `character-artist`, `retopology`, `rigging`, `uv-workflow`, `materials`, -`asset-optimization`, `lowpoly-style`, `godot-export`, `qa-review`.* - -### Source review and decision - -- [x] Research free/open-source character sources and evaluate at least three downloads against - the existing Blender contract. (Measured Quaternius CC0, Kenney CC0, Khronos - CesiumMan/RiggedFigure CC-BY and the MakeHuman CC0 base mesh; none is a drop-in. - Results, local preview sheet and SHA-256 provenance are in - `docs/npc-model-sourcing.md`.) -- [x] Review the sourcing research with the project owner and choose Option A (procedural), - Option B (Quaternius CC0 intake) or Option C (MakeHuman/MPFB body pipeline); record the - decision in an ADR and in `MEMORY.md`. (2026-11-03: extend the procedural generator as the - primary path, keep Quaternius as a reviewed prototype/reference, defer MakeHuman to a - separate local pipeline. Recorded in ADR-0015 and `MEMORY.md`.) -- [x] Add a source licence allow-list and provenance rule: CC0 preferred, CC-BY only with - attribution in `CREDITS.md`, and no service assets whose terms restrict redistribution. - (ADR-0015; the CC-BY research previews are attributed in `CREDITS.md`.) -- [x] Decide whether the external preview sheet stays local under `tmp/` or is committed with - the required CC-BY attribution. (Committed as - `docs/blender_previews/sheet_npc_sources_research.jpg` with Cesium CC-BY attribution; - the project-owned crowd prototype sheet is also committed.) - -### Intake and validation - -- [x] Add a Blender `inspect` path that imports a GLB, applies node transforms, reports - tris/verts, bounds, bones, materials, UVs and skinning, and lists contract failures. - (`blender_assets.py inspect --file ...` applies parent/object transforms, converts to - Godot Y-up, ignores the importer's bone-shape helper and prints budgets, bones, slots, - UVs, skinning and animations with issues/warnings; `--json` and `--category` supported. - Seven synthetic contract tests added; all 46 library GLBs inspect clean. `audit` remains - the final gate.) -- [ ] Add an `adapt` path for future external assets: scale/ground, weld seams, decimate, map the - five tint slots, and either rebuild the contract armature or record an explicit second-rig - contract. Use `retopology`/`rigging`/`uv-workflow` guidance for the manual steps, but keep - the Quaternius no-go: a contract rebuild needs a proportion warp, so this is not on the - character critical path. -- [ ] Keep `tools/blender_assets.py audit` as the single final gate; add a regression test for the - intake report/adaptation using a deterministic synthetic or licence-cleared fixture. -- [ ] Document the adapter commands and the go/no-go checks in `docs/asset-tooling.md`. - -### Quaternius prototype - -- [x] Prototype one Quaternius CC0 variant: weld/decimate to budget and capture Idle/Walk - renders. (12,518 imported verts -> 3,199 after weld -> 2,423 / 4,654 tris after a 0.75 - decimate; Idle/Walk quality is good. Preview in - `docs/blender_previews/sheet_npc_sources_research.jpg`.) -- [x] Measure the prototype against the `npc_casual` controls: silhouette, rest pose, body - proportions and gear fit. (No-go for a contract rebuild: T-pose 62-bone realistic rig, - ~0.96 m hip, ~1.68 m arm span and ~0.153 m shoulder joint do not match the arm-down - 13-bone contract. Keep as reference; a second rig/animation path needs its own ADR.) -- [x] Make a go/no-go decision on Option B. (No-go for the current pass; proceed with the procedural - generator and keep Quaternius as a visual/style reference.) - -### Roster and runtime - -- [x] Approve four crowd-variety looks (build, head silhouette, hair/beard, outer layer and - accessory; no clothing that labels the NPC's behaviour). (`npc_crowd_a` bun/slim/sunglasses, - `npc_crowd_b` bald/broad/beard/shoulder bag, `npc_crowd_c` coat/umbrella, `npc_crowd_d` - hood/cup; prototype sheet committed.) -- [x] Re-derive the four specs against the new baseline: the four crowd entries inherit the - realistic face (`seg=24/rings=16`) and the reviewed hand/gear offsets automatically because - they share `_face`/`_hands_and_shoes`/`GEAR_ATTACH`. -- [x] Generate the four variants: built via `blender_assets.py build`, AO re-baked, `audit` clean - (4,734–5,814 tris), `inspect` clean, proportions pass. -- [x] Add the four specs to `CHARACTERS`, commit their GLBs/AO maps and manifest roles/tint data. - (Note: this adds ~2 MB to the next release build via `export_filter=all_resources` — accepted - for the crowd-variety roster.) -- [x] Per-role pools: `character_model_for()` now picks from `CHARACTER_POOLS` by seed — the - routine crowd roles gain the crowd variants (tourist → casual/crowd_a/crowd_d, - confused_visitor → casual/crowd_b, intoxicated → casual/crowd_c) while the special roles - keep their existing alternation (guest ⅓ jacket, trespasser/threat ½ hoodie). The test - now checks seed-stability plus that every pool entry resolves to a committed GLB - (277/277). -- [x] Gear fit + inspect for the four new variants: `fit` is clean (sunglasses band=inside, - shoulder bag clear; cup/umbrella are hand gear with the forward offset), `inspect` clean, - proportions pass. -- [x] Crowd-variety reference: five licence-cleared Commons photos fetched to - `tmp/research/crowd-variety/`; the AI proposal set stays the next step for detail. -- [x] Baseline + portrait rows: the four variants are in `capture_npc_baseline.gd` and - `sheet_npc_baseline.jpg` (12 variants × 6 views); review-doc rows added. - -### QA and release - -- [x] Gates with the expanded library: 24-NPC budget smoke 152,464 tris / 168 meshes / 6.94 ms - (under 50 ms), portrait baseline 12 variants × 6 views, `fit` clean, Godot 277/277, Python - 160/160. No release build is created for this unversioned track. -- [x] Docs: `docs/development-status.md`, `docs/3d-model-review.md` and the baseline sheet updated; - `CREDITS.md` needs no change (the crowd variants are procedural, no new source). Accepted - visual limits: the crowd accessories (umbrella canopy, cup, sunglasses, beard) read at - full-body distance but not in the head-only portrait framing. -- [x] Exit: the 12-character library passes contract audit, portrait/gear acceptance, the 24-NPC - budget and licence/provenance review; the runtime contract (13 bones, five tint slots, - `npc_base` fallback) is unchanged. - -### Deferred MakeHuman local pipeline - -- [x] Evaluate the MakeHuman CC0 base mesh for a later separate local development pipeline. - (19,158 verts / 36,972 tris; scaled to 1.82 m; decimate 0.35 -> 3,780 verts / 6,468 tris; - UVs present, no normals/material groups/rig. Feasible only with retopology, a custom rig and - project-owned clothing; keep out of CI/build.) -- [ ] Decide whether body-shape diversity still matters after the 12-character library lands; if - yes, prototype the local MPFB/MakeHuman pipeline outside the repo and commit only the final - CC0-derived assets with provenance. - ## Maintenance and documentation hygiene Unversioned housekeeping that keeps the planning sources trustworthy. Do these when they block a @@ -756,7 +679,7 @@ published while the gates below remain open. | Area | Remaining gap | Milestone | | --- | --- | --- | | 3D model and local map re-evaluation | Skill-guided asset scorecard/repairs; OSM/3D data, reference-derived facades, AI-assisted composition and map QA | Unversioned | -| Character development | Four crowd variants, deterministic role pools, gear fit and runtime integration | Unversioned | +| Character development | Complete (moved to `DONE.md`); the MakeHuman body pipeline is the next character pass | 0.11.0 | | Content and balance | External first-time-player evidence, balance sweeps/tuning and content lock | 0.10.0 | | Audio, accessibility and localization | Accessibility/localization acceptance, caption coverage and pseudo-locale/layout sign-off | 0.10.0 | | Performance and platform | Target-hardware matrix, Web/Desktop HQ profiling and frame/memory evidence | 0.10.0 | @@ -769,9 +692,10 @@ The 0.9.3 UI, 0.9.4 animation, 0.9.5 texture, 0.9.6 integration and save-migrati complete in `DONE.md`; they are not remaining gaps. The 2026-11-01 documentation audit (architecture ownership, stale-claim cleanup and obsolete-plan removal) is also closed. -**Priority:** finish the unversioned 3D/local-map and character tracks first. The 0.10.0 -milestone accepts only release-blocking fixes until its external-playtest, legal/storefront, -signing and platform gates clear; only then can the candidate become a final release. +**Priority (2026-11-04):** fix the `Rig` pose harness, then the MakeHuman character pipeline, +then re-evaluate the 3D models, then ship the **0.11.0** minor release. The 0.10.0 candidate +still accepts only release-blocking fixes until its external-playtest, legal/storefront, signing +and platform gates clear. ## Milestone 0.10.0 — Release candidate @@ -927,6 +851,24 @@ order. Only a release-blocking defect from those tracks may enter this milestone - [ ] Exit: the release candidate is content-locked, externally played, legally reviewed, documented, reproducibly built, and approved as the 0.10.0 release candidate. +## Milestone 0.11.0 — MakeHuman characters + +Goal: ship the MakeHuman-derived character bodies as a new minor release, with the pose harness +fixed and the 3D models re-evaluated against them. This follows the 0.10.0 release candidate; +the sequencing is Rig harness → MakeHuman intake → 3D re-evaluation → release. + +- [ ] Fix the `Rig` pose harness and capture the weights/pose evidence (see the top track). +- [ ] Intake a MakeHuman CC0 body through the `adapt` path (retopology → rig → clothing → AO) and + pass `inspect`/`audit`/`fit`/proportions plus the 24-NPC budget. +- [ ] Re-evaluate the 3D scorecard against the new characters (Section B owner review) and record + the accepted limits. +- [ ] Run the full QA matrix and a local release build for 0.11.0; bump `config/version`, write the + `CHANGELOG.md` entry, tag and publish per the Release Procedure. + +**Exit:** a 0.11.0 build ships the MakeHuman character pass with the pose harness fixed and the +scorecard re-reviewed; the runtime contract (13 bones, five tint slots, `npc_base`) is either +preserved or replaced behind an accepted ADR. + ## Roadmap dependencies and risks - Content volume is the largest schedule risk; tutorial and campaign work must not outrun the