gobridge

0014 — Confirm window: provisional commit with deadman revert

Status: accepted Date: 2026-07-25 Deciders: GoBridge core Relates to: 0013 (adds an opt-in convergence-gated layer on top of the coordinated rollout barrier)

Context

ADR 0013’s coordinated commit is final the moment every member has built the candidate (its Ack). One of 0013’s stated consequences is “Commit ≠ converged”: a committed config can still fail to converge against the real broker on a node and is alarmed, not rolled back. That is the right default — most changes should not pay a rollback — but for some changes a syntactically-valid config that cannot reach its broker (an ACL-denied topic, rotated-away credentials, an unreachable endpoint) staying active is worse than a second reconnect, and the operator would rather the cohort automatically revert than serve a non-converging generation until someone intervenes.

The design’s split-brain research (NETCONF confirmed-commit RFC 6241 §8.4, Cisco NSO commit confirmed) settles this with a “provisional apply with deadman timer”: apply, then require a confirmation within a window, else revert by inaction. It is the first mechanism that makes converged distinguishable from acked.

Decision

GoBridge adds an opt-in confirm window (bridge.cluster.confirm_window, a duration; empty/0 is the base ADR 0013 protocol). When set, a coordinated commit is provisional:

The confirm window keeps every ADR 0013 property: it is opt-in, requires the versioned DDB config source, applies only to live-safe deltas, and never produces a mixed-version cohort (revert is whole-cohort, not per-member).

Consequences

Rejected alternatives