Problem
Fleet census on a Tower host (2026-08-02) found 201 live shellper-main.js processes with only 80 tracked in GET /api/terminals. The single largest pure-leak class after test fixtures: 39 shellpers whose wrapped command is /bin/echo ready-probe (cwd=/tmp) — readiness-probe wrappers whose probe exited long ago, but whose shellper wrapper was never reaped. A second workspace's architect independently counted 53 of these earlier the same day, so the population grows continuously.
Expected
A readiness probe is fire-and-observe: once the wrapped /bin/echo exits, the shellper wrapper should reap itself (or Tower should reap it on probe completion). A probe must never outlive its answer.
Receipts
ps -eo pid,command | grep shellper-main.js | grep -c ready-probe # → 39
# none of their PIDs appear in GET /api/terminals (global)
Detection method per #1007: running shellper PIDs minus /api/terminals PIDs.
Related: #1007 (umbrella orphan accumulation), #1038 (startup orphan-reap).
Problem
Fleet census on a Tower host (2026-08-02) found 201 live
shellper-main.jsprocesses with only 80 tracked inGET /api/terminals. The single largest pure-leak class after test fixtures: 39 shellpers whose wrapped command is/bin/echo ready-probe(cwd=/tmp) — readiness-probe wrappers whose probe exited long ago, but whose shellper wrapper was never reaped. A second workspace's architect independently counted 53 of these earlier the same day, so the population grows continuously.Expected
A readiness probe is fire-and-observe: once the wrapped
/bin/echoexits, the shellper wrapper should reap itself (or Tower should reap it on probe completion). A probe must never outlive its answer.Receipts
Detection method per #1007: running shellper PIDs minus
/api/terminalsPIDs.Related: #1007 (umbrella orphan accumulation), #1038 (startup orphan-reap).