diff --git a/docs/sealed-ballot-motion.md b/docs/sealed-ballot-motion.md index d47fa9d..5cfc5fb 100644 --- a/docs/sealed-ballot-motion.md +++ b/docs/sealed-ballot-motion.md @@ -137,9 +137,10 @@ to one member account and the account to that one persona (`MindPersonas`, uniqu cannot share the account and overwrite the first's ballot, and a registration race loses on the index). The trust is the moderator's: Bifrost cannot tell whether a registered public key really belongs to the Mind. -**What a Mind holds.** An Ed25519 private key (32-byte seed) at `/etc/gamecult/minds//sealed-motion.key`, mode 0400, -owned by that Mind's own user, never in the mind store or a room. Eureka generates it on the host and prints only the public -half; a moderator registers it. **Whoever can read that file can vote as that Mind.** Root on the host can; Bifrost cannot. +**What a Mind holds.** An Ed25519 private key (32-byte seed) at `/var/lib/mind-/sealed-motion.key`, mode 0400, +owned by `mind-`, the Persona user, which is also the signer; never in the mind store or a room. Eureka generates it on the host and prints only the public +half. A moderator registers that public half only after the Persona shell, running as `mind-`, has signed a throwaway test +envelope that verifies against it (`scripts/verify-sealed-motion-key.sh` in gamecult-ops, which must print `PASS`). **Whoever can read that file can vote as that Mind.** Root on the host can; Bifrost cannot. **Signing.** `tools/sealed-motion-sign.mjs` (`pubkey`, `commit`, `reveal`) reads the key file, checks its type, mode and owner, and prints the envelope; it posts nothing. `commit` also prints the ballot (candidate, reason, salt), which the Mind keeps in