Skip to content

Phase 7b: Instrumentation & Observability #20

Description

@Wahbeh-Mohammad

Ship the logging facade, redaction, real trace-context generation, metrics no-op, and the two logging bridge
packages.

Scope

  • observability/logger.tsLogger/LogEvent facade + process-wide global logger slot
    (setGlobalLogger() / getGlobalLogger()); observability/redaction.ts; observability/logging-step.ts.
  • @dexpace/logging-pino and @dexpace/logging-debug bridge packages.
  • Real W3C Trace Context / Datadog / no-op trace and span id generation via
    globalThis.crypto.getRandomValues, with a caller-supplied tracerFactory flowing into 4a's already-frozen
    InstrumentationBundle at pipeline-build time.
  • No-op Meter default; core never depends on a metrics runtime (OBS-31).
  • standardResilience() amended to install loggingStep() into 5c's empty LOGGING slot — inert by default at
    granularity: 'none'.
  • Retrofit structured logging into 5a's retry-step.ts and 5b's redirect-step.ts (no change to
    StepContext's shape). Event names/fields are a plan-time detail — no spec-fixed vocabulary exists.

Spec refs

Product spec §15 (OBS-*). sdk-design: §8.

Dependencies

Phase 7a (OBS-35's log-level resolution wants Configuration). Must run before 5b Task 6 and 5c Task 16.

Docs

  • Design: docs/superpowers/specs/2026-07-28-phase7b-observability-design.md
  • Plan: docs/superpowers/plans/2026-07-28-phase7b-observability.md
  • Validation prompt: docs/validation-prompts/phase7b-observability-validation-prompt.md

Notes

No concrete metrics backend ships in v1 — a real @opentelemetry/sdk-metrics-backed Meter adapter is not
scheduled. standardResilience() needs no tracerFactory/meter pass-through (confirmed in Phase 9's design).

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions