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>
Rebuilds the qbit on QQQ 4.1.0-RC.4 per the assessment (QRun-IO/qqq#1105,
decisions D1-D8):
- webhooks_endpoint, webhooks_endpoint_secret, webhooks_subscription,
webhooks_delivery and webhooks_delivery_attempt (snake_case, webhooks_
prefix), permissions webhooks.view / manage / admin
- Standard Webhooks signing with per-endpoint secrets (AES-GCM or env
references) and overlapping rotation
- SSRF-safe client: private, loopback, link-local and metadata ranges
blocked, DNS pinned, no redirects, timeouts, size cap, admin-only
internal allowlist (shared/ is an internal copy of QRun-IO/qqq#1109,
replaced at RC.5)
- event sources: table insert/update/delete (record change listener),
process completed/failed, ESB topics (own events skipped, CloudEvent
id dedup), custom events and a channel API for other qbits
- delivery: unique attempt-row claims with leases (no double sends across
replicas), retries with backoff, Retry-After, dead letters and Replay,
serial mode, per-endpoint rate limits, health with probation and
auto-disable, alerts through the Alerts SPI when present, retention
- subscriptions: record filters, record security, read permission check,
detail levels, include and exclude fields, payload customizer hook
- app home dashboard, actions with the standard review/result screens,
ESB / Quick Search / API integration hooks
- JaCoCo gate, Checkstyle in verify, Maven wrapper, default 4.1 profile,
Postgres DDL in docs/ddl
The 0.x sources stay in the tree, excluded from the build, until their
removal is approved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>