Appearance
date: 2026-06-04 tags: [mutation, pest, pcov, cache, false-signal] status: graduated graduated_to: CLAUDE.md (Mutation Testing Policy)
The first (cold-cache) pest --mutate run mis-attributes coverage — only warm runs are trustworthy
Symptom — the baseline mutation run reported 185 survivors concentrated entirely in Models/Ai/Services/Mcp with zero in Http/Data. After working those tiers, every later run surfaced ~88 real survivors in Http/Data/Controllers/Requests that the baseline had shown as killed.
Root cause — the first pest --mutate on a cold result cache (vendor/pestphp/pest-plugin-mutate/.temp empty) links mutants to covering tests incorrectly, marking genuinely-uncovered mutants as killed. Once the cache is warm, the linkage is correct and stable — repeated warm runs, --parallel and non-parallel, agreed on 90.68% to the decimal in this session. So the instability is cold-cache, not --parallel (refines reference_mutation_dirty_unreliable).
Fix — campaign branch claude/mutation-floor-90-gmail: scoped all work from warm/deterministic runs, never the cold baseline.
Guard — never scope or trust mutation work from the first run after a cold cache. Run once to warm .temp, then run again and work from the second result. CI's restore-keys: mutate- keeps the cache warm across SHAs, so CI is fine; local first-runs are the trap.