Skip to content

fix(inventory): design-system-v2 is on the train (backend#2653) - #358

Merged
LukasWodka merged 1 commit into
developfrom
fix/2653-dsv2-on-train-inventory
Aug 27, 2026
Merged

fix(inventory): design-system-v2 is on the train (backend#2653)#358
LukasWodka merged 1 commit into
developfrom
fix/2653-dsv2-on-train-inventory

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

design-system-v2 joined the release train on 2026-08-26T12:12:21Z (release-train/repos.yml commit 8330f408, onboarded under backend#2547). repo-inventory.yml still said release_train: false, and caller-drift.py cross-checks that flag against repos.yml — so the disagreement was a repo-conformance finding → red audit → red requiredgate context → .github could not promote to staging.

This was a bookkeeping disagreement, not a genuinely ungated hop.design-system-v2does have .github/workflows/fr-gate-caller.yml on develop, 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.yml has a paths: filter and audit last succeeded on develop at 12:09:02 — three minutes before the train join — so no green run postdates the drift. repo-inventory.yml is in that filter, so this PR runs the audit and the merge to develop produces 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.py couples release_train to exactly two things — the repos.yml cross-check (:2259) and develop-first audit-branch selection (:1216). The schema requires no additional fields for an on-train repo (validate has no train→protection/ruleset coupling), so nothing had to be added. What had become false is the measured prose, because onboarding created staging and main:

cellwasnow (measured 2026-08-27)
protection.develop*develop_unprotected_non_traininline: on-train, develop unprotected, UNREMEDIATED under backend#2547
protection.staging*no_staging_branch_not_on_traininline: staging now exists, unprotected
protection.prod"No prod branch exists … structural, not a gap"inline: main exists, unprotected
rulesets.promotion_merge_commit_only"Not on the release train: no staging or prod branch"inline: promotion branches exist, zero rulesets in the repo
rulesets.tag_trust_root"no tag-triggered workflow and no v* tags cut"inline: publish.yml triggers on push: tags: ['v*'] and v0.1.0-rc.1 is cut — trust root MISSING, not inapplicable
callers comments"this repo has ONE branch, develop"; fr-gate "permanently dormant"fr-gate is live; the fr-pass-comment misfire it described is gone

Measurements behind those cells: develop, staging, main all return Branch not protected from the classic endpoint, and GET /repos/tracebloc/design-system-v2/rulesets returns [].

The rows stay exempt rather than flipping to required.required over 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_protection flags the exemption as stale and the cell must be promoted. Both shared anchors remain defined and still aliased by claude-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.yml only.

Test plan

All run locally against the live fleet from a fresh clone of this branch:

$ python3 scripts/caller-drift.py # BEFORE, --inventory origin/develop's copy
::error::1 repo-conformance drift finding(s).
- design-system-v2: release-train/repos.yml says on-train=True, the inventory says False. ...
exit 1
$ python3 scripts/caller-drift.py # AFTER (this branch)
No drift. Every repo read, every entry matched.
findings_total=0 (step output), unreadable=0, protection_unreadable=0, ruleset_unreadable=0
exit 0

Audited 20 of 20 repos; the matrix shows design-system-v2 | yes | OK | OK | OK | OK | OK across all six families. The audit is fail-closed, so a green run means agreement was established, not merely that nothing errored.

$ python3 scripts/tests/caller-drift-selftest.py -> pass=197 fail=0
$ python3 scripts/reason-citations.py -> 32 citations / 111 reasons, 0 findings
$ bash scripts/house-rules.sh -> no findings across 7 file(s)
$ python3 -c "import yaml; yaml.safe_load(open('repo-inventory.yml'))" -> parses

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

  • Targets develop
  • Verified with real output (before/after live audit, selftests, citation guard, house-rules)
  • Statements this change made false are updated in the same PR (the block's protection/ruleset reasons and caller comments)
  • No secrets, tokens or customer data
  • Assignee set, one reviewer requested
  • Class checked, not just the instance: every other release_train cell in the inventory agrees with repos.yml (the audit compares all 20 and reports 0 findings), and the exemption reasons in this block were re-measured rather than assumed

Note

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.yml still had release_train: false. caller-drift.py cross-checks that flag against release-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.yml is on develop).

This PR sets release_train: true and rewrites the design-system-v2 block so measured prose matches post-onboarding reality: staging and main exist alongside develop, and audit uses develop-first because the repo is on the train.

Protection and rulesets rows stay exempt (not flipped to required) 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, missing v* tag trust root now that publish.yml and v0.1.0-rc.1 exist).

Callers commentary is updated: off-train vs on-train template debate is retired; fr-gate is live on promotion PRs; the fr-pass-comment misfire note is obsolete because staging exists. Caller rows themselves were already required and unchanged.

Reviewed by Cursor Bugbot for commit f5fd730. Bugbot is set up for automated code reviews on this repo. Configure here.

`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>
@LukasWodkaLukasWodka self-assigned this Aug 27, 2026
@LukasWodka
LukasWodka merged commit b5abac6 into developAug 27, 2026
17 checks passed
@LukasWodka
LukasWodka deleted the fix/2653-dsv2-on-train-inventory branch August 27, 2026 09:33
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LukasWodka@saadqbal