Retrospective finding — refs #10 (post-retrospective addendum: multi-repo migration, day 2).
Context
Executing a live "personal account → organization" migration (repo transfer + rename, org project board rebuilt from scratch, CI re-homed) hit six platform landmines in one afternoon. Each is a verified GitHub platform fact, each cost a debugging loop, and none is written down anywhere in the standard. A migration checklist would have converted all six into non-events.
The six, with symptom → cause:
- Replacing a Project's status options breaks the default workflows silently. Rebuilding the Status field (new column set via API) leaves every built-in workflow ("item closed → status X", "auto-close", "PR merged") pointing at deleted option ids — they show a warning icon and dangle until each is re-edited by hand in the UI.
- A fresh org's Actions policy can default to local-only. First CI run after transfer dies with
startup_failure (no logs, "workflow file issue") because actions/checkout etc. are org-blocked. Fix: org Settings → Actions → allow GitHub-authored actions (tightest sufficient option).
- The Projects API does not follow repo-transfer redirects. Item-add calls with pre-transfer issue URLs fail with "resource not found" even though the same URLs redirect fine in a browser. Rewrite URLs to the new owner/name before scripting board moves.
- Built-in project auto-add is per-repo and plan-capped (1 workflow on Free, 5 on Pro/Team — each targeting a single repo). A multi-repo board on Free gets exactly one auto-added repo; the rest is manual/agent adds or per-repo Actions workflows.
- Environment protection rules on private repos need Pro (personal) or Team (org). On a Free org the "required reviewer" deploy gate silently doesn't exist — design the human gate around something else (e.g. the release-publish act) until the plan changes.
- Transfer before creating Actions secrets and Environments. Sequencing the transfer first means there is nothing sensitive to lose or leak in the move; GitHub keeps issues/PRs/labels and redirects old URLs (git + web — but not the Projects API, see 3).
Also worth a line: startup-failed workflow runs cannot be re-run — trigger a fresh run instead.
Tasks
Acceptance criteria
- The checklist exists; someone running the same migration cold hits zero of the six.
— 🤖 Claude, on behalf of @PBNZ
Retrospective finding — refs #10 (post-retrospective addendum: multi-repo migration, day 2).
Context
Executing a live "personal account → organization" migration (repo transfer + rename, org project board rebuilt from scratch, CI re-homed) hit six platform landmines in one afternoon. Each is a verified GitHub platform fact, each cost a debugging loop, and none is written down anywhere in the standard. A migration checklist would have converted all six into non-events.
The six, with symptom → cause:
startup_failure(no logs, "workflow file issue") becauseactions/checkoutetc. are org-blocked. Fix: org Settings → Actions → allow GitHub-authored actions (tightest sufficient option).Also worth a line: startup-failed workflow runs cannot be re-run — trigger a fresh run instead.
Tasks
Acceptance criteria
— 🤖 Claude, on behalf of @PBNZ