Agent Skills › crbnos/carbon › debugging-difficult-bugs

debugging-difficult-bugs

GitHub

通过添加临时JSONL日志追踪运行时状态,复现并分析难以静态定位的复杂Bug。适用于并发、缓存或UI交互等动态场景,在缺乏确定性证据时辅助根因分析。

.claude/skills/debugging-difficult-bugs/SKILL.md crbnos/carbon

Trigger Scenarios

静态代码审查无法确定根因 涉及运行时状态、并发或缓存问题 需要手动或UI复现的缺陷

Install

npx skills add crbnos/carbon --skill debugging-difficult-bugs -g -y
More Options

Non-standard path

npx skills add https://github.com/crbnos/carbon/tree/main/.claude/skills/debugging-difficult-bugs -g -y

Use without installing

npx skills use crbnos/carbon@debugging-difficult-bugs

指定 Agent (Claude Code)

npx skills add crbnos/carbon --skill debugging-difficult-bugs -a claude-code -g -y

安装 repo 全部 skill

npx skills add crbnos/carbon --all -g -y

预览 repo 内 skill

npx skills add crbnos/carbon --list

SKILL.md

Frontmatter
{
    "name": "debugging-difficult-bugs",
    "description": "Runtime-instrumentation debugging for bugs that static reading can't pin down — add temporary unconditional JSONL logging to the real code path, reproduce, read the log, then fix. Use when \/root-cause lands at MEDIUM\/LOW confidence, when a bug involves runtime state, ordering, caching, streaming, concurrency, or manual\/UI reproduction, or before a second speculative fix. Skip when a stack trace or a deterministic failing test already proves the cause."
}

debugging-difficult-bugs — instrument, reproduce, read, then fix

Core idea: when you can't see the failure by reading code, make the runtime tell you. Add temporary append-only JSONL logging along the real code path, reproduce the real issue once, read the log chronologically, and only then fix. Never make a second speculative fix without new runtime evidence.

Announce at start: "Using the debugging-difficult-bugs skill — instrumenting the runtime path to observe the failure."

Step 1: State the uncertainty

Write down: what you believe, what you can't verify statically, and the exact runtime path that must be observed (route → service → query, posting, job).

Step 2: Add temporary unconditional instrumentation

Rules:

  • Unconditional — never gated behind an env var, debug flag, or log level. If reproduction requires remembering to set a flag, it will silently not fire.
  • Append-only JSONL, one JSON object per line, to a file in the process's working directory.
  • Log boundaries and decisions, not every line: function entry/exit, branch decisions with the data that caused them, state before/after mutation, async ordering markers, caught errors, return-value shapes.
  • Log shapes, not payloads: ids, keys, counts, statuses. Never log tokens, auth headers, cookies, or full user content.
import { appendFileSync } from "node:fs";
import { join } from "node:path";

function debugBug(event: string, data: Record<string, unknown> = {}) {
  appendFileSync(
    join(process.cwd(), "debug-difficult-bug.jsonl"),
    `${JSON.stringify({ ts: new Date().toISOString(), event, ...data })}\n`
  );
}

debugBug("service.beforeUpdate", { id, companyId, status: row.status });

Carbon multi-process note. The ERP and MES dev servers and the Inngest handlers run as separate processes with different working directories; postings (the ERP modules' service files) run in the ERP process, also when the MES calls them (over HTTP, erpPosting). Log process.cwd() + a process role once at startup, or use distinct filenames (debug-erp.jsonl, debug-jobs.jsonl). The Docker edge-runtime container only hosts the embedding edge function; there, console.error JSON lines (visible in container logs) stand in for a file.

Step 3: Reproduce the real issue once

  • Prefer reproducing yourself: boot the stack (crbn up if not already running), authenticate with /auth, and drive the exact failing flow with agent-browser (the /test skill documents Carbon's form gotchas — requestSubmit, react-aria blur).
  • If only the user can reproduce (their data, their environment), tell them exactly: "I added temporary logging. Reproduce the issue once, then point me at <cwd>/debug-difficult-bug.jsonl."

Step 4: Read the log BEFORE fixing

Read chronologically and answer, in writing:

  1. Did the instrumented path actually run?
  2. What was the expected sequence of events?
  3. What was the actual sequence?
  4. What is the first point where state/order/branch diverges from expectation?

That first divergence is the root cause candidate. Feed it back into the root-cause brief (or write one now) — then implement via /fix, whose failing regression test must assert the actual divergence you observed, not your earlier assumption.

Step 5: Clean up — mandatory

  • Remove every temporary log call, helper, and import.
  • Delete generated .jsonl files.
  • Check the final diff explicitly for leftovers: git diff | grep -n "debugBug\|debug-difficult\|\.jsonl" → expect no hits.

The final diff contains only the fix and its tests.

Done when

  • The first divergence point is identified from log evidence (quote the lines)
  • The fix landed via /fix with a red→green regression test asserting that behavior
  • Reproduction of the original flow now passes
  • Zero instrumentation remnants in the diff

Version History

  • f9d7efd Current 2026-10-20 03:32
  • dd8f587 2026-08-20 16:17

Same Skill Collection

.claude/skills/agent-browser/SKILL.md
.claude/skills/auth/SKILL.md
.claude/skills/create-agents-md/SKILL.md
.claude/skills/error/SKILL.md
.claude/skills/execute/SKILL.md
.claude/skills/make-interfaces-feel-better/SKILL.md
.claude/skills/plan/SKILL.md
.claude/skills/pr-explainer/SKILL.md
.claude/skills/pr-splitter/SKILL.md
.claude/skills/research/SKILL.md
.claude/skills/resolving-merge-conflicts/SKILL.md
.claude/skills/root-cause/SKILL.md
.claude/skills/rust-best-practices/SKILL.md
.claude/skills/smoke-test/SKILL.md
.claude/skills/supabase-postgres-best-practices/SKILL.md
.claude/skills/tdd/SKILL.md
.claude/skills/test-driven-development/SKILL.md
.claude/skills/test/SKILL.md
.claude/skills/writing-skills/SKILL.md
.claude/skills/carbon-design/SKILL.md
.claude/skills/carbon-docs/SKILL.md
.claude/skills/changelog-entry/SKILL.md
.claude/skills/check-and-commit/SKILL.md
.claude/skills/explain/SKILL.md
.claude/skills/feature/SKILL.md
.claude/skills/fix/SKILL.md
.claude/skills/grill/SKILL.md
.claude/skills/improve/SKILL.md
.claude/skills/inngest/SKILL.md
.claude/skills/rust/SKILL.md
.claude/skills/self-review/SKILL.md
.claude/skills/spec-writing/SKILL.md
.claude/skills/translate/SKILL.md
.claude/skills/ui/SKILL.md

Metadata

Files
0
Version
f9d7efd
Hash
6ef02a55
Indexed
2026-08-20 16:17

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-10-24 15:09
浙ICP备14020137号-1