feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3)#160
Conversation
…able bot PRs (issue #96, part 3) Adds pr-rebase.sh (detects bot PRs that went mergeable=CONFLICTING against base, excluding feedback/comment-fix/ci-fix candidates, with a per-base-commit anti-livelock budget of 2 attempts before escalating to needs-human) and wires it into loop-tick.sh's verdict chain (rebase sits between ci-fix and advance), loop-daemon.sh's transient unit naming, and loop-event.sh's driver-prompt builder (label claude-rebasing, rebase onto base, force-push-with-lease on clean, abort+escalate on conflict). Also threads rebase_prs into loop-census.sh's cadence telemetry so a rebase-only backlog still ticks FAST, and updates pr-loop.md/pr-loop-self.md's STEP 0 docs to match.
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
26 similar comments
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
26 similar comments
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
|
feat(loop): rebase — automated conflict-after-sibling-merge recovery (issue #96, part 3) (not yet reviewed) |
Summary
Adds automated recovery for bot-owned PR branches that become unmergeable after a sibling PR merges into
mainfirst:pr-rebase.sh— detects a PR whose branch has fallen behind/conflicts withmain, rebases the bot branch ontomain, and force-push-with-lease's the result.loop-tick.sh/loop-daemon.sh/loop-event.shwiring — the rebase step is slotted into the existing tick pipeline, participates in the same census/ceilings bookkeeping as the other recovery actions, and is exercised by the event-driven daemon loop..claude/commands/pr-loop.mdand.claude/self/pr-loop-self.mdupdated to describe the new rebase stage.pr-rebase.test.sh(new) plus updates toloop-tick.test.sh,loop-daemon.test.sh,loop-event.test.sh,loop-census.test.sh,loop-ceilings.test.shcovering the new stage and its interaction with the existing ones.Owner-bound decisions honored
feedback > comment-fix > ci-fix > rebase > advance. Rebase only fires once none of the higher-priority recovery actions apply.--force-with-leaseaccepted as a deliberate, scoped policy exception, used only to force-push the bot's own branch after a rebase ontomain— never touchesmainor any other branch.Gates
Closes #96