--- id: "bug-1725" status: "fixed" status_updated: "2026-10-03" status_note: "" component: "xceadmin" severity: "unknown" timestamp: "2026-08-28T00:00:00Z" last_seen: "2026-10-03T07:45:06Z" occurrences: 2 files: ["src/xceadmin/tests/test_e2e_live_ha_push.py"] tags: ["xceadmin", "config-push", "redirect", "OPCode_upgradeConfig", "stale-test", "design-doc-sync", "roadmap-sync", "race-condition", "config_activate_committed", "found-live", "root-caused", "live-verified"] related: ["bug-1724", "bug-1700", "bug-1701", "bug-1468"] fix_commits: ["362098b1"] legacy: true --- # bug-1725: After bug-1724's fix made… ## Description After bug-1724's fix made test_live_config_push_against_standby_returns_standby_rejection_not_redirect actually execute (previously always skipped), it FAILED for real: pushing config to a standby now redirects to the primary and succeeds, contradicting the test's own hard-coded 'standby flatly rejects, no redirect' assertions. Separately, the rewritten success-path test's reused _assert_primary_committed() helper intermittently failed its 4th assertion ('config activated from committed marker tag=...' not found in the primary's log immediately after the push CLI returned success). ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Corrected 2026-10-03. Part (1) of the original entry (stale standby-redirect assertion) was fixed earlier. Part (2), the recurring flake: the controller replies to the push before two of the lines the tests assert are logged — "Config upgraded to tag=" is logged right after `xce_reply()` (`config_repl.c` ~1865-1873) and "config activated from committed marker" comes from `config_activate_committed()` (`config_repl.c` ~376) on the asynchronous WAL apply pump. `test_e2e_live_push.py` read the log once with no polling (the 2026-10-03 recurrence), and the HA helper polled only for the activation line, not "Config upgraded". ## Fix Shared `assert_primary_committed()` in `src/xceadmin/tests/_live_e2e_common.py` polls (5 s) until the commit, upgrade and activation lines are all present, then asserts each; both live tests use it. Fix commit 362098b1. ## Verification - Test: helper unit tests in `src/xceadmin/tests/test_live_e2e_common.py` (lines logged after the reply are waited for; missing activation line fails; missing "Config upgraded" line fails) — the old single-read and activation-only patterns fail deterministically when the late lines are written 0.3 s after the read; GREEN after. Live tests looped 95 runs (incl. heavy CPU load) with 0 bug-1725 failures. - Suites: xceadmin 373 passed, 2026-10-03. - Live: n/a ## References - Related: bug-1724, bug-1700, bug-1701, bug-1468