Context
0085 kept CloudWatch and added Encore log, Sentry and Better Stack as reporters. The owner’s logger answer LG1 (mem L871, 2026-10-20) and the runtime defaults P12 replace that. LG1 wins over the earlier list (contradiction C-11): CloudWatch and Sentry reach logs through OTLP or a collector. Packages carry no vendor SDK.Decision
- Logger (LG1). Structured JSON output. Per-module levels can be changed through settings. Request-scope context is added automatically. Redaction is driven by classification (0134), with secret detection. Sampling is supported. Drivers: console, OTLP (the production default) and Better Stack. No vendor SDK is used in packages.
- Health (P12). One health shape, in
@stackra/contracts, with the statesstarting,ready,degraded,drainingandstopped, and per-dependency checks. - Telemetry (P12). The action pipeline sets span and log attributes that carry no values:
requestId,correlationId,tenantId,actorType,actorId,onBehalfOfRoot,action,workflowRunId,stepId,toolCallId,policyDecision,outcomeandlatencyMs. - Generated clients (P12). They default to a deadline and propagate the trace. They retry only actions that declare idempotency.
- The lifecycle names come from 0143 (CT3), not from P12.
Consequences
- Logs leave the service as OTLP, so the destination can change without a code change.
- A log line never carries a secret value, because redaction runs on classification.
Enforcement
planned — the boundaries rule bans vendor logging SDKs in packages, and the pipeline test checks that span attributes carry no values.Alternatives
- CloudWatch, Encore log, Sentry and Better Stack as separate reporters (0085): superseded (C-11).
Supersedes and sources
Supersedes: 0085. Amends: 0042; 0073 (final pass). Sources: owner logger answer LG1 (stackra-decisions-2026-10-19.md L871, 2026-10-20); intent-map item P12
(accepted); contradiction C-11.