@khoavu882/doflow 2.0.0-beta.5 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/README.md +16 -16
  2. package/bin/doflow.js +22 -12
  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/mcp-tool-guard.sh +4 -1
  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-compact.sh +23 -27
  15. package/core/harnesses/claude/hooks/pre-implement-gate.sh +4 -1
  16. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  17. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  18. package/core/harnesses/claude/settings/settings.json +26 -9
  19. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  20. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  21. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  22. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  23. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  24. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  25. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  26. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  27. package/core/harnesses/codex/hooks/hooks.json +0 -10
  28. package/core/harnesses/codex/hooks/lib.sh +44 -25
  29. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +4 -1
  30. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  31. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  32. package/core/harnesses/codex/hooks/pre-implement-gate.sh +4 -1
  33. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  34. package/core/harnesses/codex/hooks/subagent-audit.sh +1 -0
  35. package/core/harnesses/copilot/hooks/doflow-lib.sh +94 -0
  36. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  37. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  38. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  39. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  40. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  41. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  42. package/core/harnesses/copilot/hooks/doflow.json +51 -0
  43. package/core/harnesses/kiro/agents/doflow.json +1 -11
  44. package/core/harnesses/kiro/hooks/doflow.json +0 -10
  45. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  46. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +8 -3
  47. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +8 -3
  48. package/core/harnesses/kiro/hooks/session-start.sh +1 -0
  49. package/core/harnesses/kiro/hooks/stop-check.sh +1 -0
  50. package/core/harnesses/pi/extensions/doflow-guard.js +11 -2
  51. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +1 -2
  52. package/core/harnesses/shared/hooks/adapters/antigravity.js +1 -1
  53. package/core/harnesses/shared/hooks/bridge/bridge.sh +126 -23
  54. package/core/harnesses/shared/hooks/bridge/envelope.jq +87 -18
  55. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  56. package/core/harnesses/shared/hooks/bridge/respond.sh +16 -2
  57. package/core/harnesses/shared/hooks/policies/capture-failure.sh +49 -16
  58. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  59. package/core/harnesses/shared/hooks/policies/contract.sh +3 -0
  60. package/core/harnesses/shared/hooks/policies/deny-json.sh +20 -7
  61. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  62. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  63. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  64. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  65. package/core/harnesses/shared/hooks/policies/lib.sh +63 -40
  66. package/core/harnesses/shared/hooks/policies/mcp-policy.conf +1 -1
  67. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +7 -8
  68. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +132 -57
  69. package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
  70. package/core/harnesses/shared/hooks/policies/stop-check.sh +27 -15
  71. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +6 -3
  72. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  73. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +60 -155
  74. package/core/harnesses/shared/hooks/stream-hook-runner.js +58 -20
  75. package/core/harnesses/shared/locator/doflow-run +2 -3
  76. package/core/registry/advice.json +3 -3
  77. package/core/registry/assets.json +55 -82
  78. package/core/registry/capabilities.json +12 -0
  79. package/core/registry/contracts.json +58 -31
  80. package/core/registry/contribution-points.json +35 -0
  81. package/core/registry/gates.json +32 -0
  82. package/core/registry/guidance-caps.json +40 -0
  83. package/core/registry/harnesses.json +1445 -366
  84. package/core/registry/intake.json +53 -0
  85. package/core/registry/lifecycle.json +599 -996
  86. package/core/registry/mcp.json +5 -1
  87. package/core/registry/models.json +7 -1
  88. package/core/registry/package-templates/README.md +19 -0
  89. package/core/registry/package-templates/agent/files/agent.md +9 -0
  90. package/core/registry/package-templates/agent/template.json +4 -0
  91. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  92. package/core/registry/package-templates/capability-provider/template.json +11 -0
  93. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  94. package/core/registry/package-templates/debate-preset/template.json +4 -0
  95. package/core/registry/package-templates/intake-category/files/category.json +8 -0
  96. package/core/registry/package-templates/intake-category/template.json +4 -0
  97. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  98. package/core/registry/package-templates/review-preset/template.json +4 -0
  99. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  100. package/core/registry/package-templates/skill/template.json +4 -0
  101. package/core/registry/package-templates/worker/files/worker.json +92 -0
  102. package/core/registry/package-templates/worker/template.json +11 -0
  103. package/core/registry/packages/doflow/doflow-package.json +15 -0
  104. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  105. package/core/registry/protocols.json +61 -0
  106. package/core/registry/routes.json +17 -0
  107. package/core/registry/rules.json +431 -0
  108. package/core/registry/settings.json +272 -0
  109. package/core/registry/storage.json +687 -31
  110. package/core/registry/telemetry.json +236 -0
  111. package/core/registry/transcripts.json +142 -0
  112. package/core/registry/verification.json +76 -6
  113. package/core/registry/workflows.json +55 -0
  114. package/core/shared/agent-specs/core-implementer.md +3 -0
  115. package/core/shared/agent-specs/delivery-lead.md +68 -0
  116. package/core/shared/agent-specs/quality-guardian.md +5 -1
  117. package/core/shared/agent-specs/research-writer.md +10 -3
  118. package/core/shared/agent-specs/reviewer.md +53 -0
  119. package/core/shared/agent-specs/spec-analyst.md +5 -6
  120. package/core/shared/agent-specs/system-architect.md +5 -1
  121. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  122. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  123. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  124. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  125. package/core/shared/guidance/pointers/codex.md +1 -4
  126. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  127. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  128. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  129. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  130. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  131. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  132. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  133. package/core/shared/guidance/references/ORCHESTRATION.md +3 -2
  134. package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +19 -1
  135. package/core/shared/guidance/rules/RULES.md +45 -0
  136. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  137. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  138. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  139. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  140. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  141. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  142. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  143. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  144. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  145. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  146. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  147. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +49 -5
  148. package/core/shared/scripts/doflow/bin/doflow-run +152 -34
  149. package/core/shared/skills/do/SKILL.md +14 -12
  150. package/core/shared/skills/do/references/advice_calls.md +26 -0
  151. package/core/shared/skills/do/references/pm_routing.md +1 -2
  152. package/core/shared/skills/do/references/program_mode.md +31 -0
  153. package/core/shared/skills/do-brainstorm/SKILL.md +45 -97
  154. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +36 -0
  155. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  156. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  157. package/core/shared/skills/do-code-review/SKILL.md +48 -148
  158. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  159. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  160. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  161. package/core/shared/skills/do-design/SKILL.md +23 -20
  162. package/core/shared/skills/do-diagnose/SKILL.md +18 -6
  163. package/core/shared/skills/do-document/SKILL.md +12 -1
  164. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  165. package/core/shared/skills/do-document/references/embedded-research.md +19 -7
  166. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  167. package/core/shared/skills/do-execute-plan/SKILL.md +19 -60
  168. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  169. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  170. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +26 -1
  171. package/core/shared/skills/do-execute-plan/references/run_position.md +16 -2
  172. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  173. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  174. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  175. package/core/shared/skills/do-flow/SKILL.md +10 -11
  176. package/core/shared/skills/do-flow/references/task_classes.md +5 -5
  177. package/core/shared/skills/do-git/SKILL.md +4 -0
  178. package/core/shared/skills/do-implement/SKILL.md +13 -14
  179. package/core/shared/skills/do-plan/SKILL.md +34 -20
  180. package/core/shared/skills/do-test/SKILL.md +7 -4
  181. package/core/shared/templates/doflow/constitution-template.md +9 -3
  182. package/core/shared/templates/doflow/data-model-template.md +1 -1
  183. package/core/shared/templates/doflow/design-template.md +113 -16
  184. package/core/shared/templates/doflow/plan-template.md +11 -10
  185. package/core/shared/templates/doflow/question-log-template.md +14 -2
  186. package/core/shared/templates/doflow/requirement-template.md +1 -1
  187. package/core/shared/workflows/do-flow-chain.md +2 -0
  188. package/core/worker-evidence/antigravity/checks.json +14 -0
  189. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  190. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  191. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  192. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  193. package/core/worker-evidence/codex/checks.json +38 -0
  194. package/package.json +10 -6
  195. package/src/adapters/antigravity/index.js +143 -66
  196. package/src/adapters/claude/index.js +46 -5
  197. package/src/adapters/codex/agents.js +25 -15
  198. package/src/adapters/codex/hooks.js +39 -3
  199. package/src/adapters/codex/index.js +61 -13
  200. package/src/adapters/codex/native-projection.js +6 -2
  201. package/src/adapters/copilot/index.js +58 -23
  202. package/src/adapters/copy-tree.js +291 -46
  203. package/src/adapters/guidance-manifest.js +71 -0
  204. package/src/adapters/guidance-pointer.js +19 -0
  205. package/src/adapters/hook-commands.js +6 -10
  206. package/src/adapters/index.js +1 -0
  207. package/src/adapters/kiro/index.js +23 -12
  208. package/src/adapters/opencode/index.js +8 -8
  209. package/src/adapters/pi/hooks.js +2 -1
  210. package/src/adapters/pi/index.js +14 -7
  211. package/src/adapters/resolve-source.js +26 -2
  212. package/src/cli/commands/install.js +2 -1
  213. package/src/cli/commands/reconcile.js +53 -9
  214. package/src/cli/commands/remove.js +2 -2
  215. package/src/cli/commands/rollback.js +6 -3
  216. package/src/cli/commands/self-update.js +18 -9
  217. package/src/cli/commands/status.js +22 -3
  218. package/src/cli/commands/ui.js +99 -0
  219. package/src/cli/commands/update.js +2 -1
  220. package/src/cli/index.js +337 -32
  221. package/src/cli/runtime-commands.js +220 -60
  222. package/src/cli/shared.js +0 -2
  223. package/src/helper/git.js +1 -1
  224. package/src/helper/guardrails.js +1 -1
  225. package/src/helper/marker-merge.js +31 -13
  226. package/src/helper/package-ids.js +37 -0
  227. package/src/helper/semver.js +94 -0
  228. package/src/install/backup.js +105 -15
  229. package/src/install/context.js +1 -1
  230. package/src/install/targets.js +31 -16
  231. package/src/lifecycle/coverage.js +4 -16
  232. package/src/lifecycle/hook-tier.js +160 -0
  233. package/src/lifecycle/index.js +412 -78
  234. package/src/lifecycle/retired-harnesses.js +318 -0
  235. package/src/lifecycle/view.js +35 -15
  236. package/src/registry/index.js +551 -26
  237. package/src/registry/worker-ids.js +45 -0
  238. package/src/release/build-package.js +0 -3
  239. package/src/release/docs-blocks.js +472 -0
  240. package/src/release/preflight.js +425 -0
  241. package/src/release/rehearse.js +401 -0
  242. package/src/release/release-workflow.js +733 -0
  243. package/src/release/sync-plugin-versions.js +43 -7
  244. package/src/runtime/advice/bench-gate.js +25 -0
  245. package/src/runtime/advice/cli.js +59 -16
  246. package/src/runtime/advice/client.js +32 -9
  247. package/src/runtime/advice/config.js +98 -133
  248. package/src/runtime/advice/doctor.js +1 -1
  249. package/src/runtime/advice/elevation.js +97 -0
  250. package/src/runtime/advice/endpoint-guard.js +9 -3
  251. package/src/runtime/advice/mode.js +37 -0
  252. package/src/runtime/advice/record.js +18 -5
  253. package/src/runtime/advice/registry.js +4 -1
  254. package/src/runtime/advice/shadow-config.js +229 -0
  255. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  256. package/src/runtime/brief-rules.js +81 -0
  257. package/src/runtime/brief-tools.js +111 -34
  258. package/src/runtime/candidate.js +20 -11
  259. package/src/runtime/capabilities/executor.js +450 -0
  260. package/src/runtime/capabilities/loopback.js +41 -0
  261. package/src/runtime/capabilities/sanitizer.js +88 -0
  262. package/src/runtime/capability-router.js +135 -3
  263. package/src/runtime/checkouts.js +73 -11
  264. package/src/runtime/claims.js +13 -7
  265. package/src/runtime/cli.js +196 -19
  266. package/src/runtime/config-home.js +42 -0
  267. package/src/runtime/context/arbitrate.js +767 -0
  268. package/src/runtime/context/delivery-store.js +4 -6
  269. package/src/runtime/context/emission-rules.js +118 -0
  270. package/src/runtime/context/identity.js +227 -0
  271. package/src/runtime/context/pointer.js +67 -12
  272. package/src/runtime/context/primary-command.js +117 -0
  273. package/src/runtime/context/primary.js +344 -0
  274. package/src/runtime/context/summary-store.js +655 -0
  275. package/src/runtime/context-pack.js +158 -79
  276. package/src/runtime/decision-register.js +13 -4
  277. package/src/runtime/dispatch/admission.js +392 -0
  278. package/src/runtime/dispatch/attempt-end.js +274 -0
  279. package/src/runtime/dispatch/command.js +628 -0
  280. package/src/runtime/dispatch/controls.js +904 -0
  281. package/src/runtime/dispatch/envelope.js +276 -0
  282. package/src/runtime/dispatch/grants.js +310 -0
  283. package/src/runtime/dispatch/integrate.js +617 -0
  284. package/src/runtime/dispatch/loop.js +1835 -0
  285. package/src/runtime/dispatch/store.js +352 -0
  286. package/src/runtime/dispatch/verify-run.js +201 -0
  287. package/src/runtime/evidence-ledger.js +52 -7
  288. package/src/runtime/failure/capture.js +3 -1
  289. package/src/runtime/failure/cli.js +25 -9
  290. package/src/runtime/failure/home.js +57 -30
  291. package/src/runtime/failure/store.js +7 -2
  292. package/src/runtime/feature-pointer.js +174 -0
  293. package/src/runtime/feature-resolve.js +13 -2
  294. package/src/runtime/fleet/command.js +77 -0
  295. package/src/runtime/fleet/projects.js +178 -0
  296. package/src/runtime/fleet/tree.js +383 -0
  297. package/src/runtime/freshness.js +33 -3
  298. package/src/runtime/git-memo.js +46 -0
  299. package/src/runtime/guidance/ablation.js +427 -0
  300. package/src/runtime/health.js +624 -18
  301. package/src/runtime/history-compactor.js +13 -3
  302. package/src/runtime/implementation-gate.js +281 -26
  303. package/src/runtime/intake/engine.js +677 -0
  304. package/src/runtime/intake/index.js +136 -0
  305. package/src/runtime/intake/manifest.js +140 -0
  306. package/src/runtime/intake/taxonomy.js +206 -0
  307. package/src/runtime/inventory/coverage.js +1 -1
  308. package/src/runtime/inventory/index.js +1 -1
  309. package/src/runtime/inventory/precedence.js +2 -2
  310. package/src/runtime/inventory/siblings.js +6 -4
  311. package/src/runtime/knowledge/code-corpus.js +277 -0
  312. package/src/runtime/knowledge/code-lexical.js +130 -0
  313. package/src/runtime/knowledge/code-retrieval.js +307 -0
  314. package/src/runtime/knowledge/code-validation.js +106 -0
  315. package/src/runtime/knowledge/gp3-gate.js +74 -0
  316. package/src/runtime/knowledge/graph-adapter.js +288 -0
  317. package/src/runtime/knowledge/graph-fallback.js +394 -0
  318. package/src/runtime/knowledge/hybrid.js +136 -8
  319. package/src/runtime/knowledge/retrieval.js +34 -1
  320. package/src/runtime/knowledge/rtk-compress.js +77 -0
  321. package/src/runtime/knowledge/semble-bridge.py +106 -0
  322. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  323. package/src/runtime/knowledge/semble-provider.js +365 -0
  324. package/src/runtime/lifecycle/cli.js +88 -10
  325. package/src/runtime/lifecycle/event-store.js +8 -6
  326. package/src/runtime/lifecycle/followup.js +38 -7
  327. package/src/runtime/lifecycle/overview.js +26 -2
  328. package/src/runtime/lifecycle/report-store.js +8 -10
  329. package/src/runtime/lifecycle/retention.js +95 -31
  330. package/src/runtime/lifecycle/root.js +9 -1
  331. package/src/runtime/lifecycle/status.js +34 -17
  332. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  333. package/src/runtime/mask.js +134 -7
  334. package/src/runtime/mcp-consultations.js +40 -6
  335. package/src/runtime/model-router.js +79 -7
  336. package/src/runtime/models/catalogue.js +191 -0
  337. package/src/runtime/models/command.js +153 -0
  338. package/src/runtime/off-words.js +12 -0
  339. package/src/runtime/outcome.js +2 -2
  340. package/src/runtime/packages/command.js +1009 -0
  341. package/src/runtime/packages/contributions.js +116 -0
  342. package/src/runtime/packages/digest.js +132 -0
  343. package/src/runtime/packages/fetch.js +182 -0
  344. package/src/runtime/packages/grants.js +192 -0
  345. package/src/runtime/packages/index-file.js +134 -0
  346. package/src/runtime/packages/instruction.js +90 -0
  347. package/src/runtime/packages/manifest.js +331 -0
  348. package/src/runtime/packages/points.js +487 -0
  349. package/src/runtime/packages/programs.js +216 -0
  350. package/src/runtime/packages/scaffold.js +277 -0
  351. package/src/runtime/packages/source.js +90 -0
  352. package/src/runtime/packages/state.js +164 -0
  353. package/src/runtime/packages/store.js +449 -0
  354. package/src/runtime/packages/tar.js +106 -0
  355. package/src/runtime/packages/view.js +406 -0
  356. package/src/runtime/plan-check.js +59 -0
  357. package/src/runtime/plan-content.js +324 -0
  358. package/src/runtime/policy-init.js +118 -0
  359. package/src/runtime/profiles/doctor.js +96 -0
  360. package/src/runtime/profiles/resolve.js +244 -0
  361. package/src/runtime/profiles/rollback.js +254 -0
  362. package/src/runtime/profiles/sampler.js +41 -0
  363. package/src/runtime/readiness-record.js +16 -11
  364. package/src/runtime/readiness.js +46 -5
  365. package/src/runtime/research-request.js +50 -25
  366. package/src/runtime/retrieval-plan.js +10 -30
  367. package/src/runtime/retrieval-record.js +75 -5
  368. package/src/runtime/review/command.js +246 -0
  369. package/src/runtime/review/dominance.js +68 -0
  370. package/src/runtime/review/findings.js +434 -0
  371. package/src/runtime/review/identity.js +255 -0
  372. package/src/runtime/review/protocol-command.js +109 -0
  373. package/src/runtime/review/protocols.js +405 -0
  374. package/src/runtime/review/resolve-protocol.js +302 -0
  375. package/src/runtime/review/start.js +530 -0
  376. package/src/runtime/roadmap/attendance.js +137 -0
  377. package/src/runtime/roadmap/facts.js +479 -0
  378. package/src/runtime/roadmap/gates.js +273 -0
  379. package/src/runtime/roadmap/loop.js +1719 -0
  380. package/src/runtime/roadmap/merge.js +390 -0
  381. package/src/runtime/roadmap/rows.js +1122 -0
  382. package/src/runtime/roadmap/seed.js +1063 -0
  383. package/src/runtime/roadmap/worktree-cleanup.js +147 -0
  384. package/src/runtime/rules-report.js +336 -0
  385. package/src/runtime/scaffold/artifacts.js +60 -9
  386. package/src/runtime/scaffold/generate.js +21 -9
  387. package/src/runtime/settings/autopilot.js +106 -0
  388. package/src/runtime/settings/cli.js +280 -0
  389. package/src/runtime/settings/config-write.js +314 -0
  390. package/src/runtime/settings/files.js +271 -0
  391. package/src/runtime/settings/legacy.js +154 -0
  392. package/src/runtime/settings/lexical.js +56 -0
  393. package/src/runtime/settings/prepared-run.js +269 -0
  394. package/src/runtime/settings/project-layers.js +118 -0
  395. package/src/runtime/settings/refs.js +288 -0
  396. package/src/runtime/settings/registry.js +553 -0
  397. package/src/runtime/settings/resolve.js +713 -0
  398. package/src/runtime/settings/shared.js +37 -0
  399. package/src/runtime/settings/worker-billing.js +107 -0
  400. package/src/runtime/settings/write.js +269 -0
  401. package/src/runtime/slot-command.js +78 -0
  402. package/src/runtime/slots.js +671 -0
  403. package/src/runtime/source-version.js +1 -0
  404. package/src/runtime/state-root.js +217 -0
  405. package/src/runtime/storage/cli.js +12 -5
  406. package/src/runtime/storage/engine.js +9 -2
  407. package/src/runtime/storage/registry.js +14 -1
  408. package/src/runtime/storage/roots.js +66 -16
  409. package/src/runtime/storage/rules.js +82 -10
  410. package/src/runtime/storage/upkeep.js +10 -2
  411. package/src/runtime/storage/work-status.js +245 -26
  412. package/src/runtime/task-attempts.js +589 -69
  413. package/src/runtime/task-classifier.js +85 -14
  414. package/src/runtime/task-graph.js +373 -0
  415. package/src/runtime/task-run.js +778 -0
  416. package/src/runtime/task-scope.js +176 -55
  417. package/src/runtime/task-sources.js +147 -0
  418. package/src/runtime/task-state.js +373 -64
  419. package/src/runtime/team/admission.js +301 -0
  420. package/src/runtime/team/envelope.js +324 -0
  421. package/src/runtime/team/review-guard.js +156 -0
  422. package/src/runtime/trace/analyze.js +427 -0
  423. package/src/runtime/trace/baseline.js +770 -0
  424. package/src/runtime/trace/ledger.js +63 -140
  425. package/src/runtime/trace/otlp-export.js +568 -0
  426. package/src/runtime/trace/otlp-map.js +481 -0
  427. package/src/runtime/trace/spans.js +745 -0
  428. package/src/runtime/trace/telemetry.js +225 -0
  429. package/src/runtime/trace/views.js +1 -0
  430. package/src/runtime/transcripts/command.js +98 -0
  431. package/src/runtime/transcripts/cursor.js +326 -0
  432. package/src/runtime/transcripts/read.js +126 -0
  433. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  434. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  435. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  436. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  437. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  438. package/src/runtime/transcripts/registry.js +161 -0
  439. package/src/runtime/transcripts/stats.js +161 -0
  440. package/src/runtime/verb-view.js +267 -0
  441. package/src/runtime/verification/check-key.js +628 -0
  442. package/src/runtime/verification/contract-runner.js +546 -11
  443. package/src/runtime/verification/engine.js +499 -54
  444. package/src/runtime/verification/impact.js +617 -0
  445. package/src/runtime/verification/inflight.js +205 -0
  446. package/src/runtime/verification/registry.js +176 -0
  447. package/src/runtime/verification/reuse.js +184 -0
  448. package/src/runtime/verification/telemetry-emit.js +254 -0
  449. package/src/runtime/verification/test-selection.js +67 -7
  450. package/src/runtime/worker/active.js +90 -0
  451. package/src/runtime/worker/cancel.js +222 -0
  452. package/src/runtime/worker/catalogue.js +122 -0
  453. package/src/runtime/worker/command.js +677 -0
  454. package/src/runtime/worker/evidence.js +288 -0
  455. package/src/runtime/worker/launch.js +256 -0
  456. package/src/runtime/worker/models.js +137 -0
  457. package/src/runtime/worker/parsers.js +218 -0
  458. package/src/runtime/worker/probes/index.js +706 -0
  459. package/src/runtime/worker/process-tree.js +415 -0
  460. package/src/runtime/worker/quota.js +43 -0
  461. package/src/runtime/worker/readiness.js +713 -0
  462. package/src/runtime/worker/run-store.js +166 -0
  463. package/src/runtime/worker/supervisor.js +541 -0
  464. package/src/runtime/worker/worktree-check.js +252 -0
  465. package/src/runtime/workflow-engine.js +5 -1
  466. package/src/runtime/workflow-orchestrator.js +610 -67
  467. package/src/runtime/worktree.js +149 -22
  468. package/src/state/index.js +1 -1
  469. package/src/state/lockfile.js +64 -10
  470. package/src/state/run-lock.js +1 -1
  471. package/types/node-commonjs.d.ts +106 -7
  472. package/core/harnesses/claude/hooks/pre-bash-guard.sh +0 -10
  473. package/core/harnesses/codex/hooks/pre-bash-guard.sh +0 -10
  474. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  475. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  476. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -10
  477. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  478. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -10
  479. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  480. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -10
  481. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  482. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  483. package/core/harnesses/gemini/hooks/session-start.sh +0 -7
  484. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  485. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +0 -24
  486. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +0 -91
  487. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +0 -378
  488. package/core/shared/guidance/FLAGS.md +0 -25
  489. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  490. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  491. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  492. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  493. package/src/adapters/gemini/hooks.js +0 -251
  494. package/src/adapters/gemini/index.js +0 -429
@@ -1,6 +1,14 @@
1
1
  # `--scaffold` — turning the plan into a reviewable code scaffold
2
2
 
3
- Read this file only when `/do-execute-plan --scaffold` is the active invocation. It is step 3 of
3
+ ## Contents
4
+
5
+ - What it produces
6
+ - Two cases, one output tree
7
+ - Part 1 — in-scope scaffold from the three artifacts
8
+ - Part 2 — external dependencies (cross-service contract frames)
9
+ - Constraints (carried from the design — do not relax these)
10
+
11
+ Read this file only when `/do-execute-plan --scaffold` is the active invocation. It is step 5 of
4
12
  `do-execute-plan`'s Behavioral Flow, factored out here per Anthropic's progressive-disclosure
5
13
  guidance so the other invocation modes (`--scope next|phase:N|all|resume`, and the `--review`
6
14
  modifier) don't pay the token cost of this algorithm on every invocation.
@@ -80,7 +88,7 @@ do not restate its counts from memory or re-derive them by reading the tree.
80
88
  Run it from the project root: the verb resolves which feature is active exactly the way `paths`
81
89
  does, from the working directory. The one case worth knowing about is a non-git root holding more
82
90
  than one feature directory — there the resolver cannot choose, and exits 2 naming every candidate.
83
- Ask the user which one via `AskUserQuestion` and re-run as `"$DOFLOW" scaffold --slug=<chosen>
91
+ Ask the user which one via the question tool and re-run as `"$DOFLOW" scaffold --slug=<chosen>
84
92
  --json`; do not pick for them.
85
93
 
86
94
  Exit codes follow the runtime's uniform contract: `0` complete, `1` a finding you must report to the
@@ -93,14 +101,14 @@ What the generator does, so you can read its output rather than guess at it:
93
101
  1. **Reads all three artifacts** and records each one's SHA-256 in `MANIFEST.md`. A missing one, or
94
102
  a `plan.md` with no parseable task list, is `BLOCKED`: no source files are written.
95
103
  2. **Builds the traceability chain** — a task's `[US#]` resolves through `requirement.md`'s FR index
96
- to its requirements, and through `design.md` §3 to the components serving them. That chain is
104
+ to its requirements, and through `design.md` Components & Boundaries to the components serving them. That chain is
97
105
  what puts a real FR / component / task in every file header instead of a generic banner.
98
106
  3. **Mirrors the intended source layout** from every task's `files:` value into `scaffold/src/`,
99
107
  keeping each path exactly as the plan wrote it and appending `.stub`. In a repository whose code
100
108
  already lives in `src/`, that reads as `scaffold/src/src/runtime/thing.js.stub`; the doubling is
101
109
  deliberate, so a path can never collide with `MANIFEST.md` or `contracts/`.
102
110
  4. **Emits per-file frames** in the language of the file's own extension — the plan already stated
103
- it, so nothing is inferred. Where `design.md` §4 declares an interface for the file's component,
111
+ it, so nothing is inferred. Where `design.md` API / Interface Contracts declares an interface for the file's component,
104
112
  that block is carried through verbatim as a quoted comment; where it does not, the file gets one
105
113
  clearly labelled placeholder signature and is listed under **Emitted without a declared shape**.
106
114
  No API nobody wrote down is ever invented.
@@ -397,7 +405,7 @@ rather than restated as prose.
397
405
  - Never write outside `agent-docs/doflow/<slug>/scaffold/` — not into the source tree, and not
398
406
  into a target service's own repo (including the dependency service scanned for language
399
407
  inference in Part 2 step 4 — read-only). This is the one property the whole artifact rests on, and
400
- `test/guards/scaffold.test.js` enforces it by running the generator against a filesystem that can
408
+ `test/guards/scaffold.test.ts` enforces it by running the generator against a filesystem that can
401
409
  only reach the feature directory.
402
410
  - `code/`/`data/`/`mock/` content is pinned, not freeform: signatures and type/data shapes only,
403
411
  zero implementation logic — in the inferred language, or the pinned generic-pseudocode grammar
@@ -422,9 +430,9 @@ rather than restated as prose.
422
430
  generated `code/`/`data/`/`mock/`/`default/` output directory — still not a write outside
423
431
  `agent-docs/doflow/<slug>/scaffold/` (the first Constraint above still holds), but visually
424
432
  confusing; not auto-detected or renamed.
425
- - The one hard gate is `do-execute-plan` step 1 (`"$DOFLOW" prereqs --require-plan`) — neither Part
426
- of this file adds a gate of its own. The advisory notice Part 2 raises for a dependency it cannot
427
- resolve is non-blocking, and Part 1's non-zero exit is a finding to report, not a stop.
433
+ - The gates are the chain's own: the advisory `pre-implement-gate.sh` and step 1's
434
+ `"$DOFLOW" prereqs --require-plan`. Neither Part adds gates. Part 2 unresolved dependencies do
435
+ not block; Part 1 non-zero exits are reportable, not stops.
428
436
  - A `depends-on:` value whose starting directory does not exist on disk at all is excluded from
429
437
  service-identity derivation *entirely* (Part 2 step 1) — it never reaches Part 2 step 5's local
430
438
  generation path. It gets a frame only if the same task also carries an `external-contract:` field
@@ -438,4 +446,4 @@ rather than restated as prose.
438
446
  - A documented dependency's frame renders in the *consuming* task's own inferred language (Part 2
439
447
  step 4,
440
448
  reused unchanged, applied to the consumer's repo) — never a language inferred from the
441
- dependency itself, which has no local repo to infer one from.
449
+ dependency itself, which has no local repo to infer one from.
@@ -0,0 +1,11 @@
1
+ # Writing a `state.md` checkpoint (SKILL.md step 8)
2
+
3
+ - Every checkpoint: append the finished task(s) to the Task Ledger (`Commits` as the actual
4
+ `[base7]..[head7]` range once committed, or `uncommitted (working tree)` when this run doesn't
5
+ commit on its own), move them from **In Progress** to **Completed**, and rewrite **Status**,
6
+ **Blocked**, **Findings** and **Next Action** (the next pending task) in place, deleting a
7
+ blocker or finding that no longer applies, so a resumed session (or a different one) can pick up
8
+ from this file and `git log` alone, never from conversation memory. A `Findings` entry records
9
+ a review finding deliberately left unfixed (rare); write "None." otherwise, never omit it.
10
+ - This is bookkeeping, not a gate: a write failure here degrades resumability, not correctness —
11
+ report it and continue rather than treating it as a task failure.
@@ -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
+ advisory hook (`pre-implement-gate.sh`; its scope is in `references/DOFLOW_CHAIN.md`), which
111
+ still reports a missing artifact. 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:**
@@ -164,8 +163,8 @@ Before a feature stage relies on an external fact that local or user evidence ca
164
163
  ambiguous answer.
165
164
  - Record each gate answer it collects through `orchestrate --action decide-gate`, so the stage skill
166
165
  that owns that gate finds it already resolved instead of asking the user the same question twice.
167
- - Compose with the existing `pre-implement-gate.sh` hard gate rather than bypass or duplicate it.
168
- That hook keys on branch and artifact state, not on class, so it can deny a `bug` or
166
+ - Compose with the existing `pre-implement-gate.sh` advisory hook rather than bypass or duplicate it.
167
+ That hook keys on branch and artifact state, not on class, so it can advise against a `bug` or
169
168
  `trivial-edit` workflow's edits on a branch that already holds an incomplete feature dir —
170
169
  surface its message as written.
171
170
 
@@ -125,10 +125,10 @@ A `caller-not-a-stage` rejection is about **you**, not about the class. Answer i
125
125
  stage — propose one of those, or hand the work to the skill this class names for the stage you
126
126
  meant. Re-proposing the same class will be rejected the same way.
127
127
 
128
- ## The hard hook does not know about classes
128
+ ## The advisory 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 advises on: SKILL.md step 7): if the
131
+ current branch already carries a feature directory the gate flags, it advises on source edits
132
132
  regardless of the class in play — so a `bug` or `trivial-edit` workflow started on that branch will
133
- be blocked at its implementation stage. Surface the hook's message as written. Do not route around
134
- it, and do not create placeholder artifacts to satisfy it.
133
+ get that advisory at its implementation stage. Surface the hook's message as written. Do not route
134
+ around 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,16 +46,15 @@ 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
 
56
+ Once per stage, after `feature_slug` resolves, run `"$DOFLOW" attendance --task-id "<feature_slug>"`; `unattended` → `references/WORKFLOW_HANDOFF.md` § Unattended stage.
57
+
59
58
  2. **Resolve the task id, then evaluate readiness — skip only when standalone**:
60
59
  - `<task id>` is the same unit every recording stage keys on: the plan task id when one exists,
61
60
  otherwise the feature slug that step 1's `"$DOFLOW" paths --json` resolved, or the issue id you
@@ -76,9 +75,9 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
76
75
  of `bug`, `refactor`, `dependency-change` or `trivial-edit` the recorded work already fits.
77
76
  `do-implement` never serves `feature`; that class's implementation stage is `/do-execute-plan`.
78
77
  ```bash
79
- "$DOFLOW" classify --task-class "<proposed>" --calling-skill do-implement --json
78
+ "$DOFLOW" classify --task-class "<proposed>" --calling-skill do-implement --view brief --json
80
79
  ```
81
- Branch on the returned `outcome`, not the exit code. `ACCEPTED` — the returned `workflow` names
80
+ Branch on `outcome`, not the exit code. `ACCEPTED` — the returned `workflow` names
82
81
  the validated class to evaluate readiness against. `REJECTED` — stop, print `message` verbatim
83
82
  (it names `validClasses`), ask the user to choose from that set, then re-validate; never
84
83
  substitute `feature` for the class that was rejected.
@@ -97,7 +96,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
97
96
  computes, so a zero exit is not a green light.
98
97
  - **`STOP`** — refuse to modify source. Report which claim is conflicted and what evidence
99
98
  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`
99
+ - **`ASK_USER`** — a decision is owed by the user. Ask it through RULE_04 (`rules/RULES.md`)
101
100
  mechanism and wait; editing first would decide it silently on their behalf.
102
101
  - **`ENTER`** — proceed to the context-pack call below. In standalone mode this includes
103
102
  `NEEDS_EVIDENCE`: the unmet contract is reported, not enforced — relay the missing
@@ -121,8 +120,8 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
121
120
  established.
122
121
  - The repository's `pre-implement-gate` hook checks file existence (`requirement.md` /
123
122
  `design.md` / `plan.md`) on every `Edit`/`Write` call regardless of which skill is editing. On
124
- a harness with an edit hook it also denies the edit of a task held to a readiness record that
125
- is not `READY`; this step writes that record, and is not a way around the hook.
123
+ a harness with an edit hook it also advises when a held task's readiness record is not
124
+ `READY`; the hook never denies. This step writes that record, and is not a way around it.
126
125
 
127
126
  3. **Understand before writing**:
128
127
  - Read the files the change touches and their immediate neighbors — naming conventions, error
@@ -141,7 +140,7 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
141
140
  duplicates the host's own edit-approval mechanisms.
142
141
  - Stop after the change set only when one of two things is true: the user asked for the plan
143
142
  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
143
+ a genuine user-owned decision — then ask it per RULE_04 (`rules/RULES.md`) and wait, because
145
144
  editing first would decide it silently.
146
145
 
147
146
  5. **Implement**:
@@ -149,8 +148,8 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
149
148
  unimplemented mock functions, or `throw new Error('Not implemented')` placeholders in the
150
149
  produced change. Every changed component must be fully wired and functional.
151
150
  - Before the first source edit, a run for this task needs step 2's recorded readiness to be
152
- `READY`: the hook denies the edit otherwise where there is one, and elsewhere step 7's handoff
153
- is refused after the edits are made. A standalone `NEEDS_EVIDENCE` does not pass it.
151
+ `READY`: the edit hook only advises, and the runtime refuses step 7's handoff after the edits are
152
+ made. A standalone `NEEDS_EVIDENCE` does not pass it.
154
153
  - Keep it scoped to what was asked — no bonus refactors, no speculative abstractions (the same
155
154
  scope-discipline rule the chain's own artifacts would otherwise remind you of; here, hold
156
155
  yourself to it directly).
@@ -218,6 +217,6 @@ advance past the mutating stage only this skill may complete.
218
217
  multi-task checklist through specialist subagents — that is `/do-execute-plan`'s job once a real
219
218
  plan exists; silently override the repository's own `pre-implement-gate` hook. That hook triggers
220
219
  on any `Edit`/`Write` call, not on which skill made it — a branch mid-chain with a started feature
221
- but no `design.md` still gets blocked here exactly as it would anywhere else, and that is by
220
+ but no `design.md` still gets the same advisory here as it would anywhere else, and that is by
222
221
  design, not a gap this skill works around. Resolve a workflow gate, or start a workflow run for a
223
222
  standalone implementation.
@@ -37,13 +37,15 @@ Run every command below from the project root — the walk-up starts at `$PWD`.
37
37
 
38
38
  `feature_slug` `null` with a non-empty `candidate_slugs` is an unresolved choice, not "no active feature": ask one option per entry, re-resolve with `"$DOFLOW" paths --json --slug="<chosen>"`, and use that slug for the rest of this flow. `/do-flow` passing `--slug` already resolves it — no prompt then.
39
39
 
40
+ Once per stage, after `feature_slug` resolves, run `"$DOFLOW" attendance --task-id "<feature_slug>"`; `unattended` → `references/WORKFLOW_HANDOFF.md` § Unattended stage.
41
+
40
42
  2. **Propose one task class; the runtime validates it** — name exactly one class id for the work
41
43
  being planned. `/do-flow` passes one when it invoked this skill; a user who named one settles it;
42
44
  otherwise derive it from `requirement.md` and `design.md`, not from their mere existence.
43
45
  ```bash
44
- "$DOFLOW" classify --task-class "<proposed>" --calling-skill do-plan --json
46
+ "$DOFLOW" classify --task-class "<proposed>" --calling-skill do-plan --view brief --json
45
47
  ```
46
- Branch on the returned `outcome` field, not the exit code.
48
+ Branch on `outcome`, not the exit code.
47
49
  - **`ACCEPTED`** — the returned `workflow` is this run's plan of record; read `stages`, `gates` and `handoff` off it rather than from memory.
48
50
  - **`REJECTED`** — **stop.** Print `message` verbatim (it already names `validClasses` and any `suggestions`), ask the user to choose from `validClasses`, then re-validate. Never substitute `feature`.
49
51
  A rejection may be about **you** rather than the class (`reason: caller-not-a-stage`). Then the fix is to propose one of the classes in `fit.hostingClasses`, or to hand the work to the skill this class names for the stage you meant — not to re-propose the same class.
@@ -59,8 +61,8 @@ stages to implementation, and writing them a `plan.md` adds a gate their workflo
59
61
  not have.
60
62
 
61
63
  3. **Precondition (advisory)** — if `has_requirement` or `has_design` is false, warn and offer to
62
- run `/do-brainstorm` / `/do-design` first. This gate is **advisory** (skippable), not the hard
63
- hook gate.
64
+ run `/do-brainstorm` / `/do-design` first. This gate is **advisory** (skippable), like the edit
65
+ hook.
64
66
  4. **Read inputs** — compile the recorded prior context first, using the same task id rule step 10
65
67
  uses below (the plan task id for anything already scoped to a single `- [ ]` task, otherwise the
66
68
  feature slug):
@@ -70,17 +72,17 @@ not have.
70
72
  **Exit 1 means the pack came back empty; exit 3 means overflow: the pack is complete, act on
71
73
  `overflowAction.message` and report the gap.** By this point `do-design` should have batched
72
74
  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.
75
+ task id mismatched. Empty packs are advisory; prerequisites check artifact existence only. Report
76
+ them in this stage's report and `plan.md` §3 "Research & Decisions"; prose without a compiled
77
+ pack cannot claim prior evidence. When non-empty, read it alongside `requirement.md`,
78
+ `design.md`, and the constitution.
77
79
  **Also read `specs.md` when step 1's `has_specs` is true** — use that flag, never a filesystem
78
80
  check of your own, and read the `specs` path the resolver returned. `/do-design` moves the
79
81
  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
82
+ 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
83
  plan must decompose toward live only in `specs.md`. Planning from `design.md` alone on such a
82
84
  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
85
+ had a `specs.md`), the contracts are still in `design.md` (API / Interface Contracts, Data Model) and there is nothing extra to
84
86
  read. Read
85
87
  `constitution_base`,
86
88
  then read `constitution_local` **only when `has_constitution_local` is true** — use that flag,
@@ -115,15 +117,17 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
115
117
  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
118
  This stage fills the plan from requirement + design + constitution rather than by eliciting, so
117
119
  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
120
+ counterpart here. Should a future revision of this skill add a question-tool clarification
119
121
  loop, each of its rounds logs to `plan-<NN>-question.md` at the feature root exactly as
120
122
  `/do-brainstorm` and `/do-design` log theirs to their own subdirectories, numbered from step 1's
121
123
  `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.
124
+ 6. **Constitution Check (exit gate)** — evaluate the plan against both tiers as reconciled in step
125
+ 4. Record one row per principle in `plan.md` §2: its id, its tier (MUST unless it says `**Tier:**
126
+ SHOULD`) and PASS/FAIL; a base MUST that tier-2 makes SHOULD names that overlay version in its
127
+ row. On a violation, revise the approach first. A MUST marked FAIL or left
128
+ without a row refuses step 11's handoff; a SHOULD FAIL is a note. That refusal is the runtime's,
129
+ beside the advisory hook on artifact existence (`references/DOFLOW_CHAIN.md` scopes both).
130
+ There is no waiver: revise the plan, or a person amends the constitution with `/do-constitution`.
127
131
  7. **Decompose into Tasks (section 8)** — dependency-ordered, `[US#]`-traced to the requirement's
128
132
  user stories, owner+files named per task, with checkpoints and completion criteria.
129
133
  Read the guidance tree's `references/ORCHESTRATION.md` and
@@ -131,7 +135,7 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
131
135
  `--depth shallow|normal|deep` is the single granularity knob: it sets how finely a phase is
132
136
  split into tasks and how much detail each task carries. Default `normal`.
133
137
  **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
138
+ and agent-spec owners (review tasks name `reviewer`) per task
135
139
  enables `/do-execute-plan` to compute write-set isolation (`parallel-check`). Tasks with disjoint
136
140
  file sets run concurrently without merge conflicts, while overlapping tasks are safely serialized.
137
141
  **Mark `[P]` by default:** parallel execution is the framework default, so apply `[P]` to every
@@ -159,8 +163,13 @@ Filling §8's task dependency graph, read the guidance tree's `references/DIAGRA
159
163
  table: `primary` if it owns a task via `files:`, `dependency-only` if it's only ever reached via
160
164
  `depends-on:`. A single-repo result → `N/A: single-repo feature`. Derivation only — no branch is
161
165
  created here (`/do-execute-plan`'s job, lazily, per repo).
162
- 9. **Validate** — run the advisory consistency check and surface any findings verbatim:
166
+ 9. **Self-review, then validate** — reread the plan against itself and fix it inline: every
167
+ requirement id and `[US#]` story is traced to a task or a §7 row, no TBD/TODO/"later" placeholder
168
+ is left, and no task is coarser than `--depth` sets (split one that is). `plan-check` scans the
169
+ first two and prints each one as a `findings` entry with its `path:line`. Fix every entry, then run
170
+ the advisory consistency check and surface its findings verbatim:
163
171
  ```bash
172
+ "$DOFLOW" plan-check "<plan path>" --json
164
173
  "$DOFLOW" validate "<plan path>"
165
174
  ```
166
175
  This also verifies each `### Task Summary` rollup row against the `- [ ]` lines under its
@@ -190,14 +199,19 @@ Item schema, provenance rules, and the refused-field list: the guidance tree's `
190
199
  ```bash
191
200
  "$DOFLOW" render-audit --slug="<task id>" --json
192
201
  ```
193
- Leave any returned approval gate for `/do-flow` or `/do-execute-plan` to present.
202
+ Leave any returned approval gate for `/do-flow` or `/do-execute-plan` to present (unattended: the loop
203
+ decides it by policy).
194
204
 
195
205
  12. **Stop** — report the plan path, Constitution Check result, the task count (`[P]`/sequential),
196
206
  and the derived branch name/repo count when the Repo Branch Plan is populated.
197
207
 
208
+ ### Planning Efficiency Invariants
209
+ - Identify concurrent versus sequential operations across disjoint write sets.
210
+ - Map explicit dependencies between tasks; batch tool calls; maximize parallel execution gains.
211
+
198
212
  ## Embedded feature research
199
213
 
200
- For an external fact gap or explicit request, follow the conditional protocol in `../do-document/references/embedded-research.md` before stage completion.
214
+ For an external fact gap or request, follow the Gap or request protocol in `../do-document/references/embedded-research.md` before stage completion.
201
215
 
202
216
  ## Boundaries
203
217
  **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
  >