gobridge

0012 — Cluster config changes require whole-cohort replacement

Status: accepted Date: 2026-07-16 Deciders: GoBridge core Supersedes: 0007 Superseded by: 0013 (for live-safe deltas only)

Overview

Superseded by 0013 for live-safe deltas. A coordinated cohort (cluster.rollout: coordinated on the versioned DynamoDB config source) now rolls live-safe deltas through an all-member barrier instead of refusing them. This ADR still governs everything else: a non-coordinated cluster, an EFS/file-sourced cluster, and any replacement-required delta (durable-identity or store-target change) keep the whole-cohort replacement procedure below.

Context

Each GoBridge process watches, validates, and applies configuration independently. The cluster has no config-version consensus, all-member readiness gate, or coordinated rollback. A live per-process rollout could therefore leave members on different route, store, session, and policy definitions indefinitely.

Lease fencing cannot make that split safe. In particular, changing a session identity or lease/outbox store target can create independent active drainers or strand durable records. A local config-version CAS only serializes writes to a shared config source; it does not coordinate application across the cohort.

ADR 0007 selected AdoptValid so read-only workers would not overwrite valid Admin-API changes on shared EFS. The mode is now historical; the enduring rule is read-only worker configuration access. The original ADR incorrectly treated startup adoption as a live cluster rollout mechanism.

Decision

GoBridge rejects every non-no-op live reload of or into a clustered deployment, fail-closed.

A clustered config change is an externally coordinated whole-cohort replacement:

  1. Stage the exact config and validate it against every member’s image/plugins.
  2. Quiesce ingress, drain all work, and stop every member.
  3. Commit the staged config while the cohort is down.
  4. Start every member.
  5. Re-enable ingress only after every member reports the target config_version and passes the Full/readiness barrier.

Any failure keeps ingress quiesced and rolls the entire cohort back to the previous config. The normative procedure is docs/runbooks/cluster-config-rollout.md.

Consequences

Alternatives considered