Andrew Dunn
2026-04-17T18:50:03Z

Merge branch 'chore/badge-order' into 'main'

chore: reorder badges -- PubSec first

See merge request gitlab-com/public-sector-tools/postern!3

postern v0.2.0 -- production readiness

Six capabilities for production deployment in regulated environments:

1. Async dispatch: channel-based worker pool decouples event acceptance from trigger execution. Push sources return 503 when queue full (cloud providers retry). Lifecycle context for workers (not request context). Graceful drain on shutdown.

2. Prometheus metrics: 9 app metrics (counters, histograms, gauges) plus Go runtime. /metrics endpoint. PipelinesTriggered, TriggerFailures, TriggerDuration, EventsInFlight, DispatchQueueDepth all wired in dispatch workers.

3. Rate limiting: per-source token bucket via x/time/rate. HTTP middleware returns 429. Global default with per-source override. SASL without TLS rejected at config validation.

4. AWS SQS poll adapter: SDK v2, long polling (20s), SNS envelope unwrap, S3 Records iteration. Only deletes message when dispatch accepts. MessageId for dedup (not ETag).

5. Kafka/OCI Streaming poll adapter: segmentio/kafka-go (pure Go), SASL_SSL (PLAIN for OCI, SCRAM for MSK), manual commit only after dispatch accepts. CloudEvents v0.1 normalization.

6. Helm chart: 10 templates. Deployment with securityContext (runAsNonRoot, readOnlyRootFilesystem, drop ALL), checksum/config annotation for rolling restart. Dual ConfigMap/Secret pattern.

CI: pipeline catalog v1.1.1 (buildah v1.43.0, cosign v2.6.3, checksum-verified installs, log collapsing). SAST, Secret Detection, Dependency Scanning, Container Scanning.

46 tests with race detector. 3 adversarial review rounds on v0.2 (28 issues found and fixed including dead-context bug, shutdown ordering, double metrics, silent event loss paths).