-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
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
pythonanddylibplugins 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
- cosmic-ray documentation
- cosmic-ray GitHub
- mutmut GitHub
- mutmut documentation
- Existing design doc: `docs/plans/2026-03-05-cosmic-ray-parity-design.md`
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request