@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,373 @@
1
+ # Artifact Format — authoring convention for chain artifacts
2
+
3
+ How `requirement.md`, `design.md` and `plan.md` are structured so an engineer who did not write a
4
+ feature can learn what it contains without reading it end to end. Loaded on demand by
5
+ `do-brainstorm`, `do-design` and `do-plan`; not part of any always-loaded context.
6
+
7
+ Checked mechanically by `scripts/doflow/bash/validate-artifacts.sh` — advisory, never blocking.
8
+ `state.md`, contract docs, and `implementation-flow.md` are out of scope; the former are list-shaped, the latter narrative-only.
9
+ `audit.md` is out of scope too, for a different reason: it is machine-generated by `render-audit.sh`
10
+ and never hand-authored, so there is nothing for a consistency checker to check (see §9, "What the
11
+ checker does and does not do" — not the `## 9. History` inside §3's own fenced example below, which
12
+ illustrates an *artifact's* §9, not this document's).
13
+
14
+ ## 1. Index then detail
15
+
16
+ Every enumerated, ID-bearing section opens with a table summarising its items, followed by
17
+ `**Detail**` and the full normative text of each one.
18
+
19
+ ```markdown
20
+ | ID | Requirement | Priority | Status |
21
+ |---|---|---|---|
22
+ | FR-001 | One-line summary | P1 | Live |
23
+
24
+ **Detail**
25
+
26
+ - **FR-001:** The system MUST [full normative text, every qualifier and exception intact].
27
+ ```
28
+
29
+ Rules:
30
+
31
+ - The **index is navigation, not a substitute.** Detail carries the full text; a reviewer must be
32
+ able to rely on it alone for correctness. Adding an index never shortens what was already there.
33
+ - **Every index row has exactly one detail entry, and vice versa.** Orphans on either side are
34
+ what the validator reports first.
35
+ - The first column header must be literally `ID`, and the status column header literally `Status` —
36
+ the checker locates them by name, so a column added to the right cannot shift the check.
37
+ - A detail entry takes either of two forms, and both may appear in the same artifact. Neither is
38
+ deprecated.
39
+ - **Bullet form:** a line starting `- **<ID>`, where `<ID>` is the leading token inside the bold.
40
+ A trailing colon or a parenthetical qualifier inside the bold is fine: `- **FR-001:**` and
41
+ `- **NFR-002 (Backward compatible):**` both parse.
42
+ - **Heading form:** a line matching `#### <ID>: <text>`, which counts as a detail entry only when
43
+ `<ID>` also appears in the first column of that section's index table. An ID-shaped heading with
44
+ no matching index row is not a detail entry and is ignored, so an unrelated heading cannot
45
+ invent a parity finding of its own.
46
+
47
+ Two conditions bound this form, and the bullet form is the answer wherever they do not hold.
48
+ The index table must appear **before** the detail it pairs with, because a heading is read
49
+ against the rows already seen. And the index must be **ID-first**: §3's History table leads with
50
+ `Date`, so **History detail uses the bullet form**. Neither condition binds the bullet form,
51
+ which is reconciled only after the whole file is read.
52
+
53
+ Which sections take an index: `requirement.md` §3 Functional Requirements, §4 Non-Functional
54
+ Requirements and §8 Assumptions; `design.md` §3 Components & Boundaries, §7 Risks and §8
55
+ Assumptions; `plan.md` §4 Components & Changes and §6 Risks; `specs.md` §1 Interface Contracts.
56
+ Prose sections do not.
57
+
58
+ ## 2. Status and Maturity — two closed vocabularies
59
+
60
+ ### Status — the state of one indexed item
61
+
62
+ | Value | Meaning |
63
+ |---|---|
64
+ | `Live` | In force as written |
65
+ | `Superseded → <ref>` | Replaced; `<ref>` names what replaced it |
66
+
67
+ Nothing else is permitted — no `TBD`, `Draft`, `Done` or `WIP`. Emphasis is ignored, so
68
+ `**Superseded → FR-009**` reads the same as the bare form.
69
+
70
+ An item is **never silently deleted** once another artifact references its ID. Supersession is
71
+ recorded so a reference encountered elsewhere always resolves. An item dropped before anything
72
+ references it may simply be removed.
73
+
74
+ ### Maturity — the state of the document
75
+
76
+ Every chain artifact's header carries `**Maturity:** <value>`, one of exactly three:
77
+
78
+ | Value | Meaning |
79
+ |---|---|
80
+ | `Draft` | Being written or revised; not yet offered for review |
81
+ | `In review` | Offered for review; no reviewer has ruled on it yet |
82
+ | `Approved` | A reviewer accepted it as it stands |
83
+
84
+ The two vocabularies are **disjoint**: no value is a member of both, so no reader and no parser has
85
+ to work out which one a value came from. `Maturity` describes the document as a whole; `Status`
86
+ describes one indexed item inside it. A document can be `Approved` while an item inside it is
87
+ `Superseded → <ref>`, and the two say different things.
88
+
89
+ The former header form `**Status:** Draft` is gone. A header carrying `Status` is reading the item
90
+ vocabulary in the wrong place, and `Draft` was never a legal member of it.
91
+
92
+ ## 3. History — the live body stays current
93
+
94
+ When an item is superseded, its obsolete prose leaves the `**Detail**` block and moves to the
95
+ artifact's own final History section — §9 for `requirement.md`, `design.md` and `plan.md`; §2 for
96
+ `specs.md`. The index row stays as a tombstone. Reading the body top to bottom therefore yields
97
+ current truth with no historical detours, while the supersession is still visible at a glance.
98
+
99
+ Two rules bind that mechanism, and nothing else in this document states them:
100
+
101
+ - **An id is never renumbered once anything references it.** A deletion at least breaks loudly. A
102
+ renumber does not, because the reused id still resolves to a real item and every reference to it
103
+ now silently points at something else — often from another artifact, sometimes from another
104
+ repository's `plan.md`. When an item's content is replaced, the replacement takes a new id and the
105
+ old row becomes a tombstone. Ids are append-only.
106
+ - **Moving or reshaping an item is not, on its own, a supersession.** Regrouping detail under new
107
+ headings, converting a bullet-form entry to §1's heading form, or relocating a section leaves what
108
+ the item says unchanged, so it records nothing here. Recording such a move as a supersession is as
109
+ damaging as omitting a real one: it fills the record with reversals that never happened. This does
110
+ not touch the move described at the top of this section: prose leaving a `**Detail**` block for
111
+ History *because* its item was superseded is that supersession's recorded consequence, not a case
112
+ of this rule. The test is always whether what the item says changed, never whether its text
113
+ moved.
114
+
115
+ History is itself index-then-detail — a table so changes can be listed and compared, with detail
116
+ below so the reasoning behind a reversal is not compressed into a cell:
117
+
118
+ ```markdown
119
+ ## 9. History
120
+
121
+ | Date | ID | Change | Replaced by |
122
+ |---|---|---|---|
123
+ | 2026-07-29 | FR-001 | Field renamed during design | design §4.1 |
124
+
125
+ **Detail**
126
+
127
+ - **FR-001** — [what it said before, why it changed, what is true now].
128
+ ```
129
+
130
+ A new artifact writes `None — initial version.` Every ID marked `Superseded` must appear here.
131
+
132
+ **Revising an artifact updates its History.** An artifact revised after its initial write MUST
133
+ record the revision here. `None — initial version.` MUST NOT remain once any indexed item has been
134
+ added, changed or superseded — that line is a claim that the body has never moved, and leaving it
135
+ in place after a revision makes the artifact's own account of itself false.
136
+
137
+ A feature with a decision register compacts History mechanically; see §12.
138
+
139
+ ## 4. Diagrams
140
+
141
+ > **Slot registry.** This section says which artifact carries which diagram slot. What belongs
142
+ > *inside* a slot — the permitted Mermaid types, the per-type complexity budget, the label,
143
+ > direction and `subgraph` conventions, the over-budget split rule, and the anti-patterns — is
144
+ > governed by `DIAGRAM_GUIDE.md`, which the authoring skills load on demand.
145
+
146
+ | Artifact | Section | Slot |
147
+ |---|---|---|
148
+ | `requirement.md` | §1 | Scope boundary `flowchart` |
149
+ | `design.md` | §2 | Three C4 levels, each a `flowchart` with `subgraph` boundaries |
150
+ | `plan.md` | §8 | Phase and task dependency `flowchart` |
151
+ | `data-model.md` | §1 | Conceptual domain map `flowchart`, then one `erDiagram` per bounded subdomain |
152
+ | `data-model.md` | §2 | Interaction `sequenceDiagram` |
153
+
154
+ ### Scope boundary — `requirement.md` §1
155
+
156
+ A `flowchart` showing what is in scope, what is explicitly excluded, and what outcome each
157
+ in-scope item produces, so the shape of the change is visible before the prose. Use
158
+ `subgraph IN["In scope"]` / `subgraph OUT["Out of scope"]`. Write `N/A: [why]` for a change too
159
+ small to have a meaningful boundary.
160
+
161
+ ### C4 levels — `design.md` §2
162
+
163
+ C4 is kept as the **conceptual zoom model** — system context, container, component — and rendered
164
+ with Mermaid `flowchart` plus `subgraph` blocks marking C4 boundaries. Each level takes its own
165
+ heading, written `### C4 Level 1: System Context`, `### C4 Level 2: Container` and
166
+ `### C4 Level 3: Component`.
167
+
168
+ | Level | Shows | Required? |
169
+ |---|---|---|
170
+ | C4 Level 1 | Actors and external systems. One box per actor or external system — no internals | yes |
171
+ | C4 Level 2 | Independently deployable units and how they talk | yes |
172
+ | C4 Level 3 | Internals of one container | only when the feature touches 3+ components in a single container |
173
+
174
+ **No level label may match `^C[0-9]+$`.** That pattern is what a `design.md` §3 component ID looks
175
+ like, so a bare `C3` in the same document is ambiguous between the third zoom level and the third
176
+ component. Spelling the level `C4 Level 3` keeps the C4 vocabulary explicit for a reviewer who
177
+ cites levels by number while leaving the component IDs unambiguous.
178
+
179
+ Skip a level with `N/A: [why]`; for C4 Level 3 that is normally
180
+ `N/A: covered by §3 Components & Boundaries`. `DIAGRAM_GUIDE.md` §1 carries the reasoning that
181
+ excludes the `C4Context` / `C4Container` diagram types in favour of `flowchart`.
182
+
183
+ ### Task dependency graph — `plan.md` §8
184
+
185
+ A `flowchart` showing the phases, the dependency order between tasks, and which tasks carry the
186
+ `[P]` parallel marker, so execution order is visible before the checklist is read. The per-task
187
+ `- [ ]` checklist stays the single source of truth for tasks and the diagram is never parsed as a
188
+ second inventory of them — the same rule §5 states for the phase rollup. Write `N/A: [why]` for a
189
+ plan too small to have meaningful ordering.
190
+
191
+ ## 5. plan.md — phase rollup
192
+
193
+ §8 gains a phase-level summary above the checklists:
194
+
195
+ ```markdown
196
+ ### Task Summary
197
+
198
+ | Phase | Tasks | Delivers | [P] |
199
+ |---|---|---|---|
200
+ | A | 2 | Verification layer | yes |
201
+ ```
202
+
203
+ The heading is `### Task Summary`, not `### Phase Summary` — the latter collides with the
204
+ `### Phase <X>` pattern the checker uses to find phase sections.
205
+
206
+ **The per-task `- [ ]` checklist is the single source of truth for tasks and is never mirrored
207
+ into a per-task index table.** Duplicating every task line would recreate exactly the
208
+ hand-maintained-inventory drift this convention exists to prevent, in the one file where drift is
209
+ most costly — and `/do-execute-plan` parses those markers as an execution contract, so their
210
+ syntax must not change.
211
+
212
+ Each rollup row's task count must match the `- [ ]` lines under its `### Phase <X>` heading.
213
+
214
+ ## 6. User Stories & Acceptance Criteria Conventions
215
+
216
+ ### User Story Hierarchy — `requirement.md` §2
217
+
218
+ User Stories support hierarchical heading structures matching standard product backlog conventions:
219
+ - Use `### Story X: [Story Title] (P#)` for top-level stories or `### Story X.Y: [Story Title] (P#)` for sub-stories.
220
+ - Underneath each story heading, state the user requirement using standard role/want/benefit syntax:
221
+ `- **US1 (P1):** As a [role], I want [capability], so that [benefit].`
222
+
223
+ ### Behavioral Acceptance Criteria (BDD) — `requirement.md` §6
224
+
225
+ Acceptance criteria are formatted as testable Gherkin BDD scenario blocks mapped to user story and functional requirement IDs:
226
+
227
+ ```markdown
228
+ - [ ] **Scenario: [Scenario Title]** (US1, FR-001)
229
+ - **Given** [precondition or initial context]
230
+ - **When** [action or trigger event occurs]
231
+ - **Then** [expected observable outcome]
232
+ ```
233
+
234
+ - **WHAT/WHY vs HOW Boundary:** `requirement.md` strictly describes user-facing behaviors and functional outcomes. Technical implementation anchors (such as database schemas, REST endpoints, repository patterns, and UX tokens) belong in `specs.md` §1 and `data-model.md`.
235
+
236
+ ## 7. Technical Scaffolding in specs.md and data-model.md
237
+
238
+ `specs.md` and `data-model.md` provide dedicated homes for technical implementation anchors — `design.md` §4/§5 hold
239
+ only a one-line pointer to them:
240
+ - **Interface Contracts (`specs.md` §1):** HTTP endpoints (methods, routes, request/response shapes, status codes), CLI verb signatures, and repository/service interfaces (`interface` → `concrete` → `mock`).
241
+ - **Data Model (`data-model.md` §1):** Relational data model diagrams, database table schema catalogs (table purpose, keys, relations, indexes, ORM/DDL file references), and UX design tokens (color palettes, component states, layout cues).
242
+
243
+ This section routes *what* belongs in each of those two sections; the shape each one takes is
244
+ governed by §10.
245
+
246
+ ## 8. Tables for comparison
247
+
248
+ Where an artifact presents comparative or evidentiary data — several items measured on the same
249
+ axes, a before/after contrast, a list of changes — lay it out as a table rather than prose or
250
+ nested bullets, so items compare column-wise at a glance.
251
+
252
+ ## 9. What the checker does and does not do
253
+
254
+ Run `"$DOFLOW" validate [--json] [--slug=<slug>] [<path>...]` after writing — the seam passes those
255
+ flags through unchanged, and the helper behind the verb is not on `PATH` to be called by name. Exit `0` clean,
256
+ `1` on findings, `0` plus a printed note when it cannot work out what to check (no active feature,
257
+ resolver or `jq` unavailable).
258
+
259
+ A file that was named explicitly but cannot be read or parsed is a **finding**, not a fail-open —
260
+ it exits `1` and says the file was not checked. Silence there would report a clean result for a
261
+ file nobody looked at.
262
+
263
+ Checked: index/detail parity both directions · `Status` vocabulary · ID-shaped supersede targets
264
+ resolve · superseded items have a History entry · plan rollup counts match the checklist ·
265
+ decision references are not stale · no unknown decision references (every cited `DEC-###` is in the register).
266
+
267
+ Parity reads both detail-entry forms of §1: the `- **<ID>` bullet, and the `#### <ID>: <text>`
268
+ heading whose ID also appears in that section's index table. A heading that merely looks ID-shaped
269
+ matches no index row, so it neither satisfies a row nor reports an orphan of its own.
270
+
271
+ Not checked: whether an index summary faithfully describes its detail, whether a diagram is
272
+ accurate, whether a required section exists at all. It is a **consistency** checker, not a
273
+ conformance checker — which is also why artifacts written before this convention, having no index
274
+ tables, pass without needing a version marker.
275
+
276
+ `audit.md` is never a target, explicit or resolved: like `state.md`, it sits outside this
277
+ convention entirely (see this doc's intro), but for its own reason — it is generated fresh by
278
+ `render-audit.sh` from the orchestrator's own journal on every run, never hand-authored, so there
279
+ is no author-vs-index drift for this checker to ever catch.
280
+
281
+ Findings are reported to the author and never repaired automatically: when an index and its detail
282
+ disagree, deciding which one is wrong is authoring judgement, not a mechanical fix.
283
+
284
+ ## 10. Reviewer-facing sections
285
+
286
+ > **Authoritative:** this section governs which reviewer-facing sections an artifact carries and
287
+ > what shape each one takes, including the shape of `specs.md` §1 and `data-model.md` §1 that §7 routes content to.
288
+
289
+ Three sections exist so a reviewer can reach a judgement from the top of a document rather than by
290
+ reading it whole:
291
+
292
+ - **`design.md` §1 — the decision-and-blocker summary.** A table with the columns `Decision`,
293
+ `Shape chosen`, `Owner`, `Blocks approval?`, positioned above the architectural prose. One row per
294
+ decision the design makes. A reviewer who reads only this table knows what is being settled, who
295
+ settled it, and what stands between the design and approval.
296
+ - **`specs.md` §1 — families.** The index carries a `Family` column, and the detail beneath is
297
+ grouped under `#### Family: <name>` headings, with contracts ordered within a family and families
298
+ ordered as the index lists them. Each contract carries a `#### IC-###: <summary>` heading, which
299
+ is the heading detail-entry form of §1 and counts as that contract's detail entry because its ID
300
+ appears in the index.
301
+ - **`data-model.md` §1 — a domain map, then bounded views.** The section opens with a conceptual domain
302
+ map: a Mermaid `flowchart` naming the entities and the relationships between them, with **no
303
+ attributes**, so the shape of the domain is legible before any field name. Beneath it comes one
304
+ `#### ER view: <subdomain>` per bounded subdomain, each a Mermaid `erDiagram` carrying the
305
+ attributes, keys and cardinalities of that subdomain alone. The table catalog of entities, keys,
306
+ indexes and ORM file references is unchanged and stays below the views. Splitting one diagram into
307
+ views must not drop an entity, a key or a constraint the single diagram carried.
308
+
309
+ ### The `N/A: [why]` escape
310
+
311
+ Any of the three may be replaced by a line matching `^N/A: .+` stating why it does not apply — a
312
+ feature too small to have decisions worth tabling, a specs document with one contract family, a
313
+ domain with no persisted entity. A section left empty with no such line is a violation of this
314
+ convention, because silence cannot be told apart from an oversight.
315
+
316
+ This is the same escape §4 already uses for a skipped C4 level and for the scope-boundary
317
+ flowchart. There is one spelling of it in this document and no second one.
318
+
319
+ ### The component detail shape
320
+
321
+ A `design.md` §3 component detail entry names the component after its ID, then answers four labels
322
+ in this order: `**Responsibility:**`, `**Owns:**`, `**Does not own:**`, `**Contracts:**`. None may
323
+ be dropped or reordered. What a component deliberately does *not* own is the half a reviewer cannot
324
+ reconstruct from the code, which is why it has a label of its own rather than a sentence.
325
+
326
+ The labels are structural, not emphasis — `ARTIFACT_VOICE.md` carves them out of its rule against
327
+ bold-labelled lists on exactly that ground. The entry still begins `- **<ID>:**` so §1's bullet form
328
+ locates it; the labels sit in nested bullets beneath. No other artifact's detail entries take this
329
+ shape.
330
+
331
+ ### Nothing checks this per artifact
332
+
333
+ These are conventions the writing skill follows, not rules the checker runs. `validate-artifacts.sh`
334
+ has no conformance rule family and gains none: §9's account of it is accurate as written, and an
335
+ artifact missing a section named here produces no finding anywhere. The only mechanical enforcement
336
+ lives in DoFlow's own repository, not in yours: a guard there covers the shipped templates and fails
337
+ DoFlow's suite when a template
338
+ loses a section. An artifact hand-edited away from its template is not covered, and knowing that is
339
+ part of using the convention.
340
+
341
+ ## 11. Authoritative marking
342
+
343
+ Where two sections could each be read as defining the same state, rule or outcome, the governing one
344
+ carries, immediately beneath its heading, a blockquote naming what it governs:
345
+
346
+ ```markdown
347
+ > **Authoritative:** this section governs [the state, rule or outcome].
348
+ ```
349
+
350
+ The other section carries a one-line pointer naming the governing section and restates nothing —
351
+ not a summary, not a "briefly". Restating is how the two drift apart, which is the failure the
352
+ callout exists to prevent.
353
+
354
+ Exactly one section may carry the callout for a given subject. Two callouts over the same subject
355
+ is the same ambiguity in a new costume, and neither section then governs.
356
+
357
+ ## 12. Decision register citations
358
+
359
+ > **Authoritative:** this section governs decision citations and compacted History.
360
+
361
+ Applies only where the feature folder holds `decisions/register.json`; without one, nothing here
362
+ applies.
363
+
364
+ - A line that applies a registered decision cites it as a bare `DEC-###`.
365
+ - `plan.md` §3 lists the `DEC-###` decisions the plan rests on and authors no `D#`.
366
+ - A design §1 row ends its `Shape chosen` cell with its `DEC-###`. A §8 row that came from a
367
+ "Decide for me" pick cites its `DEC-###` in `Basis`.
368
+ - A line citing a superseded decision is a `stale` finding unless it also names a later decision in
369
+ that chain, and a cited `DEC-###` absent from the register is an `unknown` finding (§9).
370
+ - Compaction moves History content to `decisions/history/<artifact>.md` and leaves one pointer line,
371
+ `Earlier entries: [decisions/history/<artifact>.md](<relative link>).`, the link relative to the
372
+ artifact's own directory, matching `^Earlier entries: \[decisions/history/[a-z-]+\.md\]`. Index
373
+ rows and tombstones stay.
@@ -0,0 +1,104 @@
1
+ # Artifact Voice — prose rules for chain artifacts
2
+
3
+ How a chain artifact reads, sentence by sentence. Structure lives in `ARTIFACT_FORMAT.md`; this file
4
+ covers only the writing. Read on demand by `do-brainstorm`, `do-design` and `do-plan` when
5
+ filling a template, and never loaded into a session by default.
6
+
7
+ ## 1. The rules
8
+
9
+ Three minimums apply to every artifact before any category below. One bullet carries one claim, so a
10
+ reader can accept or reject it on its own. A `**Detail**` entry is written in complete sentences,
11
+ because a reviewer has to read it as an explanation. Bracket placeholders are filled in or deleted,
12
+ never stacked where a sentence belongs.
13
+
14
+ ### Content patterns
15
+
16
+ - **Inflated claims.** "Stands as", "a pivotal moment". State what the thing does.
17
+ - **Name-dropping as proof.** Naming a company, paper or person to borrow weight. Say what they did
18
+ and why it bears on this, or drop the name.
19
+ - **Shallow `-ing` phrases.** "Highlighting", "underscoring", "ensuring" tacked onto a clause to
20
+ make a plain fact sound deeper. Cut the phrase; the fact survives.
21
+ - **Sales language.** "Boasts", "vibrant", "rich", "seamless", "robust". An artifact serves a maintainer, not a
22
+ buyer.
23
+ - **Vague sourcing.** "Industry reports", "experts argue", "several sources". Name the source, or own
24
+ the claim.
25
+ - **Formulaic "challenges and outlook" sections.** A closing block of abstract difficulties and
26
+ predictions. A real risk belongs in the risks index with a disposition.
27
+
28
+ ### Language and grammar
29
+
30
+ - **Overused words.** actually, additionally, crucial, delve, enhance, fostering, highlight,
31
+ interplay, intricate, key, landscape, pivotal, showcase, tapestry, testament, underscore,
32
+ valuable, vibrant. Use a plainer word or none.
33
+ - **Avoiding "is" and "are".** "Serves as", "stands as", "represents", "features" are almost always
34
+ a longer way to write "is". Write "is".
35
+ - **"Not X but Y".** The construction spends a clause on something you are not claiming. Write Y.
36
+ - **Forced groups of three.** Three items because three sounds complete. List what there is.
37
+ - **Synonym cycling and repeated openings.** Calling one thing by three names costs the reader a
38
+ lookup each time; name it the same way every time. Three consecutive sentences opening on the same
39
+ word read as a template.
40
+ - **False "from X to Y" ranges.** "From configuration to deployment" only works when X and Y are the
41
+ ends of a real span. Otherwise it is two examples wearing a range.
42
+ - **Passive voice with a clear actor.** "The template is filled" hides who fills it. Name the actor
43
+ when there is one.
44
+
45
+ ### Filler and hedging
46
+
47
+ - **Long forms of short words.** "In order to" is "to". "Due to the fact that" is "because".
48
+ - **Stacked qualifiers.** "Could potentially possibly" hedges once and then twice more. Pick the one
49
+ qualifier that is true.
50
+ - **Generic positive endings.** A closing sentence that praises what was just described adds nothing.
51
+ - **Announcing the next point.** "Let's dive in", "first, some background". Make the point instead of introducing it.
52
+ - **Fake candour.** "Honestly", "look", "here's the thing". These signal a confidence the sentence
53
+ has not earned.
54
+ - **Objections nobody raised.** Answering a question nobody asked, or rejecting an alternative
55
+ nobody proposed, to look even-handed.
56
+ - **Restating the heading.** A section whose first sentence repeats its own heading has spent a
57
+ sentence on nothing.
58
+ - **Forced punchlines and dramatic fragments.** A one-line paragraph for effect.
59
+
60
+ ### Dead context
61
+
62
+ - **A status section states what is true now.** Status lines, ledger summaries, blockers and next
63
+ actions are rewritten in place: when a fact stops being true, replace or delete it in the same
64
+ edit. No appended history and no "was", "previously" or "no longer" narrative; history lives in
65
+ `git log`, the decision register's superseded records and `plan.md`'s History.
66
+ - **Resolved and finished things leave the page.** A cleared blocker, a finished phase's narration,
67
+ a rejected option nobody still needs and a note about a tool that has since changed are deleted,
68
+ not struck through or kept "for context".
69
+ - **One home per fact.** A fact lives in one artifact; others cite it by id or path instead of
70
+ restating it. Copying a decision's text, a task's description or another file's list creates a
71
+ second version that goes stale.
72
+ - **Hand-backs report results.** An agent's report holds outcomes, evidence locators, deviations and
73
+ open questions; it does not restate the brief, narrate steps or repeat what a command printed.
74
+
75
+ ### Style
76
+
77
+ - **Sentence case headings**, not Title Case.
78
+ - **No decorative emoji.**
79
+ - **Straight quotes**, not typographic ones.
80
+ - **Bold for a functional reason only**: a structural label the format defines, or a term being
81
+ defined.
82
+ - **No em or en dashes.** A comma, a colon or a full stop does the work, except where §2 carves the
83
+ rule out.
84
+
85
+ ## 2. Carve-outs
86
+
87
+ **Precedence:** a construct the checker parses governs over a prose rule that would rewrite it; a
88
+ prose rule applies in full to free prose.
89
+
90
+ | Prose rule | Conflicting construct | Which governs |
91
+ |---|---|---|
92
+ | Bold for a functional reason only | The `- **<ID>:**` detail-entry shape the checker locates entries by | The detail shape governs. The bold is a structural label, not emphasis. |
93
+ | Bold for a functional reason only | The `Responsibility` / `Owns` / `Does not own` / `Contracts` labels of a `design.md` §3 component entry | The labelled shape governs. `ARTIFACT_FORMAT.md` §10 declares these four labels and their order. |
94
+ | No em or en dashes | The literal `None — initial version.` that `ARTIFACT_FORMAT.md` §3 requires a new artifact to write | The literal governs. Write the em dash. |
95
+ | Sentence case headings | Every `##` section heading in the four chain-artifact templates, which `ARTIFACT_FORMAT.md` names by their exact words and `validate-artifacts.sh` locates History by | The template headings govern. Do not re-case a heading in a chain artifact. |
96
+ | Sentence case headings | The `#### <ID>: <text>` heading form of a detail entry, §1's second grammar | The heading governs. Its ID is matched literally against an index row, so its case is not free. |
97
+
98
+ Everything a carve-out protects is the marked construct itself. The prose that follows it on the
99
+ same line is free prose, and every rule in §1 applies there.
100
+
101
+ Two constructs need no carve-out because no §1 rule reaches them; a prose pass still leaves them
102
+ alone. The `- [ ]` task markers `do-execute-plan` parses carry no bold and
103
+ no heading case; rewriting one breaks execution. The arrow in `Superseded → <ref>` is not a dash,
104
+ but the checker matches it literally, so a prose pass that "tidies" it breaks it.
@@ -0,0 +1,47 @@
1
+ # Base Constitution (tier-1)
2
+
3
+ **Version:** 1.0.0 · **Scope:** all repos using the doflow chain
4
+
5
+ > The universal, non-negotiable rules every feature inherits. This is the **tier-1 base**;
6
+ > each repo's `agent-docs/constitution.md` (tier-2) overlays it and **takes precedence on
7
+ > conflict**. `do-paths.sh` locates both tiers and reports whether tier-2 exists; the overlay
8
+ > itself is performed by the chain skill reading both files, and `/do-plan`'s Constitution Check
9
+ > records an **advisory** verdict. See `DOFLOW_CHAIN.md` → "Two-tier constitution" for what is
10
+ > computed and what is convention.
11
+
12
+ ## Principles
13
+
14
+ Each states the norm; the arrow points at the always-loaded rule that carries the detail.
15
+
16
+ ### P1 — Safety over speed
17
+ Security, data integrity, and production safety are never traded for velocity; a destructive or
18
+ irreversible action needs explicit confirmation. → `rules/RULE_01_SAFETY.md`.
19
+
20
+ ### P2 — Evidence over assumptions
21
+ A claim is backed by a test, a run, or a document, never guessed; a failure is root-caused before
22
+ it is fixed. → `rules/RULE_01_SAFETY.md`, `PRINCIPLES.md`.
23
+
24
+ ### P3 — Finish what you start
25
+ No TODO stubs, mocks, or "not implemented" throws in delivered code: done means validated, not
26
+ compiling. → `rules/RULE_02_WORKFLOW.md`.
27
+
28
+ ### P4 — Scope discipline (YAGNI)
29
+ Build only what the spec asks — no bonus features, no speculative abstraction.
30
+ → `rules/RULE_02_WORKFLOW.md`.
31
+
32
+ ### P5 — Parallel by default
33
+ Independent work runs concurrently; sequential only for hard dependencies.
34
+ → `rules/RULE_02_WORKFLOW.md`.
35
+
36
+ ### P6 — Professional honesty
37
+ No invented metrics, no marketing language; state "untested / needs validation" plainly and push
38
+ back on a bad approach with evidence. → `rules/RULE_03_QUALITY.md`.
39
+
40
+ ## Governance
41
+ - This base is versioned (semver). Tier-2 repo constitutions may **add** or **override** principles,
42
+ but may not weaken P1 (Safety). *This constraint is stated to the reading agent; nothing
43
+ validates it, so a tier-2 file that weakened P1 would not be rejected by any check.*
44
+ - `/do-plan` MUST evaluate its Constitution Check against both tiers together (tier-2 taking
45
+ precedence) and record PASS/FAIL. The verdict is **advisory** — it is recorded in `plan.md`
46
+ §2 "Constitution Check" and does not block work; the chain's one hard gate covers artifact
47
+ existence only.