Skip to content
Agent Orchestration
Skill

/test-flakiness

Detect non-deterministic (flaky) tests by reading CI run logs or test result history. Aggregates pass rates per test, identifies intermittent failures, recommends quarantine or fix, and maintains a flaky test registry. Best run during Polish phase or after multiple CI runs.

From plugin
claude-code-game-studios
25k73 skills49 agents
Install
$ npx -y skills add Donchitos/Claude-Code-Game-Studios --skill test-flakiness --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/test-flakiness

Context preview

The summary Claude sees to decide when to auto-load this skill.

Detect non-deterministic (flaky) tests by reading CI run logs or test result history. Aggregates pass rates per test, identifies intermittent failures, recommends quarantine or fix, and maintains a flaky test registry. Best run during Polish phase or after multiple CI runs.

SKILL.md

test-flakiness.SKILL.md
name: test-flakiness
description: "Detect non-deterministic (flaky) tests by reading CI run logs or test result history. Aggregates pass rates per test, identifies intermittent failures, recommends quarantine or fix, and maintains a flaky test registry. Best run during Polish phase or after multiple CI runs."
argument-hint: "[ci-log-path | scan | registry]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Edit, Bash
model: sonnet

Test Flakiness Detection

A flaky test is one that sometimes passes and sometimes fails without any code change. Flaky tests are worse than no tests in some ways — they train the team to ignore red CI runs, masking genuine failures. This skill identifies them, explains likely causes, and recommends whether to quarantine or fix each one.

**Output:** Updated `tests/regression-suite.md` quarantine section + optional `production/qa/flakiness-report-[date].md`

**When to run:**

  • Polish phase (tests have had many runs; statistical signal is reliable)
  • When developers start dismissing CI failures as "probably flaky"
  • After `/regression-suite` identifies quarantined tests that need diagnosis

---

1. Parse Arguments

**Modes:**

  • `/test-flakiness [ci-log-path]` — analyse a specific CI run log file
  • `/test-flakiness scan` — scan all available CI logs in `.github/` or

standard log output directories

  • `/test-flakiness registry` — read existing regression-suite.md quarantine

section and provide remediation guidance for already-known flaky tests

  • No argument — auto-detect: run `scan` if CI logs are accessible, else

`registry`

---

2. Locate CI Log Data

Option A — GitHub Actions (preferred)

Check for test result artifacts:

ls -t .github/ 2>/dev/null
ls -t test-results/ 2>/dev/null

For Godot projects: GdUnit4 outputs XML results compatible with JUnit format. Check `test-results/` for `.xml` files.

For Unity projects: game-ci test runner outputs NUnit XML to `test-results/` by default.

For Unreal projects: automation logs go to `Saved/Logs/`. Grep for `Result: Success` and `Result: Fail` patterns.

Option B — Local log files

If a path argument is provided, read that file directly.

Option C — No log data available

If no logs found: > "No CI log data found. To detect flaky tests, this skill needs test result > history from multiple runs. Options: > 1. Run the test suite at least 3 times and collect the output logs > 2. Check CI pipeline output and save a log to `test-results/` > 3. Run `/test-flakiness registry` to review tests already flagged as flaky > in `tests/regression-suite.md`"

Stop and ask the user which option to pursue.

---

3. Parse Test Results

For each CI log or result file found, parse:

**JUnit XML format** (GdUnit4 / Unity):

  • Grep for `<testcase name=` to get test names
  • Grep for `<failure` or `<error` to identify failures
  • Parse `classname` and `name` attributes for full test identifiers

**Plain text logs**:

  • Grep for pass/fail patterns:
  • Godot: `PASSED` / `FAILED` adjacent to test names
  • Unreal: `Result: Success` / `Result: Fail`
  • Unity: `Test passed` / `Test failed`

Build a table: `test_id → [run1_result, run2_result, run3_result, ...]`

---

4. Identify Flaky Tests

A test is **flaky** if it appears in the result history with both PASS and FAIL outcomes across runs with no code changes between them.

Flakiness thresholds:

  • **High flakiness**: Fails in >25% of runs — quarantine immediately
  • **Moderate flakiness**: Fails in 5–25% of runs — investigate and fix soon
  • **Low/suspected flakiness**: Fails in 1–5% of runs — monitor; may be

genuinely rare failure

For each flaky test, classify the likely cause:

Cause classification

| Cause | Symptoms | Fix direction | |-------|----------|---------------| | **Timing / async** | Fails after awaiting signals or timers; pass rate correlates with system load | Add explicit await/synchronisation; avoid time-based delays | | **Order dependency** | Fails when run after specific other tests; passes in isolation | Add proper setup/teardown; ensure test isolation | | **Random seed** | Fails intermittently with no pattern; involves RNG | Pass explicit seed; don't use `randf()` in tests | | **Resource leak** | Fails more often later in a test run | Fix cleanup in teardown; check orphan nodes (Godot) or object disposal (Unity) | | **External state** | Fails when a file, scene, or global exists from a prior test | Isolate test from file system; use in-memory mocks | | **Floating point** | Fails on comparisons like `== 0.5` | Use epsilon comparison (`is_equal_approx`, `Assert.AreApproximately`) | | **Scene/prefab load race** | Fails when scenes are not yet ready | Await one frame after instantiation; use `await get_tree().process_frame` |

Use Grep to check the test file for timing calls, randf, global state access, or equality comparisons on floats to narrow down the cause.

---

5. Recommend Action

For each flaky test:

**Quarantine (High flakiness):** > "Quarantine this test immediately. Disable it in CI by adding > `@pytest.mark.skip` / `[Ignore]` / `GdUnitSkip` annotation. Log it in > `tests/regression-suite.md` quarantine section. The test is now opt-in only. > Fix the root cause before removing quarantine."

**Investigate and fix soon (Moderate):** > "This test is intermittently unreliable. Root cause appears to be [cause]. > Suggested fix: [specific fix based on cause classification]. Do not quarantine > yet — fix the test directly."

**Monitor (Low/suspected):** > "This test shows suspected flakiness. Collect more run data before > quarantining. Note it as 'suspected' in the regression suite."

---

6. Generate Reports

In-conversation summary

## Flakiness Detection Results

**Runs analysed**: [N]
**Tests tracked**: [N]

### Flaky Tests Found

| Test | System | Fail Rate | Likely Cause | Recommendation |
|------|--------|-----------|--------------|----------------|
| [test_name] | [system] | [N]% |
Read more
Ships withclaude-code-game-studios

Turn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.

Get the whole plugin

Other skills on claude-code-game-studios.