@aura3d/cli 4.1.3 → 4.3.0

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.
Files changed (68) hide show
  1. package/dist/cli-help.d.ts.map +1 -1
  2. package/dist/cli-help.js +4 -2
  3. package/dist/cli-help.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +129 -19
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/assets/index.js +2 -2
  8. package/dist/commands/assets/index.js.map +1 -1
  9. package/dist/commands/meshyLedger.d.ts +125 -14
  10. package/dist/commands/meshyLedger.d.ts.map +1 -1
  11. package/dist/commands/meshyLedger.js +262 -35
  12. package/dist/commands/meshyLedger.js.map +1 -1
  13. package/dist/commands/prd13/run.js +19 -16
  14. package/dist/commands/prd13/run.js.map +1 -1
  15. package/dist/index.d.ts +8 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +12 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/pull-bridge/adapters.d.ts +9 -1
  20. package/dist/pull-bridge/adapters.d.ts.map +1 -1
  21. package/dist/pull-bridge/adapters.js +30 -7
  22. package/dist/pull-bridge/adapters.js.map +1 -1
  23. package/dist/pull-bridge/search.d.ts +5 -0
  24. package/dist/pull-bridge/search.d.ts.map +1 -1
  25. package/dist/pull-bridge/search.js +7 -1
  26. package/dist/pull-bridge/search.js.map +1 -1
  27. package/dist/pull-bridge.js +1 -1
  28. package/dist/pull-bridge.js.map +1 -1
  29. package/dist/resolve-ladder.d.ts +123 -0
  30. package/dist/resolve-ladder.d.ts.map +1 -0
  31. package/dist/resolve-ladder.js +410 -0
  32. package/dist/resolve-ladder.js.map +1 -0
  33. package/dist/skin/analysis.d.ts +137 -0
  34. package/dist/skin/analysis.d.ts.map +1 -0
  35. package/dist/skin/analysis.js +382 -0
  36. package/dist/skin/analysis.js.map +1 -0
  37. package/dist/skin/command.d.ts +71 -0
  38. package/dist/skin/command.d.ts.map +1 -0
  39. package/dist/skin/command.js +186 -0
  40. package/dist/skin/command.js.map +1 -0
  41. package/dist/skin/glbEdit.d.ts +14 -0
  42. package/dist/skin/glbEdit.d.ts.map +1 -0
  43. package/dist/skin/glbEdit.js +152 -0
  44. package/dist/skin/glbEdit.js.map +1 -0
  45. package/dist/skin/gltf.d.ts +159 -0
  46. package/dist/skin/gltf.d.ts.map +1 -0
  47. package/dist/skin/gltf.js +379 -0
  48. package/dist/skin/gltf.js.map +1 -0
  49. package/dist/skin/rebuildLimbs.d.ts +31 -0
  50. package/dist/skin/rebuildLimbs.d.ts.map +1 -0
  51. package/dist/skin/rebuildLimbs.js +326 -0
  52. package/dist/skin/rebuildLimbs.js.map +1 -0
  53. package/dist/skin/repair.d.ts +41 -0
  54. package/dist/skin/repair.d.ts.map +1 -0
  55. package/dist/skin/repair.js +180 -0
  56. package/dist/skin/repair.js.map +1 -0
  57. package/package.json +5 -5
  58. package/skills/aura3d-art-direction/SKILL.md +1 -1
  59. package/skills/aura3d-assets/SKILL.md +10 -6
  60. package/skills/aura3d-browser-game/SKILL.md +2 -0
  61. package/skills/aura3d-character-animation/SKILL.md +3 -1
  62. package/skills/aura3d-core/SKILL.md +4 -4
  63. package/skills/aura3d-core/references/boundaries.md +8 -5
  64. package/skills/aura3d-evidence-review/SKILL.md +1 -0
  65. package/skills/aura3d-materials-environments/references/custom-shader-chunks.md +8 -2
  66. package/skills/llms.txt +5 -5
  67. package/skills/meshy-cli/SKILL.md +13 -12
  68. package/skills/meshy-cli/references/asset-tooling.md +16 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aura3d/cli",
3
- "version": "4.1.3",
3
+ "version": "4.3.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "aura3d": "dist/cli.js",
@@ -28,10 +28,10 @@
28
28
  "types": "./dist/index.d.ts",
29
29
  "dependencies": {
30
30
  "typescript": "^5.8.3",
31
- "@aura3d/asset-index": "4.1.3",
32
- "@aura3d/audio": "4.1.3",
33
- "create-aura3d": "4.1.3",
34
- "@aura3d/rendering": "4.1.3"
31
+ "create-aura3d": "4.3.0",
32
+ "@aura3d/audio": "4.3.0",
33
+ "@aura3d/asset-index": "4.3.0",
34
+ "@aura3d/rendering": "4.3.0"
35
35
  },
36
36
  "description": "Bring real GLB/glTF assets into Aura3D browser apps with typed references, provenance, catalog search, validation, screenshots, and deploy checks.",
37
37
  "keywords": [
@@ -76,7 +76,7 @@ Hard checklist (all must hold before claiming done):
76
76
 
77
77
  ## Default-look facts
78
78
 
79
- No environment authored means the built-in neutral floor (4.1.2 published builds also log `ENV_FETCH_FAILED` for `/aura-environments/neutral.manifest.json`); the legacy post chain makes frames with bloom or vignette 25% to 40% darker (`POSTPROCESS_V2_UNMIGRATED`, known issue); exposure runs brighter than three.js for the same intensities. Judge the captured frame with the same post settings, and read the full list in `docs/agents/art-direction.md` section 3.
79
+ No environment authored means the built-in neutral floor (4.1.2 published builds also log `ENV_FETCH_FAILED` for `/aura-environments/neutral.manifest.json`); in 4.2.x `effects.vignette()` made frames about 25% to 40% darker (it ran on display-referred bytes; 4.3.0 applies it in linear light, about 6% to 18%; bloom does not darken); exposure runs brighter than three.js for the same intensities. Judge the captured frame with the same post settings, and read the full list in `docs/agents/art-direction.md` section 3.
80
80
 
81
81
  ## References
82
82
 
@@ -5,8 +5,8 @@ description: Finds, admits, inspects, validates, and types GLB/glTF, texture, en
5
5
 
6
6
  # Aura3D assets
7
7
 
8
- The CLI is the only path from a file or catalog hit to a typed `assets.<key>`.
9
- Shared rules (catalog-first, typed assets, paid generation) are in
8
+ The CLI is the only path from a file or search hit to a typed `assets.<key>`.
9
+ Shared rules (resolve-first, typed assets, paid generation) are in
10
10
  [boundaries](../aura3d-core/references/boundaries.md). The canonical end-to-end
11
11
  page (catalog, Meshy, optimise, isolated admission, rig and clips, production
12
12
  rules, budgets) is
@@ -44,9 +44,12 @@ lighting you evaluate materials and silhouettes against.
44
44
 
45
45
  Use `--type texture|environment|audio|navigation` for non-model files, and
46
46
  `--public-path /cdn/aura-assets/` when assets are served from a CDN.
47
- 2. Prompt names a real object: search with a descriptive phrase.
47
+ 2. Prompt names a real object: let `assets resolve` decide (project asset,
48
+ open licence-clear source, Meshy only with `--allow meshy --budget N`, else a
49
+ primitives recipe), or search to choose yourself. There is no hosted catalog.
48
50
 
49
51
  ```bash
52
+ npx @aura3d/cli@latest assets resolve "battle-worn knight helmet" --dry-run
50
53
  npx @aura3d/cli@latest assets search "battle-worn knight helmet" --json
51
54
  npx @aura3d/cli@latest assets search "animated humanoid fighting character" \
52
55
  --profile fighting-character --json
@@ -108,7 +111,8 @@ lighting you evaluate materials and silhouettes against.
108
111
  `src/aura-assets.ts` (a 100k-line diff) and `public/aura-assets/*`.
109
112
  9. Hand off: fighters and games to `aura3d-browser-game`
110
113
  (`assets validate-game`), rigs and clips to `aura3d-character-animation`
111
- (`assets validate-animation`), release checks to `aura3d-evidence-review`.
114
+ (`assets validate-animation`, `assets validate --skin`), release checks to
115
+ `aura3d-evidence-review`.
112
116
 
113
117
  ## Reject a candidate when
114
118
 
@@ -129,9 +133,9 @@ lighting you evaluate materials and silhouettes against.
129
133
  - Search returns no auto-pullable candidate, or every candidate fails the
130
134
  reject list: stop, list the query, profile, and rejection reasons, and offer
131
135
  two options: a user-supplied licensed file, or Meshy generation from a text
132
- prompt (load `meshy-cli`, dry run and an approved credit maximum first; never
136
+ prompt (load `meshy-cli`, dry run first, then reserve credits in the ledger; never
133
137
  from screenshots or frames of another game or product). Do not model the subject from primitives.
134
- - Search prints a catalog fetch warning (for example an HTTP 404): report it
138
+ - Search prints a source fetch warning (for example an HTTP 404): report it
135
139
  verbatim, label asset-dependent work `blocked`, and never treat fallback
136
140
  deep-links as auto-pullable.
137
141
  - `assets validate --release` fails on provenance: keep the route `prototype`
@@ -145,4 +145,6 @@ per round until every category reads 7+, 6 rounds, or 2 flat rounds.
145
145
  - [Game example standards](https://github.com/auraoneai/aura3d/blob/main/docs/agents/game-example-standards.md)
146
146
  - [Game runtime API](https://github.com/auraoneai/aura3d/blob/main/docs/api/game-runtime.md)
147
147
  - [Genre looks in the frame](references/genre-looks.md)
148
+ - [Mistakes already made (read first)](https://github.com/auraoneai/aura3d/blob/main/docs/agents/lessons-learned.md)
148
149
  - [Kits and hooks (4.1)](references/kits-and-hooks.md)
150
+ - Believable motion (`@aura3d/engine/game`): `attachToBone` (bat, club, ball in a hand), `createLocomotion` and `createFootSlideMeter` (legs that match the ground), `createHandBounce` and `measureHandBall` (a ball dribbled by hand: hand and floor contact, hand-offs, proof): `docs/api/motion-hand-bounce.md`, `docs/agents/build-a-game.md`
@@ -50,7 +50,9 @@ in flat light can vanish inside night-city shadow pools or golden-hour haze.
50
50
  ```
51
51
 
52
52
  Pass `--clips` from the inspection output. `"ok": false` with a
53
- `missingActions` entry means the rig cannot play that action.
53
+ `missingActions` entry means the rig cannot play that action. Then run
54
+ `assets validate --skin <glb>`: it fails on stretched triangles, flaps and
55
+ a mesh not in its skeleton's pose (`assets repair-skin` fixes or guides).
54
56
  2. Multi-part characters: build the assembly from typed keys first.
55
57
 
56
58
  ```bash
@@ -9,7 +9,7 @@ Aura3D is a TypeScript engine API, an asset CLI, templates, diagnostics, and a
9
9
  deploy checker. You are not writing three.js; `createAuraApp(...)` owns the
10
10
  renderer, scene graph, camera, and frame loop. Every scene gets a look — a
11
11
  preset that owns environment light, key shadow, fog, background and grade.
12
- Shared rules (claim labels, forbidden patterns, catalog-first, typed assets,
12
+ Shared rules (claim labels, forbidden patterns, resolve-first, typed assets,
13
13
  paid generation, benchmark mode) live once in
14
14
  [references/boundaries.md](references/boundaries.md).
15
15
 
@@ -69,8 +69,8 @@ without a look ships flat shading, void background and floating props.
69
69
  There is no root `output` or `world` namespace: tone mapping and grade come
70
70
  from the look (`looks.appOptions`), environment from `environments.*`.
71
71
 
72
- 4. If the prompt names a real object, resolve it through the catalog before
73
- writing model code (load `aura3d-assets`).
72
+ 4. If the prompt names a real object, run `assets resolve` before writing
73
+ model code (load `aura3d-assets`).
74
74
  5. Load the next skill from the routing table below. Load more than one when
75
75
  the task spans them.
76
76
  6. Never assemble characters, athletes, enemies, vehicles, aircraft, trees, or
@@ -112,7 +112,7 @@ without a look ships flat shading, void background and floating props.
112
112
  | Flipbook VFX sheets, HUD icons, UI sprites | `aura3d-game-art` |
113
113
  | Restyling a finished mesh without touching geometry | `aura3d-retexture` |
114
114
  | Frame time, bundle size, KTX2, LOD, instancing | `aura3d-performance` |
115
- | No clean catalog candidate, Meshy generation or import | `meshy-cli` |
115
+ | No clean open-source candidate, Meshy generation or import | `meshy-cli` |
116
116
 
117
117
  A listed skill that is not installed in this project is a gap to report, not
118
118
  permission to improvise its procedure.
@@ -34,11 +34,13 @@ camera loop; no memorized or guessed model URLs (they are hallucinated
34
34
  provenance); no `createAuraApp()` call per frame; no CSS, DOM, or canvas
35
35
  overlay standing in for 3D effects, labels on models, or renderer output.
36
36
 
37
- ## Catalog-first rule
37
+ ## Resolve-first rule
38
38
 
39
- A prompt that names a real object resolves through the asset catalog before
40
- any model code: `npx @aura3d/cli@latest assets search "<descriptive phrase>"`,
41
- then `assets resolve "<phrase>" --name <key>` for an auto-pullable candidate.
39
+ A prompt that names a real object goes through `npx @aura3d/cli@latest assets
40
+ resolve "<descriptive phrase>" --name <key>` before any model code. It uses an
41
+ admitted project asset, then an open licence-clear source, then Meshy (only with
42
+ `--allow meshy` and a budget), and otherwise prints a primitives recipe for
43
+ simple props. There is no hosted catalog.
42
44
  Auto-pullable means verified, redistributable (CC0 or CC-BY), and
43
45
  direct-download. Marketplace and deep-link results are user-handled: the user
44
46
  downloads and licenses them, then admits the file with `assets add`.
@@ -61,7 +63,8 @@ id, a URL, a copied GLB, or a draft artifact path.
61
63
 
62
64
  ## Paid generation controls (Meshy)
63
65
 
64
- - Catalog first. Generation is a fallback after a reported catalog rejection.
66
+ - Resolve first. Generation is a fallback after `assets resolve` reports no
67
+ project or open-source match.
65
68
  - Run `meshy make ... --dry-run` and show the plan before any paid call.
66
69
  - Get explicit user approval for the displayed maximum, then pass
67
70
  `--max-credits <approved>` on the paid command. Prices are never assumed.
@@ -130,6 +130,7 @@ benchmark exception are in [boundaries](../aura3d-core/references/boundaries.md)
130
130
  - [QA and replay kit](https://github.com/auraoneai/aura3d/blob/main/docs/api/qa-kit.md)
131
131
  - [Runtime safety net](https://github.com/auraoneai/aura3d/blob/main/docs/api/safety-net.md)
132
132
  - [Verification](https://github.com/auraoneai/aura3d/blob/main/docs/agents/verification.md)
133
+ - [Lessons learned and new-game checklist](https://github.com/auraoneai/aura3d/blob/main/docs/agents/lessons-learned.md)
133
134
  - [Rendering proof required](https://github.com/auraoneai/aura3d/blob/main/docs/agents/rendering-proof-required.md)
134
135
  - [Cinematic scene quality](https://github.com/auraoneai/aura3d/blob/main/docs/agents/cinematic-scene-quality.md)
135
136
  - [Deployment](https://aura3d.auraone.ai/docs/deployment.html)
@@ -20,12 +20,18 @@ signatures: `docs/api/glsl-chunks.md`.
20
20
 
21
21
  ## Chunks
22
22
 
23
- `#include <a3d_math>`, `<a3d_noise>`, `<a3d_sky>`, `<a3d_fog>`, `<a3d_triplanar>`
24
- and `<a3d_toon>` are tested GLSL ES 3.00 helpers prefixed `a3d`. Use them instead of
23
+ `#include <a3d_math>`, `<a3d_noise>`, `<a3d_sky>`, `<a3d_fog>`, `<a3d_triplanar>`,
24
+ `<a3d_toon>` and `<a3d_shadow>` are tested GLSL ES 3.00 helpers prefixed `a3d`. Use them instead of
25
25
  pasting hashes, fbm, sky gradients or fog into every shader. Precedence when names
26
26
  collide: built-in chunks, then these, then `registerShaderChunk`, then the material's
27
27
  `patch`. A material that includes chunks is GLSL-only: it has no WGSL twin.
28
28
 
29
+ ## Sun shadows
30
+
31
+ Set `receiveShadow: true` on the `material.custom` spec (or `#include <a3d_shadow>`) and multiply
32
+ your lit term by `a3dSunShadowAuto` (arguments: world position, normal): 1 in light, less in the key light's shadow.
33
+ It follows the light's `shadow` options like a PBR surface does, and is exactly 1 with no shadow map.
34
+
29
35
  ## NaN and Inf safety
30
36
 
31
37
  Apple GPUs return NaN where a software renderer returns a number. One NaN in a
package/skills/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # Aura3D
2
2
 
3
- > Aura3D 4.1.3: a TypeScript SDK for browser 3D apps and games. You write a typed, declarative scene with `@aura3d/engine`; the `@aura3d/cli` toolchain handles typed GLB/glTF assets, checks and deploy gates. Built to be driven by AI coding agents. Site: https://aura3d.auraone.ai
3
+ > Aura3D 4.3.0: a TypeScript SDK for browser 3D apps and games. You write a typed, declarative scene with `@aura3d/engine`; the `@aura3d/cli` toolchain handles typed GLB/glTF assets, checks and deploy gates. Built to be driven by AI coding agents. Site: https://aura3d.auraone.ai
4
4
 
5
5
  ## Fast path (read this first)
6
6
 
@@ -24,7 +24,7 @@ npm run build && npx @aura3d/cli@latest check-deploy --dist dist
24
24
 
25
25
  Other templates: `product-viewer` (default), `cinematic-scene`, `racing-starter`, `falling-blocks-starter`, `fighting-game`, `character-controller`, `arena-shooter`. List them with `npx create-aura3d@latest --help`. Known issue: a stock `vite build` of 4.1.2 fails on a Node-only import; use 4.1.3 or later.
26
26
 
27
- Read next, in this order: `docs/agents/README.md` (index), `docs/agents/agent-quickstart.md` (first scene, step by step), `docs/agents/recipes.md` (copy-and-adapt scenes: PBR cube with orbit, forest of instances, skinned character with crossfade, fixed-step game loop, custom shader on a grid), `docs/agents/claims-and-boundaries.md` (what you may claim). This path is meant to get a new agent to a rendering scene in minutes; the controlled cold-start trial that measures it is in `evidence/agent-eval/` (in progress).
27
+ Read next, in this order: `docs/agents/README.md` (index), `docs/agents/agent-quickstart.md` (first scene, step by step), `docs/agents/recipes.md` (copy-and-adapt scenes: PBR cube with orbit, forest of instances, skinned character with crossfade, fixed-step game loop, custom shader on a grid), `docs/agents/claims-and-boundaries.md` (what you may claim). This path is meant to get a new agent to a rendering scene in minutes; the controlled cold-start trial that measures it is in `evidence/agent-eval/` (in progress). Building a game: read `docs/agents/new-game-checklist.md` and `docs/agents/lessons-learned.md` first, then run `node tools/game-checks/run.mjs <game-slug>`.
28
28
 
29
29
  Working inside the Aura3D monorepo itself: run browsers, Playwright and heavy builds on the remote runner (`tools/remote-acr/run.sh`), never local Docker or local Playwright.
30
30
 
@@ -88,7 +88,7 @@ Porting existing three.js code: `aura3d migrate three` and the `aura3d-threejs-m
88
88
 
89
89
  Never invent asset paths, URLs or ids. Every model comes from a generated `assets.<key>`.
90
90
 
91
- - `npx @aura3d/cli@latest assets search "<object>"` searches the license-verified catalog.
91
+ - `npx @aura3d/cli@latest assets search "<object>"` searches licence-tagged open public sources and a starter pack; results are candidates to check, and there is no Aura3D-run search service to rely on.
92
92
  - `assets resolve "<object>" --name <name>` pulls the top match and types it as `assets.<name>`.
93
93
  - `assets add ./assets/model.glb --name model` adds a local file; then read the generated `src/aura-assets.ts`.
94
94
  - No catalog match: generate with Meshy (`meshy-cli` skill), optimize (`assets optimize --file in.glb --out out.glb --role <role>`), then admit (`assets import-meshy`).
@@ -136,6 +136,6 @@ Release integrity rules:
136
136
 
137
137
  - Full agent guide, genre recipes, guardrails and the page and example map: https://aura3d.auraone.ai/llms-full.txt
138
138
  - Docs: https://aura3d.auraone.ai/docs/api.html, https://aura3d.auraone.ai/docs/agent-quickstart.html, https://aura3d.auraone.ai/docs/claims.html
139
- - Showcase (15 playable games): https://aura3d.auraone.ai/apps/showcase-index/
139
+ - Showcase (25 playable games): https://aura3d.auraone.ai/apps/showcase-index/
140
140
  - Sitemap: https://aura3d.auraone.ai/sitemap.xml; crawl policy: https://aura3d.auraone.ai/robots.txt
141
- - Last updated: 2026-10-24
141
+ - Last updated: 2026-10-25
@@ -28,7 +28,7 @@ viewer.
28
28
  downloads artifacts.
29
29
  3. Run `npx @aura3d/cli@latest --help` and confirm `assets import-meshy` and
30
30
  its `--profile prop|environment|vehicle|humanoid` values.
31
- 4. Confirm the catalog was tried first (`aura3d-assets`) and its rejection
31
+ 4. Confirm `assets resolve` was tried first (`aura3d-assets`) and its skip
32
32
  reasons were reported. For the full upstream agent skill, review and pin a
33
33
  revision of [meshy-3d-agent](https://github.com/meshy-dev/meshy-3d-agent)
34
34
  before installing; do not copy its text here.
@@ -50,19 +50,21 @@ Reject instead of generating when the subject is a named real product,
50
50
  brand, character or person, or a request to reproduce another game's or
51
51
  product's art from its screenshots or frames; when rights evidence for
52
52
  the output cannot be recorded; when the user has not approved a maximum; or
53
- when a catalog candidate already passes the rubric.
53
+ when an open-source candidate already passes the rubric.
54
54
 
55
55
  ## Procedure
56
56
 
57
57
  1. Plan: `meshy make "<prompt>" --dry-run` and show the steps and estimate.
58
58
  For single resources, read the create help and state the planned inputs.
59
- 2. Get an approved maximum, then pass `--max-credits <approved>` and reserve
60
- every paid call in the ledger first:
61
- `rid=$(aura3d meshy ledger reserve --game <tag> --op preview --cap <per-game> --global-cap <total>)`,
62
- then `aura3d meshy ledger settle --rid "$rid" --exit-code 0 --task-id <id>`.
59
+ 2. Spend is uncapped by owner decision on 2026-10-25 (credits tracked for visibility, no default cap). If the
60
+ user states a limit, pass `--max-credits <limit>` and `aura3d meshy ledger config --global-cap <N>`. Reserve
61
+ every paid call first: `aura3d meshy ledger reserve --dry-run --game <tag> --op preview,refine` (cost),
62
+ `rid=$(aura3d meshy ledger reserve --game <tag> --op preview)`, then
63
+ `aura3d meshy ledger settle --rid "$rid" --exit-code 0 --task-id <id>`. A cap that was set hard-stops and
64
+ prints the credits left and the flag that raises or removes it.
63
65
  Credits per operation: preview 20, refine 10 (`make` = 30), remesh 5,
64
66
  rigging 5, animate 3, retexture 10. A rate-limited or timed-out call keeps
65
- counting until `ledger reconcile`.
67
+ counting until `ledger reconcile --rid <id>`; compare the whole ledger with the Prism pool using `ledger reconcile`.
66
68
  3. Run, preferring `--async` when other work can proceed. Persist task IDs
67
69
  and provider resume hints in ignored local state. Resume a completed
68
70
  preview; never recreate paid work that succeeded.
@@ -100,8 +102,7 @@ when a catalog candidate already passes the rubric.
100
102
  `defineAuraAssets(...)` / `defineAssets` declarations (keeps shadow and
101
103
  reflection intact) or place unhashed duplicate GLBs in
102
104
  `apps/<route>/public/aura-assets/`.
103
- 8. Rig handoff: after importing a rigged humanoid, inspect it and map clips
104
- before any code names them, then load `aura3d-character-animation`.
105
+ 8. Rig handoff: after importing a rigged humanoid, inspect it, map clips and run `assets validate --skin <glb>` (a mesh modelled in a pose tears) before any code names them, then load `aura3d-character-animation`.
105
106
 
106
107
  ```bash
107
108
  npx @aura3d/cli@latest assets inspect public/aura-assets/<file>.glb --animation --humanoid --skeleton
@@ -131,9 +132,9 @@ when a catalog candidate already passes the rubric.
131
132
 
132
133
  ## Stop and report
133
134
 
134
- - No approved maximum: stop after the dry run and present the plan.
135
- - Exit code 9 or a plan above the approved maximum: stop; do not split the
136
- job to stay under the cap.
135
+ - Always show the dry-run plan and its cost before paying.
136
+ - Exit code 9 (credits exhausted) or a plan above a limit the user set: stop; do
137
+ not split the job to stay under that limit.
137
138
  - Admission reports blockers for the chosen profile: keep the file as a
138
139
  rejected local candidate, report the failing checks, and label the route
139
140
  `prototype` or `blocked`.
@@ -56,20 +56,31 @@ a bare `rocks` or `board`: two games sharing one `rocks.raw.glb` silently reuse
56
56
  ## Credit ledger
57
57
 
58
58
  ```bash
59
- rid=$(npx @aura3d/cli@latest meshy ledger reserve --game drift --op preview --cap 800 --global-cap 10000)
59
+ npx @aura3d/cli@latest meshy ledger reserve --dry-run --game drift --op preview,refine
60
+ rid=$(npx @aura3d/cli@latest meshy ledger reserve --game drift --op preview)
60
61
  npx @aura3d/cli@latest meshy ledger settle --rid "$rid" --exit-code 0 --task-id <id>
61
62
  npx @aura3d/cli@latest meshy ledger status
62
63
  ```
63
64
 
64
- The ledger (`--ledger path` or `AURA3D_MESHY_LEDGER`, default `~/.aura3d/meshy-ledger.jsonl`) enforces a
65
- per-game cap and one global cap under a lock, so concurrent agents cannot overspend. `--game` is required
66
- and must be a lowercase tag. Estimates: preview 20, refine 10, remesh 5, rigging 5, animate 3, retexture 10.
65
+ The ledger (`--ledger path` or `AURA3D_MESHY_LEDGER`, default `~/.aura3d/meshy-ledger.jsonl`) tracks credits under a
66
+ lock so concurrent agents share one total. Spend is uncapped by owner decision on 2026-10-25 (credits are tracked for
67
+ visibility); a per-game cap (`--cap N`, `--game-cap N`, `AURA3D_MESHY_GAME_CAP`) and a global cap (`--global-cap N`,
68
+ `AURA3D_MESHY_GLOBAL_CAP`, or `ledger config`) are opt-in, and `config --global-cap off --game-cap off` removes them.
69
+ A cap that is set is a hard stop: exit 3 with the credits left and the flag that raises it. `--game` is
70
+ required and must be a lowercase tag. Estimates: preview 20, refine 10, remesh 5, rigging 5, animate 3, retexture 10.
71
+ `reserve --dry-run --op preview,refine,rigging` prices a chain without writing.
67
72
 
68
73
  A rate-limited (exit 6) or timed-out (exit 8) call is NOT a failure: the task usually finishes and is
69
74
  charged. `settle --exit-code` records it as `unconfirmed`, which keeps counting its estimate. Resume the
70
75
  task with `meshy <resource> get <id>` instead of paying again, then
71
76
  `meshy ledger reconcile --rid <id> --status ok` (or `failed`). Only a confirmed no-charge outcome (auth
72
- exit 3, validation exit 4, credits exit 9, or a FAILED task) settles as `failed` and counts 0.
77
+ exit 3, validation exit 4, credits exit 9, a FAILED task, or a 429 on a create) settles as `failed` and counts 0.
78
+ Pass the Meshy stderr with `settle --exit-code 6 --error-text "<stderr>"`: a 429 on a poll
79
+ (`/text-to-3d/<id>`) means the task exists, so it stays `unconfirmed` with that task id and keeps counting.
80
+
81
+ `meshy ledger reconcile` (no `--rid`) compares the ledger with the Kiro Prism pool balance since the last
82
+ `baseline` and prints the delta; `--apply` books it as an `unattributed` adjustment. It reads `GET /admin/meshy`
83
+ with `AURA3D_PRISM_KEY` or `AURA3D_PRISM_KEY_FILE` (never printed) or a saved `--pool-json`.
73
84
 
74
85
  ## Profile traps
75
86