id: e-stop
title: An operator can halt the swarm when nothing else is working
status: open
crates: [didbot-serve, didbot-pds]
dependsOn: []
exitCriterion: >
A signed-in operator halts all provisioning and every token this server
checks, from the dashboard or from a shell, and can see what is being
refused. #
Two settings, because they answer different questions. Pause refuses every
token, new or already issued, and all provisioning, and ends nothing: releasing
it lets every token work again. Revoke refuses the same and ends every
token already issued, which releasing it does not undo. A service-auth token
is the exception to both: either setting refuses every new one and every
proxied call, but one already minted works at the service it names until its
exp, at most an hour, or a minute for the ones the proxy mints.
The reason this is its own epic is immediacy, not mechanism. Policy lives in
the operator's repository and arrives on a poll, so a policy-level stop waits
for a network, a server somebody else runs, and an interval. That is correct
for a rule and useless for an emergency. The stop is local state, and it is
the only control that is.
One way to throw it, reached two ways: an operator signs in and presses it,
from the dashboard or from a shell, both over the same route. A host-level
stop is systemctl stop, which stops strictly more.