@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,98 @@
|
|
|
1
|
+
# Plain English — what the lint actually checks
|
|
2
|
+
|
|
3
|
+
`orc challenge lint <path> [--template <p>]` is the deterministic half of this
|
|
4
|
+
lane. **Everything a computer can decide must never cost a model token**, and
|
|
5
|
+
"is this English simple enough for a non-native reader" is *substantially*
|
|
6
|
+
computable.
|
|
7
|
+
|
|
8
|
+
## Two honesty rules — stated here and printed by the command
|
|
9
|
+
|
|
10
|
+
1. **It is a SIGNAL, not a verdict** — the `/orc-aftermath` rule. A long sentence
|
|
11
|
+
is not automatically a defect. The lint never blocks; it feeds the judge, who
|
|
12
|
+
decides whether it costs the STATED AUDIENCE anything.
|
|
13
|
+
2. **It is English-specific and heuristic.** The grade formula is an estimate and
|
|
14
|
+
passive-voice detection is a pattern match. Say so, once, on the output.
|
|
15
|
+
|
|
16
|
+
Its real payoff: `lint.json` rides in the judge's slice, so the judge never
|
|
17
|
+
spends tokens counting sentences — it spends them on D2, the only dimension no
|
|
18
|
+
computer can reach. It is also useful standalone: `orc challenge lint README.md`
|
|
19
|
+
needs no cycle, no model, and no ORC run at all.
|
|
20
|
+
|
|
21
|
+
## Structure (needs `--template`)
|
|
22
|
+
|
|
23
|
+
- heading tree extracted from both, at **depth 2–3 only** (the H1 is the
|
|
24
|
+
document's title; a title that differs from the template's is the document
|
|
25
|
+
being about something, not a missing section)
|
|
26
|
+
- required sections **missing**, **out of order**, or **invented**
|
|
27
|
+
- **empty ceremony** — a heading with under 15 words of body. A CONTAINER (its
|
|
28
|
+
next heading is deeper) is skipped: its children carry the body
|
|
29
|
+
- table column-count consistency
|
|
30
|
+
- code fences with no language tag
|
|
31
|
+
- relative links and `file:line` anchors that do not resolve on disk
|
|
32
|
+
|
|
33
|
+
## Prose (no template needed)
|
|
34
|
+
|
|
35
|
+
| Check | Emits | Dimension |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Acronym used before it is defined | `L-###` at first use | D5 |
|
|
38
|
+
| Sentence over 25 words | `L-###`, plus a p50/p90 distribution | D5 |
|
|
39
|
+
| Passive voice (be-verb + participle heuristic) | a **percentage**; findings only past 25% | D5 |
|
|
40
|
+
| Idioms / phrasal verbs (the list below) | `L-###` | D5 |
|
|
41
|
+
| Sentences opening with a bare `This`/`It`/`They` | `L-###` | D3 |
|
|
42
|
+
| Placeholder markers | `L-###` | D6 |
|
|
43
|
+
| Ambiguous quantifiers | `L-###` | D6 |
|
|
44
|
+
| Flesch–Kincaid grade estimate | one number | — |
|
|
45
|
+
|
|
46
|
+
**Sentences are measured over PARAGRAPHS, not over lines.** A hard-wrapped
|
|
47
|
+
39-word sentence is still a 39-word sentence; splitting at the newline is how a
|
|
48
|
+
length check silently passes every wrapped document.
|
|
49
|
+
|
|
50
|
+
Code fences, tables, indented blocks, HTML comments, inline code and URL targets
|
|
51
|
+
are stripped before any prose metric runs. Counting a URL as a long sentence is
|
|
52
|
+
how a lint loses a reader's trust in one line of output.
|
|
53
|
+
|
|
54
|
+
## The curated lists
|
|
55
|
+
|
|
56
|
+
Mirrored in `bin/cli.js` (`LINT_IDIOMS`, `LINT_MARKERS`, `LINT_VAGUE`,
|
|
57
|
+
`LINT_COMMON_ACRONYMS`) — documented drift the token lint cannot see, because a
|
|
58
|
+
word list is not a single token. Change both together.
|
|
59
|
+
|
|
60
|
+
### Idioms and phrasal verbs
|
|
61
|
+
|
|
62
|
+
spin up · spun up · roll out · rolled out · kick off · kicked off · go-live ·
|
|
63
|
+
reach out · circle back · touch base · move the needle · low-hanging fruit ·
|
|
64
|
+
boil the ocean · ramp up · wind down · drill down · hash out · iron out ·
|
|
65
|
+
flesh out · in the weeds · on the same page · at the end of the day · bake in ·
|
|
66
|
+
baked in · double down · take a stab · ballpark · off the shelf
|
|
67
|
+
|
|
68
|
+
### Placeholder markers
|
|
69
|
+
|
|
70
|
+
`TBD` · `TODO` · `???` · `tbc` · `as needed` · `and so on` · `etc.` · `FIXME`
|
|
71
|
+
|
|
72
|
+
### Ambiguous quantifiers
|
|
73
|
+
|
|
74
|
+
some · several · appropriate · reasonable · quickly · efficient · efficiently ·
|
|
75
|
+
properly · adequate · sufficient · various · a number of · as required ·
|
|
76
|
+
if necessary · where applicable · robust · scalable · seamless
|
|
77
|
+
|
|
78
|
+
### Acronyms every technical reader already has
|
|
79
|
+
|
|
80
|
+
API · HTTP · HTTPS · JSON · YAML · XML · URL · URI · ID · UI · UX · CPU · RAM ·
|
|
81
|
+
SQL · CSV · PDF · HTML · CSS · CI · CD · PR · MR · AWS · GCP · SDK · CLI · IDE ·
|
|
82
|
+
OS · TLS · SSL · DNS · TCP · UDP · REST · CRUD · UUID · README · SLA · SLO · QA ·
|
|
83
|
+
AI · ML · LLM · ADR · PRD · TSD · FAQ
|
|
84
|
+
|
|
85
|
+
Everything else must be expanded on first use. That is a D5 finding, not a style
|
|
86
|
+
opinion — a reader who does not know what `SoR` means cannot check whether the
|
|
87
|
+
sentence is true.
|
|
88
|
+
|
|
89
|
+
## Thresholds
|
|
90
|
+
|
|
91
|
+
| | Default | Why |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| sentence length | 25 words | past this, a non-native reader re-reads |
|
|
94
|
+
| passive voice | 25% of sentences | a percentage, never a per-sentence finding |
|
|
95
|
+
| empty section | 15 words of body | below this it is ceremony, not content |
|
|
96
|
+
|
|
97
|
+
These are constants in the CLI, not config keys. A knob per threshold would turn
|
|
98
|
+
a signal into a negotiation.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# How the judge scores — and why it cannot pass anything
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
|
|
5
|
+
Reuses ORC's existing reviewer ladder, so nobody has to learn a second one.
|
|
6
|
+
|
|
7
|
+
| | Meaning in this lane |
|
|
8
|
+
|---|---|
|
|
9
|
+
| **P0** | The artifact actively **misleads**. A reader who follows it will build the wrong thing. |
|
|
10
|
+
| **P1** | The artifact is **incomplete or undecidable** at a load-bearing point. |
|
|
11
|
+
| **P2** | Advisory — real, worth fixing, not a blocker. |
|
|
12
|
+
| **P3** | Nit. |
|
|
13
|
+
|
|
14
|
+
Severity is about the CONSEQUENCE to the stated audience, never about how much
|
|
15
|
+
text is wrong. One missing number in an interface is a P0. Four paragraphs of
|
|
16
|
+
clumsy phrasing in a document nobody reads cold is a P3.
|
|
17
|
+
|
|
18
|
+
## PASS
|
|
19
|
+
|
|
20
|
+
> **PASS is computed, never declared.**
|
|
21
|
+
|
|
22
|
+
`PASS` = zero open findings at or above `challenge_pass_severity` (default `p1`),
|
|
23
|
+
**after** accepted exceptions are subtracted, **and** every selected dimension
|
|
24
|
+
reported a result.
|
|
25
|
+
|
|
26
|
+
`orc challenge record` computes it. The judge cannot: it reports findings, and
|
|
27
|
+
that is all. This is not ceremony — it removes leniency as a possibility. A judge
|
|
28
|
+
that can pass something can be talked into passing something.
|
|
29
|
+
A judge that **can only find, or fail to find** cannot.
|
|
30
|
+
|
|
31
|
+
The second half is structural too: `record` REJECTS an iteration in which a
|
|
32
|
+
selected dimension reported nothing, so "every dimension reported" is guaranteed
|
|
33
|
+
before the severity question is even asked.
|
|
34
|
+
|
|
35
|
+
## What a finding must carry
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
id · dimension · severity · anchor(file:line) · quote · what_is_wrong ·
|
|
39
|
+
consequence · acceptance_line · serves
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- **`consequence`** — what a reader BUILDS wrong because of this. A finding with
|
|
43
|
+
no consequence is a preference.
|
|
44
|
+
- **`acceptance_line`** — what "fixed" looks like, concretely. It is what stops
|
|
45
|
+
the fixer guessing, and it is what gives the next judge an objective re-check
|
|
46
|
+
instead of a fresh opinion.
|
|
47
|
+
- **`serves`** — which goal element the finding advances (`goal`, `audience`,
|
|
48
|
+
`done_means`, or a named `out_of_scope` entry). **A finding with no `serves` is
|
|
49
|
+
out of scope and is DROPPED by the CLI.**
|
|
50
|
+
|
|
51
|
+
## Zero findings is a legitimate outcome
|
|
52
|
+
|
|
53
|
+
Do not invent findings to look thorough. Do not soften one to be kind — you are
|
|
54
|
+
not the one who decides whether the artifact passes, so there is nothing to be
|
|
55
|
+
kind about.
|
|
56
|
+
|
|
57
|
+
## The two escape valves
|
|
58
|
+
|
|
59
|
+
A loop with no exit is a trap.
|
|
60
|
+
|
|
61
|
+
- **`orc challenge accept <slug> <id> "reason"`** — the user accepts a blocking
|
|
62
|
+
finding as a known gap. It stops blocking immediately, it stays visible forever
|
|
63
|
+
in the report under **Accepted exceptions** with the reason. *Never automatic*
|
|
64
|
+
— the `/orc-pact` retirement rule.
|
|
65
|
+
- **`orc challenge rebut <slug> <id> "reason"`** — the user thinks the judge is
|
|
66
|
+
wrong. The next judge must address it explicitly and return `withdrawn` (with
|
|
67
|
+
an admission) or `upheld` (with NEW evidence, not a restatement). **A rebutted
|
|
68
|
+
finding the next verdict ignores makes the iteration malformed and it is
|
|
69
|
+
rejected.** Without this, one bad finding loops forever and the user's only
|
|
70
|
+
move is to give up.
|
|
71
|
+
|
|
72
|
+
## Convergence, not a cap
|
|
73
|
+
|
|
74
|
+
There is no loop cap and there is no config key for one. Every other loop in ORC
|
|
75
|
+
(TDD 3, drift recovery 2, quick repair 3) runs inside one session and costs
|
|
76
|
+
tokens per turn. Here each turn is a separate human sitting down to work, and a
|
|
77
|
+
cap that refuses on iteration 6 would be refusing to review a hard document.
|
|
78
|
+
|
|
79
|
+
So: measure instead.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
convergence: 9 → 4 → 4 → 4 blocking findings over 4 iterations
|
|
83
|
+
⚠ stalled — no net reduction in 3 iterations.
|
|
84
|
+
|
|
85
|
+
Three honest options:
|
|
86
|
+
1 Narrow the rubric orc challenge init … --dimensions D1,D2,D6
|
|
87
|
+
2 Accept them as known gaps orc challenge accept tsd-payments F-003 "…"
|
|
88
|
+
3 Keep going /orc-challenge tsd-payments
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
It prints once when `stalled` flips true, and again only if the count RISES.
|
|
92
|
+
Never a block, never a nag repeated every iteration.
|
|
93
|
+
|
|
94
|
+
## Severity is about the consequence, never about who raised it
|
|
95
|
+
|
|
96
|
+
A council lens does not get a severity discount for being clever or a bump for
|
|
97
|
+
being enthusiastic. The ladder is unchanged and it asks one question: **what
|
|
98
|
+
happens to the STATED audience if this ships as written?**
|
|
99
|
+
|
|
100
|
+
`corroborated_by` — two lenses independently landing on the same defect — is the
|
|
101
|
+
strongest comprehension evidence this lane can produce, and it is **a signal,
|
|
102
|
+
never an automatic severity bump.** (The `/orc-aftermath` rule: churn is a
|
|
103
|
+
signal, not a verdict.) The judge may raise a severity because the corroboration
|
|
104
|
+
told it something about the consequence; it may never raise one because two
|
|
105
|
+
agents agreed.
|
|
106
|
+
|
|
107
|
+
And the contrarian's rule against manufacturing findings is the same rule
|
|
108
|
+
everybody else here lives under: **never invent a finding to look thorough, and
|
|
109
|
+
never soften one to look balanced.** Balance is the judge's job.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# The sealed slice
|
|
2
|
+
|
|
3
|
+
The single most important sentence in this lane:
|
|
4
|
+
|
|
5
|
+
> **the judge slice is SEALED** — its dispatch payload contains PATHS and IDs. It
|
|
6
|
+
> never contains prose written in this session.
|
|
7
|
+
|
|
8
|
+
**A fix is a claim; a verdict is evidence.** The moment the judge is handed a
|
|
9
|
+
summary of what changed, it is grading the summary. And the moment the session
|
|
10
|
+
that wrote the fix also writes the slice, the summary is written by the party
|
|
11
|
+
with an interest in passing.
|
|
12
|
+
|
|
13
|
+
## The permitted field list — complete
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
goals: orc/orc-challenge/tsd-payments/goals.md (frozen, v1)
|
|
17
|
+
artifact: docs/tsd-payments.md
|
|
18
|
+
template: orc/orc-challenge/tsd-payments/template.md (frozen, v1)
|
|
19
|
+
dimensions: <skill>/references/dimensions.md (selected: D1 D2 D3 D4 D5 D6)
|
|
20
|
+
lint: orc/orc-challenge/tsd-payments/iteration-02/lint.json
|
|
21
|
+
reader: orc/orc-challenge/tsd-payments/iteration-02/council/reader.md
|
|
22
|
+
contrarian: orc/orc-challenge/tsd-payments/iteration-02/council/contrarian.md
|
|
23
|
+
outsider: orc/orc-challenge/tsd-payments/iteration-02/council/outsider.md
|
|
24
|
+
executor: orc/orc-challenge/tsd-payments/iteration-02/council/executor.md
|
|
25
|
+
carry_ids: F-003 F-007 C-002
|
|
26
|
+
rebuttal_ids: F-007
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Every value is either a PATH or an ID. Nothing else may appear.
|
|
30
|
+
|
|
31
|
+
One row per **finding** lens on the roster, and no more. A council report is a
|
|
32
|
+
path to a file an *agent* wrote, so it does not breach the rule: the line this
|
|
33
|
+
rule actually draws is *"a summary written by the party with an interest in
|
|
34
|
+
passing"*, and no council member has one.
|
|
35
|
+
|
|
36
|
+
`goals.md` is a path, not prose — which is exactly why the goal is frozen to disk
|
|
37
|
+
at intake instead of being retyped into each dispatch. Every iteration's judge
|
|
38
|
+
reads the identical goal from the identical file, forever.
|
|
39
|
+
|
|
40
|
+
## The two reports that may NEVER appear
|
|
41
|
+
|
|
42
|
+
**`council/principles.md` and `council/expansionist.md` are forbidden in the
|
|
43
|
+
judge's slice.** Handing a judge a document arguing that the frozen goal is wrong
|
|
44
|
+
biases every finding it produces afterwards, and an opportunity is not a defect
|
|
45
|
+
at all. **The three finding lenses feed the judge; the two non-finding lenses
|
|
46
|
+
feed the user** — see `council.md`.
|
|
47
|
+
|
|
48
|
+
## What may NOT appear
|
|
49
|
+
|
|
50
|
+
- what changed since last time
|
|
51
|
+
- the diff, or `orc challenge diff`'s output
|
|
52
|
+
- the fix brief
|
|
53
|
+
- the previous `advice.md`
|
|
54
|
+
- the finding BODIES
|
|
55
|
+
- any sentence beginning "the user says", "they fixed", "this should now be"
|
|
56
|
+
- a severity suggestion, a hint about what to look at, or an expected outcome
|
|
57
|
+
|
|
58
|
+
**The judge opens `iteration-01/verdict.md` itself if it wants the carried
|
|
59
|
+
bodies.** Reading them from disk is fine; being handed a summary of them is not,
|
|
60
|
+
because a summary is where the bias enters.
|
|
61
|
+
|
|
62
|
+
## The reader's slice is even tighter
|
|
63
|
+
|
|
64
|
+
`orc-challenge-reader-opus-5-low` gets the artifact path(s), the questionnaire
|
|
65
|
+
protocol, and **the `audience` line only**, lifted from `goals.md`.
|
|
66
|
+
|
|
67
|
+
*Why the audience but not the goal:* "a reader without context" is meaningless
|
|
68
|
+
until you say WHICH reader — a staff engineer and a non-native junior are
|
|
69
|
+
different instruments. But telling the reader what the document is *trying to
|
|
70
|
+
achieve* hands it the answers it is supposed to have to find, and D4 measures
|
|
71
|
+
exactly the gap between the two.
|
|
72
|
+
|
|
73
|
+
Its tools are `Read` and nothing else. Not `Glob`, not `Grep`, not `Bash`. **The
|
|
74
|
+
instrument is defined by what it cannot reach.**
|
|
75
|
+
|
|
76
|
+
## The outsider's slice is the tightest in the lane
|
|
77
|
+
|
|
78
|
+
`orc-challenge-outsider-opus-5-low` gets **the artifact path(s) and its protocol.
|
|
79
|
+
Nothing else.** Not the goal, not the audience, not the kind, not the template,
|
|
80
|
+
not the repository. Its tools are `Read` and nothing else.
|
|
81
|
+
|
|
82
|
+
Tighter than the reader, which at least knows who it is reading as. The outsider
|
|
83
|
+
is not told, because the moment it can look anything up it stops being able to
|
|
84
|
+
measure what a stranger cannot find out.
|
|
85
|
+
|
|
86
|
+
## The advisor's slice is the loose one, on purpose
|
|
87
|
+
|
|
88
|
+
`orc-challenge-advisor-opus-5-med` gets `goals.md`, the verdict's findings, the
|
|
89
|
+
council reports, the artifact and the repository. It needs the goal because ORDERING a fix is a goal
|
|
90
|
+
question: which repair unblocks the most of what the user actually wants. It is
|
|
91
|
+
dispatched only on a FAIL, and it never writes prose for the artifact.
|
|
92
|
+
|
|
93
|
+
## Testable
|
|
94
|
+
|
|
95
|
+
`test/payload.test.js` greps this file and `../SKILL.md` for the sealed-slice
|
|
96
|
+
token and asserts the C4 dispatch block lists only path-shaped and ID-shaped
|
|
97
|
+
fields.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# `verdict.md` and the findings array
|
|
2
|
+
|
|
3
|
+
Two halves of one return. The **prose** is for a human reading the review; the
|
|
4
|
+
**array** is what `orc challenge record` gates and stores. They must agree —
|
|
5
|
+
`record` re-checks the file's sha forever after, so an edit to one without the
|
|
6
|
+
other shows up as `TAMPERED`.
|
|
7
|
+
|
|
8
|
+
## The file
|
|
9
|
+
|
|
10
|
+
`orc/orc-challenge/<slug>/iteration-NN/verdict.md`. `NN` is zero-padded so
|
|
11
|
+
iteration 10 sorts after iteration 9.
|
|
12
|
+
|
|
13
|
+
This is the file the reader thinks of as "the review". It lives inside its
|
|
14
|
+
iteration folder because an iteration has four artifacts, not one:
|
|
15
|
+
`lint.json` · `reader-report.md` · `verdict.md` · `advice.md` (absent on PASS).
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# Verdict — iteration 2 · tsd-payments
|
|
19
|
+
|
|
20
|
+
**Goal (frozen v1):** a backend team implements this without asking me anything
|
|
21
|
+
**Audience:** backend engineers, 2 of 5 non-native English readers
|
|
22
|
+
**Done means:** no open interface question and no TBD in §3–§7
|
|
23
|
+
|
|
24
|
+
Graded against template v1 · goal v1 · dimensions D1 D2 D3 D4 D5 D6
|
|
25
|
+
|
|
26
|
+
## Summary
|
|
27
|
+
|
|
28
|
+
Two sentences. What state the artifact is in, and what is standing between it
|
|
29
|
+
and the stated goal. Not a list — the list is below.
|
|
30
|
+
|
|
31
|
+
## Dimensions
|
|
32
|
+
|
|
33
|
+
| ID | Status | Findings | Note |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| D1 | CHECKED | 0 | every required section is present and carries content |
|
|
36
|
+
| D5 | NOT-CHECKED | — | challenge_reader is off |
|
|
37
|
+
|
|
38
|
+
## Carried findings
|
|
39
|
+
|
|
40
|
+
| id | outcome | why |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| F-001 | resolved | §3.2 now names the window as 24h |
|
|
43
|
+
| F-003 | still-open | Scope is still `TBD` |
|
|
44
|
+
| F-004 | withdrawn | the rebuttal is right — it is a quotation from JIRA-4412 |
|
|
45
|
+
|
|
46
|
+
## New findings
|
|
47
|
+
|
|
48
|
+
### F-014 · P1 · D2 — docs/tsd-payments.md:118
|
|
49
|
+
|
|
50
|
+
> the idempotency window is applied appropriately
|
|
51
|
+
|
|
52
|
+
**What is wrong:** the window is never given a value anywhere in the document.
|
|
53
|
+
**Consequence:** two teams implementing from this will pick different windows,
|
|
54
|
+
and the mismatch only shows up in production.
|
|
55
|
+
**Fixed when:** §4.2 names the window in seconds and the dead-letter destination.
|
|
56
|
+
**Serves:** done_means
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Every verdict restates the goal at the top.** Nobody should ever fix in the
|
|
60
|
+
dark.
|
|
61
|
+
|
|
62
|
+
## The array
|
|
63
|
+
|
|
64
|
+
One object per finding — new AND carried, in the same array:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
- id: F-014 # permanent. Never renumber, never reuse
|
|
68
|
+
dimension: D2 # one of D1…D7
|
|
69
|
+
severity: P1 # P0 | P1 | P2 | P3
|
|
70
|
+
anchor: "docs/tsd-payments.md:118" # real, resolvable
|
|
71
|
+
quote: "the idempotency window is applied appropriately"
|
|
72
|
+
what_is_wrong: "…"
|
|
73
|
+
consequence: "…" # what a reader BUILDS wrong
|
|
74
|
+
acceptance_line: "…" # what "fixed" looks like, concretely
|
|
75
|
+
serves: done_means # goal | audience | done_means | out_of_scope:<name>
|
|
76
|
+
# carried findings ALSO carry:
|
|
77
|
+
outcome: still-open # resolved | still-open | superseded | withdrawn
|
|
78
|
+
reason: "…" # required for withdrawn
|
|
79
|
+
superseded_by: F-021 # required for superseded
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Plus, at the top level of the return:
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
verdict_file: "iteration-02/verdict.md"
|
|
86
|
+
lint: { findings: 13, grade: 8.1 }
|
|
87
|
+
reader: { asked: 12, answered: 11, score: "11/12" }
|
|
88
|
+
dimensions:
|
|
89
|
+
- { id: D1, status: CHECKED, findings: 0 }
|
|
90
|
+
- { id: D5, status: NOT-CHECKED, reason: "challenge_reader is off" }
|
|
91
|
+
rebuttals_addressed:
|
|
92
|
+
- { id: F-004, result: withdrawn, reason: "agreed — it is a quotation" }
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## What `record` rejects, by name
|
|
96
|
+
|
|
97
|
+
| Rejection | Rule |
|
|
98
|
+
|---|---|
|
|
99
|
+
| a selected dimension reported nothing | 6 — silence is indistinguishable from a forgotten check |
|
|
100
|
+
| `NOT-CHECKED` with no reason | 6 |
|
|
101
|
+
| coverage below 100% | 4 — with the missing ids named |
|
|
102
|
+
| an outcome on a finding that was not open | 4 |
|
|
103
|
+
| `withdrawn` with no reason, `superseded` with no id | 4 |
|
|
104
|
+
| an open rebuttal not addressed | the rebuttal contract |
|
|
105
|
+
| the verdict file is missing from disk | 10 |
|
|
106
|
+
| a bad severity or an unknown dimension | the enums |
|
|
107
|
+
|
|
108
|
+
And one thing it does NOT reject: a finding with no `serves`. That one is
|
|
109
|
+
**dropped**, counted, and reported — it is out of scope of the stated goal, which
|
|
110
|
+
is a judge working outside its brief, not a broken return.
|
|
111
|
+
|
|
112
|
+
## Writing the return to disk
|
|
113
|
+
|
|
114
|
+
The skill writes the array to a temp JSON (inside the cycle folder), then:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
orc challenge record <slug> --iteration N --from orc/orc-challenge/<slug>/iteration-NN/verdict.json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The CLI prints the `trace_line` for the iteration. Use it verbatim — do not
|
|
121
|
+
compose a second wording for it.
|
|
122
|
+
|
|
123
|
+
## The council section (v0.49.1)
|
|
124
|
+
|
|
125
|
+
The verdict body gains one section, above the findings.
|
|
126
|
+
|
|
127
|
+
**One row per roster lens, and a NOT-RUN row keeps its slot with its reason** —
|
|
128
|
+
filtering it out makes *"the contrarian found nothing"* and *"the contrarian
|
|
129
|
+
never ran"* look identical. Rule 15.
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
council v1 — 4 of 5 ran
|
|
133
|
+
|
|
134
|
+
RAN reader raised 3 · adopted 2 · merged 1 · rejected 0 · out-of-goal 0
|
|
135
|
+
RAN contrarian raised 6 · adopted 4 · merged 1 · rejected 1 · out-of-goal 0
|
|
136
|
+
RAN outsider raised 3 · adopted 1 · merged 2 · rejected 0 · out-of-goal 0
|
|
137
|
+
RAN executor raised 2 · adopted 2 · merged 0 · rejected 0 · out-of-goal 0
|
|
138
|
+
NOT-RUN principles usage limit reached mid-batch
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then the **disposition table** — every id the council raised, with the ONE
|
|
142
|
+
disposition it got and its reason. `council_coverage_pct` must be 100 or
|
|
143
|
+
`orc challenge record` rejects the verdict and names the missing ids.
|
|
144
|
+
|
|
145
|
+
Every finding line carries its **lens**, and where two lenses landed on the same
|
|
146
|
+
defect, `also found by: outsider`. **Corroboration is a signal, never an
|
|
147
|
+
automatic severity bump.**
|
|
148
|
+
|
|
149
|
+
An **adopted council finding keeps the raiser's id.** `C-004` is `C-004` here and
|
|
150
|
+
in iteration 9.
|
|
151
|
+
|
|
152
|
+
The council executor's `monday_morning` list is printed verbatim — including
|
|
153
|
+
`monday_morning_stops_at`, which is the most legible sentence this lane produces
|
|
154
|
+
for a non-engineer.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: orc-claude
|
|
3
|
+
description: >
|
|
4
|
+
CLAUDE.md builder/updater for the LOCAL project. Use for "/orc-claude",
|
|
5
|
+
"build a CLAUDE.md", "update the CLAUDE.md", or "refresh the CLAUDE.md".
|
|
6
|
+
Runs INDEPENDENTLY — no orchestrator, no run folder. Scans the repo for
|
|
7
|
+
ground-truth facts (verified commands, layout, conventions, boundaries) and
|
|
8
|
+
writes a section-fenced, version-stamped CLAUDE.md at the repo root — even
|
|
9
|
+
when ORC itself is installed globally. Never asks questions: P0 rules are a
|
|
10
|
+
template the user fills in themself. Refresh regenerates ONLY stale sections
|
|
11
|
+
and bumps the file version by 0.0.1. Never trims user-authored content;
|
|
12
|
+
never touches the orc-wiki pointer block. The skill dispatches the pinned
|
|
13
|
+
orc-claude-writer-opus-4-8-high agent — it never writes the file itself.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# ORC-CLAUDE (standalone)
|
|
17
|
+
|
|
18
|
+
Build or maintain the **local project's** `CLAUDE.md` from verified repo facts.
|
|
19
|
+
The target is ALWAYS `<repo root>/CLAUDE.md` of the current working directory —
|
|
20
|
+
never `~/.claude/CLAUDE.md`, even if ORC is installed globally.
|
|
21
|
+
|
|
22
|
+
**Dispatch, don't do.** Whatever model this chat runs on, the skill itself only
|
|
23
|
+
selects the mode and spawns `orc-claude-writer-opus-4-8-high` (the pinned
|
|
24
|
+
engine) — so the scan + writing always run at Opus 4.8 high regardless of the
|
|
25
|
+
caller's tier. When `opus5_only: true` the engine is
|
|
26
|
+
`orc-claude-writer-opus-5-med` instead (that mode FORCES it — see
|
|
27
|
+
`../_shared/opus5-only.md`), and it then needs an Opus 5 main session.
|
|
28
|
+
The one exception: the skill also writes the
|
|
29
|
+
trace pointer + a few markers around that spawn (behavior-trace logging is
|
|
30
|
+
permanent; see "Behavior trace"); that
|
|
31
|
+
tracing is its ONLY self-write — the `CLAUDE.md` write is always the writer's.
|
|
32
|
+
**Fully non-interactive: ask the user NOTHING.** No AskUserQuestion, no
|
|
33
|
+
confirmation prompts. Dispatch, relay the report, stop.
|
|
34
|
+
|
|
35
|
+
**Worked example** (orient only — never execute from it):
|
|
36
|
+
`examples/claude-run-mock.md`.
|
|
37
|
+
|
|
38
|
+
## The three modes (auto-selected, in this order)
|
|
39
|
+
|
|
40
|
+
1. **REFRESH** — `CLAUDE.md` exists AND contains an `orc-claude:meta` header.
|
|
41
|
+
Recompute section fingerprints; regenerate ONLY stale fenced sections;
|
|
42
|
+
bump `version` by exactly 0.0.1; update `updated:` (DD-MM-YYYY). Nothing
|
|
43
|
+
stale → report "up to date (vX.Y.Z)" and write NOTHING (no bump, no bak).
|
|
44
|
+
Protocol: `references/refresh.md`.
|
|
45
|
+
2. **UPDATE** — `CLAUDE.md` exists but has NO `orc-claude:meta` header (a
|
|
46
|
+
foreign / hand-written file). Copy it to `CLAUDE.md.bak` first (one bak,
|
|
47
|
+
overwritten each run; offer a `.gitignore` line for it in the report). Then
|
|
48
|
+
inject the meta header at the top and append/merge fenced generated
|
|
49
|
+
sections at version `0.0.1`.
|
|
50
|
+
**NEVER trim, delete, reorder, or rewrite existing user content — not one
|
|
51
|
+
line.** If a generated section would duplicate what the user already wrote,
|
|
52
|
+
generate the slimmer remainder or skip that section. The merged file MAY
|
|
53
|
+
exceed the budget (e.g. 600 existing lines + generated → 800): that is OK
|
|
54
|
+
by design — end the report with a hard note that the user should trim
|
|
55
|
+
unused content themself for better instruction-following.
|
|
56
|
+
3. **CREATE** — no `CLAUDE.md` at the repo root. Generate a fresh one from
|
|
57
|
+
`references/template.md` at version `0.0.1`.
|
|
58
|
+
|
|
59
|
+
Not inside a git repo / no project root findable → say so and stop.
|
|
60
|
+
|
|
61
|
+
## Dispatch (the skill's only real job)
|
|
62
|
+
|
|
63
|
+
Behavior-trace logging is permanent (always on). Weave the **Trace:** steps below
|
|
64
|
+
into the procedure — this skill owns a minimal one-dispatch trace (full marker
|
|
65
|
+
set in "Behavior trace").
|
|
66
|
+
|
|
67
|
+
1. Detect the repo root and pick the mode (REFRESH / UPDATE / CREATE above —
|
|
68
|
+
header sniff only; the writer re-verifies). **Trace:** open the run now —
|
|
69
|
+
write `log_dir/.current` = `run-claude-<slug>-<DDMMYY>-<HHMMSS>.txt` and
|
|
70
|
+
`touch the trace file` of that name in the SAME step, BEFORE the spawn (a
|
|
71
|
+
pointer to a file that does not exist reads as dangling — the hook rotates
|
|
72
|
+
away from it and the run splits across two files).
|
|
73
|
+
2. Spawn `orc-claude-writer-opus-4-8-high` — or `orc-claude-writer-opus-5-med`
|
|
74
|
+
when `opus5_only` — with: `mode`, `repo_root`,
|
|
75
|
+
`budget` (from a `budget=N` argument, else null), and the paths to
|
|
76
|
+
`references/template.md` + `references/refresh.md`. **Trace:** emit
|
|
77
|
+
`DISPATCH orc-claude-writer :: <mode> expect=opus-4-8/high` just before the
|
|
78
|
+
spawn (`expect=opus-5/medium` under `opus5_only` — the expectation is
|
|
79
|
+
derived from the agent NAME you actually dispatched, never from this line's
|
|
80
|
+
default; the hook then adds `SPAWN`/`RETURN` on its own).
|
|
81
|
+
3. On return, check `actual_model`/`actual_effort` against the pinned tier —
|
|
82
|
+
mismatch → prepend a tier-downgrade warning to the report. **Trace:** emit
|
|
83
|
+
`VERIFY writer actual=<model>/<effort> ✅ MATCH` (or
|
|
84
|
+
`⛔ DOWNGRADE expected=opus-4-8/high`).
|
|
85
|
+
4. Relay the Phase-3 report verbatim. **Trace:** emit
|
|
86
|
+
`FINISH :: <mode_ran> CLAUDE.md v<X.Y.Z>` (mode_ran may be `noop`), then
|
|
87
|
+
delete `log_dir/.current`. Then stop. The skill NEVER writes CLAUDE.md
|
|
88
|
+
itself — not even in a "trivial" refresh.
|
|
89
|
+
|
|
90
|
+
The writer performs Phases 1–3 below.
|
|
91
|
+
|
|
92
|
+
## Phase 1 — ground-truth scan (facts, never guesses)
|
|
93
|
+
|
|
94
|
+
Read-only. Detect from real files, never from memory:
|
|
95
|
+
|
|
96
|
+
- **Stack & manifests:** `package.json`, `pyproject.toml`, `go.mod`,
|
|
97
|
+
`Cargo.toml`, `pom.xml`/`build.gradle`, `*.csproj`, `composer.json`,
|
|
98
|
+
`Gemfile`, `mix.exs` … Monorepo? (workspaces, `pnpm-workspace.yaml`,
|
|
99
|
+
`turbo.json`, `nx.json`, multiple manifests).
|
|
100
|
+
- **Commands:** only invocations that PROVABLY exist — a script in a manifest,
|
|
101
|
+
a Makefile/Taskfile target, a CI step. Prefer the single-test form when the
|
|
102
|
+
runner supports one. **Never invent a command.** Unverifiable → omit.
|
|
103
|
+
- **Conventions:** lint/format/type configs (eslint, prettier, biome, ruff,
|
|
104
|
+
black, clippy, tsconfig strictness…) + a small sample of real source files.
|
|
105
|
+
Record only DEVIATIONS from language defaults.
|
|
106
|
+
- **Boundaries:** generated/vendored/build dirs (from `.gitignore` + tree),
|
|
107
|
+
lockfiles, migration dirs, obvious legacy zones.
|
|
108
|
+
- **Environment:** env-var NAMES referenced in code/config/`.env.example`
|
|
109
|
+
(never values), external services.
|
|
110
|
+
|
|
111
|
+
## Phase 2 — generate / merge
|
|
112
|
+
|
|
113
|
+
Follow `references/template.md` exactly: the meta header, the section order
|
|
114
|
+
(Zone A rules → Zone B reference), and the fence grammar. Every generated
|
|
115
|
+
section sits inside `<!-- orc-claude:section <name> -->` …
|
|
116
|
+
`<!-- /orc-claude:section -->` fences so refresh can replace it surgically.
|
|
117
|
+
Sections whose scan came back empty are OMITTED, not stubbed.
|
|
118
|
+
|
|
119
|
+
**P0 is user-authored, always.** Emit the P0 placeholder template from
|
|
120
|
+
`references/template.md` with its hard fill-it-yourself note. Never invent P0
|
|
121
|
+
rules, never ask for them. Same for the other `@user` sections (Boundaries'
|
|
122
|
+
user half, Gotchas, Glossary): placeholder + note, then leave.
|
|
123
|
+
|
|
124
|
+
**Line budget — generated content only.** Default 400 lines, persisted as
|
|
125
|
+
`line-budget:` in the meta header. The budget counts ONLY orc-claude's own
|
|
126
|
+
output (header + fenced sections) — existing user content NEVER counts against
|
|
127
|
+
it and is NEVER trimmed to meet it. If generation would exceed the budget,
|
|
128
|
+
trim Zone B first: move overflow to a `docs/` file and leave an `@docs/...`
|
|
129
|
+
pointer. Zone A is never cut. The user may pass a different budget as an
|
|
130
|
+
argument (`/orc-claude budget=600`) — honor it and persist it in the header.
|
|
131
|
+
|
|
132
|
+
**Wiki block is untouchable.** If the file contains an `ORC-WIKI:START` /
|
|
133
|
+
`ORC-WIKI:END` block (managed by orc-wiki), byte-preserve it and generate no
|
|
134
|
+
wiki-overlapping content. orc-claude never writes inside another skill's
|
|
135
|
+
markers.
|
|
136
|
+
|
|
137
|
+
## Phase 3 — report
|
|
138
|
+
|
|
139
|
+
Show a short summary and STOP:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
ORC-CLAUDE — <create|update|refresh> → CLAUDE.md v<X.Y.Z> (<DD-MM-YYYY>)
|
|
143
|
+
Sections written: <list> · skipped (empty scan): <list>
|
|
144
|
+
Sections stale→refreshed: <list> (refresh mode only)
|
|
145
|
+
Preserved untouched: user content (<n> lines), wiki block
|
|
146
|
+
Conflicts flagged (scan contradicts existing text — NOT auto-edited):
|
|
147
|
+
- <file says X, repo shows Y>
|
|
148
|
+
Backup: CLAUDE.md.bak <written|not needed> (add it to .gitignore)
|
|
149
|
+
NOTE: file is <n> lines total (budget covers generated content only) — trim
|
|
150
|
+
unused user content yourself for better instruction-following.
|
|
151
|
+
Fill in the P0 / Gotchas / Glossary placeholders yourself — orc-claude never
|
|
152
|
+
writes them for you.
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Behavior trace (PERMANENT — a minimal one-dispatch orchestrator; always on)
|
|
156
|
+
|
|
157
|
+
orc-claude owns the trace protocol for its run exactly
|
|
158
|
+
like the full orchestrator — but it is a SINGLE-DISPATCH lane, so it emits ONLY
|
|
159
|
+
the markers it can truthfully witness. It does **not** emit `PHASE`/`SCORE`/
|
|
160
|
+
`FINDING`/`VERDICT`: the scan/generate/report phases run INSIDE the writer
|
|
161
|
+
sub-agent (which self-traces nothing — it only returns `actual_model`/
|
|
162
|
+
`actual_effort`), and there is no scoring or review in this lane. Resolve
|
|
163
|
+
`log_dir` (`../orc/config.md` default + `.claude/orc.config.yaml`)
|
|
164
|
+
at start and follow `../orc/references/trace-protocol.md`. The marker set, in
|
|
165
|
+
order (all under actor `orc`, plus the hook's `SPAWN`/`RETURN`):
|
|
166
|
+
|
|
167
|
+
1. `log_dir/.current` = `run-claude-<slug>-<DDMMYY>-<HHMMSS>.txt` — written FIRST
|
|
168
|
+
(the hook also bootstraps it on the writer dispatch, so the skeleton is never
|
|
169
|
+
lost, and the end-of-run packet renames a bootstrapped file).
|
|
170
|
+
2. `DISPATCH orc-claude-writer :: <mode> expect=opus-4-8/high` — before the
|
|
171
|
+
spawn. The hook then appends `SPAWN`/`RETURN` around the dispatch. The mode
|
|
172
|
+
rides in this line's tail (and in `FINISH`), so no separate mode marker.
|
|
173
|
+
3. `VERIFY writer actual=<model>/<effort> ✅ MATCH` or
|
|
174
|
+
`⛔ DOWNGRADE expected=opus-4-8/high` — from the writer's returned
|
|
175
|
+
`actual_model`/`actual_effort` (the one honesty signal this lane feeds
|
|
176
|
+
`/orc-retro`).
|
|
177
|
+
4. `FINISH :: <mode_ran> CLAUDE.md v<X.Y.Z>` (mode_ran may be `noop`), then
|
|
178
|
+
delete `.current`.
|
|
179
|
+
|
|
180
|
+
Narration is **dispatched, never remembered**: record each marker with its REAL
|
|
181
|
+
timestamp as its event happens, then — as a single-dispatch lane — dispatch the
|
|
182
|
+
trace writer ONCE with the whole event list plus `decisions` (the WHY: mode
|
|
183
|
+
choice, what the user asked) after the writer return validates and BEFORE you
|
|
184
|
+
delete `.current`. Stamps are the run's timeline, never the write time, and a run
|
|
185
|
+
that ends with zero new trace lines is a protocol violation. A noop refresh still
|
|
186
|
+
traces the full cycle (ending `FINISH :: noop`) and still deletes `.current`.
|
|
187
|
+
|
|
188
|
+
## Boundaries
|
|
189
|
+
|
|
190
|
+
- **Writes ONLY** `CLAUDE.md`, `CLAUDE.md.bak`, and (on budget overflow) a
|
|
191
|
+
`docs/` overflow file. Never edits source code, never commits, never pushes.
|
|
192
|
+
- **Never asks the user anything.** Placeholders + report notes replace every
|
|
193
|
+
question.
|
|
194
|
+
- **Never deletes or rewrites user-authored lines** — contradictions are
|
|
195
|
+
flagged in the report, not fixed.
|
|
196
|
+
- **Never touches** the orc-wiki managed block or any other skill's markers.
|
|
197
|
+
- Version bumps are always exactly +0.0.1; dates are always DD-MM-YYYY.
|
|
198
|
+
- Reminder: to see usage limits, tell the user to run `/usage` (never invoke
|
|
199
|
+
it programmatically).
|