ci(1979): arm the stale sweep — .github joins the wave, and the flip lands last - #293
Conversation
…p lands last The final PR of the backend#1979 wave, and the last exit-criterion work for backend#1680. Two things, in one PR because they cannot be separated: 1. THIS REPO GETS ITS CALLER. It was deliberately left out of .github#288 (Bugbot): `exempt` plus a caller on the audited branch is itself a finding (caller-drift.py:2260), so shipping the caller with the reusable would have gone green on a repo the audit was told to skip. 2. ALL 17 MIGRATION ENTRIES FLIP `exempt` -> `required`, and the `stale_backlog_migration_in_flight` anchor is DELETED rather than left behind. Its own text says so: "if this anchor is still here after that, it has become the same finding as wip_limit_check_has_no_callers -- a reusable that shipped and was never wired up, with a written excuse." `release-train` and `rfcs` keep their exemptions untouched, because those rest on different reasons that are still true: release-train because enrolling the repo that drives promotions into an unattended closing sweep is a decision somebody should take deliberately (still UNDECIDED, and the note says so), and rfcs because it holds decision documents rather than a backlog -- an RFC nobody has acted on is a decision nobody has taken. ORDERING, which is the whole reason this is a separate PR: flipping to `required` before a repo caller lands would redden the org audit for every repo still waiting -- the drift window made to look permanent, which is how a tier teaches people to ignore it. So this merges LAST, after the 16 caller PRs. Verified: 17 entries required and 2 deliberately exempt (asserted by reading the parsed inventory, not by counting the diff), the spent anchor at zero occurrences, `make check` green (41/41 house-rules cases), and caller-drift-selftest 197/0. backend#1979 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
bugbot run |
… green Bundling the caller with the flip deadlocks: the audit reads caller presence from the audited branch via the API, so `.github`'s caller is absent from `develop` until it merges, and `gate` is a required context. The caller now lands in .github#307; this PR is purely the 17-entry flip. Refs backend#1979 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Split:
|
|
bugbot run |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit a8c5174. Configure here.
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit a8c5174. Configure here.
saadqbal
left a comment
There was a problem hiding this comment.
Not approving, because gate and audit are both red and a failing required check is a hard no — but the red here is diagnosed, not mysterious, and it isn't this PR's fault.
The audit run reports one finding:
- .github: MISSING required caller for stale-backlog.yml on develop.
and gate then refuses on caller-drift.yml concluded 'failure' ... A contract change must not merge on a failed or skipped audit. That's the deadlock #307 was split out to break: the audit reads caller presence from the audited branch, so .github's own caller does not exist on develop until #307 merges, and a PR that bundles the exempt → required flip with the caller can therefore never go green.
So the sequence is #307 first, then re-run these two checks here. I've approved #307 on the strength of the same log. Nothing to change in this diff on that account — when it goes green I'll review the flip itself on its merits.
Flagging one thing so it isn't a surprise: between #307 merging and this one merging, .github's audit is expected to be red for the opposite reason — exempt in the inventory plus a caller present on the audited branch is itself a finding (caller-drift.py). That window is real and closes on this merge, which is the trade #307's comment argues for. Worth not reading that red as a regression when it appears.
saqlainsyed007
left a comment
There was a problem hiding this comment.
Verified against the tree at head (a8c5174), not the description:
stale_backlog_migration_in_flightanchor: 0 occurrences remaining — deleted as its own text asked, not left behind as a written excuse.- 17 entries flipped to
stale-backlog.yml: required, 2 kept exempt — and the two are exactly the ones the description names:*stale_backlog_exemption_needs_redeciding(release-train, enrolment of the promotion driver still undecided) and*stale_backlog_not_a_backlog(rfcs, decisions not a backlog). Neither rests on the migration, so neither should flip. Correct. - Decisive check:
auditandgateare green at this head. caller-drift reddens the moment a repo flips torequiredwithout its caller present, so the green audit is the derived proof that every flipped entry —.githubincluded — has a real caller on the audited branch. This is exactly the outage the staged ordering exists to prevent, and it isn't tripped.
Bugbot pass, 3 threads all resolved, mergeable. BLOCKED is the ordering/branch-protection gate (this lands last), not a conflict — that's the train's concern, not a code issue. LGTM.
…(backend#2242) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…scribing two repos (#306) * fix(2242): say why rfcs is exempt, accurately, and stop one anchor describing two repos The `rfcs` block asserted "this repo has no `develop`" in two places. It has one, and it takes merges. Corrected both, without touching the `required` flip that is still blocked on the callers reaching rfcs' default branch. Refs backend#2242, tracebloc/rfcs#41 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(2242): name the surviving precedent, not the anchor #293 deleted (backend#2242) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
|
/fr-pass |

The last PR of the backend#1979 wave, and the last exit-criterion work for backend#1680.
Two things, in one PR because they cannot be separated
1. This repo gets its caller. It was deliberately left out of #288 (Bugbot's
call):
exemptplus a caller on the audited branch is itself a finding(
caller-drift.py:2260), so shipping the caller alongside the reusable would havegone green on a repo the audit had been told to skip.
2. All 17 migration entries flip
exempt→required, and thestale_backlog_migration_in_flightanchor is deleted rather than left behind.Its own text asked for that:
What is deliberately NOT flipped
release-trainandrfcskeep their exemptions, because those rest on reasons thatare still true and are not the migration:
release-trainrfcsOrdering — the reason this is a separate PR
This merges LAST. Flipping to
requiredbefore a repo's caller lands wouldredden the org audit for every repo still waiting: the drift window made to look
permanent, which is exactly how a tier teaches people to ignore it.
.githubpromotesdevelop → staging → main, carrying #288's reusablemainstill has the old 1174-byte copy, develop is 4 aheadVerification
required, 2 deliberately exempt — asserted by parsing theinventory and printing every repo's resolved value, not by counting diff lines
stale_backlog_migration_in_flight: 0 occurrences remainingmake checkgreen — 41/41 house-rules casescaller-drift-selftest.py— 197 pass, 0 failactionlintclean on the new caller🤖 Generated with Claude Code
Note
Medium Risk
This is the org contract the caller-drift audit enforces. Flipping many repos to required will redden the fleet audit if any caller is missing or not yet on the audited branch.
Overview
Closes the backend#1979 migration in
repo-inventory.ymlby flippingstale-backlog.ymlfromexempttorequiredon the repos that were waiting on caller PRs (including.github), and deletes thestale_backlog_migration_in_flightshared reason so it cannot linger as a written excuse.release-trainandrfcsstay exempt on their existing, still-true reasons (undecided enrollment of the promotion driver; RFCs are decisions, not a backlog).Reviewed by Cursor Bugbot for commit a8c5174. Bugbot is set up for automated code reviews on this repo. Configure here.