daefe54ff7
Rolls up this pass's multi-site work: live catalog replication (spokes stay synced after joining, not just a one-time snapshot), identical agent-signing keys across sites, coordinated master promotion with real old-master demotion, the UI to actually see and use any of it, and two real bugs found only by live two-container testing (site-promote's dead authorization check, and masterJoinKey/replicationPushToken leaking to the browser via GET /api/site/config). See CHANGELOG.md for the full list.