@hivehub/rulebook 5.7.0 → 5.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/rulebook-decision-create.md +55 -55
  4. package/.claude/commands/rulebook-decision-list.md +15 -15
  5. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  6. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  7. package/.claude/commands/rulebook-memory-save.md +48 -48
  8. package/.claude/commands/rulebook-memory-search.md +47 -47
  9. package/.claude/commands/rulebook-task-apply.md +67 -67
  10. package/.claude/commands/rulebook-task-archive.md +94 -94
  11. package/.claude/commands/rulebook-task-create.md +93 -93
  12. package/.claude/commands/rulebook-task-list.md +42 -42
  13. package/.claude/commands/rulebook-task-show.md +52 -52
  14. package/.claude/commands/rulebook-task-validate.md +53 -53
  15. package/.claude-plugin/marketplace.json +28 -28
  16. package/.claude-plugin/plugin.json +8 -8
  17. package/README.md +86 -0
  18. package/dist/cli/commands/claude.d.ts +17 -0
  19. package/dist/cli/commands/claude.d.ts.map +1 -0
  20. package/dist/cli/commands/claude.js +56 -0
  21. package/dist/cli/commands/claude.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts.map +1 -1
  23. package/dist/cli/commands/init.js +18 -2
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/update.d.ts.map +1 -1
  26. package/dist/cli/commands/update.js +6 -1
  27. package/dist/cli/commands/update.js.map +1 -1
  28. package/dist/cli/prompts.d.ts +13 -0
  29. package/dist/cli/prompts.d.ts.map +1 -1
  30. package/dist/cli/prompts.js +106 -0
  31. package/dist/cli/prompts.js.map +1 -1
  32. package/dist/core/claude/claude-mcp.d.ts +10 -1
  33. package/dist/core/claude/claude-mcp.d.ts.map +1 -1
  34. package/dist/core/claude/claude-mcp.js +48 -2
  35. package/dist/core/claude/claude-mcp.js.map +1 -1
  36. package/dist/core/claude/claude-settings-manager.d.ts +12 -0
  37. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -1
  38. package/dist/core/claude/claude-settings-manager.js +59 -3
  39. package/dist/core/claude/claude-settings-manager.js.map +1 -1
  40. package/dist/core/detect/detector.d.ts +8 -1
  41. package/dist/core/detect/detector.d.ts.map +1 -1
  42. package/dist/core/detect/detector.js +225 -0
  43. package/dist/core/detect/detector.js.map +1 -1
  44. package/dist/core/detect/library-registry.d.ts +40 -0
  45. package/dist/core/detect/library-registry.d.ts.map +1 -0
  46. package/dist/core/detect/library-registry.js +239 -0
  47. package/dist/core/detect/library-registry.js.map +1 -0
  48. package/dist/core/generators/generator.d.ts +2 -1
  49. package/dist/core/generators/generator.d.ts.map +1 -1
  50. package/dist/core/generators/generator.js +38 -1
  51. package/dist/core/generators/generator.js.map +1 -1
  52. package/dist/core/generators/rules-generator.d.ts +1 -5
  53. package/dist/core/generators/rules-generator.d.ts.map +1 -1
  54. package/dist/core/generators/rules-generator.js +40 -1
  55. package/dist/core/generators/rules-generator.js.map +1 -1
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp/rulebook-server.js +0 -0
  59. package/dist/types.d.ts +13 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +23 -22
  62. package/templates/agents/accessibility-reviewer.md +43 -43
  63. package/templates/agents/api-designer.md +42 -42
  64. package/templates/agents/architect.md +51 -51
  65. package/templates/agents/build-engineer.md +36 -36
  66. package/templates/agents/code-reviewer.md +47 -47
  67. package/templates/agents/compiler/codegen-debugger.md +34 -34
  68. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  69. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  70. package/templates/agents/database-architect.md +41 -41
  71. package/templates/agents/devops-engineer.md +42 -42
  72. package/templates/agents/docs-writer.md +38 -38
  73. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  74. package/templates/agents/game-engine/render-engineer.md +22 -22
  75. package/templates/agents/game-engine/shader-engineer.md +38 -38
  76. package/templates/agents/game-engine/systems-integration.md +43 -43
  77. package/templates/agents/generic/code-reviewer.md +41 -41
  78. package/templates/agents/generic/docs-writer.md +25 -25
  79. package/templates/agents/generic/project-manager.md +36 -36
  80. package/templates/agents/generic/researcher.md +34 -34
  81. package/templates/agents/generic/test-engineer.md +41 -41
  82. package/templates/agents/i18n-engineer.md +42 -42
  83. package/templates/agents/implementer.md +42 -42
  84. package/templates/agents/migration-engineer.md +42 -42
  85. package/templates/agents/mobile/platform-specialist.md +22 -22
  86. package/templates/agents/mobile/ui-engineer.md +22 -22
  87. package/templates/agents/performance-engineer.md +49 -49
  88. package/templates/agents/project-manager.md +217 -0
  89. package/templates/agents/quality-gatekeeper.md +208 -0
  90. package/templates/agents/refactoring-agent.md +41 -41
  91. package/templates/agents/researcher.md +38 -38
  92. package/templates/agents/security-reviewer.md +40 -40
  93. package/templates/agents/team-lead.md +37 -37
  94. package/templates/agents/tester.md +48 -48
  95. package/templates/agents/ux-reviewer.md +43 -43
  96. package/templates/agents/web-app/api-designer.md +22 -22
  97. package/templates/agents/web-app/backend-engineer.md +30 -30
  98. package/templates/agents/web-app/database-engineer.md +22 -22
  99. package/templates/agents/web-app/frontend-engineer.md +29 -29
  100. package/templates/agents/web-app/security-reviewer.md +32 -32
  101. package/templates/ci/rulebook-review.yml +26 -26
  102. package/templates/claude-workflows/bugfix.js +94 -0
  103. package/templates/claude-workflows/feature-pipeline.js +88 -0
  104. package/templates/claude-workflows/release-gate.js +64 -0
  105. package/templates/claude-workflows/review-fanout.js +125 -0
  106. package/templates/claude-workflows/rulebook-driver.js +382 -0
  107. package/templates/claude-workflows/spec-author.js +133 -0
  108. package/templates/cli/AIDER.md +49 -49
  109. package/templates/cli/AMAZON_Q.md +25 -25
  110. package/templates/cli/AUGGIE.md +32 -32
  111. package/templates/cli/CLAUDE.md +117 -117
  112. package/templates/cli/CLINE.md +99 -99
  113. package/templates/cli/CODEBUDDY.md +20 -20
  114. package/templates/cli/CODEIUM.md +20 -20
  115. package/templates/cli/CODEX.md +21 -21
  116. package/templates/cli/CONTINUE.md +34 -34
  117. package/templates/cli/CURSOR_CLI.md +62 -62
  118. package/templates/cli/FACTORY.md +18 -18
  119. package/templates/cli/GEMINI.md +35 -35
  120. package/templates/cli/KILOCODE.md +18 -18
  121. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  122. package/templates/commands/rulebook-decision-create.md +55 -55
  123. package/templates/commands/rulebook-decision-list.md +15 -15
  124. package/templates/commands/rulebook-knowledge-add.md +41 -41
  125. package/templates/commands/rulebook-knowledge-list.md +15 -15
  126. package/templates/commands/rulebook-memory-save.md +48 -48
  127. package/templates/commands/rulebook-memory-search.md +47 -47
  128. package/templates/commands/rulebook-task-apply.md +67 -67
  129. package/templates/commands/rulebook-task-archive.md +94 -94
  130. package/templates/commands/rulebook-task-create.md +93 -93
  131. package/templates/commands/rulebook-task-list.md +42 -42
  132. package/templates/commands/rulebook-task-show.md +52 -52
  133. package/templates/commands/rulebook-task-validate.md +53 -53
  134. package/templates/compact-context/_default.md +23 -23
  135. package/templates/compact-context/cpp.md +26 -26
  136. package/templates/compact-context/go.md +26 -26
  137. package/templates/compact-context/python.md +26 -26
  138. package/templates/compact-context/rust.md +28 -28
  139. package/templates/compact-context/typescript.md +29 -29
  140. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  141. package/templates/core/AGENT_AUTOMATION.md +296 -296
  142. package/templates/core/CLAUDE_MD_v2.md +90 -90
  143. package/templates/core/DAG.md +304 -304
  144. package/templates/core/DECISIONS.md +38 -38
  145. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  146. package/templates/core/KNOWLEDGE.md +49 -49
  147. package/templates/core/MULTI_AGENT.md +74 -74
  148. package/templates/core/PLANS.md +28 -28
  149. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  150. package/templates/core/RULEBOOK.md +1947 -1947
  151. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  152. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  153. package/templates/git/CI_CD_PATTERNS.md +661 -661
  154. package/templates/git/GITHUB_ACTIONS.md +728 -728
  155. package/templates/git/GITLAB_CI.md +730 -730
  156. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  157. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  158. package/templates/hooks/COMMIT_MSG.md +530 -530
  159. package/templates/hooks/POST_CHECKOUT.md +546 -546
  160. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  161. package/templates/hooks/PRE_COMMIT.md +414 -414
  162. package/templates/hooks/PRE_PUSH.md +601 -601
  163. package/templates/hooks/check-context-and-handoff.sh +16 -6
  164. package/templates/hooks/update-check.ps1 +84 -0
  165. package/templates/hooks/update-check.sh +103 -0
  166. package/templates/ides/CONTINUE_RULES.md +16 -16
  167. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  168. package/templates/ides/GEMINI_RULES.md +17 -17
  169. package/templates/ides/WINDSURF_RULES.md +14 -14
  170. package/templates/languages/C.md +333 -333
  171. package/templates/languages/CPP.md +743 -743
  172. package/templates/languages/CSHARP.md +417 -417
  173. package/templates/languages/ELIXIR.md +454 -454
  174. package/templates/languages/ERLANG.md +361 -361
  175. package/templates/languages/GO.md +645 -645
  176. package/templates/languages/HASKELL.md +177 -177
  177. package/templates/languages/JAVA.md +607 -607
  178. package/templates/languages/JAVASCRIPT.md +631 -631
  179. package/templates/languages/JULIA.md +97 -97
  180. package/templates/languages/KOTLIN.md +511 -511
  181. package/templates/languages/LISP.md +100 -100
  182. package/templates/languages/LUA.md +74 -74
  183. package/templates/languages/OBJECTIVEC.md +90 -90
  184. package/templates/languages/PHP.md +416 -416
  185. package/templates/languages/PYTHON.md +682 -682
  186. package/templates/languages/RUBY.md +421 -421
  187. package/templates/languages/RUST.md +477 -477
  188. package/templates/languages/SAS.md +73 -73
  189. package/templates/languages/SCALA.md +348 -348
  190. package/templates/languages/SOLIDITY.md +580 -580
  191. package/templates/languages/SQL.md +137 -137
  192. package/templates/languages/SWIFT.md +466 -466
  193. package/templates/languages/TYPESCRIPT.md +591 -591
  194. package/templates/languages/ZIG.md +265 -265
  195. package/templates/libraries/go/ECHO.md +18 -0
  196. package/templates/libraries/go/GIN.md +18 -0
  197. package/templates/libraries/go/GORM.md +18 -0
  198. package/templates/libraries/python/DJANGO.md +18 -0
  199. package/templates/libraries/python/FASTAPI.md +18 -0
  200. package/templates/libraries/python/FLASK.md +17 -0
  201. package/templates/libraries/python/PYDANTIC.md +17 -0
  202. package/templates/libraries/python/PYTEST.md +17 -0
  203. package/templates/libraries/python/SQLALCHEMY.md +17 -0
  204. package/templates/libraries/rust/ACTIX.md +17 -0
  205. package/templates/libraries/rust/AXUM.md +18 -0
  206. package/templates/libraries/rust/SERDE.md +16 -0
  207. package/templates/libraries/rust/SQLX.md +17 -0
  208. package/templates/libraries/rust/TOKIO.md +16 -0
  209. package/templates/libraries/typescript/ANGULAR.md +17 -0
  210. package/templates/libraries/typescript/DRIZZLE.md +16 -0
  211. package/templates/libraries/typescript/EXPRESS.md +17 -0
  212. package/templates/libraries/typescript/HEROUI.md +16 -0
  213. package/templates/libraries/typescript/JEST.md +17 -0
  214. package/templates/libraries/typescript/NESTJS.md +17 -0
  215. package/templates/libraries/typescript/NEXT.md +18 -0
  216. package/templates/libraries/typescript/PRISMA.md +16 -0
  217. package/templates/libraries/typescript/RADIX.md +16 -0
  218. package/templates/libraries/typescript/REACT.md +18 -0
  219. package/templates/libraries/typescript/SHADCN.md +16 -0
  220. package/templates/libraries/typescript/SVELTE.md +16 -0
  221. package/templates/libraries/typescript/TAILWIND.md +16 -0
  222. package/templates/libraries/typescript/TRPC.md +16 -0
  223. package/templates/libraries/typescript/VITEST.md +17 -0
  224. package/templates/libraries/typescript/VUE.md +17 -0
  225. package/templates/libraries/typescript/ZOD.md +17 -0
  226. package/templates/modules/ATLASSIAN.md +255 -255
  227. package/templates/modules/CONTEXT7.md +54 -54
  228. package/templates/modules/FIGMA.md +267 -267
  229. package/templates/modules/GITHUB_MCP.md +64 -64
  230. package/templates/modules/GRAFANA.md +328 -328
  231. package/templates/modules/MEMORY.md +126 -126
  232. package/templates/modules/NOTION.md +247 -247
  233. package/templates/modules/PLAYWRIGHT.md +90 -90
  234. package/templates/modules/RULEBOOK_MCP.md +208 -208
  235. package/templates/modules/SERENA.md +337 -337
  236. package/templates/modules/SUPABASE.md +223 -223
  237. package/templates/modules/SYNAP.md +69 -69
  238. package/templates/modules/VECTORIZER.md +63 -63
  239. package/templates/modules/sequential-thinking.md +42 -42
  240. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  241. package/templates/rules/cpp.md +46 -46
  242. package/templates/rules/csharp.md +44 -44
  243. package/templates/rules/diagnostic-first.md +39 -39
  244. package/templates/rules/fail-twice-escalate.md +46 -46
  245. package/templates/rules/follow-task-sequence.md +36 -36
  246. package/templates/rules/git-safety.md +29 -29
  247. package/templates/rules/go.md +40 -40
  248. package/templates/rules/incremental-implementation.md +56 -56
  249. package/templates/rules/incremental-tests.md +29 -29
  250. package/templates/rules/java.md +43 -43
  251. package/templates/rules/javascript.md +39 -39
  252. package/templates/rules/knowledge-base-usage.md +41 -41
  253. package/templates/rules/multi-agent-teams.md +75 -75
  254. package/templates/rules/no-deferred.md +31 -31
  255. package/templates/rules/no-shortcuts.md +30 -30
  256. package/templates/rules/python.md +43 -43
  257. package/templates/rules/research-first.md +30 -30
  258. package/templates/rules/respect-handoff-trigger.md +41 -41
  259. package/templates/rules/rust.md +40 -40
  260. package/templates/rules/sequential-editing.md +21 -21
  261. package/templates/rules/session-workflow.md +24 -24
  262. package/templates/rules/task-decomposition.md +32 -32
  263. package/templates/rules/typescript.md +40 -40
  264. package/templates/skills/cli/aider/SKILL.md +59 -59
  265. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  266. package/templates/skills/cli/auggie/SKILL.md +42 -42
  267. package/templates/skills/cli/claude/SKILL.md +42 -42
  268. package/templates/skills/cli/cline/SKILL.md +42 -42
  269. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  270. package/templates/skills/cli/codeium/SKILL.md +30 -30
  271. package/templates/skills/cli/codex/SKILL.md +31 -31
  272. package/templates/skills/cli/continue/SKILL.md +44 -44
  273. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  274. package/templates/skills/cli/factory/SKILL.md +28 -28
  275. package/templates/skills/cli/gemini/SKILL.md +45 -45
  276. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  277. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  278. package/templates/skills/core/dag/SKILL.md +314 -314
  279. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  280. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  281. package/templates/skills/core/rulebook/SKILL.md +176 -176
  282. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  283. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  284. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  285. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  286. package/templates/skills/dev/analysis/SKILL.md +19 -19
  287. package/templates/skills/dev/api-design/SKILL.md +15 -15
  288. package/templates/skills/dev/architect/SKILL.md +17 -17
  289. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  290. package/templates/skills/dev/db-design/SKILL.md +15 -15
  291. package/templates/skills/dev/debug/SKILL.md +16 -16
  292. package/templates/skills/dev/deploy/SKILL.md +17 -17
  293. package/templates/skills/dev/docs/SKILL.md +17 -17
  294. package/templates/skills/dev/handoff/SKILL.md +27 -27
  295. package/templates/skills/dev/migrate/SKILL.md +15 -15
  296. package/templates/skills/dev/perf/SKILL.md +17 -17
  297. package/templates/skills/dev/refactor/SKILL.md +17 -17
  298. package/templates/skills/dev/research/SKILL.md +14 -14
  299. package/templates/skills/dev/review/SKILL.md +18 -18
  300. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  301. package/templates/skills/dev/spec/SKILL.md +65 -0
  302. package/templates/skills/ides/copilot/SKILL.md +47 -47
  303. package/templates/skills/ides/cursor/SKILL.md +53 -53
  304. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  305. package/templates/skills/ides/replit/SKILL.md +46 -46
  306. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  307. package/templates/skills/ides/vscode/SKILL.md +50 -50
  308. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  309. package/templates/skills/ides/zed/SKILL.md +42 -42
  310. package/templates/skills/languages/c/SKILL.md +343 -343
  311. package/templates/skills/languages/cpp/SKILL.md +753 -753
  312. package/templates/skills/languages/csharp/SKILL.md +427 -427
  313. package/templates/skills/languages/elixir/SKILL.md +464 -464
  314. package/templates/skills/languages/erlang/SKILL.md +371 -371
  315. package/templates/skills/languages/go/SKILL.md +655 -655
  316. package/templates/skills/languages/haskell/SKILL.md +187 -187
  317. package/templates/skills/languages/java/SKILL.md +617 -617
  318. package/templates/skills/languages/javascript/SKILL.md +641 -641
  319. package/templates/skills/languages/julia/SKILL.md +107 -107
  320. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  321. package/templates/skills/languages/lisp/SKILL.md +110 -110
  322. package/templates/skills/languages/lua/SKILL.md +84 -84
  323. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  324. package/templates/skills/languages/php/SKILL.md +426 -426
  325. package/templates/skills/languages/python/SKILL.md +692 -692
  326. package/templates/skills/languages/ruby/SKILL.md +431 -431
  327. package/templates/skills/languages/rust/SKILL.md +487 -487
  328. package/templates/skills/languages/sas/SKILL.md +83 -83
  329. package/templates/skills/languages/scala/SKILL.md +358 -358
  330. package/templates/skills/languages/solidity/SKILL.md +590 -590
  331. package/templates/skills/languages/sql/SKILL.md +147 -147
  332. package/templates/skills/languages/swift/SKILL.md +476 -476
  333. package/templates/skills/languages/typescript/SKILL.md +302 -302
  334. package/templates/skills/languages/zig/SKILL.md +275 -275
  335. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  336. package/templates/skills/modules/context7/SKILL.md +64 -64
  337. package/templates/skills/modules/figma/SKILL.md +277 -277
  338. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  339. package/templates/skills/modules/grafana/SKILL.md +338 -338
  340. package/templates/skills/modules/memory/SKILL.md +73 -73
  341. package/templates/skills/modules/notion/SKILL.md +257 -257
  342. package/templates/skills/modules/playwright/SKILL.md +100 -100
  343. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  344. package/templates/skills/modules/serena/SKILL.md +347 -347
  345. package/templates/skills/modules/supabase/SKILL.md +233 -233
  346. package/templates/skills/modules/synap/SKILL.md +79 -79
  347. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  348. package/templates/workflows/typescript-test.yml +9 -3
  349. package/dist/agents/ralph-parser.d.ts +0 -91
  350. package/dist/agents/ralph-parser.d.ts.map +0 -1
  351. package/dist/agents/ralph-parser.js +0 -415
  352. package/dist/agents/ralph-parser.js.map +0 -1
  353. package/dist/cli/commands/analysis.d.ts +0 -8
  354. package/dist/cli/commands/analysis.d.ts.map +0 -1
  355. package/dist/cli/commands/analysis.js +0 -78
  356. package/dist/cli/commands/analysis.js.map +0 -1
  357. package/dist/cli/commands/compress.d.ts +0 -18
  358. package/dist/cli/commands/compress.d.ts.map +0 -1
  359. package/dist/cli/commands/compress.js +0 -100
  360. package/dist/cli/commands/compress.js.map +0 -1
  361. package/dist/cli/commands/ralph.d.ts +0 -45
  362. package/dist/cli/commands/ralph.d.ts.map +0 -1
  363. package/dist/cli/commands/ralph.js +0 -694
  364. package/dist/cli/commands/ralph.js.map +0 -1
  365. package/dist/cli/docs-prompts.d.ts +0 -3
  366. package/dist/cli/docs-prompts.d.ts.map +0 -1
  367. package/dist/cli/docs-prompts.js +0 -45
  368. package/dist/cli/docs-prompts.js.map +0 -1
  369. package/dist/core/agent-manager.d.ts +0 -69
  370. package/dist/core/agent-manager.d.ts.map +0 -1
  371. package/dist/core/agent-manager.js +0 -476
  372. package/dist/core/agent-manager.js.map +0 -1
  373. package/dist/core/agent-template-engine.d.ts +0 -51
  374. package/dist/core/agent-template-engine.d.ts.map +0 -1
  375. package/dist/core/agent-template-engine.js +0 -291
  376. package/dist/core/agent-template-engine.js.map +0 -1
  377. package/dist/core/analysis-manager.d.ts +0 -56
  378. package/dist/core/analysis-manager.d.ts.map +0 -1
  379. package/dist/core/analysis-manager.js +0 -218
  380. package/dist/core/analysis-manager.js.map +0 -1
  381. package/dist/core/auto-fixer.d.ts +0 -14
  382. package/dist/core/auto-fixer.d.ts.map +0 -1
  383. package/dist/core/auto-fixer.js +0 -207
  384. package/dist/core/auto-fixer.js.map +0 -1
  385. package/dist/core/changelog-generator.d.ts +0 -44
  386. package/dist/core/changelog-generator.d.ts.map +0 -1
  387. package/dist/core/changelog-generator.js +0 -222
  388. package/dist/core/changelog-generator.js.map +0 -1
  389. package/dist/core/claude-mcp.d.ts +0 -59
  390. package/dist/core/claude-mcp.d.ts.map +0 -1
  391. package/dist/core/claude-mcp.js +0 -220
  392. package/dist/core/claude-mcp.js.map +0 -1
  393. package/dist/core/claude-md-generator.d.ts +0 -52
  394. package/dist/core/claude-md-generator.d.ts.map +0 -1
  395. package/dist/core/claude-md-generator.js +0 -104
  396. package/dist/core/claude-md-generator.js.map +0 -1
  397. package/dist/core/claude-settings-manager.d.ts +0 -44
  398. package/dist/core/claude-settings-manager.d.ts.map +0 -1
  399. package/dist/core/claude-settings-manager.js +0 -191
  400. package/dist/core/claude-settings-manager.js.map +0 -1
  401. package/dist/core/cli-bridge.d.ts +0 -113
  402. package/dist/core/cli-bridge.d.ts.map +0 -1
  403. package/dist/core/cli-bridge.js +0 -1094
  404. package/dist/core/cli-bridge.js.map +0 -1
  405. package/dist/core/compact-context-manager.d.ts +0 -34
  406. package/dist/core/compact-context-manager.d.ts.map +0 -1
  407. package/dist/core/compact-context-manager.js +0 -60
  408. package/dist/core/compact-context-manager.js.map +0 -1
  409. package/dist/core/complexity-detector.d.ts +0 -36
  410. package/dist/core/complexity-detector.d.ts.map +0 -1
  411. package/dist/core/complexity-detector.js +0 -334
  412. package/dist/core/complexity-detector.js.map +0 -1
  413. package/dist/core/compress/compressor.d.ts +0 -60
  414. package/dist/core/compress/compressor.d.ts.map +0 -1
  415. package/dist/core/compress/compressor.js +0 -232
  416. package/dist/core/compress/compressor.js.map +0 -1
  417. package/dist/core/compress/discover.d.ts +0 -19
  418. package/dist/core/compress/discover.d.ts.map +0 -1
  419. package/dist/core/compress/discover.js +0 -100
  420. package/dist/core/compress/discover.js.map +0 -1
  421. package/dist/core/compress/validator.d.ts +0 -47
  422. package/dist/core/compress/validator.d.ts.map +0 -1
  423. package/dist/core/compress/validator.js +0 -131
  424. package/dist/core/compress/validator.js.map +0 -1
  425. package/dist/core/config-manager.d.ts +0 -86
  426. package/dist/core/config-manager.d.ts.map +0 -1
  427. package/dist/core/config-manager.js +0 -621
  428. package/dist/core/config-manager.js.map +0 -1
  429. package/dist/core/coverage-checker.d.ts +0 -14
  430. package/dist/core/coverage-checker.d.ts.map +0 -1
  431. package/dist/core/coverage-checker.js +0 -176
  432. package/dist/core/coverage-checker.js.map +0 -1
  433. package/dist/core/cursor-mdc-generator.d.ts +0 -30
  434. package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
  435. package/dist/core/cursor-mdc-generator.js +0 -98
  436. package/dist/core/cursor-mdc-generator.js.map +0 -1
  437. package/dist/core/decision-manager.d.ts +0 -25
  438. package/dist/core/decision-manager.d.ts.map +0 -1
  439. package/dist/core/decision-manager.js +0 -183
  440. package/dist/core/decision-manager.js.map +0 -1
  441. package/dist/core/dependency-checker.d.ts +0 -21
  442. package/dist/core/dependency-checker.d.ts.map +0 -1
  443. package/dist/core/dependency-checker.js +0 -247
  444. package/dist/core/dependency-checker.js.map +0 -1
  445. package/dist/core/detector.d.ts +0 -27
  446. package/dist/core/detector.d.ts.map +0 -1
  447. package/dist/core/detector.js +0 -1763
  448. package/dist/core/detector.js.map +0 -1
  449. package/dist/core/docs-generator.d.ts +0 -9
  450. package/dist/core/docs-generator.d.ts.map +0 -1
  451. package/dist/core/docs-generator.js +0 -531
  452. package/dist/core/docs-generator.js.map +0 -1
  453. package/dist/core/doctor.d.ts +0 -19
  454. package/dist/core/doctor.d.ts.map +0 -1
  455. package/dist/core/doctor.js +0 -229
  456. package/dist/core/doctor.js.map +0 -1
  457. package/dist/core/generator.d.ts +0 -56
  458. package/dist/core/generator.d.ts.map +0 -1
  459. package/dist/core/generator.js +0 -1193
  460. package/dist/core/generator.js.map +0 -1
  461. package/dist/core/github-issues-importer.d.ts +0 -82
  462. package/dist/core/github-issues-importer.d.ts.map +0 -1
  463. package/dist/core/github-issues-importer.js +0 -161
  464. package/dist/core/github-issues-importer.js.map +0 -1
  465. package/dist/core/gitignore-generator.d.ts +0 -13
  466. package/dist/core/gitignore-generator.d.ts.map +0 -1
  467. package/dist/core/gitignore-generator.js +0 -307
  468. package/dist/core/gitignore-generator.js.map +0 -1
  469. package/dist/core/health-scorer.d.ts +0 -61
  470. package/dist/core/health-scorer.d.ts.map +0 -1
  471. package/dist/core/health-scorer.js +0 -638
  472. package/dist/core/health-scorer.js.map +0 -1
  473. package/dist/core/iteration-tracker.d.ts +0 -85
  474. package/dist/core/iteration-tracker.d.ts.map +0 -1
  475. package/dist/core/iteration-tracker.js +0 -295
  476. package/dist/core/iteration-tracker.js.map +0 -1
  477. package/dist/core/knowledge-manager.d.ts +0 -24
  478. package/dist/core/knowledge-manager.d.ts.map +0 -1
  479. package/dist/core/knowledge-manager.js +0 -173
  480. package/dist/core/knowledge-manager.js.map +0 -1
  481. package/dist/core/learn-manager.d.ts +0 -29
  482. package/dist/core/learn-manager.d.ts.map +0 -1
  483. package/dist/core/learn-manager.js +0 -159
  484. package/dist/core/learn-manager.js.map +0 -1
  485. package/dist/core/mcp-reference-generator.d.ts +0 -13
  486. package/dist/core/mcp-reference-generator.d.ts.map +0 -1
  487. package/dist/core/mcp-reference-generator.js +0 -66
  488. package/dist/core/mcp-reference-generator.js.map +0 -1
  489. package/dist/core/minimal-scaffolder.d.ts +0 -8
  490. package/dist/core/minimal-scaffolder.d.ts.map +0 -1
  491. package/dist/core/minimal-scaffolder.js +0 -51
  492. package/dist/core/minimal-scaffolder.js.map +0 -1
  493. package/dist/core/modern-console.d.ts +0 -98
  494. package/dist/core/modern-console.d.ts.map +0 -1
  495. package/dist/core/modern-console.js +0 -556
  496. package/dist/core/modern-console.js.map +0 -1
  497. package/dist/core/multi-tool-generator.d.ts +0 -59
  498. package/dist/core/multi-tool-generator.d.ts.map +0 -1
  499. package/dist/core/multi-tool-generator.js +0 -157
  500. package/dist/core/multi-tool-generator.js.map +0 -1
  501. package/dist/core/override-manager.d.ts +0 -23
  502. package/dist/core/override-manager.d.ts.map +0 -1
  503. package/dist/core/override-manager.js +0 -82
  504. package/dist/core/override-manager.js.map +0 -1
  505. package/dist/core/plans-manager.d.ts +0 -46
  506. package/dist/core/plans-manager.d.ts.map +0 -1
  507. package/dist/core/plans-manager.js +0 -158
  508. package/dist/core/plans-manager.js.map +0 -1
  509. package/dist/core/prd-generator.d.ts +0 -48
  510. package/dist/core/prd-generator.d.ts.map +0 -1
  511. package/dist/core/prd-generator.js +0 -233
  512. package/dist/core/prd-generator.js.map +0 -1
  513. package/dist/core/ralph-manager.d.ts +0 -163
  514. package/dist/core/ralph-manager.d.ts.map +0 -1
  515. package/dist/core/ralph-manager.js +0 -555
  516. package/dist/core/ralph-manager.js.map +0 -1
  517. package/dist/core/ralph-parallel.d.ts +0 -55
  518. package/dist/core/ralph-parallel.d.ts.map +0 -1
  519. package/dist/core/ralph-parallel.js +0 -201
  520. package/dist/core/ralph-parallel.js.map +0 -1
  521. package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
  522. package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
  523. package/dist/core/ralph-plan-checkpoint.js +0 -154
  524. package/dist/core/ralph-plan-checkpoint.js.map +0 -1
  525. package/dist/core/ralph-scripts.d.ts +0 -12
  526. package/dist/core/ralph-scripts.d.ts.map +0 -1
  527. package/dist/core/ralph-scripts.js +0 -50
  528. package/dist/core/ralph-scripts.js.map +0 -1
  529. package/dist/core/review-manager.d.ts +0 -74
  530. package/dist/core/review-manager.d.ts.map +0 -1
  531. package/dist/core/review-manager.js +0 -371
  532. package/dist/core/review-manager.js.map +0 -1
  533. package/dist/core/rules-generator.d.ts +0 -73
  534. package/dist/core/rules-generator.d.ts.map +0 -1
  535. package/dist/core/rules-generator.js +0 -202
  536. package/dist/core/rules-generator.js.map +0 -1
  537. package/dist/core/skills-manager.d.ts +0 -126
  538. package/dist/core/skills-manager.d.ts.map +0 -1
  539. package/dist/core/skills-manager.js +0 -654
  540. package/dist/core/skills-manager.js.map +0 -1
  541. package/dist/core/state-writer.d.ts +0 -35
  542. package/dist/core/state-writer.d.ts.map +0 -1
  543. package/dist/core/state-writer.js +0 -81
  544. package/dist/core/state-writer.js.map +0 -1
  545. package/dist/core/task-manager.d.ts +0 -127
  546. package/dist/core/task-manager.d.ts.map +0 -1
  547. package/dist/core/task-manager.js +0 -607
  548. package/dist/core/task-manager.js.map +0 -1
  549. package/dist/core/telemetry.d.ts +0 -29
  550. package/dist/core/telemetry.d.ts.map +0 -1
  551. package/dist/core/telemetry.js +0 -57
  552. package/dist/core/telemetry.js.map +0 -1
  553. package/dist/core/validator.d.ts +0 -21
  554. package/dist/core/validator.d.ts.map +0 -1
  555. package/dist/core/validator.js +0 -177
  556. package/dist/core/validator.js.map +0 -1
  557. package/dist/core/version-bumper.d.ts +0 -19
  558. package/dist/core/version-bumper.d.ts.map +0 -1
  559. package/dist/core/version-bumper.js +0 -180
  560. package/dist/core/version-bumper.js.map +0 -1
  561. package/dist/core/watcher.d.ts +0 -9
  562. package/dist/core/watcher.d.ts.map +0 -1
  563. package/dist/core/watcher.js +0 -22
  564. package/dist/core/watcher.js.map +0 -1
  565. package/dist/core/workflow-generator.d.ts +0 -15
  566. package/dist/core/workflow-generator.d.ts.map +0 -1
  567. package/dist/core/workflow-generator.js +0 -391
  568. package/dist/core/workflow-generator.js.map +0 -1
  569. package/dist/hooks/terse-activate.d.ts +0 -59
  570. package/dist/hooks/terse-activate.d.ts.map +0 -1
  571. package/dist/hooks/terse-activate.js +0 -149
  572. package/dist/hooks/terse-activate.js.map +0 -1
  573. package/dist/hooks/terse-config.d.ts +0 -51
  574. package/dist/hooks/terse-config.d.ts.map +0 -1
  575. package/dist/hooks/terse-config.js +0 -130
  576. package/dist/hooks/terse-config.js.map +0 -1
  577. package/dist/hooks/terse-mode-tracker.d.ts +0 -78
  578. package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
  579. package/dist/hooks/terse-mode-tracker.js +0 -213
  580. package/dist/hooks/terse-mode-tracker.js.map +0 -1
  581. package/dist/memory/hnsw-index.d.ts +0 -68
  582. package/dist/memory/hnsw-index.d.ts.map +0 -1
  583. package/dist/memory/hnsw-index.js +0 -544
  584. package/dist/memory/hnsw-index.js.map +0 -1
  585. package/dist/memory/memory-cache.d.ts +0 -33
  586. package/dist/memory/memory-cache.d.ts.map +0 -1
  587. package/dist/memory/memory-cache.js +0 -85
  588. package/dist/memory/memory-cache.js.map +0 -1
  589. package/dist/memory/memory-search.d.ts +0 -42
  590. package/dist/memory/memory-search.d.ts.map +0 -1
  591. package/dist/memory/memory-search.js +0 -180
  592. package/dist/memory/memory-search.js.map +0 -1
  593. package/dist/memory/memory-store.d.ts +0 -84
  594. package/dist/memory/memory-store.d.ts.map +0 -1
  595. package/dist/memory/memory-store.js +0 -566
  596. package/dist/memory/memory-store.js.map +0 -1
  597. package/dist/memory/memory-vectorizer.d.ts +0 -29
  598. package/dist/memory/memory-vectorizer.d.ts.map +0 -1
  599. package/dist/memory/memory-vectorizer.js +0 -199
  600. package/dist/memory/memory-vectorizer.js.map +0 -1
@@ -0,0 +1,382 @@
1
+ export const meta = {
2
+ name: 'rulebook-driver',
3
+ description:
4
+ 'Drain the rulebook backlog in a loop: discover the next unchecked task item, implement it, gate it through an independent SDD+TDD opus reviewer (max 3 rounds), document it, COMMIT it, then move to the next item — until none remain, a item fails review, the item cap is hit, or the token budget runs low. Each approved item is committed before the next starts, so the working tree is clean between items and every gate sees only the relevant diff.',
5
+ phases: [
6
+ { title: 'Discover', detail: 'find first unchecked item (lowest phase)', model: 'haiku' },
7
+ { title: 'Implement', detail: 'dev implements; independent opus reviewer gates; loop ≤3', model: 'sonnet' },
8
+ { title: 'Review', detail: 'independent full SDD+TDD review', model: 'opus' },
9
+ { title: 'Document', detail: 'docs-writer updates README/CHANGELOG', model: 'haiku' },
10
+ { title: 'Commit', detail: 'commit the approved item (conventional, hooks must pass)', model: 'sonnet' },
11
+ { title: 'Fanout', detail: 'review-fanout adversarial review of the task changeset', model: 'sonnet' },
12
+ { title: 'Gate', detail: 'release-gate go/no-go once the backlog is drained', model: 'sonnet' },
13
+ ],
14
+ }
15
+
16
+ // ---- Tunables (override via args) ------------------------------------------
17
+ // args: { once?: boolean, maxItems?: number, minBudget?: number, fanoutRounds?: number }
18
+ // once — process a single item then stop (legacy one-shot behavior)
19
+ // maxItems — hard cap on items processed in one run (default 25 safety stop)
20
+ // minBudget — stop before the next item if remaining tokens fall below this
21
+ // fanoutRounds — max review-fanout remediation rounds per completed task (default 2)
22
+ const opts = args && typeof args === 'object' ? args : {}
23
+ const ONCE = opts.once === true
24
+ const MAX_ITEMS = typeof opts.maxItems === 'number' ? opts.maxItems : 25
25
+ const MIN_BUDGET = typeof opts.minBudget === 'number' ? opts.minBudget : 60_000
26
+ const MAX_REVIEW_ROUNDS = 3
27
+ // Per-completed-task adversarial gate. Counted SEPARATELY from MAX_REVIEW_ROUNDS so a
28
+ // fanout finding never competes with the per-item SDD/TDD round budget.
29
+ const MAX_FANOUT_ROUNDS = typeof opts.fanoutRounds === 'number' ? opts.fanoutRounds : 2
30
+
31
+ // ---- Structured-output schemas --------------------------------------------
32
+
33
+ const TASK_SCHEMA = {
34
+ type: 'object',
35
+ additionalProperties: false,
36
+ required: ['found', 'taskId', 'phase', 'item', 'specPaths', 'summary'],
37
+ properties: {
38
+ found: { type: 'boolean', description: 'true if an unchecked checklist item was found' },
39
+ taskId: { type: 'string', description: 'task directory id; empty string if none' },
40
+ phase: { type: 'string', description: 'phase the item belongs to; empty if none' },
41
+ item: { type: 'string', description: 'exact text of the first unchecked "- [ ]" item' },
42
+ specPaths: {
43
+ type: 'array',
44
+ items: { type: 'string' },
45
+ description: 'paths to proposal.md, tasks.md and specs/**/spec.md for this task',
46
+ },
47
+ summary: { type: 'string', description: 'one-line description of what the item asks for' },
48
+ },
49
+ }
50
+
51
+ const VERDICT_SCHEMA = {
52
+ type: 'object',
53
+ additionalProperties: false,
54
+ required: ['pass', 'sddCompliant', 'tddCompliant', 'issues', 'summary'],
55
+ properties: {
56
+ pass: {
57
+ type: 'boolean',
58
+ description: 'true ONLY if correct, well-implemented, and both SDD and TDD are satisfied',
59
+ },
60
+ sddCompliant: {
61
+ type: 'boolean',
62
+ description: 'implementation satisfies every SHALL/MUST scenario in the spec, nothing unspecified added',
63
+ },
64
+ tddCompliant: {
65
+ type: 'boolean',
66
+ description: 'tests exist for the new behavior, were written for it, and actually run and pass',
67
+ },
68
+ issues: {
69
+ type: 'array',
70
+ items: { type: 'string' },
71
+ description: 'concrete, actionable blocking problems; empty array when pass=true',
72
+ },
73
+ summary: { type: 'string', description: 'one-paragraph verdict rationale' },
74
+ },
75
+ }
76
+
77
+ const HEAD_SCHEMA = {
78
+ type: 'object',
79
+ additionalProperties: false,
80
+ required: ['sha'],
81
+ properties: { sha: { type: 'string', description: 'full commit sha of HEAD' } },
82
+ }
83
+
84
+ const COMMIT_SCHEMA = {
85
+ type: 'object',
86
+ additionalProperties: false,
87
+ required: ['committed', 'sha', 'message'],
88
+ properties: {
89
+ committed: { type: 'boolean', description: 'true only if a commit was actually created and hooks passed' },
90
+ sha: { type: 'string', description: 'the new commit sha; empty if not committed' },
91
+ message: { type: 'string', description: 'the conventional-commit message used' },
92
+ error: { type: 'string', description: 'reason / hook output when committed=false' },
93
+ },
94
+ }
95
+
96
+ // ---- Git helpers (agent-run, since workflows cannot exec shell directly) ----
97
+
98
+ async function gitHead() {
99
+ const r = await agent(
100
+ 'Run `git rev-parse HEAD` and return the full commit sha as { sha }.',
101
+ { label: 'git-head', phase: 'Discover', agentType: 'researcher', model: 'haiku', schema: HEAD_SCHEMA }
102
+ )
103
+ return r && r.sha ? r.sha : 'HEAD'
104
+ }
105
+
106
+ // Commit the current working tree as ONE conventional commit. The project's pre-commit
107
+ // hooks (type-check + lint + tests) run here and MUST pass — never bypass with --no-verify.
108
+ // Returns COMMIT_SCHEMA. committed=false signals the commit/quality gate failed.
109
+ async function commitWork(label, context, specPaths) {
110
+ return agent(
111
+ `Commit the current working-tree changes as ONE Conventional Commits commit.
112
+
113
+ Context: ${context}
114
+ Specs (for scope/context): ${(specPaths || []).join(', ') || 'n/a'}
115
+
116
+ Steps:
117
+ 1. \`git status --short\` and \`git --no-pager diff --stat\` to see what changed. If nothing is staged or modified, return committed=false, error="nothing to commit".
118
+ 2. \`git add -A\`.
119
+ 3. Commit with a Conventional Commits message — \`type(scope): subject\` (subject ≤72 chars), optional body. Choose the type from the actual change (feat/fix/docs/test/refactor/chore).
120
+ 4. The pre-commit hooks (type-check, lint, tests) MUST pass. NEVER pass --no-verify. If a hook fails, do NOT bypass it: return committed=false with the hook output in error.
121
+ Return committed, the new commit sha, and the message used.`,
122
+ { label, phase: 'Commit', agentType: 'build-engineer', model: 'sonnet', schema: COMMIT_SCHEMA }
123
+ )
124
+ }
125
+
126
+ // ---- Per-item pipeline ----------------------------------------------------
127
+
128
+ async function driveItem(task, itemIndex) {
129
+ let verdict = null
130
+ let lastIssues = []
131
+ let passedRound = 0
132
+
133
+ for (let round = 1; round <= MAX_REVIEW_ROUNDS; round++) {
134
+ const devPrompt =
135
+ round === 1
136
+ ? `Implement this rulebook task item with strict SDD and TDD discipline.
137
+
138
+ Task: ${task.taskId} / ${task.phase}
139
+ Item: ${task.item}
140
+ Specs to satisfy (READ THESE FIRST): ${task.specPaths.join(', ')}
141
+
142
+ The working tree is clean (previous items are already committed), so your changes are the ONLY uncommitted diff. Do NOT commit — the driver commits after review.
143
+ TDD: write the failing test(s) first, then the minimum implementation that makes them pass.
144
+ SDD: every behavior you add must trace to a SHALL/MUST scenario in the spec. Do NOT add unspecified features.
145
+ Before finishing: run the type-checker, then the relevant tests. Both must be green.
146
+ Report exactly which files you created/changed and which tests you added.`
147
+ : `An independent reviewer REJECTED your previous attempt (round ${round - 1}). Fix ONLY these blocking issues; do not touch anything else:
148
+
149
+ ${lastIssues.map((i, n) => `${n + 1}. ${i}`).join('\n')}
150
+
151
+ Do NOT commit. Re-run the type-checker and tests (both must pass). Report which files you changed and which tests you added or updated.`
152
+
153
+ const dev = await agent(devPrompt, {
154
+ label: `dev:item${itemIndex}:r${round}`,
155
+ phase: 'Implement',
156
+ agentType: 'typescript-implementer',
157
+ model: 'sonnet',
158
+ })
159
+
160
+ // Independent reviewer — fresh subagent, NO conversation context, opus for a thorough
161
+ // review. Sees only the current item's diff (working tree) + the spec, because previous
162
+ // items are already committed.
163
+ verdict = await agent(
164
+ `You are an INDEPENDENT senior reviewer with NO prior context. This is the FINAL quality gate — be exhaustive, judge ONLY from hard evidence, never trust the developer's claims without checking.
165
+
166
+ Steps:
167
+ 1. Run \`git --no-pager diff\` and \`git --no-pager diff --staged\` to see exactly what changed. (Previous items are committed; this is only the current item's work.)
168
+ 2. Read the spec files: ${task.specPaths.join(', ')}
169
+ 3. Judge on two axes:
170
+ - SDD: does the diff satisfy EVERY SHALL/MUST scenario in the spec, with nothing unspecified bolted on?
171
+ - TDD: are there tests covering the new behavior, and do they actually run and PASS? Run the test suite for the touched area to confirm.
172
+ 4. Also verify correctness, edge cases, error paths, and that the type-checker passes.
173
+
174
+ The developer reported the following (verify it, do not take it at face value):
175
+ """
176
+ ${dev}
177
+ """
178
+
179
+ Set pass=true ONLY when SDD and TDD are both fully satisfied and the code is correct. Otherwise return concrete, actionable blocking issues the developer can fix.`,
180
+ {
181
+ label: `review:item${itemIndex}:r${round}`,
182
+ phase: 'Review',
183
+ agentType: 'code-reviewer',
184
+ model: 'opus',
185
+ schema: VERDICT_SCHEMA,
186
+ }
187
+ )
188
+
189
+ if (verdict && verdict.pass) {
190
+ passedRound = round
191
+ break
192
+ }
193
+ lastIssues = (verdict && verdict.issues) || ['Reviewer returned no verdict']
194
+ log(`Item ${itemIndex} round ${round} rejected: ${lastIssues.length} issue(s).`)
195
+ }
196
+
197
+ if (!verdict || !verdict.pass) {
198
+ return { passed: false, issues: lastIssues, verdict: verdict && verdict.summary }
199
+ }
200
+
201
+ const docs = await agent(
202
+ `A rulebook task item was just implemented and passed independent SDD+TDD review.
203
+
204
+ Task: ${task.taskId} / ${task.phase}
205
+ Item: ${task.item}
206
+ Specs: ${task.specPaths.join(', ')}
207
+
208
+ Update the application documentation to reflect what shipped (do NOT commit — the driver commits next):
209
+ 1. Run \`git --no-pager diff\` to see exactly what changed.
210
+ 2. Update CHANGELOG.md with a conventional-commit-style entry under the unreleased section.
211
+ 3. Update README.md only if public/user-facing behavior changed.
212
+ Keep all docs in English. Do not document behavior that is not present in the diff.
213
+ Report which documentation files you updated.`,
214
+ { label: `document:item${itemIndex}`, phase: 'Document', agentType: 'docs-writer', model: 'haiku' }
215
+ )
216
+
217
+ // Commit the approved item BEFORE the next item starts. Pre-commit hooks gate it; a hook
218
+ // failure means the item is not actually done, so we surface it as a failure.
219
+ const commit = await commitWork(
220
+ `commit:item${itemIndex}`,
221
+ `Rulebook task item "${task.item}" (${task.taskId}/${task.phase}) — passed independent SDD+TDD review and docs are updated.`,
222
+ task.specPaths
223
+ )
224
+ if (!commit || !commit.committed) {
225
+ return {
226
+ passed: false,
227
+ issues: [`commit failed: ${(commit && commit.error) || 'unknown error'}`],
228
+ verdict: 'item implementation passed review but the commit (pre-commit quality gate) failed',
229
+ }
230
+ }
231
+
232
+ return { passed: true, passedRound, review: verdict.summary, docs, commitSha: commit.sha, commitMessage: commit.message }
233
+ }
234
+
235
+ // ---- Per-task adversarial gate (review-fanout) -----------------------------
236
+ // Runs ONCE per completed task, not per item. Scoped (via baseRef) to that task's committed
237
+ // changeset. Blocking (blocker/major) findings are remediated by a dev agent, committed, and
238
+ // re-reviewed, up to MAX_FANOUT_ROUNDS. Returns { passed, rounds, blocking } — passed=false
239
+ // means the task could not be cleaned.
240
+ async function reviewFanoutGate(taskId, specPaths, baseRef) {
241
+ const scope = baseRef ? { baseRef } : undefined
242
+ const scopeLabel = baseRef ? ` (since ${baseRef.slice(0, 8)})` : ''
243
+ for (let fround = 1; fround <= MAX_FANOUT_ROUNDS; fround++) {
244
+ phase('Fanout')
245
+ log(`Task ${taskId}: review-fanout round ${fround}/${MAX_FANOUT_ROUNDS}${scopeLabel}…`)
246
+ const fanout = await workflow('review-fanout', scope)
247
+ const blocking = (fanout && fanout.blocking) || []
248
+
249
+ if (blocking.length === 0) {
250
+ // If a prior round remediated, those fixes are uncommitted — commit them now.
251
+ if (fround > 1) {
252
+ await commitWork(`commit:fanout-fix:${taskId}`, `review-fanout remediation for task ${taskId}`, specPaths)
253
+ }
254
+ log(`Task ${taskId}: review-fanout clean (round ${fround}).`)
255
+ return { passed: true, rounds: fround, blocking: [] }
256
+ }
257
+
258
+ if (fround === MAX_FANOUT_ROUNDS) {
259
+ log(`Task ${taskId}: still ${blocking.length} blocking issue(s) after ${fround} fanout round(s) — escalating.`)
260
+ return { passed: false, rounds: fround, blocking }
261
+ }
262
+
263
+ const issues = blocking
264
+ .map((f) => `[${f.severity}] ${f.file || ''} — ${f.title}: ${f.detail || ''} (${f.dimension || 'review'})`)
265
+ .join('\n')
266
+ log(`Task ${taskId}: review-fanout flagged ${blocking.length} blocking issue(s); remediating.`)
267
+ await agent(
268
+ `An independent adversarial review of task ${taskId} found blocking issues in the committed diff. Fix ONLY these; do not touch anything else, and do not weaken or delete tests to make them pass. Do NOT commit — the driver commits the remediation after re-review:
269
+
270
+ ${issues}
271
+
272
+ Specs that still must hold: ${(specPaths || []).join(', ') || '(see task directory)'}
273
+ Re-run the type-checker and the relevant tests (both must pass). Report which files you changed.`,
274
+ { label: `fanout-fix:${taskId}:r${fround}`, phase: 'Fanout', agentType: 'typescript-implementer', model: 'sonnet' }
275
+ )
276
+ }
277
+ return { passed: true, rounds: MAX_FANOUT_ROUNDS, blocking: [] }
278
+ }
279
+
280
+ // ---- Backlog loop ---------------------------------------------------------
281
+
282
+ const processed = []
283
+ const taskGates = []
284
+ let stopReason = 'backlog-drained'
285
+ let currentTaskId = null
286
+ let currentSpecPaths = []
287
+ let currentTaskBaseRef = null
288
+ let halted = false
289
+
290
+ // Run the per-task review-fanout gate once, scoped to the task's committed changeset (baseRef).
291
+ async function gateCompletedTask(taskId, specPaths, baseRef) {
292
+ const gate = await reviewFanoutGate(taskId, specPaths, baseRef)
293
+ taskGates.push({ taskId, passed: gate.passed, rounds: gate.rounds, blockingCount: gate.blocking.length, baseRef })
294
+ return gate
295
+ }
296
+
297
+ for (let i = 1; i <= MAX_ITEMS; i++) {
298
+ if (budget.total && budget.remaining() < MIN_BUDGET) {
299
+ stopReason = 'budget-low'
300
+ log(`Stopping: ${Math.round(budget.remaining() / 1000)}k tokens left (< ${Math.round(MIN_BUDGET / 1000)}k).`)
301
+ break
302
+ }
303
+
304
+ phase('Discover')
305
+ const task = await agent(
306
+ `You are discovering the NEXT rulebook task item to execute. Follow the project rule "follow-task-sequence": pick the FIRST unchecked "- [ ]" item from the LOWEST-numbered phase. Never reorder, never cherry-pick.
307
+
308
+ Steps:
309
+ 1. Read .rulebook/STATE.md to find the active task id.
310
+ 2. Open .rulebook/tasks/<active-task>/tasks.md (fall back to the lowest-numbered task directory if STATE.md is stale or the active task is fully checked).
311
+ 3. Find the first "- [ ]" item, top to bottom.
312
+ 4. Collect that task's spec material: proposal.md, tasks.md, and every specs/**/spec.md under the task directory.
313
+
314
+ Set found=false (and leave the other string fields empty) if every item in every task is already checked.`,
315
+ { label: `discover:${i}`, phase: 'Discover', agentType: 'researcher', model: 'haiku', schema: TASK_SCHEMA }
316
+ )
317
+
318
+ if (!task || !task.found) {
319
+ stopReason = processed.length ? 'backlog-drained' : 'no-pending-task'
320
+ break
321
+ }
322
+
323
+ // Task boundary: a new taskId means the previous task is fully checked → gate it once,
324
+ // then record the new task's baseRef (current HEAD) so its gate is scoped to its own commits.
325
+ if (task.taskId !== currentTaskId) {
326
+ if (currentTaskId) {
327
+ const gate = await gateCompletedTask(currentTaskId, currentSpecPaths, currentTaskBaseRef)
328
+ if (!gate.passed) {
329
+ stopReason = 'task-fanout-failed'
330
+ log(`Halting: task ${currentTaskId} failed the review-fanout gate.`)
331
+ halted = true
332
+ break
333
+ }
334
+ }
335
+ currentTaskId = task.taskId
336
+ currentSpecPaths = task.specPaths || []
337
+ currentTaskBaseRef = await gitHead()
338
+ }
339
+
340
+ log(`[${i}/${MAX_ITEMS}] ${task.taskId} / ${task.phase}: ${task.item}`)
341
+ const result = await driveItem(task, i)
342
+ processed.push({ taskId: task.taskId, phase: task.phase, item: task.item, ...result })
343
+
344
+ if (!result.passed) {
345
+ stopReason = 'item-failed-review'
346
+ log(`Item ${i} failed (${(result.issues || []).join('; ') || 'see verdict'}) — halting loop (sequential tasks must not build on a broken item).`)
347
+ halted = true
348
+ break
349
+ }
350
+
351
+ if (ONCE) {
352
+ stopReason = 'once'
353
+ break
354
+ }
355
+ if (i === MAX_ITEMS) stopReason = 'max-items'
356
+ }
357
+
358
+ // Gate the final task only when the backlog drained cleanly (last task fully checked).
359
+ // Mid-task stops (once / max-items / budget-low) leave the task incomplete — skip the gate.
360
+ if (!halted && stopReason === 'backlog-drained' && currentTaskId) {
361
+ const gate = await gateCompletedTask(currentTaskId, currentSpecPaths, currentTaskBaseRef)
362
+ if (!gate.passed) {
363
+ stopReason = 'task-fanout-failed'
364
+ halted = true
365
+ }
366
+ }
367
+
368
+ const passed = processed.filter((p) => p.passed).length
369
+
370
+ // FINAL: one release-gate pass over the work completed this run. Skipped when we halted on a
371
+ // failure (broken state) or when nothing passed.
372
+ let releaseGate = null
373
+ if (passed > 0 && !halted) {
374
+ phase('Gate')
375
+ log(`Running release-gate over ${passed} completed item(s)…`)
376
+ releaseGate = await workflow('release-gate')
377
+ log(`release-gate: ${releaseGate && releaseGate.go ? 'GO ✅' : 'NO-GO ⛔'}`)
378
+ }
379
+
380
+ log(`Done: ${passed}/${processed.length} item(s) passed & committed. Stop reason: ${stopReason}.`)
381
+
382
+ return { stopReason, processedCount: processed.length, passedCount: passed, processed, taskGates, releaseGate }
@@ -0,0 +1,133 @@
1
+ export const meta = {
2
+ name: 'spec-author',
3
+ description:
4
+ 'Help the user write a rulebook task spec: research the codebase + existing specs, draft a proposal + SHALL/MUST spec with Given/When/Then scenarios, then run an opus gap-critic that returns ranked clarifying questions and detected gaps for the user to answer. Iterates when prior answers are supplied via args.answers.',
5
+ phases: [
6
+ { title: 'Research', model: 'haiku' },
7
+ { title: 'Draft', model: 'opus' },
8
+ { title: 'Critique', model: 'opus' },
9
+ ],
10
+ }
11
+
12
+ // args: { topic: string, answers?: Array<{ question: string, answer: string }> }
13
+ // NOTE: workflow subagents are non-interactive — this workflow cannot prompt the
14
+ // user mid-run. It RETURNS ranked questions/gaps; the main loop asks the user
15
+ // (e.g. via AskUserQuestion), then re-invokes this workflow with args.answers
16
+ // folded in. Repeat until `questions` comes back empty / `ready` is true.
17
+ const input = args && typeof args === 'object' ? args : {}
18
+ const topic = input.topic || (typeof args === 'string' ? args : null)
19
+ const priorAnswers = Array.isArray(input.answers) ? input.answers : []
20
+
21
+ if (!topic) {
22
+ log('No topic provided. Pass args: { topic: "...", answers?: [...] }.')
23
+ return { error: 'missing-topic' }
24
+ }
25
+
26
+ const answersBlock = priorAnswers.length
27
+ ? `\n\nThe user has already answered these clarifying questions — fold them into the draft as settled decisions:\n${priorAnswers
28
+ .map((a, i) => `${i + 1}. Q: ${a.question}\n A: ${a.answer}`)
29
+ .join('\n')}`
30
+ : ''
31
+
32
+ const CRITIQUE_SCHEMA = {
33
+ type: 'object',
34
+ additionalProperties: false,
35
+ required: ['ready', 'questions', 'gaps', 'missingScenarios'],
36
+ properties: {
37
+ ready: {
38
+ type: 'boolean',
39
+ description: 'true when the spec is complete enough to implement with no open questions',
40
+ },
41
+ questions: {
42
+ type: 'array',
43
+ description: 'ranked clarifying questions for the user; empty when ready=true',
44
+ items: {
45
+ type: 'object',
46
+ additionalProperties: false,
47
+ required: ['question', 'why', 'options'],
48
+ properties: {
49
+ question: { type: 'string' },
50
+ why: { type: 'string', description: 'what decision this unblocks / why it matters' },
51
+ options: {
52
+ type: 'array',
53
+ items: { type: 'string' },
54
+ description: 'plausible answers to offer the user (may be empty for free-form)',
55
+ },
56
+ },
57
+ },
58
+ },
59
+ gaps: {
60
+ type: 'array',
61
+ items: { type: 'string' },
62
+ description: 'requirements, edge cases, or constraints the draft omits',
63
+ },
64
+ missingScenarios: {
65
+ type: 'array',
66
+ items: { type: 'string' },
67
+ description: 'Given/When/Then scenarios that SHOULD exist but are absent',
68
+ },
69
+ },
70
+ }
71
+
72
+ phase('Research')
73
+ const research = await agent(
74
+ `Research context for authoring a rulebook task spec on: "${topic}".
75
+ Read-only. Gather:
76
+ 1. Existing specs under .rulebook/specs/ and any related task specs in .rulebook/tasks/*/specs/ that overlap this topic.
77
+ 2. The relevant source code, types, and conventions this spec will govern.
78
+ 3. The required rulebook spec format (read .rulebook/specs/RULEBOOK.md if present): ## ADDED/MODIFIED/REMOVED headers, "### Requirement: <name>" with SHALL/MUST, "#### Scenario:" with Given/When/Then.
79
+ Report a concise map: what already exists, what this spec must cover, conventions to follow, and obvious risks.`,
80
+ { label: 'research', phase: 'Research', agentType: 'researcher', model: 'haiku' }
81
+ )
82
+
83
+ phase('Draft')
84
+ const draft = await agent(
85
+ `Draft a complete rulebook task spec for: "${topic}".${answersBlock}
86
+
87
+ Ground every requirement in this codebase research:
88
+ """
89
+ ${research}
90
+ """
91
+
92
+ Produce two artifacts as markdown:
93
+ 1. proposal.md — a "## Why" section (≥20 chars, the motivation) and a "## What Changes" section.
94
+ 2. spec.md — using "## ADDED Requirements" (and MODIFIED/REMOVED if relevant), each as
95
+ "### Requirement: <Name>\\nThe system SHALL/MUST <...>" followed by one or more
96
+ "#### Scenario: <Name>" blocks with Given / When / Then lines (4 hashtags for scenarios).
97
+
98
+ Be specific and testable. Do NOT invent requirements the topic/research/answers don't support — mark anything uncertain so the critic can turn it into a question. Do NOT write production code.`,
99
+ { label: 'draft', phase: 'Draft', agentType: 'architect', model: 'opus' }
100
+ )
101
+
102
+ phase('Critique')
103
+ const critique = await agent(
104
+ `You are an exacting spec reviewer. Adversarially critique this draft spec for "${topic}" — your job is to find what is missing, ambiguous, or unverifiable so it does not reach implementation half-baked.
105
+
106
+ Draft:
107
+ """
108
+ ${draft}
109
+ """
110
+
111
+ Research context:
112
+ """
113
+ ${research}
114
+ """
115
+ ${answersBlock}
116
+
117
+ Identify:
118
+ - ranked clarifying QUESTIONS the user must answer (most decision-critical first); for each, say why it matters and offer plausible options.
119
+ - GAPS: requirements, constraints, error paths, or edge cases the draft omits.
120
+ - MISSING SCENARIOS: Given/When/Then cases that should exist but are absent.
121
+ Set ready=true ONLY if there are genuinely no open questions and the spec is implementation-ready.`,
122
+ { label: 'critique', phase: 'Critique', agentType: 'architect', model: 'opus', schema: CRITIQUE_SCHEMA }
123
+ )
124
+
125
+ return {
126
+ topic,
127
+ draft,
128
+ ready: !!(critique && critique.ready),
129
+ questions: (critique && critique.questions) || [],
130
+ gaps: (critique && critique.gaps) || [],
131
+ missingScenarios: (critique && critique.missingScenarios) || [],
132
+ answeredSoFar: priorAnswers.length,
133
+ }
@@ -1,49 +1,49 @@
1
- <!-- AIDER:START -->
2
- # Aider CLI Rules
3
-
4
- **Tool**: AI pair programming in terminal (`pip install aider-chat`)
5
-
6
- ## Quick Start
7
-
8
- ```bash
9
- # Always include AGENTS.md
10
- aider AGENTS.md src/feature.ts tests/feature.test.ts
11
-
12
- # In chat:
13
- "Follow AGENTS.md standards. Implement [feature] with tests first."
14
- ```
15
-
16
- ## Essential Commands
17
-
18
- ```bash
19
- /add file.ts # Add files to context
20
- /drop file.ts # Remove from context
21
- /run npm test # Run command
22
- /commit "message" # Commit changes
23
- /undo # Undo last change
24
- /diff # Review changes
25
- ```
26
-
27
- ## Configuration (.aider.conf.yml)
28
-
29
- ```yaml
30
- model: gpt-4
31
- read: [AGENTS.md]
32
- lint: true
33
- lint-cmd: "npm run lint"
34
- test-cmd: "npm test"
35
- auto-commits: true
36
- commit-prompt: true
37
- ```
38
-
39
- ## Workflow
40
-
41
- 1. Start session with `aider AGENTS.md [files]`
42
- 2. Request: "Follow AGENTS.md. Implement [feature] with tests first (95%+ coverage)"
43
- 3. Review diffs with `/diff`
44
- 4. Test with `/run npm test`
45
- 5. Commit with `/commit "feat: description"`
46
-
47
- **Critical**: Always reference AGENTS.md in your requests for consistent standards.
48
-
49
- <!-- AIDER:END -->
1
+ <!-- AIDER:START -->
2
+ # Aider CLI Rules
3
+
4
+ **Tool**: AI pair programming in terminal (`pip install aider-chat`)
5
+
6
+ ## Quick Start
7
+
8
+ ```bash
9
+ # Always include AGENTS.md
10
+ aider AGENTS.md src/feature.ts tests/feature.test.ts
11
+
12
+ # In chat:
13
+ "Follow AGENTS.md standards. Implement [feature] with tests first."
14
+ ```
15
+
16
+ ## Essential Commands
17
+
18
+ ```bash
19
+ /add file.ts # Add files to context
20
+ /drop file.ts # Remove from context
21
+ /run npm test # Run command
22
+ /commit "message" # Commit changes
23
+ /undo # Undo last change
24
+ /diff # Review changes
25
+ ```
26
+
27
+ ## Configuration (.aider.conf.yml)
28
+
29
+ ```yaml
30
+ model: gpt-4
31
+ read: [AGENTS.md]
32
+ lint: true
33
+ lint-cmd: "npm run lint"
34
+ test-cmd: "npm test"
35
+ auto-commits: true
36
+ commit-prompt: true
37
+ ```
38
+
39
+ ## Workflow
40
+
41
+ 1. Start session with `aider AGENTS.md [files]`
42
+ 2. Request: "Follow AGENTS.md. Implement [feature] with tests first (95%+ coverage)"
43
+ 3. Review diffs with `/diff`
44
+ 4. Test with `/run npm test`
45
+ 5. Commit with `/commit "feat: description"`
46
+
47
+ **Critical**: Always reference AGENTS.md in your requests for consistent standards.
48
+
49
+ <!-- AIDER:END -->
@@ -1,25 +1,25 @@
1
- <!-- AMAZON_Q:START -->
2
- # Amazon Q Developer Rules
3
-
4
- **Tool**: AWS-focused AI assistant with security scanning
5
-
6
- ## Quick Start
7
-
8
- Available in AWS IDE Toolkit or via AWS Console.
9
-
10
- ## Usage
11
-
12
- ```
13
- "Follow @AGENTS.md standards. Implement [feature] with tests (95%+ coverage)."
14
- ```
15
-
16
- ## Workflow
17
-
18
- 1. Reference AGENTS.md in prompts
19
- 2. Leverage Q's security scanning for vulnerabilities
20
- 3. Review generated code
21
- 4. Run quality checks
22
-
23
- **Critical**: Q excels at AWS/security - combine with AGENTS.md standards.
24
-
25
- <!-- AMAZON_Q:END -->
1
+ <!-- AMAZON_Q:START -->
2
+ # Amazon Q Developer Rules
3
+
4
+ **Tool**: AWS-focused AI assistant with security scanning
5
+
6
+ ## Quick Start
7
+
8
+ Available in AWS IDE Toolkit or via AWS Console.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ "Follow @AGENTS.md standards. Implement [feature] with tests (95%+ coverage)."
14
+ ```
15
+
16
+ ## Workflow
17
+
18
+ 1. Reference AGENTS.md in prompts
19
+ 2. Leverage Q's security scanning for vulnerabilities
20
+ 3. Review generated code
21
+ 4. Run quality checks
22
+
23
+ **Critical**: Q excels at AWS/security - combine with AGENTS.md standards.
24
+
25
+ <!-- AMAZON_Q:END -->