a6610a022c
Two new long-lived sidecars folded into the dispatcher launcher, each gated by an env var for safe enable/disable: **Conflict driver** (``DISPATCHERS_DISABLE_CONFLICT_DRIVE``, default enabled). Watches Forgejo for ``auto/needs-conflict-resolution`` labels, dispatches ``conflict-resolver-worker`` (the new agent; bound to ``local-claude/claude-opus-4-6`` for high-quality rebases) to rebase + resolve conflicts, force-with-leases the result, and clears the label. Decoupled from approval — keeps PRs mergeable so the merge driver doesn't have to wait at approval time. **Merge driver** (``DISPATCHERS_DISABLE_MERGE_DRIVE``, default DISABLED in this test launcher to avoid accidental merges during validation runs). Watches Forgejo for APPROVED PRs without blocking labels, rebases against current master, runs the local CI gate, merges via squash with force-with-lease semantics. Terminal stage of the pipeline. Both sidecars follow the existing warmer pattern: best-effort respawn on failure, no contribution to the dispatcher crash-loop budget, clean shutdown on launcher exit. PRs that get ``auto/needs-conflict-resolution`` would sit forever without the conflict-driver sidecar — the implementer and reviewer don't act on that label. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>