← ClaudeAtlas

observabilitylisted

Structured logs (no string interp), trace IDs end-to-end, error boundaries at async boundaries, anonymized user scope, no PII/secrets ever. Use @repo/core/logger not console.log. Use for prod code.
voidcorp-core/void-harness · ★ 0 · Code & Development · score 76
Install: claude install-skill voidcorp-core/void-harness
# observability — voidcorp craftsman edition Production debugging starts where observability ended. If you cannot see what happened, you cannot fix it; if you can only guess, you fix the symptom and the bug recurs. This skill codifies what to log, what to trace, what to measure — and just as critically, what NEVER to log (PII, secrets). **Attribution**: see `.source`. Foundation: pino + OpenTelemetry semantic conventions + Charity Majors "Observability Engineering" + Sentry best practices + Sridharan three pillars. --- ## Structured logs only ```typescript // banned console.log('user ' + userId + ' did ' + action); logger.info(`user ${userId} did ${action}`); // allowed logger.info({ userId, action, durationMs }, 'user_action'); ``` Structured logs are queryable. String-interpolated logs are searchable at best. The companion hook `no-console-log-grep` blocks `console.log` / `console.error` / `console.warn` in business code. ### Use `@repo/core/logger` (pino) Provided by `pack-monorepo`. Business code imports `logger`, not pino directly — the adapter pattern lets us swap the backend later without business-code edits. ```typescript import { logger } from '@repo/core/logger'; logger.info({ userId, orderId }, 'checkout_started'); logger.error({ err, orderId }, 'payment_failed'); ``` ### Levels (standard set, no custom levels) | Level | When | |---|---| | `fatal` | Unrecoverable — process must exit | | `error` | Operation failed; user impact | | `warn` | Unexpected b