Fix visualizer initialization - #4844
Conversation
Greptile SummaryThis PR fixes a visualizer initialization regression in Key changes:
Issues found:
Confidence Score: 3/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant C as Caller
participant SM as SettingsManager
participant D as _standalone_settings (dict)
participant CS as carb.settings (Omniverse)
Note over SM: Before initialize_carb_settings()
C->>SM: set(path, value)
SM->>D: store value [always]
Note over CS: carb not yet available — no sync
C->>SM: get(path)
SM->>D: lookup
D-->>SM: value
SM-->>C: value
Note over SM: After initialize_carb_settings()
SM->>CS: connect to carb.settings
Note over D,CS: ⚠️ Pre-existing dict values NOT synced to carb here
C->>SM: set(path, value)
SM->>D: store value [always]
SM->>CS: sync value (set_bool / set_int / etc.)
C->>SM: get(path)
SM->>D: lookup [only dict, carb ignored]
D-->>SM: value
SM-->>C: value
Note over CS: External code writing directly to carb.settings<br/>will NOT be visible via SettingsManager.get()
|
| @@ -124,13 +127,7 @@ def get(self, path: str, default: Any = None) -> Any: | |||
| Returns: | |||
| The value at the path, or default if not found | |||
| """ | |||
| if self._use_carb and self._carb_settings is not None: | |||
| # Delegate to carb.settings | |||
| value = self._carb_settings.get(path) | |||
| return value if value is not None else default | |||
| else: | |||
| # Standalone mode - use dictionary | |||
| return self._standalone_settings.get(path, default) | |||
| return self._standalone_settings.get(path, default) | |||
There was a problem hiding this comment.
get() silently diverges from carb.settings in Omniverse mode
The get() method now unconditionally reads only from _standalone_settings and never consults carb.settings. This means that if any external code (Omniverse extensions, carb-native APIs) writes a value directly to carb.settings under an isaaclab path without going through SettingsManager.set(), SettingsManager.get() will return stale or default data.
The docstring should at minimum document this behavioral change so callers are aware that in Omniverse mode the returned value may differ from what carb.settings.get() would return for the same path. Without documentation, this silent divergence can be a hard-to-debug surprise.
|
@gavrielstate is this still needed? Or should we close it? |
|
Hi @gavrielstate — thanks for putting this one up! 🙏 We're doing a cleanup pass over the Isaac Lab PR backlog, which had grown past 400 open pull requests, and we're closing out the ones that have gone quiet so the queue is reviewable again. Why this PR is being closed: Here is exactly what we found on this PR when we reviewed the backlog:
It was picked up by the sweep because it has been open for about 6 months. It was then put in the "close" bucket because the author has been silent for about 6 months — which is the signal we used to tell apart pull requests that are still being worked on from ones that have genuinely been set aside. We deliberately did not close pull requests that were approved and ready to land, or that were small and clearly still fixing a live bug — there were 27 of those, and we are merging them rather than closing them. No judgement on the change itself — this is purely backlog hygiene. If this is still wanted, please reopen it or re-submit against 🤖 This comment was drafted with AI assistance as part of a maintainer-led sweep of the Isaac Lab pull request backlog. A maintainer is behind this cleanup — but if this closure looks wrong, it may well be, so please push back and we'll take another look. |
Description
Fixes visualizer initialization regression; always store settings in a dictionary.
Type of change
Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there