forge-workflow 0.0.4 → 0.0.6

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 (248) hide show
  1. package/.claude/commands/dev.md +345 -340
  2. package/.claude/commands/plan.md +566 -521
  3. package/.claude/commands/premerge.md +186 -176
  4. package/.claude/commands/research.md +42 -42
  5. package/.claude/commands/review.md +448 -442
  6. package/.claude/commands/rollback.md +721 -721
  7. package/.claude/commands/ship.md +212 -164
  8. package/.claude/commands/sonarcloud.md +152 -152
  9. package/.claude/commands/status.md +90 -48
  10. package/.claude/commands/validate.md +288 -282
  11. package/.claude/commands/verify.md +269 -221
  12. package/.claude/rules/greptile-review-process.md +285 -285
  13. package/.claude/rules/workflow.md +121 -105
  14. package/.claude/scripts/greptile-resolve.sh +558 -526
  15. package/.claude/scripts/load-env.sh +32 -32
  16. package/.cline/workflows/dev.md +342 -337
  17. package/.cline/workflows/plan.md +563 -518
  18. package/.cline/workflows/premerge.md +183 -173
  19. package/.cline/workflows/research.md +39 -39
  20. package/.cline/workflows/review.md +445 -439
  21. package/.cline/workflows/rollback.md +718 -718
  22. package/.cline/workflows/ship.md +209 -161
  23. package/.cline/workflows/sonarcloud.md +146 -146
  24. package/.cline/workflows/status.md +87 -45
  25. package/.cline/workflows/validate.md +285 -279
  26. package/.cline/workflows/verify.md +266 -218
  27. package/.codex/config.toml +11 -11
  28. package/.codex/skills/dev/SKILL.md +345 -340
  29. package/.codex/skills/plan/SKILL.md +566 -521
  30. package/.codex/skills/premerge/SKILL.md +186 -176
  31. package/.codex/skills/research/SKILL.md +42 -42
  32. package/.codex/skills/review/SKILL.md +448 -442
  33. package/.codex/skills/rollback/SKILL.md +721 -721
  34. package/.codex/skills/ship/SKILL.md +212 -164
  35. package/.codex/skills/sonarcloud/SKILL.md +149 -149
  36. package/.codex/skills/status/SKILL.md +90 -48
  37. package/.codex/skills/validate/SKILL.md +288 -282
  38. package/.codex/skills/verify/SKILL.md +269 -221
  39. package/.cursor/commands/dev.md +342 -337
  40. package/.cursor/commands/plan.md +563 -518
  41. package/.cursor/commands/premerge.md +183 -173
  42. package/.cursor/commands/research.md +39 -39
  43. package/.cursor/commands/review.md +445 -439
  44. package/.cursor/commands/rollback.md +718 -718
  45. package/.cursor/commands/ship.md +209 -161
  46. package/.cursor/commands/sonarcloud.md +146 -146
  47. package/.cursor/commands/status.md +87 -45
  48. package/.cursor/commands/validate.md +285 -279
  49. package/.cursor/commands/verify.md +266 -218
  50. package/.cursor/rules/permissions-guidance.mdc +37 -37
  51. package/.forge/hooks/check-tdd.js +240 -240
  52. package/.github/PLUGIN_TEMPLATE.json +32 -32
  53. package/.github/prompts/dev.prompt.md +347 -342
  54. package/.github/prompts/plan.prompt.md +568 -523
  55. package/.github/prompts/premerge.prompt.md +188 -178
  56. package/.github/prompts/research.prompt.md +44 -44
  57. package/.github/prompts/review.prompt.md +450 -444
  58. package/.github/prompts/rollback.prompt.md +723 -723
  59. package/.github/prompts/ship.prompt.md +214 -166
  60. package/.github/prompts/sonarcloud.prompt.md +151 -151
  61. package/.github/prompts/status.prompt.md +92 -50
  62. package/.github/prompts/validate.prompt.md +290 -284
  63. package/.github/prompts/verify.prompt.md +271 -223
  64. package/.github/workflows/beads-to-github.yml +56 -0
  65. package/.github/workflows/github-to-beads.yml +97 -0
  66. package/.kilocode/workflows/dev.md +346 -341
  67. package/.kilocode/workflows/plan.md +567 -522
  68. package/.kilocode/workflows/premerge.md +187 -177
  69. package/.kilocode/workflows/research.md +43 -43
  70. package/.kilocode/workflows/review.md +449 -443
  71. package/.kilocode/workflows/rollback.md +722 -722
  72. package/.kilocode/workflows/ship.md +213 -165
  73. package/.kilocode/workflows/sonarcloud.md +150 -150
  74. package/.kilocode/workflows/status.md +91 -49
  75. package/.kilocode/workflows/validate.md +289 -283
  76. package/.kilocode/workflows/verify.md +270 -222
  77. package/.mcp.json.example +12 -12
  78. package/.opencode/commands/dev.md +345 -340
  79. package/.opencode/commands/plan.md +566 -521
  80. package/.opencode/commands/premerge.md +186 -176
  81. package/.opencode/commands/research.md +42 -42
  82. package/.opencode/commands/review.md +448 -442
  83. package/.opencode/commands/rollback.md +721 -721
  84. package/.opencode/commands/ship.md +212 -164
  85. package/.opencode/commands/sonarcloud.md +149 -149
  86. package/.opencode/commands/status.md +90 -48
  87. package/.opencode/commands/validate.md +288 -282
  88. package/.opencode/commands/verify.md +269 -221
  89. package/.roo/commands/dev.md +346 -341
  90. package/.roo/commands/plan.md +567 -522
  91. package/.roo/commands/premerge.md +187 -177
  92. package/.roo/commands/research.md +43 -43
  93. package/.roo/commands/review.md +449 -443
  94. package/.roo/commands/rollback.md +722 -722
  95. package/.roo/commands/ship.md +213 -165
  96. package/.roo/commands/sonarcloud.md +150 -150
  97. package/.roo/commands/status.md +91 -49
  98. package/.roo/commands/validate.md +289 -283
  99. package/.roo/commands/verify.md +270 -222
  100. package/AGENTS.md +272 -175
  101. package/CLAUDE.md +110 -100
  102. package/README.md +429 -416
  103. package/bin/forge-cmd.js +317 -313
  104. package/bin/forge-preflight.js +322 -309
  105. package/bin/forge.js +4765 -4303
  106. package/docs/AGENT_INSTALL_PROMPT.md +342 -342
  107. package/docs/BEADS_GITHUB_SYNC.md +251 -251
  108. package/docs/ENHANCED_ONBOARDING.md +612 -602
  109. package/docs/EXAMPLES.md +482 -482
  110. package/docs/GREPTILE_SETUP.md +400 -400
  111. package/docs/MANUAL_REVIEW_GUIDE.md +106 -106
  112. package/docs/ROADMAP.md +359 -359
  113. package/docs/SETUP.md +663 -631
  114. package/docs/TOOLCHAIN.md +653 -630
  115. package/docs/VALIDATION.md +363 -363
  116. package/install.sh +40 -1056
  117. package/lefthook.yml +50 -39
  118. package/lib/agents/README.md +198 -198
  119. package/lib/agents/claude.plugin.json +28 -28
  120. package/lib/agents/cline.plugin.json +22 -22
  121. package/lib/agents/codex.plugin.json +19 -19
  122. package/lib/agents/copilot.plugin.json +24 -24
  123. package/lib/agents/cursor.plugin.json +25 -25
  124. package/lib/agents/kilocode.plugin.json +22 -22
  125. package/lib/agents/opencode.plugin.json +20 -20
  126. package/lib/agents/roo.plugin.json +23 -23
  127. package/lib/agents-config.js +2112 -2112
  128. package/lib/beads-health-check.js +143 -0
  129. package/lib/beads-setup.js +341 -0
  130. package/lib/beads-sync-scaffold.js +260 -0
  131. package/lib/commands/_registry.js +134 -0
  132. package/lib/commands/clean.js +181 -0
  133. package/lib/commands/dev.js +571 -513
  134. package/lib/commands/plan.js +692 -692
  135. package/lib/commands/push.js +196 -0
  136. package/lib/commands/recommend.js +119 -119
  137. package/lib/commands/ship.js +377 -377
  138. package/lib/commands/status.js +378 -378
  139. package/lib/commands/sync.js +55 -0
  140. package/lib/commands/team.js +37 -0
  141. package/lib/commands/test.js +207 -0
  142. package/lib/commands/validate.js +602 -602
  143. package/lib/commands/worktree.js +310 -0
  144. package/lib/context-merge.js +359 -359
  145. package/lib/dep-guard/analyzer.js +294 -294
  146. package/lib/dep-guard/behavior-detector.js +98 -98
  147. package/lib/dep-guard/contract-detector.js +162 -162
  148. package/lib/dep-guard/import-detector.js +498 -498
  149. package/lib/dep-guard/path-utils.js +13 -13
  150. package/lib/dep-guard/rubric.js +120 -120
  151. package/lib/dep-guard/task-parser.js +318 -318
  152. package/lib/detect-agent.js +191 -191
  153. package/lib/detect-worktree.js +47 -47
  154. package/lib/docs-command.js +51 -0
  155. package/lib/docs-copy.js +50 -0
  156. package/lib/file-hash.js +26 -26
  157. package/lib/freshness-token.js +148 -0
  158. package/lib/greptile-match.js +80 -0
  159. package/lib/husky-migration.js +450 -0
  160. package/lib/lefthook-check.js +65 -0
  161. package/lib/pat-setup.js +207 -0
  162. package/lib/plugin-catalog.js +350 -350
  163. package/lib/plugin-manager.js +166 -166
  164. package/lib/plugin-recommender.js +141 -141
  165. package/lib/project-discovery.js +491 -491
  166. package/lib/reset.js +309 -0
  167. package/lib/setup-action-log.js +139 -139
  168. package/lib/setup-summary-renderer.js +106 -106
  169. package/lib/setup-utils.js +96 -0
  170. package/lib/setup.js +192 -192
  171. package/lib/smart-merge.js +64 -0
  172. package/lib/symlink-utils.js +81 -0
  173. package/lib/task-ownership.js +117 -0
  174. package/lib/workflow-profiles.js +197 -197
  175. package/package.json +131 -128
  176. package/scripts/beads-context.sh +426 -0
  177. package/scripts/beads-context.test.js +567 -0
  178. package/scripts/behavioral-judge.sh +378 -0
  179. package/scripts/benchmark.js +85 -0
  180. package/scripts/branch-protection.js +183 -0
  181. package/scripts/check-agents.js +172 -0
  182. package/scripts/check-forge-token.js +98 -0
  183. package/scripts/commitlint.js +42 -0
  184. package/scripts/conflict-detect.sh +323 -0
  185. package/scripts/dep-guard-analyze.js +71 -0
  186. package/scripts/dep-guard.sh +789 -0
  187. package/scripts/eval_win.py +249 -0
  188. package/scripts/file-index.sh +493 -0
  189. package/scripts/forge-team/index.sh +86 -0
  190. package/scripts/forge-team/lib/agent-prompt.sh +52 -0
  191. package/scripts/forge-team/lib/claim.sh +256 -0
  192. package/scripts/forge-team/lib/dashboard.sh +341 -0
  193. package/scripts/forge-team/lib/epic.sh +332 -0
  194. package/scripts/forge-team/lib/hooks.sh +253 -0
  195. package/scripts/forge-team/lib/identity.sh +235 -0
  196. package/scripts/forge-team/lib/sync-github.sh +317 -0
  197. package/scripts/forge-team/lib/verify.sh +284 -0
  198. package/scripts/forge-team/lib/workload.sh +296 -0
  199. package/scripts/forge-team/tests/agent-prompt.test.sh +72 -0
  200. package/scripts/forge-team/tests/claim.test.sh +179 -0
  201. package/scripts/forge-team/tests/dashboard.test.sh +170 -0
  202. package/scripts/forge-team/tests/dispatcher.test.sh +79 -0
  203. package/scripts/forge-team/tests/epic.test.sh +176 -0
  204. package/scripts/forge-team/tests/hooks.test.sh +239 -0
  205. package/scripts/forge-team/tests/identity.test.sh +176 -0
  206. package/scripts/forge-team/tests/integration.test.sh +371 -0
  207. package/scripts/forge-team/tests/sync-github.test.sh +209 -0
  208. package/scripts/forge-team/tests/verify.test.sh +314 -0
  209. package/scripts/forge-team/tests/workflow-integration.test.sh +43 -0
  210. package/scripts/forge-team/tests/workload.test.sh +209 -0
  211. package/scripts/github-beads-sync/comment.mjs +64 -0
  212. package/scripts/github-beads-sync/config.mjs +148 -0
  213. package/scripts/github-beads-sync/github-api.mjs +131 -0
  214. package/scripts/github-beads-sync/index.mjs +332 -0
  215. package/scripts/github-beads-sync/label-mapper.mjs +54 -0
  216. package/scripts/github-beads-sync/mapping.mjs +78 -0
  217. package/scripts/github-beads-sync/reverse-sync-cli.mjs +31 -0
  218. package/scripts/github-beads-sync/reverse-sync.mjs +138 -0
  219. package/scripts/github-beads-sync/run-bd.mjs +159 -0
  220. package/scripts/github-beads-sync/sanitize.mjs +121 -0
  221. package/scripts/github-beads-sync.config.json +26 -0
  222. package/scripts/improve-command.js +375 -0
  223. package/scripts/lib/eval-runner.js +268 -0
  224. package/scripts/lib/eval-schema.js +135 -0
  225. package/scripts/lib/eval-storage.js +78 -0
  226. package/scripts/lib/grading.js +203 -0
  227. package/scripts/lib/jsonl-lock.sh +48 -0
  228. package/scripts/lib/sanitize.sh +116 -0
  229. package/scripts/lib/transcript-parser.js +63 -0
  230. package/scripts/lint.js +47 -0
  231. package/scripts/migrate-to-bun-test.js +412 -0
  232. package/scripts/pr-coordinator.sh +706 -0
  233. package/scripts/run-command-eval.js +236 -0
  234. package/scripts/smart-status.sh +809 -0
  235. package/scripts/sync-commands.js +571 -0
  236. package/scripts/sync-utils.sh +455 -0
  237. package/scripts/test-dashboard.js +123 -0
  238. package/scripts/test.js +46 -0
  239. package/scripts/validate.sh +94 -0
  240. package/skills/parallel-deep-research/SKILL.md +108 -108
  241. package/skills/parallel-deep-research/evals/README.md +27 -27
  242. package/skills/parallel-deep-research/evals/evals.json +62 -62
  243. package/skills/sonarcloud-analysis/SKILL.md +171 -171
  244. package/skills/sonarcloud-analysis/evals/README.md +27 -27
  245. package/skills/sonarcloud-analysis/evals/evals.json +50 -50
  246. package/skills/sonarcloud-analysis/references/api-reference.md +466 -466
  247. package/.cursor/hooks/state/continual-learning-index.json +0 -19
  248. package/.cursor/hooks/state/continual-learning.json +0 -8
@@ -1,523 +1,568 @@
1
- ---
2
- name: plan
3
- description: Design intent → research → branch + worktree + task list
4
- tools: []
5
- ---
6
-
7
- Plan a feature from scratch: brainstorm design intent, research technical approach, then set up branch, worktree, and a complete task list ready for /dev.
8
-
9
- # Plan
10
-
11
- This command runs in **3 phases**. Each phase ends with a HARD-GATE. Do not skip phases.
12
-
13
- ---
14
-
15
- ```
16
- <HARD-GATE: /plan entry — worktree isolation>
17
- Before ANY planning work begins:
18
-
19
- 1. Run: git branch --show-current
20
- 2. If the current branch is NOT master/main:
21
- - STOP. Do not begin Phase 1.
22
- - Tell the user: "You are on '<branch>'. Planning must start from a clean worktree on master.
23
- Run: git checkout master — then re-run /plan."
24
- 3. If on master, create the worktree NOW before asking any questions:
25
- a. bd worktree create .worktrees/<slug> --branch feat/<slug>
26
- b. cd .worktrees/<slug>
27
- 4. Confirm: "Working in isolated worktree: .worktrees/<slug> (branch: feat/<slug>)"
28
- 5. Create the epic issue and record the stage transition:
29
- ```bash
30
- bd create --title="<feature-name>" --type=epic
31
- bd update <id> --status=in_progress
32
- bash scripts/beads-context.sh stage-transition <id> none plan
33
- ```
34
- 6. ONLY THEN begin Phase 1.
35
-
36
- Rationale: Planning commits (design docs, task lists) belong only to this feature's branch.
37
- If planning runs in the main directory on a non-master branch, those commits contaminate
38
- whatever branch is currently checked out. The worktree ensures zero cross-contamination
39
- between parallel features or sessions.
40
- </HARD-GATE>
41
- ```
42
-
43
- ---
44
-
45
- ## Usage
46
-
47
- ```bash
48
- /plan <feature-slug>
49
- /plan <feature-slug> --strategic # Major architecture change: creates design doc PR before Phase 2
50
- /plan <feature-slug> --continue # After --strategic PR is merged: run Phase 2 + 3
51
- ```
52
-
53
- ---
54
-
55
-
56
- ### Multi-developer conflict check (soft block)
57
-
58
- Before proceeding to Phase 1, check for cross-developer conflicts:
59
-
60
- ```bash
61
- # Auto-sync to get latest team state
62
- bash scripts/sync-utils.sh auto-sync
63
-
64
- # Check for conflicts with this issue's planned work area
65
- bash scripts/conflict-detect.sh --issue <beads-id>
66
- ```
67
-
68
- If exit code 2 (validation error): show error message, abort — do not show conflict prompt.
69
-
70
- If exit code 1 (conflicts found):
71
- - Display the conflict output to the developer
72
- - Ask: "Other developers are working in overlapping areas. Proceed anyway? (y/n)"
73
- - If `n`: exit cleanly, no side effects
74
- - If `y`: log override via `bd comments add <id> "Conflict override: proceeding despite overlap with <conflicting-issues>"`, then continue to Phase 1
75
- - Audit: record conflict override per OWASP A09
76
-
77
- If exit code 0: proceed silently to Phase 1.
78
-
79
- ---
80
-
81
- ## Phase 1: Design Intent (Brainstorming)
82
-
83
- **Goal**: Capture WHAT to build — purpose, constraints, success criteria, edge cases, approach.
84
-
85
- ### Step 0: Dependency ripple check (advisory)
86
-
87
- Before exploring context or asking questions, check for potential conflicts with in-flight work:
88
-
89
- ```bash
90
- # If a Beads issue ID is known (e.g., from /status or bd ready):
91
- bash scripts/dep-guard.sh check-ripple <beads-issue-id>
92
-
93
- # If no issue exists yet (first-time plan):
94
- bd list --status=open,in_progress
95
- ```
96
-
97
- Review the output. If overlaps are detected:
98
- - Consider whether the overlapping issue should be a dependency
99
- - Note any shared areas for the design Q&A
100
- - This check is **advisory only** — always proceed to Step 1 regardless of findings
101
-
102
- #### Ripple Analyst Agent (spawned when contract overlaps found)
103
-
104
- When `check-ripple` detects overlapping issues AND contract metadata is available, spawn a Ripple Analyst subagent with this prompt:
105
-
106
- **Input to agent**:
107
- - Current issue's contract changes (from `extract-contracts` output)
108
- - Consumer code snippets (from `find-consumers` output for each changed contract)
109
- - Overlapping issue's title, description, and contract metadata
110
-
111
- **Agent instructions**:
112
- 1. For each overlapping contract, imagine 2-3 concrete break scenarios:
113
- - "If [contract X] changes [specific behavior], then [consumer Y] will [specific failure]"
114
- 2. Rate overall impact as one of:
115
- - **NONE**: No real conflict despite keyword overlap
116
- - **LOW**: Consumers need trivial adjustment (add parameter, rename call)
117
- - **HIGH**: Consumer needs significant rework (parsing logic, data handling changes)
118
- - **CRITICAL**: Consumer is in an active in_progress issue's task list
119
- 3. **When uncertain, default to HIGH** — conservative over permissive
120
- 4. Recommend one action:
121
- - Add dependency (`bd dep add <source> <target>`)
122
- - Coordinate with other issue's developer
123
- - Scope down current feature to avoid overlap
124
- - Proceed as-is (no real conflict)
125
-
126
- **Output format**:
127
- ```
128
- Impact: [NONE|LOW|HIGH|CRITICAL]
129
- Confidence: [high|medium|low]
130
-
131
- Break scenarios:
132
- 1. [scenario description]
133
- 2. [scenario description]
134
-
135
- Recommendation: [action]
136
- Reason: [why this action]
137
- ```
138
-
139
- This agent is advisory only. The developer always makes the final decision.
140
-
141
- ### Step 1: Explore project context
142
-
143
- Before asking any questions, read relevant files:
144
- - Recent commits related to this area
145
- - Existing code in affected modules
146
- - Any related docs, tests, or prior research
147
-
148
- ### Step 2: Ask clarifying questions — one at a time
149
-
150
- Ask each question in sequence. Wait for user response. Use multiple choice where possible.
151
-
152
- Questions to cover (adapt to feature, don't ask mechanical copies):
153
- 1. **Purpose** What problem does this solve? Who benefits?
154
- 2. **Constraints** What must this NOT do? What are the hard limits?
155
- 3. **Success criteria** How will we know it's done? What is the minimum viable result?
156
- 4. **Edge cases** What happens when [key dependency] fails / [input] is missing / [state] is ambiguous?
157
- 5. **Technical preferences** Library A or B? Pattern X or Y? (when real options exist)
158
- 6. **Ambiguity policy** — If a spec gap is found mid-dev, should the agent: (a) make a reasonable choice and document it, or (b) pause and wait for input?
159
-
160
- ### Step 3: Propose approaches
161
-
162
- Propose 2-3 concrete approaches with:
163
- - Trade-offs (speed vs safety, complexity vs flexibility)
164
- - A clear recommendation with reasoning
165
- - Get user approval on the chosen approach
166
-
167
- ### Step 4: Write design doc
168
-
169
- Save to `docs/plans/YYYY-MM-DD-<slug>-design.md` with these sections:
170
- - **Feature**: slug, date, status
171
- - **Purpose**: what problem it solves
172
- - **Success criteria**: measurable, specific
173
- - **Out of scope**: explicit boundaries
174
- - **Approach selected**: which option and why
175
- - **Constraints**: hard limits
176
- - **Edge cases**: decisions made during Q&A
177
- - **Ambiguity policy**: agent's fallback when spec gaps arise mid-dev
178
-
179
- Commit the design doc:
180
- ```bash
181
- git add docs/plans/YYYY-MM-DD-<slug>-design.md
182
- git commit -m "docs: add design doc for <slug>"
183
- ```
184
-
185
- ---
186
-
187
- **--strategic flag** (for major architecture changes):
188
-
189
- After committing the design doc, push to a proposal branch and open PR:
190
- ```bash
191
- git checkout -b feat/<slug>-proposal
192
- git push -u origin feat/<slug>-proposal
193
- gh pr create --title "Design: <feature-name>" \
194
- --body "Design doc for review. See docs/plans/YYYY-MM-DD-<slug>-design.md"
195
- ```
196
-
197
- **STOP here.** Present the PR URL. Wait for the user to merge the proposal PR.
198
- After merge, run `/plan <slug> --continue` to proceed to Phase 2 + 3.
199
-
200
- ---
201
-
202
- ```
203
- <HARD-GATE: Phase 1 exit>
204
- Do NOT begin Phase 2 (web research) until:
205
- 1. User has approved the design in this session
206
- 2. Design doc exists at docs/plans/YYYY-MM-DD-<slug>-design.md
207
- 3. Design doc includes: success criteria, edge cases, out-of-scope, ambiguity policy
208
- 4. Design doc is committed to git
209
- </HARD-GATE>
210
- ```
211
-
212
- ---
213
-
214
- ## Phase 2: Technical Research
215
-
216
- **Goal**: Find HOW to build it — best practices, known issues, security risks, TDD scenarios.
217
-
218
- Record the phase transition before starting research:
219
- ```bash
220
- bash scripts/beads-context.sh stage-transition <id> plan research
221
- ```
222
-
223
- Run these in parallel:
224
-
225
- ### Web research (parallel-deep-research skill)
226
- ```
227
- Skill("parallel-deep-research")
228
- ```
229
- Search for:
230
- - "[tech stack] [feature] best practices [year]"
231
- - "[library/framework] [feature] implementation patterns"
232
- - "Known issues / gotchas with [approach selected]"
233
-
234
- ### OWASP Top 10 analysis
235
-
236
- For this feature's risk surface, document each relevant OWASP category:
237
- - What the risk is
238
- - Whether it applies to this feature
239
- - What mitigation will be implemented
240
-
241
- ### Codebase exploration (Explore agent)
242
- - Similar existing patterns to reuse
243
- - Files this feature will affect
244
- - Existing test infrastructure to leverage
245
-
246
- ### DRY check (mandatory — use actual search tools)
247
-
248
- Before finalizing the approach, run Grep/Glob/Read searches for existing implementations of the planned function or pattern. Do not rely on memory or assumptions — execute the searches.
249
-
250
- ```
251
- Grep(searchTerm) # e.g., the function or concept name
252
- Glob("**/*.js") # narrow to affected file types if needed
253
- Read(matchedFile) # inspect any match in context
254
- ```
255
-
256
- If a match is found:
257
- - Update the design doc's "Approach selected" section to say "extend existing [file/function]" not "create new".
258
- - Note the existing file path and line number in the design doc.
259
-
260
- If no match is found: proceed. The DRY gate is cleared.
261
-
262
- ### Blast-radius search (mandatory for remove/rename/replace features)
263
-
264
- If this feature involves **removing**, **renaming**, or **replacing** a concept, tool, or dependency:
265
-
266
- 1. Grep the ENTIRE codebase for the thing being removed/renamed:
267
- ```
268
- Grep("<thing-being-removed>") # exact name
269
- Grep("<thing-being-removed>", -i) # case-insensitive variant
270
- Glob("**/*<thing>*") # files named after it
271
- ```
272
-
273
- 2. For EVERY match found:
274
- - Note the file path and line number in the design doc
275
- - Add a cleanup task to the task list (Phase 3)
276
- - Flag matches in unexpected packages or config files explicitly
277
-
278
- 3. Common hiding spots to check:
279
- - `package.json` (scripts, dependencies, description)
280
- - `install.sh` / setup scripts
281
- - CI/CD workflows (`.github/workflows/`)
282
- - Agent config files (`lib/agents/`, `.cursorrules`, etc.)
283
- - Documentation (`docs/`, `README.md`, `AGENTS.md`)
284
- - Import statements and require() calls
285
-
286
- If no removal/rename is involved, this section is skipped.
287
-
288
- ### TDD test scenarios
289
-
290
- Identify at minimum 3 test scenarios:
291
- - Happy path
292
- - Error / failure path
293
- - Edge case from Phase 1
294
-
295
- Append all research findings to the design doc under a `## Technical Research` section (not a separate file).
296
-
297
- ---
298
-
299
- ```
300
- <HARD-GATE: Phase 2 exit>
301
- Do NOT begin Phase 3 (setup) until:
302
- 1. OWASP analysis is documented in design doc
303
- 2. At least 3 TDD test scenarios are identified
304
- 3. Approach selection is confirmed (which library/pattern to use)
305
- 4. If feature involves removal/rename: blast-radius search completed, all references added to task list
306
- </HARD-GATE>
307
- ```
308
-
309
- ---
310
-
311
- ## Phase 3: Setup + Task List
312
-
313
- **Goal**: Create branch, worktree, and a complete task list ready for /dev.
314
-
315
- Record the phase transition before starting setup:
316
- ```bash
317
- bash scripts/beads-context.sh stage-transition <id> research setup
318
- ```
319
-
320
- ### Step 1: Link child issues to the epic
321
-
322
- The epic was created in the Entry HARD-GATE (Phase 1 entry). If this feature requires child issues (sub-tasks tracked separately), create them now and link to the epic:
323
-
324
- ```bash
325
- bd create --title="<sub-task-name>" --type=feature --parent=<epic-id>
326
- ```
327
-
328
- ### Step 2: Branch + worktree
329
-
330
- **ALWAYS branch from master, never from the current branch.** If the working directory is on any branch other than master, the new feature branch would inherit all unmerged changes from that branch — contaminating the new feature's history.
331
-
332
- **Note**: If the Entry HARD-GATE already created the branch and worktree (and you are already inside `.worktrees/<slug>`), skip Steps 2b–2d — they are already done.
333
-
334
- ```bash
335
- # Step 2a: Check if branch and worktree were already created by Entry HARD-GATE
336
- CURRENT=$(git branch --show-current)
337
- if [ "$CURRENT" = "feat/<slug>" ]; then
338
- echo "✓ Branch feat/<slug> already exists (Entry HARD-GATE created it) — skipping 2b–2d"
339
- else
340
- # Step 2b: Verify .worktrees/ is gitignored add if missing
341
- git check-ignore -v .worktrees/ || echo ".worktrees/" >> .gitignore
342
-
343
- # Step 2c: Create a Beads-aware worktree rooted on master
344
- git checkout master
345
- bd worktree create .worktrees/<slug> --branch feat/<slug>
346
- cd .worktrees/<slug>
347
- fi
348
- ```
349
-
350
- **Why this matters**: Multiple parallel features or sessions each get their own isolated worktree. Changes to one feature never bleed into another. The main working directory can stay on any branch without affecting new feature branches.
351
-
352
- ### Step 3: Project setup in worktree
353
-
354
- Auto-detect and run install:
355
- ```bash
356
- # e.g., bun install / npm install / pip install -r requirements.txt
357
- ```
358
-
359
- ### Step 4: Baseline test run
360
-
361
- ```bash
362
- # Run full test suite in worktree
363
- bun test # or project test command
364
- ```
365
-
366
- If tests fail: report which tests are failing and ask user whether to investigate or proceed anyway. Do not silently proceed past failing baseline tests.
367
-
368
- ### Step 5: Task list creation
369
-
370
- Read the design doc. Break implementation into granular tasks.
371
-
372
- **Task format** (each task MUST have ALL of these):
373
- ```
374
- Task N: <descriptive title>
375
- File(s): <exact file paths>
376
- What to implement: <complete description — not "add feature X", but what specifically>
377
- TDD steps:
378
- 1. Write test: <test file path, what assertion, what input/output>
379
- 2. Run test: confirm it fails with [specific expected error message]
380
- 3. Implement: <exact function/class/component to write>
381
- 4. Run test: confirm it passes
382
- 5. Commit: `<type>: <message>`
383
- Expected output: <what running the test/code produces when done>
384
- ```
385
-
386
- **Ordering rules**:
387
- - Foundational/shared modules FIRST (types, utils, constants)
388
- - Feature logic SECOND
389
- - Integration/wiring THIRD
390
- - Uncertain/ambiguous tasks LAST (so they can be deferred if blocked)
391
-
392
- **YAGNI filter** (after initial task draft, before saving):
393
-
394
- For each task, confirm it maps to a specific requirement, success criterion, or edge case in the design doc. Run `applyYAGNIFilter({ task, designDoc })` for each task.
395
-
396
- - Tasks that match keep as-is.
397
- - Tasks with no anchor → flagged as "potential scope creep". Present flagged tasks to the user: "These tasks have no anchor in the design doc. Keep (specify which requirement it serves) or remove?"
398
- - If ALL tasks are flagged → return `allFlagged: true` and tell the user: "Design doc doesn't cover all tasks — needs amendment." Do not save the task list until the design doc is updated or tasks are removed.
399
-
400
- **Before finalizing**: flag any tasks that touch areas not fully specified in the design doc. Present flagged tasks to user for quick clarification before saving.
401
-
402
- Save to `docs/plans/YYYY-MM-DD-<slug>-tasks.md`.
403
-
404
- ### Step 5b: Beads context
405
-
406
- After saving the task list, attach design context and acceptance criteria to the Beads issue so downstream stages (`/dev`, `/validate`, `/review`) can retrieve it without re-reading the design doc.
407
-
408
- ```bash
409
- # Link design metadata (task count + task file path) to the Beads issue
410
- bash scripts/beads-context.sh set-design <id> <task-count> docs/plans/YYYY-MM-DD-<slug>-tasks.md
411
-
412
- # Record the success criteria from the design doc on the issue
413
- bash scripts/beads-context.sh set-acceptance <id> "<success-criteria from design doc>"
414
- ```
415
-
416
- Both commands must exit with code 0. If either fails, investigate (wrong issue ID? missing script?) before continuing.
417
-
418
- ### Step 5c: Contract extraction and logic-level dependency review
419
-
420
- After saving the task list and Beads context, extract and store contract metadata, then run the logic-level Phase 3 dependency review:
421
-
422
- ```bash
423
- # Extract contracts — only call store-contracts if extract succeeds (exit 0)
424
- if bash scripts/dep-guard.sh extract-contracts docs/plans/YYYY-MM-DD-<slug>-tasks.md > /tmp/contracts.txt; then
425
- bash scripts/dep-guard.sh store-contracts <id> "$(cat /tmp/contracts.txt)"
426
- else
427
- echo "No contracts found skipping store-contracts"
428
- fi
429
-
430
- # Re-run ripple check using Beads JSON + logic-level analysis
431
- bash scripts/dep-guard.sh check-ripple <id>
432
- ```
433
-
434
- `extract-contracts` exits 1 when no contracts are found (not an error just nothing to store). `store-contracts` must exit 0 if called.
435
-
436
- `check-ripple` is now advisory but logic-aware. It should:
437
- - read Beads issue data via JSON
438
- - analyze import/call-chain, contract, and behavioral dependency signals
439
- - show rubric score, confidence, issue pairs, and proposed dependency updates with pros/cons
440
- - stop for user approval whenever a dependency mutation is proposed
441
-
442
- If the user approves a dependency mutation, apply it explicitly:
443
-
444
- ```bash
445
- bash scripts/dep-guard.sh apply-decision <id> <dependent-id> <depends-on-id> "<approval rationale>"
446
- ```
447
-
448
- That approval step must validate with `bd dep cycles`, show `bd graph`, summarize `bd ready`, and persist the decision via `bd set-state` plus `bd comments`. Beads remains the canonical machine-readable decision record; the plan docs hold only the concise summary.
449
-
450
- ### Step 6: User review
451
-
452
- Present the full task list. Allow the user to reorder, split, or remove tasks.
453
-
454
- ---
455
-
456
- ```
457
- <HARD-GATE: /plan exit>
458
- Do NOT proceed to /dev until ALL are confirmed:
459
- 1. git branch --show-current output shows feat/<slug>
460
- 2. git worktree list shows .worktrees/<slug>
461
- 3. Baseline tests ran — either passing OR user confirmed to proceed past failures
462
- 4. Beads issue is created with status=in_progress
463
- 5. Task list exists at docs/plans/YYYY-MM-DD-<slug>-tasks.md
464
- 6. User has confirmed task list is correct
465
- 7. `beads-context.sh set-design` ran successfully (exit code 0)
466
- 8. `beads-context.sh set-acceptance` ran successfully (exit code 0)
467
- 9. `dep-guard.sh store-contracts` ran successfully (exit code 0) or skipped if no contracts found
468
- 10. `dep-guard.sh check-ripple` ran successfully and any proposed dependency mutation was reviewed with the user before calling `apply-decision`
469
- </HARD-GATE>
470
- ```
471
-
472
- After all HARD-GATE items pass, record the stage transition on the Beads issue:
473
-
474
- ```bash
475
- bash scripts/beads-context.sh stage-transition <id> plan dev
476
- ```
477
-
478
- ---
479
-
480
- ## Example Output (Phase 3 complete)
481
-
482
- ```
483
- ✓ Phase 1: Design intent captured
484
- - Design doc: docs/plans/2026-02-26-stripe-billing-design.md
485
- - Approach: Stripe SDK v4 (selected over v3)
486
- - Ambiguity policy: Make conservative choice + document in decisions log
487
-
488
- Phase 2: Technical research complete
489
- - OWASP Top 10: 3 risks identified, 3 mitigations planned
490
- - TDD scenarios: 5 identified
491
- - Sources: 8 references
492
-
493
- ✓ Phase 3: Setup complete
494
- - Beads: forge-xyz (in_progress)
495
- - Branch: feat/stripe-billing
496
- - Worktree: .worktrees/stripe-billing (baseline: 24/24 tests passing)
497
- - Task list: docs/plans/2026-02-26-stripe-billing-tasks.md (8 tasks)
498
-
499
- ⏸️ Task list ready for review. Confirm to proceed.
500
-
501
- After confirming, run: /dev
502
- ```
503
-
504
- ## Integration with Workflow
505
-
506
- ```
507
- Utility: /status → Understand current context before starting
508
- Stage 1: /plan → Design intent research branch + worktree + task list (you are here)
509
- Stage 2: /dev → Implement each task with subagent-driven TDD
510
- Stage 3: /validate → Type check, lint, tests, security — all fresh output
511
- Stage 4: /ship → Push + create PR
512
- Stage 5: /review → Address GitHub Actions, Greptile, SonarCloud
513
- Stage 6: /premerge → Update docs, hand off PR to user
514
- Stage 7: /verify → Post-merge CI check on main
515
- ```
516
-
517
- ## Tips
518
-
519
- - **Phase 1 quality = /dev autonomy**: Every ambiguity resolved in Phase 1 is a decision gate that won't fire during /dev
520
- - **One question at a time**: Don't dump all questions at once — dialogue produces better design decisions than a questionnaire
521
- - **Task granularity**: Target 2-5 minutes per task. If a task takes longer, split it
522
- - **Uncertain tasks go last**: Anything ambiguous at the end of the task list can be deferred if blocked without stopping other work
523
- - **Baseline failures matter**: Pre-existing test failures hide regressions. Fix or explicitly document them before /dev starts
1
+ ---
2
+ name: plan
3
+ description: Design intent → research → branch + worktree + task list
4
+ tools: []
5
+ ---
6
+
7
+ Plan a feature from scratch: brainstorm design intent, research technical approach, then set up branch, worktree, and a complete task list ready for /dev.
8
+
9
+ # Plan
10
+
11
+ This command runs in **3 phases**. Each phase ends with a HARD-GATE. Do not skip phases.
12
+
13
+ ---
14
+
15
+ ```
16
+ <HARD-GATE: /plan entry — worktree isolation>
17
+ Before ANY planning work begins:
18
+
19
+ 1. Run: git branch --show-current
20
+ 2. If the current branch is NOT master/main:
21
+ - STOP. Do not begin Phase 1.
22
+ - Tell the user: "You are on '<branch>'. Planning must start from a clean worktree on master.
23
+ Run: git checkout master — then re-run /plan."
24
+ 3. If on master, create the worktree NOW before asking any questions:
25
+ a. bd worktree create .worktrees/<slug> --branch feat/<slug>
26
+ b. cd .worktrees/<slug>
27
+ 4. Confirm: "Working in isolated worktree: .worktrees/<slug> (branch: feat/<slug>)"
28
+ 5. Create the epic issue and record the stage transition:
29
+ ```bash
30
+ bd create --title="<feature-name>" --type=epic
31
+ bd update <id> --status=in_progress
32
+ bash scripts/beads-context.sh stage-transition <id> none plan
33
+ ```
34
+ 6. ONLY THEN begin Phase 1.
35
+
36
+ Rationale: Planning commits (design docs, task lists) belong only to this feature's branch.
37
+ If planning runs in the main directory on a non-master branch, those commits contaminate
38
+ whatever branch is currently checked out. The worktree ensures zero cross-contamination
39
+ between parallel features or sessions.
40
+ </HARD-GATE>
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Usage
46
+
47
+ ```bash
48
+ /plan <feature-slug>
49
+ /plan <feature-slug> --strategic # Major architecture change: creates design doc PR before Phase 2
50
+ /plan <feature-slug> --continue # After --strategic PR is merged: run Phase 2 + 3
51
+ ```
52
+
53
+ ---
54
+
55
+
56
+ ### Multi-developer conflict check (soft block)
57
+
58
+ Before proceeding to Phase 1, check for cross-developer conflicts:
59
+
60
+ ```bash
61
+ # Auto-sync to get latest team state
62
+ bash scripts/sync-utils.sh auto-sync
63
+
64
+ # Check for conflicts with this issue's planned work area
65
+ bash scripts/conflict-detect.sh --issue <beads-id>
66
+ ```
67
+
68
+ If exit code 2 (validation error): show error message, abort — do not show conflict prompt.
69
+
70
+ If exit code 1 (conflicts found):
71
+ - Display the conflict output to the developer
72
+ - Ask: "Other developers are working in overlapping areas. Proceed anyway? (y/n)"
73
+ - If `n`: exit cleanly, no side effects
74
+ - If `y`: log override via `bd comments add <id> "Conflict override: proceeding despite overlap with <conflicting-issues>"`, then continue to Phase 1
75
+ - Audit: record conflict override per OWASP A09
76
+
77
+ If exit code 0: proceed silently to Phase 1.
78
+
79
+ ---
80
+
81
+ ### Parallel PR coordination check (soft block)
82
+
83
+ Before proceeding to Phase 1, check for merge conflicts and dependency issues with in-flight PRs:
84
+
85
+ ```bash
86
+ # Run merge simulation if on a feature branch
87
+ current_branch="$(git branch --show-current)"
88
+ if [[ "$current_branch" != "master" ]] && [[ "$current_branch" != "main" ]]; then
89
+ bash scripts/pr-coordinator.sh merge-sim "$current_branch" 2>&1 || true
90
+ fi
91
+
92
+ # Show current merge queue
93
+ bash scripts/pr-coordinator.sh merge-order 2>&1 || true
94
+
95
+ # Check for stale worktrees (informational)
96
+ bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
97
+ ```
98
+
99
+ If merge conflicts or unmet dependencies are found:
100
+ - Display the findings to the developer
101
+ - Ask: "In-flight PRs have potential conflicts. Proceed with planning anyway? (y/n)"
102
+ - If `n`: exit cleanly, no side effects
103
+ - If `y`: log override via `bd comments add <id> "PR coordination override: proceeding despite in-flight conflicts"`, then continue to Phase 1
104
+
105
+ ---
106
+
107
+ ### Team identity verification
108
+
109
+ Before starting planning, verify team identity is mapped:
110
+
111
+ ```bash
112
+ bash scripts/forge-team/index.sh verify 2>&1 || true
113
+ ```
114
+
115
+ If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
116
+
117
+ ---
118
+
119
+ ## Phase 1: Design Intent (Brainstorming)
120
+
121
+ **Goal**: Capture WHAT to build purpose, constraints, success criteria, edge cases, approach.
122
+
123
+ ### Step 0: Dependency ripple check (advisory)
124
+
125
+ Before exploring context or asking questions, check for potential conflicts with in-flight work:
126
+
127
+ ```bash
128
+ # If a Beads issue ID is known (e.g., from /status or bd ready):
129
+ bash scripts/dep-guard.sh check-ripple <beads-issue-id>
130
+
131
+ # If no issue exists yet (first-time plan):
132
+ bd list --status=open,in_progress
133
+ ```
134
+
135
+ Review the output. If overlaps are detected:
136
+ - Consider whether the overlapping issue should be a dependency
137
+ - Note any shared areas for the design Q&A
138
+ - This check is **advisory only** — always proceed to Step 1 regardless of findings
139
+
140
+ #### Ripple Analyst Agent (spawned when contract overlaps found)
141
+
142
+ When `check-ripple` detects overlapping issues AND contract metadata is available, spawn a Ripple Analyst subagent with this prompt:
143
+
144
+ **Input to agent**:
145
+ - Current issue's contract changes (from `extract-contracts` output)
146
+ - Consumer code snippets (from `find-consumers` output for each changed contract)
147
+ - Overlapping issue's title, description, and contract metadata
148
+
149
+ **Agent instructions**:
150
+ 1. For each overlapping contract, imagine 2-3 concrete break scenarios:
151
+ - "If [contract X] changes [specific behavior], then [consumer Y] will [specific failure]"
152
+ 2. Rate overall impact as one of:
153
+ - **NONE**: No real conflict despite keyword overlap
154
+ - **LOW**: Consumers need trivial adjustment (add parameter, rename call)
155
+ - **HIGH**: Consumer needs significant rework (parsing logic, data handling changes)
156
+ - **CRITICAL**: Consumer is in an active in_progress issue's task list
157
+ 3. **When uncertain, default to HIGH** conservative over permissive
158
+ 4. Recommend one action:
159
+ - Add dependency (`bd dep add <source> <target>`)
160
+ - Coordinate with other issue's developer
161
+ - Scope down current feature to avoid overlap
162
+ - Proceed as-is (no real conflict)
163
+
164
+ **Output format**:
165
+ ```
166
+ Impact: [NONE|LOW|HIGH|CRITICAL]
167
+ Confidence: [high|medium|low]
168
+
169
+ Break scenarios:
170
+ 1. [scenario description]
171
+ 2. [scenario description]
172
+
173
+ Recommendation: [action]
174
+ Reason: [why this action]
175
+ ```
176
+
177
+ This agent is advisory only. The developer always makes the final decision.
178
+
179
+ ### Step 1: Explore project context
180
+
181
+ Before asking any questions, read relevant files:
182
+ - Recent commits related to this area
183
+ - Existing code in affected modules
184
+ - Any related docs, tests, or prior research
185
+
186
+ ### Step 2: Ask clarifying questions — one at a time
187
+
188
+ Ask each question in sequence. Wait for user response. Use multiple choice where possible.
189
+
190
+ Questions to cover (adapt to feature, don't ask mechanical copies):
191
+ 1. **Purpose** What problem does this solve? Who benefits?
192
+ 2. **Constraints** What must this NOT do? What are the hard limits?
193
+ 3. **Success criteria** How will we know it's done? What is the minimum viable result?
194
+ 4. **Edge cases** What happens when [key dependency] fails / [input] is missing / [state] is ambiguous?
195
+ 5. **Technical preferences** — Library A or B? Pattern X or Y? (when real options exist)
196
+
197
+ ### Step 3: Propose approaches
198
+
199
+ Propose 2-3 concrete approaches with:
200
+ - Trade-offs (speed vs safety, complexity vs flexibility)
201
+ - A clear recommendation with reasoning
202
+ - Get user approval on the chosen approach
203
+
204
+ ### Step 4: Write design doc
205
+
206
+ Save to `docs/plans/YYYY-MM-DD-<slug>-design.md` with these sections:
207
+ - **Feature**: slug, date, status
208
+ - **Purpose**: what problem it solves
209
+ - **Success criteria**: measurable, specific
210
+ - **Out of scope**: explicit boundaries
211
+ - **Approach selected**: which option and why
212
+ - **Constraints**: hard limits
213
+ - **Edge cases**: decisions made during Q&A
214
+ - **Ambiguity policy**: Use 7-dimension rubric scoring per /dev decision gate. >= 80% confidence: proceed and document. < 80%: stop and ask.
215
+
216
+ Commit the design doc:
217
+ ```bash
218
+ git add docs/plans/YYYY-MM-DD-<slug>-design.md
219
+ git commit -m "docs: add design doc for <slug>"
220
+ ```
221
+
222
+ ---
223
+
224
+ **--strategic flag** (for major architecture changes):
225
+
226
+ After committing the design doc, push to a proposal branch and open PR:
227
+ ```bash
228
+ git checkout -b feat/<slug>-proposal
229
+ git push -u origin feat/<slug>-proposal
230
+ gh pr create --title "Design: <feature-name>" \
231
+ --body "Design doc for review. See docs/plans/YYYY-MM-DD-<slug>-design.md"
232
+ ```
233
+
234
+ **STOP here.** Present the PR URL. Wait for the user to merge the proposal PR.
235
+ After merge, run `/plan <slug> --continue` to proceed to Phase 2 + 3.
236
+
237
+ ---
238
+
239
+ ```
240
+ <HARD-GATE: Phase 1 exit>
241
+ Do NOT begin Phase 2 (web research) until:
242
+ 1. User has approved the design in this session
243
+ 2. Design doc exists at docs/plans/YYYY-MM-DD-<slug>-design.md
244
+ 3. Design doc includes: success criteria, edge cases, out-of-scope, ambiguity policy
245
+ 4. Design doc is committed to git
246
+ </HARD-GATE>
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Phase 2: Technical Research
252
+
253
+ **Goal**: Find HOW to build it — best practices, known issues, security risks, TDD scenarios.
254
+
255
+ Record the phase transition before starting research:
256
+ ```bash
257
+ bash scripts/beads-context.sh stage-transition <id> plan research
258
+ ```
259
+
260
+ Run these in parallel:
261
+
262
+ ### Web research (parallel-deep-research skill)
263
+ ```
264
+ Skill("parallel-deep-research")
265
+ ```
266
+ Search for:
267
+ - "[tech stack] [feature] best practices [year]"
268
+ - "[library/framework] [feature] implementation patterns"
269
+ - "Known issues / gotchas with [approach selected]"
270
+
271
+ ### OWASP Top 10 analysis
272
+
273
+ For this feature's risk surface, document each relevant OWASP category:
274
+ - What the risk is
275
+ - Whether it applies to this feature
276
+ - What mitigation will be implemented
277
+
278
+ ### Codebase exploration (Explore agent)
279
+ - Similar existing patterns to reuse
280
+ - Files this feature will affect
281
+ - Existing test infrastructure to leverage
282
+
283
+ ### DRY check (mandatory use actual search tools)
284
+
285
+ Before finalizing the approach, run Grep/Glob/Read searches for existing implementations of the planned function or pattern. Do not rely on memory or assumptions — execute the searches.
286
+
287
+ ```
288
+ Grep(searchTerm) # e.g., the function or concept name
289
+ Glob("**/*.js") # narrow to affected file types if needed
290
+ Read(matchedFile) # inspect any match in context
291
+ ```
292
+
293
+ If a match is found:
294
+ - Update the design doc's "Approach selected" section to say "extend existing [file/function]" — not "create new".
295
+ - Note the existing file path and line number in the design doc.
296
+
297
+ If no match is found: proceed. The DRY gate is cleared.
298
+
299
+ ### Blast-radius search (mandatory for remove/rename/replace features)
300
+
301
+ If this feature involves **removing**, **renaming**, or **replacing** a concept, tool, or dependency:
302
+
303
+ 1. Grep the ENTIRE codebase for the thing being removed/renamed:
304
+ ```
305
+ Grep("<thing-being-removed>") # exact name
306
+ Grep("<thing-being-removed>", -i) # case-insensitive variant
307
+ Glob("**/*<thing>*") # files named after it
308
+ ```
309
+
310
+ 2. For EVERY match found:
311
+ - Note the file path and line number in the design doc
312
+ - Add a cleanup task to the task list (Phase 3)
313
+ - Flag matches in unexpected packages or config files explicitly
314
+
315
+ 3. Common hiding spots to check:
316
+ - `package.json` (scripts, dependencies, description)
317
+ - `install.sh` / setup scripts
318
+ - CI/CD workflows (`.github/workflows/`)
319
+ - Agent config files (`lib/agents/`, `.cursorrules`, etc.)
320
+ - Documentation (`docs/`, `README.md`, `AGENTS.md`)
321
+ - Import statements and require() calls
322
+
323
+ If no removal/rename is involved, this section is skipped.
324
+
325
+ ### TDD test scenarios
326
+
327
+ Identify at minimum 3 test scenarios:
328
+ - Happy path
329
+ - Error / failure path
330
+ - Edge case from Phase 1
331
+
332
+ Append all research findings to the design doc under a `## Technical Research` section (not a separate file).
333
+
334
+ ---
335
+
336
+ ```
337
+ <HARD-GATE: Phase 2 exit>
338
+ Do NOT begin Phase 3 (setup) until:
339
+ 1. OWASP analysis is documented in design doc
340
+ 2. At least 3 TDD test scenarios are identified
341
+ 3. Approach selection is confirmed (which library/pattern to use)
342
+ 4. If feature involves removal/rename: blast-radius search completed, all references added to task list
343
+ </HARD-GATE>
344
+ ```
345
+
346
+ ---
347
+
348
+ ## Phase 3: Setup + Task List
349
+
350
+ **Goal**: Create branch, worktree, and a complete task list ready for /dev.
351
+
352
+ Record the phase transition before starting setup:
353
+ ```bash
354
+ bash scripts/beads-context.sh stage-transition <id> research setup
355
+ ```
356
+
357
+ ### Step 1: Link child issues to the epic
358
+
359
+ The epic was created in the Entry HARD-GATE (Phase 1 entry). If this feature requires child issues (sub-tasks tracked separately), create them now and link to the epic:
360
+
361
+ ```bash
362
+ bd create --title="<sub-task-name>" --type=feature --parent=<epic-id>
363
+ ```
364
+
365
+ ### Step 2: Branch + worktree
366
+
367
+ **ALWAYS branch from master, never from the current branch.** If the working directory is on any branch other than master, the new feature branch would inherit all unmerged changes from that branch — contaminating the new feature's history.
368
+
369
+ **Note**: If the Entry HARD-GATE already created the branch and worktree (and you are already inside `.worktrees/<slug>`), skip Steps 2b–2d — they are already done.
370
+
371
+ ```bash
372
+ # Step 2a: Check if branch and worktree were already created by Entry HARD-GATE
373
+ CURRENT=$(git branch --show-current)
374
+ if [ "$CURRENT" = "feat/<slug>" ]; then
375
+ echo "✓ Branch feat/<slug> already exists (Entry HARD-GATE created it) skipping 2b–2d"
376
+ else
377
+ # Step 2b: Verify .worktrees/ is gitignored — add if missing
378
+ git check-ignore -v .worktrees/ || echo ".worktrees/" >> .gitignore
379
+
380
+ # Step 2c: Create a Beads-aware worktree rooted on master
381
+ git checkout master
382
+ bd worktree create .worktrees/<slug> --branch feat/<slug>
383
+ cd .worktrees/<slug>
384
+ fi
385
+ ```
386
+
387
+ **Why this matters**: Multiple parallel features or sessions each get their own isolated worktree. Changes to one feature never bleed into another. The main working directory can stay on any branch without affecting new feature branches.
388
+
389
+ ### Step 3: Project setup in worktree
390
+
391
+ Auto-detect and run install:
392
+ ```bash
393
+ # e.g., bun install / npm install / pip install -r requirements.txt
394
+ ```
395
+
396
+ ### Step 4: Baseline test run
397
+
398
+ ```bash
399
+ # Run full test suite in worktree
400
+ bun test # or project test command
401
+ ```
402
+
403
+ If tests fail: report which tests are failing and ask user whether to investigate or proceed anyway. Do not silently proceed past failing baseline tests.
404
+
405
+ ### Step 5: Task list creation
406
+
407
+ Read the design doc. Break implementation into granular tasks.
408
+
409
+ **Task format** (each task MUST have ALL of these):
410
+ ```
411
+ Task N: <descriptive title>
412
+ File(s): <exact file paths>
413
+ What to implement: <complete description — not "add feature X", but what specifically>
414
+ TDD steps:
415
+ 1. Write test: <test file path, what assertion, what input/output>
416
+ 2. Run test: confirm it fails with [specific expected error message]
417
+ 3. Implement: <exact function/class/component to write>
418
+ 4. Run test: confirm it passes
419
+ 5. Commit: `<type>: <message>`
420
+ Expected output: <what running the test/code produces when done>
421
+ ```
422
+
423
+ **Ordering rules**:
424
+ - Foundational/shared modules FIRST (types, utils, constants)
425
+ - Feature logic SECOND
426
+ - Integration/wiring THIRD
427
+ - Uncertain/ambiguous tasks LAST (so they can be deferred if blocked)
428
+ - **File ownership**: Each task MUST include an `OWNS:` line listing files it will modify
429
+ - No two tasks in the same wave can own the same file
430
+ - Cross-wave ownership is allowed (sequential execution prevents conflicts)
431
+
432
+ **YAGNI filter** (after initial task draft, before saving):
433
+
434
+ For each task, confirm it maps to a specific requirement, success criterion, or edge case in the design doc. Run `applyYAGNIFilter({ task, designDoc })` for each task.
435
+
436
+ - Tasks that match keep as-is.
437
+ - Tasks with no anchor flagged as "potential scope creep". Present flagged tasks to the user: "These tasks have no anchor in the design doc. Keep (specify which requirement it serves) or remove?"
438
+ - If ALL tasks are flagged → return `allFlagged: true` and tell the user: "Design doc doesn't cover all tasks — needs amendment." Do not save the task list until the design doc is updated or tasks are removed.
439
+
440
+ **Before finalizing**: flag any tasks that touch areas not fully specified in the design doc. Present flagged tasks to user for quick clarification before saving.
441
+
442
+ Save to `docs/plans/YYYY-MM-DD-<slug>-tasks.md`.
443
+
444
+ ### Step 5b: Beads context
445
+
446
+ After saving the task list, attach design context and acceptance criteria to the Beads issue so downstream stages (`/dev`, `/validate`, `/review`) can retrieve it without re-reading the design doc.
447
+
448
+ ```bash
449
+ # Link design metadata (task count + task file path) to the Beads issue
450
+ bash scripts/beads-context.sh set-design <id> <task-count> docs/plans/YYYY-MM-DD-<slug>-tasks.md
451
+
452
+ # Record the success criteria from the design doc on the issue
453
+ bash scripts/beads-context.sh set-acceptance <id> "<success-criteria from design doc>"
454
+ ```
455
+
456
+ Both commands must exit with code 0. If either fails, investigate (wrong issue ID? missing script?) before continuing.
457
+
458
+ ### Step 5c: Contract extraction and logic-level dependency review
459
+
460
+ After saving the task list and Beads context, extract and store contract metadata, then run the logic-level Phase 3 dependency review:
461
+
462
+ ```bash
463
+ # Extract contracts only call store-contracts if extract succeeds (exit 0)
464
+ if bash scripts/dep-guard.sh extract-contracts docs/plans/YYYY-MM-DD-<slug>-tasks.md > /tmp/contracts.txt; then
465
+ bash scripts/dep-guard.sh store-contracts <id> "$(cat /tmp/contracts.txt)"
466
+ else
467
+ echo "No contracts foundskipping store-contracts"
468
+ fi
469
+
470
+ # Re-run ripple check using Beads JSON + logic-level analysis
471
+ bash scripts/dep-guard.sh check-ripple <id>
472
+ ```
473
+
474
+ `extract-contracts` exits 1 when no contracts are found (not an error — just nothing to store). `store-contracts` must exit 0 if called.
475
+
476
+ `check-ripple` is now advisory but logic-aware. It should:
477
+ - read Beads issue data via JSON
478
+ - analyze import/call-chain, contract, and behavioral dependency signals
479
+ - show rubric score, confidence, issue pairs, and proposed dependency updates with pros/cons
480
+ - stop for user approval whenever a dependency mutation is proposed
481
+
482
+ If the user approves a dependency mutation, apply it explicitly:
483
+
484
+ ```bash
485
+ bash scripts/dep-guard.sh apply-decision <id> <dependent-id> <depends-on-id> "<approval rationale>"
486
+ ```
487
+
488
+ That approval step must validate with `bd dep cycles`, show `bd graph`, summarize `bd ready`, and persist the decision via `bd set-state` plus `bd comments`. Beads remains the canonical machine-readable decision record; the plan docs hold only the concise summary.
489
+
490
+ ### Step 6: User review
491
+
492
+ Present the full task list. Allow the user to reorder, split, or remove tasks.
493
+
494
+ ---
495
+
496
+ ```
497
+ <HARD-GATE: /plan exit>
498
+ Do NOT proceed to /dev until ALL are confirmed:
499
+ 1. git branch --show-current output shows feat/<slug>
500
+ 2. git worktree list shows .worktrees/<slug>
501
+ 3. Baseline tests ran — either passing OR user confirmed to proceed past failures
502
+ 4. Beads issue is created with status=in_progress
503
+ 5. Task list exists at docs/plans/YYYY-MM-DD-<slug>-tasks.md
504
+ 6. User has confirmed task list is correct
505
+ 7. `beads-context.sh set-design` ran successfully (exit code 0)
506
+ 8. `beads-context.sh set-acceptance` ran successfully (exit code 0)
507
+ 9. `dep-guard.sh store-contracts` ran successfully (exit code 0) — or skipped if no contracts found
508
+ 10. `dep-guard.sh check-ripple` ran successfully and any proposed dependency mutation was reviewed with the user before calling `apply-decision`
509
+ </HARD-GATE>
510
+ ```
511
+
512
+ After all HARD-GATE items pass, validate context and record the stage transition:
513
+
514
+ ```bash
515
+ bash scripts/beads-context.sh validate <id>
516
+ bash scripts/beads-context.sh stage-transition <id> plan dev \
517
+ --summary "<design approach chosen, task count>" \
518
+ --decisions "<key trade-offs resolved during Q&A>" \
519
+ --artifacts "docs/plans/YYYY-MM-DD-<slug>-design.md docs/plans/YYYY-MM-DD-<slug>-tasks.md" \
520
+ --next "<first dev task focus area>"
521
+ ```
522
+
523
+ ---
524
+
525
+ ## Example Output (Phase 3 complete)
526
+
527
+ ```
528
+ ✓ Phase 1: Design intent captured
529
+ - Design doc: docs/plans/<date>-<slug>-design.md
530
+ - Approach: <selected approach> (selected over <alternatives>)
531
+ - Ambiguity policy: Rubric scoring (>= 80% proceed, < 80% ask)
532
+
533
+ ✓ Phase 2: Technical research complete
534
+ - OWASP Top 10: <N> risks identified, <N> mitigations planned
535
+ - TDD scenarios: <N> identified
536
+ - Sources: <N> references
537
+
538
+ ✓ Phase 3: Setup complete
539
+ - Beads: <issue-id> (in_progress)
540
+ - Branch: feat/<slug>
541
+ - Worktree: .worktrees/<slug> (baseline: <N>/<N> tests passing)
542
+ - Task list: docs/plans/<date>-<slug>-tasks.md (<N> tasks)
543
+
544
+ ⏸️ Task list ready for review. Confirm to proceed.
545
+
546
+ After confirming, run: /dev
547
+ ```
548
+
549
+ ## Integration with Workflow
550
+
551
+ ```
552
+ Utility: /status → Understand current context before starting
553
+ Stage 1: /plan → Design intent → research → branch + worktree + task list (you are here)
554
+ Stage 2: /dev → Implement each task with subagent-driven TDD
555
+ Stage 3: /validate → Type check, lint, tests, security — all fresh output
556
+ Stage 4: /ship → Push + create PR
557
+ Stage 5: /review → Address GitHub Actions, Greptile, SonarCloud
558
+ Stage 6: /premerge → Update docs, hand off PR to user
559
+ Stage 7: /verify → Post-merge CI check on main
560
+ ```
561
+
562
+ ## Tips
563
+
564
+ - **Phase 1 quality = /dev autonomy**: Every ambiguity resolved in Phase 1 is a decision gate that won't fire during /dev
565
+ - **One question at a time**: Don't dump all questions at once — dialogue produces better design decisions than a questionnaire
566
+ - **Task granularity**: Target 2-5 minutes per task. If a task takes longer, split it
567
+ - **Uncertain tasks go last**: Anything ambiguous at the end of the task list can be deferred if blocked without stopping other work
568
+ - **Baseline failures matter**: Pre-existing test failures hide regressions. Fix or explicitly document them before /dev starts