Skip to content
Back to skills

Fix Investigate

ASecurity

Investigate failing tests or CI divergence. Deep single-test root-cause analysis, or local-vs-CI pattern matching.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
code-qualityrustgoexpressdebuggingapi

Works with

  • api

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add e128/dotnet-reference --skill fix-investigate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fix Investigate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fix Investigate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/e128-fix-investigate/badge)](https://www.skillsdirectory.com/skills/e128-fix-investigate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fix-investigate
description: >
  Investigate failing tests or CI divergence. Deep single-test root-cause analysis,
  or local-vs-CI pattern matching.
when_to_use: >
  investigate failing test, why is this test failing, investigate test failure,
  why does this test fail, test debugging, test broken, works locally not CI, CI failed but local passes,
  fix CI divergence, CI divergence.
argument-hint: "[test name | CI error output | 'CI divergence']"
---

# Fix Investigate

You are a test-failure investigator. Run a deep investigation of failing tests or CI-vs-local divergence. For batch build error fixing, use `/fix` instead.

## Step 0: Detect Mode

| Input pattern                                        | Mode                |
| ---------------------------------------------------- | ------------------- |
| "works locally" / "CI only" / "CI failed but local"  | **CI Divergence**   |
| Single test name or pasted xUnit failure             | **Deep Investigation** |

---

## Mode: CI Divergence

If the repo keeps local-vs-CI build notes (e.g. `lode/infrastructure/local-vs-ci-build.md`),
read them first. Then match each error to a known divergence pattern:

| Divergence Type      | Typical Symptoms                                    |
|----------------------|-----------------------------------------------------|
| Case sensitivity     | File not found on Linux but exists on macOS         |
| Missing using        | CS0246 on a type resolved via macOS global usings   |
| TFM-specific API     | Method exists in local SDK but not CI target TFM    |
| Nullable annotations | CI has stricter `<Nullable>enable</Nullable>`       |
| Analyzer version     | CI NuGet restore fetches newer analyzer             |
| Path separator       | `\\` in hardcoded paths fails on Linux              |

For each error, explain the local-vs-CI gap, apply the fix, then validate with
`scripts/check.sh --all --no-format --json`. If the divergence type is new and
the repo keeps local-vs-CI notes, record it there.

---

## Mode: Deep Investigation

### Step 1: Extract test identifier

From `$ARGUMENTS` or conversation, identify the test class or method name.

### Step 2: Investigate in parallel

Run these simultaneously:

1. `scripts/test.sh {TestName}`: capture assertion message, stack trace
2. Read test file: locate by `{TestClass}Tests.cs` in `tests/`
3. Read source under test: from test method, identify the SUT in `src/`

**Categorize the failure:**

| Category               | Indicators                                              |
|------------------------|---------------------------------------------------------|
| Assertion mismatch     | Expected X but got Y. Test logic or implementation drift |
| Null reference / setup | NRE, missing mock setup, incorrect fixture              |
| Flaky / race condition | Passes sometimes. Async, timers, shared state           |
| Missing implementation | NotImplementedException, method does not exist           |
| Environment / config   | Missing file, wrong path, env variable not set          |

**Check sibling tests** in the same class for shared root cause.

### Step 3: Propose fix

Present the diagnosis with category, root cause, proposed code change, and
affected sibling tests. **Wait for user confirmation before applying.**

For flaky async tests, flag the concurrency hazard (async/timers/shared state) and
recommend a dedicated concurrency review before trusting the fix.

### Step 4: Validate

After user-approved fix: `scripts/test.sh {TestClass}`

## Common Pitfalls

### CS0535 cascade
When implementing interface stubs for CS0535, expression-bodied members do not
allow parameter references. Use block-bodied methods. Unused nullable params
need `GC.KeepAlive(param)`, non-nullable ref params need
`ArgumentNullException.ThrowIfNull(param)`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…