Tracker for the work explicitly deferred from Phase 2A (the log forwarding sink, PR forthcoming). Each bullet is a standalone PR-sized unit.
Transports
Each transport is a new class implementing the Transport protocol + config fields on audit_log_sink.config + tests.
Ops / deployment
Observability
UX
Hardening
This issue opens alongside Phase 2A. Closed when the checklist above is complete or individual items are split into their own issues.
Tracker for the work explicitly deferred from Phase 2A (the log forwarding sink, PR forthcoming). Each bullet is a standalone PR-sized unit.
Transports
Transportprotocol as the webhook. Natural fit once we're on GKE (already planned).Each transport is a new class implementing the
Transportprotocol + config fields onaudit_log_sink.config+ tests.Ops / deployment
flush_outbox()in a dedicated K8s Deployment (not CronJob — poll interval of 5-30s). Needs graceful shutdown, liveness/readiness probes, horizontal scaling withFOR UPDATE SKIP LOCKEDalready in place from 2A.audit_log_outboxrows wherestatus='delivered' AND delivered_at < now() - 7 days. Keeps the outbox table bounded.dead_letterstatus after an operator has fixed the upstream issue (e.g., customer's HEC token rotated).Observability
UX
POST /api/v1/audit/sinks/{id}/test.Hardening
This issue opens alongside Phase 2A. Closed when the checklist above is complete or individual items are split into their own issues.