Skip to main content

debug-outfitter

Systematic debugging process for @outfitter/* package issues. Use when debugging Result handling, MCP problems, CLI output, exit codes, logging, or unexpected behavior. Produces structured investigation reports with root cause analysis.

来源信息

仓库
outfitter-dev/outfitter
最近来源活动
2026年2月24日 23:09
检测到的 SKILL.md 语言
英语
星标
6
分支
1

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
debug-outfitter
version
0.2.1
description
Systematic debugging process for @outfitter/* package issues. Use when debugging Result handling, MCP problems, CLI output, exit codes, logging, or unexpected behavior. Produces structured investigation reports with root cause analysis.
allowed-tools
Read, Grep, Glob, Bash(bun *), Bash(rg *)
# Debug Outfitter Systematic debugging process for @outfitter/\* package issues. ## Goal Investigate issues methodically and produce a structured report documenting: 1. What was observed (symptoms) 2. What was investigated (evidence) 3. What was found (root cause) 4. What to do about it (fix or escalation) ## Constraints **DO:** - Gather evidence before forming hypotheses - Use the diagnostic patterns in this skill - Reference `outfitter-atlas` for correct patterns - Assign a confidence level to your diagnosis - Produce a Debug Report at the end **DON'T:** - Apply random fixes hoping something works - Skip the evidence collection phase - Leave issues undiagnosed - Forget to document findings ## Steps 1. Load the `outfitter-atlas` skill to gain expertise in the Outfitter packages. 2. [Collect evidence](#stage-1-evidence-collection) — gather symptoms before hypothesizing 3. [Categorize the issue](#stage-2-categorize-the-issue) — identify which area is affected 4. [Investigate](#stage-3-targeted-investigation) — use category-specific diagnostics 5. Produce a [Debug Report](#stage-4-document-findings) using [TEMPLATE.md](TEMPLATE.md) 6. If the issue is in Outfitter's packages themselves, [escalate](#when-to-escalate) via `outfitter-issue` ## Stage 1: Evidence Collection Gather symptoms before forming hypotheses. ### What to Collect - Error messages and stack traces - Unexpected output vs expected output - Exit codes (actual vs expected) - Relevant code snippets - Environment details (Bun version, package versions) ### Quick Diagnostic Commands ```bash # Check package versions bun pm ls | grep @outfitter # Find Result usage patterns rg "Result\.(ok|err)" --type ts -A 2 # Find error handling rg "isErr\(\)|isOk\(\)" --type ts -A 3 # Check for thrown exceptions (anti-pattern) rg "throw new" --type ts ``` ## Stage 2: Categorize the Issue Based on symptoms, identify the issue category: | Category | Symptoms | Common Causes | | ------------------- | -------------------------------------- | ------------------------------------------------ | | **Result Handling** | Wrong value, type errors | Missing await, reassignment breaking narrowing | | **MCP Issues** | Tool not appearing, invocation failing | Registration order, missing schema descriptions | | **CLI Output** | Wrong format, missing data | Mode detection, await on output | | **Exit Codes** | Wrong exit code | Not using `exitWithError`, manual `process.exit` | | **Logging** | Missing logs, sensitive data exposed | Wrong level, redaction disabled | | **Validation** | Unexpected validation errors | Schema mismatch, missing `.describe()` | ## Stage 3: Targeted Investigation ### Result Handling Issues **Always getting error:** ```typescript // Check: Missing await? const result = getUser(id); // ❌ Promise, not Result! const result = await getUser(id); // ✅ // Check: Validation failing? const validated = validate(input); if (validated.isErr()) { console.log("Validation failed:", validated.error.context); } ``` **Type narrowing broken:** ```typescript // ❌ Reassigning breaks narrowing let result = await getUser(id); if (result.isOk()) { result = await updateUser(result.value); // Breaks! } // ✅ Separate variables const getResult = await getUser(id); if (getResult.isErr()) return getResult; const updateResult = await updateUser(getResult.value); ``` **Error type lost:** ```typescript // Use _tag for narrowing if (result.isErr()) { switch (result.error._tag) { case "ValidationError": console.log(result.error.context); break; case "NotFoundError": console.log(result.error.resourceId); break; } } ``` ### MCP Issues **Tool not appearing:** 1. Verify registration happens before `start()`: ```typescript server.registerTool(myTool); server.start(); // After registration! ``` 2. Check schema has `.describe()` on all fields: ```typescript const schema = z.object({ query: z.string().describe("Required for AI"), }); ``` **Tool invocation failing:** 1. Handler must be async: ```typescript handler: async (input) => { // Not sync! return Result.ok(data); }; ``` 2. Must return Result: ```typescript // ❌ return { data: "value" }; // ✅ return Result.ok({ data: "value" }); ``` ### CLI Output Issues **JSON not printing:** ```typescript // Force mode await output(data, { mode: "json" }); // Check environment // OUTFITTER_JSON=1 forces JSON // OUTFITTER_JSON=0 forces human when no explicit mode is set // Await output before exit await output(data); // ✅ // process.exit(0); // May exit before output completes ``` **Wrong exit code:** ```typescript // ❌ process.exit(1); // ✅ exitWithError(result.error); ``` Exit code reference: | Category | Exit | |----------|------| | validation | 1 | | not_found | 2 | | conflict | 3 | | permission | 4 | | timeout | 5 | | rate_limit | 6 | | network | 7 | | internal | 8 | | auth | 9 | | cancelled | 130 | ### Logging Issues **Redaction not working:** ```typescript const logger = createLogger({ redaction: { enabled: true }, // Must be true! // Custom patterns redaction: { enabled: true, patterns: ["password", "apiKey", "myCustomSecret"], }, }); ``` **Missing context:** ```typescript const requestLogger = createChildLogger(ctx.logger, { requestId: ctx.requestId, handler: "myHandler", }); requestLogger.info("Processing", { data }); // Includes requestId ``` **Wrong level:** ```typescript // Hierarchy: trace < debug < info < warn < error < fatal // "info" hides trace and debug const logger = createLogger({ level: process.env.LOG_LEVEL || "info", }); ``` ## Stage 4: Document Findings Assess confidence in your diagnosis: | Confidence | Meaning | | ---------- | ------------------------------------------------------- | | **High** | Clear pattern violation or bug found with evidence | | **Medium** | Likely cause identified, may need verification | | **Low** | Multiple possibilities remain, needs more investigation | Based on diagnosis, recommend: - **Code fix** — Provide specific fix with before/after - **Pattern guidance** — Reference correct pattern from fieldguide - **Escalation** — If issue is in Outfitter itself, use `outfitter-issue` Produce a Debug Report using [TEMPLATE.md](TEMPLATE.md). ## When to Escalate If investigation reveals an issue in @outfitter/\* packages themselves (not user code): 1. Document the issue clearly in the Debug Report 2. Recommend using `outfitter-issue` skill to file an issue 3. Include reproduction steps and expected vs actual behavior ## Related Skills - `outfitter-atlas` — Correct patterns reference - `outfitter-check` — Compliance verification - `outfitter-issue` — Report issues to Outfitter team
在 GitHub 查看