feat: add webhook coverage gate observability - #232
Conversation
Co-authored-by: Eduard Carreras <ecarreras@gisce.net>
Co-authored-by: Eduard Carreras <ecarreras@gisce.net>
Co-authored-by: Eduard Carreras <ecarreras@gisce.net>
|
Post-merge blocker before #233: the coverage population is not comparable.
A minimal SQL reproduction with one current event present in both sources, one old IMAP receipt, and one current The comparable retained event has 100% coverage. As implemented, the ratio will drift downward with unrelated/old IMAP history and the exception queue will contain entries that no webhook could ever resolve, so this cannot safely gate the canary rollout. Before merging #233, I recommend using one explicit comparison window (bounded by webhook retention and ideally by the shadow-rollout start), restricting eligibility to event families/actions with canonical identities shared by both transports, and applying exactly the same predicate to The existing CI is green, but the added tests only cover an empty IMAP denominator and therefore do not exercise this failure mode. |
Summary
both,imap_only,webhook_only, and IMAP-eligible denominatorWhy
Canary rollout needs an evidence-based gate. The previous dashboard showed match totals but not the denominator or the events requiring investigation.
Validation
pytest -q— 392 passed on the complete stacknpm test -- --run— 60 passednpm run build— passedRollback
This PR is observability-only. Reverting it removes the new aggregate/exception views without changing ingestion or dispatch.
Requested by: @ecarreras
Refs #191
TASK-85718