Ship the logging facade, redaction, real trace-context generation, metrics no-op, and the two logging bridge
packages.
Scope
observability/logger.ts — Logger/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).
Ship the logging facade, redaction, real trace-context generation, metrics no-op, and the two logging bridge
packages.
Scope
observability/logger.ts—Logger/LogEventfacade + process-wide global logger slot(
setGlobalLogger()/getGlobalLogger());observability/redaction.ts;observability/logging-step.ts.@dexpace/logging-pinoand@dexpace/logging-debugbridge packages.globalThis.crypto.getRandomValues, with a caller-suppliedtracerFactoryflowing into 4a's already-frozenInstrumentationBundleat pipeline-build time.Meterdefault; core never depends on a metrics runtime (OBS-31).standardResilience()amended to installloggingStep()into 5c's emptyLOGGINGslot — inert by default atgranularity: 'none'.retry-step.tsand 5b'sredirect-step.ts(no change toStepContext'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 wantsConfiguration). Must run before 5b Task 6 and 5c Task 16.Docs
docs/superpowers/specs/2026-07-28-phase7b-observability-design.mddocs/superpowers/plans/2026-07-28-phase7b-observability.mddocs/validation-prompts/phase7b-observability-validation-prompt.mdNotes
No concrete metrics backend ships in v1 — a real
@opentelemetry/sdk-metrics-backedMeteradapter is notscheduled.
standardResilience()needs notracerFactory/meterpass-through (confirmed in Phase 9's design).