Skip to content

fix(supervise): settle a root that never spawned as no-children-spawned - #1269

Merged
drewstone merged 1 commit into
mainfrom
fix/no-children-spawned
Sep 16, 2026
Merged

drewstone merged 1 commit into
mainfrom
fix/no-children-spawned

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

A root that ran to completion under budget, selected nothing, and never spawned a child settled no-winner / all-children-down with downCount: 0. That reads as a fleet failure. Fifteen sandbox-placed directors settled that way this week (#1245) while the actual fault was that the root did its research in bash and never recursed — and every reader, including me, went looking at the fleet first. Today's sandbox-mcp-probe-20260916d, which called stop deliberately after spawning nothing, got the same label.

types.ts already acknowledged the ambiguity when driver-failed was carved out; this carves out the other half.

Change

  • New reason no-children-spawned on the no-winner lifecycle arm, chosen in the residual bucket when fleetYield.spawned === 0.
  • all-children-down now asserts what its name says: at least one child was spawned and none delivered.
  • Two tests that pinned the old value on a zero-spawn tree flip; one was about token telemetry and never cared which reason it got.

Release

0.236.0 — the exported reason union widens. A consumer that switched on the reason and treated the old value as "the fleet lost everything" adds the new arm; a consumer that only counted no-winner is unaffected.

Proof, local

tsc --noEmit clean; biome clean; vitest run on supervisor.test.ts, tests/kernel/supervise.test.ts, tests/mcp/delegate.test.ts, tests/kernel/supervise-full-profile-bridge.test.ts, tests/kernel/retained-environment-release.test.ts: 204/204. Build, api:surface, docs freshness pass. Full suite running.

🤖 Generated with Claude Code

A root that ran to completion under budget, selected nothing, and never
spawned a child settled `all-children-down` with `downCount: 0`. That
reads as a fleet failure. Fifteen sandbox-placed directors settled that
way in one week while the actual fault was that the root did its work in
bash and never recursed, and every reader went looking at the fleet.

The residual bucket now checks fleetYield.spawned and names the case.
`all-children-down` asserts what its name says: at least one child was
spawned and none delivered. The two tests that pinned the old value on a
zero-spawn tree flip; one of them was about token telemetry and never
cared which reason it got.

Release 0.236.0: the no-winner reason union widens.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@drewstone
drewstone merged commit 9973f28 into main Sep 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant