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

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 (407) 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 +1057 -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 +46 -4
  250. package/src/adapters/antigravity/index.ts +631 -0
  251. package/src/adapters/claude/index.ts +548 -0
  252. package/src/adapters/claude/mcp.ts +94 -0
  253. package/src/adapters/codex/agents.ts +208 -0
  254. package/src/adapters/codex/config.ts +272 -0
  255. package/src/adapters/codex/hooks.ts +203 -0
  256. package/src/adapters/codex/index.ts +707 -0
  257. package/src/adapters/codex/mcp.ts +271 -0
  258. package/src/adapters/codex/native-projection.ts +34 -0
  259. package/src/adapters/copilot/index.ts +413 -0
  260. package/src/adapters/copy-tree.ts +620 -0
  261. package/src/adapters/gemini/hooks.ts +210 -0
  262. package/src/adapters/gemini/index.ts +390 -0
  263. package/src/adapters/hook-commands.ts +60 -0
  264. package/src/adapters/index.ts +106 -0
  265. package/src/adapters/kiro/index.ts +310 -0
  266. package/src/adapters/mcp-entries.ts +331 -0
  267. package/src/adapters/opencode/index.ts +466 -0
  268. package/src/adapters/pi/index.ts +279 -0
  269. package/src/adapters/pi/json-members.ts +185 -0
  270. package/src/adapters/pi/mcp.ts +373 -0
  271. package/src/adapters/resolve-source.ts +19 -0
  272. package/src/cli/commands/install.ts +218 -0
  273. package/src/cli/commands/list-backups.ts +21 -0
  274. package/src/cli/commands/reconcile.ts +120 -0
  275. package/src/cli/commands/remove.ts +82 -0
  276. package/src/cli/commands/rollback.ts +172 -0
  277. package/src/cli/commands/self-update.ts +33 -0
  278. package/src/cli/commands/status.ts +138 -0
  279. package/src/cli/commands/tools.ts +92 -0
  280. package/src/cli/commands/update.ts +162 -0
  281. package/src/cli/index.ts +568 -0
  282. package/src/cli/runtime-commands.ts +281 -0
  283. package/src/cli/shared.ts +218 -0
  284. package/src/helper/bash-helper.ts +34 -0
  285. package/src/helper/git.ts +24 -0
  286. package/src/helper/guardrails.ts +49 -0
  287. package/src/helper/harness-paths.ts +140 -0
  288. package/src/helper/marker-merge.ts +116 -0
  289. package/src/helper/prompt.ts +61 -0
  290. package/src/helper/repo-root.ts +29 -0
  291. package/src/helper/settings-merge.ts +151 -0
  292. package/src/helper/settings-scope.ts +33 -0
  293. package/src/helper/toml.ts +244 -0
  294. package/src/install/backup-set.ts +149 -0
  295. package/src/install/backup.ts +724 -0
  296. package/src/install/context.ts +58 -0
  297. package/src/install/manifest.ts +145 -0
  298. package/src/install/mcp.ts +254 -0
  299. package/src/install/paths.ts +84 -0
  300. package/src/install/targets.ts +90 -0
  301. package/src/install/tool-lifecycle.ts +151 -0
  302. package/src/lifecycle/bash-availability.ts +25 -0
  303. package/src/lifecycle/index.ts +812 -0
  304. package/src/lifecycle/mcp-index.ts +28 -0
  305. package/src/lifecycle/policies.ts +73 -0
  306. package/src/lifecycle/view.ts +175 -0
  307. package/src/registry/index.ts +611 -0
  308. package/src/release/sync-plugin-versions.ts +66 -0
  309. package/src/runtime/advice/cli.ts +283 -0
  310. package/src/runtime/advice/client.ts +324 -0
  311. package/src/runtime/advice/config.ts +189 -0
  312. package/src/runtime/advice/doctor.ts +169 -0
  313. package/src/runtime/advice/endpoint-guard.ts +134 -0
  314. package/src/runtime/advice/kinds.ts +154 -0
  315. package/src/runtime/advice/providers/ollama-systemone.ts +209 -0
  316. package/src/runtime/advice/record.ts +166 -0
  317. package/src/runtime/advice/registry.ts +170 -0
  318. package/src/runtime/advice/strength.ts +66 -0
  319. package/src/runtime/brief-tools.ts +342 -0
  320. package/src/runtime/c4-project.ts +371 -0
  321. package/src/runtime/capability-router.ts +484 -0
  322. package/src/runtime/checkouts.ts +170 -0
  323. package/src/runtime/claims.ts +468 -0
  324. package/src/runtime/cli-result.ts +55 -0
  325. package/src/runtime/cli.ts +678 -0
  326. package/src/runtime/command-detect.ts +516 -0
  327. package/src/runtime/context-pack.ts +492 -0
  328. package/src/runtime/decision-register.ts +493 -0
  329. package/src/runtime/evidence-ledger.ts +338 -0
  330. package/src/runtime/failure/capture.ts +272 -0
  331. package/src/runtime/failure/classifier.ts +68 -0
  332. package/src/runtime/failure/cli.ts +178 -0
  333. package/src/runtime/failure/home.ts +64 -0
  334. package/src/runtime/failure/store.ts +226 -0
  335. package/src/runtime/feature-resolve.ts +79 -0
  336. package/src/runtime/freshness.ts +177 -0
  337. package/src/runtime/health.ts +863 -0
  338. package/src/runtime/history-compactor.ts +237 -0
  339. package/src/runtime/implementation-gate.ts +321 -0
  340. package/src/runtime/inventory/coverage.ts +218 -0
  341. package/src/runtime/inventory/identity.ts +65 -0
  342. package/src/runtime/inventory/index.ts +705 -0
  343. package/src/runtime/inventory/precedence.ts +134 -0
  344. package/src/runtime/inventory/read-scopes.ts +131 -0
  345. package/src/runtime/inventory/siblings.ts +192 -0
  346. package/src/runtime/knowledge/chunker.ts +124 -0
  347. package/src/runtime/knowledge/hybrid.ts +149 -0
  348. package/src/runtime/knowledge/index-store.ts +145 -0
  349. package/src/runtime/knowledge/retrieval.ts +194 -0
  350. package/src/runtime/leak-scan.ts +185 -0
  351. package/src/runtime/lifecycle/cli.ts +276 -0
  352. package/src/runtime/lifecycle/event-store.ts +340 -0
  353. package/src/runtime/lifecycle/fold.ts +353 -0
  354. package/src/runtime/lifecycle/followup.ts +432 -0
  355. package/src/runtime/lifecycle/goal.ts +249 -0
  356. package/src/runtime/lifecycle/intent-writer.ts +86 -0
  357. package/src/runtime/lifecycle/overview.ts +292 -0
  358. package/src/runtime/lifecycle/release.ts +241 -0
  359. package/src/runtime/lifecycle/report-store.ts +221 -0
  360. package/src/runtime/lifecycle/retention.ts +212 -0
  361. package/src/runtime/lifecycle/root.ts +71 -0
  362. package/src/runtime/lifecycle/status.ts +353 -0
  363. package/src/runtime/lifecycle/store-upkeep.ts +393 -0
  364. package/src/runtime/locator-resolve.ts +158 -0
  365. package/src/runtime/mask.ts +210 -0
  366. package/src/runtime/mcp-consultations.ts +412 -0
  367. package/src/runtime/mcp-reach.ts +157 -0
  368. package/src/runtime/model-router.ts +153 -0
  369. package/src/runtime/outcome.ts +467 -0
  370. package/src/runtime/reach.ts +148 -0
  371. package/src/runtime/readiness-record.ts +150 -0
  372. package/src/runtime/readiness.ts +435 -0
  373. package/src/runtime/recovery.ts +282 -0
  374. package/src/runtime/research-request.ts +231 -0
  375. package/src/runtime/retrieval-plan.ts +578 -0
  376. package/src/runtime/scaffold/artifacts.ts +217 -0
  377. package/src/runtime/scaffold/fingerprint.ts +56 -0
  378. package/src/runtime/scaffold/generate.ts +911 -0
  379. package/src/runtime/scaffold/languages.ts +245 -0
  380. package/src/runtime/storage/cli.ts +64 -0
  381. package/src/runtime/storage/engine.ts +249 -0
  382. package/src/runtime/storage/registry.ts +130 -0
  383. package/src/runtime/storage/roots.ts +63 -0
  384. package/src/runtime/storage/rules.ts +282 -0
  385. package/src/runtime/storage/upkeep.ts +243 -0
  386. package/src/runtime/storage/work-status.ts +326 -0
  387. package/src/runtime/task-attempts.ts +415 -0
  388. package/src/runtime/task-classifier.ts +550 -0
  389. package/src/runtime/task-scope.ts +130 -0
  390. package/src/runtime/task-state.ts +176 -0
  391. package/src/runtime/trace/indicators.ts +235 -0
  392. package/src/runtime/trace/ledger.ts +626 -0
  393. package/src/runtime/trace/render.ts +76 -0
  394. package/src/runtime/trace/views.ts +459 -0
  395. package/src/runtime/verification/contract-runner.ts +341 -0
  396. package/src/runtime/verification/engine.ts +1461 -0
  397. package/src/runtime/verification/registry.ts +130 -0
  398. package/src/runtime/verification/scope-bound.ts +418 -0
  399. package/src/runtime/verification/test-selection.ts +172 -0
  400. package/src/runtime/workflow-engine.ts +588 -0
  401. package/src/runtime/workflow-orchestrator.ts +953 -0
  402. package/src/runtime/worktree.ts +340 -0
  403. package/src/state/index.ts +193 -0
  404. package/src/state/lockfile.ts +136 -0
  405. package/src/state/run-lock.ts +408 -0
  406. package/types/node-commonjs.d.ts +68 -0
  407. package/types/runtime.d.ts +91 -0
@@ -0,0 +1,186 @@
1
+ ---
2
+ name: do-flow
3
+ description: "Auto-chain the doflow spec-driven flow (brainstorm → design → plan → implement → test → review), pausing only at defined approval gates. Use when the user wants the lifecycle run end-to-end, says 'build this feature end-to-end', 'run the doflow chain' or 'take this from idea to implementation', or /do classified the request as a feature. A plain change request that names no /do-* skill goes to /do first, which decides whether it needs this flow. Skip it for single-file fixes, questions and reviews."
4
+ argument-hint: "[feature description] [--from brainstorm|design|plan|implement|test|review]"
5
+ effort: high
6
+ ---
7
+
8
+ # do-flow
9
+
10
+ Runs a DoFlow workflow end-to-end without a manual `/do-X` at every stage. The task's **class**
11
+ selects the workflow; the resolved workflow's stages name which existing skills run, in what order,
12
+ and where the run stops. `do-flow` does not replace or modify those skills — it invokes their own
13
+ Behavioral Flows in sequence. `do-constitution` belongs to no class; invoke it directly when you
14
+ need to set or amend repo-level rules.
15
+
16
+ **You propose the class; the runtime validates it.** Never the reverse. A class you assumed, or one
17
+ the runtime rejected and you replaced with the familiar default, runs a confident workflow for the
18
+ wrong task.
19
+
20
+ ## Invocation
21
+ ```text
22
+ /do-flow [feature description] [--from brainstorm|design|plan|implement|test|review]
23
+ ```
24
+
25
+ ## Behavioral Flow
26
+
27
+ 1. **Resolve state** — run the resolver. Every DoFlow runtime call in this skill goes through the
28
+ runtime seam. Resolve it **once** here and reuse `$DOFLOW` for every later call in this skill:
29
+
30
+ ```bash
31
+ # Resolve the DoFlow runtime: nearest project install wins, then the global one.
32
+ D=$PWD; while [ "$D" != / ] && [ ! -x "$D/.doflow/scripts/doflow/bin/doflow-run" ]; do D=$(dirname "$D"); done
33
+ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
34
+ [ -x "$DOFLOW" ] || DOFLOW="$HOME/.doflow/scripts/doflow/bin/doflow-run"
35
+ [ -x "$DOFLOW" ] || { echo "doflow: no runtime found in any .doflow/ above $PWD, nor at $HOME/.doflow. Run: npx @khoavu882/doflow install -t <harness>" >&2; exit 2; }
36
+ ```
37
+ Run every command below from the project root — the walk-up starts at `$PWD`. On exit 2, print the message verbatim and stop; it names every path searched.
38
+
39
+ ```bash
40
+ "$DOFLOW" paths --json
41
+ ```
42
+ `feature_slug` `null` with a non-empty `candidate_slugs` is an unresolved choice, not "no active feature": ask one option per entry, re-resolve with `"$DOFLOW" paths --json --slug="<chosen>"`, and use that slug for the rest of this flow. `/do-flow` passing `--slug` already resolves it — no prompt then.
43
+
44
+ 2. **Propose one class** — read the request and name exactly one class id, using the cues and the
45
+ confusable pairs in this skill's own `references/task_classes.md`. State the class and the
46
+ signal it rests on in one line. If two classes fit equally, do **not** take the longer one: show
47
+ what each would run —
48
+ `"$DOFLOW" workflow --task-class "<candidate>" --json`, quote its `stageIds` — and ask via
49
+ `AskUserQuestion`, one option per candidate.
50
+
51
+ 3. **Validate the class through the runtime** — a proposal is not a selection until this returns:
52
+
53
+ ```bash
54
+ "$DOFLOW" classify --task-class "<proposed>" --calling-skill do-flow --json
55
+ ```
56
+ Branch on the returned `outcome` field, not the exit code.
57
+ - **`ACCEPTED`** — the returned `workflow` is this run's plan of record; read `stages`, `gates` and `handoff` off it rather than from memory.
58
+ - **`REJECTED`** — **stop.** Print `message` verbatim (it already names `validClasses` and any `suggestions`), ask the user to choose from `validClasses`, then re-validate. Never substitute `feature`.
59
+ A rejection may be about **you** rather than the class (`reason: caller-not-a-stage`). Then the fix is to propose one of the classes in `fit.hostingClasses`, or to hand the work to the skill this class names for the stage you meant — not to re-propose the same class.
60
+ - **Exit 2** — surface the message verbatim and stop.
61
+
62
+ Every stage this run enters comes from the accepted `workflow`'s `stages`; a phase the workflow does
63
+ not declare is not run here, however familiar it is from the `feature` chain.
64
+
65
+ 4. **Announce the selection** — one line before anything runs:
66
+ `<taskClass> → <workflow.name>: <stageIds joined by →>`, plus the gate ids if `gates` is
67
+ non-empty. This is the user's chance to correct a misclassification cheaply.
68
+
69
+ 5. **Pick the starting stage.**
70
+ - `feature`: resume from the first missing chain artifact — `!has_requirement` → the discovery
71
+ stage; `has_requirement && !has_design` → design; `has_design && !has_plan` → planning; all
72
+ three present → go straight to the pre-implementation gate in step 7.
73
+ - Every other class: start at the first entry in `stages`.
74
+ - `--from <phase>` overrides the above to deliberately re-run a stage. Match the phase to the
75
+ stage whose `skill` is that phase's skill (`brainstorm` → `do-brainstorm`, `design` →
76
+ `do-design`, `plan` → `do-plan`, `implement` → the stage with `mutatesSource: true`, `test` →
77
+ `do-test`, `review` → `do-code-review`). No stage matches in this workflow → stop and list the
78
+ stage ids it does have. Two stages match — `bug` and `refactor` each run `do-test` twice — →
79
+ ask which one.
80
+
81
+ 6. **Run the stages in order**, invoking each stage's `skill` Behavioral Flow directly.
82
+ - `optional: true` — decide from that stage's own `purpose`, then say which way you went and
83
+ why. Never drop an optional stage silently.
84
+ - `readinessTemplate` is non-null — consult readiness before entering the stage:
85
+ `"$DOFLOW" readiness --task-class "<taskClass>" --task-id "<task id>" --mode workflow --json`.
86
+ Both `--task-class` and `--task-id` are required; omitting either exits 2 and names the valid
87
+ set. Act on the returned `stageEntry.decision` — the entry policy is the runtime's, not this
88
+ page's: `ENTER` → enter the stage; `GATHER_FIRST` → report the missing items and gather them
89
+ first, do not enter; `ASK_USER` → ask the owed decision and wait; `STOP` → stop and surface
90
+ the conflicted claim.
91
+ - `readinessTemplate` is `null` — enter the stage. Do not consult readiness "to be safe": a
92
+ workflow whose `requiresImplementationReadiness` is `false` has no implementation to be ready
93
+ for and declares no template by design (`references/task_classes.md`). Calling it anyway
94
+ invents a gate the registry does not declare.
95
+ - After each stage, report one line: stage id, skill, and the artifact path or result it
96
+ produced — so the user can follow without intervening.
97
+
98
+ 7. **Stop at the gates the resolved workflow declares** — read them from `workflow.gates`, each
99
+ attached to a stage by `afterStage`. `trigger: always` stops every time; any other trigger stops
100
+ only when that named condition actually holds. Ask with the gate's own `prompt` via
101
+ `AskUserQuestion`. For the `feature` workflow's three, which behave as they always have:
102
+ - **`gate-0`** (after discovery, trigger `unresolved-clarifications`) — a safety net, not the
103
+ normal path: `do-brainstorm` resolves ambiguities to zero via its own loop, so this fires only
104
+ if a `[NEEDS CLARIFICATION]` marker survived an aborted session. Ask one question per marker
105
+ (grouped if closely related), patch the answers into `requirement.md` directly, and do not
106
+ re-run `do-brainstorm`. Then follow steps 1-4 of the decision step in the guidance
107
+ tree's `references/WORKFLOW_HANDOFF.md` (stage `discovery`, channel `question`) so the answers
108
+ are registered and cited; do-brainstorm already recorded discovery's handoff, so record none.
109
+ - **`gate-a`** (after planning) — the conversational checkpoint on top of the already-existing
110
+ hard hook (`pre-implement-gate.sh`, which blocks source edits until `requirement.md`,
111
+ `design.md` and `plan.md` exist and remains the real enforcement regardless of what happens
112
+ here). Options: `Proceed` / `Let me review the artifacts first` / `Stop here`.
113
+ - **`gate-b`** (after review) — no enforcement hook exists for this today; `/do-git` is a
114
+ separate, always-manually-invoked skill. Frame the question by the review's own approval
115
+ status: on `CHANGES REQUESTED`, foreground addressing the findings rather than offering a bare
116
+ proceed.
117
+ A workflow with an empty `gates` array stops at none of these. It still stops on a readiness
118
+ block, on an ambiguous answer, and on any stage skill's own stopping rule.
119
+
120
+ **Record every answer that is a decision.** Asking is not recording: a gate this skill asked but
121
+ never wrote back stays open in the run, so the stage skill that owns it asks the same question
122
+ again — the user answers twice for one decision. Immediately after the user answers, write it:
123
+ ```bash
124
+ "$DOFLOW" orchestrate --action decide-gate --task-id "<slug>" --gate "<gate id>" --decision approve|reject --note "<the user's own answer, one line>" --json
125
+ ```
126
+ Map each gate's own option set onto the two decisions the runtime accepts, and never onto a third:
127
+ - **`gate-a`** — `Proceed` is `approve`; `Stop here` is `reject`. `Let me review the artifacts
128
+ first` is **neither**: it is a pause, not a decision, so call nothing and actually pause — hold
129
+ the run at this gate and re-ask once the user comes back, exactly as step 8's ambiguous-answer
130
+ rule already requires.
131
+ - **`gate-b`** — an actual "proceed to commit/merge" answer is `approve`; an explicit stop is
132
+ `reject`. Anything that is not a real decision — "let me address the findings first" on a
133
+ `CHANGES REQUESTED` review, most often — is neither, and gets no `decide-gate` call. `reject`
134
+ terminates the run outright, which is a different answer from "not now".
135
+ - **`gate-0`** — only in the aborted-session branch above, where this skill patched
136
+ `requirement.md` itself: once every surviving marker is resolved, `approve`. If any marker is
137
+ still open, leave the gate alone.
138
+ This call is advisory to the trail, not to the chain: if it fails for a reason outside this flow's
139
+ control (an unwritable local state directory, say), report the failure plainly and carry the
140
+ user's answer forward anyway — the answer is what governs whether the next stage runs, and the
141
+ record of it is what keeps the next stage from asking again.
142
+
143
+ When the answer also carries a choice beyond approve or reject and `paths --json` reports
144
+ `has_decisions: true`, register it too, once `decision --action list`
145
+ shows no live decision with that statement; the receiving stage's batch then leaves it out:
146
+ ```bash
147
+ "$DOFLOW" decision --action add --topic "<key>" --statement "<text>" --channel gate --stage "<stage the gate follows>" --rationale "<text>" --json
148
+ ```
149
+
150
+ 8. **Never skip a gate on an ambiguous answer** — an unanswered or unclear response to any
151
+ `AskUserQuestion` means stop and ask again, per this repo's `RULE_04_QUESTIONS`. When the
152
+ terminal stage completes, state `workflow.handoff` as the next step rather than continuing into
153
+ it.
154
+
155
+ ## Conditional research within a feature
156
+
157
+ Before a feature stage relies on an external fact that local or user evidence cannot establish, or when the developer explicitly asks a research question, let that stage follow `../do-document/references/embedded-research.md`. The stage opens a same-task `research-request`, records a source-linked finding or gap, then resumes itself without adding a seventh workflow stage. On resume, read request status and context pack. A blocking unanswered question prevents stage completion; neither research nor a retrieved page approves any existing gate. Do not trigger external search merely because a feature began.
158
+
159
+ ## Boundaries
160
+ **Will:**
161
+ - Propose a task class, validate it through the runtime, and run the resolved workflow's stages in
162
+ order without a manual re-invocation at each boundary.
163
+ - Stop only where the resolved workflow says to: its declared gates, a readiness block, or an
164
+ ambiguous answer.
165
+ - Record each gate answer it collects through `orchestrate --action decide-gate`, so the stage skill
166
+ that owns that gate finds it already resolved instead of asking the user the same question twice.
167
+ - Compose with the existing `pre-implement-gate.sh` hard gate rather than bypass or duplicate it.
168
+ That hook keys on branch and artifact state, not on class, so it can deny a `bug` or
169
+ `trivial-edit` workflow's edits on a branch that already holds an incomplete feature dir —
170
+ surface its message as written.
171
+
172
+ **Will Not:**
173
+ - Run any workflow for a class the runtime rejected, or replace a rejected class with `feature`.
174
+ - Infer a class silently when two fit, or read a class the user stated as a suggestion.
175
+ - Consult implementation readiness for a stage that declares no readiness template, or invent a
176
+ readiness template for a class that has none.
177
+ - Modify any stage skill, or invoke `do-constitution` — it is standalone and in no class.
178
+ - Add a hook-level enforcement gate for commit/merge — `gate-b` is conversational only. A
179
+ hook-level version would be a separate, future proposal.
180
+ - Silently proceed past a gate on an ambiguous or missing answer.
181
+ - Record a pause or a deferral as a gate decision — `Let me review the artifacts first` and "let me
182
+ address the findings first" are neither `approve` nor `reject`, and forcing them into one writes a
183
+ decision the user did not make.
184
+
185
+ **Next Step:** whatever the resolved `workflow.handoff` names — for every class that ends in a
186
+ change, `/do-git` to commit/merge once the last gate is cleared.
@@ -0,0 +1,134 @@
1
+ # Task classes — proposal guide
2
+
3
+ The runtime's workflow registry is authoritative for **what runs**; this file is authoritative for
4
+ **which class to propose**. Never quote a stage list from here: get stages from `classify` or
5
+ `workflow`, so a registry edit reaches the run without a prose edit.
6
+
7
+ ## Propose exactly one
8
+
9
+ - Read the request, name one class id, and hand it to `classify` as `taskClass`. That key name is
10
+ literal — the runtime detects `class`, `type`, `taskType`, `workflow` and friends as near-misses
11
+ and rejects the proposal rather than reading them.
12
+ - A proposal is a hypothesis, not a decision. Say what you propose and the one or two signals it
13
+ rests on, so a wrong read is visible before the workflow runs.
14
+ - Two classes fit equally well → **ask**, do not pick the larger one. "Feature" is not the safe
15
+ default; it is the longest workflow and the only one that demands three artifacts before an edit.
16
+ - The user naming a class outright settles it. Propose what they said, and let `classify` reject it
17
+ if it is not a declared id.
18
+
19
+ ## Cues
20
+
21
+ | Class | Propose when the request is about… |
22
+ |---|---|
23
+ | `feature` | A capability that does not exist yet and needs to be specified before it is built. |
24
+ | `bug` | Behavior that is wrong *now*, with a symptom the user can point at. |
25
+ | `refactor` | Changing structure while holding behavior fixed — extract, rename, split, de-duplicate. |
26
+ | `review` | Judging code or a diff that already exists. The deliverable is findings. |
27
+ | `research` | Answering a question. The deliverable is a written report, not a change. |
28
+ | `documentation` | Writing or updating docs that ship with the repo — a reference page, a guide, a README section, an architecture note. |
29
+ | `dependency-change` | Adding, removing, or moving the version of something the project depends on. |
30
+ | `operations` | Repository lifecycle — branch, release, merge, hotfix, backport, tag. |
31
+ | `trivial-edit` | One file, no cascade: a typo, a constant, a string, a comment. |
32
+
33
+ ## Confusable pairs
34
+
35
+ - **bug vs refactor** — a bug has an observed wrong behavior; a refactor has none, and the suite is
36
+ green before and after. If the suite is red, it is a bug.
37
+ - **bug vs trivial-edit** — a one-line change is still `bug` when the reason it is wrong has to be
38
+ established. `trivial-edit` is for when the target and the correct value are both already known.
39
+ - **review vs bug** — reviewing produces findings; acting on a finding is a separate task with its
40
+ own class. Do not propose `review` for work that ends in an edit.
41
+ - **research vs review** — `review` judges this repository's code, `research` answers a question
42
+ that may have no code answer at all.
43
+ - **dependency-change vs feature** — an upgrade is `dependency-change` even when it unlocks a
44
+ feature. The feature is the next task.
45
+ - **operations vs trivial-edit** — changing a version *string* in a manifest as part of cutting a
46
+ release is `operations`; changing it because it is wrong is `trivial-edit` or `bug`.
47
+ - **documentation vs trivial-edit** — a one-line doc fix with a known target and a known correct
48
+ value is `trivial-edit`; anything that has to be written, or that spans the files a doc set
49
+ cross-references, is `documentation`.
50
+ - **documentation vs research** — `research` answers a question and files a report; `documentation`
51
+ writes prose that ships in the tree. If the deliverable is committed alongside the code, it is
52
+ `documentation`.
53
+
54
+ ## Properties each class guarantees
55
+
56
+ These are structural facts about the resolved workflow, not advice — read them off the returned
57
+ object rather than assuming them.
58
+
59
+ - **`review`** — `hasImplementationStage: false`. There is no stage that edits source, so a review
60
+ run never enters implementation and never consults implementation readiness. A finding leaves the
61
+ workflow as its own task under its own class.
62
+ - **`research`** — terminates at synthesis. `requiresImplementationReadiness: false`: do not run a
63
+ readiness check, do not report one as skipped, and do not ask for the evidence a readiness
64
+ template would want. If the synthesis motivates a change, that change is a new task.
65
+ - **`documentation`** — no readiness template, by the same rule as `review` and `research`: the
66
+ workflow authors no source, so implementation readiness has nothing to gate. Every claim the prose
67
+ makes carries a locator — a figure nobody measured is the failure this class actually has. The
68
+ verification stage is optional, and a skip must be stated with the reason the repository has no
69
+ check the documentation can break.
70
+ - **`bug`** — starts from reproduction and root cause. Do not propose or apply a fix before the
71
+ reproduction stage has recorded the failure and the analysis stage has supported a cause. A fix
72
+ proposed at intake is the thing this ordering exists to prevent.
73
+ - **`refactor`** — needs a recorded green baseline before the first edit, so a later failure is
74
+ attributable to the restructuring rather than argued about.
75
+ - **`dependency-change`** — starts from the upstream release evidence for the exact version range,
76
+ not from the version number. Its verification stage runs the full suite: the blast radius is not
77
+ bounded by the diff.
78
+ - **`operations`** — **ungated, deliberately.** The readiness registry holds no `operations`
79
+ template, and the class claims none: the workflow authors no source, so
80
+ implementation readiness has nothing to gate. Its equivalent safeguard is the preflight
81
+ verification stage. Do not invent a template, and do not call `readiness --task-class operations`
82
+ — the verb rejects it, and rightly.
83
+ - **`trivial-edit`** — deliberately the shortest workflow. Do not add checks to it; if it needs
84
+ them, it was the wrong class.
85
+ - **`feature`** — unchanged from what `do-flow` has always run: the six-stage chain, resumed from
86
+ the first missing artifact, stopping at unresolved clarifications, before implementation, and
87
+ before commit or merge.
88
+
89
+ ## Reading the decision
90
+
91
+ `classify` returns one object. The fields this skill acts on:
92
+
93
+ - `outcome` — `ACCEPTED` or `REJECTED`. Branch on this, never on the exit code.
94
+ - `message` — the sentence to show the user. On a rejection it already names the valid set and any
95
+ near-match suggestions, so surface it verbatim rather than paraphrasing it.
96
+ - `validClasses`, `suggestions` — present on a rejection; the option set for the follow-up question.
97
+ - `fit` — whether the class's workflow has a stage for the skill that called `classify`. See below.
98
+ - `callerSuggestions` — present only on an `unknown-calling-skill` rejection. Skill ids, never class
99
+ ids: do not offer them as an answer to "which class?".
100
+ - `workflow` — present only on `ACCEPTED`; `null` on a rejection. The run's plan of record.
101
+
102
+ Within `workflow`: `stages[]` (each with `id`, `skill`, `kind`, `purpose`, `optional`,
103
+ `readinessTemplate`, `mutatesSource`, `gatesAfter`), `stageIds`, `gates[]` (`id`, `name`,
104
+ `afterStage`, `trigger`, `prompt`), `hasImplementationStage`,
105
+ `requiresImplementationReadiness`, and `handoff`.
106
+
107
+ ## Fit: does this class have a stage for the skill asking?
108
+
109
+ Pass `--calling-skill <this skill's own id>` with every `classify` call. Membership — "is this a
110
+ real class?" — is not the same question as fit — "does this class's workflow have a stage I can
111
+ occupy?" — and a class can pass the first while having nowhere to put your work.
112
+
113
+ `fit.state` is one of four:
114
+
115
+ - `HOSTED` — the class names your skill at `fit.hostedStageIds`. Proceed.
116
+ - `NOT_APPLICABLE` — you are a router (`do`, `do-flow`): you select stages rather than occupying
117
+ one, so fit is judged one hop later by the skill you hand the work to.
118
+ - `NOT_HOSTED` — a rejection. See below.
119
+ - `NOT_EVALUATED` — **nothing was checked.** Either no calling skill was named, or it was named
120
+ under the wrong key. This is not a pass: the decision establishes that the class exists and
121
+ nothing more. Re-run with `--calling-skill`.
122
+
123
+ A `caller-not-a-stage` rejection is about **you**, not about the class. Answer it from
124
+ `fit.hostingClasses`, which lists every class that does have a stage for your skill and names the
125
+ stage — propose one of those, or hand the work to the skill this class names for the stage you
126
+ meant. Re-proposing the same class will be rejected the same way.
127
+
128
+ ## The hard hook does not know about classes
129
+
130
+ `pre-implement-gate.sh` keys on branch and artifact state: if the current branch already carries a
131
+ feature directory missing `requirement.md`, `design.md` or `plan.md`, it denies source edits
132
+ regardless of the class in play — so a `bug` or `trivial-edit` workflow started on that branch will
133
+ be blocked at its implementation stage. Surface the hook's message as written. Do not route around
134
+ it, and do not create placeholder artifacts to satisfy it.
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: do-git
3
+ description: "Git operations with lifecycle-aware intents and safety checks — start, save, sync, ship, release, hotfix, backport, and status, plus raw git passthrough for anything else. Use whenever the user requests git actions, branch management, committing changes, syncing with remotes, or release rituals (e.g., 'commit these files', 'ship this feature', 'create a feature branch', 'cut a hotfix', 'sync repo', 'what is git status'). Always activate this skill for safe, confirmed git operations rather than running bare mutating git commands."
4
+ argument-hint: "[intent] [args...] [--confirm]"
5
+ effort: medium
6
+ ---
7
+
8
+ # do-git
9
+
10
+ Cycle-aware git operations via named lifecycle intents. Reads policy from the repository's
11
+ constitution or falls back to opinionated defaults. All mutating operations require explicit
12
+ confirmation.
13
+
14
+ ## Invocation
15
+ ```text
16
+ /do-git <intent> [args...] [--confirm]
17
+ ```
18
+
19
+ ### Intents
20
+
21
+ | Intent | Description |
22
+ |---|---|
23
+ | `start` | Start a new task on the appropriate branch type |
24
+ | `save` | Stage and commit current changes with intelligent message |
25
+ | `sync` | Sync local branches with remote state |
26
+ | `ship` | Ship the current feature/fix (merge to integration) |
27
+ | `release` | Run the release ritual as one previewed sequence |
28
+ | `hotfix` | Create and propagate a hotfix across all live lines |
29
+ | `backport` | Cherry-pick a commit to another branch |
30
+ | `status` | Report repository state and lifecycle position |
31
+
32
+ ### Raw Operation Passthrough
33
+
34
+ Any unrecognized first token falls through to today's raw git operation behavior:
35
+ ```text
36
+ /do-git status # Today's raw git status (no prompt)
37
+ /do-git log --oneline
38
+ /do-git diff HEAD~10
39
+ ```
40
+
41
+ Existing `/do-git [operation]` invocations keep working.
42
+
43
+ ## Behavioral Flow
44
+
45
+ Every DoFlow runtime call in this skill goes through the runtime seam. Resolve it **once** here and
46
+ reuse `$DOFLOW` for every later call in this skill:
47
+
48
+ ```bash
49
+ # Resolve the DoFlow runtime: nearest project install wins, then the global one.
50
+ D=$PWD; while [ "$D" != / ] && [ ! -x "$D/.doflow/scripts/doflow/bin/doflow-run" ]; do D=$(dirname "$D"); done
51
+ DOFLOW="$D/.doflow/scripts/doflow/bin/doflow-run"
52
+ [ -x "$DOFLOW" ] || DOFLOW="$HOME/.doflow/scripts/doflow/bin/doflow-run"
53
+ [ -x "$DOFLOW" ] || { echo "doflow: no runtime found in any .doflow/ above $PWD, nor at $HOME/.doflow. Run: npx @khoavu882/doflow install -t <harness>" >&2; exit 2; }
54
+ ```
55
+ Run every command below from the project root — the walk-up starts at `$PWD`. On exit 2, print the message verbatim and stop; it names every path searched.
56
+
57
+ ### Per Intent Processing
58
+
59
+ 1. **Read repository state** → `"$DOFLOW" paths --json`, `"$DOFLOW" git-state` as needed
60
+ 2. **Dry-run fingerprint** (for mutable intents) → `"$DOFLOW" git-state --fingerprint`, record it, so a later step can tell whether the working tree moved underneath the plan
61
+ 3. **Compose preview sequence** → exact commands with concrete values, no placeholders. **The preview is the contract for this intent**: it is the complete set of commands that will run, in order, against the fingerprint from step 2. A command that is not in it does not run, and a step you cannot spell concretely is a step to stop on rather than to improvise at execution time
62
+ 4. **User confirmation** → explicit go/no-go before execution
63
+ 5. **Re-fingerprint** → `"$DOFLOW" git-state --fingerprint`; if changed since step 2, abort and re-preview
64
+ 6. **Execute, then report against the preview** → every command in the previewed sequence gets a reported result; one the sequence listed and the run did not reach is reported as not run, never dropped from the report
65
+
66
+ ### Raw Operation Passthrough Flow
67
+
68
+ 1. **Check state first** (`git status`) for any operation that could discard work
69
+ 2. **Gate on reversibility**: stash or confirm before destructive operations
70
+ 3. **Execute** the raw git command
71
+ 4. **Report** result, next-Step suggestion if applicable
72
+
73
+ ## Safety Gates
74
+
75
+ The following behaviors from today's skill are carried over unchanged:
76
+
77
+ - **State checks** → `git status` before anything that could discard uncommitted work
78
+ - **Confirm before irreversible actions**:
79
+ - Force-pushes to any branch
80
+ - Pushes to production (`master`/`main`)
81
+ - History rewrites (rebase, reset, tag force-overwrite)
82
+ - **No implicit approvals** → confirmation is per-command sequence, not broad permission
83
+
84
+ ## Boundaries
85
+
86
+ **Will:**
87
+ - Run named lifecycle intents with full preview and confirmation
88
+ - Fall through to raw git operations for unrecognized first tokens
89
+ - Generate commit messages from actual diff content, never from the request's wording
90
+ - Derive branch names purely from policy plus `"$DOFLOW" git-state` — never invent one
91
+
92
+ **Will Not:**
93
+ - Forge API calls (PR/MR creation, pipeline watching) - excluded per scope boundary
94
+ - CI/CD setup or branch protection scaffolding - excluded per scope boundary
95
+ - Confirm multiple commands at once - each requires explicit go/no-go
96
+
97
+ ## Reference Files
98
+
99
+ This skill loads the following reference files on demand (not parsed at runtime):
100
+
101
+ - `references/lifecycle-policy.md` - default policy + override shape + forge mapping
102
+ - `references/release-ritual.md` - release sequence, manifest rewrite, CHANGELOG drafting
103
+ - `references/hotfix-ritual.md` - hotfix propagation rules and halt-on-conflict behavior
104
+
105
+ ## Examples
106
+
107
+ ```
108
+ /do-git status # Report current lifecycle position
109
+ /do-git start # Prepare for a new task (feature/fix branch)
110
+ /do-git save # Stage and commit with intelligent message
111
+ /do-git ship # Merge feature to integration
112
+ /do-git release # Run full release ritual
113
+ /do-git hotfix 12345 # Create hotfix from fix #12345
114
+ /do-git log --oneline # Raw git passthrough
115
+ ```
@@ -0,0 +1,44 @@
1
+ # Hotfix Procedure: /do-git
2
+
3
+ This procedure is executed when `/do-git hotfix` is invoked. It patches production and
4
+ propagates to every live line.
5
+
6
+ ## Sequence
7
+
8
+ Runs inside `SKILL.md`'s Per Intent Processing sequence. This file supplies only the
9
+ intent-specific preview content (its steps 2–3).
10
+
11
+ 1. **Propagation targets** → `"$DOFLOW" git-state --propagation-targets`
12
+ 2. **Preview full command sequence**:
13
+ - Create hotfix branch from production: `git checkout -b hotfix/<slug> production-branch`
14
+ - Cherry-pick or merge the fix commit(s)
15
+ - Tag with patch version: `git tag v<major>.<minor>.<patch>` (annotated)
16
+ - Merge to production without fast-forward
17
+ - For each target in propagation targets:
18
+ - If target is integration: merge hotfix branch into it
19
+ - If target is active release branch: cherry-pick the fix commit
20
+
21
+ ## Propagation Rules
22
+
23
+ ### Target Order
24
+ 1. Production branch (merge hotfix)
25
+ 2. Integration branch (merge hotfix)
26
+ 3. Active release branches in order of creation (cherry-pick)
27
+
28
+ ### Outstanding Target Definition
29
+ A target is "outstanding" if:
30
+ - It cannot receive the fix automatically (conflicting cherry-pick)
31
+ - It requires manual intervention
32
+
33
+ ### Halt-and-Report Behavior
34
+ On a conflicting cherry-pick:
35
+ 1. Stop propagation immediately
36
+ 2. Report all outstanding targets with conflict details
37
+ 3. Do NOT report hotfix as complete
38
+ 4. Report exact chain of commits that could not be applied
39
+
40
+ ## Constraints
41
+
42
+ - **Hotfix merges directly to production first** before any other targets
43
+ - **Each target's propagation status is tracked** - no silent omissions
44
+ - **Conflict detection is required** - no forced cherry-picks without user intervention
@@ -0,0 +1,54 @@
1
+ # Lifecycle Policy: /do-git default branching policy
2
+
3
+ ## Default Policy Table
4
+
5
+ | Field | Value |
6
+ |---|---|
7
+ | `trunk_names` | `main`, `develop` |
8
+ | `feature_prefixes` | `feat`, `feature` |
9
+ | `fix_prefixes` | `fix`, `bugfix` |
10
+ | `integration_branch` | `develop` |
11
+ | `production_branch` | `master` |
12
+ | `tag_format` | `vX.Y.Z` (semver) |
13
+
14
+ These are transcribed defaults, not the live ones. `"$DOFLOW" git-state` computes the branch class
15
+ and lifecycle position from the values it actually holds — when the two disagree, the verb is right
16
+ and this table is stale.
17
+
18
+ ## Tier-2 Constitution Override Shape
19
+
20
+ A repo may override the default policy by adding a block under `agent-docs/constitution.md`:
21
+
22
+ ```markdown
23
+ ## /do-git Policy Overrides
24
+
25
+ | Field | Value |
26
+ |---|---|
27
+ | trunk_names | Comma-separated list of trunk branch names |
28
+ | feature_prefixes | Comma-separated list of feature branch prefixes |
29
+ | fix_prefixes | Comma-separated list of fix branch prefixes |
30
+ | integration_branch | The integration branch name |
31
+ | production_branch | The production branch name |
32
+ | tag_format | The tagging format (semver or custom) |
33
+ ```
34
+
35
+ Where absent, defaults apply.
36
+
37
+ ## Forge Adaptation
38
+
39
+ Nothing in this repo runs forge detection today, so this file describes no mechanism for it. Read
40
+ the forge off the remote's host when the vocabulary matters (`Pull Request` on GitHub, `Merge
41
+ Request` on GitLab); detection failure or an unknown remote degrades to plain git with the ambiguity
42
+ stated rather than guessed.
43
+
44
+ ## Deviation Catalogue
45
+
46
+ What counts as a policy deviation and how it's reported:
47
+
48
+ | Observation | Classification | Action |
49
+ |---|---|---|
50
+ | Branch name doesn't match any defined pattern | Unclassifiable branch | Report deviation, continue |
51
+ | Release branch without corresponding tag | Missing tag | Report deviation |
52
+ | Hotfix not propagated to all active release branches | Incomplete propagation | Report outstanding targets |
53
+
54
+ Deviations are **reported**, never silently corrected.
@@ -0,0 +1,64 @@
1
+ # Release Procedure: /do-git
2
+
3
+ This procedure is executed when `/do-git release` is invoked. It runs as one previewed,
4
+ confirmed sequence.
5
+
6
+ ## Sequence
7
+
8
+ Runs inside `SKILL.md`'s Per Intent Processing sequence. This file supplies only the
9
+ intent-specific preview content (its steps 2–3).
10
+
11
+ 1. **Next version** → `"$DOFLOW" git-state --next-version`
12
+ - When `is_prerelease` is true the verb returns **two** candidates and picks neither:
13
+ `next_version` promotes the line (`1.0.0-beta.7` → `1.0.0`, because semver orders a
14
+ pre-release *before* its own version, so promoting it is the bump) and `next_prerelease`
15
+ continues it (`1.0.0-beta.8`). Put both to the user rather than assuming one — which of the
16
+ two is right is a product decision, not a computation.
17
+ 2. **Preview full command sequence** with the proposed version:
18
+ - `git checkout -b release/v<version> <integration-branch>`
19
+ - Update all version manifests (per policy: package.json, etc.)
20
+ - Draft CHANGELOG entry from commits since last tag
21
+ - Commit version bump
22
+ - `git checkout <production-branch>`, then `git merge --no-ff release/v<version>`
23
+ - `git tag v<version>` (annotated)
24
+ - `git push origin release/v<version> v<version>`
25
+ - Back-merge: merge the release branch back to the integration branch
26
+
27
+ Also preview the shipped features with `"$DOFLOW" lifecycle --action release --tag v<version>`
28
+ (it writes nothing). After the tag is created, rerun it with `--confirm`. The record is local;
29
+ DoFlow never stages, commits or pushes it.
30
+
31
+ ## Version Manifest Rewrite
32
+
33
+ For each manifest file declared in policy:
34
+ - Extract current version string using appropriate format (version, versionCode, etc.)
35
+ - Replace with the next version `"$DOFLOW" git-state --next-version` derived
36
+ - Leave format intact; only change the value
37
+
38
+ ## CHANGELOG Drafting Instruction
39
+
40
+ Generate a Keep-a-Changelog style entry for `[Unreleased]`:
41
+ - Group commits by type (feat, fix, BREAKING CHANGE)
42
+ - For each group, list commits as bullet items
43
+ - Include scope where inferable from changed paths
44
+ - Use conventional commit message format as-is
45
+
46
+ Example:
47
+ ```markdown
48
+ ## [v1.0.0] - YYYY-MM-DD
49
+ ### Added
50
+ - Feature X by user
51
+
52
+ ### Fixed
53
+ - Bug Y reported by user
54
+
55
+ ### Breaking Changes
56
+ - Changed API Z
57
+ ```
58
+
59
+ ## Constraints
60
+
61
+ - **Never write the version manifests until after user confirmation** (the preview above shows the
62
+ proposed content only)
63
+ - **Fingerprint mismatch aborts execution** - state must be exactly as when previewed
64
+ - **All push operations require confirmation** — see `SKILL.md`'s Safety Gates