forge-workflow 0.0.8 → 0.0.9

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 (57) hide show
  1. package/.claude/commands/premerge.md +2 -2
  2. package/.claude/commands/review.md +5 -2
  3. package/.claude/commands/ship.md +4 -3
  4. package/.claude/rules/greptile-review-process.md +4 -4
  5. package/.cline/workflows/premerge.md +2 -2
  6. package/.cline/workflows/review.md +5 -2
  7. package/.cline/workflows/ship.md +4 -3
  8. package/.codex/skills/premerge/SKILL.md +2 -2
  9. package/.codex/skills/review/SKILL.md +5 -2
  10. package/.codex/skills/ship/SKILL.md +4 -3
  11. package/.cursor/commands/premerge.md +2 -2
  12. package/.cursor/commands/review.md +5 -2
  13. package/.cursor/commands/ship.md +4 -3
  14. package/.github/prompts/premerge.prompt.md +2 -2
  15. package/.github/prompts/review.prompt.md +5 -2
  16. package/.github/prompts/ship.prompt.md +4 -3
  17. package/.github/workflows/beads-to-github.yml +1 -1
  18. package/.github/workflows/github-to-beads.yml +1 -1
  19. package/.kilocode/workflows/premerge.md +2 -2
  20. package/.kilocode/workflows/review.md +5 -2
  21. package/.kilocode/workflows/ship.md +4 -3
  22. package/.opencode/commands/premerge.md +2 -2
  23. package/.opencode/commands/review.md +5 -2
  24. package/.opencode/commands/ship.md +4 -3
  25. package/.roo/commands/premerge.md +2 -2
  26. package/.roo/commands/review.md +5 -2
  27. package/.roo/commands/ship.md +4 -3
  28. package/AGENTS.md +9 -9
  29. package/README.md +12 -6
  30. package/bin/forge.js +14 -3
  31. package/docs/BEADS_GITHUB_SYNC.md +6 -2
  32. package/docs/EXAMPLES.md +22 -22
  33. package/docs/ROADMAP.md +3 -3
  34. package/docs/TOOLCHAIN.md +60 -52
  35. package/lib/agents/codex.plugin.json +3 -0
  36. package/lib/agents-config.js +18 -12
  37. package/lib/codex-skills.js +54 -1
  38. package/lib/commands/plan.js +5 -2
  39. package/lib/commands/setup.js +231 -17
  40. package/lib/commands/ship.js +188 -5
  41. package/lib/commands/status.js +20 -33
  42. package/lib/commands/test.js +90 -25
  43. package/lib/commands/validate.js +218 -1
  44. package/lib/setup-action-log.js +2 -0
  45. package/lib/setup-summary-renderer.js +15 -11
  46. package/lib/workflow/enforce-stage.js +12 -8
  47. package/lib/workflow/state-manager.js +193 -0
  48. package/package.json +1 -1
  49. package/scripts/dep-guard.sh +11 -1
  50. package/scripts/forge-team/lib/hooks.sh +1 -1
  51. package/scripts/forge-team/lib/verify.sh +1 -1
  52. package/scripts/forge-team/lib/workload.sh +56 -27
  53. package/scripts/forge-team/tests/workload.test.sh +35 -4
  54. package/scripts/github-beads-sync/run-bd.mjs +4 -2
  55. package/scripts/smart-status.sh +10 -1
  56. package/scripts/sync-utils.sh +39 -0
  57. package/scripts/test.js +144 -38
@@ -94,7 +94,7 @@ git commit -m "docs: update documentation for <feature-name>
94
94
  git push
95
95
  ```
96
96
 
97
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
97
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
98
98
 
99
99
  ### Step 4: Sync Beads
100
100
 
@@ -153,7 +153,7 @@ Do NOT suggest merging.
153
153
  - README.md: Features list updated
154
154
  - CLAUDE.md: USER section updated with new pattern
155
155
  - Committed: docs: update documentation for auth-refresh
156
- ✓ CI re-triggered after doc push — all checks still passing
156
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
157
157
  ✓ Beads synced
158
158
 
159
159
  ✅ PR #89 is ready to merge
@@ -298,10 +298,13 @@ git push
298
298
  ### Step 9: Verify ALL Checks Pass
299
299
 
300
300
  ```bash
301
- # Wait for checks to complete
301
+ # Check status immediately, then poll for at most 60 seconds
302
302
  gh pr checks <pr-number>
303
303
 
304
- # Ensure all status checks are green:
304
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
305
+ # when CI finishes or new review feedback appears.
306
+ #
307
+ # Ensure all completed status checks are green:
305
308
  # ✓ GitHub Actions workflows
306
309
  # ✓ Greptile review (no unresolved critical comments)
307
310
  # ✓ SonarCloud quality gate
@@ -184,9 +184,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
184
184
  - Beads linked: forge-xyz
185
185
  - Implementation details in collapsible section
186
186
 
187
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
187
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
188
+ Poll for up to 60 seconds. If checks are still pending, stop here.
188
189
 
189
- Next: /review <pr-number> (after automated checks complete)
190
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
190
191
  ```
191
192
 
192
193
  ## Integration with Workflow
@@ -208,5 +209,5 @@ Stage 7: /verify → Post-merge CI check on main
208
209
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
209
210
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
210
211
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
211
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
212
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
212
213
  - **NO auto-merge**: Always wait for /review phase
@@ -131,7 +131,7 @@ bash .claude/scripts/greptile-resolve.sh stats <pr-number>
131
131
 
132
132
  **Should show**: "✓ All Greptile threads resolved!"
133
133
 
134
- ### Step 4: Push Changes & Wait for Re-review
134
+ ### Step 4: Push Changes & Poll Briefly for Re-review
135
135
 
136
136
  ```bash
137
137
  git push
@@ -188,7 +188,7 @@ $ git push
188
188
  - **Reply to EACH comment thread** using the script (not as separate PR comment)
189
189
  - **Mark EACH thread as resolved** after fixing using the script
190
190
  - **Track progress** (X of Y fixed) in your notes
191
- - **Wait for Greptile re-review** after pushing fixes
191
+ - **Poll for Greptile re-review for at most 60 seconds** after pushing fixes, then stop and hand off if it is still pending
192
192
  - **Use comment ID for replies**, thread ID for resolving
193
193
  - **Commit fixes BEFORE replying** so you can reference commit SHA
194
194
 
@@ -251,7 +251,7 @@ The `/review` command should now include these steps:
251
251
  - Fix each issue
252
252
  - Reply and resolve systematically
253
253
  3. Verify all threads resolved before declaring review complete
254
- 4. Push changes and wait for Greptile re-review
254
+ 4. Push changes and poll briefly for Greptile re-review
255
255
 
256
256
  ---
257
257
 
@@ -271,7 +271,7 @@ The `/review` command should now include these steps:
271
271
 
272
272
  ### Greptile score not updating after fixes
273
273
  **Cause**: Must push commits to trigger re-analysis
274
- **Solution**: `git push` and wait 2-3 minutes for Greptile re-scan
274
+ **Solution**: `git push`, check once immediately, and poll for up to 60 seconds. If Greptile is still pending after that, stop and wait for the user to resume later.
275
275
 
276
276
  ---
277
277
 
@@ -91,7 +91,7 @@ git commit -m "docs: update documentation for <feature-name>
91
91
  git push
92
92
  ```
93
93
 
94
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
94
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
95
95
 
96
96
  ### Step 4: Sync Beads
97
97
 
@@ -150,7 +150,7 @@ Do NOT suggest merging.
150
150
  - README.md: Features list updated
151
151
  - CLAUDE.md: USER section updated with new pattern
152
152
  - Committed: docs: update documentation for auth-refresh
153
- ✓ CI re-triggered after doc push — all checks still passing
153
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
154
154
  ✓ Beads synced
155
155
 
156
156
  ✅ PR #89 is ready to merge
@@ -295,10 +295,13 @@ git push
295
295
  ### Step 9: Verify ALL Checks Pass
296
296
 
297
297
  ```bash
298
- # Wait for checks to complete
298
+ # Check status immediately, then poll for at most 60 seconds
299
299
  gh pr checks <pr-number>
300
300
 
301
- # Ensure all status checks are green:
301
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
302
+ # when CI finishes or new review feedback appears.
303
+ #
304
+ # Ensure all completed status checks are green:
302
305
  # ✓ GitHub Actions workflows
303
306
  # ✓ Greptile review (no unresolved critical comments)
304
307
  # ✓ SonarCloud quality gate
@@ -181,9 +181,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
181
181
  - Beads linked: forge-xyz
182
182
  - Implementation details in collapsible section
183
183
 
184
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
184
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
185
+ Poll for up to 60 seconds. If checks are still pending, stop here.
185
186
 
186
- Next: /review <pr-number> (after automated checks complete)
187
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
187
188
  ```
188
189
 
189
190
  ## Integration with Workflow
@@ -205,5 +206,5 @@ Stage 7: /verify → Post-merge CI check on main
205
206
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
206
207
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
207
208
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
208
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
209
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
209
210
  - **NO auto-merge**: Always wait for /review phase
@@ -94,7 +94,7 @@ git commit -m "docs: update documentation for <feature-name>
94
94
  git push
95
95
  ```
96
96
 
97
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
97
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
98
98
 
99
99
  ### Step 4: Sync Beads
100
100
 
@@ -153,7 +153,7 @@ Do NOT suggest merging.
153
153
  - README.md: Features list updated
154
154
  - CLAUDE.md: USER section updated with new pattern
155
155
  - Committed: docs: update documentation for auth-refresh
156
- ✓ CI re-triggered after doc push — all checks still passing
156
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
157
157
  ✓ Beads synced
158
158
 
159
159
  ✅ PR #89 is ready to merge
@@ -298,10 +298,13 @@ git push
298
298
  ### Step 9: Verify ALL Checks Pass
299
299
 
300
300
  ```bash
301
- # Wait for checks to complete
301
+ # Check status immediately, then poll for at most 60 seconds
302
302
  gh pr checks <pr-number>
303
303
 
304
- # Ensure all status checks are green:
304
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
305
+ # when CI finishes or new review feedback appears.
306
+ #
307
+ # Ensure all completed status checks are green:
305
308
  # ✓ GitHub Actions workflows
306
309
  # ✓ Greptile review (no unresolved critical comments)
307
310
  # ✓ SonarCloud quality gate
@@ -184,9 +184,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
184
184
  - Beads linked: forge-xyz
185
185
  - Implementation details in collapsible section
186
186
 
187
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
187
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
188
+ Poll for up to 60 seconds. If checks are still pending, stop here.
188
189
 
189
- Next: /review <pr-number> (after automated checks complete)
190
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
190
191
  ```
191
192
 
192
193
  ## Integration with Workflow
@@ -208,5 +209,5 @@ Stage 7: /verify → Post-merge CI check on main
208
209
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
209
210
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
210
211
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
211
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
212
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
212
213
  - **NO auto-merge**: Always wait for /review phase
@@ -91,7 +91,7 @@ git commit -m "docs: update documentation for <feature-name>
91
91
  git push
92
92
  ```
93
93
 
94
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
94
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
95
95
 
96
96
  ### Step 4: Sync Beads
97
97
 
@@ -150,7 +150,7 @@ Do NOT suggest merging.
150
150
  - README.md: Features list updated
151
151
  - CLAUDE.md: USER section updated with new pattern
152
152
  - Committed: docs: update documentation for auth-refresh
153
- ✓ CI re-triggered after doc push — all checks still passing
153
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
154
154
  ✓ Beads synced
155
155
 
156
156
  ✅ PR #89 is ready to merge
@@ -295,10 +295,13 @@ git push
295
295
  ### Step 9: Verify ALL Checks Pass
296
296
 
297
297
  ```bash
298
- # Wait for checks to complete
298
+ # Check status immediately, then poll for at most 60 seconds
299
299
  gh pr checks <pr-number>
300
300
 
301
- # Ensure all status checks are green:
301
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
302
+ # when CI finishes or new review feedback appears.
303
+ #
304
+ # Ensure all completed status checks are green:
302
305
  # ✓ GitHub Actions workflows
303
306
  # ✓ Greptile review (no unresolved critical comments)
304
307
  # ✓ SonarCloud quality gate
@@ -181,9 +181,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
181
181
  - Beads linked: forge-xyz
182
182
  - Implementation details in collapsible section
183
183
 
184
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
184
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
185
+ Poll for up to 60 seconds. If checks are still pending, stop here.
185
186
 
186
- Next: /review <pr-number> (after automated checks complete)
187
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
187
188
  ```
188
189
 
189
190
  ## Integration with Workflow
@@ -205,5 +206,5 @@ Stage 7: /verify → Post-merge CI check on main
205
206
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
206
207
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
207
208
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
208
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
209
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
209
210
  - **NO auto-merge**: Always wait for /review phase
@@ -96,7 +96,7 @@ git commit -m "docs: update documentation for <feature-name>
96
96
  git push
97
97
  ```
98
98
 
99
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
99
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
100
100
 
101
101
  ### Step 4: Sync Beads
102
102
 
@@ -155,7 +155,7 @@ Do NOT suggest merging.
155
155
  - README.md: Features list updated
156
156
  - CLAUDE.md: USER section updated with new pattern
157
157
  - Committed: docs: update documentation for auth-refresh
158
- ✓ CI re-triggered after doc push — all checks still passing
158
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
159
159
  ✓ Beads synced
160
160
 
161
161
  ✅ PR #89 is ready to merge
@@ -300,10 +300,13 @@ git push
300
300
  ### Step 9: Verify ALL Checks Pass
301
301
 
302
302
  ```bash
303
- # Wait for checks to complete
303
+ # Check status immediately, then poll for at most 60 seconds
304
304
  gh pr checks <pr-number>
305
305
 
306
- # Ensure all status checks are green:
306
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
307
+ # when CI finishes or new review feedback appears.
308
+ #
309
+ # Ensure all completed status checks are green:
307
310
  # ✓ GitHub Actions workflows
308
311
  # ✓ Greptile review (no unresolved critical comments)
309
312
  # ✓ SonarCloud quality gate
@@ -186,9 +186,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
186
186
  - Beads linked: forge-xyz
187
187
  - Implementation details in collapsible section
188
188
 
189
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
189
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
190
+ Poll for up to 60 seconds. If checks are still pending, stop here.
190
191
 
191
- Next: /review <pr-number> (after automated checks complete)
192
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
192
193
  ```
193
194
 
194
195
  ## Integration with Workflow
@@ -210,5 +211,5 @@ Stage 7: /verify → Post-merge CI check on main
210
211
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
211
212
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
212
213
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
213
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
214
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
214
215
  - **NO auto-merge**: Always wait for /review phase
@@ -30,7 +30,7 @@ jobs:
30
30
 
31
31
  - name: Checkout current
32
32
  if: env.SKIP != 'true'
33
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
33
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
34
34
  with:
35
35
  fetch-depth: 0
36
36
 
@@ -20,7 +20,7 @@ jobs:
20
20
  if: github.actor != 'github-actions[bot]'
21
21
  steps:
22
22
  - name: Checkout code
23
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
23
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
24
24
  with:
25
25
  # Need full history for push
26
26
  fetch-depth: 0
@@ -95,7 +95,7 @@ git commit -m "docs: update documentation for <feature-name>
95
95
  git push
96
96
  ```
97
97
 
98
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
98
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
99
99
 
100
100
  ### Step 4: Sync Beads
101
101
 
@@ -154,7 +154,7 @@ Do NOT suggest merging.
154
154
  - README.md: Features list updated
155
155
  - CLAUDE.md: USER section updated with new pattern
156
156
  - Committed: docs: update documentation for auth-refresh
157
- ✓ CI re-triggered after doc push — all checks still passing
157
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
158
158
  ✓ Beads synced
159
159
 
160
160
  ✅ PR #89 is ready to merge
@@ -299,10 +299,13 @@ git push
299
299
  ### Step 9: Verify ALL Checks Pass
300
300
 
301
301
  ```bash
302
- # Wait for checks to complete
302
+ # Check status immediately, then poll for at most 60 seconds
303
303
  gh pr checks <pr-number>
304
304
 
305
- # Ensure all status checks are green:
305
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
306
+ # when CI finishes or new review feedback appears.
307
+ #
308
+ # Ensure all completed status checks are green:
306
309
  # ✓ GitHub Actions workflows
307
310
  # ✓ Greptile review (no unresolved critical comments)
308
311
  # ✓ SonarCloud quality gate
@@ -185,9 +185,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
185
185
  - Beads linked: forge-xyz
186
186
  - Implementation details in collapsible section
187
187
 
188
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
188
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
189
+ Poll for up to 60 seconds. If checks are still pending, stop here.
189
190
 
190
- Next: /review <pr-number> (after automated checks complete)
191
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
191
192
  ```
192
193
 
193
194
  ## Integration with Workflow
@@ -209,5 +210,5 @@ Stage 7: /verify → Post-merge CI check on main
209
210
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
210
211
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
211
212
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
212
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
213
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
213
214
  - **NO auto-merge**: Always wait for /review phase
@@ -94,7 +94,7 @@ git commit -m "docs: update documentation for <feature-name>
94
94
  git push
95
95
  ```
96
96
 
97
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
97
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
98
98
 
99
99
  ### Step 4: Sync Beads
100
100
 
@@ -153,7 +153,7 @@ Do NOT suggest merging.
153
153
  - README.md: Features list updated
154
154
  - CLAUDE.md: USER section updated with new pattern
155
155
  - Committed: docs: update documentation for auth-refresh
156
- ✓ CI re-triggered after doc push — all checks still passing
156
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
157
157
  ✓ Beads synced
158
158
 
159
159
  ✅ PR #89 is ready to merge
@@ -298,10 +298,13 @@ git push
298
298
  ### Step 9: Verify ALL Checks Pass
299
299
 
300
300
  ```bash
301
- # Wait for checks to complete
301
+ # Check status immediately, then poll for at most 60 seconds
302
302
  gh pr checks <pr-number>
303
303
 
304
- # Ensure all status checks are green:
304
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
305
+ # when CI finishes or new review feedback appears.
306
+ #
307
+ # Ensure all completed status checks are green:
305
308
  # ✓ GitHub Actions workflows
306
309
  # ✓ Greptile review (no unresolved critical comments)
307
310
  # ✓ SonarCloud quality gate
@@ -184,9 +184,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
184
184
  - Beads linked: forge-xyz
185
185
  - Implementation details in collapsible section
186
186
 
187
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
187
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
188
+ Poll for up to 60 seconds. If checks are still pending, stop here.
188
189
 
189
- Next: /review <pr-number> (after automated checks complete)
190
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
190
191
  ```
191
192
 
192
193
  ## Integration with Workflow
@@ -208,5 +209,5 @@ Stage 7: /verify → Post-merge CI check on main
208
209
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
209
210
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
210
211
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
211
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
212
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
212
213
  - **NO auto-merge**: Always wait for /review phase
@@ -95,7 +95,7 @@ git commit -m "docs: update documentation for <feature-name>
95
95
  git push
96
96
  ```
97
97
 
98
- ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Wait for checks to pass. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
98
+ ⚠️ **After pushing**: CI will re-trigger (Greptile, SonarCloud, etc.). Poll for up to 60 seconds. If checks are still pending after that, stop and ask the user to return to `/premerge <pr-number>` later. If new Greptile comments appear on the doc changes, run `/review <pr-number>` again.
99
99
 
100
100
  ### Step 4: Sync Beads
101
101
 
@@ -154,7 +154,7 @@ Do NOT suggest merging.
154
154
  - README.md: Features list updated
155
155
  - CLAUDE.md: USER section updated with new pattern
156
156
  - Committed: docs: update documentation for auth-refresh
157
- ✓ CI re-triggered after doc push — all checks still passing
157
+ ✓ CI re-triggered after doc push — checks passed within the 60 second poll window
158
158
  ✓ Beads synced
159
159
 
160
160
  ✅ PR #89 is ready to merge
@@ -299,10 +299,13 @@ git push
299
299
  ### Step 9: Verify ALL Checks Pass
300
300
 
301
301
  ```bash
302
- # Wait for checks to complete
302
+ # Check status immediately, then poll for at most 60 seconds
303
303
  gh pr checks <pr-number>
304
304
 
305
- # Ensure all status checks are green:
305
+ # If checks are still pending after 60 seconds: STOP and tell the user to return
306
+ # when CI finishes or new review feedback appears.
307
+ #
308
+ # Ensure all completed status checks are green:
306
309
  # ✓ GitHub Actions workflows
307
310
  # ✓ Greptile review (no unresolved critical comments)
308
311
  # ✓ SonarCloud quality gate
@@ -185,9 +185,10 @@ bash scripts/forge-team/index.sh verify 2>&1 || true
185
185
  - Beads linked: forge-xyz
186
186
  - Implementation details in collapsible section
187
187
 
188
- ⏸️ PR created, awaiting automated checks (Greptile, SonarCloud, GitHub Actions)
188
+ ⏸️ PR created, checks started (Greptile, SonarCloud, GitHub Actions)
189
+ Poll for up to 60 seconds. If checks are still pending, stop here.
189
190
 
190
- Next: /review <pr-number> (after automated checks complete)
191
+ Next: /review <pr-number> (when automated checks complete or new feedback appears)
191
192
  ```
192
193
 
193
194
  ## Integration with Workflow
@@ -209,5 +210,5 @@ Stage 7: /verify → Post-merge CI check on main
209
210
  - **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
210
211
  - **Include "Closes beads-xxx"**: Required for auto-close in /verify
211
212
  - **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
212
- - **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
213
+ - **Poll briefly, then stop**: Check PR status for up to 60 seconds, then hand off if checks are still pending
213
214
  - **NO auto-merge**: Always wait for /review phase
package/AGENTS.md CHANGED
@@ -232,15 +232,15 @@ This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full
232
232
  ### Quick Reference
233
233
 
234
234
  ```bash
235
- bd ready # Find available work
236
- bd show <id> # View issue details
237
- bd update <id> --claim # Claim work
238
- bd close <id> # Complete work
235
+ forge ready # Find available work
236
+ forge show <id> # View issue details
237
+ forge claim <id> # Claim work
238
+ forge close <id> # Complete work
239
239
  ```
240
240
 
241
241
  ### Rules
242
242
 
243
- - Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists. Exception: `/plan` Phase 3 generates task lists at `docs/plans/YYYY-MM-DD-<slug>-tasks.md` — these are approved artifacts consumed by `/dev`, but `bd` remains the source of truth for issue state. GitHub issues may be used for external/public tracking; CI may sync GitHub issue lifecycle to Beads (see `docs/BEADS_GITHUB_SYNC.md`).
243
+ - Use `forge` as the routine command surface for bd-backed issue tracking and sync workflows — do NOT use TodoWrite, TaskCreate, or markdown TODO lists. Exception: `/plan` Phase 3 generates task lists at `docs/plans/YYYY-MM-DD-<slug>-tasks.md` — these are approved artifacts consumed by `/dev`, but Beads (`bd`) remains the source of truth for issue state and IDs. Use `bd` directly only for operations Forge does not wrap yet, such as `bd init`, `bd comments`, `bd dep`, and `bd dolt *`. GitHub issues may be used for external/public tracking; CI may sync GitHub issue lifecycle to Beads (see `docs/BEADS_GITHUB_SYNC.md`).
244
244
  - Run `bd prime` for detailed command reference and session close protocol
245
245
  - Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files
246
246
 
@@ -255,10 +255,10 @@ bd close <id> # Complete work
255
255
  3. **Update issue status** - Close finished work, update in-progress items
256
256
  4. **PUSH TO REMOTE** - This is MANDATORY:
257
257
  ```bash
258
- git pull --rebase
259
- bd dolt push # requires Dolt-backed Beads run 'bd init' if missing
260
- git push
261
- git status # MUST show "up to date with origin"
258
+ git pull --rebase
259
+ forge sync # wraps the supported Beads sync flow when Beads is configured
260
+ git push
261
+ git status # MUST show "up to date with origin"
262
262
  ```
263
263
  5. **Clean up** - Clear stashes, prune remote branches
264
264
  6. **Verify** - All changes committed AND pushed
package/README.md CHANGED
@@ -402,14 +402,20 @@ gh auth login
402
402
  /premerge <pr> # Complete docs, hand off PR
403
403
  /verify # Post-merge health check
404
404
 
405
- # Beads commands (optional)
406
- bd init # Initialize tracking
407
- bd ready # Find ready work
408
- bd create "title" # Create issue
409
- bd update <id> --status X # Update status
410
- bd sync # Sync with git
405
+ # Issue commands (via Forge)
406
+ bd init # Initialize Beads tracking
407
+ forge ready # Find ready work
408
+ forge create "title" # Create issue
409
+ forge update <id> --status X # Update status
410
+ forge sync # Sync Beads state
411
411
  ```
412
412
 
413
+ For advanced Beads operations that Forge does not wrap yet, use `bd` directly for
414
+ `bd comments`, `bd dep`, and `bd dolt`.
415
+
416
+ Forge is the preferred command surface for routine workflows, but Beads (`bd`)
417
+ remains the underlying source of truth for issue state and IDs.
418
+
413
419
  ---
414
420
 
415
421
  ## License
package/bin/forge.js CHANGED
@@ -139,7 +139,7 @@ function loadAgentsFromPlugins() {
139
139
  agents[id] = {
140
140
  name: plugin.name,
141
141
  description: plugin.description || '',
142
- dirs: Object.values(plugin.directories || {}),
142
+ dirs: getRepoRelativePluginDirectories(plugin),
143
143
  hasCommands: plugin.capabilities?.commands || plugin.setup?.copyCommands || false,
144
144
  hasSkill: plugin.capabilities?.skills || plugin.setup?.createSkill || false,
145
145
  linkFile: plugin.files?.rootConfig || '',
@@ -153,6 +153,17 @@ function loadAgentsFromPlugins() {
153
153
  return agents;
154
154
  }
155
155
 
156
+ function isRepoRelativePluginPath(candidate) {
157
+ return typeof candidate === 'string'
158
+ && candidate.length > 0
159
+ && !path.isAbsolute(candidate)
160
+ && !/^[~$%]/.test(candidate);
161
+ }
162
+
163
+ function getRepoRelativePluginDirectories(plugin) {
164
+ return Object.values(plugin.directories || {}).filter(isRepoRelativePluginPath);
165
+ }
166
+
156
167
  // Agent definitions - loaded from plugin system
157
168
  const AGENTS = loadAgentsFromPlugins();
158
169
 
@@ -2383,7 +2394,7 @@ function displaySetupSummary(selectedAgents) {
2383
2394
 
2384
2395
  // Beads status
2385
2396
  if (isBeadsInitialized()) {
2386
- console.log(' ✓ Beads initialized - Track work: bd ready');
2397
+ console.log(' ✓ Beads initialized - Track work: forge ready');
2387
2398
  } else if (checkForBeads()) {
2388
2399
  console.log(' ! Beads available - Run: bd init');
2389
2400
  } else {
@@ -3336,7 +3347,7 @@ async function setupProjectTools(rl, question) {
3336
3347
  console.log('');
3337
3348
  console.log('• Beads - Git-backed issue tracking');
3338
3349
  console.log(' Persists tasks across sessions, tracks dependencies.');
3339
- console.log(' Command: bd ready, bd create, bd close');
3350
+ console.log(' Command: forge ready, forge create, forge close');
3340
3351
  console.log('');
3341
3352
  console.log('• Skills - Universal SKILL.md management');
3342
3353
  console.log(' Manage AI agent skills across all agents.');