---
name: edit-plan
description: Use when triaging a large test run, skipping known-failing tests, or scoping a re-run to a subset of work without regenerating the plan. Edits a generated plan.json to disable tests or features, scope to a feature subset, override a config value, or clear edits.
license: Apache-2.0
compatibility: Requires simready-benchmark (pip install simready-benchmark). Operates on an existing plan.json produced by `simready-benchmark --plan-only` or a prior full run.
metadata:
  author: NVIDIA
  library: simready_benchmark
  version: "2026.05"
---

## Confirm the Installed Version

This skill ships inside the `simready-benchmark` wheel, so the copy installed with the framework matches the installed code. If you are working from a cached copy or from memory rather than the installed package, confirm the framework version with `simready-benchmark --version`, and treat `simready-benchmark --help` and `simready-benchmark --show-config` as the authoritative source for flags and configuration. A flag documented here might have changed in a different version.

## Generate a Plan First

```bash
simready-benchmark --project-config /path/to/project_config.toml --plan-only
```

Writes `_testing/plan.json`. All edit-plan operations below run against this file.

## Disable a Single Test for a Single Asset

```bash
simready-benchmark --edit-plan \
  --asset path/to/asset.usd \
  --disable-test presence
```

`--disable-test` takes the test's exact name (not a `feature/name` path).

## Disable an Entire Feature for One Asset

```bash
simready-benchmark --edit-plan \
  --asset path/to/asset.usd \
  --disable-feature FET005_BASE_NEUTRAL
```

`--disable-feature` accepts an exact feature name OR a `FETxxx` prefix.

## Apply to Every Asset in One Invocation

```bash
simready-benchmark --edit-plan \
  --all-assets \
  --disable-feature FET005_BASE_NEUTRAL
```

## Keep Only a Subset of Features

```bash
simready-benchmark --edit-plan \
  --asset path/to/asset.usd \
  --only-features FET001,FET003
```

Disables every feature whose name does not match one of the listed prefixes.

## Override a Config Value for a Specific Test

```bash
simready-benchmark --edit-plan \
  --asset path/to/asset.usd \
  --set-config ground_drop:settle_seconds=2.0
```

Format is `TEST_NAME:KEY=VALUE`.

## Clear All Edits for an Asset

```bash
simready-benchmark --edit-plan --asset path/to/asset.usd --enable-all
```

`--enable-all` removes every override targeting this asset from the override log.

## Edit Programmatically

`PlanEditor` operates on an in-memory `Plan` dataclass. Load and save with
`simready_benchmark.core.models.load_plan` and `save_plan`:

```python
from simready_benchmark import PlanEditor
from simready_benchmark.core.models import load_plan, save_plan

plan = load_plan("_testing/plan.json")
editor = PlanEditor(plan)

editor.disable_test("path/to/asset.usd", "presence")
editor.disable_feature("path/to/asset.usd", "FET005_BASE_NEUTRAL")
editor.set_config_override("path/to/asset.usd", "ground_drop", "settle_seconds", 2.0)

save_plan(plan, "_testing/plan.json")
```

`PlanEditor` methods take `asset_path` positionally as the first argument. The
edits append `PlanOverride` entries to `plan.overrides`; they do not mutate
the immutable `assets` / `features` / `tests` lists.

## Run the Edited Plan

```bash
simready-benchmark --resume
```

Reads `plan.json` from `_testing/` (or `--output-dir DIR`) and runs only the
tests that resolve to enabled after applying the override log.

## Inspect the Effective Test List

```python
from simready_benchmark import PlanEditor
from simready_benchmark.core.models import load_plan

plan = load_plan("_testing/plan.json")
editor = PlanEditor(plan)
test_ids = editor.get_effective_tests("path/to/asset.usd")
# `test_ids` is a list[int] of plan-internal test IDs that remain enabled.
```

## Key Rules

- `--edit-plan` is a mode flag. It cannot be combined with `--plan-only`, `--resume`, `--report-only`, or `--list-tests`. The CLI rejects this with exit code 2.
- `--asset PATH` and `--all-assets` are mutually exclusive within one invocation.
- Edits append `PlanOverride` entries to `plan.overrides` (an append-only log). They do NOT modify the immutable `assets` / `features` / `tests` lists. Subsequent edits compose; `enable_all(asset)` removes the entire log entry for that asset.
- Edits operate on an existing `plan.json`. Generate one first with `simready-benchmark --plan-only --project-config ...`.
- `set_config_override` writes one key/value at a time. Call it again for additional keys.

For the full `PlanEditor` API, refer to [references/plan-editor-api.md](references/plan-editor-api.md).
