mindforge-cc 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/.agent/bin/lib/commands.cjs +959 -0
  2. package/.agent/bin/lib/config.cjs +421 -0
  3. package/.agent/bin/lib/core.cjs +1166 -0
  4. package/.agent/bin/lib/frontmatter.cjs +307 -0
  5. package/.agent/bin/lib/init.cjs +1336 -0
  6. package/.agent/bin/lib/milestone.cjs +252 -0
  7. package/.agent/bin/lib/model-profiles.cjs +68 -0
  8. package/.agent/bin/lib/phase.cjs +888 -0
  9. package/.agent/bin/lib/profile-output.cjs +952 -0
  10. package/.agent/bin/lib/profile-pipeline.cjs +539 -0
  11. package/.agent/bin/lib/roadmap.cjs +329 -0
  12. package/.agent/bin/lib/security.cjs +356 -0
  13. package/.agent/bin/lib/state.cjs +969 -0
  14. package/.agent/bin/lib/template.cjs +222 -0
  15. package/.agent/bin/lib/uat.cjs +189 -0
  16. package/.agent/bin/lib/verify.cjs +851 -0
  17. package/.agent/bin/lib/workstream.cjs +491 -0
  18. package/.agent/bin/mindforge-tools.cjs +897 -0
  19. package/.agent/file-manifest.json +219 -0
  20. package/.agent/hooks/mindforge-check-update.js +114 -0
  21. package/.agent/hooks/mindforge-context-monitor.js +156 -0
  22. package/.agent/hooks/mindforge-prompt-guard.js +96 -0
  23. package/.agent/hooks/mindforge-statusline.js +119 -0
  24. package/.agent/hooks/mindforge-workflow-guard.js +94 -0
  25. package/.agent/mindforge/add-backlog.md +32 -0
  26. package/.agent/mindforge/agent.md +31 -0
  27. package/.agent/mindforge/discuss-phase.md +1 -1
  28. package/.agent/mindforge/do.md +31 -0
  29. package/.agent/mindforge/help.md +1 -1
  30. package/.agent/mindforge/learn.md +3 -2
  31. package/.agent/mindforge/note.md +35 -0
  32. package/.agent/mindforge/plant-seed.md +31 -0
  33. package/.agent/mindforge/research.md +3 -2
  34. package/.agent/mindforge/review-backlog.md +34 -0
  35. package/.agent/mindforge/session-report.md +39 -0
  36. package/.agent/mindforge/steer.md +1 -1
  37. package/.agent/mindforge/ui-phase.md +34 -0
  38. package/.agent/mindforge/ui-review.md +36 -0
  39. package/.agent/mindforge/validate-phase.md +31 -0
  40. package/.agent/mindforge/workstreams.md +35 -0
  41. package/.agent/settings.json +38 -0
  42. package/.agent/skills/mindforge-add-backlog/SKILL.md +72 -0
  43. package/.agent/skills/mindforge-add-phase/SKILL.md +39 -0
  44. package/.agent/skills/mindforge-add-tests/SKILL.md +28 -0
  45. package/.agent/skills/mindforge-add-todo/SKILL.md +42 -0
  46. package/.agent/skills/mindforge-audit-milestone/SKILL.md +29 -0
  47. package/.agent/skills/mindforge-audit-uat/SKILL.md +20 -0
  48. package/.agent/skills/mindforge-autonomous/SKILL.md +33 -0
  49. package/.agent/skills/mindforge-check-todos/SKILL.md +40 -0
  50. package/.agent/skills/mindforge-cleanup/SKILL.md +19 -0
  51. package/.agent/skills/mindforge-complete-milestone/SKILL.md +131 -0
  52. package/.agent/skills/mindforge-debug/SKILL.md +163 -0
  53. package/.agent/skills/mindforge-discuss-phase/SKILL.md +54 -0
  54. package/.agent/skills/mindforge-do/SKILL.md +26 -0
  55. package/.agent/skills/mindforge-execute-phase/SKILL.md +49 -0
  56. package/.agent/skills/mindforge-fast/SKILL.md +23 -0
  57. package/.agent/skills/mindforge-forensics/SKILL.md +49 -0
  58. package/.agent/skills/mindforge-health/SKILL.md +17 -0
  59. package/.agent/skills/mindforge-help/SKILL.md +23 -0
  60. package/.agent/skills/mindforge-insert-phase/SKILL.md +28 -0
  61. package/.agent/skills/mindforge-join-discord/SKILL.md +19 -0
  62. package/.agent/skills/mindforge-list-phase-assumptions/SKILL.md +41 -0
  63. package/.agent/skills/mindforge-list-workspaces/SKILL.md +17 -0
  64. package/.agent/skills/mindforge-manager/SKILL.md +32 -0
  65. package/.agent/skills/mindforge-map-codebase/SKILL.md +64 -0
  66. package/.agent/skills/mindforge-milestone-summary/SKILL.md +44 -0
  67. package/.agent/skills/mindforge-new-milestone/SKILL.md +38 -0
  68. package/.agent/skills/mindforge-new-project/SKILL.md +36 -0
  69. package/.agent/skills/mindforge-new-workspace/SKILL.md +39 -0
  70. package/.agent/skills/mindforge-next/SKILL.md +19 -0
  71. package/.agent/skills/mindforge-note/SKILL.md +29 -0
  72. package/.agent/skills/mindforge-pause-work/SKILL.md +35 -0
  73. package/.agent/skills/mindforge-plan-milestone-gaps/SKILL.md +28 -0
  74. package/.agent/skills/mindforge-plan-phase/SKILL.md +37 -0
  75. package/.agent/skills/mindforge-plant-seed/SKILL.md +22 -0
  76. package/.agent/skills/mindforge-pr-branch/SKILL.md +21 -0
  77. package/.agent/skills/mindforge-profile-user/SKILL.md +38 -0
  78. package/.agent/skills/mindforge-progress/SKILL.md +19 -0
  79. package/.agent/skills/mindforge-quick/SKILL.md +38 -0
  80. package/.agent/skills/mindforge-reapply-patches/SKILL.md +124 -0
  81. package/.agent/skills/mindforge-remove-phase/SKILL.md +26 -0
  82. package/.agent/skills/mindforge-remove-workspace/SKILL.md +22 -0
  83. package/.agent/skills/mindforge-research-phase/SKILL.md +186 -0
  84. package/.agent/skills/mindforge-resume-work/SKILL.md +35 -0
  85. package/.agent/skills/mindforge-review/SKILL.md +31 -0
  86. package/.agent/skills/mindforge-review-backlog/SKILL.md +58 -0
  87. package/.agent/skills/mindforge-session-report/SKILL.md +16 -0
  88. package/.agent/skills/mindforge-set-profile/SKILL.md +9 -0
  89. package/.agent/skills/mindforge-settings/SKILL.md +32 -0
  90. package/.agent/skills/mindforge-ship/SKILL.md +16 -0
  91. package/.agent/skills/mindforge-stats/SKILL.md +16 -0
  92. package/.agent/skills/mindforge-thread/SKILL.md +123 -0
  93. package/.agent/skills/mindforge-ui-phase/SKILL.md +24 -0
  94. package/.agent/skills/mindforge-ui-review/SKILL.md +24 -0
  95. package/.agent/skills/mindforge-update/SKILL.md +35 -0
  96. package/.agent/skills/mindforge-validate-phase/SKILL.md +26 -0
  97. package/.agent/skills/mindforge-verify-work/SKILL.md +30 -0
  98. package/.agent/skills/mindforge-workstreams/SKILL.md +65 -0
  99. package/.agent/workflows/mindforge-add-phase.md +112 -0
  100. package/.agent/workflows/mindforge-add-tests.md +351 -0
  101. package/.agent/workflows/mindforge-add-todo.md +158 -0
  102. package/.agent/workflows/mindforge-audit-milestone.md +332 -0
  103. package/.agent/workflows/mindforge-audit-uat.md +109 -0
  104. package/.agent/workflows/mindforge-autonomous.md +815 -0
  105. package/.agent/workflows/mindforge-check-todos.md +177 -0
  106. package/.agent/workflows/mindforge-cleanup.md +152 -0
  107. package/.agent/workflows/mindforge-complete-milestone.md +766 -0
  108. package/.agent/workflows/mindforge-diagnose-issues.md +220 -0
  109. package/.agent/workflows/mindforge-discovery-phase.md +289 -0
  110. package/.agent/workflows/mindforge-discuss-phase-assumptions.md +645 -0
  111. package/.agent/workflows/mindforge-discuss-phase.md +1047 -0
  112. package/.agent/workflows/mindforge-do.md +104 -0
  113. package/.agent/workflows/mindforge-execute-phase.md +838 -0
  114. package/.agent/workflows/mindforge-execute-plan.md +509 -0
  115. package/.agent/workflows/mindforge-fast.md +105 -0
  116. package/.agent/workflows/mindforge-forensics.md +265 -0
  117. package/.agent/workflows/mindforge-health.md +181 -0
  118. package/.agent/workflows/mindforge-help.md +606 -0
  119. package/.agent/workflows/mindforge-insert-phase.md +130 -0
  120. package/.agent/workflows/mindforge-list-phase-assumptions.md +178 -0
  121. package/.agent/workflows/mindforge-list-workspaces.md +56 -0
  122. package/.agent/workflows/mindforge-manager.md +360 -0
  123. package/.agent/workflows/mindforge-map-codebase.md +370 -0
  124. package/.agent/workflows/mindforge-milestone-summary.md +223 -0
  125. package/.agent/workflows/mindforge-new-milestone.md +469 -0
  126. package/.agent/workflows/mindforge-new-project.md +1226 -0
  127. package/.agent/workflows/mindforge-new-workspace.md +237 -0
  128. package/.agent/workflows/mindforge-next.md +97 -0
  129. package/.agent/workflows/mindforge-node-repair.md +92 -0
  130. package/.agent/workflows/mindforge-note.md +156 -0
  131. package/.agent/workflows/mindforge-pause-work.md +176 -0
  132. package/.agent/workflows/mindforge-plan-milestone-gaps.md +273 -0
  133. package/.agent/workflows/mindforge-plan-phase.md +848 -0
  134. package/.agent/workflows/mindforge-plant-seed.md +169 -0
  135. package/.agent/workflows/mindforge-pr-branch.md +129 -0
  136. package/.agent/workflows/mindforge-profile-user.md +450 -0
  137. package/.agent/workflows/mindforge-progress.md +507 -0
  138. package/.agent/workflows/mindforge-quick.md +732 -0
  139. package/.agent/workflows/mindforge-remove-phase.md +155 -0
  140. package/.agent/workflows/mindforge-remove-workspace.md +90 -0
  141. package/.agent/workflows/mindforge-research-phase.md +74 -0
  142. package/.agent/workflows/mindforge-resume-project.md +325 -0
  143. package/.agent/workflows/mindforge-review.md +228 -0
  144. package/.agent/workflows/mindforge-session-report.md +146 -0
  145. package/.agent/workflows/mindforge-settings.md +283 -0
  146. package/.agent/workflows/mindforge-ship.md +228 -0
  147. package/.agent/workflows/mindforge-stats.md +60 -0
  148. package/.agent/workflows/mindforge-transition.md +671 -0
  149. package/.agent/workflows/mindforge-ui-phase.md +290 -0
  150. package/.agent/workflows/mindforge-ui-review.md +157 -0
  151. package/.agent/workflows/mindforge-update.md +323 -0
  152. package/.agent/workflows/mindforge-validate-phase.md +167 -0
  153. package/.agent/workflows/mindforge-verify-phase.md +254 -0
  154. package/.agent/workflows/mindforge-verify-work.md +623 -0
  155. package/.claude/commands/mindforge/add-backlog.md +32 -0
  156. package/.claude/commands/mindforge/agent.md +31 -0
  157. package/.claude/commands/mindforge/approve.md +27 -15
  158. package/.claude/commands/mindforge/audit.md +30 -26
  159. package/.claude/commands/mindforge/auto.md +29 -18
  160. package/.claude/commands/mindforge/benchmark.md +26 -29
  161. package/.claude/commands/mindforge/browse.md +24 -22
  162. package/.claude/commands/mindforge/complete-milestone.md +28 -14
  163. package/.claude/commands/mindforge/costs.md +26 -9
  164. package/.claude/commands/mindforge/cross-review.md +27 -13
  165. package/.claude/commands/mindforge/dashboard.md +35 -98
  166. package/.claude/commands/mindforge/debug.md +34 -126
  167. package/.claude/commands/mindforge/discuss-phase.md +36 -138
  168. package/.claude/commands/mindforge/do.md +31 -0
  169. package/.claude/commands/mindforge/execute-phase.md +37 -190
  170. package/.claude/commands/mindforge/health.md +27 -17
  171. package/.claude/commands/mindforge/help.md +25 -19
  172. package/.claude/commands/mindforge/init-org.md +37 -131
  173. package/.claude/commands/mindforge/init-project.md +40 -155
  174. package/.claude/commands/mindforge/install-skill.md +32 -15
  175. package/.claude/commands/mindforge/learn.md +36 -142
  176. package/.claude/commands/mindforge/map-codebase.md +36 -298
  177. package/.claude/commands/mindforge/marketplace.md +33 -120
  178. package/.claude/commands/mindforge/metrics.md +29 -18
  179. package/.claude/commands/mindforge/migrate.md +33 -40
  180. package/.claude/commands/mindforge/milestone.md +35 -12
  181. package/.claude/commands/mindforge/new-runtime.md +25 -15
  182. package/.claude/commands/mindforge/next.md +34 -105
  183. package/.claude/commands/mindforge/note.md +35 -0
  184. package/.claude/commands/mindforge/plan-phase.md +34 -125
  185. package/.claude/commands/mindforge/plant-seed.md +31 -0
  186. package/.claude/commands/mindforge/plugins.md +30 -36
  187. package/.claude/commands/mindforge/pr-review.md +32 -41
  188. package/.claude/commands/mindforge/profile-team.md +26 -19
  189. package/.claude/commands/mindforge/publish-skill.md +28 -17
  190. package/.claude/commands/mindforge/qa.md +27 -12
  191. package/.claude/commands/mindforge/quick.md +35 -135
  192. package/.claude/commands/mindforge/release.md +27 -8
  193. package/.claude/commands/mindforge/remember.md +25 -10
  194. package/.claude/commands/mindforge/research.md +27 -9
  195. package/.claude/commands/mindforge/retrospective.md +28 -22
  196. package/.claude/commands/mindforge/review-backlog.md +34 -0
  197. package/.claude/commands/mindforge/review.md +37 -157
  198. package/.claude/commands/mindforge/security-scan.md +34 -233
  199. package/.claude/commands/mindforge/session-report.md +39 -0
  200. package/.claude/commands/mindforge/ship.md +34 -100
  201. package/.claude/commands/mindforge/skills.md +36 -141
  202. package/.claude/commands/mindforge/status.md +30 -104
  203. package/.claude/commands/mindforge/steer.md +25 -10
  204. package/.claude/commands/mindforge/sync-confluence.md +28 -9
  205. package/.claude/commands/mindforge/sync-jira.md +32 -12
  206. package/.claude/commands/mindforge/tokens.md +25 -6
  207. package/.claude/commands/mindforge/ui-phase.md +34 -0
  208. package/.claude/commands/mindforge/ui-review.md +36 -0
  209. package/.claude/commands/mindforge/update.md +33 -42
  210. package/.claude/commands/mindforge/validate-phase.md +31 -0
  211. package/.claude/commands/mindforge/verify-phase.md +30 -62
  212. package/.claude/commands/mindforge/workspace.md +28 -25
  213. package/.claude/commands/mindforge/workstreams.md +35 -0
  214. package/.mindforge/memory/decision-library.jsonl +0 -0
  215. package/.mindforge/memory/knowledge-base.jsonl +7 -0
  216. package/.mindforge/memory/pattern-library.jsonl +1 -0
  217. package/.mindforge/memory/team-preferences.jsonl +4 -0
  218. package/.mindforge/personas/advisor-researcher.md +89 -0
  219. package/.mindforge/personas/analyst.md +112 -52
  220. package/.mindforge/personas/architect.md +100 -67
  221. package/.mindforge/personas/assumptions-analyzer-extend.md +87 -0
  222. package/.mindforge/personas/assumptions-analyzer.md +109 -0
  223. package/.mindforge/personas/codebase-mapper-extend.md +93 -0
  224. package/.mindforge/personas/codebase-mapper.md +770 -0
  225. package/.mindforge/personas/coverage-specialist.md +104 -0
  226. package/.mindforge/personas/debug-specialist.md +118 -52
  227. package/.mindforge/personas/debugger.md +97 -0
  228. package/.mindforge/personas/decision-architect.md +102 -0
  229. package/.mindforge/personas/developer.md +97 -85
  230. package/.mindforge/personas/executor.md +88 -0
  231. package/.mindforge/personas/integration-checker.md +92 -0
  232. package/.mindforge/personas/nyquist-auditor.md +84 -0
  233. package/.mindforge/personas/phase-researcher.md +107 -0
  234. package/.mindforge/personas/plan-checker.md +92 -0
  235. package/.mindforge/personas/planner.md +105 -0
  236. package/.mindforge/personas/project-researcher.md +99 -0
  237. package/.mindforge/personas/qa-engineer.md +113 -61
  238. package/.mindforge/personas/release-manager.md +102 -64
  239. package/.mindforge/personas/research-agent.md +109 -24
  240. package/.mindforge/personas/research-synthesizer.md +101 -0
  241. package/.mindforge/personas/roadmapper-extend.md +100 -0
  242. package/.mindforge/personas/roadmapper.md +103 -0
  243. package/.mindforge/personas/security-reviewer.md +114 -91
  244. package/.mindforge/personas/tech-writer.md +118 -51
  245. package/.mindforge/personas/ui-auditor.md +94 -0
  246. package/.mindforge/personas/ui-checker.md +89 -0
  247. package/.mindforge/personas/ui-researcher.md +99 -0
  248. package/.mindforge/personas/user-profiler.md +93 -0
  249. package/.mindforge/personas/verifier.md +101 -0
  250. package/.planning/ROADMAP.md +10 -0
  251. package/.planning/browser-daemon.log +32 -0
  252. package/.planning/phases/01-migrate-gsd-to-mindforge/.gitkeep +0 -0
  253. package/CHANGELOG.md +41 -0
  254. package/MINDFORGE.md +2 -0
  255. package/README.md +40 -3
  256. package/bin/installer-core.js +3 -4
  257. package/docs/PERSONAS.md +611 -0
  258. package/docs/commands-reference.md +1 -0
  259. package/docs/{Context → context}/Master-Context.md +6 -13
  260. package/docs/references/checkpoints.md +778 -0
  261. package/docs/{reference → references}/commands.md +53 -43
  262. package/docs/references/continuation-format.md +249 -0
  263. package/docs/references/decimal-phase-calculation.md +64 -0
  264. package/docs/references/git-integration.md +295 -0
  265. package/docs/references/git-planning-commit.md +38 -0
  266. package/docs/references/model-profile-resolution.md +36 -0
  267. package/docs/references/model-profiles.md +139 -0
  268. package/docs/references/phase-argument-parsing.md +61 -0
  269. package/docs/references/planning-config.md +202 -0
  270. package/docs/references/questioning.md +162 -0
  271. package/docs/references/tdd.md +263 -0
  272. package/docs/references/ui-brand.md +160 -0
  273. package/docs/references/user-profiling.md +681 -0
  274. package/docs/references/verification-patterns.md +612 -0
  275. package/docs/references/workstream-flag.md +58 -0
  276. package/docs/skills-authoring-guide.md +1 -1
  277. package/docs/templates/Agents/CLAUDE-MD.md +122 -0
  278. package/docs/templates/Agents/COPILOT-INSTRUCTIONS.md +7 -0
  279. package/docs/templates/Agents/DEBUGGER-PROMPT.md +91 -0
  280. package/docs/templates/Agents/PLANNER-PROMPT.md +117 -0
  281. package/docs/templates/Execution/CONTINUE-HERE.md +78 -0
  282. package/docs/templates/Execution/DISCUSSION-LOG.md +63 -0
  283. package/docs/templates/Execution/PHASE-PROMPT.md +610 -0
  284. package/docs/templates/Execution/STATE.md +176 -0
  285. package/docs/templates/Execution/SUMMARY-COMPLEX.md +59 -0
  286. package/docs/templates/Execution/SUMMARY-MINIMAL.md +41 -0
  287. package/docs/templates/Execution/SUMMARY-STANDARD.md +48 -0
  288. package/docs/templates/Execution/SUMMARY.md +248 -0
  289. package/docs/templates/Profile/DEV-PREFERENCES.md +21 -0
  290. package/docs/templates/Profile/USER-PROFILE.md +146 -0
  291. package/docs/templates/Profile/USER-SETUP.md +311 -0
  292. package/docs/templates/Project/DISCOVERY.md +146 -0
  293. package/docs/templates/Project/MILESTONE-ARCHIVE.md +123 -0
  294. package/docs/templates/Project/MILESTONE.md +115 -0
  295. package/docs/templates/Project/PROJECT.md +206 -0
  296. package/docs/templates/Project/REQUIREMENTS.md +231 -0
  297. package/docs/templates/Project/RETROSPECTIVE.md +54 -0
  298. package/docs/templates/Project/ROADMAP.md +202 -0
  299. package/docs/templates/Quality/DEBUG.md +164 -0
  300. package/docs/templates/Quality/UAT.md +280 -0
  301. package/docs/templates/Quality/UI-SPEC.md +100 -0
  302. package/docs/templates/Quality/VALIDATION.md +76 -0
  303. package/docs/templates/Quality/VERIFICATION-REPORT.md +322 -0
  304. package/docs/templates/System/CONFIG.json +43 -0
  305. package/docs/templates/System/CONTEXT.md +352 -0
  306. package/docs/templates/codebase/architecture.md +255 -0
  307. package/docs/templates/codebase/concerns.md +310 -0
  308. package/docs/templates/codebase/conventions.md +307 -0
  309. package/docs/templates/codebase/integrations.md +280 -0
  310. package/docs/templates/codebase/stack.md +186 -0
  311. package/docs/templates/codebase/structure.md +285 -0
  312. package/docs/templates/codebase/testing.md +480 -0
  313. package/docs/templates/research/ARCHITECTURE.md +204 -0
  314. package/docs/templates/research/FEATURES.md +147 -0
  315. package/docs/templates/research/PITFALLS.md +200 -0
  316. package/docs/templates/research/STACK.md +120 -0
  317. package/docs/templates/research/SUMMARY.md +170 -0
  318. package/docs/user-guide.md +1 -1
  319. package/package.json +7 -2
  320. /package/docs/{reference → references}/audit-events.md +0 -0
  321. /package/docs/{reference → references}/config-reference.md +0 -0
  322. /package/docs/{reference → references}/sdk-api.md +0 -0
  323. /package/docs/{reference → references}/skills-api.md +0 -0
@@ -0,0 +1,202 @@
1
+ <planning_config>
2
+
3
+ Configuration options for `.planning/` directory behavior.
4
+
5
+ <config_schema>
6
+ ```json
7
+ "planning": {
8
+ "commit_docs": true,
9
+ "search_gitignored": false
10
+ },
11
+ "git": {
12
+ "branching_strategy": "none",
13
+ "phase_branch_template": "mindforge/phase-{phase}-{slug}",
14
+ "milestone_branch_template": "mindforge/{milestone}-{slug}",
15
+ "quick_branch_template": null
16
+ }
17
+ ```
18
+
19
+ | Option | Default | Description |
20
+ |--------|---------|-------------|
21
+ | `commit_docs` | `true` | Whether to commit planning artifacts to git |
22
+ | `search_gitignored` | `false` | Add `--no-ignore` to broad rg searches |
23
+ | `git.branching_strategy` | `"none"` | Git branching approach: `"none"`, `"phase"`, or `"milestone"` |
24
+ | `git.phase_branch_template` | `"mindforge/phase-{phase}-{slug}"` | Branch template for phase strategy |
25
+ | `git.milestone_branch_template` | `"mindforge/{milestone}-{slug}"` | Branch template for milestone strategy |
26
+ | `git.quick_branch_template` | `null` | Optional branch template for quick-task runs |
27
+ </config_schema>
28
+
29
+ <commit_docs_behavior>
30
+
31
+ **When `commit_docs: true` (default):**
32
+ - Planning files committed normally
33
+ - SUMMARY.md, STATE.md, ROADMAP.md tracked in git
34
+ - Full history of planning decisions preserved
35
+
36
+ **When `commit_docs: false`:**
37
+ - Skip all `git add`/`git commit` for `.planning/` files
38
+ - User must add `.planning/` to `.gitignore`
39
+ - Useful for: OSS contributions, client projects, keeping planning private
40
+
41
+ **Using mindforge-tools.cjs (preferred):**
42
+
43
+ ```bash
44
+ # Commit with automatic commit_docs + gitignore checks:
45
+ node ".agent/mindforge/bin/mindforge-tools.cjs" commit "docs: update state" --files .planning/STATE.md
46
+
47
+ # Load config via state load (returns JSON):
48
+ INIT=$(node ".agent/mindforge/bin/mindforge-tools.cjs" state load)
49
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
50
+ # commit_docs is available in the JSON output
51
+
52
+ # Or use init commands which include commit_docs:
53
+ INIT=$(node ".agent/mindforge/bin/mindforge-tools.cjs" init execute-phase "1")
54
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
55
+ # commit_docs is included in all init command outputs
56
+ ```
57
+
58
+ **Auto-detection:** If `.planning/` is gitignored, `commit_docs` is automatically `false` regardless of config.json. This prevents git errors when users have `.planning/` in `.gitignore`.
59
+
60
+ **Commit via CLI (handles checks automatically):**
61
+
62
+ ```bash
63
+ node ".agent/mindforge/bin/mindforge-tools.cjs" commit "docs: update state" --files .planning/STATE.md
64
+ ```
65
+
66
+ The CLI checks `commit_docs` config and gitignore status internally — no manual conditionals needed.
67
+
68
+ </commit_docs_behavior>
69
+
70
+ <search_behavior>
71
+
72
+ **When `search_gitignored: false` (default):**
73
+ - Standard rg behavior (respects .gitignore)
74
+ - Direct path searches work: `rg "pattern" .planning/` finds files
75
+ - Broad searches skip gitignored: `rg "pattern"` skips `.planning/`
76
+
77
+ **When `search_gitignored: true`:**
78
+ - Add `--no-ignore` to broad rg searches that should include `.planning/`
79
+ - Only needed when searching entire repo and expecting `.planning/` matches
80
+
81
+ **Note:** Most MindForge operations use direct file reads or explicit paths, which work regardless of gitignore status.
82
+
83
+ </search_behavior>
84
+
85
+ <setup_uncommitted_mode>
86
+
87
+ To use uncommitted mode:
88
+
89
+ 1. **Set config:**
90
+ ```json
91
+ "planning": {
92
+ "commit_docs": false,
93
+ "search_gitignored": true
94
+ }
95
+ ```
96
+
97
+ 2. **Add to .gitignore:**
98
+ ```
99
+ .planning/
100
+ ```
101
+
102
+ 3. **Existing tracked files:** If `.planning/` was previously tracked:
103
+ ```bash
104
+ git rm -r --cached .planning/
105
+ git commit -m "chore: stop tracking planning docs"
106
+ ```
107
+
108
+ 4. **Branch merges:** When using `branching_strategy: phase` or `milestone`, the `complete-milestone` workflow automatically strips `.planning/` files from staging before merge commits when `commit_docs: false`.
109
+
110
+ </setup_uncommitted_mode>
111
+
112
+ <branching_strategy_behavior>
113
+
114
+ **Branching Strategies:**
115
+
116
+ | Strategy | When branch created | Branch scope | Merge point |
117
+ |----------|---------------------|--------------|-------------|
118
+ | `none` | Never | N/A | N/A |
119
+ | `phase` | At `execute-phase` start | Single phase | User merges after phase |
120
+ | `milestone` | At first `execute-phase` of milestone | Entire milestone | At `complete-milestone` |
121
+
122
+ **When `git.branching_strategy: "none"` (default):**
123
+ - All work commits to current branch
124
+ - Standard MindForge behavior
125
+
126
+ **When `git.branching_strategy: "phase"`:**
127
+ - `execute-phase` creates/switches to a branch before execution
128
+ - Branch name from `phase_branch_template` (e.g., `mindforge/phase-03-authentication`)
129
+ - All plan commits go to that branch
130
+ - User merges branches manually after phase completion
131
+ - `complete-milestone` offers to merge all phase branches
132
+
133
+ **When `git.branching_strategy: "milestone"`:**
134
+ - First `execute-phase` of milestone creates the milestone branch
135
+ - Branch name from `milestone_branch_template` (e.g., `mindforge/v1.0-mvp`)
136
+ - All phases in milestone commit to same branch
137
+ - `complete-milestone` offers to merge milestone branch to main
138
+
139
+ **Template variables:**
140
+
141
+ | Variable | Available in | Description |
142
+ |----------|--------------|-------------|
143
+ | `{phase}` | phase_branch_template | Zero-padded phase number (e.g., "03") |
144
+ | `{slug}` | Both | Lowercase, hyphenated name |
145
+ | `{milestone}` | milestone_branch_template | Milestone version (e.g., "v1.0") |
146
+
147
+ **Checking the config:**
148
+
149
+ Use `init execute-phase` which returns all config as JSON:
150
+ ```bash
151
+ INIT=$(node ".agent/mindforge/bin/mindforge-tools.cjs" init execute-phase "1")
152
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
153
+ # JSON output includes: branching_strategy, phase_branch_template, milestone_branch_template
154
+ ```
155
+
156
+ Or use `state load` for the config values:
157
+ ```bash
158
+ INIT=$(node ".agent/mindforge/bin/mindforge-tools.cjs" state load)
159
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
160
+ # Parse branching_strategy, phase_branch_template, milestone_branch_template from JSON
161
+ ```
162
+
163
+ **Branch creation:**
164
+
165
+ ```bash
166
+ # For phase strategy
167
+ if [ "$BRANCHING_STRATEGY" = "phase" ]; then
168
+ PHASE_SLUG=$(echo "$PHASE_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
169
+ BRANCH_NAME=$(echo "$PHASE_BRANCH_TEMPLATE" | sed "s/{phase}/$PADDED_PHASE/g" | sed "s/{slug}/$PHASE_SLUG/g")
170
+ git checkout -b "$BRANCH_NAME" 2>/dev/null || git checkout "$BRANCH_NAME"
171
+ fi
172
+
173
+ # For milestone strategy
174
+ if [ "$BRANCHING_STRATEGY" = "milestone" ]; then
175
+ MILESTONE_SLUG=$(echo "$MILESTONE_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
176
+ BRANCH_NAME=$(echo "$MILESTONE_BRANCH_TEMPLATE" | sed "s/{milestone}/$MILESTONE_VERSION/g" | sed "s/{slug}/$MILESTONE_SLUG/g")
177
+ git checkout -b "$BRANCH_NAME" 2>/dev/null || git checkout "$BRANCH_NAME"
178
+ fi
179
+ ```
180
+
181
+ **Merge options at complete-milestone:**
182
+
183
+ | Option | Git command | Result |
184
+ |--------|-------------|--------|
185
+ | Squash merge (recommended) | `git merge --squash` | Single clean commit per branch |
186
+ | Merge with history | `git merge --no-ff` | Preserves all individual commits |
187
+ | Delete without merging | `git branch -D` | Discard branch work |
188
+ | Keep branches | (none) | Manual handling later |
189
+
190
+ Squash merge is recommended — keeps main branch history clean while preserving the full development history in the branch (until deleted).
191
+
192
+ **Use cases:**
193
+
194
+ | Strategy | Best for |
195
+ |----------|----------|
196
+ | `none` | Solo development, simple projects |
197
+ | `phase` | Code review per phase, granular rollback, team collaboration |
198
+ | `milestone` | Release branches, staging environments, PR per version |
199
+
200
+ </branching_strategy_behavior>
201
+
202
+ </planning_config>
@@ -0,0 +1,162 @@
1
+ <questioning_guide>
2
+
3
+ Project initialization is dream extraction, not requirements gathering. You're helping the user discover and articulate what they want to build. This isn't a contract negotiation — it's collaborative thinking.
4
+
5
+ <philosophy>
6
+
7
+ **You are a thinking partner, not an interviewer.**
8
+
9
+ The user often has a fuzzy idea. Your job is to help them sharpen it. Ask questions that make them think "oh, I hadn't considered that" or "yes, that's exactly what I mean."
10
+
11
+ Don't interrogate. Collaborate. Don't follow a script. Follow the thread.
12
+
13
+ </philosophy>
14
+
15
+ <the_goal>
16
+
17
+ By the end of questioning, you need enough clarity to write a PROJECT.md that downstream phases can act on:
18
+
19
+ - **Research** needs: what domain to research, what the user already knows, what unknowns exist
20
+ - **Requirements** needs: clear enough vision to scope v1 features
21
+ - **Roadmap** needs: clear enough vision to decompose into phases, what "done" looks like
22
+ - **plan-phase** needs: specific requirements to break into tasks, context for implementation choices
23
+ - **execute-phase** needs: success criteria to verify against, the "why" behind requirements
24
+
25
+ A vague PROJECT.md forces every downstream phase to guess. The cost compounds.
26
+
27
+ </the_goal>
28
+
29
+ <how_to_question>
30
+
31
+ **Start open.** Let them dump their mental model. Don't interrupt with structure.
32
+
33
+ **Follow energy.** Whatever they emphasized, dig into that. What excited them? What problem sparked this?
34
+
35
+ **Challenge vagueness.** Never accept fuzzy answers. "Good" means what? "Users" means who? "Simple" means how?
36
+
37
+ **Make the abstract concrete.** "Walk me through using this." "What does that actually look like?"
38
+
39
+ **Clarify ambiguity.** "When you say Z, do you mean A or B?" "You mentioned X — tell me more."
40
+
41
+ **Know when to stop.** When you understand what they want, why they want it, who it's for, and what done looks like — offer to proceed.
42
+
43
+ </how_to_question>
44
+
45
+ <question_types>
46
+
47
+ Use these as inspiration, not a checklist. Pick what's relevant to the thread.
48
+
49
+ **Motivation — why this exists:**
50
+ - "What prompted this?"
51
+ - "What are you doing today that this replaces?"
52
+ - "What would you do if this existed?"
53
+
54
+ **Concreteness — what it actually is:**
55
+ - "Walk me through using this"
56
+ - "You said X — what does that actually look like?"
57
+ - "Give me an example"
58
+
59
+ **Clarification — what they mean:**
60
+ - "When you say Z, do you mean A or B?"
61
+ - "You mentioned X — tell me more about that"
62
+
63
+ **Success — how you'll know it's working:**
64
+ - "How will you know this is working?"
65
+ - "What does done look like?"
66
+
67
+ </question_types>
68
+
69
+ <using_askuserquestion>
70
+
71
+ Use AskUserQuestion to help users think by presenting concrete options to react to.
72
+
73
+ **Good options:**
74
+ - Interpretations of what they might mean
75
+ - Specific examples to confirm or deny
76
+ - Concrete choices that reveal priorities
77
+
78
+ **Bad options:**
79
+ - Generic categories ("Technical", "Business", "Other")
80
+ - Leading options that presume an answer
81
+ - Too many options (2-4 is ideal)
82
+ - Headers longer than 12 characters (hard limit — validation will reject them)
83
+
84
+ **Example — vague answer:**
85
+ User says "it should be fast"
86
+
87
+ - header: "Fast"
88
+ - question: "Fast how?"
89
+ - options: ["Sub-second response", "Handles large datasets", "Quick to build", "Let me explain"]
90
+
91
+ **Example — following a thread:**
92
+ User mentions "frustrated with current tools"
93
+
94
+ - header: "Frustration"
95
+ - question: "What specifically frustrates you?"
96
+ - options: ["Too many clicks", "Missing features", "Unreliable", "Let me explain"]
97
+
98
+ **Tip for users — modifying an option:**
99
+ Users who want a slightly modified version of an option can select "Other" and reference the option by number: `#1 but for finger joints only` or `#2 with pagination disabled`. This avoids retyping the full option text.
100
+
101
+ </using_askuserquestion>
102
+
103
+ <freeform_rule>
104
+
105
+ **When the user wants to explain freely, STOP using AskUserQuestion.**
106
+
107
+ If a user selects "Other" and their response signals they want to describe something in their own words (e.g., "let me describe it", "I'll explain", "something else", or any open-ended reply that isn't choosing/modifying an existing option), you MUST:
108
+
109
+ 1. **Ask your follow-up as plain text** — NOT via AskUserQuestion
110
+ 2. **Wait for them to type at the normal prompt**
111
+ 3. **Resume AskUserQuestion** only after processing their freeform response
112
+
113
+ The same applies if YOU include a freeform-indicating option (like "Let me explain" or "Describe in detail") and the user selects it.
114
+
115
+ **Wrong:** User says "let me describe it" → AskUserQuestion("What feature?", ["Feature A", "Feature B", "Describe in detail"])
116
+ **Right:** User says "let me describe it" → "Go ahead — what are you thinking?"
117
+
118
+ </freeform_rule>
119
+
120
+ <context_checklist>
121
+
122
+ Use this as a **background checklist**, not a conversation structure. Check these mentally as you go. If gaps remain, weave questions naturally.
123
+
124
+ - [ ] What they're building (concrete enough to explain to a stranger)
125
+ - [ ] Why it needs to exist (the problem or desire driving it)
126
+ - [ ] Who it's for (even if just themselves)
127
+ - [ ] What "done" looks like (observable outcomes)
128
+
129
+ Four things. If they volunteer more, capture it.
130
+
131
+ </context_checklist>
132
+
133
+ <decision_gate>
134
+
135
+ When you could write a clear PROJECT.md, offer to proceed:
136
+
137
+ - header: "Ready?"
138
+ - question: "I think I understand what you're after. Ready to create PROJECT.md?"
139
+ - options:
140
+ - "Create PROJECT.md" — Let's move forward
141
+ - "Keep exploring" — I want to share more / ask me more
142
+
143
+ If "Keep exploring" — ask what they want to add or identify gaps and probe naturally.
144
+
145
+ Loop until "Create PROJECT.md" selected.
146
+
147
+ </decision_gate>
148
+
149
+ <anti_patterns>
150
+
151
+ - **Checklist walking** — Going through domains regardless of what they said
152
+ - **Canned questions** — "What's your core value?" "What's out of scope?" regardless of context
153
+ - **Corporate speak** — "What are your success criteria?" "Who are your stakeholders?"
154
+ - **Interrogation** — Firing questions without building on answers
155
+ - **Rushing** — Minimizing questions to get to "the work"
156
+ - **Shallow acceptance** — Taking vague answers without probing
157
+ - **Premature constraints** — Asking about tech stack before understanding the idea
158
+ - **User skills** — NEVER ask about user's technical experience. MindForge builds.
159
+
160
+ </anti_patterns>
161
+
162
+ </questioning_guide>
@@ -0,0 +1,263 @@
1
+ <overview>
2
+ TDD is about design quality, not coverage metrics. The red-green-refactor cycle forces you to think about behavior before implementation, producing cleaner interfaces and more testable code.
3
+
4
+ **Principle:** If you can describe the behavior as `expect(fn(input)).toBe(output)` before writing `fn`, TDD improves the result.
5
+
6
+ **Key insight:** TDD work is fundamentally heavier than standard tasks—it requires 2-3 execution cycles (RED → GREEN → REFACTOR), each with file reads, test runs, and potential debugging. TDD features get dedicated plans to ensure full context is available throughout the cycle.
7
+ </overview>
8
+
9
+ <when_to_use_tdd>
10
+ ## When TDD Improves Quality
11
+
12
+ **TDD candidates (create a TDD plan):**
13
+ - Business logic with defined inputs/outputs
14
+ - API endpoints with request/response contracts
15
+ - Data transformations, parsing, formatting
16
+ - Validation rules and constraints
17
+ - Algorithms with testable behavior
18
+ - State machines and workflows
19
+ - Utility functions with clear specifications
20
+
21
+ **Skip TDD (use standard plan with `type="auto"` tasks):**
22
+ - UI layout, styling, visual components
23
+ - Configuration changes
24
+ - Glue code connecting existing components
25
+ - One-off scripts and migrations
26
+ - Simple CRUD with no business logic
27
+ - Exploratory prototyping
28
+
29
+ **Heuristic:** Can you write `expect(fn(input)).toBe(output)` before writing `fn`?
30
+ → Yes: Create a TDD plan
31
+ → No: Use standard plan, add tests after if needed
32
+ </when_to_use_tdd>
33
+
34
+ <tdd_plan_structure>
35
+ ## TDD Plan Structure
36
+
37
+ Each TDD plan implements **one feature** through the full RED-GREEN-REFACTOR cycle.
38
+
39
+ ```markdown
40
+ ---
41
+ phase: XX-name
42
+ plan: NN
43
+ type: tdd
44
+ ---
45
+
46
+ <objective>
47
+ [What feature and why]
48
+ Purpose: [Design benefit of TDD for this feature]
49
+ Output: [Working, tested feature]
50
+ </objective>
51
+
52
+ <context>
53
+ @.planning/PROJECT.md
54
+ @.planning/ROADMAP.md
55
+ @relevant/source/files.ts
56
+ </context>
57
+
58
+ <feature>
59
+ <name>[Feature name]</name>
60
+ <files>[source file, test file]</files>
61
+ <behavior>
62
+ [Expected behavior in testable terms]
63
+ Cases: input → expected output
64
+ </behavior>
65
+ <implementation>[How to implement once tests pass]</implementation>
66
+ </feature>
67
+
68
+ <verification>
69
+ [Test command that proves feature works]
70
+ </verification>
71
+
72
+ <success_criteria>
73
+ - Failing test written and committed
74
+ - Implementation passes test
75
+ - Refactor complete (if needed)
76
+ - All 2-3 commits present
77
+ </success_criteria>
78
+
79
+ <output>
80
+ After completion, create SUMMARY.md with:
81
+ - RED: What test was written, why it failed
82
+ - GREEN: What implementation made it pass
83
+ - REFACTOR: What cleanup was done (if any)
84
+ - Commits: List of commits produced
85
+ </output>
86
+ ```
87
+
88
+ **One feature per TDD plan.** If features are trivial enough to batch, they're trivial enough to skip TDD—use a standard plan and add tests after.
89
+ </tdd_plan_structure>
90
+
91
+ <execution_flow>
92
+ ## Red-Green-Refactor Cycle
93
+
94
+ **RED - Write failing test:**
95
+ 1. Create test file following project conventions
96
+ 2. Write test describing expected behavior (from `<behavior>` element)
97
+ 3. Run test - it MUST fail
98
+ 4. If test passes: feature exists or test is wrong. Investigate.
99
+ 5. Commit: `test({phase}-{plan}): add failing test for [feature]`
100
+
101
+ **GREEN - Implement to pass:**
102
+ 1. Write minimal code to make test pass
103
+ 2. No cleverness, no optimization - just make it work
104
+ 3. Run test - it MUST pass
105
+ 4. Commit: `feat({phase}-{plan}): implement [feature]`
106
+
107
+ **REFACTOR (if needed):**
108
+ 1. Clean up implementation if obvious improvements exist
109
+ 2. Run tests - MUST still pass
110
+ 3. Only commit if changes made: `refactor({phase}-{plan}): clean up [feature]`
111
+
112
+ **Result:** Each TDD plan produces 2-3 atomic commits.
113
+ </execution_flow>
114
+
115
+ <test_quality>
116
+ ## Good Tests vs Bad Tests
117
+
118
+ **Test behavior, not implementation:**
119
+ - Good: "returns formatted date string"
120
+ - Bad: "calls formatDate helper with correct params"
121
+ - Tests should survive refactors
122
+
123
+ **One concept per test:**
124
+ - Good: Separate tests for valid input, empty input, malformed input
125
+ - Bad: Single test checking all edge cases with multiple assertions
126
+
127
+ **Descriptive names:**
128
+ - Good: "should reject empty email", "returns null for invalid ID"
129
+ - Bad: "test1", "handles error", "works correctly"
130
+
131
+ **No implementation details:**
132
+ - Good: Test public API, observable behavior
133
+ - Bad: Mock internals, test private methods, assert on internal state
134
+ </test_quality>
135
+
136
+ <framework_setup>
137
+ ## Test Framework Setup (If None Exists)
138
+
139
+ When executing a TDD plan but no test framework is configured, set it up as part of the RED phase:
140
+
141
+ **1. Detect project type:**
142
+ ```bash
143
+ # JavaScript/TypeScript
144
+ if [ -f package.json ]; then echo "node"; fi
145
+
146
+ # Python
147
+ if [ -f requirements.txt ] || [ -f pyproject.toml ]; then echo "python"; fi
148
+
149
+ # Go
150
+ if [ -f go.mod ]; then echo "go"; fi
151
+
152
+ # Rust
153
+ if [ -f Cargo.toml ]; then echo "rust"; fi
154
+ ```
155
+
156
+ **2. Install minimal framework:**
157
+ | Project | Framework | Install |
158
+ |---------|-----------|---------|
159
+ | Node.js | Jest | `npm install -D jest @types/jest ts-jest` |
160
+ | Node.js (Vite) | Vitest | `npm install -D vitest` |
161
+ | Python | pytest | `pip install pytest` |
162
+ | Go | testing | Built-in |
163
+ | Rust | cargo test | Built-in |
164
+
165
+ **3. Create config if needed:**
166
+ - Jest: `jest.config.js` with ts-jest preset
167
+ - Vitest: `vitest.config.ts` with test globals
168
+ - pytest: `pytest.ini` or `pyproject.toml` section
169
+
170
+ **4. Verify setup:**
171
+ ```bash
172
+ # Run empty test suite - should pass with 0 tests
173
+ npm test # Node
174
+ pytest # Python
175
+ go test ./... # Go
176
+ cargo test # Rust
177
+ ```
178
+
179
+ **5. Create first test file:**
180
+ Follow project conventions for test location:
181
+ - `*.test.ts` / `*.spec.ts` next to source
182
+ - `__tests__/` directory
183
+ - `tests/` directory at root
184
+
185
+ Framework setup is a one-time cost included in the first TDD plan's RED phase.
186
+ </framework_setup>
187
+
188
+ <error_handling>
189
+ ## Error Handling
190
+
191
+ **Test doesn't fail in RED phase:**
192
+ - Feature may already exist - investigate
193
+ - Test may be wrong (not testing what you think)
194
+ - Fix before proceeding
195
+
196
+ **Test doesn't pass in GREEN phase:**
197
+ - Debug implementation
198
+ - Don't skip to refactor
199
+ - Keep iterating until green
200
+
201
+ **Tests fail in REFACTOR phase:**
202
+ - Undo refactor
203
+ - Commit was premature
204
+ - Refactor in smaller steps
205
+
206
+ **Unrelated tests break:**
207
+ - Stop and investigate
208
+ - May indicate coupling issue
209
+ - Fix before proceeding
210
+ </error_handling>
211
+
212
+ <commit_pattern>
213
+ ## Commit Pattern for TDD Plans
214
+
215
+ TDD plans produce 2-3 atomic commits (one per phase):
216
+
217
+ ```
218
+ test(08-02): add failing test for email validation
219
+
220
+ - Tests valid email formats accepted
221
+ - Tests invalid formats rejected
222
+ - Tests empty input handling
223
+
224
+ feat(08-02): implement email validation
225
+
226
+ - Regex pattern matches RFC 5322
227
+ - Returns boolean for validity
228
+ - Handles edge cases (empty, null)
229
+
230
+ refactor(08-02): extract regex to constant (optional)
231
+
232
+ - Moved pattern to EMAIL_REGEX constant
233
+ - No behavior changes
234
+ - Tests still pass
235
+ ```
236
+
237
+ **Comparison with standard plans:**
238
+ - Standard plans: 1 commit per task, 2-4 commits per plan
239
+ - TDD plans: 2-3 commits for single feature
240
+
241
+ Both follow same format: `{type}({phase}-{plan}): {description}`
242
+
243
+ **Benefits:**
244
+ - Each commit independently revertable
245
+ - Git bisect works at commit level
246
+ - Clear history showing TDD discipline
247
+ - Consistent with overall commit strategy
248
+ </commit_pattern>
249
+
250
+ <context_budget>
251
+ ## Context Budget
252
+
253
+ TDD plans target **~40% context usage** (lower than standard plans' ~50%).
254
+
255
+ Why lower:
256
+ - RED phase: write test, run test, potentially debug why it didn't fail
257
+ - GREEN phase: implement, run test, potentially iterate on failures
258
+ - REFACTOR phase: modify code, run tests, verify no regressions
259
+
260
+ Each phase involves reading files, running commands, analyzing output. The back-and-forth is inherently heavier than linear task execution.
261
+
262
+ Single feature focus ensures full quality throughout the cycle.
263
+ </context_budget>