@khoavu882/doflow 0.0.0-stage → 2.0.0-beta.4

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 (409) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -2
  3. package/bin/doflow.js +44 -0
  4. package/core/.antigravity-plugin/hooks.json +39 -0
  5. package/core/.antigravity-plugin/mcp_config.json +18 -0
  6. package/core/.antigravity-plugin/plugin.json +31 -0
  7. package/core/.claude-plugin/marketplace.json +20 -0
  8. package/core/.claude-plugin/plugin.json +21 -0
  9. package/core/.codex-plugin/marketplace.json +20 -0
  10. package/core/.codex-plugin/plugin.json +35 -0
  11. package/core/.plugin/plugin.json +19 -0
  12. package/core/harnesses/antigravity/hooks/pre-implementation-gate.sh +9 -0
  13. package/core/harnesses/antigravity/hooks/stop-check.sh +10 -0
  14. package/core/harnesses/claude/hooks/lib.sh +304 -0
  15. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +20 -0
  16. package/core/harnesses/claude/hooks/permission-audit.sh +47 -0
  17. package/core/harnesses/claude/hooks/post-compact.sh +74 -0
  18. package/core/harnesses/claude/hooks/post-edit-lint.sh +36 -0
  19. package/core/harnesses/claude/hooks/post-tool-failure.sh +47 -0
  20. package/core/harnesses/claude/hooks/pre-bash-guard.sh +20 -0
  21. package/core/harnesses/claude/hooks/pre-compact.sh +43 -0
  22. package/core/harnesses/claude/hooks/pre-implement-gate.sh +21 -0
  23. package/core/harnesses/claude/hooks/session-end.sh +89 -0
  24. package/core/harnesses/claude/hooks/session-start.sh +5 -0
  25. package/core/harnesses/claude/hooks/skill-config-audit.sh +39 -0
  26. package/core/harnesses/claude/hooks/stop-check.sh +5 -0
  27. package/core/harnesses/claude/hooks/subagent-audit.sh +7 -0
  28. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -0
  29. package/core/harnesses/claude/settings/keybindings.json +20 -0
  30. package/core/harnesses/claude/settings/settings.json +201 -0
  31. package/core/harnesses/claude/statusline/doflow-statusline.sh +49 -0
  32. package/core/harnesses/codex/agents/core-implementer.toml +7 -0
  33. package/core/harnesses/codex/agents/quality-guardian.toml +8 -0
  34. package/core/harnesses/codex/agents/research-writer.toml +8 -0
  35. package/core/harnesses/codex/agents/spec-analyst.toml +8 -0
  36. package/core/harnesses/codex/agents/system-architect.toml +9 -0
  37. package/core/harnesses/codex/config/config.toml +10 -0
  38. package/core/harnesses/codex/hooks/hooks.json +122 -0
  39. package/core/harnesses/codex/hooks/lib.sh +335 -0
  40. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +18 -0
  41. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +52 -0
  42. package/core/harnesses/codex/hooks/post-edit-lint.sh +6 -0
  43. package/core/harnesses/codex/hooks/pre-bash-guard.sh +18 -0
  44. package/core/harnesses/codex/hooks/pre-compact.impl.sh +46 -0
  45. package/core/harnesses/codex/hooks/pre-compact.sh +9 -0
  46. package/core/harnesses/codex/hooks/pre-implement-gate.sh +19 -0
  47. package/core/harnesses/codex/hooks/session-end.impl.sh +92 -0
  48. package/core/harnesses/codex/hooks/session-end.sh +5 -0
  49. package/core/harnesses/codex/hooks/session-start.sh +5 -0
  50. package/core/harnesses/codex/hooks/stop-check.sh +8 -0
  51. package/core/harnesses/codex/hooks/subagent-audit.sh +8 -0
  52. package/core/harnesses/codex/hooks/user-prompt-submit.sh +6 -0
  53. package/core/harnesses/gemini/hooks/hooks.json +77 -0
  54. package/core/harnesses/gemini/hooks/lib.sh +302 -0
  55. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +21 -0
  56. package/core/harnesses/gemini/hooks/post-edit-lint.sh +39 -0
  57. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +21 -0
  58. package/core/harnesses/gemini/hooks/pre-compact.sh +38 -0
  59. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +22 -0
  60. package/core/harnesses/gemini/hooks/session-end.impl.sh +89 -0
  61. package/core/harnesses/gemini/hooks/session-end.sh +5 -0
  62. package/core/harnesses/gemini/hooks/session-start.sh +5 -0
  63. package/core/harnesses/gemini/settings/adapter-defaults.json +4 -0
  64. package/core/harnesses/kiro/agents/doflow.json +58 -0
  65. package/core/harnesses/kiro/hooks/doflow.json +53 -0
  66. package/core/harnesses/kiro/hooks/lib.sh +324 -0
  67. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +9 -0
  68. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +9 -0
  69. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +9 -0
  70. package/core/harnesses/kiro/hooks/session-start.sh +9 -0
  71. package/core/harnesses/kiro/hooks/stop-check.sh +43 -0
  72. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +39 -0
  73. package/core/harnesses/shared/hooks/adapters/antigravity.js +111 -0
  74. package/core/harnesses/shared/hooks/adapters/arg-fields.js +19 -0
  75. package/core/harnesses/shared/hooks/adapters/gemini.js +114 -0
  76. package/core/harnesses/shared/hooks/hooks.json +47 -0
  77. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +91 -0
  78. package/core/harnesses/shared/hooks/policies/capture-failure.sh +97 -0
  79. package/core/harnesses/shared/hooks/policies/deny-json.sh +29 -0
  80. package/core/harnesses/shared/hooks/policies/lib.sh +501 -0
  81. package/core/harnesses/shared/hooks/policies/mcp-policy.conf +21 -0
  82. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +91 -0
  83. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +328 -0
  84. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +496 -0
  85. package/core/harnesses/shared/hooks/policies/prompt-nudge.jq +131 -0
  86. package/core/harnesses/shared/hooks/policies/session-context.sh +141 -0
  87. package/core/harnesses/shared/hooks/policies/stop-check.sh +264 -0
  88. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +46 -0
  89. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +235 -0
  90. package/core/harnesses/shared/hooks/stream-hook-runner.js +590 -0
  91. package/core/harnesses/shared/locator/doflow-run +87 -0
  92. package/core/registry/advice.json +101 -0
  93. package/core/registry/assets.json +792 -0
  94. package/core/registry/capabilities.json +120 -0
  95. package/core/registry/contracts.json +189 -0
  96. package/core/registry/external-tools.json +191 -0
  97. package/core/registry/harnesses.json +2062 -0
  98. package/core/registry/lifecycle.json +231 -0
  99. package/core/registry/mcp.json +18 -0
  100. package/core/registry/models.json +79 -0
  101. package/core/registry/readiness-templates.json +118 -0
  102. package/core/registry/routes.json +47 -0
  103. package/core/registry/storage.json +1061 -0
  104. package/core/registry/verification.json +258 -0
  105. package/core/registry/workflows.json +790 -0
  106. package/core/shared/agent-specs/core-implementer.md +73 -0
  107. package/core/shared/agent-specs/quality-guardian.md +28 -0
  108. package/core/shared/agent-specs/research-writer.md +31 -0
  109. package/core/shared/agent-specs/spec-analyst.md +33 -0
  110. package/core/shared/agent-specs/system-architect.md +29 -0
  111. package/core/shared/guidance/DOFLOW_CORE.md +8 -0
  112. package/core/shared/guidance/FLAGS.md +25 -0
  113. package/core/shared/guidance/PRINCIPLES.md +61 -0
  114. package/core/shared/guidance/VERSION +1 -0
  115. package/core/shared/guidance/mcp/MCP_Context7.md +18 -0
  116. package/core/shared/guidance/mcp/MCP_Sequential.md +17 -0
  117. package/core/shared/guidance/modes/MODE_Brainstorming.md +46 -0
  118. package/core/shared/guidance/modes/MODE_DeepResearch.md +69 -0
  119. package/core/shared/guidance/modes/MODE_Introspection.md +33 -0
  120. package/core/shared/guidance/modes/MODE_Orchestration.md +57 -0
  121. package/core/shared/guidance/modes/MODE_Task_Management.md +74 -0
  122. package/core/shared/guidance/pointers/claude-gemini.md +2 -0
  123. package/core/shared/guidance/pointers/codex.md +6 -0
  124. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +373 -0
  125. package/core/shared/guidance/references/ARTIFACT_VOICE.md +104 -0
  126. package/core/shared/guidance/references/CONSTITUTION_BASE.md +47 -0
  127. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +161 -0
  128. package/core/shared/guidance/references/DOFLOW_CHAIN.md +87 -0
  129. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +93 -0
  130. package/core/shared/guidance/references/MODEL_SELECTION.md +74 -0
  131. package/core/shared/guidance/references/ORCHESTRATION.md +36 -0
  132. package/core/shared/guidance/references/RESEARCH_CONFIG.md +21 -0
  133. package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +81 -0
  134. package/core/shared/guidance/rules/RULE_01_SAFETY.md +25 -0
  135. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +23 -0
  136. package/core/shared/guidance/rules/RULE_03_QUALITY.md +14 -0
  137. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +46 -0
  138. package/core/shared/scripts/doflow/assets/mermaid-theme.json +46 -0
  139. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +167 -0
  140. package/core/shared/scripts/doflow/bash/do-git-state.sh +546 -0
  141. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +208 -0
  142. package/core/shared/scripts/doflow/bash/do-paths.sh +347 -0
  143. package/core/shared/scripts/doflow/bash/do-prereqs.sh +66 -0
  144. package/core/shared/scripts/doflow/bash/do-review-package.sh +127 -0
  145. package/core/shared/scripts/doflow/bash/do-task-brief.sh +698 -0
  146. package/core/shared/scripts/doflow/bash/render-audit.sh +224 -0
  147. package/core/shared/scripts/doflow/bash/render-diagrams.sh +177 -0
  148. package/core/shared/scripts/doflow/bash/render-puml.sh +223 -0
  149. package/core/shared/scripts/doflow/bash/sync-context.sh +66 -0
  150. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +526 -0
  151. package/core/shared/scripts/doflow/bin/doflow-run +592 -0
  152. package/core/shared/skills/do/SKILL.md +128 -0
  153. package/core/shared/skills/do/references/estimation.md +13 -0
  154. package/core/shared/skills/do/references/pm_routing.md +25 -0
  155. package/core/shared/skills/do/references/tool_matrix.md +52 -0
  156. package/core/shared/skills/do-brainstorm/SKILL.md +252 -0
  157. package/core/shared/skills/do-code-review/README.md +49 -0
  158. package/core/shared/skills/do-code-review/SKILL.md +333 -0
  159. package/core/shared/skills/do-code-review/assets/sample_c_clean.c +71 -0
  160. package/core/shared/skills/do-code-review/assets/sample_c_smells.c +66 -0
  161. package/core/shared/skills/do-code-review/assets/sample_cpp_shift.cpp +19 -0
  162. package/core/shared/skills/do-code-review/assets/sample_csharp_clean.cs +100 -0
  163. package/core/shared/skills/do-code-review/assets/sample_csharp_smells.cs +78 -0
  164. package/core/shared/skills/do-code-review/assets/sample_java_clean.java +55 -0
  165. package/core/shared/skills/do-code-review/assets/sample_java_smells.java +56 -0
  166. package/core/shared/skills/do-code-review/assets/sample_json_clean.json +7 -0
  167. package/core/shared/skills/do-code-review/assets/sample_markdown_clean.md +30 -0
  168. package/core/shared/skills/do-code-review/assets/sample_markdown_smells.md +29 -0
  169. package/core/shared/skills/do-code-review/assets/sample_shell_heredoc.sh +38 -0
  170. package/core/shared/skills/do-code-review/assets/sample_shell_smells.sh +15 -0
  171. package/core/shared/skills/do-code-review/assets/sample_typescript_strings.ts +36 -0
  172. package/core/shared/skills/do-code-review/assets/sample_yaml_smells.yaml +6 -0
  173. package/core/shared/skills/do-code-review/content-types/config.md +83 -0
  174. package/core/shared/skills/do-code-review/content-types/markdown.md +132 -0
  175. package/core/shared/skills/do-code-review/expected_outputs/sample_c_clean_quality.json +79 -0
  176. package/core/shared/skills/do-code-review/expected_outputs/sample_c_smells_quality.json +169 -0
  177. package/core/shared/skills/do-code-review/expected_outputs/sample_cpp_shift_quality.json +49 -0
  178. package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_clean_quality.json +149 -0
  179. package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_smells_quality.json +157 -0
  180. package/core/shared/skills/do-code-review/expected_outputs/sample_java_clean_quality.json +67 -0
  181. package/core/shared/skills/do-code-review/expected_outputs/sample_java_smells_quality.json +97 -0
  182. package/core/shared/skills/do-code-review/expected_outputs/sample_json_clean_quality.json +33 -0
  183. package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_clean_quality.json +1 -0
  184. package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_smells_quality.json +16 -0
  185. package/core/shared/skills/do-code-review/expected_outputs/sample_shell_heredoc_quality.json +54 -0
  186. package/core/shared/skills/do-code-review/expected_outputs/sample_shell_smells_quality.json +91 -0
  187. package/core/shared/skills/do-code-review/expected_outputs/sample_typescript_strings_quality.json +60 -0
  188. package/core/shared/skills/do-code-review/expected_outputs/sample_yaml_smells_quality.json +46 -0
  189. package/core/shared/skills/do-code-review/languages/c.md +103 -0
  190. package/core/shared/skills/do-code-review/languages/cpp.md +103 -0
  191. package/core/shared/skills/do-code-review/languages/csharp.md +97 -0
  192. package/core/shared/skills/do-code-review/languages/dart.md +108 -0
  193. package/core/shared/skills/do-code-review/languages/go.md +92 -0
  194. package/core/shared/skills/do-code-review/languages/java.md +103 -0
  195. package/core/shared/skills/do-code-review/languages/kotlin.md +88 -0
  196. package/core/shared/skills/do-code-review/languages/php.md +109 -0
  197. package/core/shared/skills/do-code-review/languages/python.md +94 -0
  198. package/core/shared/skills/do-code-review/languages/ruby.md +105 -0
  199. package/core/shared/skills/do-code-review/languages/rust.md +99 -0
  200. package/core/shared/skills/do-code-review/languages/shell.md +90 -0
  201. package/core/shared/skills/do-code-review/languages/swift.md +88 -0
  202. package/core/shared/skills/do-code-review/languages/typescript.md +97 -0
  203. package/core/shared/skills/do-code-review/review-policy.json +47 -0
  204. package/core/shared/skills/do-code-review/rules/universal.md +49 -0
  205. package/core/shared/skills/do-code-review/scripts/code_quality_checker.py +1696 -0
  206. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +532 -0
  207. package/core/shared/skills/do-code-review/scripts/pr_analyzer.py +620 -0
  208. package/core/shared/skills/do-code-review/scripts/review_report_generator.py +505 -0
  209. package/core/shared/skills/do-constitution/SKILL.md +72 -0
  210. package/core/shared/skills/do-design/SKILL.md +212 -0
  211. package/core/shared/skills/do-diagnose/SKILL.md +156 -0
  212. package/core/shared/skills/do-diagnose/references/code_audit.md +15 -0
  213. package/core/shared/skills/do-diagnose/references/refactoring.md +12 -0
  214. package/core/shared/skills/do-diagnose/references/root_cause.md +17 -0
  215. package/core/shared/skills/do-document/SKILL.md +81 -0
  216. package/core/shared/skills/do-document/references/api-reference.md +42 -0
  217. package/core/shared/skills/do-document/references/deep_research.md +18 -0
  218. package/core/shared/skills/do-document/references/embedded-research.md +11 -0
  219. package/core/shared/skills/do-document/references/implementation-flow.md +105 -0
  220. package/core/shared/skills/do-document/references/index_generator.md +9 -0
  221. package/core/shared/skills/do-document/references/user-guide.md +22 -0
  222. package/core/shared/skills/do-execute-plan/SKILL.md +261 -0
  223. package/core/shared/skills/do-execute-plan/references/handoff_record.md +57 -0
  224. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +92 -0
  225. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +155 -0
  226. package/core/shared/skills/do-execute-plan/references/run_position.md +63 -0
  227. package/core/shared/skills/do-execute-plan/references/scaffold.md +441 -0
  228. package/core/shared/skills/do-execute-plan/references/task_attempts.md +41 -0
  229. package/core/shared/skills/do-flow/SKILL.md +186 -0
  230. package/core/shared/skills/do-flow/references/task_classes.md +134 -0
  231. package/core/shared/skills/do-git/SKILL.md +115 -0
  232. package/core/shared/skills/do-git/references/hotfix-ritual.md +44 -0
  233. package/core/shared/skills/do-git/references/lifecycle-policy.md +54 -0
  234. package/core/shared/skills/do-git/references/release-ritual.md +64 -0
  235. package/core/shared/skills/do-implement/SKILL.md +222 -0
  236. package/core/shared/skills/do-plan/SKILL.md +219 -0
  237. package/core/shared/skills/do-test/SKILL.md +113 -0
  238. package/core/shared/templates/doflow/constitution-template.md +28 -0
  239. package/core/shared/templates/doflow/data-model-template.md +169 -0
  240. package/core/shared/templates/doflow/design-template.md +193 -0
  241. package/core/shared/templates/doflow/external-contract-template.md +35 -0
  242. package/core/shared/templates/doflow/intent-template.md +45 -0
  243. package/core/shared/templates/doflow/plan-template.md +151 -0
  244. package/core/shared/templates/doflow/question-log-template.md +51 -0
  245. package/core/shared/templates/doflow/requirement-template.md +126 -0
  246. package/core/shared/templates/doflow/specs-template.md +55 -0
  247. package/core/shared/templates/doflow/state-template.md +59 -0
  248. package/core/shared/workflows/do-flow-chain.md +17 -0
  249. package/package.json +48 -4
  250. package/src/adapters/antigravity/index.js +631 -0
  251. package/src/adapters/claude/index.js +548 -0
  252. package/src/adapters/claude/mcp.js +94 -0
  253. package/src/adapters/codex/agents.js +208 -0
  254. package/src/adapters/codex/config.js +272 -0
  255. package/src/adapters/codex/hooks.js +203 -0
  256. package/src/adapters/codex/index.js +707 -0
  257. package/src/adapters/codex/mcp.js +271 -0
  258. package/src/adapters/codex/native-projection.js +34 -0
  259. package/src/adapters/copilot/index.js +413 -0
  260. package/src/adapters/copy-tree.js +620 -0
  261. package/src/adapters/gemini/hooks.js +210 -0
  262. package/src/adapters/gemini/index.js +390 -0
  263. package/src/adapters/hook-commands.js +60 -0
  264. package/src/adapters/index.js +106 -0
  265. package/src/adapters/kiro/index.js +310 -0
  266. package/src/adapters/mcp-entries.js +331 -0
  267. package/src/adapters/opencode/index.js +466 -0
  268. package/src/adapters/pi/index.js +279 -0
  269. package/src/adapters/pi/json-members.js +185 -0
  270. package/src/adapters/pi/mcp.js +373 -0
  271. package/src/adapters/resolve-source.js +19 -0
  272. package/src/cli/commands/install.js +218 -0
  273. package/src/cli/commands/list-backups.js +21 -0
  274. package/src/cli/commands/reconcile.js +120 -0
  275. package/src/cli/commands/remove.js +82 -0
  276. package/src/cli/commands/rollback.js +172 -0
  277. package/src/cli/commands/self-update.js +33 -0
  278. package/src/cli/commands/status.js +138 -0
  279. package/src/cli/commands/tools.js +92 -0
  280. package/src/cli/commands/update.js +162 -0
  281. package/src/cli/index.js +568 -0
  282. package/src/cli/runtime-commands.js +281 -0
  283. package/src/cli/shared.js +218 -0
  284. package/src/helper/bash-helper.js +34 -0
  285. package/src/helper/git.js +24 -0
  286. package/src/helper/guardrails.js +49 -0
  287. package/src/helper/harness-paths.js +140 -0
  288. package/src/helper/marker-merge.js +116 -0
  289. package/src/helper/prompt.js +61 -0
  290. package/src/helper/repo-root.js +29 -0
  291. package/src/helper/settings-merge.js +151 -0
  292. package/src/helper/settings-scope.js +33 -0
  293. package/src/helper/toml.js +244 -0
  294. package/src/install/backup-set.js +149 -0
  295. package/src/install/backup.js +724 -0
  296. package/src/install/context.js +58 -0
  297. package/src/install/manifest.js +145 -0
  298. package/src/install/mcp.js +254 -0
  299. package/src/install/paths.js +84 -0
  300. package/src/install/targets.js +90 -0
  301. package/src/install/tool-lifecycle.js +151 -0
  302. package/src/lifecycle/bash-availability.js +25 -0
  303. package/src/lifecycle/index.js +812 -0
  304. package/src/lifecycle/mcp-index.js +28 -0
  305. package/src/lifecycle/policies.js +73 -0
  306. package/src/lifecycle/view.js +175 -0
  307. package/src/registry/index.js +611 -0
  308. package/src/release/build-package.js +91 -0
  309. package/src/release/changelog-section.js +70 -0
  310. package/src/release/sync-plugin-versions.js +66 -0
  311. package/src/runtime/advice/cli.js +283 -0
  312. package/src/runtime/advice/client.js +324 -0
  313. package/src/runtime/advice/config.js +189 -0
  314. package/src/runtime/advice/doctor.js +169 -0
  315. package/src/runtime/advice/endpoint-guard.js +134 -0
  316. package/src/runtime/advice/kinds.js +154 -0
  317. package/src/runtime/advice/providers/ollama-systemone.js +209 -0
  318. package/src/runtime/advice/record.js +166 -0
  319. package/src/runtime/advice/registry.js +170 -0
  320. package/src/runtime/advice/strength.js +66 -0
  321. package/src/runtime/brief-tools.js +342 -0
  322. package/src/runtime/c4-project.js +371 -0
  323. package/src/runtime/capability-router.js +484 -0
  324. package/src/runtime/checkouts.js +170 -0
  325. package/src/runtime/claims.js +468 -0
  326. package/src/runtime/cli-result.js +55 -0
  327. package/src/runtime/cli.js +678 -0
  328. package/src/runtime/command-detect.js +516 -0
  329. package/src/runtime/context-pack.js +492 -0
  330. package/src/runtime/decision-register.js +493 -0
  331. package/src/runtime/evidence-ledger.js +338 -0
  332. package/src/runtime/failure/capture.js +272 -0
  333. package/src/runtime/failure/classifier.js +68 -0
  334. package/src/runtime/failure/cli.js +178 -0
  335. package/src/runtime/failure/home.js +64 -0
  336. package/src/runtime/failure/store.js +226 -0
  337. package/src/runtime/feature-resolve.js +79 -0
  338. package/src/runtime/freshness.js +177 -0
  339. package/src/runtime/health.js +863 -0
  340. package/src/runtime/history-compactor.js +237 -0
  341. package/src/runtime/implementation-gate.js +321 -0
  342. package/src/runtime/inventory/coverage.js +218 -0
  343. package/src/runtime/inventory/identity.js +65 -0
  344. package/src/runtime/inventory/index.js +705 -0
  345. package/src/runtime/inventory/precedence.js +134 -0
  346. package/src/runtime/inventory/read-scopes.js +131 -0
  347. package/src/runtime/inventory/siblings.js +192 -0
  348. package/src/runtime/knowledge/chunker.js +124 -0
  349. package/src/runtime/knowledge/hybrid.js +149 -0
  350. package/src/runtime/knowledge/index-store.js +145 -0
  351. package/src/runtime/knowledge/retrieval.js +194 -0
  352. package/src/runtime/leak-scan.js +185 -0
  353. package/src/runtime/lifecycle/cli.js +276 -0
  354. package/src/runtime/lifecycle/event-store.js +340 -0
  355. package/src/runtime/lifecycle/fold.js +353 -0
  356. package/src/runtime/lifecycle/followup.js +432 -0
  357. package/src/runtime/lifecycle/goal.js +249 -0
  358. package/src/runtime/lifecycle/intent-writer.js +86 -0
  359. package/src/runtime/lifecycle/overview.js +292 -0
  360. package/src/runtime/lifecycle/release.js +241 -0
  361. package/src/runtime/lifecycle/report-store.js +221 -0
  362. package/src/runtime/lifecycle/retention.js +212 -0
  363. package/src/runtime/lifecycle/root.js +71 -0
  364. package/src/runtime/lifecycle/status.js +353 -0
  365. package/src/runtime/lifecycle/store-upkeep.js +393 -0
  366. package/src/runtime/locator-resolve.js +158 -0
  367. package/src/runtime/mask.js +210 -0
  368. package/src/runtime/mcp-consultations.js +412 -0
  369. package/src/runtime/mcp-reach.js +157 -0
  370. package/src/runtime/model-router.js +153 -0
  371. package/src/runtime/outcome.js +467 -0
  372. package/src/runtime/reach.js +148 -0
  373. package/src/runtime/readiness-record.js +150 -0
  374. package/src/runtime/readiness.js +435 -0
  375. package/src/runtime/recovery.js +282 -0
  376. package/src/runtime/research-request.js +231 -0
  377. package/src/runtime/retrieval-plan.js +578 -0
  378. package/src/runtime/scaffold/artifacts.js +217 -0
  379. package/src/runtime/scaffold/fingerprint.js +56 -0
  380. package/src/runtime/scaffold/generate.js +911 -0
  381. package/src/runtime/scaffold/languages.js +245 -0
  382. package/src/runtime/storage/cli.js +64 -0
  383. package/src/runtime/storage/engine.js +249 -0
  384. package/src/runtime/storage/registry.js +130 -0
  385. package/src/runtime/storage/roots.js +63 -0
  386. package/src/runtime/storage/rules.js +282 -0
  387. package/src/runtime/storage/upkeep.js +243 -0
  388. package/src/runtime/storage/work-status.js +326 -0
  389. package/src/runtime/task-attempts.js +415 -0
  390. package/src/runtime/task-classifier.js +550 -0
  391. package/src/runtime/task-scope.js +130 -0
  392. package/src/runtime/task-state.js +176 -0
  393. package/src/runtime/trace/indicators.js +235 -0
  394. package/src/runtime/trace/ledger.js +626 -0
  395. package/src/runtime/trace/render.js +76 -0
  396. package/src/runtime/trace/views.js +459 -0
  397. package/src/runtime/verification/contract-runner.js +341 -0
  398. package/src/runtime/verification/engine.js +1461 -0
  399. package/src/runtime/verification/registry.js +130 -0
  400. package/src/runtime/verification/scope-bound.js +418 -0
  401. package/src/runtime/verification/test-selection.js +172 -0
  402. package/src/runtime/workflow-engine.js +588 -0
  403. package/src/runtime/workflow-orchestrator.js +953 -0
  404. package/src/runtime/worktree.js +340 -0
  405. package/src/state/index.js +193 -0
  406. package/src/state/lockfile.js +136 -0
  407. package/src/state/run-lock.js +408 -0
  408. package/types/node-commonjs.d.ts +68 -0
  409. package/types/runtime.d.ts +91 -0
@@ -0,0 +1,155 @@
1
+ # Task Readiness Gate
2
+
3
+ Pre-implementation contract gate. The contract is versioned and lives inside the runtime, not on
4
+ this page and not in your repository: **query it through the verb, don't recall it.** The class
5
+ names and requirement ids below are reproduced for orientation only — when this page and the
6
+ command disagree, the command is right.
7
+
8
+ ```bash
9
+ "$DOFLOW" readiness --task-class <class> --task-id <id> # human-readable report
10
+ "$DOFLOW" readiness --task-class <class> --task-id <id> --json
11
+ "$DOFLOW" evidence --task-id <id> # what has been recorded so far
12
+ "$DOFLOW" evidence --task-id <id> --action add --batch <file> # record this stage's batch
13
+ "$DOFLOW" claim --task-id <id> --action list # and what has been concluded
14
+ ```
15
+
16
+ `$DOFLOW` is the handle `SKILL.md` step 1 resolves; run these from the project the task belongs to,
17
+ because evidence and claims are per-project state under that repo's `.doflow/state/evidence/`, not
18
+ global.
19
+
20
+ Every `readiness` call records its evaluation under `.doflow/state/readiness/`, replacing the
21
+ task's earlier one. The implementation handoff and `complete-stage` read that record and refuse
22
+ without a `READY` one made before the call; they evaluate nothing themselves, and the refusal names
23
+ the `readiness` command to run. A `verify` report that would be `PASS` on a task whose implementation
24
+ stage is still pending is `INCONCLUSIVE` while that record is missing or not `READY`.
25
+
26
+ **Both `--task-class` and `--task-id` are required on `readiness`.** Omitting either exits 2 with
27
+ the valid set named — the verb refuses rather than grading the wrong class or the wrong task.
28
+ `readiness` then exits **0 for every state it can compute**, so branch on the `state` field; a zero
29
+ exit says the contract was evaluated, not that it was met.
30
+
31
+ ## Task classes
32
+
33
+ Pass the **key**, not the display name — `--task-class feature`, not `"New Feature"`.
34
+
35
+ | Key | Contract | Requirements |
36
+ | :--- | :--- | :--- |
37
+ | `bug` | Bug Fix Readiness | `reproduction`, `affected_code`, `root_cause`, `blast_radius`, `regression_verification` |
38
+ | `feature` | Feature Implementation Readiness | `scope_clear`, `affected_components`, `verification_plan` |
39
+ | `refactor` | Refactoring Readiness | `architecture_mapped`, `invariants_captured`, `baseline_tests`, `blast_radius` |
40
+ | `trivial-edit` | Trivial Edit Readiness | `target_identified`, `scope_verified` |
41
+ | `dependency-change` | Dependency Change Readiness | `compatibility_checked`, `usage_impact`, `verification_command` |
42
+
43
+ These five are the only templates that exist. Every other declared task class has **no** readiness
44
+ template, by design: those workflows author no source, so there is nothing for an implementation
45
+ contract to gate. Which classes those are is a property of the resolved workflow —
46
+ `requiresImplementationReadiness: false` — not a list to carry here. The verb exits 1 on them and lists the valid
47
+ keys — that is the right answer, not a gap. Any other unknown class fails the same way, so a typo
48
+ is loud rather than silently evaluating the wrong contract.
49
+
50
+ ## Reading the report
51
+
52
+ Each unmet requirement carries a `recommendedAction` naming the **intent** and **capability** that
53
+ would satisfy it — `blast_radius`, for example, recommends `estimate-blast-radius` /
54
+ `code.impact-analysis`. Resolve it against this machine with
55
+ `"$DOFLOW" route --intent <intent> --json`, which reports the provider that actually answers here
56
+ and its fallback chain, then go gather that evidence. The gate tells you what is missing *and* how
57
+ to go get it.
58
+
59
+ | State | Meaning |
60
+ | :--- | :--- |
61
+ | `READY` | Every mandatory prerequisite is verified by fresh evidence |
62
+ | `NEEDS_EVIDENCE` | Contract understood, prerequisites not yet established |
63
+ | `NEEDS_USER_DECISION` | A design or architectural decision is owed by the user |
64
+ | `BLOCKED` | A claim on this task is `conflicted` — evidence disagrees with itself |
65
+
66
+ These four are the whole vocabulary. There is no fifth state, no partial state, and no numeric or
67
+ percentage rendering of any of them — a gate that emits a number invites the reader to round it up.
68
+ All four are reachable through the seam; the next section says exactly which input produces each.
69
+
70
+ **What to do about a state is not this page's call, and not yours** — the runtime owns the one
71
+ stage-entry policy and every report carries its answer as `stageEntry: {decision, reason}`
72
+ (`Stage Entry:` in the human report), computed from the state and the execution mode you declare
73
+ with `--mode`:
74
+
75
+ | | `--mode workflow` (default) | `--mode standalone` |
76
+ | :--- | :--- | :--- |
77
+ | `READY` | `ENTER` | `ENTER` |
78
+ | `NEEDS_EVIDENCE` | `GATHER_FIRST` — gather the named requirements before entering the stage | `ENTER` — the unmet contract is reported, not enforced; relay it in the result |
79
+ | `NEEDS_USER_DECISION` | `ASK_USER` — ask through `RULE_04_QUESTIONS.md` and wait | `ASK_USER` — same; a small edit does not cure an owed decision |
80
+ | `BLOCKED` | `STOP` — never modify source; surface which claim and which evidence | `STOP` — same |
81
+
82
+ `workflow` is an orchestrated run (`do-flow`, `do-execute-plan`); `standalone` is a declared
83
+ one-off edit (`do-implement`, `do-diagnose --fix`). The mode is a flag, never an inference — an
84
+ absent evidence record is not a statement of intent, so the default fails closed to `workflow`.
85
+ Act on `decision`; do not re-derive the answer from `state`, because a policy re-derived in prose
86
+ is exactly how three skills came to disagree about the same state.
87
+
88
+ The engine fails closed: a requirement it cannot evaluate reads as unmet, not satisfied. A gate that
89
+ guesses in its own favour is worse than no gate, because it reports a verdict it never earned.
90
+
91
+ ## What produces each state
92
+
93
+ `readiness` grades three inputs. Knowing which one moved a verdict is the difference between a
94
+ contract that was met and one that was described as met.
95
+
96
+ | Input | Written by | What it can satisfy |
97
+ | :--- | :--- | :--- |
98
+ | Evidence | `evidence --task-id <id> --action add` — one item from `--kind/--provenance/--provider/--capability/--locator/--content`, plus `--establishes <req-id[,req-id]>` and (for executions) `--observed-command`/`--observed-exit`; or a whole stage from `--batch <file>` | every requirement declaring evidence kinds: `reproduction`, `affected_code`, `blast_radius`, `affected_components`, `architecture_mapped`, `baseline_tests`, `target_identified`, `compatibility_checked`, `usage_impact` |
99
+ | Claims | `claim --action add` (with `--role root-cause` where the contract names a role), promoted by `claim --action link` | `root_cause`, the one requirement that demands a `supported` claim **in the `root-cause` role**. A `conflicted` claim additionally forces `BLOCKED` for the whole task |
100
+ | Caller-stated profile | stated on `readiness`, not on `handoff`: `readiness --verification-plan <text>` · `--scope <text>` · `--invariants <text>` · `--user-decision-pending` | `verification_plan`, `verification_command`, `regression_verification` (from `--verification-plan`); `scope_clear`, `scope_verified`, `invariants_captured` (from `--scope` or `--invariants`) |
101
+
102
+ So each state arrives as follows.
103
+
104
+ - **`NEEDS_EVIDENCE`** — the default answer for a task with nothing recorded. Every required
105
+ entry the batch has not covered and no stated input satisfies is listed with its
106
+ `recommendedAction`. This is the checklist, not a malfunction.
107
+
108
+ An item counts toward a requirement only when it is `extracted` **and** names that requirement
109
+ in `establishes` — kind alone is a category, and an inferred item is analysis, not measurement.
110
+ Where the contract expects an execution (`reproduction`, `baseline_tests`), the item must carry
111
+ the observation `{command, exitCode}` it records, and `baseline_tests` additionally requires
112
+ exit 0: a run that failed is reported as the failure it was. A bug reproduction succeeds by
113
+ observing the expected failure, so a non-zero exit there is the evidence, not a defect in it.
114
+ - **`READY`** — recorded evidence plus stated inputs cover every required entry. Each satisfied
115
+ requirement names the evidence ids that satisfied it in `evidenceIds`; a requirement satisfied
116
+ by a *stated* input carries an empty `evidenceIds`, because nothing backs it but the statement.
117
+ - **`BLOCKED`** — a claim on the task is `conflicted`: it carries both fresh supporting and fresh
118
+ contradicting evidence. Blocking is checked before requirements, so `BLOCKED` outranks
119
+ `NEEDS_EVIDENCE` — a blocked task is not "also missing things", it is stopped.
120
+ - **`NEEDS_USER_DECISION`** — you passed `--user-decision-pending`. It returns before any
121
+ requirement is examined, so that report carries no requirements breakdown. It records that a
122
+ decision is owed; it is not a way to skip the gate.
123
+
124
+ **Measured and stated are reported apart, and must stay apart when you repeat the verdict.** The
125
+ JSON report lists every stated input under `callerAsserted`; the human report prints
126
+ `Caller-stated: … (asserted on the command line, not established by evidence)`. Pass those flags
127
+ when they are true — that is what they are for — but a `READY` that rests partly on them is only as
128
+ good as the statement, and saying so is the difference between reporting a verdict and laundering
129
+ one.
130
+
131
+ Three limits still hold, and none of them is a reason to work around the gate:
132
+
133
+ - Only evidence whose `freshness.status` is `FRESH` counts. The write measures freshness itself —
134
+ HEAD commit, sha256 of the located file, `observedAt` — and records `null` for anything it cannot
135
+ establish, rather than a value that happens to parse. Every `readiness` read and every gated
136
+ stage completion re-checks those stamps against the tree as it stands — the same evaluation at
137
+ both boundaries — so an item whose file has changed since it was read reports `STALE` and stops
138
+ counting toward the requirement it named, and the report names it. Recording fresh replacement
139
+ evidence alone does not clear this: a stale item stays in the ledger and keeps forcing
140
+ `NEEDS_EVIDENCE` at the task level until it is explicitly retired. Once the fresh replacement is
141
+ recorded, supersede the stale item: `evidence --action supersede --evidence-id <stale-id>
142
+ --replaced-by <fresh-id>`. Do not argue with the verdict by any other route — not by re-adding the
143
+ same fact under a new id and hoping the old one stops mattering, and never by editing the local
144
+ ledger file directly.
145
+ - `claim --action link` refuses an evidence id the ledger does not hold (exit 2). Record the batch
146
+ first, then link; a link is not a way to reference evidence you have not written.
147
+ - The gate grades this task's ledger only. A different `--task-id` reads a different record, and
148
+ the verdict will look confident either way.
149
+
150
+ What the gate delivers is worth running for its own sake: the exact per-class contract, which
151
+ requirements are unmet, and the intent and capability that would satisfy each one. Act on it as the
152
+ checklist it is. Do not halt indefinitely on a persistent `NEEDS_EVIDENCE` — record what you
153
+ actually established, state which requirements it covers, and say what remains. And do not write
154
+ `READY` yourself. The gate did not say it, and saying it on the gate's behalf is precisely the
155
+ failure this page exists to prevent.
@@ -0,0 +1,63 @@
1
+ # Step 3 — positioning the run and dispatching on gate state
2
+
3
+ The gate-state dispatch behind `/do-execute-plan`'s step 3. The step's own purpose — which gate
4
+ stands before this stage, and why this skill is where it gets answered — stays in `SKILL.md`; what
5
+ follows is the call that positions the run and every branch off its response.
6
+
7
+ - `<slug>` is step 1's `feature_slug`; `<class>` is the class step 2's `classify` call accepted;
8
+ `<stage id>` is the id of the entry in that call's `workflow.stages[]` whose `skill` is
9
+ `do-execute-plan` (`implementation` in the `feature` workflow) — read it off that response,
10
+ never hardcode a guess. One call positions the run: it starts one when none exists yet (an
11
+ old-layout feature, or a chain that skipped straight here), backfills any earlier non-mutating
12
+ stage as a routine handoff (marked `backfilled` in the trail, distinct from a stage its own
13
+ skill actually completed), and stops on the node this skill must act on — or on any gate in the
14
+ way, `clarification`-kind included, since only a human or that gate's own owning skill may
15
+ decide it.
16
+ ```bash
17
+ "$DOFLOW" orchestrate --action catch-up --task-id "<slug>" --task-class "<class>" --stage "<stage id>" --note "entering implementation" --json
18
+ ```
19
+ - Branch on the response's `caughtUpTo` / `reason`, not on the exit code:
20
+ - **`reason` is `awaiting-gate:<gate id>`** — **first check `<gate id>` against step 2's
21
+ `<expected gate id>`.** They match in the ordinary case (`gate-a`, standing immediately before
22
+ this stage) — present `awaitingGate.prompt` to the user through `AskUserQuestion` as a plain
23
+ go/no-go, the same way step 1's prerequisite gate stops and asks rather than assuming. On yes:
24
+ ```bash
25
+ "$DOFLOW" orchestrate --action decide-gate --task-id "<slug>" --gate "<awaitingGate.gateId>" --decision approve --note "<the user's own answer, one line>" --json
26
+ ```
27
+ Then re-run the same `catch-up` call to land on this stage. If that re-run itself stops on
28
+ *another* `awaiting-gate:`, re-apply this same check from the top — do not assume one approval
29
+ clears the path; walk it exactly as far as it goes. On no: **stop the whole run here.** The gate
30
+ is terminal in the same sense step 1's prerequisite gate is — report that the gate was not
31
+ approved and dispatch nothing.
32
+ **They do not match** — this is a gate belonging to an earlier stage, not this one. `gate-0`,
33
+ left open by an aborted `/do-brainstorm` session, is exactly this case: it now surfaces here
34
+ (catch-up stops on every gate, `clarification`-kind included) instead of being silently
35
+ resolved on the way past. Report the gate id plainly and stop, the same way `do-design`,
36
+ `do-plan`, `do-test` and `do-brainstorm` already handle a gate that isn't theirs. Never approve
37
+ a gate this stage did not expect regardless of what the user answers — a "yes" given in an
38
+ implementation context is not an answer to a different stage's clarification prompt, and
39
+ `reject`'s "terminate the run outright" semantics are the wrong shape for a gate this stage has
40
+ no standing to decide either way.
41
+ - **`caughtUpTo` is this stage id** (`reason: reached-candidate`) — the run is positioned exactly
42
+ here and there is no gate to ask. That covers three cases at once and needs no special-casing
43
+ between them: `/do-flow` already recorded the user's answer to that gate while driving the
44
+ chain, this skill just recorded it in the branch above, or the accepted class declares no gate
45
+ at all — `feature` is the only shipped class that declares any. Never ask a gate the run does
46
+ not report as open; that is exactly the double-prompt this branch exists to prevent. Carry this
47
+ `caughtUpTo` value to step 10; it is the stage id that call completes.
48
+ - **`reason` is `blocked-on-mutating-stage:<id>`** — a *different* source-mutating stage sits
49
+ ahead of this one and its own skill has not executed it. Name `<id>`, report the block plainly,
50
+ and dispatch nothing.
51
+ - **`reason` starts with `already-completed:`** — this stage was already recorded on an earlier
52
+ run of this skill (a `--scope resume` after an interrupted run, say). Use `annotate` instead of
53
+ `complete-stage`:
54
+ ```bash
55
+ "$DOFLOW" orchestrate --action annotate --task-id "<slug>" --node "<stage id>" --note "<what changed on this re-run>" --json
56
+ ```
57
+ - **`reason` is `run-completed` or `run-rejected`** — the run is finished and takes no further
58
+ stage. Report it and stop.
59
+ - Positioning the run is advisory to the trail, not to the work: if the `catch-up` call itself
60
+ fails for a reason outside this flow's control (an unwritable local state directory, say),
61
+ report the failure plainly and continue — the hard prerequisite gate step 1 already enforced is
62
+ what governs whether this run may proceed. A user's explicit "no" above is not that case; it
63
+ stops the run.