forge-workflow 0.0.5 → 0.0.7

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 (164) hide show
  1. package/.claude/commands/dev.md +6 -1
  2. package/.claude/commands/plan.md +59 -14
  3. package/.claude/commands/premerge.md +10 -0
  4. package/.claude/commands/review.md +7 -1
  5. package/.claude/commands/ship.md +95 -47
  6. package/.claude/commands/status.md +42 -0
  7. package/.claude/commands/validate.md +7 -1
  8. package/.claude/commands/verify.md +52 -4
  9. package/.claude/rules/workflow.md +16 -0
  10. package/.claude/scripts/greptile-resolve.sh +32 -0
  11. package/.cline/workflows/dev.md +6 -1
  12. package/.cline/workflows/plan.md +59 -14
  13. package/.cline/workflows/premerge.md +10 -0
  14. package/.cline/workflows/review.md +7 -1
  15. package/.cline/workflows/ship.md +95 -47
  16. package/.cline/workflows/status.md +42 -0
  17. package/.cline/workflows/validate.md +7 -1
  18. package/.cline/workflows/verify.md +52 -4
  19. package/.codex/skills/dev/SKILL.md +6 -1
  20. package/.codex/skills/plan/SKILL.md +59 -14
  21. package/.codex/skills/premerge/SKILL.md +10 -0
  22. package/.codex/skills/review/SKILL.md +7 -1
  23. package/.codex/skills/ship/SKILL.md +95 -47
  24. package/.codex/skills/status/SKILL.md +42 -0
  25. package/.codex/skills/validate/SKILL.md +7 -1
  26. package/.codex/skills/verify/SKILL.md +52 -4
  27. package/.cursor/commands/dev.md +6 -1
  28. package/.cursor/commands/plan.md +59 -14
  29. package/.cursor/commands/premerge.md +10 -0
  30. package/.cursor/commands/review.md +7 -1
  31. package/.cursor/commands/ship.md +95 -47
  32. package/.cursor/commands/status.md +42 -0
  33. package/.cursor/commands/validate.md +7 -1
  34. package/.cursor/commands/verify.md +52 -4
  35. package/.cursorrules +149 -0
  36. package/.github/prompts/dev.prompt.md +6 -1
  37. package/.github/prompts/plan.prompt.md +59 -14
  38. package/.github/prompts/premerge.prompt.md +10 -0
  39. package/.github/prompts/review.prompt.md +7 -1
  40. package/.github/prompts/ship.prompt.md +95 -47
  41. package/.github/prompts/status.prompt.md +42 -0
  42. package/.github/prompts/validate.prompt.md +7 -1
  43. package/.github/prompts/verify.prompt.md +52 -4
  44. package/.kilocode/workflows/dev.md +6 -1
  45. package/.kilocode/workflows/plan.md +59 -14
  46. package/.kilocode/workflows/premerge.md +10 -0
  47. package/.kilocode/workflows/review.md +7 -1
  48. package/.kilocode/workflows/ship.md +95 -47
  49. package/.kilocode/workflows/status.md +42 -0
  50. package/.kilocode/workflows/validate.md +7 -1
  51. package/.kilocode/workflows/verify.md +52 -4
  52. package/.opencode/commands/dev.md +6 -1
  53. package/.opencode/commands/plan.md +59 -14
  54. package/.opencode/commands/premerge.md +10 -0
  55. package/.opencode/commands/review.md +7 -1
  56. package/.opencode/commands/ship.md +95 -47
  57. package/.opencode/commands/status.md +42 -0
  58. package/.opencode/commands/validate.md +7 -1
  59. package/.opencode/commands/verify.md +52 -4
  60. package/.roo/commands/dev.md +6 -1
  61. package/.roo/commands/plan.md +59 -14
  62. package/.roo/commands/premerge.md +10 -0
  63. package/.roo/commands/review.md +7 -1
  64. package/.roo/commands/ship.md +95 -47
  65. package/.roo/commands/status.md +42 -0
  66. package/.roo/commands/validate.md +7 -1
  67. package/.roo/commands/verify.md +52 -4
  68. package/AGENTS.md +97 -0
  69. package/CLAUDE.md +10 -0
  70. package/README.md +2 -2
  71. package/bin/forge-cmd.js +5 -1
  72. package/bin/forge-preflight.js +15 -2
  73. package/bin/forge.js +211 -9
  74. package/docs/ENHANCED_ONBOARDING.md +96 -86
  75. package/docs/ROADMAP.md +2 -2
  76. package/docs/TOOLCHAIN.md +23 -0
  77. package/docs/VALIDATION.md +1 -1
  78. package/lefthook.yml +11 -0
  79. package/lib/agents/README.md +46 -1
  80. package/lib/agents/cline.plugin.json +11 -4
  81. package/lib/agents/codex.plugin.json +2 -2
  82. package/lib/agents/copilot.plugin.json +5 -5
  83. package/lib/agents/cursor.plugin.json +1 -1
  84. package/lib/agents/kilocode.plugin.json +1 -1
  85. package/lib/agents/opencode.plugin.json +7 -4
  86. package/lib/agents/roo.plugin.json +10 -3
  87. package/lib/agents-config.js +129 -81
  88. package/lib/codex-skills.js +50 -0
  89. package/lib/commands/_registry.js +173 -0
  90. package/lib/commands/clean.js +181 -0
  91. package/lib/commands/commands-reset.js +147 -0
  92. package/lib/commands/dev.js +84 -0
  93. package/lib/commands/plan.js +18 -0
  94. package/lib/commands/push.js +196 -0
  95. package/lib/commands/recommend.js +1 -1
  96. package/lib/commands/setup.js +4295 -0
  97. package/lib/commands/ship.js +20 -0
  98. package/lib/commands/status.js +210 -44
  99. package/lib/commands/sync.js +71 -0
  100. package/lib/commands/team.js +37 -0
  101. package/lib/commands/test.js +207 -0
  102. package/lib/commands/validate.js +13 -0
  103. package/lib/commands/worktree.js +310 -0
  104. package/lib/detect-agent.js +38 -8
  105. package/lib/detection-utils.js +405 -0
  106. package/lib/docs-command.js +51 -0
  107. package/lib/docs-copy.js +50 -0
  108. package/lib/file-utils.js +260 -0
  109. package/lib/forge-context.js +42 -0
  110. package/lib/freshness-token.js +148 -0
  111. package/lib/frontmatter.js +79 -0
  112. package/lib/greptile-match.js +80 -0
  113. package/lib/husky-migration.js +113 -12
  114. package/lib/lefthook-check.js +27 -6
  115. package/lib/plugin-manager.js +225 -72
  116. package/lib/project-discovery.js +39 -5
  117. package/lib/reset.js +309 -0
  118. package/lib/runtime-health.js +305 -0
  119. package/lib/shell-utils.js +50 -0
  120. package/lib/task-ownership.js +117 -0
  121. package/lib/ui-utils.js +43 -0
  122. package/lib/validation-utils.js +163 -0
  123. package/lib/workflow/enforce-stage.js +179 -0
  124. package/lib/workflow/stages.js +201 -0
  125. package/lib/workflow/state.js +332 -0
  126. package/opencode.json +67 -0
  127. package/package.json +16 -6
  128. package/scripts/beads-context.sh +165 -22
  129. package/scripts/beads-context.test.js +5 -1
  130. package/scripts/check-agents.js +103 -0
  131. package/scripts/check-forge-token.js +98 -0
  132. package/scripts/conflict-detect.sh +2 -2
  133. package/scripts/dep-guard.sh +6 -28
  134. package/scripts/file-index.sh +117 -23
  135. package/scripts/forge-team/index.sh +86 -0
  136. package/scripts/forge-team/lib/agent-prompt.sh +52 -0
  137. package/scripts/forge-team/lib/claim.sh +256 -0
  138. package/scripts/forge-team/lib/dashboard.sh +341 -0
  139. package/scripts/forge-team/lib/epic.sh +332 -0
  140. package/scripts/forge-team/lib/hooks.sh +253 -0
  141. package/scripts/forge-team/lib/identity.sh +235 -0
  142. package/scripts/forge-team/lib/sync-github.sh +317 -0
  143. package/scripts/forge-team/lib/verify.sh +284 -0
  144. package/scripts/forge-team/lib/workload.sh +296 -0
  145. package/scripts/forge-team/tests/agent-prompt.test.sh +72 -0
  146. package/scripts/forge-team/tests/claim.test.sh +179 -0
  147. package/scripts/forge-team/tests/dashboard.test.sh +170 -0
  148. package/scripts/forge-team/tests/dispatcher.test.sh +79 -0
  149. package/scripts/forge-team/tests/epic.test.sh +176 -0
  150. package/scripts/forge-team/tests/hooks.test.sh +239 -0
  151. package/scripts/forge-team/tests/identity.test.sh +176 -0
  152. package/scripts/forge-team/tests/integration.test.sh +371 -0
  153. package/scripts/forge-team/tests/sync-github.test.sh +209 -0
  154. package/scripts/forge-team/tests/verify.test.sh +314 -0
  155. package/scripts/forge-team/tests/workflow-integration.test.sh +43 -0
  156. package/scripts/forge-team/tests/workload.test.sh +209 -0
  157. package/scripts/lib/eval-runner.js +39 -0
  158. package/scripts/lib/jsonl-lock.sh +48 -0
  159. package/scripts/lib/sanitize.sh +116 -0
  160. package/scripts/pr-coordinator.sh +756 -0
  161. package/scripts/smart-status.sh +58 -21
  162. package/scripts/sync-commands.js +49 -20
  163. package/scripts/sync-utils.sh +24 -29
  164. package/scripts/test.js +18 -1
@@ -73,6 +73,44 @@ If exit code 0: proceed silently to Phase 1.
73
73
 
74
74
  ---
75
75
 
76
+ ### Parallel PR coordination check (soft block)
77
+
78
+ Before proceeding to Phase 1, check for merge conflicts and dependency issues with in-flight PRs:
79
+
80
+ ```bash
81
+ # Run merge simulation if on a feature branch
82
+ current_branch="$(git branch --show-current)"
83
+ if [[ "$current_branch" != "master" ]] && [[ "$current_branch" != "main" ]]; then
84
+ bash scripts/pr-coordinator.sh merge-sim "$current_branch" 2>&1 || true
85
+ fi
86
+
87
+ # Show current merge queue
88
+ bash scripts/pr-coordinator.sh merge-order 2>&1 || true
89
+
90
+ # Check for stale worktrees (informational)
91
+ bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
92
+ ```
93
+
94
+ If merge conflicts or unmet dependencies are found:
95
+ - Display the findings to the developer
96
+ - Ask: "In-flight PRs have potential conflicts. Proceed with planning anyway? (y/n)"
97
+ - If `n`: exit cleanly, no side effects
98
+ - If `y`: log override via `bd comments add <id> "PR coordination override: proceeding despite in-flight conflicts"`, then continue to Phase 1
99
+
100
+ ---
101
+
102
+ ### Team identity verification
103
+
104
+ Before starting planning, verify team identity is mapped:
105
+
106
+ ```bash
107
+ bash scripts/forge-team/index.sh verify 2>&1 || true
108
+ ```
109
+
110
+ If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
111
+
112
+ ---
113
+
76
114
  ## Phase 1: Design Intent (Brainstorming)
77
115
 
78
116
  **Goal**: Capture WHAT to build — purpose, constraints, success criteria, edge cases, approach.
@@ -150,7 +188,6 @@ Questions to cover (adapt to feature, don't ask mechanical copies):
150
188
  3. **Success criteria** — How will we know it's done? What is the minimum viable result?
151
189
  4. **Edge cases** — What happens when [key dependency] fails / [input] is missing / [state] is ambiguous?
152
190
  5. **Technical preferences** — Library A or B? Pattern X or Y? (when real options exist)
153
- 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?
154
191
 
155
192
  ### Step 3: Propose approaches
156
193
 
@@ -169,7 +206,7 @@ Save to `docs/plans/YYYY-MM-DD-<slug>-design.md` with these sections:
169
206
  - **Approach selected**: which option and why
170
207
  - **Constraints**: hard limits
171
208
  - **Edge cases**: decisions made during Q&A
172
- - **Ambiguity policy**: agent's fallback when spec gaps arise mid-dev
209
+ - **Ambiguity policy**: Use 7-dimension rubric scoring per /dev decision gate. >= 80% confidence: proceed and document. < 80%: stop and ask.
173
210
 
174
211
  Commit the design doc:
175
212
  ```bash
@@ -383,6 +420,9 @@ Expected output: <what running the test/code produces when done>
383
420
  - Feature logic SECOND
384
421
  - Integration/wiring THIRD
385
422
  - Uncertain/ambiguous tasks LAST (so they can be deferred if blocked)
423
+ - **File ownership**: Each task MUST include an `OWNS:` line listing files it will modify
424
+ - No two tasks in the same wave can own the same file
425
+ - Cross-wave ownership is allowed (sequential execution prevents conflicts)
386
426
 
387
427
  **YAGNI filter** (after initial task draft, before saving):
388
428
 
@@ -464,10 +504,15 @@ Do NOT proceed to /dev until ALL are confirmed:
464
504
  </HARD-GATE>
465
505
  ```
466
506
 
467
- After all HARD-GATE items pass, record the stage transition on the Beads issue:
507
+ After all HARD-GATE items pass, validate context and record the stage transition:
468
508
 
469
509
  ```bash
470
- bash scripts/beads-context.sh stage-transition <id> plan dev
510
+ bash scripts/beads-context.sh validate <id>
511
+ bash scripts/beads-context.sh stage-transition <id> plan dev \
512
+ --summary "<design approach chosen, task count>" \
513
+ --decisions "<key trade-offs resolved during Q&A>" \
514
+ --artifacts "docs/plans/YYYY-MM-DD-<slug>-design.md docs/plans/YYYY-MM-DD-<slug>-tasks.md" \
515
+ --next "<first dev task focus area>"
471
516
  ```
472
517
 
473
518
  ---
@@ -476,20 +521,20 @@ bash scripts/beads-context.sh stage-transition <id> plan dev
476
521
 
477
522
  ```
478
523
  ✓ Phase 1: Design intent captured
479
- - Design doc: docs/plans/2026-02-26-stripe-billing-design.md
480
- - Approach: Stripe SDK v4 (selected over v3)
481
- - Ambiguity policy: Make conservative choice + document in decisions log
524
+ - Design doc: docs/plans/<date>-<slug>-design.md
525
+ - Approach: <selected approach> (selected over <alternatives>)
526
+ - Ambiguity policy: Rubric scoring (>= 80% proceed, < 80% ask)
482
527
 
483
528
  ✓ Phase 2: Technical research complete
484
- - OWASP Top 10: 3 risks identified, 3 mitigations planned
485
- - TDD scenarios: 5 identified
486
- - Sources: 8 references
529
+ - OWASP Top 10: <N> risks identified, <N> mitigations planned
530
+ - TDD scenarios: <N> identified
531
+ - Sources: <N> references
487
532
 
488
533
  ✓ Phase 3: Setup complete
489
- - Beads: forge-xyz (in_progress)
490
- - Branch: feat/stripe-billing
491
- - Worktree: .worktrees/stripe-billing (baseline: 24/24 tests passing)
492
- - Task list: docs/plans/2026-02-26-stripe-billing-tasks.md (8 tasks)
534
+ - Beads: <issue-id> (in_progress)
535
+ - Branch: feat/<slug>
536
+ - Worktree: .worktrees/<slug> (baseline: <N>/<N> tests passing)
537
+ - Task list: docs/plans/<date>-<slug>-tasks.md (<N> tasks)
493
538
 
494
539
  ⏸️ Task list ready for review. Confirm to proceed.
495
540
 
@@ -120,6 +120,16 @@ Output:
120
120
  After you merge, run /verify to confirm everything landed correctly.
121
121
  ```
122
122
 
123
+ ### Step 6: Validate Context and Record Stage Transition
124
+
125
+ ```bash
126
+ bash scripts/beads-context.sh validate <id>
127
+ bash scripts/beads-context.sh stage-transition <id> premerge verify \
128
+ --summary "<docs updated, CI green, PR ready>" \
129
+ --artifacts "<updated doc files, PR URL>" \
130
+ --next "<merge instructions for user>"
131
+ ```
132
+
123
133
  ```
124
134
  <HARD-GATE: /premerge exit>
125
135
  Do NOT run gh pr merge.
@@ -361,7 +361,13 @@ Do NOT declare /review complete until:
361
361
  1. bash .claude/scripts/greptile-resolve.sh stats <pr-number> shows "All Greptile threads resolved"
362
362
  2. ALL human reviewer comments are either resolved or have a reply with explanation
363
363
  3. gh pr checks <pr-number> shows all checks passing
364
- 4. Stage transition: Run `bash scripts/beads-context.sh stage-transition <id> review premerge` exit 0 confirmed
364
+ 4. Context check: Run `bash scripts/beads-context.sh validate <id>` and address any warnings
365
+ 5. Stage transition: Run the following → exit 0 confirmed:
366
+ bash scripts/beads-context.sh stage-transition <id> review premerge \
367
+ --summary "<all feedback addressed summary>" \
368
+ --decisions "<comment resolutions — valid fixes and justified rejections>" \
369
+ --artifacts "<fixed files, commit SHAs>" \
370
+ --next "<doc update needs for premerge>"
365
371
  </HARD-GATE>
366
372
  ```
367
373
 
@@ -43,6 +43,36 @@ BEHIND=$(git rev-list --count HEAD..origin/"$BASE")
43
43
 
44
44
  This is NOT a full rebase — just a check. The rebase happens in /validate where the full test suite runs afterward.
45
45
 
46
+ ### Parallel PR coordination (soft block)
47
+
48
+ Before creating the PR, check merge readiness:
49
+
50
+ ```bash
51
+ # Run merge simulation against base branch
52
+ bash scripts/pr-coordinator.sh merge-sim "$(git branch --show-current)" 2>&1
53
+
54
+ # Show recommended merge order
55
+ bash scripts/pr-coordinator.sh merge-order 2>&1 || true
56
+
57
+ # Auto-label the PR after creation (called after gh pr create below)
58
+ # bash scripts/pr-coordinator.sh auto-label <issue-id>
59
+ ```
60
+
61
+ If merge simulation finds conflicts:
62
+ - Display conflicted files
63
+ - Ask: "Merge conflicts detected with base branch. These PRs should merge first: [list]. Proceed with PR creation anyway? (y/n)"
64
+ - If `n`: exit cleanly
65
+ - If `y`: log override via `bd comments add <id> "Ship override: creating PR despite merge conflicts"`, then continue
66
+
67
+ After PR creation completes:
68
+ ```bash
69
+ # Auto-label the newly created PR
70
+ bash scripts/pr-coordinator.sh auto-label <issue-id>
71
+
72
+ # Check for stale worktrees (informational)
73
+ bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
74
+ ```
75
+
46
76
  ### Step 3: Update Beads
47
77
  ```bash
48
78
  bd update <id> --status done
@@ -57,68 +87,86 @@ Use `--force-with-lease` because `/validate` may have rebased the branch, rewrit
57
87
  git push --force-with-lease -u origin <branch-name>
58
88
  ```
59
89
 
60
- ### Step 5: Create PR
90
+ ### Step 5: Create PR Using Project's PR Template
61
91
 
62
- Use the narrative PR template below. Lead with WHY (Problem/Root Cause/Fix/Value) — this is what reviewers need to understand first. Keep implementation details (test coverage, security review, design doc) in a collapsible section so they're available but don't clutter the summary.
92
+ **CRITICAL**: Always use the project's own PR template. Never use a hardcoded body.
63
93
 
64
- If no Beads issue exists (hotfix, external contribution), skip the "Closes" line.
94
+ **Step 5a: Locate the PR template**
65
95
 
96
+ Check for a PR template in the project (in order of precedence):
66
97
  ```bash
67
- gh pr create --title "<type>: <concise description>" --body "$(cat <<'EOF'
68
- ## Problem
69
- [What was broken, what need existed, or what user pain this addresses]
70
-
71
- ## Root Cause
72
- [Why it happened, why it was missing, or what gap existed]
98
+ # Check standard locations
99
+ PR_TEMPLATE=""
100
+ for path in .github/pull_request_template.md .github/PULL_REQUEST_TEMPLATE.md docs/pull_request_template.md pull_request_template.md; do
101
+ if [ -f "$path" ]; then
102
+ PR_TEMPLATE="$path"
103
+ break
104
+ fi
105
+ done
106
+ ```
73
107
 
74
- ## Fix
75
- [What this PR does to solve it — approach, not implementation details]
108
+ **Step 5b: Read and populate the template**
76
109
 
77
- ## Value
78
- [Who benefits, what improves, what risk is removed]
110
+ If a PR template exists:
111
+ 1. **Read the template file** using the Read tool
112
+ 2. **Fill in every section** with actual data from the current PR context:
113
+ - Replace HTML comments (`<!-- ... -->`) with real content
114
+ - Check applicable checkboxes (`- [x]`)
115
+ - Fill in beads issue IDs (replace `beads-xxx` with actual ID)
116
+ - Fill in test results, validation status, and other concrete data
117
+ - Reference the design doc: `docs/plans/YYYY-MM-DD-<slug>-design.md`
118
+ 3. **Do NOT remove any sections** — fill them all, even if "N/A"
119
+ 4. **Do NOT restructure the template** — keep the project's chosen format
79
120
 
80
- ## Beads
81
- Closes: <issue-id>
121
+ If no PR template exists, use this minimal fallback:
122
+ ```
123
+ ## Summary
124
+ [1-3 sentences: what this PR does and why]
82
125
 
83
- <details>
84
- <summary>Implementation Details</summary>
126
+ ## Changes
127
+ [Bulleted list of key changes]
85
128
 
86
- ### Test Coverage
87
- - Tests: [count] passing
88
- - Scenarios covered: [list key scenarios]
129
+ ## Testing
130
+ [How it was tested, test results]
89
131
 
90
- ### Security Review
91
- - OWASP Top 10: [summary — applicable risks and mitigations]
92
- - Automated scan: [result]
132
+ ## Beads
133
+ Closes beads-xxx
93
134
 
94
- ### Design Doc
95
- See: docs/plans/YYYY-MM-DD-<slug>-design.md
135
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
136
+ ```
96
137
 
97
- ### Decisions Log
98
- See: docs/plans/YYYY-MM-DD-<slug>-decisions.md (if any undocumented decisions arose during /dev)
138
+ **Step 5c: Create the PR**
99
139
 
100
- ### Key Decisions
101
- [From design doc 3-5 key decisions with reasoning]
140
+ ```bash
141
+ gh pr create --title "<type>: <concise description>" --body "<populated-template-content>"
142
+ ```
102
143
 
103
- ### Documentation Updated
104
- [List docs updated in this PR, or "None no doc-facing changes"]
144
+ Rules for the PR body:
145
+ - **Use the project's template structure** never substitute your own format
146
+ - **Fill in concrete data** — commit counts, test results, actual file paths, real beads IDs
147
+ - **Check applicable checkboxes** — `[x]` for items that apply, `[ ]` for items that don't
148
+ - **Include "Closes beads-xxx"** in the Beads section (required for auto-close in /verify)
105
149
 
106
- ### Validation
107
- - [x] Type check passing
108
- - [x] Lint passing (0 errors, 0 warnings)
109
- - [x] All tests passing
110
- - [x] Security review completed
150
+ ### Step 6: Validate Context and Record Stage Transition
151
+ ```bash
152
+ bash scripts/beads-context.sh validate <id>
153
+ bash scripts/beads-context.sh stage-transition <id> ship review \
154
+ --summary "<PR created, checks pending>" \
155
+ --decisions "<template sections filled, beads linked>" \
156
+ --artifacts "<PR URL, branch name>" \
157
+ --next "<review focus areas>"
158
+ ```
111
159
 
112
- </details>
160
+ ### Team sync after PR
113
161
 
114
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
115
- EOF
116
- )"
117
- ```
162
+ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
118
163
 
119
- ### Step 6: Record Stage Transition
120
164
  ```bash
121
- bash scripts/beads-context.sh stage-transition <id> ship review
165
+ # Sync issue state to GitHub
166
+ bash scripts/forge-team/index.sh sync 2>&1 || true
167
+
168
+ # Verify 1:1 mapping
169
+ bash scripts/forge-team/index.sh verify 2>&1 || true
122
170
  ```
123
171
 
124
172
  ## Example Output
@@ -153,9 +201,9 @@ Stage 7: /verify → Post-merge CI check on main
153
201
 
154
202
  ## Tips
155
203
 
156
- - **Lead with why**: Problem Root Cause Fix Value is what reviewers need first
157
- - **Collapsible details**: Design doc, decisions log, test coverage go in `<details>` available but not in the way
158
- - **Document security**: OWASP Top 10 review in collapsible section
159
- - **Test coverage**: Show all test scenarios passing
204
+ - **Use the project's PR template**: Always read `.github/pull_request_template.md` (or equivalent) and populate it never substitute your own format
205
+ - **Fill every section**: Even if "N/A"empty/missing sections cause review friction
206
+ - **Include "Closes beads-xxx"**: Required for auto-close in /verify
207
+ - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
160
208
  - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
161
209
  - **NO auto-merge**: Always wait for /review phase
@@ -21,6 +21,7 @@ bash scripts/sync-utils.sh auto-sync
21
21
  ```
22
22
 
23
23
  ### Step 1: Smart Status (ranked issues with conflict detection)
24
+
24
25
  ```bash
25
26
  bash scripts/smart-status.sh
26
27
  ```
@@ -28,6 +29,35 @@ This script dynamically computes and displays all issues ranked by composite sco
28
29
 
29
30
  For full context on any issue: `bd show <id>`
30
31
 
32
+ ### Step 1b: Reconcile stale in-progress issues
33
+
34
+ Check if any in-progress issues were already merged but not closed (can happen if `/verify` was skipped or backup was restored from stale snapshot):
35
+
36
+ ```bash
37
+ # Detect default branch dynamically (prefer main over master)
38
+ DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
39
+ if [ -z "$DEFAULT_BRANCH" ]; then
40
+ if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
41
+ elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
42
+ else echo "ERROR: No main or master branch found — skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
43
+ fi
44
+
45
+ # For each in_progress issue, check if its PR was already merged
46
+ if [ -n "$DEFAULT_BRANCH" ]; then
47
+ bd list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
48
+ # Search git log for the issue ID in commit messages (fixed-strings for literal match)
49
+ if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
50
+ echo "STALE: $id — found in git history, likely already merged"
51
+ fi
52
+ done
53
+ fi
54
+ ```
55
+
56
+ If stale issues are found, close them:
57
+ ```bash
58
+ bd close <id> --force --reason="Already merged — detected during status reconciliation"
59
+ ```
60
+
31
61
  ### Step 2: Review Recent Commits
32
62
  ```bash
33
63
  git log --oneline -10
@@ -38,6 +68,18 @@ git log --oneline -10
38
68
  - **Continuing work**: In-progress issues found, resume where left off
39
69
  - **Review needed**: Work marked complete, needs review/merge
40
70
 
71
+ ### Team context
72
+
73
+ Show current developer's active work and team overview:
74
+
75
+ ```bash
76
+ # Show my active issues
77
+ bash scripts/forge-team/index.sh workload --me 2>&1 || true
78
+
79
+ # One-line team summary
80
+ bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
81
+ ```
82
+
41
83
  ## Next Steps
42
84
 
43
85
  - **If starting new work**: Run `/plan <feature-name>`
@@ -225,7 +225,13 @@ until ALL FOUR show fresh output in this session:
225
225
  "Should pass", "was passing earlier", and "I'm confident" are not evidence.
226
226
  Run the commands. Show the output. THEN declare done.
227
227
 
228
- 5. Stage transition: Run `bash scripts/beads-context.sh stage-transition <id> validate ship` exit 0 confirmed
228
+ 5. Context check: Run `bash scripts/beads-context.sh validate <id>` and address any warnings
229
+ 6. Stage transition: Run the following → exit 0 confirmed:
230
+ bash scripts/beads-context.sh stage-transition <id> validate ship \
231
+ --summary "<all checks pass/fail summary>" \
232
+ --decisions "<any failures diagnosed and fixed>" \
233
+ --artifacts "<scripts and commands run>" \
234
+ --next "<ship readiness notes>"
229
235
  </HARD-GATE>
230
236
  ```
231
237
 
@@ -142,19 +142,67 @@ Branch: <branch-name> deleted ✓
142
142
  bd create --title="Post-merge: <description of issue>" --type=bug --priority=1
143
143
  ```
144
144
 
145
- ### Step 8: Close Beads Issue (if healthy)
145
+ ### Step 8: Close Beads Issues (if healthy)
146
146
 
147
- If everything is clean, close the Beads issue:
147
+ If everything is clean, close all Beads issues referenced in the merged PR.
148
+
149
+ **Auto-detect beads issues from PR body and branch name:**
150
+
151
+ ```bash
152
+ # Get PR body and branch name
153
+ PR_BODY=$(gh pr view <number> --json body --jq '.body')
154
+ PR_BRANCH=$(gh pr view <number> --json headRefName --jq '.headRefName')
155
+
156
+ # Extract beads IDs from PR body (matches "Closes beads-xxx", "closes forge-xxx", etc.)
157
+ # Patterns: "Closes <prefix>-<id>", "Fixes <prefix>-<id>", "Resolves <prefix>-<id>"
158
+ BEADS_IDS=$(echo "$PR_BODY" | grep -oiE '(closes|fixes|resolves):?\s+[a-z]+-[a-z0-9]+' | grep -oiE '[a-z]+-[a-z0-9]{3,6}$')
159
+
160
+ # Validate each ID exists in beads
161
+ VALID_IDS=""
162
+ for id in $BEADS_IDS; do
163
+ if bd show "$id" >/dev/null 2>&1; then
164
+ VALID_IDS="$VALID_IDS $id"
165
+ fi
166
+ done
167
+ BEADS_IDS="$VALID_IDS"
168
+
169
+ # Also check branch name for beads ID — extract segment after last /
170
+ # then validate with bd show to avoid false matches like "pr-templa"
171
+ BRANCH_SLUG=$(echo "$PR_BRANCH" | sed 's|.*/||')
172
+ BRANCH_ID=$(echo "$BRANCH_SLUG" | grep -oE '[a-z]+-[a-z0-9]{3,6}' | head -1)
173
+ if [ -n "$BRANCH_ID" ] && ! bd show "$BRANCH_ID" >/dev/null 2>&1; then
174
+ BRANCH_ID="" # Not a valid beads ID — discard
175
+ fi
176
+ ```
177
+
178
+ **Close each matched issue:**
148
179
 
149
180
  ```bash
150
- bd close <id> --reason="Merged and verified on master"
181
+ # Close issues found in PR body
182
+ for id in $BEADS_IDS; do
183
+ bd close "$id" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $id"
184
+ done
185
+
186
+ # If no issues found in body, try branch name match (skip if already closed above)
187
+ if [ -z "$BEADS_IDS" ] && [ -n "$BRANCH_ID" ]; then
188
+ bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
189
+ elif [ -n "$BRANCH_ID" ] && ! echo "$BEADS_IDS" | grep -qw "$BRANCH_ID"; then
190
+ bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
191
+ fi
192
+ ```
193
+
194
+ **If no beads issues detected at all**, prompt the user:
195
+ ```
196
+ ⚠ No beads issue ID found in PR body or branch name.
197
+ If this PR closes a beads issue, run: bd close <id> --reason="Merged and verified on master (PR #<number>)"
151
198
  ```
152
199
 
153
200
  ```
154
201
  <HARD-GATE: /verify exit>
155
202
  Do NOT declare /verify complete until:
156
203
  1. gh run list --branch master --limit 3 shows actual CI output (not "should be fine")
157
- 2. If healthy: Beads issue is closed (bd close <id> run and confirmed)
204
+ 2. If healthy: Beads issues extracted from PR body/branch and closed (bd close run and confirmed)
205
+ - If no beads ID found: user was warned and given manual close command
158
206
  3. If issues found: Beads tracking issue created for every problem
159
207
  4. Worktree removed (or confirmed already gone) — OR Step 6 was intentionally skipped because CI was unhealthy; if skipped, state explicitly: "cleanup deferred, CI was not healthy"
160
208
  "It should be fine" is not evidence. Run the command. Show the output.
@@ -275,7 +275,12 @@ Do NOT declare /dev complete until:
275
275
  ### Beads update
276
276
 
277
277
  ```bash
278
- bash scripts/beads-context.sh stage-transition <id> dev validate
278
+ bash scripts/beads-context.sh validate <id>
279
+ bash scripts/beads-context.sh stage-transition <id> dev validate \
280
+ --summary "<N tasks done, M decision gates fired>" \
281
+ --decisions "<key spec gaps and how they were resolved>" \
282
+ --artifacts "<changed source files and test files>" \
283
+ --next "<validation priorities — lint issues, type concerns>"
279
284
  ```
280
285
 
281
286
  ---
@@ -76,6 +76,44 @@ If exit code 0: proceed silently to Phase 1.
76
76
 
77
77
  ---
78
78
 
79
+ ### Parallel PR coordination check (soft block)
80
+
81
+ Before proceeding to Phase 1, check for merge conflicts and dependency issues with in-flight PRs:
82
+
83
+ ```bash
84
+ # Run merge simulation if on a feature branch
85
+ current_branch="$(git branch --show-current)"
86
+ if [[ "$current_branch" != "master" ]] && [[ "$current_branch" != "main" ]]; then
87
+ bash scripts/pr-coordinator.sh merge-sim "$current_branch" 2>&1 || true
88
+ fi
89
+
90
+ # Show current merge queue
91
+ bash scripts/pr-coordinator.sh merge-order 2>&1 || true
92
+
93
+ # Check for stale worktrees (informational)
94
+ bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
95
+ ```
96
+
97
+ If merge conflicts or unmet dependencies are found:
98
+ - Display the findings to the developer
99
+ - Ask: "In-flight PRs have potential conflicts. Proceed with planning anyway? (y/n)"
100
+ - If `n`: exit cleanly, no side effects
101
+ - If `y`: log override via `bd comments add <id> "PR coordination override: proceeding despite in-flight conflicts"`, then continue to Phase 1
102
+
103
+ ---
104
+
105
+ ### Team identity verification
106
+
107
+ Before starting planning, verify team identity is mapped:
108
+
109
+ ```bash
110
+ bash scripts/forge-team/index.sh verify 2>&1 || true
111
+ ```
112
+
113
+ If verify reports issues, address them before proceeding (the output will include `FORGE_AGENT_7f3a:PROMPT:` directives with exact commands to run).
114
+
115
+ ---
116
+
79
117
  ## Phase 1: Design Intent (Brainstorming)
80
118
 
81
119
  **Goal**: Capture WHAT to build — purpose, constraints, success criteria, edge cases, approach.
@@ -153,7 +191,6 @@ Questions to cover (adapt to feature, don't ask mechanical copies):
153
191
  3. **Success criteria** — How will we know it's done? What is the minimum viable result?
154
192
  4. **Edge cases** — What happens when [key dependency] fails / [input] is missing / [state] is ambiguous?
155
193
  5. **Technical preferences** — Library A or B? Pattern X or Y? (when real options exist)
156
- 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?
157
194
 
158
195
  ### Step 3: Propose approaches
159
196
 
@@ -172,7 +209,7 @@ Save to `docs/plans/YYYY-MM-DD-<slug>-design.md` with these sections:
172
209
  - **Approach selected**: which option and why
173
210
  - **Constraints**: hard limits
174
211
  - **Edge cases**: decisions made during Q&A
175
- - **Ambiguity policy**: agent's fallback when spec gaps arise mid-dev
212
+ - **Ambiguity policy**: Use 7-dimension rubric scoring per /dev decision gate. >= 80% confidence: proceed and document. < 80%: stop and ask.
176
213
 
177
214
  Commit the design doc:
178
215
  ```bash
@@ -386,6 +423,9 @@ Expected output: <what running the test/code produces when done>
386
423
  - Feature logic SECOND
387
424
  - Integration/wiring THIRD
388
425
  - Uncertain/ambiguous tasks LAST (so they can be deferred if blocked)
426
+ - **File ownership**: Each task MUST include an `OWNS:` line listing files it will modify
427
+ - No two tasks in the same wave can own the same file
428
+ - Cross-wave ownership is allowed (sequential execution prevents conflicts)
389
429
 
390
430
  **YAGNI filter** (after initial task draft, before saving):
391
431
 
@@ -467,10 +507,15 @@ Do NOT proceed to /dev until ALL are confirmed:
467
507
  </HARD-GATE>
468
508
  ```
469
509
 
470
- After all HARD-GATE items pass, record the stage transition on the Beads issue:
510
+ After all HARD-GATE items pass, validate context and record the stage transition:
471
511
 
472
512
  ```bash
473
- bash scripts/beads-context.sh stage-transition <id> plan dev
513
+ bash scripts/beads-context.sh validate <id>
514
+ bash scripts/beads-context.sh stage-transition <id> plan dev \
515
+ --summary "<design approach chosen, task count>" \
516
+ --decisions "<key trade-offs resolved during Q&A>" \
517
+ --artifacts "docs/plans/YYYY-MM-DD-<slug>-design.md docs/plans/YYYY-MM-DD-<slug>-tasks.md" \
518
+ --next "<first dev task focus area>"
474
519
  ```
475
520
 
476
521
  ---
@@ -479,20 +524,20 @@ bash scripts/beads-context.sh stage-transition <id> plan dev
479
524
 
480
525
  ```
481
526
  ✓ Phase 1: Design intent captured
482
- - Design doc: docs/plans/2026-02-26-stripe-billing-design.md
483
- - Approach: Stripe SDK v4 (selected over v3)
484
- - Ambiguity policy: Make conservative choice + document in decisions log
527
+ - Design doc: docs/plans/<date>-<slug>-design.md
528
+ - Approach: <selected approach> (selected over <alternatives>)
529
+ - Ambiguity policy: Rubric scoring (>= 80% proceed, < 80% ask)
485
530
 
486
531
  ✓ Phase 2: Technical research complete
487
- - OWASP Top 10: 3 risks identified, 3 mitigations planned
488
- - TDD scenarios: 5 identified
489
- - Sources: 8 references
532
+ - OWASP Top 10: <N> risks identified, <N> mitigations planned
533
+ - TDD scenarios: <N> identified
534
+ - Sources: <N> references
490
535
 
491
536
  ✓ Phase 3: Setup complete
492
- - Beads: forge-xyz (in_progress)
493
- - Branch: feat/stripe-billing
494
- - Worktree: .worktrees/stripe-billing (baseline: 24/24 tests passing)
495
- - Task list: docs/plans/2026-02-26-stripe-billing-tasks.md (8 tasks)
537
+ - Beads: <issue-id> (in_progress)
538
+ - Branch: feat/<slug>
539
+ - Worktree: .worktrees/<slug> (baseline: <N>/<N> tests passing)
540
+ - Task list: docs/plans/<date>-<slug>-tasks.md (<N> tasks)
496
541
 
497
542
  ⏸️ Task list ready for review. Confirm to proceed.
498
543
 
@@ -123,6 +123,16 @@ Output:
123
123
  After you merge, run /verify to confirm everything landed correctly.
124
124
  ```
125
125
 
126
+ ### Step 6: Validate Context and Record Stage Transition
127
+
128
+ ```bash
129
+ bash scripts/beads-context.sh validate <id>
130
+ bash scripts/beads-context.sh stage-transition <id> premerge verify \
131
+ --summary "<docs updated, CI green, PR ready>" \
132
+ --artifacts "<updated doc files, PR URL>" \
133
+ --next "<merge instructions for user>"
134
+ ```
135
+
126
136
  ```
127
137
  <HARD-GATE: /premerge exit>
128
138
  Do NOT run gh pr merge.
@@ -364,7 +364,13 @@ Do NOT declare /review complete until:
364
364
  1. bash .claude/scripts/greptile-resolve.sh stats <pr-number> shows "All Greptile threads resolved"
365
365
  2. ALL human reviewer comments are either resolved or have a reply with explanation
366
366
  3. gh pr checks <pr-number> shows all checks passing
367
- 4. Stage transition: Run `bash scripts/beads-context.sh stage-transition <id> review premerge` exit 0 confirmed
367
+ 4. Context check: Run `bash scripts/beads-context.sh validate <id>` and address any warnings
368
+ 5. Stage transition: Run the following → exit 0 confirmed:
369
+ bash scripts/beads-context.sh stage-transition <id> review premerge \
370
+ --summary "<all feedback addressed summary>" \
371
+ --decisions "<comment resolutions — valid fixes and justified rejections>" \
372
+ --artifacts "<fixed files, commit SHAs>" \
373
+ --next "<doc update needs for premerge>"
368
374
  </HARD-GATE>
369
375
  ```
370
376