Repository navigation
Epic: relocate the canary-rollout engine + bootstrap into .github (org tooling consolidation) #613
Description
Goal
Consolidate the release-promotion / repo-bootstrap tooling into petry-projects/.github so all org tooling + standards live in one canonical home (the #596 principle, extended). Agreed end-state; execution gated on the canary-rollout PR queue draining (see Sequencing).
Why
.github already owns the standards (rulesets in standards/rulesets/, lib/ring-pins.sh, the canonical 346L apply-repo-settings.sh). The orchestrators that apply them still live in .github-private, duplicated/divergent. .github-private is a public repo, so there's no secrecy reason to keep operator tooling there.
Scope — move .github-private → .github
scripts/bootstrap-new-repo.sh(+tests/test_bootstrap_new_repo.bats)scripts/canary-rollout.sh,scripts/lib/canary-rollout.sh(+tests/canary_rollout.bats).github/workflows/canary-rollout.ymlstandards/canary-rings.json(ring-membership registry — co-locate withlib/ring-pins.shalready in.github)- Docs:
docs/bootstrap/new-repo-validation.md,docs/release/versioning.md,docs/initiatives/canary-rollout-adr.md
Reconcile / de-dupe (canonical = .github)
- Delete
.github-private/scripts/apply-rulesets.sh(the Consolidate the two file-driven apply-rulesets appliers into one (cross-repo bootstrap story) #596 duplicate) — callers use the canonical.githubapplier. - Delete
.github-private/scripts/apply-repo-settings.sh(129L subset) — canonical is.github's 346L superset. Bootstrap then applies the fuller set (merge-settings + GHAS default-setup) — a latent-gap closure, confirmed acceptable. - De-dupe
scripts/lib/push-protection.sh(divergent shas across repos) — keep.github's.
Workflow-move checklist (canary-rollout.yml)
- Secrets present in
.github(GH_PAT_WORKFLOWS, release-manager App creds, etc.). - Triggers still valid once hosted in
.github(schedule/dispatch). - Cross-repo promotion paths intact — note feat: implement issue #640 — [Phase 4] Wire the gate into the PR/agent-dispatch workflows #1059/feat: implement issue #645 — [Phase 3] Integrate the linter into the compliance audit (informational) + org-repo import consistency #1061 are already fixing cross-repo deployment-record 422s; let those land first so we move the fixed version.
- release-manager App (id 4193127) installed on
.githubwith needed perms (Issues:write gap flagged in Standard .gitignore baseline should exclude Python bytecode (__pycache__/, *.pyc) #1081/Org Status — 2026-09-07 #1085 area).
Sequencing (hard gate)
The subsystem currently has 8 open PRs in .github-private (#1010, #1037, #1046, #1061, #1066, #1078, #1084, #1085) + dependabot #1071, all touching these files, last-committed today. Do NOT start the move until that queue drains — otherwise every in-flight PR conflicts. This epic tracks the move; a companion effort is landing the queue.
Related
- Consolidate the two file-driven apply-rulesets appliers into one (cross-repo bootstrap story) #596 (applier consolidation — PR feat(rulesets): relocate release-channel-tags to .github as targeted org standard (#596) #609 landed release-channel-tags as an org standard)
- Follow-ups Consolidate per-repo replicated rulesets → native org-level rulesets (when on GitHub Team) #611 (Team→native org rulesets), Codify org-level settings as standards/org-settings.json (apply-org-settings.sh) #612 (org-settings.json)
Activity
don-petry commentedon Jul 4, 2026
Queue-drain status (2026-07-04 ~17:50Z)
The
.github-privatecanary-rollout PR queue that gated this migration has drained:4f098af).851f25d, feat: implement issue #645 — [Phase 3] Integrate the linter into the compliance audit (informational) + org-repo import consistency #1061→d1016c5, Autocut runs before promote-all in the same job, so a busy agent's dwell resets every tick and can never promote — dev-lead stuck at next since 08-12 (blocks #1592) #1066→113306d, Register agents.solution-architect in canary-rings.json (cross-repo prerequisite for .github-private#1631) #1078→feat: implement issue #1063 — Repin dev-lead caller stub: dev-lead/v1-ring0 -> dev-lead/v139-ring0 (orphaned channel family, 152 commits behind, #1592) #1087, Org Status — 2026-09-07 #1085→4f098af.All 8 were tagged
dev-lead:hands-offduring the drain.⚠ One gap to resolve before/with the migration
Issue #1008 (onboard idea→initiative reusables into the registry) is still OPEN and its work is NOT in main — its only PR (#1010) was closed in the supersession sweep without landing (unlike the others, #1008's registry entries
initiative-planner/idea-triage/unmanagedwere genuinely unlanded). No replacement PR exists. This needs a fresh PR (rebase #1010'scanary-rings.jsonadditions onto current main) either before the move or carried into it.Gate is otherwise open — the subsystem is quiescent enough to execute the relocation.
fix(#613): address advisory-bot findings (Gemini/Copilot/CodeRabbit)
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
feat(#613): enable canary-rollout schedule in .github (cutover) (#628)
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
fix(canary-rollout): autocut cuts inline via gh-api — no sibling cut-…
feat(#1008): onboard initiative-planner + idea-triage to canary-rollo…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…
ci: add canary-rollout-tests.yml — enforce the engine's bats suite (C…
don-petry commentedon Jul 13, 2026
Closing — the relocation is complete and verified:
Remaining org-tooling-consolidation ideas continue under their own issues (#611 native org rulesets, #612 org-settings.json). The engine's bats suite is now CI-enforced via #685.
Add the persona @-mention router (#754)
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…
feat(#613): relocate canary-rollout engine + bootstrap into .github (…
docs(#631): de-duplicate versioning.md (.github-private is authoritat…
feat(#1008): onboard initiative-planner + idea-triage (organic-traffi…