What problem does it solve? When developers add logging to application code, they often reach for console.log or embed values directly into message strings, producing logs that cannot be grouped, filtered, or routed to a failure store. This Skill enforces a consistent pattern for writing log lines so failures actually reach the system owner. ## Core Features & Use Cases - Scoped logger setup: Take the domain logger once via logger.scope(LOG_CONTEXT) with the context as a module constant, letting the logger inject request number, procedure, and user automatically. - Constant line names with structured fields: Use dot-separated constant names like cache.refresh.rejected and pass all variable data as a fields object, so lines about the same event group together in the failure feed. - Level selection and failure-store routing: Choose levels by whether something broke (failure, below, message, detail), register lower-level line names in the selected list, parse external service errors with describeError, mask emails, and require a wait limit (e.g., AbortSignal.timeout) before any failure can be logged. - Use Case: While adding error handling to a mail-sending call, apply this Skill to write this.#log.error('mail.send.failed', { to: maskEmail(to), error: describeError(error) }) instead of string-interpolating the raw error. ## Quick Start Ask the AI to add a proper log line for a failed external service call in your TypeScript code following the observability pattern.