Operations Sentry — Changelog
Closes the Operations Sentry project: end-to-end Sentry observability for the operations Kotlin/Ktor backend (errors, performance, release health) wired so every common-module consumer inherits the behaviour, plus the FE-side trace propagation that joins browser and backend in a single Sentry trace.
Linear umbrella: PDEV-537.
Changed by repository
Section titled “Changed by repository”common-module — arda-common 8.3.0 (PR #171)
Section titled “common-module — arda-common 8.3.0 (PR #171)”- Added
cards.arda.common.observabilitypackage:SentryInit— fail-soft SDK initialisation honouringSENTRY_DSN,SENTRY_ENVIRONMENT,SENTRY_RELEASE,SENTRY_TRACES_SAMPLE_RATE,SENTRY_ENABLE_AUTO_SESSION_TRACKING/SENTRY_AUTO_SESSION_TRACKING,SENTRY_SCRUB_SALT.BoundaryCapture— invoked byrunSuspendingBoundary/runBoundary; capturesAppError.reportable()outputs and non-AppErrorthrowables.PiiScrubber—beforeSend/beforeSendTransactionfilter: deterministic salted hashing for user identifiers, allow-list redaction for headers, request bodies, and span data.- Global
CoroutineExceptionHandlerfor last-resort fire-and-forget paths.
Component.build()now wiresSentryInitand aStatusPagescapture interceptor on every consuming component.- Logback appender (configured via consumer
logback.xml) captures ERROR-level and exception-carrying events with theminimumEventLeveloption. - New
AppError.reportable(): List<Throwable>policy:Internal.*andGenericare reportable;Invocation.*are not.
operations — 2.25.1 (PR #172)
Section titled “operations — 2.25.1 (PR #172)”- Bumped
arda-commonto 8.3.0. Main.kt: installs theSentryRequestSessionKtor application plugin (manual per-request session start/end — the JVM SDK does not emit per-request sessions automatically; see DT-004 supersession).system/batch/CsvUploadService.kt: wraps the fire-and-forget batch coroutine inrunSuspendingBoundary(correct nesting: boundary inside,runCatchingoutside) on an independentSupervisorJob()scope so request-scoped cancellation cannot tear down the batch.helm/templates/secrets.yaml: ExternalSecretbe-sentry-scrub-saltkeyed by.Values.global.purpose(partition scope) withproperty: saltto project the JSON-shaped Secrets Manager value.helm/templates/deployment.yaml: sets the Sentry env var block, including bothSENTRY_ENABLE_AUTO_SESSION_TRACKINGand the canonicalSENTRY_AUTO_SESSION_TRACKING(dual until PDEV-538 retires the deprecated name), and disables the bundled OTel agent’s OTLP exporter (OTEL_TRACES_EXPORTER=none,OTEL_METRICS_EXPORTER=none,OTEL_LOGS_EXPORTER=none) to silence the localhost:4318 retry loop.logback.xml: Sentry appender at ERROR level.
infrastructure (PR #459)
Section titled “infrastructure (PR #459)”- New
PartitionSecretsCFN stack per partition (Alpha002-dev-PartitionSecrets,Alpha002-stage-PartitionSecrets,Alpha001-demo-PartitionSecrets,Alpha001-prod-PartitionSecrets) holding theSentryScrubSaltSecrets Manager secret. - Exports follow the
-API-cross-repo convention:<partition>-API-SentryScrubSaltArnfor the operations Helm chart’s ESOSecretStorelookup, plus the marker-prefixed<partition>-I-SentryScrubSaltArnfor cross-stack CDK consumers. SecretValuetyping for the override prevents accidental plaintext logging.- Stack id is
PartitionSecrets(notSecrets) to avoid colliding with the pre-existing non-CDK secrets stack that still holds the six legacy partition credentials (tracked by PDEV-541 for future unification).
arda-frontend-app (PR #845)
Section titled “arda-frontend-app (PR #845)”- New helper
src/lib/sentry/trace-propagation-targets.tswith an env-keyedBACKEND_HOSTSmap coveringdevelopment/dev,staging/stage,production/prod(Amplify’sNEXT_PUBLIC_DEPLOY_ENVuses the abbreviated forms). - All three Sentry init paths (
sentry.client.config.ts,sentry.server.config.ts,sentry.edge.config.ts) consume the helper so BFF → BE trace propagation is explicit per-env instead of relying on the Sentry SDK’s default same-origin heuristic. - 12 unit tests including alias-parity assertions between abbreviated and long env names.
- DT-007 closed.
documentation (PR #94)
Section titled “documentation (PR #94)”- New architectural reference
current-system/oam/sentry-observability.mdcovering the boundary capture model, the JVM-SDK-emits-no-per-request-session quirk, and the manual Ktor plugin that compensates. - Rewritten how-to
process/craft/operations-and-monitoring/sentry-integration.mdsuperseding the stale page (covers SDK init env vars, Logback appender placement, scrub salt provisioning per partition, verification recipes). - Roadmap promotion: project moves from
roadmap/in-progress/operations-sentry/toroadmap/completed/operations-sentry/.
Rollout
Section titled “Rollout”Deployed in the order Alpha002-dev → Alpha002-stage → Alpha001-demo → Alpha001-prod across two phases per partition: (1) amm.sh provisioning of the PartitionSecrets CFN stack and SentryScrubSalt; (2) GitHub Actions matrix step rolling the operations Helm release to 2.25.1. All four partitions verified at the pod level: SENTRY_DSN, SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SCRUB_SALT populated, both ExternalSecret instances SecretSynced=True, both replicas 1/1 Running on the new chart.
Follow-ups created
Section titled “Follow-ups created”- PDEV-491 — Documint client-side Sentry HTTP plugin (deferred from this project; outbound spans are already captured by the JVM agent so coverage is preserved).
- PDEV-538 — Remove the deprecated
SENTRY_ENABLE_AUTO_SESSION_TRACKINGonce all components consume the canonical name. - PDEV-541 — Unify the legacy partition-secrets stack with the new CDK-managed
PartitionSecretsstack. - PDEV-543 / PDEV-544 — Review-thread follow-ups raised during PR triage on operations#172 and documentation#94 respectively; PDEV-544 blocked by PDEV-543.
Copyright: © Arda Systems 2025-2026, All rights reserved