feat(agent): Worktrees bei gemergtem/geschlossenem PR aufräumen und Merge-Konflikte queue'n #10

Closed
opened 2026-07-12 10:29:03 +02:00 by frank · 1 comment
Owner

Kontext

Im --pr-Modus legt forge agent lokale Worktrees unter .forge-worktrees/issue-<n> an (PrepareWorktree). Aktuell wird der Worktree am Ende der Pipeline per defer cleanup() / RemoveWorktree wieder entfernt – unabhängig davon, ob der zugehörige PR noch offen ist.

Für längeres Babysitting (CI-Fixes, Merge-Konflikte) und für verwaiste Worktrees nach Abbruch braucht es einen klaren Lebenszyklus: Worktree behalten, solange der PR offen ist; aufräumen, sobald er gemerged oder geschlossen wurde.

Ziel

  1. Worktree-Cleanup bei PR-Ende

    • Periodisch (z. B. im forge agent watch-Poll) bzw. nach Babysit-Schritten offene Agent-PRs bzw. bekannte Worktrees prüfen.
    • Wenn der zugehörige PR merged oder closed ist: lokalen Worktree entfernen (git worktree remove), optional lokalen Branch löschen, State bereinigen.
    • Orphaned Einträge unter .forge-worktrees/ ohne offenen PR ebenfalls aufräumen (idempotent, best-effort).
  2. Merge-Konflikte beobachten und Beheben einreihen

    • Für offene Agent-PRs (bzw. Worktrees mit bekanntem PR) prüfen, ob der PR gegen die Base-Branch mergeable ist / Konflikte hat (Forgejo-API: mergeable / Konflikt-Status).
    • Bei erkanntem Merge-Konflikt: Fix-Job in die Agent-Queue stellen (kein stilles Verwerfen), analog zum bestehenden CI-Babysit:
      • Issue/PR kommentieren („Merge-Konflikt erkannt, Agent wird erneut ausgeführt …“)
      • Coding-Agent im bestehenden Worktree mit speziellem Conflict-Fix-Prompt starten (Base mergen/rebasen, Konflikte lösen, pushen)
      • Danach erneut Conflict-/CI-Status prüfen
    • Retry-Limit und Backoff analog zu babysitPR / CI-Fixes; nach Exhaustion klar failen und kommentieren.

Akzeptanzkriterien

  • Nach Merge oder Close eines Agent-PRs verschwindet der zugehörige Eintrag unter .forge-worktrees/ (und wird nicht dauerhaft zurückgelassen).
  • Verwaiste Worktrees ohne offenen PR werden beim nächsten Watch-Zyklus aufgeräumt.
  • Offene Agent-PRs mit Merge-Konflikt werden erkannt und als Fix-Lauf gequeued (Kommentar + Agent-Run + Push).
  • Cleanup und Conflict-Handling sind idempotent und stören laufende Agent-Läufe nicht.
  • Wiki/Docs zu forge agent watch / --pr um den neuen Lebenszyklus ergänzen.

Hinweise / Einstiegspunkte

  • internal/agent/gitflow.goPrepareWorktree / RemoveWorktree
  • internal/agent/pipeline.goprepareGit (aktuelles defer cleanup()), babysitPR
  • internal/agent/watcher.go – Poll-Loop als natürlicher Ort für Cleanup + Conflict-Scan
  • Forgejo Pull-API für PR-State (merged/closed) und Mergeability

Out of Scope (ggf. Folge-Issues)

  • Automatisches Löschen remote Branches nach Merge (kann optional sein)
  • UI-Anzeige der Worktree-/Conflict-Queue in der Agent-TUI (nice-to-have)
## Kontext Im `--pr`-Modus legt `forge agent` lokale Worktrees unter `.forge-worktrees/issue-<n>` an (`PrepareWorktree`). Aktuell wird der Worktree am Ende der Pipeline per `defer cleanup()` / `RemoveWorktree` wieder entfernt – unabhängig davon, ob der zugehörige PR noch offen ist. Für längeres Babysitting (CI-Fixes, Merge-Konflikte) und für verwaiste Worktrees nach Abbruch braucht es einen klaren Lebenszyklus: Worktree behalten, solange der PR offen ist; aufräumen, sobald er gemerged oder geschlossen wurde. ## Ziel 1. **Worktree-Cleanup bei PR-Ende** - Periodisch (z. B. im `forge agent watch`-Poll) bzw. nach Babysit-Schritten offene Agent-PRs bzw. bekannte Worktrees prüfen. - Wenn der zugehörige PR **merged** oder **closed** ist: lokalen Worktree entfernen (`git worktree remove`), optional lokalen Branch löschen, State bereinigen. - Orphaned Einträge unter `.forge-worktrees/` ohne offenen PR ebenfalls aufräumen (idempotent, best-effort). 2. **Merge-Konflikte beobachten und Beheben einreihen** - Für offene Agent-PRs (bzw. Worktrees mit bekanntem PR) prüfen, ob der PR gegen die Base-Branch **mergeable** ist / Konflikte hat (Forgejo-API: `mergeable` / Konflikt-Status). - Bei erkanntem Merge-Konflikt: Fix-Job **in die Agent-Queue** stellen (kein stilles Verwerfen), analog zum bestehenden CI-Babysit: - Issue/PR kommentieren („Merge-Konflikt erkannt, Agent wird erneut ausgeführt …“) - Coding-Agent im bestehenden Worktree mit speziellem Conflict-Fix-Prompt starten (Base mergen/rebasen, Konflikte lösen, pushen) - Danach erneut Conflict-/CI-Status prüfen - Retry-Limit und Backoff analog zu `babysitPR` / CI-Fixes; nach Exhaustion klar failen und kommentieren. ## Akzeptanzkriterien - [x] Nach Merge oder Close eines Agent-PRs verschwindet der zugehörige Eintrag unter `.forge-worktrees/` (und wird nicht dauerhaft zurückgelassen). - [x] Verwaiste Worktrees ohne offenen PR werden beim nächsten Watch-Zyklus aufgeräumt. - [x] Offene Agent-PRs mit Merge-Konflikt werden erkannt und als Fix-Lauf gequeued (Kommentar + Agent-Run + Push). - [x] Cleanup und Conflict-Handling sind idempotent und stören laufende Agent-Läufe nicht. - [x] Wiki/Docs zu `forge agent watch` / `--pr` um den neuen Lebenszyklus ergänzen. ## Hinweise / Einstiegspunkte - `internal/agent/gitflow.go` – `PrepareWorktree` / `RemoveWorktree` - `internal/agent/pipeline.go` – `prepareGit` (aktuelles `defer cleanup()`), `babysitPR` - `internal/agent/watcher.go` – Poll-Loop als natürlicher Ort für Cleanup + Conflict-Scan - Forgejo Pull-API für PR-State (`merged`/`closed`) und Mergeability ## Out of Scope (ggf. Folge-Issues) - Automatisches Löschen remote Branches nach Merge (kann optional sein) - UI-Anzeige der Worktree-/Conflict-Queue in der Agent-TUI (nice-to-have)
Author
Owner

🤖 forge agent started

  • Agent: cursor-agent
  • Model: (default)
  • Mode: pr
  • Trigger: assignee=agent
  • Open ToDos: 5

feat(agent): Worktrees bei gemergtem/geschlossenem PR aufräumen und Merge-Konflikte queue'n — Im --pr-Modus legt forge agent lokale Worktrees unter .forge-worktrees/issue-<n> an (PrepareWorktree). Aktuell wird der Worktree am Ende der Pipeline per defer cleanup() / RemoveWorktree

🤖 **forge agent started** - Agent: `cursor-agent` - Model: `(default)` - Mode: `pr` - Trigger: `assignee=agent` - Open ToDos: 5 feat(agent): Worktrees bei gemergtem/geschlossenem PR aufräumen und Merge-Konflikte queue'n — Im `--pr`-Modus legt `forge agent` lokale Worktrees unter `.forge-worktrees/issue-<n>` an (`PrepareWorktree`). Aktuell wird der Worktree am Ende der Pipeline per `defer cleanup()` / `RemoveWorktree`…
frank closed this issue 2026-07-12 11:34:41 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/forgecli#10
No description provided.