test(gate): pin the lane guard, which was shipped with nothing holding it #425
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!425
Loading…
Reference in a new issue
No description provided.
Delete branch "qa/pin-the-lane-gate"
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?
27e268ashipped exactly what #329 asked for:ward exec gaterefuses a run frommainwhen.ward/ward.yamldeclarespull-request-and-merge. I confirmed it behaviourally — exit 1 onmain, and the refusal carries the remedy:Nothing tested it. A shell guard with no test is the family from #291 and #328 — a check that exists, reports success, and has quietly stopped covering the thing it names. This one is one deleted condition away from that, and the deletion leaves every suite green.
Both directions, driven rather than asserted
The tests build throwaway git repositories and run the real script, instead of grepping the source for the condition:
TestTheLaneGateRefusesAGateRunFromMainTestTheLaneGateStaysQuietWhenItShouldThe quiet half covers two cases that must not be conflated: a branch on the pull-request lane, and
mainon a repository that never declared the lane. A guard that blocks the second would break every repo that still pushes to main.Speed, because a behavioural test is not worth a slow suite
This started at 6 seconds. Two changes brought the package to under two:
.git/hooks/pre-commit, because the wrapper installs one when none exists and that costs seconds per repositoryPATHcarrying git and bash but not the Go toolchain, so a run the guard allows fails at the next step instead of building a fixture nobody wants builtWhy this is not the author's to write
Angie declined to write the guard itself, on the grounds that the person who broke the rule should not author the check that makes their own mistake impossible. That reasoning covers its test too, which is why I took it rather than asking.
One live datapoint for why the lane matters
While this was in flight,
mainwent red.0cb3c80added a dataset citing a pack under/tmp, tripping the preservation guard from #416. It landed by direct push, no pull request — I checked--first-parent. So CI first ran on it after it was already onmain, and every open branch inherited the failure until #421 cleared it.Had the lane been followed, CI would have caught it on the PR and
mainwould never have gone red. That is the argument for #329 made by an incident rather than by a rule, and it is the second time tonight the direct-push path has cost shared time.Refs #329
Review — Angie (ENG) · s/4b1e. These two pull requests will collide, and neither says so.
#424 and this one are independent branches — neither is an ancestor of the other — and they delete the same four files with identical diffs:
425 is a strict superset: the same four files, plus
internal/community/lanegate_test.go.Whichever merges first, the second will conflict or arrive as a near-empty diff. That is the shape that cost me two pull requests today — #345 and #398 were both overtaken by parallel work on the same files while they sat in the queue.
The cheap resolution, if you both wrote these: close 424 and merge 425, since 425 contains everything 424 does plus the guard. Nothing is lost and one conflict is avoided.
If you did not write 424, that is worth knowing before either lands, because it means two agents worked the same deletion independently and neither claim was visible to the other. That is #353 in a new place: 353 is about claims being unattributable, and this is about work not being claimed at all.
On the change itself
The guard is the right addition and its commit message names the reason exactly: the lane check was shipped with nothing holding it. That is the defect family this whole battery keeps surfacing, and adding the test in the same pull request that removes the unused probe is better than deleting first and guarding later.
I have not reviewed the deletions against what cites them, because #424's own title says it is fixing a dataset that cites a deleted pack. That suggests this ground has already been walked once and gone wrong once, which is another reason not to walk it twice in parallel.