Run mutation testing on this project by following the atdd-mutate skill. This
skill exists as a Codex-native compatibility wrapper for the legacy mutate
entrypoint.
Instructions
Check that both test streams are green before proceeding:
- Run the unit tests
- Run acceptance tests if a pipeline exists (
./run-acceptance-tests.sh) - If either fails, report the failure and stop — do not mutate against a red baseline
Detect the project language and check if a mutation tool exists in the project.
- Preferred: Build a custom mutation tool using TDD — a project-specific
module that walks the AST, applies mutations one at a time, runs targeted
tests, and reports survivors. See the
atdd-mutateskill for the 4-module architecture (mutations, runner, core, hashing/selection) and mutation categories. - Alternative: If the user requests a faster setup, install an existing
framework (Stryker, mutmut, PIT, etc. — see the
atdd-mutateskill).
- Preferred: Build a custom mutation tool using TDD — a project-specific
module that walks the AST, applies mutations one at a time, runs targeted
tests, and reports survivors. See the
Configure the tool to:
- Target source code only (not tests, specs, generated files, or pipeline code)
- Exclude
generated-acceptance-tests/,acceptance-pipeline/, andspecs/ - If
$ARGUMENTSis provided, scope mutations to that path
Run the mutation tool. On the custom-tool path, run
dae_mutmap.py selectfirst and mutate only the changed functions it returns (differential mutation testing — see theatdd-mutateskill); on the framework path, enable the framework's incremental flag.Report results:
- Mutation score (percentage)
- Total mutants, killed, survived
- List each surviving mutant with: file, line, mutation description
- Assessment: strong (90%+), moderate (70-89%), or weak (<70%)
- On the custom-tool path, run
dae_mutmap.py updateto refreshmutation-manifest.json; combine fresh results with cached entries for unchanged functions
Ask whether to proceed with killing surviving mutants by using the
kill-mutantsskill.