@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
@@ -3,39 +3,93 @@
3
3
  A task is done when the ledger says so, never from a `[x]` box or a `state.md` row. Every call takes
4
4
  `--slug "<slug>"` (step 1's `feature_slug`) and `--json`; `<task id>` is the plan id (`A.1`).
5
5
 
6
- **At resume**, read `"$DOFLOW" task-attempt --action status --slug "<slug>" --json` and branch on
7
- each task's `derived`: `done` skip; `ready` claim; `running` inspect `active` (owner, start) and
8
- release it if that worker is gone; `blocked` report it; `pending` an earlier phase is open. A task in
9
- `unclaimedChecked` is ticked without a COMPLETED attempt: claim and verify it, or untick it.
6
+ **Read the JSON, not the exit code.** Exit 0: `claimed`, `applied`, `released`, `started`, `paused`,
7
+ `cancelled`, `resumed`, `reopened`, `usage-recorded`, or a `status`/`inspect` read. Exit 1:
8
+ `disposition` `refused`, `stale` or `ack-required`, with a `reason`. Exit 2: `{ ok: false, error }`.
9
+ No parseable JSON means the runtime is too old: treat it as `unsupported`, do not dispatch or record
10
+ a refusal, report the runtime version.
10
11
 
11
- **Before dispatch**, claim. `--mode` is `subagent`, `sequential` or `manual`:
12
+ **Which flow.** A plan headed `**Task graph:** v1` follows every section below. Any other plan keeps
13
+ the legacy flow: skip resume and claim without `--epoch`.
14
+
15
+ **Resume first, every session (graph plan).** Before any other call:
16
+
17
+ ```bash
18
+ "$DOFLOW" task-attempt --action resume --slug "<slug>" --json
19
+ ```
20
+
21
+ It answers `ack-required` (exit 1) with `report` and `digest`. Read `report` (`control`, `epoch`,
22
+ `activeAttempts` with owner, age, `execWorktree`; `changedSources` and `doneChanged`, files edited
23
+ since a claim or COMPLETED; `unverifiable`, `staleContext`, `graph.changed`), act on it, then ack:
12
24
 
13
25
  ```bash
14
- "$DOFLOW" task-attempt --action claim --slug "<slug>" --task "<task id>" --owner "<agent>" --mode subagent --json
26
+ "$DOFLOW" task-attempt --action resume --slug "<slug>" --ack <digest> --by "<who>" --json
15
27
  ```
16
28
 
17
- `claimed` returns the `token`; keep it. A refusal (exit 1) means do not dispatch: `active-attempt`,
18
- `already-done`, `unmet-phase` (an earlier-phase task lacks a COMPLETED attempt; `unmet` lists them)
19
- or `unknown-task`.
29
+ `resumed` returns the new `epoch`; `report-changed` means state moved, so read the new report and
30
+ ack its digest. Keep the epoch in session memory, never in `state.md` or any file.
20
31
 
21
- **After the agent returns**, verify in the parent run, record the result as evidence after the
22
- claim (`--kind test-result --observed-command "<cmd>" --observed-exit <n>`, schema in the guidance
23
- tree's `references/EVIDENCE_LEDGER.md`), then finish with the evidence id it returned:
32
+ **Autonomous runs** with no run (`control: 'none'`) start one with an explicit budget instead of
33
+ acking; `started` returns `epoch: 1`:
24
34
 
25
35
  ```bash
26
- "$DOFLOW" task-attempt --action finish --slug "<slug>" --task "<task id>" --token <token> --result COMPLETED --evidence-id "<id>" --json
36
+ "$DOFLOW" task-attempt --action start --slug "<slug>" --by "<who>" --budget-attempts <n> [--budget-tokens <n>] --json
27
37
  ```
28
38
 
29
- COMPLETED needs an active, non-stale `test-result` that exited 0, is bound to the slug or the task
30
- id, and was observed no earlier than the claim. The refusal names the reason; fix it and finish again.
31
- `plan-changed` means the task's plan line was edited after the claim: release, reread, claim again.
39
+ **Read state** with `--action status` (or `inspect` for graph, budgets and run totals) and branch on
40
+ each task's `derived`: `done` skip; `ready` claim (`reason` `reopened` or `plan-changed-after-done`:
41
+ the done attempt no longer counts, redo it); `running` inspect `active` (owner, start), release if
42
+ that worker is gone; `failed` claim again while `budget.used < budget.limit`, else replan;
43
+ `cancelled` clears only on resume; `blocked` report it; `pending` a dependency or earlier phase is
44
+ open (`unmet`, `held`). A task in `unclaimedChecked` is ticked with no COMPLETED attempt: claim and
45
+ verify it, or untick it.
46
+
47
+ **Claim before dispatch**, from the main session; a worker never claims. `--owner` is the task's
48
+ declared role; `--mode` (`subagent`, `sequential`, `manual`) must be the executor that will run. A
49
+ graph plan passes `--epoch`, a worker run `--exec-worktree <path>` (never the main session's), and a
50
+ run with a token limit `--reserve-tokens <n>` on every claim:
51
+
52
+ ```bash
53
+ "$DOFLOW" task-attempt --action claim --slug "<slug>" --task "<task id>" --owner "<declared role>" --mode subagent --epoch <n> [--exec-worktree <path>] [--reserve-tokens <n>] --json
54
+ ```
55
+
56
+ `claimed` returns the `token`; the worker finishes with it. A refusal means do not dispatch:
57
+ `active-attempt`, `already-done`, `unmet-phase`, `unmet-dependency`, `dependency-held` (`unmet`,
58
+ `held` list them), `unknown-task`, `resume-required` (resume first), `run-paused`, `run-cancelled`,
59
+ `owner-mismatch` (`declared` names the role; `--owner-override "<reason>"` only when deliberate),
60
+ `worker-session`, `budget-exhausted`, `cancelled` (resume clears it), `reservation-required`,
61
+ `aggregate-unaccounted` (on each ended attempt left unreported, `--action report-usage --task <id>
62
+ --token <n> --tokens <n> --tokens-basis …`) or `aggregate-exhausted`.
63
+
64
+ **After the agent returns**, verify in the parent run, record evidence after the claim (`--kind
65
+ test-result --observed-command "<cmd>" --observed-exit <n>`; item schema: SKILL.md step 6),
66
+ and finish with the returned evidence id:
67
+
68
+ ```bash
69
+ "$DOFLOW" task-attempt --action finish --slug "<slug>" --task "<task id>" --token <token> --result COMPLETED --evidence-id "<id>" [--tokens <n> --tokens-basis measured|estimated] --json
70
+ ```
71
+
72
+ COMPLETED needs an active, non-stale `test-result` that exited 0, bound to the slug or task id,
73
+ observed no earlier than the claim; on refusal fix the named reason and finish again.
74
+ `plan-changed`: the plan line was edited after the claim, so release, reread, claim again.
75
+ `--tokens` and `--tokens-basis` go together, on finish or release; report them under a token limit.
76
+
77
+ **Otherwise** finish `BLOCKED`, `ABANDONED` or `INCONCLUSIVE` (no evidence), or `FAILED` with
78
+ `--reason "<why>"`; or abandon a dispatch with `--action release --token <token> --reason "<why>"`.
79
+ `stale` (exit 1): the token is no longer active, so a late result from an abandoned or cancelled
80
+ (`attempt-cancelled`) dispatch changed nothing; read `status`. There is no lease: only an explicit
81
+ release or cancel clears a crashed claimer.
82
+
83
+ **Run controls** (main session only, each with `--by "<who>"`):
32
84
 
33
- **Otherwise** finish with `BLOCKED`, `ABANDONED` or `INCONCLUSIVE` (no evidence needed), or abandon a
34
- dispatch with `--action release --token <token> --reason "<why>"`. `stale` (exit 1) means the token
35
- is no longer the active one, so a late result from an abandoned dispatch changed nothing; read
36
- `status`. There is no lease: a crashed claimer is cleared only by an explicit release.
85
+ - `--action pause --reason "<why>"`: claims refuse `run-paused`; active attempts may still finish.
86
+ - `--action cancel --reason "<why>"`: marks every active attempt of the run cancelled (`--adopt-unowned` adds attempts with no run; `--task <id> --token <n>` limits it to one). It stops no process.
87
+ - An acknowledged resume sets a paused or cancelled run running and clears its cancels.
88
+ - `--action reopen --task <id> --token <done token> --reason "<why>"`: the done attempt stops counting, the task is `ready` with `reason: reopened`; `dependentsActive` lists running dependents.
89
+ - Refusals: `run-exists` resume it; `identity-solo` or `worker-session` act from the main session; `control-unchanged` already so; `foreign-run` cancel from that run; `no-active-attempt`/`token-mismatch` (attempt cancel) or `not-done`/`token-mismatch` (reopen) read `status` for the token; `run-cancelled` resume first.
37
90
 
38
- **Before step 10**, read `status`; `complete: true` means every plan task has a COMPLETED attempt.
39
- `orchestrate` refuses to complete this stage while a ledger exists and is incomplete, and records
40
- `unverified` when the feature has no ledger. Exit 2 (malformed input, torn or newer-version store)
41
- leaves the file unchanged: report it, do not repair it.
91
+ **Before step 10**, read `status`: `complete: true` means every task has a COMPLETED attempt (in a
92
+ graph plan, with its plan line unchanged; else `plan-changed-after-done`). `orchestrate` refuses to
93
+ complete this stage while a ledger exists and is incomplete, and records `unverified` with no
94
+ ledger. Exit 2 (malformed input, torn or newer-version store) leaves the file unchanged: report it,
95
+ do not repair it.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: do-flow
3
- description: "Auto-chain the doflow spec-driven flow (brainstorm → design → plan → implement → test → review), pausing only at defined approval gates. Use when the user wants the lifecycle run end-to-end, says 'build this feature end-to-end', 'run the doflow chain' or 'take this from idea to implementation', or /do classified the request as a feature. A plain change request that names no /do-* skill goes to /do first, which decides whether it needs this flow. Skip it for single-file fixes, questions and reviews."
3
+ description: "Run the doflow feature chain end to end, from idea to reviewed code. Use when the user wants the whole lifecycle run, says 'build this feature end-to-end', 'run the doflow chain' or 'take this from idea to implementation', or /do classified the request as a feature. A plain change request that names no /do-* skill goes to /do first, which decides whether it needs this flow. Skip it for one phase on its own (that phase's /do-* skill), single-file fixes, questions and reviews."
4
4
  argument-hint: "[feature description] [--from brainstorm|design|plan|implement|test|review]"
5
5
  effort: high
6
6
  ---
@@ -46,7 +46,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
46
46
  signal it rests on in one line. If two classes fit equally, do **not** take the longer one: show
47
47
  what each would run —
48
48
  `"$DOFLOW" workflow --task-class "<candidate>" --json`, quote its `stageIds` — and ask via
49
- `AskUserQuestion`, one option per candidate.
49
+ the question tool, one option per candidate.
50
50
 
51
51
  3. **Validate the class through the runtime** — a proposal is not a selection until this returns:
52
52
 
@@ -98,7 +98,7 @@ not declare is not run here, however familiar it is from the `feature` chain.
98
98
  7. **Stop at the gates the resolved workflow declares** — read them from `workflow.gates`, each
99
99
  attached to a stage by `afterStage`. `trigger: always` stops every time; any other trigger stops
100
100
  only when that named condition actually holds. Ask with the gate's own `prompt` via
101
- `AskUserQuestion`. For the `feature` workflow's three, which behave as they always have:
101
+ the question tool. For the `feature` workflow's three, which behave as they always have:
102
102
  - **`gate-0`** (after discovery, trigger `unresolved-clarifications`) — a safety net, not the
103
103
  normal path: `do-brainstorm` resolves ambiguities to zero via its own loop, so this fires only
104
104
  if a `[NEEDS CLARIFICATION]` marker survived an aborted session. Ask one question per marker
@@ -107,9 +107,8 @@ not declare is not run here, however familiar it is from the `feature` chain.
107
107
  tree's `references/WORKFLOW_HANDOFF.md` (stage `discovery`, channel `question`) so the answers
108
108
  are registered and cited; do-brainstorm already recorded discovery's handoff, so record none.
109
109
  - **`gate-a`** (after planning) — the conversational checkpoint on top of the already-existing
110
- hard hook (`pre-implement-gate.sh`, which blocks source edits until `requirement.md`,
111
- `design.md` and `plan.md` exist and remains the real enforcement regardless of what happens
112
- here). Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
110
+ hard hook (`pre-implement-gate.sh`; its scope is in `references/DOFLOW_CHAIN.md`), which remains
111
+ the real enforcement regardless of what happens here. Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
113
112
  - **`gate-b`** (after review) — no enforcement hook exists for this today; `/do-git` is a
114
113
  separate, always-manually-invoked skill. Frame the question by the review's own approval
115
114
  status: on `CHANGES REQUESTED`, foreground addressing the findings rather than offering a bare
@@ -147,14 +146,14 @@ not declare is not run here, however familiar it is from the `feature` chain.
147
146
  "$DOFLOW" decision --action add --topic "<key>" --statement "<text>" --channel gate --stage "<stage the gate follows>" --rationale "<text>" --json
148
147
  ```
149
148
 
150
- 8. **Never skip a gate on an ambiguous answer** — an unanswered or unclear response to any
151
- `AskUserQuestion` means stop and ask again, per this repo's `RULE_04_QUESTIONS`. When the
149
+ 8. **Never skip a gate on an ambiguous answer** — an unanswered or unclear response to the
150
+ question tool means stop and ask again, per RULE_04 in `rules/RULES.md`. When the
152
151
  terminal stage completes, state `workflow.handoff` as the next step rather than continuing into
153
152
  it.
154
153
 
155
154
  ## Conditional research within a feature
156
155
 
157
- Before a feature stage relies on an external fact that local or user evidence cannot establish, or when the developer explicitly asks a research question, let that stage follow `../do-document/references/embedded-research.md`. The stage opens a same-task `research-request`, records a source-linked finding or gap, then resumes itself without adding a seventh workflow stage. On resume, read request status and context pack. A blocking unanswered question prevents stage completion; neither research nor a retrieved page approves any existing gate. Do not trigger external search merely because a feature began.
156
+ Before a feature stage relies on an external fact that local or user evidence cannot establish, or when the developer explicitly asks a research question, let that stage follow `../do-document/references/embedded-research.md`. The stage opens a same-task `research-request`, records a source-linked finding or gap, then resumes itself without adding a seventh workflow stage. On resume, read request status and context pack. A blocking unanswered question prevents stage completion; neither research nor a retrieved page approves any existing gate. Feature discovery and design run the ideation pass; otherwise search only for a gap or an explicit request.
158
157
 
159
158
  ## Boundaries
160
159
  **Will:**
@@ -127,8 +127,8 @@ meant. Re-proposing the same class will be rejected the same way.
127
127
 
128
128
  ## The hard hook does not know about classes
129
129
 
130
- `pre-implement-gate.sh` keys on branch and artifact state: if the current branch already carries a
131
- feature directory missing `requirement.md`, `design.md` or `plan.md`, it denies source edits
130
+ `pre-implement-gate.sh` keys on branch and artifact state (what it denies: SKILL.md step 7): if the
131
+ current branch already carries a feature directory the gate rejects, it denies source edits
132
132
  regardless of the class in play — so a `bug` or `trivial-edit` workflow started on that branch will
133
133
  be blocked at its implementation stage. Surface the hook's message as written. Do not route around
134
134
  it, and do not create placeholder artifacts to satisfy it.
@@ -72,6 +72,10 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
72
72
 
73
73
  ## Safety Gates
74
74
 
75
+ ### Git Operations & Safety Invariants
76
+ - Run `git status && git branch` first; use feature branches for ALL work; never force-push main/master.
77
+ - Commit incrementally with descriptive messages; review `git diff` before staging; create a restore-point commit before high-risk changes.
78
+
75
79
  The following behaviors from today's skill are carried over unchanged:
76
80
 
77
81
  - **State checks** → `git status` before anything that could discard uncommitted work
@@ -46,13 +46,10 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
46
46
  `--from-review`: treat that review's findings as the work list, most-severe first, in the
47
47
  order the review itself ranked them.
48
48
  - Invoked with a description: treat that as the work list directly.
49
- - If the current branch has an active DoFlow feature (`"$DOFLOW" paths --json` resolves a
50
- `feature_dir`) and its `plan.md` already has a task matching the request, say so and offer
51
- `/do-execute-plan` instead — that machinery exists for exactly this case, and duplicating it
52
- here would just be a second, worse orchestrator. Proceed directly only if the user confirms
53
- the lighter path, or if no such plan or matching task exists.
49
+ - If an active DoFlow feature's `plan.md` has a task matching the request (`"$DOFLOW" paths --json`), offer `/do-execute-plan` instead. Proceed directly only if the user confirms or no matching plan task exists.
54
50
  - Never block on a missing `requirement.md` / `design.md` / `plan.md`. Those artifacts are the
55
51
  chain's business, not a precondition of this skill.
52
+ - MCP `context7`: when implementing against external libraries or upgrading dependencies, verify APIs per `MCP_Context7.md`.
56
53
 
57
54
  **Stop when** every work-list finding the contract names has an answer or a stated gap, **and** the last round produced no new work-list finding. A round that only restates what you already have is the last round. Report the remaining gaps rather than continuing.
58
55
 
@@ -97,7 +94,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
97
94
  computes, so a zero exit is not a green light.
98
95
  - **`STOP`** — refuse to modify source. Report which claim is conflicted and what evidence
99
96
  disagrees, then stop. Do not edit anyway.
100
- - **`ASK_USER`** — a decision is owed by the user. Ask it through the `RULE_04_QUESTIONS.md`
97
+ - **`ASK_USER`** — a decision is owed by the user. Ask it through RULE_04 (`rules/RULES.md`)
101
98
  mechanism and wait; editing first would decide it silently on their behalf.
102
99
  - **`ENTER`** — proceed to the context-pack call below. In standalone mode this includes
103
100
  `NEEDS_EVIDENCE`: the unmet contract is reported, not enforced — relay the missing
@@ -111,8 +108,9 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
111
108
  "$DOFLOW" context-pack --task-id "<task id>" --json
112
109
  ```
113
110
  This verb exits 1 on an empty pack by design — nothing recorded is not the same as nothing
114
- needed — and that non-zero exit is never read as success. Because this call only runs after the
115
- evidence check above already found something recorded for this task id, an exit 1 here means
111
+ needed — and that non-zero exit is never read as success; exit 3 means overflow: the pack is
112
+ complete, act on `overflowAction.message` and report the gap. Because this call only runs after
113
+ the evidence check above already found something recorded for this task id, an exit 1 here means
116
114
  the compiled pack still held nothing usable (evidence with no linked claims, most likely):
117
115
  treat that as a mismatch worth naming in step 6's report, not as license to proceed as though
118
116
  there were no prior context to look for. On a normal, non-empty pack, carry its evidence and
@@ -140,7 +138,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
140
138
  duplicates the host's own edit-approval mechanisms.
141
139
  - Stop after the change set only when one of two things is true: the user asked for the plan
142
140
  rather than the change ("show me what you'd change first"), or naming the change set surfaced
143
- a genuine user-owned decision — then ask it per `RULE_04_QUESTIONS.md` and wait, because
141
+ a genuine user-owned decision — then ask it per RULE_04 (`rules/RULES.md`) and wait, because
144
142
  editing first would decide it silently.
145
143
 
146
144
  5. **Implement**:
@@ -67,21 +67,20 @@ not have.
67
67
  ```bash
68
68
  "$DOFLOW" context-pack --task-id "<task id>" --json
69
69
  ```
70
- **Exit 1 means the pack came back empty.** By this point `do-design` should already have batched
71
- its own stage-boundary evidence and claims (its step 8), so an empty pack here carries more
72
- weight than it does at design time: either that batch never ran, or this task id doesn't match
73
- the one design used. Treat it as advisory rather than blocking — plan's hard gate is artifact
74
- existence only — but say so plainly in this stage's report, and in `plan.md`'s own §3 "Research &
75
- Decisions": a decision written straight from `requirement.md`/`design.md` prose, with no compiled
76
- pack behind it, must not be recorded as if it traced to prior evidence it doesn't have. When the
77
- pack is non-empty, read it alongside `requirement.md`, `design.md`, and the constitution.
70
+ **Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
71
+ `overflowAction.message` and report the gap.** By this point `do-design` should have batched
72
+ evidence and claims (step 8), so an empty pack carries weight: either the batch never ran or the
73
+ task id mismatched. Empty packs are advisory; prerequisites check artifact existence only. Report
74
+ them in this stage's report and `plan.md` §3 "Research & Decisions"; prose without a compiled
75
+ pack cannot claim prior evidence. When non-empty, read it alongside `requirement.md`,
76
+ `design.md`, and the constitution.
78
77
  **Also read `specs.md` when step 1's `has_specs` is true** — use that flag, never a filesystem
79
78
  check of your own, and read the `specs` path the resolver returned. `/do-design` moves the
80
79
  interface and data-model contracts out of `design.md` into `specs.md` §1 as numbered `IC-###`
81
- entries, so on a feature that has one, `design.md`'s §4/§5 are a pointer and the contracts this
80
+ entries, so on a feature that has one, `design.md`'s API / Interface Contracts and Data Model sections are a pointer and the contracts this
82
81
  plan must decompose toward live only in `specs.md`. Planning from `design.md` alone on such a
83
82
  feature plans against a pointer. When `has_specs` is false (an old-layout feature dir, which never
84
- had a `specs.md`), the contracts are still in `design.md` §4/§5 and there is nothing extra to
83
+ had a `specs.md`), the contracts are still in `design.md` (API / Interface Contracts, Data Model) and there is nothing extra to
85
84
  read. Read
86
85
  `constitution_base`,
87
86
  then read `constitution_local` **only when `has_constitution_local` is true** — use that flag,
@@ -116,15 +115,17 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
116
115
  Read `references/ARTIFACT_VOICE.md` at the same point: it carries the prose rules the artifact's sentences follow, and the carve-outs where one of those rules meets a construct the checker parses.
117
116
  This stage fills the plan from requirement + design + constitution rather than by eliciting, so
118
117
  it writes no dialogue log — its sibling stages' `intention/`/`design/` question files have no
119
- counterpart here. Should a future revision of this skill add an `AskUserQuestion` clarification
118
+ counterpart here. Should a future revision of this skill add a question-tool clarification
120
119
  loop, each of its rounds logs to `plan-<NN>-question.md` at the feature root exactly as
121
120
  `/do-brainstorm` and `/do-design` log theirs to their own subdirectories, numbered from step 1's
122
121
  `plan_next_round`.
123
- 6. **Constitution Check (advisory gate)** — evaluate the plan against both tiers as reconciled in
124
- step 4. On a violation, STOP and revise the approach before continuing, then record PASS/FAIL in
125
- the plan. The verdict is **advisory**: it is recorded in `plan.md` §2 "Constitution Check" and nothing downstream
126
- blocks on it — the chain's one hard gate covers artifact existence only. Stopping on a violation
127
- is a discipline this skill observes, not something a hook enforces.
122
+ 6. **Constitution Check (exit gate)** — evaluate the plan against both tiers as reconciled in step
123
+ 4. Record one row per principle in `plan.md` §2: its id, its tier (MUST unless it says `**Tier:**
124
+ SHOULD`) and PASS/FAIL; a base MUST that tier-2 makes SHOULD names that overlay version in its
125
+ row. On a violation, revise the approach first. A MUST marked FAIL or left
126
+ without a row refuses step 11's handoff; a SHOULD FAIL is a note. That refusal is the runtime's,
127
+ beside the hard hook that covers artifact existence (`references/DOFLOW_CHAIN.md` scopes both).
128
+ There is no waiver: revise the plan, or a person amends the constitution with `/do-constitution`.
128
129
  7. **Decompose into Tasks (section 8)** — dependency-ordered, `[US#]`-traced to the requirement's
129
130
  user stories, owner+files named per task, with checkpoints and completion criteria.
130
131
  Read the guidance tree's `references/ORCHESTRATION.md` and
@@ -132,7 +133,7 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
132
133
  `--depth shallow|normal|deep` is the single granularity knob: it sets how finely a phase is
133
134
  split into tasks and how much detail each task carries. Default `normal`.
134
135
  **Why explicit task scoping and `[P]` markers**: Specifying concrete file paths (`files: [...]`)
135
- and named specialist owners (`system-architect`, `core-implementer`, `quality-guardian`) per task
136
+ and agent-spec owners (review tasks name `reviewer`) per task
136
137
  enables `/do-execute-plan` to compute write-set isolation (`parallel-check`). Tasks with disjoint
137
138
  file sets run concurrently without merge conflicts, while overlapping tasks are safely serialized.
138
139
  **Mark `[P]` by default:** parallel execution is the framework default, so apply `[P]` to every
@@ -160,8 +161,13 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
160
161
  table: `primary` if it owns a task via `files:`, `dependency-only` if it's only ever reached via
161
162
  `depends-on:`. A single-repo result → `N/A: single-repo feature`. Derivation only — no branch is
162
163
  created here (`/do-execute-plan`'s job, lazily, per repo).
163
- 9. **Validate** — run the advisory consistency check and surface any findings verbatim:
164
+ 9. **Self-review, then validate** — reread the plan against itself and fix it inline: every
165
+ requirement id and `[US#]` story is traced to a task or a §7 row, no TBD/TODO/"later" placeholder
166
+ is left, and no task is coarser than `--depth` sets (split one that is). `plan-check` scans the
167
+ first two and prints each one as a `findings` entry with its `path:line`. Fix every entry, then run
168
+ the advisory consistency check and surface its findings verbatim:
164
169
  ```bash
170
+ "$DOFLOW" plan-check "<plan path>" --json
165
171
  "$DOFLOW" validate "<plan path>"
166
172
  ```
167
173
  This also verifies each `### Task Summary` rollup row against the `- [ ]` lines under its
@@ -196,9 +202,13 @@ Item schema, provenance rules, and the refused-field list: the guidance tree's `
196
202
  12. **Stop** — report the plan path, Constitution Check result, the task count (`[P]`/sequential),
197
203
  and the derived branch name/repo count when the Repo Branch Plan is populated.
198
204
 
205
+ ### Planning Efficiency Invariants
206
+ - Identify concurrent versus sequential operations across disjoint write sets.
207
+ - Map explicit dependencies between tasks; batch tool calls; maximize parallel execution gains.
208
+
199
209
  ## Embedded feature research
200
210
 
201
- For an external fact gap or explicit request, follow the conditional protocol in `../do-document/references/embedded-research.md` before stage completion.
211
+ For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
202
212
 
203
213
  ## Boundaries
204
214
  **Will:** propose a task class and have the runtime validate it, read requirement + design + specs
@@ -43,14 +43,17 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
43
43
  ```
44
44
 
45
45
  When `status` is `answered` and `agrees` is `false`, say so in one line and keep or change the level
46
- by your own judgement. Record the level used with `"$DOFLOW" advise --action outcome --pick-id
47
- "<pickId>" --actual "<level>"`. Skip both calls when `status` is not `answered`.
46
+ by your own judgement. Record the level used, and skip both calls when `status` is not `answered`:
47
+
48
+ ```bash
49
+ "$DOFLOW" advise --action outcome --pick-id "<pickId>" --actual "<level>"
50
+ ```
48
51
 
49
52
  ```bash
50
53
  "$DOFLOW" verify --task-id "<task id>" --risk "<LOW|MEDIUM|HIGH|CRITICAL>" --action contract --json
51
54
  ```
52
55
 
53
- Report, before a single tier runs:
56
+ Report, before any tier runs:
54
57
  - the compiled `tiers[]` in the order returned — that list, and nothing else, is what will run;
55
58
  - the `riskLevel` it compiled at and the `maxRecoveryIterations` it carries;
56
59
  - `detection.absent` — the command roles the runtime could not find in this repo's manifests
@@ -106,7 +109,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
106
109
 
107
110
  ## Embedded feature research
108
111
 
109
- For an external fact gap or explicit request, follow the conditional protocol in `../do-document/references/embedded-research.md` before stage completion.
112
+ For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
110
113
 
111
114
  ## Boundaries
112
115
  **Will:** Run the compiled tiers, report every status (including unreached), coverage, and failure traces; hand off the current stage in a chain.
@@ -13,10 +13,15 @@
13
13
 
14
14
  ## Principles
15
15
 
16
- ### [PRINCIPLE_1_NAME]
16
+ <!-- One `### <ID> — <name>` heading per principle. A principle is MUST unless its body has
17
+ `**Tier:** SHOULD`. An ID equal to a base one (P1–P6) replaces that base principle. -->
18
+
19
+ ### R1 — [PRINCIPLE_1_NAME]
20
+ **Tier:** MUST
17
21
  [PRINCIPLE_1_STATEMENT — testable and non-negotiable.]
18
22
 
19
- ### [PRINCIPLE_2_NAME]
23
+ ### R2 — [PRINCIPLE_2_NAME]
24
+ **Tier:** SHOULD
20
25
  [PRINCIPLE_2_STATEMENT.]
21
26
 
22
27
  ## Constraints
@@ -25,4 +30,5 @@
25
30
  ## Governance
26
31
  - Amendments: bump semver, fill the Sync Impact Report, re-run dependent gates.
27
32
  - `/do-plan`'s Constitution Check MUST evaluate against both tiers together (these rules taking
28
- precedence). Its verdict is advisory — recorded, not blocking.
33
+ precedence). A MUST principle marked FAIL or left without a row refuses the planning stage's exit;
34
+ a SHOULD FAIL is advisory.
@@ -3,7 +3,7 @@
3
3
  **Feature:** [NNN-slug] · **Design:** ./design.md · **Maturity:** Draft · **Created:** [DATE]
4
4
 
5
5
  > Entity/data model and data-flow diagrams a design decided, split out of design.md's own narrative
6
- > (§5/§6) and specs.md's interface-contract detail (§1). Reads ./design.md; distinct from ./specs.md
6
+ > (Data Model and Sequence / Data Flow) and specs.md's interface-contract detail (§1). Reads ./design.md; distinct from ./specs.md
7
7
  > the way a persisted shape and the flows that move through it are distinct from the contracts that
8
8
  > expose them.
9
9
  >