gobridge

0013 — Coordinated cluster config rollout for live-safe deltas

Status: accepted Date: 2026-07-25 Deciders: GoBridge core Supersedes: 0012 (for live-safe deltas only) Extended by: 0014 (opt-in confirm window: provisional commit with deadman revert)

Context

ADR 0012 refuses every non-no-op clustered live reload because the cluster had no version barrier, readiness gate, or coordinated rollback. The refusal was safe but forces orchestration downtime for every change, including trivially safe ones.

Decision

GoBridge implements a staged, all-member barrier protocol over the shared store: an operator posts a change to any node; it is proposed as a candidate generation with a frozen membership epoch; every member validates and builds it, then acks; a lease-elected, fencing-protected coordinator commits only when acks cover the epoch, else aborts (timeout, Nack, membership change). Members swap only on observing Committed. The protocol is opt-in (bridge.cluster.rollout: coordinated), requires the versioned DDB config source, and applies only to deltas passing the live-safe preflight — durable-identity and store-target changes keep 0012’s whole-cohort replacement.

The barrier is runtime-hosted: bridge.Supervisor and the shipped file-based bootstrap.App both drive it through a bridge.ClusterRolloutDriver bound to a ports.RolloutHost seam (the host is a port, not a bridge type), so the shipped image performs coordinated live-safe changes rather than the ADR 0012 refusal.

What the barrier guarantees, precisely

The guarantee is atomic before the commit, per-member after it. Both halves are load-bearing and neither implies the other:

That window is what makes the protocol usable at all — the alternative is a distributed post-commit rollback, which needs the same barrier again with traffic in flight. It is made safe not by being impossible but by being bounded and visible:

A provisional commit — one carrying a confirm window — is deliberately not counted as divergence by any of these, because it has decided nothing yet: the window itself handles a member that cannot converge, by reverting the cohort.

Callers that need a converged cohort rather than a committed one use the opt-in confirm window in ADR 0014, which gates the final Confirm on every member recording post-swap convergence and reverts the whole cohort otherwise.

Consequences

Rejected alternatives