@rig-c/create 1.0.1 → 1.0.4
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 +47 -23
- package/docs/CHECKS.md +9 -8
- package/docs/INTERVIEW.md +11 -4
- package/docs/LIVE-REVIEW.md +525 -0
- package/docs/PROJECT.md +10 -0
- package/package.json +5 -2
- package/scripts/npm-json.ts +74 -0
- package/scripts/verify-example-seals.ts +148 -0
- package/src/agent-guide.ts +16 -13
- package/src/choice-writers.ts +8 -2
- package/src/choices.ts +1 -1
- package/src/cli.ts +9 -1
- package/src/direction-writers.ts +3 -1
- package/src/direction.ts +2 -1
- package/src/feedback.ts +5 -2
- package/src/init.ts +1 -1
- package/src/job-acts.ts +44 -3
- package/src/job-host.ts +1 -1
- package/src/next.ts +197 -59
- package/src/record-input.ts +1 -1
- package/src/reopen.ts +1 -1
- package/src/review-package.ts +2 -1
- package/src/scene-writers.ts +2 -1
- package/src/scene.ts +3 -1
- package/src/signoff-pair.ts +60 -0
- package/src/signoff-target.ts +7 -4
- package/src/signoff.ts +5 -0
- package/src/structure.ts +1 -1
- package/templates/agent-guide.md +29 -31
- package/templates/example-chain/.gitignore +6 -0
- package/templates/example-chain/.npmignore +1 -0
- package/templates/example-chain/AGENTS.md +41 -43
- package/templates/example-chain/chain.json +55 -55
- 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/AGENTS.md +41 -43
- package/templates/example-chain/checkpoints/0a-interview-options.json +1 -1
- 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/AGENTS.md +41 -43
- package/templates/example-chain/checkpoints/0b-plan-pending.json +1 -1
- 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/AGENTS.md +41 -43
- 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 +2 -2
- package/templates/example-chain/checkpoints/1-parts-verdict.json +5 -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/AGENTS.md +41 -43
- 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 +2 -2
- package/templates/example-chain/checkpoints/2-rigging-answers.json +5 -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/AGENTS.md +41 -43
- 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/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 +4 -4
- package/templates/example-chain/checkpoints/3-rig-review.json +9 -9
- 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/AGENTS.md +41 -43
- 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/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 +5 -5
- package/templates/example-chain/checkpoints/4-direction-post.json +9 -9
- 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/scene/s1.json +1 -1
- 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 +10 -10
- 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/{4ed0507381809746443021554e012032be5b5f8417da0f2e525e9b6df16e9f05.json → 52673b635b9cbc92da1a9e3d4c023a249bbacf79cd21b59724f03f18f8caf09b.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 +68 -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/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 +164 -164
- package/templates/example-project.json +249 -249
- package/templates/example-remesh/.gitignore +6 -0
- package/templates/example-remesh/.npmignore +1 -0
- package/templates/example-remesh/AGENTS.md +41 -43
- 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/parts-review.json +1 -1
- package/templates/example-remesh/evidence/review-reads/{6a17db694db96f1b6049a61a017e0c8e66757b982b8851e0187e561cfcf9af68.json → afe2522be4087f7f2fa7e97746d5f8574b0aedb474245ce2dbce0455e662f041.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 +225 -225
- package/templates/example-reopened/project.json +289 -289
- package/templates/example-split/captions.json +1 -1
|
@@ -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: '
|
|
56
|
+
why: 'depth reference; unavailable in current direction',
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
package: '@rig-c/parts',
|
|
@@ -88,7 +88,7 @@ export const PACKAGE_DOCS: readonly PackageDoc[] = [
|
|
|
88
88
|
{
|
|
89
89
|
package: '@rig-c/core',
|
|
90
90
|
path: 'docs/FACE.md',
|
|
91
|
-
why: 'blink
|
|
91
|
+
why: 'blink and gaze in the accepted rig',
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
package: '@rig-c/core',
|
|
@@ -155,13 +155,13 @@ function createLink(label: string, path: string, anchor?: string): string {
|
|
|
155
155
|
* linked, because the package links below are exactly PACKAGE_DOCS.
|
|
156
156
|
*/
|
|
157
157
|
export const READ_FIRST = [
|
|
158
|
-
'1. **Before the interview**: INTERVIEW.md
|
|
159
|
-
'
|
|
160
|
-
`
|
|
161
|
-
'2. **Before `seethrough` and `assemble`**: SOURCE.md,
|
|
162
|
-
`
|
|
163
|
-
` ${createLink('
|
|
164
|
-
'
|
|
158
|
+
'1. **Before the interview**: INTERVIEW.md; CRAFT.md (waypoint defaults);',
|
|
159
|
+
' parts AUTHORING §3, *`config.json`, field by field*;',
|
|
160
|
+
` ${createLink('CHECKS.md', 'docs/CHECKS.md')} before a sign-off.`,
|
|
161
|
+
'2. **Before `seethrough` and `assemble`**: SOURCE.md, split/cut order:',
|
|
162
|
+
` ${createLink('bad-split reruns', 'docs/SOURCE.md', 're-run-first')},`,
|
|
163
|
+
` ${createLink('allowed cuts', 'docs/SOURCE.md', 'where-a-cut-is-allowed')};`,
|
|
164
|
+
' parts AUTHORING *See-through head-run source reading*, *Source before',
|
|
165
165
|
' scissors* and *Limbs: cut at their joints*.',
|
|
166
166
|
`3. **Before rigging**: ${createLink('CRAFT.md § For the gates', 'docs/CRAFT.md', 'for-the-gates-not-the-interview')}`,
|
|
167
167
|
' (G1–G9); core RIGGING and MOTION; parts AUTHORING §7, the bars `check` enforces.',
|
|
@@ -175,7 +175,9 @@ export const READ_FIRST = [
|
|
|
175
175
|
* rig-c/create#3 it is `rig-create interview --check`, which refuses every
|
|
176
176
|
* `null` answer by name, so the line names the command, not the doc reference.
|
|
177
177
|
*/
|
|
178
|
-
export const INTERVIEW_CHECK_LINE = '
|
|
178
|
+
export const INTERVIEW_CHECK_LINE = 'Run `rig-create interview --check` before interview sign-off: it names every `null` answer.';
|
|
179
|
+
|
|
180
|
+
export const REOPEN_EXCEPTION = 'Until create#493, agents may type `reopen` only from Review host raw export `act@4`: save nonempty `value.words` byte-for-byte to a verbatim file; `--source` names `actId`. Empty/missing words: STOP. Never supply words. `job fetch-act` rejects act@4.';
|
|
179
181
|
|
|
180
182
|
export const GUIDE_TEMPLATE = 'agent-guide.md';
|
|
181
183
|
|
|
@@ -198,12 +200,13 @@ function linkLine(label: string, href: string, why: string): string {
|
|
|
198
200
|
/** The text of AGENTS.md, from the template and the tables above. */
|
|
199
201
|
export function renderAgentGuide(): string {
|
|
200
202
|
const fills: Record<string, string> = {
|
|
201
|
-
RESUME_LINK: `[
|
|
203
|
+
RESUME_LINK: `[Resume](${createDocUrl(RESUME_LINK.path, RESUME_LINK.anchor)})`,
|
|
202
204
|
INTERVIEW_CHECK: INTERVIEW_CHECK_LINE,
|
|
205
|
+
REOPEN_EXCEPTION,
|
|
203
206
|
DERIVED_LINK: `[INTERVIEW.md § Derived answers](${createDocUrl(DERIVED_LINK.path, DERIVED_LINK.anchor)})`,
|
|
204
207
|
GATES_LINK: `[CRAFT.md G8](${createDocUrl(GATES_LINK.path, GATES_LINK.anchor)})`,
|
|
205
|
-
DRAFTS_LINK: `[
|
|
206
|
-
STAGES_LINK: `[
|
|
208
|
+
DRAFTS_LINK: `[Draft rigs](${createDocUrl(DRAFTS_LINK.path, DRAFTS_LINK.anchor)})`,
|
|
209
|
+
STAGES_LINK: `[Stages](${createDocUrl(STAGES_LINK.path, STAGES_LINK.anchor)})`,
|
|
207
210
|
LIFETIME_LINK: `[PROJECT.md § Data is split by lifetime](${createDocUrl(LIFETIME_LINK.path, LIFETIME_LINK.anchor)})`,
|
|
208
211
|
INTAKE_LINK: `[PROJECT.md § Advisory intake reports](${createDocUrl(INTAKE_LINK.path, INTAKE_LINK.anchor)})`,
|
|
209
212
|
CG_GATES_LINK: `[CHECKS.md § CG gates](${createDocUrl(CG_GATES_LINK.path, CG_GATES_LINK.anchor)})`,
|
package/src/choice-writers.ts
CHANGED
|
@@ -24,7 +24,13 @@ interview-answer <question> [<dir>] --set <path> --sha256 <shown sha> --by <huma
|
|
|
24
24
|
[--note-file <file>] [--source <location>] [--why-file <file> for a member override]
|
|
25
25
|
interview-decision <question> [<dir>] --by <agent> --reasoning-file <file>
|
|
26
26
|
--fragment <ask>=<JSON file>...
|
|
27
|
-
Retain the shown set first. Each ask is picked explicitly; no recommended option is preselected
|
|
27
|
+
Retain the shown set first. Each ask is picked explicitly; no recommended option is preselected.
|
|
28
|
+
To ask an answered question again, retain and register a new set id/path with
|
|
29
|
+
interview-options <question> --file <path>, then job open --question <question>
|
|
30
|
+
and ingest interview-answer <question> --from-review <actId>; history is kept.
|
|
31
|
+
--adopt: split-order projects adopt all choices; legacy-order projects may adopt
|
|
32
|
+
post choices at post-interview only. For full adoption, first adopt the split
|
|
33
|
+
stage order with a fresh parts/rigging interview (docs/INTERVIEW.md).`;
|
|
28
34
|
function usage(why: string): never { refuse('INTERVIEW_OPTIONS_USAGE', `interview: ${why}; ${CHOICE_HELP}`, USAGE_EXIT); }
|
|
29
35
|
interface Args { positional: string[]; one: Record<string,string>; many: Record<string,Map<string,string>>; adopt: boolean; }
|
|
30
36
|
function parse(args: string[], allowed: string[], repeat: string[] = []): Args {
|
|
@@ -97,7 +103,7 @@ export function interviewOptionsCommand(args: string[], now: number): string { r
|
|
|
97
103
|
const dir = resolve(opts.positional[0] ?? process.cwd()); const {file,project} = readProject(dir); const next = structuredClone(project);
|
|
98
104
|
const interview = isObject(next.interview) ? next.interview : null;
|
|
99
105
|
if (interview && interview.order === undefined && isObject(interview.post)) {
|
|
100
|
-
if (project.stage !== 'post-interview') refuse('INTERVIEW_CHOICE_INVALID', 'interview.post: advance to post-interview before
|
|
106
|
+
if (project.stage !== 'post-interview') refuse('INTERVIEW_CHOICE_INVALID', 'interview.post: for post-only choices, advance to post-interview before interview-options --adopt; for full adoption, first adopt the split stage order with a fresh parts/rigging interview (docs/INTERVIEW.md)');
|
|
101
107
|
if (interview.post.choices_adopted_at !== undefined) {
|
|
102
108
|
if (!Number.isFinite(Date.parse(String(interview.post.choices_adopted_at)))) refuse('INTERVIEW_CHOICE_INVALID', 'interview.post: restore the original valid choices_adopted_at');
|
|
103
109
|
return 'interview: post choices already adopted; original date preserved';
|
package/src/choices.ts
CHANGED
|
@@ -177,7 +177,7 @@ export function optionContext(project: JsonObject, stage: string, at: number, di
|
|
|
177
177
|
if (!signoff || !rig || !isObject(provenance.config)) fail('INTERVIEW_OPTIONS_STALE', 'accept a rig with retained config before drafting post options');
|
|
178
178
|
const approval = latestPartsApproval(project, date(rig.at));
|
|
179
179
|
const draft = objects(project.drafts).find(d => d.id === approval?.draft_id);
|
|
180
|
-
if (!draft || !isObject(draft.parts)) fail('INTERVIEW_OPTIONS_STALE',
|
|
180
|
+
if (!draft || !isObject(draft.parts)) fail('INTERVIEW_OPTIONS_STALE', `versions[v${String(rig.n)}]: no retained approved draft parts are available at rig.at ${String(rig.at)}; restore the parts-review approval and draft live at that build date, or register a new rig version after parts-review before drafting post options`);
|
|
181
181
|
return { kind: 'rig', rig_version: rig.n as Json, signoff_at: signoff.record.at as Json, config: provenance.config, parts: draft.parts };
|
|
182
182
|
}
|
|
183
183
|
|
package/src/cli.ts
CHANGED
|
@@ -113,12 +113,20 @@ ${INPUT_CLI} rig-create init <dir> [--no-install] create a project
|
|
|
113
113
|
rig-create --help show this help
|
|
114
114
|
rig-create --version show the version
|
|
115
115
|
|
|
116
|
+
job open / job reconcile / bound writers:
|
|
117
|
+
--rig <n> selects a registered rig OR post version; the flag name is shared
|
|
118
|
+
Keep the Review host up across bound writes (including advance and republish).
|
|
119
|
+
If it stopped, job open again with --reviewer <id> --role owner|delegate,
|
|
120
|
+
then job reconcile; a pending publication blocks later bound writes.
|
|
121
|
+
|
|
116
122
|
init:
|
|
117
123
|
<dir> an empty or missing folder; a non-empty one is refused
|
|
118
124
|
--no-install do not run bun install (offline, tests); run it yourself afterwards
|
|
119
125
|
--painting <file> --origin <words>
|
|
120
126
|
copy the painting into inputs/, register it and declare project.painting; refused (INIT_ARTWORK_EXISTS) when a
|
|
121
|
-
project directly under --projects-root (default: the parent folder) binds the same sha256
|
|
127
|
+
project directly under --projects-root (default: the parent folder) binds the same sha256.
|
|
128
|
+
Continue there as a new version; restart keeps its correction ledger.
|
|
129
|
+
A new project is for different artwork or a different rig kind only.
|
|
122
130
|
--same-artwork-reason <file>
|
|
123
131
|
record why this artwork needs a second project (a different rig kind)
|
|
124
132
|
|
package/src/direction-writers.ts
CHANGED
|
@@ -18,6 +18,8 @@ direction write <N> [<dir>] --file <retained JSON> --rig <R> [--answers <version
|
|
|
18
18
|
direction patch <N> [<dir>] --patch-file <retained direction-patch/1> [--answers <version>:<verdict>]
|
|
19
19
|
direction check <N> [<dir>] [--json]
|
|
20
20
|
Documents are immutable evidence/direction/v<N>.json. No rendering or producer builds.
|
|
21
|
+
--file and --patch-file are retained, non-ignored project-relative paths.
|
|
22
|
+
A bounced predecessor needs --answers <version>:<verdict> on write/patch.
|
|
21
23
|
Capture a made correction with correction record --direction-patch-file before patch ingestion;
|
|
22
24
|
resolve it against the result post. Review exports patches, never invokes this writer.`;
|
|
23
25
|
function usage(why:string):never {refuse('DIRECTION_USAGE',`direction: ${why}; ${DIRECTION_HELP}`,USAGE_EXIT);}
|
|
@@ -32,7 +34,7 @@ function prospective(dir:string,before:JsonObject,next:JsonObject,now:number):vo
|
|
|
32
34
|
/** A narrow seam for fault-injected transaction tests; CLI never supplies a hook. */
|
|
33
35
|
export interface DirectionWriteHooks { beforeCommit?:()=>void; }
|
|
34
36
|
export function directionCommand(args:string[],now:number,hooks:DirectionWriteHooks={}):{stdout:string;exit:number} {
|
|
35
|
-
try{return command(args,now,hooks);}catch(e){if(e instanceof DirectionError)refuse(e.code,e.message,e.code==='DIRECTION_USAGE'?USAGE_EXIT:1);throw e;}
|
|
37
|
+
try{return command(args,now,hooks);}catch(e){if(e instanceof DirectionError)refuse(e.code,e.code==='FEEDBACK_UNANSWERED'?`${e.message}; retry direction write/patch with --answers <version>:<verdict> naming the bounced verdict`:e.message,e.code==='DIRECTION_USAGE'?USAGE_EXIT:1);throw e;}
|
|
36
38
|
}
|
|
37
39
|
function command(args:string[],now:number,hooks:DirectionWriteHooks):{stdout:string;exit:number} {
|
|
38
40
|
const action=args[0];const positional:string[]=[];const opts:Record<string,string>={};const answerValues:string[]=[];let json=false;
|
package/src/direction.ts
CHANGED
|
@@ -35,7 +35,8 @@ export function directionFinding(e: DirectionError): Finding { return { code: e.
|
|
|
35
35
|
export function directionBytes(dir: string, path: string): Buffer { return retainedBytes(dir, path, false); }
|
|
36
36
|
function retainedBytes(dir: string, path: string, boundOutput: boolean): Buffer {
|
|
37
37
|
try {
|
|
38
|
-
if (isAbsolute(path) || path.includes('\\') || path.split('/').some(p => !p || p === '.' || p === '..')
|
|
38
|
+
if (isAbsolute(path) || path.includes('\\') || path.split('/').some(p => !p || p === '.' || p === '..')) throw Error('literal project-relative POSIX path required');
|
|
39
|
+
if (!boundOutput && structurePathIsIgnored(dir, path) && !/^derived\/review\/v[1-9][0-9]*\/out\/check\/build\/skeleton\.model\.json$/.test(path)) throw Error('path is ignored; retain the source in a non-ignored project folder such as evidence/direction-src/ and pass that project-relative path');
|
|
39
40
|
let current = realpathSync(dir);
|
|
40
41
|
for (const [i, segment] of path.split('/').entries()) {
|
|
41
42
|
current = join(current, segment); const stat = lstatSync(current);
|
package/src/feedback.ts
CHANGED
|
@@ -27,6 +27,7 @@ import { acquireBoundJobWrite, jobRuntimeExecArgv } from './job-writer.ts';
|
|
|
27
27
|
import { jobHash } from './job-outbox.ts';
|
|
28
28
|
import { assertReviewActSource, decodeReviewAct, reviewActFindings, reviewActPublicationWarning, reviewActStill, reviewActTransport, reviewActVerbatim, reviewActVersionHash, type FetchedReviewAct } from './review-act.ts';
|
|
29
29
|
import { newRefusals } from './refusal-baseline.ts';
|
|
30
|
+
import { ingestedVerdictPairFinding } from './signoff-pair.ts';
|
|
30
31
|
import { dirname, join, resolve } from 'node:path';
|
|
31
32
|
|
|
32
33
|
import { asArray, asString, collectItems, isObject, itemFor, loadCollection, type Ctx, type Item } from './check.ts';
|
|
@@ -541,7 +542,7 @@ function writeVerdict(projectDirArg: string, input: ReviewInput, now: number, fe
|
|
|
541
542
|
bytes: fetched.bytes, sha256: jobHash(fetched.bytes), version: input.version, verdict: verdicts.length - 1,
|
|
542
543
|
version_hash: reviewActVersionHash(original, fetched.act), added_evidence: addedEvidence };
|
|
543
544
|
project.review_acts = [...asArray(project.review_acts), receipt];
|
|
544
|
-
const invalid = reviewActFindings(project)[0] ?? newRefusals(dir, original, project, { now })[0];
|
|
545
|
+
const invalid = reviewActFindings(project)[0] ?? ingestedVerdictPairFinding(project, input.version, verdicts.length - 1) ?? newRefusals(dir, original, project, { now })[0];
|
|
545
546
|
if (invalid) refuse(invalid.code, invalid.message);
|
|
546
547
|
assertReviewActSource(dir, original, fetched.act);
|
|
547
548
|
if (!readFileSync(file).equals(originalBytes)) refuse('REVIEW_ACT_SOURCE_STALE', 'project.json: record changed during verdict validation; retry against the current live job');
|
|
@@ -556,7 +557,7 @@ function writeVerdict(projectDirArg: string, input: ReviewInput, now: number, fe
|
|
|
556
557
|
} finally { closeSync(fd); rmSync(temporary, { force: true }); }
|
|
557
558
|
return result;
|
|
558
559
|
}
|
|
559
|
-
const invalid = newRefusals(dir, original, project, { now })[0];
|
|
560
|
+
const invalid = ingestedVerdictPairFinding(project, input.version, verdicts.length - 1) ?? newRefusals(dir, original, project, { now })[0];
|
|
560
561
|
if (invalid) refuse(invalid.code, invalid.message);
|
|
561
562
|
writeFileSync(file, `${JSON.stringify(project, null, 2)}\n`);
|
|
562
563
|
return { project_dir: dir, verdict_path: verdictPath, verdict, items: out, stage: asString(project.stage) };
|
|
@@ -589,6 +590,8 @@ export function recordReviewAct(root: string, requestedVersion: number, actId: s
|
|
|
589
590
|
? existing.bytes === response.bytes
|
|
590
591
|
: isDeepStrictEqual(JSON.parse(String(existing.bytes)), act);
|
|
591
592
|
if (!sameAct) refuse('REVIEW_ACT_REPLAY_CONFLICT', 'project.json.review_acts: immutable act changed; restore the original receipt');
|
|
593
|
+
const pair = ingestedVerdictPairFinding(project, requestedVersion, Number(existing.verdict));
|
|
594
|
+
if (pair) refuse(pair.code, pair.message);
|
|
592
595
|
if (existing.version_hash !== reviewActVersionHash(project, act, Number(existing.verdict))) refuse('REVIEW_ACT_SOURCE_STALE', 'project.json.review_acts: reviewed version changed; request a new review act');
|
|
593
596
|
const version = asArray(project.versions).find(v => isObject(v) && v.n === requestedVersion) as JsonObject;
|
|
594
597
|
return { project_dir: root, verdict_path: `versions[v${requestedVersion}].verdicts[${existing.verdict}]`,
|
package/src/init.ts
CHANGED
|
@@ -65,7 +65,7 @@ export function sameArtworkFor(dir: string, name: string, sha256: string, now: n
|
|
|
65
65
|
return inputs.some(input => input !== null && typeof input === 'object' && (input as JsonObject).sha256 === sha256);
|
|
66
66
|
});
|
|
67
67
|
if (matches.length > 0 && options.sameArtworkReason === undefined) {
|
|
68
|
-
refuse('INIT_ARTWORK_EXISTS', `inputs[${options.index ?? 0}]: ${name} (sha256 ${sha256}) is already an input of ${matches.join(', ')} under ${root};
|
|
68
|
+
refuse('INIT_ARTWORK_EXISTS', `inputs[${options.index ?? 0}]: ${name} (sha256 ${sha256}) is already an input of ${matches.join(', ')} under ${root}; continue in that existing project as a new version; restart there inherits its correction ledger. A new project is only for different artwork or a different rig kind (--same-artwork-reason <file> for the latter); do not copy the artwork to bypass this refusal`);
|
|
69
69
|
}
|
|
70
70
|
if (options.sameArtworkReason !== undefined) {
|
|
71
71
|
if (matches.length === 0) refuse('INIT_ARTWORK_USAGE', `--same-artwork-reason: no project under ${root} binds ${name}; drop the reason`, USAGE_EXIT);
|
package/src/job-acts.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/** Writer routing for finalized acts. No event transport or automatic ingestion. */
|
|
2
2
|
import type { ActV3 } from '@rig-c/review/job-host';
|
|
3
|
-
import { asArray, isObject } from './check.ts';
|
|
3
|
+
import { asArray, isObject, type Finding } from './check.ts';
|
|
4
|
+
import { existsSync, readFileSync } from './check-reads.ts';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { recordedPartsVerdict } from './parts-verdict-record.ts';
|
|
4
7
|
import { stageOfStep } from './stages.ts';
|
|
8
|
+
import { checkStructure } from './structure.ts';
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
5
10
|
import type { JsonObject } from './templates.ts';
|
|
6
11
|
|
|
7
12
|
export interface PendingJobAct {
|
|
@@ -11,6 +16,7 @@ export interface PendingJobAct {
|
|
|
11
16
|
at: string;
|
|
12
17
|
args: string[] | null;
|
|
13
18
|
command: string | null;
|
|
19
|
+
preconditions?: { command: string | null; act: string }[];
|
|
14
20
|
unavailable?: { code: 'JOB_ACTS_WRITER_UNAVAILABLE'; message: string };
|
|
15
21
|
}
|
|
16
22
|
|
|
@@ -18,6 +24,23 @@ function shellWord(value: string): string {
|
|
|
18
24
|
return /^[A-Za-z0-9_./:-]+$/.test(value) ? value : `'${value.replaceAll("'", "'\\''")}'`;
|
|
19
25
|
}
|
|
20
26
|
|
|
27
|
+
/** A retained snapshot is reusable only for this exact draft and config.
|
|
28
|
+
* Never overwrite unrelated or invalid bytes: choose the next retained name.
|
|
29
|
+
*/
|
|
30
|
+
export function partsStructureSnapshot(root: string, project: JsonObject, draft: string): { path: string; valid: boolean } {
|
|
31
|
+
const stem = `evidence/structure-${encodeURIComponent(draft)}`;
|
|
32
|
+
for (let suffix = 0; ; suffix++) {
|
|
33
|
+
const path = `${stem}${suffix === 0 ? '' : `-${suffix}`}.json`;
|
|
34
|
+
if (!existsSync(join(root, path))) return { path, valid: false };
|
|
35
|
+
try {
|
|
36
|
+
const bytes = readFileSync(join(root, path));
|
|
37
|
+
const errors: Finding[] = [];
|
|
38
|
+
const signoff = { draft_id: draft, structure: { path, sha256: createHash('sha256').update(bytes).digest('hex') } };
|
|
39
|
+
if (checkStructure(root, project, signoff, path, errors) !== null && errors.length === 0) return { path, valid: true };
|
|
40
|
+
} catch { /* Preserve the existing bytes and select another output path. */ }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
21
44
|
export function pendingJobActs(project: JsonObject, acts: readonly ActV3[], root: string): PendingJobAct[] {
|
|
22
45
|
const ingested = new Set(asArray(project.review_acts).filter(isObject).map(row => JSON.stringify([row.jobId, row.actId])));
|
|
23
46
|
const signoffs = asArray(project.signoffs).filter(isObject);
|
|
@@ -28,6 +51,7 @@ export function pendingJobActs(project: JsonObject, acts: readonly ActV3[], root
|
|
|
28
51
|
seen.add(key);
|
|
29
52
|
let subject: string = act.kind;
|
|
30
53
|
let args: string[] | null = null;
|
|
54
|
+
const preconditions: { command: string | null; act: string }[] = [];
|
|
31
55
|
switch (act.kind) {
|
|
32
56
|
case 'review-verdict': {
|
|
33
57
|
const selector = act.source.selector;
|
|
@@ -51,10 +75,26 @@ export function pendingJobActs(project: JsonObject, acts: readonly ActV3[], root
|
|
|
51
75
|
subject = `question ${act.value.questionId}`;
|
|
52
76
|
args = ['interview-answer', act.value.questionId, root];
|
|
53
77
|
break;
|
|
54
|
-
case 'signoff':
|
|
78
|
+
case 'signoff': {
|
|
55
79
|
subject = `stage ${act.value.stage}`;
|
|
56
80
|
args = ['signoff', act.value.stage, root];
|
|
81
|
+
if (act.value.stage === 'parts-review') {
|
|
82
|
+
const selector = act.source.selector;
|
|
83
|
+
// Select only the draft shown by Review, never the latest draft by guess.
|
|
84
|
+
if (selector?.kind !== 'draft') { args = null; break; }
|
|
85
|
+
const draft = selector.id;
|
|
86
|
+
const structure = partsStructureSnapshot(root, project, draft);
|
|
87
|
+
let approved = false;
|
|
88
|
+
try { recordedPartsVerdict(root, project, draft); approved = true; } catch { /* Ordered prerequisite below. */ }
|
|
89
|
+
if (!approved) preconditions.push({ command: null, act: `ingest the approved parts-verdict for draft ${draft} before structure-snapshot; use its job acts writer command` });
|
|
90
|
+
if (!structure.valid) preconditions.push({
|
|
91
|
+
command: ['rig-create', 'structure-snapshot', root, '--draft', draft, '--out', structure.path].map(shellWord).join(' '),
|
|
92
|
+
act: 'after ingesting the approved parts-verdict, retain the structure snapshot before signoff',
|
|
93
|
+
});
|
|
94
|
+
args.push('--draft', draft, '--structure-file', structure.path);
|
|
95
|
+
}
|
|
57
96
|
break;
|
|
97
|
+
}
|
|
58
98
|
case 'checkpoint': {
|
|
59
99
|
const step = asArray(isObject(project.plan) ? project.plan.steps : undefined).filter(isObject).find(step => step.id === act.value.planStepId);
|
|
60
100
|
subject = `checkpoint ${act.value.planStepId}`;
|
|
@@ -68,6 +108,7 @@ export function pendingJobActs(project: JsonObject, acts: readonly ActV3[], root
|
|
|
68
108
|
}
|
|
69
109
|
if (args) args.push('--from-review', act.actId);
|
|
70
110
|
return [{ actId: act.actId, kind: act.kind, subject, at: act.at, args,
|
|
111
|
+
...(preconditions.length ? { preconditions } : {}),
|
|
71
112
|
command: args ? ['rig-create', ...args].map(shellWord).join(' ') : null,
|
|
72
113
|
...(args ? {} : { unavailable: { code: 'JOB_ACTS_WRITER_UNAVAILABLE' as const,
|
|
73
114
|
message: `project.json: act ${act.actId} (${subject}) has no current writer target; restore its plan step or use a supported Review subject before ingestion` } }) }];
|
|
@@ -76,5 +117,5 @@ export function pendingJobActs(project: JsonObject, acts: readonly ActV3[], root
|
|
|
76
117
|
|
|
77
118
|
export function jobActsText(result: { acts: readonly PendingJobAct[] }): string {
|
|
78
119
|
if (!result.acts.length) return 'job: no finalized acts awaiting ingestion';
|
|
79
|
-
return result.acts.map(act => `${act.actId} ${act.kind} ${act.subject} at ${act.at}\n ${act.command ?? `${act.unavailable!.code}: ${act.unavailable!.message}`}`).join('\n');
|
|
120
|
+
return result.acts.map(act => `${act.actId} ${act.kind} ${act.subject} at ${act.at}\n${(act.preconditions ?? []).map(step => ` first: ${step.command ?? step.act}\n`).join('')} ${act.command ?? `${act.unavailable!.code}: ${act.unavailable!.message}`}`).join('\n');
|
|
80
121
|
}
|
package/src/job-host.ts
CHANGED
|
@@ -424,7 +424,7 @@ export function requestedRecordResult(root: string, question?: string, plan = fa
|
|
|
424
424
|
if (question !== undefined) {
|
|
425
425
|
const items = collectItems(project, { collection: loadCollection(root, project) }).filter(item => item.id === question);
|
|
426
426
|
const binding = items.length === 1 ? items[0]!.record.pending_options : undefined;
|
|
427
|
-
if (!isObject(binding) || typeof binding.path !== 'string') refuse('JOB_RECORD_SUBJECT_INVALID',
|
|
427
|
+
if (!isObject(binding) || typeof binding.path !== 'string') refuse('JOB_RECORD_SUBJECT_INVALID', `project.json: requested question has no unique pending option set; register it with rig-create interview-options ${question} '${root.replaceAll("'", "'\\''")}' --file '<option-set.json>' first (draft a new option set to re-ask an answered question)`);
|
|
428
428
|
const set = JSON.parse(publicationFile(root, binding.path).toString('utf8')) as JsonObject;
|
|
429
429
|
if (typeof set.id !== 'string') refuse('JOB_RECORD_SUBJECT_INVALID', 'project.json: pending option set has no id; restore its original identity');
|
|
430
430
|
result = { kind: 'option-set', questionId: question, setId: set.id };
|