The FIRST client→daemon message on EVERY daemon WebSocket
connection (/execute and /listen alike) — always sent, even to
a secretless daemon ({"signature": null}). Headers are never
used for auth: browser WebSocket clients can’t set them. A daemon
holding a DAEMON_SECRET verifies the signature and closes the
connection on a missing/invalid one; a secretless daemon consumes
the envelope and ignores the value.
The one client→daemon message on an /execute connection: the
typed request (as its serde JSON) plus the optional per-request
identity override. The daemon deserializes this exact shape.