Merge upstream 0.32.0a1 + fix data ingest in DimosApp wrapper#22
Merged
Conversation
### What Closes RR-4229 Refactors: - Removes `VisualizerSystem::data()` - Moves it to `VisualizerExecutionOutput` --------- Source-Ref: 1f5fb9eb27bf4d14a859106f97a791b99faab404 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ie-breaking Fixes draw order issues / z-fighting of coplanar textured rects (e.g. two coplanar image planes below a pinhole, grid maps, ...). Clusters textured opaque & transparent rects that share the same plane in world space and overlap and forces them into a single sort group that gets ordered via a secondary sort key (draw order) for the transparent draw phase. This ensures deterministic ordering without z-fighting in the renderer. One small tradeoff of this change: outline masks are shared for a cluster. Adds a snapshot test with co-planar pinholes (opaque & transparent, with varying draw order). Closes: https://linear.app/rerun/issue/RR-4195 Closes: rerun-io#3163 Related: rerun-io#1025 Source-Ref: fed394e6806f1879c80c5ca9f3fd65348bd32842
…uplicated) windows dependencies ### Related * upstream proper fix gfx-rs/wgpu#9325 ### What ci fix. And no more `windows` library duplications for the moment! Source-Ref: 28de28cd16d6d2dc745d39e385a6f3b8abfa5fb4
Useful when anaylizing grafana logs from CLI --------- Source-Ref: 02bc8d78a5dfd305288db2bf28848600f7dbef16 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
### Related Closes RR-4036 [Notion doc](https://www.notion.so/rerunio/Fetching-chunks-from-the-client-31fb24554b1980a7bfc3e21e94e1e9aa) ### What `QueryDatasetRequest` now has a new parameter where the client can ask to include direct (presigned) URLs to layer files in S3. The SDK makes use of this, with a fallback to the old GRPC path. The viewer is unaffected for now. ### Testing - [X] AWS - [x] Azure ### TODO - [x] Azure permissions - [x] Clean up debug env var, logs(?) ### Compatibility This is a backwards-compatible change server-side, but non-backwards-compatible on the SDK side. This means that an old SDK can talk to a new server, but a new SDK is not guaranteed to work with an old server that does not support the new parameter. This is allowed under our backwards compat rules. --------- Source-Ref: a6d629b9e6043fc69997aac53aa0e465478078fb Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com> Co-authored-by: mailmindlin <mailmindlin@users.noreply.github.com>
### Related rerun-io/reality#94 ### What Groups collision geometry entity paths by geometry type. This makes it easier to toggle the different primitive types vs meshes in large models. Before: https://github.com/user-attachments/assets/3e804002-14eb-4d65-b20b-052fdc9371f8 After: https://github.com/user-attachments/assets/aa36c809-bad4-46b6-a9da-d0687fcc53c9 ### Testing Manually convert droid with this branch. ### Compatibility This will change the entity path hierarchy for people using our default urdf loader moving forward but the named frames won't change. Source-Ref: f5658bf9ab2f0007dbebb677cc3d1ae6988d94d5
This lets us use Claude to, for instance, classify alerts and assign them to incidents Source-Ref: a3fb37f3005f1fa0b7b8335acc7ab5ce292ceedd
Source-Ref: b5831e0c94878bce72a1501dee77522b7e0cfb68
Merges main's run_with_app_wrapper refactor while preserving WebSocket-only transport from this branch (no LCM dependency). - Use rerun's run_with_app_wrapper for cleaner CLI handling - WsPublisher now spawns its own tokio runtime thread (works without #[tokio::main]) - Inherits click-to-engage overlay and other UI improvements from main - Bump version to 0.30.0-alpha.6
### What When opening recordings through the context menu from the dataset view, always open them in the background. This prevents the activate recording from jumping around. Source-Ref: 97956c87776ad557e91a7417899dd67eaa53730a
### Related No active issue. ### What It was discovered that `.` notation in dataset naming is causing the table widget to not display these datasets. This PR resolves this issue. ### Testing This has been tested against both datasets with hierarchy of names and tables with similar naming. Both are accurately reproduced now. ### Compatibility No expected compatibility issues. --------- Source-Ref: 047cc99272a2bbc9b40ab6f309b5472b5d9d3deb Co-authored-by: Andreas Reich <r_andreas2@web.de> Co-authored-by: Gijs de Jong <14833076+oxkitsune@users.noreply.github.com>
### Related * CI failures such as: https://github.com/rerun-io/reality/actions/runs/23731745525/job/69128430648 ### What For the `unordered` variant of the test, which we run in CI, we exited too early. The unordered branch of the check implicitly tests for superfluous chunks. Source-Ref: cee41104b39293eba9ab390799f706b94a205615
### Related https://discord.com/channels/1062300748202921994/1075873257124810852/1488203192914280630 ### What I still don't really understand how this change happened the first time but adding mypy at least should help prevent this in the future. I've added this as another example why we should have someone paying more attention to python. Source-Ref: 41e104404cc94df3bb7e3a6da800f4c612db570b
### Related * Part of RR-3967 * Part of RR-4182 * Part of RR-4204 * [x] Requires rerun-io#1295. ### What This allows piping `Selectors` into anonymous functions. These functions behave just as functions that were registered with the `FunctionRegistry` but can't be serialized. Source-Ref: 1183555584604813a8bb41546d5205e33d35118e
### What Title. ### Review Use `git diff -M10 HEAD~1..HEAD` for a nicer diff. Source-Ref: 89f1f32c854bb6e970c1026bfc41fd68873e5029
These are for example GPS coordinates. Out of the available fields in the Foxglove schema we can support: * lat/lon (trivial) * color (see new helper + test) Since RGBA structs are quite common and we internally use packed ints, a new `op::rgba_struct_to_uint32()` is added to `re_lenses`. Adds also snapshot test with a minimal MCAP holding these two data types. Part of https://linear.app/rerun/issue/RR-3546 Source-Ref: 03067c4cd3d6b0d8d58a11b8d29693d4267e7212
Before, it was erasing **all** of the transformation to an `DAffine::ZERO` **without** informing the user. It's quite easy to accidentally have e.g. `[0, 0, 0, 0]` instead of `[0, 0, 0, 1]` - in that case we should ignore the rotation and log an error once to inform the user, but not ignore other transform components like the translation. Fixes an issue I encountered with some datasets that have instance poses for points with such invalid "zero" quaternions. This is arguably imperfect data, but the viewer made it worse by implicitly collapsing all points into the origin (ignoring the useful translation part), and doing so without any explanation, which is super confusing. ### Related Detected while testing rerun-io#937 (see comment there). ### Testing Added new test case for this. Existing tests seem to be fine. ### Compatibility Improvement for the invalid path that doesn't affect the existing happy path. --------- Source-Ref: 83c7d169cdaae182e52e71a65b58c3997a33374e Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
### What Add support for the option `pose` field of point clouds. The pose applied as an `InstancePoses3D` on the Rerun `PointCloud` entity, i.e. an additional offset relative to the coordinate frame. ### Related * Part of RR-3766 * Follow-up of rerun-io#728 * [x] Requires rerun-io#936 * [x] Requires rerun-io#1002 Source-Ref: 55728ce1dd0209dc147f4501002e78569c944105
### What Our GitHub `on_push_docs.yml` action was taking ~6h and then being cancelled by GitHub. This PR removes the generation of the index to `docs.rs`, with the rationally that most Rust devs probably know to go there directly. If the latest release fails again, we need to cherry pick the changes into `docs-latest`. ### Testing Tested locally using: ```sh pixi run meilisearch pixi run search-index build ``` Source-Ref: ec83990488dc92fc7953e01e956c4f426e2a7395
### Related * Closes RR-4238 * [x] Follow-up of rerun-io#1342 ### What Having the `Selector` own the `Runtime` was weird when piping one `Selector` into the other. Source-Ref: 3bb97ac8df12b1979f3b7fb31c7bf4d31f2d779f
### Related * Contains all changes from rerun-io#12710. * Contains all changes from rerun-io#12714. * Supersedes rerun-io#12713. ### What Sync PR. Includes upgraded `nightly` version for doc publishing workflow. Source-Ref: f79063fc3bc37ef7600724f6476ed49b7ac832e3
### What Add support for flat feature names in LeRobot datasets. Source-Ref: 3ac4dadef90803fe871346e07c9cf68173410b05
This is the result of `ghat init` followed by moving a few workflows over to it. Specifically: - No unchecked checkboxes on PRs - Label checks I also took the time to simplify these workflows. They no longer use `pixi`, because the runner image has enough tools to make them work. For reviewers, the most important parts to look at are: - `.github/ghat/workflows/*.ts` - `.github/workflows/generated_*.yaml` - Deleted `.yaml` files Everything else is an implementation detail Source-Ref: 8e3df16abfa8d5d5ce29d67cc7c564c279ab3a4e
### Related * Closes RR-4261 ### What Flushes the recording in the `load_mcap` so all chunks make it into the `.rrd` which is compared Source-Ref: 61cc405b6f65ad77c68ed9cac870beb196e52e0e
This PR introduces a `max_height` method for modal windows, allowing the maximum height to be constrained, similar to the existing `max_width` setter. This adds more consistency to the API. Source-Ref: 74a3028bded4e5ccfc59dd804f8def1115b12d98
### Related - part of https://linear.app/rerun/project/chunk-centric-processing-pipeline-and-lenses-apis-in-python-1cf386cd9cd3/overview ### What First iteration in the `LazyChunkStream`: - Python API as intended (but not feature complete) - 3-part implementation of `LazyChunkStream`: - mostly pure rust, mostly declarative/stateless pipeline description (`stream.rs`) - there are exception, the most glaring one being the python iterator object, which can be one shot - pyo3 adapter (`py_stream.rs`) - currently very thin + some python/rust utilities - naive first take as an engine, likely to be heavily reworked/replaced in future iterations (`engine.rs`) - First draft of `RrdLoader` - This is still very basic and a better "loader" abstraction is still TODO. - Currently only streaming (the RrdLoader will be indexed in the future) ### Testing Added a bunch of e2e test for the new API surface. Source-Ref: 3b5ebce76d540fd80ed5970239979dc507b3280e
Merges the list of supported decoders, lenses etc from `re_mcap` and `re_data_loader`. `foxglove` was missing from the CLI help (but still running with defaults). This is a bugfix. Improving the (internal/public) naming / categorization of the decoders & lenses is out of scope for this PR. Source-Ref: 2cbef56de7967cf6e57a300b3bf10b835f9180a6
### Related * Part of RR-3967 * [x] Requires rerun-io#1342 * [x] Requires rerun-io#1386 ### What Transitions some of the more complicated selectors to the new `pipe`-based approach. Source-Ref: 639f923f9695c9db51fa16b7265ca7e9c962f02f
when only changing wgsl shader files we wouldn't run tests before. That's bad! Source-Ref: 2055816afa046a56407f4f35c74be0f04fd9497a
### Related * Part of https://linear.app/rerun/issue/RR-4074/usage-analytics-for-redap-queries ### What We want to have analytics for what type of queries our customers do, and what their experience is. This PR takes the first steps: * It adds an OTEL (OpenTelemetry) gRPC endpoint on the frontend * It implements the `opentelemetry.proto.collector.trace.v1.TraceService` gRPC service from the official OTLP spec. Any OTLP-compatible client can talk to it. * Received events are enriched with server-side context and forwarded to both PostHog and Grafana * `re_datafusion` collects analytics client-side and sends it to the above endpoint * Each connection gets its own `ConnectionAnalytics` tied to a specific Rerun Cloud origin * A single user query produces exactly **one** analytics event, sent when the query completes * Fetch stats (gRPC vs direct) are accumulated across partitions via `PendingQueryAnalytics` We do NOT collect any query analytics when connecting to the OSS server (re_server). This analytics will ONLY be for Rerun Cloud Customers (at least for now). ### What ends up in PostHog #### Client-side OTLP → server OTEL ingest → PostHog + Grafana One event per user query, fired when `PendingQueryAnalytics` drops (all partitions done). **From span attributes:** | Property | Source | | ------------------------------- | ---------------------------------------------- | | `dataset_id` | The dataset being queried | | `query_chunks` | Chunks matched by the query (subset of dataset)| | `query_segments` | Segments involved in the query | | `query_columns` | Columns in the query output schema | | `query_entities` | Entity paths in the query request | | `query_bytes` | Total bytes of queried chunks (from metadata) | | `total_duration_us` | Full query lifecycle duration (µs) | | `time_to_first_chunk_info_us` | Time to first `query_dataset` response (µs) | | `time_to_first_chunk_us` | Time to first result row returned to user (µs) | | `fetch_grpc_requests` | Number of gRPC fetch requests | | `fetch_grpc_bytes` | Bytes fetched via gRPC | | `fetch_direct_requests` | Number of direct HTTP fetch requests | | `fetch_direct_bytes` | Bytes fetched via direct HTTP | **From resource attributes (prefixed `client.`):** | Property | Source | | --------------------- | -------------------------------------- | | `client.service.name` | `"rerun-viewer"` | | `client.analytics_id` | `re_analytics` config (viewer user ID) | **From server enrichment:** | Property | Source | | ---------------- | --------------------------------- | | `user_id` | JWT `sub` claim | | `trace_id` | `x-request-trace-id` gRPC header | | `stack_name` | Derived from `allowed_host` | | `org_id` | `REDAP_WORKOS_ORG_ID` | | `stack_version` | `exposed_version!()` | | `cloud_provider` | From config | | `cloud_region` | From config | | `instance_id` | From config | * **`distinct_id`**: `user_id` or `"anonymous"` * **`event` name**: `"cloud_query_dataset"` * **Trace correlation**: `x-request-trace-id` header + OTLP span link The client-side event also gets forwarded to Grafana (same OTLP collector as all `tracing` spans) via `GrafanaForwarder`. ### Testing None yet ### Compatibility * Newer versions of the SDK will send off analytics to a missing endpoint on older cloud * Older versions of the SDK will be fine when working with a newer cloud ### TODO * [x] Include the user-uuid from re_analytics * [x] Include the trace-id * [x] One event per user query (not separate query + fetch events) * [x] Split fetch stats by gRPC vs direct * [x] Time to first chunk (result row returned to user) --------- Source-Ref: 91d718aad637b801287b6e38af68362352453990 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Source-Ref: dc55dd775f413ff3fc9b765faa9bbf72727755a4
### Related * Flaky macOS CI: https://github.com/rerun-io/reality/actions/runs/25008263059/job/73237002954#step:13 ### What Using `click_label` would called `run()` internally, which panics if the UI doesn't converge. In this test case, the closing of the selection panel might not be converging (a global property) because the viewer might simultaneously still be waiting (with spinner) for data to arrive in the central panel, resulting in a race condition. Source-Ref: ea5e4ab59dd016f605ba3b7aa3f2dacd98588eff
### Related Closes [RR-4507](https://linear.app/rerun/issue/RR-4507) ### What Fixes deserialization error for ROS message fields of "constant-only" schemas. Some user-defined ROS 2 enum message definitions may only contain primitive-type constants (of same type) and no data field. We should use that common primitive type in this special case, and fail if it's mixed (impossible to parse). ``` int8 FOO = 0 int8 BAR = 1 ``` Before, this got assigned a zero-byte length and failed during deserialization. ### Testing * add unit tests * test with real world example (see ticket) Source-Ref: d3b95d20b10dd02de1b975c57d8bc599dfcaa321
### Related - Part of RR-4513. ### What Only change is adding an if statement around traversing and checking what entity paths are cleared. For the 3d and 2d previews my frame-time goes from ~20 ms to 15.6 ms. Source-Ref: 216afd1de3eecc725081e3a72ae29f3f89dd2143
### What This improves error reporting around cancelled tasks, in particular when a task is cancelled mid-processing. Also surfaces a nicer error to the client in the python SDK. Source-Ref: 871426e0cd353c980cac4bdbda2b434c87f2dbd1
### Related External MCAP filter CLI: https://mcap.dev/guides/cli#usage ### What Adds regex-based filter options to include or exclude channels whose topics match the filters. The option is available in the `rerun mcap convert` CLI and in the Python binding `McapImporter` API. Multiple include & exclude filters can be specified. Allows to selectively convert only parts of an MCAP file without requiring an intermediate file. ### Testing * Unit tests for filter * Tests with real data --------- Source-Ref: 0a0a3f9b55ebdf9c526e97626cb458673877c4a6 Co-authored-by: Michael Grupp <michael@rerun.io>
Added when trying to understand dataloader perf Source-Ref: 02778d6a143733556fad845e6d90386192d4ea6d
Extends the Python `UrdfTree` binding to allow wiring URDF chunks into stream processing, e.g. together with the `McapReader()`. **NOTE**: the `UrdfTree` is not in `rerun.experimental`, but I explicitly marked this new method as experimental. Closes: https://linear.app/rerun/issue/RR-4522 Source-Ref: bc7a975370b0490b389b76c163fd5e97d39879fc
3RTT -> 2RTT = less latency Source-Ref: 0799a1b0c5981c4fa270bff1fb590e68d5363847
### What Updates the changelog file to include 0.31.4 changes. Source-Ref: 49c671d9ec51dc21209470f6e3246c98980f7d20
…lter ### Related - part of https://linear.app/rerun/project/py-chunk-chunk-centric-processing-pipeline-and-lenses-apis-in-python-1cf386cd9cd3 ### What Now you can do `stream.lenses(lenses, content="/my/entity")` to only apply lenses to chunks with have a matching entity path. ### Testing Ye ### Compatibility Yes Source-Ref: fb19382911204a0e8e380c13f525d66bf9916834
Migrates the plot rendering to happen within rerun using re_renderer. This makes rendering plots a lot faster since it completely skips tesselation (meaning more series can be shown without the viewer slowing down). This should also allow implementing custom visualizers for plots, by extending the viewer. --------- Source-Ref: 8c8275e0cbf62b298e4f7ee71f83740c06e30d51 Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: lucasmerlin <8009393+lucasmerlin@users.noreply.github.com> Co-authored-by: Andreas Reich <r_andreas2@web.de>
There was a problem hiding this comment.
Hi! Thanks for opening this pull request.
Because this is your first time contributing to this repository, make sure you've read our Contributor Guide and Code of Conduct.
Targets the matching pypi `rerun-sdk==0.32.0a1` so the viewer protocol
lines up with what dimos can install.
Conflicts resolved (same shape as before):
- commands/mod.rs: keep dimos re-exports (RerunArgs/AppWrapper/
StartupOptionsPatch), add upstream's DownloadCommand, take upstream's
`importers` feature-gate rename
- commands/entrypoint.rs: take upstream's Option<String> memory_limit and
PortArg port; keep `pub` on memory_limit/port; make `PortArg` and its
`port()`/`is_auto()` accessors public for dimos/src/viewer.rs
API drift fixes in dimos's `run_impl_with_wrapper`:
- add `Command::Download` match arm
- rename `cfg(feature = "data_loaders")` → `cfg(feature = "importers")`
- add `cors_allowed_origins: args.cors_allow_origin.clone()` to ServerOptions
- update `SocketAddr::new(args.bind, args.port.port())`
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Use `egui::Area::anchor(RIGHT_BOTTOM, (-5, -5))` instead of `.default_pos() + .movable()` so the HUD stays pinned to the bottom-right on window resize and survives across launches. Drops drag-movability, which the engaged/ disengaged HUD never needed. New area id (`dimos_keyboard_hud_br`) busts the persisted bottom-left position from the previous default. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Default sense for a non-movable interactable `egui::Area` is `CLICK`-only, so any click-with-mouse-motion (which is most clicks in practice) leaked through to the spatial view's drag handler — the camera jittered for the ~1s the user held the button. Setting `.sense(Sense::click_and_drag())` makes egui mark the pointer as consumed for both events. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Lockfile fell out of sync with Cargo.toml during the upstream merge; also picks up patch bumps for rand 0.9.2→0.9.3 and thiserror 2.0.17→2.0.18 that cargo refreshed from registry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
re_viewer::App drains log_receivers and ingests messages in eframe::App::logic. DimosApp was overriding ui/save/clear_color/etc. but not logic, so the default no-op ran instead and the inner App's receive_messages call never fired. The viewer's gRPC pipe accepted messages but they never reached the data store — the symptoms were "Sender blocked" warnings on the SDK side, the connection established, but the viewer stuck on the welcome screen with no blueprint and no entities. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Stock rerun-cli does this and we forgot to. Without it, the viewer's own `re_log::info/warn/error` calls produce no output, which made debugging the data-flow bug significantly harder than it should have been. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings the wrapper variant back to a near-1:1 copy of stock start_native_viewer (delta: extra app_wrapper / startup_patch hooks applied at the end). Restores the bits that had drifted during the upstream merge: - apply args.memory_limit via app.app_options_mut().memory_limit - bring back the explanatory comments (text_log_rx, ctrl-c, etc.) - restore the "Rerun Viewer" wording in the Ctrl-C log line Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Align with the merged upstream rerun version so the wheel version matches the rerun-sdk version dimos pins to. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pulls in the published-but-unmerged 0.30.0a6.dev99 work (WebSocket transport for click/teleop events, dimos-viewer-as-name-of-executable, etc.) so the next published wheel is a proper superset of the currently pinned dev99 instead of a parallel divergent line. Version resolved to our 0.32.0a1 (we're past jeff's 0.30.0a6). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the viewer to upstream rerun 0.32.0a1 (
e73c31296e) and fixes a regression in theDimosAppwrapper that blocked all data ingest.DimosAppoverrodeui/save/etc. but noteframe::App::logic. Stockre_viewer::Appdrains log_receivers inlogic()(viareceive_messages), so the default no-op ran and the SDK→viewer pipe accepted bytes that never reached the data store. Symptom: welcome screen + "Sender blocked" warnings on the bridge side.Companion: dimensionalOS/dimos PR bumping
rerun-sdkpin to==0.32.0a1to match the viewer protocol.