Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LXkenK8rqE8mdS1YKjsq78
7.9 KiB
XCE Project Status — Jul 27 – Aug 01, 2026
TL;DR
HA/Raft correctness work dominated the week: three permanent-wedge bugs closed (catch-up stall, quorum-loss deadlock, config-push race/UAF), raft-adapter-conformance spec landed complete, admin-config-tool and config-upgrade-snapshot both unblocked and near done. One exposed credential fixed. Scheduler work restarted: scheduler-framework decomposed into three child specs (scheduler-core, scheduler-allocation, scheduler-preemption), all currently at requirements-only (not yet approved for design).
Commits by day
Jul 27
add report, mergeworking→config, fix librtti package leak
Jul 28 — HA wedge fixes
- fix(ha): close permanent catch-up wedge from duplicated replication-target formula (bug-1478)
- fix(ha): close permanent standby catch-up wedge after WAL_CHECKPOINT boundary (bug-1475)
- fix(config): serialize
load_primary_configagainst concurrent invocations (bug-1476) - fix(ha): retry
cluster_init_phase2on failure instead of latchingphase2_doneunconditionally (bug-1477) - docs: re-block config-upgrade-snapshot task 8.6 on bug-1477, then clear stale admin-config-tool blocker (bug-1468 already fixed)
Jul 29 — raft-adapter-conformance build-out
- feat: term-adoption wired into primary-side config-push reply handler
- feat:
termfield added toReplConfigPushReplyschema - feat: explicit reply on every config-push outcome
- feat: route post-connect vote/PreVote failures to production tally
- fix(ha): close permanent quorum-loss deadlock on log-conflicted standby (bug-1479)
- test: PreVote post-connect failure routing + fast-quorum coverage; full config-push reply integrity; dormant AppendEntries sender non-regression; WAL catch-up reject reply-construction lock
- chore(wolf): logged bug-1480, bug-1481, bug-1482, bug-1483 (audit findings, not all fixed yet)
Jul 30 — conformance close-out + admin-config-tool E2E
- test(admin-config-tool): live single-node E2E test for config push
- fix(admin-config-tool): unwrap Request reply envelope before decoding as RequestReply
- docs(admin-config-tool): task 6.3 blocked pending flake reproduction (bug-1485)
- test(raft-adapter-conformance): batch payload persist-failure propagation regression lock
- docs: confirmed live soaks for tasks 7.1–7.4 (vote/PreVote post-connect failure, config-push rejection); extended controller conformance record; logged bug-1484
Jul 31
- fix(ha): retry chaotic-mode
verify_classifybefore counting job loss (bug-1487) — false-positive job-loss fixed in soak harness, not controller - fix(security): replace exposed
rshen/Letmeinadmin credential inauth.yamlwith placeholder; addedsrc/docs/deployment.mdfull ops guide - fix(waldump): decode
WAL_CONFIG_MARKER, distinguish trimmed gaps from real loss - docs(config-upgrade-snapshot): host admin-state frames, capnp migration, bug-1418 blocker cleared
- docs(raft-adapter-conformance): final design.md/research.md + spec.json state committed — spec complete
- add scheduler related projects —
scheduler-frameworkdecomposed intoscheduler-core(1311-line requirements.md),scheduler-allocation(619-line),scheduler-preemption(109-line); all requirements-generated, none approved yet - add wolf state (session memory checkpoint)
Aug 01 — no commits yet; working tree has only uncommitted .wolf/ session-state churn (memory.md, token-ledger.json, hooks/_session.json).
Bugs opened/fixed this window
| Bug | Status | Summary |
|---|---|---|
| bug-1475 | Fixed (2026-07-27/28, 2 findings) | Standby catch-up permanently wedged across a WAL_CHECKPOINT boundary — 3-part fix (config_repl.c prev-tracker, ha.c JIT resync, persist.c TERM_INDEX_UNSET sentinel) plus a second snapshot-install variant of the same class, closed with the same sentinel |
| bug-1476 | Fixed (2026-07-28, re-fixed same day) | Heap-use-after-free race in load_primary_config — first landed fix left the lock un-acquired (RED), re-fixed for real with myconf->lock + decode-into-local-then-swap |
| bug-1477 | Fixed | cluster_init_phase2 latched phase2_done on failure, blocking HA bootstrap retry |
| bug-1478 | Fixed | Duplicated replication-target formula caused permanent catch-up wedge |
| bug-1479 | Fixed | Permanent quorum-loss deadlock on log-conflicted standby |
| bug-1480 | Fixed (2026-07-29 09:43, b7828eed) |
Config-push reply missing explicit reject+term — fixed same day, buglog fix: field was stale (written 07:05, before landing) until corrected 2026-08-01 |
| bug-1481 | Fixed (2026-07-29 13:53, fce73b5b) |
vote_ep_err_handler bypassed production tally on post-connect failure — fixed same day, buglog fix: field was stale until corrected 2026-08-01 |
| bug-1482 | Fixed | Not a real UAF — erroneous free_packet call in a test (pkt already owned/consumed by xce_decode); test + doc comment corrected |
| bug-1483 | Open | Pre-existing test-mode leak in ha_arm_heartbeat_timeout_vtask (c==NULL calloc never freed); workaround only (stub+reset hook in every LOST-path test), not fixed at root |
| bug-1484 | Open, explicit residual | No test drives real repl_ack_decode_and_dispatch term-adoption for heartbeat-reply/WAL-NACK vectors; Req 7.5 "already verified" claim rests on unverified ground; out of scope for raft-adapter-conformance, needs a follow-up task |
| bug-1485 | Open, flaky, 24 occurrences | test_live_config_push_against_primary_reaches_success_path — admin-config-tool task 6.3 blocked on this |
| bug-1486 | Documented (workflow, no code fix) | Concurrent xce-build.sh sessions clobber shared build dir (rm -rf race) — mitigation: check ps auxf before trusting a stale background build log |
| bug-1487 | Fixed | 30-round chaotic soak false-positive job-loss — actually a 6.2s Figure-8 commit-barrier window, not real loss; fix adds bounded retry to verify_classify in the soak harness |
Spec status changes
- raft-adapter-conformance — requirements/design/tasks all approved,
ready_for_implementation,blocked_on: []. Final design.md/research.md committed Jul 31. Effectively done. - admin-config-tool — both historical blockers (bug-1468 dispatch-inversion, bug-1461 capnp
Datashadowing) now marked RESOLVED; task 6.3 HA E2E test still blocked on a flaky-test repro (bug-1485). - config-upgrade-snapshot —
blocked_oncleared to[](bug-1418 confirmed fixed, no regression); host admin-state frames and capnp migration work added. - scheduler-framework — formally decomposed (phase:
decomposed) into three child specs, all atrequirements-generated/ not approved:scheduler-core— 1311-line requirements.mdscheduler-allocation— 619-line requirements.mdscheduler-preemption— 109-line requirements.md- Next step for this line of work is design approval on whichever child spec proceeds first.
Notable non-bug items
- Security: a live, checked-in
cluster_admincredential (rshen/Letmein) inauth.yamlwas replaced with a placeholder — flag for credential rotation if that value was ever deployed anywhere real. - New doc:
src/docs/deployment.md— full ops guide for building/running all four daemons + xceadmin, written from direct source verification + a live single-node deploy; explicitly documents production gaps (no process supervision, plaintext non-controller traffic, exposed dev creds). - waldump: now decodes
WAL_CONFIG_MARKER, so trimmed-segment gaps are no longer misreported as real data loss during investigations.
Open threads heading into next session
scheduler-core/scheduler-allocation/scheduler-preemptionneed requirements review + design phase — nothing is implementation-ready yet.- bug-1480/1481/1482/1483/1484/1485 remain open (raft-adapter-conformance audit residue + one ASan UAF in netio.c).
- Uncommitted
.wolf/session-state changes sitting in working tree (harmless, not code).