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.zipInstalls 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>"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
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_spansover14d— ranks span names by count withroot_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_querywithfilter 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_errors—kind,reason,source_function,last_occurrence_at,status. Find the error matching the trace.error_tracker_occurrences—context(Obanjob.args+ the full event payload:event_type,entity_id, user email/name),stacktrace,breadcrumbs, andjob.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_constraintname 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_trackergives 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-onlyreaderrole). 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_errorwith no text, the real reason is inerror_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
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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| analyze-prod-issue (this skill) | 0 | 17d | No flags | Advanced |
| gcloud-usage | 1 | 7mo | No flags | Intermediate |
| devops-troubleshooter | 1 | 3mo | No flags | Advanced |
| autotel | 0 | 1mo | Review | Intermediate |
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".
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.
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.
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
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.
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