Skip to content

Report the resolved backends in the run startup summary - #7026

Merged
kellyguo11 merged 6 commits into
isaac-sim:developfrom
mataylor-nvidia:mataylor/summary-resolved-backends
Aug 12, 2026
Merged

Report the resolved backends in the run startup summary#7026
kellyguo11 merged 6 commits into
isaac-sim:developfrom
mataylor-nvidia:mataylor/summary-resolved-backends

Conversation

@mataylor-nvidia

@mataylor-nvidia mataylor-nvidia commented Aug 11, 2026

Copy link
Copy Markdown

Description

The train and play startup summary was printed before launch_simulation scanned the config, so a
run reached through an automatic selector was reported by the family it asked for rather than the
backend it resolves to. physics=physx resolves to PhysxAutoCfg and renderer=rtx to an
auto_rtx placeholder; both are resolved inside scan(), using the same "does this run need Kit"
decision, well after the panel was drawn.

uv run isaaclab train --rl_library rsl_rl --task Isaac-Cartpole-Camera-Direct renderer=rtx physics=ovphysx

reported Renderer rtx and then launched OVRTX.

show_run_summary now scans the config before drawing the panel, so every row names the backend
that will run alongside the choice the run stopped at, following the existing
default (<resolved>) form: a backend reached through a family the command line named is reported
as <family> (<resolved>), and one the run named neither directly nor by family stays
default (<resolved>).

Two supporting changes:

  • pre_launch_video_config moves above the summary in the four train entrypoints (the play
    entrypoints already had this order). It injects a headless Kit visualizer for --video runs, so
    scanning before it ran would resolve auto_rtx to OVRTX and bake that in. As a side effect the
    summary of a --video run no longer reports Visualizer none (headless).
  • Requesting the livestream Kit visualizer moves from launch_simulation into scan(), so a
    caller that scans directly reaches the same launch decision the launcher does.

launch_simulation still scans, and does not need a cached or precomputed result: resolving a
placeholder consumes it, so the second walk observes the same signals. test_scanning_twice_reaches_the_same_launch_decision
pins that property.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Screenshots

--task Isaac-Cartpole-Camera-Direct renderer=rtx physics=ovphysx, headless:

Before After
│ Physics       ovphysx           │
│ Renderer rtx │
│ Presets none │
│ Physics       ovphysx           │
│ Renderer rtx (ovrtx) │
│ Presets none │

The run launches OVRTX in both cases; only the report changes.

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package (do not edit CHANGELOG.rst or bump extension.toml — CI handles that)
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

The train and play startup summary was printed before launch_simulation
scanned the config, so a run reached through an automatic selector was
reported by the family it asked for rather than the backend it resolves to.
A headless `physics=ovphysx renderer=rtx` run printed `Renderer rtx` and
then launched OVRTX.

Scan the config in show_run_summary so every row names the backend that
will run, and move pre_launch_video_config above the summary in the train
entrypoints so the scan sees the recording visualizer a `--video` run
injects. Requesting the livestream Kit visualizer moves into scan() so a
direct caller reaches the same launch decision as launch_simulation.
@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR makes startup summaries resolve automatic physics and renderer selectors before reporting the selected backends.

  • Moves livestream visualizer resolution into scan() so direct scans and launches use the same Kit decision.
  • Applies video configuration before summaries in all four training entrypoints.
  • Adds coverage for resolved summary values and repeated scans of the same configuration.

Confidence Score: 5/5

The PR appears safe to merge with no actionable correctness, security, or quality issues identified.

The summary and launch paths scan the same configuration without intervening mutations, automatic backend resolution is idempotent, and livestream and video visualizer handling remains consistent across the affected entrypoints.

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/app/sim_launcher.py Moves livestream Kit visualizer injection into scan() while preserving idempotent repeated resolution.
source/isaaclab_rl/isaaclab_rl/entrypoints/common.py Scans the environment configuration before formatting backend names in the startup summary.
source/isaaclab_rl/isaaclab_rl/entrypoints/backends/train_rsl_rl.py Ensures video-related visualizer configuration is applied before backend resolution and summary output.
source/isaaclab_rl/test/test_entrypoints_common.py Verifies summaries report concrete backends while retaining automatic selectors in the presets row.
source/isaaclab_tasks/test/core/test_runtime_compatibility.py Verifies repeated scans preserve the resolved runtime decision for automatic backend selectors.

Sequence Diagram

sequenceDiagram
    participant Entry as Train/Play entrypoint
    participant Video as pre_launch_video_config
    participant Summary as show_run_summary
    participant Scan as scan
    participant Launch as launch_simulation
    Entry->>Video: Inject video visualizer when required
    Entry->>Summary: Render startup details
    Summary->>Scan: Resolve automatic backends
    Scan-->>Summary: Mutated concrete configuration
    Entry->>Launch: Launch using same configuration
    Launch->>Scan: Re-scan resolved configuration
    Scan-->>Launch: Same runtime decision
Loading

Reviews (1): Last reviewed commit: "Report the resolved backends in the run ..." | Re-trigger Greptile

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

The startup summary now resolves automatic physics and renderer selectors through the shared scan API, with video configuration applied first and tests covering repeated scans. One public API documentation issue remains: scan now mutates both the configuration and launcher arguments, but documents only the configuration mutation.

  • Design and architecture: Backend resolution remains centralized in the launcher module, and the reordered training entrypoints satisfy the documented requirement to apply video-related configuration before summary resolution. The repeated-scan tests cover the summary-to-launch path.
  • API: scan remains signature-compatible, but its observable side effects have expanded: livestream handling writes the Kit visualizer into caller-owned launcher_args. This new behavior should be stated in the public docstring, especially because downstream summary rendering reads the mutated arguments.
  • Implementation: The moved _ensure_livestream_kit_visualizer call directly establishes the undocumented launcher-argument mutation, while the existing test confirms the write-back through launcher_args.visualizer. Add a concise docstring note describing this side effect.

Minor fixes needed. Posted 1 actionable finding inline.

Automated review; human maintainers own approval decisions.

same launch decision.
"""
# Livestreaming implies a Kit visualizer; make that visible to auto RTX resolution.
_ensure_livestream_kit_visualizer(launcher_args)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Suggestion · Api — scan mutates launcher_args without documenting it

scan is public and now forces the Kit visualizer into the caller-owned launcher_args for livestream runs, a side effect previously confined to launch_simulation. The docstring updated in this same hunk only states that cfg is mutated in place, yet show_run_summary reads args_cli afterwards for the visualizer row, so a direct caller can observe its namespace changed silently. Add one docstring line stating that livestream runs get the Kit visualizer written back into launcher_args.

same launch decision.
"""
# Livestreaming implies a Kit visualizer; make that visible to auto RTX resolution.
_ensure_livestream_kit_visualizer(launcher_args)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Livestreaming requires a Kit viewport, but nothing in the config says so. scan needs to be self sufficient so that when it is called from the show_summary this information is already known



@pytest.mark.parametrize(
"selectors, expected_physics, expected_renderer, expected_presets",

@mataylor-nvidia mataylor-nvidia Aug 11, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

marking which selectors were used should be more descriptive for this test

config pinned it.
"""
if requested != resolved:
return resolved

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if the name was resolved by auto selection output the name that was resolved

@StafaH StafaH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Matthew for fixing this.

Can we remove the renderer/physics from preset row, I'd prefer not to repeat there.

Either we show the resolved name, or we show the actual name and resolved in brackets (similar to how default is handled).

I think the second option suits us.

Example:
renderer: rtx (ovrtx)

because it follows the default logic which currently does:

renderer: default (newton_renderer)

@mataylor-nvidia

Copy link
Copy Markdown
Author

Thanks Matthew for fixing this.

Can we remove the renderer/physics from preset row, I'd prefer not to repeat there.

Either we show the resolved name, or we show the actual name and resolved in brackets (similar to how default is handled).

I think the second option suits us.

Example: renderer: rtx (ovrtx)

because it follows the default logic which currently does:

renderer: default (newton_renderer)

done, thanks this makes sense @StafaH

Signed-off-by: Kelly Guo <kellyg@nvidia.com>
@kellyguo11
kellyguo11 merged commit c9ec387 into isaac-sim:develop Aug 12, 2026
47 of 48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants