Skip to content

Configuration

Radforge builds plans from files in your repository and CLI options. There is no separate hosted configuration for mutation planning.

rad init and rad doctor detect supported Go, TypeScript, and Python workspaces. Each independently runnable root is a profile, so a monorepo can contain multiple profiles with the same language. Go detection recognizes go.mod modules and go.work workspaces. TypeScript detection uses package, configuration, lockfile, and Vitest signals. Python detection uses project, uv.lock, and pytest metadata.

Use --repo-root to point to another Git working tree. Use --language to choose auto, mixed, go, typescript, or python during setup and diagnosis. During noninteractive initialization, repeat --profile-root <repo-relative-path> to select exact roots when detection finds more than one profile. Language selection filters profiles; it does not replace profile selection in an ambiguous repository.

rad changed --exclude <pattern> removes matching source files from mutation analysis. Repeat the option to add more patterns. Radforge also reads the repo-local .muttignore file. The filename is retained for compatibility with existing installations.

Write one exact repository-relative path or glob pattern per line. Blank lines and lines beginning with # are ignored. Ignored files are not mutated, but tests can still import them as dependencies.

# Generated mutation targets
generated/schema.ts
generated/client/**
  • --budget <count> limits total candidates in the generated plan.
  • --dry-run prints a plan instead of submitting it.
  • --allow-broad-tests allows a broad test set when Radforge cannot select a smaller one.
  • --json selects machine-readable output where the command supports it.

radforge-waivers.json records reviewed survivors that matching future plans should not execute. The file belongs at the repository root and can be committed when the decisions should be shared. Each entry records the exact candidate, source location, reason, optional note, source run and finding, and acceptance time.

Use rad remote accept to add an entry. Notes are recommended but not required. Use rad waivers list to inspect the active manifest and plan-scoped rad waivers prune with an unbudgeted file or scope plan to remove stale entries. The CLI rejects budgeted and changed-line plans for pruning because they omit live candidates. Radforge does not expire a waiver solely because time passed while the exact candidate remains in the code. See Accept a reviewed survivor for the complete workflow and retention behavior.

Multi-language repositories and test selection

Section titled “Multi-language repositories and test selection”

One mutation run uses one language profile. Use rad verify --language go, rad verify --language typescript, or rad verify --language python to choose the language. If the repository contains multiple runnable roots for that language, add --profile-root <repo-relative-path>. Repeat verification for every profile you want to check.

Radforge normally selects tests from the target source and the repository’s native runner configuration. For an explicit TypeScript canary, repeat --test-file <repo-relative-test> and optionally provide --test-config <repo-relative-vitest-config>. For Go, repeat --build-tag <tag> or --test-flag <flag> when the package requires them. For Python, repeat --test-file <repo-relative-test-or-node-id> when you need an explicit pytest selection. Radforge does not accept an arbitrary hosted shell test command; the generated plan records structured runner inputs so hosted execution can validate and reproduce them.

A scope file lists source paths relative to the repository root, one path per line. A plan is generated JSON. Do not edit it by hand. Before submission, the CLI checks its format against the current server version.

The CLI reference is generated from rad --help and lists the options available in this source revision.