Skip to content

Stop Isaac Lab emitting Kit deprecation tracebacks, and drop the deprecated API we still called - #7018

Merged
kellyguo11 merged 7 commits into
isaac-sim:developfrom
hujc7:jichuanh/kit-suppress-developer-warnings
Aug 14, 2026
Merged

Stop Isaac Lab emitting Kit deprecation tracebacks, and drop the deprecated API we still called#7018
kellyguo11 merged 7 commits into
isaac-sim:developfrom
hujc7:jichuanh/kit-suppress-developer-warnings

Conversation

@hujc7

@hujc7 hujc7 commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Description

Two related halves of nvbug 6585535.

1. Isaac Lab's app experiences never suppressed developer warnings. They were adapted from isaacsim.exp.base.kit but did not carry over its enableDeveloperWarnings = false. All 9 Isaac Sim experiences set it "to reduce log noise"; all 6 of ours did not, and Isaac Lab always launches its own experience (app_launcher.py:1180-1200). carb.deprecated() logs at warning level only when that setting is truthy and formats each message with a Callstack: block, so routine Kit deprecation notices appeared as traceback-shaped text that QA automation cannot separate from real errors.

It has to be set at app boot: _create_app() builds SimulationApp before _load_extensions() runs, so Isaac Lab's central carb settings block is too late. The experience files are the only hook early enough. Suppressed diagnostics stay available per run via --kit_args "--/app/enableDeveloperWarnings=true".

2. We were still calling a deprecated Kit API. IApp.get_post_update_event_stream was the last one, at 7 call sites. They now register through the simulation context's visualization marker registry — the mechanism assets, sensors and the non-experimental managers already use. The two isaaclab_experimental managers were byte-for-byte copies of their core twins from before those were migrated.

This also fixes debug visualization in kitless mode: omni.kit.app was imported only when Kit is present but referenced unconditionally, so enabling debug vis without Kit raised NameError: name 'omni' is not defined (direct envs) or ModuleNotFoundError: No module named 'omni.kit' (Warp-frontend managers).

Behaviour change: debug-vis callbacks now run when a marker-capable visualizer dispatches them instead of on every Kit post-update tick, matching the existing registry call sites.

Type of change

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

Screenshots

play.py --rl_library rsl_rl --task Isaac-Reach-UR10 --visualizer kit (resolves to isaaclab.python.kit):

before after
Warnings carrying a Callstack: block 3 0
All [Warning] lines 35 5

The 3 are the ones in the bug: get_update_event_stream (x2) and get_stage_event_stream from omni.graph.visualization.nodes.

Kitless regression, all five affected classes, before → after: NameError/ModuleNotFoundError → registers and clears cleanly. Covered by test_set_debug_vis_registers_without_kit, which fails on develop with NameError: name 'omni' is not defined.

Checklist

  • 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 updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

Isaac Lab's experience files were adapted from isaacsim.exp.base.kit but did
not carry over its `enableDeveloperWarnings = false` line. Every Isaac Sim
experience disables developer warnings to reduce log noise; all six Isaac Lab
experiences left them enabled, and Isaac Lab always launches its own experience
rather than inheriting Isaac Sim's.

`carb.deprecated()` logs at warning level only when
`/app/enableDeveloperWarnings` is truthy, and formats every message with a
`Callstack:` block. Routine Kit deprecation notices therefore appeared as
traceback-shaped text in Isaac Lab logs, which QA automation cannot distinguish
from real errors without also ignoring genuine tracebacks.

The setting has to be applied at app boot: `AppLauncher._create_app()`
constructs `SimulationApp` before `_load_extensions()` runs, so Isaac Lab's
central carb settings block executes after these warnings have already fired.
The experience files are the only hook early enough.

Measured with `play.py --task Isaac-Reach-UR10 --visualizer kit`: warnings
carrying a callstack drop from 3 to 0 and total warnings from 35 to 5. The
suppressed diagnostics stay available per run via
`--kit_args "--/app/enableDeveloperWarnings=true"`.
@github-actions github-actions Bot added the isaac-sim Related to Isaac Sim team label Aug 11, 2026
@hujc7
hujc7 marked this pull request as ready for review August 11, 2026 06:54
@hujc7
hujc7 requested a review from a team August 11, 2026 06:54
@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR disables Kit developer warnings at boot across every Isaac Lab experience selected by AppLauncher, reducing traceback-shaped deprecation noise while retaining the documented command-line override.

  • Adds /app/enableDeveloperWarnings = false to the standard GUI experience.
  • Applies the same default to headless, rendering, and OpenXR variants.
  • Preserves per-run re-enablement through --kit_args.

Confidence Score: 5/5

The PR appears safe to merge with no actionable defects identified.

All six launcher-selected experiences consistently configure the same Kit setting, and the command-line path for explicitly re-enabling developer warnings remains available.

Important Files Changed

Filename Overview
apps/isaaclab.python.headless.kit Disables developer warnings in the default non-rendering headless experience without changing its existing warning-level logging configuration.
apps/isaaclab.python.headless.rendering.kit Applies the same developer-warning default to the camera-enabled headless experience.
apps/isaaclab.python.kit Disables developer warnings in the standard GUI experience through its existing [settings.app] section.
apps/isaaclab.python.rendering.kit Applies the developer-warning default to the GUI rendering experience.
apps/isaaclab.python.xr.openxr.headless.kit Applies the developer-warning default to the headless OpenXR experience.
apps/isaaclab.python.xr.openxr.kit Applies the developer-warning default to the GUI OpenXR experience.

Reviews (1): Last reviewed commit: "Disable Kit developer warnings in Isaac ..." | 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 change consistently disables Kit developer warnings at boot across all six Isaac Lab experience files, reducing callstack-shaped deprecation noise while retaining an explicit configuration surface for diagnostics.

  • Design and architecture: The experience-level setting is an appropriately early and narrowly scoped design choice. Repeating it in derived rendering and XR experiences is somewhat redundant with inheritance, but ensures consistent behavior for every directly launched experience.
  • API: No Python symbols, CLI arguments, or package interfaces are changed. The configuration default changes warning visibility, but the underlying Kit setting remains available for per-run overrides. No source-package changelog fragment is required for these app-only edits.
  • Implementation: Each assignment uses the correct nesting for its file: dotted app.enableDeveloperWarnings keys in flat [settings] tables and enableDeveloperWarnings under [settings.app] in isaaclab.python.kit. The implementation is minimal and consistent. The non-blocking tradeoff is that developer deprecation diagnostics are hidden by default and must be explicitly re-enabled during investigation.

No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.

Automated review; human maintainers own approval decisions.

hujc7 added 2 commits August 11, 2026 09:58
…zation

`IApp.get_post_update_event_stream` is deprecated in favour of Events 2.0, and it
was the last deprecated Kit API Isaac Lab called. The seven remaining call sites
now register through the simulation context's visualization marker registry, which
is what assets, sensors and the non-experimental managers already use, so this
adopts an existing mechanism rather than introducing one. The two
`isaaclab_experimental` managers were byte-for-byte copies of their core twins
from before those were migrated.

This also fixes debug visualization in kitless mode. `omni.kit.app` was imported
only when Kit is present but referenced unconditionally, so enabling debug
visualization without Kit raised `NameError: name 'omni' is not defined` in the
direct environments and `ModuleNotFoundError: No module named 'omni.kit'` in the
Warp-frontend managers. The registry path has no Kit dependency. Verified against
develop for all five affected classes.

Behaviour change: debug visualization callbacks now run when a marker-capable
visualizer dispatches them instead of on every Kit post-update tick, so they no
longer run when nothing is drawing them. This matches the existing registry
call sites.

The handle returned by the registry is a string id rather than a subscription
object, so the two `__del__` methods that called `unsubscribe()` on it are updated
to clear through the registry, using the same defensive attribute lookup as the
core managers so teardown is safe during interpreter shutdown.
@github-actions github-actions Bot added the isaac-lab Related to Isaac Lab team label Aug 11, 2026
@hujc7 hujc7 changed the title Disable Kit developer warnings in Isaac Lab app experiences Stop Isaac Lab emitting Kit deprecation tracebacks, and drop the deprecated API we still called Aug 11, 2026
hujc7 added 2 commits August 11, 2026 10:49
Four fixes from the codex review of this branch.

`CommandTerm.set_debug_vis` guarded on `SimulationContext.has_omniverse_visualizer()`,
which does not exist anywhere in the tree, so the call raised `AttributeError` before
reaching any registration. Drop the guard and use the environment-owned registry as the
core `CommandTerm` does.

Marker callbacks and live-plot panels share one registry, but `update_visualizers` gated
dispatch on marker support alone. The two visualizer flags are independent, so a
visualizer with markers disabled and live plots enabled registered a panel that never
updated. Gate on either capability.

A callback whose owner was garbage collected without deregistering left a stale weak
proxy that raised `ReferenceError` and aborted the entire dispatch, taking every other
visualizer's callbacks with it. Drop stale entries instead.

Both changelog fragments were `.minor`, but this adds no public API, so retier to patch
per the contributing guide.

Adds unit coverage for the registry's add/clear contract and for the stale-owner case,
which fails without the dispatch fix.
hujc7 added 2 commits August 13, 2026 11:01
update_visualizers now consults supports_live_plots() so live-plot panels
dispatch even when markers are off. _FakeVisualizer is duck-typed rather than a
BaseVisualizer subclass and only implemented supports_markers(), so the widened
gate raised AttributeError in all five update_visualizers tests.

Add the missing protocol method to the stub, give the fake context a marker
registry, and cover both halves of the new condition: a live-plot-only
visualizer dispatches, and one with live plots disabled does not.
@kellyguo11
kellyguo11 merged commit 3fa6bc9 into isaac-sim:develop Aug 14, 2026
47 of 49 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 isaac-sim Related to Isaac Sim team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants