Uh oh!
There was an error while loading. Please reload this page.
fix(inventory): design-system-v2 is on the train (backend#2653) - #358
Merged
Conversation
`design-system-v2` joined the release train on 2026-08-26T12:12:21Z
(release-train/repos.yml commit 8330f408, onboarded under backend#2547), and
`repo-inventory.yml` still recorded `release_train: false`. caller-drift.py
cross-checks that flag against repos.yml, so the disagreement was a
repo-conformance finding -> a red `audit` -> a red REQUIRED `gate` context ->
`.github` could not promote to staging. Measured before/after on the live
fleet: 1 finding -> 0.
Not an ungated hop. `design-system-v2` does have
`.github/workflows/fr-gate-caller.yml` on develop, so the promotion gate is
present; the guard cannot tell that from a repo that joined the train without
one, and is right not to guess.
The flag is not the only cell the train join invalidated, so the reasons and
measurements around it move with it rather than being left false:
* protection.develop / staging / prod. The block was written when `develop` was
this repo's only branch. Onboarding created `staging` and `main`; measured
2026-08-27 all three return "Branch not protected" and the repo has ZERO
rulesets. The two aliases used here (`develop_unprotected_non_train`,
`no_staging_branch_not_on_train`) assert a premise that is now false, and the
prod reason ("no prod branch exists ... structural, not a gap") is simply
false. Replaced with inline, measured reasons that record the gap as
UNREMEDIATED under the open backend#2547.
* The rows stay `exempt` rather than becoming `required`: `required` over an
unarmed branch lands a red gate, and nothing in this file may land red
(arm while green). Branch first, cell after. Staleness still bites - the
moment any of the three gains protection of either kind, caller-drift flags
the exemption.
* rulesets.tag_trust_root said "no tag-triggered workflow and no v* tags cut".
Both halves are false now: `publish.yml` triggers on `push: tags: ['v*']` and
`v0.1.0-rc.1` is cut, so the trust root is MISSING, not inapplicable.
* The callers comments asserted "this repo has ONE branch, `develop`" and that
the fr-gate caller is "permanently dormant". `staging` and `main` exist, so
the caller is live and the fr-pass-comment misfire it described is gone.
Verified: caller-drift.py live findings_total=0 / "No drift" (was exit 1 with
the design-system-v2 finding against origin/develop's inventory),
caller-drift-selftest 197/197, reason-citations 0 findings, house-rules clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>saadqbal
approved these changes
Aug 27, 2026
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.
Summary
design-system-v2joined the release train on 2026-08-26T12:12:21Z (release-train/repos.ymlcommit8330f408, onboarded under backend#2547).repo-inventory.ymlstill saidrelease_train: false, andcaller-drift.pycross-checks that flag againstrepos.yml— so the disagreement was a repo-conformance finding → redaudit→ red requiredgatecontext →.githubcould not promote to staging.This was a bookkeeping disagreement, not a genuinely ungated hop.
design-system-v2does have.github/workflows/fr-gate-caller.ymlondevelop, so the promotion gate is present and enforcing. The guard cannot distinguish that from a repo that joined the train without an fr-gate caller, and is right to refuse rather than guess.Re-running the check would not have cleared it:
caller-drift.ymlhas apaths:filter andauditlast succeeded ondevelopat 12:09:02 — three minutes before the train join — so no green run postdates the drift.repo-inventory.ymlis in that filter, so this PR runs the audit and the merge todevelopproduces the green run the conformance gate reads.Beyond the one line
The flag is not the only cell the train join invalidated. Checked the schema first:
caller-drift.pycouplesrelease_trainto exactly two things — therepos.ymlcross-check (:2259) and develop-first audit-branch selection (:1216). The schema requires no additional fields for an on-train repo (validatehas no train→protection/ruleset coupling), so nothing had to be added. What had become false is the measured prose, because onboarding createdstagingandmain:protection.develop*develop_unprotected_non_traindevelopunprotected, UNREMEDIATED under backend#2547protection.staging*no_staging_branch_not_on_trainstagingnow exists, unprotectedprotection.prodmainexists, unprotectedrulesets.promotion_merge_commit_onlyrulesets.tag_trust_rootpublish.ymltriggers onpush: tags: ['v*']andv0.1.0-rc.1is cut — trust root MISSING, not inapplicabledevelop"; fr-gate "permanently dormant"Measurements behind those cells:
develop,staging,mainall returnBranch not protectedfrom the classic endpoint, andGET /repos/tracebloc/design-system-v2/rulesetsreturns[].The rows stay
exemptrather than flipping torequired.requiredover an unarmed branch would land a red gate, and nothing in this file may land red (CLAUDE.md rule 4 — arm while green). Order is branch first, cell after; arming is the open half of backend#2547. Staleness still bites: the moment any of the three gains protection of either kind,evaluate_protectionflags the exemption as stale and the cell must be promoted. Both shared anchors remain defined and still aliased byclaude-skills/release-train/rfcs, so no YAML alias was orphaned.Closes tracebloc/backend#2653
Type
Bug fix (inventory bookkeeping). No workflow, script or policy behavior changes —
repo-inventory.ymlonly.Test plan
All run locally against the live fleet from a fresh clone of this branch:
Audited 20 of 20 repos; the matrix shows
design-system-v2 | yes | OK | OK | OK | OK | OKacross all six families. The audit is fail-closed, so a green run means agreement was established, not merely that nothing errored.Before/after on the same tool is the mutation proof: the finding this PR removes is reproducible against
origin/develop's inventory and absent against this branch's.Checklist
developrelease_traincell in the inventory agrees withrepos.yml(the audit compares all 20 and reports 0 findings), and the exemption reasons in this block were re-measured rather than assumedNote
Low Risk
Inventory-only bookkeeping in
repo-inventory.yml; no workflow, script, or policy behavior changes—only reconciling recorded facts with the train join and live measurements.Overview
design-system-v2 joined the release train on 2026-08-26, but
repo-inventory.ymlstill hadrelease_train: false.caller-drift.pycross-checks that flag againstrelease-train/repos.yml, so the mismatch was a repo-conformance finding that blocked.github’s own promotion via the required gate context—not an actually ungated hop (fr-gate-caller.ymlis ondevelop).This PR sets
release_train: trueand rewrites thedesign-system-v2block so measured prose matches post-onboarding reality:stagingandmainexist alongsidedevelop, and audit uses develop-first because the repo is on the train.Protection and rulesets rows stay
exempt(not flipped torequired) so the inventory does not assert armed policy over branches that still have no classic protection and zero rulesets—arming remains backend#2547. Exemption text now records those as UNREMEDIATED gaps (unprotected roles, missing merge-commit-only ruleset, missingv*tag trust root now thatpublish.ymlandv0.1.0-rc.1exist).Callers commentary is updated: off-train vs on-train template debate is retired;
fr-gateis live on promotion PRs; thefr-pass-commentmisfire note is obsolete becausestagingexists. Caller rows themselves were alreadyrequiredand unchanged.Reviewed by Cursor Bugbot for commit f5fd730. Bugbot is set up for automated code reviews on this repo. Configure here.