Telemetry: Add application telemetry settings dialog#2622
Conversation
Automated PR Review (Claude)0. SummaryVerdict: MINOR SUGGESTIONS Minor items to address: 1.1, 1.2, 2.1, 6.1, 6.2. This PR replaces the single boolean usage-statistics toggle with a tiered, cumulative data-privacy consent model (None → Errors → Usage → Vehicle → Device). It introduces a new 1. Correctness & Implementation Bugs1.1 ( 1.2 ( 1.3 ( 2. AGENTS.md Adherence2.1 ( 2.2 ( 2.3 ( 2.4 ( 3. Security3.1 No obfuscated or intentionally unreadable code found. 3.2 No suspicious base64/hex/encoded blobs or binary-like strings. 3.3 No hidden Unicode, zero-width characters, RTL overrides, or homoglyph attacks detected. 3.4 No unexpected network calls. The telemetry endpoints (PostHog, Sentry) are pre-existing. The new 3.5 No changes to build scripts, 3.6 No new use of 3.7 No new dependencies added. No package.json changes in this PR. 3.8 No patterns suggesting malicious behavior. The PR is a straightforward privacy-controls improvement that gates telemetry behind explicit user consent. 4. Performance4.1 ( No other performance issues identified. No new subscriptions are left uncleared; no heavy deps added. 5. UI / UX5.1 ( 5.2 ( 5.3 ( 6. Code Quality & Style6.1 ( 6.2 ( 6.3 ( 6.4 ( 7. Tests7.1 ( 8. Documentation8.1 ( 8.2 ( 9. Nitpicks / Optional9.1 ( 9.2 ( 9.3 ( 9.4 ( Generated by Claude. This is advisory; a human reviewer must still approve. |
rafaellehmkuhl
left a comment
There was a problem hiding this comment.
Some points for us to discuss:
- There should be a minimum telemetry level, where we are at least informed about the decision of the user on disabling telemetry.
- This is killing inclusive our current number-of-active-users data, leaving us blind.
- This opt-out non-dismissible approach is going to hit us hard. I don't believe we should go that way.
There was a problem hiding this comment.
Great start - thanks!! :D
A few minor comments:
- The window feels wider than it needs to be, especially for the text size
- It feels like a lot to take in, which I think is partly because of how small and spread out the text is
- but is maybe also a sign that we need to shorten some of the descriptions, not sure...
- I think the "unapplied grey" should get used on any unselected section titles and data types, so it's clearer what is and isn't included:
There should be a minimum telemetry level, where we are at least informed about the decision of the user on disabling telemetry.
If we do this we would need to change the "No application telemetry" description, so it's not lying. First thought is "All we know is someone chose not to share", but we may be able to come up with better/nicer wording. The title should maybe be changed to "No ongoing telemetry".
Some minor suggestions:
| max-width="1020" | ||
| variant="text-only" | ||
| > | ||
| <template #title><div class="flex items-center w-full justify-center">Data Privacy</div></template> |
There was a problem hiding this comment.
| <template #title><div class="flex items-center w-full justify-center">Data Privacy</div></template> | |
| <template #title><div class="flex items-center w-full justify-center">Help Improve Cockpit!</div></template> |
This is debatable, but I feel like it better communicates our intent / what we want from users.
| Cockpit can share anonymous information with the Blue Robotics development team to help us understand how | ||
| the application is being used. The more you share, the better we can target our development and testing | ||
| efforts to your needs - but you stay in control of what is included. |
There was a problem hiding this comment.
I'm a bit concerned users won't want to read this much text, but I also don't want to cut any of it out...
A very minor change:
| Cockpit can share anonymous information with the Blue Robotics development team to help us understand how | |
| the application is being used. The more you share, the better we can target our development and testing | |
| efforts to your needs - but you stay in control of what is included. | |
| Cockpit can share anonymous information with the Blue Robotics development team to help us understand how | |
| the application is being used. The more you share, the better we can target our development and testing | |
| efforts to your needs - but you're in control of what is included. |
| @click="showExamples = !showExamples" | ||
| > | ||
| <v-icon size="14">{{ showExamples ? 'mdi-chevron-down' : 'mdi-chevron-right' }}</v-icon> | ||
| {{ showExamples ? 'Hide example data' : 'Show example data' }} |
There was a problem hiding this comment.
Ideally the example data would include the actual values from the user's system (possibly in a separate column?), but that seems ok to leave for a later implementation if it's non-negligible.
| { | ||
| level: TelemetryDataPrivacyLevel.Device, | ||
| title: 'Device information', | ||
| subtitle: 'CPU/GPU type, available memory, screen size, locale', |
There was a problem hiding this comment.
| subtitle: 'CPU/GPU type, available memory, screen size, locale', | |
| subtitle: 'CPU+GPU type, available memory, screen size, locale', |
| negative: `We'll rely on internal testing and support requests to find bugs.`, | ||
| examples: [ | ||
| 'Uncaught exceptions and stack traces', | ||
| 'Performance traces', |
There was a problem hiding this comment.
I feel like this belongs in the Usage statistics, since it's related to memory leaks and isn't directly tied to errors. Otherwise we should reword the categories and positive/negative points.
@rafaellehmkuhl I would note that usage information is not a development right or requirement - it's just helpful (and even then mostly in the trends). Consensual data collection means users can feel good about it (and not like we're being shady), and providing a "no ongoing telemetry" option is genuine while discouraging privacy-focused devs/users from making a fork that strips out the telemetry system entirely (which, by the license, they have the right to do).
I am curious what you're meaning here - opt-out is already encouraging users to allow the telemetry, right? If your issue is with the "non-dismissible" part, we could potentially have an "ask me next time" / "ask me later" button that keeps the settings as undefined, with no telemetry sent that session? Not really sure what the alternatives would be 🤷♂️ |
We are not being shady. We can and should inform the users about the existence of telemetry. Opening an automatic window and asking/forcing the user to opt is just going to make people disable it unnecessarily. Not only that, but we don't collect non-anonymous data, and we only collect non-intrusive events. We are on the other side of the fence right now, by being very limited on what we collect.
The alternative is to leave things as they are right now, add this dialog to be opened from the menu (as we have the full-opt-out-switch today and add more information in our README and docs. If you look for any studies and AB tests you will find that the reduction in telemetry data from going from opt-out to opt-in vary between 99% to 70%. From our numbers that would mean receiving data about around 1-30 users, so basically negligible. It kills the entire purpose of having telemetry for being able to provide better solutions and define directions. If any users have problems with that, I would say they are indeed encouraged to fork the project. It doesn't make sense to harm the work because of anonymous and hand-crafted telemetry. |
I wasn't suggesting that - just that if we substantially increase telemetry without informing users then that could be interpreted (by some users) as shady.
I think we all agree on this 👍
Opt-in vs opt-out is based on the defaults we specify (e.g. where does the slider start, in the case of this PR). Forcing some kind of decision is somewhat independent of that, though I suppose if we don't force a decision then that would be a stronger variant of opt-out (or opt-in, depending on the default). I don't think anyone is suggesting opt-in as the default behaviour 👍
If I'm understanding correctly, your main concern here is that opting out is too easy/likely when confronted with the current UX? I think that's workable, but I do think we should prominently mention application telemetry in the application as part of informing users.1 If that seems reasonable, would it be sufficient if there are two dialogs instead? Something like:
Footnotes
|
I understand your point, and I agree now that if we show the dialog on startup, we're making it too easy for people to opt out. |
I think we do, but only for users who haven't already opted out (since they're not affected by the change).
Fair enough. I'd encourage that persistence, just so there's definitely enough time to read it (lots can be happening during startup otherwise, including physical vehicle setup).
Agreed that "Data Privacy" seems like the wrong title. "Shared Data" is better, but perhaps ambiguous about why there is such a thing / what it would be for (maybe users would think it's public, or be concerned their actual operating data is being shared)? I think "App Telemetry" is maybe clearer, but hopefully we can come up with something better 🤷♂️ Likely out of scope for this PR, but I feel like this kind of configuration could even be rolled into a broader "Cockpit Improvements" page/interface, that lists out the release history and change log (including for available updates?), provides configuration for app telemetry, and adds some more direct means of generating user feedback suggestions and the like? Seems well-aligned with other things we've discussed doing, and positions the feature well with its actual intent :-) |
|
@ES-Alexander
|
0df96ba to
67024d7
Compare
|
I've pushed a new version, that is more inline with what we have been discussed here. |
There was a problem hiding this comment.
I've pushed a new version, that is more inline with what we have been discussed here. The PR description was also updated with new video and topics
I believe it improved a lot, but we need a dedicated discussion to settle.
Some things to change:
.
- Right now it looks like the "descriptions" (e.g.: CPU/GPU type, available memory, ...) are an example, when they are actually exactly what is going to be sent. I believe we can improve on that by moving it to a row below the "On: ..." sentence with something like "Includes exactly: xxx". This way the users has a better chance of not wondering what else besides the examples is sent.
- "Locale" is a term that non-developers will mostly sure not know what it is and assume its their GPS position. We should be clear that it's the system language.
- MAVLink ID is not a thing. We should mention "Autopilot firmware type" instead.
- "Runtime" sounds like "everything that you do during the session". We should rename it to something like "Usage time".
- "Recording activity" is too generic and sounds like we have access to the recorded data. It should be clear what we are actually sending, like "Recording time".
- The tier system is not going to work. If the user doesn't want to share error data for example, they won't share vehicle type? Doesn't sound right and will force people even more to just select "no telemetry" so they don't have to think about it.
- The "Show example data" should be renamed to something like "Show exactly what is going to be shared". This gives more confidence to the user. "Example data" sounds like "it's going to be more or less like that".
- App version and running time should not be optional. We already use this data and it's the bare minimum for us to have an idea on how the user-base is growing (or not).
- When a user disables all or some telemetry, we should still send the minimum proposed and send in the package the telemetry choices of the user, so it becomes more clear how much are we losing.
I've made this list with what I consider to be the bare minimum changes, but honestly, my view is that this should not exist.
We should just not allow internal telemetry blocking and that's it. We are not sending any kind of personal information, all of those are completely inoffensive info and we don't sell user data nor anything like that.
If the user really wants to disable telemetry for some personal reason or view of the world, they should just use a traffic/ad-blocker.
In my personal view, this kind of telemetry policy is why many open source projects struggle to go in the right direction.
67024d7 to
ca5f57e
Compare
6b2b0fe to
35bd7ad
Compare
35bd7ad to
8a20f96
Compare
8a20f96 to
cedbf57
Compare
rafaellehmkuhl
left a comment
There was a problem hiding this comment.
Tested and it's working.

Screenshare.-.2026-05-08.11_42_03.AM.mp4
Closes #2622