Trust
PMH-SEC control matrix
PMH-SEC controls map to live tests in theproof matrix and compliancecrosswalk.
| ID | Control | Status |
|---|---|---|
| PMH-SEC-001 | CORS allowlist (no open *) | Live |
| PMH-SEC-002 | Bearer JWT for panel routes | Live |
| PMH-SEC-003 | Workspace membership checks | Live |
| PMH-SEC-004 | Viewer role blocked from mutations | Live |
| PMH-SEC-005 | Editor+ for send and credentials | Live |
| PMH-SEC-006 | Optional AAL2 / MFA gate | Shipping |
| PMH-SEC-007 | Rate limits on send endpoints | Live |
| PMH-SEC-008 | API keys — secrets never returned | Live |
| PMH-SEC-009 | SMTP passwords hashed at rest | Live |
| PMH-SEC-010 | Safe credential views (no hashes) | Live |
| PMH-SEC-011 | Revoked SELECT on credential tables | Live |
| PMH-SEC-012 | Append-only audit_events | Live |
| PMH-SEC-013 | Audit on send, keys, grants | Live |
| PMH-SEC-014 | Dev seed gated (ALLOW_DEV_SEED) | Live |
| PMH-SEC-018 | SMTP STARTTLS when certs set | Live |
| PMH-SEC-022 | No service_role in browser bundle | Live |
| PMH-SEC-023 | DKIM secrets service_role only | Live |
| PMH-SEC-025 | Prod refuses lab flags | Live |
| PMH-SEC-027 | DNS checklist scrubs private keys | Live |
| PMH-SEC-015 | Kumo metrics lab bypass gated | Live |
| PMH-SEC-016 | Bootstrap balance 0 | Live |
| PMH-SEC-017 | Credit grant admin/owner only | Live |
| PMH-SEC-019 | Production SMTP TLS required | Live |
| PMH-SEC-020 | Production SMTP cert (ACME) renewal | Live (matrix M58) |
| PMH-SEC-024 | DKIM keys scoped per workspace (RLS) | Live |
| PMH-SEC-026 | Verified From required in production | Live |
| PMH-SEC-028 | Shaping / warmup ladders (Kumo-native) | Live (matrix M53d) |
| PMH-SEC-029 | Suppress lists honored on send + SMTP | Live (matrix M55/M56) |
| PMH-SEC-030 | Observability pack (Prom + Alertmanager + Grafana) | Live (matrix M57) |
| PMH-SEC-031 | Signed backup (GPG detached) | Live (matrix M53b/M66) |
| PMH-SEC-032 | Air-gap signed offline update bundle | Live (matrix M61) |
| PMH-SEC-033 | Delivery webhooks (HMAC + idempotency) | Live (matrix M60) |
| PMH-SEC-034 | Reputation pulse (on-box aggregation) | Live (matrix M62) |
| PMH-SEC-035 | OIDC + SAML + MFA + AAL2 (panel identity) | Live (matrix M59) |
| PMH-SEC-036 | Multi-tenant isolation test (cross-workspace reject) | Live (matrix M62) |
| PMH-SEC-037 | Migration roundtrip (forward + every down + forward) | Live (matrix M64) |
| PMH-SEC-038 | Chaos failure-injection (API/Supabase/SMTP) | Live (matrix M65) |
| PMH-SEC-020 | Editor helper for owner/admin/operator | Live |
| PMH-SEC-021 | RLS stubs for domains/ips/jobs | Live |
| PMH-SEC-024 | CORS denies unknown origins | Live |
| PMH-SEC-026 | Prod refuses SMTP_ALLOW_INSECURE | Live |
| PMH-SEC-029 | Contact intake rate-limited audit | Live |