@khoavu882/doflow 2.0.0-beta.5 → 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 (471) hide show
  1. package/README.md +12 -11
  2. package/bin/doflow.js +21 -11
  3. package/core/.antigravity-plugin/plugin.json +1 -2
  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/permission-audit.sh +3 -0
  9. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  10. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  11. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  12. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  13. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  14. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  15. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  16. package/core/harnesses/claude/settings/settings.json +18 -0
  17. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  18. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  19. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  20. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  21. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  22. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  23. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  24. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  25. package/core/harnesses/codex/hooks/lib.sh +44 -25
  26. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  27. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  28. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  29. package/core/harnesses/codex/hooks/subagent-audit.sh +1 -0
  30. package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
  31. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  32. package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
  33. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  34. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  35. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  36. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  37. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  38. package/core/harnesses/copilot/hooks/doflow.json +57 -0
  39. package/core/harnesses/kiro/agents/doflow.json +1 -1
  40. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  41. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +1 -0
  42. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +1 -0
  43. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +1 -0
  44. package/core/harnesses/kiro/hooks/session-start.sh +1 -0
  45. package/core/harnesses/kiro/hooks/stop-check.sh +1 -0
  46. package/core/harnesses/pi/extensions/doflow-guard.js +8 -0
  47. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +0 -1
  48. package/core/harnesses/shared/hooks/bridge/bridge.sh +102 -9
  49. package/core/harnesses/shared/hooks/bridge/envelope.jq +87 -18
  50. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  51. package/core/harnesses/shared/hooks/bridge/respond.sh +10 -2
  52. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
  53. package/core/harnesses/shared/hooks/policies/capture-failure.sh +48 -15
  54. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  55. package/core/harnesses/shared/hooks/policies/contract.sh +3 -0
  56. package/core/harnesses/shared/hooks/policies/deny-json.sh +2 -11
  57. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  58. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  59. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  60. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  61. package/core/harnesses/shared/hooks/policies/lib.sh +63 -40
  62. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +3 -2
  63. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +213 -12
  64. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +114 -38
  65. package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
  66. package/core/harnesses/shared/hooks/policies/stop-check.sh +20 -9
  67. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +5 -2
  68. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  69. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +60 -155
  70. package/core/harnesses/shared/hooks/stream-hook-runner.js +47 -8
  71. package/core/harnesses/shared/locator/doflow-run +2 -3
  72. package/core/registry/advice.json +3 -3
  73. package/core/registry/assets.json +55 -82
  74. package/core/registry/capabilities.json +12 -0
  75. package/core/registry/contracts.json +58 -31
  76. package/core/registry/contribution-points.json +32 -0
  77. package/core/registry/gates.json +32 -0
  78. package/core/registry/guidance-caps.json +40 -0
  79. package/core/registry/harnesses.json +1442 -363
  80. package/core/registry/lifecycle.json +485 -304
  81. package/core/registry/mcp.json +5 -1
  82. package/core/registry/models.json +7 -1
  83. package/core/registry/package-templates/README.md +19 -0
  84. package/core/registry/package-templates/agent/files/agent.md +9 -0
  85. package/core/registry/package-templates/agent/template.json +4 -0
  86. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  87. package/core/registry/package-templates/capability-provider/template.json +11 -0
  88. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  89. package/core/registry/package-templates/debate-preset/template.json +4 -0
  90. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  91. package/core/registry/package-templates/review-preset/template.json +4 -0
  92. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  93. package/core/registry/package-templates/skill/template.json +4 -0
  94. package/core/registry/package-templates/worker/files/worker.json +92 -0
  95. package/core/registry/package-templates/worker/template.json +11 -0
  96. package/core/registry/packages/doflow/doflow-package.json +15 -0
  97. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  98. package/core/registry/protocols.json +61 -0
  99. package/core/registry/routes.json +17 -0
  100. package/core/registry/rules.json +431 -0
  101. package/core/registry/settings.json +276 -0
  102. package/core/registry/storage.json +679 -31
  103. package/core/registry/telemetry.json +236 -0
  104. package/core/registry/transcripts.json +142 -0
  105. package/core/registry/verification.json +76 -1
  106. package/core/registry/workflows.json +55 -0
  107. package/core/shared/agent-specs/core-implementer.md +3 -0
  108. package/core/shared/agent-specs/delivery-lead.md +68 -0
  109. package/core/shared/agent-specs/quality-guardian.md +5 -1
  110. package/core/shared/agent-specs/research-writer.md +10 -3
  111. package/core/shared/agent-specs/reviewer.md +53 -0
  112. package/core/shared/agent-specs/spec-analyst.md +5 -6
  113. package/core/shared/agent-specs/system-architect.md +5 -1
  114. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  115. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  116. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  117. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  118. package/core/shared/guidance/pointers/codex.md +1 -4
  119. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  120. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  121. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  122. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  123. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  124. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  125. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  126. package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
  127. package/core/shared/guidance/rules/RULES.md +45 -0
  128. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  129. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  130. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  131. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  132. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  133. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  134. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  135. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  136. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  137. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  138. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  139. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
  140. package/core/shared/scripts/doflow/bin/doflow-run +149 -34
  141. package/core/shared/skills/do/SKILL.md +12 -10
  142. package/core/shared/skills/do/references/advice_calls.md +26 -0
  143. package/core/shared/skills/do/references/pm_routing.md +1 -2
  144. package/core/shared/skills/do/references/program_mode.md +31 -0
  145. package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
  146. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
  147. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  148. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  149. package/core/shared/skills/do-code-review/SKILL.md +41 -144
  150. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  151. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  152. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  153. package/core/shared/skills/do-design/SKILL.md +18 -17
  154. package/core/shared/skills/do-diagnose/SKILL.md +14 -4
  155. package/core/shared/skills/do-document/SKILL.md +11 -1
  156. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  157. package/core/shared/skills/do-document/references/embedded-research.md +18 -6
  158. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  159. package/core/shared/skills/do-execute-plan/SKILL.md +15 -58
  160. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  161. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  162. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +26 -1
  163. package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
  164. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  165. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  166. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  167. package/core/shared/skills/do-flow/SKILL.md +8 -9
  168. package/core/shared/skills/do-flow/references/task_classes.md +2 -2
  169. package/core/shared/skills/do-git/SKILL.md +4 -0
  170. package/core/shared/skills/do-implement/SKILL.md +4 -7
  171. package/core/shared/skills/do-plan/SKILL.md +26 -15
  172. package/core/shared/skills/do-test/SKILL.md +7 -4
  173. package/core/shared/templates/doflow/constitution-template.md +9 -3
  174. package/core/shared/templates/doflow/data-model-template.md +1 -1
  175. package/core/shared/templates/doflow/design-template.md +113 -16
  176. package/core/shared/templates/doflow/plan-template.md +11 -10
  177. package/core/shared/templates/doflow/question-log-template.md +14 -2
  178. package/core/shared/templates/doflow/requirement-template.md +1 -1
  179. package/core/worker-evidence/antigravity/checks.json +14 -0
  180. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  181. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  182. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  183. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  184. package/core/worker-evidence/codex/checks.json +38 -0
  185. package/package.json +10 -6
  186. package/src/adapters/antigravity/index.js +143 -66
  187. package/src/adapters/claude/index.js +24 -4
  188. package/src/adapters/codex/agents.js +25 -15
  189. package/src/adapters/codex/index.js +48 -13
  190. package/src/adapters/codex/native-projection.js +6 -2
  191. package/src/adapters/copilot/index.js +58 -23
  192. package/src/adapters/copy-tree.js +290 -44
  193. package/src/adapters/guidance-manifest.js +71 -0
  194. package/src/adapters/guidance-pointer.js +19 -0
  195. package/src/adapters/hook-commands.js +6 -10
  196. package/src/adapters/index.js +1 -0
  197. package/src/adapters/kiro/index.js +23 -12
  198. package/src/adapters/opencode/index.js +8 -8
  199. package/src/adapters/pi/hooks.js +2 -1
  200. package/src/adapters/pi/index.js +14 -7
  201. package/src/adapters/resolve-source.js +26 -2
  202. package/src/cli/commands/install.js +2 -1
  203. package/src/cli/commands/reconcile.js +53 -9
  204. package/src/cli/commands/remove.js +2 -2
  205. package/src/cli/commands/rollback.js +6 -3
  206. package/src/cli/commands/self-update.js +18 -9
  207. package/src/cli/commands/status.js +21 -2
  208. package/src/cli/commands/ui.js +99 -0
  209. package/src/cli/commands/update.js +2 -1
  210. package/src/cli/index.js +322 -29
  211. package/src/cli/runtime-commands.js +209 -57
  212. package/src/cli/shared.js +0 -2
  213. package/src/helper/git.js +1 -1
  214. package/src/helper/guardrails.js +1 -1
  215. package/src/helper/marker-merge.js +31 -13
  216. package/src/helper/package-ids.js +37 -0
  217. package/src/helper/semver.js +94 -0
  218. package/src/install/backup.js +105 -15
  219. package/src/install/context.js +1 -1
  220. package/src/install/targets.js +31 -16
  221. package/src/lifecycle/coverage.js +20 -3
  222. package/src/lifecycle/hook-tier.js +160 -0
  223. package/src/lifecycle/index.js +412 -78
  224. package/src/lifecycle/retired-harnesses.js +318 -0
  225. package/src/lifecycle/view.js +35 -15
  226. package/src/registry/index.js +551 -26
  227. package/src/registry/worker-ids.js +45 -0
  228. package/src/release/build-package.js +0 -3
  229. package/src/release/docs-blocks.js +492 -0
  230. package/src/release/preflight.js +425 -0
  231. package/src/release/rehearse.js +401 -0
  232. package/src/release/release-workflow.js +733 -0
  233. package/src/release/sync-plugin-versions.js +43 -7
  234. package/src/runtime/advice/bench-gate.js +25 -0
  235. package/src/runtime/advice/cli.js +59 -16
  236. package/src/runtime/advice/client.js +32 -9
  237. package/src/runtime/advice/config.js +98 -133
  238. package/src/runtime/advice/doctor.js +1 -1
  239. package/src/runtime/advice/elevation.js +97 -0
  240. package/src/runtime/advice/endpoint-guard.js +9 -3
  241. package/src/runtime/advice/mode.js +37 -0
  242. package/src/runtime/advice/record.js +18 -5
  243. package/src/runtime/advice/registry.js +4 -1
  244. package/src/runtime/advice/shadow-config.js +229 -0
  245. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  246. package/src/runtime/brief-rules.js +81 -0
  247. package/src/runtime/brief-tools.js +111 -34
  248. package/src/runtime/candidate.js +20 -11
  249. package/src/runtime/capabilities/executor.js +450 -0
  250. package/src/runtime/capabilities/loopback.js +41 -0
  251. package/src/runtime/capabilities/sanitizer.js +88 -0
  252. package/src/runtime/capability-router.js +135 -3
  253. package/src/runtime/checkouts.js +73 -11
  254. package/src/runtime/claims.js +13 -7
  255. package/src/runtime/cli.js +196 -19
  256. package/src/runtime/config-home.js +42 -0
  257. package/src/runtime/context/arbitrate.js +767 -0
  258. package/src/runtime/context/delivery-store.js +4 -6
  259. package/src/runtime/context/emission-rules.js +118 -0
  260. package/src/runtime/context/identity.js +227 -0
  261. package/src/runtime/context/primary-command.js +117 -0
  262. package/src/runtime/context/primary.js +344 -0
  263. package/src/runtime/context/summary-store.js +655 -0
  264. package/src/runtime/context-pack.js +154 -78
  265. package/src/runtime/decision-register.js +13 -4
  266. package/src/runtime/dispatch/admission.js +392 -0
  267. package/src/runtime/dispatch/attempt-end.js +274 -0
  268. package/src/runtime/dispatch/command.js +628 -0
  269. package/src/runtime/dispatch/controls.js +904 -0
  270. package/src/runtime/dispatch/envelope.js +276 -0
  271. package/src/runtime/dispatch/grants.js +310 -0
  272. package/src/runtime/dispatch/integrate.js +617 -0
  273. package/src/runtime/dispatch/loop.js +1835 -0
  274. package/src/runtime/dispatch/store.js +352 -0
  275. package/src/runtime/dispatch/verify-run.js +201 -0
  276. package/src/runtime/evidence-ledger.js +34 -7
  277. package/src/runtime/failure/capture.js +3 -1
  278. package/src/runtime/failure/cli.js +25 -9
  279. package/src/runtime/failure/home.js +57 -30
  280. package/src/runtime/failure/store.js +7 -2
  281. package/src/runtime/feature-pointer.js +174 -0
  282. package/src/runtime/feature-resolve.js +13 -2
  283. package/src/runtime/fleet/command.js +77 -0
  284. package/src/runtime/fleet/projects.js +178 -0
  285. package/src/runtime/fleet/tree.js +383 -0
  286. package/src/runtime/freshness.js +33 -3
  287. package/src/runtime/git-memo.js +46 -0
  288. package/src/runtime/guidance/ablation.js +427 -0
  289. package/src/runtime/health.js +565 -17
  290. package/src/runtime/history-compactor.js +13 -3
  291. package/src/runtime/implementation-gate.js +277 -22
  292. package/src/runtime/inventory/coverage.js +1 -1
  293. package/src/runtime/inventory/index.js +1 -1
  294. package/src/runtime/inventory/precedence.js +2 -2
  295. package/src/runtime/inventory/siblings.js +6 -4
  296. package/src/runtime/knowledge/code-corpus.js +277 -0
  297. package/src/runtime/knowledge/code-lexical.js +130 -0
  298. package/src/runtime/knowledge/code-retrieval.js +307 -0
  299. package/src/runtime/knowledge/code-validation.js +106 -0
  300. package/src/runtime/knowledge/gp3-gate.js +74 -0
  301. package/src/runtime/knowledge/graph-adapter.js +288 -0
  302. package/src/runtime/knowledge/graph-fallback.js +394 -0
  303. package/src/runtime/knowledge/hybrid.js +136 -8
  304. package/src/runtime/knowledge/retrieval.js +34 -1
  305. package/src/runtime/knowledge/rtk-compress.js +77 -0
  306. package/src/runtime/knowledge/semble-bridge.py +106 -0
  307. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  308. package/src/runtime/knowledge/semble-provider.js +365 -0
  309. package/src/runtime/lifecycle/cli.js +16 -6
  310. package/src/runtime/lifecycle/event-store.js +8 -6
  311. package/src/runtime/lifecycle/followup.js +6 -1
  312. package/src/runtime/lifecycle/overview.js +24 -1
  313. package/src/runtime/lifecycle/report-store.js +8 -10
  314. package/src/runtime/lifecycle/retention.js +95 -31
  315. package/src/runtime/lifecycle/root.js +9 -1
  316. package/src/runtime/lifecycle/status.js +34 -17
  317. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  318. package/src/runtime/mask.js +134 -7
  319. package/src/runtime/mcp-consultations.js +40 -6
  320. package/src/runtime/model-router.js +79 -7
  321. package/src/runtime/models/catalogue.js +191 -0
  322. package/src/runtime/models/command.js +153 -0
  323. package/src/runtime/off-words.js +12 -0
  324. package/src/runtime/outcome.js +2 -2
  325. package/src/runtime/packages/command.js +1009 -0
  326. package/src/runtime/packages/contributions.js +116 -0
  327. package/src/runtime/packages/digest.js +132 -0
  328. package/src/runtime/packages/fetch.js +182 -0
  329. package/src/runtime/packages/grants.js +192 -0
  330. package/src/runtime/packages/index-file.js +134 -0
  331. package/src/runtime/packages/instruction.js +90 -0
  332. package/src/runtime/packages/manifest.js +331 -0
  333. package/src/runtime/packages/points.js +477 -0
  334. package/src/runtime/packages/programs.js +216 -0
  335. package/src/runtime/packages/scaffold.js +277 -0
  336. package/src/runtime/packages/source.js +90 -0
  337. package/src/runtime/packages/state.js +164 -0
  338. package/src/runtime/packages/store.js +449 -0
  339. package/src/runtime/packages/tar.js +106 -0
  340. package/src/runtime/packages/view.js +406 -0
  341. package/src/runtime/plan-check.js +59 -0
  342. package/src/runtime/plan-content.js +324 -0
  343. package/src/runtime/policy-init.js +118 -0
  344. package/src/runtime/profiles/doctor.js +96 -0
  345. package/src/runtime/profiles/resolve.js +244 -0
  346. package/src/runtime/profiles/rollback.js +254 -0
  347. package/src/runtime/profiles/sampler.js +41 -0
  348. package/src/runtime/readiness-record.js +16 -11
  349. package/src/runtime/readiness.js +46 -5
  350. package/src/runtime/research-request.js +50 -25
  351. package/src/runtime/retrieval-plan.js +10 -30
  352. package/src/runtime/retrieval-record.js +75 -5
  353. package/src/runtime/review/command.js +246 -0
  354. package/src/runtime/review/dominance.js +68 -0
  355. package/src/runtime/review/findings.js +434 -0
  356. package/src/runtime/review/identity.js +255 -0
  357. package/src/runtime/review/protocol-command.js +109 -0
  358. package/src/runtime/review/protocols.js +405 -0
  359. package/src/runtime/review/resolve-protocol.js +302 -0
  360. package/src/runtime/review/start.js +530 -0
  361. package/src/runtime/roadmap/facts.js +479 -0
  362. package/src/runtime/roadmap/gates.js +270 -0
  363. package/src/runtime/roadmap/loop.js +1636 -0
  364. package/src/runtime/roadmap/merge.js +381 -0
  365. package/src/runtime/roadmap/rows.js +1113 -0
  366. package/src/runtime/roadmap/seed.js +951 -0
  367. package/src/runtime/rules-report.js +336 -0
  368. package/src/runtime/scaffold/artifacts.js +60 -9
  369. package/src/runtime/scaffold/generate.js +21 -9
  370. package/src/runtime/settings/autopilot.js +106 -0
  371. package/src/runtime/settings/cli.js +280 -0
  372. package/src/runtime/settings/config-write.js +314 -0
  373. package/src/runtime/settings/files.js +271 -0
  374. package/src/runtime/settings/legacy.js +154 -0
  375. package/src/runtime/settings/lexical.js +56 -0
  376. package/src/runtime/settings/prepared-run.js +269 -0
  377. package/src/runtime/settings/project-layers.js +118 -0
  378. package/src/runtime/settings/refs.js +288 -0
  379. package/src/runtime/settings/registry.js +553 -0
  380. package/src/runtime/settings/resolve.js +713 -0
  381. package/src/runtime/settings/shared.js +37 -0
  382. package/src/runtime/settings/worker-billing.js +107 -0
  383. package/src/runtime/settings/write.js +269 -0
  384. package/src/runtime/slot-command.js +78 -0
  385. package/src/runtime/slots.js +671 -0
  386. package/src/runtime/source-version.js +1 -0
  387. package/src/runtime/state-root.js +217 -0
  388. package/src/runtime/storage/cli.js +12 -5
  389. package/src/runtime/storage/engine.js +9 -2
  390. package/src/runtime/storage/registry.js +14 -1
  391. package/src/runtime/storage/roots.js +66 -16
  392. package/src/runtime/storage/rules.js +82 -10
  393. package/src/runtime/storage/upkeep.js +10 -2
  394. package/src/runtime/storage/work-status.js +245 -26
  395. package/src/runtime/task-attempts.js +589 -69
  396. package/src/runtime/task-classifier.js +47 -11
  397. package/src/runtime/task-graph.js +373 -0
  398. package/src/runtime/task-run.js +778 -0
  399. package/src/runtime/task-scope.js +176 -55
  400. package/src/runtime/task-sources.js +147 -0
  401. package/src/runtime/task-state.js +374 -64
  402. package/src/runtime/team/admission.js +301 -0
  403. package/src/runtime/team/envelope.js +324 -0
  404. package/src/runtime/team/review-guard.js +156 -0
  405. package/src/runtime/trace/analyze.js +427 -0
  406. package/src/runtime/trace/baseline.js +770 -0
  407. package/src/runtime/trace/ledger.js +63 -140
  408. package/src/runtime/trace/otlp-export.js +568 -0
  409. package/src/runtime/trace/otlp-map.js +481 -0
  410. package/src/runtime/trace/spans.js +745 -0
  411. package/src/runtime/trace/telemetry.js +225 -0
  412. package/src/runtime/trace/views.js +1 -0
  413. package/src/runtime/transcripts/command.js +98 -0
  414. package/src/runtime/transcripts/cursor.js +326 -0
  415. package/src/runtime/transcripts/read.js +126 -0
  416. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  417. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  418. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  419. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  420. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  421. package/src/runtime/transcripts/registry.js +161 -0
  422. package/src/runtime/transcripts/stats.js +161 -0
  423. package/src/runtime/verification/check-key.js +628 -0
  424. package/src/runtime/verification/contract-runner.js +546 -11
  425. package/src/runtime/verification/engine.js +499 -9
  426. package/src/runtime/verification/impact.js +617 -0
  427. package/src/runtime/verification/inflight.js +205 -0
  428. package/src/runtime/verification/registry.js +176 -0
  429. package/src/runtime/verification/reuse.js +184 -0
  430. package/src/runtime/verification/telemetry-emit.js +254 -0
  431. package/src/runtime/verification/test-selection.js +67 -7
  432. package/src/runtime/worker/active.js +90 -0
  433. package/src/runtime/worker/cancel.js +222 -0
  434. package/src/runtime/worker/catalogue.js +122 -0
  435. package/src/runtime/worker/command.js +677 -0
  436. package/src/runtime/worker/evidence.js +288 -0
  437. package/src/runtime/worker/launch.js +288 -0
  438. package/src/runtime/worker/models.js +137 -0
  439. package/src/runtime/worker/parsers.js +218 -0
  440. package/src/runtime/worker/probes/index.js +706 -0
  441. package/src/runtime/worker/process-tree.js +415 -0
  442. package/src/runtime/worker/quota.js +43 -0
  443. package/src/runtime/worker/readiness.js +713 -0
  444. package/src/runtime/worker/run-store.js +166 -0
  445. package/src/runtime/worker/supervisor.js +541 -0
  446. package/src/runtime/worker/worktree-check.js +252 -0
  447. package/src/runtime/workflow-engine.js +5 -1
  448. package/src/runtime/workflow-orchestrator.js +578 -63
  449. package/src/runtime/worktree.js +149 -22
  450. package/src/state/index.js +1 -1
  451. package/src/state/lockfile.js +64 -10
  452. package/src/state/run-lock.js +1 -1
  453. package/types/node-commonjs.d.ts +106 -7
  454. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  455. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  456. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -10
  457. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  458. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -10
  459. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  460. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -10
  461. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  462. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  463. package/core/harnesses/gemini/hooks/session-start.sh +0 -7
  464. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  465. package/core/shared/guidance/FLAGS.md +0 -25
  466. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  467. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  468. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  469. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  470. package/src/adapters/gemini/hooks.js +0 -251
  471. package/src/adapters/gemini/index.js +0 -429
@@ -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
@@ -141,7 +138,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
141
138
  duplicates the host's own edit-approval mechanisms.
142
139
  - Stop after the change set only when one of two things is true: the user asked for the plan
143
140
  rather than the change ("show me what you'd change first"), or naming the change set surfaced
144
- 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
145
142
  editing first would decide it silently.
146
143
 
147
144
  5. **Implement**:
@@ -70,17 +70,17 @@ not have.
70
70
  **Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
71
71
  `overflowAction.message` and report the gap.** By this point `do-design` should have batched
72
72
  evidence and claims (step 8), so an empty pack carries weight: either the batch never ran or the
73
- task id mismatched. Treat it as advisory rather than blocking — plan's hard gate is artifact
74
- existence only — but note it in this stage's report and `plan.md` §3 "Research & Decisions": a
75
- decision written straight from prose without a compiled pack must not claim prior evidence. When
76
- non-empty, read it alongside `requirement.md`, `design.md`, and the constitution.
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.
77
77
  **Also read `specs.md` when step 1's `has_specs` is true** — use that flag, never a filesystem
78
78
  check of your own, and read the `specs` path the resolver returned. `/do-design` moves the
79
79
  interface and data-model contracts out of `design.md` into `specs.md` §1 as numbered `IC-###`
80
- 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
81
81
  plan must decompose toward live only in `specs.md`. Planning from `design.md` alone on such a
82
82
  feature plans against a pointer. When `has_specs` is false (an old-layout feature dir, which never
83
- 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
84
84
  read. Read
85
85
  `constitution_base`,
86
86
  then read `constitution_local` **only when `has_constitution_local` is true** — use that flag,
@@ -115,15 +115,17 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
115
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.
116
116
  This stage fills the plan from requirement + design + constitution rather than by eliciting, so
117
117
  it writes no dialogue log — its sibling stages' `intention/`/`design/` question files have no
118
- 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
119
119
  loop, each of its rounds logs to `plan-<NN>-question.md` at the feature root exactly as
120
120
  `/do-brainstorm` and `/do-design` log theirs to their own subdirectories, numbered from step 1's
121
121
  `plan_next_round`.
122
- 6. **Constitution Check (advisory gate)** — evaluate the plan against both tiers as reconciled in
123
- step 4. On a violation, STOP and revise the approach before continuing, then record PASS/FAIL in
124
- the plan. The verdict is **advisory**: it is recorded in `plan.md` §2 "Constitution Check" and nothing downstream
125
- blocks on it — the chain's one hard gate covers artifact existence only. Stopping on a violation
126
- 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`.
127
129
  7. **Decompose into Tasks (section 8)** — dependency-ordered, `[US#]`-traced to the requirement's
128
130
  user stories, owner+files named per task, with checkpoints and completion criteria.
129
131
  Read the guidance tree's `references/ORCHESTRATION.md` and
@@ -131,7 +133,7 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
131
133
  `--depth shallow|normal|deep` is the single granularity knob: it sets how finely a phase is
132
134
  split into tasks and how much detail each task carries. Default `normal`.
133
135
  **Why explicit task scoping and `[P]` markers**: Specifying concrete file paths (`files: [...]`)
134
- and named specialist owners (`system-architect`, `core-implementer`, `quality-guardian`) per task
136
+ and agent-spec owners (review tasks name `reviewer`) per task
135
137
  enables `/do-execute-plan` to compute write-set isolation (`parallel-check`). Tasks with disjoint
136
138
  file sets run concurrently without merge conflicts, while overlapping tasks are safely serialized.
137
139
  **Mark `[P]` by default:** parallel execution is the framework default, so apply `[P]` to every
@@ -159,8 +161,13 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
159
161
  table: `primary` if it owns a task via `files:`, `dependency-only` if it's only ever reached via
160
162
  `depends-on:`. A single-repo result → `N/A: single-repo feature`. Derivation only — no branch is
161
163
  created here (`/do-execute-plan`'s job, lazily, per repo).
162
- 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:
163
169
  ```bash
170
+ "$DOFLOW" plan-check "<plan path>" --json
164
171
  "$DOFLOW" validate "<plan path>"
165
172
  ```
166
173
  This also verifies each `### Task Summary` rollup row against the `- [ ]` lines under its
@@ -195,9 +202,13 @@ Item schema, provenance rules, and the refused-field list: the guidance tree's `
195
202
  12. **Stop** — report the plan path, Constitution Check result, the task count (`[P]`/sequential),
196
203
  and the derived branch name/repo count when the Repo Branch Plan is populated.
197
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
+
198
209
  ## Embedded feature research
199
210
 
200
- 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.
201
212
 
202
213
  ## Boundaries
203
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
  >
@@ -2,12 +2,15 @@
2
2
 
3
3
  **Feature:** [NNN-slug] · **Requirement:** [REQUIREMENT_PATH] · **Maturity:** Draft · **Created:** [DATE]
4
4
 
5
- > System shape — architecture, APIs, data/interface contracts. Reads [REQUIREMENT_PATH].
5
+ > System shape — architecture, journeys, APIs, data/interface contracts. Reads [REQUIREMENT_PATH].
6
6
  > Distinct from plan.md's HOW-to-implement; this is HOW-it's-shaped.
7
7
  >
8
+ > Journey-first: business and engineering read the front half (Architecture Approach through
9
+ > Journeys) on one page, in plain nouns. The component-level sections follow it.
10
+ >
8
11
  > Structure follows `references/ARTIFACT_FORMAT.md`: indexed sections carry a table above full
9
12
  > `**Detail**`, the document-level `Maturity` is `Draft`, `In review` or `Approved`, the item-level
10
- > `Status` is only `Live` or `Superseded → <ref>`, and superseded prose moves to §9.
13
+ > `Status` is only `Live` or `Superseded → <ref>`, and superseded prose moves to the History section.
11
14
 
12
15
  ## 1. Architecture Approach
13
16
 
@@ -27,19 +30,26 @@
27
30
  | [what is being settled] | [the shape this design gives it] | [person or role accountable] | no |
28
31
  | [what is being settled] | [the shape this design gives it] | [person or role accountable] | yes: [what must happen first] |
29
32
 
30
- [Component boundaries, where this fits in the existing system, 2–4 sentences.]
33
+ <!-- Acts as the summary. In 2–4 sentences or bullets, in plain nouns with no component IDs or code
34
+ names: who gains what and why, the goal of this phase, and where it plugs into the existing
35
+ system. Leave out implementation detail: that belongs in Components & Boundaries. -->
36
+
37
+ [Who this is for and why, the goal of this phase, and where it fits in the existing system.]
31
38
 
32
39
  ## 2. System Overview (C4)
33
40
 
34
- <!-- The visual complement to §1 — lets a reader unfamiliar with this feature see the shape before
35
- reading prose. C4 is kept as the conceptual zoom model (Context → Container → Component) and
36
- rendered with Mermaid `flowchart` + `subgraph`. Each level heading is written
37
- "C4 Level N: ...", so no level label collides with a §3 component ID such as C3.
41
+ <!-- The visual complement to Architecture Approach — lets a reader unfamiliar with this feature see
42
+ the shape before reading prose. C4 is kept as the conceptual zoom model (Context → Container →
43
+ Component) and rendered with Mermaid `flowchart` + `subgraph`. Each level heading is written
44
+ "C4 Level N: ...", so no level label collides with a component ID such as C3.
38
45
 
39
46
  Do NOT use the C4Context / C4Container diagram types. They are experimental in Mermaid: no
40
47
  direction control, relationship labels collide with arrowheads, and rendering varies across
41
48
  viewers. `flowchart` is the most widely supported type and puts labels legibly on the arrow.
42
49
 
50
+ EVERY edge carries a label saying what flows over it (a request, a record, money, a file),
51
+ never a bare arrow.
52
+
43
53
  Skip a level with "N/A: [why]". For a trivial single-file change with no new external
44
54
  interaction, write "N/A: [why]" for the whole section. -->
45
55
 
@@ -100,8 +110,8 @@ flowchart LR
100
110
  ### C4 Level 3: Component
101
111
 
102
112
  <!-- Required when this feature touches 3+ components within a single container; otherwise write
103
- "N/A: covered by §3 Components & Boundaries". On a small change this diagram restates the §3
104
- table verbatim, and a diagram that adds nothing trains authors to tick boxes. -->
113
+ "N/A: covered by Components & Boundaries". On a small change this diagram restates the
114
+ Components & Boundaries table verbatim, and a diagram that adds nothing trains authors to tick boxes. -->
105
115
 
106
116
  [Internals of the container this feature changes — handlers, services, ports, adapters.]
107
117
 
@@ -117,7 +127,85 @@ flowchart TB
117
127
  C_B -->|"[persists]"| STORE
118
128
  ```
119
129
 
120
- ## 3. Components & Boundaries
130
+ [One closing sentence: what this feature decides versus where the data or money moves.]
131
+
132
+ ## 3. Concepts
133
+
134
+ <!-- Write the handful of nouns a reader must hold to follow the Journeys, in plain words: no
135
+ component IDs, no code names. One `flowchart` of how they relate (every edge labelled with the
136
+ relationship), then a glossary table. Leave out anything a journey does not use. Write
137
+ "N/A: [why]" for a design with no domain vocabulary worth defining. -->
138
+
139
+ ```mermaid
140
+ flowchart LR
141
+ TERM_A["[Concept A]"]
142
+ TERM_B["[Concept B]"]
143
+ TERM_C["[Concept C]"]
144
+
145
+ TERM_A -->|"[relationship, e.g. has many]"| TERM_B
146
+ TERM_B -->|"[relationship, e.g. is checked against]"| TERM_C
147
+ ```
148
+
149
+ | Term | Meaning |
150
+ |---|---|
151
+ | [Concept A] | [one plain sentence] |
152
+ | [Concept B] | [one plain sentence] |
153
+
154
+ ## 4. Journeys
155
+
156
+ <!-- One `### Journey N — <name>` per user or system journey, in the order a reader meets them. Each
157
+ carries one picture (a `flowchart` or a `sequenceDiagram`), a `stateDiagram-v2` for EVERY
158
+ stateful thing the journey creates, and a small rules table. Write in plain nouns: no component
159
+ IDs, no code names. Leave out internal calls that no actor sees. Write "N/A: [why]" for the
160
+ whole section when the design has no user or system journey (a pure library or refactor). -->
161
+
162
+ ### Journey 1 — [journey name]
163
+
164
+ [One sentence: who starts this journey and what it ends with.]
165
+
166
+ ```mermaid
167
+ flowchart LR
168
+ START["[trigger]"] -->|"[what flows]"| CHECK{"[decision]"}
169
+ CHECK -->|"[pass: what flows]"| DONE["[outcome]"]
170
+ CHECK -->|"[fail: what flows]"| STOP["[alternate outcome]"]
171
+ ```
172
+
173
+ ```mermaid
174
+ stateDiagram-v2
175
+ [*] --> Created
176
+ Created --> Active: [guarded transition]
177
+ Active --> Ended: [guarded transition]
178
+ Ended --> [*]
179
+ ```
180
+
181
+ | Rule | Why it holds |
182
+ |---|---|
183
+ | [a rule this journey enforces] | [the reason, or what breaks without it] |
184
+
185
+ ### Worked example
186
+
187
+ <!-- Real numbers that make the rules checkable: one case that passes and one that does not, then the
188
+ result. Close with one caveat sentence saying what is not guaranteed. Leave out hypothetical
189
+ values you cannot compute. -->
190
+
191
+ | Candidate | Eligible? | Why | Result |
192
+ |---|---|---|---|
193
+ | [case that passes, with a real figure] | yes | [which rule it meets] | [computed outcome] |
194
+ | [case that fails, with a real figure] | no | [which rule it breaks] | [computed outcome] |
195
+
196
+ [Caveat: what is shown but not guaranteed, and where it is re-checked.]
197
+
198
+ ### Eligibility / decision inputs
199
+
200
+ <!-- A TABLE, never a mindmap: DIAGRAM_GUIDE.md excludes `mindmap`. One row per group of inputs the
201
+ decision reads; say what the first version reads and what comes later. -->
202
+
203
+ | Input group | What is read | Read in this version? |
204
+ |---|---|---|
205
+ | [group, e.g. the user] | [the facts checked] | yes |
206
+ | [group, e.g. the limits] | [the facts checked] | later: [why] |
207
+
208
+ ## 5. Components & Boundaries
121
209
 
122
210
  | ID | Component | Kind | Serves | Status |
123
211
  |---|---|---|---|---|
@@ -134,7 +222,7 @@ flowchart TB
134
222
  - **Does not own:** [what a reader could expect it to hold but another component does].
135
223
  - **Contracts:** [the FR-### and IC-### identifiers it serves].
136
224
 
137
- ## 4. API / Interface Contracts
225
+ ## 6. API / Interface Contracts
138
226
 
139
227
  <!-- Endpoints, CLI verb signatures, and repository/service interfaces that anchor implementation
140
228
  live in ./specs.md §1 Interface Contracts, not here — each as one ID-bearing IC-### entry so
@@ -142,7 +230,7 @@ flowchart TB
142
230
  this feature genuinely introduces no interface contracts; otherwise leave a one-line pointer,
143
231
  e.g. "See ./specs.md §1." -->
144
232
 
145
- ## 5. Data Model
233
+ ## 7. Data Model
146
234
 
147
235
  The data-model shape is governed by `./data-model.md` §1.
148
236
 
@@ -150,7 +238,7 @@ The data-model shape is governed by `./data-model.md` §1.
150
238
  ./data-model.md §1 Data Model, not here. Write `N/A: [why]` if this feature introduces no data
151
239
  model or UX changes; otherwise leave a one-line pointer, e.g. "See ./data-model.md §1." -->
152
240
 
153
- ## 6. Sequence / Data Flow
241
+ ## 8. Sequence / Data Flow
154
242
 
155
243
  The data-flow shape is governed by `./data-model.md` §2.
156
244
 
@@ -159,7 +247,7 @@ The data-flow shape is governed by `./data-model.md` §2.
159
247
  no non-trivial interaction sequence; otherwise leave a one-line pointer, e.g.
160
248
  "See ./data-model.md §2." -->
161
249
 
162
- ## 7. Design Risks & Alternatives Considered
250
+ ## 9. Design Risks & Alternatives Considered
163
251
 
164
252
  | ID | Risk / Alternative | Disposition | Status |
165
253
  |---|---|---|---|
@@ -169,7 +257,16 @@ The data-flow shape is governed by `./data-model.md` §2.
169
257
 
170
258
  - **R1** → [why this shape was chosen, or why the risk is accepted and what it costs if it lands].
171
259
 
172
- ## 8. Assumptions
260
+ ## 10. Open Points for Review
261
+
262
+ <!-- The questions this design could not answer, ending the design instead of a bare risk list. One
263
+ bold-led question per bullet, followed by the reasoning already known (a figure, a trade-off, the
264
+ option you lean to). Lead each with the question in bold; do not number them with an ID. Write
265
+ "None — no open points." when every question was settled. -->
266
+
267
+ - **[A question a reviewer must answer?]** [The reasoning already known and the option leaned to.]
268
+
269
+ ## 11. Assumptions
173
270
 
174
271
  <!-- With a decision register, a row from a "Decide for me" pick cites its DEC-### in Basis: see ARTIFACT_FORMAT.md §12. -->
175
272
 
@@ -185,7 +282,7 @@ The data-flow shape is governed by `./data-model.md` §2.
185
282
  and detail if every design-level ambiguity was resolved by a direct answer rather than the
186
283
  defer escape hatch during /do-design's clarification loop. -->
187
284
 
188
- ## 9. History
285
+ ## 12. History
189
286
 
190
287
  <!-- Superseded design decisions move here; the index row above stays as a tombstone with
191
288
  `Superseded → <ref>`. -->