-- Rotation is an epoch bump: a Reader's credential is derived from the -- deployment secret, their Discord id and this epoch, so bumping it issues a -- new credential and the rewritten token_sha256 invalidates the old one the -- moment the transaction commits. The seed's ON CONFLICT refresh (Store.Open) -- is gated on this being 0, so a restart can never undo a rotation by -- restoring the epoch-0 hash. ALTER TABLE readers ADD COLUMN token_epoch bigint NOT NULL DEFAULT 0;