Skip to main content
ClaudeWave
Skill27.6k repo starsupdated 3d ago

deflake

Stabilize a flaky test with a minimal, assertion-preserving fix — never by weakening or deleting the check.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/QwenLM/qwen-code /tmp/deflake && cp -r /tmp/deflake/.qwen/skills/deflake ~/.claude/skills/deflake
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# Deflake a flaky test

A `deflake:` issue names ONE test that has been observed failing and then
passing on a rerun of the same commit — the definitive flaky signature. Your
job is to make that test deterministic **without changing what it verifies**.

The issue body carries the test identity (file + name) and the observed failure
signature (e.g. `Test timed out in 5000ms`, `Timed out waiting for …`, an
order-dependent assertion, a wall-clock/random-dependent value). Read the test,
reproduce the mechanism in your head, and apply the SMALLEST fix from the
allowed set below that removes the nondeterminism.

## The only allowed fixes

1. **Raise a timeout / poll budget.** A test that blows vitest's default under
   CI contention (fully-mocked or I/O-bound, not a perf test) gets a generous
   per-test `testTimeout` (3rd arg to `it`), or its internal poll loop is given
   a real wall-clock budget instead of a fixed iteration count (a fixed count of
   `setImmediate` turns elapses in milliseconds and races real I/O).
2. **Stabilize timing / waiting.** Replace a bare `setTimeout`/fixed `sleep`
   with an explicit `await` of the real condition (`vi.waitFor`, a resolved
   promise, an event). Pre-warm a lazy load (e.g. a WASM runtime) in
   `beforeAll` so per-test time doesn't include first-load cost.
3. **Make randomness / time deterministic.** Seed the RNG, `vi.useFakeTimers()`
   / mock `Date.now`, or pin the input so a value that depends on the real clock
   or `Math.random` can't drift.
4. **Isolate / serialize interference.** Give tests that collide on a shared
   resource (a same-named tempdir, a fixed port, a global singleton) unique
   per-test resources, or serialize them.

## Hard rules

- **Never** delete the test, `skip`/`todo` it, loosen an assertion, widen an
  expected range, add a blanket `try/catch`, or add a retry wrapper around the
  assertion. Those hide the flake instead of fixing it — and could hide a real
  bug. If none of the four fixes applies, or the failure looks like a REAL
  intermittent product bug (not test nondeterminism), write
  `<workdir>/failure.md` explaining what you found and stop. A human deflakes it.
- Keep the diff minimal and local to the named test (and its file's helpers).
  Do not refactor unrelated code.
- Preserve every assertion and every input exactly. A timeout bump changes only
  the ceiling; a determinism fix changes only the source of nondeterminism.
- Prefer a per-test or per-file change over a global config change unless the
  same class demonstrably spans the whole package (then a `testTimeout` in that
  package's `vitest.config.ts` is acceptable, as it only raises the ceiling and
  weakens no assertion).

## Verify

Run the named test's file several times (`npx vitest run <file>` in the right
package, repeated) — it must pass every time. Then run the standard verify gate
(build / typecheck / lint / the changed test). If you cannot make it pass
deterministically, write `<workdir>/failure.md` and stop.

Then follow `.qwen/skills/prepare-pr/SKILL.md` for the PR body and write the
bilingual `<workdir>/e2e-report.md` (per the Shared Rules) stating: the flaky
mechanism, which of the four fixes you applied and why, and the repeated-run
evidence that it is now deterministic.
agent-reproduce-alignSkill

Use after a Codex or Claude Code feature has been implemented in Qwen Code to run the selected reference agent and Qwen Code under the same scenario, capture HTTP and terminal traces, compare request bodies, tool/function schemas, outputs, and iterate until the reproduced behavior is close enough.

agent-reproduce-featureSkill

Use when reproducing an existing Codex or Claude Code feature in Qwen Code or another agent CLI by choosing a reference agent, capturing HTTP request bodies, prompts, tool/function schemas, terminal output, and then implementing the matching behavior in the target repo.

autofixSkill

Review and repair current local changes until they converge, or run Qwen Code Autofix issue and review workflows from GitHub Actions.

bugfixSkill

Fix a bug from a GitHub issue, following the reproduce-first

ci-flaky-patrolSkill

Classify a bounded batch of stale PR CI failures and choose the safest response.

codegraphSkill

Analyze indexed codebases via graph database (neug) and vector index (zvec). Covers call graphs, dependencies, dead code, hotspots, module coupling, architecture reports, semantic search, impact analysis, bug root cause from GitHub issues, class diagrams (UML), and PR review (risk scoring, conflict detection, auto-merge candidates, labeling). Also covers creating, inspecting, and repairing a CodeScope index. Use for: code structure, who calls what, why something changed, similar functions, module boundaries, bug tracing, class relationships, PR risk/conflicts, or any question benefiting from a code knowledge graph. Applies when a `.codegraph` index exists in the workspace, or when the user wants to create one.

create-issueSkill

Draft and submit a GitHub issue from a user idea or bug description, with bilingual body and correct labels.

docs-audit-and-refreshSkill

Audit the repository's docs/ content against the current codebase,