From ultraship
Conducts structured root cause investigations for bugs, errors, and unexpected behavior using module freeze, evidence collection, and testable hypotheses before fixes.
npx claudepluginhub houseofmvps/ultraship --plugin ultraship<error-or-symptom-description>This skill uses the workspace's default tool permissions.
Investigation is the discipline of understanding a problem before fixing it. This skill enforces a strict protocol: **no fixes until the root cause is found.**
Performs systematic root cause analysis for debugging errors, stack traces, unexpected behavior via investigate-analyze-hypothesize-fix phases, pattern classification, and git history checks.
Performs root cause analysis for bugs by tracing errors through code, analyzing stack traces, forming and testing hypotheses, then hands off to fix.
Enforces systematic root cause analysis before fixes for bugs, test failures, unexpected behavior, performance issues, and build failures.
Share bugs, ideas, or general feedback.
Investigation is the discipline of understanding a problem before fixing it. This skill enforces a strict protocol: no fixes until the root cause is found.
Announce at start: "I'm using the investigate skill — no fixes until we find the root cause."
┌──────────────────────────────────────────────┐
│ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION │
│ │
│ If you haven't found the root cause, │
│ you cannot propose a fix. │
└──────────────────────────────────────────────┘
This is not a suggestion. This is a hard constraint. Guessing causes more bugs than it fixes.
Before investigating, lock the investigation scope to prevent it from sprawling:
Example:
Symptom: API returns 500 on POST /api/webhooks
Module: packages/api/src/routes/webhooks.ts
Freeze: Investigation limited to webhook handler + its direct dependencies
Why freeze? Without scope, investigation becomes exploration. Exploration finds interesting things but doesn't fix bugs.
Gather evidence BEFORE forming any hypothesis:
Read the error — Full stack trace, error message, error code. Not a glance — read every line.
Reproduce — Can you trigger it reliably? What are the exact steps?
Check the timeline — What changed recently?
git log --oneline -20
git diff HEAD~3
Trace the data flow — Follow the data from input to error:
Check boundaries — For multi-component systems, verify data at each boundary:
Form ONE hypothesis based on evidence:
"I think [X] is the root cause because [evidence Y shows Z]"
Requirements:
Test the hypothesis with the SMALLEST possible change:
Critical: If 3 hypotheses fail, STOP. The problem is likely architectural, not a simple bug. Discuss with the user before attempting fix #4.
Now — and only now — implement the proper fix:
node ${CLAUDE_PLUGIN_ROOT}/tools/learnings-manager.mjs save --title "Root cause of webhook 500" --body "The webhook handler wasn't awaiting the database write, causing a race condition with the response" --tags "debugging,webhooks,async"
If you catch yourself doing any of these, STOP and return to Phase 2:
For critical systems, activate /guard before investigating to prevent accidental changes:
/guard → /investigate → fix → /canary
Guard ensures no destructive commands run during investigation, and canary verifies the fix in production.
This skill shares principles with ultraship:systematic-debugging but adds: