release-train: staging -> main - #5
Conversation
* chore(onboard): add .github/workflows/advance-deploy-env.yml (content profile) * chore(onboard): add .github/workflows/bugbot-gate.yml (content profile) * chore(onboard): add .github/workflows/code-quality.yml (content profile) * chore(onboard): add .github/workflows/customer-priority-bump.yml (content profile) * chore(onboard): add .github/workflows/fr-gate.yml (content profile) * chore(onboard): add .github/workflows/fr-pass-comment.yml (content profile) * chore(onboard): add .github/workflows/kanban-closure-router.yml (content profile) * chore(onboard): add .github/workflows/set-pr-status.yml (content profile) * chore(onboard): add .github/workflows/stale-backlog.yml (content profile) * chore(onboard): add .github/workflows/add-to-kanban.yml (content profile) * chore(onboard): add CLAUDE.md (content profile) * chore(onboard): add .cursor/BUGBOT.md (content profile)
release-train: develop -> staging
|
bugbot run |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 157d299. Configure here.
| fi | ||
| echo "Item #$NUMBER not on project after 5 retries — skipping." | ||
| exit 0 | ||
| fi |
There was a problem hiding this comment.
Errors treated as absent cards
High Severity
The item lookup only treats a non-zero gh api graphql exit as a failed read. An HTTP 200 with errors[] exits 0, so a rate limit or partial payload is handled as “not on the project” and the step skips. The project’s Item-closed automation can then write Cancelled and archive shipped work.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 157d299. Configure here.
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|
|
REFUSED. This promotion was blocked by 1 HIGH severity finding(s): Errors treated as absent cards, per the severity policy in release-train's README (High stops the line; an unreadable severity blocks too, because unknown is not low; Medium/Low are recorded and ship, at both hops). Blocking threads stay UNRESOLVED by design, so this promotion remains blocked until they are fixed on What the train did with each:
|


Automated promotion by the release train (RFC-0008 D14). Head is the train-managed
release-train/to-mainbranch (a mirror ofstaging), so it never collides with a human PR. Merged only when the fr-gate is green.Note
Medium Risk
Large CI surface area touching org project writes, promotion gates, and secret-backed App tokens; mis-scoped tokens or board/column mismatches can strand or mis-route kanban cards fleet-wide, though workflows are designed to fail loudly.
Overview
Adds the tracebloc release-train / engineering-kanban automation and quality gates as inline GitHub Actions in this repo, because public repos cannot
uses:reusable workflows from privatetracebloc/org-config. Each new workflow is a generated, self-contained copy (regenerate viaorg-config’srender-self-contained.py); callers’ triggers and literals are folded in so required check names likeadvance / advancestay unchanged.Kanban & process:
add-to-kanban.yml(issues/PRs → org project #2) with repo-scoped App tokens and explicitissues/pull-requestsread plus project write.advance-deploy-env.ymlupdates Deploy env + Status on pushes to integration branches, derives PRs from the commits API (not commit subjects), uses sharedbranch_status_map.pyfrom org-config, and fails closed on bad Status resolution or failed project lookups; drops the obsolete Staging (human review) rank shim.kanban-closure-router.ymlroutes merged/closed items (issues completed → Done, not deploy columns).customer-priority-bump.ymlhandlesfrom:customer→prioritylabel andwork-type:bug→ Ready.fr-pass-comment.ymlimplements/fr-passwith visible 👍/👎 outcomes and red runs on real refusals.fr-gate.ymlblocks staging/main promotions unless kanban items meet the required stage (sharedfr-gate-walk.sh).Quality:
code-quality.yml(pipefail/YAML run blocks, gitleaks, house-rules, dead-weight, action-pins).bugbot-gate.ymlturns Cursor Bugbot into a derived pass/fail gate (polls for review completion).Also adds a minimal
.cursor/BUGBOT.mdplaceholder for per-repo Bugbot guidance (conformance expects the file to exist).Reviewed by Cursor Bugbot for commit 157d299. Bugbot is set up for automated code reviews on this repo. Configure here.