@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.
Files changed (449) hide show
  1. package/CHANGELOG.md +2017 -0
  2. package/README-id.md +521 -0
  3. package/README.md +485 -0
  4. package/bin/build-agents.js +86 -0
  5. package/bin/cli.js +29050 -0
  6. package/bin/mockrun-catalog.js +267 -0
  7. package/bin/onboarding-content.js +172 -0
  8. package/bin/pricing.json +200 -0
  9. package/bin/providers.json +437 -0
  10. package/bin/ui.js +95 -0
  11. package/bin/verify-contracts.js +3277 -0
  12. package/bin/verify-package.js +498 -0
  13. package/bin/webui/api.js +1163 -0
  14. package/bin/webui/app.html +198 -0
  15. package/bin/webui/css/00-tokens.css +92 -0
  16. package/bin/webui/css/01-base.css +42 -0
  17. package/bin/webui/css/02-shell.css +103 -0
  18. package/bin/webui/css/03-components.css +462 -0
  19. package/bin/webui/css/04-motion.css +91 -0
  20. package/bin/webui/css/05-tour.css +100 -0
  21. package/bin/webui/css/06-responsive.css +108 -0
  22. package/bin/webui/css/panels/boundary.css +26 -0
  23. package/bin/webui/css/panels/challenge.css +151 -0
  24. package/bin/webui/css/panels/crosslink.css +194 -0
  25. package/bin/webui/css/panels/docs.css +254 -0
  26. package/bin/webui/css/panels/experiment.css +23 -0
  27. package/bin/webui/css/panels/extra.css +536 -0
  28. package/bin/webui/css/panels/flow.css +177 -0
  29. package/bin/webui/css/panels/handoff.css +67 -0
  30. package/bin/webui/css/panels/knowledge.css +86 -0
  31. package/bin/webui/css/panels/learn.css +154 -0
  32. package/bin/webui/css/panels/maintenance.css +55 -0
  33. package/bin/webui/css/panels/mockrun.css +268 -0
  34. package/bin/webui/css/panels/overview.css +100 -0
  35. package/bin/webui/css/panels/pact.css +43 -0
  36. package/bin/webui/css/panels/runs.css +105 -0
  37. package/bin/webui/css/panels/settings.css +227 -0
  38. package/bin/webui/css/panels/stats.css +87 -0
  39. package/bin/webui/fixtures/boundary.js +92 -0
  40. package/bin/webui/fixtures/challenge.js +825 -0
  41. package/bin/webui/fixtures/crosslink.js +31 -0
  42. package/bin/webui/fixtures/docs.js +982 -0
  43. package/bin/webui/fixtures/extra.js +1934 -0
  44. package/bin/webui/fixtures/flow.js +81 -0
  45. package/bin/webui/fixtures/handoff.js +35 -0
  46. package/bin/webui/fixtures/index.js +486 -0
  47. package/bin/webui/fixtures/knowledge.js +291 -0
  48. package/bin/webui/fixtures/maintenance.js +42 -0
  49. package/bin/webui/fixtures/mockrun.js +36 -0
  50. package/bin/webui/fixtures/pact.js +111 -0
  51. package/bin/webui/fixtures/runs.js +109 -0
  52. package/bin/webui/fixtures/settings.js +78 -0
  53. package/bin/webui/fixtures/shell.js +48 -0
  54. package/bin/webui/fixtures/stats.js +104 -0
  55. package/bin/webui/i18n/TERMS.md +134 -0
  56. package/bin/webui/i18n/en/banner.json +29 -0
  57. package/bin/webui/i18n/en/boundary.json +20 -0
  58. package/bin/webui/i18n/en/challenge.json +106 -0
  59. package/bin/webui/i18n/en/common.json +69 -0
  60. package/bin/webui/i18n/en/crosslink.json +69 -0
  61. package/bin/webui/i18n/en/docs.json +175 -0
  62. package/bin/webui/i18n/en/experiment.json +17 -0
  63. package/bin/webui/i18n/en/extra.json +313 -0
  64. package/bin/webui/i18n/en/flow.json +30 -0
  65. package/bin/webui/i18n/en/handoff.json +37 -0
  66. package/bin/webui/i18n/en/knowledge.json +141 -0
  67. package/bin/webui/i18n/en/learn.json +16 -0
  68. package/bin/webui/i18n/en/maintenance.json +52 -0
  69. package/bin/webui/i18n/en/mockrun.json +19 -0
  70. package/bin/webui/i18n/en/nav.json +19 -0
  71. package/bin/webui/i18n/en/overview.json +89 -0
  72. package/bin/webui/i18n/en/pact.json +36 -0
  73. package/bin/webui/i18n/en/runs.json +51 -0
  74. package/bin/webui/i18n/en/settings.json +49 -0
  75. package/bin/webui/i18n/en/stats.json +69 -0
  76. package/bin/webui/i18n/en/tour.json +33 -0
  77. package/bin/webui/i18n/id/banner.json +29 -0
  78. package/bin/webui/i18n/id/boundary.json +20 -0
  79. package/bin/webui/i18n/id/challenge.json +106 -0
  80. package/bin/webui/i18n/id/common.json +70 -0
  81. package/bin/webui/i18n/id/crosslink.json +69 -0
  82. package/bin/webui/i18n/id/docs.json +175 -0
  83. package/bin/webui/i18n/id/experiment.json +17 -0
  84. package/bin/webui/i18n/id/extra.json +313 -0
  85. package/bin/webui/i18n/id/flow.json +30 -0
  86. package/bin/webui/i18n/id/handoff.json +37 -0
  87. package/bin/webui/i18n/id/knowledge.json +141 -0
  88. package/bin/webui/i18n/id/learn.json +16 -0
  89. package/bin/webui/i18n/id/maintenance.json +52 -0
  90. package/bin/webui/i18n/id/mockrun.json +19 -0
  91. package/bin/webui/i18n/id/nav.json +19 -0
  92. package/bin/webui/i18n/id/overview.json +89 -0
  93. package/bin/webui/i18n/id/pact.json +36 -0
  94. package/bin/webui/i18n/id/runs.json +51 -0
  95. package/bin/webui/i18n/id/settings.json +49 -0
  96. package/bin/webui/i18n/id/stats.json +69 -0
  97. package/bin/webui/i18n/id/tour.json +33 -0
  98. package/bin/webui/js/00-core.js +115 -0
  99. package/bin/webui/js/01-i18n.js +149 -0
  100. package/bin/webui/js/02-ui.js +211 -0
  101. package/bin/webui/js/03-md.js +286 -0
  102. package/bin/webui/js/04-router.js +51 -0
  103. package/bin/webui/js/05-banners.js +172 -0
  104. package/bin/webui/js/06-edit.js +183 -0
  105. package/bin/webui/js/90-tour.js +488 -0
  106. package/bin/webui/js/91-shortcuts.js +126 -0
  107. package/bin/webui/js/99-boot.js +118 -0
  108. package/bin/webui/js/panels/boundary.js +104 -0
  109. package/bin/webui/js/panels/challenge.js +781 -0
  110. package/bin/webui/js/panels/crosslink.js +654 -0
  111. package/bin/webui/js/panels/docs.js +1338 -0
  112. package/bin/webui/js/panels/experiment.js +98 -0
  113. package/bin/webui/js/panels/extra.js +3011 -0
  114. package/bin/webui/js/panels/flow.js +297 -0
  115. package/bin/webui/js/panels/handoff.js +169 -0
  116. package/bin/webui/js/panels/knowledge.js +890 -0
  117. package/bin/webui/js/panels/learn.js +220 -0
  118. package/bin/webui/js/panels/maintenance.js +235 -0
  119. package/bin/webui/js/panels/mockrun.js +227 -0
  120. package/bin/webui/js/panels/overview.js +447 -0
  121. package/bin/webui/js/panels/pact.js +189 -0
  122. package/bin/webui/js/panels/runs.js +416 -0
  123. package/bin/webui/js/panels/settings.js +573 -0
  124. package/bin/webui/js/panels/stats.js +378 -0
  125. package/bin/webui/serve.js +557 -0
  126. package/mock-run/INDEX.md +106 -0
  127. package/mock-run/a-normal-day.md +587 -0
  128. package/mock-run/context-combiner.md +100 -0
  129. package/mock-run/extra-recovery.md +330 -0
  130. package/mock-run/extra-slots.md +177 -0
  131. package/mock-run/media/README.md +43 -0
  132. package/mock-run/orc-aftermath.md +392 -0
  133. package/mock-run/orc-boundary.md +356 -0
  134. package/mock-run/orc-brainstorm.md +177 -0
  135. package/mock-run/orc-budget.md +534 -0
  136. package/mock-run/orc-challenge-council.md +262 -0
  137. package/mock-run/orc-challenge.md +416 -0
  138. package/mock-run/orc-cli.md +200 -0
  139. package/mock-run/orc-diy.md +129 -0
  140. package/mock-run/orc-doc.md +448 -0
  141. package/mock-run/orc-explain.md +86 -0
  142. package/mock-run/orc-export.md +423 -0
  143. package/mock-run/orc-extra.md +392 -0
  144. package/mock-run/orc-fast.md +106 -0
  145. package/mock-run/orc-grill.md +151 -0
  146. package/mock-run/orc-handoff.md +480 -0
  147. package/mock-run/orc-pact.md +421 -0
  148. package/mock-run/orc-pattern.md +112 -0
  149. package/mock-run/orc-plan.md +108 -0
  150. package/mock-run/orc-pr-setup.md +126 -0
  151. package/mock-run/orc-quick.md +113 -0
  152. package/mock-run/orc-route.md +93 -0
  153. package/mock-run/orc-ui.md +125 -0
  154. package/mock-run/orc-ultra.md +103 -0
  155. package/mock-run/orc.md +157 -0
  156. package/mock-run/the-example-project.md +55 -0
  157. package/package.json +39 -0
  158. package/templates/agents/MODEL-MAPPING.md +168 -0
  159. package/templates/agents/orc-advisor-fable-5.md +50 -0
  160. package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
  161. package/templates/agents/orc-analyst-fable-5.md +115 -0
  162. package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
  163. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
  164. package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
  165. package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
  166. package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
  167. package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
  168. package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
  169. package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
  170. package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
  171. package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
  172. package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
  173. package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
  174. package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
  175. package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
  176. package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
  177. package/templates/agents/orc-executor-haiku-4-5.md +113 -0
  178. package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
  179. package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
  180. package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
  181. package/templates/agents/orc-executor-opus-5-high.md +114 -0
  182. package/templates/agents/orc-executor-opus-5-low.md +114 -0
  183. package/templates/agents/orc-executor-opus-5-med.md +114 -0
  184. package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
  185. package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
  186. package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
  187. package/templates/agents/orc-judge-fable-5.md +79 -0
  188. package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
  189. package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
  190. package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
  191. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
  192. package/templates/agents/orc-planner-fable-5.md +152 -0
  193. package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
  194. package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
  195. package/templates/agents/orc-planner-opus-5-med.md +160 -0
  196. package/templates/agents/orc-retro-opus-5-med.md +73 -0
  197. package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
  198. package/templates/agents/orc-reviewer-fable-5.md +57 -0
  199. package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
  200. package/templates/agents/orc-scout-opus-5-low.md +40 -0
  201. package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
  202. package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
  203. package/templates/agents/orc-test-author-opus-5-med.md +71 -0
  204. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
  205. package/templates/agents/orc-verifier-opus-5-med.md +69 -0
  206. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
  207. package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
  208. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
  209. package/templates/commands/orc-aftermath.md +49 -0
  210. package/templates/commands/orc-analyze.md +21 -0
  211. package/templates/commands/orc-boundary.md +46 -0
  212. package/templates/commands/orc-brainstorm.md +51 -0
  213. package/templates/commands/orc-budget.md +54 -0
  214. package/templates/commands/orc-challenge.md +58 -0
  215. package/templates/commands/orc-claude.md +14 -0
  216. package/templates/commands/orc-diy.md +13 -0
  217. package/templates/commands/orc-doc.md +128 -0
  218. package/templates/commands/orc-explain.md +20 -0
  219. package/templates/commands/orc-export.md +46 -0
  220. package/templates/commands/orc-fast.md +15 -0
  221. package/templates/commands/orc-grill.md +40 -0
  222. package/templates/commands/orc-handoff.md +52 -0
  223. package/templates/commands/orc-learn.md +17 -0
  224. package/templates/commands/orc-mini.md +12 -0
  225. package/templates/commands/orc-pact.md +44 -0
  226. package/templates/commands/orc-pattern.md +15 -0
  227. package/templates/commands/orc-plan.md +22 -0
  228. package/templates/commands/orc-poly.md +21 -0
  229. package/templates/commands/orc-pr-driver.md +30 -0
  230. package/templates/commands/orc-pr-setup.md +31 -0
  231. package/templates/commands/orc-quick.md +33 -0
  232. package/templates/commands/orc-retro.md +17 -0
  233. package/templates/commands/orc-route.md +41 -0
  234. package/templates/commands/orc-ultra.md +17 -0
  235. package/templates/commands/orc-verify.md +11 -0
  236. package/templates/commands/orc-wiki.md +42 -0
  237. package/templates/commands/orc.md +16 -0
  238. package/templates/hooks/orc-effort-guard.js +178 -0
  239. package/templates/hooks/orc-statusline.js +305 -0
  240. package/templates/hooks/orc-trace.js +471 -0
  241. package/templates/hooks/orc-update-lib.js +125 -0
  242. package/templates/skills/_shared/README.md +50 -0
  243. package/templates/skills/_shared/detecting-artifacts.md +90 -0
  244. package/templates/skills/_shared/drift-recovery.md +98 -0
  245. package/templates/skills/_shared/extra-dispatch.md +1051 -0
  246. package/templates/skills/_shared/fable5-override.md +56 -0
  247. package/templates/skills/_shared/fallback-handoff.md +42 -0
  248. package/templates/skills/_shared/gh-stack-commands.md +65 -0
  249. package/templates/skills/_shared/gotchas.md +177 -0
  250. package/templates/skills/_shared/interview.md +144 -0
  251. package/templates/skills/_shared/lane-suspend.md +82 -0
  252. package/templates/skills/_shared/opus5-only.md +131 -0
  253. package/templates/skills/_shared/pr-templates.md +106 -0
  254. package/templates/skills/_shared/read-ladder.md +54 -0
  255. package/templates/skills/_shared/return-validation.md +145 -0
  256. package/templates/skills/_shared/smoke-gate.md +28 -0
  257. package/templates/skills/_shared/stack-plan.md +135 -0
  258. package/templates/skills/_shared/untrusted-input.md +63 -0
  259. package/templates/skills/context-combiner/SKILL.md +187 -0
  260. package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
  261. package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
  262. package/templates/skills/orc/README.md +150 -0
  263. package/templates/skills/orc/SKILL.md +526 -0
  264. package/templates/skills/orc/config.md +389 -0
  265. package/templates/skills/orc/examples/full-run-mock.md +73 -0
  266. package/templates/skills/orc/references/analyst-gates.md +124 -0
  267. package/templates/skills/orc/references/effort-and-mode.md +224 -0
  268. package/templates/skills/orc/references/house-rules.md +20 -0
  269. package/templates/skills/orc/references/intake.md +120 -0
  270. package/templates/skills/orc/references/log-protocol.md +39 -0
  271. package/templates/skills/orc/references/pattern-gate.md +89 -0
  272. package/templates/skills/orc/references/plan-handoff.md +84 -0
  273. package/templates/skills/orc/references/preflight-report.md +220 -0
  274. package/templates/skills/orc/references/security-checklist.md +39 -0
  275. package/templates/skills/orc/references/stop-and-resume.md +160 -0
  276. package/templates/skills/orc/references/trace-protocol.md +314 -0
  277. package/templates/skills/orc/references/ultra-mode.md +123 -0
  278. package/templates/skills/orc/references/wave-grouping.md +121 -0
  279. package/templates/skills/orc/references/wiki-consult.md +177 -0
  280. package/templates/skills/orc/schemas/checkpoint.md +122 -0
  281. package/templates/skills/orc/schemas/intent-spec.md +42 -0
  282. package/templates/skills/orc/schemas/planning-output.md +279 -0
  283. package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
  284. package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
  285. package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
  286. package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
  287. package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
  288. package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
  289. package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
  290. package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
  291. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
  292. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
  293. package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
  294. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
  295. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
  296. package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
  297. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
  298. package/templates/skills/orc-advisor/SKILL.md +60 -0
  299. package/templates/skills/orc-aftermath/SKILL.md +136 -0
  300. package/templates/skills/orc-aftermath/references/report.md +95 -0
  301. package/templates/skills/orc-analyze/SKILL.md +220 -0
  302. package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
  303. package/templates/skills/orc-analyze/references/branching.md +51 -0
  304. package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
  305. package/templates/skills/orc-analyze/references/thin-input.md +77 -0
  306. package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
  307. package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
  308. package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
  309. package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
  310. package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
  311. package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
  312. package/templates/skills/orc-boundary/SKILL.md +208 -0
  313. package/templates/skills/orc-boundary/references/card.md +78 -0
  314. package/templates/skills/orc-boundary/references/gate.md +113 -0
  315. package/templates/skills/orc-brainstorm/SKILL.md +339 -0
  316. package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
  317. package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
  318. package/templates/skills/orc-budget/SKILL.md +225 -0
  319. package/templates/skills/orc-budget/references/corpus.md +87 -0
  320. package/templates/skills/orc-challenge/README.md +142 -0
  321. package/templates/skills/orc-challenge/SKILL.md +255 -0
  322. package/templates/skills/orc-challenge/examples/code-module.md +110 -0
  323. package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
  324. package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
  325. package/templates/skills/orc-challenge/references/conservation.md +107 -0
  326. package/templates/skills/orc-challenge/references/council.md +315 -0
  327. package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
  328. package/templates/skills/orc-challenge/references/dimensions.md +121 -0
  329. package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
  330. package/templates/skills/orc-challenge/references/intake.md +171 -0
  331. package/templates/skills/orc-challenge/references/kinds.md +44 -0
  332. package/templates/skills/orc-challenge/references/plain-english.md +98 -0
  333. package/templates/skills/orc-challenge/references/rubric.md +109 -0
  334. package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
  335. package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
  336. package/templates/skills/orc-claude/SKILL.md +199 -0
  337. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
  338. package/templates/skills/orc-claude/references/refresh.md +76 -0
  339. package/templates/skills/orc-claude/references/template.md +109 -0
  340. package/templates/skills/orc-diy/README.md +142 -0
  341. package/templates/skills/orc-diy/SKILL.md +70 -0
  342. package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
  343. package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
  344. package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
  345. package/templates/skills/orc-diy/references/blocks/header.md +55 -0
  346. package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
  347. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
  348. package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
  349. package/templates/skills/orc-diy/references/blocks/review.md +18 -0
  350. package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
  351. package/templates/skills/orc-diy/references/blocks/security.md +25 -0
  352. package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
  353. package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
  354. package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
  355. package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
  356. package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
  357. package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
  358. package/templates/skills/orc-diy/references/compile.md +59 -0
  359. package/templates/skills/orc-diy/references/flow-schema.md +100 -0
  360. package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
  361. package/templates/skills/orc-doc/README.md +229 -0
  362. package/templates/skills/orc-doc/SKILL.md +444 -0
  363. package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
  364. package/templates/skills/orc-doc/references/chunking.md +527 -0
  365. package/templates/skills/orc-doc/references/gates.md +311 -0
  366. package/templates/skills/orc-doc/references/generation-rules.md +122 -0
  367. package/templates/skills/orc-doc/references/house-rules.md +170 -0
  368. package/templates/skills/orc-doc/references/import-targets.md +40 -0
  369. package/templates/skills/orc-doc/references/plain-language.md +66 -0
  370. package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
  371. package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
  372. package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
  373. package/templates/skills/orc-doc/references/templates/prd.md +133 -0
  374. package/templates/skills/orc-doc/references/templates/report.md +102 -0
  375. package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
  376. package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
  377. package/templates/skills/orc-explain/SKILL.md +57 -0
  378. package/templates/skills/orc-export/SKILL.md +154 -0
  379. package/templates/skills/orc-fast/SKILL.md +188 -0
  380. package/templates/skills/orc-grill/SKILL.md +207 -0
  381. package/templates/skills/orc-grill/references/grill-doc.md +105 -0
  382. package/templates/skills/orc-handoff/SKILL.md +204 -0
  383. package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
  384. package/templates/skills/orc-handoff/references/surfaces.md +88 -0
  385. package/templates/skills/orc-judge/SKILL.md +82 -0
  386. package/templates/skills/orc-learn/SKILL.md +156 -0
  387. package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
  388. package/templates/skills/orc-learn/references/deepen.md +70 -0
  389. package/templates/skills/orc-learn/references/refresh.md +65 -0
  390. package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
  391. package/templates/skills/orc-learn/references/template-learning.md +67 -0
  392. package/templates/skills/orc-mini/SKILL.md +226 -0
  393. package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
  394. package/templates/skills/orc-pact/SKILL.md +218 -0
  395. package/templates/skills/orc-pact/references/gate.md +70 -0
  396. package/templates/skills/orc-pact/references/ledger.md +99 -0
  397. package/templates/skills/orc-pattern/SKILL.md +124 -0
  398. package/templates/skills/orc-pattern/references/INDEX.md +73 -0
  399. package/templates/skills/orc-pattern/references/be-django.md +80 -0
  400. package/templates/skills/orc-pattern/references/be-express.md +82 -0
  401. package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
  402. package/templates/skills/orc-pattern/references/be-go.md +96 -0
  403. package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
  404. package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
  405. package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
  406. package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
  407. package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
  408. package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
  409. package/templates/skills/orc-pattern/references/fe-react.md +83 -0
  410. package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
  411. package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
  412. package/templates/skills/orc-poly/SKILL.md +216 -0
  413. package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
  414. package/templates/skills/orc-poly/references/gather.md +70 -0
  415. package/templates/skills/orc-poly/references/poly-spec.md +84 -0
  416. package/templates/skills/orc-pr-driver/README.md +349 -0
  417. package/templates/skills/orc-pr-driver/SKILL.md +167 -0
  418. package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
  419. package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
  420. package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
  421. package/templates/skills/orc-pr-setup/README.md +436 -0
  422. package/templates/skills/orc-pr-setup/SKILL.md +184 -0
  423. package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
  424. package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
  425. package/templates/skills/orc-quick/README.md +423 -0
  426. package/templates/skills/orc-quick/SKILL.md +306 -0
  427. package/templates/skills/orc-quick/references/context-doc.md +114 -0
  428. package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
  429. package/templates/skills/orc-quick/references/gh-mode.md +127 -0
  430. package/templates/skills/orc-retro/SKILL.md +222 -0
  431. package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
  432. package/templates/skills/orc-route/SKILL.md +165 -0
  433. package/templates/skills/orc-verify/SKILL.md +86 -0
  434. package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
  435. package/templates/skills/orc-wiki/README.md +325 -0
  436. package/templates/skills/orc-wiki/SKILL.md +322 -0
  437. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
  438. package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
  439. package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
  440. package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
  441. package/templates/skills/orc-wiki/references/crosslink.md +284 -0
  442. package/templates/skills/orc-wiki/references/extra.md +79 -0
  443. package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
  444. package/templates/skills/orc-wiki/references/orientation.md +51 -0
  445. package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
  446. package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
  447. package/templates/skills/orc-wiki/references/staleness.md +288 -0
  448. package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
  449. package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
@@ -0,0 +1,213 @@
1
+ # Example — a TSD, fail → fix → pass
2
+
3
+ > The annotated maintainer's walkthrough. Every gate that fires is called out.
4
+ > For the reader-facing version see `mock-run/orc-challenge.md`.
5
+
6
+ ## Session 1 — C1 intake, and the refusal that proves rule 0
7
+
8
+ ```
9
+ > /orc-challenge docs/tsd-payments.md
10
+ ```
11
+
12
+ ```
13
+ Before I can judge this, I need to know what "good" means for it.
14
+ Six questions, one round:
15
+
16
+ 1 What must this document achieve?
17
+ 2 Who reads it, and what do they already know?
18
+ 3 What would you accept as finished?
19
+ 4 Do you have a template it should follow?
20
+ 5 Anything deliberately OUT of scope?
21
+ 6 When you fix it, where will the fixed version go?
22
+ ```
23
+
24
+ The user answers: *"just tell me if it's good"*.
25
+
26
+ ```
27
+ That is not enough for me to judge it, and guessing would be worse than useless:
28
+ every finding I raised would be defensible, and you would spend three iterations
29
+ fixing things that did not matter.
30
+
31
+ Concretely — which of these is closest?
32
+
33
+ a a backend team must implement it without asking me anything
34
+ b it has to survive Tuesday's architecture review board
35
+ c our offshore team, several non-native English readers, must read it cold
36
+ d I just want to know if I forgot anything obvious
37
+ e your own words
38
+ ```
39
+
40
+ **The gate:** ORC did not proceed, and it did not pick `d` as a safe default.
41
+ `orc challenge init` would have refused anyway — `--goal` has no default value.
42
+
43
+ User picks (a), audience "backend engineers, 2 of 5 non-native English readers",
44
+ done means "no open interface question and no TBD in §3–§7", pastes the team's
45
+ TSD template, out of scope "the mobile client", revision `docs/tsd-payments-v{n}.md`.
46
+
47
+ ```bash
48
+ orc challenge init tsd-payments \
49
+ --artifact docs/tsd-payments.md --kind tsd \
50
+ --goal "a backend team implements this without asking me anything" \
51
+ --audience "backend engineers, 2 of 5 non-native English readers" \
52
+ --done-means "no open interface question and no TBD in §3–§7" \
53
+ --out-of-scope "the mobile client" \
54
+ --template docs/templates/tsd.md \
55
+ --dimensions D1,D2,D3,D4,D5,D6 \
56
+ --revision new-file --revision-pattern "docs/tsd-payments-v{n}.md"
57
+ ```
58
+
59
+ `goals.md` and `template.md` are now FROZEN at v1.
60
+
61
+ ## C2 — lint (free)
62
+
63
+ ```bash
64
+ orc challenge lint docs/tsd-payments.md \
65
+ --template orc/orc-challenge/tsd-payments/template.md --json \
66
+ > orc/orc-challenge/tsd-payments/iteration-01/lint.json
67
+ ```
68
+
69
+ ```
70
+ 13 findings · 5 sentences · p50 8w / p90 43w · passive 40% · grade 8.1
71
+ template: 4/5 required sections present, missing 1
72
+ ```
73
+
74
+ Zero model tokens. The judge will never re-count any of this.
75
+
76
+ ## C3 — the cold read
77
+
78
+ DISPATCH `orc-challenge-reader-opus-5-low`. Its slice is the artifact path, the
79
+ questionnaire protocol, and the audience line. **Not the goal** — telling the
80
+ reader what the document is trying to achieve hands it the answers.
81
+
82
+ ```yaml
83
+ questions_asked: 12
84
+ answered_from_artifact: 8
85
+ answered_by_guessing: 3
86
+ unanswerable: 1
87
+ comprehension_score: "8/12"
88
+ terms_undefined_on_first_use: ["idempotency window", "SoR", "cutover"]
89
+ ```
90
+
91
+ ## C4 — the judge, with the SEALED slice
92
+
93
+ ```
94
+ goals: orc/orc-challenge/tsd-payments/goals.md (frozen, v1)
95
+ artifact: docs/tsd-payments.md
96
+ template: orc/orc-challenge/tsd-payments/template.md (frozen, v1)
97
+ dimensions: <skill>/references/dimensions.md (selected: D1 D2 D3 D4 D5 D6)
98
+ lint: orc/orc-challenge/tsd-payments/iteration-01/lint.json
99
+ reader: orc/orc-challenge/tsd-payments/iteration-01/reader-report.md
100
+ carry_ids: (none — first iteration)
101
+ rebuttal_ids: (none)
102
+ ```
103
+
104
+ Paths and ids. Nothing else. No conversation, no diff, no "the user says".
105
+
106
+ ## C5 — record, and one finding gets DROPPED
107
+
108
+ ```
109
+ iteration 1: FAIL — 4 blocking findings, coverage 100%
110
+ 1 finding dropped for having no `serves` (out of scope of the stated goal).
111
+ CHALLENGE iter=1 findings=P0:1/P1:3/P2:1 coverage=100% verdict=FAIL
112
+ ```
113
+
114
+ The dropped one was *"no mention of the mobile client"* — which the user
115
+ explicitly declared out of scope. **Rule 0, made structural:** the judge did not
116
+ have to be trusted to remember, and the CLI did not have to guess.
117
+
118
+ ## C6 → C8 — advise, then STOP
119
+
120
+ The advisor groups 5 findings into 2 causes and orders them. ORC writes
121
+ `fix-brief-01.md`, `RESUME.md`, re-derives `CHALLENGE.md`, dispatches the
122
+ iteration's trace packet, prints the paste block, and **ends the turn**. It does
123
+ not ask whether you would like it to fix anything.
124
+
125
+ ## Session 2 — the fix session
126
+
127
+ A DIFFERENT session. It reads the brief, reads `goals.md`, edits
128
+ `docs/tsd-payments-v2.md`, and stops. It runs no ORC command except one:
129
+
130
+ ```bash
131
+ orc challenge rebut tsd-payments F-004 "the phrasal verbs are quoted from JIRA-4412"
132
+ ```
133
+
134
+ **This session never runs `/orc-challenge`.** That is the beat that teaches the
135
+ contract.
136
+
137
+ ## Session 3 — the re-judge
138
+
139
+ ```
140
+ > /orc-challenge tsd-payments
141
+ ```
142
+
143
+ ```
144
+ expected revision: docs/tsd-payments-v2.md FOUND (6fd76797 → f475e8e4, +24 −0)
145
+ carried findings: 5 · 5 touched · 0 untouched
146
+
147
+ touched/untouched is a hint for you. The judge re-reads the artifact either way.
148
+ ```
149
+
150
+ The judge answers the rebuttal (`withdrawn` — "agreed, it is a quotation") and
151
+ gives every carried finding an outcome.
152
+
153
+ **What happens if it forgets one:**
154
+
155
+ ```
156
+ ❌ malformed verdict — coverage is 20% — every finding carried in must get
157
+ exactly ONE outcome. Missing: F-002, F-003, F-004, F-005
158
+ ```
159
+
160
+ **What happens if it ignores the rebuttal:**
161
+
162
+ ```
163
+ ❌ malformed verdict — these rebuttals were not addressed: F-004
164
+ ```
165
+
166
+ **What happens if a selected dimension says nothing:**
167
+
168
+ ```
169
+ ❌ malformed verdict — dimension D5 is selected but reported nothing.
170
+ NOT-CHECKED with a reason is allowed; silence is not.
171
+ ```
172
+
173
+ Three different gates, three different rules, all in the CLI where a model cannot
174
+ route around them.
175
+
176
+ Clean run:
177
+
178
+ ```
179
+ iteration 2: FAIL — 1 blocking finding, coverage 100%
180
+ CHALLENGE iter=2 findings=P0:0/P1:1/P2:0 coverage=100% verdict=FAIL
181
+ ```
182
+
183
+ 9 → 4 → 1. The last one is `F-003`: Scope still says `TBD`, and the user knows
184
+ why — the endpoint list lives in the sibling API spec.
185
+
186
+ ```bash
187
+ orc challenge accept tsd-payments F-003 "the endpoints land in the sibling API spec, not here"
188
+ ```
189
+
190
+ ```
191
+ ✓ F-003 accepted as a known gap. It stops blocking, and it stays visible in
192
+ every report with your reason.
193
+ ```
194
+
195
+ The state recomputes immediately — an accept is a decision, and it takes effect
196
+ the moment it is recorded, not one paid iteration later.
197
+
198
+ ## PASS
199
+
200
+ ```
201
+ PASSED passed at iteration 2; nothing has changed since
202
+ ```
203
+
204
+ **No advisor is dispatched.** `orc challenge report` writes `CHALLENGE.md` and
205
+ `final-report-<DDMMYY>-<HHMMSS>.md`, `RESUME.md` is deleted, the `FINISH` packet
206
+ goes out, `.current` is deleted.
207
+
208
+ ```
209
+ Not staged. Commit them if your team should see the review trail:
210
+ git add orc/orc-challenge/tsd-payments/
211
+ ```
212
+
213
+ It prints the command. It does not run it.
@@ -0,0 +1,107 @@
1
+ # Conservation — nothing evaporates
2
+
3
+ Borrowed from `context-combiner`, applied to findings instead of requirements.
4
+
5
+ > Every finding from iteration N−1 appears in iteration N with exactly ONE
6
+ > outcome and a reason.
7
+
8
+ **A silently dropped finding is indistinguishable from a fixed one.** That is the
9
+ classic way a review cycle appears to "converge": nobody removed anything, the
10
+ list just got shorter.
11
+
12
+ ## The outcome set — closed
13
+
14
+ | Outcome | Meaning | Set by |
15
+ |---|---|---|
16
+ | `resolved` | the judge re-read the anchor and the problem is gone | judge |
17
+ | `still-open` | unchanged, or changed and still wrong | judge |
18
+ | `superseded` | the artifact moved; this finding is replaced by a new one (**the replacing id is required**) | judge |
19
+ | `withdrawn` | the judge now agrees it was not a finding (**reason required**) — the only outcome a rebuttal can force | judge |
20
+ | `accepted` | the user accepted it as a known gap | **the CLI, never the judge** |
21
+
22
+ ## The gate
23
+
24
+ ```
25
+ coverage_pct = (findings carried in that got an outcome) / (findings carried in) × 100
26
+ ```
27
+
28
+ **Below 100, the verdict is malformed.** `orc challenge record` rejects it with
29
+ exit 2 and NAMES THE MISSING IDS:
30
+
31
+ ```
32
+ ❌ malformed verdict — coverage is 20% — every finding carried in must get
33
+ exactly ONE outcome. Missing: F-002, F-003, F-004, F-005
34
+ ```
35
+
36
+ Fix the return and re-record. Never argue with the gate, and never re-record a
37
+ trimmed finding list to make the number go up.
38
+
39
+ ## The open set
40
+
41
+ Everything downstream — PASS, the convergence chart, the fix brief, the panel —
42
+ reads one definition, so there is exactly one idea of "still open":
43
+
44
+ > the last iteration's findings whose outcome is `null` (newly raised) or
45
+ > `still-open`, minus everything the user has accepted.
46
+
47
+ ## What conservation is NOT
48
+
49
+ - It is not a requirement that the judge keep agreeing with itself. `withdrawn`
50
+ exists, and a judge that withdraws a finding with a clear reason is doing its
51
+ job.
52
+ - It is not a requirement that findings only ever decrease. A revision can
53
+ legitimately introduce new problems, and the convergence chart showing 9 → 4 →
54
+ 6 is information, not a failure of the process.
55
+ - It is not a licence to renumber. **An id is permanent.** `F-003` means the same
56
+ thing in iteration 7 as it did in iteration 1, or the history is worthless.
57
+
58
+ ## Conservation of INPUT — the council (v0.49.1)
59
+
60
+ Everything above conserves findings ACROSS iterations. The council needs the same
61
+ rule pointed the other way, at the input to one iteration:
62
+
63
+ > **Every id the council raised must appear in the judge's return with exactly
64
+ > ONE disposition and a reason. `council_coverage_pct` must be 100.**
65
+
66
+ The obvious failure of adding five reviewers is that the judge quietly ignores
67
+ four of them and the run looks identical while costing five times more. So
68
+ `orc challenge record` **reads `iteration-NN/council/*.json` itself** and derives
69
+ the id set. The judge cannot shrink it by omission, because the set was never the
70
+ judge's to report.
71
+
72
+ ### The disposition set — closed
73
+
74
+ | Disposition | Meaning | Requires |
75
+ |---|---|---|
76
+ | `adopted` | the judge agrees; the finding enters `findings[]` under its own id | `severity`, `dimension`, `serves` |
77
+ | `merged` | the same defect as another finding | `merged_into` (a resolvable id) |
78
+ | `rejected` | the judge read the anchor and disagrees | `reason` |
79
+ | `out-of-goal` | real, but traceable to no goal element | `reason` — **reported**, never silently dropped |
80
+
81
+ **An id is permanent, across prefixes.** `C-004` adopted by the judge stays
82
+ `C-004` in the verdict, in the report, and in iteration 9. That is what lets a
83
+ user find out whether a lens is earning its dispatch — and it is why a lens may
84
+ only RAISE. **A lens raises; only the judge resolves.**
85
+
86
+ ### Across a changed roster
87
+
88
+ Rule 11 already says a carried finding is re-judged from the artifact on disk,
89
+ never from an account of what changed — so the judge never needed the original
90
+ raiser. **The judge resolves every carried finding, whatever prefix it carries**,
91
+ which makes the roster freely variable between iterations at zero cost to
92
+ conservation.
93
+
94
+ ### The classes that are conserved but never gated
95
+
96
+ An `opportunity` and a `premise` never enter `findings[]` and never touch the
97
+ pass gate — but neither may evaporate. An opportunity lands `taken` or `dropped`
98
+ with a reason (`orc challenge opportunity`); a premise lands `adopted` (a
99
+ `regoal`) or `dismissed` with a reason (`orc challenge premise`). **Neither is
100
+ ever automatic**, and a dismissed premise stays visible in the report forever.
101
+
102
+ ## Rebuttals interact with conservation
103
+
104
+ An open rebuttal is a second obligation on top of the outcome: the next verdict
105
+ must ALSO return `{ id, result: withdrawn|upheld, reason }`. An ignored rebuttal
106
+ makes the iteration malformed even when coverage is 100%, because a user who
107
+ cannot be answered has no move except giving up.
@@ -0,0 +1,315 @@
1
+ # The council
2
+
3
+ > **A lens raises; only the judge resolves. ORC proposes the council; the user
4
+ > picks it.**
5
+
6
+ **a lane that picks its own council has broken this contract.**
7
+
8
+ That is the fourth member of a family, and the split is the same every time —
9
+ the facts are ORC's to look up, the decision is the user's to take:
10
+
11
+ | Lane | Broken by |
12
+ |---|---|
13
+ | `../../_shared/interview.md` | `a lane that answers its own interview question` |
14
+ | `/orc-brainstorm` | `a lane that picks its own favourite` |
15
+ | `/orc-challenge` | `a lane that fixes what it judged` |
16
+ | `/orc-doc` | `a lane that reads its own document` |
17
+ | **`/orc-challenge` council** | **`a lane that picks its own council`** |
18
+
19
+ A council chosen by ORC is ORC deciding **which kinds of criticism the user is
20
+ allowed to hear** — a bigger decision than any single finding in the run.
21
+
22
+ ---
23
+
24
+ ## The roster — seven lenses
25
+
26
+ One always runs. Six are selectable. **The user selects them.**
27
+
28
+ | Lens | Display | Agent | Effort | Class | Ids | Blocks? |
29
+ |---|---|---|---|---|---|---|
30
+ | `judge` | The Judge | `orc-challenge-judge-opus-5-high` | high | finding | `F-` | yes |
31
+ | `reader` | The Cold Reader | `orc-challenge-reader-opus-5-low` | low | finding | `R-` | yes |
32
+ | `contrarian` | The Contrarian | `orc-challenge-contrarian-opus-5-high` | high | finding | `C-` | yes |
33
+ | `outsider` | The Outsider | `orc-challenge-outsider-opus-5-low` | low | finding | `O-` | yes |
34
+ | `executor` | The Executor | `orc-challenge-executor-opus-5-med` | medium | finding | `E-` | yes |
35
+ | `principles` | The First Principles Thinker | `orc-challenge-principles-opus-5-high` | high | **premise** | `Q-` | **never** |
36
+ | `expansionist` | The Expansionist | `orc-challenge-expansionist-opus-5-med` | medium | **opportunity** | `X-` | **never** |
37
+
38
+ `orc-challenge-advisor-opus-5-med` is **not a lens.** It never inspects the
39
+ artifact for defects; it turns a FAIL into a fix strategy, and rule 5 still
40
+ holds: **no advisor on PASS.**
41
+
42
+ **Never hand-list these anywhere else.** `orc challenge roles --json` is the
43
+ catalogue; the P0 ask in `intake.md` renders it, and `orc ui` draws the roster
44
+ card from it. One list, three renderers — the Flow-stepper rule.
45
+
46
+ ### What each one is for, and how each one fails
47
+
48
+ | Role | It asks | It fails when |
49
+ |---|---|---|
50
+ | The Contrarian | "where is the fatal flaw?" | it assumes the artifact is fine and stops looking |
51
+ | The First Principles Thinker | "are we even solving the right problem?" | it accepts the framing it was handed |
52
+ | The Expansionist | "what is being undervalued here?" | it only counts what is wrong |
53
+ | The Outsider | "what does this assume I already know?" | it is an expert and cannot un-know things |
54
+ | The Executor | "what do you actually do on Monday morning?" | it grades the theory and never the first step |
55
+
56
+ ### Why each effort — and the rule that protects it
57
+
58
+ **Effort here is a measurement choice, not a cost choice.** The same sentence
59
+ governs the cold reader and the `/orc-doc` checker, and it now governs two more:
60
+
61
+ - **`outsider` is `low` for the same reason `reader` is.** A harder-thinking
62
+ outsider reasons its way *around* an unexplained acronym and reports that the
63
+ document is fine. The whole instrument is "do not reconstruct — report what is
64
+ actually on the page." **Nothing may ever upgrade it.**
65
+ - **`contrarian` is `high` because a shallow contrarian finds only the obvious.**
66
+ At low effort it returns the same three surface complaints the free lint
67
+ already caught.
68
+ - **`principles` is `high`** — rebuilding a problem statement from the ground up
69
+ is the deepest reasoning any role in this lane does.
70
+ - **`expansionist` and `executor` are `medium`** — pattern work against a
71
+ concrete artifact, the same class as the advisor.
72
+
73
+ All seven are `claude-opus-5`, so **`opus5_only` is a no-op for this lane: it is
74
+ unaffected, not exempt.** The agent count rises by exactly five, with no paired
75
+ variants (the v0.47.0 precedent).
76
+
77
+ ---
78
+
79
+ ## The reader / outsider seam — read this before touching either
80
+
81
+ These two are the closest pair in ORC, and the one place this design can produce
82
+ a duplicate instrument. The distinction is **structural, not stylistic**:
83
+
84
+ | | `reader` | `outsider` |
85
+ |---|---|---|
86
+ | Told the audience | **yes** | **no** |
87
+ | Told the goal / kind / template | no | no |
88
+ | What it generates | 8–15 questions **the artifact promised to answer**, from its own headings | nothing — it reacts to what is in front of it |
89
+ | What it returns | a **scored** questionnaire (`8/12`) + `R-###` | an **unscored** ranked list of assumed knowledge + `O-###` |
90
+ | The measurement | *can this be answered from the page?* | *what does this page assume you already know?* |
91
+ | Feeds | D4 | D5, and D4 where an assumption is load-bearing |
92
+
93
+ They are dispatched **with no knowledge of each other**, and their reports are
94
+ never merged before the judge reads them. **Where they agree, that is the
95
+ strongest comprehension evidence this lane can produce** — recorded as
96
+ `corroborated_by: [reader, outsider]`, and **never an automatic severity bump**
97
+ (the `/orc-aftermath` rule: churn is a signal, not a verdict).
98
+
99
+ ---
100
+
101
+ ## Three output classes — the honest split
102
+
103
+ ```
104
+ class: finding → judge, reader, contrarian, outsider, executor
105
+ class: opportunity → expansionist
106
+ class: premise → principles
107
+ ```
108
+
109
+ Two of the six cannot produce a finding **without lying**, and forcing them to
110
+ would be the single worst decision available here.
111
+
112
+ ### Why the expansionist cannot produce a finding
113
+
114
+ A finding must carry `serves` — the goal element it advances — and `record`
115
+ DROPS a finding without one (rule 0, structural). The expansionist's brief is
116
+ *"what upside is everyone missing?"*, which by construction is **not** in the
117
+ stated goal. Given a `serves` field it would either invent a goal element or be
118
+ silently dropped by the CLI.
119
+
120
+ ```yaml
121
+ opportunity:
122
+ id: X-002
123
+ what: "the retry table generalises to every idempotent write in the service"
124
+ upside: "…"
125
+ first_step: "…" # concrete; an upside with no first step is a daydream
126
+ anchor: "docs/tsd-payments.md:212"
127
+ confidence: medium
128
+ route: brainstorm # brainstorm | pact | grill | none
129
+ ```
130
+
131
+ **An opportunity never blocks, never has a severity, and never enters
132
+ `findings[]`.** It is conserved — `orc challenge opportunity <slug> <id>
133
+ --take|--drop --reason "…"`, both requiring a reason — and it is ROUTED: an
134
+ adopted one belongs in `/orc-brainstorm`, and one the user wants to commit to
135
+ belongs in `/orc-pact`. **This lane never builds it.**
136
+
137
+ ### Why the first-principles thinker cannot produce a finding
138
+
139
+ Its most valuable output is *"you are asking the wrong question entirely"* — and
140
+ in this lane the question is the **frozen goal**. A finding is measured against
141
+ the goal; a premise challenge disputes the **yardstick**. Those cannot be the
142
+ same object.
143
+
144
+ ```yaml
145
+ premise:
146
+ id: Q-001
147
+ disputes: goal # goal | audience | done_means | out_of_scope
148
+ quote: "<the exact line from goals.md it disputes>"
149
+ reframe: "…" # the problem restated from the ground up
150
+ what_changes: "…" # what this review would attack instead
151
+ cheapest_test: "…" # how to settle it without a rewrite
152
+ ```
153
+
154
+ **A premise challenge is resolved by a HUMAN and by nobody else.** Exactly two
155
+ resolutions exist:
156
+
157
+ 1. **Adopt** → `orc challenge goals <slug> --set <path> --reason "…"` — a
158
+ `regoal` event; `goals.version` increments, prior iterations keep their stamp,
159
+ and the iteration rail draws the version break. That mechanism has existed
160
+ since v0.47.0; the council is the first thing that can legitimately move it.
161
+ 2. **Dismiss** → `orc challenge premise <slug> <id> --dismiss --reason "…"`. The
162
+ reason is mandatory and stays visible in the report forever.
163
+
164
+ **The judge NEVER sees the premise report.** Handing a judge a document arguing
165
+ that the frozen goal is wrong biases every finding it produces afterwards.
166
+
167
+ > **The three finding lenses feed the judge. The two non-finding lenses feed the
168
+ > user.** That sentence is the whole architecture.
169
+
170
+ ---
171
+
172
+ ## C3 — dispatch discipline
173
+
174
+ The **judge slice is SEALED** as it always was — one row per FINDING lens, and
175
+ `principles.md` / `expansionist.md` are named as forbidden in `sealed-slice.md`.
176
+
177
+ - Every lens is dispatched **BY NAME**. An unnamed dispatch cannot enforce the
178
+ pin and is invisible to the trace hook (the v0.34.5 wiki-scanner lesson) — and
179
+ a by-name dispatch gets `SPAWN`/`RETURN` for free, which is how `/orc-retro`
180
+ can finally answer *"is the contrarian earning its dispatch?"*
181
+ - **Hard cap: 3 in flight**, announced when it bites, **no config key**. Six
182
+ simultaneous returns is six `../../_shared/return-validation.md` blocks in one
183
+ orchestrator context, and this lane's orchestrator has a document to hold too.
184
+ - Every return is validated per `../../_shared/return-validation.md`:
185
+ `actual_model` and `actual_effort`, **quoted, never guessed**.
186
+ - **A selected lens that did not run is NOT-RUN with a reason** — rule 6
187
+ (`NOT-CHECKED` is never silent) extended to roles. The orchestrator writes
188
+ `{ "lens": "contrarian", "ran": false, "reason": "…" }` into the verdict's
189
+ `council[]`, and `record` accepts it. **Silence is rejected by name.**
190
+
191
+ ### What each lens writes
192
+
193
+ ```
194
+ orc/orc-challenge/<slug>/iteration-NN/council/
195
+ reader.md reader.json
196
+ contrarian.md contrarian.json
197
+ outsider.md outsider.json
198
+ executor.md executor.json
199
+ principles.md principles.json ← recorded by `note`, never by `record`
200
+ expansionist.md expansionist.json ← recorded by `note`, never by `record`
201
+ ```
202
+
203
+ The `.md` is for the human and for the judge's slice. The `.json` is the machine
204
+ half, and it is what makes the next section possible.
205
+
206
+ ---
207
+
208
+ ## Council conservation — the gate that makes this safe
209
+
210
+ The obvious failure of adding five reviewers is that **the judge quietly ignores
211
+ four of them** and the run looks identical while costing five times more.
212
+
213
+ > **Every id the council raised must appear in the judge's return with exactly
214
+ > ONE disposition and a reason. `council_coverage_pct` must be 100.**
215
+
216
+ That is `conservation.md` applied to **input** instead of to carry-forward, and
217
+ `orc challenge record` enforces it without reading a word of prose: **it reads
218
+ `iteration-NN/council/*.json` ITSELF and derives the id set.** The judge cannot
219
+ shrink it by omission, because the set was never the judge's to report.
220
+
221
+ ### The disposition set — closed
222
+
223
+ | Disposition | Meaning | Requires |
224
+ |---|---|---|
225
+ | `adopted` | the judge agrees; the finding enters `findings[]` under its own id | `severity`, `dimension`, `serves` |
226
+ | `merged` | the same defect as another finding | `merged_into` (a resolvable id) |
227
+ | `rejected` | the judge read the anchor and disagrees | `reason` |
228
+ | `out-of-goal` | real, but traceable to no goal element | `reason` — and it is **reported**, never silently dropped |
229
+
230
+ **`adopted` keeps the raiser's id.** `C-004` stays `C-004` in the verdict, in the
231
+ report, in iteration 9. An id is permanent (`conservation.md`), and this is what
232
+ lets the panel say *"the contrarian raised four of the six blockers this
233
+ iteration"* — which is how a user finds out whether a lens is worth its money.
234
+
235
+ ### Carrying forward across a changed roster
236
+
237
+ Iteration 2 runs the contrarian, iteration 3 does not, and `C-004` is still open.
238
+ Who resolves it?
239
+
240
+ > **The judge resolves every carried finding, whatever prefix it carries.**
241
+
242
+ Rule 11 already says a carried finding is re-judged **from the artifact on disk**,
243
+ never from an account of what changed — so the judge never needed the original
244
+ raiser. That makes the roster freely variable between iterations at zero cost to
245
+ conservation, and it is why lenses may only *raise*.
246
+
247
+ `record` therefore keeps its existing `coverage_pct` gate exactly as it was and
248
+ adds `council_coverage_pct` beside it.
249
+
250
+ ### The gates, each rejecting BY NAME (all exit 2)
251
+
252
+ | Gate | Rejects |
253
+ |---|---|
254
+ | `council-unset` | the cycle's roster is `null` (a migrated v1 cycle) |
255
+ | `unknown-lens` | a `lens` outside the catalogue |
256
+ | `bad-prefix` | a finding whose id prefix disagrees with its lens |
257
+ | `duplicate-id` | the same id from two lenses |
258
+ | `lens-silent` | a roster lens with neither a report on disk nor `ran: false` + a reason |
259
+ | `council-coverage` | any raised id missing a disposition — **the missing ids are named** |
260
+ | `bad-disposition` | outside the set, `merged` without a resolvable `merged_into`, or `rejected`/`out-of-goal` with no reason |
261
+ | `class-mismatch` | an opportunity or a premise inside `findings[]` |
262
+ | `unknown-corroborator` | `corroborated_by` naming a lens that did not run this iteration |
263
+
264
+ **PASS is computed exactly as before.** An adopted council finding is an ordinary
265
+ finding from that moment on; `challengeBlocking()`, `challengeOpen()`,
266
+ `challengeCounts()` and `challengeStateOf()` are untouched. **The pass gate
267
+ learns nothing about the council**, which is what keeps rule 2 true.
268
+
269
+ ---
270
+
271
+ ## The frozen roster
272
+
273
+ The roster is **not a config key.** A global default would silently answer the
274
+ one question this whole design exists to ask. It is a per-cycle FROZEN decision
275
+ in the ledger, changed only by a recorded `recouncil` event:
276
+
277
+ ```bash
278
+ orc challenge council <slug> --set contrarian,executor --reason "…"
279
+ ```
280
+
281
+ `council_version` increments exactly like `goals.version` and
282
+ `template.version`, and the iteration rail draws a **third** version break for
283
+ it — because comparing an iteration judged by three lenses to one judged by six
284
+ is not a comparison.
285
+
286
+ A cycle opened before v0.49.1 reads back with `council: null`, and `record`
287
+ refuses the next iteration by name until the roster is answered. **A silent
288
+ default would be ORC picking the council.**
289
+
290
+ ---
291
+
292
+ ## The trace
293
+
294
+ `record` returns the line and the skill copies it **VERBATIM**:
295
+
296
+ ```
297
+ CHALLENGE iter=2 findings=P0:1/P1:3/P2:6 coverage=100% council=4/5 raised=C:6,O:3,E:2 adopted=9 verdict=FAIL
298
+ ```
299
+
300
+ `council=4/5` is *lenses that ran / lenses on the roster*, so a NOT-RUN lens is
301
+ visible in the trace, in `orc stats`, and to `/orc-retro` — not only in the
302
+ panel.
303
+
304
+ ---
305
+
306
+ ## How the council fails — and what prevents each
307
+
308
+ | Failure | Prevention |
309
+ |---|---|
310
+ | Five reviewers run and the judge ignores four | `council_coverage_pct`, computed from disk, never from the judge's account |
311
+ | The expansionist's ideas get dropped for having no `serves` | the `opportunity` class — it never enters `findings[]` |
312
+ | ORC decides which criticism the user is allowed to hear | rule 12, and `--council` has no default |
313
+ | Six lenses, six wordings of one defect | `merged` + `corroborated_by`, and the per-lens raise counts make a useless lens visible within two iterations |
314
+ | Reader and outsider collapse into one instrument | two different slices and two different return contracts — and when they agree, that is recorded as corroboration, not duplication |
315
+ | A premise challenge destabilises every review | it never blocks, it resolves only by a human decision with a recorded reason, and a user who does not want their premise questioned simply does not select it |