genotoxic

Triages survived mutants and weak test statements using code graph analysis.

Updated May 17, 2026
One-click install
npx skills add https://github.com/irrit-us/agent_misc --skill genotoxic-irrit-us
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: genotoxic
Source: https://github.com/irrit-us/agent_misc/tree/main/skills/trailmark-genotoxic
Command: npx skills add https://github.com/irrit-us/agent_misc --skill genotoxic-irrit-us

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires trailmark, necessist, and includes references (resource) components.

What problem does it solve? Mutation testing produces noisy results: many survived mutants are harmless, while others reveal real test gaps. This Skill combines mutation testing, necessist test-statement removal, and Trailmark code graph analysis to classify findings into false positives, missing unit tests, and fuzzing targets. ## Core Features & Use Cases - Graph-informed triage: Maps each survived mutant to its containing function and uses caller counts, cyclomatic complexity, entrypoint reachability, and blast radius to classify it. - Multi-framework support: Covers mutmut, pytest-gremlins, Stryker, cargo-mutants, gremlins, PITest, Mull, slither-mutate, circomvent, cairo-mutants, and more, plus necessist for weak test detection. - Corroborated findings: When mutation testing and necessist flag the same production function, it is marked as the highest-confidence action item. - Use Case: After running cargo-mutants on a Rust parser and finding 30 survived mutants, use this Skill to identify which are dead code, which need boundary unit tests, and which entrypoint-reachable functions need fuzz harnesses. ## Quick Start Ask the agent to build a Trailmark graph of the target codebase, run the appropriate mutation testing framework and necessist, then triage all survived mutants into a GENOTOXIC_REPORT.md report.

Frequently Asked Questions about genotoxic

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I triage survived mutants from mutation testing?▼

Map each survived mutant to its containing function in a Trailmark code graph, then classify by caller count, cyclomatic complexity, and entrypoint reachability. Mutants with no callers are false positives, simple reachable functions need unit tests, and complex entrypoint-reachable functions are fuzzing targets.

What is necessist and how does it complement mutation testing?▼

Necessist removes statements from test code and re-runs tests; if a test still passes, the removed statement was unnecessary, indicating weak assertions. It supports Go, Rust, Foundry, Hardhat, Vitest, and Anchor, and findings corroborated by mutation testing are highest-confidence.

Which mutation testing frameworks are supported for each language?▼

Python uses pytest-gremlins or mutmut, JavaScript/TypeScript uses Stryker, Rust uses cargo-mutants, Go uses gremlins, Java uses PITest, C/C++ uses Mull, Solidity uses slither-mutate, and Circom and Cairo use circomvent and cairo-mutants respectively.

Why does mull-runner fail with 'Cannot run executable: Invalid argument' on macOS?▼

macOS Tahoe sets an unlimited file descriptor limit by default, which crashes Mull's subprocess spawning. Run ulimit -n 1024 before any mull-runner invocation to set a bounded limit.

When should a survived mutant become a fuzzing target instead of a unit test?▼

Choose fuzzing when the function has cyclomatic complexity above 10, is reachable from an untrusted entrypoint, has more than 10 callers, or handles parsing, deserialization, or binary protocols. Simple deterministic functions with low complexity are better served by unit tests.

When should I not use mutation testing triage?▼

Skip it when the codebase has no existing passing test suite, since mutation frameworks require a green baseline. It also adds no value for pure documentation changes or trivial single-file scripts.