<!-- Canonical page: https://docs.radforge.dev/overview/ -->

# What Radforge does

Code coverage shows which lines ran. Radforge asks a different question: would the tests fail if covered behavior changed?

New to the approach? [Learn how mutation testing works](/mutation-testing/), including how to interpret killed and surviving mutations.

Radforge finds mutation candidates in supported source files and selects tests for each candidate. A mutation can reverse a condition, change a return value, or move a boundary. A test failure **kills** the mutation. If every selected test passes, the mutation **survives** and Radforge reports it as a finding.

## Local CLI and GitHub App

The CLI selects source files, mutation candidates, and tests from your repository. It uploads that plan with a snapshot of Git-tracked files. Radforge executes the mutation tests on hosted infrastructure, so the run does not use your local CPU or memory.

The GitHub App triggers mutation tests for new pull requests in selected repositories. Radforge publishes the result as a GitHub check.

<figure class="radforge-process">
  <picture>
    <source
      media="(max-width: 35rem)"
      srcset="/diagrams/radforge-flow-mobile-v3.svg"
    />
    <img
      src="/diagrams/radforge-flow-v3.svg"
      width="1200"
      height="650"
      alt="The local CLI uploads a mutation plan and Git-tracked source. The GitHub App triggers mutation tests for new pull requests. Radforge executes the tests on hosted infrastructure and returns results to the CLI or a GitHub check."
    />
  </picture>
  <figcaption>Both paths execute mutation tests on Radforge infrastructure and return results where the run started.</figcaption>
</figure>

## Main workflows

- `rad file` targets one source file.
- `rad plan` prints a plan without executing it.
- `rad changed` targets source files selected from a Git diff.
- `rad scope` targets an explicit list of source files selected by you or another tool.
- `rad remote` submits plans and retrieves run status and findings.
- The GitHub App can start runs for pull requests and publish GitHub checks.

A survivor means the selected tests did not catch that change. It does not prove that the code is wrong. Review the change, add a test if the behavior matters, and rerun the affected file or Git diff.
