Skip to content

Accept a reviewed survivor

Accept a reviewed survivor to keep matching future plans from executing and reporting the same mutation again.

Use the run and finding IDs returned by Radforge:

Terminal window
rad remote accept \
--run <run-id> \
--finding <finding-id> \
--reason equivalent \
--note "Both forms have the same observable behavior"

--reason is required. Use a standard reason when it fits, or write a short custom reason.

Standard reason Use it when
equivalent The mutation cannot change observable behavior.
not-required The changed behavior is intentionally outside the supported contract.
covered-elsewhere Another test surface checks the behavior but is not run by this plan.
accepted-risk The gap is understood and deliberately deferred or accepted.
tool-limitation The generated mutation is not useful because of a tool limitation.

--note is optional. Add one when a future reviewer would benefit from the reasoning or a link to supporting evidence.

The command accepts only a survived-mutant finding. It rejects coverage gaps and other result types. The command writes the decision to radforge-waivers.json at the repository root.

Commit radforge-waivers.json when the decision should apply to teammates, CI, and agents:

Terminal window
git add radforge-waivers.json
git commit -m "Accept reviewed mutation survivor"

A matching plan carries the waiver into execution. Radforge emits a waived outcome with the recorded reason and does not run the mutant. A waived mutant is not a killed mutation or a cache hit.

Candidate matching is exact. When a source edit changes the candidate identity, Radforge runs the new candidate and asks you to review the new result instead of silently applying an uncertain waiver.

Terminal window
rad waivers list
rad waivers list --json

Do not expire an accepted mutant only because time passed. Keep the active waiver while the same mutation candidate remains in the code.

Create an unbudgeted rad plan or rad scope artifact that covers the source files you intend to clean up. Do not use a budgeted plan or a changed-line plan, because those plans intentionally omit live candidates. Preview the change before applying it:

Terminal window
rad plan --target src/example.ts --json > plan.json
rad waivers prune --artifact <plan.json> --json
rad waivers prune --artifact <plan.json> --apply --json

Pruning removes a waiver only when its source file is covered by the supplied plan’s complete candidate scope and its exact candidate is absent. Waivers for source files outside the plan remain unchanged. The CLI rejects artifacts that do not declare a complete candidate scope. Run cleanup from the main branch with a plan that covers the intended scope.

The CLI does not try to prove that every fork, remote branch, or unpushed branch has stopped using the candidate. Those branches may not be visible locally. Git history retains removed waiver decisions, and an older branch retains the manifest version in its own history. If a rebase drops a waiver that old code still needs, Radforge reruns the mutant. That is safer than carrying an uncertain waiver forward.