diff --git a/.wolf/buglog.json b/.wolf/buglog.json index 8fb13519..5d741d79 100644 --- a/.wolf/buglog.json +++ b/.wolf/buglog.json @@ -14487,5 +14487,25 @@ ], "occurrences": 1, "last_seen": "2026-07-31T04:50:00Z" + }, + { + "id": "bug-1488", + "timestamp": "2026-08-01T03:30:00Z", + "error_message": "controller_unit_test: test_conf_trim_keeps_only_n_versions FAIL (Expected 2 Was 3); test_conf_get_saved_tag_no_config FAIL (Expected 0 Was 11954236611186853435). Suite 1070 Tests 2 Failures.", + "file": "src/controller/config_repl.c", + "root_cause": "conf_trim_old_versions sorted versioned config files by second-granularity st_mtime; the trim test saves 3 versions 15ms apart, so all st_mtime tie. glibc qsort (mergesort for n=3) is stable, keeping creation order with the NEWEST (current-pointer) entry last at index keep_n, and the deletion loop protects exactly that entry -> nothing pruned, 3 files remain. Second failure was a cascade: Unity assertion failure longjmps past cr_teardown(), leaking the tmpdir; cr_setup() built its path from (pid, time(NULL)) with second granularity, so the very next test reused the leaked dir and conf_get_saved_tag() read the leftover conf/current -> real tag instead of 0. Both tests + trim logic are pre-existing (2026-05-13, commit 491c255), not introduced by the origin/working merge.", + "fix": "conf_trim_old_versions: store st_mtim (struct timespec) in ver_entry_t and compare tv_sec then tv_nsec in ver_entry_cmp_desc, so same-second saves sort deterministically and the oldest is pruned. test_config_repl.c cr_setup(): add a static per-invocation counter to the tmpdir path so no two tests ever share a dir, even when a prior test's assertion failure skips teardown. Verified: nix develop ./src --command bash src/tools/xce-build.sh all -> meson 9/9 Ok 0 Fail, controller 1070 Tests 0 Failures, xceadmin 172 passed, frontend Go all ok.", + "tags": [ + "config-repl", + "trim", + "mtime", + "unit-test-isolation", + "pre-existing" + ], + "related_bugs": [ + "bug-918" + ], + "occurrences": 1, + "last_seen": "2026-08-01T03:30:00Z" } -] +] \ No newline at end of file diff --git a/.wolf/memory.md b/.wolf/memory.md index 12ee3e00..9883c6c2 100644 --- a/.wolf/memory.md +++ b/.wolf/memory.md @@ -7261,3 +7261,4 @@ | 02:30 | Session end: 35 writes across 11 files (_live_e2e_common.py, test_e2e_live_push.py, test_e2e_live_ha_push.py, manual_ha_deploy.sh, test_repro_bug1485.py) | 30 reads | ~366672 tok | | 02:31 | Session end: 35 writes across 11 files (_live_e2e_common.py, test_e2e_live_push.py, test_e2e_live_ha_push.py, manual_ha_deploy.sh, test_repro_bug1485.py) | 30 reads | ~366672 tok | | 02:32 | Session end: 35 writes across 11 files (_live_e2e_common.py, test_e2e_live_push.py, test_e2e_live_ha_push.py, manual_ha_deploy.sh, test_repro_bug1485.py) | 30 reads | ~366672 tok | +| 03:04 | Merged origin/working (64 commits: config-upgrade-snapshot feature + HA/repl bug fixes), deduped capnpc override — kept xce.nix fetchFromGitHub pin (bug-918 canonical fix), dropped flake.nix ghfast.top overlay | src/flake.nix, src/nixSupport/xce.nix | merged clean, 0 conflicts; nix files parse OK | ~1200 |