Context
Two gaps in siphon's production readiness:
1. No audit trail
Siphon has zero calls to the shared audit service. Every ingested webhook, every DLQ event, every poller fetch is invisible to the audit trail. This is notable for compliance-sensitive sources (Stripe payment events, Salesforce CRM data, HubSpot contacts).
2. NATS publisher still uses JSON (issue #12)
internal/publish/nats.go uses json.Marshal(event) for the CloudEvent payload. The proto types (NormalizedEvent, TapEventData) are defined in proto/tap/v1/event.proto but the publisher hasn't been migrated to protobuf encoding. Issue #12 is substantively open despite the proto definitions landing.
Requirements
Audit integration
Proto migration
Operational improvements
Context
Two gaps in siphon's production readiness:
1. No audit trail
Siphon has zero calls to the shared audit service. Every ingested webhook, every DLQ event, every poller fetch is invisible to the audit trail. This is notable for compliance-sensitive sources (Stripe payment events, Salesforce CRM data, HubSpot contacts).
2. NATS publisher still uses JSON (issue #12)
internal/publish/nats.gousesjson.Marshal(event)for the CloudEvent payload. The proto types (NormalizedEvent,TapEventData) are defined inproto/tap/v1/event.protobut the publisher hasn't been migrated to protobuf encoding. Issue #12 is substantively open despite the proto definitions landing.Requirements
Audit integration
audit.v1(fire-and-forget with retry)Proto migration
internal/publish/nats.gofromjson.Marshal(cloudEvent)to protobuf-encodedTapEventDataOperational improvements
10*time.Secondinrun.go)