v1.7.12
Supersedes v1.7.11, which was tagged but never reached production — its staging gates failed on an environment problem this release fixes. Everything in v1.7.11 is included; see the v1.7.11 notes for that content (IDNA-encoded DMARC lookups, self-hosting fixes, and the Python SDK dot-segment guard).
Added since v1.7.11
Two unindexed foreign-key columns are now indexed (#934, migrations 106 + 107). Postgres auto-indexes the referenced side of a foreign key but never the referencing side, and both of these are ON DELETE SET NULL — implemented as a per-row trigger that runs UPDATE ONLY child SET fk = NULL WHERE fk = $1 once for every deleted parent row. Unindexed, that is a sequential scan of the whole child table per deleted row.
Measured against the structurally identical sibling webhook_events, which already had such an index:
| table | rows | plan | cost |
|---|---|---|---|
webhook_subscriber_deliveries |
421,319 | Seq Scan |
93,443 |
webhook_events |
454,487 | Index Scan |
8.44 |
~11,000×, on the smaller of the two tables. The practical effect was that a plain agent delete could exceed a 60s proxy timeout and return an HTML 504, and that slow deletes pinned both slots of the per-account concurrent-destructive cap so unrelated deletes returned 429. This was latent in production, not specific to any one environment — the retention purge depends on exactly the path that was unindexed, and the cost grows with table size.
Both indexes build with CREATE INDEX CONCURRENTLY, so no write lock is taken on either table during the upgrade.
The prober and sdk-monitor now purge the messages they create (#933). Both standing harnesses previously kept every message they had ever sent — enough accumulated volume to make the missing index above bite. Each now runs a bounded trash-then-purge sweep after its verdict is recorded, best-effort so a cleanup failure can never turn a healthy stack red.
Upgrade notes
Migrations 106 and 107 apply automatically on startup and take no write lock. On a large webhook_subscriber_deliveries the concurrent build may take a few minutes; the server is available throughout.
Clients
No client changes in this release. @e2a/cli 2.5.0, e2a (PyPI) 5.8.0, and @e2a/sdk 5.7.0 are unchanged from v1.7.11.
What's Changed
- fix(prober,sdk-monitor): purge the messages the harnesses create by @jiashuoz in #933
- fix(db): index the two hot unindexed FK referencing columns by @jiashuoz in #934
Full Changelog: v1.7.11...v1.7.12