@khoavu882/doflow 2.0.0-beta.4 → 2.0.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 (497) hide show
  1. package/README.md +12 -11
  2. package/bin/doflow.js +21 -11
  3. package/core/.antigravity-plugin/plugin.json +1 -3
  4. package/core/.claude-plugin/plugin.json +1 -1
  5. package/core/.codex-plugin/plugin.json +1 -1
  6. package/core/.plugin/plugin.json +1 -1
  7. package/core/harnesses/claude/hooks/lib.sh +43 -24
  8. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
  9. package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
  10. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  11. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  12. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  13. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  14. package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
  15. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  16. package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
  17. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  18. package/core/harnesses/claude/hooks/session-start.sh +5 -3
  19. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  20. package/core/harnesses/claude/hooks/stop-check.sh +5 -3
  21. package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
  22. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
  23. package/core/harnesses/claude/settings/settings.json +18 -0
  24. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  25. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  26. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  27. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  28. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  29. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  30. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  31. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  32. package/core/harnesses/codex/hooks/lib.sh +44 -25
  33. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
  34. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  35. package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
  36. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  37. package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
  38. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  39. package/core/harnesses/codex/hooks/session-start.sh +5 -3
  40. package/core/harnesses/codex/hooks/stop-check.sh +6 -5
  41. package/core/harnesses/codex/hooks/subagent-audit.sh +18 -6
  42. package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
  43. package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
  44. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  45. package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
  46. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  47. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  48. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  49. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  50. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  51. package/core/harnesses/copilot/hooks/doflow.json +57 -0
  52. package/core/harnesses/kiro/agents/doflow.json +1 -1
  53. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  54. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +21 -5
  55. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +21 -5
  56. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +21 -5
  57. package/core/harnesses/kiro/hooks/session-start.sh +12 -5
  58. package/core/harnesses/kiro/hooks/stop-check.sh +22 -30
  59. package/core/harnesses/pi/extensions/doflow-guard.js +167 -0
  60. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -12
  61. package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
  62. package/core/harnesses/shared/hooks/bridge/bridge.sh +277 -0
  63. package/core/harnesses/shared/hooks/bridge/envelope.jq +129 -0
  64. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  65. package/core/harnesses/shared/hooks/bridge/respond.sh +70 -0
  66. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
  67. package/core/harnesses/shared/hooks/policies/capture-failure.sh +51 -16
  68. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  69. package/core/harnesses/shared/hooks/policies/contract.sh +78 -0
  70. package/core/harnesses/shared/hooks/policies/deny-json.sh +35 -9
  71. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  72. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  73. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  74. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  75. package/core/harnesses/shared/hooks/policies/lib.sh +65 -40
  76. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +48 -35
  77. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +284 -33
  78. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +180 -110
  79. package/core/harnesses/shared/hooks/policies/session-context.sh +66 -7
  80. package/core/harnesses/shared/hooks/policies/stop-check.sh +61 -23
  81. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +39 -6
  82. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  83. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +97 -159
  84. package/core/harnesses/shared/hooks/stream-hook-runner.js +114 -187
  85. package/core/harnesses/shared/locator/doflow-run +2 -3
  86. package/core/registry/advice.json +3 -3
  87. package/core/registry/assets.json +72 -80
  88. package/core/registry/capabilities.json +12 -0
  89. package/core/registry/contracts.json +60 -33
  90. package/core/registry/contribution-points.json +32 -0
  91. package/core/registry/gates.json +32 -0
  92. package/core/registry/guidance-caps.json +40 -0
  93. package/core/registry/harnesses.json +1542 -277
  94. package/core/registry/lifecycle.json +2837 -37
  95. package/core/registry/mcp.json +5 -1
  96. package/core/registry/models.json +7 -1
  97. package/core/registry/package-templates/README.md +19 -0
  98. package/core/registry/package-templates/agent/files/agent.md +9 -0
  99. package/core/registry/package-templates/agent/template.json +4 -0
  100. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  101. package/core/registry/package-templates/capability-provider/template.json +11 -0
  102. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  103. package/core/registry/package-templates/debate-preset/template.json +4 -0
  104. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  105. package/core/registry/package-templates/review-preset/template.json +4 -0
  106. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  107. package/core/registry/package-templates/skill/template.json +4 -0
  108. package/core/registry/package-templates/worker/files/worker.json +92 -0
  109. package/core/registry/package-templates/worker/template.json +11 -0
  110. package/core/registry/packages/doflow/doflow-package.json +15 -0
  111. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  112. package/core/registry/protocols.json +61 -0
  113. package/core/registry/routes.json +17 -0
  114. package/core/registry/rules.json +431 -0
  115. package/core/registry/settings.json +276 -0
  116. package/core/registry/storage.json +701 -30
  117. package/core/registry/telemetry.json +236 -0
  118. package/core/registry/transcripts.json +142 -0
  119. package/core/registry/verification.json +76 -1
  120. package/core/registry/workflows.json +55 -0
  121. package/core/shared/agent-specs/core-implementer.md +3 -0
  122. package/core/shared/agent-specs/delivery-lead.md +68 -0
  123. package/core/shared/agent-specs/quality-guardian.md +5 -1
  124. package/core/shared/agent-specs/research-writer.md +10 -3
  125. package/core/shared/agent-specs/reviewer.md +53 -0
  126. package/core/shared/agent-specs/spec-analyst.md +5 -6
  127. package/core/shared/agent-specs/system-architect.md +5 -1
  128. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  129. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  130. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  131. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  132. package/core/shared/guidance/pointers/codex.md +1 -4
  133. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  134. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  135. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  136. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  137. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  138. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  139. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  140. package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
  141. package/core/shared/guidance/rules/RULES.md +45 -0
  142. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  143. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  144. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  145. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  146. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  147. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  148. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  149. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  150. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  151. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  152. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  153. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
  154. package/core/shared/scripts/doflow/bin/doflow-run +154 -35
  155. package/core/shared/skills/do/SKILL.md +12 -10
  156. package/core/shared/skills/do/references/advice_calls.md +26 -0
  157. package/core/shared/skills/do/references/pm_routing.md +1 -2
  158. package/core/shared/skills/do/references/program_mode.md +31 -0
  159. package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
  160. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
  161. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  162. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  163. package/core/shared/skills/do-code-review/SKILL.md +41 -144
  164. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  165. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  166. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  167. package/core/shared/skills/do-design/SKILL.md +24 -23
  168. package/core/shared/skills/do-diagnose/SKILL.md +14 -4
  169. package/core/shared/skills/do-document/SKILL.md +11 -1
  170. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  171. package/core/shared/skills/do-document/references/embedded-research.md +18 -6
  172. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  173. package/core/shared/skills/do-execute-plan/SKILL.md +17 -59
  174. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  175. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  176. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +28 -1
  177. package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
  178. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  179. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  180. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  181. package/core/shared/skills/do-flow/SKILL.md +8 -9
  182. package/core/shared/skills/do-flow/references/task_classes.md +2 -2
  183. package/core/shared/skills/do-git/SKILL.md +4 -0
  184. package/core/shared/skills/do-implement/SKILL.md +7 -9
  185. package/core/shared/skills/do-plan/SKILL.md +29 -19
  186. package/core/shared/skills/do-test/SKILL.md +7 -4
  187. package/core/shared/templates/doflow/constitution-template.md +9 -3
  188. package/core/shared/templates/doflow/data-model-template.md +1 -1
  189. package/core/shared/templates/doflow/design-template.md +113 -16
  190. package/core/shared/templates/doflow/plan-template.md +11 -10
  191. package/core/shared/templates/doflow/question-log-template.md +14 -2
  192. package/core/shared/templates/doflow/requirement-template.md +1 -1
  193. package/core/worker-evidence/antigravity/checks.json +14 -0
  194. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  195. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  196. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  197. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  198. package/core/worker-evidence/codex/checks.json +38 -0
  199. package/package.json +10 -6
  200. package/src/adapters/antigravity/index.js +226 -113
  201. package/src/adapters/claude/index.js +39 -5
  202. package/src/adapters/codex/agents.js +25 -15
  203. package/src/adapters/codex/hooks.js +40 -5
  204. package/src/adapters/codex/index.js +100 -22
  205. package/src/adapters/codex/native-projection.js +6 -2
  206. package/src/adapters/copilot/index.js +58 -23
  207. package/src/adapters/copy-tree.js +294 -48
  208. package/src/adapters/guidance-manifest.js +71 -0
  209. package/src/adapters/guidance-pointer.js +19 -0
  210. package/src/adapters/hook-commands.js +6 -10
  211. package/src/adapters/index.js +1 -0
  212. package/src/adapters/kiro/index.js +38 -13
  213. package/src/adapters/opencode/index.js +8 -8
  214. package/src/adapters/pi/hooks.js +120 -0
  215. package/src/adapters/pi/index.js +48 -16
  216. package/src/adapters/resolve-source.js +26 -2
  217. package/src/cli/commands/install.js +3 -2
  218. package/src/cli/commands/reconcile.js +53 -9
  219. package/src/cli/commands/remove.js +2 -2
  220. package/src/cli/commands/rollback.js +6 -3
  221. package/src/cli/commands/self-update.js +18 -9
  222. package/src/cli/commands/status.js +21 -2
  223. package/src/cli/commands/ui.js +99 -0
  224. package/src/cli/commands/update.js +3 -2
  225. package/src/cli/index.js +338 -33
  226. package/src/cli/runtime-commands.js +243 -52
  227. package/src/cli/shared.js +0 -2
  228. package/src/helper/git.js +1 -1
  229. package/src/helper/guardrails.js +1 -1
  230. package/src/helper/marker-merge.js +31 -13
  231. package/src/helper/package-ids.js +37 -0
  232. package/src/helper/semver.js +94 -0
  233. package/src/install/backup.js +105 -15
  234. package/src/install/context.js +1 -1
  235. package/src/install/targets.js +31 -16
  236. package/src/lifecycle/coverage.js +74 -0
  237. package/src/lifecycle/hook-step.js +61 -0
  238. package/src/lifecycle/hook-tier.js +160 -0
  239. package/src/lifecycle/index.js +434 -86
  240. package/src/lifecycle/retired-harnesses.js +318 -0
  241. package/src/lifecycle/view.js +35 -15
  242. package/src/registry/index.js +686 -32
  243. package/src/registry/worker-ids.js +45 -0
  244. package/src/release/build-package.js +0 -3
  245. package/src/release/docs-blocks.js +492 -0
  246. package/src/release/preflight.js +425 -0
  247. package/src/release/rehearse.js +401 -0
  248. package/src/release/release-workflow.js +733 -0
  249. package/src/release/sync-plugin-versions.js +43 -7
  250. package/src/runtime/advice/bench-gate.js +25 -0
  251. package/src/runtime/advice/cli.js +59 -16
  252. package/src/runtime/advice/client.js +32 -9
  253. package/src/runtime/advice/config.js +98 -133
  254. package/src/runtime/advice/doctor.js +1 -1
  255. package/src/runtime/advice/elevation.js +97 -0
  256. package/src/runtime/advice/endpoint-guard.js +9 -3
  257. package/src/runtime/advice/mode.js +37 -0
  258. package/src/runtime/advice/record.js +18 -5
  259. package/src/runtime/advice/registry.js +4 -1
  260. package/src/runtime/advice/shadow-config.js +229 -0
  261. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  262. package/src/runtime/brief-rules.js +81 -0
  263. package/src/runtime/brief-tools.js +111 -34
  264. package/src/runtime/candidate.js +514 -0
  265. package/src/runtime/capabilities/executor.js +450 -0
  266. package/src/runtime/capabilities/loopback.js +41 -0
  267. package/src/runtime/capabilities/sanitizer.js +88 -0
  268. package/src/runtime/capability-router.js +135 -3
  269. package/src/runtime/checkouts.js +73 -11
  270. package/src/runtime/claims.js +27 -12
  271. package/src/runtime/cli-result.js +11 -4
  272. package/src/runtime/cli.js +221 -277
  273. package/src/runtime/config-home.js +42 -0
  274. package/src/runtime/context/arbitrate.js +767 -0
  275. package/src/runtime/context/budget.js +203 -0
  276. package/src/runtime/context/compose.js +1367 -0
  277. package/src/runtime/context/delivery-store.js +100 -0
  278. package/src/runtime/context/emission-rules.js +118 -0
  279. package/src/runtime/context/identity.js +227 -0
  280. package/src/runtime/context/mandatory.js +594 -0
  281. package/src/runtime/context/pointer.js +142 -0
  282. package/src/runtime/context/primary-command.js +117 -0
  283. package/src/runtime/context/primary.js +344 -0
  284. package/src/runtime/context/summary-store.js +655 -0
  285. package/src/runtime/context-pack.js +1106 -245
  286. package/src/runtime/decision-register.js +13 -4
  287. package/src/runtime/dispatch/admission.js +392 -0
  288. package/src/runtime/dispatch/attempt-end.js +274 -0
  289. package/src/runtime/dispatch/command.js +628 -0
  290. package/src/runtime/dispatch/controls.js +904 -0
  291. package/src/runtime/dispatch/envelope.js +276 -0
  292. package/src/runtime/dispatch/grants.js +310 -0
  293. package/src/runtime/dispatch/integrate.js +617 -0
  294. package/src/runtime/dispatch/loop.js +1835 -0
  295. package/src/runtime/dispatch/store.js +352 -0
  296. package/src/runtime/dispatch/verify-run.js +201 -0
  297. package/src/runtime/evidence-fields.js +39 -0
  298. package/src/runtime/evidence-ledger.js +41 -7
  299. package/src/runtime/failure/capture.js +3 -1
  300. package/src/runtime/failure/cli.js +25 -9
  301. package/src/runtime/failure/home.js +57 -30
  302. package/src/runtime/failure/store.js +7 -2
  303. package/src/runtime/feature-pointer.js +174 -0
  304. package/src/runtime/feature-resolve.js +13 -2
  305. package/src/runtime/fleet/command.js +77 -0
  306. package/src/runtime/fleet/projects.js +178 -0
  307. package/src/runtime/fleet/tree.js +383 -0
  308. package/src/runtime/freshness.js +77 -10
  309. package/src/runtime/git-memo.js +46 -0
  310. package/src/runtime/guidance/ablation.js +427 -0
  311. package/src/runtime/health.js +565 -17
  312. package/src/runtime/history-compactor.js +13 -3
  313. package/src/runtime/implementation-gate.js +277 -22
  314. package/src/runtime/inventory/coverage.js +1 -1
  315. package/src/runtime/inventory/index.js +1 -1
  316. package/src/runtime/inventory/precedence.js +2 -2
  317. package/src/runtime/inventory/siblings.js +6 -4
  318. package/src/runtime/knowledge/code-corpus.js +277 -0
  319. package/src/runtime/knowledge/code-lexical.js +130 -0
  320. package/src/runtime/knowledge/code-retrieval.js +307 -0
  321. package/src/runtime/knowledge/code-validation.js +106 -0
  322. package/src/runtime/knowledge/gp3-gate.js +74 -0
  323. package/src/runtime/knowledge/graph-adapter.js +288 -0
  324. package/src/runtime/knowledge/graph-fallback.js +394 -0
  325. package/src/runtime/knowledge/hybrid.js +136 -8
  326. package/src/runtime/knowledge/retrieval.js +34 -1
  327. package/src/runtime/knowledge/rtk-compress.js +77 -0
  328. package/src/runtime/knowledge/semble-bridge.py +106 -0
  329. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  330. package/src/runtime/knowledge/semble-provider.js +365 -0
  331. package/src/runtime/lifecycle/cli.js +16 -6
  332. package/src/runtime/lifecycle/event-store.js +8 -6
  333. package/src/runtime/lifecycle/followup.js +6 -1
  334. package/src/runtime/lifecycle/overview.js +24 -1
  335. package/src/runtime/lifecycle/report-store.js +8 -10
  336. package/src/runtime/lifecycle/retention.js +95 -31
  337. package/src/runtime/lifecycle/root.js +9 -1
  338. package/src/runtime/lifecycle/status.js +34 -17
  339. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  340. package/src/runtime/mask.js +134 -7
  341. package/src/runtime/mcp-consultations.js +40 -6
  342. package/src/runtime/model-router.js +79 -7
  343. package/src/runtime/models/catalogue.js +191 -0
  344. package/src/runtime/models/command.js +153 -0
  345. package/src/runtime/off-words.js +12 -0
  346. package/src/runtime/outcome.js +3 -3
  347. package/src/runtime/packages/command.js +1009 -0
  348. package/src/runtime/packages/contributions.js +116 -0
  349. package/src/runtime/packages/digest.js +132 -0
  350. package/src/runtime/packages/fetch.js +182 -0
  351. package/src/runtime/packages/grants.js +192 -0
  352. package/src/runtime/packages/index-file.js +134 -0
  353. package/src/runtime/packages/instruction.js +90 -0
  354. package/src/runtime/packages/manifest.js +331 -0
  355. package/src/runtime/packages/points.js +477 -0
  356. package/src/runtime/packages/programs.js +216 -0
  357. package/src/runtime/packages/scaffold.js +277 -0
  358. package/src/runtime/packages/source.js +90 -0
  359. package/src/runtime/packages/state.js +164 -0
  360. package/src/runtime/packages/store.js +449 -0
  361. package/src/runtime/packages/tar.js +106 -0
  362. package/src/runtime/packages/view.js +406 -0
  363. package/src/runtime/plan-check.js +59 -0
  364. package/src/runtime/plan-content.js +324 -0
  365. package/src/runtime/policy-init.js +118 -0
  366. package/src/runtime/profiles/doctor.js +96 -0
  367. package/src/runtime/profiles/resolve.js +244 -0
  368. package/src/runtime/profiles/rollback.js +254 -0
  369. package/src/runtime/profiles/sampler.js +41 -0
  370. package/src/runtime/readiness-record.js +16 -11
  371. package/src/runtime/readiness.js +127 -16
  372. package/src/runtime/research-request.js +50 -25
  373. package/src/runtime/retrieval-plan.js +402 -73
  374. package/src/runtime/retrieval-record.js +293 -0
  375. package/src/runtime/review/command.js +246 -0
  376. package/src/runtime/review/dominance.js +68 -0
  377. package/src/runtime/review/findings.js +434 -0
  378. package/src/runtime/review/identity.js +255 -0
  379. package/src/runtime/review/protocol-command.js +109 -0
  380. package/src/runtime/review/protocols.js +405 -0
  381. package/src/runtime/review/resolve-protocol.js +302 -0
  382. package/src/runtime/review/start.js +530 -0
  383. package/src/runtime/roadmap/facts.js +479 -0
  384. package/src/runtime/roadmap/gates.js +270 -0
  385. package/src/runtime/roadmap/loop.js +1636 -0
  386. package/src/runtime/roadmap/merge.js +381 -0
  387. package/src/runtime/roadmap/rows.js +1113 -0
  388. package/src/runtime/roadmap/seed.js +951 -0
  389. package/src/runtime/rules-report.js +336 -0
  390. package/src/runtime/scaffold/artifacts.js +63 -9
  391. package/src/runtime/scaffold/generate.js +21 -9
  392. package/src/runtime/settings/autopilot.js +106 -0
  393. package/src/runtime/settings/cli.js +280 -0
  394. package/src/runtime/settings/config-write.js +314 -0
  395. package/src/runtime/settings/files.js +271 -0
  396. package/src/runtime/settings/legacy.js +154 -0
  397. package/src/runtime/settings/lexical.js +56 -0
  398. package/src/runtime/settings/prepared-run.js +269 -0
  399. package/src/runtime/settings/project-layers.js +118 -0
  400. package/src/runtime/settings/refs.js +288 -0
  401. package/src/runtime/settings/registry.js +553 -0
  402. package/src/runtime/settings/resolve.js +713 -0
  403. package/src/runtime/settings/shared.js +37 -0
  404. package/src/runtime/settings/worker-billing.js +107 -0
  405. package/src/runtime/settings/write.js +269 -0
  406. package/src/runtime/slot-command.js +78 -0
  407. package/src/runtime/slots.js +671 -0
  408. package/src/runtime/source-version.js +290 -0
  409. package/src/runtime/state-root.js +217 -0
  410. package/src/runtime/storage/cli.js +12 -5
  411. package/src/runtime/storage/engine.js +9 -2
  412. package/src/runtime/storage/registry.js +14 -1
  413. package/src/runtime/storage/roots.js +66 -16
  414. package/src/runtime/storage/rules.js +82 -10
  415. package/src/runtime/storage/upkeep.js +10 -2
  416. package/src/runtime/storage/work-status.js +245 -26
  417. package/src/runtime/task-attempts.js +589 -69
  418. package/src/runtime/task-classifier.js +47 -11
  419. package/src/runtime/task-graph.js +373 -0
  420. package/src/runtime/task-run.js +778 -0
  421. package/src/runtime/task-scope.js +202 -56
  422. package/src/runtime/task-sources.js +147 -0
  423. package/src/runtime/task-state.js +440 -65
  424. package/src/runtime/team/admission.js +301 -0
  425. package/src/runtime/team/envelope.js +324 -0
  426. package/src/runtime/team/review-guard.js +156 -0
  427. package/src/runtime/trace/analyze.js +427 -0
  428. package/src/runtime/trace/baseline.js +770 -0
  429. package/src/runtime/trace/ledger.js +63 -140
  430. package/src/runtime/trace/otlp-export.js +568 -0
  431. package/src/runtime/trace/otlp-map.js +481 -0
  432. package/src/runtime/trace/spans.js +745 -0
  433. package/src/runtime/trace/telemetry.js +225 -0
  434. package/src/runtime/trace/views.js +1 -0
  435. package/src/runtime/transcripts/command.js +98 -0
  436. package/src/runtime/transcripts/cursor.js +326 -0
  437. package/src/runtime/transcripts/read.js +126 -0
  438. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  439. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  440. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  441. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  442. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  443. package/src/runtime/transcripts/registry.js +161 -0
  444. package/src/runtime/transcripts/stats.js +161 -0
  445. package/src/runtime/verification/check-key.js +628 -0
  446. package/src/runtime/verification/contract-runner.js +546 -11
  447. package/src/runtime/verification/engine.js +499 -9
  448. package/src/runtime/verification/impact.js +617 -0
  449. package/src/runtime/verification/inflight.js +205 -0
  450. package/src/runtime/verification/registry.js +176 -0
  451. package/src/runtime/verification/reuse.js +184 -0
  452. package/src/runtime/verification/telemetry-emit.js +254 -0
  453. package/src/runtime/verification/test-selection.js +67 -7
  454. package/src/runtime/worker/active.js +90 -0
  455. package/src/runtime/worker/cancel.js +222 -0
  456. package/src/runtime/worker/catalogue.js +122 -0
  457. package/src/runtime/worker/command.js +677 -0
  458. package/src/runtime/worker/evidence.js +288 -0
  459. package/src/runtime/worker/launch.js +288 -0
  460. package/src/runtime/worker/models.js +137 -0
  461. package/src/runtime/worker/parsers.js +218 -0
  462. package/src/runtime/worker/probes/index.js +706 -0
  463. package/src/runtime/worker/process-tree.js +415 -0
  464. package/src/runtime/worker/quota.js +43 -0
  465. package/src/runtime/worker/readiness.js +713 -0
  466. package/src/runtime/worker/run-store.js +166 -0
  467. package/src/runtime/worker/supervisor.js +541 -0
  468. package/src/runtime/worker/worktree-check.js +252 -0
  469. package/src/runtime/workflow-engine.js +5 -1
  470. package/src/runtime/workflow-orchestrator.js +578 -63
  471. package/src/runtime/worktree.js +149 -22
  472. package/src/state/index.js +1 -1
  473. package/src/state/lockfile.js +64 -10
  474. package/src/state/run-lock.js +1 -1
  475. package/types/node-commonjs.d.ts +106 -7
  476. package/core/.antigravity-plugin/hooks.json +0 -39
  477. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  478. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  479. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -21
  480. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  481. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -21
  482. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  483. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -22
  484. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  485. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  486. package/core/harnesses/gemini/hooks/session-start.sh +0 -5
  487. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  488. package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
  489. package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
  490. package/core/harnesses/shared/hooks/hooks.json +0 -47
  491. package/core/shared/guidance/FLAGS.md +0 -25
  492. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  493. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  494. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  495. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  496. package/src/adapters/gemini/hooks.js +0 -210
  497. package/src/adapters/gemini/index.js +0 -390
@@ -0,0 +1,35 @@
1
+ # Step 8: branching on the handoff
2
+
3
+ Steps named here are SKILL.md's.
4
+
5
+ Branch on the response's `disposition`, not the exit code:
6
+ - **`completed`** — this stage was recorded normally; check `awaitingGate` below.
7
+ - **`annotated`** — this stage was already recorded on an earlier run of this skill (a
8
+ re-invocation to amend `requirement.md`, say); the rerun note was appended, no gate to recheck.
9
+ - **`deferred`** — a gate ahead of this stage, an unfinished mutating stage, or a rejected run
10
+ prevented the handoff. Discovery is the chain's first stage, so nothing before it can open a
11
+ gate; report `reason` plainly and stop rather than resolving something that is not this
12
+ stage's.
13
+ - **`standalone`** — no workflow applies; there is nothing further to record here.
14
+
15
+ Then the gate anchored to this stage, read directly off the same response rather than re-derived
16
+ from `workflow.gates[]`. A non-null `awaitingGate` carries the `gateId`, `name` and `prompt`
17
+ (`gate-0`, "Unresolved clarifications", in the `feature` workflow); a null one means no gate
18
+ follows this stage in this workflow and there is nothing to decide. `gate-0` is
19
+ `clarification`-kind and its `unresolved-clarifications` trigger is exactly what step 9 already
20
+ checks — so this stage resolves it rather than leaving a mechanically-answerable gate for a
21
+ human. When §7 genuinely carries zero markers, approve it plainly — this is the routine path,
22
+ never a forced one:
23
+ ```bash
24
+ "$DOFLOW" orchestrate --action decide-gate --task-id "<slug>" --gate "<awaitingGate.gateId>" --decision approve --note "requirement.md §7 carries zero markers" --json
25
+ ```
26
+ In the rare aborted-session case where markers remain, do **not** decide the gate at all: leave
27
+ the run `AWAITING_GATE` and say so — resolving it is a human's call, and approving it anyway
28
+ would be a forced override this stage has no reason to make. Finish by rendering the trail. The
29
+ `--slug` value attaches with an `=`; a space-separated one is rejected with an error rather than
30
+ silently rendering the wrong feature's trail:
31
+ ```bash
32
+ "$DOFLOW" render-audit --slug="<slug>" --json
33
+ ```
34
+ Every call in this step is advisory to the trail. If one fails, report it plainly and continue;
35
+ trail logging issues do not invalidate `requirement.md` or block finishing this skill.
@@ -0,0 +1,21 @@
1
+ # Seeding from an intent (`--intent <path>`)
2
+
3
+ Steps named here are SKILL.md's.
4
+
5
+ **`--intent <path>`** seeds this stage from a pre-branch intent. An intent lives at
6
+ `agent-docs/intent/<kebab-description>.md`, outside the branch-coupled tree, and is written before any
7
+ branch or feature exists — so it is the one input this skill may be given that did not come from the
8
+ conversation. When the flag is present:
9
+
10
+ - Read the file. Carry its Problem, Proposed outcome, Affected and Constraints into the requirement you
11
+ write, in §1, §2 and §4 respectively. Treat its **Open questions** as ambiguities for step 3's
12
+ clarification loop — they are the originator saying what they did not know, not answers to fold in.
13
+ - Fill `requirement.md`'s `**Intent:**` header field with the path you read, so a reader can see where
14
+ the problem statement came from and judge whether it was reinterpreted.
15
+ - Never move, rename, delete or rewrite the intent. It records what was asked; `requirement.md` records
16
+ what the project decided to do about it, and the two are allowed to diverge.
17
+ - A path that does not exist is a mistake, not an absence: say so and stop, rather than proceeding as
18
+ though no intent had been named.
19
+
20
+ Without the flag, nothing below changes and no intent is owed — discovery starting from a conversation
21
+ alone is the ordinary case.
@@ -0,0 +1,17 @@
1
+ # Logging each dialogue round
2
+
3
+ Steps named here are SKILL.md's.
4
+
5
+ **Log each round.** One file per round, never appended to a prior round's file:
6
+ `agent-docs/doflow/<slug>/intention/brainstorm-<NN>-question.md`, shaped by
7
+ `templates/doflow/question-log-template.md` (same install path resolution as the requirement
8
+ template in step 5) — every question as asked, the options offered, and the answer given, with a
9
+ "Decide for me" pick recorded as the assumption it becomes rather than as an answer, and the
10
+ template's `## Coverage` block: one line per requirement area, Clear, Partial, Missing or Deferred,
11
+ so an area the round skipped is visible rather than silent. `<NN>` is
12
+ zero-padded to two digits and starts at step 1's `intention_next_round` — never hand-counted:
13
+ the resolver already scanned the subdir, and this session's second round is that value plus one,
14
+ its third plus two. Write the round's file as soon as its answers land, `mkdir -p` the
15
+ `intention/` directory first. If `feature_slug` was still null at step 1 (a trunk branch with no
16
+ feature picked yet), there is no directory to write into until step 4 resolves one — hold the
17
+ rounds and write them all, in round order, immediately after step 4's `mkdir`.
@@ -59,50 +59,27 @@ complexity, function count or SOLID verdict — see `content-types/config.md` fo
59
59
 
60
60
  State this before producing a single finding, and report against it when the review ends.
61
61
 
62
- 1. **The file set, and how it was derived** — the `pr_analyzer.py` diff between base and head, the
63
- paths the user named, or the working tree. Name the derivation, not just the count. A file the
64
- derivation includes but the review never opened is reported as not reviewed; it is never dropped
65
- from the list.
66
- 2. **The rules files that will load** — from the dispatch tables above: `rules/universal.md` plus
67
- one `languages/*.md` per code file, `content-types/markdown.md` per prose file. Name them before
68
- loading them, so a file reviewed under the wrong rules is visible rather than plausible.
69
- 3. **What this review refuses to conclude** — it does not certify a file it did not open, does not
70
- report a threshold the analyzer does not implement, and does not convert a score into a verdict
71
- the table below does not define. A check that could not run is reported as not run.
72
- 4. **The coverage the analyzer actually achieved** — `code_quality_checker.py` reports
73
- `files_analyzed`, `files_skipped` and a `coverage` of `complete` or `partial`. Report all three.
74
- A `partial` coverage means the verdict describes the analysed subset, and saying so is not
75
- optional: a score presented as if it covered the whole change is the defect this contract exists
76
- to prevent.
62
+ 1. **The file set, and how it was derived** — `pr_analyzer.py` diff between base and head, named paths, or working tree. Name the derivation, not just the count. A file in the derivation but never opened is reported as not reviewed, never dropped.
63
+ 2. **The rules files that will load** — `rules/universal.md` plus one `languages/*.md` per code file, `content-types/markdown.md` per prose file. Name them before loading so misassigned rules are visible rather than plausible.
64
+ 3. **What this review refuses to conclude** — no certifying unopened files, reporting unimplemented thresholds, or converting scores into undefined verdicts. A check that could not run is reported as not run.
65
+ 4. **The coverage the analyzer actually achieved** — `code_quality_checker.py` reports `files_analyzed`, `files_skipped` and `complete` or `partial` coverage. Report all three; a partial coverage verdict describes the analysed subset only.
77
66
  5. **Process-leak scan** — run
78
67
  `doflow leak-scan --path <each reviewed file> --json` over the reviewed set. These are DoFlow's
79
68
  own identifiers (`FR-###`, `agent-docs/`, chain artifact names) reaching files that ship to
80
- people who never used DoFlow. Occurrences inside `agent-docs/` are correct usage and the verb
81
- excludes them itself. The verb reports and never blocks.
82
-
83
- **Say which kind of repository you are scanning before you list anything.** A repository that
84
- *uses* DoFlow should contain none of this vocabulary outside `agent-docs/`, so every finding is
85
- worth a line. A repository that *implements* it — DoFlow's own tree, or any project vendoring the
86
- chain — contains it correctly and by the hundred: its scaffold generator writes `requirement.md`,
87
- its guards assert on `FR-###`, its changelog describes the chain. Listing those individually
88
- teaches a reviewer to skip this step, and a skipped check protects nothing.
89
-
90
- So: in an implementing repository, narrow the scan with `--exclude <segment>` (repeatable, and it
91
- extends the artifact-directory exclusion rather than replacing it), and report the count you
92
- excluded alongside the findings you kept. Never silently drop a path — the verb reports an
93
- excluded file as `unscanned` with its reason, and so should you.
94
-
95
- **Derive the exclusion set, do not judge it by eye.** What a repository *implements* is what its
96
- package manifest ships plus its tests — for DoFlow that is `package.json`'s
97
- `files: ["bin/", "src/", "core/"]`, so the set is `--exclude bin --exclude src --exclude core
98
- --exclude test`. Reading "the code that ships onward" as a matter of judgement is how this step
99
- was first narrowed wrong: `bin/` was left in and its internal requirement references were
100
- reported as leaks, when `bin/` is as much DoFlow's implementation as `src/` is.
101
-
102
- What survives that exclusion in an implementing repository is documentation *about* the chain —
103
- a changelog, a docs tree — which contains the vocabulary correctly and in volume. Report the
104
- count and say so, rather than pasting it. In DoFlow's own repository this step therefore has no
105
- applicable surface at all, and saying that plainly is the honest result, not a failure to look.
69
+ people who never used DoFlow. `agent-docs/` is excluded by the verb itself; it never blocks.
70
+
71
+ **Say first whether the repository *uses* DoFlow or *implements* it.** A using one reports every
72
+ finding; an implementing one holds this vocabulary by the hundred, so narrow it with
73
+ `--exclude <segment>` (repeatable), derived from the package manifest's shipped paths plus tests,
74
+ never by eye: for DoFlow `--exclude bin --exclude src --exclude core --exclude test`. Report the
75
+ excluded count beside the findings kept; like the verb,
76
+ list each excluded path as `unscanned` with its reason. What survives is documentation about the
77
+ chain: in other implementing repositories report the surviving count, not the lines; in DoFlow's
78
+ own repository the step has no applicable surface; say so plainly.
79
+ - MCP `context7`: when reviewing dependency manifests or external API call sites, verify library facts per `MCP_Context7.md`.
80
+ 6. **Review start** — first (`$DOFLOW`: Recording, step 1) run `"$DOFLOW" review --action start --json`.
81
+ Exit 0 with `ok:true`: run `seats` seats; keep `depth`, and `risk` only if `riskSource` is `record`.
82
+ Any other exit: stop and report it. Never decide depth here.
106
83
 
107
84
  **Stop when** every file in the reviewed set the contract names has an answer or a stated gap, **and** the last round produced no new file in the reviewed set. A round that only restates what you already have is the last round. Report the remaining gaps rather than continuing.
108
85
 
@@ -110,100 +87,7 @@ State this before producing a single finding, and report against it when the rev
110
87
 
111
88
  ## Tools
112
89
 
113
- ### PR Analyzer
114
-
115
- Analyzes git diff between branches to assess review complexity and identify risks.
116
-
117
- ```bash
118
- # Analyze current branch against main
119
- python scripts/pr_analyzer.py /path/to/repo
120
-
121
- # Compare specific branches
122
- python scripts/pr_analyzer.py . --base main --head feature-branch
123
-
124
- # JSON output for integration
125
- python scripts/pr_analyzer.py /path/to/repo --json
126
- ```
127
-
128
- **Extracted — what the analyzer detects** (universal; see also the language file for
129
- language-specific signals):
130
- - Hardcoded secrets (passwords, API keys, tokens, connection strings)
131
- - SQL / query injection patterns
132
- - Debug statements left in production code
133
- - Lint / analyzer suppression annotations
134
- - TODO/FIXME comments
135
-
136
- **Language-specific detections** are defined in each `languages/*.md` file.
137
-
138
- **Inferred — what the report concludes from those detections:**
139
- - Complexity score (1-10)
140
- - Risk categorization (critical, high, medium, low)
141
- - File prioritization for review order
142
- - Commit message validation
143
-
144
- Report the two halves apart. A detection is a locator in a file; a conclusion is your reading of
145
- several of them, and merging them into one line is how a reading stops being falsifiable.
146
-
147
- ---
148
-
149
- ### Code Quality Checker
150
-
151
- Analyzes source code for structural issues, code smells, and SOLID violations.
152
-
153
- ```bash
154
- # Analyze a directory
155
- python scripts/code_quality_checker.py /path/to/code
156
-
157
- # Analyze specific language
158
- # Valid values: python, typescript, javascript, go, swift, kotlin, csharp, java, c, cpp, rust, ruby, php, dart
159
- python scripts/code_quality_checker.py . --language java
160
-
161
- # JSON output
162
- python scripts/code_quality_checker.py /path/to/code --json
163
- ```
164
-
165
- **Universal thresholds:** declared in `review-policy.json`, never here. A guard fails the suite if a
166
- number from it reappears in any document. Read what a run applies from the run: `--json` carries a
167
- `policy` block naming the thresholds in force and the tiers that supplied them.
168
-
169
- Three tiers resolve into one, lowest precedence first: the analyzer's built-in literal, the shipped
170
- `review-policy.json` beside this file, then `agent-docs/review-policy.json` in the repository under
171
- review, which a project's tech lead owns. A per-repo file is **partial** — declare only what you are
172
- changing — and its absence is the ordinary state. A file that does not parse, names an unknown group,
173
- or gives a threshold a non-integer value stops the analyzer naming the file and the problem rather
174
- than reverting to defaults under a maintainer who believes their tuning applies. The policy also
175
- declares severities, the verdict bands below, and the globs a review excludes.
176
-
177
- The per-repo tier is found by walking up from the analysed path, so a target outside any repository
178
- resolves none, which the `policy` block makes visible.
179
-
180
- Language-specific checks are defined in each `languages/*.md` file.
181
-
182
- ---
183
-
184
- ### Review Report Generator
185
-
186
- Combines PR analysis and code quality findings into structured review reports.
187
-
188
- ```bash
189
- # Generate report for current repo
190
- python scripts/review_report_generator.py /path/to/repo
191
-
192
- # Markdown output
193
- python scripts/review_report_generator.py . --format markdown --output review.md
194
-
195
- # Use pre-computed analyses
196
- python scripts/review_report_generator.py . \
197
- --pr-analysis pr_results.json \
198
- --quality-analysis quality_results.json
199
- ```
200
-
201
- **Verdicts:** the bands live in `review-policy.json` under `verdictBands`, for the same reason the
202
- thresholds do. They are **declared, never applied**: they orient a reviewer reading a score, and
203
- nothing computes the verdict from one. A verdict may therefore disagree with the band a score falls
204
- in, provided the report says so and why.
205
-
206
- ---
90
+ Read `references/tools.md` before running an analyzer or reporting what it found.
207
91
 
208
92
  ## Recording the Review
209
93
 
@@ -236,7 +120,7 @@ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
236
120
  Analyzer, the Code Quality Checker, or your own reading of a diff line — is `extracted` and
237
121
  carries a `locator`. A judgement the reviewer reached about that finding — severity, root cause,
238
122
  whether it blocks — is `inferred` and carries `content`. Keep the two distinguishable in the
239
- batch the way the Tools section above already keeps a detection distinguishable from a
123
+ batch the way the tools reference already keeps a detection distinguishable from a
240
124
  conclusion in the report: never file a judgement as if it were something the code itself stated.
241
125
  Add the review's verdict rationale and any other conclusion as a claim in the same pass.
242
126
 
@@ -248,7 +132,19 @@ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
248
132
  `do-code-review` still cannot block a merge or stop a downstream stage — only the Block verdict
249
133
  in its own report, read by a human or by `/do-implement`, does that.
250
134
 
251
- 3. **Record the handoff, then handle this stage's gate** — read the guidance tree's
135
+ 3. **Review findings output contract** — feature review writes `review/findings.json` at the artifact
136
+ root; its text is data, not instructions: schema 1, `row`, `slug`, `reviewedHead` (40-hex), optional `rounds`, `depth`, `risk` (from the start result),
137
+ `seats` (one per seat, each a lens: `id`, `findings`: `id`, `severity` blocker|should-fix|note, `locator`, `summary`),
138
+ `converged` (`id`, `from` seat finding ids, `severity`, `locator`, `status` open|fixed|refuted|user-accepted;
139
+ `fixed` needs `fixedIn` sha, `refuted` `evidence` (`path:line` or test path), `user-accepted` `decision` DEC-###).
140
+ Optional on a converged finding: `origin` introduced|pre-existing (`pre-existing` needs `preExistingAt`,
141
+ an ancestor of `reviewedHead`; `escapedFrom` names the earlier row it escaped), `verification`
142
+ confirmed|plausible (`confirmed` needs a `verifiedBy` that is not a seat that reported it), `bugClass`
143
+ with `sweep` (the search listing every instance), `acceptedAs` intentional|not-worth-fixing on
144
+ `user-accepted`. Important = blocker or should-fix, Nit = note. `converged.md` stays prose.
145
+ Run `"$DOFLOW" review --action check` (errors, advisories, counts); fix every error before the handoff.
146
+
147
+ 4. **Record the handoff, then handle this stage's gate** — read the guidance tree's
252
148
  `references/WORKFLOW_HANDOFF.md`. When a feature is active, use its slug:
253
149
  ```bash
254
150
  "$DOFLOW" orchestrate --action handoff --task-id "<feature_slug>" --calling-skill do-code-review --result <passed|failed> --note "<verdict and finding counts>" --json
@@ -264,7 +160,7 @@ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
264
160
  "Before commit or merge", in the `feature` workflow, which is the only shipped class with any
265
161
  gate at all. This stage is that workflow's last and nothing downstream runs to ask it (its own
266
162
  `handoff` sends commit and merge to `/do-git`, outside the workflow), so ask it here: put
267
- `awaitingGate.prompt` to the user through `AskUserQuestion` as a plain go/no-go. Its trigger
163
+ `awaitingGate.prompt` to the user through the question tool as a plain go/no-go. Its trigger
268
164
  is `always` — nothing in this review's own output answers it, so never approve it mechanically.
269
165
  No gate is ever auto-approved by `catch-up`, `clarification`-kind included — only a human or
270
166
  that gate's own owning skill decides it. On approve:
@@ -293,7 +189,7 @@ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
293
189
 
294
190
  ## Embedded feature research
295
191
 
296
- For an external fact gap or explicit request, follow the conditional protocol in `../do-document/references/embedded-research.md` before stage completion.
192
+ For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
297
193
 
298
194
  ## Boundaries
299
195
 
@@ -311,9 +207,8 @@ through specialist subagents (`/do-execute-plan`'s job) or replace human judgmen
311
207
 
312
208
  ## Running the review in a subagent
313
209
 
314
- A review over a large change can be dispatched whole to the `quality-guardian` archetype, which
315
- already declares code quality review among its capabilities, and which returns its report to the
316
- calling session. Use it when the analysis would otherwise consume context the caller still needs for
210
+ A review over a large change can be dispatched whole to the `reviewer` agent, which
211
+ returns its report to the calling session. Use it when the analysis would otherwise consume context the caller still needs for
317
212
  the work itself.
318
213
 
319
214
  This changes **where** the review runs and nothing else: the dispatched review loads the same rules
@@ -322,8 +217,10 @@ vocabulary. A dispatched review that reports differently from an in-session one
322
217
  variant.
323
218
 
324
219
  Review read-only at `frontier`, with an agent and model different from the author; pass `model:`
325
- where supported. Re-review only an open blocker tests cannot settle, after asking. See
326
- `references/MODEL_SELECTION.md`.
220
+ where supported. Follow the protocol `review --action start` prints; each `protocol.blocker` is a blocker rule.
221
+ Re-review only fixes automatically: read only `reviewedHead`..new head
222
+ (`"$DOFLOW" review-package --task=<task id> --base=<reviewedHead> --head=HEAD`), raise `rounds` by
223
+ one, and at round 3 ask the author to reconsider the approach. See `references/MODEL_SELECTION.md`.
327
224
 
328
225
  This is not the multi-task orchestration the boundary above rules out: one review, one subagent, one
329
226
  report back.
@@ -9,7 +9,7 @@ Markdown is not treated as a `languages/*.md` entry. The language files' require
9
9
  (Security, Async, Resource Management, Exception Handling, Performance) describe code-execution
10
10
  concerns that do not translate to prose — forcing markdown through that template would produce
11
11
  empty or fabricated sections, which is exactly the "invented metrics" problem that
12
- the guidance tree's `rules/RULE_03_QUALITY.md` warns against under "Professional Honesty". This file documents a
12
+ the guidance tree's `rules/RULES.md` (RULE_03) warns against under "Professional Honesty". This file documents a
13
13
  content-type-specific set of checks instead, run by `scripts/doc_quality_checker.py`.
14
14
 
15
15
  Load this file when the reviewed path is a `.md` file. There is no `rules/universal.md`
@@ -26,11 +26,17 @@ python scripts/doc_quality_checker.py <path>
26
26
 
27
27
  # JSON output — same finding-list shape as code_quality_checker.py --json
28
28
  python scripts/doc_quality_checker.py <path> --json
29
+
30
+ # Also report voice tells (check 7, advisory, off by default)
31
+ python scripts/doc_quality_checker.py <path> --voice
32
+
33
+ # After a rewrite: compare the numbers, names, dates, URLs and citations of two versions
34
+ python scripts/doc_quality_checker.py --facts-diff <before> <after>
29
35
  ```
30
36
 
31
37
  Every check below is deterministic and cite-the-match: a finding names the exact line, phrase,
32
38
  or reference that triggered it. There is no aggregate "quality score" — per "Professional Honesty"
33
- in the guidance tree's `rules/RULE_03_QUALITY.md`, an invented single-number score would claim more
39
+ in the guidance tree's `rules/RULES.md` (RULE_03), an invented single-number score would claim more
34
40
  precision than a pattern match can support. Treat every finding as "here is the specific thing to
35
41
  look at," not as a verdict; confirm it against the actual file before editing (the same
36
42
  manual-verification discipline this feature's own audit applies to its own tooling).
@@ -119,6 +125,22 @@ target rather than describing themselves as stale. Confirm the matched sentence
119
125
  the file's own content as outdated before treating it as a real finding; if it is a rule
120
126
  description quoting the word, it is not a defect.
121
127
 
128
+ ### 6. Uncited vendor claims
129
+
130
+ **Applies to:** any `.md` file under the reviewed path.
131
+
132
+ Flags sentences asserting specific behavior or interfaces of a named library, framework, runtime, SDK, or package without an authoritative citation (Context7 or resolvable HTTP/HTTPS URL) or an explicit `UNVERIFIED` marker.
133
+
134
+ **Interpretation:** advisory warning (`severity: "low"`, exit code 0). Verify claims via Context7, cite primary documentation with an HTTPS URL, or tag as `UNVERIFIED`.
135
+
136
+ ### 7. Voice tells (opt-in: `--voice`)
137
+
138
+ **Applies to:** prose in any `.md` file; fenced and inline code, block quotes, YAML front matter and link targets are skipped.
139
+
140
+ Flags overused and sales words, chatbot residue, knowledge-limit phrases, "serves as", dash and curly-quote habits, Title Case headings, bold density and repeated sentence openers, quoting each match. A weak tell (one dash, one bold word, "key") is shown only when two other tells share its paragraph.
141
+
142
+ **Interpretation:** advisory (`severity: "low"`, no score, exit code unchanged). The prose rules are the guidance tree's `references/ARTIFACT_VOICE.md`; confirm each match against the sentence before rewriting.
143
+
122
144
  ---
123
145
 
124
146
  ## Adding a New Content Type
@@ -0,0 +1,90 @@
1
+ # Review tools
2
+
3
+ ## PR Analyzer
4
+
5
+ Analyzes git diff between branches to assess review complexity and identify risks.
6
+
7
+ ```bash
8
+ # Analyze current branch against main
9
+ python scripts/pr_analyzer.py /path/to/repo
10
+
11
+ # Compare specific branches
12
+ python scripts/pr_analyzer.py . --base main --head feature-branch
13
+
14
+ # JSON output for integration
15
+ python scripts/pr_analyzer.py /path/to/repo --json
16
+ ```
17
+
18
+ **Extracted — what the analyzer detects** (universal; see also the language file for
19
+ language-specific signals):
20
+ - Hardcoded secrets (passwords, API keys, tokens, connection strings)
21
+ - SQL / query injection patterns
22
+ - Debug statements left in production code
23
+ - Lint / analyzer suppression annotations
24
+ - TODO/FIXME comments
25
+
26
+ **Language-specific detections** are defined in each `languages/*.md` file.
27
+
28
+ **Inferred — what the report concludes from those detections:**
29
+ - Complexity score (1-10)
30
+ - Risk categorization (critical, high, medium, low)
31
+ - File prioritization for review order
32
+ - Commit message validation
33
+
34
+ Report the two halves apart. A detection is a locator in a file; a conclusion is your reading of
35
+ several of them, and merging them into one line is how a reading stops being falsifiable.
36
+
37
+ ## Code Quality Checker
38
+
39
+ Analyzes source code for structural issues, code smells, and SOLID violations.
40
+
41
+ ```bash
42
+ # Analyze a directory
43
+ python scripts/code_quality_checker.py /path/to/code
44
+
45
+ # Analyze specific language
46
+ # Valid values: python, typescript, javascript, go, swift, kotlin, csharp, java, c, cpp, rust, ruby, php, dart
47
+ python scripts/code_quality_checker.py . --language java
48
+
49
+ # JSON output
50
+ python scripts/code_quality_checker.py /path/to/code --json
51
+ ```
52
+
53
+ **Universal thresholds:** declared in `review-policy.json`, never here. A guard fails the suite if a
54
+ number from it reappears in any document. Read what a run applies from the run: `--json` carries a
55
+ `policy` block naming the thresholds in force and the tiers that supplied them.
56
+
57
+ Three tiers resolve into one, lowest precedence first: the analyzer's built-in literal, the shipped
58
+ `review-policy.json` beside SKILL.md, then `agent-docs/review-policy.json` in the repository under
59
+ review, which a project's tech lead owns. A per-repo file is **partial** — declare only what you are
60
+ changing — and its absence is the ordinary state. A file that does not parse, names an unknown group,
61
+ or gives a threshold a non-integer value stops the analyzer naming the file and the problem rather
62
+ than reverting to defaults under a maintainer who believes their tuning applies. The policy also
63
+ declares severities, the verdict bands below, and the globs a review excludes.
64
+
65
+ The per-repo tier is found by walking up from the analysed path, so a target outside any repository
66
+ resolves none, which the `policy` block makes visible.
67
+
68
+ Language-specific checks are defined in each `languages/*.md` file.
69
+
70
+ ## Review Report Generator
71
+
72
+ Combines PR analysis and code quality findings into structured review reports.
73
+
74
+ ```bash
75
+ # Generate report for current repo
76
+ python scripts/review_report_generator.py /path/to/repo
77
+
78
+ # Markdown output
79
+ python scripts/review_report_generator.py . --format markdown --output review.md
80
+
81
+ # Use pre-computed analyses
82
+ python scripts/review_report_generator.py . \
83
+ --pr-analysis pr_results.json \
84
+ --quality-analysis quality_results.json
85
+ ```
86
+
87
+ **Verdicts:** the bands live in `review-policy.json` under `verdictBands`, for the same reason the
88
+ thresholds do. They are **declared, never applied**: they orient a reviewer reading a score, and
89
+ nothing computes the verdict from one. A verdict may therefore disagree with the band a score falls
90
+ in, provided the report says so and why.