From b3d1a4b552a46ac17d2a458b7d0d6fa177c4e20d Mon Sep 17 00:00:00 2001 From: AIOSAI Date: Sat, 11 Jul 2026 21:45:03 -0700 Subject: [PATCH] CHANGELOG: add the 3 post-S300 fix entries under [2026-07-11] for the PR659 merge (watchdog Monitor double-fire -> stderr banner fix + README rewrite note; watchdog test thread-race flakes thread-scoped; seedgo-audit 99%->100% regression fixes). Docs-only, per merge PPLAN-0007 step 2. --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e1d6b0e..1527fca2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,33 @@ PyPI version — not the changelog header. ### Fixed +- **Watchdog Monitor wake no longer double-fires (#693 follow-on, reported by + VERA via the feedback channel).** The `watchdog agent` reminder banner + ("invoke via Monitor tool, not run_in_background") printed to STDOUT at arm + time, and the harness Monitor tool treats every stdout line as a wake event — + so every armed watchdog fired a spurious wake the instant it armed, then the + real wake at completion. Rerouted to stderr (`err_console`); stdout now + carries completion/stall events only, matching the contract the agent handler + already followed. Verified live: exactly one wake, on real exit. The devpulse + README watchdog/feedback sections were also rewritten to document the owner + gate, the 3-step Monitor wake mechanic, why no passive wake can exist, and + the 600 s default timeout. + +- **Watchdog agent tests thread-race flakes made deterministic (devpulse).** + Four tests patched the GLOBAL `time.sleep` with stateful/side-effecting + fakes; prax's logger spawns daemon threads on first log, which executed the + fakes concurrently with the test (advancing a fake clock, unlinking the + fixture lock early, or re-truncating `last_bounce.json` mid-read in + `_classify_exit` → `exit_code=None`). All fakes are now thread-scoped via a + caller-frame guard: only sleeps from the agent module trigger the test's + side effect; foreign threads get a real 1 ms sleep. + +- **seedgo-audit back to 100 % after the S300 commits (PR659).** Two 99 % + regressions from that day's own work: `aipass` `doctor.py` `_fix_owner_seating` + had two silent catches (now log via prax like the sibling check function), + and the devpulse README claimed 407 tests where the readme checker counts + test functions (corrected to 309). + - **Two more non-hermetic ai_mail tests made deterministic (PR659).** With the full suite now running on varied CI runners, `test_get_pid_cwd_darwin_failure` and `test_is_zombie_linux_no_proc` intermittently failed: they called the real `lsof`