RLS policy bugs. The single highest-stakes failure mode in M7. One bad Row-Level Security policy and the manager role sees financial data, or the external role sees customer PII. Test every role's view independently after every schema change. Check JWT claims. Never roll out a policy change without re-running the RBAC tests.
Autonomy creep. The trust gradient at the orchestrator level matters more than at any individual module. Iris should never take autonomous actions for the first fourteen days — only draft for owner review. Promotion from staged to live requires >90% owner approval and <5% incorrect-action rate. Skip this and Iris will action something the owner didn't actually want.
PII + email body storage. The M5 ingest scenario MUST filter out email bodies. Audit query is mandatory: SELECT count(*) FROM conversations WHERE module_source='m5' AND body_full IS NOT NULL; must return zero. If it doesn't, fix the filter before going to Shadow.
Webhook spoofing. Every ingest scenario validates webhook signatures. Unsigned requests get rejected. If a module's webhook lacks signing, route through a Supabase Edge Function that adds HMAC validation before insert.
GDPR + retention. The audit_log table can hold years of activity. Configure retention policies aligned with the customer's GDPR posture — typically 24 months for audit, 36 months for conversations. Document the retention policy in the install record.