Declare a named foreign key for every join and table possible-value field between the five webhooks tables. Endpoint secrets and subscriptions are deleted with their endpoint; deliveries and attempts keep it (RESTRICT); a delivery outlives its subscription (SET NULL); attempts go with their delivery. The upgrade script quarantines orphans before adding the keys and replaces the NO ACTION endpoint keys. A Testcontainers guardrail test fails when a new relation has no key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>