myxce/.wolf/STATUS.md
Rongsong Shen 8e66d463ea
docs(buglog): bug-1914, bug-1917, bug-1918 fixed; refresh STATUS.md
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 23:59:29 +00:00

57 lines
4.2 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.

# STATUS
> Single source of truth for resuming work. Read this FIRST when starting a session.
> Update at the end of every work phase so the next `/clear` resumes in 1 read.
---
## ✅ Done (2026-10-03/04)
- **HA fixes, committed + pushed** (`88a8bf8a`..`e27bc2ed`, Gitea #338-#340 closed):
- bug-1915: a PreVote round is decided once; a leader promotes only with its own election's votes; `raft_on_leader_lost` keeps `voted_for`.
- bug-1919: the promotion fence releases once a node that booted RECOVER_TRUNCATED has caught up (runtime `recovery_truncation_healed` latch; the re-check re-arms).
- bug-1920: replicated WAL writes are refused before this boot's `persist_recover` (they truncated and misfiled `seg-...0001`, stalling catch-up); catch-up streams from min(join position, standby report).
- Soaks on that code: sequential 4x20 + 50, chaotic 50, loaded 30 (40 spinners on 32 cores) -- all PASS, WAL segment layout clean on every node.
- **bug-1914, bug-1917, bug-1918 fixed, committed + pushed:**
- bug-1918: `INVOKE_MSG_HANDLER` no longer drops a refused packet (leak).
- bug-1917: `xce_ctx_reconnect` quiesces the old endpoint (unmonitor, clear owner, drain refs, 2 s bound) before re-init.
- bug-1914: config-push barrier 500 -> 2000 ms under the commit-wait admission reservation; honest timeout reply.
- Verification: 127/127 suites; 80/80 live HA config pushes under 40 spinners; loaded seq-30 soak PASS, no ASAN.
---
## 🚀 Next phase
**Goal:** _None active._ Pick from the open items below.
### Open items (not yet actioned)
- **Checks needing a host with systemd/dbus** (this container has none): a running array element prints the right `XCE_JOBINDEX`; bug-1908's kept signal reaches a real (non-virtual) worker over IPC at RUNNING.
- **Exposing bug-1736's peak/efficiency fields in the apiserver/xcecli** (decision pending): needs a wire change (`run_usage` on `Job`, or a new notify event) plus cgo handler, store update and xcecli display -- spec-sized (`/kiro-spec-quick`), or drop it; nothing consumes the fields yet.
- **Specs awaiting the next phase:** design review -- `xce-node-manager`; requirements written -- `job-status-detail-display`, `scheduler-preemption`, `scheduler-sim-decision-trace`; initialized -- `commit-batch-window`, `resource-distribution-mapping`; brief -- `component-rejoin-resync`.
- **Roadmap backlog (briefs only):** application-profile → job-sandbox-execution → job-sandbox-multinode; job-time-window → job-dependency → job-dependency-insight; rbac-persistence; scheduler-alter-pend-reasons; controller-job-cleanup.
### Files to create / edit
- _none pending_
### Open decisions
- **REST job output for jobs with a custom `out_file`/`err_file`**: the worker never writes those paths (always `/tmp/job_<id>_task<N>.out`), so since bug-1508 `GET /jobs/:id/output` for such a job returns a permission error from the worker. Either the apiserver's `resolveOutputPath()` (controllers/output.go) always targets the worker's own output file, or the worker starts honouring `out_file`. Waiting on the user.
- **Bug records not mirrored to Gitea:** ~400 older records plus bug-1885–bug-1908 (bug-1914/1915/1917-1920 are mirrored). A sync without `--since`/`--ids` would create an issue for each. Default: leave them off Gitea.
---
## 📁 Active architecture
- **Stack:** Go API/CLI tier (`src/frontend/apiserver`) fronting C daemons (`src/controller`, `src/worker`, `src/scheduler`); Meson-based build via `src/tools/xce-build.sh`, hermetic nix dev shell.
- **Bug tracking:** `.wolf/bugs/*.md` (records) → `scripts/buglog.py` (CLI + checks) → `.wolf/buglog.json` (generated index) → `scripts/gitea-sync.py` (Gitea issues in `nexa/xce`).
- **Local-only, never committed:** `.claude/settings.json` (hook paths rewritten for this machine), `data/` (450 MB replays/logs).
---
## 🔧 Useful commands
```bash
python3 scripts/buglog.py list --open | new ... --binary <bin> | check <id> | status <id> fixed --commit <sha>
ln -sf ../../scripts/git-hooks/pre-commit .git/hooks/pre-commit # once per clone
XCE_HA_ROUNDS=6 nix develop ./src --command bash .claude/skills/xce-test-ha/run-ha-soak.sh --sequential <dir>
python3 scripts/gitea-sync.py --dry-run --bugs --since <date> [--ids bug-N,bug-M] # dry-run first
```