f9625f1a2d
- Key management: 32-byte random key at ~/.g3/verification.key (chmod 600) - Token format: g3v1:<base64(SipHash-2-4 of canonical_facts + NUL + canonical_rulespec)> - stamp_envelope() called only when all rulespec predicates pass - verify_token() for cross-process validation - ActionEnvelope.verified field (Option<String>, skip_serializing_if none) - Token never shown to LLM, only written to envelope.yaml - Zero new dependencies (uses std SipHasher, existing rand/base64) - 12 unit tests covering determinism, tamper detection, backward compat