@genex-ai/cli-demo 0.63.0-dev.152 → 0.65.0-dev.157

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/cli-demo",
3
- "version": "0.63.0-dev.152",
3
+ "version": "0.65.0-dev.157",
4
4
  "description": "Set up your project's agent workspace (.claude/.codex/.cursor in the game folder), authorize, create a game project, generate AI assets, and publish (genex CLI).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,9 +34,18 @@ export interface MeshyCharacterManifest {
34
34
  provider: "meshy";
35
35
  aiModel: "meshy-6";
36
36
  apiVersion?: string;
37
+ meshyApiVersion?: string;
37
38
  poseMode: "a-pose" | "t-pose";
38
39
  shouldRemesh: boolean;
39
40
  targetPolycount: number;
41
+ conceptModel?: string;
42
+ conceptGenerationId?: string;
43
+ conceptCandidate?: number;
44
+ sourceFaceCount?: number;
45
+ remeshTargetFaceCount?: number;
46
+ remeshActualFaceCount?: number;
47
+ remeshTopology?: "triangle";
48
+ previewGenerationId?: string;
40
49
  };
41
50
  model: {
42
51
  url: string;
@@ -12,33 +12,83 @@ crossfades, transition rules, and multiplayer authority contract.
12
12
 
13
13
  ## Generate a controller-ready character
14
14
 
15
+ Before generating a Meshy character, discuss two or three visual directions.
16
+ When the user names a visual reference, inspect references before writing the
17
+ concept prompt. Recommend a neutral A-pose for characters that will be rigged.
18
+ Ask which equipment and color direction matter, and explain that every
19
+ riggable concept uses that neutral pose instead of an action pose.
20
+
21
+ Generate exactly three concept candidates for the chosen direction. Lock all
22
+ three to a neutral A-pose: never use a dynamic concept pose. Warn before
23
+ generation when held, slung, or overlapping props, straps, clothing, or gear
24
+ may fuse into the body or obscure a limb; recommend generating gameplay props
25
+ separately.
26
+
15
27
  ```bash
16
28
  npx genex character "stylized desert courier, practical layered clothing"
17
29
  ```
18
30
 
19
- The default request uses Meshy 6 to generate, texture, remesh, and rig an
20
- A-pose humanoid. It generates the required controller-pack actions for that
21
- candidate and rejects bad structural or native motion instead of repairing it.
22
- If any required check fails, it retries the complete workflow once in a strict
23
- T-pose; optional actions start only after a full candidate passes. It remeshes
24
- and rigs the accepted model, adds the immutable preview-reviewed neutral-v3
25
- idle/walk/run/crouch/jump controller pack,
26
- and stores every successful model
27
- and clip at permanent Genex asset URLs. It prints the complete Genex-credit
31
+ Generate concept images first and show the actual images to the user. Do not
32
+ start Image-to-3D until the user explicitly selects a candidate.
33
+
34
+ Open or link all three real candidate images, then wait for the user's choice.
35
+ Do not treat a text description, task ID, filename, or your own preference as
36
+ approval. Continue with the selected candidate only:
37
+
38
+ ```bash
39
+ npx genex character preview <concept-id> --candidate <1|2|3> --user-approved
40
+ ```
41
+
42
+ Meshy Image-to-3D first produces an unremeshed high-detail model. Show its
43
+ front, back, left, and right views and report its measured face count. Preserve
44
+ that model in R2. Before rigging, ask the user to approve a separate
45
+ 10,000-face triangle remesh. The 10k remesh—not the high-detail source—is
46
+ rigged and animated.
47
+
48
+ The high-detail pre-rig generation stays in the selected neutral A-pose. There
49
+ is no dynamic-pose concept and no silent T-pose fallback. After the user has
50
+ seen the four views and face count, wait for explicit approval and finalize:
51
+
52
+ ```bash
53
+ npx genex character finalize <preview-id> \
54
+ --user-approved \
55
+ --approve-remesh 10000 \
56
+ --animation <action-id>
57
+ ```
58
+
59
+ `--animation` is repeatable. Finalization uses Meshy 6, creates the approved
60
+ 10k triangle remesh, rigs it, adds the immutable preview-reviewed neutral-v3
61
+ idle/walk/run/crouch/jump controller pack, and stores the source, remesh, rig,
62
+ and clips at permanent Genex asset URLs. It prints the complete Genex-credit
28
63
  quote before enqueueing. The Meshy API key remains server-side; never ask the
29
64
  user for one or call Meshy directly from game code.
30
65
 
66
+ Meshy's public API performs automatic rigging. The manual joint-marker step
67
+ shown in Meshy Web is not exposed through that API, so do not claim that this
68
+ part of the hosted workflow is reproduced.
69
+
70
+ The legacy one-shot text workflow is explicit and does not masquerade as the
71
+ reviewed image-first path:
72
+
73
+ ```bash
74
+ npx genex character "compact fantasy knight" --direct-text
75
+ ```
76
+
31
77
  Useful options:
32
78
 
33
79
  ```bash
34
- npx genex character "compact fantasy knight" --height 1.7 --polycount 40000
35
- npx genex character "retro space pilot" --animation 466 --no-wait
80
+ npx genex character finalize <preview-id> --user-approved --approve-remesh 10000 --height 1.7
81
+ npx genex character finalize <preview-id> --user-approved --approve-remesh 10000 --animation 466 --no-wait
36
82
  npx genex wait <generation-id>
37
83
  ```
38
84
 
39
- `--animation <id-or-query>` is repeatable. `--no-controller-pack` deliberately
40
- omits the default locomotion pack. `--no-wait` returns a generation id for
41
- `genex wait`; it does not create a second paid request.
85
+ `--animation <id-or-query>` is repeatable on `finalize`.
86
+ `--no-controller-pack` is available only with the explicit `--direct-text`
87
+ compatibility path. The guided parity workflow always installs neutral-v3.
88
+ `--no-wait` returns a generation id for `genex wait`; it does not create a
89
+ second paid request. Never add `--user-approved` until the user has actually
90
+ seen and selected the candidate; never add `--approve-remesh 10000` until they
91
+ have actually seen the four high-detail views and measured face count.
42
92
 
43
93
  Before handoff, capture idle, walk, run, crouch-idle, crouch-move, and jump.
44
94
  Inspect shoulders, elbows, wrists, and hands as well as the feet. Reject
@@ -85,10 +135,12 @@ after preview without asking the player to disable cache.
85
135
  `playOneShot()` returns false and emits one warning when a requested clip is
86
136
  absent; treat that as an installation failure, not a successful action.
87
137
 
88
- Meshy limb rotations are played unchanged. Never freeze hand tracks or apply
89
- post-mixer arm, leg, or foot corrections. A bad native rig or clip must be
90
- rejected and regenerated. Only horizontal root/hip translation is normalized
91
- so Rapier remains authoritative.
138
+ Meshy limb rotations play unchanged. Never freeze hand tracks or apply
139
+ post-mixer arm, hand, leg, or foot corrections. Only horizontal root or hip
140
+ translation may be normalized for Rapier.
141
+
142
+ A bad native rig or clip must be rejected and regenerated; validation never
143
+ rewrites limb animation.
92
144
 
93
145
  A controller pack is an immutable exact action set. If a required binding is
94
146
  absent, installation fails instead of substituting Meshy's rig-basic Walking
@@ -108,8 +160,8 @@ durations, nominal speeds, trajectories, and gameplay requirements.
108
160
  signature matches. There is no runtime retargeting in this lane.
109
161
  - Do not repair hands, arms, or legs at runtime. Verify the installed manifest's
110
162
  exact slot-to-action mappings; stop and regenerate when a native pose is bad.
111
- - Rapier owns the player transform. Animation tracks are normalized
112
- horizontally in place; never move the rendered character root separately.
163
+ - Rapier owns the player transform. Only horizontal root or hip translation may
164
+ be normalized; never move the rendered character root separately.
113
165
  - `controller-loop` clips follow controller-local intent and measured speed.
114
166
  The state machine crossfades idle, walk, run, jump, directional slots, and
115
167
  explicit fallbacks exactly as it does for VRM + UAL.
@@ -32,14 +32,33 @@ platforms, climbs stairs and slides on too-steep slopes out of the box.
32
32
 
33
33
  Use the VRM + UAL lane above by default. When the game needs a custom generated
34
34
  humanoid or an action unavailable in UAL, load `$genex-ai-character`, search
35
- Meshy's library first, generate the character, and install it by character ID:
35
+ Meshy's library first, and follow the reviewed image-first generation flow.
36
+
37
+ Before generating a Meshy character, discuss two or three visual directions.
38
+ When the user names a visual reference, inspect references before writing the
39
+ concept prompt. Recommend a neutral A-pose for characters that will be rigged.
40
+
41
+ Generate concept images first and show the actual images to the user. Do not
42
+ start Image-to-3D until the user explicitly selects a candidate. All three
43
+ concepts and the selected high-detail pre-rig generation stay in a neutral
44
+ A-pose; never use a dynamic concept pose or silently substitute a T-pose. Warn
45
+ that held, slung, or overlapping props and straps can fuse into the body or
46
+ obscure limbs, and recommend separate gameplay props.
36
47
 
37
48
  ```bash
38
49
  npx genex animations search "rifle reload" --json
39
- npx genex character "stylized sci-fi courier, practical clothing" --animation 466
50
+ npx genex character "stylized sci-fi courier, practical clothing"
51
+ npx genex character preview <concept-id> --candidate <1|2|3> --user-approved
52
+ npx genex character finalize <preview-id> --user-approved --approve-remesh 10000 --animation 466
40
53
  npx genex controller character --character <character-id>
41
54
  ```
42
55
 
56
+ Meshy Image-to-3D first produces an unremeshed high-detail model. Show its
57
+ front, back, left, and right views and report its measured face count. Preserve
58
+ that model in R2. Before rigging, ask the user to approve a separate
59
+ 10,000-face triangle remesh. The 10k remesh—not the high-detail source—is
60
+ rigged and animated.
61
+
43
62
  That is a separate, **same-rig Meshy-native lane**. Its animation-only GLBs are
44
63
  accepted only when their skeleton signature matches the active character
45
64
  revision; this lane does no runtime retargeting. The shared ECCTRL-derived
@@ -52,12 +71,12 @@ after preview without asking the player to disable cache. `playOneShot()`
52
71
  returns false and emits one warning when a requested clip is absent; treat
53
72
  that as an installation failure, not a successful action.
54
73
 
55
- Meshy limb rotations are played unchanged. Never freeze hand tracks or apply
56
- post-mixer arm, leg, or foot corrections. A bad native rig or clip must be
57
- rejected and regenerated. Only horizontal root/hip translation is normalized
58
- so Rapier remains authoritative. A controller pack is an immutable exact
59
- action set: if a required binding is absent, installation fails instead of
60
- substituting Meshy's rig-basic Walking or Running animation.
74
+ Meshy limb rotations play unchanged. Never freeze hand tracks or apply
75
+ post-mixer arm, hand, leg, or foot corrections. Only horizontal root or hip
76
+ translation may be normalized for Rapier. A bad native rig or clip must be
77
+ rejected and regenerated. A controller pack is an immutable exact action set:
78
+ if a required binding is absent, installation fails instead of substituting
79
+ Meshy's rig-basic Walking or Running animation.
61
80
 
62
81
  Because these files are game-owned, never run `genex controller character --force` over an edited
63
82
  fork as a migration strategy. Install a fresh copy elsewhere and port only the named changes.
@@ -204,6 +223,9 @@ npx genex controller anims sword pistol # a sword+shooter game
204
223
  npx genex controller anims stealth climb crawl # a ninja game
205
224
  npx genex controller anims --list # browse tags; --list <tag> for per-clip details
206
225
  npx genex animations search "rifle reload" --json
226
+ npx genex character "stylized sci-fi courier, practical clothing"
227
+ npx genex character preview <concept-id> --candidate <1|2|3> --user-approved
228
+ npx genex character finalize <preview-id> --user-approved --approve-remesh 10000
207
229
  npx genex character animate <character-id> --action <action-id>
208
230
  npx genex controller character --character <character-id> # refresh the manifest
209
231
  ```
@@ -217,9 +239,12 @@ slots, fallbacks, and cadence data. UAL clips still land in
217
239
  genre hints, `playOneShot` options, overrides, foot IK, and remote-player
218
240
  animation.
219
241
 
220
- For Meshy characters, do not repair hands, arms, or legs at runtime. Verify
221
- that the installed manifest binds the expected action IDs; if a native pose
222
- is bad or a required binding is missing, stop and regenerate the character.
242
+ For Meshy characters, do not repair hands, arms, or legs at runtime. Meshy limb
243
+ rotations play unchanged. Never freeze hand tracks or apply post-mixer arm,
244
+ hand, leg, or foot corrections. Only horizontal root or hip translation may be
245
+ normalized for Rapier. Verify that the installed manifest binds the expected
246
+ action IDs; if a native pose is bad or a required binding is missing, stop and
247
+ regenerate the character.
223
248
 
224
249
  ## Crouch (built in)
225
250
 
@@ -82,15 +82,25 @@ the time scale so slow motion doesn't pop).
82
82
  Use this lane when a game needs a custom generated humanoid or catalog depth
83
83
  that the personal-VRM library does not cover: sports, dance, tactical actions,
84
84
  prop interactions, or authored traversal. Load `$genex-ai-character`, search
85
- first, generate the controller-ready character, and add exact action IDs:
85
+ first, then use the reviewed concept high-detail preview approved 10k
86
+ triangle-remesh flow before adding exact action IDs:
86
87
 
87
88
  ```bash
88
89
  npx genex animations search "rifle reload" --json
89
- npx genex character "stylized sci-fi courier, practical clothing" --animation 466
90
+ npx genex character "stylized sci-fi courier, practical clothing"
91
+ npx genex character preview <concept-id> --candidate <1|2|3> --user-approved
92
+ npx genex character finalize <preview-id> --user-approved --approve-remesh 10000 --animation 466
90
93
  npx genex character animate <character-id> --action <action-id>
91
94
  npx genex controller character --character <character-id>
92
95
  ```
93
96
 
97
+ All three concepts and the selected high-detail model use a neutral A-pose.
98
+ The high-detail source is preserved in R2 and shown from front, back, left, and
99
+ right with its measured face count before the user is asked to approve the
100
+ separate 10,000-face triangle remesh. Only that remesh is rigged and animated.
101
+ Held, slung, or overlapping props can fuse into the body or hide limbs; warn
102
+ before generation and prefer separate gameplay props.
103
+
94
104
  Search output exposes the numeric action ID, stable key, preview, loop mode,
95
105
  motion policy, controller slots, gameplay requirements, review status, and
96
106
  estimated cost. Use a returned ID; do not guess from a name. Search is free and
@@ -119,8 +129,9 @@ const anims = new CharacterAnimations(native.scene, native.clips, {
119
129
 
120
130
  During Meshy validation, record the action ID actually bound to every slot.
121
131
  A public preview is not evidence when the game is playing a different clip or
122
- a rig-basic fallback. The native loader plays every limb quaternion unchanged;
123
- never freeze hand tracks or add post-mixer arm, leg, or foot corrections.
132
+ a rig-basic fallback. Meshy limb rotations play unchanged. Never freeze hand
133
+ tracks or apply post-mixer arm, hand, leg, or foot corrections. Only horizontal
134
+ root or hip translation may be normalized for Rapier.
124
135
 
125
136
  The loader rejects clips whose manifest skeleton signature differs from the
126
137
  current model revision or whose tracks target missing bones. This is deliberate
@@ -17,7 +17,7 @@ map, execution order, and acceptance gate.
17
17
  | --- | --- |
18
18
  | shot composition, chase/side/orbit rigs, camera handoffs, projection ownership, pointer look, mouse-aimed action (shooter, FPS/first-person, sniper, turret, crosshair/reticle), mouse-look, floating origins | `$genex-threejs-camera-direction` |
19
19
  | on-foot player movement: walk/run/jump/crouch, third-person character, slopes, stairs, moving platforms, personal VRM animation, directional locomotion, transitions, action motion | `$genex-threejs-character-controller` |
20
- | a custom generated playable humanoid or Meshy animation coverage beyond UAL: search, generate, rig, add exact action IDs, install the same-rig adapter | `$genex-ai-character` + `$genex-threejs-character-controller` |
20
+ | a custom generated playable humanoid or Meshy animation coverage beyond UAL: reference-informed A-pose concepts, explicit candidate + 10k-remesh approvals, exact action IDs, same-rig adapter | `$genex-ai-character` + `$genex-threejs-character-controller` |
21
21
  | the player drives or flies something: cars, drones, vehicle physics, gearbox, enter/exit between character and vehicle | `$genex-threejs-vehicle-controllers` |
22
22
  | playable on phones: touch/mobile input for any game — joystick, virtual buttons, drag zones, per-genre touch recipes, rotate-device overlay — wired by default for every NEW game when a recipe fits (skip with a one-line reason) | `$genex-threejs-touch-controls` |
23
23
  | anything falls, collides, gets pushed, or needs physics: Rapier world setup, colliders for meshes and GLBs, collision events | `$genex-threejs-physics-rapier` |
@@ -60,11 +60,31 @@ leaderboards. Multiplayer auth (`getColyseusAuth`) comes from it too.
60
60
 
61
61
  **Character-animation routing:** use the existing VRM + UAL character
62
62
  controller by default. Use `npx genex character` when the game needs a custom
63
- generated humanoid or an action unavailable in UAL. Load `$genex-ai-character`,
64
- search Meshy actions first with `npx genex animations search "<intent>" --json`,
65
- and use returned action IDs; never invent IDs or move the visual root. In both
66
- lanes, the ECCTRL-derived character controller owns collision and world
67
- translation.
63
+ generated humanoid or an action unavailable in UAL. Before generating a Meshy
64
+ character, discuss two or three visual directions. When the user names a visual
65
+ reference, inspect references before writing the concept prompt. Recommend a
66
+ neutral A-pose for characters that will be rigged.
67
+
68
+ Generate concept images first and show the actual images to the user. Do not
69
+ start Image-to-3D until the user explicitly selects a candidate. Generate
70
+ exactly three concepts, all neutral A-pose; never use a dynamic concept pose or
71
+ silently fall back to T-pose. Warn that held, slung, or overlapping props and
72
+ straps can fuse into the body or obscure limbs, and recommend separate gameplay
73
+ props.
74
+
75
+ Meshy Image-to-3D first produces an unremeshed high-detail model. Show its
76
+ front, back, left, and right views and report its measured face count. Preserve
77
+ that model in R2. Before rigging, ask the user to approve a separate
78
+ 10,000-face triangle remesh. The 10k remesh—not the high-detail source—is
79
+ rigged and animated. Keep every pre-animation generation in the selected
80
+ neutral A-pose.
81
+
82
+ Load `$genex-ai-character`, search Meshy actions first with
83
+ `npx genex animations search "<intent>" --json`, and use returned action IDs;
84
+ never invent IDs. Meshy limb rotations play unchanged. Never freeze hand tracks
85
+ or apply post-mixer arm, hand, leg, or foot corrections. Only horizontal root
86
+ or hip translation may be normalized for Rapier. In both lanes, the
87
+ ECCTRL-derived character controller owns collision and world translation.
68
88
 
69
89
  **UI is mandatory routing:** every game has an interface — load
70
90
  `$genex-threejs-game-ui` for every NEW game and run its "Plan the UI first" gate
@@ -145,7 +145,19 @@ Three.js release or branch, and do not blindly copy demo architecture.
145
145
  `$genex-threejs-physics-rapier` when anything falls, collides, or gets
146
146
  pushed; on-foot movement via `$genex-threejs-character-controller`;
147
147
  driving/flying and character↔vehicle enter/exit via
148
- `$genex-threejs-vehicle-controllers`.
148
+ `$genex-threejs-vehicle-controllers`. For a custom Meshy player, load
149
+ `$genex-ai-character` and keep the generation decisions ahead of wiring:
150
+ discuss two or three visual directions, inspect any user-named references,
151
+ then generate and show exactly three neutral-A-pose concepts. Wait for an
152
+ explicit candidate selection before Image-to-3D. Warn that held, slung, or
153
+ overlapping props and straps may fuse into the body or hide limbs. Keep the
154
+ selected high-detail pre-rig output in neutral A-pose, preserve it in R2,
155
+ show front/back/left/right views plus its measured face count, and wait for
156
+ explicit approval of the separate 10,000-face triangle remesh. Only the 10k
157
+ remesh is rigged and animated; there is no dynamic concept pose or silent
158
+ T-pose fallback. Meshy limb rotations remain unchanged—never freeze or
159
+ correct arm, hand, leg, or foot tracks. Only horizontal root or hip
160
+ translation may be normalized for Rapier.
149
161
  6. Select the minimum scene-generation skills: geometry, materials, vegetation,
150
162
  architecture, planets, water, precipitation, clouds, or VFX. Show the
151
163
  planned loader from the very first asset load — a player must never stare
@@ -22,6 +22,35 @@ Read [references/visual-validation.md](references/visual-validation.md)
22
22
  for visual contracts, required inspection controls, mechanism-specific
23
23
  evidence, temporal checks, budgets, and explicit rejection criteria.
24
24
 
25
+ ## Meshy character approval evidence
26
+
27
+ Before generating a Meshy character, discuss two or three visual directions.
28
+ When the user names a visual reference, inspect references before writing the
29
+ concept prompt. Recommend a neutral A-pose for characters that will be rigged.
30
+
31
+ Generate concept images first and show the actual images to the user. Do not
32
+ start Image-to-3D until the user explicitly selects a candidate. Validation
33
+ must show all three actual concept images, confirm that every candidate uses a
34
+ neutral A-pose, and preserve the user's explicit candidate selection. A task
35
+ ID, filename, or agent summary is not visual evidence. Dynamic concept poses
36
+ and silent T-pose fallbacks fail this checkpoint. Warn when held, slung, or
37
+ overlapping props or straps can fuse into the character or hide a limb.
38
+
39
+ Meshy Image-to-3D first produces an unremeshed high-detail model. Show its
40
+ front, back, left, and right views and report its measured face count. Preserve
41
+ that model in R2. Before rigging, ask the user to approve a separate
42
+ 10,000-face triangle remesh. The 10k remesh—not the high-detail source—is
43
+ rigged and animated.
44
+
45
+ The selected high-detail model remains in a neutral A-pose before animation.
46
+ Record evidence that the user saw its four views and face count before
47
+ `--approve-remesh 10000` was used. Historical Meshy characters remain valid;
48
+ do not demand a silent regeneration or upgrade.
49
+
50
+ Meshy limb rotations play unchanged. Never freeze hand tracks or apply
51
+ post-mixer arm, hand, leg, or foot corrections. Only horizontal root or hip
52
+ translation may be normalized for Rapier.
53
+
25
54
  ## Interaction smoke check (the game fast path)
26
55
 
27
56
  For plain game tasks — nothing from the procedural/visual-system pack loaded —
@@ -56,7 +85,9 @@ everything twice.
56
85
  locomotion continues normally.
57
86
  During Meshy validation, record the action ID actually bound to every slot.
58
87
  A public preview is not evidence when the game is playing a different clip
59
- or a rig-basic fallback. Do not repair hands, arms, or legs at runtime: if a
88
+ or a rig-basic fallback. Meshy limb rotations play unchanged. Never freeze
89
+ hand tracks or apply post-mixer arm, hand, leg, or foot corrections. Only
90
+ horizontal root or hip translation may be normalized for Rapier. If a
60
91
  native pose is bad or a required binding is missing, stop and regenerate.
61
92
  3. Capture one screenshot of live gameplay — of the **game**, not a sign-in
62
93
  gate or loading screen. A capture of the SDK's "Sign in to play" overlay is
@@ -73,6 +73,27 @@ its identity and every deliberate divergence in backend, resolution, asset,
73
73
  scale, or composition. Do not substitute a generic category match for the
74
74
  specific visual contract.
75
75
 
76
+ For a Meshy player character, the pre-animation sign-off record additionally
77
+ contains:
78
+
79
+ ```text
80
+ two or three discussed visual directions
81
+ the inspected references, when the user named one
82
+ three actual concept-image URLs, all neutral A-pose
83
+ the user's selected candidate
84
+ high-detail source URL in R2
85
+ front / back / left / right high-detail views
86
+ measured high-detail face count
87
+ the user's explicit approval of the separate 10,000-face triangle remesh
88
+ ```
89
+
90
+ Do not accept a dynamic-pose concept, a silent T-pose fallback, or a rig built
91
+ from the unremeshed high-detail source. Warn before generation when held,
92
+ slung, or overlapping props and straps can fuse into the body or hide limbs.
93
+ Animation naturally leaves the A-pose; its limb rotations remain native.
94
+ Never freeze or correct arm, hand, leg, or foot tracks. Only horizontal root or
95
+ hip translation may be normalized for Rapier.
96
+
76
97
  ## Required inspection controls
77
98
 
78
99
  Any runnable inspection surface should expose the controls relevant to its