AN

analyze-prod-issue

Correlates telemetry and DB logs to diagnose production symptoms.

Install

mkdir -p .claude/skills/analyze-prod-issue && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17392" && unzip -o skill.zip -d .claude/skills/analyze-prod-issue && rm skill.zip

Installs to .claude/skills/analyze-prod-issue

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Diagnose a production issue end-to-end across Honeycomb (error shape) and the prod DB error_tracker tables (who + why), scope impact honestly, and optionally file a PII-scrubbed issue. Invoke with: /analyze-prod-issue "<symptom>"
229 charsno explicit “when” trigger
Advanced

Key capabilities

  • Orient to Honeycomb workspace context and live environment
  • Identify failing span names and funnel drops in Honeycomb
  • Trace causal chains in Honeycomb to find raising spans
  • Query prod DB `error_tracker` tables for error reasons and contexts
  • Cross-reference schema and data to confirm hypotheses
  • Scope impact honestly with numeric quantification

How it works

The skill diagnoses production issues by correlating error shapes from Honeycomb with 'who and why' details from the production database's `error_tracker` tables, then scopes the impact and confirms the root cause in code.

Inputs & outputs

You give it
Production symptom (e.g., 'parents can't book')
You get back
Root cause, affected entity, triggering event, occurrence count, date range, and an honest impact statement

When to use analyze-prod-issue

  • Diagnose production bug
  • Analyze error shape
  • Find source of production issue

About this skill

Analyze Prod Issue

Take a production symptom (e.g. "parents can't book") and diagnose it end-to-end by correlating two sources — Honeycomb for the error shape, the prod DB error_tracker tables for the who + why — then scope impact honestly and optionally file a scrubbed issue.

Type: Rigid workflow. Follow steps exactly.

Prerequisite: read-only prod DB access must be set up (bin/prod-db). If it errors, see docs/runbooks/prod-db-access.md first.

The exact Honeycomb tool calls and prod SQL are in references/cookbook.md — read it when a step says to.


Step 1 — Orient (Honeycomb)

Call mcp__honeycomb__get_workspace_context. Note the environment slugs; production is the live environment (there is also dev). Use live in every subsequent Honeycomb call.

Done when: you know the live env slug and its dataset.

Step 2 — Find the error surface

  • mcp__honeycomb__list_spans over 14d — ranks span names by count with root_count. Scan for the failing area and for funnel drops (an entry span with many mounts but its terminal action span near zero often is the reported symptom).
  • mcp__honeycomb__run_query with filter error=true, breakdown ["name"], time_range "14d" — ranks the actually-failing spans by count.

Done when: you have candidate failing span name(s) with counts. If there are zero error=true spans, the symptom is not an exception — pivot to the funnel-drop reading.

Step 3 — Trace the causal chain

mcp__honeycomb__get_trace on a failing trace (show_events: true). Read the waterfall: find the span where the error is raised and the call chain above it (HTTP entry → worker → context function → repo query).

Honeycomb gap to expect: a DB error inside a rolled-back transaction surfaces only as query_error / status_message with no exception text (spans carry no event). That absence is the signal to go to the prod DB — do not stop here.

Done when: the failing chain and the raising span are mapped.

Step 4 — Pull the real reason (prod DB)

Query error_tracker via bin/prod-db -c "<SQL>" (read-only reader role). See references/cookbook.md for the schema and the exact queries.

  • error_tracker_errorskind, reason, source_function, last_occurrence_at, status. Find the error matching the trace.
  • error_tracker_occurrencescontext (Oban job.args + the full event payload: event_type, entity_id, user email/name), stacktrace, breadcrumbs, and job.state / job.attempt.

This is where the swallowed DB error, the affected user, the triggering event, and the Oban disposition (retryable vs discard) actually live.

Done when: you know the underlying error, the affected entity, the triggering event, and the occurrence count + date range.

Step 5 — Cross-reference schema & data

Confirm the hypothesis against real rows before believing it:

  • Does the row the handler tried to create already exist? (duplicate vs genuinely missing)
  • What are the actual constraint/index names? (a changeset unique_constraint name mismatch makes a violation raise instead of returning a changeset error)
  • Affected-vs-total counts — how many entities are in the bad state vs the population?

Done when: the mechanism is proven from data, not assumed.

Step 6 — Scope impact honestly

The point of Step 5 is to correct the premise, not confirm it. Produce a one-paragraph impact statement that:

  • Separates noise vs a real user-blocker — an erroring/discarded job is not automatically a blocked user (the side effect may already have succeeded on another path).
  • Quantifies affected users by count.
  • Splits disjoint phenomena — two symptoms with the same surface can have different causes and different populations; do not conflate them.

Done when: an honest, numeric impact statement exists — even if it contradicts the original complaint.

Step 7 — Confirm root cause in code

Grep the implicated modules to anchor the fix. State explicitly whether the bug exists on main or the behaviour is a live-vs-main deploy lag (live can raise what main already handles). Check the current commit on live if it matters.

Done when: the fix direction names concrete files and says whether deploying main fixes it.

Step 8 — (Optional) File a scrubbed issue

If the finding warrants tracking, hand off to /create-issue.

Public-repo PII rule (non-negotiable): reference affected users by count + opaque UUID only. Never put names or emails in a public issue — GitHub edit history is public, so scrubbing after the fact requires deleting and recreating the issue. Keep the user_id ↔ identity mapping in the DB, not the issue.

Done when: the issue exists with count-only references, or you and the user decide not to file.


Rules

  • Two sources, not one. Honeycomb gives the shape (chain, span, timing); error_tracker gives the who + why (reason, event payload, stacktrace, Oban state). Neither alone is enough.
  • Read-only always. Reach prod only through bin/prod-db (the SELECT-only reader role). Never open a write path against production.
  • Count, never names, in public artifacts. PII stays in the DB; issues and PRs get counts and UUIDs.
  • Scope honestly. "Erroring" ≠ "user-blocked." Prove impact from data before claiming it, and correct the premise when the data disagrees.
  • The rollback hides the error. When Honeycomb shows only :rollback / query_error with no text, the real reason is in error_tracker_occurrences.context, not the span.

When not to use it

  • When only one source (Honeycomb or prod DB) is used for diagnosis
  • When write access to the production database is required
  • When names or emails of affected users need to be included in public artifacts

Prerequisites

read-only prod DB access

Limitations

  • All actions are read-only and never open a write path against production
  • PII stays in the DB; issues and PRs get counts and UUIDs, never names
  • The skill requires `bin/prod-db` for read-only prod DB access

How it compares

This skill enforces a rigid, two-source diagnostic workflow for production issues, combining distributed tracing with detailed database error tracking, which is more thorough than relying on a single monitoring tool.

Compared to similar skills

analyze-prod-issue side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
analyze-prod-issue (this skill)017dNo flagsAdvanced
gcloud-usage17moNo flagsIntermediate
devops-troubleshooter13moNo flagsAdvanced
autotel01moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

gcloud-usage

fcakyon

This skill should be used when user asks about "GCloud logs", "Cloud Logging queries", "Google Cloud metrics", "GCP observability", "trace analysis", or "debugging production issues on GCP".

14

devops-troubleshooter

sickn33

Expert DevOps troubleshooter specializing in rapid incident response, advanced debugging, and modern observability. Masters log analysis, distributed tracing, Kubernetes debugging, performance optimization, and root cause analysis. Handles production outages, system reliability, and preventive monitoring. Use PROACTIVELY for debugging, incident response, or system troubleshooting.

12

autotel

jagreehal

Use when instrumenting with trace/span/track, reviewing code for logging and observability patterns, converting console.log to wide events, adding structured errors, setting up canonical log lines, configuring init(), adding subscribers, or working in the autotel monorepo.

00

ai-debug-harness

DeandreFu

Self-driving Electron + Node debug harness with NDJSON logs, Playwright E2E, doctor preflight, and a YAML-frontmatter cookbook of known causes. Use when a voice-chat E2E flow misbehaves locally, audio publish silently fails, the agent worker emits warnings, or any LiveKit/Electron/Fastify error appe

00

service-mesh-observability

wshobson

Implement comprehensive observability for service meshes including distributed tracing, metrics, and visualization. Use when setting up mesh monitoring, debugging latency issues, or implementing SLOs for service communication.

574

observability-monitoring-monitor-setup

sickn33

You are a monitoring and observability expert specializing in implementing comprehensive monitoring solutions. Set up metrics collection, distributed tracing, log aggregation, and create insightful da

12

Search skills

Search the agent skills registry