autoland: escalation is permanently terminal with no way back in — re-arm a PR the humans have moved on #188
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/coding-lab#188
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up from landing #187 (issue #182). Not a regression in that PR — the gate works as designed; the design has no exit.
Problem
An
outcome='escalated'run makes its PR invisible to the autoland poller forever (EscalatedRunOnBranch,internal/store/afk.go). The docs say re-entry is "exactly one path — a human running the interactive land-pr skill." Three cases break that:(repo_id, branch)with no PR or time scoping, andafk/<N>is derived from the issue number. Discard the escalated run, let a fresh AFK run re-claim the issue, and the brand-new claim PR is invisible from birth — a PR that has never been validated, let alone escalated.All three fail silently:
autolandCandidatescontinues at the gate with no log line, no marker on the new PR, nothing in the SPA. The symptom is "autoland just ignores this PR" with no diagnosis path short of reading the runs table.Why keying on the PR number is not the fix
The obvious fix — key terminality on the PR, not the branch — only fixes case 1. Cases 2 and 3 are the same PR.
The real problem is that escalation is modelled as a permanent property of a thing, when it is a statement about a moment: "as of these N attempts, agents could not finish this." A human commit or a fresh set of instructions is new information that invalidates the statement, and nothing in the design can express that. A better key makes the gate more accurate, not less permanent.
What to build
A re-arm operation, not an un-escalate:
fix/escalatecounters inautoland_attempts(added by #187, migration 0015). Both halves, together: clearing terminality while leaving the fix budget spent would escalate again on the first rejection — the worst outcome, because it looks like the clear silently did not work.Open question — the surface
A product call, not an implementation detail. Options:
labctl/labCLI verbWorth deciding alongside: should re-arm be implicit on some signal (a new human commit on the head branch? the issue flipping back to
ready-for-agent?) rather than an explicit gesture. Implicit is friendlier but re-introduces the auto-requeue smell ADR-0024 forbids — the point of the fix-forward design is that re-engagement carries new information, and "a human pushed something" is arguably exactly that signal. Needs a decision before implementation.Notes