@rig-c/create 1.0.2 → 1.1.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.
- package/README.md +21 -5
- package/docs/AGENT-REFERENCE.md +62 -0
- package/docs/CHECKS.md +45 -9
- package/docs/INTERVIEW.md +19 -7
- package/docs/PROJECT.md +10 -0
- package/package.json +4 -1
- package/scripts/npm-json.ts +74 -0
- package/scripts/verify-example-seals.ts +148 -0
- package/src/agent-guide.ts +7 -4
- package/src/check.ts +7 -4
- package/src/choice-writers.ts +3 -14
- package/src/cli.ts +1 -0
- package/src/feedback.ts +3 -10
- package/src/fix-ledger.ts +1 -1
- package/src/job-acts.ts +4 -0
- package/src/job-host-state.ts +154 -0
- package/src/job-host.ts +37 -14
- package/src/job-outbox.ts +5 -3
- package/src/job-publication.ts +17 -13
- package/src/job-runtime.ts +17 -4
- package/src/next.ts +110 -24
- package/src/parts-review.ts +4 -11
- package/src/reopen.ts +72 -9
- package/src/review-act.ts +49 -14
- package/src/review-package.ts +3 -1
- package/src/rig-version.ts +219 -8
- package/src/scene-writers.ts +5 -3
- package/src/scene.ts +14 -4
- package/src/signable.ts +25 -3
- package/src/signoff-checkpoint-act.ts +2 -16
- package/src/signoff.ts +3 -15
- package/src/waypoints.ts +20 -9
- package/templates/agent-guide.md +2 -24
- package/templates/collection.json +10 -2
- package/templates/example-chain/.gitignore +6 -0
- package/templates/example-chain/.npmignore +1 -0
- package/templates/example-chain/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/AGENTS.md +4 -26
- package/templates/example-chain/README.md +1 -1
- package/templates/example-chain/chain.json +385 -319
- package/templates/example-chain/checkpoints/0a-interview-options/.gitignore +6 -0
- package/templates/example-chain/checkpoints/0a-interview-options/.npmignore +1 -0
- package/templates/example-chain/checkpoints/0a-interview-options/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/0a-interview-options/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/0a-interview-options/project.json +22 -5
- package/templates/example-chain/checkpoints/0a-interview-options.json +7 -3
- package/templates/example-chain/checkpoints/0b-plan-pending/.gitignore +6 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/.npmignore +1 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/0b-plan-pending/project.json +22 -5
- package/templates/example-chain/checkpoints/0b-plan-pending.json +7 -3
- package/templates/example-chain/checkpoints/1-parts-verdict/.gitignore +6 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/.npmignore +1 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/config.json +88 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/parts.json +188 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/input/recomposite_rig.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/background.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/face.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/motion.json +137 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/rig.json +536 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/derived/drafts/chain/out/run.json +52 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/project.json +24 -7
- package/templates/example-chain/checkpoints/1-parts-verdict.json +9 -5
- package/templates/example-chain/checkpoints/2-rigging-answers/.gitignore +6 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/.npmignore +1 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/config.json +88 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/parts.json +188 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/input/recomposite_rig.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/background.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/face.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/motion.json +137 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/rig.json +536 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/derived/drafts/chain/out/run.json +52 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/project.json +24 -7
- package/templates/example-chain/checkpoints/2-rigging-answers.json +21 -5
- package/templates/example-chain/checkpoints/3-rig-review/.gitignore +6 -0
- package/templates/example-chain/checkpoints/3-rig-review/.npmignore +1 -0
- package/templates/example-chain/checkpoints/3-rig-review/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/3-rig-review/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/config.json +88 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/parts.json +188 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/input/recomposite_rig.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/motion.json +137 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/rig.json +536 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/drafts/chain/out/run.json +52 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/config.json +88 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/parts.json +188 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/checkpoints/3-rig-review/derived/review/v1/out/rig/run.json +52 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/motion.json +1 -1
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/turn.json +108 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/parts.json +188 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/checkpoints/3-rig-review/outputs/v1/out/rig/run.json +52 -0
- package/templates/example-chain/checkpoints/3-rig-review/project.json +77 -28
- package/templates/example-chain/checkpoints/3-rig-review.json +19 -11
- package/templates/example-chain/checkpoints/4-direction-post/.gitignore +6 -0
- package/templates/example-chain/checkpoints/4-direction-post/.npmignore +1 -0
- package/templates/example-chain/checkpoints/4-direction-post/AGENT-REFERENCE.md +62 -0
- package/templates/example-chain/checkpoints/4-direction-post/AGENTS.md +4 -26
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/config.json +88 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/parts.json +188 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/input/recomposite_rig.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/motion.json +137 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/rig.json +536 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/drafts/chain/out/run.json +52 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/config.json +88 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/parts.json +188 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/checkpoints/4-direction-post/derived/review/v1/out/rig/run.json +52 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/camera_depth.json +2 -2
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/motion.json +1 -1
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/post_composition.json +2 -2
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/post_timing.json +2 -2
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/turn.json +108 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/painting_in_rig.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/parts.json +188 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/checkpoints/4-direction-post/outputs/v1/out/rig/run.json +52 -0
- package/templates/example-chain/checkpoints/4-direction-post/project.json +106 -57
- package/templates/example-chain/checkpoints/4-direction-post.json +22 -14
- package/templates/example-chain/derived/drafts/chain/config.json +88 -0
- package/templates/example-chain/derived/drafts/chain/input/painting_in_rig.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/background.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/eye_l.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/eye_r.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/face.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/lantern.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts/torso.png +0 -0
- package/templates/example-chain/derived/drafts/chain/input/parts.json +188 -0
- package/templates/example-chain/derived/drafts/chain/input/recomposite_rig.png +0 -0
- package/templates/example-chain/derived/drafts/chain/interview-requirements.json +8 -0
- package/templates/example-chain/derived/drafts/chain/out/check/build/run.json +40 -0
- package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/derived/drafts/chain/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/background.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/eye_l.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/eye_r.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/face.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/lantern.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/images/torso.png +0 -0
- package/templates/example-chain/derived/drafts/chain/out/mesh_report.json +15 -0
- package/templates/example-chain/derived/drafts/chain/out/motion.json +137 -0
- package/templates/example-chain/derived/drafts/chain/out/rig.json +536 -0
- package/templates/example-chain/derived/drafts/chain/out/run.json +52 -0
- package/templates/example-chain/derived/review/v1/config.json +88 -0
- package/templates/example-chain/derived/review/v1/interview-requirements.json +8 -0
- package/templates/example-chain/derived/review/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/derived/review/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/derived/review/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/derived/review/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/background.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/face.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/derived/review/v1/out/parts.json +188 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/derived/review/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/derived/review/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/derived/review/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/derived/review/v1/out/rig/run.json +52 -0
- package/templates/example-chain/evidence/captions.json +1 -1
- package/templates/example-chain/evidence/direction/v2.json +1 -1
- package/templates/example-chain/evidence/direction-input.json +1 -1
- package/templates/example-chain/evidence/interview/camera_depth.json +2 -2
- package/templates/example-chain/evidence/interview/motion.json +1 -1
- package/templates/example-chain/evidence/interview/post_composition.json +2 -2
- package/templates/example-chain/evidence/interview/post_timing.json +2 -2
- package/templates/example-chain/evidence/interview/turn.json +108 -0
- package/templates/example-chain/evidence/scene/s1.json +2 -2
- package/templates/example-chain/outputs/v1/out/check/build/run.json +40 -0
- package/templates/example-chain/outputs/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-chain/outputs/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-chain/outputs/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-chain/outputs/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-chain/outputs/v1/out/painting_in_rig.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/background.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/eye_l.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/eye_r.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/face.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/lantern.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts/torso.png +0 -0
- package/templates/example-chain/outputs/v1/out/parts.json +188 -0
- package/templates/example-chain/outputs/v1/out/rig/images/background.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/images/face.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/images/torso.png +0 -0
- package/templates/example-chain/outputs/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-chain/outputs/v1/out/rig/motion.json +137 -0
- package/templates/example-chain/outputs/v1/out/rig/rig.json +536 -0
- package/templates/example-chain/outputs/v1/out/rig/run.json +52 -0
- package/templates/example-chain/project.json +127 -78
- package/templates/example-direction/derived/review/v1/out/check/build/run.json +2 -2
- package/templates/example-draft/derived/drafts/lantern/out/check/build/run.json +2 -2
- package/templates/example-draft/derived/drafts/lantern/out/run.json +2 -2
- package/templates/example-draft/derived/review/v1/out/check/build/run.json +2 -2
- package/templates/example-draft/derived/review/v1/out/rig/run.json +2 -2
- package/templates/example-draft/derived/review/v2/out/check/build/run.json +2 -2
- package/templates/example-draft/derived/review/v2/out/rig/run.json +2 -2
- package/templates/example-draft/evidence/direction/v4.json +3 -3
- package/templates/example-draft/evidence/direction-input-v4.json +3 -3
- package/templates/example-draft/evidence/parts-review.json +1 -1
- package/templates/example-draft/evidence/review-reads/{52673b635b9cbc92da1a9e3d4c023a249bbacf79cd21b59724f03f18f8caf09b.json → 8866887a00012b5d5944b7525a478aea70931935bff35ddfcb186ffc515ef5af.json} +2 -2
- package/templates/example-draft/evidence/scene/s1.json +3 -3
- package/templates/example-draft/evidence/scene-citations.json +1 -1
- package/templates/example-draft/out/check/build/run.json +2 -2
- package/templates/example-draft/out/run.json +2 -2
- package/templates/example-draft/outputs/v1/out/check/build/run.json +2 -2
- package/templates/example-draft/outputs/v1/out/rig/run.json +2 -2
- package/templates/example-draft/outputs/v2/out/check/build/run.json +2 -2
- package/templates/example-draft/outputs/v2/out/rig/run.json +2 -2
- package/templates/example-interview-choice.json +113 -68
- package/templates/example-interview-options/constraint.json +2 -2
- package/templates/example-interview-options/example-assemble.json +2 -2
- package/templates/example-interview-options/example-bones.json +5 -5
- package/templates/example-interview-options/example-camera-depth.json +3 -3
- package/templates/example-interview-options/example-constraints.json +5 -5
- package/templates/example-interview-options/example-meshes.json +5 -5
- package/templates/example-interview-options/example-motion.json +5 -5
- package/templates/example-interview-options/example-picks.json +2 -2
- package/templates/example-interview-options/example-post-composition.json +3 -3
- package/templates/example-interview-options/example-post-timing.json +3 -3
- package/templates/example-interview-options/example-reference.json +2 -2
- package/templates/example-interview-options/example-rig-type.json +2 -2
- package/templates/example-interview-options/example-seethrough.json +2 -2
- package/templates/example-interview-options/example-turn.json +108 -0
- package/templates/example-interview-options/fullscreen.json +2 -2
- package/templates/example-interview-options/other-explicit.json +2 -2
- package/templates/example-interview-options/other-pending.json +2 -2
- package/templates/example-interview-options/other-picks.json +2 -2
- package/templates/example-invariants/invariants.json +223 -164
- package/templates/example-project.json +301 -249
- package/templates/example-remesh/.gitignore +6 -0
- package/templates/example-remesh/.npmignore +1 -0
- package/templates/example-remesh/AGENT-REFERENCE.md +62 -0
- package/templates/example-remesh/AGENTS.md +4 -26
- package/templates/example-remesh/derived/drafts/remesh/config.json +88 -0
- package/templates/example-remesh/derived/drafts/remesh/input/painting_in_rig.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/background.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/eye_l.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/eye_r.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/face.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/lantern.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts/torso.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/input/parts.json +188 -0
- package/templates/example-remesh/derived/drafts/remesh/input/recomposite_rig.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/interview-requirements.json +8 -0
- package/templates/example-remesh/derived/drafts/remesh/out/check/build/run.json +40 -0
- package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/derived/drafts/remesh/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/background.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/eye_l.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/eye_r.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/face.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/lantern.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/images/torso.png +0 -0
- package/templates/example-remesh/derived/drafts/remesh/out/mesh_report.json +15 -0
- package/templates/example-remesh/derived/drafts/remesh/out/motion.json +137 -0
- package/templates/example-remesh/derived/drafts/remesh/out/rig.json +536 -0
- package/templates/example-remesh/derived/drafts/remesh/out/run.json +52 -0
- package/templates/example-remesh/derived/review/v1/config.json +88 -0
- package/templates/example-remesh/derived/review/v1/interview-requirements.json +8 -0
- package/templates/example-remesh/derived/review/v1/out/check/build/run.json +44 -0
- package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/derived/review/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/background.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/face.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts/torso.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/parts.json +188 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/background.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/face.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/derived/review/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/derived/review/v1/out/rig/motion.json +137 -0
- package/templates/example-remesh/derived/review/v1/out/rig/rig.json +536 -0
- package/templates/example-remesh/derived/review/v1/out/rig/run.json +52 -0
- package/templates/example-remesh/derived/review/v2/config.json +88 -0
- package/templates/example-remesh/derived/review/v2/interview-requirements.json +8 -0
- package/templates/example-remesh/derived/review/v2/out/check/build/run.json +44 -0
- package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/derived/review/v2/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/background.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/face.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts/torso.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/parts.json +188 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/background.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/face.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/derived/review/v2/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/derived/review/v2/out/rig/motion.json +137 -0
- package/templates/example-remesh/derived/review/v2/out/rig/rig.json +536 -0
- package/templates/example-remesh/derived/review/v2/out/rig/run.json +52 -0
- package/templates/example-remesh/derived/review/v3/config.json +88 -0
- package/templates/example-remesh/derived/review/v3/interview-requirements.json +8 -0
- package/templates/example-remesh/derived/review/v3/out/check/build/run.json +44 -0
- package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/derived/review/v3/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/background.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/face.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts/torso.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/parts.json +188 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/background.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/face.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/derived/review/v3/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/derived/review/v3/out/rig/motion.json +137 -0
- package/templates/example-remesh/derived/review/v3/out/rig/rig.json +536 -0
- package/templates/example-remesh/derived/review/v3/out/rig/run.json +52 -0
- package/templates/example-remesh/evidence/captions.json +1 -1
- package/templates/example-remesh/evidence/direction/v4.json +1 -1
- package/templates/example-remesh/evidence/direction/v5.json +1 -1
- package/templates/example-remesh/evidence/direction-input-v4.json +1 -1
- package/templates/example-remesh/evidence/direction-input-v5.json +1 -1
- package/templates/example-remesh/evidence/interview/assemble.json +1 -1
- package/templates/example-remesh/evidence/interview/bones.json +4 -4
- package/templates/example-remesh/evidence/interview/camera_depth.json +2 -2
- package/templates/example-remesh/evidence/interview/constraints.json +4 -4
- package/templates/example-remesh/evidence/interview/meshes.json +4 -4
- package/templates/example-remesh/evidence/interview/motion.json +4 -4
- package/templates/example-remesh/evidence/interview/post_composition.json +2 -2
- package/templates/example-remesh/evidence/interview/post_timing.json +2 -2
- package/templates/example-remesh/evidence/interview/reference.json +1 -1
- package/templates/example-remesh/evidence/interview/rig_type.json +1 -1
- package/templates/example-remesh/evidence/interview/seethrough.json +1 -1
- package/templates/example-remesh/evidence/interview/turn.json +108 -0
- package/templates/example-remesh/evidence/parts-review.json +1 -1
- package/templates/example-remesh/evidence/review-reads/{afe2522be4087f7f2fa7e97746d5f8574b0aedb474245ce2dbce0455e662f041.json → 99ade3eb19d70bd5f727138b3b4876ce86f1e1c22a59b516639bf85593996c32.json} +2 -2
- package/templates/example-remesh/evidence/scene/s1.json +2 -2
- package/templates/example-remesh/evidence/v1/registration/at-source.json +2 -2
- package/templates/example-remesh/evidence/v1/registration/rigc-run-1.json +2 -2
- package/templates/example-remesh/evidence/v2/registration/at-source.json +2 -2
- package/templates/example-remesh/evidence/v2/registration/rigc-run-1.json +2 -2
- package/templates/example-remesh/evidence/v3/registration/at-source.json +2 -2
- package/templates/example-remesh/evidence/v3/registration/rigc-run-1.json +2 -2
- package/templates/example-remesh/outputs/v1/idle/frames.json +29 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/contact.png +0 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0000.png +0 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0001.png +0 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0002.png +0 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0003.png +0 -0
- package/templates/example-remesh/outputs/v1/idle/idle@1fps/f0004.png +0 -0
- package/templates/example-remesh/outputs/v1/out/check/build/run.json +44 -0
- package/templates/example-remesh/outputs/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/outputs/v1/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/outputs/v1/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/outputs/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/outputs/v1/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/background.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/face.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/lantern.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts/torso.png +0 -0
- package/templates/example-remesh/outputs/v1/out/parts.json +188 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/background.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/face.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/outputs/v1/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/outputs/v1/out/rig/motion.json +137 -0
- package/templates/example-remesh/outputs/v1/out/rig/rig.json +536 -0
- package/templates/example-remesh/outputs/v1/out/rig/run.json +52 -0
- package/templates/example-remesh/outputs/v2/idle/frames.json +29 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/contact.png +0 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0000.png +0 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0001.png +0 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0002.png +0 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0003.png +0 -0
- package/templates/example-remesh/outputs/v2/idle/idle@1fps/f0004.png +0 -0
- package/templates/example-remesh/outputs/v2/out/check/build/run.json +44 -0
- package/templates/example-remesh/outputs/v2/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/outputs/v2/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/outputs/v2/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/outputs/v2/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/outputs/v2/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/background.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/face.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/lantern.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts/torso.png +0 -0
- package/templates/example-remesh/outputs/v2/out/parts.json +188 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/background.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/face.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/outputs/v2/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/outputs/v2/out/rig/motion.json +137 -0
- package/templates/example-remesh/outputs/v2/out/rig/rig.json +536 -0
- package/templates/example-remesh/outputs/v2/out/rig/run.json +52 -0
- package/templates/example-remesh/outputs/v3/idle/frames.json +29 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/contact.png +0 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0000.png +0 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0001.png +0 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0002.png +0 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0003.png +0 -0
- package/templates/example-remesh/outputs/v3/idle/idle@1fps/f0004.png +0 -0
- package/templates/example-remesh/outputs/v3/out/check/build/run.json +44 -0
- package/templates/example-remesh/outputs/v3/out/check/build/skeleton.atlas +28 -0
- package/templates/example-remesh/outputs/v3/out/check/build/skeleton.json +674 -0
- package/templates/example-remesh/outputs/v3/out/check/build/skeleton.model.json +1072 -0
- package/templates/example-remesh/outputs/v3/out/check/build/skeleton.png +0 -0
- package/templates/example-remesh/outputs/v3/out/painting_in_rig.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/background.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/face.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/lantern.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts/torso.png +0 -0
- package/templates/example-remesh/outputs/v3/out/parts.json +188 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/background.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/eye_l.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/eye_r.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/face.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/lantern.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/images/torso.png +0 -0
- package/templates/example-remesh/outputs/v3/out/rig/mesh_report.json +15 -0
- package/templates/example-remesh/outputs/v3/out/rig/motion.json +137 -0
- package/templates/example-remesh/outputs/v3/out/rig/rig.json +536 -0
- package/templates/example-remesh/outputs/v3/out/rig/run.json +52 -0
- package/templates/example-remesh/project.json +279 -230
- package/templates/example-reopened/project.json +341 -289
- package/templates/example-split/captions.json +1 -1
- package/templates/project.json +10 -2
package/README.md
CHANGED
|
@@ -117,11 +117,11 @@ selects either a rig or a post version.
|
|
|
117
117
|
`--by` sign-off/review and `interview-answer --pick` are low-level interfaces for
|
|
118
118
|
people operating the CLI themselves and synthetic fixtures, not an agent route
|
|
119
119
|
for human acts. Agents must not type an owner's answer or signature, or request
|
|
120
|
-
one in chat in place of Review.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
one in chat in place of Review. After an accepted post is bounced, host
|
|
121
|
+
`job open --plan` for its single direction-review reopen, list the act with
|
|
122
|
+
`job acts --json`, then ingest `reopen direction-review --from-review <actId>`
|
|
123
|
+
and `job close`. The exported act supplies the reviewer, timestamp and unchanged
|
|
124
|
+
words. Other stages retain the direct human `--by`/`--verbatim-file` reopen route. See [the live Review flow](docs/LIVE-REVIEW.md)
|
|
125
125
|
and [the record contract](docs/PROJECT.md#recording-a-sign-off).
|
|
126
126
|
|
|
127
127
|
## The clock
|
|
@@ -163,6 +163,22 @@ it fails, naming the constant, when a `*_SINCE` date is still in the future.
|
|
|
163
163
|
are synthetic fixture records, not a person's approval
|
|
164
164
|
([why](templates/example-draft/README.md)).
|
|
165
165
|
|
|
166
|
+
## Verify the installed examples
|
|
167
|
+
|
|
168
|
+
From a consumer project with `@rig-c/create` installed, run:
|
|
169
|
+
|
|
170
|
+
```sh
|
|
171
|
+
bun node_modules/@rig-c/create/scripts/verify-example-seals.ts
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
The shipped, dependency-free script verifies every `files[]` entry and
|
|
175
|
+
`project_sha256` in the six example-chain checkpoint manifests (currently
|
|
176
|
+
319 checks). It names missing files and hash mismatches and exits nonzero.
|
|
177
|
+
It reads installed bytes only; it does not regenerate examples or run producers.
|
|
178
|
+
The CLI creates projects from empty templates; it does not copy worked examples.
|
|
179
|
+
|
|
180
|
+
See [release candidate verification](https://github.com/rig-c/create/blob/main/RELEASING.md#verify-the-release-candidate).
|
|
181
|
+
|
|
166
182
|
## Licence
|
|
167
183
|
|
|
168
184
|
[MIT](LICENSE).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Agent reference
|
|
2
|
+
|
|
3
|
+
## Before you ask, plan or show
|
|
4
|
+
|
|
5
|
+
- **Projection.** Ask and record it per [CHECKS.md § Projection and ground](https://github.com/rig-c/create/blob/main/docs/CHECKS.md#projection-and-ground).
|
|
6
|
+
- **Head turn is a rig decision.** Ask `turn` at rigging-interview: fixed view
|
|
7
|
+
or head turn with depth. Record the chosen route and reason in the `turn`
|
|
8
|
+
plan step text. Default to per-part depth: parts 2.37.0's `docs/DEPTH.md`
|
|
9
|
+
describes it as better by eye. Run `depth-prepare`, the supplied model,
|
|
10
|
+
`depth-apply`, then `rig`. Retain the prepare manifest with
|
|
11
|
+
`rig-version --depth-manifest`; registration binds it, `depth-report.json`
|
|
12
|
+
and rig's `depth_sheets.json` by SHA-256.
|
|
13
|
+
The layer alternative requires sheets already retained in the accepted
|
|
14
|
+
assembled parts, bound alongside the existing `config.depth` images:
|
|
15
|
+
`assemble` consumes `config.depth`, so declaring it after acceptance cannot
|
|
16
|
+
add sheets. Do not reassemble accepted parts here. Existing sheets need no
|
|
17
|
+
model manifest.
|
|
18
|
+
- **Camera options.** Post decides fixed framing or camera-box moves. Timed
|
|
19
|
+
head-turn dials, plate parallax and take-wide gaze remain unavailable in direction.
|
|
20
|
+
- **Seamless loop on a rig with physics.** A looping take that starts at
|
|
21
|
+
source 0 begins with springs at rest and ends with them moving, so hair and
|
|
22
|
+
ribbons jump at the seam. Map the take onto a source interval that starts
|
|
23
|
+
after whole periods of the clip; ten were enough on the measured rig. The
|
|
24
|
+
number depends on the rig's damping, so compare the first and last frames
|
|
25
|
+
before choosing it.
|
|
26
|
+
- **Upscale first** a painting smaller than the rig needs (SOURCE.md, step 2 below).
|
|
27
|
+
- **The crux is a bar.** Before rigging, name every risk band, count background
|
|
28
|
+
or doubled pixels over every frame and both physics/breath extremes, and
|
|
29
|
+
report the maximum and its frame. Cover every band crossing another bone.
|
|
30
|
+
- **Appearance needs a person**, not a step bar: [CHECKS.md § Appearance bar wording](https://github.com/rig-c/create/blob/main/docs/CHECKS.md#appearance-bar-wording).
|
|
31
|
+
- **Nothing unnamed.** Add no unnamed motion, chain or physics. Read references
|
|
32
|
+
for what they show; ask about anything more.
|
|
33
|
+
- **Re-run first, cut last**, never a polygon in code or config: the ladder in
|
|
34
|
+
SOURCE.md, step 2 below.
|
|
35
|
+
- **A full-screen scene is a CG build.** For `rig_type` `fullscreen.*`, each
|
|
36
|
+
rig version declares the gates in [CHECKS.md § CG gates](https://github.com/rig-c/create/blob/main/docs/CHECKS.md#cg-gates). Refusals are the art's to fix.
|
|
37
|
+
- **The bust is meshed** unless the `meshes` guide excludes it with a reason
|
|
38
|
+
([CHECKS.md § The bust at meshes](https://github.com/rig-c/create/blob/main/docs/CHECKS.md#the-bust-at-meshes)).
|
|
39
|
+
- **Overlaps.** A piece over a part with its own animation (glasses over
|
|
40
|
+
eyelids) holds none of that part's pixels, or the animation shows its copy.
|
|
41
|
+
- **Pairs.** Measure left/right symmetry against the painting before calling a
|
|
42
|
+
pair uneven ([CRAFT.md G8](https://github.com/rig-c/create/blob/main/docs/CRAFT.md#for-the-gates-not-the-interview)).
|
|
43
|
+
- **Look before the user does**, at native resolution and every crux boundary:
|
|
44
|
+
a whole-figure |composite − painting| map, each component by box/part and
|
|
45
|
+
status (in the painting / fixed / left, why). Use the true part stack; crop on
|
|
46
|
+
white and mid-grey to show light fringes. Check beyond reviewer-chosen boxes.
|
|
47
|
+
|
|
48
|
+
## What to read, and why
|
|
49
|
+
|
|
50
|
+
1. **Before the interview**: INTERVIEW.md; CRAFT.md (waypoint defaults);
|
|
51
|
+
parts AUTHORING §3, *`config.json`, field by field*;
|
|
52
|
+
[CHECKS.md](https://github.com/rig-c/create/blob/main/docs/CHECKS.md) before a sign-off.
|
|
53
|
+
2. **Before `seethrough` and `assemble`**: SOURCE.md, split/cut order:
|
|
54
|
+
[bad-split reruns](https://github.com/rig-c/create/blob/main/docs/SOURCE.md#re-run-first),
|
|
55
|
+
[allowed cuts](https://github.com/rig-c/create/blob/main/docs/SOURCE.md#where-a-cut-is-allowed);
|
|
56
|
+
parts AUTHORING *See-through head-run source reading*, *Source before
|
|
57
|
+
scissors* and *Limbs: cut at their joints*.
|
|
58
|
+
3. **Before rigging**: [CRAFT.md § For the gates](https://github.com/rig-c/create/blob/main/docs/CRAFT.md#for-the-gates-not-the-interview)
|
|
59
|
+
(G1–G9); core RIGGING and MOTION; parts AUTHORING §7, the bars `check` enforces.
|
|
60
|
+
4. **Before showing the user**: [LESSONS.md § The self-check](https://github.com/rig-c/create/blob/main/docs/LESSONS.md#the-self-check),
|
|
61
|
+
the [per-frame seam count](https://github.com/rig-c/create/blob/main/docs/LESSONS.md#count-the-seam-bar-over-every-frame),
|
|
62
|
+
[what to show first](https://github.com/rig-c/create/blob/main/docs/LESSONS.md#what-to-show-the-user-first).
|
package/docs/CHECKS.md
CHANGED
|
@@ -25,6 +25,7 @@ requires Bun 1.4 or later. See [Live review](LIVE-REVIEW.md).
|
|
|
25
25
|
| Code | Finding and remedy |
|
|
26
26
|
| --- | --- |
|
|
27
27
|
| `JOB_PUBLISH_PENDING` | A committed `project.json` result awaits publication. Restore its bound host and sources, then run `job reconcile` before another participating write or close. |
|
|
28
|
+
| `JOB_ROOT_REPLACED` | `project.json`: the managed Review state belongs to a replaced project directory, or its ownership/liveness cannot be established safely. Stop the original `job open` host in its terminal, then retry `job open` or `job reconcile`. With no pending publication or startup claim, both commands preserve the old state in a dated `.replaced-…` sibling only when its recorded PID is absent and its recorded loopback port refuses connections. Missing/unsafe metadata, an occupied port or uncertain liveness refuses without retiring state; restore the retained metadata or original directory before retrying. |
|
|
28
29
|
| `JOB_HOST_ATTACH_REFUSED` | Strict reuse-only attach to the bound live host was refused. The pending receipt names the host `reason` and `phase` (including `incarnation-missing` on `record` or `probe`). Reopen or restore the bound live host before reconciling. |
|
|
29
30
|
| `JOB_HOST_REUSE_MISMATCH` | The private binding's host tuple or `listenerIncarnation` (`jobId`, `origin`, `listenerIncarnation`, `root`, `stateDir`, `fingerprint`, `reviewer.id`, `reviewer.role`, `readerId`, `bindingId`, `partsEnumeratorId`, `partsEnumeratorVersion`, `apiSchema`, `actSchema`, `port`) differs. The pending receipt names the `field` and both `expected` and `actual` values. Restore the original host configuration before reconciling. |
|
|
30
31
|
| `JOB_PUBLICATION_STALE` | The pending version entry is missing or has a different entry hash. Restore that retained version and its files before reconciling. Later surrounding-record changes do not invalidate version publications. Exception: a record publication binds the whole project.json byte hash, so any record change while it is pending makes it stale; restore the bound record bytes before reconciling. The check preserves the receipt and names the HOLE. |
|
|
@@ -47,20 +48,20 @@ requires Bun 1.4 or later. See [Live review](LIVE-REVIEW.md).
|
|
|
47
48
|
| Code | Finding and remedy |
|
|
48
49
|
| --- | --- |
|
|
49
50
|
| `REVIEW_API_SCHEMA_UNSUPPORTED` | `project.json.review_acts` received an unsupported API schema. Restore a live job using job-api@2 and fetch again. |
|
|
50
|
-
| `REVIEW_ACT_SCHEMA_UNSUPPORTED` | `project.json.review_acts` received an unsupported act schema, explicitly including act@1. Request a
|
|
51
|
+
| `REVIEW_ACT_SCHEMA_UNSUPPORTED` | `project.json.review_acts` received an unsupported act schema, explicitly including act@1. Request a supported act from Review without migrating the old act; record reopen uses act@4. |
|
|
51
52
|
| `REVIEW_PARTS_ENUMERATOR_UNSUPPORTED` | The act's Parts enumerator is missing or outside `>=2.25.0 <4.0.0`. Publish through an accepted installed Parts enumerator and review again. |
|
|
52
|
-
| `REVIEW_ACT_INVALID` | The fetched/retained act, response identity, authority, date
|
|
53
|
-
| `REVIEW_ACT_KIND_MISMATCH` | The act is for another version or a kind outside the requested review-verdict, parts-verdict, interview-picks, checkpoint or
|
|
53
|
+
| `REVIEW_ACT_INVALID` | The fetched/retained act, response identity, authority, date, rig/post or parts value, or record reopen value is malformed. Restore the original act evidence or request a new act. |
|
|
54
|
+
| `REVIEW_ACT_KIND_MISMATCH` | The act is for another version or a kind outside the requested review-verdict, parts-verdict, interview-picks, checkpoint, signoff or reopen writer, or a signoff/reopen act names a stage other than the requested writer stage. Use the matching version, stage and supported writer. |
|
|
54
55
|
| `REVIEW_ACT_TARGET_MISMATCH` | `signoffs[].target.version`: a `rig-review` or `direction-review` signoff act is ingested with `signoff <stage> --from-review <actId>`, but its `source.selector` names no version of that stage's kind (`rig` for rig-review, `post` for direction-review), or `--version` names another version than the one the person approved. The signature's target is the version Review displayed, so drop `--version` or ask for the sign-off again in Review on the version to sign. Refusal preserves the project record. |
|
|
55
56
|
| `REVIEW_ACT_DRAFT_MISMATCH` | `signoffs[].draft_id`: a `parts-review` signoff act is ingested with `signoff parts-review --from-review <actId>`, and its `source.selector` is a non-draft selector or names another draft than `--draft`. Drop `--draft` so the signature takes the draft from the act's `{ kind: 'draft', id }` selector, or ask for `parts-review` again in Review on the draft to sign. Refusal preserves the project record. |
|
|
56
57
|
| `REVIEW_ACT_CHECKPOINT_MISMATCH` | `signoff <stage> --checkpoint <id> --from-review <actId>` fetched a checkpoint act whose `planStepId` is not `<id>`, or whose `checkpointId` differs from its `planStepId` (create publishes no checkpoint alias). Sign the checkpoint the act names, or ask Review for this one. Refusal preserves the project record. |
|
|
57
58
|
| `REVIEW_ACT_CHECKPOINT_FAILED` | The fetched checkpoint act's outcome is `fail`. A failed checkpoint is feedback, never a sign-off: nothing is written. Fix the step from the act's words and ask for the checkpoint again in the live Review job. |
|
|
58
|
-
| `REVIEW_ACT_SUBJECT_UNDECLARED` | `signoff <stage> --from-review <actId>` or `signoff <stage> --checkpoint <id> --from-review <actId>` fetched an act whose subject (`signoff` for its stage,
|
|
59
|
+
| `REVIEW_ACT_SUBJECT_UNDECLARED` | `signoff <stage> --from-review <actId>` or `signoff <stage> --checkpoint <id> --from-review <actId>` or `reopen <stage> --from-review <actId>` fetched an act whose subject (`signoff` for its stage, `checkpoint` for its checkpoint id, or `reopen` for its stage) is not among the subjects create declared for the act's publication, as kept in the private acknowledged receipt. A package publication declares only the record's own signable stage and its enabled checkpoints (LIVE-REVIEW.md). Ask for the sign-off in Review on a publication made while the record can sign it. A receipt written before declarations were retained, or none (a clone), skips this comparison. Refusal preserves the project record. |
|
|
59
60
|
| `REVIEW_FILE_ROUTE_REMOVED` | `project.json.review_acts` cannot ingest saved act files (exit 2). Use `review <version> --from-review <actId>` through the live Review job API. |
|
|
60
61
|
| `REVIEW_ACT_FETCH_REFUSED` | The live job refused or could not complete finalized-act fetch. The diagnostic retains the producer refusal code without exposing its private details. Restore the live job and its writer grant. |
|
|
61
62
|
| `REVIEW_ACT_SOURCE_STALE` | A current source binding or retained version/draft-entry identity differs from the displayed act, including a plan-bound signoff act (`plan-approved`, `rigging-interview`, `post-interview`) whose `source.plan` step ids and hashes, in order, differ from the current `plan.steps`. Restore the retained bytes or publish the current plan and request a new review or sign-off. Replays also refuse without changing the recorded verdict. |
|
|
62
63
|
| `REVIEW_ACT_REPLAY_CONFLICT` | A `(jobId, actId)` appears twice or its immutable value changed. Restore the original receipt and its single linked verdict. |
|
|
63
|
-
| `REVIEW_ACT_LEDGER_INVALID` | `review_acts[]` or one receipt's identity, hash, target, linked verdict, linked signoff (the one `signoffs[]` entry whose `source` names the act, with the act's stage, `by`, `at` and words, and for rig-review or direction-review a `target.version` equal to the act's `source.selector` version) or retained parts evidence is invalid. Restore the original receipt and
|
|
64
|
+
| `REVIEW_ACT_LEDGER_INVALID` | `review_acts[]` or one receipt's identity, hash, target, linked verdict, linked signoff (the one `signoffs[]` entry whose `source` names the act, with the act's stage, `by`, `at` and words, and for rig-review or direction-review a `target.version` equal to the act's `source.selector` version), linked reopen (including its original status snapshot and exact exported reviewer, date and words), or retained parts evidence is invalid. Restore the original receipt and recorded act together. |
|
|
64
65
|
| `REVIEW_ACT_VERSION_UNVERIFIED` | WARN on ingest when the acknowledged publication receipt is unavailable. The version-entry comparison was skipped, and all explicit source bindings were checked. Preserve private acknowledged receipts for future ingests. |
|
|
65
66
|
| `PARTS_REVIEW_OPTION_INVALID` | `project.json.review_acts` received missing, duplicate or competing parts-review options. Use `parts-review --from-review <actId>` and submit human values through Review. |
|
|
66
67
|
| `PARTS_REVIEW_EVIDENCE_CONFLICT` | The deterministic semantic evidence path contains different bytes or unsafe filesystem entries. Preserve that evidence and restore the original act before retrying. Refusal preserves the project record. |
|
|
@@ -645,7 +646,7 @@ This new record has no retroactive requirement on earlier project records.
|
|
|
645
646
|
| `REOPEN_STAGE_UNKNOWN` | a target is unknown, `paused` or `accepted` | choose a stage in the order that can be reopened |
|
|
646
647
|
| `REOPEN_NOT_PASSED` | the target is later than its own from_stage and historical signatures/versions dated by the reopen | reopen a previously reached stage |
|
|
647
648
|
| `REOPEN_MALFORMED` | reopens is not a list, an entry lacks its human signature, from_stage, valid date or status snapshot, source is not text, or the writer cannot identify a plan step | restore the named record to the PROJECT.md reopen shape |
|
|
648
|
-
| `REOPEN_OPTION_INVALID` | missing/repeated option values
|
|
649
|
+
| `REOPEN_OPTION_INVALID` | missing/repeated option values, invalid argument count, or --from-review mixed with human flags (exit 2) | supply a stage and either --from-review or --by with optional source and words file, plus one optional folder |
|
|
649
650
|
| `SIGNOFF_NOT_HUMAN` | a reopen is signed by agent, case-insensitively | obtain a person's signature |
|
|
650
651
|
|
|
651
652
|
The existing `UNKNOWN_OPTION`, `VERBATIM_*`, `PROJECT_JSON_*` and
|
|
@@ -738,7 +739,7 @@ are unchanged. No prepared files are silently registered or repaired.
|
|
|
738
739
|
| `DERIVED_FILE_CHANGED` | either file's bytes differ from its recorded sha256 | restore the recorded bytes, or record the new preparation |
|
|
739
740
|
| `AGENT_BOUNCE_MALFORMED` | a history entry dated on or after `AGENT_BOUNCE_SINCE` has a `bounce` other than `{ cause: "agent", failed, bar, replacement }` with non-empty text | write what failed, the bar, and its replacement |
|
|
740
741
|
|
|
741
|
-
Contract dates (`AGENT_BOUNCE_SINCE`, `ASK_COVERAGE_SINCE`, `DIFF_MAP_SINCE`, `DIFF_MAP_AGENT_SINCE`, `APPLIED_REVIEW_SINCE`, `PROJECTION_ASKS_SINCE`, `SETUP_PAINTING_SINCE`, `FIGURE_MASK_SINCE`, `FIGURE_MASK_INPUTS_SINCE`, `CHOICE_ANSWERS_SINCE`, `BUILD_IDENTITY_SINCE`, `PART_FILE_IDENTITY_SINCE`, `CONFIG_INPUTS_SINCE`, `DESCRIBED_DIRECTION_SINCE`, `SIGNOFF_TARGET_SINCE`, `SIGNOFF_PAIR_SINCE`, `SIGNOFF_ANSWERS_SINCE`, `STAGE_PROGRESS_SINCE`, `INPUT_WRITER_SINCE`, `DIRECTION_SCENE_SINCE`, `OVERRIDDEN_ANSWERS_SINCE`, `RUN_RECORD_SINCE`, `PROGRESS_HISTORY_SINCE`, `SCENE_CONTEXT_SINCE`, `PARTS_CHECK_SINCE`, `PLATE_RECEIPT_SINCE`, `REVIEW_READ_SINCE`, `PARTS_VERDICT_DRAFT_SINCE`, `PARTS_VERDICT_LATEST_SINCE`, `PARTS_VERDICT_RECEIPT_SINCE`, `FIX_LEDGER_SINCE` and `DRAFT_CONFIG_INPUTS_SINCE`) are the day the change lands, at 00:00Z, so they are never in the future; a record made earlier that day is checked against pilot projects before the change lands.
|
|
742
|
+
Contract dates (`HEAD_TURN_SINCE`, `AGENT_BOUNCE_SINCE`, `ASK_COVERAGE_SINCE`, `DIFF_MAP_SINCE`, `DIFF_MAP_AGENT_SINCE`, `APPLIED_REVIEW_SINCE`, `PROJECTION_ASKS_SINCE`, `SETUP_PAINTING_SINCE`, `FIGURE_MASK_SINCE`, `FIGURE_MASK_INPUTS_SINCE`, `CHOICE_ANSWERS_SINCE`, `BUILD_IDENTITY_SINCE`, `PART_FILE_IDENTITY_SINCE`, `CONFIG_INPUTS_SINCE`, `DESCRIBED_DIRECTION_SINCE`, `SIGNOFF_TARGET_SINCE`, `SIGNOFF_PAIR_SINCE`, `SIGNOFF_ANSWERS_SINCE`, `STAGE_PROGRESS_SINCE`, `INPUT_WRITER_SINCE`, `DIRECTION_SCENE_SINCE`, `OVERRIDDEN_ANSWERS_SINCE`, `RUN_RECORD_SINCE`, `PROGRESS_HISTORY_SINCE`, `SCENE_CONTEXT_SINCE`, `PARTS_CHECK_SINCE`, `PLATE_RECEIPT_SINCE`, `REVIEW_READ_SINCE`, `PARTS_VERDICT_DRAFT_SINCE`, `PARTS_VERDICT_LATEST_SINCE`, `PARTS_VERDICT_RECEIPT_SINCE`, `FIX_LEDGER_SINCE` and `DRAFT_CONFIG_INPUTS_SINCE`) are the day the change lands, at 00:00Z, so they are never in the future; a record made earlier that day is checked against pilot projects before the change lands.
|
|
742
743
|
|
|
743
744
|
Exception for #117 (2026-11-06): `original_n` has no `*_SINCE` boundary because repo HQ counted zero consumer records with `pre_interview: true`, only the synthetic fixture being updated, and historical build dates cannot date a migration.
|
|
744
745
|
|
|
@@ -1353,6 +1354,15 @@ cited by the latest live post. With no live post, no scene is current. Every
|
|
|
1353
1354
|
scene still requires historical human acceptance, its matching package identity
|
|
1354
1355
|
and all schema, raw-byte seal, model, animation, frame, plate and citation checks.
|
|
1355
1356
|
|
|
1357
|
+
`scene write --animation <name>` selects an exact name from the bound model's
|
|
1358
|
+
catalog, defaulting to `idle`. Idle still copies `registration.idle` exactly.
|
|
1359
|
+
New non-idle scenes omit optional `animation.frames`: there is no named-animation
|
|
1360
|
+
registration to copy. The reader preserves the previously accepted non-idle
|
|
1361
|
+
`frames === registration.idle` binding as legacy metadata, verifying its bytes
|
|
1362
|
+
without claiming it proves frames of the selected non-idle clip. Other provided
|
|
1363
|
+
non-idle frame bindings were already refused and remain refused. No historical
|
|
1364
|
+
acceptance is narrowed, so this change introduces no SINCE date or pilot migration.
|
|
1365
|
+
|
|
1356
1366
|
| Code | Refuses when | Remedy |
|
|
1357
1367
|
| --- | --- | --- |
|
|
1358
1368
|
| `SCENE_MALFORMED` | unknown keys at any level, wrong types, schema, n, paths or registration frames | restore the closed scene@1 record and run scene write |
|
|
@@ -1360,7 +1370,8 @@ and all schema, raw-byte seal, model, animation, frame, plate and citation check
|
|
|
1360
1370
|
| `SCENE_RIG_STALE` | rig lacks the cited historical human acceptance, or the current rig is not the latest live accepted rig | accept the current rig and run scene write |
|
|
1361
1371
|
| `SCENE_ACCEPTANCE_STALE` | historical acceptance/package identity differs, or a current signoff has lapsed | restore the accepted package and sign rig-review again |
|
|
1362
1372
|
| `SCENE_MODEL_MISMATCH` | model path or raw-byte hash differs from the accepted package inventory | retain the accepted compiled model and run scene write |
|
|
1363
|
-
| `SCENE_ANIMATION_MISSING` | animation is absent from the model |
|
|
1373
|
+
| `SCENE_ANIMATION_MISSING` | animation is absent from the bound model catalog | pass --animation with a name from the accepted model and run scene write (default: idle) |
|
|
1374
|
+
| `SCENE_ANIMATION_FRAMES_UNBOUND` | non-idle frames are present but differ from registration.idle, which the previous reader also refused | omit optional frames and run scene write --animation <name> |
|
|
1364
1375
|
| `SCENE_STAGE_MISSING` | compiled model stage is null or absent | compile a model declaring a stage before scene write |
|
|
1365
1376
|
| `SCENE_STAGE_MISMATCH` | frame.stage differs from model.stage | copy the exact compiled stage through scene write |
|
|
1366
1377
|
| `SCENE_PLATE_CONFLICT` | background is absent, roles duplicate, or roles share a path or hash | designate one background and at most one distinct foreground |
|
|
@@ -1462,7 +1473,7 @@ the record unchanged.
|
|
|
1462
1473
|
| Code | Finding and remedy |
|
|
1463
1474
|
| --- | --- |
|
|
1464
1475
|
| `JOB_RECORD_SUBJECT_INVALID` | `project.json` does not bind the explicitly requested question, option set and effective stage, including a question whose pick is already recorded and so has no pending set, or a subject id cannot be represented by the record publication contract. Publish the exact current pending subject with its original representable id. |
|
|
1465
|
-
| `JOB_DIRECTION_VERDICT_REQUIRED` | `job open --plan` at `direction-review` finds no accepted live direction verdict on the current live post in `project.json.versions`. Open the post with `job open --rig <n>` and ingest `review <n> --from-review <actId>` before requesting direction sign-off. This is a publication precondition, not a new record-check rule. |
|
|
1476
|
+
| `JOB_DIRECTION_VERDICT_REQUIRED` | `job open --plan` at `direction-review` finds no accepted live direction verdict on the current live post in `project.json.versions`. Open the post with `job open --rig <n>` and ingest `review <n> --from-review <actId>` before requesting direction sign-off. An accepted-then-bounced post instead offers exactly one reopen subject, for direction-review; it does not offer direction sign-off. Ordinary record-plan pages declare no reopen subjects. This is a publication precondition, not a new record-check rule. |
|
|
1466
1477
|
| `INTERVIEW_SIGNOFF_NOT_CLEAN` | An interview record-plan publication or first record-mode sign-off ingest finds a refusal or delivery hole from the full `interview --check` function on `project.json`. Resolve that check, republish with `job open --plan` and ask for the interview signature again. This is a new-route precondition; existing records and CLI `--by` signatures keep their checks. A refused ingest leaves the record byte-identical. |
|
|
1467
1478
|
| `INTERVIEW_SIGNOFF_PLAN_REQUIRED` | An interview record-plan publication or first record-mode sign-off ingest has no displayed `project.json.plan.steps`. Draft non-empty plan steps through the writers and publish with `job open --plan` before asking for the interview signature. A refused operation leaves the record byte-identical. |
|
|
1468
1479
|
| `REVIEW_ACT_RECORD_TARGET_INVALID` | A direction record publication or first sign-off ingest cannot resolve one current/latest live post with an accepted live direction verdict from the hash-bound `project.json` bytes (including a duplicated current version number). Review that current post and publish its corrected record through the writers. Historical accepted posts do not create ambiguity. A refused ingest leaves the record byte-identical. |
|
|
@@ -1681,3 +1692,28 @@ These CI-only codes name `.github/workflows/release.yml` or its tagged
|
|
|
1681
1692
|
| `RELEASE_ALREADY_PUBLISHED` | `release.yml`: npm already serves the version; verify that publication rather than republishing it. |
|
|
1682
1693
|
| `RELEASE_REGISTRY_UNCONFIRMED` | `release.yml`: confirmation of both names timed out; inspect npm before recovery because publication may already have succeeded. |
|
|
1683
1694
|
| `ALIAS_SAME_CONTENT` | `scripts/alias_tarball.ts compare`: an alias differs beyond the `package/package.json` name line; rebuild it from the reviewed scoped tarball and resolve every named file difference before publication. |
|
|
1695
|
+
|
|
1696
|
+
## Head turn before rigging
|
|
1697
|
+
|
|
1698
|
+
`HEAD_TURN_SINCE = 2026-11-14T00:00:00Z` dates new rig depth obligations
|
|
1699
|
+
by the rig version's build date. Earlier records WARN with the same code;
|
|
1700
|
+
fixed-view records retain their historical placement and need no depth outputs.
|
|
1701
|
+
New interviews put `turn` and `depth` on rigging waypoint `turn`.
|
|
1702
|
+
|
|
1703
|
+
| Code | Meaning and remedy |
|
|
1704
|
+
| --- | --- |
|
|
1705
|
+
| `RIG_DEPTH_PLAN_MISSING` | `plan.steps[turn]` is absent or ordered after the rig steps for an approved depth turn. Draft a rig-phase depth step resting on `turn` before the rig steps and approve it at rigging-interview. Answers before `HEAD_TURN_SINCE` WARN. |
|
|
1706
|
+
| `RIG_DEPTH_BINDING_MISSING` | A depth-driven rig lacks its retained producer manifests. Register a new rig version with rig's `depth_sheets.json`; for per-part depth include `--depth-manifest` and parts' `depth-report.json`. Before `HEAD_TURN_SINCE` this is a WARN. |
|
|
1707
|
+
| `RIG_DEPTH_BINDING_INVALID` | `versions[].registration.depth` has changed bytes, the wrong producer spec, or disagrees with its retained inventory/report manifest hash. Restore the exact retained producer files or register a new rig version. |
|
|
1708
|
+
|
|
1709
|
+
For a per-part depth registration, `registration.depth.source_parts` retains
|
|
1710
|
+
the accepted pre-apply manifest. `REVIEW_PACKAGE_PARTS_MISMATCH` permits its
|
|
1711
|
+
depth-only enrichment only when that manifest matches the accepted hash, the
|
|
1712
|
+
new package matches the registered output hash, all other JSON declarations
|
|
1713
|
+
are identical, and the producer depth hash chain verifies. Art-file identity
|
|
1714
|
+
checks remain in force; no source measurement is recomputed.
|
|
1715
|
+
|
|
1716
|
+
`interview.turn_question: "rig-create/turn-question@1"` explicitly adopts the
|
|
1717
|
+
new placement. Re-signing or adopting the split order on a later date alone
|
|
1718
|
+
does not retrofit it into historical interviews. Missing `turn` on an adopted
|
|
1719
|
+
interview is the existing `WAYPOINT_MISSING` refusal.
|
package/docs/INTERVIEW.md
CHANGED
|
@@ -223,7 +223,7 @@ seeing a build. Read from `@rig-c/parts` 2.4.0:
|
|
|
223
223
|
| `meshes`, `regions` | waypoint `meshes` | what deforms and what rides rigid |
|
|
224
224
|
| `constraints`, `stops`, `cloth` | waypoint `constraints` | what moves on physics and how far |
|
|
225
225
|
| `motion` | waypoint `motion` | what moves, how far, how fast |
|
|
226
|
-
| `turn`, `depth` |
|
|
226
|
+
| `turn`, `depth` | rigging waypoint `turn` | fixed view or head turn with depth; before rig, after approved parts |
|
|
227
227
|
| `key`, `generation`, `proposed_rig_scale`, `requirements`, `motion_seams`, `note` | not a waypoint | a name, a record of a run, a value the tool proposes, a path to a checks file, an observation, an annotation — none is a direction call. `requirements` is where translated guide sentences will land, not where they are asked. |
|
|
228
228
|
|
|
229
229
|
The agent writes the checks file named by the config's `requirements` path.
|
|
@@ -345,12 +345,24 @@ names ([PROJECT.md § The hand-off to post-production](PROJECT.md#the-hand-off-t
|
|
|
345
345
|
| `post_timing` | — | How long, does it loop, and where are the beats? | clip length, loop point, timing of motions against each other | *"Ten seconds, looping; the gust comes once, in the middle."* |
|
|
346
346
|
| `post_composition` | — | What is around the figure — background, framing, other figures, light? | framing, background plate, what else is on screen | *"Frame from the knees up; keep the lighthouse in shot."* |
|
|
347
347
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
348
|
+
Ask `turn` at rigging-interview, against the accepted parts: “Should this rig
|
|
349
|
+
keep the painted view, or turn its head with depth?” Offer **Fixed view**,
|
|
350
|
+
**Head turn**, **Other** and **Let the agent decide**. Fixed view adds no depth
|
|
351
|
+
step. Head turn records only `{ "mode": "depth" }`; the agent records the chosen
|
|
352
|
+
route and reason in the `turn` plan step text. Draft that step in phase `rig`,
|
|
353
|
+
resting on `turn`, before the steps that run rig. Its bar reads the retained
|
|
354
|
+
producer reports, and rigging-interview approval covers it. The default
|
|
355
|
+
per-part sequence runs `depth-prepare`, a separately supplied model (face
|
|
356
|
+
normals, scalar depth for the other parts), then `depth-apply`; the ordinary
|
|
357
|
+
`rig` writes the consumed `depth_sheets.json`. Read parts' `docs/DEPTH.md` for
|
|
358
|
+
the producer contract. `rig-version --depth-manifest <file>` retains the
|
|
359
|
+
prepare manifest with the applied report and rig sheet manifest; all are bound
|
|
360
|
+
by bytes and spec, without redoing producer measurements.
|
|
361
|
+
|
|
362
|
+
Post `camera_depth` asks only about fixed framing or a camera-box path such as
|
|
363
|
+
a push-in. Historical question text and citations keep their original bytes.
|
|
364
|
+
Timed head-turn dials, relative plate parallax and take-wide gaze remain
|
|
365
|
+
unavailable in direction; do not promise them in plan bars.
|
|
354
366
|
|
|
355
367
|
## Bars have reading commands
|
|
356
368
|
|
package/docs/PROJECT.md
CHANGED
|
@@ -2515,6 +2515,16 @@ the project's next moves and whose they are from `project.json`:
|
|
|
2515
2515
|
- `producer`: a command of a pinned package (`rig-parts`, `rigc`).
|
|
2516
2516
|
- `human`: a person's act collected through the review tool (`review_act`),
|
|
2517
2517
|
with `command: null` and never a `--by user` writer.
|
|
2518
|
+
- **Host and ingest human acts.** For a recorded Review subject, the human
|
|
2519
|
+
move is surrounded by `job open` with its question, plan, draft or rig
|
|
2520
|
+
selector, `job acts --json`, the writer with `--from-review '<actId>'`, and
|
|
2521
|
+
`job close`. `job open` hosts and blocks until `job close`; keep it running
|
|
2522
|
+
in a separate terminal. Fill the reviewer and exported act placeholders,
|
|
2523
|
+
and follow the matching `job acts` preconditions before ingestion, including
|
|
2524
|
+
its structure snapshot guidance for parts-review sign-off. Moves marked
|
|
2525
|
+
`unanswered_by_record` retain their missing-field guidance.
|
|
2526
|
+
- **Scene writing does not plan work.** `scene write` adds no plan step.
|
|
2527
|
+
Author the post plan steps through `plan add` before post-interview sign-off.
|
|
2518
2528
|
- **Refusals come first.** When `check` reports refusals (or publication holes),
|
|
2519
2529
|
`next` lists each in `refusals[]` with its `CHECKS.md` remedy (`fix`) before
|
|
2520
2530
|
any forward move. A project with a blocking refusal has `moves: []` and
|
package/package.json
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rig-c/create",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Create a rig project: its folder, decision record, repository and pinned rig-c packages",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"files": [
|
|
8
8
|
"src/",
|
|
9
|
+
"scripts/verify-example-seals.ts",
|
|
10
|
+
"scripts/npm-json.ts",
|
|
9
11
|
"templates/",
|
|
10
12
|
"README.md",
|
|
11
13
|
"LICENSE",
|
|
14
|
+
"docs/AGENT-REFERENCE.md",
|
|
12
15
|
"docs/PROJECT.md",
|
|
13
16
|
"docs/INTERVIEW.md",
|
|
14
17
|
"docs/CHECKS.md",
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** npm 11 and 12 have different pack and view JSON envelopes. */
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
|
|
4
|
+
export interface NpmPack {
|
|
5
|
+
filename: string;
|
|
6
|
+
entryCount: number;
|
|
7
|
+
size: number;
|
|
8
|
+
unpackedSize: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function object(value: unknown): value is Record<string, unknown> {
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function shape(value: unknown): string {
|
|
16
|
+
if (Array.isArray(value)) return `array(length=${value.length}) ${JSON.stringify(value).slice(0, 200)}`;
|
|
17
|
+
if (object(value)) return `object(keys=${JSON.stringify(Object.keys(value))})`;
|
|
18
|
+
return `${value === null ? 'null' : typeof value} ${JSON.stringify(value)}`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function readNpmJson(text: string, command: string, kind: 'pack', expected: string): NpmPack;
|
|
22
|
+
export function readNpmJson(text: string, command: string, kind: 'version', expected: string): string;
|
|
23
|
+
export function readNpmJson(text: string, command: string, kind: 'e404'): string;
|
|
24
|
+
export function readNpmJson(text: string, command: string, kind: 'pack' | 'version' | 'e404', expected?: string): NpmPack | string {
|
|
25
|
+
const fail = (field: string, want: string, actual: unknown): never => {
|
|
26
|
+
throw Error(`${command}: ${field}: expected ${want}; actual ${shape(actual)}`);
|
|
27
|
+
};
|
|
28
|
+
const envelope = kind === 'pack' ? `one-element array or object keyed only by ${JSON.stringify(expected)}`
|
|
29
|
+
: kind === 'version' ? 'version string or one-element array of that string' : 'object with error.code "E404"';
|
|
30
|
+
let value: unknown;
|
|
31
|
+
try { value = JSON.parse(text); }
|
|
32
|
+
catch { throw Error(`${command}: stdout: expected valid JSON (${envelope}); actual invalid JSON ${JSON.stringify(text.slice(0, 200))}`); }
|
|
33
|
+
|
|
34
|
+
if (kind === 'pack') {
|
|
35
|
+
let entry: unknown;
|
|
36
|
+
if (Array.isArray(value) && value.length === 1) entry = value[0];
|
|
37
|
+
else if (object(value) && Object.keys(value).length === 1 && Object.hasOwn(value, expected!)) entry = value[expected!];
|
|
38
|
+
else return fail('stdout', envelope, value);
|
|
39
|
+
if (!object(entry)) return fail('pack entry', 'object', entry);
|
|
40
|
+
if (entry.name !== expected) return fail('name', JSON.stringify(expected), entry.name);
|
|
41
|
+
if (typeof entry.filename !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9._-]*\.tgz$/.test(entry.filename)) {
|
|
42
|
+
return fail('filename', 'a .tgz basename without directory components', entry.filename);
|
|
43
|
+
}
|
|
44
|
+
for (const field of ['entryCount', 'size', 'unpackedSize'] as const) {
|
|
45
|
+
if (typeof entry[field] !== 'number' || !Number.isSafeInteger(entry[field]) || entry[field] < 0) {
|
|
46
|
+
return fail(field, 'a nonnegative safe integer', entry[field]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { filename: entry.filename, entryCount: entry.entryCount as number, size: entry.size as number, unpackedSize: entry.unpackedSize as number };
|
|
50
|
+
}
|
|
51
|
+
if (kind === 'version') {
|
|
52
|
+
const version = Array.isArray(value) && value.length === 1 ? value[0] : value;
|
|
53
|
+
if (typeof version !== 'string' || version !== expected) return fail('version', `${envelope} equal to ${JSON.stringify(expected)}`, value);
|
|
54
|
+
return version;
|
|
55
|
+
}
|
|
56
|
+
if (!object(value) || !object(value.error) || value.error.code !== 'E404') return fail('error.code', '"E404" in an error object', object(value) && object(value.error) ? value.error.code : value);
|
|
57
|
+
return 'E404';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (import.meta.main) {
|
|
61
|
+
try {
|
|
62
|
+
const [kind, file, spec, version, ...extra] = process.argv.slice(2);
|
|
63
|
+
if (!file || !spec || extra.length || (kind !== 'version' && kind !== 'e404') || (kind === 'version' ? !version : version !== undefined)) {
|
|
64
|
+
throw Error('usage: bun scripts/npm-json.ts version <json-file> <package@version> <version> | e404 <json-file> <package@version>');
|
|
65
|
+
}
|
|
66
|
+
const text = readFileSync(file, 'utf8');
|
|
67
|
+
const command = `npm view ${spec} version --json`;
|
|
68
|
+
if (kind === 'version') readNpmJson(text, command, kind, version!);
|
|
69
|
+
else readNpmJson(text, command, kind);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/** Verify installed example seals, or pack a temporary copy without nested ignore losses. */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
6
|
+
import { spawnSync } from 'node:child_process';
|
|
7
|
+
import { readNpmJson } from './npm-json.ts';
|
|
8
|
+
|
|
9
|
+
const packageRoot = resolve(import.meta.dir, '..');
|
|
10
|
+
const hash = (path: string): string => createHash('sha256').update(readFileSync(path)).digest('hex');
|
|
11
|
+
|
|
12
|
+
function within(root: string, path: string): string {
|
|
13
|
+
const target = resolve(root, path);
|
|
14
|
+
const rel = relative(root, target);
|
|
15
|
+
if (!rel || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) throw Error(`invalid example path: ${path}`);
|
|
16
|
+
return target;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function files(root: string): string[] {
|
|
20
|
+
return readdirSync(root, { withFileTypes: true }).flatMap(entry => {
|
|
21
|
+
const path = join(root, entry.name);
|
|
22
|
+
if (entry.isDirectory()) return files(path);
|
|
23
|
+
if (!entry.isFile()) throw Error(`expected a regular example file: ${path}`);
|
|
24
|
+
return [path];
|
|
25
|
+
}).sort();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function verifyExampleSeals(root: string): { ok: number; failures: string[]; sealedFiles: string[] } {
|
|
29
|
+
const chainRoot = join(root, 'templates/example-chain');
|
|
30
|
+
const index = JSON.parse(readFileSync(join(chainRoot, 'chain.json'), 'utf8')) as { checkpoints: { name: string }[] };
|
|
31
|
+
if (!Array.isArray(index.checkpoints) || index.checkpoints.length === 0) throw Error('example-chain/chain.json: no checkpoints to verify');
|
|
32
|
+
let ok = 0;
|
|
33
|
+
const failures: string[] = [];
|
|
34
|
+
const sealedFiles: string[] = [];
|
|
35
|
+
for (const { name } of index.checkpoints) {
|
|
36
|
+
const declaration = within(join(chainRoot, 'checkpoints'), `${name}.json`);
|
|
37
|
+
if (!existsSync(declaration)) { failures.push(`missing checkpoint declaration: ${relative(root, declaration)}`); continue; }
|
|
38
|
+
const seal = JSON.parse(readFileSync(declaration, 'utf8')) as {
|
|
39
|
+
schema: string; name: string; files: { path: string; sha256: string }[]; project_sha256: string;
|
|
40
|
+
};
|
|
41
|
+
if (seal.schema !== 'rig-create/example-checkpoint@1' || seal.name !== name || !Array.isArray(seal.files) || seal.files.length === 0) {
|
|
42
|
+
throw Error(`${relative(root, declaration)}: invalid checkpoint seal`);
|
|
43
|
+
}
|
|
44
|
+
const checkpoint = within(join(chainRoot, 'checkpoints'), name);
|
|
45
|
+
for (const entry of [...seal.files, { path: 'project.json', sha256: seal.project_sha256 }]) {
|
|
46
|
+
const path = within(checkpoint, entry.path);
|
|
47
|
+
const label = relative(root, path);
|
|
48
|
+
sealedFiles.push(path);
|
|
49
|
+
if (!existsSync(path)) failures.push(`missing sealed file: ${label}`);
|
|
50
|
+
else if (!/^[a-f0-9]{64}$/.test(entry.sha256) || hash(path) !== entry.sha256) failures.push(`sha256 mismatch: ${label}`);
|
|
51
|
+
else ok++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { ok, failures, sealedFiles };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function report(root: string, log: (line: string) => void): ReturnType<typeof verifyExampleSeals> {
|
|
58
|
+
const result = verifyExampleSeals(root);
|
|
59
|
+
for (const failure of result.failures) log(failure);
|
|
60
|
+
log(`checkpoint seals: ${result.ok} ok / ${result.failures.length} fail (files[] plus project_sha256)`);
|
|
61
|
+
if (result.failures.length) throw Error('example seals failed; repack the unmodified source with scripts/verify-example-seals.ts --pack <output-dir>');
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function run(command: string, args: string[], cwd?: string): string {
|
|
66
|
+
const result = spawnSync(command, args, { cwd, encoding: 'utf8', timeout: 60_000, killSignal: 'SIGKILL', maxBuffer: 16 * 1024 * 1024 });
|
|
67
|
+
if (result.error || result.status !== 0) throw Error(`${command} ${args.join(' ')} failed: ${result.error?.message ?? result.status}\n${result.stderr}`);
|
|
68
|
+
return result.stdout;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Only the disposable copy gets .npmignore; every original example byte is retained. */
|
|
72
|
+
function stage(root: string, destination: string): void {
|
|
73
|
+
const manifest = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as { files: string[] };
|
|
74
|
+
mkdirSync(destination);
|
|
75
|
+
cpSync(join(root, 'package.json'), join(destination, 'package.json'));
|
|
76
|
+
for (const path of manifest.files) {
|
|
77
|
+
const target = within(destination, path);
|
|
78
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
79
|
+
cpSync(within(root, path), target, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
for (const path of files(join(destination, 'templates')).filter(path => path.endsWith(`${sep}.gitignore`))) {
|
|
82
|
+
const npmignore = join(dirname(path), '.npmignore');
|
|
83
|
+
if (existsSync(npmignore)) throw Error(`pack staging would overwrite ${npmignore}`);
|
|
84
|
+
writeFileSync(npmignore, '!**\n');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function verifyTarball(tarball: string, sourceRoot?: string): void {
|
|
89
|
+
const scratch = mkdtempSync(join(tmpdir(), 'create-example-seals-'));
|
|
90
|
+
try {
|
|
91
|
+
run('tar', ['-xzf', resolve(tarball), '-C', scratch]);
|
|
92
|
+
const root = join(scratch, 'package');
|
|
93
|
+
const verified = report(root, console.error);
|
|
94
|
+
if (sourceRoot) {
|
|
95
|
+
const source = join(sourceRoot, 'templates');
|
|
96
|
+
const originals = files(source);
|
|
97
|
+
for (const path of originals) {
|
|
98
|
+
const target = join(root, 'templates', relative(source, path));
|
|
99
|
+
if (!existsSync(target) || hash(target) !== hash(path)) throw Error(`packed template missing or changed: templates/${relative(source, path)}`);
|
|
100
|
+
}
|
|
101
|
+
console.error(`template byte parity: ${originals.length} files match source`);
|
|
102
|
+
}
|
|
103
|
+
// Negative control operates only on the extracted tree, after the positive gate.
|
|
104
|
+
const deleted = verified.sealedFiles.find(path => path.endsWith(`${sep}.gitignore`))!;
|
|
105
|
+
unlinkSync(deleted);
|
|
106
|
+
const planted = verifyExampleSeals(root);
|
|
107
|
+
const expected = `missing sealed file: ${relative(root, deleted)}`;
|
|
108
|
+
if (planted.failures.length !== 1 || planted.failures[0] !== expected || planted.ok !== verified.ok - 1) {
|
|
109
|
+
throw Error(`planted deletion was not detected: ${expected}`);
|
|
110
|
+
}
|
|
111
|
+
console.error(`planted deletion detected: ${expected} (${planted.ok} ok / 1 fail)`);
|
|
112
|
+
} finally { rmSync(scratch, { recursive: true, force: true }); }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function packExamples(output: string, stageOutput?: string): string {
|
|
116
|
+
const scratch = mkdtempSync(join(tmpdir(), 'create-example-pack-'));
|
|
117
|
+
try {
|
|
118
|
+
const destination = resolve(output);
|
|
119
|
+
mkdirSync(destination, { recursive: true });
|
|
120
|
+
const staged = stageOutput === undefined ? join(scratch, 'source') : resolve(stageOutput);
|
|
121
|
+
stage(packageRoot, staged);
|
|
122
|
+
const name = (JSON.parse(readFileSync(join(staged, 'package.json'), 'utf8')) as { name: string }).name;
|
|
123
|
+
const args = ['pack', '.', '--json', '--pack-destination', destination];
|
|
124
|
+
const packed = readNpmJson(run('npm', args, staged), `npm ${args.join(' ')}`, 'pack', name);
|
|
125
|
+
const tarball = join(destination, packed.filename);
|
|
126
|
+
console.error(`npm pack: ${packed.entryCount} files / ${packed.size} bytes compressed / ${packed.unpackedSize} bytes unpacked`);
|
|
127
|
+
verifyTarball(tarball, packageRoot);
|
|
128
|
+
return tarball;
|
|
129
|
+
} finally { rmSync(scratch, { recursive: true, force: true }); }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (import.meta.main) {
|
|
133
|
+
try {
|
|
134
|
+
const [mode, path, ...extra] = process.argv.slice(2);
|
|
135
|
+
if (mode === undefined) report(packageRoot, console.log);
|
|
136
|
+
else if (path && extra.length === 0 && mode === '--pack') console.log(packExamples(path));
|
|
137
|
+
else if (path && extra.length === 0 && mode === '--tarball') verifyTarball(path);
|
|
138
|
+
else if (path && extra.length === 0 && mode === '--stage') {
|
|
139
|
+
const scratch = mkdtempSync(join(tmpdir(), 'create-example-stage-gate-'));
|
|
140
|
+
try { packExamples(scratch, path); console.log(resolve(path)); }
|
|
141
|
+
finally { rmSync(scratch, { recursive: true, force: true }); }
|
|
142
|
+
}
|
|
143
|
+
else throw Error('usage: bun scripts/verify-example-seals.ts [--pack <output-dir> | --tarball <file.tgz> | --stage <fresh-dir>]');
|
|
144
|
+
} catch (error) {
|
|
145
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
146
|
+
process.exitCode = 1;
|
|
147
|
+
}
|
|
148
|
+
}
|
package/src/agent-guide.ts
CHANGED
|
@@ -53,7 +53,7 @@ export const PACKAGE_DOCS: readonly PackageDoc[] = [
|
|
|
53
53
|
{
|
|
54
54
|
package: '@rig-c/parts',
|
|
55
55
|
path: 'docs/DEPTH.md',
|
|
56
|
-
why: 'depth
|
|
56
|
+
why: 'depth-driven head turn before rigging; timed direction is separate',
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
package: '@rig-c/parts',
|
|
@@ -177,9 +177,11 @@ export const READ_FIRST = [
|
|
|
177
177
|
*/
|
|
178
178
|
export const INTERVIEW_CHECK_LINE = 'Run `rig-create interview --check` before interview sign-off: it names every `null` answer.';
|
|
179
179
|
|
|
180
|
-
export const REOPEN_EXCEPTION = '
|
|
180
|
+
export const REOPEN_EXCEPTION = 'After an accepted post is bounced, reopen direction-review through Review: `job open --plan`, then `job acts --json`, ingest `reopen direction-review --from-review <actId>`, and `job close`. The exported act supplies the reviewer, date and verbatim words.';
|
|
181
181
|
|
|
182
182
|
export const GUIDE_TEMPLATE = 'agent-guide.md';
|
|
183
|
+
/** Copied from the same installed create distribution as the rendered guide. */
|
|
184
|
+
export const AGENT_REFERENCE = 'AGENT-REFERENCE.md';
|
|
183
185
|
|
|
184
186
|
/** CLAUDE.md is a pointer: Claude Code reads CLAUDE.md, and an `@path` line imports that file into it. */
|
|
185
187
|
export const CLAUDE_MD = [
|
|
@@ -230,11 +232,12 @@ export function renderAgentGuide(): string {
|
|
|
230
232
|
|
|
231
233
|
/**
|
|
232
234
|
* Writes the guide an agent reads first in a project — AGENTS.md, and a
|
|
233
|
-
* CLAUDE.md that imports it — and returns the paths written (relative to the
|
|
235
|
+
* CLAUDE.md that imports it, plus its shipped reference — and returns the paths written (relative to the
|
|
234
236
|
* project) so init can add exactly those to git.
|
|
235
237
|
*/
|
|
236
238
|
export function writeAgentGuide(dir: string): string[] {
|
|
237
239
|
writeFileSync(join(dir, 'AGENTS.md'), renderAgentGuide());
|
|
238
240
|
writeFileSync(join(dir, 'CLAUDE.md'), CLAUDE_MD);
|
|
239
|
-
|
|
241
|
+
writeFileSync(join(dir, AGENT_REFERENCE), readFileSync(join(TEMPLATES_DIR, '..', 'docs', AGENT_REFERENCE)));
|
|
242
|
+
return ['AGENTS.md', 'CLAUDE.md', AGENT_REFERENCE];
|
|
240
243
|
}
|
package/src/check.ts
CHANGED
|
@@ -81,7 +81,7 @@ import { collectReopens, liveSignoff } from './reopen.ts';
|
|
|
81
81
|
import { reopenLapseWarnings } from './reopen-lapses.ts';
|
|
82
82
|
import { stepHash } from './step-hash.ts';
|
|
83
83
|
import { collectPlanReplaced, checkReplacedSignoffs, collectCheckpointWithdrawals, checkpointRequired } from './plan-history.ts';
|
|
84
|
-
import { deriveWaypoints, FRAMING_IDS, type DerivedSet } from './waypoints.ts';
|
|
84
|
+
import { deriveWaypoints, FRAMING_IDS, TURN_QUESTION_SPEC, type DerivedSet } from './waypoints.ts';
|
|
85
85
|
|
|
86
86
|
export const PROJECT_SCHEMA = 'rig-create/project@0';
|
|
87
87
|
export const STAGE_ORDER_LEGACY_FINDING: Finding = { code: 'STAGE_ORDER_LEGACY', path: 'interview.order', message: 'interview.order: legacy interview order; preserve old rig guides as history, not as answers asked after parts; adopt explicitly with a fresh rigging-interview sign-off' };
|
|
@@ -684,7 +684,7 @@ function checkPlan(ctx: Ctx): void {
|
|
|
684
684
|
}
|
|
685
685
|
if (planSigned) {
|
|
686
686
|
for (const item of ctx.items) {
|
|
687
|
-
if (item.kind !== 'waypoint' || !signed(ctx, approvalStageOfStep('rig', item.id, hasStageOrder(ctx.project)))) continue;
|
|
687
|
+
if (item.kind !== 'waypoint' || item.id === 'turn' || !signed(ctx, approvalStageOfStep('rig', item.id, hasStageOrder(ctx.project)))) continue;
|
|
688
688
|
if ((item.state.state === 'user' || item.state.state === 'delegated') && !ctx.steps.some((s) => s.phase === 'rig' && s.id === item.id)) {
|
|
689
689
|
ctx.refusals.push({ code: 'STEP_MISSING_FOR_WAYPOINT', path: `plan.steps[${item.id}]`, message: `waypoint '${item.id}' has a guide but the signed plan has no rig step '${item.id}'; one step per waypoint the plan passes` });
|
|
690
690
|
}
|
|
@@ -950,7 +950,10 @@ function checkProjectOnce(projectDirArg: string, candidate: JsonObject | undefin
|
|
|
950
950
|
let derived: DerivedSet | null = null;
|
|
951
951
|
try {
|
|
952
952
|
parts = readPartsSections(dir);
|
|
953
|
-
|
|
953
|
+
const interview = isObject(project.interview) ? project.interview : {};
|
|
954
|
+
const turnInterview = asArray(interview.waypoints).some(w => isObject(w) && w.id === 'turn')
|
|
955
|
+
|| interview.turn_question === TURN_QUESTION_SPEC;
|
|
956
|
+
derived = deriveWaypoints(parts.sections, turnInterview);
|
|
954
957
|
checkDerived(ctx, parts, derived);
|
|
955
958
|
} catch (e) {
|
|
956
959
|
if (!(e instanceof PartsUnreadable)) throw e;
|
|
@@ -981,7 +984,7 @@ function checkProjectOnce(projectDirArg: string, candidate: JsonObject | undefin
|
|
|
981
984
|
if (!options.recordPublication) checkReviews(ctx);
|
|
982
985
|
if (!options.recordPublication) checkPublicationGenerations(dir, project, refusals);
|
|
983
986
|
if (!options.recordPublication) checkReviewPackages(ctx);
|
|
984
|
-
if (!options.recordPublication) refusals.push(...rigRegistrationFindings(dir, project, warnings));
|
|
987
|
+
if (!options.recordPublication) refusals.push(...rigRegistrationFindings(dir, project, warnings, collection));
|
|
985
988
|
if (!options.recordPublication) checkAppliedReview(ctx);
|
|
986
989
|
const provenance = options.recordPublication ? [] : checkProvenance(ctx, parts);
|
|
987
990
|
const feedback = options.recordPublication ? [] : checkFeedback(ctx);
|