forked from lei.chen/myxce
30-round chaotic soak reported committed_job_loss=1 at round 25, but the flagged job was confirmed present on every later verify and the final sweep -- a real loss never comes back. Root-caused from ctrl-1/ctrl-2/ctrl-3 logs, no controller change needed: a newly-elected primary cannot fold a prior-term entry into its own committed_lsn merely because it holds it durably (Raft Figure-8 safety via ha_arm_own_term_gate) -- it needs a fresh majority ack for its own-term WAL_NOOP first. That normally closes in <200ms, but chaotic mode's overlapping-restart design let it stretch to 6.232s this run (the peer whose ack was needed was itself mid-catch-up from its own recent restart). verify_classify ran its expect-job check immediately on primary detection with no settle/retry, unlike verify_no_loss (bug-1422) or wait_for_full_convergence, so it landed inside that window. Added a bounded retry (5 attempts, 2s settle) around the LOSS classification only, mirroring verify_no_loss's precedent -- a job still missing after that still counts as a genuine loss. Verified with a fresh 30-round chaotic re-soak: committed_divergence=0 committed_job_loss=0 result=PASS. |
||
|---|---|---|
| .. | ||
| gitea-sync | ||
| kiro-debug | ||
| kiro-discovery | ||
| kiro-impl | ||
| kiro-review | ||
| kiro-spec-batch | ||
| kiro-spec-design | ||
| kiro-spec-init | ||
| kiro-spec-quick | ||
| kiro-spec-requirements | ||
| kiro-spec-status | ||
| kiro-spec-tasks | ||
| kiro-steering | ||
| kiro-steering-custom | ||
| kiro-validate-design | ||
| kiro-validate-gap | ||
| kiro-validate-impl | ||
| kiro-verify-completion | ||
| xce-audit-invariants | ||
| xce-build | ||
| xce-deploy-ha | ||
| xce-test-ha | ||