@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,825 @@
1
+ "use strict";
2
+ /* fixtures/challenge.js — canned data for `orc ui --fixtures`.
3
+ A rich multi-cycle challenge plus the empty and MISSING-REVISION states.
4
+
5
+ THE RULE FOR EVERY FILE IN HERE: carry ONE OF EVERY STATE, including the
6
+ ugly ones. You cannot DESIGN a STALE chip on a fresh wiki, and a state
7
+ with no fixture is a state nobody has ever looked at. A per-state count
8
+ test asserts this, so a new state cannot ship without one.
9
+
10
+ Shapes MUST match what `bin/cli.js --json` really emits — a drifted
11
+ fixture is worse than no fixture. */
12
+
13
+ const { PROJECT } = require("./shell.js");
14
+
15
+ const chGoals = (goal, audience, done, version) => ({
16
+ version: version || 1,
17
+ goal,
18
+ audience,
19
+ done_means: done,
20
+ out_of_scope: ["the mobile client", "the 2027 ledger migration"],
21
+ context_refs: ["JIRA-4412", "docs/adr/0009-idempotency.md"],
22
+ });
23
+
24
+ const chDims = (rows) => rows;
25
+
26
+ /* THE COUNCIL (v0.49.1). Shapes match `orc challenge status --json`'s
27
+ `council[]` exactly — a drifted fixture is worse than no fixture.
28
+
29
+ ONE OF EVERY STATE, and the ugly ones are the point: a NOT-RUN lens with a
30
+ reason, a NOT-SELECTED lens, a corroborated finding, a `merged` and an
31
+ `out-of-goal` disposition, an open premise, a dismissed one, an adopted one
32
+ with its version break, an open opportunity, a taken one, a dropped one, and
33
+ a v1-migrated cycle with NO ROSTER AT ALL. You cannot design a NOT-RUN row on
34
+ a run where everything ran. */
35
+ const CH_LENS = {
36
+ judge: { display: "The Judge", agent: "orc-challenge-judge-opus-5-high", effort: "high", class: "finding", prefix: "F-", blocks: true, always: true, why: "grade the artifact against the frozen goal and template" },
37
+ reader: { display: "The Cold Reader", agent: "orc-challenge-reader-opus-5-low", effort: "low", class: "finding", prefix: "R-", blocks: true, always: false, why: "can a stranger answer this document's own questions?" },
38
+ contrarian: { display: "The Contrarian", agent: "orc-challenge-contrarian-opus-5-high", effort: "high", class: "finding", prefix: "C-", blocks: true, always: false, why: "assume it has a fatal flaw, then go find it" },
39
+ outsider: { display: "The Outsider", agent: "orc-challenge-outsider-opus-5-low", effort: "low", class: "finding", prefix: "O-", blocks: true, always: false, why: "what does this assume you already know?" },
40
+ executor: { display: "The Executor", agent: "orc-challenge-executor-opus-5-med", effort: "medium", class: "finding", prefix: "E-", blocks: true, always: false, why: "can this be started on Monday? where is the first step?" },
41
+ principles: { display: "The First Principles Thinker", agent: "orc-challenge-principles-opus-5-high", effort: "high", class: "premise", prefix: "Q-", blocks: false, always: false, why: "is this even the right problem? (never blocks)" },
42
+ expansionist: { display: "The Expansionist", agent: "orc-challenge-expansionist-opus-5-med", effort: "medium", class: "opportunity", prefix: "X-", blocks: false, always: false, why: "what upside is being missed? (never blocks)" },
43
+ };
44
+ const CH_ORDER = ["judge", "reader", "contrarian", "outsider", "executor", "principles", "expansionist"];
45
+
46
+ // `spec` maps a lens id to its row: `false` = not selected, a string = NOT-RUN
47
+ // with that reason, an object = RAN with those counts.
48
+ const chCouncil = (slug, roster, spec) =>
49
+ CH_ORDER.map((lens) => {
50
+ const meta = CH_LENS[lens];
51
+ const selected = meta.always || roster.includes(lens);
52
+ const base = { lens, ...meta, selected };
53
+ if (!selected)
54
+ return { ...base, status: "NOT-SELECTED", add_with: `orc challenge council ${slug} --set ${roster.concat(lens).join(",")} --reason "…"` };
55
+ const v = spec[lens];
56
+ if (typeof v === "string") return { ...base, status: "NOT-RUN", reason: v };
57
+ if (!v) return { ...base, status: "NOT-RUN", reason: "not yet judged" };
58
+ return { ...base, status: "RAN", raised: 0, adopted: 0, rejected: 0, merged: 0, out_of_goal: 0, ...v };
59
+ });
60
+
61
+ const challengeCycles = {
62
+ // The rich one: an accepted exception, an OPEN rebuttal, and a `regoal` version
63
+ // break in the middle of the convergence chart.
64
+ "tsd-payments": {
65
+ ok: true,
66
+ // The rich roster: four lenses ran, one hit a usage limit mid-batch, one was
67
+ // never selected. An open premise AND a dismissed one; three opportunities
68
+ // in all three states.
69
+ council_version: 2,
70
+ council_unset: false,
71
+ council_suggested: ["reader", "contrarian", "executor"],
72
+ council: chCouncil("tsd-payments", ["reader", "contrarian", "outsider", "executor", "principles", "expansionist"], {
73
+ judge: { raised: 4 },
74
+ reader: { raised: 3, adopted: 2, merged: 1 },
75
+ contrarian: { raised: 6, adopted: 4, merged: 1, rejected: 1 },
76
+ outsider: { raised: 3, adopted: 1, merged: 2 },
77
+ executor: { raised: 2, adopted: 2, monday_morning: [
78
+ "open docs/tsd-payments.md §4.2 and write the idempotency window in seconds",
79
+ "ask the payments lead which queue the dead letters go to",
80
+ ] },
81
+ principles: "usage limit reached mid-batch",
82
+ expansionist: { raised: 0 },
83
+ }),
84
+ lens_counts: { judge: 4, reader: 3, contrarian: 6, outsider: 3, executor: 2 },
85
+ premises: {
86
+ "Q-001": {
87
+ raised_at: 2,
88
+ disputes: "goal",
89
+ quote: "a backend team implements this without asking me anything",
90
+ reframe: "the underlying job is not \"describe the payments flow\"; it is \"decide whether refunds are idempotent per key or per order\" — three sections answer the second question as if the first were settled",
91
+ what_changes: "the review would attack the undecided interfaces, not the prose",
92
+ cheapest_test: "ask the payments lead whether that decision has been taken. One message, no rewrite.",
93
+ status: "open",
94
+ reason: null,
95
+ goal_version_after: null,
96
+ },
97
+ "Q-002": {
98
+ raised_at: 1,
99
+ disputes: "audience",
100
+ quote: "backend engineers, 2 of 5 non-native English readers",
101
+ reframe: "the people who actually implement this are the platform team, not the backend group",
102
+ what_changes: "D5 would stop dominating and D2 would",
103
+ cheapest_test: "check who is on the delivery ticket",
104
+ status: "dismissed",
105
+ reason: "the backend group owns it; the platform team only reviews",
106
+ goal_version_after: null,
107
+ },
108
+ },
109
+ open_premises: ["Q-001"],
110
+ opportunities: {
111
+ "X-001": {
112
+ raised_at: 2,
113
+ what: "the retry table generalises to every idempotent write in the service",
114
+ upside: "one table instead of four, and the next endpoint inherits the semantics for free",
115
+ first_step: "list the four existing retry policies side by side",
116
+ anchor: "docs/tsd-payments.md:212",
117
+ confidence: "medium",
118
+ route: "brainstorm",
119
+ status: "open",
120
+ resolved_reason: null,
121
+ resolved_at: null,
122
+ },
123
+ "X-002": {
124
+ raised_at: 2,
125
+ what: "§6 is the enablement doc the support team has been asking for",
126
+ upside: "support stops filing tickets to ask what a settlement window is",
127
+ first_step: "send §6 to support and ask if it stands on its own",
128
+ anchor: "docs/tsd-payments.md:301",
129
+ confidence: "high",
130
+ route: "pact",
131
+ status: "taken",
132
+ resolved_reason: "we want to commit to keeping it readable on its own",
133
+ resolved_at: "12-08-2026 10:02:00",
134
+ },
135
+ "X-003": {
136
+ raised_at: 1,
137
+ what: "the ledger format could be reused by the 2027 migration",
138
+ upside: "one fewer format to write",
139
+ first_step: "ask whether the migration has picked a format yet",
140
+ anchor: "docs/tsd-payments.md:88",
141
+ confidence: "low",
142
+ route: "none",
143
+ status: "dropped",
144
+ resolved_reason: "explicitly out of scope for this document",
145
+ resolved_at: "11-08-2026 09:30:00",
146
+ },
147
+ },
148
+ slug: "tsd-payments",
149
+ state: "AWAITING-RECHECK",
150
+ why: "the artifact moved since the last verdict — a new iteration is warranted",
151
+ stalled: false,
152
+ no_template: false,
153
+ kind: "tsd",
154
+ goals: chGoals(
155
+ "a backend team implements this without asking me anything",
156
+ "backend engineers, 2 of 5 non-native English readers",
157
+ "no open interface question and no TBD in §3–§7",
158
+ 2
159
+ ),
160
+ template: { source: "docs/templates/tsd.md", frozen: "template.md", sha: "0c8e41", version: 1, no_template: false },
161
+ iterations: 3,
162
+ artifacts: [{ path: "docs/tsd-payments.md", changed_since_verdict: true }],
163
+ revision: { mode: "new-file", pattern: "docs/tsd-payments-v{n}.md", expected: "docs/tsd-payments-v4.md", found: true },
164
+ counts: { P0: 0, P1: 3, P2: 5, P3: 2, accepted: 1, rebutted: 1 },
165
+ dimensions: chDims([
166
+ { id: "D1", status: "CHECKED", findings: 1 },
167
+ { id: "D2", status: "CHECKED", findings: 2 },
168
+ { id: "D3", status: "CHECKED", findings: 0 },
169
+ { id: "D4", status: "CHECKED", findings: 3, score: "8/12" },
170
+ { id: "D5", status: "CHECKED", findings: 4 },
171
+ { id: "D6", status: "CHECKED", findings: 1 },
172
+ { id: "D7", status: "NOT-SELECTED" },
173
+ ]),
174
+ convergence: [
175
+ { n: 1, blocking: 9, passed: false, graded_against: 1, graded_against_goal: 1, graded_against_council: 1, severities: { P0: 2, P1: 7, P2: 6, P3: 1 } },
176
+ { n: 2, blocking: 5, passed: false, graded_against: 1, graded_against_goal: 1, graded_against_council: 1, severities: { P0: 1, P1: 4, P2: 5, P3: 2 } },
177
+ { n: 3, blocking: 3, passed: false, graded_against: 1, graded_against_goal: 2, graded_against_council: 2, severities: { P0: 0, P1: 3, P2: 5, P3: 2 } },
178
+ ],
179
+ dir: PROJECT + "/orc/orc-challenge/tsd-payments",
180
+ next: "/orc-challenge tsd-payments",
181
+ preflight_line: "challenge: tsd-payments AWAITING-RECHECK — 3 blocking findings open",
182
+ },
183
+ // Stalled: four iterations, no net reduction. The warning is not chrome.
184
+ "checkout-prd": {
185
+ ok: true,
186
+ // The two never-blocking lenses ONLY — a roster with no extra finding lens
187
+ // at all, which is a legitimate and cheap choice.
188
+ council_version: 1,
189
+ council_unset: false,
190
+ council_suggested: ["reader", "outsider", "principles", "expansionist"],
191
+ council: chCouncil("checkout-prd", ["principles", "expansionist"], {
192
+ judge: { raised: 7 },
193
+ principles: { raised: 0 },
194
+ expansionist: { raised: 2 },
195
+ }),
196
+ lens_counts: { judge: 7 },
197
+ premises: {},
198
+ open_premises: [],
199
+ opportunities: {
200
+ "X-010": {
201
+ raised_at: 3,
202
+ what: "the guest-checkout path is 90% of a working one-tap flow",
203
+ upside: "the conversion win the PRD is chasing, without the account work",
204
+ first_step: "measure how many guest sessions already have a saved card",
205
+ anchor: "docs/checkout-prd.md:140",
206
+ confidence: "medium",
207
+ route: "brainstorm",
208
+ status: "open",
209
+ resolved_reason: null,
210
+ resolved_at: null,
211
+ },
212
+ },
213
+ slug: "checkout-prd",
214
+ state: "AWAITING-FIX",
215
+ why: "4 blocking findings open and nothing has changed yet",
216
+ stalled: true,
217
+ no_template: false,
218
+ kind: "prd",
219
+ goals: chGoals(
220
+ "it survives the architecture review board on Tuesday",
221
+ "the review board — two principals, one PM, none of them close to this code",
222
+ "no section contradicts another, and every claim has a source"
223
+ ),
224
+ template: { source: "docs/templates/prd.md", frozen: "template.md", sha: "77aa10", version: 2, no_template: false },
225
+ iterations: 4,
226
+ artifacts: [{ path: "docs/checkout-prd.md", changed_since_verdict: false }],
227
+ revision: { mode: "in-place", pattern: null, expected: "docs/checkout-prd.md", found: true },
228
+ counts: { P0: 0, P1: 4, P2: 2, P3: 0, accepted: 0, rebutted: 0 },
229
+ dimensions: chDims([
230
+ { id: "D1", status: "CHECKED", findings: 2 },
231
+ { id: "D2", status: "NOT-SELECTED" },
232
+ { id: "D3", status: "CHECKED", findings: 2 },
233
+ { id: "D4", status: "CHECKED", findings: 0, score: "11/12" },
234
+ { id: "D5", status: "CHECKED", findings: 0 },
235
+ { id: "D6", status: "CHECKED", findings: 2 },
236
+ { id: "D7", status: "CHECKED", findings: 0 },
237
+ ]),
238
+ convergence: [
239
+ { n: 1, blocking: 9, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 1, P1: 8, P2: 3, P3: 0 } },
240
+ { n: 2, blocking: 4, passed: false, graded_against: 2, graded_against_goal: 1, severities: { P0: 0, P1: 4, P2: 3, P3: 1 } },
241
+ { n: 3, blocking: 4, passed: false, graded_against: 2, graded_against_goal: 1, severities: { P0: 0, P1: 4, P2: 2, P3: 0 } },
242
+ { n: 4, blocking: 4, passed: false, graded_against: 2, graded_against_goal: 1, severities: { P0: 0, P1: 4, P2: 2, P3: 0 } },
243
+ ],
244
+ dir: PROJECT + "/orc/orc-challenge/checkout-prd",
245
+ next: "/orc-challenge checkout-prd",
246
+ preflight_line: "challenge: checkout-prd AWAITING-FIX — 4 blocking findings open · stalled",
247
+ },
248
+ // Zero iterations. "Created, not yet judged" is an ANSWER, not a blank card.
249
+ "runbook-oncall": {
250
+ ok: true,
251
+ // Selected but nothing has run yet — the NOT-RUN-because-not-yet-judged row.
252
+ council_version: 1,
253
+ council_unset: false,
254
+ council_suggested: ["reader", "outsider", "executor"],
255
+ council: chCouncil("runbook-oncall", ["outsider", "executor"], {}),
256
+ lens_counts: {},
257
+ premises: {},
258
+ open_premises: [],
259
+ opportunities: {},
260
+ slug: "runbook-oncall",
261
+ state: "AWAITING-JUDGE",
262
+ why: "created, not yet judged",
263
+ stalled: false,
264
+ no_template: false,
265
+ kind: "runbook",
266
+ goals: chGoals(
267
+ "somebody woken at 3am can follow it without asking anyone",
268
+ "the on-call rota — anyone in the backend group, including week-one joiners",
269
+ "every step has a command and an expected result"
270
+ ),
271
+ template: { source: "docs/templates/runbook.md", frozen: "template.md", sha: "b0c110", version: 1, no_template: false },
272
+ iterations: 0,
273
+ artifacts: [{ path: "docs/runbooks/oncall.md", changed_since_verdict: false }],
274
+ revision: { mode: "in-place", pattern: null, expected: "docs/runbooks/oncall.md", found: true },
275
+ counts: { P0: 0, P1: 0, P2: 0, P3: 0, accepted: 0, rebutted: 0 },
276
+ dimensions: chDims([
277
+ { id: "D1", status: "NOT-CHECKED", reason: "not yet judged" },
278
+ { id: "D2", status: "NOT-SELECTED" },
279
+ { id: "D3", status: "NOT-CHECKED", reason: "not yet judged" },
280
+ { id: "D4", status: "NOT-CHECKED", reason: "not yet judged" },
281
+ { id: "D5", status: "NOT-CHECKED", reason: "not yet judged" },
282
+ { id: "D6", status: "NOT-CHECKED", reason: "not yet judged" },
283
+ { id: "D7", status: "NOT-SELECTED" },
284
+ ]),
285
+ convergence: [],
286
+ dir: PROJECT + "/orc/orc-challenge/runbook-oncall",
287
+ next: "/orc-challenge runbook-oncall",
288
+ preflight_line: "challenge: runbook-oncall AWAITING-JUDGE",
289
+ },
290
+ "adr-0012-events": {
291
+ ok: true,
292
+ // A cycle where an ADOPTED premise moved the goal — the version break in the
293
+ // rail is a `c` break here, not a `v` one.
294
+ council_version: 2,
295
+ council_unset: false,
296
+ council_suggested: ["reader", "contrarian", "principles"],
297
+ council: chCouncil("adr-0012-events", ["contrarian", "principles"], {
298
+ judge: { raised: 2 },
299
+ contrarian: { raised: 3, adopted: 2, out_of_goal: 1 },
300
+ principles: { raised: 1 },
301
+ }),
302
+ lens_counts: { judge: 2, contrarian: 3 },
303
+ premises: {
304
+ "Q-020": {
305
+ raised_at: 1,
306
+ disputes: "done_means",
307
+ quote: "the decision is recorded and its alternatives are written down",
308
+ reframe: "an ADR whose alternatives are written down but never costed is not a decision record",
309
+ what_changes: "the review would ask for the cost of each alternative",
310
+ cheapest_test: "pick the cheapest rejected alternative and try to cost it in one line",
311
+ status: "adopted",
312
+ reason: "right — the alternatives were listed, never weighed",
313
+ goal_version_after: 2,
314
+ },
315
+ },
316
+ open_premises: [],
317
+ opportunities: {},
318
+ slug: "adr-0012-events",
319
+ state: "PASSED",
320
+ why: "passed at iteration 2; nothing has changed since",
321
+ stalled: false,
322
+ no_template: false,
323
+ kind: "adr",
324
+ goals: chGoals(
325
+ "a future maintainer understands why we chose the outbox over dual writes",
326
+ "whoever inherits this service in two years",
327
+ "the rejected options are written down with the reason each lost"
328
+ ),
329
+ template: { source: "docs/adr/0001-template.md", frozen: "template.md", sha: "33ee90", version: 1, no_template: false },
330
+ iterations: 2,
331
+ artifacts: [{ path: "docs/adr/0012-events.md", changed_since_verdict: false }],
332
+ revision: { mode: "in-place", pattern: null, expected: "docs/adr/0012-events.md", found: true },
333
+ counts: { P0: 0, P1: 0, P2: 1, P3: 2, accepted: 0, rebutted: 0 },
334
+ dimensions: chDims([
335
+ { id: "D1", status: "CHECKED", findings: 0 },
336
+ { id: "D2", status: "CHECKED", findings: 0 },
337
+ { id: "D3", status: "CHECKED", findings: 1 },
338
+ { id: "D4", status: "NOT-SELECTED" },
339
+ { id: "D5", status: "NOT-SELECTED" },
340
+ { id: "D6", status: "NOT-SELECTED" },
341
+ { id: "D7", status: "CHECKED", findings: 2 },
342
+ ]),
343
+ convergence: [
344
+ { n: 1, blocking: 4, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 1, P1: 3, P2: 2, P3: 1 } },
345
+ { n: 2, blocking: 0, passed: true, graded_against: 1, graded_against_goal: 1, severities: { P0: 0, P1: 0, P2: 1, P3: 2 } },
346
+ ],
347
+ dir: PROJECT + "/orc/orc-challenge/adr-0012-events",
348
+ next: null,
349
+ preflight_line: "challenge: adr-0012-events PASSED",
350
+ },
351
+ // Passed, then somebody edited it. HONEST, not a failure — the UNCHECKABLE
352
+ // precedent from /orc-pact.
353
+ "api-contract-v2": {
354
+ ok: true,
355
+ // The full roster, everything ran, nothing missing — the clean case.
356
+ council_version: 1,
357
+ council_unset: false,
358
+ council_suggested: ["reader", "contrarian", "executor"],
359
+ council: chCouncil("api-contract-v2", ["reader", "contrarian", "outsider", "executor", "principles", "expansionist"], {
360
+ judge: { raised: 3 },
361
+ reader: { raised: 2, adopted: 2 },
362
+ contrarian: { raised: 4, adopted: 3, merged: 1 },
363
+ outsider: { raised: 1, adopted: 1 },
364
+ executor: { raised: 3, adopted: 2, rejected: 1, monday_morning: [
365
+ "generate the client from the schema and see what fails to compile",
366
+ "ask who owns the deprecation window for v1",
367
+ "write the first contract test against the pagination example",
368
+ ] },
369
+ principles: { raised: 0 },
370
+ expansionist: { raised: 1 },
371
+ }),
372
+ lens_counts: { judge: 3, reader: 2, contrarian: 4, outsider: 1, executor: 3 },
373
+ premises: {},
374
+ open_premises: [],
375
+ opportunities: {},
376
+ slug: "api-contract-v2",
377
+ state: "STALE-PASS",
378
+ why: "passed at iteration 3, but 1 artifact changed afterwards — honest, not a failure",
379
+ stalled: false,
380
+ no_template: false,
381
+ kind: "api-contract",
382
+ goals: chGoals(
383
+ "the mobile and web clients can both generate from it with no questions",
384
+ "client engineers on two platforms, generating from the spec",
385
+ "every endpoint has an error schema and an example"
386
+ ),
387
+ template: { source: "openapi/base.yaml", frozen: "template.md", sha: "9a7712", version: 1, no_template: false },
388
+ iterations: 3,
389
+ artifacts: [{ path: "openapi/payments-v2.yaml", changed_since_verdict: true }],
390
+ revision: { mode: "in-place", pattern: null, expected: "openapi/payments-v2.yaml", found: true },
391
+ counts: { P0: 0, P1: 0, P2: 0, P3: 1, accepted: 2, rebutted: 0 },
392
+ dimensions: chDims([
393
+ { id: "D1", status: "CHECKED", findings: 0 },
394
+ { id: "D2", status: "CHECKED", findings: 0 },
395
+ { id: "D3", status: "CHECKED", findings: 0 },
396
+ { id: "D4", status: "NOT-SELECTED" },
397
+ { id: "D5", status: "NOT-SELECTED" },
398
+ { id: "D6", status: "CHECKED", findings: 1 },
399
+ { id: "D7", status: "NOT-SELECTED" },
400
+ ]),
401
+ convergence: [
402
+ { n: 1, blocking: 12, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 3, P1: 9, P2: 4, P3: 2 } },
403
+ { n: 2, blocking: 5, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 0, P1: 5, P2: 3, P3: 1 } },
404
+ { n: 3, blocking: 0, passed: true, graded_against: 1, graded_against_goal: 1, severities: { P0: 0, P1: 0, P2: 0, P3: 1 } },
405
+ ],
406
+ dir: PROJECT + "/orc/orc-challenge/api-contract-v2",
407
+ next: "/orc-challenge api-contract-v2",
408
+ preflight_line: "challenge: api-contract-v2 STALE-PASS",
409
+ },
410
+ // The declared revision is not where it was declared. Candidates are LISTED.
411
+ "billing-webhooks": {
412
+ ok: true,
413
+ // A V1-MIGRATED CYCLE: the roster was never answered, and `orc challenge
414
+ // record` refuses the next iteration by name until it is. UNSET is an
415
+ // ANSWER, not an error — you cannot design that empty state without one.
416
+ council_version: 1,
417
+ council_unset: true,
418
+ council_suggested: ["reader", "contrarian", "executor"],
419
+ council: chCouncil("billing-webhooks", [], {}),
420
+ lens_counts: { judge: 5 },
421
+ premises: {},
422
+ open_premises: [],
423
+ opportunities: {},
424
+ slug: "billing-webhooks",
425
+ state: "MISSING-REVISION",
426
+ why: "the declared revision docs/billing-webhooks-v2.md does not exist — candidates are listed, never adopted",
427
+ stalled: false,
428
+ no_template: false,
429
+ kind: "code",
430
+ goals: chGoals(
431
+ "a new engineer can extend this module without reading the whole service",
432
+ "backend engineers joining the team this quarter",
433
+ "every exported function has a caller-visible contract, and no error path is silent"
434
+ ),
435
+ template: { source: ".claude/orc/patterns/typescript-pattern.md", frozen: "template.md", sha: "51ff02", version: 1, no_template: false },
436
+ iterations: 1,
437
+ artifacts: [{ path: "src/billing/webhooks/handler.ts", changed_since_verdict: false }],
438
+ revision: { mode: "new-file", pattern: "docs/billing-webhooks-v{n}.md", expected: "docs/billing-webhooks-v2.md", found: false },
439
+ counts: { P0: 1, P1: 2, P2: 3, P3: 0, accepted: 0, rebutted: 0 },
440
+ dimensions: chDims([
441
+ { id: "D1", status: "NOT-SELECTED" },
442
+ { id: "D2", status: "CHECKED", findings: 3 },
443
+ { id: "D3", status: "CHECKED", findings: 1 },
444
+ { id: "D4", status: "CHECKED", findings: 2, score: "6/11" },
445
+ { id: "D5", status: "NOT-SELECTED" },
446
+ { id: "D6", status: "CHECKED", findings: 0 },
447
+ { id: "D7", status: "NOT-SELECTED" },
448
+ ]),
449
+ convergence: [
450
+ { n: 1, blocking: 3, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 1, P1: 2, P2: 3, P3: 0 } },
451
+ ],
452
+ dir: PROJECT + "/orc/orc-challenge/billing-webhooks",
453
+ next: "/orc-challenge billing-webhooks",
454
+ preflight_line: "challenge: billing-webhooks MISSING-REVISION — 3 blocking findings open",
455
+ },
456
+ // A verdict file changed after it was recorded. Reported, never re-graded.
457
+ "readme-onboarding": {
458
+ ok: true,
459
+ // The outsider alone — exactly the right roster for a README, and the one
460
+ // case where the reader is NOT selected while `challenge_reader` is on.
461
+ council_version: 1,
462
+ council_unset: false,
463
+ council_suggested: ["reader", "outsider"],
464
+ council: chCouncil("readme-onboarding", ["outsider"], {
465
+ judge: { raised: 1 },
466
+ outsider: { raised: 5, adopted: 4, merged: 1 },
467
+ }),
468
+ lens_counts: { judge: 1, outsider: 5 },
469
+ premises: {},
470
+ open_premises: [],
471
+ opportunities: {},
472
+ slug: "readme-onboarding",
473
+ state: "TAMPERED",
474
+ why: "iteration-01/verdict.md changed after it was recorded — reported, never silently re-graded",
475
+ stalled: false,
476
+ no_template: false,
477
+ kind: "readme",
478
+ goals: chGoals(
479
+ "a new hire gets the project running on day one without asking",
480
+ "new joiners, on their own machine, on their first morning",
481
+ "every command in it has been run on a clean checkout"
482
+ ),
483
+ template: { source: "docs/templates/readme.md", frozen: "template.md", sha: "12bb44", version: 1, no_template: false },
484
+ iterations: 2,
485
+ artifacts: [{ path: "README.md", changed_since_verdict: true }],
486
+ revision: { mode: "in-place", pattern: null, expected: "README.md", found: true },
487
+ counts: { P0: 0, P1: 2, P2: 1, P3: 0, accepted: 0, rebutted: 1 },
488
+ dimensions: chDims([
489
+ { id: "D1", status: "CHECKED", findings: 1 },
490
+ { id: "D2", status: "NOT-SELECTED" },
491
+ { id: "D3", status: "CHECKED", findings: 1 },
492
+ { id: "D4", status: "CHECKED", findings: 1, score: "9/12" },
493
+ { id: "D5", status: "CHECKED", findings: 0 },
494
+ { id: "D6", status: "NOT-SELECTED" },
495
+ { id: "D7", status: "NOT-SELECTED" },
496
+ ]),
497
+ convergence: [
498
+ { n: 1, blocking: 6, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 1, P1: 5, P2: 2, P3: 0 } },
499
+ { n: 2, blocking: 2, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 0, P1: 2, P2: 1, P3: 0 } },
500
+ ],
501
+ dir: PROJECT + "/orc/orc-challenge/readme-onboarding",
502
+ next: "/orc-challenge readme-onboarding",
503
+ preflight_line: "challenge: readme-onboarding TAMPERED",
504
+ },
505
+ // No template supplied. D1 is NOT-CHECKED **with its reason**, everywhere —
506
+ // in the verdict, in the report, and as a chip here.
507
+ "mobile-spec": {
508
+ ok: true,
509
+ // `none` — a first-class answer that reproduces the v0.47.0 review exactly.
510
+ council_version: 1,
511
+ council_unset: false,
512
+ council_suggested: ["reader", "contrarian", "executor"],
513
+ council: chCouncil("mobile-spec", [], { judge: { raised: 2 } }),
514
+ lens_counts: { judge: 2 },
515
+ premises: {},
516
+ open_premises: [],
517
+ opportunities: {},
518
+ slug: "mobile-spec",
519
+ state: "AWAITING-FIX",
520
+ why: "2 blocking findings open and nothing has changed yet",
521
+ stalled: false,
522
+ no_template: true,
523
+ kind: "tsd",
524
+ goals: chGoals(
525
+ "I just want to know if I forgot anything obvious",
526
+ "me, and whoever picks this up next quarter",
527
+ "no section is a heading with nothing under it"
528
+ ),
529
+ template: { source: null, frozen: null, sha: null, version: 1, no_template: true },
530
+ iterations: 1,
531
+ artifacts: [{ path: "docs/mobile-spec.md", changed_since_verdict: false }],
532
+ revision: { mode: "in-place", pattern: null, expected: "docs/mobile-spec.md", found: true },
533
+ counts: { P0: 0, P1: 2, P2: 4, P3: 3, accepted: 0, rebutted: 0 },
534
+ dimensions: chDims([
535
+ { id: "D1", status: "NOT-CHECKED", reason: "no template supplied" },
536
+ { id: "D2", status: "CHECKED", findings: 1 },
537
+ { id: "D3", status: "CHECKED", findings: 2 },
538
+ { id: "D4", status: "NOT-CHECKED", reason: "challenge_reader is off" },
539
+ { id: "D5", status: "CHECKED", findings: 4 },
540
+ { id: "D6", status: "CHECKED", findings: 2 },
541
+ { id: "D7", status: "NOT-SELECTED" },
542
+ ]),
543
+ convergence: [
544
+ { n: 1, blocking: 2, passed: false, graded_against: 1, graded_against_goal: 1, severities: { P0: 0, P1: 2, P2: 4, P3: 3 } },
545
+ ],
546
+ dir: PROJECT + "/orc/orc-challenge/mobile-spec",
547
+ next: "/orc-challenge mobile-spec",
548
+ preflight_line: "challenge: mobile-spec AWAITING-FIX — 2 blocking findings open · no template (D1 NOT-CHECKED)",
549
+ },
550
+ };
551
+
552
+ const challengeList = {
553
+ ok: true,
554
+ in_flight: Object.values(challengeCycles).filter((c) => c.state !== "PASSED").length,
555
+ cycles: Object.values(challengeCycles).map((c) => ({
556
+ slug: c.slug,
557
+ kind: c.kind,
558
+ state: c.state,
559
+ why: c.why,
560
+ iterations: c.iterations,
561
+ blocking: c.counts.P0 + c.counts.P1,
562
+ counts: c.counts,
563
+ stalled: c.stalled,
564
+ no_template: c.no_template,
565
+ goal: c.goals.goal,
566
+ next: c.next,
567
+ })),
568
+ };
569
+
570
+ // The findings behind the rich cycle. Enough shapes to design against: a carried
571
+ // finding with each outcome, an accepted one, a rebutted one, and one whose
572
+ // anchor did not move.
573
+
574
+ const challengeShow = {
575
+ ok: true,
576
+ slug: "tsd-payments",
577
+ state: "AWAITING-RECHECK",
578
+ kind: "tsd",
579
+ goals: challengeCycles["tsd-payments"].goals,
580
+ template: challengeCycles["tsd-payments"].template,
581
+ no_template: false,
582
+ dimensions_selected: ["D1", "D2", "D3", "D4", "D5", "D6"],
583
+ accepted: { "F-003": { reason: "the endpoints land in the sibling API spec, not here", at: "11-08-2026 16:04:22", iteration: 2 } },
584
+ rebuttals: { "F-014": { reason: "the passive voice is quoted from the regulator's wording", at: "12-08-2026 09:11:03", status: "open" } },
585
+ events: [
586
+ { at: "10-08-2026 14:02:11", kind: "created", detail: "goal v1, template v1" },
587
+ { at: "11-08-2026 16:04:22", kind: "accept", detail: "F-003 — the endpoints land in the sibling API spec, not here" },
588
+ { at: "12-08-2026 08:40:00", kind: "regoal", detail: "docs/goals-v2.md — the board moved to a delivery review", to_version: 2 },
589
+ { at: "12-08-2026 09:11:03", kind: "rebut", detail: "F-014 — the passive voice is quoted from the regulator's wording" },
590
+ ],
591
+ revision: { mode: "new-file", pattern: "docs/tsd-payments-v{n}.md", expected: "docs/tsd-payments-v4.md" },
592
+ iterations: [
593
+ {
594
+ n: 3,
595
+ graded_against: 1,
596
+ graded_against_goal: 2,
597
+ coverage_pct: 100,
598
+ blocking: 3,
599
+ passed: false,
600
+ advised: true,
601
+ lint: { findings: 13, grade: 8.1 },
602
+ reader: { asked: 12, answered: 8, score: "8/12" },
603
+ verdict_file: "iteration-03/verdict.md",
604
+ advice_file: "iteration-03/advice.md",
605
+ severities: { P0: 0, P1: 3, P2: 5, P3: 2 },
606
+ dimensions: challengeCycles["tsd-payments"].dimensions.filter((d) => d.status !== "NOT-SELECTED"),
607
+ findings: [
608
+ {
609
+ id: "F-001",
610
+ dimension: "D2",
611
+ severity: "P1",
612
+ anchor: "docs/tsd-payments.md:118",
613
+ quote: "the idempotency window is applied appropriately",
614
+ what_is_wrong: "the window is never given a value anywhere in the document",
615
+ consequence: "two teams implementing from this will pick different windows, and the mismatch only shows up in production",
616
+ acceptance_line: "§4.2 names the window in seconds and the dead-letter destination",
617
+ serves: "done_means",
618
+ carried: true,
619
+ outcome: "still-open",
620
+ reason: null,
621
+ superseded_by: null,
622
+ lens: "judge",
623
+ disposition: null,
624
+ corroborated_by: [],
625
+ },
626
+ {
627
+ id: "R-007",
628
+ dimension: "D5",
629
+ severity: "P1",
630
+ anchor: "docs/tsd-payments.md:84",
631
+ quote: "Once the settlement job has been kicked off, the reconciliation is not run until the window is closed and no further retries are outstanding.",
632
+ what_is_wrong: "43 words, two negations, and a phrasal verb",
633
+ consequence: "the two non-native readers on the team read this three times and still ask",
634
+ acceptance_line: "the sentence is split, and 'kicked off' becomes 'started'",
635
+ serves: "audience",
636
+ carried: true,
637
+ outcome: "still-open",
638
+ reason: null,
639
+ superseded_by: null,
640
+ lens: "reader",
641
+ disposition: "adopted",
642
+ // Two lenses landing on the same defect from opposite directions is
643
+ // the strongest comprehension evidence this lane can produce — and it
644
+ // is a SIGNAL, never an automatic severity bump.
645
+ corroborated_by: ["outsider"],
646
+ },
647
+ {
648
+ id: "C-011",
649
+ dimension: "D1",
650
+ severity: "P1",
651
+ anchor: "docs/tsd-payments.md:1",
652
+ quote: "(the section is absent)",
653
+ what_is_wrong: "the template requires an Error handling section and there is none",
654
+ consequence: "every error path is undecided, so the implementer invents one per endpoint",
655
+ acceptance_line: "an Error handling section exists with one row per failure mode",
656
+ serves: "goal",
657
+ carried: false,
658
+ outcome: null,
659
+ reason: null,
660
+ superseded_by: null,
661
+ lens: "contrarian",
662
+ disposition: "adopted",
663
+ corroborated_by: [],
664
+ },
665
+ {
666
+ id: "F-009",
667
+ dimension: "D3",
668
+ severity: "P2",
669
+ anchor: "docs/tsd-payments.md:52",
670
+ quote: "the retry budget is 3",
671
+ what_is_wrong: "§2 says 3 retries, §6 says 5",
672
+ consequence: "whoever reads only one section builds the wrong one",
673
+ acceptance_line: "both sections say the same number, or one defers to the other",
674
+ serves: "goal",
675
+ carried: true,
676
+ outcome: "resolved",
677
+ reason: "§6 now points at §2",
678
+ superseded_by: null,
679
+ lens: "judge",
680
+ disposition: null,
681
+ corroborated_by: [],
682
+ },
683
+ {
684
+ id: "F-014",
685
+ dimension: "D5",
686
+ severity: "P2",
687
+ anchor: "docs/tsd-payments.md:140",
688
+ quote: "settlement is deemed to have occurred",
689
+ what_is_wrong: "passive voice in a normative sentence",
690
+ consequence: "the reader cannot tell who does it",
691
+ acceptance_line: "the actor is named",
692
+ serves: "audience",
693
+ carried: true,
694
+ outcome: "still-open",
695
+ reason: null,
696
+ superseded_by: null,
697
+ lens: "judge",
698
+ disposition: null,
699
+ corroborated_by: [],
700
+ },
701
+ {
702
+ id: "E-016",
703
+ dimension: "D2",
704
+ severity: "P2",
705
+ anchor: "docs/tsd-payments.md:96",
706
+ quote: "the worker consumes from the queue",
707
+ what_is_wrong: "superseded — §5 was rewritten and the claim moved",
708
+ consequence: "—",
709
+ acceptance_line: "see F-021",
710
+ serves: "goal",
711
+ carried: true,
712
+ outcome: "superseded",
713
+ reason: "§5 was rewritten around the outbox",
714
+ superseded_by: "F-021",
715
+ lens: "executor",
716
+ disposition: null,
717
+ corroborated_by: [],
718
+ },
719
+ ],
720
+ dropped: [{ id: "F-020", why: "no `serves` — not traceable to a stated goal element" }],
721
+ council_coverage_pct: 100,
722
+ council: challengeCycles["tsd-payments"].council
723
+ .filter((r) => r.selected && r.lens !== "judge")
724
+ .map((r) => (r.status === "RAN"
725
+ ? { lens: r.lens, ran: true, raised: r.raised, adopted: r.adopted, rejected: r.rejected, merged: r.merged, out_of_goal: r.out_of_goal }
726
+ : { lens: r.lens, ran: false, reason: r.reason })),
727
+ },
728
+ ],
729
+ open: [],
730
+ dir: PROJECT + "/orc/orc-challenge/tsd-payments",
731
+ };
732
+
733
+ const challengeDiff = {
734
+ ok: true,
735
+ slug: "tsd-payments",
736
+ state: "AWAITING-RECHECK",
737
+ expected: "docs/tsd-payments-v4.md",
738
+ found: true,
739
+ sha_before: "3f9a71c2",
740
+ sha_after: "b71c04ea",
741
+ changed: true,
742
+ added: 48,
743
+ removed: 12,
744
+ carried: [
745
+ { id: "F-001", anchor: "docs/tsd-payments.md:118", severity: "P1", dimension: "D2", touched: true },
746
+ { id: "F-007", anchor: "docs/tsd-payments.md:84", severity: "P1", dimension: "D5", touched: false },
747
+ { id: "F-014", anchor: "docs/tsd-payments.md:140", severity: "P2", dimension: "D5", touched: false },
748
+ ],
749
+ touched: 1,
750
+ untouched: ["F-007", "F-014"],
751
+ note: "touched/untouched is a HINT for you, never an input to the judge — the judge always re-reads the artifact",
752
+ };
753
+
754
+ // The exit-2 branch. You cannot design a candidate list on a cycle whose
755
+ // revision is exactly where it was declared — and this is the one place the
756
+ // panel must offer a COMMAND rather than a pick.
757
+
758
+ const challengeDiffMissing = {
759
+ ok: true,
760
+ slug: "billing-webhooks",
761
+ state: "MISSING-REVISION",
762
+ expected: "docs/billing-webhooks-v2.md",
763
+ found: false,
764
+ since: "11-08-2026 18:22:07",
765
+ candidates: [
766
+ { path: "docs/billing-webhooks-v2.draft.md", added: 51, removed: 12 },
767
+ { path: "src/billing/webhooks/handler.ts", added: 4, removed: 0 },
768
+ ],
769
+ note: "candidates are LISTED, never adopted — record the real one with `orc challenge expect <slug> --set <path>`",
770
+ };
771
+
772
+ const challengeLint = {
773
+ ok: true,
774
+ path: "docs/tsd-payments.md",
775
+ template: PROJECT + "/orc/orc-challenge/tsd-payments/template.md",
776
+ findings: [
777
+ { id: "L-001", dimension: "D1", line: 1, what: 'required section missing: "error handling"', quote: null },
778
+ { id: "L-002", dimension: "D5", line: 1, what: "40% of sentences look passive (heuristic; threshold 25%)", quote: null },
779
+ { id: "L-003", dimension: "D1", line: 3, what: 'section "Overview" has 13 words of body — ceremony, not content', quote: "Overview" },
780
+ { id: "L-004", dimension: "D6", line: 9, what: 'placeholder marker: "TBD"', quote: "## Scope\n\nTBD" },
781
+ { id: "L-005", dimension: "D5", line: 84, what: "sentence is 43 words (over 25)", quote: "Once the settlement job has been kicked off, the reconciliation is not run until the window is closed…" },
782
+ { id: "L-006", dimension: "D5", line: 84, what: 'idiom / phrasal verb: "kick off" — hard for a non-native reader', quote: null },
783
+ { id: "L-007", dimension: "D5", line: 118, what: '"SoR" is used before it is defined', quote: null },
784
+ { id: "L-008", dimension: "D6", line: 118, what: 'ambiguous quantifier: "appropriate" — an implementer cannot build from it', quote: null },
785
+ ],
786
+ counts: { total: 8, by_dimension: { D1: 2, D5: 4, D6: 2 } },
787
+ metrics: { headings: 9, sentences: 61, words: 812, sentence_p50: 14, sentence_p90: 43, passive_pct: 40, flesch_kincaid_grade: 8.1 },
788
+ structure: { required: 5, present: 4, missing: ["error handling"], out_of_order: false, invented: [] },
789
+ honesty: [
790
+ "This is a SIGNAL, not a verdict. A long sentence is not automatically a defect — the lint never blocks; it feeds the judge, who decides.",
791
+ "It is English-specific and heuristic: the grade is an estimate and passive-voice detection is a pattern match.",
792
+ ],
793
+ };
794
+
795
+ // ── /orc-doc (v0.48.0) ──────────────────────────────────────────────────────
796
+ // ONE FIXTURE PER STATE, and the ugly ones are the point: you cannot design the
797
+ // `user-edited` swatch on a document nobody has touched, the `open` dashed
798
+ // segment on a document with no gaps, a lint-RED health card on a clean file,
799
+ // or ribbon overflow on a document with nine sections.
800
+
801
+ /* `orc challenge roles --json` — STATIC. It works with no cycle at all, and it
802
+ is the ONE catalogue: the panel names no lens, class or disposition itself. */
803
+ const challengeRoles = {
804
+ ok: true,
805
+ lenses: CH_ORDER.map((lens) => ({ lens, ...CH_LENS[lens], suggested: null })),
806
+ council: CH_ORDER.filter((l) => l !== "judge"),
807
+ classes: ["finding", "opportunity", "premise"],
808
+ dispositions: ["adopted", "merged", "rejected", "out-of-goal"],
809
+ routes: ["brainstorm", "pact", "grill", "none"],
810
+ kinds: ["tsd", "prd", "adr", "api-contract", "readme", "runbook", "plan", "code", "mixed"],
811
+ suggested: null,
812
+ rule: "A lens raises; only the judge resolves. ORC proposes the council; the user picks it.",
813
+ };
814
+
815
+ const challengeCouncil = {
816
+ ok: true,
817
+ slug: "tsd-payments",
818
+ council: ["reader", "contrarian", "outsider", "executor", "principles", "expansionist"],
819
+ council_version: 2,
820
+ suggested: ["reader", "contrarian", "executor"],
821
+ rows: challengeCycles["tsd-payments"].council,
822
+ lens_counts: challengeCycles["tsd-payments"].lens_counts,
823
+ };
824
+
825
+ module.exports = { chGoals, chDims, challengeRoles, challengeCouncil, challengeCycles, challengeList, challengeShow, challengeDiff, challengeDiffMissing, challengeLint };