Skip to content

Commit b762c76

Browse files
affandarclaude
andcommitted
Release v0.5.11
Two session-reliability fixes from the 2026-07-12 waldemort-chk facts-manager incident: zombie turns now self-settle when the Copilot CLI subprocess dies mid-turn (inactivity watchdog, default 5 min, plus the wall-clock turn cap now on by default at 10 min — both worker-side, settling into the existing transport-loss retry path), and a stale cron timer firing after cron(action="cancel") is ignored instead of throwing a non-retryable TypeError that permanently failed the orchestration. Full --all-providers suite green before release: baseline PgFactStore 153 passed / 2 skipped; HorizonDB overlay 18 provider files + 154 passed / 1 skipped. CHANGELOG + README banner updated; versions bumped across the three published packages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BtBRbuyZXVGJ6zf3p7HftN
1 parent 581b472 commit b762c76

6 files changed

Lines changed: 51 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,47 @@
11
# Changelog
22

3+
## 0.5.11 — 2026-07-12
4+
5+
### SDK
6+
7+
- **Zombie turns now self-settle.** When the Copilot CLI subprocess died
8+
mid-turn (e.g. V8 heap OOM), `session.idle` never arrived and
9+
`ManagedSession.runTurn` awaited forever — the durable `runTurn` activity
10+
stayed in-flight permanently and the session wedged while its message queue
11+
backed up. Two worker-side guards now settle the turn (no orchestration
12+
change; an explicit `0` disables either):
13+
- **Inactivity watchdog** (`turnInactivityTimeoutMs`, default 5 minutes): a
14+
live turn emits a steady event stream, so total silence means the
15+
subprocess is dead or wedged. Settles as a retryable transport-loss error
16+
whose message matches the connection-closed classifier, riding the
17+
existing recovery path — release affinity, retry on a fresh subprocess,
18+
bounded lossy-handoff fallback.
19+
- **Wall-clock turn cap** (`turnTimeoutMs`, default 10 minutes): the
20+
pre-existing timeout race was dead code — nothing ever set it. It is now
21+
on by default as the blunt backstop.
22+
- Guard timers are cleared when the turn settles and their rejections are
23+
pre-handled; both guards also cover the text-tool-call correction loop's
24+
idle waits.
25+
- **A stale cron timer fire after `cron(action="cancel")` no longer kills the
26+
session.** Cancel clears the schedule, but the already-armed durable timer
27+
for the next tick cannot be retracted. When it fired, `processTimer`'s
28+
`cron` branch dereferenced the missing schedule and threw a `TypeError`
29+
that surfaced as a non-retryable `OrchestrationFailed` — permanently
30+
failing the session and orphaning its sub-agents. The stale fire is now
31+
ignored (traced, no `session.cron_fired`), matching the guard the `cron_at`
32+
branch already had.
33+
34+
### Tests
35+
36+
- `turn-inactivity-watchdog.test.js` — the incident shape (subprocess acks
37+
`send()` then goes silent forever) must settle as a transport-loss error
38+
the orchestration's connection-closed classifier accepts; steady event flow
39+
past the threshold must never trip the watchdog; defaults-on behavior;
40+
`0`-disables contract; no armed timers after a clean turn.
41+
- `orchestration-stale-cron-timer.test.mjs` — a stale cron fire after cancel
42+
is a no-op (no throw, no `session.cron_fired`); an active cron fire still
43+
records `session.cron_fired` first.
44+
345
## 0.5.10 — 2026-07-12
446

547
### SDK

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **Experimental** — This project is under active development and not yet ready for production use. APIs may change without notice.
44
5-
> **Latest release: v0.5.10**The portal session list now shows real owner initials instead of `?` (a paged-list read path, `cms_list_sessions_page`, wasn't joining the owner — fixed in CMS migration 0028; ownership was always persisted). Agent mobile splash screens now persist correctly — `splashMobile` is carried through session creation so phones get the narrow-viewport banner instead of the wide desktop art. Plus redesigned management-agent desktop splashes (solid ANSI-Shadow logos with color bands).
5+
> **Latest release: v0.5.11**Two session-reliability fixes. A dead Copilot CLI subprocess can no longer wedge a session forever: turns now self-settle via an inactivity watchdog (default 5 min of total event silence) plus a default 10-minute wall-clock turn cap, then retry on a fresh subprocess through the existing transport-loss recovery. And a stale cron timer firing after `cron(action="cancel")` no longer hard-fails the orchestration — the unretractable next-tick timer is now ignored instead of dereferencing the cleared schedule.
66
77
A durable execution runtime for [GitHub Copilot SDK](https://github.com/github/copilot-sdk) agents. Crash recovery, durable timers, session dehydration, and multi-node scaling — powered by [duroxide](https://github.com/microsoft/duroxide). Just add a connection string.
88

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/app/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pilotswarm",
3-
"version": "0.5.10",
3+
"version": "0.5.11",
44
"description": "PilotSwarm application package: terminal UI, browser portal + Web API server, and MCP server — one install, three bins.",
55
"type": "module",
66
"license": "MIT",
@@ -77,7 +77,7 @@
7777
"hono": "^4.12.10",
7878
"ink": "^6.8.0",
7979
"jose": "^6.2.2",
80-
"pilotswarm-sdk": "^0.5.10",
80+
"pilotswarm-sdk": "^0.5.11",
8181
"react": "^19.2.4",
8282
"react-dom": "^19.2.4",
8383
"ws": "^8.18.2"

packages/horizon-store/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pilotswarm-horizon-store",
3-
"version": "0.5.10",
3+
"version": "0.5.11",
44
"type": "module",
55
"description": "HorizonDB-backed enhanced facts and graph providers for PilotSwarm.",
66
"main": "./dist/src/index.js",

packages/sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pilotswarm-sdk",
3-
"version": "0.5.10",
3+
"version": "0.5.11",
44
"description": "A durable execution runtime for GitHub Copilot SDK agents. Crash recovery, durable timers, session dehydration, and multi-node scaling — powered by duroxide.",
55
"type": "module",
66
"main": "./dist/index.js",

0 commit comments

Comments
 (0)