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
@@ -47,6 +47,36 @@ BEHIND=$(git rev-list --count HEAD..origin/"$BASE")
47
47
 
48
48
  This is NOT a full rebase — just a check. The rebase happens in /validate where the full test suite runs afterward.
49
49
 
50
+ ### Parallel PR coordination (soft block)
51
+
52
+ Before creating the PR, check merge readiness:
53
+
54
+ ```bash
55
+ # Run merge simulation against base branch
56
+ bash scripts/pr-coordinator.sh merge-sim "$(git branch --show-current)" 2>&1
57
+
58
+ # Show recommended merge order
59
+ bash scripts/pr-coordinator.sh merge-order 2>&1 || true
60
+
61
+ # Auto-label the PR after creation (called after gh pr create below)
62
+ # bash scripts/pr-coordinator.sh auto-label <issue-id>
63
+ ```
64
+
65
+ If merge simulation finds conflicts:
66
+ - Display conflicted files
67
+ - Ask: "Merge conflicts detected with base branch. These PRs should merge first: [list]. Proceed with PR creation anyway? (y/n)"
68
+ - If `n`: exit cleanly
69
+ - If `y`: log override via `bd comments add <id> "Ship override: creating PR despite merge conflicts"`, then continue
70
+
71
+ After PR creation completes:
72
+ ```bash
73
+ # Auto-label the newly created PR
74
+ bash scripts/pr-coordinator.sh auto-label <issue-id>
75
+
76
+ # Check for stale worktrees (informational)
77
+ bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
78
+ ```
79
+
50
80
  ### Step 3: Update Beads
51
81
  ```bash
52
82
  bd update <id> --status done
@@ -61,68 +91,86 @@ Use `--force-with-lease` because `/validate` may have rebased the branch, rewrit
61
91
  git push --force-with-lease -u origin <branch-name>
62
92
  ```
63
93
 
64
- ### Step 5: Create PR
94
+ ### Step 5: Create PR Using Project's PR Template
65
95
 
66
- 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.
96
+ **CRITICAL**: Always use the project's own PR template. Never use a hardcoded body.
67
97
 
68
- If no Beads issue exists (hotfix, external contribution), skip the "Closes" line.
98
+ **Step 5a: Locate the PR template**
69
99
 
100
+ Check for a PR template in the project (in order of precedence):
70
101
  ```bash
71
- gh pr create --title "<type>: <concise description>" --body "$(cat <<'EOF'
72
- ## Problem
73
- [What was broken, what need existed, or what user pain this addresses]
74
-
75
- ## Root Cause
76
- [Why it happened, why it was missing, or what gap existed]
102
+ # Check standard locations
103
+ PR_TEMPLATE=""
104
+ for path in .github/pull_request_template.md .github/PULL_REQUEST_TEMPLATE.md docs/pull_request_template.md pull_request_template.md; do
105
+ if [ -f "$path" ]; then
106
+ PR_TEMPLATE="$path"
107
+ break
108
+ fi
109
+ done
110
+ ```
77
111
 
78
- ## Fix
79
- [What this PR does to solve it — approach, not implementation details]
112
+ **Step 5b: Read and populate the template**
80
113
 
81
- ## Value
82
- [Who benefits, what improves, what risk is removed]
114
+ If a PR template exists:
115
+ 1. **Read the template file** using the Read tool
116
+ 2. **Fill in every section** with actual data from the current PR context:
117
+ - Replace HTML comments (`<!-- ... -->`) with real content
118
+ - Check applicable checkboxes (`- [x]`)
119
+ - Fill in beads issue IDs (replace `beads-xxx` with actual ID)
120
+ - Fill in test results, validation status, and other concrete data
121
+ - Reference the design doc: `docs/plans/YYYY-MM-DD-<slug>-design.md`
122
+ 3. **Do NOT remove any sections** — fill them all, even if "N/A"
123
+ 4. **Do NOT restructure the template** — keep the project's chosen format
83
124
 
84
- ## Beads
85
- Closes: <issue-id>
125
+ If no PR template exists, use this minimal fallback:
126
+ ```
127
+ ## Summary
128
+ [1-3 sentences: what this PR does and why]
86
129
 
87
- <details>
88
- <summary>Implementation Details</summary>
130
+ ## Changes
131
+ [Bulleted list of key changes]
89
132
 
90
- ### Test Coverage
91
- - Tests: [count] passing
92
- - Scenarios covered: [list key scenarios]
133
+ ## Testing
134
+ [How it was tested, test results]
93
135
 
94
- ### Security Review
95
- - OWASP Top 10: [summary — applicable risks and mitigations]
96
- - Automated scan: [result]
136
+ ## Beads
137
+ Closes beads-xxx
97
138
 
98
- ### Design Doc
99
- See: docs/plans/YYYY-MM-DD-<slug>-design.md
139
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
140
+ ```
100
141
 
101
- ### Decisions Log
102
- See: docs/plans/YYYY-MM-DD-<slug>-decisions.md (if any undocumented decisions arose during /dev)
142
+ **Step 5c: Create the PR**
103
143
 
104
- ### Key Decisions
105
- [From design doc 3-5 key decisions with reasoning]
144
+ ```bash
145
+ gh pr create --title "<type>: <concise description>" --body "<populated-template-content>"
146
+ ```
106
147
 
107
- ### Documentation Updated
108
- [List docs updated in this PR, or "None no doc-facing changes"]
148
+ Rules for the PR body:
149
+ - **Use the project's template structure** never substitute your own format
150
+ - **Fill in concrete data** — commit counts, test results, actual file paths, real beads IDs
151
+ - **Check applicable checkboxes** — `[x]` for items that apply, `[ ]` for items that don't
152
+ - **Include "Closes beads-xxx"** in the Beads section (required for auto-close in /verify)
109
153
 
110
- ### Validation
111
- - [x] Type check passing
112
- - [x] Lint passing (0 errors, 0 warnings)
113
- - [x] All tests passing
114
- - [x] Security review completed
154
+ ### Step 6: Validate Context and Record Stage Transition
155
+ ```bash
156
+ bash scripts/beads-context.sh validate <id>
157
+ bash scripts/beads-context.sh stage-transition <id> ship review \
158
+ --summary "<PR created, checks pending>" \
159
+ --decisions "<template sections filled, beads linked>" \
160
+ --artifacts "<PR URL, branch name>" \
161
+ --next "<review focus areas>"
162
+ ```
115
163
 
116
- </details>
164
+ ### Team sync after PR
117
165
 
118
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
119
- EOF
120
- )"
121
- ```
166
+ After PR is created, sync issue state to GitHub and verify 1:1 mapping:
122
167
 
123
- ### Step 6: Record Stage Transition
124
168
  ```bash
125
- bash scripts/beads-context.sh stage-transition <id> ship review
169
+ # Sync issue state to GitHub
170
+ bash scripts/forge-team/index.sh sync 2>&1 || true
171
+
172
+ # Verify 1:1 mapping
173
+ bash scripts/forge-team/index.sh verify 2>&1 || true
126
174
  ```
127
175
 
128
176
  ## Example Output
@@ -157,9 +205,9 @@ Stage 7: /verify → Post-merge CI check on main
157
205
 
158
206
  ## Tips
159
207
 
160
- - **Lead with why**: Problem Root Cause Fix Value is what reviewers need first
161
- - **Collapsible details**: Design doc, decisions log, test coverage go in `<details>` available but not in the way
162
- - **Document security**: OWASP Top 10 review in collapsible section
163
- - **Test coverage**: Show all test scenarios passing
208
+ - **Use the project's PR template**: Always read `.github/pull_request_template.md` (or equivalent) and populate it never substitute your own format
209
+ - **Fill every section**: Even if "N/A"empty/missing sections cause review friction
210
+ - **Include "Closes beads-xxx"**: Required for auto-close in /verify
211
+ - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
164
212
  - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
165
213
  - **NO auto-merge**: Always wait for /review phase
@@ -25,6 +25,7 @@ bash scripts/sync-utils.sh auto-sync
25
25
  ```
26
26
 
27
27
  ### Step 1: Smart Status (ranked issues with conflict detection)
28
+
28
29
  ```bash
29
30
  bash scripts/smart-status.sh
30
31
  ```
@@ -32,6 +33,35 @@ This script dynamically computes and displays all issues ranked by composite sco
32
33
 
33
34
  For full context on any issue: `bd show <id>`
34
35
 
36
+ ### Step 1b: Reconcile stale in-progress issues
37
+
38
+ 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):
39
+
40
+ ```bash
41
+ # Detect default branch dynamically (prefer main over master)
42
+ DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
43
+ if [ -z "$DEFAULT_BRANCH" ]; then
44
+ if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
45
+ elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
46
+ else echo "ERROR: No main or master branch found — skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
47
+ fi
48
+
49
+ # For each in_progress issue, check if its PR was already merged
50
+ if [ -n "$DEFAULT_BRANCH" ]; then
51
+ bd list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
52
+ # Search git log for the issue ID in commit messages (fixed-strings for literal match)
53
+ if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
54
+ echo "STALE: $id — found in git history, likely already merged"
55
+ fi
56
+ done
57
+ fi
58
+ ```
59
+
60
+ If stale issues are found, close them:
61
+ ```bash
62
+ bd close <id> --force --reason="Already merged — detected during status reconciliation"
63
+ ```
64
+
35
65
  ### Step 2: Review Recent Commits
36
66
  ```bash
37
67
  git log --oneline -10
@@ -42,6 +72,18 @@ git log --oneline -10
42
72
  - **Continuing work**: In-progress issues found, resume where left off
43
73
  - **Review needed**: Work marked complete, needs review/merge
44
74
 
75
+ ### Team context
76
+
77
+ Show current developer's active work and team overview:
78
+
79
+ ```bash
80
+ # Show my active issues
81
+ bash scripts/forge-team/index.sh workload --me 2>&1 || true
82
+
83
+ # One-line team summary
84
+ bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
85
+ ```
86
+
45
87
  ## Next Steps
46
88
 
47
89
  - **If starting new work**: Run `/plan <feature-name>`
@@ -229,7 +229,13 @@ until ALL FOUR show fresh output in this session:
229
229
  "Should pass", "was passing earlier", and "I'm confident" are not evidence.
230
230
  Run the commands. Show the output. THEN declare done.
231
231
 
232
- 5. Stage transition: Run `bash scripts/beads-context.sh stage-transition <id> validate ship` exit 0 confirmed
232
+ 5. Context check: Run `bash scripts/beads-context.sh validate <id>` and address any warnings
233
+ 6. Stage transition: Run the following → exit 0 confirmed:
234
+ bash scripts/beads-context.sh stage-transition <id> validate ship \
235
+ --summary "<all checks pass/fail summary>" \
236
+ --decisions "<any failures diagnosed and fixed>" \
237
+ --artifacts "<scripts and commands run>" \
238
+ --next "<ship readiness notes>"
233
239
  </HARD-GATE>
234
240
  ```
235
241
 
@@ -146,19 +146,67 @@ Branch: <branch-name> deleted ✓
146
146
  bd create --title="Post-merge: <description of issue>" --type=bug --priority=1
147
147
  ```
148
148
 
149
- ### Step 8: Close Beads Issue (if healthy)
149
+ ### Step 8: Close Beads Issues (if healthy)
150
150
 
151
- If everything is clean, close the Beads issue:
151
+ If everything is clean, close all Beads issues referenced in the merged PR.
152
+
153
+ **Auto-detect beads issues from PR body and branch name:**
154
+
155
+ ```bash
156
+ # Get PR body and branch name
157
+ PR_BODY=$(gh pr view <number> --json body --jq '.body')
158
+ PR_BRANCH=$(gh pr view <number> --json headRefName --jq '.headRefName')
159
+
160
+ # Extract beads IDs from PR body (matches "Closes beads-xxx", "closes forge-xxx", etc.)
161
+ # Patterns: "Closes <prefix>-<id>", "Fixes <prefix>-<id>", "Resolves <prefix>-<id>"
162
+ 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}$')
163
+
164
+ # Validate each ID exists in beads
165
+ VALID_IDS=""
166
+ for id in $BEADS_IDS; do
167
+ if bd show "$id" >/dev/null 2>&1; then
168
+ VALID_IDS="$VALID_IDS $id"
169
+ fi
170
+ done
171
+ BEADS_IDS="$VALID_IDS"
172
+
173
+ # Also check branch name for beads ID — extract segment after last /
174
+ # then validate with bd show to avoid false matches like "pr-templa"
175
+ BRANCH_SLUG=$(echo "$PR_BRANCH" | sed 's|.*/||')
176
+ BRANCH_ID=$(echo "$BRANCH_SLUG" | grep -oE '[a-z]+-[a-z0-9]{3,6}' | head -1)
177
+ if [ -n "$BRANCH_ID" ] && ! bd show "$BRANCH_ID" >/dev/null 2>&1; then
178
+ BRANCH_ID="" # Not a valid beads ID — discard
179
+ fi
180
+ ```
181
+
182
+ **Close each matched issue:**
152
183
 
153
184
  ```bash
154
- bd close <id> --reason="Merged and verified on master"
185
+ # Close issues found in PR body
186
+ for id in $BEADS_IDS; do
187
+ bd close "$id" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $id"
188
+ done
189
+
190
+ # If no issues found in body, try branch name match (skip if already closed above)
191
+ if [ -z "$BEADS_IDS" ] && [ -n "$BRANCH_ID" ]; then
192
+ bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
193
+ elif [ -n "$BRANCH_ID" ] && ! echo "$BEADS_IDS" | grep -qw "$BRANCH_ID"; then
194
+ bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
195
+ fi
196
+ ```
197
+
198
+ **If no beads issues detected at all**, prompt the user:
199
+ ```
200
+ ⚠ No beads issue ID found in PR body or branch name.
201
+ If this PR closes a beads issue, run: bd close <id> --reason="Merged and verified on master (PR #<number>)"
155
202
  ```
156
203
 
157
204
  ```
158
205
  <HARD-GATE: /verify exit>
159
206
  Do NOT declare /verify complete until:
160
207
  1. gh run list --branch master --limit 3 shows actual CI output (not "should be fine")
161
- 2. If healthy: Beads issue is closed (bd close <id> run and confirmed)
208
+ 2. If healthy: Beads issues extracted from PR body/branch and closed (bd close run and confirmed)
209
+ - If no beads ID found: user was warned and given manual close command
162
210
  3. If issues found: Beads tracking issue created for every problem
163
211
  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"
164
212
  "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