Three branches were merged in 63 minutes while main was already red, and every merge commit was red #282
Labels
No labels
agent
agent:ci
agent:done
agent:failed
agent:needs-input
agent:refined
agent:refining
agent:running
agent:shipped
agent:skip
autonomous
autopilot
driven
local
plan
proposal
qa
qa-gap
research
retro
ship
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jeroen/cartopolis#282
Loading…
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?
Found by the 7-day retrospective on #279, reading the Actions task list against
main's history.What happened on 2 September
Three tickets were merged into
maininside 63 minutes. Every branch head wasgreen. Every merge commit was red. Nothing stopped between them.
test cartopolismaina76cbbe10a9836d7f9e457b7b2b92339e0e4de69160910879e5ed8950b63cd7dEach merge was followed, on its own ticket, by:
So the lane was told in plain words at 08:01 that
mainwas red, and merged againat 08:06 and at 08:28.
#276 established the cause of the last one: #273 and #274 were both cut from
a76cbbe, each was green on its own, and they change opposite sides of onefunction —
CrossingKind::spec()went from a 3-tuple to a 2-tuple in one whilethe other added two callers of the 3-tuple.
git mergejoins them cleanly and theresult does not compile. (Three commits were also pushed to
maindirectly in thesame window,
2094b35…b395686, sof9e457b7's failure is not necessarily thesame fault; the pattern is what matters, not which change it was.)
Why the existing guards did not catch it
Two guards exist and both sit on the wrong side of the merge:
tools/deploy-maingates on a greenmain. It refused, correctly, threetimes — after each merge. It protects the public services, not
main.generate()refuses to file whilemainis red, and says why: "every branchis cut from
main, so while it is broken each new ticket inherits the failure andstalls at its own CI." That reasoning applies at least as strongly to merging,
and
shipReadydoes not make the check.Note the autopilot's own landing path already avoids half of this by design —
landOnMainfast-forwards to the exact commit CI passed on, with the comment "amerge commit is a commit nobody built" — but these three landed as pull-request
merges, which is a merge commit nobody built, on top of a
mainnobody re-checked.What would fix it
Two changes, independent:
mainis red.shipReadyalready hasjobsFor; one callagainst
main's head, and a red answer parks the tick with a line saying so.That alone turns three bad merges into one.
mainmoves. A green run on a commit cut froman older
mainsays nothing about the merge. Either re-dispatch CI on the mergeresult before landing, or require the branch to be fast-forwardable onto the
current
main— which is whatlandOnMainalready enforces, and which wouldhave refused #274 outright and asked for a rebase.
Where the seam is
tools/autopilot.ts—shipReady(:281), and whichever path merged these aspull requests rather than through
landOnMain(:434).Filed by the 7-day retrospective (#279). Not labelled
autonomous— it editstools/autopilot.ts, which the fence refuses to land, and three finished branchesare already waiting for review.
alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281alreadyFiledonly ever sees 50 issues, so every autopilot dedupe key silently expires — #206 was QA'd twice #281