@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
@@ -51,8 +51,8 @@ Rules:
51
51
  which is reconciled only after the whole file is read.
52
52
 
53
53
  Which sections take an index: `requirement.md` §3 Functional Requirements, §4 Non-Functional
54
- Requirements and §8 Assumptions; `design.md` §3 Components & Boundaries, §7 Risks and §8
55
- Assumptions; `plan.md` §4 Components & Changes and §6 Risks; `specs.md` §1 Interface Contracts.
54
+ Requirements and §8 Assumptions; `design.md` Components & Boundaries, Design Risks & Alternatives
55
+ Considered and Assumptions; `plan.md` §4 Components & Changes and §6 Risks; `specs.md` §1 Interface Contracts.
56
56
  Prose sections do not.
57
57
 
58
58
  ## 2. Status and Maturity — two closed vocabularies
@@ -92,8 +92,8 @@ vocabulary in the wrong place, and `Draft` was never a legal member of it.
92
92
  ## 3. History — the live body stays current
93
93
 
94
94
  When an item is superseded, its obsolete prose leaves the `**Detail**` block and moves to the
95
- artifact's own final History section — §9 for `requirement.md`, `design.md` and `plan.md`; §2 for
96
- `specs.md`. The index row stays as a tombstone. Reading the body top to bottom therefore yields
95
+ artifact's own final History section — the section titled History, last in `requirement.md`,
96
+ `design.md` and `plan.md`; §2 for `specs.md`. The index row stays as a tombstone. Reading the body top to bottom therefore yields
97
97
  current truth with no historical detours, while the supersession is still visible at a glance.
98
98
 
99
99
  Two rules bind that mechanism, and nothing else in this document states them:
@@ -120,7 +120,7 @@ below so the reasoning behind a reversal is not compressed into a cell:
120
120
 
121
121
  | Date | ID | Change | Replaced by |
122
122
  |---|---|---|---|
123
- | 2026-07-29 | FR-001 | Field renamed during design | design §4.1 |
123
+ | 2026-07-29 | FR-001 | Field renamed during design | design Interface Contracts |
124
124
 
125
125
  **Detail**
126
126
 
@@ -146,7 +146,9 @@ A feature with a decision register compacts History mechanically; see §12.
146
146
  | Artifact | Section | Slot |
147
147
  |---|---|---|
148
148
  | `requirement.md` | §1 | Scope boundary `flowchart` |
149
- | `design.md` | §2 | Three C4 levels, each a `flowchart` with `subgraph` boundaries |
149
+ | `design.md` | System Overview (C4) | Three C4 levels, each a `flowchart` with `subgraph` boundaries |
150
+ | `design.md` | Concepts | Relationship `flowchart` of the domain nouns, edges labelled |
151
+ | `design.md` | Journeys | Per journey: one `flowchart` or `sequenceDiagram`, plus a `stateDiagram-v2` for each stateful thing it creates |
150
152
  | `plan.md` | §8 | Phase and task dependency `flowchart` |
151
153
  | `data-model.md` | §1 | Conceptual domain map `flowchart`, then one `erDiagram` per bounded subdomain |
152
154
  | `data-model.md` | §2 | Interaction `sequenceDiagram` |
@@ -158,7 +160,7 @@ in-scope item produces, so the shape of the change is visible before the prose.
158
160
  `subgraph IN["In scope"]` / `subgraph OUT["Out of scope"]`. Write `N/A: [why]` for a change too
159
161
  small to have a meaningful boundary.
160
162
 
161
- ### C4 levels — `design.md` §2
163
+ ### C4 levels — `design.md` System Overview (C4)
162
164
 
163
165
  C4 is kept as the **conceptual zoom model** — system context, container, component — and rendered
164
166
  with Mermaid `flowchart` plus `subgraph` blocks marking C4 boundaries. Each level takes its own
@@ -171,13 +173,13 @@ heading, written `### C4 Level 1: System Context`, `### C4 Level 2: Container` a
171
173
  | C4 Level 2 | Independently deployable units and how they talk | yes |
172
174
  | C4 Level 3 | Internals of one container | only when the feature touches 3+ components in a single container |
173
175
 
174
- **No level label may match `^C[0-9]+$`.** That pattern is what a `design.md` §3 component ID looks
176
+ **No level label may match `^C[0-9]+$`.** That pattern is what a `design.md` component ID looks
175
177
  like, so a bare `C3` in the same document is ambiguous between the third zoom level and the third
176
178
  component. Spelling the level `C4 Level 3` keeps the C4 vocabulary explicit for a reviewer who
177
179
  cites levels by number while leaving the component IDs unambiguous.
178
180
 
179
181
  Skip a level with `N/A: [why]`; for C4 Level 3 that is normally
180
- `N/A: covered by §3 Components & Boundaries`. `DIAGRAM_GUIDE.md` §1 carries the reasoning that
182
+ `N/A: covered by Components & Boundaries`. `DIAGRAM_GUIDE.md` §1 carries the reasoning that
181
183
  excludes the `C4Context` / `C4Container` diagram types in favour of `flowchart`.
182
184
 
183
185
  ### Task dependency graph — `plan.md` §8
@@ -235,8 +237,8 @@ Acceptance criteria are formatted as testable Gherkin BDD scenario blocks mapped
235
237
 
236
238
  ## 7. Technical Scaffolding in specs.md and data-model.md
237
239
 
238
- `specs.md` and `data-model.md` provide dedicated homes for technical implementation anchors — `design.md` §4/§5 hold
239
- only a one-line pointer to them:
240
+ `specs.md` and `data-model.md` provide dedicated homes for technical implementation anchors — `design.md`'s API / Interface Contracts and Data Model
241
+ sections hold only a one-line pointer to them:
240
242
  - **Interface Contracts (`specs.md` §1):** HTTP endpoints (methods, routes, request/response shapes, status codes), CLI verb signatures, and repository/service interfaces (`interface` → `concrete` → `mock`).
241
243
  - **Data Model (`data-model.md` §1):** Relational data model diagrams, database table schema catalogs (table purpose, keys, relations, indexes, ORM/DDL file references), and UX design tokens (color palettes, component states, layout cues).
242
244
 
@@ -262,7 +264,8 @@ file nobody looked at.
262
264
 
263
265
  Checked: index/detail parity both directions · `Status` vocabulary · ID-shaped supersede targets
264
266
  resolve · superseded items have a History entry · plan rollup counts match the checklist ·
265
- decision references are not stale · no unknown decision references (every cited `DEC-###` is in the register).
267
+ decision references are not stale · no unknown decision references (every cited `DEC-###` is in the register) ·
268
+ plan task lines parse as the task-attempt ledger reads them (task-graph).
266
269
 
267
270
  Parity reads both detail-entry forms of §1: the `- **<ID>` bullet, and the `#### <ID>: <text>`
268
271
  heading whose ID also appears in that section's index table. A heading that merely looks ID-shaped
@@ -289,7 +292,7 @@ disagree, deciding which one is wrong is authoring judgement, not a mechanical f
289
292
  Three sections exist so a reviewer can reach a judgement from the top of a document rather than by
290
293
  reading it whole:
291
294
 
292
- - **`design.md` §1 — the decision-and-blocker summary.** A table with the columns `Decision`,
295
+ - **`design.md` Architecture Approach — the decision-and-blocker summary.** A table with the columns `Decision`,
293
296
  `Shape chosen`, `Owner`, `Blocks approval?`, positioned above the architectural prose. One row per
294
297
  decision the design makes. A reviewer who reads only this table knows what is being settled, who
295
298
  settled it, and what stands between the design and approval.
@@ -318,7 +321,7 @@ flowchart. There is one spelling of it in this document and no second one.
318
321
 
319
322
  ### The component detail shape
320
323
 
321
- A `design.md` §3 component detail entry names the component after its ID, then answers four labels
324
+ A `design.md` Components & Boundaries detail entry names the component after its ID, then answers four labels
322
325
  in this order: `**Responsibility:**`, `**Owns:**`, `**Does not own:**`, `**Contracts:**`. None may
323
326
  be dropped or reordered. What a component deliberately does *not* own is the half a reviewer cannot
324
327
  reconstruct from the code, which is why it has a label of its own rather than a sentence.
@@ -328,6 +331,17 @@ bold-labelled lists on exactly that ground. The entry still begins `- **<ID>:**`
328
331
  locates it; the labels sit in nested bullets beneath. No other artifact's detail entries take this
329
332
  shape.
330
333
 
334
+ ### The `design.md` section order
335
+
336
+ In order: `Architecture Approach`, `System Overview (C4)`, `Concepts`, `Journeys`,
337
+ `Components & Boundaries`, `API / Interface Contracts`, `Data Model`, `Sequence / Data Flow`,
338
+ `Design Risks & Alternatives Considered`, `Open Points for Review`, `Assumptions`, `History`. Readers
339
+ locate a section by title, never number, so an older nine-section design still parses. The front half
340
+ (through `Journeys`) uses plain nouns, no component IDs or code names. Each `### Journey N — <name>`
341
+ has one picture, a `stateDiagram-v2` per stateful thing it creates, and a rules table; `Journeys` also
342
+ holds a `### Worked example` and an `### Eligibility / decision inputs` table. A guard compares this
343
+ list with the template and the §4 slot registry.
344
+
331
345
  ### Nothing checks this per artifact
332
346
 
333
347
  These are conventions the writing skill follows, not rules the checker runs. `validate-artifacts.sh`
@@ -363,8 +377,8 @@ applies.
363
377
 
364
378
  - A line that applies a registered decision cites it as a bare `DEC-###`.
365
379
  - `plan.md` §3 lists the `DEC-###` decisions the plan rests on and authors no `D#`.
366
- - A design §1 row ends its `Shape chosen` cell with its `DEC-###`. A §8 row that came from a
367
- "Decide for me" pick cites its `DEC-###` in `Basis`.
380
+ - A design Architecture Approach row ends its `Shape chosen` cell with its `DEC-###`. An
381
+ Assumptions row that came from a "Decide for me" pick cites its `DEC-###` in `Basis`.
368
382
  - A line citing a superseded decision is a `stale` finding unless it also names a later decision in
369
383
  that chain, and a cited `DEC-###` absent from the register is an `unknown` finding (§9).
370
384
  - Compaction moves History content to `decisions/history/<artifact>.md` and leaves one pointer line,
@@ -2,7 +2,8 @@
2
2
 
3
3
  How a chain artifact reads, sentence by sentence. Structure lives in `ARTIFACT_FORMAT.md`; this file
4
4
  covers only the writing. Read on demand by `do-brainstorm`, `do-design` and `do-plan` when
5
- filling a template, and never loaded into a session by default.
5
+ filling a template, and by `do-document` and `research-writer` when drafting prose. Never loaded
6
+ into a session by default.
6
7
 
7
8
  ## 1. The rules
8
9
 
@@ -90,7 +91,7 @@ prose rule applies in full to free prose.
90
91
  | Prose rule | Conflicting construct | Which governs |
91
92
  |---|---|---|
92
93
  | Bold for a functional reason only | The `- **<ID>:**` detail-entry shape the checker locates entries by | The detail shape governs. The bold is a structural label, not emphasis. |
93
- | Bold for a functional reason only | The `Responsibility` / `Owns` / `Does not own` / `Contracts` labels of a `design.md` §3 component entry | The labelled shape governs. `ARTIFACT_FORMAT.md` §10 declares these four labels and their order. |
94
+ | Bold for a functional reason only | The `Responsibility` / `Owns` / `Does not own` / `Contracts` labels of a `design.md` Components & Boundaries entry | The labelled shape governs. `ARTIFACT_FORMAT.md` §10 declares these four labels and their order. |
94
95
  | No em or en dashes | The literal `None — initial version.` that `ARTIFACT_FORMAT.md` §3 requires a new artifact to write | The literal governs. Write the em dash. |
95
96
  | Sentence case headings | Every `##` section heading in the four chain-artifact templates, which `ARTIFACT_FORMAT.md` names by their exact words and `validate-artifacts.sh` locates History by | The template headings govern. Do not re-case a heading in a chain artifact. |
96
97
  | Sentence case headings | The `#### <ID>: <text>` heading form of a detail entry, §1's second grammar | The heading governs. Its ID is matched literally against an index row, so its case is not free. |
@@ -1,47 +1,49 @@
1
1
  # Base Constitution (tier-1)
2
2
 
3
- **Version:** 1.0.0 · **Scope:** all repos using the doflow chain
3
+ **Version:** 1.1.0 · **Scope:** all repos using the doflow chain
4
4
 
5
5
  > The universal, non-negotiable rules every feature inherits. This is the **tier-1 base**;
6
6
  > each repo's `agent-docs/constitution.md` (tier-2) overlays it and **takes precedence on
7
7
  > conflict**. `do-paths.sh` locates both tiers and reports whether tier-2 exists; the overlay
8
8
  > itself is performed by the chain skill reading both files, and `/do-plan`'s Constitution Check
9
- > records an **advisory** verdict. See `DOFLOW_CHAIN.md` → "Two-tier constitution" for what is
10
- > computed and what is convention.
9
+ > records one PASS/FAIL row per principle, which the runtime checks at the planning stage's exit.
10
+ > See `DOFLOW_CHAIN.md` → "Two-tier constitution" for what is computed and what is convention.
11
11
 
12
12
  ## Principles
13
13
 
14
- Each states the norm; the arrow points at the always-loaded rule that carries the detail.
14
+ Each states the norm; the arrow points at the always-loaded rule that carries the detail. A
15
+ principle is MUST unless its body has a `**Tier:** SHOULD` line; every base principle is MUST.
15
16
 
16
17
  ### P1 — Safety over speed
17
18
  Security, data integrity, and production safety are never traded for velocity; a destructive or
18
- irreversible action needs explicit confirmation. → `rules/RULE_01_SAFETY.md`.
19
+ irreversible action needs explicit confirmation. → `rules/RULES.md` RULE_01.
19
20
 
20
21
  ### P2 — Evidence over assumptions
21
22
  A claim is backed by a test, a run, or a document, never guessed; a failure is root-caused before
22
- it is fixed. → `rules/RULE_01_SAFETY.md`, `PRINCIPLES.md`.
23
+ it is fixed. → `rules/RULES.md` RULE_01, `PRINCIPLES.md`.
23
24
 
24
25
  ### P3 — Finish what you start
25
26
  No TODO stubs, mocks, or "not implemented" throws in delivered code: done means validated, not
26
- compiling. → `rules/RULE_02_WORKFLOW.md`.
27
+ compiling. → `rules/RULES.md` RULE_02.
27
28
 
28
29
  ### P4 — Scope discipline (YAGNI)
29
30
  Build only what the spec asks — no bonus features, no speculative abstraction.
30
- → `rules/RULE_02_WORKFLOW.md`.
31
+ → `rules/RULES.md` RULE_02.
31
32
 
32
- ### P5 — Parallel by default
33
- Independent work runs concurrently; sequential only for hard dependencies.
34
- → `rules/RULE_02_WORKFLOW.md`.
33
+ ### P5 — Parallel when write sets are disjoint
34
+ Shared write sets/dependencies run sequentially.
35
+ → `rules/RULES.md` RULE_02.
35
36
 
36
37
  ### P6 — Professional honesty
37
38
  No invented metrics, no marketing language; state "untested / needs validation" plainly and push
38
- back on a bad approach with evidence. → `rules/RULE_03_QUALITY.md`.
39
+ back on a bad approach with evidence. → `rules/RULES.md` RULE_03.
39
40
 
40
41
  ## Governance
41
42
  - This base is versioned (semver). Tier-2 repo constitutions may **add** or **override** principles,
42
43
  but may not weaken P1 (Safety). *This constraint is stated to the reading agent; nothing
43
44
  validates it, so a tier-2 file that weakened P1 would not be rejected by any check.*
44
45
  - `/do-plan` MUST evaluate its Constitution Check against both tiers together (tier-2 taking
45
- precedence) and record PASS/FAIL. The verdict is **advisory** — it is recorded in `plan.md`
46
- §2 "Constitution Check" and does not block work; the chain's one hard gate covers artifact
47
- existence only.
46
+ precedence) and record one PASS/FAIL row per principle in `plan.md` §2 "Constitution Check". A
47
+ MUST row marked FAIL, or a MUST principle with no row, refuses the planning stage's exit; a
48
+ SHOULD FAIL is advisory. No model waiver exists: revise the plan, or a person amends the
49
+ constitution through `/do-constitution`. Gate scope: `DOFLOW_CHAIN.md`.
@@ -136,7 +136,7 @@ it carries.
136
136
 
137
137
  Some features author diagrams in PlantUML under `design/c4/` and commit the render. These apply on top of everything above.
138
138
 
139
- **C4 divides by level**: `context.puml`, `container.puml`, `component.puml`, one file each; a level not drawn has no file. The Mermaid in `design.md` §2 is generated from these, so editing it by hand
139
+ **C4 divides by level**: `context.puml`, `container.puml`, `component.puml`, one file each; a level not drawn has no file. The Mermaid in `design.md` System Overview (C4) is generated from these, so editing it by hand
140
140
  is a change the next render discards.
141
141
 
142
142
  **The generated view drops seven things** — element type, technology, description, sprite, tag, link
@@ -1,10 +1,11 @@
1
1
  # DoFlow Chain — Spec-Driven Delivery
2
2
 
3
3
  A spec-kit-style, phase-gated delivery loop (`do-brainstorm → do-design → do-plan →
4
- do-execute-plan → do-test → do-code-review`) on top of the rest of the `/do-*` skills and the five
5
- specialist agents (`core-implementer`, `quality-guardian`, `research-writer`, `spec-analyst`,
6
- `system-architect`). Discipline borrowed from spec-kit; enforcement done with the harness's real
7
- hooks rather than a prompt-read registry. The implement-gate hook is registered in
4
+ do-execute-plan → do-test → do-code-review`) on top of the rest of the `/do-*` skills and the seven
5
+ specialist agents (`core-implementer`, `delivery-lead`, `quality-guardian`,
6
+ `research-writer`, `reviewer`, `spec-analyst`, `system-architect`). Discipline borrowed from
7
+ spec-kit; enforcement done with the harness's real hooks rather than a prompt-read registry.
8
+ The implement-gate hook is registered in
8
9
  `settings.json`. `do-constitution` sits outside the numbered chain — a standalone,
9
10
  still-invocable skill that maintains the persistent rules every phase inherits, not a phase
10
11
  itself. `do-implement` sits outside the numbered chain too, for the opposite reason: it is the
@@ -18,13 +19,11 @@ remains the chain's own implementation phase.
18
19
  |------|-------|
19
20
  | `skills/` | Chain skills: `do-brainstorm` (also creates the feature branch/dir, writes `requirement.md`, optionally captures a PBI/ticket ID), `do-design` (writes `design.md`), `do-plan` (also writes the dependency-ordered task checklist inside `plan.md`, plus a Repo Branch Plan for multi-repo features), `do-execute-plan` (also supports `--scaffold` to emit a reviewable code scaffold under the feature dir — the source layout, signatures and test stubs the three artifacts imply, plus a per-dependency-service contract frame — and lazily creates/tracks each repo's branch as it's first touched; a non-local dependency with a `external-contract:` field gets a frame generated from that doc instead of the default silent skip), `do-test`, `do-code-review`. `do-constitution` is standalone, not part of the numbered chain. |
20
21
  | `scripts/doflow/` | The runtime seam. Skills call `bin/doflow-run <verb>` and never name a helper: the dispatcher decides which `bash/*.sh` helper or Node command serves each verb. The dispatcher owns the verb namespace and is the only place it is written down — an inventory here is the drift this row used to produce. |
21
- | `hooks/` | `pre-implement-gate.sh` — PreToolUse(Edit\|Write) backstop for the one hard gate |
22
- | `templates/doflow/` | `requirement-template.md` (optional `**Ticket:**` header field) / `design-template.md` / `plan-template.md` (its own "Tasks" subsection folds in what used to be a separate tasks template, supports optional `depends-on:` and `external-contract:` fields per task, and a Repo Branch Plan table for multi-repo features) / `state-template.md` (Repo Branch Status table) / `constitution-template.md` / `external-contract-template.md` (pinned structure for a `external-contract:` target — a documented external dependency `--scaffold` can generate a mechanical frame from) — seeded into each feature dir. A shared pool across skills, not per-skill `assets/` — see note below. |
23
- | `references/` | `CONSTITUTION_BASE.md` — tier-1 global constitution base |
22
+ | `shared/hooks/policies/` | `mcp-tool-guard.sh`: MCP policy; `pre-bash-guard.sh`: command denials; `pre-implementation-gate.sh`: artifact/readiness edit gate; `stop-check.sh`: blocks stopping on unfinished-work markers. Harnesses with hook support call these; support differs per harness. |
23
+ | `templates/doflow/` | `constitution-template.md` (tier-2); `data-model-template.md`; `design-template.md`; `external-contract-template.md`; `intent-template.md`; `plan-template.md`; `question-log-template.md`; `requirement-template.md`; `specs-template.md`; `state-template.md`. Chain skills seed feature dirs from a shared pool, not per-skill `assets/`. |
24
+ | `guidance/references/` | `ARTIFACT_FORMAT.md`, `ARTIFACT_VOICE.md`, `CONSTITUTION_BASE.md` (global tier-1), `DIAGRAM_GUIDE.md`, `DOFLOW_CHAIN.md`, `EVIDENCE_LEDGER.md`, `MODEL_SELECTION.md`, `ORCHESTRATION.md`, `RESEARCH_CONFIG.md`, `WORKFLOW_HANDOFF.md`. |
24
25
 
25
- > Paths above are relative to the installed root (`${CLAUDE_CONFIG_DIR:-$HOME/.claude}` globally,
26
- > or a project's own `.claude/` in project scope). Chain skills' resolver lookups check the global
27
- > config dir first, then walk upward from `$PWD` for a project-scoped `.claude/` install.
26
+ > Except `skills/`, use resolver roots: `.doflow/` at/above `$PWD`, then `$HOME/.doflow/`; skills install per harness in its skills dir.
28
27
 
29
28
  ## Core design rules
30
29
 
@@ -37,7 +36,7 @@ remains the chain's own implementation phase.
37
36
  Outside a git repo (e.g. doflow installed at a multi-service container root, above the actual
38
37
  git sub-repos), `do-paths.sh` falls back to scanning `agent-docs/doflow/` directly — one
39
38
  candidate auto-selects, 2+ candidates surface via `candidate_slugs` for the calling skill to
40
- disambiguate using the platform-specific `RULE_04_QUESTIONS.md` mechanism. Artifacts live in
39
+ disambiguate using the platform-specific RULE_04 mechanism in `rules/RULES.md`. Artifacts live in
41
40
  `<repo>/agent-docs/doflow/NNN-slug/`
42
41
  either way.
43
42
  - **Pre-chain intent — an input, not a phase.** An idea that has not been committed to yet goes in
@@ -53,13 +52,11 @@ remains the chain's own implementation phase.
53
52
  `requirement.md`'s `**Intent:**` field — the argument that does so is declared in `/do-brainstorm`'s
54
53
  own `argument-hint`, which is where a single-skill argument is owned. Discovery without an intent is
55
54
  unchanged and is the ordinary case.
56
- - **One hard gate:** source edits are blocked when a feature is started but `requirement.md`,
57
- `design.md`, or `plan.md` is missing. Every other gate is advisory/skippable (solo,
58
- low-ceremony).
55
+ - **Implement gate (hard):** Denies source edits for started features missing `requirement.md`/`design.md`/`plan.md` (`missing-artifacts`), or held tasks without READY at their workflow's first source-mutating stage (`readiness-missing`, `readiness-not-ready`, `readiness-wrong-template`, or `readiness-store-conflict` when a linked worktree's copy differs from the main checkout's). Other blockers: `shared/hooks/policies/`, and the planning stage's exit, which refuses a constitution MUST conflict ("Two-tier constitution" below); all other chain gates are advisory/skippable.
59
56
  - **Two-tier constitution — what is computed vs. what is convention.**
60
57
  `references/CONSTITUTION_BASE.md` (tier-1, global) is overlaid by
61
58
  `<repo>/agent-docs/constitution.md` (tier-2, per-repo), and tier-2 takes precedence. **That
62
- overlay is performed by the chain skill reading both files — no component merges them.** This is
59
+ overlay is performed by the chain skill reading both files — no component writes a merged file.** This is
63
60
  the canonical statement; other places point here rather than restating it.
64
61
 
65
62
  | Step | What happens | Guarantee |
@@ -67,14 +64,15 @@ remains the chain's own implementation phase.
67
64
  | Locate tier-1 | `do-paths.sh` searches two candidates, first hit wins; `null` if none | **computed** |
68
65
  | Locate tier-2 | `do-paths.sh` emits the path plus `has_constitution_local` | **computed** |
69
66
  | Read both files | the chain skill opens them | agent-performed |
70
- | Overlay; tier-2 takes precedence on conflict | the chain skill reconciles them in its own reasoning | **convention** |
67
+ | Overlay; tier-2 takes precedence on conflict | the chain skill reconciles them; the exit check overlays them by principle id | **convention**; **computed** for the check |
71
68
  | "Tier-2 may not weaken P1 (Safety)" | a rule stated to the agent | **convention, unvalidated** |
72
- | Constitution Check verdict | recorded in `plan.md` §2 "Constitution Check" | **advisory — blocks nothing** |
69
+ | Constitution Check verdict | one PASS/FAIL row per principle in `plan.md` §2; the `do-plan` stage's handoff refuses a MUST marked FAIL or without a row | **computed — blocks the planning exit** |
73
70
  | Propagate pointer to the agent context file | `sync-context.sh` writes a marker block | **computed** |
74
71
 
75
72
  Both path lookups run unconditionally, whether or not `do-constitution` has ever been invoked.
76
- Nothing detects a conflict between the tiers, and nothing validates the P1 rule — so avoid
77
- describing this model as *resolved* (there is no merged artifact) or *enforced* (nothing blocks).
73
+ The model judges each principle; the runtime enforces only the record, MUST unless a principle
74
+ says `**Tier:** SHOULD`, with no waiver. Nothing validates the P1 rule, and no merged artifact
75
+ exists, so avoid describing the overlay as *resolved*.
78
76
  The convention is still load-bearing: it is how the rules actually reach a feature's planning.
79
77
  - **`templates/doflow/` is a shared template pool, not the Agent Skills standard's
80
78
  `references/`/`assets/` pattern.** The standard nests bundled resources one level inside their
@@ -51,14 +51,13 @@ linking (below), not by a field on the item.
51
51
 
52
52
  ## Superseding a stale item
53
53
 
54
- An item's `freshness.status` can only move toward `STALE` — the file it named changed, and nothing
55
- un-changes it. Once a stale item stops mattering (a fresher item already covers the same ground),
56
- retire it rather than leaving it to block a task's readiness verdict forever: `evidence --action
57
- supersede --evidence-id <stale-id> --replaced-by <fresh-id>`, naming an id already recorded. Nothing
58
- is deleted or rewritten — the stale item's own content and locator stay exactly as observed, only
59
- its `status` becomes `superseded` and unresolvable readiness checks stop counting it. Record the
60
- replacing item first: the replacement must already exist, the same rule `claim --action supersede`
61
- already applies.
54
+ An item's `freshness.status` only moves toward `STALE` (the file it named changed). Once a stale
55
+ item stops mattering, retire it rather than let it block readiness forever: `evidence --action
56
+ supersede --evidence-id <stale-id> --replaced-by <fresh-id>`, the replacement recorded first (the
57
+ rule `claim --action supersede` applies). Nothing is deleted: the item keeps its content and
58
+ locator, its `status` becomes `superseded`, and readiness stops counting it. With no replacement,
59
+ `evidence --action retire` with its stale selector (see the CLI help) retires every stale item the
60
+ same way, keeping the reason on each.
62
61
 
63
62
  ## Claims
64
63
 
@@ -33,8 +33,8 @@ mechanical work. Fewer turns can cost less than a cheaper model that needs repea
33
33
  ## Reviews
34
34
 
35
35
  Reviews are read-only `frontier` work by an agent and model different from the author. Report if that
36
- tier is unavailable. Review once per phase or fix batch; re-review only an open blocker tests cannot
37
- settle, after asking. Deep reviews use two independent reviewers with different lenses.
36
+ tier is unavailable. Review once per phase or fix batch; re-review after fixes is automatic, per
37
+ `doflow review --action start`.
38
38
 
39
39
  ## Archetype dispatch tiers
40
40
 
@@ -46,9 +46,11 @@ settle, after asking. Deep reviews use two independent reviewers with different
46
46
  |---|---|---|
47
47
  | `system-architect` | `frontier` | Architecture sets system shape: a consequential decision. |
48
48
  | `core-implementer` | `standard` | Routine coding against a settled spec. |
49
- | `quality-guardian` | `standard` | Its testing and evidence work; a review runs at `frontier` per-dispatch (`## Reviews`), not via `byOwner`. |
49
+ | `quality-guardian` | `standard` | Testing and evidence work; review tasks belong to `reviewer`. |
50
50
  | `spec-analyst` | `standard` | Requirements analysis and routine research. |
51
51
  | `research-writer` | `standard` | Documentation and routine research. |
52
+ | `delivery-lead` | `frontier` | Plans and orchestrates delivery; its records gate merges. |
53
+ | `reviewer` | `frontier` | Review verdicts gate merges (`## Reviews`). |
52
54
 
53
55
  ## Briefs and inheritance
54
56
 
@@ -1,7 +1,6 @@
1
1
  # Orchestration
2
2
 
3
- Use `references/MODEL_SELECTION.md`; follow `PRINCIPLES.md`, `rules/RULE_02_WORKFLOW.md`, and
4
- `rules/RULE_04_QUESTIONS.md`.
3
+ Use `references/MODEL_SELECTION.md`; follow `PRINCIPLES.md` and `rules/RULES.md` (RULE_02, RULE_04).
5
4
 
6
5
  ## Role and handoff
7
6
 
@@ -0,0 +1,45 @@
1
+ # Rules
2
+
3
+ ## RULE_01 Safety
4
+ Conflict order: Safety > Scope > Quality > Speed. Prototype != Production requirements.
5
+ - Read the date from the environment before any temporal claim; never infer it from your knowledge cutoff, and state its source.
6
+
7
+ ## RULE_02 Workflow
8
+ - **Parallel when write sets are disjoint; otherwise sequential.** Use task lists past 3 tasks when available.
9
+ - Run lint/typecheck before marking complete.
10
+ - Check deps (package.json) and existing patterns before any changes.
11
+ - Feature delivery follows the doflow chain — see `references/DOFLOW_CHAIN.md` for the phase-gated flow, artifact contracts, and the enforced gate.
12
+ - Start it = Finish it. No partial features, TODO stubs, mocks, or "not implemented" throws. <!-- must-carry -->
13
+ - All generated code must work as specified; no scaffolding placeholders.
14
+
15
+ **Scope Discipline**
16
+ - Build ONLY what's asked — no bonus features, no enterprise bloat (auth/monitoring/deployment unless requested). <!-- must-carry -->
17
+ - MVP first; YAGNI; single responsibility per component.
18
+
19
+ ## RULE_03 Quality
20
+ **Naming**: Follow language standards (camelCase JS, snake_case Python); no mixed conventions
21
+ **Files**: Follow the repository's existing layout; only if none exists, use `tests/` for tests, `scripts/` for scripts and `agent-docs/` for reports.
22
+ **Workspace**: Remove temp files, debug scripts, build artifacts after use; never leave clutter in VCS
23
+
24
+ **Professional Honesty**
25
+ - No marketing language ("blazingly fast", "100% secure", "magnificent")
26
+ - No invented sources, figures, citations or quotes; leave out what you cannot trace; state "untested/MVP/needs validation" honestly <!-- must-carry -->
27
+ - If you are not sure, say so plainly and name what is unknown; do not present a guess as established <!-- must-carry -->
28
+ - Warn when a claim may be outdated: information from memory or an old source can have changed since it was written
29
+ - Never attribute a statement or view to a real person unless you have verified it; otherwise omit the name
30
+ - Push back on bad approaches
31
+
32
+ ## RULE_04 Questions
33
+ - Ask ONLY for genuine user-owned decisions unresolved by the request, the code, or sensible defaults.
34
+ - Enough to act → act; don't ask to confirm the obvious (see RULE_02 Scope Discipline).
35
+ - One question that unblocks beats three that re-litigate settled choices.
36
+
37
+ **Non-Interactive Fallback**
38
+ When no native interactive question tool (one that presents options and returns the user's choice) is available in the current session:
39
+ - Do NOT generate `{stage}-questions.md` files or halt execution waiting for manual file edits.
40
+ - Adopt the recommended default choice, record the adopted decision and rationale in the stage notes or artifact, and proceed with execution.
41
+ - If no sensible default exists and execution cannot safely proceed without user input, report the specific ambiguity and halt.
42
+
43
+ ## Flags and runtime
44
+ What the user typed beats auto-detection. A flag is declared in the `argument-hint` of every skill that consumes it; shared flags are `--depth` and `--type`.
45
+ The runtime grades a source-editing stage against its class contract first (four states, no score), classifies a failed verification and retries it under a bound it sets, records and reads back every call (never reconstructs a run), and routes a need to a provider healthy here, not a habitual tool.
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+ # do-args.sh — the one argument rule the do-*.sh helpers share. Sourced, never run.
3
+ #
4
+ # Their argument loops read `--flag=value`. A caller that writes `--flag value` used to fall through
5
+ # the loops' `*) ;;` arm with the flag dropped and the value ignored, so `do-paths.sh --slug x`
6
+ # silently resolved the ACTIVE feature instead of x. doflow_normalize_args folds the space form into
7
+ # the `=` form for the flags a script declares, so the loop itself stays as it was.
8
+ #
9
+ # doflow_normalize_args "<flag> <flag> ..." "$@"
10
+ # set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}
11
+ #
12
+ # The next word is a flag's value unless it starts with a dash: a value-less `--slug` (last, or
13
+ # followed by another flag) stays bare and is dropped by the loop exactly as before, and a word that
14
+ # starts with a dash is never swallowed. An empty word is a value. Flags a script did not declare,
15
+ # `--flag=value` words and positional words pass through untouched. bash 3.2 compatible: the array
16
+ # is filled by index and expanded with the `${a[@]+...}` guard, which `set -u` needs for an empty one.
17
+
18
+ doflow_normalize_args() {
19
+ local _flags=" $1 " _word _pending=""
20
+ shift
21
+ DOFLOW_ARGS=()
22
+ for _word in "$@"; do
23
+ if [ -n "$_pending" ]; then
24
+ case "$_word" in
25
+ -*) DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending" ;;
26
+ *) DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending=$_word"; _pending=""; continue ;;
27
+ esac
28
+ _pending=""
29
+ fi
30
+ case "$_word" in
31
+ --*=*) ;;
32
+ --*) case "$_flags" in *" $_word "*) _pending="$_word"; continue ;; esac ;;
33
+ esac
34
+ DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_word"
35
+ done
36
+ if [ -n "$_pending" ]; then DOFLOW_ARGS[${#DOFLOW_ARGS[@]}]="$_pending"; fi
37
+ }
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
2
3
  # do-exec-paths.sh — resolve the execution workspace and one task's artifact paths.
3
4
  #
4
5
  # The single source of truth for where a task's brief, report, and review packages
@@ -29,6 +30,9 @@ group_id=""
29
30
  tasks_csv=""
30
31
  slug_override=""
31
32
  mode=""
33
+ # Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
34
+ _da="$(dirname "$0")/do-args.sh"
35
+ if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--task --group --tasks --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
32
36
  for arg in "$@"; do
33
37
  case "$arg" in
34
38
  --task=*)
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
2
3
  # do-git-state.sh — deterministic lifecycle state helper for /do-git.
3
4
  #
4
5
  # Emits JSON describing the repository's position in the development cycle.
@@ -30,6 +31,9 @@ mode=""
30
31
  class_name=""
31
32
  slug=""
32
33
 
34
+ # Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
35
+ _da="$(dirname "$0")/do-args.sh"
36
+ if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--class --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
33
37
  for arg in "$@"; do
34
38
  case "$arg" in
35
39
  --state) mode="state" ;;
@@ -264,7 +268,14 @@ next_free_prerelease() {
264
268
  printf '%s-%s.%s %s\n' "$core" "$label" "$candidate" "$skipped"
265
269
  }
266
270
 
267
- # The newest release tag reachable from HEAD or from the production branch, by version order;
271
+ # What a release tag looks like: vX.Y.Z with an optional pre-release. A tag such as vx or vnext also
272
+ # matches `v*`, and under the version sort `vx` outranks every vN.N.N, so the base tag, the lifecycle
273
+ # release_tags and the next-version proposal all filter with this one pattern. A number has no
274
+ # leading zero (v01.0.0 is not a release), as semver has it.
275
+ RELEASE_TAG_PATTERN='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?$'
276
+
277
+ # The newest release tag reachable from HEAD or from the production branch, by version order
278
+ # (versionsort.suffix=- ranks a pre-release below its stable release, which plain version sort does not);
268
279
  # empty when there is none. do_next_version bases its proposal on it and the lifecycle output
269
280
  # reports it, so the two never disagree. The reasoning behind "newest by version" and "reachable
270
281
  # from production too" is in do_next_version's comments below.
@@ -277,7 +288,7 @@ find_base_tag() {
277
288
  done <<< "$(production_refs)"
278
289
  eligible="$(printf '%s\n' "$eligible" | sort -u | sed '/^$/d')"
279
290
  if [ -n "$eligible" ]; then
280
- base_tag="$(git tag --list 'v*' --sort=-v:refname 2>/dev/null | grep -Fx -f <(printf '%s\n' "$eligible") | head -1 || true)"
291
+ base_tag="$(git -c versionsort.suffix=- tag --list 'v*' --sort=-v:refname 2>/dev/null | grep -E "$RELEASE_TAG_PATTERN" | grep -Fx -f <(printf '%s\n' "$eligible") | head -1 || true)"
281
292
  fi
282
293
  printf '%s\n' "$base_tag"
283
294
  }
@@ -350,7 +361,7 @@ do_next_version() {
350
361
  fi
351
362
 
352
363
  jq -n \
353
- --arg base_tag "${base_tag:-null}" \
364
+ --arg base_tag "$base_tag" \
354
365
  --arg current_version "$current_version" \
355
366
  --arg next_version "$next_version" \
356
367
  --arg next_prerelease "$next_prerelease" \
@@ -501,7 +512,7 @@ lifecycle_integration_ref() {
501
512
  do_lifecycle() {
502
513
  local integration="" tags="" base_tag=""
503
514
  integration="$(lifecycle_integration_ref)"
504
- tags="$(git tag --list 'v*' 2>/dev/null | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$' || true)"
515
+ tags="$(git tag --list 'v*' 2>/dev/null | grep -E "$RELEASE_TAG_PATTERN" || true)"
505
516
  base_tag="$(find_base_tag)"
506
517
 
507
518
  local behind=0
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
2
3
  # do-parallel-check.sh — verify one phase's [P] siblings really write disjoint files.
3
4
  # Form dispatch groups by (phase, owner) and detect union overlaps.
4
5
  #
@@ -25,6 +26,9 @@ set -uo pipefail
25
26
 
26
27
  phase=""
27
28
  slug_override=""
29
+ # Shared argument rule: `--flag value` is read like `--flag=value` for the flags named here (do-args.sh).
30
+ _da="$(dirname "$0")/do-args.sh"
31
+ if [ -r "$_da" ]; then . "$_da"; doflow_normalize_args "--phase --slug" "$@"; set -- ${DOFLOW_ARGS[@]+"${DOFLOW_ARGS[@]}"}; fi
28
32
  for arg in "$@"; do
29
33
  case "$arg" in
30
34
  --phase=*) phase="${arg#--phase=}" ;;