Skip to content

5.19.0 — 2026-10-21

← 5.19.1 | 5.18.3 → | ↑ 5.x series

Added

Adapters - Temporal

  • Messaging Activity Spans - RunActivity:* spans now carry the OpenTelemetry messaging attributes, so Elastic APM reports a messaging transaction type instead of unknown.
    • Sets messaging.system, messaging.operation, messaging.operation.type and messaging.destination.name (the task queue)
    • Added MessagingOpenTelemetryInterceptor and MessagingOpenTelemetryPlugin in archipy.adapters.temporal.tracing
    • The plugin passes opentelemetry through the workflow sandbox and has its own name, so it can be registered next to the stock OpenTelemetryPlugin

Changed

Adapters - Temporal

  • OpenTelemetry Plugin - The adapter registers MessagingOpenTelemetryPlugin through Client.connect(plugins=[...]) instead of appending TracingInterceptor.
    • behavior: when the global tracer provider is not a temporalio ReplaySafeTracerProvider, for example a plain TracerProvider another library registered first, Temporal tracing is skipped with a warning instead of failing at worker start

Helpers - OpenTelemetry

  • Replay-Safe Providers - When temporalio is installed the OpenTelemetry runtime builds Temporal's replay-safe tracer and meter providers, and falls back to the plain SDK providers otherwise.
    • All Temporal-specific code sits in archipy/helpers/utils/_otel/temporal_providers.py
    • Adoption of an existing global provider recognises the replay-safe wrappers
    • The tracer provider is published globally whenever the tracer global is still unset, even if another signal already set its own
    • behavior: with temporalio installed, OtelUtils.tracer_provider() and OtelUtils.meter_provider() return wrappers that do not expose the SDK sampler, resource or span processor attributes
    • The logger provider stays unwrapped because ReplaySafeLoggerProvider cannot be instantiated with opentelemetry-api 1.45

Tests

Tests - Adapters

  • Temporal Tracing - Added scenarios for the messaging attributes, the client plugin, the sandbox passthrough and the stock plugin side by side.
    • A real Temporal container checks that tracing is disabled, and workflows still run, when a plain tracer provider was registered first
  • OpenTelemetry Providers - Added scenarios for adopting a replay-safe tracer provider, publishing the tracer provider when traces are enabled later, and plain SDK providers when temporalio is not installed.