refactor(tooling): T-1290 — the character domain, and six payloads the map misfiled
`reach character {logo, strip-glb, qa, qa-analyze}` replaces make_logo.py,
glb_strip_utility_nodes.py, analyze_captures.py and the run-garment-qa bash
driver. The QA configs and method doc move beside the domain (qa_configs/,
GARMENT_QA.md), and `qa` takes a config name (`reach character qa hoodie_modern`)
or a path.
Parity, from baselines taken before anything moved:
- the logo PNG is byte-identical
- a synthetic GLB with three real utility nodes strips to identical bytes
(the committed bodies strip 0 nodes, so they proved nothing)
- re-analyzing a cached capture set gives a byte-identical report.json and
summary
run-garment-qa is rewritten, not wrapped (D-263). Its decisions — which config,
which Godot ($GODOT, then ~/bin/godot4, then PATH), and whether xvfb-run is
needed — are capture_plan(), pinned by tooling/test_character.py without
launching Godot. The bash exit codes are kept: 2 for a missing config, 3 for
no Godot.
The T-1271 domain map was wrong about this domain. Six of its ten files import
bpy: convert_outfit, inspect_glb, check_hair_symmetry, check_icosphere,
render_quaternius_test and test_quaternius_raw. They are Blender payloads and
joined the carve-out as blender_* (41 payloads now). The 22 existing payloads'
docstrings still cited tooling/garment-fit/ from before T-1273; fixed.
Archived, with reasons in tooling/archive/README.md:
- setup_clothing_metadata.py wrote coverage data for five garments that no
longer exist in the 24-garment wardrobe
- wipe-bodies.sh ran raw DELETEs on systems.db
segment_reference_distribution.md moved to docs/assets/visual/.
Behaviour changes:
- The QA analyzer exited 0 whatever it found, though its own README says
clip-through "is the real defect and it gates". qa and qa-analyze now exit 1
on clip-through, and the remedy names --min-pixels (Wave 1/2 were accepted
at 150). The cached peasant set has 33 failures at the default 8 px.
- glb strip re-reported the same nodes as stripped on every re-run and
rewrote an unchanged file: it left them as orphans and then found them
again. Only nodes still linked into the graph count now, and a first pass
writes the same bytes as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -817,7 +817,7 @@ animate on the shared skeleton -- why it was superseded, not merely extended).
|
||||
|
||||
### QA: chromakey acceptance gate
|
||||
|
||||
`tooling/garment-qa` (`run-garment-qa <config>`) is the acceptance gate every garment in this
|
||||
`reach character qa <config>` (`tooling/domains/character/`) is the acceptance gate every garment in this
|
||||
pipeline runs before it ships: a two-pass depth-proximity chromakey renders the same frozen
|
||||
frame twice -- once keying claimed-covered body segments magenta, once with the garment
|
||||
nudged a few cm toward the camera and re-keyed cyan. A body-key pixel that flips from magenta
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# Segment Face Distribution Reference (average_m)
|
||||
|
||||
Source: Regular_Male_FullBody.gltf (7047 verts, 12128 faces)
|
||||
Date: 2026-03-23
|
||||
Method: face-based exclusive assignment (dominant bone weight per face)
|
||||
Bone mapping:
|
||||
torso: spine_01, spine_02
|
||||
torso_upper: spine_03, clavicle_l, clavicle_r
|
||||
hips: pelvis
|
||||
arm_upper: upperarm_l/r (no clavicle)
|
||||
|
||||
| Segment | Faces | Status |
|
||||
|---------|-------|--------|
|
||||
| seg_head | 2552 | LOCKED |
|
||||
| seg_neck | 200 | LOCKED |
|
||||
| seg_torso | 631 | LOCKED |
|
||||
| seg_torso_upper | 762 | LOCKED |
|
||||
| seg_hips | 314 | LOCKED |
|
||||
| seg_arm_upper_l | 274 | LOCKED |
|
||||
| seg_arm_upper_r | 274 | LOCKED |
|
||||
| seg_arm_lower_l | 293 | LOCKED |
|
||||
| seg_arm_lower_r | 293 | LOCKED |
|
||||
| seg_hand_l | 1722 | LOCKED |
|
||||
| seg_hand_r | 1722 | LOCKED |
|
||||
| seg_leg_upper_l | 406 | LOCKED |
|
||||
| seg_leg_upper_r | 409 | LOCKED |
|
||||
| seg_leg_lower_l | 439 | LOCKED |
|
||||
| seg_leg_lower_r | 439 | LOCKED |
|
||||
| seg_foot_l | 699 | LOCKED |
|
||||
| seg_foot_r | 699 | LOCKED |
|
||||
| seg_eyes | (sub-object) | LOCKED |
|
||||
| seg_eyebrows | (sub-object) | LOCKED |
|
||||
|
||||
All segments locked. No overlaps, no variants — all independent.
|
||||
Reference in New Issue
Block a user