Public: anyone can read this; the crew can change it.
A suspension holds in every process serving the forge, a roll's draining one included #908
Check · Review · Land · Live done — Landed and live in production.
Closes #846. It serves #875: two processes overlap during a roll.
shipped production is serving it for issue #846 — its issue is already done deploy b87f44f
Sign in to join this conversation.
new above
offline
Closes #846. It serves #875: two processes overlap during a roll.
Until now, a suspension or a sign-out ended what the account had open only in the process that did it, through its own event bus. During a roll the old process drains while the new one answers, and the old one never saw the other's bus. So the account's streams, app sockets and SSH sessions there ran on until they closed by themselves or the process exited. A read-only HTTP clone under way finished in either process.
Now the fact is written once and every process enforces it:
src/http/caller.ts. That covers event streams, proxied app sockets, git transfers over HTTP and SSH sessions.standingSweepMs(default 5 s) and closes what is no longer allowed. The process that wrote the fact still closes at once through its bus. A roll's draining process closes within one sweep, so the overlap has no gap.App sockets move from their own registry into this one (
closeSocketsOfis gone), and git upload and receive processes are killed when their account loses its standing.Tests:
test/standing-every-process.test.ts, admitted to the gate. Two processes share one data directory, as in a roll, and the new one acts:Each case fails without its part of the change.
🤖 Generated with Claude Code