myxce/reports/jul27-aug02-2026.md
2026-08-02 04:37:28 +00:00

85 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`, merge `working`→`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_config` against concurrent invocations (bug-1476)
- fix(ha): retry `cluster_init_phase2` on failure instead of latching `phase2_done` unconditionally (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: `term` field added to `ReplConfigPushReply` schema
- 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_classify` before counting job loss (bug-1487) — false-positive job-loss fixed in soak harness, not controller
- fix(security): replace exposed `rshen/Letmein` admin credential in `auth.yaml` with placeholder; added `src/docs/deployment.md` full 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-framework` decomposed into `scheduler-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 `Data` shadowing) now marked RESOLVED; task 6.3 HA E2E test still blocked on a flaky-test repro (bug-1485).
- **config-upgrade-snapshot** — `blocked_on` cleared 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 at `requirements-generated` / not approved:
- `scheduler-core` — 1311-line requirements.md
- `scheduler-allocation` — 619-line requirements.md
- `scheduler-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_admin` credential (`rshen/Letmein`) in `auth.yaml` was 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
1. `scheduler-core`/`scheduler-allocation`/`scheduler-preemption` need requirements review + design phase — nothing is implementation-ready yet.
2. bug-1480/1481/1482/1483/1484/1485 remain open (raft-adapter-conformance audit residue + one ASan UAF in netio.c).
3. Uncommitted `.wolf/` session-state changes sitting in working tree (harmless, not code).