pi-crew 0.11.42 → 0.11.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,66 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.11.44] — fix wave 16: full-backlog burn-down — liveness wiring everywhere + rmSync sweep complete + T-6(b) harden (2026-10-26)
6
+
7
+ Wave 15 left three open ends: the health-monitor/widget/powerbar/session-summary surfaces still judged liveness from
8
+ `lastActivityAt` alone, the bare-`rmSync` sweep had three batches (2a/2b/3) outstanding, and `state-helpers-cas-contention`
9
+ kept flaking on win32. This wave burns down all of them (SPEC-driven follow-ups to `fixwave15`/`fixwave13`).
10
+
11
+ **Added — `heartbeatLiveForDisplay(run, tasks, now)` shared export.** Wrapped predicate in `src/runtime/process-status.ts`
12
+ (manifest + tasks → active-or-fresh-heartbeat verdict). Wired into the remaining render surfaces: health-monitor
13
+ (stale-no-progress guard, 0 extra I/O via hoisted task read), crew widget (active filter, snapshot tasks only — no disk
14
+ reads), powerbar (active segment), session-summary (lazy coalesced read, fail-closed). Every UI surface now agrees with
15
+ the watchdog on run liveness — the wave-13/15 "displayed stale while heartbeat fresh" class is closed across the fleet.
16
+
17
+ **Fixed — the full bare-`rmSync` teardown backlog. All 4 sweep batches complete:** batch 2a extension+ui+workflows
18
+ (120 files), batch 2b runtime (208 files, 821 sites), batch 3 integration (33 files, 89 sites) — migrated to
19
+ `cleanupStateRoot`/`removeDirWithRetry`/drain-then-remove. Residual audit: the 44 remaining regex-matched lines are
20
+ 26 single-file deletes (intentional), 8 recursive-`force` false-positives, 10 intentional by test semantics — zero
21
+ actionable.
22
+
23
+ **Fixed — T-6(b) win32 flake (`state-helpers-cas-contention`).** Poll for tick-marker ≥1 after child exit (bounded 2 s)
24
+ plus one flush→reload→settled retry — targets the Windows rename-visibility gap (CAS rename lands but reader sees stale
25
+ cache) without changing test semantics.
26
+
27
+ **Battery (PASS).** wiring ×3 (health-monitor 23, session-summary-cov 5, crew-widget 8, powerbar 12 + regressions),
28
+ T-6b ×5 green, `test:critical` 124/124, full unit 10,078 pass / 0 fail / 4 skip, integration 144/0/4, static gates 0,
29
+ dist MATCH (1,893,366 B), leak sweep clean. (Two external-wrapper OOM incidents during the run — no test failures;
30
+ detached rerun completed green.)
31
+
32
+ **Docs.** Battery report
33
+ `docs/real-test/reports/real-test-2026-10-26-wave16-full-backlog-battery.md`.
34
+
35
+ ## [0.11.43] — fix wave 15: render trusts task heartbeats + teardown sweep batch 1 (2026-10-25)
36
+
37
+ Wave 13 fixed the watchdog's frozen-evidence hung verdicts by adding task heartbeats, but the render layer still
38
+ judged liveness from `lastActivityAt` alone — which freezes by construction during one long tool call. A run
39
+ executing a 20-min test suite displayed as "stale"/"orphaned" on the dashboard while its heartbeat was fresh.
40
+ Meanwhile the bare-`rmSync` inventory from the same deep review counted ~1,400 sites across 470 files; this wave
41
+ ships the render half and the first sweep batch (SPEC `fixwave15-display-heartbeat-sweep1-2026-10-25`).
42
+
43
+ **Added — `hasFreshTaskHeartbeatEvidence(tasks, now, ttl)`.** Pure predicate export from
44
+ `src/runtime/process-status.ts` (shared predicates untouched per GAP-4 purity). The render layer — run dashboard
45
+ and agents-jobs-browser — now treats a run with a fresh task heartbeat (`lastSeenAt` within the 5-min TTL,
46
+ `alive !== false`) as active and suppresses the "stale"/"orphaned" labels, closing the render half of wave 13's
47
+ liveness work. Old behavior pinned: no heartbeat / expired / `alive === false` ⇒ stale label stands.
48
+
49
+ **Fixed — teardown races in batch 1 of the bare-`rmSync` sweep.** 336 sites across 84 files in `test/unit/state/**`
50
+ + `test/unit/prompt/**` migrated to `cleanupStateRoot`/`removeDirWithRetry` (drain-then-remove over
51
+ retry-racing the async event-log writer). Intentional residuals kept: the `drain-event-log-writers` in-body
52
+ plain-`rmSync` assertion (it pins the exact race the API exists to fix), single-file deletes, and child-source
53
+ strings.
54
+
55
+ **Battery (PASS, adjudicated).** targeted ×3 (h1 heartbeat-evidence 11/11, h2 run-dashboard 4/4, h3
56
+ agents-jobs-browser 5/5 incl. 2 new heartbeat tests), sweep clusters 1,895 test-runs (4 load-timing fail-events,
57
+ all solo ×3 green), `test:critical` 124/124, full unit 10,081 pass / 1 adjudicated flake / 4 skipped, integration
58
+ 144/0/4, static gates 0, dist MATCH (1,893,087 B).
59
+
60
+ **Docs.** Battery report
61
+ `docs/real-test/reports/real-test-2026-10-25-wave15-render-heartbeat-sweep1-battery.md`. Residual noted:
62
+ health-monitor is not wired to the new predicate (its scan loop consumes tasks internally, not display).
63
+ Backlog: sweep batches 2a (415 sites/124 files), 2b (816/210), 3 (88/33).
64
+
5
65
  ## [0.11.42] — fix wave 14: event-log drain API + zombie-scanner seam (2026-10-25)
6
66
 
7
67
  Wave 12d papered over the recurring `ENOTEMPTY` teardown race with `removeDirWithRetry`; the root cause stayed: