web3-universalmutator
Version: see VERSION.
Use this skill to run, troubleshoot, and analyze Web3-focused Universal Mutator workflows without guessing undocumented behavior. It is intentionally not a general Universal Mutator skill: use it only for supported Web3 smart-contract languages and frameworks. Keep SKILL.md as the control surface and load only the reference file that matches the repository and task.
Do not use this skill for non-Web3 Universal Mutator runs, pure fuzzing, input generation, or standalone Web3 audit workflows unless the task is explicitly comparing fuzzing with mutation testing.
Supported Web3 Languages
- TON: Tact (
.tact), Tolk (.tolk), FunC (.fc, .func)
- EVM: Solidity (
.sol), Vyper (.vy), Fe (.fe)
If the repository is Rust, Go, Python, Java, Swift, R, Fortran, TypeScript-only, or another non-Web3 codebase, stop after detection and say this skill is out of scope. Do not use this skill for non-Web3 Universal Mutator runs.
Quick Workflows
Manual workflow:
python scripts/detect_project.py <repo>
python scripts/detect_um_capabilities.py --format markdown
python scripts/plan_mutation_run.py <repo> --target <target> --format markdown
Autonomous workflow:
python scripts/run_campaign.py <repo> --target <target> --mode smoke
python scripts/run_campaign.py <repo> --target <target> --mode full
python scripts/run_campaign.py <repo> --target contracts --all-entrypoints --mode smoke
Custom rule workflow:
python scripts/propose_custom_rules.py <repo> --target <target>
python scripts/propose_custom_rules.py <repo> --target <target> --write mutants/custom-rules/<slug>.rules
python scripts/validate_custom_rules.py <repo> --target <target> --rules mutants/custom-rules/<slug>.rules
python scripts/validate_custom_rules.py <repo> --target <target> --rules mutants/custom-rules/<slug>.rules --dry-run-mutants
python scripts/run_campaign.py <repo> --target <target> --custom-rules write-and-use
When running from outside the skill directory, keep skill and target repo paths explicit:
SKILL_DIR="/path/to/web3-universalmutator"
REPO="/path/to/project"
python "$SKILL_DIR/scripts/detect_project.py" "$REPO"
python "$SKILL_DIR/scripts/run_campaign.py" "$REPO" --target contracts/Vault.sol --mode smoke
Campaign Scope Policy
Default Web3 mutation campaigns are entrypoint-first. If the user provides a contract directory, mutate the main deployable or callable contract entrypoints by default, not every supported source file in that directory. Do not mutate every shared source file in a contract directory by default.
Always enumerate shared dependency files such as messages, storage, errors, fees, constants, utils, libraries, interfaces, and include files. Mark them as "Shared dependency files observed but not mutated by default" unless the user explicitly requests a shared-dependency pass or a survivor points to that layer.
Do not describe an entrypoint-focused campaign as full directory coverage. Use a scope label such as entrypoint-focused-not-full-directory when a directory contains shared files that were intentionally left unmutated.
Follow This Workflow
- Read references/safety.md before any run that might swap source files, write mutant directories, or reuse a dirty tree.
- Determine the project type and confirm it is a supported Web3 smart-contract project.
- Verify the installed Universal Mutator commands, language support, and local flag surface before writing language-specific commands.
- Find the relevant supported source files or contracts, classify entrypoints separately from shared dependencies, and keep the default scope entrypoint-first.
- Review the default rule stack for the selected language using references/mutation-rules.md.
- Offer an optional custom mutation-rules pass when source-specific invariants might benefit from extra mutants. Explain that default mutation campaigns still work without custom rules.
- If the user explicitly requested autonomous custom-rule generation, write custom rule files under
mutants/custom-rules/ and report what was written. Otherwise ask the user before writing a custom .rules file. Use custom rules as extra positional files in mutate; do not replace defaults unless the user asks for a focused custom-only experiment.
- For manual planning, run
scripts/plan_mutation_run.py <repo> --target <optional-contract-or-file> to choose the target, mutants/<safe-target-path> output directory, compile fallback, and narrow test command.
- For autonomous requests, prefer
scripts/run_campaign.py <repo> --target <target> --mode smoke first; use --mode full only after the smoke path and baseline command are trustworthy.
- Treat planned
mutate and analyze_mutants commands as templates until scripts/detect_um_capabilities.py confirms the command, language, and flag surface.
- Run the generated preflight steps. Run the baseline test command immediately after tooling verification. Do not start mutation generation if the baseline tests fail.
- Do not run
mutate or analyze_mutants in parallel inside the same project checkout. Keep one project checkout sequential, or isolate parallel targets in separate worktrees or copies such as .tmp/um-runs/<target-slug>.
- Warn the user that mutation analysis can take a long time because the test command may run once per mutant and can look stuck while a slow test is executing.
- Run the initial mutate command first so Universal Mutator performs its default compile check.
- If the default compile check fails because direct language compilers such as
tolk-js, tact, func-js, or Solidity tooling are missing or not enough for the project, inspect the failure and rerun with the first fallback_mutate_commands entry.
- Create or update
mutants/REPORT.md after mutation generation with the target, commands, total mutants, and non-compiling mutants.
- Run
analyze_mutants only after mutation generation produces compilable mutants, using the planned narrow test command rather than the whole suite when a mapped test exists.
- Update
mutants/REPORT.md after analysis with killed, survived, timeout, compile-error, and flaky counts, then add survivor interpretation and recommended tests.
Load The Right Reference
- Read references/safety.md before mutation runs in a live repository, especially when
analyze_mutants may temporarily swap mutated files into place.
- Read references/project-detection.md first when the repository type is unclear.
- Read references/command-templates.md when you need preflight, smoke, full-run, survivor-rerun, or timeout-triage command scaffolds.
- Read references/cli.md for Web3 Universal Mutator commands, documented flags, output handling,
--swap, and concurrent-run recipes.
- Read references/ton.md when the repository appears to be TON, Acton, Blueprint, FunC, Tolk, Tact, or a TypeScript-based TON wrapper project.
- Read references/evm.md when the repository appears to be Foundry, Hardhat, Truffle, Solidity, Vyper, Fe, or a mixed EVM monorepo.
- Read references/ton-contract-checklists.md when survivors need contract-type-specific test ideas for jettons, wallets, bridges, governance, or other TON patterns.
- Read references/evm-contract-checklists.md when EVM survivors need contract-type-specific test ideas for tokens, vaults, access control, upgradeability, markets, bridges, governance, signatures, fees, rounding, or decimals.
- Read references/mutation-rules.md when the task is about which mutation families exist, which rule files are loaded for a language, how to ideate optional custom
.rules files, or how to explain a surviving mutant in terms of its originating rule stack.
- Read references/custom-rule-syntax.md, references/custom-rule-examples-evm.md, or references/custom-rule-examples-ton.md when generating or reviewing project-specific custom rules.
- Read references/analysis.md after
analyze_mutants, show_mutants, or any triage pass over surviving mutants.
- Read references/result-file-formats.md when you need to interpret
killed.txt, notkilled.txt, prefixed variants, logs, or helper-script JSON and markdown output.
- Read references/troubleshooting.md when commands are missing, TON language support is unclear, tests are flaky, or timeouts and compile failures dominate the run.
- Read references/fuzzing-vs-mutation.md when the user mentions fuzzing, input generation, or a combined fuzzing-plus-mutation workflow.
- Read references/helper-scripts.md when reproducibility matters and the bundled helper scripts can save time.
Use the CLI reference for supported Web3 projects; use the TON reference when the target is Tact, Tolk, or FunC, and the EVM reference when the target is Solidity, Vyper, or Fe. Explicit target paths override repository-family detection.
Anti-Hallucination Rules
- Do not assume the public PyPI universalmutator supports TON. Before using
tact, tolk, or func as language arguments, verify one of:
mutate --help lists the language;
- installed package contains
static/tact.rules, static/tolk.rules, or static/func.rules;
- the user explicitly says they use a TON-enabled fork/build.
- If TON support is not verified, say: “Your installed universalmutator may not support TON directly. I can still help design a mutation workflow, but these TON-specific commands require verification or a TON-enabled fork.”
- When local capability is unknown, phrase commands as templates, not facts: “If your installed
mutate --help confirms <flag/language>, use... Otherwise first verify or install the TON-enabled build.”
- Do not state that
UM_TACT_CMD, UM_TOLK_CMD, UM_FUNC_CMD, mutate contracts/X.tact tact, or similar TON-specific invocation patterns will work unless local help, installed rule files, or the user confirms a TON-enabled build.
- Never invent CLI flags. Classify every flag as one of:
- confirmed by local
--help
- confirmed by bundled reference
- project-local/fork-specific
- unconfirmed; do not use without verification
- Treat
--showRules, --printStat, and --only as locally verified or fork-specific until the installed mutate --help confirms them.
--timeout, --fromFile, and --noShuffle must be treated as locally verified analyze_mutants flags. Run analyze_mutants --help before using them.
- Do not call a survivor
equivalent unless the diff has been inspected and no observable assertion can distinguish it.
- Do not claim mutation score proves contract security. Mutation testing measures test sensitivity to injected changes; it is not an audit.
- Do not confuse mutation testing with fuzzing. Universalmutator mutates source code; fuzzers generate inputs/messages.
- Do not generalize this skill to non-Web3 source languages even if the installed Universal Mutator has rules for them.
- Explicit target paths override project-family detection. A
.sol, .vy, or .fe target must use the EVM route even in a mixed TON repository; a .tact, .tolk, .fc, or .func target must use the TON route.
Operating Rules
- Prefer documented file- or contract-level workflows. Do not assume undocumented directory-wide mutation support.
- Default Web3 mutation campaigns are entrypoint-first. Do not mutate every shared source file in a contract directory by default, and do not describe an entrypoint-focused campaign as full directory coverage.
- Treat the bundled references in this skill as the command baseline for Web3 CLI usage, TON usage, EVM usage, and result interpretation.
- Treat the local rule files under
universalmutator/static/ and universalmutator/comby/ plus the current genmutants.py selection logic as the primary source for which mutation families actually exist.
- Treat custom
.rules files as optional campaign extensions. Do not write or run them unless the user asks for them or accepts the optional custom-rules pass.
- Treat references/command-templates.md as scaffolding, not proof that every installed CLI exposes every flag. Verify locally before locking in a command.
- If a flag, exit-code meaning, or dry-run mode is not confirmed by the bundled references or the current repository source, mark it as not confirmed instead of inventing behavior.
- Do not advise a command or flag unless
scripts/detect_um_capabilities.py confirms it, local help confirms it, or the relevant reference explicitly marks it as version-dependent.
- Keep mutation and analysis sequential inside one project checkout. Parallel mutation or analysis in the same checkout can corrupt swapped files, shared build artifacts, generated wrappers, compile caches, or test state.
- Do not run
mutate or analyze_mutants in parallel inside the same project checkout. If parallel work is required, use separate git worktree checkouts or copy the repository to .tmp/um-runs/<target-slug> per target.
- Before any analyze run, require a clean tree or isolated worktree.
- Prefer a clean worktree or an isolated
git worktree before analysis commands that may swap source files in place.
- Never suggest commands containing
rm, git clean, or other destructive cleanup shortcuts as part of a mutation workflow.
- Verify that one target completes the full mutate plus analyze cycle before considering isolated parallel runs.
- After mutation generation and after analysis, write or update
mutants/REPORT.md; this report is the durable handoff, not an optional chat-only summary.
- Prefer a narrow compile or test command for a single target when it is trustworthy; fall back to a broader command when integration behavior matters.
- Treat
--noCheck as a last-resort noise tradeoff, because it can generate a much larger and less actionable mutant set.
- Prefer expanding package scripts into explicit build + narrow test commands when mutation testing generated-contract projects. Do not stop at
yarn test:base without checking whether it rebuilds generated contract output and whether Jest runs in-band.
- Use the bundled helper scripts when they improve consistency:
scripts/detect_um_capabilities.py for checking whether the installed Universal Mutator environment actually exposes the expected commands, mutate flags, analyze_mutants flags, and TON language support
scripts/detect_project.py for layout and command hints
scripts/plan_mutation_run.py for autopilot routing from project detection to initial_mutate_command, fallback_mutate_commands, mutants/<safe-target-path>, and narrow analyze_mutants
scripts/run_campaign.py for autonomous smoke/full campaigns that write mutants/<campaign-slug>/plan.json, manifest.json, commands.sh, capabilities.json, artifacts.json, run.log, summary.md, and update mutants/REPORT.md
scripts/propose_custom_rules.py and scripts/validate_custom_rules.py for project-specific custom rule generation, match analysis, and optional temporary dry-run validation
scripts/collect_mutation_artifacts.py for artifact inventory
scripts/summarize_results.py for canonical report scaffolding
- When a user asks what mutants exist for a language, answer in terms of loaded rule layers first, then the most important mutation families, then any repository-local exhaustive tables if they are available.
- Use the canonical final report shape from references/analysis.md:
Target, Scope, Commands, Results, Survivors, Likely gaps, Recommended tests, Next commands.
- Treat the tool as cross-platform for Windows and Linux, but treat
--comby as a Linux or WSL workflow on Windows because the external comby binary should not be assumed to work natively there.
- After a TON run, translate surviving mutants into missing message, storage, deploy, opcode, and negative-test coverage suggestions rather than only restating filenames, and use references/ton-contract-checklists.md when the contract class matters.
1---2name: web3-universalmutator3description: Use when the user specifically wants Web3 smart-contract mutation testing with Universal Mutator for TON or EVM projects: TON/Blueprint/Acton using Tact, Tolk, FunC; Solidity/EVM using Solidity, Vyper, Fe with Foundry, Hardhat, Truffle, or source-level workflows. Do not use for pure fuzzing, input generation, standalone Web3 audits, or generic non-Web3 Universal Mutator runs unless comparing fuzzing with mutation testing.4---56# web3-universalmutator78Version: see [VERSION](VERSION).910Use this skill to run, troubleshoot, and analyze Web3-focused Universal Mutator workflows without guessing undocumented behavior. It is intentionally not a general Universal Mutator skill: use it only for supported Web3 smart-contract languages and frameworks. Keep `SKILL.md` as the control surface and load only the reference file that matches the repository and task.11Do not use this skill for non-Web3 Universal Mutator runs, pure fuzzing, input generation, or standalone Web3 audit workflows unless the task is explicitly comparing fuzzing with mutation testing.1213## Supported Web3 Languages1415- TON: Tact (`.tact`), Tolk (`.tolk`), FunC (`.fc`, `.func`)16- EVM: Solidity (`.sol`), Vyper (`.vy`), Fe (`.fe`)1718If the repository is Rust, Go, Python, Java, Swift, R, Fortran, TypeScript-only, or another non-Web3 codebase, stop after detection and say this skill is out of scope. Do not use this skill for non-Web3 Universal Mutator runs.1920## Quick Workflows2122Manual workflow:2324```sh25python scripts/detect_project.py <repo>26python scripts/detect_um_capabilities.py --format markdown27python scripts/plan_mutation_run.py <repo> --target <target> --format markdown28```2930Autonomous workflow:3132```sh33python scripts/run_campaign.py <repo> --target <target> --mode smoke34python scripts/run_campaign.py <repo> --target <target> --mode full35python scripts/run_campaign.py <repo> --target contracts --all-entrypoints --mode smoke36```3738Custom rule workflow:3940```sh41python scripts/propose_custom_rules.py <repo> --target <target>42python scripts/propose_custom_rules.py <repo> --target <target> --write mutants/custom-rules/<slug>.rules43python scripts/validate_custom_rules.py <repo> --target <target> --rules mutants/custom-rules/<slug>.rules44python scripts/validate_custom_rules.py <repo> --target <target> --rules mutants/custom-rules/<slug>.rules --dry-run-mutants45python scripts/run_campaign.py <repo> --target <target> --custom-rules write-and-use46```4748When running from outside the skill directory, keep skill and target repo paths explicit:4950```sh51SKILL_DIR="/path/to/web3-universalmutator"52REPO="/path/to/project"53python "$SKILL_DIR/scripts/detect_project.py" "$REPO"54python "$SKILL_DIR/scripts/run_campaign.py" "$REPO" --target contracts/Vault.sol --mode smoke55```5657## Campaign Scope Policy5859Default Web3 mutation campaigns are entrypoint-first. If the user provides a contract directory, mutate the main deployable or callable contract entrypoints by default, not every supported source file in that directory. Do not mutate every shared source file in a contract directory by default.6061Always enumerate shared dependency files such as `messages`, `storage`, `errors`, `fees`, `constants`, `utils`, libraries, interfaces, and include files. Mark them as "Shared dependency files observed but not mutated by default" unless the user explicitly requests a shared-dependency pass or a survivor points to that layer.6263Do not describe an entrypoint-focused campaign as full directory coverage. Use a scope label such as `entrypoint-focused-not-full-directory` when a directory contains shared files that were intentionally left unmutated.6465## Follow This Workflow66671. Read [references/safety.md](references/safety.md) before any run that might swap source files, write mutant directories, or reuse a dirty tree.682. Determine the project type and confirm it is a supported Web3 smart-contract project.693. Verify the installed Universal Mutator commands, language support, and local flag surface before writing language-specific commands.704. Find the relevant supported source files or contracts, classify entrypoints separately from shared dependencies, and keep the default scope entrypoint-first.715. Review the default rule stack for the selected language using [references/mutation-rules.md](references/mutation-rules.md).726. Offer an optional custom mutation-rules pass when source-specific invariants might benefit from extra mutants. Explain that default mutation campaigns still work without custom rules.737. If the user explicitly requested autonomous custom-rule generation, write custom rule files under `mutants/custom-rules/` and report what was written. Otherwise ask the user before writing a custom `.rules` file. Use custom rules as extra positional files in `mutate`; do not replace defaults unless the user asks for a focused custom-only experiment.748. For manual planning, run `scripts/plan_mutation_run.py <repo> --target <optional-contract-or-file>` to choose the target, `mutants/<safe-target-path>` output directory, compile fallback, and narrow test command.759. For autonomous requests, prefer `scripts/run_campaign.py <repo> --target <target> --mode smoke` first; use `--mode full` only after the smoke path and baseline command are trustworthy.7610. Treat planned `mutate` and `analyze_mutants` commands as templates until `scripts/detect_um_capabilities.py` confirms the command, language, and flag surface.7711. Run the generated preflight steps. Run the baseline test command immediately after tooling verification. Do not start mutation generation if the baseline tests fail.7812. Do not run `mutate` or `analyze_mutants` in parallel inside the same project checkout. Keep one project checkout sequential, or isolate parallel targets in separate worktrees or copies such as `.tmp/um-runs/<target-slug>`.7913. Warn the user that mutation analysis can take a long time because the test command may run once per mutant and can look stuck while a slow test is executing.8014. Run the initial mutate command first so Universal Mutator performs its default compile check.8115. If the default compile check fails because direct language compilers such as `tolk-js`, `tact`, `func-js`, or Solidity tooling are missing or not enough for the project, inspect the failure and rerun with the first `fallback_mutate_commands` entry.8216. Create or update `mutants/REPORT.md` after mutation generation with the target, commands, total mutants, and non-compiling mutants.8317. Run `analyze_mutants` only after mutation generation produces compilable mutants, using the planned narrow test command rather than the whole suite when a mapped test exists.8418. Update `mutants/REPORT.md` after analysis with killed, survived, timeout, compile-error, and flaky counts, then add survivor interpretation and recommended tests.8586## Load The Right Reference8788- Read [references/safety.md](references/safety.md) before mutation runs in a live repository, especially when `analyze_mutants` may temporarily swap mutated files into place.89- Read [references/project-detection.md](references/project-detection.md) first when the repository type is unclear.90- Read [references/command-templates.md](references/command-templates.md) when you need preflight, smoke, full-run, survivor-rerun, or timeout-triage command scaffolds.91- Read [references/cli.md](references/cli.md) for Web3 Universal Mutator commands, documented flags, output handling, `--swap`, and concurrent-run recipes.92- Read [references/ton.md](references/ton.md) when the repository appears to be TON, Acton, Blueprint, FunC, Tolk, Tact, or a TypeScript-based TON wrapper project.93- Read [references/evm.md](references/evm.md) when the repository appears to be Foundry, Hardhat, Truffle, Solidity, Vyper, Fe, or a mixed EVM monorepo.94- Read [references/ton-contract-checklists.md](references/ton-contract-checklists.md) when survivors need contract-type-specific test ideas for jettons, wallets, bridges, governance, or other TON patterns.95- Read [references/evm-contract-checklists.md](references/evm-contract-checklists.md) when EVM survivors need contract-type-specific test ideas for tokens, vaults, access control, upgradeability, markets, bridges, governance, signatures, fees, rounding, or decimals.96- Read [references/mutation-rules.md](references/mutation-rules.md) when the task is about which mutation families exist, which rule files are loaded for a language, how to ideate optional custom `.rules` files, or how to explain a surviving mutant in terms of its originating rule stack.97- Read [references/custom-rule-syntax.md](references/custom-rule-syntax.md), [references/custom-rule-examples-evm.md](references/custom-rule-examples-evm.md), or [references/custom-rule-examples-ton.md](references/custom-rule-examples-ton.md) when generating or reviewing project-specific custom rules.98- Read [references/analysis.md](references/analysis.md) after `analyze_mutants`, `show_mutants`, or any triage pass over surviving mutants.99- Read [references/result-file-formats.md](references/result-file-formats.md) when you need to interpret `killed.txt`, `notkilled.txt`, prefixed variants, logs, or helper-script JSON and markdown output.100- Read [references/troubleshooting.md](references/troubleshooting.md) when commands are missing, TON language support is unclear, tests are flaky, or timeouts and compile failures dominate the run.101- Read [references/fuzzing-vs-mutation.md](references/fuzzing-vs-mutation.md) when the user mentions fuzzing, input generation, or a combined fuzzing-plus-mutation workflow.102- Read [references/helper-scripts.md](references/helper-scripts.md) when reproducibility matters and the bundled helper scripts can save time.103104Use the CLI reference for supported Web3 projects; use the TON reference when the target is Tact, Tolk, or FunC, and the EVM reference when the target is Solidity, Vyper, or Fe. Explicit target paths override repository-family detection.105106## Anti-Hallucination Rules107108- Do not assume the public PyPI universalmutator supports TON. Before using `tact`, `tolk`, or `func` as language arguments, verify one of:109 1. `mutate --help` lists the language;110 2. installed package contains `static/tact.rules`, `static/tolk.rules`, or `static/func.rules`;111 3. the user explicitly says they use a TON-enabled fork/build.112- If TON support is not verified, say: “Your installed universalmutator may not support TON directly. I can still help design a mutation workflow, but these TON-specific commands require verification or a TON-enabled fork.”113- When local capability is unknown, phrase commands as templates, not facts: “If your installed `mutate --help` confirms `<flag/language>`, use... Otherwise first verify or install the TON-enabled build.”114- Do not state that `UM_TACT_CMD`, `UM_TOLK_CMD`, `UM_FUNC_CMD`, `mutate contracts/X.tact tact`, or similar TON-specific invocation patterns will work unless local help, installed rule files, or the user confirms a TON-enabled build.115- Never invent CLI flags. Classify every flag as one of:116 - confirmed by local `--help`117 - confirmed by bundled reference118 - project-local/fork-specific119 - unconfirmed; do not use without verification120- Treat `--showRules`, `--printStat`, and `--only` as locally verified or fork-specific until the installed `mutate --help` confirms them.121- `--timeout`, `--fromFile`, and `--noShuffle` must be treated as locally verified `analyze_mutants` flags. Run `analyze_mutants --help` before using them.122- Do not call a survivor `equivalent` unless the diff has been inspected and no observable assertion can distinguish it.123- Do not claim mutation score proves contract security. Mutation testing measures test sensitivity to injected changes; it is not an audit.124- Do not confuse mutation testing with fuzzing. Universalmutator mutates source code; fuzzers generate inputs/messages.125- Do not generalize this skill to non-Web3 source languages even if the installed Universal Mutator has rules for them.126- Explicit target paths override project-family detection. A `.sol`, `.vy`, or `.fe` target must use the EVM route even in a mixed TON repository; a `.tact`, `.tolk`, `.fc`, or `.func` target must use the TON route.127128## Operating Rules129130- Prefer documented file- or contract-level workflows. Do not assume undocumented directory-wide mutation support.131- Default Web3 mutation campaigns are entrypoint-first. Do not mutate every shared source file in a contract directory by default, and do not describe an entrypoint-focused campaign as full directory coverage.132- Treat the bundled references in this skill as the command baseline for Web3 CLI usage, TON usage, EVM usage, and result interpretation.133- Treat the local rule files under `universalmutator/static/` and `universalmutator/comby/` plus the current `genmutants.py` selection logic as the primary source for which mutation families actually exist.134- Treat custom `.rules` files as optional campaign extensions. Do not write or run them unless the user asks for them or accepts the optional custom-rules pass.135- Treat [references/command-templates.md](references/command-templates.md) as scaffolding, not proof that every installed CLI exposes every flag. Verify locally before locking in a command.136- If a flag, exit-code meaning, or dry-run mode is not confirmed by the bundled references or the current repository source, mark it as not confirmed instead of inventing behavior.137- Do not advise a command or flag unless `scripts/detect_um_capabilities.py` confirms it, local help confirms it, or the relevant reference explicitly marks it as version-dependent.138- Keep mutation and analysis sequential inside one project checkout. Parallel mutation or analysis in the same checkout can corrupt swapped files, shared build artifacts, generated wrappers, compile caches, or test state.139- Do not run `mutate` or `analyze_mutants` in parallel inside the same project checkout. If parallel work is required, use separate `git worktree` checkouts or copy the repository to `.tmp/um-runs/<target-slug>` per target.140- Before any analyze run, require a clean tree or isolated worktree.141- Prefer a clean worktree or an isolated `git worktree` before analysis commands that may swap source files in place.142- Never suggest commands containing `rm`, `git clean`, or other destructive cleanup shortcuts as part of a mutation workflow.143- Verify that one target completes the full mutate plus analyze cycle before considering isolated parallel runs.144- After mutation generation and after analysis, write or update `mutants/REPORT.md`; this report is the durable handoff, not an optional chat-only summary.145- Prefer a narrow compile or test command for a single target when it is trustworthy; fall back to a broader command when integration behavior matters.146- Treat `--noCheck` as a last-resort noise tradeoff, because it can generate a much larger and less actionable mutant set.147- Prefer expanding package scripts into explicit build + narrow test commands when mutation testing generated-contract projects. Do not stop at `yarn test:base` without checking whether it rebuilds generated contract output and whether Jest runs in-band.148- Use the bundled helper scripts when they improve consistency:149 - `scripts/detect_um_capabilities.py` for checking whether the installed Universal Mutator environment actually exposes the expected commands, mutate flags, `analyze_mutants` flags, and TON language support150 - `scripts/detect_project.py` for layout and command hints151 - `scripts/plan_mutation_run.py` for autopilot routing from project detection to `initial_mutate_command`, `fallback_mutate_commands`, `mutants/<safe-target-path>`, and narrow `analyze_mutants`152 - `scripts/run_campaign.py` for autonomous smoke/full campaigns that write `mutants/<campaign-slug>/plan.json`, `manifest.json`, `commands.sh`, `capabilities.json`, `artifacts.json`, `run.log`, `summary.md`, and update `mutants/REPORT.md`153 - `scripts/propose_custom_rules.py` and `scripts/validate_custom_rules.py` for project-specific custom rule generation, match analysis, and optional temporary dry-run validation154 - `scripts/collect_mutation_artifacts.py` for artifact inventory155 - `scripts/summarize_results.py` for canonical report scaffolding156- When a user asks what mutants exist for a language, answer in terms of loaded rule layers first, then the most important mutation families, then any repository-local exhaustive tables if they are available.157- Use the canonical final report shape from [references/analysis.md](references/analysis.md): `Target`, `Scope`, `Commands`, `Results`, `Survivors`, `Likely gaps`, `Recommended tests`, `Next commands`.158- Treat the tool as cross-platform for Windows and Linux, but treat `--comby` as a Linux or WSL workflow on Windows because the external `comby` binary should not be assumed to work natively there.159- After a TON run, translate surviving mutants into missing message, storage, deploy, opcode, and negative-test coverage suggestions rather than only restating filenames, and use [references/ton-contract-checklists.md](references/ton-contract-checklists.md) when the contract class matters.