chore(wolf): sync anatomy/cerebrum/memory/hooks/token-ledger bookkeeping

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AgYRU3zDTqNGV5Jk8aiKLg
This commit is contained in:
Rongsong Shen 2026-08-25 12:29:23 +00:00
parent 977607615f
commit 1b86e04078
No known key found for this signature in database
GPG key ID: 5BCDAAE0123E9FE2
5 changed files with 1243 additions and 39 deletions

View file

@ -1,7 +1,7 @@
# anatomy.md
> Auto-maintained by OpenWolf. Last scanned: 2026-08-25T10:38:09.375Z
> Files: 736 tracked | Anatomy hits: 0 | Misses: 0
> Auto-maintained by OpenWolf. Last scanned: 2026-08-25T12:14:35.422Z
> Files: 737 tracked | Anatomy hits: 0 | Misses: 0
## ../../../../../../tmp/
@ -957,16 +957,16 @@
- `ha_convergence.c` — Declares char (~8389 tok)
- `ha.c` — define _GNU_SOURCE (~126128 tok)
- `ha.h` — ifndef HA_H (~34172 tok)
- `job.c` — include <assert.h> (~36630 tok)
- `job.c` — include <assert.h> (~37152 tok)
- `join.c` — include "config.h" (~2994 tok)
- `main.c` — build-time-versioning task 3.2 (argp_program_version runtime-composed into static `version_buf[128]`, "My name is..." startup INFO reads that buffer) PLUS dirty-content-fingerprint task 3.2 (2026-08-21): new static `version_display_buf[128]` composed via `xce_compose_version_ex()` (adds `STR(VERSION_DIRTY_FINGERPRINT)`) feeds `argp_program_version` instead; `version_buf`'s composition + the startup INFO log are byte-identical/untouched (Req 3.2). Live-verified: `--version` -> `7ebcba6d-cdb7cc7d`, startup log -> `7ebcba6d-dirty` (~5346 tok)
- `meson.build` (~3499 tok)
- `meson.build` (~3510 tok)
- `misc.c` — include <errno.h> (~1359 tok)
- `myapp.c` — define _GNU_SOURCE (~6287 tok)
- `myconf.c` — define _GNU_SOURCE (~1180 tok)
- `opget.c` — include "config.h" (~1730 tok)
- `opupd.c` — include "config.h" (~714 tok)
- `persist.c` — define _GNU_SOURCE (~98160 tok)
- `persist.c` — define _GNU_SOURCE (~100668 tok)
- `queue.c` — include <errno.h> (~1554 tok)
- `repl.c` — include <assert.h> (~9240 tok)
- `reply.c` — include "config.h" (~590 tok)
@ -989,7 +989,7 @@
- `clean_failover_preservation.sh` — clean_failover_preservation.sh — ha-term-safety task 5.2 live integration test. (~5327 tok)
- `configcompare.c` — define _GNU_SOURCE (~2273 tok)
- `configcompare.h` — pragma once (~1186 tok)
- `controller_test.c` — include <argp.h> (~2417 tok)
- `controller_test.c` — include <argp.h> (~2437 tok)
- `ctrlstatus_fmt.h` — ifndef _CTRLSTATUS_FMT_H_ (~631 tok)
- `resval_typeresolve.c` — resval_resolve_type(): resource-name -> Value_u_which table lookup (14 known names unchanged) + task 2.1's numeric-default fallback / `-t` type_override for unrecognized names (~499 tok)
- `resval_typeresolve.h` — declares resval_resolve_type()/RESVAL_TYPE_UNKNOWN; task 2.1 fallback now implemented (~676 tok)
@ -1031,6 +1031,7 @@
- `test_sched_admin_dispatch.c` (~7510 tok)
- `test_sched_worker_change.c` — Declares bug (~3893 tok)
- `test_term_safety_adapter.c` — define _GNU_SOURCE (~29920 tok)
- `test_wal_job_ckpt_fact.c` — bug-1691 regression suite: WAL_JOB_CKPT restart-drop fix for job.ckptinfo (plain char*, xstring-backed via makeString()). 7 tests: apply_committed_entry unconditional-decode (no-state-change is the key test, since on_job_ckpt() never changes state — mirrors bug-1690's RUSAGE divergence) + forward-transition + backward-compat, apply_wal_entry adopt + backward-compat, direct-payload restart replay, and a real on_job_ckpt() production-path restart-replay test (needed `persist_init(..., &c)` not NULL, since CKPT is hook-driven like RUSAGE, not a direct call site like DISPATCH/START/FINISH — persist_start() only registers persist_job_hook_fun when p->cluster != NULL) (~7000 tok)
- `test_wal_job_dispatch_fact.c` — Declares in (~5222 tok)
- `test_wal_job_finish_fact.c` — Declares as (~6904 tok)
- `test_wal_job_rusage_fact.c` — bug-1690 regression suite: WAL_JOB_RUSAGE restart-drop fix for job.run_usage. 8 tests covering both apply seams, backward compat, restart replay via the real persist_job_hook_fun(), and (key test) a merge-safety proof using a real makeString()'d host_name to confirm the fix never frees a live/xstring-backed pointer (~9250 tok)
@ -1102,7 +1103,7 @@
- `persist.h` — pragma once; bug-1689: declares persist_submit_job_finish_fact() (~26004 tok)
- `utils.h` — dirty-content-fingerprint task 3.1: new `xce_compose_version_ex()` extern decl (--version-only sibling of xce_compose_version(), adds optional `dirty_fingerprint` param); startup-log call sites keep calling the untouched xce_compose_version() (~2720 tok)
- `wal_types.h` — pragma once (~3360 tok)
- `wal_types.h` — pragma once (~3804 tok)
## src/include/xce/

View file

@ -121,6 +121,9 @@
- **(2026-08-25, bug-1689) The bug-1687 apply-seam pattern (split a shared-payload WAL fact type out of `apply_wal_entry()`'s shared `case` group into its own case, extend `apply_committed_entry()`'s existing inline `else if (wal_type == X)` branch, add a `restore_job_<type>_state()` sibling in job.c, add a `persist_submit_job_<type>_fact()` sibling in persist.c/persist.h) generalizes cleanly to a THIRD job-fact type (WAL_JOB_FINISH) with one twist: not every such fact needs Cap'n Proto.** `job_exitinfo_t` (`xce/types.h`) is a single `{int exitcode;}` with no existing capnp mapping (confirmed via grep — no `JobExitInfo` in `controller.capnp`), so the trailing payload was a small NATIVE (raw memcpy) fixed-size trailer instead of a capnp-encoded blob — no malloc needed either, since the whole payload is fixed-size (unlike WAL_JOB_START's variable-length JobPIDInfo or WAL_JOB_DISPATCH's JobAlloc). General rule going forward: before reaching for capnp on a new WAL trailing payload, check whether the struct being carried already has a capnp mapping AND has any variable-length/nested-pointer fields — if it's a small fixed POD with neither, a raw `memcpy`'d native trailer (mirroring `wal_jobstate_t`'s own style) is simpler and correct, matching this codebase's own "small native trailing struct" precedent for `wal_jobstate_t` itself. Also discovered mid-fix: `apply_job_finish_transition()` (the "richer" core that DOES set exit_info/finish_time/run_time correctly) is effectively DEAD CODE on the real production apply path today — raft-apply-decoupling's redesign routes all real WAL_JOB_FINISH mutation through the leaner `apply_job_update_transition()` (state-only) instead, so `exit_info` was never populated through the live commit-apply pipeline at all, restart or not, prior to this fix (worse than "only breaks on restart"). When auditing a "richer transition function exists but the apply seam uses a leaner one" pattern (already documented for WAL_JOB_START in bug-1687's persist.h comment), always check whether the richer function has ANY live caller at all, not just whether it's correct.
- **(2026-08-25, bug-1689) Reconfirms the bug-1687 "multiple concurrent sessions write `.wolf/buglog.json`" lesson with a fresh, independent collision — re-check the max id immediately before EVERY write, every time, not just once per session.** Checked max id at session start (1687, free), implemented the full fix using "bug-1688" throughout code comments/test file, then re-checked right before writing the buglog entry (per this project's own mandated protocol) and found bug-1688 had been claimed by a sibling session's unrelated scheduler REPL bug in the interim — required a `sed -i 's/bug-1688/bug-1689/g'` across all 5 touched files before writing the entry as bug-1689. Zero cost when caught by re-checking as instructed; would have been a duplicate-id buglog corruption if skipped.
- **(2026-08-25, bug-1687) `ptrace` is fully unavailable in this sandbox — `gdb -p <pid>` fails with "Operation not permitted" even with `dangerouslyDisableSandbox: true`, and `/proc/<pid>/task/*/stack` is also unreadable (no permission).** The only process-introspection signal available without ptrace is `/proc/<pid>/task/*/{wchan,status,comm}` (shows which kernel function a thread is blocked in, e.g. `futex_do_wait`, and its state, e.g. `S (sleeping)`) plus `ps -o pid,etime,time` (wall-clock ELAPSED vs. CPU TIME — a process with large ELAPSED but near-zero TIME is genuinely blocked/deadlocked, not slow-computing; this distinction is what first proved the bug-1687 hang was a real deadlock and not just a slow test run). To actually isolate WHICH test in a monolithic Unity binary is hanging when `-t <group>` only filters at group-function granularity (see the existing entry on this): temporarily insert an early `return;` inside the group's own driver function (e.g. `test_commit_barrier_reply()`) right after a candidate `RUN_TEST()` call, rebuild+run with a bounded `timeout N`, and binary-search by moving the `return;` — each step is a full, clean process exit (no ptrace needed) so the log's last line IS trustworthy for that step (unlike a genuinely-hung run, where stdio is fully-buffered when redirected to a file/pipe and the last visible log line can be UP TO ~4KB of buffered-but-unflushed output stale relative to where the hang actually occurred — do not trust "last line before a real hang" as the hanging test's identity without this bisection). **After finishing this kind of diagnostic bisection, grep the group's own driver function for accidentally-DUPLICATED `RUN_TEST()` calls before considering the file clean** — inserting new `RUN_TEST()` lines ahead of a temporary `return;` marker and then later deleting only the marker (not the inserted lines) leaves the original, further-down calls to the same tests still present, silently double-running them (caught here via `git diff` showing a nonzero `+RUN_TEST`/`-RUN_TEST` net and a suspiciously-inflated total test count).
- **(2026-08-25, bug-1691) `/tmp` in this shared sandbox can silently fill to 0 bytes free across many unrelated sessions, because `mkdtemp()`-based test fixtures across this whole codebase only `rm -rf` their scratch dir on the NORMAL end-of-test path — any run aborted mid-way by ENOSPC (or a crash, or a killed process) leaves its 64-128MB scratch dir behind forever, compounding: fuller disk -> more runs abort early -> more orphans -> fuller disk still.** Found live: a build+test run failed with `OSError: [Errno 28] No space left on device`, both from meson's own JSON/XML report writer AND, worse, from genuine mid-test `mkdtemp failed`/spurious `Expected Non-NULL` failures in UNRELATED test files once disk hit 0 during actual test execution — that second failure mode produces a CORRUPTED, untrustworthy pass/fail signal, not just a build-tool crash, so a run showing many unrelated failures right after an ENOSPC condition should be re-run after fixing disk, never trusted as real regression evidence. Root cause found via `ls -1 /tmp | grep -c '^xce_'`: 15,437 orphaned `/tmp/xce_*` scratch directories (~658GB) had accumulated from prior sessions. Verified none were held open by any live process first (`for p in /proc/[0-9]*; do ls -la "$p/fd" | grep <pattern>; done` — empty output = safe to delete; a live `xce-deploy-*` HA cluster's OWN workdir, e.g. `/tmp/xce-deploy-1679`, DOES show up in a live process's cmdline/cwd and must NOT be deleted). Fix: `rm -rf /tmp/xce_*` recovered 658GB instantly (359MB free -> 659GB free). **Whenever a build/test run in this sandbox fails with ENOSPC or `df -h /` shows near-0 available, check for this exact pattern before assuming it's a real disk-capacity problem or someone else's live process** — it is very likely safe, accumulated test-fixture debris, not a resource genuinely in use.
- **(2026-08-25, bug-1691) A shared-fixture footgun found copy-pasting a sibling WAL-fact test file's "drive the real production entry point through a real restart cycle" test: `persist_init(&c.persist, &cfg, NULL)` (the exact line every prior sibling test — bug-1687/1689's START/FINISH suites — uses) is WRONG for a hook-driven fact type, even though it is byte-identical to what those working sibling tests do.** `persist_start()` only registers `persist_job_hook_fun`/`persist_queue_hook_fun`/`persist_worker_hook_fun` on `p->cluster->hooksys` when `p->cluster != NULL` (persist.c). DISPATCH/START/FINISH's production functions call `persist_submit_job_*_fact()` DIRECTLY, bypassing the hook system entirely, so those sibling tests' `NULL` 3rd-arg is harmless. But CKPT (like bug-1690's RUSAGE) is HOOK-DRIVEN: `on_job_ckpt()` only ever calls `xce_run_hooks(..., HOOK_DETAIL_JOB_CKPT, ...)` and relies ENTIRELY on `persist_job_hook_fun` being a registered subscriber to reach the WAL at all. With `NULL` passed, the real-call test silently appends NOTHING (no crash — `xce_run_hooks` on an unregistered detail is simply a no-op), so the restart-replay assertion fails with "ckptinfo NULL" even though the fix code itself was already fully correct — a genuine RED-signal red herring that looks exactly like a fix defect. Diagnosed by noticing the 6 hand-built-payload tests all passed (proving the apply-seam decode/adopt logic itself was right) while ONLY the real-production-call test failed, then re-reading `persist_start()`'s actual gating condition rather than assuming the copied fixture was correct because it was copied from a passing sibling. **General rule: before copying a sibling WAL-fact test file's "drive the real production function" fixture, check whether YOUR fact type's producer calls `persist_submit_job_*_fact()` directly (safe to pass NULL) or is purely hook-driven via `xce_run_hooks()` (MUST pass a real `cluster_t*` to `persist_init()`'s 3rd arg so `persist_start()` registers the hook) — grep the producer function's own body, don't assume parity from a structurally-similar sibling test.**
- **(2026-08-25, bug-1691) `controller_unit_test` (not just `xce_test`, extending the existing entry on this) also loses ALL buffered stdout (both PASS and FAIL lines) when run directly with output redirected to a file/pipe AND `ASAN_OPTIONS`'s default `detect_leaks=1` finds leaks** — LeakSanitizer's atexit-registered check appears to bypass libc's normal `exit()`-time stdio flush, so a process that ran 7/7 tests successfully to completion produced a log with ONE clean LeakSanitizer summary and ZERO printed PASS/FAIL text anywhere, first reading as "harness produced no output, something is badly wrong" before realizing it was a buffering artifact. `stdbuf -oL` does NOT fix it (worse: it breaks ASAN's LD_PRELOAD-ordering requirement, producing `ASan runtime does not come first in initial library list`) — the correct fix is `ASAN_OPTIONS=detect_leaks=0 ./controller_unit_test -t <group>` when reading stdout directly (matches meson's own test-harness invocation, which already sets this — the SAME binary run through `meson test` shows real PASS/FAIL text fine). The leaks themselves (spy-fixture jobs created via `makeJob()` into a `jobmgr` with no `.datakiller`, never individually torn down) are PRE-EXISTING and IDENTICAL across every sibling `test_wal_job_*_fact.c` suite (confirmed: `test_wal_job_rusage_fact` in isolation shows 78 leaked allocations too) — not a new leak introduced by any one fix, not worth chasing.
## Do-Not-Repeat
- **When translating a `fp_ok`-tracked, per-step-gated failure-detection pattern (like `xce-build.sh`'s dirty-fingerprint computation) into a Make `$(shell sh -c '...')` one-liner, do NOT collapse two commands into `{ cmd1; cmd2; } >"$$fp_tmp"` and gate the whole group with one `if`** — a POSIX sequential group's exit status reflects only its LAST command, so `cmd1`'s failure is silently discarded whenever `cmd2` still succeeds (2026-08-21, bug-1612: `git diff HEAD` failing was swallowed because the trailing `git ls-files | sort | xargs cat` pipe still exited 0, producing a fabricated fingerprint instead of degrading to empty). Give each step its own explicit `if ! step; then fp_ok=0; fi` (or `&&`-chain), exactly mirroring the reference script's discipline, even inside a cramped one-liner. Caught by adversarial code review with a targeted failure-injection test (wrapper `git` on `PATH` that fails only the targeted subcommand) — that test pattern is the reusable way to verify this class of fix.

View file

@ -118,13 +118,13 @@
"first_read": "2026-08-25T07:27:17.276Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c": {
"count": 45,
"tokens": 97979,
"count": 51,
"tokens": 99861,
"first_read": "2026-08-25T07:27:27.677Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/job.c": {
"count": 23,
"tokens": 36631,
"count": 24,
"tokens": 36630,
"first_read": "2026-08-25T07:27:28.858Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/ha.c": {
@ -208,8 +208,8 @@
"first_read": "2026-08-25T07:41:57.960Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/include/wal_types.h": {
"count": 4,
"tokens": 3178,
"count": 5,
"tokens": 3360,
"first_read": "2026-08-25T07:44:46.985Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/tools/xce-build.sh": {
@ -218,7 +218,7 @@
"first_read": "2026-08-25T07:45:30.532Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/include/xce/types.h": {
"count": 3,
"count": 4,
"tokens": 5439,
"first_read": "2026-08-25T07:46:57.369Z"
},
@ -258,7 +258,7 @@
"first_read": "2026-08-25T07:58:23.880Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/include/persist.h": {
"count": 5,
"count": 6,
"tokens": 26004,
"first_read": "2026-08-25T07:59:46.203Z"
},
@ -328,13 +328,13 @@
"first_read": "2026-08-25T09:29:39.634Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/meson.build": {
"count": 3,
"tokens": 3488,
"count": 4,
"tokens": 3499,
"first_read": "2026-08-25T09:31:05.167Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/controller_test.c": {
"count": 4,
"tokens": 2407,
"count": 6,
"tokens": 2417,
"first_read": "2026-08-25T09:35:28.617Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/schema/controller.capnp": {
@ -363,7 +363,7 @@
"first_read": "2026-08-25T10:21:31.165Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/lib/xstring.c": {
"count": 1,
"count": 2,
"tokens": 0,
"first_read": "2026-08-25T10:23:00.512Z"
},
@ -373,9 +373,29 @@
"first_read": "2026-08-25T10:25:05.547Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/test_wal_job_rusage_fact.c": {
"count": 1,
"tokens": 9012,
"count": 2,
"tokens": 9250,
"first_read": "2026-08-25T10:36:21.330Z"
},
"/home/claude/.claude/projects/-home-rshen-projects-xce-worktrees-scheduler-framework/1154007c-9056-440f-bb0e-c5649f2ee7b9/tool-results/br32qkf2l.txt": {
"count": 1,
"tokens": 0,
"first_read": "2026-08-25T10:54:51.472Z"
},
"/nix/store/rr5fxmcw3dslrxd87dyhr3xz8hvvm1c2-rtti-0.0.2/include/rtti.h": {
"count": 1,
"tokens": 0,
"first_read": "2026-08-25T11:02:06.683Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/test_wal_job_finish_fact.c": {
"count": 1,
"tokens": 6904,
"first_read": "2026-08-25T11:03:55.850Z"
},
"/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/test_wal_job_ckpt_fact.c": {
"count": 2,
"tokens": 6636,
"first_read": "2026-08-25T12:14:05.554Z"
}
},
"files_written": [
@ -1104,6 +1124,96 @@
"action": "edit",
"tokens": 36,
"at": "2026-08-25T10:38:09.382Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/include/wal_types.h",
"action": "edit",
"tokens": 491,
"at": "2026-08-25T11:05:57.961Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 53,
"at": "2026-08-25T11:06:08.071Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 251,
"at": "2026-08-25T11:06:19.584Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 508,
"at": "2026-08-25T11:06:38.216Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 504,
"at": "2026-08-25T11:06:59.449Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 885,
"at": "2026-08-25T11:07:40.780Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 145,
"at": "2026-08-25T11:08:16.466Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 592,
"at": "2026-08-25T11:08:32.305Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/persist.c",
"action": "edit",
"tokens": 305,
"at": "2026-08-25T11:08:46.027Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/job.c",
"action": "edit",
"tokens": 610,
"at": "2026-08-25T11:09:10.046Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/test_wal_job_ckpt_fact.c",
"action": "create",
"tokens": 7110,
"at": "2026-08-25T11:12:49.661Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/meson.build",
"action": "edit",
"tokens": 24,
"at": "2026-08-25T11:12:59.644Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/controller_test.c",
"action": "edit",
"tokens": 25,
"at": "2026-08-25T11:13:10.037Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/controller_test.c",
"action": "edit",
"tokens": 20,
"at": "2026-08-25T11:13:20.211Z"
},
{
"file": "/home/rshen/projects/xce/worktrees/scheduler-framework/src/controller/testsuite/test_wal_job_ckpt_fact.c",
"action": "edit",
"tokens": 290,
"at": "2026-08-25T12:14:35.432Z"
}
],
"edit_counts": {
@ -1126,12 +1236,12 @@
"src/controller/testsuite/test_ha_durability.c": 3,
"src/controller/CLAUDE.md": 1,
"src/include/persist.h": 2,
"src/include/wal_types.h": 4,
"src/controller/persist.c": 20,
"src/controller/job.c": 8,
"src/include/wal_types.h": 5,
"src/controller/persist.c": 28,
"src/controller/job.c": 9,
"src/controller/testsuite/test_wal_job_start_fact.c": 1,
"src/controller/meson.build": 3,
"src/controller/testsuite/controller_test.c": 6,
"src/controller/meson.build": 4,
"src/controller/testsuite/controller_test.c": 8,
"src/scheduler/testsuite/test_limit_plugin.c": 2,
"src/scheduler/testsuite/meson.build": 4,
"src/scheduler/src/plugins/limit.c": 1,
@ -1140,11 +1250,12 @@
"src/controller/testsuite/test_commit_barrier_reply.c": 9,
"src/controller/testsuite/test_wal_job_finish_fact.c": 1,
"src/schema/controller.capnp": 1,
"src/controller/testsuite/test_wal_job_rusage_fact.c": 4
"src/controller/testsuite/test_wal_job_rusage_fact.c": 4,
"src/controller/testsuite/test_wal_job_ckpt_fact.c": 2
},
"anatomy_hits": 47,
"anatomy_misses": 28,
"repeated_reads_warned": 191,
"anatomy_hits": 49,
"anatomy_misses": 30,
"repeated_reads_warned": 207,
"cerebrum_warnings": 0,
"stop_count": 39
"stop_count": 40
}

View file

@ -4027,3 +4027,20 @@
| 03:37 | Edited src/controller/meson.build | 2→3 lines | ~35 |
| 03:38 | Edited src/controller/job.c | 3→3 lines | ~34 |
| 10:51 | bug-1690: WAL_JOB_RUSAGE/job.run_usage restart-drop fixed -- new capnp HostRunusage/JobRunusage schema, merge_job_runusage() safety fix (avoids freeing a live makeString()-backed host_name), both apply seams, 8 new tests, RED(6 fail)/GREEN(1160 tests 0 new fail) verified | src/schema/controller.capnp, src/controller/{job,persist}.c, src/include/wal_types.h, test_wal_job_rusage_fact.c | GREEN, buglog.json updated | ~n/a |
| 03:54 | Session end: 121 writes across 33 files (persistence.md, SKILL.md, plugin.h, plugin.c, driver.c) | 75 reads | ~790021 tok |
| 04:05 | Edited src/include/wal_types.h | expanded (+22 lines) | ~458 |
| 04:06 | Edited src/controller/persist.c | 2→3 lines | ~49 |
| 04:06 | Edited src/controller/persist.c | added error handling | ~234 |
| 04:06 | Edited src/controller/persist.c | added 3 condition(s) | ~474 |
| 04:06 | Edited src/controller/persist.c | added error handling | ~470 |
| 04:07 | Edited src/controller/persist.c | added 3 condition(s) | ~826 |
| 04:08 | Edited src/controller/persist.c | modified switch() | ~136 |
| 04:08 | Edited src/controller/persist.c | added 2 condition(s) | ~552 |
| 04:08 | Edited src/controller/persist.c | added 2 condition(s) | ~285 |
| 04:09 | Edited src/controller/job.c | added error handling | ~570 |
| 04:12 | Created src/controller/testsuite/test_wal_job_ckpt_fact.c | — | ~6636 |
| 04:12 | Edited src/controller/meson.build | 1→2 lines | ~22 |
| 04:13 | Edited src/controller/testsuite/controller_test.c | 1→2 lines | ~23 |
| 04:13 | Edited src/controller/testsuite/controller_test.c | 1→2 lines | ~19 |
| 05:14 | Edited src/controller/testsuite/test_wal_job_ckpt_fact.c | expanded (+10 lines) | ~270 |
| 12:27 | bug-1691 (WAL_JOB_CKPT loses job.ckptinfo on restart replay) fixed and verified | src/controller/job.c, src/controller/persist.c, src/include/wal_types.h, src/controller/testsuite/test_wal_job_ckpt_fact.c (new, 7 tests), src/controller/meson.build, src/controller/testsuite/controller_test.c, .wolf/buglog.json | RED (7 failures)->GREEN (0 new failures); full suite 1167 Tests 2 Failures (pre-existing bug-1561 only); also found+fixed 15,437 orphaned /tmp/xce_* scratch dirs (~658GB) blocking the build | ~large |

File diff suppressed because it is too large Load diff