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