Org-wide defaults for tracebloc: shared issue templates, the PR template, CODEOWNERS,
and the reusable workflows every repo calls.
Do all of this before the first PR is opened, not after — several items only take effect on later events, and two of them cause confusing failures if they are missing.
-
Disable "Rebase and merge". Leave merge-commit and squash enabled.
```bash gh api -X PATCH repos/tracebloc/<repo> -F allow_rebase_merge=false ``` GitHub enables rebase-merge by default on every new repo, and it breaks the FR gate: the gate proves each commit in a promotion range came from a merged PR via `repos/{owner}/{repo}/commits/{sha}/pulls`, and rebase-merging rewrites commits into shas that API cannot associate with any PR. Because the gate fails closed, the symptom is a promotion blocked on properly-reviewed code — which is what happened on design-system#88 and needed an audited `skip-fr-gate` override (backend#1337). Never disable all three: a repo with no merge method enabled cannot merge anything. `merge-settings-drift.yml` re-checks this weekly. -
Add the thin caller workflows, each referencing
@main:fr-gate-caller.yml,set-pr-status.yml,advance-deploy-env.yml,kanban-closure-routing.yml,fr-pass-comment-caller.yml,code-quality-caller.yml,wip-limit-check.yml,customer-priority-bump.yml,add-to-kanban.yml,stale-backlog.yml. Copy them from a comparable existing repo rather than writing them fresh, and pin any third-party action to a full semver tag (actions/add-to-project@v2.0.0—@v1does not exist, and a bare@v2moves; v2.0.0 is the fleet pin since backend#1816). -
Create
developfrom the default branch. All PRs targetdevelop; only the release train promotes onward tostagingand then to the prod branch. -
Protect
develop,stagingand the prod branch: one approving review, dismiss stale reviews on new commits, require conversation resolution, no force pushes, no deletions. -
Decide whether the repo joins the release train. If it ships an artifact, add an entry to
repos.ymlin tracebloc/release-train (includingversion_fileif it should be tagged), rather than adding a repo-local tagging workflow. A repo-local workflow pushing tags asgithub-actions[bot]will be refused by thev*tag ruleset (backend#1345). If that entry carries aversion_file, also add aversion-bump-gate-caller.ymlpassing the sameversion_fileandpublish_pathsvalues. It fails a PR that changes published paths while the version they would ship under is already released — the train's prod-hop refusal, moved to the PR that causes it (backend#1563; the refusal it front-runs cost a release leg in backend#1561). -
Confirm it is private unless it genuinely must be public. Org-internal tracking, planning and security work belongs in a private repo —
backendis the default home for anything cross-cutting.
The release train promotes each repo independently — the matrix runs with
fail-fast: false and there is no ordering between repos. A hop routinely merges
some and holds others (the 2026-07-29 prod hop merged 8 of 10). That is by design,
and it has a consequence worth internalising: you cannot assume the rest of the
fleet moves with you. A change in averaging-service that needs a backend
change ships broken for as long as backend is held — and backend can be held by
something entirely unrelated to your work, like an unrelated review finding.
Design for that rather than trying to orchestrate around it. Expand, then contract:
- Expand — ship the additive change first, in the producing repo, with the old behaviour still working. A new field, a new endpoint, a new optional argument. Nothing consumes it yet, so it is safe to promote alone.
- Adopt — consumers switch to the new path in a later PR, once the producer is actually in production.
- Contract — remove the old path a release after every consumer has adopted it.
Every step is independently promotable and safe in any order. That is the whole point: it removes the dependency on promotion timing instead of managing it.
When you genuinely cannot — a change that is breaking by nature — say so explicitly:
- tick Breaking change in the PR's Type of change;
- put the required rollout order in Deployment notes, naming the other repos'
PRs by owner-qualified reference (
tracebloc/backend#123); - tell whoever fires the train, so the hop is sequenced by hand.
Do not rely on the two PRs happening to merge in the right order. Nothing enforces that today.
| Workflow | Cadence | What it does |
|---|---|---|
merge-settings-drift.yml |
Mondays 06:00 UTC | Reports any active repo where rebase-merge got re-enabled, or that has no merge method at all. Report-only — it never changes a setting. |
kanban-reconcile.yml |
see workflow | Reconciles board membership and archives closed promotion cards. |
stale-backlog.yml |
Mondays 00:00 UTC | Warns on backlog issues idle 6 weeks, closes at 8. Exempt with keep-open or blocked. |