Every open WebSocket and every long-polling agent holds one of the
single process's 100 threads, so ~60 agents plus 40 tabs stalled the
UI with no clear error. Read --threads from SERVERKIT_THREADS in the
systemd unit and Docker image, and document the ceiling next to the
single-worker constraint.
About 30 of the ~70 variables the backend reads were documented
nowhere: the encryption-key file, extension signing keys, the pip
opt-in, the setup-code pin. docs/ENVIRONMENT.md lists them all with
defaults, and a guard fails when the backend reads one it doesn't list.