pi-crew 0.11.8 → 0.11.10

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
@@ -1,5 +1,99 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.11.10] — F1: `V` live-conversation dead-end replaced with runtime-aware notice (2026-10-08)
4
+
5
+ ### Fixed
6
+
7
+ - **F1 (full-tier battery 2026-10-08)** — `V` (live conversation) ended in
8
+ "No live agent found for this run." on **every** child-process/scaffold run
9
+ (i.e. the default runtime — the in-process live-agent registry is only ever
10
+ populated by the ADR-frozen live-session runtime). `openLiveConversation` now
11
+ reads `manifest.runtimeResolution.kind` when no live agent matches and answers
12
+ with an actionable notice instead: child-process/scaffold runs are pointed at
13
+ the transcript viewer (`v` from the dashboard / `/team-transcript` — streaming
14
+ from disk, works live); live-session and legacy manifests keep the classic
15
+ message. Contract change: the return flag now means handled vs
16
+ cancelled/headless — the shared.ts fall-through notification (which also fired
17
+ spuriously on picker-cancel) is gone. Agents-browser live section unchanged
18
+ (honest empty list, not a dead end). Pins: 5 new tests in
19
+ `viewers-live-conversation.test.ts` (kind-routed notices, legacy manifest,
20
+ headless silent-false).
21
+
22
+ ## [0.11.9] — F-BAT1: broker socket dir dodges /tmp pi-crew-* sweeps + stale-probe race (2026-10-08)
23
+
24
+ Live-caught by the full-tier battery (T9b-W): worker coordination (`ask`/`message`/`delegate`)
25
+ returned ENOENT in BOTH sync and async runs while the runs stayed green (graceful degrade —
26
+ the exact silent-failure class the battery exists to catch).
27
+
28
+ Two stacked root causes:
29
+
30
+ 1. **Namespace collision** — with `XDG_RUNTIME_DIR` absent (sessions launched from
31
+ non-login envs), the broker's per-user dir fell back to `/tmp/pi-crew-<uid>`, which
32
+ THREE /tmp workspace sweeps (`cleanupLegacyOrphanTempDirs`, the orphan temp
33
+ reconciler, the health zombie scan) pattern-match as `pi-crew-*` debris and `rmSync`
34
+ — deleting the LIVE broker socket dir. Sessions with XDG_RUNTIME_DIR were
35
+ unaffected (/run/user is never swept), which is why this only bit some launches.
36
+ Fix: the no-XDG fallback now uses `.pi-crew-broker-<uid>` (dot-prefixed — no sweep
37
+ matches). XDG path unchanged.
38
+ 2. **Stale-probe race** — `removeStaleBrokerSocket` treated a connect TIMEOUT as
39
+ "stale" and unlinked a HEALTHY (slow-to-accept) broker socket. Only a definitive
40
+ `ECONNREFUSED` (kernel rejects connect on a listener-less socket) may ever unlink.
41
+
42
+ Cross-platform hardening (CI 2026-10-08, macOS catch): a NON-SOCKET entry at the
43
+ socket path (the classic leftover corpse) is now removed deterministically via
44
+ `lstat` — no connect probe — because connect() to a non-socket path is undefined
45
+ across kernels (Linux yields ECONNREFUSED, macOS a different errno). Sockets keep
46
+ the probe path: ECONNREFUSED → remove, timeout/other → keep.
47
+
48
+ Live re-verified end-to-end on the fixed bundle: socket binds at
49
+ `/tmp/.pi-crew-broker-1000/`, `ask` round-trip delivers the leader reply through
50
+ dependency-context (worker quotes it verbatim), `message` notify delivered, socket
51
+ survives the whole run. Pin suite `socket-path-fbat1.test.ts` (6 tests,
52
+ mutation-checked both halves; single mutations are neutralized by the paired guard —
53
+ defense-in-depth by design).
54
+
55
+ ## [0.11.9] — UI instability fix wave L1–L9 (2026-10-07)
56
+
57
+ Live-battery-driven fixes from the 2026-10-07 UI review
58
+ (docs/real-test/reports/real-test-2026-10-07-ui-instability-review.md +
59
+ real-test-2026-10-07-ui-fix-wave.md — 4 real runs, 308 live frames, T1/T5/T13 gates,
60
+ 5/5 mutation-verified pins).
61
+
62
+ ### Fixed
63
+
64
+ - **L1 — crew dock renders in every session (HIGH)**: `activeWidgetRuns()` no longer filters
65
+ runs by `ownerSessionId` — bystander terminals now see active runs owned by other sessions
66
+ (live evidence: 308 frames across 3 async runs + 1 headless run rendered 0 docks; widget of
67
+ another extension updated fine in the same session). Crash-recovery scoping unchanged.
68
+ - **L2 — no more flicker around run completion (HIGH-MED)**: the render-loop health gates
69
+ (GATE 1 / FIX#1 / GATE 3) now rebuild snapshots in place (`scheduleRefresh`) instead of
70
+ hard-deleting cache entries — restoring the FLICKER FIX invariant the gates had been
71
+ violating on every tick for terminal/divergent runs.
72
+ - **L3 — dashboard defaults to the right-anchored panel**: `ui.dashboardPlacement` default
73
+ `"center"` → `"right"` (mirrors updated in install.mjs + both EFFECTIVE_DEFAULTS maps). The
74
+ centered 90% overlay exposed chopped background words at both margins on every width probed
75
+ (160/100/80) — pi-tui keeps base content visible outside overlay bounds by design.
76
+ - **L4 — sidebar auto-close deadline no longer slides**: the deadline is captured on first
77
+ eligibility and re-armed only when the run leaves terminal state; the "auto-close in 3s…"
78
+ countdown now reflects a fixed deadline instead of being reset by every re-render.
79
+ - **L6 — sidebar height locked** (dashboard `targetHeight()` pattern): loading → loaded →
80
+ shrunk frames share one height, killing ghost `┃` rows.
81
+ - **L5 — sync snapshot rebuild off the paint path**: new `readForRender()` cached-only accessor
82
+ + coalesced async refresh for render(); keypress paths with sync read-after-write keep
83
+ `refreshIfStale` (Tier 11a read-your-writes preserved).
84
+
85
+ ### Changed
86
+
87
+ - **L7 — TUI dialect sweep**: dashboard agent preview + mailbox pane now use `↑/↓` compact
88
+ usage instead of `tok=/in=/out=/model=/age=` wire format; live-conversation overlay uses
89
+ `formatDuration` (`5m44s`) instead of raw seconds; dead `formatLiveDuration` export removed.
90
+ - **L8 — `CURSOR_MARKER` defensive resolve** (settings overlay, mailbox compose): named import
91
+ replaced with the W4/G22 typeof-guard pattern — no ESM crash on hosts whose pi-tui lacks the
92
+ export.
93
+ - **L9 — dock truncation priority**: status pieces (`1 running`, `3/5 done`) are atomic — they
94
+ render whole or drop, never split mid-word (`1 runnin…` gone at 40 cols); meta pieces drop
95
+ first; plurals via `formatCount` across dashboard/panes/dispatcher.
96
+
3
97
  ## [0.11.8] — Pi 1.0.4 adoption + RPC/surface hardening + battery-proven stability (2026-10-07)
4
98
 
5
99
  ### Added — deep-learn polish batch (docs/reviews/pi-1.0.0-deep-learn-r3-2026-10-03.md R3 matrix)