# QA Investigation

> Investigate a specific test failure to its root cause and document the why. Detects whether a failing test is flaky (intermittent) or a deterministic bug during reproduction. Use when a test fails and you need the real cause, not just to make it green. Execution layer, not strategy review. Keywords: flaky test, intermittent failure, debugging tests, root cause analysis, test failure triage, bug hunt, why does this test fail.

- Skill: `gabrielmoreira/qa-investigation` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/qa-investigation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/qa-investigation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Complete terms in LICENSE.txt
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/qa-investigation

---


# QA Investigation

A persistent, file-backed investigation journal for **a specific failing test**. This is the **execution layer**: it resolves a concrete failure. It does **not** validate strategy or architecture (`grill-me-qa`) nor generate QA deliverables (`qa-manual-istqb`).

The core idea: your context window is volatile RAM; the filesystem is persistent disk. Writing goals, evidence, and decisions to markdown prevents context drift during a long investigation.

## When to Use This Skill

- A test fails intermittently (flaky) or deterministically (bug), and you need the root cause.
- The investigation spans many tool calls, multiple runs, or more than one session.
- You want a durable record of what you found, decided, and why.

## When NOT to Use This Skill

- **Authoring a test from scratch** — use the relevant automation/framework skill.
- **Designing a framework or coverage strategy** — strategy validation (`grill-me-qa`) or artifact generation (`qa-manual-istqb`).
- **Simple questions or quick lookups** (fewer than ~5 tool calls).
- **General review of non-test production code.**

The boundary is **not** "is it a selector / browser issue / timeout" — any of those can be worth investigating. The boundary is whether the request needs a **persistent, multi-step root-cause investigation** or is a one-shot tactical task. If uncovering the *why* takes evidence, runs, and iteration, use this skill.

## Tool Agnosticism

This method is independent of any test framework — web, API, mobile, embedded, unit, load. Terms like "browser", "selector", "network requests", or "CI vs local" are **illustrative, not requirements**; substitute the equivalent in your stack.

## Core Process

The phases are the same whether the failure is flaky or a deterministic bug. The skill **discovers** the classification during triage — it does not assume it up front.

### Phase 1: Reproduction & Triage
- Reproduce reliably; isolate variables (parallelism, repeat count, environment, data/state).
- Determine: **intermittent (flaky), deterministic (bug), or non-reproducible?** This is a finding, not an input.
- Record the classification and the evidence that supports it.
- **Goal:** a confirmed reproduction **or** a documented non-reproducible failure.

> **Non-reproducible path:** if the failure cannot be reproduced after a bounded number of attempts, do **not** force a label. Record it as non-reproducible with partial evidence, note the suspected nature (infrastructure, app logic, or test-side timing), and **escalate or flag for observation**. Log the decision and reason to `qa_investigation_findings.md`. See [Flow](./references/flow.md) for detail.

### Phase 2: Evidence Collection
- Capture logs, stack traces, screenshots, traces, retry counts, dependency activity, timings.
- Multimodal content (images, page/dependency data, PDFs) does not persist in context — write it to `qa_investigation_findings.md` as text immediately.
- **Redact sensitive data** (tokens, cookies, credentials, email addresses, PII) before persisting; do not write raw screenshots, traces, logs, or network captures verbatim — summarize them in text with sensitive parts masked.
- Note environment specifics: build/version, platform, device, data conditions, worker count.
- **Goal:** enough evidence for a defensible hypothesis.

### Phase 3: Hypothesis & Root Cause
- Form the leading hypothesis (race condition, timing, selector/view issue, app bug, environment, shared state, data flakiness).
- Test it in a way that can reject it; confirm or reject; record the confirmed cause and the evidence.
- **Goal:** a confirmed root cause, not a guess.

### Phase 4: Fix & Validation
- Decide the fix (test-side vs product-side) and, critically, the alternatives you rejected and why.
- Apply it, then validate stability over repeated runs.
- **Goal:** a stable, verified fix with a documented decision.

### Phase 5: Prevention
- Decide how to prevent recurrence: a shared helper, a lint rule, documentation, a regression guard.
- Record the preventive action(s).
- **Goal:** the failure does not come back silently.

## File Purposes

Scale the file scope to the investment level (triaged at the start — see [Flow](./references/flow.md)). Higher value = fuller record; lower value = leaner:

| Investment | Files in project root | How much to write |
|------------|----------------------|-------------------|
| **P1** high-value / blocking | All three: `plan` + `findings` + `progress` | Full pipeline: goal, phases, decisions, errors, run log |
| **P2** medium | `plan` + `findings` | Phases and the why; `progress` only if the session runs long |
| **P3** low-value / cosmetic flake | `findings` only | Evidence + classification + suspected cause; move on |

Each investigation creates the files above in the **project root**:

| File | Purpose | When to Update |
|------|---------|----------------|
| `qa_investigation_plan.md` | Goal, phases, decisions, error log | After each phase completes |
| `qa_investigation_findings.md` | Root cause, evidence, technical decisions | After ANY discovery |
| `qa_investigation_progress.md` | Session log, run/result records | Throughout the session |

## Critical Rules

1. **Create the plan first** — non-negotiable; the plan is your persistent memory. For a **P3** (low-value) case, the `findings` file is the plan — create that first.
2. **2-Action Rule** — after every 2 read/search ops, save key findings to `qa_investigation_findings.md`.
3. **Read before decide** — re-read the plan before major decisions.
4. **Update after act** — mark phase status, log errors, note files changed.
5. **Log ALL errors** — with attempt number and resolution.
6. **Never repeat failures** — if an action failed, the next must differ.
7. **Classify after reproducing, not before** — a wrong early label poisons the investigation.

## References

- [Flow](./references/flow.md) — methodology detail, effort triage, completion criteria, file lifecycle, error protocols, anti-patterns
- [Templates](./references/templates.md) — starter templates for the three investigation files
- [Examples](./references/examples.md) — flaky, bug, and non-reproducible cases

