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.

Quellinformationen

Repository
outfitter-dev/outfitter
Letzte Quellaktivität
24. Februar 2026 um 23:09
Erkannte Sprache von SKILL.md
Englisch
Sterne
6
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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
Auf GitHub ansehen