# muttest 0.3.0

- ✨ New `JSONMutationReporter` writes a report conforming to the [mutation-testing-elements](https://stryker-mutator.io) schema, a cross-language standard shared by StrykerJS/.NET/Scala — so muttest output can be fed to any schema-compatible tooling.
- ✨ New `report()` renders a self-contained, source-annotated HTML report (overall score, per-file breakdown, per-line mutant diffs, status filtering, keyboard navigation) from a `JSONMutationReporter` file.
- ✨ New `MultiReporter` fans reporter events out to several reporters at once, e.g. a live `ProgressMutationReporter` alongside a `JSONMutationReporter`.
- ❗️ A mutant that makes tests *error* (rather than fail an expectation) is now scored as killed, matching PIT/Stryker/mutmut. Previously it was counted as survived.
- ❗️ Mutants with no test coverage (no matching test file under `FileTestStrategy`) are now reported as a separate `no coverage` category and excluded from the score, so untested code no longer looks like escaped mutants.
- ✨ `PackageCopyStrategy` gained a `symlink` argument. When `TRUE`, only the mutated file's top-level directory is copied and everything else is symlinked to the original, avoiding a full project copy per mutant (helpful for packages with large `inst/`/`data/`). Defaults to `FALSE`; unsafe if the test suite writes into the package's own directories.
- 🐛 `FileTestStrategy` now matches test files by exact name instead of an unanchored regex, so a source file like `mod.R` no longer runs `test-model.R` and filenames with regex metacharacters are handled correctly.
- 🐛 Added missing `digest` and `tools` to Imports.

# muttest 0.2.1

- Update treesitter queries to work with treesitter >= 1.3.0.

# muttest 0.2.0

- ❗️ Renamed `plan()` to `muttest_plan()`.
- ✨ Add new mutators:
  - `boolean_literal()`, `na_literal()` — literal replacement mutators.
  - `negate_condition()`, `remove_condition_negation()` — condition mutators.
  - `numeric_increment()`, `numeric_decrement()`, `index_increment()`, `index_decrement()` — increment/decrement mutators.
  - `string_empty()`, `string_fill()` — string mutators.
  - `call_name()` — call name mutator.
  - `remove_negation()` — unary negation mutator.
  - `replace_return_value()` — return value mutator.
  - `delete_statement()` — removes assignments and standalone calls one at a time to catch untested side effects and dead assignments.
- ✨ Add preset collections for all major mutator groups:
  - `boolean_literals()` — flips `TRUE`/`FALSE` and `T`/`F`.
  - `na_literals()` — swaps `NA`, `NULL`, and typed NA variants.
  - `numeric_literals()` — increments and decrements numeric constants.
  - `index_mutations()` — shifts subscript indices up and down by one.
  - `string_literals()` — empties non-empty strings and fills empty ones.
  - `condition_mutations()` — negates conditions and removes existing negations.
  - `arithmetic_operators()` — mutates arithmetic operators (`+`, `-`, `*`, `/`, `^`, `%%`, `%/%`).
  - `comparison_operators()` — mutates comparison operators (`<`, `>`, `<=`, `>=`, `==`, `!=`).
  - `logical_operators()` — mutates logical operators (`&`, `|`, `&&`, `||`).
- ✨ Mutators are now parametrized and accept configuration arguments.
- ✨ `ProgressMutationReporter` now reports survived mutants.
- ✨ Expose `Mutator` base class for building custom mutators.
- ✨ `muttest()` supports parallel execution of mutants.
- ✨ `muttest()` supports per-mutant timeouts to avoid hanging test runs.
- 🥅 Improved error handling when test execution fails.

# muttest 0.1.0

- ✨ Create a testing plan with `plan`.
- ✨ Run mutation testing with `muttest`.
- ✨ Support mutating operators with `operator`.
- ✨ Control copying project to temporary directory with `CopyStrategy`:
  - `PackageCopyStrategy` implemented for copying package files.
- ✨ Control test execution for each mutant with `TestStrategy`:
  - `FullTestStrategy` for running all tests for each mutant.
  - `FileTestStrategy` for running only test files matching mutant files.
- ✨ See test results with `MutationReporter`.
  - `ProgressMutationReporter` for printing progress to the console.
