Tracks consolidation item C1 from consistency-audit.md.
Problem: `promote-testing-to-main.yml` is triplicated across `bluefin` (~14 KB), `bluefin-lts` (~14 KB), and `dakota` (~6 KB) — ~700 lines of YAML that drift independently.
Proposed solution: ship `reusable-promote.yml` as `projectbluefin/actions/.github/workflows/reusable-promote.yml`. Each image repo's promote workflow becomes a ~30-line caller.
Adoption order (canary-first): dakota → bluefin-lts → bluefin (one promotion cycle observation between each).
Rollback strategy: keep original workflow commented in same PR for one full promotion cycle.
Effort: ~1 day (PR to actions/, then 3 small migration PRs gated on the canary).
Parent: #583
Tracks consolidation item C1 from consistency-audit.md.
Problem: `promote-testing-to-main.yml` is triplicated across `bluefin` (~14 KB), `bluefin-lts` (~14 KB), and `dakota` (~6 KB) — ~700 lines of YAML that drift independently.
Proposed solution: ship `reusable-promote.yml` as `projectbluefin/actions/.github/workflows/reusable-promote.yml`. Each image repo's promote workflow becomes a ~30-line caller.
Adoption order (canary-first): dakota → bluefin-lts → bluefin (one promotion cycle observation between each).
Rollback strategy: keep original workflow commented in same PR for one full promotion cycle.
Effort: ~1 day (PR to actions/, then 3 small migration PRs gated on the canary).
Parent: #583