Uh oh!
There was an error while loading. Please reload this page.
release-train: develop -> staging - #535
Merged
Merged
Conversation
Brings this repo's copy to the fleet canonical form. `add-to-kanban.yml` is a
byte-compared copy, so this is one pass over every repo rather than a fix here.
WHAT CHANGES
repositories: ${{ github.event.repository.name }} the two content reads stop
being org-wide
permission-issues: read add-to-project must RESOLVE
permission-pull-requests: read the triggering node before
permission-organization-projects: write it can add it
permissions: {} the job needs no GITHUB_TOKEN
Without any `permission-*` the mint carried the App's FULL installation grant --
contents+PR write across every installed repo -- and the App holds bypass_reviews
on staging and prod fleet-wide, so the blast radius was merge-past-review rather
than merely write.
WHY THE FILE IS BYTE-IDENTICAL TO backend's. That copy is the one that survived
review: saadqbal caught that `owner:` narrows nothing ("Input 'repositories' is not
set. Creating token for all repositories owned by tracebloc"), and aptracebloc
caught a run cited as evidence that was not one. Copying the corrected version
rather than re-deriving it is the point of a byte-compared file.
VERIFIED, not assumed: run 32255581084 on backend#2181's head exercised these exact
scopes and landed the card (Status=Code review), which settles the one open
question -- `repositories:` scoping does not clip `organization_projects`.
Refs backend#2157.LukasWodka
commented
Aug 20, 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 fcef630. Configure here.
* ci(2212): the fixtures drift check must fail when it cannot run
`Backend fixtures drift check` is being armed as a required context
(backend#2212). Its activation-phase fail-open has to go first: when
BACKEND_CONTRACTS_TOKEN was unreadable the step printed a warning and exited 0,
so a check that never executed reported as a passing one. Inert-not-red was the
right call while the secret did not exist; the secret has existed since
2026-08-05, and once the context is required an exit-0-when-unable is strictly
worse than an advisory guard, because it also looks solved (backend#2183).
`cli` is PUBLIC, so the two reasons the token can be missing are different
things and the step now splits three ways:
token present -> run the check
absent, fork PR -> FAIL. GitHub withholds repo secrets from forks by
design, so the check genuinely cannot run. A maintainer
verifies internal/api/testdata/*.json by hand and
applies `skip-fixtures-drift` -- a permanent artifact on
the PR, the same model as skip-fr-gate. Silently passing
forks would fail open on exactly the contributions that
deserve the most scrutiny.
absent, same-repo -> FAIL. Rotated, removed or expired: a misconfiguration
that used to read as a clean run.
`types: [.., labeled, unlabeled]` added to the pull_request trigger, because
without them the default opened/synchronize/reopened means applying the override
label changes nothing until the next push -- the same defect Bugbot caught on
version-bump-gate-caller.yml's skip-version-gate.
Every ${{ }} goes through env:, none into the run: body.
Mutation-proved, all five paths, by running the step body against a stubbed
sync script:
override label present exit 0 (OVERRIDDEN warning)
token present exit 0 (real check ran)
token absent, fork PR exit 1 (could not run)
token absent, same-repo exit 1 (secret missing)
token present, script reports drift exit 3 (exec propagates the status)
The last one matters: `exec` replaces the shell, so a real drift failure still
fails the step rather than being swallowed.
Label `skip-fixtures-drift` created on this repo.
Refs tracebloc/backend#2212
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(2212): Dependabot PRs are not forks, and would have been blocked
I claimed in chat that this PR was unaffected by the Dependabot finding on
averaging-service#367. Wrong, and this repo is the worse case of the two.
Dependabot branches live in THIS repo, not a fork, so
`github.event.pull_request.head.repo.fork` is FALSE on them -- verified on the
real #530: head.repo.fork=false, head.repo.full_name=tracebloc/cli. Their runs
still receive only Dependabot-scoped secrets, so BACKEND_CONTRACTS_TOKEN is
empty. Under the previous commit that combination landed in the "absent,
same-repo -> misconfiguration -> FAIL" branch, which would have blocked every
Dependabot PR once the context is armed.
Not theoretical: this repo has 4 Dependabot PRs, #530 is OPEN right now, and it
currently reports `Backend fixtures drift check: success` -- the fail-open
passing vacuously on a live PR today.
So Dependabot gets a fourth branch, passing with a ::notice::. Safe for the same
structural reason as averaging-service#367, via a different always-running
guard: a dependency bump cannot alter internal/api/testdata/*.json, and if it
did, internal/api/contracts_test.go replays every fixture through the real
decode paths under the REQUIRED `Test` check with no token. Drift against the
pinned backend ref is re-checked by the push run on develop/main, where Actions
secrets are available.
Mutation-proved, all five:
Dependabot PR (fork=false, no token) exit 0 (notice: deferred)
fork PR, no token exit 1 (could not run)
human same-repo, no token exit 1 (secret missing)
token present exit 0 (real check ran)
override label exit 0 (OVERRIDDEN warning)
PR_AUTHOR uses github.event.pull_request.user.login, not github.actor, so it
stays correct across re-runs.
Refs tracebloc/backend#2212
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>LukasWodka
commented
Aug 20, 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 c28c120. 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
Low Risk
CI-only change to token scoping for an existing kanban automation; no application runtime or data-path impact, though org project write scope must remain correct for board updates.
Overview
The add-to-kanban workflow now mints a narrower GitHub App installation token instead of relying on the default workflow
GITHUB_TOKENor the App’s full installation grant.The job sets
permissions: {}so the workflow token carries no scopes. The create-github-app-token step addsrepositories: ${{ github.event.repository.name }}so issue/PR read is limited to the triggering repo (not every installed org repo). It also sets explicitpermission-issues: read,permission-pull-requests: read, andpermission-organization-projects: writesoactions/add-to-projectcan resolve the triggering node and write the org kanban board.Inline comments document scope rationale, prior failed runs, and that full end-to-end success still depends on a card actually landing on the board.
Reviewed by Cursor Bugbot for commit fcef630. Bugbot is set up for automated code reviews on this repo. Configure here.