Help us improve
Share bugs, ideas, or general feedback.
From straitjacket
Stand-alone mutation testing of a target: run cargo-mutants (Rust) or Stryker.NET (C#) over a file/module/project, surface the surviving mutants, and emit each as a work-unit proposal describing the UNDER-TESTED behavior class for a later tdd run to cover. Use when the user wants to mutation-test code, measure mutation score, find gaps the existing tests don't catch, or harden a module's test suite — WITHOUT writing tests in this run. Analysis-only: it proposes coverage gaps as data; it never writes tests itself. Supports Rust (cargo-mutants) and C# (dotnet-stryker); degrades to a clear skip when the tool is absent.
npx claudepluginhub kemononeco/straitjacket --plugin straitjacketHow this skill is triggered — by the user, by Claude, or both
Slash command
/straitjacket:mutationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A thin launcher over the existing `mutation-runner` agent and the `fanout` stage. The shared
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
A thin launcher over the existing mutation-runner agent and the fanout stage. The shared
engine lives in docs/STAGES.md; this skill does not restate it.
Mutation is analysis-only (like audit): it surfaces surviving mutants and emits
work-unit proposals as data for tdd/triage to lift — it never writes or spawns test
authors. A surviving mutant means no test fails when the code is broken there — a coverage gap.
< → <= mutant at line 42". Anchoring a test to a mutant produces a brittle, vacuous test.nothing_scanned/zero-mutant is loud. A tool that scanned nothing (absent / empty scope / build failure) is reported distinctly from a real 100% mutation score.straitjacket:report-bug, then resume or stop. Never pivot to fixing or consulting on a fix; turning a surviving-mutant gap or a captured bug into a fix is a tdd/triage job.<target> — a file, crate::module, directory, or project to mutate. Absent → the crate/project at repo_root.--scope file|module|project — mutation granularity (default: file for Rust, project for C# — Stryker's warm-up makes per-file thrash).--file-proposals — also write the proposals to <run_id>/work-units.json as pending units (default: emit them in the summary only, for review first).repo_root; tree should be green (mutation is in the green-baseline preflight matcher — mutants are only meaningful against a passing suite). Generate run_id.straitjacket detect-stack --repo-root <repo_root> → stack.cargo mutants --version / dotnet stryker --version) → <run_id>/tooling.json. If genuinely absent → STOP with a clear message (mutation has no static fallback). If the tool is reported absent but you can see it is installed, treat it as a straitjacket false-negative probe bug and apply the surfaced-bug reflex (STAGES.md rule 7) — capture via straitjacket:report-bug — then STOP and tell the user the run is blocked on a captured plugin bug (do not fix the probe inline; that is a tdd/triage job).--scope (one task per file/module/project).fanout stage (tasks = one mutation-runner per target, cap: 3); read the runners' shape off the stage's raw (each returns {surviving_mutants:[...]}, not results). Agent path: spawn the runners in one message. Each returns its mutation score + surviving mutants (file, line, function, original, mutated, mutator).{ intended_behavior, target_file, target_symbol, kind }. Dedupe proposals that target the same behavior. If --file-proposals, write them to work-units.json as pending, source_of_unit: "mutation_runner", for a tdd run to author.tdd): each proposed intended_behavior + target_file/target_symbol.nothing_scanned.mutation-runner team; the proposal-framing is the skill's judgment. Artifacts under <repo>/.straitjacket/<run_id>/; the CLI is on PATH via the plugin's bin/.tdd post-green stage runs inline; here it is exposed stand-alone so a dev can mutation-test without a full cycle.