# Work Summary: Jul 19 – Jul 26, 2026 ## Branch: `config` | Project: XCE Cluster Management System --- ## Overview Week focused on three major workstreams: completing `clusterconfig-schema-split` (Jul 21), shipping `admin-config-tool` (Jul 22), and executing `config-upgrade-snapshot` tasks 8.0–8.9 (Jul 24–26). Two critical bugs discovered during soak testing (bug-1475 standby liveness stall, bug-1476 config-reload UAF) remain open. Two bugs fixed and committed (bug-1472 worker replication, bug-1474 repl slot clobber). --- ## Day-by-Day Summary ### Jul 19 (Fri) - **bug-1452** fixed: `commit_engine_fini`/`persist_stop` teardown race in controller - **xce-audit-invariants** controller pass completed - **bug-1453/1454/1455/1456**: scheduler + xcecli dead CA-cert plumbing removed, scheduler HA config bugs fixed ### Jul 20 (Sat) - Continued scheduler/xcecli cleanups from Jul 19 - Git: `94f50ce6` — fix(scheduler,cli): bug-1453–1456 remove dead CA-cert plumbing ### Jul 21 (Mon) — `clusterconfig-schema-split` ship day - **All 12 tasks (1.1–6.2) completed**, spec marked implementation-complete - Dead fields removed from `ClusterConfig` capnp schema and `cluster_config_t` - Two-tier port fallback (`cluster_open_listener`), dead port defaulting removed - Orphaned `HashZArrayConfig`/`ResmgrConfig` structs removed - CLI flags for hash-table tunables (optional Req 6) - 3-node HA live soak verified clean - Commits: 17 commits from `0205ac3c` through `519e11c7` ### Jul 22 (Tue) — `admin-config-tool` ship day - **All 18 tasks (1.1–5.6) completed**, spec marked implementation-complete - **New binary**: `xceadmin` — Python-based admin config build/push/discovery tool - Package: `xceadmin.build` (YAML→capnp), `xceadmin.push` (controller push), `xceadmin.discovery` (auto-detect), `xceadmin.cli` (CLI entry) - Library: `xcecommon.schema`, `xcecommon.validation`, `xcecommon.mapping`, `xcecommon.wire` - Schema fix: `Data` struct renamed to `XceData` (unshadow capnp builtin blob type) - Wired into meson + nix build, HA deploy/test skills, `deploy-ha.sh --build-config` - Tests: golden-file build determinism, mock-controller push/dry-run coverage - Commits: 18 commits from `b30a856a` through `b6bf7cb8` ### Jul 23 (Wed) — Stabilization + Spec expansion - **config-upgrade-snapshot** spec expanded: 6 requirements, 26 ACs, 9 tasks (8.0–8.9) - `blocked_on` cleared to `[]` after bug-1418 re-verified FIXED (10-round chaotic soak PASS) - **bug-1462** fixed: late-joiner config-push stall — `ha_promotion_config_tag_floor` clamps `committed_config_tag` to `max(safe_tag, self_tag)`. 20+20 round soaks PASS - Limits.yaml wired through `cluster_config` into controller (real config path) - xcecli: restored dangling CA-cert cleanup, enabled https support - **resource-distribution-mapping** spec scaffolded, scope deferred (3 candidate sizes) - **cc-sdd to Gitea sync** skill added - **bug-1464** identified: `xce-build.sh` shared build-dir clobber (per-component `rm -rf`) - Commits: 12 commits from `bf6a9b34` through `cae4ef0c` ### Jul 24 (Thu) — config-upgrade-snapshot heavy lift Tasks 8.0–8.5 executed: - **Task 8.0**: HostAdminState/QueueAdminState capnp structs defined, snapshot format version bumped (`9e68335a`) - **Task 8.1**: Host admin-state frames collected into checkpoint, queue frames migrated to capnp wire (`a71aa3f8`, `70ff3e5b`) - **Task 8.2**: Embed active configuration bytes in every checkpoint — safety gate (`387ea35c`) - **Task 8.3**: Restore host admin-state frame safely with create-if-missing (`5b1600a8`) - **Task 8.4**: Configcompare tool + snapverify extended for byte-identical diff (`1d09631d`) - **Task 8.5**: Add bug-857 regression test, correct design.md (`2bd44e8e`) - **Materialization**: upgrade snapshot materialized on config-marker apply (`1da26b04`) - **Activation fence**: hash-verification gate on materialized snapshot; primary serving/promotion gated on fence pass (`7b507156`, `89b85e16`) - Removed restart/replay fallback for config activation (`41af0540`) Commits: 10 commits from `9e68335a` through `1da26b04` ### Jul 25 (Fri) — Soak testing, bug discovery, task 8.6–8.9 - **Task 8.6**: Live config-upgrade soak infra built (`run-ha-soak.sh --config-upgrade`). Fixed bug-1468 (repl config-push duplicate-connect) and bug-1469 (config tag clamp). **Blocked on bug-1472** (out-of-scope HA replication defect for worker admin-status). - **Task 8.7**: Fault-inject crash/restart + leadership change tests (`d4af605f`) - **Task 8.8**: Overlapping config upgrades supersede cleanly (`b78efd03`) - **Task 8.9**: Live WAL-trim-under-chaos soak infra, blocked on bug-1474 (`8b3e2ab0`) **Major bugs discovered (open):** | Bug | Severity | Description | |-----|----------|-------------| | **bug-1475** | HIGH | Standby catch-up liveness stall: WAL_CHECKPOINT at lsn=12 poisons applied-lsn advertisement. Root cause: `persist_write_checkpoint_marker` does NOT update term index → `on_get_entry_term(12)` returns 0 → raft library takes `ae_append` path not `ae_conflict_truncate`. Primary streams lsn=13 at raft index 12 → ctrl-1 applied_lsn never advances past 12 → infinite `ae_reject_logmismatch` loop. Full mechanism documented in claude-mem obs 16689–16706. | | **bug-1476** | HIGH | `load_primary_config` concurrent UAF (heap-use-after-free). Two vCPU threads can concurrently free and decode `myconf->cluster_config` via `handle_repl_config_push` → ASAN crash in `decode_Resource_list`. No mutex protecting the read-free-decode sequence. | **Build issues:** - Ninja/Meson parallel-build race (5th recurrence logged) - ASAN rebuild: 2 full retries needed, all 1033 tests pass clean after retry2 Commits: 7 commits from `959b0cda` through `8b3e2ab0` ### Jul 26 (Sat, early morning) — Bug fixes for 8.6/8.9 blockers - **bug-1474** FIXED: two-pass slot allocation (virgin→oldest-disconnect) in `repl.c`. WAL-retention guard clobber prevented standby slot reuse. 2 tests RED→GREEN. Commit: `c0b0c7d1` - **bug-1472** FIXED: worker admin-status replication gap. `worker_from_capnp` used INSERT semantics (new worker) instead of UPDATE (existing worker). +3 tests. Commit: `7547a8f1` - **1033 tests all pass** (C + Go + Python layers, ASAN clean) Commits: 2 commits --- ## Spec Status | Spec | Phase | Status | |------|-------|--------| | **config-upgrade-snapshot** | Implementation | Tasks 8.0–8.9: 8.0–8.5 complete, 8.6 blocked on bug-1472 (now fixed), 8.7 done, 8.8 done, 8.9 blocked on bug-1474 (now fixed). Tasks 8.6 & 8.9 need soak re-verification. 6 reqs / 26 ACs. | | **clusterconfig-schema-split** | **COMPLETE** | All 12 tasks done, live-soak verified | | **admin-config-tool** | **COMPLETE** | All 18 tasks done, xceadmin binary shipped | | **resource-distribution-mapping** | Scoping | Scaffolded, scope deferred | --- ## Bug Register (Jul 19–26) | Bug | Date | Status | Description | |-----|------|--------|-------------| | bug-1452 | Jul 19 | **FIXED** | commit_engine_fini/persist_stop teardown race | | bug-1453/4/5/6 | Jul 19–20 | **FIXED** | Dead CA-cert plumbing in scheduler/xcecli | | bug-1418 | Jul 23 | **VERIFIED FIXED** | term desync + apply-divergent stall (re-verified with 10-round chaotic soak) | | bug-1462 | Jul 23 | **FIXED** | Late-joiner config-push stall | | bug-1464 | Jul 23 | **KNOWN** | xce-build.sh shared build-dir clobber (mitigation: use `/xce-build all`) | | bug-1468 | Jul 25 | **FIXED** | Repl config-push duplicate-connect | | bug-1469 | Jul 25 | **FIXED** | Config tag clamp on promotion | | bug-1475 | Jul 25 | **OPEN** | Standby catch-up liveness stall (WAL_CHECKPOINT term-index gap) | | bug-1476 | Jul 25 | **OPEN** | load_primary_config concurrent UAF | | bug-1472 | Jul 25→26 | **FIXED** | Worker admin-status replication (INSERT→UPDATE semantics) | | bug-1474 | Jul 25→26 | **FIXED** | Repl slot-reuse guard clobber (two-pass allocation) | --- ## Commits: 63 total (Jul 19–26) ``` c0b0c7d1 fix(repl): harden standby slot allocation (bug-1474) 7547a8f1 fix(worker): replicate admin host-control status (bug-1472) 8b3e2ab0 feat(config-upgrade-snapshot): task 8.9 WAL-trim-under-chaos soak infra b78efd03 feat(config-upgrade-snapshot): task 8.8 overlapping config upgrades d4af605f test(config-upgrade-snapshot): fault-inject crash/restart + leadership (task 8.7) 959b0cda feat(config-upgrade-snapshot): live config-upgrade soak + bug-1468/1469 (task 8.6) 2bd44e8e feat(config-upgrade-snapshot): bug-857 regression test (task 8.5) 1d09631d feat(config-upgrade-snapshot): configcompare tool + snapverify (task 8.4) 4aeae6e2 test(config-upgrade-snapshot): WAL-trim safety + fault-injection seam 41af0540 feat(config-upgrade-snapshot): remove restart/replay fallback 89b85e16 feat(config-upgrade-snapshot): gate primary on activation fence 7b507156 feat(config-upgrade-snapshot): activation fence materialization+hash 1da26b04 feat(config-upgrade-snapshot): materialize upgrade snapshot on config-marker apply 00cd26a9 feat(config-upgrade-snapshot): decode host/queue admin-state on checkpoint load 5b1600a8 feat(config-upgrade-snapshot): restore host admin-state safely 38735ea5 feat(config-upgrade-snapshot): embed config bytes in checkpoint 70ff3e5b feat(config-upgrade-snapshot): migrate queue admin-state to capnp a71aa3f8 feat(config-upgrade-snapshot): collect host admin-state frames 9e68335a feat(config-upgrade-snapshot): HostAdminState/QueueAdminState capnp structs e0c5e8b7 fix(nix): pin capnpc source to immutable commit cae4ef0c chore: save wolf state c921e59b feat: resource distribution map project 1705495a fix(admin-config-tool): xceadmin config build warnings 4ec40167 fix(xcecli): restore CA-cert cleanup, enable https ff1be480 merge b87d5e68 chore: commit wolf status 60c25c39 chore(openwolf): update session memory/buglog/anatomy 8ee98bee docs(config-upgrade-snapshot): expand spec to 6 reqs/26 ACs bf6a9b34 feat(tooling): cc-sdd to Gitea sync skill 18e7a0e9 feat(controller): wire limits.yaml through cluster_config 0649e17f fix(controller): clamp committed_config_tag on promotion (bug-1462) ee8473bd feat(admin-config-tool): drop ha/data/, match real client TLS db2b5f17 fix(admin-config-tool): pin xceadmin python3 to meson resolution d5330fc9 feat(admin-config-tool): wire xceadmin into HA deploy/test skills 893a01db feat(admin-config-tool): install standalone xceadmin binary via meson e4fd9e1d feat(admin-config-tool): wire xceadmin into meson + nix build b6bf7cb8 chore(admin-config-tool): mark implementation-complete (18 tasks done) a1478510 docs(admin-config-tool): commit spec docs and example configs 67cc3611 feat(admin-config-tool): task 5.6 mock-controller push/dry-run coverage 48a5a0b4 feat(admin-config-tool): task 5.4 golden-file build determinism tests b5040e08 feat(admin-config-tool): tasks 5.1-5.3 mapping/wire/schema coverage ad27147a feat(admin-config-tool): task 4.2 deploy-ha.sh --build-config eeda32c6 feat(admin-config-tool): task 4.1 xceadmin.cli c33ef7d4 feat(admin-config-tool): task 3.3 xceadmin.push e53c086e fix(schema): rename Data -> XceData 7ed3a394 feat(admin-config-tool): task 3.2 xceadmin.discovery 72798d4a feat(admin-config-tool): task 3.1 xceadmin.build 77ee831e feat(admin-config-tool): task 2.4 xcecommon.wire 666a838f feat(admin-config-tool): task 2.3 xcecommon.mapping 3a2094a4 merge: job_peek_lchen dbf5c6c5 feat(admin-config-tool): task 2.2 xcecommon.schema 12b13a54 feat(admin-config-tool): task 2.1 xcecommon.validation 798f19b8 feat(admin-config-tool): task 1.3 nix + xce-build.sh integration 2e4ef4e2 feat(admin-config-tool): task 1.2 shared exception taxonomy b30a856a feat(admin-config-tool): task 1.1 xceadmin package skeleton 519e11c7 chore(controller): clusterconfig-schema-split mark complete a74eb008 docs(controller): clusterconfig-schema-split close validation gaps 553da7c7 feat(controller): clusterconfig-schema-split task 6.2 CLI tunables c3107b95 feat(controller): clusterconfig-schema-split task 6.1 CLI flags edd79562 chore(controller): clusterconfig-schema-split task 5.3 single-node live-verified 3e01fb1b chore(controller): clusterconfig-schema-split task 5.2 3-node HA soak f503a43d feat(controller): clusterconfig-schema-split task 5.1 regenerate cluster.bin 29f9b026 chore(controller): clusterconfig-schema-split task 4 build+test verified ba6fdc57 feat(controller): clusterconfig-schema-split task 3 fix test fixtures 1fa78443 feat(controller): clusterconfig-schema-split task 2.3 remove dead port default 81fecb49 feat(controller): clusterconfig-schema-split task 2.2 remove candidates debug-dump 8f047d93 feat(controller): clusterconfig-schema-split task 1.3 remove orphaned structs 1229f9a9 feat(controller): clusterconfig-schema-split task 2.1 two-tier port fallback 0205ac3c feat(controller): clusterconfig-schema-split task 1.2 remove dead members 51524820 feat(controller): clusterconfig-schema-split task 1.1 remove dead fields 94f50ce6 fix(scheduler,cli): bug-1453/1454/1455/1456 dead CA-cert + HA config 619f41f7 chore: update OpenWolf session state (bug-1452 fix) d67ccc22 fix(controller): bug-1452 commit_engine_fini/persist_stop teardown race e1f4d676 chore: update OpenWolf session state (xce-audit-invariants pass) ``` --- ## Next Steps 1. **Soak re-verify tasks 8.6 and 8.9** with bug-1472 + bug-1474 fixes applied. Both blocking bugs now fixed, but soak must pass end-to-end. 2. **bug-1475** needs root-cause fix: `persist_write_checkpoint_marker` must update term index so `on_get_entry_term` returns correct term for WAL_CHECKPOINT slot. 3. **bug-1476** needs mutex guard on `load_primary_config`'s `myconf->cluster_config` read-free-decode sequence. 4. **Task 8.6** blocked_on cleared (bug-1472 fixed), can proceed with worker admin-status rotation verification. 5. **Task 8.9** blocked_on cleared (bug-1474 fixed), can proceed with WAL-trim-under-chaos verification. --- *Generated 2026-07-26 | Branch: `config` | 63 commits, 4 bugs fixed, 2 specs shipped, 2 bugs open*