@azure-id/orc 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2017 -0
- package/README-id.md +521 -0
- package/README.md +485 -0
- package/bin/build-agents.js +86 -0
- package/bin/cli.js +29050 -0
- package/bin/mockrun-catalog.js +267 -0
- package/bin/onboarding-content.js +172 -0
- package/bin/pricing.json +200 -0
- package/bin/providers.json +437 -0
- package/bin/ui.js +95 -0
- package/bin/verify-contracts.js +3277 -0
- package/bin/verify-package.js +498 -0
- package/bin/webui/api.js +1163 -0
- package/bin/webui/app.html +198 -0
- package/bin/webui/css/00-tokens.css +92 -0
- package/bin/webui/css/01-base.css +42 -0
- package/bin/webui/css/02-shell.css +103 -0
- package/bin/webui/css/03-components.css +462 -0
- package/bin/webui/css/04-motion.css +91 -0
- package/bin/webui/css/05-tour.css +100 -0
- package/bin/webui/css/06-responsive.css +108 -0
- package/bin/webui/css/panels/boundary.css +26 -0
- package/bin/webui/css/panels/challenge.css +151 -0
- package/bin/webui/css/panels/crosslink.css +194 -0
- package/bin/webui/css/panels/docs.css +254 -0
- package/bin/webui/css/panels/experiment.css +23 -0
- package/bin/webui/css/panels/extra.css +536 -0
- package/bin/webui/css/panels/flow.css +177 -0
- package/bin/webui/css/panels/handoff.css +67 -0
- package/bin/webui/css/panels/knowledge.css +86 -0
- package/bin/webui/css/panels/learn.css +154 -0
- package/bin/webui/css/panels/maintenance.css +55 -0
- package/bin/webui/css/panels/mockrun.css +268 -0
- package/bin/webui/css/panels/overview.css +100 -0
- package/bin/webui/css/panels/pact.css +43 -0
- package/bin/webui/css/panels/runs.css +105 -0
- package/bin/webui/css/panels/settings.css +227 -0
- package/bin/webui/css/panels/stats.css +87 -0
- package/bin/webui/fixtures/boundary.js +92 -0
- package/bin/webui/fixtures/challenge.js +825 -0
- package/bin/webui/fixtures/crosslink.js +31 -0
- package/bin/webui/fixtures/docs.js +982 -0
- package/bin/webui/fixtures/extra.js +1934 -0
- package/bin/webui/fixtures/flow.js +81 -0
- package/bin/webui/fixtures/handoff.js +35 -0
- package/bin/webui/fixtures/index.js +486 -0
- package/bin/webui/fixtures/knowledge.js +291 -0
- package/bin/webui/fixtures/maintenance.js +42 -0
- package/bin/webui/fixtures/mockrun.js +36 -0
- package/bin/webui/fixtures/pact.js +111 -0
- package/bin/webui/fixtures/runs.js +109 -0
- package/bin/webui/fixtures/settings.js +78 -0
- package/bin/webui/fixtures/shell.js +48 -0
- package/bin/webui/fixtures/stats.js +104 -0
- package/bin/webui/i18n/TERMS.md +134 -0
- package/bin/webui/i18n/en/banner.json +29 -0
- package/bin/webui/i18n/en/boundary.json +20 -0
- package/bin/webui/i18n/en/challenge.json +106 -0
- package/bin/webui/i18n/en/common.json +69 -0
- package/bin/webui/i18n/en/crosslink.json +69 -0
- package/bin/webui/i18n/en/docs.json +175 -0
- package/bin/webui/i18n/en/experiment.json +17 -0
- package/bin/webui/i18n/en/extra.json +313 -0
- package/bin/webui/i18n/en/flow.json +30 -0
- package/bin/webui/i18n/en/handoff.json +37 -0
- package/bin/webui/i18n/en/knowledge.json +141 -0
- package/bin/webui/i18n/en/learn.json +16 -0
- package/bin/webui/i18n/en/maintenance.json +52 -0
- package/bin/webui/i18n/en/mockrun.json +19 -0
- package/bin/webui/i18n/en/nav.json +19 -0
- package/bin/webui/i18n/en/overview.json +89 -0
- package/bin/webui/i18n/en/pact.json +36 -0
- package/bin/webui/i18n/en/runs.json +51 -0
- package/bin/webui/i18n/en/settings.json +49 -0
- package/bin/webui/i18n/en/stats.json +69 -0
- package/bin/webui/i18n/en/tour.json +33 -0
- package/bin/webui/i18n/id/banner.json +29 -0
- package/bin/webui/i18n/id/boundary.json +20 -0
- package/bin/webui/i18n/id/challenge.json +106 -0
- package/bin/webui/i18n/id/common.json +70 -0
- package/bin/webui/i18n/id/crosslink.json +69 -0
- package/bin/webui/i18n/id/docs.json +175 -0
- package/bin/webui/i18n/id/experiment.json +17 -0
- package/bin/webui/i18n/id/extra.json +313 -0
- package/bin/webui/i18n/id/flow.json +30 -0
- package/bin/webui/i18n/id/handoff.json +37 -0
- package/bin/webui/i18n/id/knowledge.json +141 -0
- package/bin/webui/i18n/id/learn.json +16 -0
- package/bin/webui/i18n/id/maintenance.json +52 -0
- package/bin/webui/i18n/id/mockrun.json +19 -0
- package/bin/webui/i18n/id/nav.json +19 -0
- package/bin/webui/i18n/id/overview.json +89 -0
- package/bin/webui/i18n/id/pact.json +36 -0
- package/bin/webui/i18n/id/runs.json +51 -0
- package/bin/webui/i18n/id/settings.json +49 -0
- package/bin/webui/i18n/id/stats.json +69 -0
- package/bin/webui/i18n/id/tour.json +33 -0
- package/bin/webui/js/00-core.js +115 -0
- package/bin/webui/js/01-i18n.js +149 -0
- package/bin/webui/js/02-ui.js +211 -0
- package/bin/webui/js/03-md.js +286 -0
- package/bin/webui/js/04-router.js +51 -0
- package/bin/webui/js/05-banners.js +172 -0
- package/bin/webui/js/06-edit.js +183 -0
- package/bin/webui/js/90-tour.js +488 -0
- package/bin/webui/js/91-shortcuts.js +126 -0
- package/bin/webui/js/99-boot.js +118 -0
- package/bin/webui/js/panels/boundary.js +104 -0
- package/bin/webui/js/panels/challenge.js +781 -0
- package/bin/webui/js/panels/crosslink.js +654 -0
- package/bin/webui/js/panels/docs.js +1338 -0
- package/bin/webui/js/panels/experiment.js +98 -0
- package/bin/webui/js/panels/extra.js +3011 -0
- package/bin/webui/js/panels/flow.js +297 -0
- package/bin/webui/js/panels/handoff.js +169 -0
- package/bin/webui/js/panels/knowledge.js +890 -0
- package/bin/webui/js/panels/learn.js +220 -0
- package/bin/webui/js/panels/maintenance.js +235 -0
- package/bin/webui/js/panels/mockrun.js +227 -0
- package/bin/webui/js/panels/overview.js +447 -0
- package/bin/webui/js/panels/pact.js +189 -0
- package/bin/webui/js/panels/runs.js +416 -0
- package/bin/webui/js/panels/settings.js +573 -0
- package/bin/webui/js/panels/stats.js +378 -0
- package/bin/webui/serve.js +557 -0
- package/mock-run/INDEX.md +106 -0
- package/mock-run/a-normal-day.md +587 -0
- package/mock-run/context-combiner.md +100 -0
- package/mock-run/extra-recovery.md +330 -0
- package/mock-run/extra-slots.md +177 -0
- package/mock-run/media/README.md +43 -0
- package/mock-run/orc-aftermath.md +392 -0
- package/mock-run/orc-boundary.md +356 -0
- package/mock-run/orc-brainstorm.md +177 -0
- package/mock-run/orc-budget.md +534 -0
- package/mock-run/orc-challenge-council.md +262 -0
- package/mock-run/orc-challenge.md +416 -0
- package/mock-run/orc-cli.md +200 -0
- package/mock-run/orc-diy.md +129 -0
- package/mock-run/orc-doc.md +448 -0
- package/mock-run/orc-explain.md +86 -0
- package/mock-run/orc-export.md +423 -0
- package/mock-run/orc-extra.md +392 -0
- package/mock-run/orc-fast.md +106 -0
- package/mock-run/orc-grill.md +151 -0
- package/mock-run/orc-handoff.md +480 -0
- package/mock-run/orc-pact.md +421 -0
- package/mock-run/orc-pattern.md +112 -0
- package/mock-run/orc-plan.md +108 -0
- package/mock-run/orc-pr-setup.md +126 -0
- package/mock-run/orc-quick.md +113 -0
- package/mock-run/orc-route.md +93 -0
- package/mock-run/orc-ui.md +125 -0
- package/mock-run/orc-ultra.md +103 -0
- package/mock-run/orc.md +157 -0
- package/mock-run/the-example-project.md +55 -0
- package/package.json +39 -0
- package/templates/agents/MODEL-MAPPING.md +168 -0
- package/templates/agents/orc-advisor-fable-5.md +50 -0
- package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
- package/templates/agents/orc-analyst-fable-5.md +115 -0
- package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
- package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
- package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
- package/templates/agents/orc-executor-haiku-4-5.md +113 -0
- package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
- package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
- package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-low.md +114 -0
- package/templates/agents/orc-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
- package/templates/agents/orc-judge-fable-5.md +79 -0
- package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
- package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
- package/templates/agents/orc-planner-fable-5.md +152 -0
- package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
- package/templates/agents/orc-planner-opus-5-med.md +160 -0
- package/templates/agents/orc-retro-opus-5-med.md +73 -0
- package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
- package/templates/agents/orc-reviewer-fable-5.md +57 -0
- package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
- package/templates/agents/orc-scout-opus-5-low.md +40 -0
- package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
- package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
- package/templates/agents/orc-test-author-opus-5-med.md +71 -0
- package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
- package/templates/agents/orc-verifier-opus-5-med.md +69 -0
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
- package/templates/commands/orc-aftermath.md +49 -0
- package/templates/commands/orc-analyze.md +21 -0
- package/templates/commands/orc-boundary.md +46 -0
- package/templates/commands/orc-brainstorm.md +51 -0
- package/templates/commands/orc-budget.md +54 -0
- package/templates/commands/orc-challenge.md +58 -0
- package/templates/commands/orc-claude.md +14 -0
- package/templates/commands/orc-diy.md +13 -0
- package/templates/commands/orc-doc.md +128 -0
- package/templates/commands/orc-explain.md +20 -0
- package/templates/commands/orc-export.md +46 -0
- package/templates/commands/orc-fast.md +15 -0
- package/templates/commands/orc-grill.md +40 -0
- package/templates/commands/orc-handoff.md +52 -0
- package/templates/commands/orc-learn.md +17 -0
- package/templates/commands/orc-mini.md +12 -0
- package/templates/commands/orc-pact.md +44 -0
- package/templates/commands/orc-pattern.md +15 -0
- package/templates/commands/orc-plan.md +22 -0
- package/templates/commands/orc-poly.md +21 -0
- package/templates/commands/orc-pr-driver.md +30 -0
- package/templates/commands/orc-pr-setup.md +31 -0
- package/templates/commands/orc-quick.md +33 -0
- package/templates/commands/orc-retro.md +17 -0
- package/templates/commands/orc-route.md +41 -0
- package/templates/commands/orc-ultra.md +17 -0
- package/templates/commands/orc-verify.md +11 -0
- package/templates/commands/orc-wiki.md +42 -0
- package/templates/commands/orc.md +16 -0
- package/templates/hooks/orc-effort-guard.js +178 -0
- package/templates/hooks/orc-statusline.js +305 -0
- package/templates/hooks/orc-trace.js +471 -0
- package/templates/hooks/orc-update-lib.js +125 -0
- package/templates/skills/_shared/README.md +50 -0
- package/templates/skills/_shared/detecting-artifacts.md +90 -0
- package/templates/skills/_shared/drift-recovery.md +98 -0
- package/templates/skills/_shared/extra-dispatch.md +1051 -0
- package/templates/skills/_shared/fable5-override.md +56 -0
- package/templates/skills/_shared/fallback-handoff.md +42 -0
- package/templates/skills/_shared/gh-stack-commands.md +65 -0
- package/templates/skills/_shared/gotchas.md +177 -0
- package/templates/skills/_shared/interview.md +144 -0
- package/templates/skills/_shared/lane-suspend.md +82 -0
- package/templates/skills/_shared/opus5-only.md +131 -0
- package/templates/skills/_shared/pr-templates.md +106 -0
- package/templates/skills/_shared/read-ladder.md +54 -0
- package/templates/skills/_shared/return-validation.md +145 -0
- package/templates/skills/_shared/smoke-gate.md +28 -0
- package/templates/skills/_shared/stack-plan.md +135 -0
- package/templates/skills/_shared/untrusted-input.md +63 -0
- package/templates/skills/context-combiner/SKILL.md +187 -0
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
- package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
- package/templates/skills/orc/README.md +150 -0
- package/templates/skills/orc/SKILL.md +526 -0
- package/templates/skills/orc/config.md +389 -0
- package/templates/skills/orc/examples/full-run-mock.md +73 -0
- package/templates/skills/orc/references/analyst-gates.md +124 -0
- package/templates/skills/orc/references/effort-and-mode.md +224 -0
- package/templates/skills/orc/references/house-rules.md +20 -0
- package/templates/skills/orc/references/intake.md +120 -0
- package/templates/skills/orc/references/log-protocol.md +39 -0
- package/templates/skills/orc/references/pattern-gate.md +89 -0
- package/templates/skills/orc/references/plan-handoff.md +84 -0
- package/templates/skills/orc/references/preflight-report.md +220 -0
- package/templates/skills/orc/references/security-checklist.md +39 -0
- package/templates/skills/orc/references/stop-and-resume.md +160 -0
- package/templates/skills/orc/references/trace-protocol.md +314 -0
- package/templates/skills/orc/references/ultra-mode.md +123 -0
- package/templates/skills/orc/references/wave-grouping.md +121 -0
- package/templates/skills/orc/references/wiki-consult.md +177 -0
- package/templates/skills/orc/schemas/checkpoint.md +122 -0
- package/templates/skills/orc/schemas/intent-spec.md +42 -0
- package/templates/skills/orc/schemas/planning-output.md +279 -0
- package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
- package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
- package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
- package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
- package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
- package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
- package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
- package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
- package/templates/skills/orc-advisor/SKILL.md +60 -0
- package/templates/skills/orc-aftermath/SKILL.md +136 -0
- package/templates/skills/orc-aftermath/references/report.md +95 -0
- package/templates/skills/orc-analyze/SKILL.md +220 -0
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
- package/templates/skills/orc-analyze/references/branching.md +51 -0
- package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
- package/templates/skills/orc-analyze/references/thin-input.md +77 -0
- package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
- package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
- package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
- package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
- package/templates/skills/orc-boundary/SKILL.md +208 -0
- package/templates/skills/orc-boundary/references/card.md +78 -0
- package/templates/skills/orc-boundary/references/gate.md +113 -0
- package/templates/skills/orc-brainstorm/SKILL.md +339 -0
- package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
- package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
- package/templates/skills/orc-budget/SKILL.md +225 -0
- package/templates/skills/orc-budget/references/corpus.md +87 -0
- package/templates/skills/orc-challenge/README.md +142 -0
- package/templates/skills/orc-challenge/SKILL.md +255 -0
- package/templates/skills/orc-challenge/examples/code-module.md +110 -0
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
- package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
- package/templates/skills/orc-challenge/references/conservation.md +107 -0
- package/templates/skills/orc-challenge/references/council.md +315 -0
- package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
- package/templates/skills/orc-challenge/references/dimensions.md +121 -0
- package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
- package/templates/skills/orc-challenge/references/intake.md +171 -0
- package/templates/skills/orc-challenge/references/kinds.md +44 -0
- package/templates/skills/orc-challenge/references/plain-english.md +98 -0
- package/templates/skills/orc-challenge/references/rubric.md +109 -0
- package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
- package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
- package/templates/skills/orc-claude/SKILL.md +199 -0
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
- package/templates/skills/orc-claude/references/refresh.md +76 -0
- package/templates/skills/orc-claude/references/template.md +109 -0
- package/templates/skills/orc-diy/README.md +142 -0
- package/templates/skills/orc-diy/SKILL.md +70 -0
- package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
- package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
- package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
- package/templates/skills/orc-diy/references/blocks/header.md +55 -0
- package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
- package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
- package/templates/skills/orc-diy/references/blocks/review.md +18 -0
- package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
- package/templates/skills/orc-diy/references/blocks/security.md +25 -0
- package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
- package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
- package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
- package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
- package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
- package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
- package/templates/skills/orc-diy/references/compile.md +59 -0
- package/templates/skills/orc-diy/references/flow-schema.md +100 -0
- package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
- package/templates/skills/orc-doc/README.md +229 -0
- package/templates/skills/orc-doc/SKILL.md +444 -0
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
- package/templates/skills/orc-doc/references/chunking.md +527 -0
- package/templates/skills/orc-doc/references/gates.md +311 -0
- package/templates/skills/orc-doc/references/generation-rules.md +122 -0
- package/templates/skills/orc-doc/references/house-rules.md +170 -0
- package/templates/skills/orc-doc/references/import-targets.md +40 -0
- package/templates/skills/orc-doc/references/plain-language.md +66 -0
- package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
- package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
- package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
- package/templates/skills/orc-doc/references/templates/prd.md +133 -0
- package/templates/skills/orc-doc/references/templates/report.md +102 -0
- package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
- package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
- package/templates/skills/orc-explain/SKILL.md +57 -0
- package/templates/skills/orc-export/SKILL.md +154 -0
- package/templates/skills/orc-fast/SKILL.md +188 -0
- package/templates/skills/orc-grill/SKILL.md +207 -0
- package/templates/skills/orc-grill/references/grill-doc.md +105 -0
- package/templates/skills/orc-handoff/SKILL.md +204 -0
- package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
- package/templates/skills/orc-handoff/references/surfaces.md +88 -0
- package/templates/skills/orc-judge/SKILL.md +82 -0
- package/templates/skills/orc-learn/SKILL.md +156 -0
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
- package/templates/skills/orc-learn/references/deepen.md +70 -0
- package/templates/skills/orc-learn/references/refresh.md +65 -0
- package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
- package/templates/skills/orc-learn/references/template-learning.md +67 -0
- package/templates/skills/orc-mini/SKILL.md +226 -0
- package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
- package/templates/skills/orc-pact/SKILL.md +218 -0
- package/templates/skills/orc-pact/references/gate.md +70 -0
- package/templates/skills/orc-pact/references/ledger.md +99 -0
- package/templates/skills/orc-pattern/SKILL.md +124 -0
- package/templates/skills/orc-pattern/references/INDEX.md +73 -0
- package/templates/skills/orc-pattern/references/be-django.md +80 -0
- package/templates/skills/orc-pattern/references/be-express.md +82 -0
- package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
- package/templates/skills/orc-pattern/references/be-go.md +96 -0
- package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
- package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
- package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
- package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
- package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
- package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
- package/templates/skills/orc-pattern/references/fe-react.md +83 -0
- package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
- package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
- package/templates/skills/orc-poly/SKILL.md +216 -0
- package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
- package/templates/skills/orc-poly/references/gather.md +70 -0
- package/templates/skills/orc-poly/references/poly-spec.md +84 -0
- package/templates/skills/orc-pr-driver/README.md +349 -0
- package/templates/skills/orc-pr-driver/SKILL.md +167 -0
- package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
- package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
- package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
- package/templates/skills/orc-pr-setup/README.md +436 -0
- package/templates/skills/orc-pr-setup/SKILL.md +184 -0
- package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
- package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
- package/templates/skills/orc-quick/README.md +423 -0
- package/templates/skills/orc-quick/SKILL.md +306 -0
- package/templates/skills/orc-quick/references/context-doc.md +114 -0
- package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
- package/templates/skills/orc-quick/references/gh-mode.md +127 -0
- package/templates/skills/orc-retro/SKILL.md +222 -0
- package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
- package/templates/skills/orc-route/SKILL.md +165 -0
- package/templates/skills/orc-verify/SKILL.md +86 -0
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
- package/templates/skills/orc-wiki/README.md +325 -0
- package/templates/skills/orc-wiki/SKILL.md +322 -0
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
- package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
- package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
- package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
- package/templates/skills/orc-wiki/references/crosslink.md +284 -0
- package/templates/skills/orc-wiki/references/extra.md +79 -0
- package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
- package/templates/skills/orc-wiki/references/orientation.md +51 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
- package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
- package/templates/skills/orc-wiki/references/staleness.md +288 -0
- package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
- package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Shared contract — Fable 5 role override (hard-gated)
|
|
2
|
+
|
|
3
|
+
Canonical rule for routing selected roles to Fable 5 agents. Consumed by the
|
|
4
|
+
full orc spine and the ultra lane; the lint pins the `fable5-override.md` pointer
|
|
5
|
+
into every lane that honors it.
|
|
6
|
+
|
|
7
|
+
## The gate
|
|
8
|
+
|
|
9
|
+
Read the resolved config at run start (`config.md` defaults ← `orc.config.yaml`).
|
|
10
|
+
The override is **hard-gated**: absolutely nothing changes unless
|
|
11
|
+
`fable5_enabled: true`. When it is false (the default), dispatch every role
|
|
12
|
+
exactly as today — this file is inert.
|
|
13
|
+
|
|
14
|
+
## The mapping (only when `fable5_enabled: true`)
|
|
15
|
+
|
|
16
|
+
For each role listed in `fable5_roles` (a subset of
|
|
17
|
+
`analyze, plan, advisor, judge, review`), dispatch the Fable 5 variant agent
|
|
18
|
+
**instead of** the default role agent — same task slice, same return contract,
|
|
19
|
+
same phase:
|
|
20
|
+
|
|
21
|
+
| Role token | Default agent | Fable 5 variant |
|
|
22
|
+
|-----------|---------------|-----------------|
|
|
23
|
+
| `analyze` | `orc-system-analyst-opus-5-high` | `orc-analyst-fable-5` |
|
|
24
|
+
| `plan` | `orc-planner-opus-5-med` | `orc-planner-fable-5` |
|
|
25
|
+
| `advisor` | `orc-advisor-opus-5-xhigh` | `orc-advisor-fable-5` |
|
|
26
|
+
| `judge` | `orc-judge-opus-5-xhigh` | `orc-judge-fable-5` |
|
|
27
|
+
| `review` | `orc-reviewer-opus-5-med` | `orc-reviewer-fable-5` |
|
|
28
|
+
|
|
29
|
+
A role NOT in `fable5_roles` keeps its default agent. `advisor` and `judge` are
|
|
30
|
+
ultra-lane only — they take effect solely under `/orc-ultra`, and only when
|
|
31
|
+
explicitly selected. `fable5_enabled: true` with an empty `fable5_roles` does
|
|
32
|
+
nothing (the CLI warns on set).
|
|
33
|
+
|
|
34
|
+
## Out of scope — never overridden
|
|
35
|
+
|
|
36
|
+
- **`orc-quick`.** The lane asks the USER which agent to spawn before every
|
|
37
|
+
dispatch; a role override that silently swapped the answer would defeat that
|
|
38
|
+
hard gate. `fable5_enabled` / `fable5_roles` are neither read nor honored
|
|
39
|
+
there, in addition to `opus5_only` (`opus5-only.md`) and
|
|
40
|
+
`rubric_bands_override`. See `orc-quick/references/dispatch-gate.md`.
|
|
41
|
+
- **`orc-trace-writer-haiku-4-5`** and **`orc-diy`** — same carve-outs as
|
|
42
|
+
`opus5-only.md`.
|
|
43
|
+
|
|
44
|
+
## Effort
|
|
45
|
+
|
|
46
|
+
The Fable 5 agents' effort is `fable5_effort` (enum `medium | high | xhigh |
|
|
47
|
+
max`, default `medium`). Effort lives in each agent's frontmatter; the
|
|
48
|
+
`orc config set fable5_effort <v>` CLI rewrites the `effort:` line of the
|
|
49
|
+
installed copies deterministically — the skill never edits agent files.
|
|
50
|
+
|
|
51
|
+
## Why it's safe
|
|
52
|
+
|
|
53
|
+
Fable 5 is a strictly-capable model (it never downgrades a subagent), so a
|
|
54
|
+
Fable 5 role agent runs at or above the baseline. The `CONFIG` trace line at
|
|
55
|
+
Phase 1 records the resolved `fable5_*` values, so `/orc-retro` can audit that a
|
|
56
|
+
run's dispatch honored the config.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Fallback handoff (orc-fast → orc-mini)
|
|
2
|
+
|
|
3
|
+
Canonical contract for the fast lane's fallback. orc-fast WRITES this block;
|
|
4
|
+
orc-mini READS it. Fallback is the router — orc-fast never stops the chat.
|
|
5
|
+
|
|
6
|
+
## The block (written into the shared run folder)
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
FALLBACK-FROM: orc-fast
|
|
10
|
+
REASON: wiki-absent | wiki-stale-user-choice | pattern-absent | fit-gate | smoke-red-escalation
|
|
11
|
+
INTENT-SPEC: <path to the intent-spec if fast's Phase F1 completed, else "none — raw request follows">
|
|
12
|
+
REQUEST: <the raw user request, verbatim>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Writer side (orc-fast)
|
|
16
|
+
|
|
17
|
+
Announce which prerequisite/gate failed in one line, write the block, invoke
|
|
18
|
+
orc-mini pointing at it. The run folder is already in the shared
|
|
19
|
+
`.claude/orc/run/{run-slug}/` format — no migration, no new slug.
|
|
20
|
+
|
|
21
|
+
## Reader side (orc-mini)
|
|
22
|
+
|
|
23
|
+
On entry: acknowledge the fallback + reason in one line, then run the normal
|
|
24
|
+
mini lane — but SKIP re-deriving anything carried over:
|
|
25
|
+
|
|
26
|
+
- An attached INTENT-SPEC replaces the Phase 0 draft (still do the soft
|
|
27
|
+
sign-off).
|
|
28
|
+
- Reuse the run folder and slug.
|
|
29
|
+
- `REASON: smoke-red-escalation` means code was already written — start from
|
|
30
|
+
the failing state, not from scratch.
|
|
31
|
+
|
|
32
|
+
## What carries over
|
|
33
|
+
|
|
34
|
+
| Carries over | The receiver RE-DERIVES | On conflict |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| The user's original request, verbatim | The knowledge gate (wiki tier, pattern, and its own probes) | The receiver's own probe wins |
|
|
37
|
+
| Why the handoff fired — the exact failed prerequisite | The plan, the scoring, the waves | — |
|
|
38
|
+
| Anything the user already confirmed in this session | Every file claim the sender made | HOST code wins |
|
|
39
|
+
|
|
40
|
+
The middle column is the point: a receiving lane must not inherit the sender's
|
|
41
|
+
findings as fact. An inherited claim is a HINT with a known author, never
|
|
42
|
+
evidence — re-anchor it or drop it.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Shared contract — `gh stack` command surface (pinned)
|
|
2
|
+
|
|
3
|
+
Canonical, single-copy reference for GitHub's stacked-pull-request CLI. Both
|
|
4
|
+
stacked-PR lanes (`orc-pr-setup`, `orc-pr-driver`) and ORC's ship-phase stack
|
|
5
|
+
gate read THIS file — never a remembered command list.
|
|
6
|
+
|
|
7
|
+
**Why one file:** stacked PRs are a GitHub **public preview** (shipped
|
|
8
|
+
2026-07-30). The command surface can be renamed under us. Pinning it here makes
|
|
9
|
+
a breaking rename a one-file fix instead of a hunt across five skills.
|
|
10
|
+
|
|
11
|
+
## Preflight (probe, never assume)
|
|
12
|
+
|
|
13
|
+
| Check | Command | Fail meaning |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| gh present, ≥ 2.0 | `gh --version` | no `gh` → stacking is impossible; regular push |
|
|
16
|
+
| authed | `gh auth status` | not authed → regular push |
|
|
17
|
+
| extension | `gh extension list` (look for `github/gh-stack`) | absent → offer `gh extension install github/gh-stack` |
|
|
18
|
+
| same repo, not a fork | `gh repo view --json isFork,nameWithOwner` | **fork → STOP.** Cross-fork stacks are unsupported; this workflow does not apply |
|
|
19
|
+
| trunk name | `gh repo view --json defaultBranchRef` | the bottom layer's base |
|
|
20
|
+
| protections / required checks | `gh api repos/{owner}/{repo}/branches/{trunk}/protection` (404 = none) | tells you N layers = N full CI runs |
|
|
21
|
+
| merge queue | same protection payload | preview support is rolling out — **probe, never assume** |
|
|
22
|
+
|
|
23
|
+
## Command table (verbatim surface)
|
|
24
|
+
|
|
25
|
+
| Command | Purpose |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `gh stack init [-b <base>] [branches...]` | start a stack in the current repo (interactive with no args; can adopt the current branch as layer 1) |
|
|
28
|
+
| `gh stack add [-A] [-u] [-m <msg>] [branch]` | new branch on top of the current stack |
|
|
29
|
+
| `gh stack view [-s] [--json]` | show the stack — `--json` is the machine-readable form every gate reads |
|
|
30
|
+
| `gh stack checkout <stack-no \| pr-no \| pr-url \| branch>` | check out a stack |
|
|
31
|
+
| `gh stack modify [--continue] [--abort]` | interactive restructure: drop / combine / insert / reorder / rename |
|
|
32
|
+
| `gh stack unstack [<stack-no>] [--local]` | remove from tracking / unstack on GitHub |
|
|
33
|
+
| `gh stack submit [--auto] [--open] [--remote <n>]` | push branches, create/update PRs, create the stack |
|
|
34
|
+
| `gh stack sync [--remote <n>] [--prune]` | fetch, rebase, push, sync PR state |
|
|
35
|
+
| `gh stack rebase [--downstack] [--upstack] [--no-trunk] [--continue] [--abort]` | cascading rebase |
|
|
36
|
+
| `gh stack push [--remote <n>]` | push active branches |
|
|
37
|
+
| `gh stack link [--base <b>] <a> <b> [...]` | link EXISTING PRs into a stack (no local tracking) — the retrofit path |
|
|
38
|
+
| `gh stack merge [<stack-no> \| <pr-no>] [--merge\|--squash\|--rebase] [-y]` | merge one or more layers |
|
|
39
|
+
| `gh stack switch` / `up [n]` / `down [n]` / `top` / `bottom` / `trunk` | navigate |
|
|
40
|
+
| `gh stack alias [--remove] [name]` | shorthand alias |
|
|
41
|
+
|
|
42
|
+
## Semantics that shape the lanes
|
|
43
|
+
|
|
44
|
+
- **stack** = an ordered chain of PRs in ONE repo. **layer** = one PR in it.
|
|
45
|
+
Bottom layer's base is the trunk; each upper layer's base is the branch below.
|
|
46
|
+
- **retarget** — merging a lower layer automatically repoints the layers above.
|
|
47
|
+
- **restack** — server-side cascading rebase from the PR UI, or `gh stack rebase`.
|
|
48
|
+
- **merge is BOTTOM-UP.** Merging the top "ready" layer lands every unmerged
|
|
49
|
+
layer below it in one operation; merging one layer leaves the ones above open
|
|
50
|
+
and auto-rebased. History equals merging each layer individually from the
|
|
51
|
+
bottom. commit / squash / rebase are all supported.
|
|
52
|
+
- The **stack map** renders at the top of every PR in the stack.
|
|
53
|
+
- Layers can be reviewed **in parallel** by different reviewers — that is the
|
|
54
|
+
whole point of splitting.
|
|
55
|
+
- **Every layer runs full CI.** N layers = N CI runs (plus N code-quality scans).
|
|
56
|
+
Layer count is a cost, so it is justified, never maximized.
|
|
57
|
+
- No documented maximum layer count — the cap in
|
|
58
|
+
`_shared/stack-plan.md` is ORC's, for review sanity.
|
|
59
|
+
|
|
60
|
+
## Fallback when `gh stack` is unavailable
|
|
61
|
+
|
|
62
|
+
No `gh`, no extension, or a fork → say so in one line and ship the change as a
|
|
63
|
+
**single regular PR**. Never hand-roll a stack with bare `git push` + manual
|
|
64
|
+
base edits: without the extension nothing retargets on merge, and a half-built
|
|
65
|
+
stack is worse than one honest big PR.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Shared contract — Gotchas (repair memory that outlives the run)
|
|
2
|
+
|
|
3
|
+
Canonical file: `_shared/gotchas.md`. THE one description of ORC's repair memory:
|
|
4
|
+
what a gotcha is, where it lives, when one is recorded, when one is injected, and
|
|
5
|
+
which lane may do which. Gate: config `gotchas` (`on` | `off`, default `on`).
|
|
6
|
+
|
|
7
|
+
## 1. What a gotcha is
|
|
8
|
+
|
|
9
|
+
**ONE project-specific failure that a repair in this project already solved.**
|
|
10
|
+
Not a rule, not a preference, not a lesson in general.
|
|
11
|
+
|
|
12
|
+
It is deliberately none of the other three knowledge artifacts:
|
|
13
|
+
|
|
14
|
+
| Artifact | Answers | Not this |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| the wiki | "what IS this codebase" | a gotcha is not a fact about the code |
|
|
17
|
+
| the pattern cache | "how does this project WRITE code" | a gotcha is not a convention |
|
|
18
|
+
| `tdd_spec` | "what must this change PROVE" | a gotcha is not an acceptance test |
|
|
19
|
+
| **gotchas** | **"what has this project already gotten WRONG here"** | — |
|
|
20
|
+
|
|
21
|
+
If a finding fits one of the first three rows, it belongs there. A gotcha is the
|
|
22
|
+
residue of a repair: something went red, a specific cause was found, a specific
|
|
23
|
+
fix made it green.
|
|
24
|
+
|
|
25
|
+
## 2. The artifact
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
.claude/orc/gotchas.md # live entries, capped at gotchas_max
|
|
29
|
+
.claude/orc/gotchas-archive.md # evicted entries — never hard-dropped
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Both sit BESIDE the pattern cache (`orc/patterns/`), never inside it. Like every
|
|
33
|
+
file ORC generates under `.claude/orc/`, neither is in the install manifest — so
|
|
34
|
+
`orc update --prune` can never delete them and `orc update` never overwrites them.
|
|
35
|
+
They are user data by ORC's own rules.
|
|
36
|
+
|
|
37
|
+
**Entry format** — the parser and every writer depend on this exactly:
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## G-014 · express · repair
|
|
41
|
+
- trigger: adding a route handler that awaits a Mongoose query
|
|
42
|
+
- symptom: Cannot read properties of undefined (reading 'session') in tests
|
|
43
|
+
- cause: the test harness stubs req.session only for authed routes
|
|
44
|
+
- fix: register the route under authedRouter, not app
|
|
45
|
+
- scope: src/routes/**/*.js
|
|
46
|
+
- origin: run-orc-add-billing-050826-141233 · TDD repair round 2
|
|
47
|
+
- hits: 3
|
|
48
|
+
- last_seen: 05-08-2026
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- Heading: `## G-<3-digit id> · <lang-or-area> · <kind>`; `kind` ∈
|
|
52
|
+
`repair | drift | review | verify`.
|
|
53
|
+
- Field order is FIXED. Every field is required. Values are single-line.
|
|
54
|
+
- `scope` is a glob matched against a task's `declared_files`.
|
|
55
|
+
- Dates are `DD-MM-YYYY` (the repo's convention).
|
|
56
|
+
- IDs are monotonic; **never reused**, even after archival — an archived gotcha
|
|
57
|
+
stays traceable from a trace or a run doc that cited it.
|
|
58
|
+
|
|
59
|
+
## 3. Existence probe (never a `find`)
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
orc gotcha status exit 0 = one or more live entries · exit 1 = none
|
|
63
|
+
orc gotcha list the same contract, and prints the entries
|
|
64
|
+
orc gotcha prune archive the low-value tail down to gotchas_max
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**The exit code IS the contract**, same convention as `orc pattern status <lang>`
|
|
68
|
+
and `orc diy status`. `.claude/` is a hidden directory, so an ad-hoc `find`/glob
|
|
69
|
+
false-negatives from the wrong CWD or when it skips dot-dirs — the same reason
|
|
70
|
+
`detecting-artifacts.md` exists for the wiki and the pattern cache. Probe once,
|
|
71
|
+
treat the result as the source of truth, and never second-guess a positive probe.
|
|
72
|
+
|
|
73
|
+
## 4. When one is RECORDED
|
|
74
|
+
|
|
75
|
+
At phase close, **when and only when a repair loop went red → green**:
|
|
76
|
+
|
|
77
|
+
- the TDD repair loop turned a failing `tdd_spec` test green;
|
|
78
|
+
- a `DRIFT-FROM` recovery round resolved the drift;
|
|
79
|
+
- a reviewer P0/P1 that THIS SAME RUN fixed;
|
|
80
|
+
- a verifier `unmet[]` entry that THIS SAME RUN closed.
|
|
81
|
+
|
|
82
|
+
**A loop that hit its cap and STOPPED records NOTHING.** An unsolved failure is
|
|
83
|
+
not a gotcha — it is an open problem, and the honest red report is where it
|
|
84
|
+
belongs. Writing one anyway would seed the memory with advice that never worked.
|
|
85
|
+
|
|
86
|
+
Nothing else records. A first-try success has no repair to remember; a green
|
|
87
|
+
`regression-guard` test proved something, but it was never red.
|
|
88
|
+
|
|
89
|
+
## 5. Who writes it
|
|
90
|
+
|
|
91
|
+
Three parties, and they do not overlap:
|
|
92
|
+
|
|
93
|
+
1. **The agent RETURNS the body** in `gotcha_recorded` (see
|
|
94
|
+
`return-validation.md` §7) — either the entry fields or `none` + a one-line
|
|
95
|
+
reason. The agent that did the repair is the only party that knows the cause.
|
|
96
|
+
2. **The ORCHESTRATOR appends it** to `.claude/orc/gotchas.md`, at the same
|
|
97
|
+
phase-close point where it dispatches the trace packet. **A subagent never
|
|
98
|
+
writes either gotcha file.**
|
|
99
|
+
3. **The CLI owns counting, capping and archival** (`orc gotcha prune`) —
|
|
100
|
+
deterministic bookkeeping, never a model's judgement.
|
|
101
|
+
|
|
102
|
+
## 6. Dedupe (before every append)
|
|
103
|
+
|
|
104
|
+
Compare the returned `symptom` + `scope` against the live entries. A match:
|
|
105
|
+
increment `hits`, refresh `last_seen`, and **append nothing**. Only a genuinely
|
|
106
|
+
new failure gets a new ID. Without this the file grows one duplicate per run and
|
|
107
|
+
the injection cap fills with the same entry three times.
|
|
108
|
+
|
|
109
|
+
## 7. When one is INJECTED
|
|
110
|
+
|
|
111
|
+
Into an executor slice, **filtered by the `scope` glob against that task's
|
|
112
|
+
`declared_files`**.
|
|
113
|
+
|
|
114
|
+
- **NEVER inject unfiltered.** An unfiltered injection is the exact failure mode
|
|
115
|
+
that turns this feature into the bloat it exists to prevent.
|
|
116
|
+
- Cap **3 entries per slice**, highest `hits` first.
|
|
117
|
+
- **Zero matches = no gotcha block at all** — not an empty one. An empty block
|
|
118
|
+
costs tokens and says nothing.
|
|
119
|
+
|
|
120
|
+
The block rides beside `pattern` in the slice, and like `pattern` it is injected
|
|
121
|
+
LITERALLY, never as a file pointer.
|
|
122
|
+
|
|
123
|
+
## 8. Who reads it
|
|
124
|
+
|
|
125
|
+
- **Phase 1 preflight** — one line, never silent (see
|
|
126
|
+
`../orc/references/preflight-report.md`).
|
|
127
|
+
- **executor slices** — filtered, capped, per §7.
|
|
128
|
+
- **the reviewer** — the matching entries as a checklist: has this change
|
|
129
|
+
reintroduced a failure this project already paid for?
|
|
130
|
+
- **`/orc-retro`** — read-only calibration input. It never writes one.
|
|
131
|
+
|
|
132
|
+
## 9. Staleness is the user's job
|
|
133
|
+
|
|
134
|
+
An injected gotcha is presented to an executor as **fact**. Nothing in ORC
|
|
135
|
+
re-verifies that it is still true — `orc gotcha prune` handles CAPACITY, not
|
|
136
|
+
correctness.
|
|
137
|
+
|
|
138
|
+
So, plainly: **delete an entry that stopped being true.** Open
|
|
139
|
+
`.claude/orc/gotchas.md` and remove the block. That is the whole procedure, and
|
|
140
|
+
it is deliberately manual — a model deciding which of its own memories to forget
|
|
141
|
+
is a worse failure mode than a stale line a human can read.
|
|
142
|
+
|
|
143
|
+
## 10. Lane policy
|
|
144
|
+
|
|
145
|
+
| Lane | Reads | Writes |
|
|
146
|
+
|------|-------|--------|
|
|
147
|
+
| `/orc`, `/orc-ultra` | yes | yes |
|
|
148
|
+
| `/orc-mini` | yes | yes |
|
|
149
|
+
| `/orc-fast` | yes | no |
|
|
150
|
+
| `/orc-diy` | compile-owned (`gotchas` flow key) | compile-owned |
|
|
151
|
+
| `/orc-quick` | **no** | **no** |
|
|
152
|
+
| `/orc-retro` | yes | no (read-only by contract) |
|
|
153
|
+
|
|
154
|
+
### Per-lane mechanics (the spines keep the trigger; this is the detail)
|
|
155
|
+
|
|
156
|
+
**`/orc-mini` — reads AND writes, trimmed to one row.** Phase 1: probe
|
|
157
|
+
`orc gotcha status` and print exactly one of `gotchas: <n> known · <m> match` /
|
|
158
|
+
`none yet` / `off` — never silent. Phase 3: inject the scope-matching entries into
|
|
159
|
+
the single executor slice beside the pattern (cap 3, highest `hits` first; zero
|
|
160
|
+
matches = no block, NEVER unfiltered). After the return: dedupe a
|
|
161
|
+
`gotcha_recorded` body on `symptom`+`scope` (a match bumps `hits`/`last_seen`) and
|
|
162
|
+
append it to `.claude/orc/gotchas.md` yourself. A capped-and-stopped loop records
|
|
163
|
+
nothing. Mini has no separate review/verify phase, so its only writer is the
|
|
164
|
+
executor return.
|
|
165
|
+
|
|
166
|
+
**`/orc-fast` — reads only, and gains no third prerequisite.** Its two hard gates
|
|
167
|
+
(a FRESH/AGING wiki + a cached pattern) are its entire design; a missing gotchas
|
|
168
|
+
file is never a reason to fall back, and gotchas here are purely additive: probe,
|
|
169
|
+
inject the scope-matching entries into the F2 slice, and stop there. It never
|
|
170
|
+
writes one, because one executor plus one repair round is too little signal to
|
|
171
|
+
attribute a cause — and a lane with no analyst writing repair memory is how that
|
|
172
|
+
memory fills with guesses.
|
|
173
|
+
|
|
174
|
+
**`/orc-quick` does not participate at all — not even reading.** Its Q0 preflight
|
|
175
|
+
reads `log_dir` and no other config key, by contract. A `gotchas` key read would
|
|
176
|
+
break that guarantee, and the lane's whole premise is fewer steps, not more
|
|
177
|
+
knowledge. This exclusion is intentional and is not an oversight to "fix".
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Shared contract — The interview (turning a vague idea into a settled one)
|
|
2
|
+
|
|
3
|
+
Canonical file: `_shared/interview.md`. THE canonical way any ORC lane
|
|
4
|
+
interrogates a human until an idea is sharp enough to act on. Load it wherever a
|
|
5
|
+
lane must ask more than a fixed questionnaire's worth of questions: `/orc-grill`
|
|
6
|
+
runs it end to end, and `references/intake.md` borrows its round format when a
|
|
7
|
+
tier's question set runs long.
|
|
8
|
+
|
|
9
|
+
This is not "ask good questions". It is a specific mechanic with a termination
|
|
10
|
+
rule, and the mechanic is what makes the output load-bearing instead of merely a
|
|
11
|
+
good conversation.
|
|
12
|
+
|
|
13
|
+
## Why this exists
|
|
14
|
+
|
|
15
|
+
ORC's spec quality is capped by the opening message. A fixed questionnaire asks
|
|
16
|
+
the same things of "add a retry to the webhook" and "something is wrong with our
|
|
17
|
+
refunds" — and gets a usable answer for one and noise for the other. Worse, the
|
|
18
|
+
expensive instruments are the wrong fix: `/orc-analyze` checks a requirement
|
|
19
|
+
**against the code**, so pointing it at a fuzzy *intent* spends a scan asking
|
|
20
|
+
questions a conversation asks for free.
|
|
21
|
+
|
|
22
|
+
## The design tree
|
|
23
|
+
|
|
24
|
+
Model the idea as a tree of open questions, not a list. A question is **settled**
|
|
25
|
+
when the user has answered it (or explicitly deferred it); it is **open**
|
|
26
|
+
otherwise. A question **depends on** another when its sensible options change
|
|
27
|
+
based on that answer.
|
|
28
|
+
|
|
29
|
+
> "Which queue?" depends on "is this async at all?" — asking both at once
|
|
30
|
+
> produces an answer to the second that the first may delete.
|
|
31
|
+
|
|
32
|
+
## The frontier, and the round
|
|
33
|
+
|
|
34
|
+
The **frontier** is every open question whose prerequisites are all settled.
|
|
35
|
+
|
|
36
|
+
**Ask the whole frontier in ONE round.** Not one question at a time (that is a
|
|
37
|
+
slow interrogation), not everything at once (that is a form). Two questions never
|
|
38
|
+
share a round if one depends on the other — if they do, you have mis-drawn the
|
|
39
|
+
tree, and the answer to the dependent one is worthless.
|
|
40
|
+
|
|
41
|
+
After each round: record the answers, re-derive the frontier, ask the next round.
|
|
42
|
+
Rounds get shorter as the tree settles. That shrinking is the progress signal.
|
|
43
|
+
|
|
44
|
+
## Fixed question shape (so a round is answerable by number)
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
❓ **Q1** — **<short title>**: <the question, in plain words>
|
|
48
|
+
➡️ <your recommendation, alone on this line, with the one-line reason>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Every question carries a recommendation. A user who does not care answers
|
|
52
|
+
"1, 3, default the rest" and the round still moves. A question with no
|
|
53
|
+
recommendation is a question you have not thought about yet.
|
|
54
|
+
|
|
55
|
+
## Facts vs decisions — the split that does the work
|
|
56
|
+
|
|
57
|
+
**A FACT is ORC's job, never the user's.** If the answer exists somewhere ORC can
|
|
58
|
+
look, looking is cheaper and more accurate than asking. Never make a human recite
|
|
59
|
+
their own codebase back to you. Resolve facts in this order — this is
|
|
60
|
+
`_shared/read-ladder.md` applied to interviewing, and you stop at the step that
|
|
61
|
+
answers:
|
|
62
|
+
|
|
63
|
+
| Step | Source |
|
|
64
|
+
|------|--------|
|
|
65
|
+
| 1 | `orc wiki status` — is there a wiki, and is it fresh? (`_shared/detecting-artifacts.md`) |
|
|
66
|
+
| 2 | the wiki pages themselves, when the tier is FRESH or AGING |
|
|
67
|
+
| 3 | the cached code-pattern (`orc pattern status <lang>`) |
|
|
68
|
+
| 4 | `orc gotcha list` — what this project already got wrong here |
|
|
69
|
+
| 5 | a read-only ad-hoc dispatch, **last** — it costs tokens and wall-clock |
|
|
70
|
+
|
|
71
|
+
**Never block a round on a running fact-find.** Ask the rest of the frontier
|
|
72
|
+
while it runs; only the questions genuinely downstream of that fact wait.
|
|
73
|
+
|
|
74
|
+
**A DECISION is the user's, and the lane waits for it.** Trade-offs, scope,
|
|
75
|
+
priorities, what "done" means, what is explicitly not being built — these have no
|
|
76
|
+
correct answer discoverable in a repository. Recommend, argue for the
|
|
77
|
+
recommendation, and then wait. Put plainly:
|
|
78
|
+
**a lane that answers its own interview question has broken this contract.**
|
|
79
|
+
A default silently adopted is
|
|
80
|
+
indistinguishable, one week later, from a decision the user made — and it is the
|
|
81
|
+
one the build gets wrong.
|
|
82
|
+
|
|
83
|
+
**The mirrored half, for a lane that GENERATES options** (`/orc-brainstorm`):
|
|
84
|
+
producing candidates is ORC's job, choosing between them is the user's, and
|
|
85
|
+
**The third half, for a lane that GRADES** (`/orc-challenge`): ORC judges, the
|
|
86
|
+
user fixes, ORC re-judges — and **a lane that fixes what it judged has broken
|
|
87
|
+
this contract**, because a session that just wrote the fix will grade its own
|
|
88
|
+
homework and it will always pass. Its intake is this same split applied to the
|
|
89
|
+
PURPOSE of the review: **a lane that guesses the user's goal has broken this
|
|
90
|
+
contract** too, because a finding is only a finding relative to a goal, and a
|
|
91
|
+
*defensible* finding about the wrong thing is worse than an obviously wrong one.
|
|
92
|
+
|
|
93
|
+
**a lane that picks its own favourite** and moves on has broken the same
|
|
94
|
+
contract. Convergent and divergent work split the same way; the two sentences are
|
|
95
|
+
registered as a pair so neither lane can drift into the other's habits.
|
|
96
|
+
|
|
97
|
+
**The fourth half, for a lane that CHOOSES ITS REVIEWERS** (`/orc-challenge`'s
|
|
98
|
+
council): deriving a suggested roster from the artifact's kind and goal is a
|
|
99
|
+
FACT, so ORC may compute it — but accepting it is a DECISION, so the lane waits,
|
|
100
|
+
and **a lane that picks its own council has broken this contract.** A council
|
|
101
|
+
chosen by ORC is ORC deciding which kinds of criticism the user is allowed to
|
|
102
|
+
hear, which is a bigger decision than any single finding in the run. Registered
|
|
103
|
+
alongside the other three for the same reason: all four are one contract seen
|
|
104
|
+
from four sides.
|
|
105
|
+
|
|
106
|
+
## The confirmation gate — an empty frontier does NOT end the session
|
|
107
|
+
|
|
108
|
+
When no open question remains, do not declare victory. Play the idea back in
|
|
109
|
+
plain words — what it is, what was decided, what was ruled out — and ask:
|
|
110
|
+
|
|
111
|
+
> Does this match what you meant?
|
|
112
|
+
|
|
113
|
+
The user saying **yes, we understand each other** ends the interview. Nothing
|
|
114
|
+
else does. A "no" is not a failure; it is the tree being wrong, which is exactly
|
|
115
|
+
what this gate exists to catch. Re-open, add the questions the mismatch implies,
|
|
116
|
+
and run another round.
|
|
117
|
+
|
|
118
|
+
## Tag every settled decision — what makes this load-bearing
|
|
119
|
+
|
|
120
|
+
This is ORC's addition, and it is the reason an interview is worth running rather
|
|
121
|
+
than just chatting. As each decision settles, tag it exactly one way:
|
|
122
|
+
|
|
123
|
+
- **`intent`** — what the user wants built. Flows into the intent-spec / the
|
|
124
|
+
requirement statement.
|
|
125
|
+
- **`constraint`** — a boundary the build must not cross ("no new dependencies",
|
|
126
|
+
"must stay backward-compatible with the v1 payload"). Becomes a
|
|
127
|
+
`spec_invariants[]` entry, appended **verbatim** to every executor slice.
|
|
128
|
+
|
|
129
|
+
A constraint recorded as prose in a document nobody re-reads is a constraint that
|
|
130
|
+
gets violated in wave 2. A constraint that rides in every slice does not.
|
|
131
|
+
|
|
132
|
+
## Questions an interview cannot settle — name them, do not talk around them
|
|
133
|
+
|
|
134
|
+
Some questions are not answerable by conversation at all:
|
|
135
|
+
|
|
136
|
+
- **"How should this feel?"** — taste, layout, tone. Talking produces agreement
|
|
137
|
+
on words, not on the artifact. This is what ORC's `mock_example` phase is for
|
|
138
|
+
(`mock-examples/<slug>/`): make something to look at, then react to it.
|
|
139
|
+
- **"Does the code actually do that?"** — a claim about the repository. That is
|
|
140
|
+
`/orc-analyze`, not another round of questions.
|
|
141
|
+
|
|
142
|
+
Say which class an unsettled question is in and point at the right instrument.
|
|
143
|
+
Carrying it as an open question with the instrument named is a complete answer;
|
|
144
|
+
grinding on it for three more rounds is not.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Shared contract — Lane SUSPEND and RESUME (`RETURN-TO`)
|
|
2
|
+
|
|
3
|
+
Canonical file: `_shared/lane-suspend.md`. THE canonical mechanic for a lane that
|
|
4
|
+
must **leave mid-run, let another lane settle something, and come back to the
|
|
5
|
+
work it had already done**. Load it wherever a lane hands control away and
|
|
6
|
+
expects control back.
|
|
7
|
+
|
|
8
|
+
## Why this is not a fallback
|
|
9
|
+
|
|
10
|
+
ORC already has `_shared/fallback-handoff.md` (`FALLBACK-FROM`), used when
|
|
11
|
+
`/orc-fast` cannot proceed. That contract **leaves and does not return** — the
|
|
12
|
+
receiving lane finishes the job and the sender is done.
|
|
13
|
+
|
|
14
|
+
A SUSPEND is the other shape. The sender has real work in hand — a half-built
|
|
15
|
+
frame, a pool of candidates, decisions already tagged — and that state must
|
|
16
|
+
survive the trip. Sending it through a fallback would silently destroy it.
|
|
17
|
+
|
|
18
|
+
| | `FALLBACK-FROM` | `RETURN-TO` |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| Who finishes the run | the receiver | the **sender**, after coming back |
|
|
21
|
+
| Sender state | abandoned | **snapshotted, then resumed** |
|
|
22
|
+
| The receiver's exits | its own | its own **plus** a return option |
|
|
23
|
+
| Trace | one run | **two runs, correctly counted as two** |
|
|
24
|
+
|
|
25
|
+
## The block
|
|
26
|
+
|
|
27
|
+
The suspending lane writes this into the receiving lane's opening context:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
RETURN-TO: <sender-lane>/<slug>
|
|
31
|
+
SNAPSHOT: <path to the sender's state file on disk>
|
|
32
|
+
GAP: <the one thing the receiver is being asked to settle, in one sentence>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Sender obligations — all four, in order
|
|
36
|
+
|
|
37
|
+
1. **Snapshot first, before leaving.** Write the sender's current state to disk.
|
|
38
|
+
A suspended run that cannot resume is worse than a file nobody asked for, so
|
|
39
|
+
this write happens even in a lane whose deliverable is otherwise gated on an
|
|
40
|
+
explicit yes — it is **run state, not the deliverable**, and the sender says
|
|
41
|
+
so in one line when it writes it.
|
|
42
|
+
2. **Offer, never force.** A suspend is one option among the alternatives
|
|
43
|
+
(answer it here · park it as a stated assumption and continue). The user
|
|
44
|
+
chooses; the lane waits.
|
|
45
|
+
3. **Enter the receiving lane** with the block above and the `GAP` as its opening
|
|
46
|
+
sentence.
|
|
47
|
+
4. **On return, resume at the phase you left** — never from scratch, never by
|
|
48
|
+
re-asking what the trip just settled.
|
|
49
|
+
|
|
50
|
+
## Receiver obligations
|
|
51
|
+
|
|
52
|
+
- **Run completely normally.** Its own phases, its own gates, its own trace, its
|
|
53
|
+
own run. A `RETURN-TO` marker changes nothing about how it works.
|
|
54
|
+
- **Add ONE exit option, present only under `RETURN-TO`:**
|
|
55
|
+
`Return to /<sender-lane> — carry these decisions back`, and it is the
|
|
56
|
+
recommended option in that state. Every other exit still works: a user who
|
|
57
|
+
picks "stop, save nothing" simply does not come back, and the sender's
|
|
58
|
+
snapshot is still on disk for a later re-open.
|
|
59
|
+
- **Carry decisions back with their tags intact** (`intent` / `constraint`, per
|
|
60
|
+
`_shared/interview.md`) plus `source: /<receiver-lane>`, and merge the facts it
|
|
61
|
+
looked up into the sender's own table. A decision that returns untagged is a
|
|
62
|
+
decision that stops becoming a `spec_invariants[]` entry downstream.
|
|
63
|
+
|
|
64
|
+
## The trace-pointer rule (the one that is easy to skip, and expensive)
|
|
65
|
+
|
|
66
|
+
A receiving lane **deletes `log_dir/.current` at its `FINISH`**. If the sender
|
|
67
|
+
resumes without noticing, every line it writes after the return goes nowhere —
|
|
68
|
+
the v0.34.2 split-run defect family wearing a new hat.
|
|
69
|
+
|
|
70
|
+
> **On RESUME, the suspending lane re-writes its own `.current` AND must
|
|
71
|
+
> `touch the trace file` it names, in the SAME step. Both, or neither.**
|
|
72
|
+
|
|
73
|
+
Then it narrates the trip: one event for the suspend, one for the return, in the
|
|
74
|
+
sender's own trace. **Two traces are correct here** — two lanes ran, and
|
|
75
|
+
`orc stats` counts two. The sender's trace records the trip; the receiver's
|
|
76
|
+
records the content.
|
|
77
|
+
|
|
78
|
+
## What never travels
|
|
79
|
+
|
|
80
|
+
A suspend does not widen anyone's authority. The receiver may not write the
|
|
81
|
+
sender's deliverable, and the sender may not re-open the receiver's decisions on
|
|
82
|
+
return — it records them and carries on.
|