Skip to content

Feature parity with cosmic-ray and mutmut #6

@sakost

Description

@sakost

Summary

fest already implements many core mutation testing features, but cosmic-ray and mutmut offer several capabilities that fest currently lacks. This issue tracks the gap analysis and implementation of missing features.

fest Current State (v0.1.1)

Mutation Operators (17 built-in)

arithmetic_op, comparison_op, boolean_op, return_value, negate_condition, remove_decorator, constant_replace, exception_swallow, break_continue, unary_op, zero_iteration_loop, augmented_assign, statement_deletion, bitwise_op, remove_super_call, variable_replace, variable_insert

Infrastructure

  • Coverage-guided mutation (skip uncovered lines)
  • Persistent pytest worker pool (Unix sockets)
  • Session management (SQLite, stop/resume, incremental)
  • Per-file configuration with glob-based overrides
  • Operator and path filtering
  • Pragma support (`# pragma: no mutate`)
  • Seed-based deterministic mutations
  • Text/JSON/HTML reports
  • Custom text-pattern mutators (TOML config)

Missing Features from cosmic-ray

1. Distributed execution

  • cosmic-ray supports "distributors" — plugins that control where/how tests run (local parallel, message bus, cloud)
  • Celery-based distribution for running mutations across multiple machines
  • HTTP-based worker distribution
  • fest status: Only local parallel execution (rayon thread pool)

2. Operator provider plugin system

  • cosmic-ray uses stevedore-based plugin discovery for operator providers
  • Third-party packages can register new operators via entry points
  • fest status: Config types exist for python and dylib plugins but not yet wired into the registry

3. Interceptors

  • cosmic-ray has "interceptors" — hooks that run before/after each mutation test
  • Can be used to skip mutations, modify environments, etc.
  • fest status: No equivalent

4. `init` / `exec` split workflow

  • cosmic-ray separates mutation generation (`init`) from execution (`exec`)
  • Allows inspecting/filtering mutants before running tests
  • fest status: Single `run` command does everything; session DB partially enables this

5. Operator listing/inspection

  • cosmic-ray has `cosmic-ray operators` command to list available operators
  • fest status: No equivalent CLI command

Missing Features from mutmut

1. `apply` command

  • mutmut allows writing a specific mutant to disk (`mutmut apply `)
  • Useful for debugging why a mutant survived
  • fest status: Not implemented

2. Interactive browse TUI

  • mutmut has `mutmut browse` — interactive terminal UI for reviewing results
  • Press `f` to retest a function, `m` to retest a module
  • fest status: No post-run interactive mode

3. Type checker integration

  • mutmut can filter invalid mutants using mypy/pyrefly (e.g., `x: str = 'foo'` → `x: str = None` is caught by type checker)
  • Reduces false positive survived mutants
  • fest status: Not implemented

4. Stack depth limiting

  • mutmut can limit test-to-function stack depth
  • Lower values = faster runs + more localized tests, but more false survivors
  • fest status: Not implemented

5. Test selection per mutant

  • mutmut identifies which tests are relevant per mutant and only runs those
  • Major speed improvement for large test suites
  • fest status: Uses coverage to skip uncovered mutants, but runs full test suite for covered ones

6. `show` command

  • mutmut can display surviving mutants grouped by function/module
  • fest status: Reports show flat lists

Suggested Priority

Feature Priority Complexity
Test selection per mutant High High
`apply` command High Low
Operator listing CLI High Low
Type checker integration Medium Medium
Interactive browse mode Medium High
Distributed execution Low Very High
Interceptors/hooks Low Medium
`init`/`exec` split Low Medium
Stack depth limiting Low Medium

References

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions