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>