From 963d745bde033bed683949ccdae3cd05e3df71fe Mon Sep 17 00:00:00 2001 From: Agent Date: Wed, 1 Apr 2026 07:26:56 +0000 Subject: [PATCH] fix: feat(20a): disinto hire-an-agent subcommand + retrofit dev-qwen (#84) --- formulas/dev.toml | 175 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 formulas/dev.toml diff --git a/formulas/dev.toml b/formulas/dev.toml new file mode 100644 index 0000000..9268180 --- /dev/null +++ b/formulas/dev.toml @@ -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", "lib/ci-helpers.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: + woodpecker_api /repos/${WOODPECKER_REPO_ID}/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}/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}/pulls/{pr-number}" + +If approved (merged=true or approved_by set): +1. Merge the PR: + curl -sf -X PUT "${FORGE_API}/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}/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"] -- 2.49.1