Stop Isaac Lab emitting Kit deprecation tracebacks, and drop the deprecated API we still called - #7018
Conversation
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"`.
Greptile SummaryThe PR disables Kit developer warnings at boot across every Isaac Lab experience selected by
Confidence Score: 5/5The 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
Reviews (1): Last reviewed commit: "Disable Kit developer warnings in Isaac ..." | Re-trigger Greptile |
There was a problem hiding this comment.
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.
…press-developer-warnings
…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.
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.
…press-developer-warnings
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.
…press-developer-warnings
Description
Two related halves of nvbug 6585535.
1. Isaac Lab's app experiences never suppressed developer warnings. They were adapted from
isaacsim.exp.base.kitbut did not carry over itsenableDeveloperWarnings = 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 aCallstack: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()buildsSimulationAppbefore_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_streamwas 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 twoisaaclab_experimentalmanagers were byte-for-byte copies of their core twins from before those were migrated.This also fixes debug visualization in kitless mode:
omni.kit.appwas imported only when Kit is present but referenced unconditionally, so enabling debug vis without Kit raisedNameError: name 'omni' is not defined(direct envs) orModuleNotFoundError: 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
Screenshots
play.py --rl_library rsl_rl --task Isaac-Reach-UR10 --visualizer kit(resolves toisaaclab.python.kit):Callstack:block[Warning]linesThe 3 are the ones in the bug:
get_update_event_stream(x2) andget_stage_event_streamfromomni.graph.visualization.nodes.Kitless regression, all five affected classes, before → after:
NameError/ModuleNotFoundError→ registers and clears cleanly. Covered bytest_set_debug_vis_registers_without_kit, which fails on develop withNameError: name 'omni' is not defined.Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there