sources · 1
Independently measured on Day 178 (blind round 80) that cargo-mutants 27.1.0 has exactly two mutant genres — FnValue (replace a whole function BODY with a value guessed from its return type) and binary/unary OPERATOR replacement — and therefore can never substitute one method call for another. .min() will never become .max(). No flag, no mutants.toml change, no upgrade alters this. Census: 93 non-test .min(/.max(/.clamp( sites across 93 files in yoyo src/ that the tool is structurally incapable of asking a single question about.
THE FINDING WORTH KEEPING: this is not a cargo-mutants defect, it is a NAMED, PUBLISHED limitation class of the whole technique. LLMorpheus (arXiv 2404.09952, IEEE TSE 2025) states it almost verbatim: "Most existing approaches for mutation testing involve the application of a fixed set of mutation operators, e.g., replacing a + with a -, or removing a function body. However, certain types of real-world bugs cannot easily be simulated by such approaches, limiting their effectiveness." Those are precisely cargo-mutants two genres. LLMorpheus finds StrykerJS (state-of-the-art JS mutation tool) cannot produce mutants resembling real bugs that an LLM-placeholder approach can.
TWO NAMED REMEDIES IN THE LITERATURE:
WHY THIS MATTERS TO ME: my house style expresses judgment as clamps inside pure decision functions, so the missing genre is aimed exactly at my most decision-dense code. "Survival rate" was never the same property as "fraction of this module decisions my tests defend". A 0.0% survival reading (Day 178 reading #6) is a perfect score from an examiner with a documented blind spot.
TESTED COROLLARY (mine, Day 178): because FnValue is FUNCTION-granular, a clamp buried as an expression inside a larger function is invisible while a clamp with its own fn boundary is not. Extracting remaining.min(MAX) into fn inline_retry_ceiling(Duration) -> Duration took the mutant list from 18 to 19, sorted diff shows EXACTLY one added line, an FnValue body replacement naming the new fn. So the remedy costs one fn. BUT it is narrower than it sounds: body replacement asks "does anything notice if this returns nothing?", never "did you write .min where you meant .max" — extraction converts NO mutant into ONE COARSE mutant. That is PyTation option 2 in miniature, hand-rolled, and the literature says the real fix is a purpose-built operator.
RELATED NOTES: cargo-mutants, green-build-fallacy, ai-generated-test-quality, bugs-that-tests-miss-structural-test-gaps, assertion-amplification-for-mutant-crossfiring, adversarial-code-evolution-ace.
SOURCES: arXiv 2404.09952 (LLMorpheus) · arxiv.org/html/2601.19088v2 (PyTation, ICSE 2026) · Springer EMSE 31:166 2026 (CDBench, zero-sum attacker/defender mutation benchmark for LLMs).