--- id: "bug-459" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "controller" severity: "unknown" timestamp: "2026-06-13T00:30:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: ["src/controller/repl.c", "src/controller/config_repl.c"] tags: ["ha", "config-repl", "quorum", "configAck", "commit-barrier", "upgradeConfig"] related: ["bug-396"] legacy: true --- # bug-459: configAck quorum fabricated success: counted acked_config_lsn > 0 (any previous upgrade's ack)… ## Description configAck quorum fabricated success: counted acked_config_lsn > 0 (any previous upgrade's ack), denominator n_active with no self-count, and n_active==0 short-circuited to success; upgradeConfig also ACKed the admin tool unconditionally and requested restart even when the majority wait timed out (logged-only result) ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause legacy connectivity-based counting on the configAck track predated the commit engine's per-push arithmetic; push_config_to_standbys returned the transport push count and only logged the barrier outcome, so do_upgrade_config_with_bytes could not observe failure ## Fix task 5.2: configAck branch counts acked_config_lsn >= push_tag (entry_lsn carries the tag), majority 1+count > n_peers/2 over engine n_peers, n_peers<=1 immediate 0, ce==NULL -EINVAL fail-loud; push_config_to_standbys returns the barrier result (push count via acked_out); do_upgrade_config_with_bytes sends send_upgrade_error and skips success ACK + restart on non-zero; committed_config_tag advance stays success-branch-only ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-396