fix: feat(20a): disinto hire-an-agent subcommand + retrofit dev-qwen (#84)
This commit is contained in:
parent
2436e70441
commit
aff0aada81
1 changed files with 175 additions and 0 deletions
175
formulas/dev.toml
Normal file
175
formulas/dev.toml
Normal file
|
|
@ -0,0 +1,175 @@
|
||||||
|
# formulas/dev.toml — Dev agent formula (issue implementation)
|
||||||
|
#
|
||||||
|
# Executed by dev/dev-agent.sh via tmux session with Claude.
|
||||||
|
# dev-agent.sh is called by dev-poll.sh which finds the next ready issue
|
||||||
|
# from the backlog (priority tier first, then plain backlog).
|
||||||
|
#
|
||||||
|
# Steps: preflight → implement → CI → review → merge → journal
|
||||||
|
#
|
||||||
|
# Key behaviors:
|
||||||
|
# - Creates worktree for isolation
|
||||||
|
# - Uses tmux session for persistent Claude interaction
|
||||||
|
# - Phase-file signaling for orchestrator coordination
|
||||||
|
# - Auto-retry on CI failures (max 3 attempts)
|
||||||
|
# - Direct-merge for approved PRs (bypasses lock)
|
||||||
|
|
||||||
|
name = "dev"
|
||||||
|
description = "Issue implementation: code, commit, push, address CI/review"
|
||||||
|
version = 1
|
||||||
|
model = "sonnet"
|
||||||
|
|
||||||
|
[context]
|
||||||
|
files = ["AGENTS.md", "dev/AGENTS.md", "lib/env.sh", "lib/pr-lifecycle.sh"]
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "preflight"
|
||||||
|
title = "Review the issue and prepare implementation plan"
|
||||||
|
description = """
|
||||||
|
Read the issue body carefully. Understand:
|
||||||
|
- What needs to be implemented
|
||||||
|
- Any dependencies (check `## Dependencies` section)
|
||||||
|
- Existing code that might be affected
|
||||||
|
- Testing requirements
|
||||||
|
|
||||||
|
Then create a plan:
|
||||||
|
1. What files need to be modified/created
|
||||||
|
2. What tests need to be added
|
||||||
|
3. Any documentation updates
|
||||||
|
|
||||||
|
Check the preflight metrics from supervisor if available:
|
||||||
|
cat "$OPS_REPO_ROOT/journal/supervisor/$(date -u +%Y-%m-%d).md"
|
||||||
|
|
||||||
|
Note: Only proceed if all dependency issues are closed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "implement"
|
||||||
|
title = "Write code to implement the issue"
|
||||||
|
description = """
|
||||||
|
Implement the changes:
|
||||||
|
|
||||||
|
1. Create a new worktree:
|
||||||
|
cd "$PROJECT_REPO_ROOT"
|
||||||
|
git worktree add -b "dev/{agent}-{issue}" ../{agent}-{issue}
|
||||||
|
|
||||||
|
2. Make your changes to the codebase
|
||||||
|
3. Add tests if applicable
|
||||||
|
4. Update documentation if needed
|
||||||
|
5. Commit with conventional commits:
|
||||||
|
git add -A
|
||||||
|
git commit -m "feat({issue}): {description}"
|
||||||
|
|
||||||
|
6. Push to forge:
|
||||||
|
git push -u origin dev/{agent}-{issue}
|
||||||
|
|
||||||
|
7. Create PR via API or web interface
|
||||||
|
- Title: feat({issue}): {description}
|
||||||
|
- Body: Link to issue, describe changes
|
||||||
|
- Labels: backlog, in-progress
|
||||||
|
|
||||||
|
Note: The worktree is preserved on crash for debugging.
|
||||||
|
"""
|
||||||
|
needs = ["preflight"]
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "ci"
|
||||||
|
title = "Wait for CI and address failures"
|
||||||
|
description = """
|
||||||
|
Monitor CI pipeline status via Woodpecker API:
|
||||||
|
curl -sf "${FORGE_API}/api/v1/repos/${FORGE_REPO}/pipelines?branch=dev/{agent}-{issue}"
|
||||||
|
|
||||||
|
Wait for CI to complete. If CI fails:
|
||||||
|
|
||||||
|
1. Read the CI logs to understand the failure
|
||||||
|
2. Fix the issue
|
||||||
|
3. Amend commit and force push
|
||||||
|
4. Track CI attempts (max 3 retries)
|
||||||
|
|
||||||
|
CI fix tracker file:
|
||||||
|
$DISINTO_LOG_DIR/dev/ci-fixes-{project}.json
|
||||||
|
|
||||||
|
On CI success, proceed to review.
|
||||||
|
If CI exhausted (3 failures), escalate via PHASE:escalate.
|
||||||
|
"""
|
||||||
|
needs = ["implement"]
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "review"
|
||||||
|
title = "Address review feedback"
|
||||||
|
description = """
|
||||||
|
Check PR for review comments:
|
||||||
|
curl -sf "${FORGE_API}/api/v1/repos/${FORGE_REPO}/pulls/{pr-number}/comments"
|
||||||
|
|
||||||
|
For each comment:
|
||||||
|
1. Understand the feedback
|
||||||
|
2. Make changes to fix the issue
|
||||||
|
3. Amend commit and force push
|
||||||
|
4. Address the comment in the PR
|
||||||
|
|
||||||
|
If review approves, proceed to merge.
|
||||||
|
If stuck or needs clarification, escalate via PHASE:escalate.
|
||||||
|
"""
|
||||||
|
needs = ["ci"]
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "merge"
|
||||||
|
title = "Merge the PR"
|
||||||
|
description = """
|
||||||
|
Check if PR is approved and CI is green:
|
||||||
|
curl -sf "${FORGE_API}/api/v1/repos/${FORGE_REPO}/pulls/{pr-number}"
|
||||||
|
|
||||||
|
If approved (merged=true or approved_by set):
|
||||||
|
1. Merge the PR:
|
||||||
|
curl -sf -X PUT "${FORGE_API}/api/v1/repos/${FORGE_REPO}/pulls/{pr-number}/merge" \\
|
||||||
|
-d '{"merge_method":"merge"}'
|
||||||
|
|
||||||
|
2. Mirror push to other remotes:
|
||||||
|
mirror_push
|
||||||
|
|
||||||
|
3. Close the issue:
|
||||||
|
curl -sf -X PATCH "${FORGE_API}/api/v1/repos/${FORGE_REPO}/issues/{issue-number}" \\
|
||||||
|
-d '{"state":"closed"}'
|
||||||
|
|
||||||
|
4. Delete the branch:
|
||||||
|
git push origin --delete dev/{agent}-{issue}
|
||||||
|
|
||||||
|
If direct merge is blocked, note in journal and escalate.
|
||||||
|
"""
|
||||||
|
needs = ["review"]
|
||||||
|
|
||||||
|
[[steps]]
|
||||||
|
id = "journal"
|
||||||
|
title = "Write implementation journal"
|
||||||
|
description = """
|
||||||
|
Append a timestamped entry to the dev journal:
|
||||||
|
|
||||||
|
File path:
|
||||||
|
$OPS_REPO_ROOT/journal/dev/$(date -u +%Y-%m-%d).md
|
||||||
|
|
||||||
|
If the file already exists (multiple PRs merged same day), append.
|
||||||
|
If it does not exist, create it.
|
||||||
|
|
||||||
|
Format:
|
||||||
|
## Dev implementation — {issue-number}
|
||||||
|
Time: {timestamp}
|
||||||
|
PR: {pr-number}
|
||||||
|
Branch: dev/{agent}-{issue}
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
- {summary of changes}
|
||||||
|
|
||||||
|
### CI attempts: {n}
|
||||||
|
### Review feedback: {n} comments addressed
|
||||||
|
|
||||||
|
### Lessons learned
|
||||||
|
- {what you learned during implementation}
|
||||||
|
|
||||||
|
### Knowledge added
|
||||||
|
If you discovered something new, add to knowledge:
|
||||||
|
echo "### Lesson title
|
||||||
|
Description." >> "${OPS_REPO_ROOT}/knowledge/{topic}.md"
|
||||||
|
|
||||||
|
After writing the journal, write the phase signal:
|
||||||
|
echo 'PHASE:done' > "$PHASE_FILE"
|
||||||
|
"""
|
||||||
|
needs = ["merge"]
|
||||||
Loading…
Add table
Add a link
Reference in a new issue