mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 08:27:04 +00:00
Audit of the authorsMissingOutbox anti-join surfaced one correctness bug and one performance win: - Bug (semantic): kind-1059 giftwraps store a random one-time key in event_headers.pubkey (the real recipient is only a hash), so the query returned an unbounded set of ephemeral keys that can never own a 10002 — junk for the outbox model this feeds. Both the SQLite path and the generic default now exclude kind 1059 from the "authors" set. - Performance: replaced the DISTINCT + correlated NOT EXISTS scan with an index-only EXCEPT (all authors minus 10002 owners). Both sides ride the unconditional query_by_kind_pubkey_created covering index — so it does NOT depend on the optional pubkey-alone index — and measured ~3x faster (44ms vs 137ms at 152k events / 20k authors); the gap widens with author count, since the old form paid one seek per distinct author. A loose-index skip-scan was rejected: it needs the pubkey-alone index and degrades to a full scan per author without it. Also: corrected the KDocs (the old text implied an efficient index-only distinct that wasn't guaranteed), added a giftwrap-exclusion test, and added FsAuthorsMissingOutboxTest — the only coverage of the IEventStore DEFAULT implementation, which EventStore always overrides. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CuLzfXyVZ16ozG8oJ7hBBc