Inline orchestration workflow for automated bug detection and fixing with Beads integration...
You ARE the orchestrator. Execute this workflow directly without spawning a separate orchestrator agent.
Beads Init → Detection → History Check (HIGH+) → Create Issues → Fix by Priority → Close Issues → Verify → Beads Complete
Max iterations: 3 Priorities: critical → high → medium → low Beads integration: Automatic issue tracking History enrichment: For CRITICAL and HIGH bugs only
Setup directories:
mkdir -p .tmp/current/{plans,changes,backups}
Validate environment:
package.json existstype-check and build scripts existCreate Beads wisp:
bd mol wisp healthcheck
IMPORTANT: Save the wisp ID (e.g., mc2-xxx) for later use.
Initialize TodoWrite:
[
{ "content": "Bug detection", "status": "in_progress", "activeForm": "Detecting bugs" },
{ "content": "Create Beads issues", "status": "pending", "activeForm": "Creating issues" },
{ "content": "Fix critical bugs", "status": "pending", "activeForm": "Fixing critical bugs" },
{ "content": "Fix high priority bugs", "status": "pending", "activeForm": "Fixing high bugs" },
{
"content": "Fix medium priority bugs",
"status": "pending",
"activeForm": "Fixing medium bugs"
},
{ "content": "Fix low priority bugs", "status": "pending", "activeForm": "Fixing low bugs" },
{ "content": "Verification scan", "status": "pending", "activeForm": "Verifying fixes" },
{ "content": "Complete Beads wisp", "status": "pending", "activeForm": "Completing wisp" }
]
Invoke bug-hunter via Task tool:
subagent_type: "bug-hunter"
description: "Detect all bugs"
prompt: |
Scan the entire codebase for bugs:
- Run type-check and build
- Check for security vulnerabilities
- Find dead code and debug statements
- Categorize by priority (critical/high/medium/low)
Generate: bug-hunting-report.md
Return summary with bug counts per priority.
After bug-hunter returns:
bug-hunting-report.mdPurpose: Find previously fixed similar bugs to detect regressions and provide historical context.
When to run: Only for CRITICAL and HIGH priority bugs (skip for MEDIUM/LOW).
Extract keywords from each CRITICAL/HIGH bug title/description
Search Beads history:
# For each bug, search by relevant keywords
bd search "{keywords}" --status closed --limit 5
# Also search by category
bd search "security" --status closed --limit 5 # for security bugs
bd search "dependency" --status closed --limit 5 # for dependency bugs
bd search "{file_path}" --status closed --limit 3 # for file-specific bugs
Evaluate results:
Enrich bug data:
For each bug with history matches:
- Add to bug metadata: related_issues: [mc2-xxx, mc2-yyy]
- Note if potential regression: is_regression: true/false
Store enrichment for Phase 3 and Phase 5:
// .tmp/current/history-enrichment.json
{
"bug_1": {
"related_closed": ["mc2-abc", "mc2-def"],
"is_potential_regression": false,
"context": "Similar security fix in mc2-abc"
}
}
# Bug: "Vulnerable tar package"
bd search "tar" --status closed --limit 5
bd search "vulnerability" --status closed --limit 5
bd search "pnpm override" --status closed --limit 5
# Results: No matches → new bug, no enrichment needed
# Results: mc2-xyz found → add to related_issues
Note: History enrichment is informational, not blocking. Missing history doesn't prevent fixing.
For each bug found, create a Beads issue.
# If related_issues found in Phase 2.5:
bd create "BUG: {bug_title}" -t bug -p {1|2} \
-d "{description}
## History Context
Related closed issues: {related_issues}
Potential regression: {yes/no}
Previous fix context: {context from enrichment}" \
--deps discovered-from:{wisp_id}
# If no history found:
bd create "BUG: {bug_title}" -t bug -p {1|2} -d "{description}" \
--deps discovered-from:{wisp_id}
# Medium bugs (P3)
bd create "BUG: {bug_title}" -t bug -p 3 -d "{description}" \
--deps discovered-from:{wisp_id}
# Low bugs (P4)
bd create "BUG: {bug_title}" -t bug -p 4 -d "{description}" \
--deps discovered-from:{wisp_id}
Track issue IDs in a mapping:
bug_1 → mc2-aaa (related: mc2-xyz)
bug_2 → mc2-bbb
...
Update TodoWrite: mark "Create Beads issues" complete.
Run inline validation:
pnpm type-check
pnpm build
For each priority (critical → high → medium → low):
Check if bugs exist for this priority
Update TodoWrite: mark current priority in_progress
Claim issues in Beads:
bd update {issue_id} --status in_progress
Invoke bug-fixer via Task tool:
subagent_type: "bug-fixer"
description: "Fix {priority} bugs"
prompt: |
Read bug-hunting-report.md and fix all {priority} priority bugs.
## History Context (for CRITICAL/HIGH only)
Check .tmp/current/history-enrichment.json for related closed issues.
If a bug has related_closed issues:
- Review the previous fix approach (bd show {related_id})
- Consider if this is a regression
- Apply learnings from previous fix
For each bug:
1. Backup file before editing
2. If history exists, review previous fix first
3. Implement fix
4. Log change to .tmp/current/changes/bug-changes.json
Generate/update: bug-fixes-implemented.md
Return: count of fixed bugs, count of failed fixes, list of fixed bug IDs.
Quality Gate (inline):
pnpm type-check
pnpm build
Close fixed issues in Beads:
bd close {issue_id_1} {issue_id_2} ... --reason "Fixed in health check"
Update TodoWrite: mark priority complete
Repeat for next priority
After all priorities fixed:
Update TodoWrite: mark verification in_progress
Invoke bug-hunter (verification mode):
subagent_type: "bug-hunter"
description: "Verification scan"
prompt: |
Re-scan codebase after fixes.
Compare with previous bug-hunting-report.md.
Report:
- Bugs fixed (count)
- Bugs remaining (count)
- New bugs introduced (count)
Decision:
Complete Beads wisp:
# If all bugs fixed
bd mol squash {wisp_id}
# If no bugs found (nothing to do)
bd mol burn {wisp_id}
Create issues for remaining bugs (if any):
bd create "REMAINING: {bug_title}" -t bug -p {priority} \
-d "Not fixed in health check. See bug-hunting-report.md"
Generate summary for user:
## Bug Health Check Complete
**Wisp ID**: {wisp_id}
**Iterations**: {count}/3
**Status**: {SUCCESS/PARTIAL}
### Results
- Found: {total} bugs
- Fixed: {fixed} ({percentage}%)
- Remaining: {remaining}
### By Priority
- Critical: {fixed}/{total}
- High: {fixed}/{total}
- Medium: {fixed}/{total}
- Low: {fixed}/{total}
### Beads Issues
- Created: {count}
- Closed: {count}
- Remaining: {count} (issues created for follow-up)
### Validation
- Type Check: {status}
- Build: {status}
### Artifacts
- Detection: `bug-hunting-report.md`
- Fixes: `bug-fixes-implemented.md`
Update TodoWrite: mark wisp complete
SESSION CLOSE PROTOCOL:
git status
git add .
bd sync
git commit -m "fix: health check - {fixed} bugs fixed ({wisp_id})"
bd sync
git push
If quality gate fails:
Rollback available: .tmp/current/changes/bug-changes.json
To rollback:
1. Read changes log
2. Restore files from .tmp/current/backups/
3. Re-run workflow
If worker fails:
If Beads command fails:
| Phase | Beads Action |
|---|---|
| 1. Pre-flight | bd mol wisp healthcheck |
| 2.5. History (HIGH+) | bd search "{keywords}" --status closed |
| 3. After detection | bd create for each bug (with history) |
| 5. Before fix | bd update --status in_progress |
| 5. After fix | bd close --reason "Fixed" |
| 7. Complete | bd mol squash/burn |
| 7. Remaining | bd create for unfixed bugs |
See references/worker-prompts.md for detailed prompts.