Uh oh!
There was an error while loading. Please reload this page.
release-train: develop -> staging - #317
Merged
Merged
Conversation
…lands last (#293) * ci(1979): arm the stale sweep — this repo joins the wave, and the flip 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> * ci(1979): move .github's own caller to its own PR, so this one can go 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> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…he fleet again (backend#2284) (#312) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…#2348) (#313) * feat(2348): a bug-labelled issue lands in Ready, not Backlog (backend#2348) The org rule -- "bugs get `work-type:bug` and go straight into `Ready` (defects skip refinement)" -- was written in org-standards.md and implemented nowhere: add-to-kanban puts every issue at `Backlog` and no workflow read the label. Measured 2026-08-22: seven bug-labelled tickets in one day, all seven left in `Backlog`. Implemented as a job on `customer-priority-bump.yml`, the only reusable already triggered by `issues: labeled` and already called by 16 of 19 repos -- so it reaches the fleet with no per-repo edit and touches none of conformance-gate's GUARDED contract files. MONOTONIC: promotes only from `Backlog` or from no Status, and asks the BOARD for the direction (col_index byte-identical to the closure router's) rather than holding a rank table. An inverted Backlog/Ready order refuses rather than performing a demotion. FAILS CLOSED like advance-deploy-env, not like the closure router: an unreadable board, a truncated page, an unplaceable column or a card that never reaches the project are all RED. Declining quietly here would reproduce the very defect being fixed -- and a `labeled` event fires once, where a cron gets another go next week. Tests: 46 assertions, extracted from the YAML by `# selftest:` markers and run verbatim; the Status vocabulary is derived from advance-deploy-env's rank() and cross-checked against the sibling suite, so all twelve columns are driven. 21 mutations, 0 stale, 0 uncaught. `make check` green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(2348): the Status write goes through the same errors[] rejection as the reads (backend#2348) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The develop-first rule named `docs` as its sole exception. `rfcs` has the same shape and the same reason -- it publishes no artifact, has no deploy stages, and is not on the release train -- so a promotion gate there has nothing to gate. Decided on backend#2347. This line was the last place still asserting otherwise. `repo-inventory.yml` has described `rfcs` as a single-branch repo all along: `release_train: false`, so `audit_branch: develop-first-on-train` already resolves to the default branch, and the `develop` role carries `exempt: *no_develop_branch_single_branch_repo` -- "single-branch repo: `main` is the only integration branch, so there is no `develop` to protect. Structural, not a gap." So the machine-readable side needs no change; the prose was the drift. Stated as a class with its members named, and pointed at the inventory, because a bare list drifts and a bare class invites argument. Why nobody caught it: the conformance guard flags a stale exemption only when the role's branch appears AND carries protection. `rfcs/develop` existed and was completely unprotected, so the contradiction between "there is no develop" and a live develop branch was invisible by construction. rfcs#45 deletes that branch and makes reality match what this file and the inventory both now say. 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>
LukasWodka
commented
Aug 24, 2026
ContributorAuthor
bugbot run |
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 b0bc388. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated promotion by the release train (RFC-0008 D14). Head is the train-managed
release-train/to-stagingbranch (a mirror ofdevelop), so it never collides with a human PR. Merged only when the fr-gate is green.Note
Medium Risk
Writes GitHub Projects Status via an org App token on every bug label in wired repos. A wrong monotonic gate could demote cards; fail-closed GraphQL errors can also red CI on a one-shot labeled event.
Overview
Implements the org rule that
work-type:bugissues skip refinement: a newbug-to-readyjob on the existing labeled reusable (still namedcustomer-priority-bump.yml) moves the kanban card fromBacklogtoReadyonly, never backward.The job mints a scoped App token, retries until
add-to-kanbanlands the card, derives option IDs from the live board, and fail-closes on GraphQLerrors[], missing cards, unknown/inverted columns, PRs, and unconfirmed writes. Column names are now asserted bykanban-columns-check. Coverage is extracted from the workflow (bug-to-ready-selftest+ mutations).Inventory:
stale-backlog.ymlisrequiredfleet-wide (migration exemption removed);bugbot-gate.ymlis listed asexemptpending caller rollout.rfcsprotection/caller notes are corrected (developexists, board callers staged). Org standards now say automation moves bugs, and thatdocs/rfcsaremain-only..github,release-train, andrfcsstill lack this caller.Reviewed by Cursor Bugbot for commit b0bc388. Bugbot is set up for automated code reviews on this repo. Configure here.