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.
- package/.claude/commands/dev.md +6 -1
- package/.claude/commands/plan.md +59 -14
- package/.claude/commands/premerge.md +10 -0
- package/.claude/commands/review.md +7 -1
- package/.claude/commands/ship.md +95 -47
- package/.claude/commands/status.md +42 -0
- package/.claude/commands/validate.md +7 -1
- package/.claude/commands/verify.md +52 -4
- package/.claude/rules/workflow.md +16 -0
- package/.claude/scripts/greptile-resolve.sh +32 -0
- package/.cline/workflows/dev.md +6 -1
- package/.cline/workflows/plan.md +59 -14
- package/.cline/workflows/premerge.md +10 -0
- package/.cline/workflows/review.md +7 -1
- package/.cline/workflows/ship.md +95 -47
- package/.cline/workflows/status.md +42 -0
- package/.cline/workflows/validate.md +7 -1
- package/.cline/workflows/verify.md +52 -4
- package/.codex/skills/dev/SKILL.md +6 -1
- package/.codex/skills/plan/SKILL.md +59 -14
- package/.codex/skills/premerge/SKILL.md +10 -0
- package/.codex/skills/review/SKILL.md +7 -1
- package/.codex/skills/ship/SKILL.md +95 -47
- package/.codex/skills/status/SKILL.md +42 -0
- package/.codex/skills/validate/SKILL.md +7 -1
- package/.codex/skills/verify/SKILL.md +52 -4
- package/.cursor/commands/dev.md +6 -1
- package/.cursor/commands/plan.md +59 -14
- package/.cursor/commands/premerge.md +10 -0
- package/.cursor/commands/review.md +7 -1
- package/.cursor/commands/ship.md +95 -47
- package/.cursor/commands/status.md +42 -0
- package/.cursor/commands/validate.md +7 -1
- package/.cursor/commands/verify.md +52 -4
- package/.cursorrules +149 -0
- package/.github/prompts/dev.prompt.md +6 -1
- package/.github/prompts/plan.prompt.md +59 -14
- package/.github/prompts/premerge.prompt.md +10 -0
- package/.github/prompts/review.prompt.md +7 -1
- package/.github/prompts/ship.prompt.md +95 -47
- package/.github/prompts/status.prompt.md +42 -0
- package/.github/prompts/validate.prompt.md +7 -1
- package/.github/prompts/verify.prompt.md +52 -4
- package/.kilocode/workflows/dev.md +6 -1
- package/.kilocode/workflows/plan.md +59 -14
- package/.kilocode/workflows/premerge.md +10 -0
- package/.kilocode/workflows/review.md +7 -1
- package/.kilocode/workflows/ship.md +95 -47
- package/.kilocode/workflows/status.md +42 -0
- package/.kilocode/workflows/validate.md +7 -1
- package/.kilocode/workflows/verify.md +52 -4
- package/.opencode/commands/dev.md +6 -1
- package/.opencode/commands/plan.md +59 -14
- package/.opencode/commands/premerge.md +10 -0
- package/.opencode/commands/review.md +7 -1
- package/.opencode/commands/ship.md +95 -47
- package/.opencode/commands/status.md +42 -0
- package/.opencode/commands/validate.md +7 -1
- package/.opencode/commands/verify.md +52 -4
- package/.roo/commands/dev.md +6 -1
- package/.roo/commands/plan.md +59 -14
- package/.roo/commands/premerge.md +10 -0
- package/.roo/commands/review.md +7 -1
- package/.roo/commands/ship.md +95 -47
- package/.roo/commands/status.md +42 -0
- package/.roo/commands/validate.md +7 -1
- package/.roo/commands/verify.md +52 -4
- package/AGENTS.md +97 -0
- package/CLAUDE.md +10 -0
- package/README.md +2 -2
- package/bin/forge-cmd.js +5 -1
- package/bin/forge-preflight.js +15 -2
- package/bin/forge.js +211 -9
- package/docs/ENHANCED_ONBOARDING.md +96 -86
- package/docs/ROADMAP.md +2 -2
- package/docs/TOOLCHAIN.md +23 -0
- package/docs/VALIDATION.md +1 -1
- package/lefthook.yml +11 -0
- package/lib/agents/README.md +46 -1
- package/lib/agents/cline.plugin.json +11 -4
- package/lib/agents/codex.plugin.json +2 -2
- package/lib/agents/copilot.plugin.json +5 -5
- package/lib/agents/cursor.plugin.json +1 -1
- package/lib/agents/kilocode.plugin.json +1 -1
- package/lib/agents/opencode.plugin.json +7 -4
- package/lib/agents/roo.plugin.json +10 -3
- package/lib/agents-config.js +129 -81
- package/lib/codex-skills.js +50 -0
- package/lib/commands/_registry.js +173 -0
- package/lib/commands/clean.js +181 -0
- package/lib/commands/commands-reset.js +147 -0
- package/lib/commands/dev.js +84 -0
- package/lib/commands/plan.js +18 -0
- package/lib/commands/push.js +196 -0
- package/lib/commands/recommend.js +1 -1
- package/lib/commands/setup.js +4295 -0
- package/lib/commands/ship.js +20 -0
- package/lib/commands/status.js +210 -44
- package/lib/commands/sync.js +71 -0
- package/lib/commands/team.js +37 -0
- package/lib/commands/test.js +207 -0
- package/lib/commands/validate.js +13 -0
- package/lib/commands/worktree.js +310 -0
- package/lib/detect-agent.js +38 -8
- package/lib/detection-utils.js +405 -0
- package/lib/docs-command.js +51 -0
- package/lib/docs-copy.js +50 -0
- package/lib/file-utils.js +260 -0
- package/lib/forge-context.js +42 -0
- package/lib/freshness-token.js +148 -0
- package/lib/frontmatter.js +79 -0
- package/lib/greptile-match.js +80 -0
- package/lib/husky-migration.js +113 -12
- package/lib/lefthook-check.js +27 -6
- package/lib/plugin-manager.js +225 -72
- package/lib/project-discovery.js +39 -5
- package/lib/reset.js +309 -0
- package/lib/runtime-health.js +305 -0
- package/lib/shell-utils.js +50 -0
- package/lib/task-ownership.js +117 -0
- package/lib/ui-utils.js +43 -0
- package/lib/validation-utils.js +163 -0
- package/lib/workflow/enforce-stage.js +179 -0
- package/lib/workflow/stages.js +201 -0
- package/lib/workflow/state.js +332 -0
- package/opencode.json +67 -0
- package/package.json +16 -6
- package/scripts/beads-context.sh +165 -22
- package/scripts/beads-context.test.js +5 -1
- package/scripts/check-agents.js +103 -0
- package/scripts/check-forge-token.js +98 -0
- package/scripts/conflict-detect.sh +2 -2
- package/scripts/dep-guard.sh +6 -28
- package/scripts/file-index.sh +117 -23
- package/scripts/forge-team/index.sh +86 -0
- package/scripts/forge-team/lib/agent-prompt.sh +52 -0
- package/scripts/forge-team/lib/claim.sh +256 -0
- package/scripts/forge-team/lib/dashboard.sh +341 -0
- package/scripts/forge-team/lib/epic.sh +332 -0
- package/scripts/forge-team/lib/hooks.sh +253 -0
- package/scripts/forge-team/lib/identity.sh +235 -0
- package/scripts/forge-team/lib/sync-github.sh +317 -0
- package/scripts/forge-team/lib/verify.sh +284 -0
- package/scripts/forge-team/lib/workload.sh +296 -0
- package/scripts/forge-team/tests/agent-prompt.test.sh +72 -0
- package/scripts/forge-team/tests/claim.test.sh +179 -0
- package/scripts/forge-team/tests/dashboard.test.sh +170 -0
- package/scripts/forge-team/tests/dispatcher.test.sh +79 -0
- package/scripts/forge-team/tests/epic.test.sh +176 -0
- package/scripts/forge-team/tests/hooks.test.sh +239 -0
- package/scripts/forge-team/tests/identity.test.sh +176 -0
- package/scripts/forge-team/tests/integration.test.sh +371 -0
- package/scripts/forge-team/tests/sync-github.test.sh +209 -0
- package/scripts/forge-team/tests/verify.test.sh +314 -0
- package/scripts/forge-team/tests/workflow-integration.test.sh +43 -0
- package/scripts/forge-team/tests/workload.test.sh +209 -0
- package/scripts/lib/eval-runner.js +39 -0
- package/scripts/lib/jsonl-lock.sh +48 -0
- package/scripts/lib/sanitize.sh +116 -0
- package/scripts/pr-coordinator.sh +756 -0
- package/scripts/smart-status.sh +58 -21
- package/scripts/sync-commands.js +49 -20
- package/scripts/sync-utils.sh +24 -29
- package/scripts/test.js +18 -1
package/.cline/workflows/plan.md
CHANGED
|
@@ -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**:
|
|
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
|
|
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
|
|
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
|
|
480
|
-
- Approach:
|
|
481
|
-
- Ambiguity policy:
|
|
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:
|
|
485
|
-
- TDD scenarios:
|
|
486
|
-
- Sources:
|
|
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:
|
|
490
|
-
- Branch: feat
|
|
491
|
-
- Worktree: .worktrees
|
|
492
|
-
- Task list: docs/plans
|
|
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.
|
|
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
|
|
package/.cline/workflows/ship.md
CHANGED
|
@@ -43,6 +43,36 @@ BEHIND=$(git rev-list --count HEAD..origin/"$BASE")
|
|
|
43
43
|
|
|
44
44
|
This is NOT a full rebase — just a check. The rebase happens in /validate where the full test suite runs afterward.
|
|
45
45
|
|
|
46
|
+
### Parallel PR coordination (soft block)
|
|
47
|
+
|
|
48
|
+
Before creating the PR, check merge readiness:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Run merge simulation against base branch
|
|
52
|
+
bash scripts/pr-coordinator.sh merge-sim "$(git branch --show-current)" 2>&1
|
|
53
|
+
|
|
54
|
+
# Show recommended merge order
|
|
55
|
+
bash scripts/pr-coordinator.sh merge-order 2>&1 || true
|
|
56
|
+
|
|
57
|
+
# Auto-label the PR after creation (called after gh pr create below)
|
|
58
|
+
# bash scripts/pr-coordinator.sh auto-label <issue-id>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If merge simulation finds conflicts:
|
|
62
|
+
- Display conflicted files
|
|
63
|
+
- Ask: "Merge conflicts detected with base branch. These PRs should merge first: [list]. Proceed with PR creation anyway? (y/n)"
|
|
64
|
+
- If `n`: exit cleanly
|
|
65
|
+
- If `y`: log override via `bd comments add <id> "Ship override: creating PR despite merge conflicts"`, then continue
|
|
66
|
+
|
|
67
|
+
After PR creation completes:
|
|
68
|
+
```bash
|
|
69
|
+
# Auto-label the newly created PR
|
|
70
|
+
bash scripts/pr-coordinator.sh auto-label <issue-id>
|
|
71
|
+
|
|
72
|
+
# Check for stale worktrees (informational)
|
|
73
|
+
bash scripts/pr-coordinator.sh stale-worktrees 2>&1 || true
|
|
74
|
+
```
|
|
75
|
+
|
|
46
76
|
### Step 3: Update Beads
|
|
47
77
|
```bash
|
|
48
78
|
bd update <id> --status done
|
|
@@ -57,68 +87,86 @@ Use `--force-with-lease` because `/validate` may have rebased the branch, rewrit
|
|
|
57
87
|
git push --force-with-lease -u origin <branch-name>
|
|
58
88
|
```
|
|
59
89
|
|
|
60
|
-
### Step 5: Create PR
|
|
90
|
+
### Step 5: Create PR Using Project's PR Template
|
|
61
91
|
|
|
62
|
-
|
|
92
|
+
**CRITICAL**: Always use the project's own PR template. Never use a hardcoded body.
|
|
63
93
|
|
|
64
|
-
|
|
94
|
+
**Step 5a: Locate the PR template**
|
|
65
95
|
|
|
96
|
+
Check for a PR template in the project (in order of precedence):
|
|
66
97
|
```bash
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
98
|
+
# Check standard locations
|
|
99
|
+
PR_TEMPLATE=""
|
|
100
|
+
for path in .github/pull_request_template.md .github/PULL_REQUEST_TEMPLATE.md docs/pull_request_template.md pull_request_template.md; do
|
|
101
|
+
if [ -f "$path" ]; then
|
|
102
|
+
PR_TEMPLATE="$path"
|
|
103
|
+
break
|
|
104
|
+
fi
|
|
105
|
+
done
|
|
106
|
+
```
|
|
73
107
|
|
|
74
|
-
|
|
75
|
-
[What this PR does to solve it — approach, not implementation details]
|
|
108
|
+
**Step 5b: Read and populate the template**
|
|
76
109
|
|
|
77
|
-
|
|
78
|
-
|
|
110
|
+
If a PR template exists:
|
|
111
|
+
1. **Read the template file** using the Read tool
|
|
112
|
+
2. **Fill in every section** with actual data from the current PR context:
|
|
113
|
+
- Replace HTML comments (`<!-- ... -->`) with real content
|
|
114
|
+
- Check applicable checkboxes (`- [x]`)
|
|
115
|
+
- Fill in beads issue IDs (replace `beads-xxx` with actual ID)
|
|
116
|
+
- Fill in test results, validation status, and other concrete data
|
|
117
|
+
- Reference the design doc: `docs/plans/YYYY-MM-DD-<slug>-design.md`
|
|
118
|
+
3. **Do NOT remove any sections** — fill them all, even if "N/A"
|
|
119
|
+
4. **Do NOT restructure the template** — keep the project's chosen format
|
|
79
120
|
|
|
80
|
-
|
|
81
|
-
|
|
121
|
+
If no PR template exists, use this minimal fallback:
|
|
122
|
+
```
|
|
123
|
+
## Summary
|
|
124
|
+
[1-3 sentences: what this PR does and why]
|
|
82
125
|
|
|
83
|
-
|
|
84
|
-
|
|
126
|
+
## Changes
|
|
127
|
+
[Bulleted list of key changes]
|
|
85
128
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- Scenarios covered: [list key scenarios]
|
|
129
|
+
## Testing
|
|
130
|
+
[How it was tested, test results]
|
|
89
131
|
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
- Automated scan: [result]
|
|
132
|
+
## Beads
|
|
133
|
+
Closes beads-xxx
|
|
93
134
|
|
|
94
|
-
|
|
95
|
-
|
|
135
|
+
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
136
|
+
```
|
|
96
137
|
|
|
97
|
-
|
|
98
|
-
See: docs/plans/YYYY-MM-DD-<slug>-decisions.md (if any undocumented decisions arose during /dev)
|
|
138
|
+
**Step 5c: Create the PR**
|
|
99
139
|
|
|
100
|
-
|
|
101
|
-
|
|
140
|
+
```bash
|
|
141
|
+
gh pr create --title "<type>: <concise description>" --body "<populated-template-content>"
|
|
142
|
+
```
|
|
102
143
|
|
|
103
|
-
|
|
104
|
-
|
|
144
|
+
Rules for the PR body:
|
|
145
|
+
- **Use the project's template structure** — never substitute your own format
|
|
146
|
+
- **Fill in concrete data** — commit counts, test results, actual file paths, real beads IDs
|
|
147
|
+
- **Check applicable checkboxes** — `[x]` for items that apply, `[ ]` for items that don't
|
|
148
|
+
- **Include "Closes beads-xxx"** in the Beads section (required for auto-close in /verify)
|
|
105
149
|
|
|
106
|
-
###
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
|
|
150
|
+
### Step 6: Validate Context and Record Stage Transition
|
|
151
|
+
```bash
|
|
152
|
+
bash scripts/beads-context.sh validate <id>
|
|
153
|
+
bash scripts/beads-context.sh stage-transition <id> ship review \
|
|
154
|
+
--summary "<PR created, checks pending>" \
|
|
155
|
+
--decisions "<template sections filled, beads linked>" \
|
|
156
|
+
--artifacts "<PR URL, branch name>" \
|
|
157
|
+
--next "<review focus areas>"
|
|
158
|
+
```
|
|
111
159
|
|
|
112
|
-
|
|
160
|
+
### Team sync after PR
|
|
113
161
|
|
|
114
|
-
|
|
115
|
-
EOF
|
|
116
|
-
)"
|
|
117
|
-
```
|
|
162
|
+
After PR is created, sync issue state to GitHub and verify 1:1 mapping:
|
|
118
163
|
|
|
119
|
-
### Step 6: Record Stage Transition
|
|
120
164
|
```bash
|
|
121
|
-
|
|
165
|
+
# Sync issue state to GitHub
|
|
166
|
+
bash scripts/forge-team/index.sh sync 2>&1 || true
|
|
167
|
+
|
|
168
|
+
# Verify 1:1 mapping
|
|
169
|
+
bash scripts/forge-team/index.sh verify 2>&1 || true
|
|
122
170
|
```
|
|
123
171
|
|
|
124
172
|
## Example Output
|
|
@@ -153,9 +201,9 @@ Stage 7: /verify → Post-merge CI check on main
|
|
|
153
201
|
|
|
154
202
|
## Tips
|
|
155
203
|
|
|
156
|
-
- **
|
|
157
|
-
- **
|
|
158
|
-
- **
|
|
159
|
-
- **
|
|
204
|
+
- **Use the project's PR template**: Always read `.github/pull_request_template.md` (or equivalent) and populate it — never substitute your own format
|
|
205
|
+
- **Fill every section**: Even if "N/A" — empty/missing sections cause review friction
|
|
206
|
+
- **Include "Closes beads-xxx"**: Required for auto-close in /verify
|
|
207
|
+
- **Concrete data only**: Test counts, file paths, commit SHAs — not placeholder text
|
|
160
208
|
- **Wait for checks**: Let GitHub Actions, Greptile, SonarCloud run
|
|
161
209
|
- **NO auto-merge**: Always wait for /review phase
|
|
@@ -21,6 +21,7 @@ bash scripts/sync-utils.sh auto-sync
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
### Step 1: Smart Status (ranked issues with conflict detection)
|
|
24
|
+
|
|
24
25
|
```bash
|
|
25
26
|
bash scripts/smart-status.sh
|
|
26
27
|
```
|
|
@@ -28,6 +29,35 @@ This script dynamically computes and displays all issues ranked by composite sco
|
|
|
28
29
|
|
|
29
30
|
For full context on any issue: `bd show <id>`
|
|
30
31
|
|
|
32
|
+
### Step 1b: Reconcile stale in-progress issues
|
|
33
|
+
|
|
34
|
+
Check if any in-progress issues were already merged but not closed (can happen if `/verify` was skipped or backup was restored from stale snapshot):
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Detect default branch dynamically (prefer main over master)
|
|
38
|
+
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
|
|
39
|
+
if [ -z "$DEFAULT_BRANCH" ]; then
|
|
40
|
+
if git rev-parse --verify main >/dev/null 2>&1; then DEFAULT_BRANCH="main"
|
|
41
|
+
elif git rev-parse --verify master >/dev/null 2>&1; then DEFAULT_BRANCH="master"
|
|
42
|
+
else echo "ERROR: No main or master branch found — skipping stale reconciliation" >&2; DEFAULT_BRANCH=""; fi
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# For each in_progress issue, check if its PR was already merged
|
|
46
|
+
if [ -n "$DEFAULT_BRANCH" ]; then
|
|
47
|
+
bd list --status=in_progress --json 2>/dev/null | jq -r '.[].id' | while read id; do
|
|
48
|
+
# Search git log for the issue ID in commit messages (fixed-strings for literal match)
|
|
49
|
+
if git log --oneline --first-parent "$DEFAULT_BRANCH" --fixed-strings --grep="$id" | grep -q .; then
|
|
50
|
+
echo "STALE: $id — found in git history, likely already merged"
|
|
51
|
+
fi
|
|
52
|
+
done
|
|
53
|
+
fi
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If stale issues are found, close them:
|
|
57
|
+
```bash
|
|
58
|
+
bd close <id> --force --reason="Already merged — detected during status reconciliation"
|
|
59
|
+
```
|
|
60
|
+
|
|
31
61
|
### Step 2: Review Recent Commits
|
|
32
62
|
```bash
|
|
33
63
|
git log --oneline -10
|
|
@@ -38,6 +68,18 @@ git log --oneline -10
|
|
|
38
68
|
- **Continuing work**: In-progress issues found, resume where left off
|
|
39
69
|
- **Review needed**: Work marked complete, needs review/merge
|
|
40
70
|
|
|
71
|
+
### Team context
|
|
72
|
+
|
|
73
|
+
Show current developer's active work and team overview:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Show my active issues
|
|
77
|
+
bash scripts/forge-team/index.sh workload --me 2>&1 || true
|
|
78
|
+
|
|
79
|
+
# One-line team summary
|
|
80
|
+
bash scripts/forge-team/index.sh dashboard 2>&1 | head -5 || true
|
|
81
|
+
```
|
|
82
|
+
|
|
41
83
|
## Next Steps
|
|
42
84
|
|
|
43
85
|
- **If starting new work**: Run `/plan <feature-name>`
|
|
@@ -225,7 +225,13 @@ until ALL FOUR show fresh output in this session:
|
|
|
225
225
|
"Should pass", "was passing earlier", and "I'm confident" are not evidence.
|
|
226
226
|
Run the commands. Show the output. THEN declare done.
|
|
227
227
|
|
|
228
|
-
5.
|
|
228
|
+
5. Context check: Run `bash scripts/beads-context.sh validate <id>` and address any warnings
|
|
229
|
+
6. Stage transition: Run the following → exit 0 confirmed:
|
|
230
|
+
bash scripts/beads-context.sh stage-transition <id> validate ship \
|
|
231
|
+
--summary "<all checks pass/fail summary>" \
|
|
232
|
+
--decisions "<any failures diagnosed and fixed>" \
|
|
233
|
+
--artifacts "<scripts and commands run>" \
|
|
234
|
+
--next "<ship readiness notes>"
|
|
229
235
|
</HARD-GATE>
|
|
230
236
|
```
|
|
231
237
|
|
|
@@ -142,19 +142,67 @@ Branch: <branch-name> deleted ✓
|
|
|
142
142
|
bd create --title="Post-merge: <description of issue>" --type=bug --priority=1
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
-
### Step 8: Close Beads
|
|
145
|
+
### Step 8: Close Beads Issues (if healthy)
|
|
146
146
|
|
|
147
|
-
If everything is clean, close
|
|
147
|
+
If everything is clean, close all Beads issues referenced in the merged PR.
|
|
148
|
+
|
|
149
|
+
**Auto-detect beads issues from PR body and branch name:**
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Get PR body and branch name
|
|
153
|
+
PR_BODY=$(gh pr view <number> --json body --jq '.body')
|
|
154
|
+
PR_BRANCH=$(gh pr view <number> --json headRefName --jq '.headRefName')
|
|
155
|
+
|
|
156
|
+
# Extract beads IDs from PR body (matches "Closes beads-xxx", "closes forge-xxx", etc.)
|
|
157
|
+
# Patterns: "Closes <prefix>-<id>", "Fixes <prefix>-<id>", "Resolves <prefix>-<id>"
|
|
158
|
+
BEADS_IDS=$(echo "$PR_BODY" | grep -oiE '(closes|fixes|resolves):?\s+[a-z]+-[a-z0-9]+' | grep -oiE '[a-z]+-[a-z0-9]{3,6}$')
|
|
159
|
+
|
|
160
|
+
# Validate each ID exists in beads
|
|
161
|
+
VALID_IDS=""
|
|
162
|
+
for id in $BEADS_IDS; do
|
|
163
|
+
if bd show "$id" >/dev/null 2>&1; then
|
|
164
|
+
VALID_IDS="$VALID_IDS $id"
|
|
165
|
+
fi
|
|
166
|
+
done
|
|
167
|
+
BEADS_IDS="$VALID_IDS"
|
|
168
|
+
|
|
169
|
+
# Also check branch name for beads ID — extract segment after last /
|
|
170
|
+
# then validate with bd show to avoid false matches like "pr-templa"
|
|
171
|
+
BRANCH_SLUG=$(echo "$PR_BRANCH" | sed 's|.*/||')
|
|
172
|
+
BRANCH_ID=$(echo "$BRANCH_SLUG" | grep -oE '[a-z]+-[a-z0-9]{3,6}' | head -1)
|
|
173
|
+
if [ -n "$BRANCH_ID" ] && ! bd show "$BRANCH_ID" >/dev/null 2>&1; then
|
|
174
|
+
BRANCH_ID="" # Not a valid beads ID — discard
|
|
175
|
+
fi
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Close each matched issue:**
|
|
148
179
|
|
|
149
180
|
```bash
|
|
150
|
-
|
|
181
|
+
# Close issues found in PR body
|
|
182
|
+
for id in $BEADS_IDS; do
|
|
183
|
+
bd close "$id" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $id"
|
|
184
|
+
done
|
|
185
|
+
|
|
186
|
+
# If no issues found in body, try branch name match (skip if already closed above)
|
|
187
|
+
if [ -z "$BEADS_IDS" ] && [ -n "$BRANCH_ID" ]; then
|
|
188
|
+
bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
|
|
189
|
+
elif [ -n "$BRANCH_ID" ] && ! echo "$BEADS_IDS" | grep -qw "$BRANCH_ID"; then
|
|
190
|
+
bd close "$BRANCH_ID" --reason="Merged and verified on master (PR #<number>)" 2>&1 || echo "Warning: could not close $BRANCH_ID"
|
|
191
|
+
fi
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**If no beads issues detected at all**, prompt the user:
|
|
195
|
+
```
|
|
196
|
+
⚠ No beads issue ID found in PR body or branch name.
|
|
197
|
+
If this PR closes a beads issue, run: bd close <id> --reason="Merged and verified on master (PR #<number>)"
|
|
151
198
|
```
|
|
152
199
|
|
|
153
200
|
```
|
|
154
201
|
<HARD-GATE: /verify exit>
|
|
155
202
|
Do NOT declare /verify complete until:
|
|
156
203
|
1. gh run list --branch master --limit 3 shows actual CI output (not "should be fine")
|
|
157
|
-
2. If healthy: Beads
|
|
204
|
+
2. If healthy: Beads issues extracted from PR body/branch and closed (bd close run and confirmed)
|
|
205
|
+
- If no beads ID found: user was warned and given manual close command
|
|
158
206
|
3. If issues found: Beads tracking issue created for every problem
|
|
159
207
|
4. Worktree removed (or confirmed already gone) — OR Step 6 was intentionally skipped because CI was unhealthy; if skipped, state explicitly: "cleanup deferred, CI was not healthy"
|
|
160
208
|
"It should be fine" is not evidence. Run the command. Show the output.
|
|
@@ -275,7 +275,12 @@ Do NOT declare /dev complete until:
|
|
|
275
275
|
### Beads update
|
|
276
276
|
|
|
277
277
|
```bash
|
|
278
|
-
bash scripts/beads-context.sh
|
|
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**:
|
|
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
|
|
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
|
|
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
|
|
483
|
-
- Approach:
|
|
484
|
-
- Ambiguity policy:
|
|
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:
|
|
488
|
-
- TDD scenarios:
|
|
489
|
-
- Sources:
|
|
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:
|
|
493
|
-
- Branch: feat
|
|
494
|
-
- Worktree: .worktrees
|
|
495
|
-
- Task list: docs/plans
|
|
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.
|
|
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
|
|