@rig-c/create 0.0.0-stage → 1.0.1
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/LICENSE +21 -0
- package/README.md +169 -2
- package/docs/CHECKS.md +1682 -0
- package/docs/COLLECTIONS.md +337 -0
- package/docs/CRAFT.md +277 -0
- package/docs/INTERVIEW.md +886 -0
- package/docs/LESSONS.md +172 -0
- package/docs/PROJECT.md +2657 -0
- package/docs/SOURCE.md +225 -0
- package/package.json +44 -4
- package/src/agent-bounce.ts +27 -0
- package/src/agent-guide.ts +237 -0
- package/src/amend.ts +193 -0
- package/src/applied-review.ts +104 -0
- package/src/ask-coverage.ts +69 -0
- package/src/assemble-answers.ts +53 -0
- package/src/cg-gates.ts +211 -0
- package/src/check-reads.ts +106 -0
- package/src/check.ts +1059 -0
- package/src/checkpoint-evidence-writer.ts +125 -0
- package/src/checkpoint-evidence.ts +152 -0
- package/src/choice-writers.ts +271 -0
- package/src/choices.ts +378 -0
- package/src/cli.ts +371 -0
- package/src/collection-answer.ts +136 -0
- package/src/collection-binding-reader.ts +496 -0
- package/src/collection-binding.ts +478 -0
- package/src/collection.ts +348 -0
- package/src/config-inputs.ts +155 -0
- package/src/config-lost.ts +135 -0
- package/src/correction-writers.ts +207 -0
- package/src/corrections.ts +685 -0
- package/src/diff-classes.ts +219 -0
- package/src/diff-map.ts +248 -0
- package/src/direction-citation.ts +13 -0
- package/src/direction-writers.ts +119 -0
- package/src/direction.ts +266 -0
- package/src/drafts.ts +363 -0
- package/src/feedback.ts +744 -0
- package/src/figure-mask.ts +143 -0
- package/src/fix-ledger.ts +355 -0
- package/src/init.ts +265 -0
- package/src/inputs.ts +160 -0
- package/src/intake.ts +158 -0
- package/src/interview.ts +53 -0
- package/src/invariants.ts +132 -0
- package/src/job-acts.ts +80 -0
- package/src/job-advance.ts +65 -0
- package/src/job-close.ts +226 -0
- package/src/job-host.ts +529 -0
- package/src/job-outbox.ts +383 -0
- package/src/job-publication.ts +701 -0
- package/src/job-runtime.ts +99 -0
- package/src/job-writer.ts +123 -0
- package/src/meshes-bust.ts +63 -0
- package/src/next.ts +1506 -0
- package/src/overrides.ts +42 -0
- package/src/package-upgrades.ts +32 -0
- package/src/packages-upgrade-check.ts +6 -0
- package/src/packages-upgrade.ts +168 -0
- package/src/parts-act.ts +96 -0
- package/src/parts-check.ts +242 -0
- package/src/parts-review.ts +196 -0
- package/src/parts-sections.ts +98 -0
- package/src/parts-verdict-record.ts +265 -0
- package/src/parts-verdict.ts +33 -0
- package/src/pause.ts +118 -0
- package/src/pins-check.ts +619 -0
- package/src/pins.ts +17 -0
- package/src/plan-bar-amendments.ts +54 -0
- package/src/plan-history.ts +147 -0
- package/src/plan-writers.ts +202 -0
- package/src/plate-receipt.ts +110 -0
- package/src/pre-interview.ts +302 -0
- package/src/prepared-inputs.ts +113 -0
- package/src/progress-writers.ts +181 -0
- package/src/provenance.ts +301 -0
- package/src/record-direction-target.ts +26 -0
- package/src/record-input.ts +18 -0
- package/src/refusal-baseline.ts +55 -0
- package/src/refusal.ts +30 -0
- package/src/reopen-lapses.ts +80 -0
- package/src/reopen.ts +144 -0
- package/src/republish.ts +93 -0
- package/src/restart.ts +141 -0
- package/src/review-act-runtime.ts +16 -0
- package/src/review-act.ts +592 -0
- package/src/review-package.ts +524 -0
- package/src/review-read.ts +238 -0
- package/src/review.ts +432 -0
- package/src/rig-version-date.ts +22 -0
- package/src/rig-version.ts +1047 -0
- package/src/run-record.ts +232 -0
- package/src/scene-authority.ts +410 -0
- package/src/scene-writers.ts +144 -0
- package/src/scene.ts +284 -0
- package/src/setup-painting.ts +46 -0
- package/src/signable.ts +65 -0
- package/src/signoff-answers.ts +76 -0
- package/src/signoff-checkpoint-act.ts +95 -0
- package/src/signoff-target.ts +127 -0
- package/src/signoff.ts +331 -0
- package/src/split-captions.ts +154 -0
- package/src/stage-progress.ts +379 -0
- package/src/stages.ts +148 -0
- package/src/step-hash.ts +19 -0
- package/src/structure-snapshot.ts +109 -0
- package/src/structure.ts +166 -0
- package/src/templates.ts +16 -0
- package/src/waypoints.ts +163 -0
- package/templates/agent-guide.md +108 -0
- package/templates/collection-agent-guide.md +72 -0
- package/templates/collection.json +252 -0
- package/templates/example-chain/AGENTS.md +134 -0
- package/templates/example-chain/CLAUDE.md +3 -0
- package/templates/example-chain/README.md +13 -0
- package/templates/example-chain/chain.json +2869 -0
- package/templates/example-chain/checkpoints/0a-interview-options/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/0a-interview-options/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/0a-interview-options/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/0a-interview-options/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/0a-interview-options/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/0a-interview-options/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/0a-interview-options/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/0a-interview-options/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/0a-interview-options/package.json +9 -0
- package/templates/example-chain/checkpoints/0a-interview-options/project.json +295 -0
- package/templates/example-chain/checkpoints/0a-interview-options.json +127 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/interview/reference.json +59 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/package.json +9 -0
- package/templates/example-chain/checkpoints/0b-plan-pending/project.json +685 -0
- package/templates/example-chain/checkpoints/0b-plan-pending.json +81 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/interview/reference.json +59 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/parts-check.json +127 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/package.json +9 -0
- package/templates/example-chain/checkpoints/1-parts-verdict/project.json +955 -0
- package/templates/example-chain/checkpoints/1-parts-verdict.json +204 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/diff-components.json +34 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/interview/bones.json +190 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/interview/reference.json +59 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/parts-check.json +127 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/parts-review.json +88 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/review-reads/a12dea02d32508acc99386f894af76a14f1c85f45f804db2aa6b4dea5297973f.json +59 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/evidence/structure.json +30 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/package.json +9 -0
- package/templates/example-chain/checkpoints/2-rigging-answers/project.json +1198 -0
- package/templates/example-chain/checkpoints/2-rigging-answers.json +254 -0
- package/templates/example-chain/checkpoints/3-rig-review/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/3-rig-review/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/diff-components.json +34 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/bones.json +190 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/constraints.json +272 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/meshes.json +190 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/motion.json +272 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/reference.json +59 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/parts-check.json +127 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/parts-review.json +88 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/review-reads/a12dea02d32508acc99386f894af76a14f1c85f45f804db2aa6b4dea5297973f.json +59 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/setup.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/structure.json +30 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/v1/config.json +88 -0
- package/templates/example-chain/checkpoints/3-rig-review/evidence/v1/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/3-rig-review/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/3-rig-review/package.json +9 -0
- package/templates/example-chain/checkpoints/3-rig-review/project.json +1909 -0
- package/templates/example-chain/checkpoints/3-rig-review.json +424 -0
- package/templates/example-chain/checkpoints/4-direction-post/AGENTS.md +134 -0
- package/templates/example-chain/checkpoints/4-direction-post/CLAUDE.md +3 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/approval.txt +1 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/diff-components.json +34 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/bones.json +190 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/camera_depth.json +102 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/constraints.json +272 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/meshes.json +190 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/motion.json +272 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/post_composition.json +122 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/post_timing.json +102 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/reference.json +59 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/parts-check.json +127 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/parts-review.json +88 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/review-reads/a12dea02d32508acc99386f894af76a14f1c85f45f804db2aa6b4dea5297973f.json +59 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/setup.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/split-config.json +1 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/structure.json +30 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/v1/config.json +88 -0
- package/templates/example-chain/checkpoints/4-direction-post/evidence/v1/interview-requirements.json +8 -0
- package/templates/example-chain/checkpoints/4-direction-post/inputs/painting.png +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/checkpoints/4-direction-post/package.json +9 -0
- package/templates/example-chain/checkpoints/4-direction-post/project.json +2302 -0
- package/templates/example-chain/checkpoints/4-direction-post.json +456 -0
- package/templates/example-chain/evidence/.gitkeep +0 -0
- package/templates/example-chain/evidence/approval.txt +1 -0
- package/templates/example-chain/evidence/captions.json +101 -0
- package/templates/example-chain/evidence/diff-components.json +34 -0
- package/templates/example-chain/evidence/direction/v2.json +74 -0
- package/templates/example-chain/evidence/direction-input.json +74 -0
- package/templates/example-chain/evidence/interview/assemble.json +309 -0
- package/templates/example-chain/evidence/interview/bones.json +190 -0
- package/templates/example-chain/evidence/interview/camera_depth.json +102 -0
- package/templates/example-chain/evidence/interview/constraints.json +272 -0
- package/templates/example-chain/evidence/interview/meshes.json +190 -0
- package/templates/example-chain/evidence/interview/motion.json +272 -0
- package/templates/example-chain/evidence/interview/post_composition.json +122 -0
- package/templates/example-chain/evidence/interview/post_timing.json +102 -0
- package/templates/example-chain/evidence/interview/reference.json +59 -0
- package/templates/example-chain/evidence/interview/rig_type.json +59 -0
- package/templates/example-chain/evidence/interview/seethrough.json +186 -0
- package/templates/example-chain/evidence/parts-check.json +127 -0
- package/templates/example-chain/evidence/parts-review.json +88 -0
- package/templates/example-chain/evidence/review-reads/a12dea02d32508acc99386f894af76a14f1c85f45f804db2aa6b4dea5297973f.json +59 -0
- package/templates/example-chain/evidence/scene/s1.json +65 -0
- package/templates/example-chain/evidence/scene-citations.json +9 -0
- package/templates/example-chain/evidence/setup.png +0 -0
- package/templates/example-chain/evidence/split-config.json +1 -0
- package/templates/example-chain/evidence/structure.json +30 -0
- package/templates/example-chain/evidence/v1/config.json +88 -0
- package/templates/example-chain/evidence/v1/interview-requirements.json +8 -0
- package/templates/example-chain/inputs/background.png +0 -0
- package/templates/example-chain/inputs/painting.png +0 -0
- package/templates/example-chain/inputs/references/.gitkeep +0 -0
- package/templates/example-chain/package.json +9 -0
- package/templates/example-chain/project.json +2593 -0
- package/templates/example-diff/diff-components.json +71 -0
- package/templates/example-diff/recomposite_rig.png +0 -0
- package/templates/example-direction/approval.txt +1 -0
- package/templates/example-direction/derived/review/v1/out/check/build/rectangle.png +0 -0
- package/templates/example-direction/derived/review/v1/out/check/build/run.json +40 -0
- package/templates/example-direction/derived/review/v1/out/check/build/skeleton.atlas +8 -0
- package/templates/example-direction/derived/review/v1/out/check/build/skeleton.json +73 -0
- package/templates/example-direction/derived/review/v1/out/check/build/skeleton.model.json +195 -0
- package/templates/example-direction/evidence/direction/v2.json +69 -0
- package/templates/example-direction/evidence/direction/v3.json +59 -0
- package/templates/example-direction/evidence/images/rectangle.png +0 -0
- package/templates/example-direction/evidence/input.json +69 -0
- package/templates/example-direction/evidence/motion.json +33 -0
- package/templates/example-direction/evidence/patch.json +23 -0
- package/templates/example-direction/evidence/rig-config.json +55 -0
- package/templates/example-direction/evidence/still.png +0 -0
- package/templates/example-direction/project.json +372 -0
- package/templates/example-direction/reasoning.txt +1 -0
- package/templates/example-direction/words.txt +1 -0
- package/templates/example-draft/README.md +28 -0
- package/templates/example-draft/config.json +71 -0
- package/templates/example-draft/derived/drafts/lantern/config.json +71 -0
- package/templates/example-draft/derived/drafts/lantern/input/painting_in_rig.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/background.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/eye_l.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/eye_r.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/face.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/lantern.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts/torso.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/input/parts.json +188 -0
- package/templates/example-draft/derived/drafts/lantern/input/recomposite_rig.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/interview-requirements.json +8 -0
- package/templates/example-draft/derived/drafts/lantern/out/check/build/run.json +40 -0
- package/templates/example-draft/derived/drafts/lantern/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/derived/drafts/lantern/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/derived/drafts/lantern/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/derived/drafts/lantern/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/background.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/eye_l.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/eye_r.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/face.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/lantern.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/images/torso.png +0 -0
- package/templates/example-draft/derived/drafts/lantern/out/mesh_report.json +1 -0
- package/templates/example-draft/derived/drafts/lantern/out/motion.json +137 -0
- package/templates/example-draft/derived/drafts/lantern/out/rig.json +102 -0
- package/templates/example-draft/derived/drafts/lantern/out/run.json +52 -0
- package/templates/example-draft/derived/parts/rig/painting_in_rig.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/background.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/eye_l.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/eye_r.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/face.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/lantern.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts/torso.png +0 -0
- package/templates/example-draft/derived/parts/rig/parts.json +188 -0
- package/templates/example-draft/derived/parts/rig/recomposite_rig.png +0 -0
- package/templates/example-draft/derived/review/v1/config.json +71 -0
- package/templates/example-draft/derived/review/v1/interview-requirements.json +8 -0
- package/templates/example-draft/derived/review/v1/out/check/build/run.json +40 -0
- package/templates/example-draft/derived/review/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/derived/review/v1/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/derived/review/v1/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/derived/review/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/background.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/eye_l.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/eye_r.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/face.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/lantern.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts/torso.png +0 -0
- package/templates/example-draft/derived/review/v1/out/parts.json +188 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/background.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/face.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/images/torso.png +0 -0
- package/templates/example-draft/derived/review/v1/out/rig/mesh_report.json +1 -0
- package/templates/example-draft/derived/review/v1/out/rig/motion.json +137 -0
- package/templates/example-draft/derived/review/v1/out/rig/rig.json +102 -0
- package/templates/example-draft/derived/review/v1/out/rig/run.json +52 -0
- package/templates/example-draft/derived/review/v2/config.json +71 -0
- package/templates/example-draft/derived/review/v2/interview-requirements.json +8 -0
- package/templates/example-draft/derived/review/v2/out/check/build/run.json +40 -0
- package/templates/example-draft/derived/review/v2/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/derived/review/v2/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/derived/review/v2/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/derived/review/v2/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/background.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/eye_l.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/eye_r.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/face.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/lantern.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts/torso.png +0 -0
- package/templates/example-draft/derived/review/v2/out/parts.json +188 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/background.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/eye_l.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/eye_r.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/face.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/lantern.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/images/torso.png +0 -0
- package/templates/example-draft/derived/review/v2/out/rig/mesh_report.json +1 -0
- package/templates/example-draft/derived/review/v2/out/rig/motion.json +137 -0
- package/templates/example-draft/derived/review/v2/out/rig/rig.json +102 -0
- package/templates/example-draft/derived/review/v2/out/rig/run.json +52 -0
- package/templates/example-draft/evidence/diff-components.json +71 -0
- package/templates/example-draft/evidence/direction/v4.json +64 -0
- package/templates/example-draft/evidence/direction-input-v4.json +64 -0
- package/templates/example-draft/evidence/fix-ledger/lantern.json +17 -0
- package/templates/example-draft/evidence/parts-check.json +127 -0
- package/templates/example-draft/evidence/parts-review.json +88 -0
- package/templates/example-draft/evidence/review-reads/4ed0507381809746443021554e012032be5b5f8417da0f2e525e9b6df16e9f05.json +59 -0
- package/templates/example-draft/evidence/scene/s1.json +65 -0
- package/templates/example-draft/evidence/scene-background.png +0 -0
- package/templates/example-draft/evidence/scene-citations.json +9 -0
- package/templates/example-draft/evidence/structure-decisions.json +9 -0
- package/templates/example-draft/evidence/v1/interview-config.json +71 -0
- package/templates/example-draft/evidence/v1/interview-requirements.json +8 -0
- package/templates/example-draft/evidence/v1/review-config.json +71 -0
- package/templates/example-draft/evidence/v2/interview-config.json +71 -0
- package/templates/example-draft/evidence/v2/interview-requirements.json +8 -0
- package/templates/example-draft/evidence/v2/review-config.json +71 -0
- package/templates/example-draft/input/painting_in_rig.png +0 -0
- package/templates/example-draft/input/parts/background.png +0 -0
- package/templates/example-draft/input/parts/eye_l.png +0 -0
- package/templates/example-draft/input/parts/eye_r.png +0 -0
- package/templates/example-draft/input/parts/face.png +0 -0
- package/templates/example-draft/input/parts/lantern.png +0 -0
- package/templates/example-draft/input/parts/torso.png +0 -0
- package/templates/example-draft/input/parts.json +188 -0
- package/templates/example-draft/input/recomposite_rig.png +0 -0
- package/templates/example-draft/inputs/painting.png +0 -0
- package/templates/example-draft/interview-requirements.json +8 -0
- package/templates/example-draft/out/check/build/run.json +40 -0
- package/templates/example-draft/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/out/images/background.png +0 -0
- package/templates/example-draft/out/images/eye_l.png +0 -0
- package/templates/example-draft/out/images/eye_r.png +0 -0
- package/templates/example-draft/out/images/face.png +0 -0
- package/templates/example-draft/out/images/lantern.png +0 -0
- package/templates/example-draft/out/images/torso.png +0 -0
- package/templates/example-draft/out/mesh_report.json +1 -0
- package/templates/example-draft/out/motion.json +137 -0
- package/templates/example-draft/out/rig.json +102 -0
- package/templates/example-draft/out/run.json +52 -0
- package/templates/example-draft/outputs/v1/out/check/build/run.json +40 -0
- package/templates/example-draft/outputs/v1/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/outputs/v1/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/outputs/v1/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/outputs/v1/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/outputs/v1/out/painting_in_rig.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/background.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/eye_l.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/eye_r.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/face.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/lantern.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts/torso.png +0 -0
- package/templates/example-draft/outputs/v1/out/parts.json +188 -0
- package/templates/example-draft/outputs/v1/out/rig/images/background.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/images/eye_l.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/images/eye_r.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/images/face.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/images/lantern.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/images/torso.png +0 -0
- package/templates/example-draft/outputs/v1/out/rig/mesh_report.json +1 -0
- package/templates/example-draft/outputs/v1/out/rig/motion.json +137 -0
- package/templates/example-draft/outputs/v1/out/rig/rig.json +102 -0
- package/templates/example-draft/outputs/v1/out/rig/run.json +52 -0
- package/templates/example-draft/outputs/v2/out/check/build/run.json +40 -0
- package/templates/example-draft/outputs/v2/out/check/build/skeleton.atlas +28 -0
- package/templates/example-draft/outputs/v2/out/check/build/skeleton.json +193 -0
- package/templates/example-draft/outputs/v2/out/check/build/skeleton.model.json +483 -0
- package/templates/example-draft/outputs/v2/out/check/build/skeleton.png +0 -0
- package/templates/example-draft/outputs/v2/out/painting_in_rig.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/background.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/eye_l.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/eye_r.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/face.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/lantern.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts/torso.png +0 -0
- package/templates/example-draft/outputs/v2/out/parts.json +188 -0
- package/templates/example-draft/outputs/v2/out/rig/images/background.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/images/eye_l.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/images/eye_r.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/images/face.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/images/lantern.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/images/torso.png +0 -0
- package/templates/example-draft/outputs/v2/out/rig/mesh_report.json +1 -0
- package/templates/example-draft/outputs/v2/out/rig/motion.json +137 -0
- package/templates/example-draft/outputs/v2/out/rig/rig.json +102 -0
- package/templates/example-draft/outputs/v2/out/rig/run.json +52 -0
- package/templates/example-interview-choice.json +1068 -0
- package/templates/example-interview-options/constraint.json +376 -0
- package/templates/example-interview-options/example-assemble.json +376 -0
- package/templates/example-interview-options/example-bones.json +190 -0
- package/templates/example-interview-options/example-camera-depth.json +99 -0
- package/templates/example-interview-options/example-constraints.json +272 -0
- package/templates/example-interview-options/example-meshes.json +190 -0
- package/templates/example-interview-options/example-motion.json +272 -0
- package/templates/example-interview-options/example-picks.json +15 -0
- package/templates/example-interview-options/example-post-composition.json +110 -0
- package/templates/example-interview-options/example-post-timing.json +105 -0
- package/templates/example-interview-options/example-reference.json +63 -0
- package/templates/example-interview-options/example-rig-type.json +63 -0
- package/templates/example-interview-options/example-seethrough.json +190 -0
- package/templates/example-interview-options/fullscreen.json +63 -0
- package/templates/example-interview-options/other-explicit.json +63 -0
- package/templates/example-interview-options/other-pending.json +63 -0
- package/templates/example-interview-options/other-picks.json +16 -0
- package/templates/example-interview.md +213 -0
- package/templates/example-invariants/invariants.json +1339 -0
- package/templates/example-prepared/prepared.svg +1 -0
- package/templates/example-prepared/source.svg +1 -0
- package/templates/example-project.json +4259 -0
- package/templates/example-remesh/AGENTS.md +134 -0
- package/templates/example-remesh/CLAUDE.md +3 -0
- package/templates/example-remesh/evidence/.gitkeep +0 -0
- package/templates/example-remesh/evidence/approval.txt +1 -0
- package/templates/example-remesh/evidence/captions.json +101 -0
- package/templates/example-remesh/evidence/diff-components.json +34 -0
- package/templates/example-remesh/evidence/direction/v4.json +74 -0
- package/templates/example-remesh/evidence/direction/v5.json +74 -0
- package/templates/example-remesh/evidence/direction-input-v4.json +74 -0
- package/templates/example-remesh/evidence/direction-input-v5.json +74 -0
- package/templates/example-remesh/evidence/interview/assemble.json +309 -0
- package/templates/example-remesh/evidence/interview/bones.json +190 -0
- package/templates/example-remesh/evidence/interview/camera_depth.json +103 -0
- package/templates/example-remesh/evidence/interview/constraints.json +272 -0
- package/templates/example-remesh/evidence/interview/meshes.json +190 -0
- package/templates/example-remesh/evidence/interview/motion.json +272 -0
- package/templates/example-remesh/evidence/interview/post_composition.json +123 -0
- package/templates/example-remesh/evidence/interview/post_timing.json +103 -0
- package/templates/example-remesh/evidence/interview/reference.json +59 -0
- package/templates/example-remesh/evidence/interview/rig_type.json +59 -0
- package/templates/example-remesh/evidence/interview/seethrough.json +186 -0
- package/templates/example-remesh/evidence/parts-check.json +127 -0
- package/templates/example-remesh/evidence/parts-review.json +88 -0
- package/templates/example-remesh/evidence/reopen.txt +1 -0
- package/templates/example-remesh/evidence/review-reads/6a17db694db96f1b6049a61a017e0c8e66757b982b8851e0187e561cfcf9af68.json +59 -0
- package/templates/example-remesh/evidence/scene/s1.json +69 -0
- package/templates/example-remesh/evidence/scene-citations.json +9 -0
- package/templates/example-remesh/evidence/setup.png +0 -0
- package/templates/example-remesh/evidence/split-config.json +1 -0
- package/templates/example-remesh/evidence/structure.json +30 -0
- package/templates/example-remesh/evidence/v1/registration/at-source.json +44 -0
- package/templates/example-remesh/evidence/v1/registration/citations.json +68 -0
- package/templates/example-remesh/evidence/v1/registration/compile-report.json +368 -0
- package/templates/example-remesh/evidence/v1/registration/config-source.json +88 -0
- package/templates/example-remesh/evidence/v1/registration/config.json +88 -0
- package/templates/example-remesh/evidence/v1/registration/interview-requirements.json +8 -0
- package/templates/example-remesh/evidence/v1/registration/package-lock.json +11 -0
- package/templates/example-remesh/evidence/v1/registration/path-adapter.json +1 -0
- package/templates/example-remesh/evidence/v1/registration/rigc-run-1.json +44 -0
- package/templates/example-remesh/evidence/v2/registration/at-source.json +44 -0
- package/templates/example-remesh/evidence/v2/registration/citations.json +68 -0
- package/templates/example-remesh/evidence/v2/registration/compile-report.json +368 -0
- package/templates/example-remesh/evidence/v2/registration/config-source.json +88 -0
- package/templates/example-remesh/evidence/v2/registration/config.json +88 -0
- package/templates/example-remesh/evidence/v2/registration/interview-requirements.json +8 -0
- package/templates/example-remesh/evidence/v2/registration/package-lock.json +11 -0
- package/templates/example-remesh/evidence/v2/registration/path-adapter.json +1 -0
- package/templates/example-remesh/evidence/v2/registration/rigc-run-1.json +44 -0
- package/templates/example-remesh/evidence/v3/registration/at-source.json +44 -0
- package/templates/example-remesh/evidence/v3/registration/citations.json +68 -0
- package/templates/example-remesh/evidence/v3/registration/compile-report.json +368 -0
- package/templates/example-remesh/evidence/v3/registration/config-source.json +88 -0
- package/templates/example-remesh/evidence/v3/registration/config.json +88 -0
- package/templates/example-remesh/evidence/v3/registration/interview-requirements.json +8 -0
- package/templates/example-remesh/evidence/v3/registration/package-lock.json +11 -0
- package/templates/example-remesh/evidence/v3/registration/path-adapter.json +1 -0
- package/templates/example-remesh/evidence/v3/registration/rigc-run-1.json +44 -0
- package/templates/example-remesh/inputs/background.png +0 -0
- package/templates/example-remesh/inputs/painting.png +0 -0
- package/templates/example-remesh/inputs/references/.gitkeep +0 -0
- package/templates/example-remesh/package.json +9 -0
- package/templates/example-remesh/project.json +3916 -0
- package/templates/example-reopened/project.json +4568 -0
- package/templates/example-review/config.json +1 -0
- package/templates/example-review/out/check/build/skeleton.model.json +1 -0
- package/templates/example-review/out/parts/piece.svg +1 -0
- package/templates/example-review/out/parts.json +1 -0
- package/templates/example-review/out/rig/mesh_report.json +1 -0
- package/templates/example-review/out/rig/motion.json +1 -0
- package/templates/example-review/out/rig/rig.json +1 -0
- package/templates/example-split/captions.json +357 -0
- package/templates/example-split/config.json +215 -0
- package/templates/legacy-example-project.json +1071 -0
- package/templates/project.json +199 -0
- package/templates/shared/conventions.json +23 -0
package/docs/SOURCE.md
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Source: the layer split and the cut
|
|
2
|
+
|
|
3
|
+
Most bounces are decided before a bone exists: at the layer split (See-through)
|
|
4
|
+
and at the cut. This page is what to do there, in what order, and why. Read it
|
|
5
|
+
before `seethrough` and before `assemble`.
|
|
6
|
+
|
|
7
|
+
It is the working order, not the machine contract. The contract — which fields,
|
|
8
|
+
which lines `assemble` prints, which refusals fire — is in rig-c/parts
|
|
9
|
+
[AUTHORING.md](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md)
|
|
10
|
+
and its [README](https://github.com/rig-c/parts/blob/v2.37.0/README.md), linked
|
|
11
|
+
here at the version a new project pins (2.37.0) and not copied. In a project, read
|
|
12
|
+
the same files under `node_modules/@rig-c/parts/`.
|
|
13
|
+
|
|
14
|
+
Every rule carries its source: a parts section, an owner ruling with its date,
|
|
15
|
+
or a pilot measurement with its date.
|
|
16
|
+
|
|
17
|
+
## The order
|
|
18
|
+
|
|
19
|
+
1. [Upscale a small source](#upscale-a-small-source-first), before it goes into
|
|
20
|
+
`inputs/`.
|
|
21
|
+
2. [Run the split twice](#two-passes-the-whole-figure-then-the-head): the whole
|
|
22
|
+
figure, then the head.
|
|
23
|
+
3. [Check the split](#look-at-the-split-before-calling-it-good): pairs, hidden
|
|
24
|
+
surface, doubled outlines, specks and holes.
|
|
25
|
+
4. [Re-run first](#re-run-first) when it is bad. Several runs before any cut.
|
|
26
|
+
5. [Cut only for structure](#where-a-cut-is-allowed), and at a limb only at its
|
|
27
|
+
joint.
|
|
28
|
+
6. [Edit in the image editor, with a receipt](#the-editor-rung), when re-runs
|
|
29
|
+
cannot fix a visible-pixel defect.
|
|
30
|
+
7. [Check density](#density-the-split-against-the-rig) and
|
|
31
|
+
[mixed sources](#mixed-sources) before `assemble` is called done.
|
|
32
|
+
|
|
33
|
+
## The layer split
|
|
34
|
+
|
|
35
|
+
### Upscale a small source first
|
|
36
|
+
|
|
37
|
+
A painting smaller than the rig needs is upscaled before the split, with a 4x
|
|
38
|
+
anime upscaler: the RGB upscaled on a black matte, the alpha upscaled separately
|
|
39
|
+
as grey, then the two recombined un-premultiplied and alpha below 8 clipped to 0.
|
|
40
|
+
A painting already in `inputs/` gets its upscale as a new input; inputs are never
|
|
41
|
+
edited.
|
|
42
|
+
|
|
43
|
+
- **Why**: See-through and every later stage can only lose detail. Upscaling RGB
|
|
44
|
+
and alpha apart keeps the matte colour out of the edge, which an upscale of the
|
|
45
|
+
composited image does not.
|
|
46
|
+
- **A light fringe is not from such an upscale.** When a light halo shows along
|
|
47
|
+
an edge, look for a step later in the chain that flattened the image on white.
|
|
48
|
+
- *Source*: owner ruling, 2026-10-29/31 (recipe); pilot measurement, 2026-11-03
|
|
49
|
+
(the fringe).
|
|
50
|
+
|
|
51
|
+
### Two passes: the whole figure, then the head
|
|
52
|
+
|
|
53
|
+
Run See-through on the whole figure (`st_input_full.png`), then on the head crop
|
|
54
|
+
on its own (`st_input_head.png`, cut by `rig-parts inputs` from
|
|
55
|
+
`seethrough.head_box`).
|
|
56
|
+
|
|
57
|
+
- **Why**: on every route that was read, the model's own head stage pastes the
|
|
58
|
+
face back at the full run's pixel density. The separate head run is what gives
|
|
59
|
+
the eyes their pixels.
|
|
60
|
+
- *Source*: parts AUTHORING
|
|
61
|
+
[*See-through head-run source reading*](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md#see-through-head-run-source-reading);
|
|
62
|
+
the routes in the parts README,
|
|
63
|
+
[*Getting See-through layers*](https://github.com/rig-c/parts/blob/v2.37.0/README.md#getting-see-through-layers).
|
|
64
|
+
|
|
65
|
+
### Resolution: check the memory first
|
|
66
|
+
|
|
67
|
+
Read the model's memory requirement before raising the run's `resolution`. "The
|
|
68
|
+
wrapper accepts it" is not "it fits": a 2048 run needs about 24 GB. Do not raise
|
|
69
|
+
the full run's resolution to buy face detail; the face gets its density from the
|
|
70
|
+
head pass.
|
|
71
|
+
|
|
72
|
+
- **Why**: a run that does not fit fails or falls back silently, and the time is
|
|
73
|
+
lost either way; the head pass already does what the higher resolution was for.
|
|
74
|
+
- *Source*: owner ruling, 2026-10-29/31; pilot measurement, 2026-11-03.
|
|
75
|
+
|
|
76
|
+
### Look at the split before calling it good
|
|
77
|
+
|
|
78
|
+
Before `assemble`, on the raw layers:
|
|
79
|
+
|
|
80
|
+
- **Pairs** (left/right bust, eyes, hair ends, hem panels): both present,
|
|
81
|
+
comparable area, mirrored edge placement, measured on the layers and compared
|
|
82
|
+
with the same measure on the painting, so an asymmetry the painting has is not
|
|
83
|
+
flagged ([CRAFT.md G8](CRAFT.md#for-the-gates-not-the-interview)).
|
|
84
|
+
- **Hidden surface**: under every part that will move over another, the part
|
|
85
|
+
behind is painted (amodal), not empty.
|
|
86
|
+
- **No doubled outline**: an edge drawn twice, once on each of two layers, is a
|
|
87
|
+
ghost.
|
|
88
|
+
- **Specks and holes**, counted on each layer PNG straight out of See-through, on
|
|
89
|
+
a sentinel colour ([LESSONS.md](LESSONS.md#specks-and-holes-in-the-split-layers),
|
|
90
|
+
[CRAFT.md G9](CRAFT.md#for-the-gates-not-the-interview)).
|
|
91
|
+
- **Why**: every one of these is cheaper to fix here than after `assemble`,
|
|
92
|
+
where it is mixed with cut and draw-order effects.
|
|
93
|
+
- *Source*: owner ruling, 2026-10-29/31; owner ruling, 2026-11-03 (specks and
|
|
94
|
+
holes).
|
|
95
|
+
|
|
96
|
+
### Re-run first
|
|
97
|
+
|
|
98
|
+
When the split is bad — an uneven pair, a poor hidden surface behind an arm, a
|
|
99
|
+
ghost, specks or holes — re-run before anything else, and record what each run
|
|
100
|
+
measured:
|
|
101
|
+
|
|
102
|
+
1. another layer or run: `full` versus `head`, another tag, `assemble.alternates`;
|
|
103
|
+
2. a tighter crop pass of the bad region, on its own;
|
|
104
|
+
3. other settings (a resolution that fits in memory, another run of the same input).
|
|
105
|
+
|
|
106
|
+
Several runs are cheaper than one bounce. Only when re-runs cannot fix a
|
|
107
|
+
visible-pixel defect does the [editor rung](#the-editor-rung) come next.
|
|
108
|
+
|
|
109
|
+
- **Why**: a defect in the split is a source problem, and a source problem
|
|
110
|
+
patched downstream comes back at every motion extreme.
|
|
111
|
+
- *Source*: parts AUTHORING
|
|
112
|
+
[*Source before scissors*](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md#source-before-scissors)
|
|
113
|
+
(the repair ladder: another layer or run, a re-run, then config); owner ruling,
|
|
114
|
+
2026-10-29/31 (re-run first, several runs before a cut).
|
|
115
|
+
|
|
116
|
+
## Cutting
|
|
117
|
+
|
|
118
|
+
### Where a cut is allowed
|
|
119
|
+
|
|
120
|
+
**Scissors are for structure, never for repair.** A cut (`assemble.cuts`, a patch,
|
|
121
|
+
an `author:<label>` layer) is admitted only to separate something that must move
|
|
122
|
+
or draw on its own and has no layer:
|
|
123
|
+
|
|
124
|
+
- a joint (an arm or a leg, [below](#at-a-limb-joint));
|
|
125
|
+
- an accessory still inside its parent's layer;
|
|
126
|
+
- a rear piece that needs its own draw position;
|
|
127
|
+
- **a draw-order split**: two arms on opposite sides of a held object are
|
|
128
|
+
separate parts, even though they never move apart.
|
|
129
|
+
|
|
130
|
+
A tear, ghost, smudge, stray outline or seam is repaired from the source (the
|
|
131
|
+
[re-run ladder](#re-run-first)), never by a cut-out or an under-piece. No hand
|
|
132
|
+
polygon where the piece has no material past its joint: no source means stop and
|
|
133
|
+
name the gap.
|
|
134
|
+
|
|
135
|
+
- **Why**: a polygon cut supplies no material for the turn it is meant to allow,
|
|
136
|
+
so it tears at the edge in motion; a cut over a defect hides it at rest and
|
|
137
|
+
shows it moving.
|
|
138
|
+
- *Source*: parts AUTHORING
|
|
139
|
+
[*Source before scissors*](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md#source-before-scissors)
|
|
140
|
+
(scissors for structure, the cases a cut fits, no material past the joint) and
|
|
141
|
+
its paragraph *A layer the author made*; owner ruling, 2026-10-29/31; pilot
|
|
142
|
+
measurement, 2026-11-03 (the draw-order split).
|
|
143
|
+
|
|
144
|
+
### At a limb joint
|
|
145
|
+
|
|
146
|
+
At an arm or leg joint, and only there: cut in the image editor and round the
|
|
147
|
+
seam with its smudge tool. The limb is still separate rigid parts, one bone each;
|
|
148
|
+
it is never one mesh bent across the joint (`LIMB_ONE_BONE`).
|
|
149
|
+
|
|
150
|
+
- **Why**: a limb cut anywhere else, or bent as one mesh, shows a straight edge
|
|
151
|
+
or a grotesque bend.
|
|
152
|
+
- *Source*: parts AUTHORING
|
|
153
|
+
[*Limbs: cut at their joints*](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md#limbs-cut-at-their-joints-limbs-issue-349);
|
|
154
|
+
[CRAFT.md A2](CRAFT.md#a2-limbs-that-bend-are-cut-at-the-joint-and-rounded);
|
|
155
|
+
owner ruling, 2026-10-29/31.
|
|
156
|
+
|
|
157
|
+
### The editor rung
|
|
158
|
+
|
|
159
|
+
The rung after re-runs: a piece taken from the painting along its painted
|
|
160
|
+
outlines, in an image editor, with See-through's own alpha loaded as the
|
|
161
|
+
selection where no line is painted. Refine the edge with a slight outward shift
|
|
162
|
+
and feather 0. Missing material: content-aware fill, clone stamp, healing brush.
|
|
163
|
+
Every edit leaves a receipt: the commands, the input and output hashes, and a
|
|
164
|
+
layered file saved beside the PNG.
|
|
165
|
+
|
|
166
|
+
**Never a polygon in code or config, and never a per-pixel repair in code.**
|
|
167
|
+
See-through stays the source for hidden surface.
|
|
168
|
+
|
|
169
|
+
One exception covers step-4 plates only: a receipted generative plate pass from a
|
|
170
|
+
package command is a source, not a repair. The parts plate command removes the
|
|
171
|
+
figure from the background, or mattes the foreground, using a mask from a source
|
|
172
|
+
(See-through figure layers or the declared figure mask). Its
|
|
173
|
+
`rig-parts-plate-receipt/1` receipt records the painting, mask, model, every
|
|
174
|
+
parameter, the GPU and the output by hash. Character parts and joints never take
|
|
175
|
+
this route.
|
|
176
|
+
|
|
177
|
+
Measured limits:
|
|
178
|
+
|
|
179
|
+
- an anti-aliased edge that sits inward reads light on white; the outward shift
|
|
180
|
+
fixes it;
|
|
181
|
+
- a fill holds flat colour but does not continue an outline.
|
|
182
|
+
|
|
183
|
+
- **Why**: an edit with a receipt can be checked and redone; a scripted edit
|
|
184
|
+
cannot be told from a defect ([CRAFT.md G6, G7](CRAFT.md#for-the-gates-not-the-interview)).
|
|
185
|
+
- *Source*: owner ruling, 2026-10-29/31 (editor and receipt, the fill limit);
|
|
186
|
+
pilot measurement, 2026-11-03 (outline selection, alpha where no line, shift
|
|
187
|
+
outward, feather 0, the inward-edge limit).
|
|
188
|
+
|
|
189
|
+
### Feather only continuous skin
|
|
190
|
+
|
|
191
|
+
Feather a cut face only on continuous skin (a bare arm below a short sleeve);
|
|
192
|
+
keep a designed cut face (a cuff, an armour plate) crisp.
|
|
193
|
+
|
|
194
|
+
- *Source*: [CRAFT.md A3](CRAFT.md#a3-soften-a-cut-through-skin-not-a-designed-edge);
|
|
195
|
+
owner ruling, 2026-10-29/31.
|
|
196
|
+
|
|
197
|
+
## Density: the split against the rig
|
|
198
|
+
|
|
199
|
+
When the split's canvas is coarser than the rig, every split layer is upscaled
|
|
200
|
+
into the rig and reads softer than the painting. Measure the edge rise width
|
|
201
|
+
(10–90 % of the step, across an outline) on the parts and on the painting at the
|
|
202
|
+
same place. A rig scale near the guide value (parts AUTHORING, `assemble.rig_scale`
|
|
203
|
+
in [*`config.json`, field by field*](https://github.com/rig-c/parts/blob/v2.37.0/docs/AUTHORING.md#3-configjson-field-by-field):
|
|
204
|
+
the figure about 1,100 to 1,200 rig px tall) can close it. When the guide value
|
|
205
|
+
is at least as good on every figure measured, the guide value wins.
|
|
206
|
+
|
|
207
|
+
- **Why**: softness is not a seam, so no bar reads it, and it shows only beside
|
|
208
|
+
the painting.
|
|
209
|
+
- *Source*: pilot measurement, 2026-11-03.
|
|
210
|
+
|
|
211
|
+
## Mixed sources
|
|
212
|
+
|
|
213
|
+
When a plan mixes runs (`full` and `head`), keep every run's manifest
|
|
214
|
+
(`layers.json`) entries listed, including the entries the plan does not take from
|
|
215
|
+
that run. Do not unlist the other run's copies of those regions.
|
|
216
|
+
|
|
217
|
+
- **Why**: an entry that no planned part takes still holds depth ownership
|
|
218
|
+
(`pixelOwners`) in its run, which stops a neighbouring planned part from
|
|
219
|
+
claiming its pixels. Measured on a pilot (`full` + `head`, same layer PNGs byte
|
|
220
|
+
for byte), unlisting the unused entries changed 12 of 24 planned parts (`face`
|
|
221
|
+
5,424 px, `hair_back` 2,679 px, `neck` 1,575 px, `hair_front` 402 px, and 8
|
|
222
|
+
parts under 100 px) and baked the face and eyes into the back hair, hair
|
|
223
|
+
strands into the face, and the chin line into the neck; with the entries kept
|
|
224
|
+
listed, all three were clean.
|
|
225
|
+
- *Source*: pilot measurement, 2026-11-07.
|
package/package.json
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rig-c/create",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"description": "
|
|
6
|
-
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Create a rig project: its folder, decision record, repository and pinned rig-c packages",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"files": [
|
|
8
|
+
"src/",
|
|
9
|
+
"templates/",
|
|
10
|
+
"README.md",
|
|
11
|
+
"LICENSE",
|
|
12
|
+
"docs/PROJECT.md",
|
|
13
|
+
"docs/INTERVIEW.md",
|
|
14
|
+
"docs/CHECKS.md",
|
|
15
|
+
"docs/COLLECTIONS.md",
|
|
16
|
+
"docs/CRAFT.md",
|
|
17
|
+
"docs/SOURCE.md",
|
|
18
|
+
"docs/LESSONS.md"
|
|
19
|
+
],
|
|
20
|
+
"bin": {
|
|
21
|
+
"rig-create": "src/cli.ts"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"lint": "eslint .",
|
|
26
|
+
"test": "bun test"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@rig-c/core": "3.7.0",
|
|
30
|
+
"@rig-c/parts": "2.37.0",
|
|
31
|
+
"@rig-c/review": "4.0.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/bun": "^1.3.0",
|
|
35
|
+
"eslint": "^10.11.0",
|
|
36
|
+
"typescript": "^5.9.3",
|
|
37
|
+
"typescript-eslint": "^8.70.1"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"bun": ">=1.4.0"
|
|
41
|
+
},
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git+https://github.com/rig-c/create.git"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { asArray, collectionQuestion, isObject, type Ctx } from './check.ts';
|
|
2
|
+
import { AGENT_BOUNCE_SINCE } from './stages.ts';
|
|
3
|
+
import type { JsonObject } from './templates.ts';
|
|
4
|
+
|
|
5
|
+
/** A mid-step rejection is history, separate from human version verdicts. */
|
|
6
|
+
export function checkAgentBounces(ctx: Ctx): void {
|
|
7
|
+
const records = new Map<string, JsonObject>();
|
|
8
|
+
for (const item of ctx.items) {
|
|
9
|
+
records.set(item.path.replace(/\.(answer|guide)$/, ''), item.record);
|
|
10
|
+
if (isObject(item.raw) && item.raw.basis === 'inherited' && isObject(item.raw.from) && typeof item.raw.from.question === 'string' && ctx.collection !== null) {
|
|
11
|
+
const question = collectionQuestion(ctx.collection, item.raw.from.question);
|
|
12
|
+
if (question !== undefined) records.set(`collection.interview[${item.raw.from.question}]`, question);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
for (const [base, record] of records) asArray(record.history).forEach((entry, i) => {
|
|
16
|
+
if (!isObject(entry) || !('bounce' in entry)) return;
|
|
17
|
+
const bounce = entry.bounce;
|
|
18
|
+
if (isObject(bounce) && bounce.cause === 'agent' && ['failed', 'bar', 'replacement'].every((k) => typeof bounce[k] === 'string' && (bounce[k] as string).trim() !== '')) return;
|
|
19
|
+
const at = typeof entry.at === 'string' ? Date.parse(entry.at) : Number.NaN;
|
|
20
|
+
const legacy = !Number.isFinite(at) || at < Date.parse(AGENT_BOUNCE_SINCE);
|
|
21
|
+
const path = `${base}.history[${i}].bounce`;
|
|
22
|
+
(legacy ? ctx.warnings : ctx.refusals).push({
|
|
23
|
+
code: legacy ? 'AGENT_BOUNCE_LEGACY' : 'AGENT_BOUNCE_MALFORMED', path,
|
|
24
|
+
message: `${path}: needs { cause: 'agent', failed, bar, replacement } with non-empty text${legacy ? `; history entry predates ${AGENT_BOUNCE_SINCE} or has no readable at; kept as legacy` : ''}`,
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
2
|
+
import { readFileSync } from './check-reads.ts';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
|
|
5
|
+
import { PINNED_PACKAGES } from './pins.ts';
|
|
6
|
+
import { TEMPLATES_DIR } from './templates.ts';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* create's own docs are linked on GitHub at `main`: create is not installed in
|
|
10
|
+
* a project, it has no published version or tag to pin to, and init already
|
|
11
|
+
* points at `main` for the interview (init.ts). A commit pin would send every
|
|
12
|
+
* new project to docs that were already stale when it was made.
|
|
13
|
+
*/
|
|
14
|
+
export const CREATE_DOCS_BASE = 'https://github.com/rig-c/create/blob/main/';
|
|
15
|
+
|
|
16
|
+
export type PinnedPackage = keyof typeof PINNED_PACKAGES;
|
|
17
|
+
|
|
18
|
+
export interface PackageDoc {
|
|
19
|
+
package: PinnedPackage;
|
|
20
|
+
/** Path inside the installed package, as `npm pack --dry-run` lists it. */
|
|
21
|
+
path: string;
|
|
22
|
+
/** Why and when to read it. Says what the document is for, never what it says. */
|
|
23
|
+
why: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The installed packages' documents the guide links, checked against the files
|
|
28
|
+
* each pinned version ships (`npm pack --dry-run`). A pin bump is an edit here,
|
|
29
|
+
* and the network test fails if a listed path is not in the installed package.
|
|
30
|
+
*
|
|
31
|
+
* Shipped but left out on purpose:
|
|
32
|
+
* - core `docs/PROMPTING.md`: written for the person operating an agent; it
|
|
33
|
+
* says the agent should read AUTHORING.md instead.
|
|
34
|
+
* - core `docs/SPEC_COVERAGE.md`: core's AUTHORING.md calls it not an
|
|
35
|
+
* authoring input and leaves it unlinked.
|
|
36
|
+
*/
|
|
37
|
+
export const PACKAGE_DOCS: readonly PackageDoc[] = [
|
|
38
|
+
{
|
|
39
|
+
package: '@rig-c/parts',
|
|
40
|
+
path: 'README.md',
|
|
41
|
+
why: 'painting-to-rig pipeline and command order',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
package: '@rig-c/parts',
|
|
45
|
+
path: 'docs/AUTHORING.md',
|
|
46
|
+
why: 'config fields, interview waypoints and refusal remedies',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
package: '@rig-c/parts',
|
|
50
|
+
path: 'docs/PAINTING.md',
|
|
51
|
+
why: 'what makes a painting riggable, and the check to run on it before See-through',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
package: '@rig-c/parts',
|
|
55
|
+
path: 'docs/DEPTH.md',
|
|
56
|
+
why: 'when the plan has a head turn driven by depth',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
package: '@rig-c/parts',
|
|
60
|
+
path: 'docs/STABILITY.md',
|
|
61
|
+
why: 'stable commands, fields and outputs',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
package: '@rig-c/parts',
|
|
65
|
+
path: 'docs/MIGRATION.md',
|
|
66
|
+
why: 'only when the pinned version is bumped',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
package: '@rig-c/core',
|
|
70
|
+
path: 'README.md',
|
|
71
|
+
why: 'rigc scope, commands and documentation',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
package: '@rig-c/core',
|
|
75
|
+
path: 'docs/AUTHORING.md',
|
|
76
|
+
why: 'rig/motion formats, build loop and failure remedies',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
package: '@rig-c/core',
|
|
80
|
+
path: 'docs/RIGGING.md',
|
|
81
|
+
why: 'bones and pivots at the bones waypoint',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
package: '@rig-c/core',
|
|
85
|
+
path: 'docs/MOTION.md',
|
|
86
|
+
why: 'key-pose motions at the motion waypoint',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
package: '@rig-c/core',
|
|
90
|
+
path: 'docs/FACE.md',
|
|
91
|
+
why: 'blink, gaze and head-turn plans',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
package: '@rig-c/core',
|
|
95
|
+
path: 'docs/INGEST.md',
|
|
96
|
+
why: 'only when you were handed a skeleton this project did not author',
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
export interface CreateDoc {
|
|
101
|
+
/** Path in the rig-c/create repository. */
|
|
102
|
+
path: string;
|
|
103
|
+
why: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const CREATE_DOCS: readonly CreateDoc[] = [
|
|
107
|
+
{
|
|
108
|
+
path: 'docs/PROJECT.md',
|
|
109
|
+
why: 'the folder, stages and sign-offs, the plan, versions, and `project.json` field by field',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
path: 'docs/INTERVIEW.md',
|
|
113
|
+
why: 'how to ask, and the shape every answer, delegation and piece of feedback takes',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
path: 'docs/CRAFT.md',
|
|
117
|
+
why: 'the default to propose at each waypoint',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
path: 'docs/COLLECTIONS.md',
|
|
121
|
+
why: 'when this project is a member of a collection',
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
/** Links into create's docs that carry an anchor; the tests check each anchor is a heading. */
|
|
126
|
+
export const RESUME_LINK = { path: 'docs/PROJECT.md', anchor: 'how-an-agent-resumes-a-project' } as const;
|
|
127
|
+
export const DERIVED_LINK = { path: 'docs/INTERVIEW.md', anchor: 'derived-answers' } as const;
|
|
128
|
+
export const GATES_LINK = { path: 'docs/CRAFT.md', anchor: 'for-the-gates-not-the-interview' } as const;
|
|
129
|
+
export const DRAFTS_LINK = { path: 'docs/PROJECT.md', anchor: 'labelled-draft-rigs-and-structure-decisions' } as const;
|
|
130
|
+
export const STAGES_LINK = { path: 'docs/PROJECT.md', anchor: 'stages' } as const;
|
|
131
|
+
export const LIFETIME_LINK = { path: 'docs/PROJECT.md', anchor: 'data-is-split-by-lifetime' } as const;
|
|
132
|
+
export const INTAKE_LINK = { path: 'docs/PROJECT.md', anchor: 'advisory-intake-reports' } as const;
|
|
133
|
+
export const CG_GATES_LINK = { path: 'docs/CHECKS.md', anchor: 'cg-gates' } as const;
|
|
134
|
+
export const APPEARANCE_LINK = { path: 'docs/CHECKS.md', anchor: 'appearance-bar-wording' } as const;
|
|
135
|
+
export const BUST_LINK = { path: 'docs/CHECKS.md', anchor: 'the-bust-at-meshes' } as const;
|
|
136
|
+
export const PROJECTION_LINK = { path: 'docs/CHECKS.md', anchor: 'projection-and-ground' } as const;
|
|
137
|
+
/** The heading is "Parts-stage check at the parts → parts-review move": the arrow drops, leaving two hyphens. */
|
|
138
|
+
export const PARTS_CHECK_LINK = { path: 'docs/CHECKS.md', anchor: 'parts-stage-check-at-the-parts--parts-review-move' } as const;
|
|
139
|
+
|
|
140
|
+
/** The refusals `advance parts-review --parts-check` can give, all in one CHECKS.md table. */
|
|
141
|
+
export const PARTS_CHECK_CODES = ['MISSING', 'UNREAD', 'INVALID', 'CHANGED', 'FAILED', 'STALE'].map((c) => `PARTS_CHECK_${c}`);
|
|
142
|
+
|
|
143
|
+
export function createDocUrl(path: string, anchor?: string): string {
|
|
144
|
+
return `${CREATE_DOCS_BASE}${path}${anchor === undefined ? '' : `#${anchor}`}`;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function createLink(label: string, path: string, anchor?: string): string {
|
|
148
|
+
return `[${label}](${createDocUrl(path, anchor)})`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The one ordered entry point (rig-c/create#24): what to read before each step,
|
|
153
|
+
* naming the page and the section. create's pages are absolute links (create is
|
|
154
|
+
* not installed in a project); the parts and core sections are named, not
|
|
155
|
+
* linked, because the package links below are exactly PACKAGE_DOCS.
|
|
156
|
+
*/
|
|
157
|
+
export const READ_FIRST = [
|
|
158
|
+
'1. **Before the interview**: INTERVIEW.md, and CRAFT.md for the default at each',
|
|
159
|
+
' waypoint (both linked below); parts AUTHORING §3, *`config.json`, field by',
|
|
160
|
+
` field*; ${createLink('CHECKS.md', 'docs/CHECKS.md')} before a sign-off.`,
|
|
161
|
+
'2. **Before `seethrough` and `assemble`**: SOURCE.md, the order of the split and',
|
|
162
|
+
` the cut: ${createLink('re-running a bad split', 'docs/SOURCE.md', 're-run-first')},`,
|
|
163
|
+
` ${createLink('where a cut is allowed', 'docs/SOURCE.md', 'where-a-cut-is-allowed')};`,
|
|
164
|
+
' then parts AUTHORING *See-through head-run source reading*, *Source before',
|
|
165
|
+
' scissors* and *Limbs: cut at their joints*.',
|
|
166
|
+
`3. **Before rigging**: ${createLink('CRAFT.md § For the gates', 'docs/CRAFT.md', 'for-the-gates-not-the-interview')}`,
|
|
167
|
+
' (G1–G9); core RIGGING and MOTION; parts AUTHORING §7, the bars `check` enforces.',
|
|
168
|
+
`4. **Before showing the user**: ${createLink('LESSONS.md § The self-check', 'docs/LESSONS.md', 'the-self-check')},`,
|
|
169
|
+
` the ${createLink('per-frame seam count', 'docs/LESSONS.md', 'count-the-seam-bar-over-every-frame')},`,
|
|
170
|
+
` ${createLink('what to show first', 'docs/LESSONS.md', 'what-to-show-the-user-first')}.`,
|
|
171
|
+
].join('\n');
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The check an agent runs before asking for the interview sign-off: since
|
|
175
|
+
* rig-c/create#3 it is `rig-create interview --check`, which refuses every
|
|
176
|
+
* `null` answer by name, so the line names the command, not the doc reference.
|
|
177
|
+
*/
|
|
178
|
+
export const INTERVIEW_CHECK_LINE = 'Before asking the user to sign the interview, run `rig-create interview --check`: it names every `null` answer.';
|
|
179
|
+
|
|
180
|
+
export const GUIDE_TEMPLATE = 'agent-guide.md';
|
|
181
|
+
|
|
182
|
+
/** CLAUDE.md is a pointer: Claude Code reads CLAUDE.md, and an `@path` line imports that file into it. */
|
|
183
|
+
export const CLAUDE_MD = [
|
|
184
|
+
'@AGENTS.md',
|
|
185
|
+
'',
|
|
186
|
+
'The agent guide for this project is AGENTS.md, imported above. It is the only copy: change it there, not here.',
|
|
187
|
+
'',
|
|
188
|
+
].join('\n');
|
|
189
|
+
|
|
190
|
+
export function packageDocPath(doc: PackageDoc): string {
|
|
191
|
+
return `node_modules/${doc.package}/${doc.path}`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function linkLine(label: string, href: string, why: string): string {
|
|
195
|
+
return `- [${label}](${href}): ${why}.`;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** The text of AGENTS.md, from the template and the tables above. */
|
|
199
|
+
export function renderAgentGuide(): string {
|
|
200
|
+
const fills: Record<string, string> = {
|
|
201
|
+
RESUME_LINK: `[PROJECT.md § How an agent resumes a project](${createDocUrl(RESUME_LINK.path, RESUME_LINK.anchor)})`,
|
|
202
|
+
INTERVIEW_CHECK: INTERVIEW_CHECK_LINE,
|
|
203
|
+
DERIVED_LINK: `[INTERVIEW.md § Derived answers](${createDocUrl(DERIVED_LINK.path, DERIVED_LINK.anchor)})`,
|
|
204
|
+
GATES_LINK: `[CRAFT.md G8](${createDocUrl(GATES_LINK.path, GATES_LINK.anchor)})`,
|
|
205
|
+
DRAFTS_LINK: `[PROJECT.md § Labelled draft rigs](${createDocUrl(DRAFTS_LINK.path, DRAFTS_LINK.anchor)})`,
|
|
206
|
+
STAGES_LINK: `[PROJECT.md § Stages](${createDocUrl(STAGES_LINK.path, STAGES_LINK.anchor)})`,
|
|
207
|
+
LIFETIME_LINK: `[PROJECT.md § Data is split by lifetime](${createDocUrl(LIFETIME_LINK.path, LIFETIME_LINK.anchor)})`,
|
|
208
|
+
INTAKE_LINK: `[PROJECT.md § Advisory intake reports](${createDocUrl(INTAKE_LINK.path, INTAKE_LINK.anchor)})`,
|
|
209
|
+
CG_GATES_LINK: `[CHECKS.md § CG gates](${createDocUrl(CG_GATES_LINK.path, CG_GATES_LINK.anchor)})`,
|
|
210
|
+
APPEARANCE_LINK: `[CHECKS.md § Appearance bar wording](${createDocUrl(APPEARANCE_LINK.path, APPEARANCE_LINK.anchor)})`,
|
|
211
|
+
BUST_LINK: `[CHECKS.md § The bust at meshes](${createDocUrl(BUST_LINK.path, BUST_LINK.anchor)})`,
|
|
212
|
+
PROJECTION_LINK: `[CHECKS.md § Projection and ground](${createDocUrl(PROJECTION_LINK.path, PROJECTION_LINK.anchor)})`,
|
|
213
|
+
PARTS_CHECK_LINK: `[${PARTS_CHECK_CODES.map((code) => `\`${code}\``).join(', ')}](${createDocUrl(PARTS_CHECK_LINK.path, PARTS_CHECK_LINK.anchor)})`,
|
|
214
|
+
READ_FIRST,
|
|
215
|
+
PACKAGE_DOCS: PACKAGE_DOCS.map((doc) =>
|
|
216
|
+
linkLine(`${doc.package} ${doc.path}`, packageDocPath(doc), doc.why),
|
|
217
|
+
).join('\n'),
|
|
218
|
+
CREATE_DOCS: CREATE_DOCS.map((doc) => linkLine(doc.path, createDocUrl(doc.path), doc.why)).join('\n'),
|
|
219
|
+
};
|
|
220
|
+
const template = readFileSync(join(TEMPLATES_DIR, GUIDE_TEMPLATE), 'utf8');
|
|
221
|
+
return template.replace(/\{\{([A-Z_]+)\}\}/g, (marker, key: string) => {
|
|
222
|
+
const fill = fills[key];
|
|
223
|
+
if (fill === undefined) throw new Error(`${GUIDE_TEMPLATE}: unknown marker ${marker}`);
|
|
224
|
+
return fill;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Writes the guide an agent reads first in a project — AGENTS.md, and a
|
|
230
|
+
* CLAUDE.md that imports it — and returns the paths written (relative to the
|
|
231
|
+
* project) so init can add exactly those to git.
|
|
232
|
+
*/
|
|
233
|
+
export function writeAgentGuide(dir: string): string[] {
|
|
234
|
+
writeFileSync(join(dir, 'AGENTS.md'), renderAgentGuide());
|
|
235
|
+
writeFileSync(join(dir, 'CLAUDE.md'), CLAUDE_MD);
|
|
236
|
+
return ['AGENTS.md', 'CLAUDE.md'];
|
|
237
|
+
}
|