Twenty-four weeks, GitHub first, then GitLab, then Bitbucket
Durations are estimates for one person; the order is the point. Nothing reaches GitLab until the GitHub path runs on the new contracts with no change anyone can see, so the risky migration happens on the forge where Hangar already has live traffic to measure.
P0 to P2: no new forge
Every GitHub call goes through a contract; a CI check keeps it that way.
A second registry proves the image path is not ghcr.io.
The RepositoryFile bug class is gone, on GitHub.
P3: the proof
A Skyport service on GitLab: scaffold, build, sign, release to Flight, roll back.
The merge gate refuses a merge with a red gate.
P4 and P5: breadth
Bitbucket Cloud, then Data Center, on the same drivers.