@zigrivers/scaffold 3.27.0 → 3.29.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 (698) hide show
  1. package/README.md +5 -1
  2. package/content/guides/.gitkeep +0 -0
  3. package/content/guides/index.html +1188 -0
  4. package/content/guides/mmr/.diagrams/diagram-0.svg +1 -0
  5. package/content/guides/mmr/.diagrams/manifest.json +3 -0
  6. package/content/guides/mmr/index.html +1728 -0
  7. package/content/guides/mmr/index.md +403 -0
  8. package/content/knowledge/VERSION +1 -0
  9. package/content/knowledge/backend/backend-api-design.md +8 -0
  10. package/content/knowledge/backend/backend-architecture.md +8 -0
  11. package/content/knowledge/backend/backend-async-patterns.md +7 -0
  12. package/content/knowledge/backend/backend-auth-patterns.md +9 -0
  13. package/content/knowledge/backend/backend-conventions.md +6 -0
  14. package/content/knowledge/backend/backend-data-modeling.md +7 -0
  15. package/content/knowledge/backend/backend-deployment.md +8 -0
  16. package/content/knowledge/backend/backend-dev-environment.md +5 -0
  17. package/content/knowledge/backend/backend-fintech-broker-integration.md +6 -0
  18. package/content/knowledge/backend/backend-fintech-compliance.md +10 -2
  19. package/content/knowledge/backend/backend-fintech-data-modeling.md +6 -0
  20. package/content/knowledge/backend/backend-fintech-ledger.md +6 -0
  21. package/content/knowledge/backend/backend-fintech-observability.md +6 -0
  22. package/content/knowledge/backend/backend-fintech-order-lifecycle.md +6 -0
  23. package/content/knowledge/backend/backend-fintech-risk-management.md +6 -0
  24. package/content/knowledge/backend/backend-fintech-testing.md +6 -0
  25. package/content/knowledge/backend/backend-observability.md +7 -0
  26. package/content/knowledge/backend/backend-project-structure.md +6 -0
  27. package/content/knowledge/backend/backend-requirements.md +6 -0
  28. package/content/knowledge/backend/backend-security.md +7 -0
  29. package/content/knowledge/backend/backend-testing.md +7 -0
  30. package/content/knowledge/backend/backend-worker-patterns.md +6 -0
  31. package/content/knowledge/browser-extension/browser-extension-architecture.md +6 -0
  32. package/content/knowledge/browser-extension/browser-extension-content-scripts.md +6 -0
  33. package/content/knowledge/browser-extension/browser-extension-conventions.md +6 -0
  34. package/content/knowledge/browser-extension/browser-extension-cross-browser.md +6 -0
  35. package/content/knowledge/browser-extension/browser-extension-dev-environment.md +6 -0
  36. package/content/knowledge/browser-extension/browser-extension-manifest.md +6 -0
  37. package/content/knowledge/browser-extension/browser-extension-project-structure.md +6 -0
  38. package/content/knowledge/browser-extension/browser-extension-requirements.md +6 -0
  39. package/content/knowledge/browser-extension/browser-extension-security.md +7 -0
  40. package/content/knowledge/browser-extension/browser-extension-service-workers.md +6 -0
  41. package/content/knowledge/browser-extension/browser-extension-store-submission.md +6 -0
  42. package/content/knowledge/browser-extension/browser-extension-testing.md +6 -0
  43. package/content/knowledge/cli/cli-architecture.md +4 -0
  44. package/content/knowledge/cli/cli-conventions.md +4 -0
  45. package/content/knowledge/cli/cli-dev-environment.md +5 -0
  46. package/content/knowledge/cli/cli-distribution-patterns.md +5 -0
  47. package/content/knowledge/cli/cli-interactivity-patterns.md +4 -0
  48. package/content/knowledge/cli/cli-output-patterns.md +4 -0
  49. package/content/knowledge/cli/cli-project-structure.md +4 -0
  50. package/content/knowledge/cli/cli-requirements.md +4 -0
  51. package/content/knowledge/cli/cli-shell-integration.md +4 -0
  52. package/content/knowledge/cli/cli-testing.md +4 -0
  53. package/content/knowledge/core/adr-craft.md +8 -0
  54. package/content/knowledge/core/ai-memory-management.md +23 -0
  55. package/content/knowledge/core/api-design.md +6 -0
  56. package/content/knowledge/core/automated-review-tooling.md +8 -0
  57. package/content/knowledge/core/claude-md-patterns.md +10 -2
  58. package/content/knowledge/core/coding-conventions.md +10 -2
  59. package/content/knowledge/core/database-design.md +8 -0
  60. package/content/knowledge/core/design-system-tokens.md +8 -0
  61. package/content/knowledge/core/dev-environment.md +4 -0
  62. package/content/knowledge/core/domain-modeling.md +6 -0
  63. package/content/knowledge/core/eval-craft.md +6 -0
  64. package/content/knowledge/core/git-workflow-patterns.md +8 -0
  65. package/content/knowledge/core/multi-model-research-dispatch.md +6 -0
  66. package/content/knowledge/core/multi-model-review-dispatch.md +6 -0
  67. package/content/knowledge/core/multi-service-api-contracts.md +5 -0
  68. package/content/knowledge/core/multi-service-architecture.md +5 -0
  69. package/content/knowledge/core/multi-service-auth.md +6 -0
  70. package/content/knowledge/core/multi-service-data-ownership.md +8 -0
  71. package/content/knowledge/core/multi-service-observability.md +8 -0
  72. package/content/knowledge/core/multi-service-resilience.md +5 -0
  73. package/content/knowledge/core/multi-service-task-decomposition.md +8 -0
  74. package/content/knowledge/core/multi-service-testing.md +5 -0
  75. package/content/knowledge/core/operations-runbook.md +8 -0
  76. package/content/knowledge/core/project-structure-patterns.md +4 -0
  77. package/content/knowledge/core/review-step-template.md +4 -0
  78. package/content/knowledge/core/security-best-practices.md +6 -0
  79. package/content/knowledge/core/system-architecture.md +6 -0
  80. package/content/knowledge/core/task-decomposition.md +9 -4
  81. package/content/knowledge/core/task-tracking.md +128 -29
  82. package/content/knowledge/core/tech-stack-selection.md +8 -0
  83. package/content/knowledge/core/test-skeleton-generation.md +4 -0
  84. package/content/knowledge/core/testing-strategy.md +8 -0
  85. package/content/knowledge/core/user-stories.md +9 -1
  86. package/content/knowledge/core/user-story-innovation.md +4 -0
  87. package/content/knowledge/core/ux-specification.md +5 -0
  88. package/content/knowledge/data-pipeline/data-pipeline-architecture.md +5 -0
  89. package/content/knowledge/data-pipeline/data-pipeline-batch-patterns.md +4 -0
  90. package/content/knowledge/data-pipeline/data-pipeline-conventions.md +4 -0
  91. package/content/knowledge/data-pipeline/data-pipeline-dev-environment.md +4 -0
  92. package/content/knowledge/data-pipeline/data-pipeline-orchestration.md +4 -0
  93. package/content/knowledge/data-pipeline/data-pipeline-project-structure.md +4 -0
  94. package/content/knowledge/data-pipeline/data-pipeline-quality.md +4 -0
  95. package/content/knowledge/data-pipeline/data-pipeline-requirements.md +4 -0
  96. package/content/knowledge/data-pipeline/data-pipeline-schema-management.md +4 -0
  97. package/content/knowledge/data-pipeline/data-pipeline-security.md +4 -0
  98. package/content/knowledge/data-pipeline/data-pipeline-streaming-patterns.md +4 -0
  99. package/content/knowledge/data-pipeline/data-pipeline-testing.md +4 -0
  100. package/content/knowledge/data-science/data-science-architecture.md +5 -0
  101. package/content/knowledge/data-science/data-science-conventions.md +6 -0
  102. package/content/knowledge/data-science/data-science-data-versioning.md +6 -0
  103. package/content/knowledge/data-science/data-science-dev-environment.md +6 -0
  104. package/content/knowledge/data-science/data-science-experiment-tracking.md +8 -0
  105. package/content/knowledge/data-science/data-science-model-evaluation.md +5 -0
  106. package/content/knowledge/data-science/data-science-notebook-discipline.md +5 -0
  107. package/content/knowledge/data-science/data-science-observability.md +6 -0
  108. package/content/knowledge/data-science/data-science-project-structure.md +5 -0
  109. package/content/knowledge/data-science/data-science-reproducibility.md +8 -0
  110. package/content/knowledge/data-science/data-science-requirements.md +5 -0
  111. package/content/knowledge/data-science/data-science-security.md +8 -0
  112. package/content/knowledge/data-science/data-science-testing.md +5 -0
  113. package/content/knowledge/execution/enhancement-workflow.md +4 -0
  114. package/content/knowledge/execution/multi-agent-coordination.md +129 -0
  115. package/content/knowledge/execution/task-claiming-strategy.md +19 -3
  116. package/content/knowledge/execution/tdd-execution-loop.md +5 -0
  117. package/content/knowledge/execution/worktree-management.md +10 -3
  118. package/content/knowledge/finalization/apply-fixes-and-freeze.md +4 -0
  119. package/content/knowledge/finalization/developer-onboarding.md +4 -0
  120. package/content/knowledge/finalization/implementation-playbook.md +4 -0
  121. package/content/knowledge/game/game-accessibility.md +4 -0
  122. package/content/knowledge/game/game-ai-patterns.md +4 -0
  123. package/content/knowledge/game/game-asset-pipeline.md +4 -0
  124. package/content/knowledge/game/game-audio-design.md +4 -0
  125. package/content/knowledge/game/game-binary-vcs-strategy.md +5 -0
  126. package/content/knowledge/game/game-design-document.md +4 -0
  127. package/content/knowledge/game/game-domain-patterns.md +4 -0
  128. package/content/knowledge/game/game-economy-design.md +4 -0
  129. package/content/knowledge/game/game-engine-selection.md +4 -0
  130. package/content/knowledge/game/game-ideation.md +4 -0
  131. package/content/knowledge/game/game-input-systems.md +4 -0
  132. package/content/knowledge/game/game-level-content-design.md +4 -0
  133. package/content/knowledge/game/game-liveops-analytics.md +4 -0
  134. package/content/knowledge/game/game-localization.md +4 -0
  135. package/content/knowledge/game/game-milestone-definitions.md +4 -0
  136. package/content/knowledge/game/game-modding-ugc.md +4 -0
  137. package/content/knowledge/game/game-narrative-design.md +4 -0
  138. package/content/knowledge/game/game-networking.md +4 -0
  139. package/content/knowledge/game/game-performance-budgeting.md +4 -0
  140. package/content/knowledge/game/game-platform-certification.md +6 -0
  141. package/content/knowledge/game/game-project-structure.md +4 -0
  142. package/content/knowledge/game/game-save-systems.md +4 -0
  143. package/content/knowledge/game/game-testing-strategy.md +4 -0
  144. package/content/knowledge/game/game-ui-patterns.md +4 -0
  145. package/content/knowledge/game/game-vr-ar-design.md +6 -0
  146. package/content/knowledge/library/library-api-design.md +4 -0
  147. package/content/knowledge/library/library-architecture.md +4 -0
  148. package/content/knowledge/library/library-bundling.md +4 -0
  149. package/content/knowledge/library/library-conventions.md +5 -0
  150. package/content/knowledge/library/library-dev-environment.md +4 -0
  151. package/content/knowledge/library/library-documentation.md +4 -0
  152. package/content/knowledge/library/library-project-structure.md +4 -0
  153. package/content/knowledge/library/library-requirements.md +4 -0
  154. package/content/knowledge/library/library-security.md +4 -0
  155. package/content/knowledge/library/library-testing.md +4 -0
  156. package/content/knowledge/library/library-type-definitions.md +4 -0
  157. package/content/knowledge/library/library-versioning.md +5 -0
  158. package/content/knowledge/ml/ml-architecture.md +4 -0
  159. package/content/knowledge/ml/ml-conventions.md +4 -0
  160. package/content/knowledge/ml/ml-dev-environment.md +4 -0
  161. package/content/knowledge/ml/ml-experiment-tracking.md +6 -0
  162. package/content/knowledge/ml/ml-model-evaluation.md +4 -0
  163. package/content/knowledge/ml/ml-observability.md +5 -0
  164. package/content/knowledge/ml/ml-project-structure.md +4 -0
  165. package/content/knowledge/ml/ml-requirements.md +4 -0
  166. package/content/knowledge/ml/ml-security.md +5 -0
  167. package/content/knowledge/ml/ml-serving-patterns.md +4 -0
  168. package/content/knowledge/ml/ml-testing.md +4 -0
  169. package/content/knowledge/ml/ml-training-patterns.md +4 -0
  170. package/content/knowledge/mobile-app/mobile-app-architecture.md +6 -0
  171. package/content/knowledge/mobile-app/mobile-app-conventions.md +6 -0
  172. package/content/knowledge/mobile-app/mobile-app-deployment.md +6 -0
  173. package/content/knowledge/mobile-app/mobile-app-dev-environment.md +6 -0
  174. package/content/knowledge/mobile-app/mobile-app-distribution.md +6 -0
  175. package/content/knowledge/mobile-app/mobile-app-observability.md +7 -0
  176. package/content/knowledge/mobile-app/mobile-app-offline-patterns.md +7 -0
  177. package/content/knowledge/mobile-app/mobile-app-project-structure.md +6 -0
  178. package/content/knowledge/mobile-app/mobile-app-push-notifications.md +6 -0
  179. package/content/knowledge/mobile-app/mobile-app-requirements.md +7 -0
  180. package/content/knowledge/mobile-app/mobile-app-security.md +8 -0
  181. package/content/knowledge/mobile-app/mobile-app-testing.md +6 -0
  182. package/content/knowledge/product/gap-analysis.md +4 -0
  183. package/content/knowledge/product/ideation-craft.md +4 -0
  184. package/content/knowledge/product/prd-craft.md +4 -0
  185. package/content/knowledge/product/prd-innovation.md +4 -0
  186. package/content/knowledge/product/vision-craft.md +4 -0
  187. package/content/knowledge/product/vision-innovation.md +4 -0
  188. package/content/knowledge/research/research-architecture.md +4 -0
  189. package/content/knowledge/research/research-conventions.md +6 -0
  190. package/content/knowledge/research/research-dev-environment.md +6 -0
  191. package/content/knowledge/research/research-experiment-loop.md +4 -0
  192. package/content/knowledge/research/research-experiment-tracking.md +6 -0
  193. package/content/knowledge/research/research-ml-architecture-search.md +4 -0
  194. package/content/knowledge/research/research-ml-evaluation.md +4 -0
  195. package/content/knowledge/research/research-ml-experiment-tracking.md +6 -0
  196. package/content/knowledge/research/research-ml-training-patterns.md +4 -0
  197. package/content/knowledge/research/research-observability.md +5 -0
  198. package/content/knowledge/research/research-overfitting-prevention.md +5 -0
  199. package/content/knowledge/research/research-project-structure.md +5 -0
  200. package/content/knowledge/research/research-quant-backtesting.md +4 -0
  201. package/content/knowledge/research/research-quant-market-data.md +4 -0
  202. package/content/knowledge/research/research-quant-metrics.md +4 -0
  203. package/content/knowledge/research/research-quant-requirements.md +4 -0
  204. package/content/knowledge/research/research-quant-risk.md +4 -0
  205. package/content/knowledge/research/research-quant-strategy-patterns.md +4 -0
  206. package/content/knowledge/research/research-requirements.md +5 -0
  207. package/content/knowledge/research/research-security.md +5 -0
  208. package/content/knowledge/research/research-sim-compute-management.md +4 -0
  209. package/content/knowledge/research/research-sim-engine-patterns.md +4 -0
  210. package/content/knowledge/research/research-sim-parameter-spaces.md +4 -0
  211. package/content/knowledge/research/research-sim-validation.md +4 -0
  212. package/content/knowledge/research/research-testing.md +5 -0
  213. package/content/knowledge/review/review-adr.md +6 -0
  214. package/content/knowledge/review/review-api-design.md +6 -0
  215. package/content/knowledge/review/review-art-bible.md +4 -0
  216. package/content/knowledge/review/review-database-design.md +5 -0
  217. package/content/knowledge/review/review-domain-modeling.md +5 -0
  218. package/content/knowledge/review/review-game-design.md +4 -0
  219. package/content/knowledge/review/review-game-economy.md +4 -0
  220. package/content/knowledge/review/review-game-ui.md +5 -0
  221. package/content/knowledge/review/review-implementation-tasks.md +5 -0
  222. package/content/knowledge/review/review-methodology.md +4 -0
  223. package/content/knowledge/review/review-netcode.md +4 -0
  224. package/content/knowledge/review/review-operations.md +6 -0
  225. package/content/knowledge/review/review-platform-cert.md +4 -0
  226. package/content/knowledge/review/review-prd.md +4 -0
  227. package/content/knowledge/review/review-security.md +7 -0
  228. package/content/knowledge/review/review-system-architecture.md +6 -0
  229. package/content/knowledge/review/review-testing-strategy.md +6 -0
  230. package/content/knowledge/review/review-user-stories.md +5 -0
  231. package/content/knowledge/review/review-ux-specification.md +6 -0
  232. package/content/knowledge/review/review-vision.md +4 -0
  233. package/content/knowledge/tools/post-implementation-review-methodology.md +4 -0
  234. package/content/knowledge/tools/release-management.md +5 -0
  235. package/content/knowledge/tools/session-analysis.md +4 -0
  236. package/content/knowledge/tools/version-strategy.md +4 -0
  237. package/content/knowledge/validation/critical-path-analysis.md +4 -0
  238. package/content/knowledge/validation/cross-phase-consistency.md +4 -0
  239. package/content/knowledge/validation/decision-completeness.md +5 -0
  240. package/content/knowledge/validation/dependency-validation.md +4 -0
  241. package/content/knowledge/validation/implementability-review.md +4 -0
  242. package/content/knowledge/validation/scope-management.md +4 -0
  243. package/content/knowledge/validation/traceability.md +4 -0
  244. package/content/knowledge/web-app/web-app-api-patterns.md +6 -0
  245. package/content/knowledge/web-app/web-app-architecture.md +6 -0
  246. package/content/knowledge/web-app/web-app-auth-patterns.md +9 -0
  247. package/content/knowledge/web-app/web-app-conventions.md +5 -0
  248. package/content/knowledge/web-app/web-app-data-patterns.md +6 -0
  249. package/content/knowledge/web-app/web-app-deployment-workflow.md +6 -0
  250. package/content/knowledge/web-app/web-app-deployment.md +6 -0
  251. package/content/knowledge/web-app/web-app-design-system.md +6 -0
  252. package/content/knowledge/web-app/web-app-dev-environment.md +6 -0
  253. package/content/knowledge/web-app/web-app-observability.md +6 -0
  254. package/content/knowledge/web-app/web-app-project-structure.md +5 -0
  255. package/content/knowledge/web-app/web-app-rendering-strategies.md +6 -0
  256. package/content/knowledge/web-app/web-app-requirements.md +6 -0
  257. package/content/knowledge/web-app/web-app-security.md +8 -0
  258. package/content/knowledge/web-app/web-app-session-patterns.md +7 -0
  259. package/content/knowledge/web-app/web-app-testing.md +6 -0
  260. package/content/knowledge/web-app/web-app-ux-patterns.md +6 -0
  261. package/content/knowledge/web3/web3-access-control.md +8 -0
  262. package/content/knowledge/web3/web3-architecture.md +7 -0
  263. package/content/knowledge/web3/web3-audit-workflow.md +7 -0
  264. package/content/knowledge/web3/web3-common-vulnerabilities.md +8 -0
  265. package/content/knowledge/web3/web3-conventions.md +6 -0
  266. package/content/knowledge/web3/web3-deployment-and-verification.md +7 -0
  267. package/content/knowledge/web3/web3-dev-environment.md +6 -0
  268. package/content/knowledge/web3/web3-gas-optimization.md +7 -0
  269. package/content/knowledge/web3/web3-oracles-and-external-data.md +7 -0
  270. package/content/knowledge/web3/web3-project-structure.md +6 -0
  271. package/content/knowledge/web3/web3-requirements.md +6 -0
  272. package/content/knowledge/web3/web3-security.md +8 -0
  273. package/content/knowledge/web3/web3-testing.md +6 -0
  274. package/content/knowledge/web3/web3-upgradeability.md +7 -0
  275. package/content/pipeline/build/multi-agent-resume.md +27 -7
  276. package/content/pipeline/build/multi-agent-start.md +35 -7
  277. package/content/pipeline/build/new-enhancement.md +8 -1
  278. package/content/pipeline/build/quick-task.md +9 -0
  279. package/content/pipeline/build/single-agent-resume.md +11 -4
  280. package/content/pipeline/build/single-agent-start.md +13 -4
  281. package/content/pipeline/consolidation/workflow-audit.md +1 -1
  282. package/content/pipeline/environment/git-workflow.md +2 -2
  283. package/content/pipeline/foundation/beads.md +148 -22
  284. package/content/pipeline/foundation/coding-standards.md +1 -1
  285. package/content/tools/knowledge-audit-entry.md +79 -0
  286. package/content/tools/post-implementation-review.md +6 -6
  287. package/content/tools/prompt-pipeline.md +1 -1
  288. package/content/tools/release.md +5 -5
  289. package/content/tools/review-code.md +388 -17
  290. package/content/tools/review-pr.md +381 -21
  291. package/content/tools/version-bump.md +5 -5
  292. package/dist/cli/commands/dashboard.d.ts +1 -1
  293. package/dist/cli/commands/dashboard.d.ts.map +1 -1
  294. package/dist/cli/commands/dashboard.js +10 -10
  295. package/dist/cli/commands/dashboard.js.map +1 -1
  296. package/dist/cli/commands/dashboard.test.js +1 -1
  297. package/dist/cli/commands/dashboard.test.js.map +1 -1
  298. package/dist/cli/commands/guides.d.ts +24 -0
  299. package/dist/cli/commands/guides.d.ts.map +1 -0
  300. package/dist/cli/commands/guides.js +103 -0
  301. package/dist/cli/commands/guides.js.map +1 -0
  302. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts +9 -0
  303. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts.map +1 -0
  304. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js +112 -0
  305. package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js.map +1 -0
  306. package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts +8 -0
  307. package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts.map +1 -0
  308. package/dist/cli/commands/knowledge-freshness-audit-apply.js +96 -0
  309. package/dist/cli/commands/knowledge-freshness-audit-apply.js.map +1 -0
  310. package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts +7 -0
  311. package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts.map +1 -0
  312. package/dist/cli/commands/knowledge-freshness-audit-prefilter.js +42 -0
  313. package/dist/cli/commands/knowledge-freshness-audit-prefilter.js.map +1 -0
  314. package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts +9 -0
  315. package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts.map +1 -0
  316. package/dist/cli/commands/knowledge-freshness-audit-run-entry.js +63 -0
  317. package/dist/cli/commands/knowledge-freshness-audit-run-entry.js.map +1 -0
  318. package/dist/cli/commands/knowledge-freshness-bump-version.d.ts +8 -0
  319. package/dist/cli/commands/knowledge-freshness-bump-version.d.ts.map +1 -0
  320. package/dist/cli/commands/knowledge-freshness-bump-version.js +34 -0
  321. package/dist/cli/commands/knowledge-freshness-bump-version.js.map +1 -0
  322. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts +7 -0
  323. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts.map +1 -0
  324. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js +51 -0
  325. package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js.map +1 -0
  326. package/dist/cli/commands/knowledge-freshness-link-check.d.ts +7 -0
  327. package/dist/cli/commands/knowledge-freshness-link-check.d.ts.map +1 -0
  328. package/dist/cli/commands/knowledge-freshness-link-check.js +57 -0
  329. package/dist/cli/commands/knowledge-freshness-link-check.js.map +1 -0
  330. package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts +8 -0
  331. package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts.map +1 -0
  332. package/dist/cli/commands/knowledge-freshness-lint-unsourced.js +58 -0
  333. package/dist/cli/commands/knowledge-freshness-lint-unsourced.js.map +1 -0
  334. package/dist/cli/commands/knowledge-freshness.d.ts +4 -0
  335. package/dist/cli/commands/knowledge-freshness.d.ts.map +1 -0
  336. package/dist/cli/commands/knowledge-freshness.js +25 -0
  337. package/dist/cli/commands/knowledge-freshness.js.map +1 -0
  338. package/dist/cli/commands/observe.d.ts +6 -0
  339. package/dist/cli/commands/observe.d.ts.map +1 -1
  340. package/dist/cli/commands/observe.js +22 -1
  341. package/dist/cli/commands/observe.js.map +1 -1
  342. package/dist/cli/commands/observe.test.js +82 -0
  343. package/dist/cli/commands/observe.test.js.map +1 -1
  344. package/dist/cli/commands/validate-knowledge.d.ts +4 -0
  345. package/dist/cli/commands/validate-knowledge.d.ts.map +1 -0
  346. package/dist/cli/commands/validate-knowledge.js +32 -0
  347. package/dist/cli/commands/validate-knowledge.js.map +1 -0
  348. package/dist/cli/index.d.ts.map +1 -1
  349. package/dist/cli/index.js +6 -0
  350. package/dist/cli/index.js.map +1 -1
  351. package/dist/core/adapters/claude-code.d.ts.map +1 -1
  352. package/dist/core/adapters/claude-code.js +6 -3
  353. package/dist/core/adapters/claude-code.js.map +1 -1
  354. package/dist/core/adapters/claude-code.test.js +45 -1
  355. package/dist/core/adapters/claude-code.test.js.map +1 -1
  356. package/dist/core/assembly/engine.d.ts.map +1 -1
  357. package/dist/core/assembly/engine.js +7 -3
  358. package/dist/core/assembly/engine.js.map +1 -1
  359. package/dist/core/assembly/engine.test.js +45 -1
  360. package/dist/core/assembly/engine.test.js.map +1 -1
  361. package/dist/core/assembly/gap-signal-tail.d.ts +18 -0
  362. package/dist/core/assembly/gap-signal-tail.d.ts.map +1 -0
  363. package/dist/core/assembly/gap-signal-tail.js +43 -0
  364. package/dist/core/assembly/gap-signal-tail.js.map +1 -0
  365. package/dist/core/assembly/gap-signal-tail.test.d.ts +2 -0
  366. package/dist/core/assembly/gap-signal-tail.test.d.ts.map +1 -0
  367. package/dist/core/assembly/gap-signal-tail.test.js +49 -0
  368. package/dist/core/assembly/gap-signal-tail.test.js.map +1 -0
  369. package/dist/core/assembly/knowledge-loader.d.ts +11 -0
  370. package/dist/core/assembly/knowledge-loader.d.ts.map +1 -1
  371. package/dist/core/assembly/knowledge-loader.js +54 -1
  372. package/dist/core/assembly/knowledge-loader.js.map +1 -1
  373. package/dist/core/assembly/knowledge-loader.test.js +73 -0
  374. package/dist/core/assembly/knowledge-loader.test.js.map +1 -1
  375. package/dist/guides/build.d.ts +12 -0
  376. package/dist/guides/build.d.ts.map +1 -0
  377. package/dist/guides/build.js +50 -0
  378. package/dist/guides/build.js.map +1 -0
  379. package/dist/guides/build.test.d.ts +2 -0
  380. package/dist/guides/build.test.d.ts.map +1 -0
  381. package/dist/guides/build.test.js +74 -0
  382. package/dist/guides/build.test.js.map +1 -0
  383. package/dist/guides/chrome.d.ts +24 -0
  384. package/dist/guides/chrome.d.ts.map +1 -0
  385. package/dist/guides/chrome.js +118 -0
  386. package/dist/guides/chrome.js.map +1 -0
  387. package/dist/guides/cli-guides.test.d.ts +2 -0
  388. package/dist/guides/cli-guides.test.d.ts.map +1 -0
  389. package/dist/guides/cli-guides.test.js +41 -0
  390. package/dist/guides/cli-guides.test.js.map +1 -0
  391. package/dist/guides/dashboard-theme.css +1073 -0
  392. package/dist/guides/directives-callout.test.d.ts +2 -0
  393. package/dist/guides/directives-callout.test.d.ts.map +1 -0
  394. package/dist/guides/directives-callout.test.js +22 -0
  395. package/dist/guides/directives-callout.test.js.map +1 -0
  396. package/dist/guides/directives-chart.test.d.ts +2 -0
  397. package/dist/guides/directives-chart.test.d.ts.map +1 -0
  398. package/dist/guides/directives-chart.test.js +25 -0
  399. package/dist/guides/directives-chart.test.js.map +1 -0
  400. package/dist/guides/directives-filter-table.test.d.ts +2 -0
  401. package/dist/guides/directives-filter-table.test.d.ts.map +1 -0
  402. package/dist/guides/directives-filter-table.test.js +22 -0
  403. package/dist/guides/directives-filter-table.test.js.map +1 -0
  404. package/dist/guides/directives-sev.test.d.ts +2 -0
  405. package/dist/guides/directives-sev.test.d.ts.map +1 -0
  406. package/dist/guides/directives-sev.test.js +15 -0
  407. package/dist/guides/directives-sev.test.js.map +1 -0
  408. package/dist/guides/directives-tabs.test.d.ts +2 -0
  409. package/dist/guides/directives-tabs.test.d.ts.map +1 -0
  410. package/dist/guides/directives-tabs.test.js +52 -0
  411. package/dist/guides/directives-tabs.test.js.map +1 -0
  412. package/dist/guides/directives.d.ts +7 -0
  413. package/dist/guides/directives.d.ts.map +1 -0
  414. package/dist/guides/directives.js +158 -0
  415. package/dist/guides/directives.js.map +1 -0
  416. package/dist/guides/fs-guides.test.d.ts +2 -0
  417. package/dist/guides/fs-guides.test.d.ts.map +1 -0
  418. package/dist/guides/fs-guides.test.js +14 -0
  419. package/dist/guides/fs-guides.test.js.map +1 -0
  420. package/dist/guides/index-page.d.ts +3 -0
  421. package/dist/guides/index-page.d.ts.map +1 -0
  422. package/dist/guides/index-page.js +14 -0
  423. package/dist/guides/index-page.js.map +1 -0
  424. package/dist/guides/lint.d.ts +6 -0
  425. package/dist/guides/lint.d.ts.map +1 -0
  426. package/dist/guides/lint.js +27 -0
  427. package/dist/guides/lint.js.map +1 -0
  428. package/dist/guides/lint.test.d.ts +2 -0
  429. package/dist/guides/lint.test.d.ts.map +1 -0
  430. package/dist/guides/lint.test.js +24 -0
  431. package/dist/guides/lint.test.js.map +1 -0
  432. package/dist/guides/loader.d.ts +4 -0
  433. package/dist/guides/loader.d.ts.map +1 -0
  434. package/dist/guides/loader.js +63 -0
  435. package/dist/guides/loader.js.map +1 -0
  436. package/dist/guides/loader.test.d.ts +2 -0
  437. package/dist/guides/loader.test.d.ts.map +1 -0
  438. package/dist/guides/loader.test.js +85 -0
  439. package/dist/guides/loader.test.js.map +1 -0
  440. package/dist/guides/mermaid-sanitize.test.d.ts +2 -0
  441. package/dist/guides/mermaid-sanitize.test.d.ts.map +1 -0
  442. package/dist/guides/mermaid-sanitize.test.js +57 -0
  443. package/dist/guides/mermaid-sanitize.test.js.map +1 -0
  444. package/dist/guides/mermaid.d.ts +18 -0
  445. package/dist/guides/mermaid.d.ts.map +1 -0
  446. package/dist/guides/mermaid.js +137 -0
  447. package/dist/guides/mermaid.js.map +1 -0
  448. package/dist/guides/mermaid.test.d.ts +2 -0
  449. package/dist/guides/mermaid.test.d.ts.map +1 -0
  450. package/dist/guides/mermaid.test.js +105 -0
  451. package/dist/guides/mermaid.test.js.map +1 -0
  452. package/dist/guides/render.d.ts +12 -0
  453. package/dist/guides/render.d.ts.map +1 -0
  454. package/dist/guides/render.js +58 -0
  455. package/dist/guides/render.js.map +1 -0
  456. package/dist/guides/render.test.d.ts +2 -0
  457. package/dist/guides/render.test.d.ts.map +1 -0
  458. package/dist/guides/render.test.js +46 -0
  459. package/dist/guides/render.test.js.map +1 -0
  460. package/dist/guides/sanitize.d.ts +3 -0
  461. package/dist/guides/sanitize.d.ts.map +1 -0
  462. package/dist/guides/sanitize.js +76 -0
  463. package/dist/guides/sanitize.js.map +1 -0
  464. package/dist/guides/sanitize.test.d.ts +2 -0
  465. package/dist/guides/sanitize.test.d.ts.map +1 -0
  466. package/dist/guides/sanitize.test.js +45 -0
  467. package/dist/guides/sanitize.test.js.map +1 -0
  468. package/dist/guides/template.d.ts +11 -0
  469. package/dist/guides/template.d.ts.map +1 -0
  470. package/dist/guides/template.js +38 -0
  471. package/dist/guides/template.js.map +1 -0
  472. package/dist/guides/template.test.d.ts +2 -0
  473. package/dist/guides/template.test.d.ts.map +1 -0
  474. package/dist/guides/template.test.js +41 -0
  475. package/dist/guides/template.test.js.map +1 -0
  476. package/dist/guides/types.d.ts +20 -0
  477. package/dist/guides/types.d.ts.map +1 -0
  478. package/dist/guides/types.js +2 -0
  479. package/dist/guides/types.js.map +1 -0
  480. package/dist/knowledge-freshness/audit-apply-pr.d.ts +64 -0
  481. package/dist/knowledge-freshness/audit-apply-pr.d.ts.map +1 -0
  482. package/dist/knowledge-freshness/audit-apply-pr.js +309 -0
  483. package/dist/knowledge-freshness/audit-apply-pr.js.map +1 -0
  484. package/dist/knowledge-freshness/audit-apply-pr.test.d.ts +2 -0
  485. package/dist/knowledge-freshness/audit-apply-pr.test.d.ts.map +1 -0
  486. package/dist/knowledge-freshness/audit-apply-pr.test.js +211 -0
  487. package/dist/knowledge-freshness/audit-apply-pr.test.js.map +1 -0
  488. package/dist/knowledge-freshness/audit-apply.d.ts +16 -0
  489. package/dist/knowledge-freshness/audit-apply.d.ts.map +1 -0
  490. package/dist/knowledge-freshness/audit-apply.js +193 -0
  491. package/dist/knowledge-freshness/audit-apply.js.map +1 -0
  492. package/dist/knowledge-freshness/audit-apply.test.d.ts +2 -0
  493. package/dist/knowledge-freshness/audit-apply.test.d.ts.map +1 -0
  494. package/dist/knowledge-freshness/audit-apply.test.js +482 -0
  495. package/dist/knowledge-freshness/audit-apply.test.js.map +1 -0
  496. package/dist/knowledge-freshness/audit-prefilter.d.ts +12 -0
  497. package/dist/knowledge-freshness/audit-prefilter.d.ts.map +1 -0
  498. package/dist/knowledge-freshness/audit-prefilter.js +74 -0
  499. package/dist/knowledge-freshness/audit-prefilter.js.map +1 -0
  500. package/dist/knowledge-freshness/audit-prefilter.test.d.ts +2 -0
  501. package/dist/knowledge-freshness/audit-prefilter.test.d.ts.map +1 -0
  502. package/dist/knowledge-freshness/audit-prefilter.test.js +78 -0
  503. package/dist/knowledge-freshness/audit-prefilter.test.js.map +1 -0
  504. package/dist/knowledge-freshness/audit-runner.d.ts +135 -0
  505. package/dist/knowledge-freshness/audit-runner.d.ts.map +1 -0
  506. package/dist/knowledge-freshness/audit-runner.js +168 -0
  507. package/dist/knowledge-freshness/audit-runner.js.map +1 -0
  508. package/dist/knowledge-freshness/audit-runner.test.d.ts +2 -0
  509. package/dist/knowledge-freshness/audit-runner.test.d.ts.map +1 -0
  510. package/dist/knowledge-freshness/audit-runner.test.js +130 -0
  511. package/dist/knowledge-freshness/audit-runner.test.js.map +1 -0
  512. package/dist/knowledge-freshness/bump-version.d.ts +24 -0
  513. package/dist/knowledge-freshness/bump-version.d.ts.map +1 -0
  514. package/dist/knowledge-freshness/bump-version.js +69 -0
  515. package/dist/knowledge-freshness/bump-version.js.map +1 -0
  516. package/dist/knowledge-freshness/bump-version.test.d.ts +2 -0
  517. package/dist/knowledge-freshness/bump-version.test.d.ts.map +1 -0
  518. package/dist/knowledge-freshness/bump-version.test.js +82 -0
  519. package/dist/knowledge-freshness/bump-version.test.js.map +1 -0
  520. package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts +86 -0
  521. package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts.map +1 -0
  522. package/dist/knowledge-freshness/gates/anti-over-rewrite.js +210 -0
  523. package/dist/knowledge-freshness/gates/anti-over-rewrite.js.map +1 -0
  524. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts +2 -0
  525. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts.map +1 -0
  526. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js +115 -0
  527. package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js.map +1 -0
  528. package/dist/knowledge-freshness/gates/changed-files.d.ts +53 -0
  529. package/dist/knowledge-freshness/gates/changed-files.d.ts.map +1 -0
  530. package/dist/knowledge-freshness/gates/changed-files.js +128 -0
  531. package/dist/knowledge-freshness/gates/changed-files.js.map +1 -0
  532. package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts +23 -0
  533. package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts.map +1 -0
  534. package/dist/knowledge-freshness/gates/deep-guidance-check.js +27 -0
  535. package/dist/knowledge-freshness/gates/deep-guidance-check.js.map +1 -0
  536. package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts +2 -0
  537. package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts.map +1 -0
  538. package/dist/knowledge-freshness/gates/deep-guidance-check.test.js +23 -0
  539. package/dist/knowledge-freshness/gates/deep-guidance-check.test.js.map +1 -0
  540. package/dist/knowledge-freshness/gates/link-check.d.ts +55 -0
  541. package/dist/knowledge-freshness/gates/link-check.d.ts.map +1 -0
  542. package/dist/knowledge-freshness/gates/link-check.js +161 -0
  543. package/dist/knowledge-freshness/gates/link-check.js.map +1 -0
  544. package/dist/knowledge-freshness/gates/link-check.test.d.ts +2 -0
  545. package/dist/knowledge-freshness/gates/link-check.test.d.ts.map +1 -0
  546. package/dist/knowledge-freshness/gates/link-check.test.js +76 -0
  547. package/dist/knowledge-freshness/gates/link-check.test.js.map +1 -0
  548. package/dist/knowledge-freshness/gates/lint-unsourced.d.ts +40 -0
  549. package/dist/knowledge-freshness/gates/lint-unsourced.d.ts.map +1 -0
  550. package/dist/knowledge-freshness/gates/lint-unsourced.js +143 -0
  551. package/dist/knowledge-freshness/gates/lint-unsourced.js.map +1 -0
  552. package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts +2 -0
  553. package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts.map +1 -0
  554. package/dist/knowledge-freshness/gates/lint-unsourced.test.js +68 -0
  555. package/dist/knowledge-freshness/gates/lint-unsourced.test.js.map +1 -0
  556. package/dist/knowledge-freshness/gates/parse-entry.d.ts +25 -0
  557. package/dist/knowledge-freshness/gates/parse-entry.d.ts.map +1 -0
  558. package/dist/knowledge-freshness/gates/parse-entry.js +41 -0
  559. package/dist/knowledge-freshness/gates/parse-entry.js.map +1 -0
  560. package/dist/knowledge-freshness/gates/parse-entry.test.d.ts +2 -0
  561. package/dist/knowledge-freshness/gates/parse-entry.test.d.ts.map +1 -0
  562. package/dist/knowledge-freshness/gates/parse-entry.test.js +34 -0
  563. package/dist/knowledge-freshness/gates/parse-entry.test.js.map +1 -0
  564. package/dist/knowledge-freshness/providers/anthropic.d.ts +33 -0
  565. package/dist/knowledge-freshness/providers/anthropic.d.ts.map +1 -0
  566. package/dist/knowledge-freshness/providers/anthropic.js +36 -0
  567. package/dist/knowledge-freshness/providers/anthropic.js.map +1 -0
  568. package/dist/knowledge-freshness/providers/anthropic.test.d.ts +2 -0
  569. package/dist/knowledge-freshness/providers/anthropic.test.d.ts.map +1 -0
  570. package/dist/knowledge-freshness/providers/anthropic.test.js +32 -0
  571. package/dist/knowledge-freshness/providers/anthropic.test.js.map +1 -0
  572. package/dist/knowledge-freshness/providers/deepseek.d.ts +33 -0
  573. package/dist/knowledge-freshness/providers/deepseek.d.ts.map +1 -0
  574. package/dist/knowledge-freshness/providers/deepseek.js +157 -0
  575. package/dist/knowledge-freshness/providers/deepseek.js.map +1 -0
  576. package/dist/knowledge-freshness/providers/deepseek.test.d.ts +2 -0
  577. package/dist/knowledge-freshness/providers/deepseek.test.d.ts.map +1 -0
  578. package/dist/knowledge-freshness/providers/deepseek.test.js +142 -0
  579. package/dist/knowledge-freshness/providers/deepseek.test.js.map +1 -0
  580. package/dist/knowledge-freshness/providers/index.d.ts +41 -0
  581. package/dist/knowledge-freshness/providers/index.d.ts.map +1 -0
  582. package/dist/knowledge-freshness/providers/index.js +108 -0
  583. package/dist/knowledge-freshness/providers/index.js.map +1 -0
  584. package/dist/knowledge-freshness/providers/index.test.d.ts +2 -0
  585. package/dist/knowledge-freshness/providers/index.test.d.ts.map +1 -0
  586. package/dist/knowledge-freshness/providers/index.test.js +97 -0
  587. package/dist/knowledge-freshness/providers/index.test.js.map +1 -0
  588. package/dist/knowledge-freshness/source-hash.d.ts +39 -0
  589. package/dist/knowledge-freshness/source-hash.d.ts.map +1 -0
  590. package/dist/knowledge-freshness/source-hash.js +180 -0
  591. package/dist/knowledge-freshness/source-hash.js.map +1 -0
  592. package/dist/knowledge-freshness/source-hash.test.d.ts +2 -0
  593. package/dist/knowledge-freshness/source-hash.test.d.ts.map +1 -0
  594. package/dist/knowledge-freshness/source-hash.test.js +63 -0
  595. package/dist/knowledge-freshness/source-hash.test.js.map +1 -0
  596. package/dist/knowledge-freshness/source-url-validator.d.ts +57 -0
  597. package/dist/knowledge-freshness/source-url-validator.d.ts.map +1 -0
  598. package/dist/knowledge-freshness/source-url-validator.js +304 -0
  599. package/dist/knowledge-freshness/source-url-validator.js.map +1 -0
  600. package/dist/knowledge-freshness/source-url-validator.test.d.ts +2 -0
  601. package/dist/knowledge-freshness/source-url-validator.test.d.ts.map +1 -0
  602. package/dist/knowledge-freshness/source-url-validator.test.js +167 -0
  603. package/dist/knowledge-freshness/source-url-validator.test.js.map +1 -0
  604. package/dist/observability/adapters/beads.d.ts +4 -0
  605. package/dist/observability/adapters/beads.d.ts.map +1 -1
  606. package/dist/observability/adapters/beads.js +25 -2
  607. package/dist/observability/adapters/beads.js.map +1 -1
  608. package/dist/observability/adapters/beads.test.js +40 -2
  609. package/dist/observability/adapters/beads.test.js.map +1 -1
  610. package/dist/observability/checks/lens-i-knowledge-gaps.d.ts +3 -0
  611. package/dist/observability/checks/lens-i-knowledge-gaps.d.ts.map +1 -0
  612. package/dist/observability/checks/lens-i-knowledge-gaps.js +165 -0
  613. package/dist/observability/checks/lens-i-knowledge-gaps.js.map +1 -0
  614. package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts +2 -0
  615. package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts.map +1 -0
  616. package/dist/observability/checks/lens-i-knowledge-gaps.test.js +421 -0
  617. package/dist/observability/checks/lens-i-knowledge-gaps.test.js.map +1 -0
  618. package/dist/observability/checks/lens-i-lessons-scanner.d.ts +16 -0
  619. package/dist/observability/checks/lens-i-lessons-scanner.d.ts.map +1 -0
  620. package/dist/observability/checks/lens-i-lessons-scanner.js +106 -0
  621. package/dist/observability/checks/lens-i-lessons-scanner.js.map +1 -0
  622. package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts +2 -0
  623. package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts.map +1 -0
  624. package/dist/observability/checks/lens-i-lessons-scanner.test.js +174 -0
  625. package/dist/observability/checks/lens-i-lessons-scanner.test.js.map +1 -0
  626. package/dist/observability/engine/api.d.ts +4 -0
  627. package/dist/observability/engine/api.d.ts.map +1 -1
  628. package/dist/observability/engine/api.js +17 -1
  629. package/dist/observability/engine/api.js.map +1 -1
  630. package/dist/observability/engine/checks/observability-config.d.ts +4 -0
  631. package/dist/observability/engine/checks/observability-config.d.ts.map +1 -1
  632. package/dist/observability/engine/checks/observability-config.js +1 -0
  633. package/dist/observability/engine/checks/observability-config.js.map +1 -1
  634. package/dist/observability/engine/checks/registry.d.ts.map +1 -1
  635. package/dist/observability/engine/checks/registry.js +7 -0
  636. package/dist/observability/engine/checks/registry.js.map +1 -1
  637. package/dist/observability/engine/checks/registry.test.js +3 -2
  638. package/dist/observability/engine/checks/registry.test.js.map +1 -1
  639. package/dist/observability/engine/checks/runner.d.ts +30 -0
  640. package/dist/observability/engine/checks/runner.d.ts.map +1 -1
  641. package/dist/observability/engine/checks/runner.js +8 -1
  642. package/dist/observability/engine/checks/runner.js.map +1 -1
  643. package/dist/observability/engine/checks/runner.test.js +74 -0
  644. package/dist/observability/engine/checks/runner.test.js.map +1 -1
  645. package/dist/observability/engine/event-schemas.d.ts.map +1 -1
  646. package/dist/observability/engine/event-schemas.js +41 -3
  647. package/dist/observability/engine/event-schemas.js.map +1 -1
  648. package/dist/observability/engine/event-schemas.test.js +105 -0
  649. package/dist/observability/engine/event-schemas.test.js.map +1 -1
  650. package/dist/observability/engine/fix-flow.d.ts +7 -0
  651. package/dist/observability/engine/fix-flow.d.ts.map +1 -1
  652. package/dist/observability/engine/fix-flow.js +5 -3
  653. package/dist/observability/engine/fix-flow.js.map +1 -1
  654. package/dist/observability/engine/knowledge-root-integration.test.d.ts +2 -0
  655. package/dist/observability/engine/knowledge-root-integration.test.d.ts.map +1 -0
  656. package/dist/observability/engine/knowledge-root-integration.test.js +103 -0
  657. package/dist/observability/engine/knowledge-root-integration.test.js.map +1 -0
  658. package/dist/observability/engine/ledger-writer.d.ts +11 -1
  659. package/dist/observability/engine/ledger-writer.d.ts.map +1 -1
  660. package/dist/observability/engine/ledger-writer.js +6 -0
  661. package/dist/observability/engine/ledger-writer.js.map +1 -1
  662. package/dist/observability/engine/llm-dispatcher.d.ts.map +1 -1
  663. package/dist/observability/engine/llm-dispatcher.js +36 -5
  664. package/dist/observability/engine/llm-dispatcher.js.map +1 -1
  665. package/dist/observability/engine/llm-dispatcher.test.js +23 -0
  666. package/dist/observability/engine/llm-dispatcher.test.js.map +1 -1
  667. package/dist/observability/engine/types.d.ts +20 -1
  668. package/dist/observability/engine/types.d.ts.map +1 -1
  669. package/dist/observability/engine/types.test.js +1 -1
  670. package/dist/observability/engine/types.test.js.map +1 -1
  671. package/dist/observability/knowledge-index.d.ts +145 -0
  672. package/dist/observability/knowledge-index.d.ts.map +1 -0
  673. package/dist/observability/knowledge-index.js +353 -0
  674. package/dist/observability/knowledge-index.js.map +1 -0
  675. package/dist/observability/knowledge-index.test.d.ts +2 -0
  676. package/dist/observability/knowledge-index.test.d.ts.map +1 -0
  677. package/dist/observability/knowledge-index.test.js +364 -0
  678. package/dist/observability/knowledge-index.test.js.map +1 -0
  679. package/dist/observability/renderers/markdown.d.ts.map +1 -1
  680. package/dist/observability/renderers/markdown.js +14 -0
  681. package/dist/observability/renderers/markdown.js.map +1 -1
  682. package/dist/observability/renderers/markdown.test.js +30 -0
  683. package/dist/observability/renderers/markdown.test.js.map +1 -1
  684. package/dist/types/assembly.d.ts +10 -0
  685. package/dist/types/assembly.d.ts.map +1 -1
  686. package/dist/utils/fs.d.ts +6 -0
  687. package/dist/utils/fs.d.ts.map +1 -1
  688. package/dist/utils/fs.js +13 -0
  689. package/dist/utils/fs.js.map +1 -1
  690. package/dist/validation/knowledge-frontmatter-validator.d.ts +15 -0
  691. package/dist/validation/knowledge-frontmatter-validator.d.ts.map +1 -0
  692. package/dist/validation/knowledge-frontmatter-validator.js +131 -0
  693. package/dist/validation/knowledge-frontmatter-validator.js.map +1 -0
  694. package/dist/validation/knowledge-frontmatter-validator.test.d.ts +2 -0
  695. package/dist/validation/knowledge-frontmatter-validator.test.d.ts.map +1 -0
  696. package/dist/validation/knowledge-frontmatter-validator.test.js +66 -0
  697. package/dist/validation/knowledge-frontmatter-validator.test.js.map +1 -0
  698. package/package.json +13 -4
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-code
3
3
  description: Run all configured code review channels on local code before commit or push
4
- summary: "Review the current local delivery candidate with the three MMR CLI channels (Codex CLI, Gemini CLI, Claude CLI) plus the Superpowers code-reviewer agent as a complementary 4th channel reconciled into the same MMR job, before committing or pushing. Supports staged changes, an explicit ref range, or the full local delivery candidate (committed branch diff + staged + unstaged); untracked files are not included."
4
+ summary: "Review the current local delivery candidate with the four built-in MMR CLI channels (Codex CLI, Gemini CLI, Claude CLI, Grok CLI) plus the Superpowers code-reviewer agent as a complementary agent channel reconciled into the same MMR job, before committing or pushing. Supports staged changes, an explicit ref range, or the full local delivery candidate (committed branch diff + staged + unstaged); untracked files are not included."
5
5
  phase: null
6
6
  order: null
7
7
  dependencies: []
@@ -15,19 +15,20 @@ argument-hint: "[--base <ref>] [--head <ref>] [--staged] [--report-only] [--fix-
15
15
 
16
16
  ## Purpose
17
17
 
18
- Run the same review stack used by `review-pr` (three MMR CLI channels plus
19
- the Superpowers code-reviewer agent as a complementary 4th channel), but on
20
- local code before commit or push. This is the preflight review entry point
18
+ Run the same review stack used by `review-pr` (four built-in MMR CLI channels
19
+ plus the Superpowers code-reviewer agent as a complementary agent channel), but
20
+ on local code before commit or push. This is the preflight review entry point
21
21
  for bug fixes, small features, and quick tasks when the user wants
22
22
  multi-model review before anything leaves the machine.
23
23
 
24
- The three CLI channels are:
24
+ The built-in CLI channels are:
25
25
  1. **Codex CLI** — implementation correctness, security, API contracts
26
26
  2. **Gemini CLI** — architectural patterns, broad-context reasoning
27
27
  3. **Claude CLI** — code quality, tests, and plan alignment
28
+ 4. **Grok CLI** — xAI's independent second opinion (correctness, code quality; proprietary)
28
29
 
29
- Plus the 4th channel:
30
- 4. **Superpowers code-reviewer** — agent-based review dispatched via the
30
+ Plus the complementary agent channel:
31
+ 5. **Superpowers code-reviewer** — agent-based review dispatched via the
31
32
  `superpowers:code-reviewer` skill, reconciled into the same MMR job via
32
33
  `mmr reconcile` for a unified verdict.
33
34
 
@@ -53,7 +54,7 @@ brand-new files.
53
54
 
54
55
  ## Expected Outputs
55
56
 
56
- - A reconciled four-channel review summary for the local delivery candidate (three MMR CLI channels + Superpowers code-reviewer)
57
+ - A reconciled multi-channel review summary for the local delivery candidate (four built-in MMR CLI channels + Superpowers code-reviewer)
57
58
  - One of these verdicts: `pass`, `degraded-pass`, `blocked`, `needs-user-decision`
58
59
  - Fixed code when findings are resolved in normal mode
59
60
 
@@ -133,7 +134,7 @@ echo "$AGENT_FINDINGS" > /tmp/agent-findings.json
133
134
  mmr reconcile "$JOB_ID" --channel superpowers --input /tmp/agent-findings.json
134
135
  ```
135
136
 
136
- The agent's review output must use MMR-compatible finding schema: each finding needs `severity` (P0-P3), `location` (file:line), and `description` (`suggestion` is optional).
137
+ The agent's review output must use MMR-compatible finding schema: each finding needs `severity` (P0-P3), `category` (correctness, edge-case, security, acceptance-criteria, test-coverage, or another stable category), `location` (file:line), and `description` (`suggestion` is optional).
137
138
 
138
139
  If `mmr` is not installed (`command -v mmr` fails), fall back to the manual multi-channel flow below.
139
140
 
@@ -257,11 +258,11 @@ Format the changed-file context like:
257
258
  [full file contents]
258
259
  ```
259
260
 
260
- ### Step 4: Run All Three Review Channels
261
+ ### Step 4: Run All Built-in Review Channels
261
262
 
262
263
  Each channel reviews independently. Do NOT share one channel's output with another.
263
264
 
264
- **Foreground only:** Always run Codex and Gemini CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`. Background execution produces empty output. Multiple foreground calls in a single message are fine.
265
+ **Foreground only:** Always run Codex, Gemini, and Grok CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`. Background execution produces empty output. Multiple foreground calls in a single message are fine.
265
266
 
266
267
  #### Channel 1: Codex CLI
267
268
 
@@ -325,6 +326,31 @@ Dispatch via `claude -p` with the review prompt.
325
326
  This channel must review the same local delivery candidate, even when no PR or
326
327
  clean ref range exists.
327
328
 
329
+ #### Channel 4: Grok CLI
330
+
331
+ Check installation and auth:
332
+
333
+ ```bash
334
+ command -v grok >/dev/null 2>&1
335
+ grok models >/dev/null 2>&1
336
+ ```
337
+
338
+ - If `grok` is not installed: skip this channel and record root-cause `not_installed`
339
+ - If auth fails: tell the user to run `! grok login`, retry after recovery, and if recovery is not possible, record root-cause `auth_failed` and continue with the remaining channels
340
+
341
+ If auth cannot be recovered, or if Grok is not installed, queue a compensating Claude self-review pass focused on an independent second opinion over correctness and code quality. Label findings as `[compensating: Grok-equivalent]`.
342
+
343
+ Grok ignores stdin — pass the prompt via a file, and unwrap the reply from `.text`:
344
+
345
+ ```bash
346
+ PROMPT_FILE=$(mktemp)
347
+ # ...write the full review prompt to "$PROMPT_FILE"...
348
+ grok --prompt-file "$PROMPT_FILE" --output-format json 2>/dev/null
349
+ rm -f "$PROMPT_FILE" # clean up the temp prompt file
350
+ ```
351
+
352
+ If the CLI exits with a non-zero code, produces malformed/unparseable output, or is killed by the tool runner timeout, record root-cause `failed` and queue a compensating pass for that channel.
353
+
328
354
  **After all channels:** Run any queued compensating passes as foreground Claude self-review passes. Each compensating pass uses the same review prompt as the missing channel, focusing on that channel's strength area.
329
355
 
330
356
  ### Step 5: Use This Review Prompt
@@ -363,7 +389,8 @@ Respond with JSON:
363
389
  "findings": [
364
390
  {
365
391
  "severity": "P0" | "P1" | "P2" | "P3",
366
- "location": "file:line or section",
392
+ "category": "correctness|edge-case|security|acceptance-criteria|test-coverage",
393
+ "location": "relative/path/to/file.ts:42",
367
394
  "description": "what is wrong",
368
395
  "suggestion": "specific fix"
369
396
  }
@@ -397,10 +424,352 @@ Otherwise:
397
424
  1. Fix all findings at or above `fix_threshold` (read from `results.fix_threshold` in the verdict JSON; default `P2`)
398
425
  2. Re-run the channels that produced findings
399
426
  3. Keep iterating as long as each new round surfaces *different, concrete, fixable* findings — that is healthy review/fix iteration, not a stuck loop
400
- 4. The 3-round limit is **per finding**: stop and surface to the user when the *same* blocking finding (or set) recurs across 3 attempts without progress. Other stop conditions: a finding is genuinely ambiguous (channels contradict each other), or the user explicitly asks to stop. Use verdict `needs-user-decision` for ambiguity, `blocked` for stuck-loop cases.
427
+ 4. The 3-round limit is **per finding hash**, enforced by the wrapper-side bookkeeping in Step 7a (`.scaffold/review-attempts/<session-id>.json`). Stop and surface to the user when any blocking finding's hash hits 3 attempts (`_review_at_strike_limit` returns true). Other stop conditions: a finding is genuinely ambiguous (channels contradict each other), or the user explicitly asks to stop. Use verdict `needs-user-decision` for ambiguity, `blocked` for stuck-hash cases. Identity components — `location`, `category`, `description`, `suggestion` — mirror MMR T2-A's forthcoming native `finding_key` (v3.30).
401
428
 
402
429
  **Fix cycle channel rule:** Re-run only channels that originally completed or ran as compensating passes. Never retry a channel marked `not_installed`, `auth_failed`, or `timeout` during fix rounds — its availability does not change within a session.
403
430
 
431
+ ### Step 7a: Wrapper-Side Per-Finding Hash (Stopgap until MMR v3.30)
432
+
433
+ Same wrapper-side bookkeeping as `review-pr.md` Step 7a. Local review reuses
434
+ the helper semantics, with local-session derivation (no PR number) and the
435
+ portable hardening noted below.
436
+
437
+ This section is throwaway — when MMR v3.30 lands, replace this entire block
438
+ with `mmr review --session <id> --max-rounds N` and read `finding_key` from
439
+ the verdict JSON directly.
440
+
441
+ #### Session id (review-code variant)
442
+
443
+ ```bash
444
+ _review_session_id() {
445
+ _review_sanitize_session_id() {
446
+ local raw="$1" sanitized
447
+ sanitized=$(printf '%s' "$raw" | tr -c 'a-zA-Z0-9_.-' '_')
448
+ if [ -z "$sanitized" ] || [ "$sanitized" = "." ] || [ "$sanitized" = ".." ]; then
449
+ echo "Error: review session id resolves to an unsafe path segment" >&2
450
+ return 1
451
+ fi
452
+ printf '%s' "$sanitized"
453
+ }
454
+
455
+ if [ -n "${REVIEW_SESSION_ID:-}" ]; then
456
+ _review_sanitize_session_id "$REVIEW_SESSION_ID" || return 1
457
+ return
458
+ fi
459
+ if [ -n "${__REVIEW_SESSION_ID:-}" ]; then
460
+ _review_sanitize_session_id "$__REVIEW_SESSION_ID" || return 1
461
+ return
462
+ fi
463
+ local branch base
464
+ branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
465
+ base="${BASE_REF:-main}"
466
+ if [ -n "$branch" ] && [ "$branch" != "HEAD" ]; then
467
+ __REVIEW_SESSION_ID=$(_review_sanitize_session_id "$branch@$base") || return 1
468
+ printf '%s' "$__REVIEW_SESSION_ID"
469
+ return
470
+ fi
471
+ local commit
472
+ commit=$(git rev-parse --short HEAD 2>/dev/null || echo "")
473
+ if [ -n "$commit" ]; then
474
+ __REVIEW_SESSION_ID=$(_review_sanitize_session_id "commit-$commit") || return 1
475
+ printf '%s' "$__REVIEW_SESSION_ID"
476
+ return
477
+ fi
478
+ __REVIEW_SESSION_ID=$(_review_sanitize_session_id "ts-$(date -u +%Y-%m-%dT%H:%M:%SZ)") || return 1
479
+ printf '%s' "$__REVIEW_SESSION_ID"
480
+ }
481
+
482
+ _review_attempts_file() {
483
+ local id; id=$(_review_session_id) || return 1
484
+ mkdir -p .scaffold/review-attempts || return 1
485
+ printf '.scaffold/review-attempts/%s.json' "$id"
486
+ }
487
+ ```
488
+
489
+ #### Normalization, hashing, shingle, and attempt-recording helpers
490
+
491
+ The functions `_review_normalize_location`, `_review_normalize_description`,
492
+ `_review_normalize_suggestion`, `_review_finding_hash`,
493
+ `_review_description_shingle`, `_review_record_attempt`, and
494
+ `_review_at_strike_limit` match the semantics of the ones defined in
495
+ `content/tools/review-pr.md` Step 7a. They are reproduced here so this file is
496
+ self-contained:
497
+
498
+ They are intentionally reproduced in this tool file instead of sourced from a
499
+ shared script because agent-facing tool markdown must be self-contained until
500
+ MMR v3.30 provides native `finding_key` and session tracking.
501
+
502
+ The local-review variant also makes dependency checks explicit, preserves
503
+ backtick code spans in suggestions, and keeps short-description shingles useful
504
+ with shorter n-grams.
505
+
506
+ ```bash
507
+ _review_require_jq() {
508
+ command -v jq >/dev/null 2>&1 || {
509
+ echo "Error: jq is required for review finding bookkeeping" >&2
510
+ return 1
511
+ }
512
+ }
513
+
514
+ _review_require_python3() {
515
+ command -v python3 >/dev/null 2>&1 || {
516
+ echo "Error: python3 is required for review finding normalization" >&2
517
+ return 1
518
+ }
519
+ }
520
+
521
+ _review_sha1() {
522
+ if command -v shasum >/dev/null 2>&1; then
523
+ shasum -a 1 | awk '{print $1}'
524
+ elif command -v sha1sum >/dev/null 2>&1; then
525
+ sha1sum | awk '{print $1}'
526
+ else
527
+ echo "Error: shasum or sha1sum is required for review finding hashing" >&2
528
+ return 1
529
+ fi
530
+ }
531
+
532
+ _review_normalize_location() {
533
+ # Input: $1 = raw location (e.g. "src/foo.ts:42-44" or "pkg/Bar.kt (line 10)")
534
+ # Output: lowercased file path with trailing :N, :N-M, :N:M, (line N) stripped
535
+ printf '%s' "$1" \
536
+ | tr '[:upper:]' '[:lower:]' \
537
+ | awk '{ sub(/^[ \t]+/, ""); sub(/[ \t]+$/, ""); print }' \
538
+ | sed -E 's/(:[0-9]+(:[0-9]+)?(-[0-9]+)?|[[:space:]]+\(line[[:space:]]+[0-9]+\))$//'
539
+ }
540
+
541
+ _review_normalize_description() {
542
+ # Input: $1 = raw description
543
+ # Output: tokenize on backticks → normalize non-code segments → reassemble
544
+ _review_require_python3 || return 1
545
+ printf '%s' "$1" | python3 -c '
546
+ import re, sys
547
+ s = sys.stdin.read()
548
+ out = []
549
+ pattern = re.compile(r"(```[\s\S]*?```|`[^`]*`)")
550
+ pos = 0
551
+ for match in pattern.finditer(s):
552
+ seg = s[pos:match.start()]
553
+ seg = seg.lower()
554
+ seg = re.sub(r"\bline\s+\d+\b", "", seg)
555
+ seg = re.sub(r"\bat\s+line\s+\d+\b", "", seg)
556
+ seg = re.sub(r"^\s*(p[0-3]|critical|high|medium|low|trivial)\s*:\s*", "", seg)
557
+ seg = re.sub(r"\s+", " ", seg).strip()
558
+ if seg:
559
+ out.append(seg)
560
+ out.append(match.group(0))
561
+ pos = match.end()
562
+ seg = s[pos:]
563
+ seg = seg.lower()
564
+ seg = re.sub(r"\bline\s+\d+\b", "", seg)
565
+ seg = re.sub(r"\bat\s+line\s+\d+\b", "", seg)
566
+ seg = re.sub(r"^\s*(p[0-3]|critical|high|medium|low|trivial)\s*:\s*", "", seg)
567
+ seg = re.sub(r"\s+", " ", seg).strip()
568
+ if seg:
569
+ out.append(seg)
570
+ print(" ".join(p for p in out if p))
571
+ '
572
+ }
573
+
574
+ _review_normalize_suggestion() {
575
+ _review_require_python3 || return 1
576
+ printf '%s' "$1" | python3 -c '
577
+ import re, sys
578
+ s = sys.stdin.read()
579
+ out = []
580
+ pattern = re.compile(r"(```[\s\S]*?```|`[^`]*`)")
581
+ pos = 0
582
+ for match in pattern.finditer(s):
583
+ seg = re.sub(r"\s+", " ", s[pos:match.start()].lower()).strip()
584
+ if seg:
585
+ out.append(seg)
586
+ out.append(match.group(0))
587
+ pos = match.end()
588
+ seg = re.sub(r"\s+", " ", s[pos:].lower()).strip()
589
+ if seg:
590
+ out.append(seg)
591
+ print(" ".join(p for p in out if p))
592
+ '
593
+ }
594
+
595
+ _review_finding_hash() {
596
+ # Input: $1 = single-finding JSON object (with location, category, description, suggestion fields)
597
+ # Output: 40-char sha1 hex of normalized_location + "|" + category + "|" + sha1(description_normalized) + "|" + sha1(suggestion_normalized)
598
+ _review_require_jq || return 1
599
+ local f="$1"
600
+ local loc cat desc sugg
601
+ loc=$(printf '%s' "$f" | jq -r '.location // ""')
602
+ cat=$(printf '%s' "$f" | jq -r '.category // ""')
603
+ desc=$(printf '%s' "$f" | jq -r '.description // ""')
604
+ sugg=$(printf '%s' "$f" | jq -r '.suggestion // ""')
605
+
606
+ local nloc ndesc nsugg dhash shash
607
+ nloc=$(_review_normalize_location "$loc") || return 1
608
+ ndesc=$(_review_normalize_description "$desc") || return 1
609
+ nsugg=$(_review_normalize_suggestion "$sugg") || return 1
610
+ dhash=$(printf '%s' "$ndesc" | _review_sha1) || return 1
611
+ shash=$(printf '%s' "$nsugg" | _review_sha1) || return 1
612
+
613
+ printf '%s|%s|%s|%s' "$nloc" "$cat" "$dhash" "$shash" \
614
+ | _review_sha1
615
+ }
616
+
617
+ _review_description_shingle() {
618
+ # Input: $1 = normalized description
619
+ # Output: JSON array of normalized 5-grams (token-based)
620
+ _review_require_python3 || return 1
621
+ printf '%s' "$1" | python3 -c '
622
+ import json, sys
623
+ tokens = sys.stdin.read().split()
624
+ n = min(5, len(tokens))
625
+ shingles = [] if n == 0 else sorted({" ".join(tokens[i:i+n]) for i in range(len(tokens)-n+1)})
626
+ print(json.dumps(shingles))
627
+ '
628
+ }
629
+
630
+ _review_record_attempt() {
631
+ # Input: $1 = finding JSON, $2 = current round number (1-based), $3 = optional precomputed finding hash
632
+ # Side effect: increments attempts in the attempts file
633
+ # Output: prints new attempt count on stdout
634
+ _review_require_jq || return 1
635
+ local f="$1" round="$2" hash="${3:-}"
636
+ local file loc desc nloc ndesc shingle
637
+ file=$(_review_attempts_file)
638
+ loc=$(printf '%s' "$f" | jq -r '.location // ""')
639
+ desc=$(printf '%s' "$f" | jq -r '.description // ""')
640
+ nloc=$(_review_normalize_location "$loc") || return 1
641
+ ndesc=$(_review_normalize_description "$desc") || return 1
642
+ if [ -z "$hash" ]; then
643
+ hash=$(_review_finding_hash "$f") || return 1
644
+ fi
645
+ shingle=$(_review_description_shingle "$ndesc") || return 1
646
+
647
+ [ -f "$file" ] || jq -n --arg id "$(_review_session_id)" --arg created "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
648
+ '{session_id: $id, created_at: $created, findings: {}}' > "$file"
649
+
650
+ jq --arg h "$hash" --arg loc "$nloc" --argjson sh "$shingle" --argjson r "$round" '
651
+ .findings[$h] = (
652
+ .findings[$h] // {attempts: 0, first_seen_round: $r, normalized_location: $loc, description_shingle: $sh}
653
+ | .attempts += (if .last_seen_round == $r then 0 else 1 end)
654
+ | .last_seen_round = $r
655
+ )
656
+ ' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
657
+
658
+ jq -r --arg h "$hash" '.findings[$h].attempts' "$file"
659
+ }
660
+
661
+ _review_at_strike_limit() {
662
+ # Input: $1 = finding JSON, $2 = optional precomputed finding hash
663
+ # Exit: 0 if hash already has >= REVIEW_STRIKE_LIMIT attempts, 1 otherwise
664
+ _review_require_jq || return 1
665
+ local f="$1" file hash
666
+ hash="${2:-}"
667
+ file=$(_review_attempts_file)
668
+ [ -f "$file" ] || return 1
669
+ [ -n "$hash" ] || hash=$(_review_finding_hash "$f") || return 1
670
+ local n; n=$(jq -r --arg h "$hash" '.findings[$h].attempts // 0' "$file")
671
+ [ "$n" -ge "${REVIEW_STRIKE_LIMIT:-3}" ]
672
+ }
673
+ ```
674
+
675
+ This bookkeeping assumes sequential execution within a single workspace or
676
+ worktree. Do not run multiple review/fix loops against the same
677
+ `REVIEW_SESSION_ID` concurrently.
678
+
679
+ #### Per-round flow
680
+
681
+ After each `mmr review …` call (or `mmr results "$JOB_ID"` for the manual
682
+ fallback), iterate the reconciled findings at or above `fix_threshold`. For each
683
+ blocking finding, compute its hash, call `_review_at_strike_limit "$f" "$hash"`
684
+ before incrementing, and stop the fix loop with verdict `blocked` per Step 8 if
685
+ the hash is already at `${REVIEW_STRIKE_LIMIT:-3}` recorded attempts. Otherwise,
686
+ call `_review_record_attempt "$f" "$ROUND" "$hash"` to record the current
687
+ round before applying the next fix.
688
+
689
+ For very noisy fix loops you may suggest `--fix-threshold P1` to narrow the
690
+ gate; the project default stays at P2 per the design's Decision 4. Do not
691
+ auto-change the threshold.
692
+
693
+ Identity components — `location`, `category`, `description`, and `suggestion`
694
+ — mirror MMR T2-A's forthcoming native `finding_key` so this remains a clean
695
+ migration when v3.30 ships.
696
+
697
+ ### Step 7b: File blocking findings as Beads tasks (opt-in)
698
+
699
+ If `.mmr.yaml` has `beads.create_issues_from_blocking_findings: true` AND `.beads/`
700
+ exists, file each blocking finding (severity at-or-above `beads.fix_threshold`,
701
+ default `P2`) as a Beads bug. This is purely additive tracking — it does NOT replace
702
+ Step 7's fix-in-place flow; it creates a durable record of findings that ought to
703
+ become standalone follow-up work.
704
+
705
+ ```bash
706
+ # First: gate on the opt-in flag in .mmr.yaml. Defaults to disabled.
707
+ # Uses pure bash + grep/sed — no yq dependency.
708
+ beads_enabled=false
709
+ beads_fix_threshold=P2
710
+ beads_default_type=bug
711
+ if [ -f .mmr.yaml ]; then
712
+ # POSIX character classes ([[:space:]]) for BSD-sed compatibility (macOS default).
713
+ # Patterns tolerate trailing whitespace/comments — uncommenting a template line with
714
+ # a trailing `# comment` should still match.
715
+ if grep -qE '^[[:space:]]*create_issues_from_blocking_findings:[[:space:]]*true([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml; then
716
+ beads_enabled=true
717
+ fi
718
+ if v=$(grep -E '^[[:space:]]*fix_threshold:[[:space:]]*P[0-4]([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml | head -1 | sed -E 's/^[^:]*:[[:space:]]*(P[0-4]).*/\1/'); [ -n "$v" ]; then
719
+ beads_fix_threshold=$v
720
+ fi
721
+ if v=$(grep -E '^[[:space:]]*default_type:[[:space:]]*[a-zA-Z]+([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml | head -1 | sed -E 's/^[^:]*:[[:space:]]*([a-zA-Z]+).*/\1/'); [ -n "$v" ]; then
722
+ beads_default_type=$v
723
+ fi
724
+ fi
725
+
726
+ if [ "$beads_enabled" = "true" ] && [ -d .beads ] && command -v bd >/dev/null 2>&1 \
727
+ && command -v mmr >/dev/null 2>&1 && [ -n "${JOB_ID:-}" ]; then
728
+ # Skip when the review-code flow ran in manual fallback mode (no mmr, no JOB_ID).
729
+ threshold_rank=$(case "$beads_fix_threshold" in P0) echo 0;; P1) echo 1;; P2) echo 2;; P3) echo 3;; *) echo 4;; esac)
730
+
731
+ # Capture the reconciled findings from the MMR job we already ran upstream.
732
+ # MMR JSON shape: { reconciled_findings: [{ severity, location, description, suggestion, ... }] }
733
+ review_json=$(mmr results "$JOB_ID" --format json)
734
+
735
+ while IFS= read -r finding; do
736
+ title=$(jq -r '.description | .[0:120]' <<<"$finding")
737
+ severity=$(jq -r '.severity' <<<"$finding")
738
+ pnum="${severity#P}"
739
+ description=$(jq -r --arg job "$JOB_ID" '"\(.description)\n\nSuggestion: \(.suggestion // "(none)")\n\nLocation: \(.location // "(unknown)")\n\nFirst seen in MMR job: \($job)"' <<<"$finding")
740
+ # Per-finding identity for a future dedupe-on-re-runs mechanism (matches
741
+ # review-pr.md Step 7b). NOTE: bd v1.0.4 has no `bd list --external-ref`
742
+ # flag, so the bridge does not enforce dedupe at write time — known
743
+ # limitation; same-job re-runs will create duplicates.
744
+ loc=$(jq -r '.location // ""' <<<"$finding")
745
+ desc_for_hash=$(jq -r '.description // ""' <<<"$finding")
746
+ finding_hash=$(printf '%s|%s' "$loc" "$desc_for_hash" | shasum -a 1 | cut -c1-8)
747
+
748
+ args=(
749
+ "$title"
750
+ --type "$beads_default_type"
751
+ -p "$pnum"
752
+ --description "$description"
753
+ --external-ref "mmr:$finding_hash"
754
+ )
755
+ if [ -n "${SOURCE_BD_ID:-}" ]; then
756
+ args+=(--deps "discovered-from:$SOURCE_BD_ID")
757
+ fi
758
+ bd create "${args[@]}"
759
+ done < <(jq -c --argjson maxRank "$threshold_rank" '
760
+ .reconciled_findings[]?
761
+ | (.severity | sub("^P";"") | tonumber) as $rank
762
+ | select($rank <= $maxRank)
763
+ ' <<<"$review_json")
764
+ fi
765
+ ```
766
+
767
+ Same shell idioms as `review-pr.md` Step 7b — see that file for notes on the jq
768
+ arguments and UTF-8-safe truncation. The `.mmr.yaml` opt-in flag is read first;
769
+ the rest of the block is skipped unless `beads.create_issues_from_blocking_findings`
770
+ is `true`. The `--deps discovered-from:$SOURCE_BD_ID` flag is conditional on a
771
+ non-empty `$SOURCE_BD_ID`.
772
+
404
773
  ### Step 8: Final Verdict
405
774
 
406
775
  Return exactly one verdict:
@@ -425,8 +794,9 @@ Output a concise summary in this format:
425
794
  ### Channels Executed
426
795
  - Codex CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Codex-equivalent)]
427
796
  - Gemini CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Gemini-equivalent)]
428
- - Claude CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / none (Claude is never compensated — it IS the compensator for Codex/Gemini)]
429
- - Agent review (Superpowers code-reviewer, 4th channel) — [completed / skipped], injected via `mmr reconcile`
797
+ - Claude CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / none (Claude is never compensated — it IS the compensator for Codex/Gemini/Grok)]
798
+ - Grok CLI root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Grok-equivalent)]
799
+ - Agent review (Superpowers code-reviewer, agent channel) — [completed / skipped], injected via `mmr reconcile`
430
800
 
431
801
  ### Findings
432
802
  [consensus findings first, then single-source findings]
@@ -440,9 +810,10 @@ for the next delivery step (commit, push, or PR creation).
440
810
 
441
811
  ## Process Rules
442
812
 
443
- 1. **Foreground only** — Always run Codex and Gemini CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`.
444
- 2. **All 3 channels are mandatory** — skip only when a tool is genuinely not installed, never by choice.
813
+ 1. **Foreground only** — Always run Codex, Gemini, and Grok CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`.
814
+ 2. **All built-in CLI channels are mandatory** — skip only when a tool is genuinely not installed, never by choice.
445
815
  3. **Auth failures are not silent** — always surface to the user with recovery instructions.
446
816
  4. **Independence** — never share one channel's output with another.
447
817
  5. **Fix before proceeding** — findings at or above `fix_threshold` must be resolved before moving to the next task.
448
818
  6. **Dispatch pattern** follows `multi-model-review-dispatch` knowledge entry. When modifying channel dispatch in this file, verify consistency with `review-pr.md` and `post-implementation-review.md`.
819
+ 7. **3-round limit (per finding hash)** — never attempt to fix the *same* blocking finding (identified by the Step 7a hash of `location` + `category` + `description` + `suggestion`) more than 3 times. The attempts file `.scaffold/review-attempts/<session-id>.json` is the exact-hash source of truth; `_review_at_strike_limit` checks it. Description and suggestion are intentionally part of the strict hash to mirror MMR T2-A's forthcoming native `finding_key`; the same-underlying-defect stop condition is a co-equal guard for wording jitter that produces new hashes. Each round that surfaces genuinely different findings with *new* hashes is healthy iteration — keep going. Stop when a hash hits 3 attempts, when the same underlying defect recurs across 3 rounds even if reviewer wording produces new hashes, when channels contradict each other, or when the user asks to stop. For noisy fix loops, optionally suggest `--fix-threshold P1` (the project default stays at P2).