feat(observe): add global and plugin insights tabs - #2681
Conversation
📝 WalkthroughWalkthroughNative observe stats now expose plugin-version adoption metrics from production devices and render them in the observe UI. Localization, seed data, indexing, tests, and a screenshot asset support the feature. Visual-diff routing and configuration reuse are also updated. ChangesNative observe plugin adoption
Visual-diff pipeline updates
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant ObservePage
participant NativeObserveStats
participant Devices
ObservePage->>NativeObserveStats: request observe statistics
NativeObserveStats->>Devices: query production plugin versions
Devices-->>NativeObserveStats: version and device aggregates
NativeObserveStats-->>ObservePage: return pluginVersions
ObservePage->>ObservePage: render adoption table or empty state
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
Comment |
Merging this PR will not alter performance
Comparing Footnotes
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b9ac2520-f520-4f1c-889b-49a625eeb702) |
e7fb498 to
618cba0
Compare
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_10950d01-6363-45d4-9a28-aaec93a8ef79) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (skipped due to usage limit), so automated review is unavailable. Not approving; human review is needed for the observe UI and native stats backend changes. Dalanir and WcaleNieWolny are already assigned as reviewers.
Sent by Cursor Approval Agent: Pull Request Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_6858f265-8c02-434e-b0ac-de461658479a) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (skipped due to usage limit), so automated review is unavailable. Not approving; human review is needed for the observe UI and native stats backend changes. Dalanir and WcaleNieWolny are already assigned as reviewers.
Sent by Cursor Approval Agent: Pull Request Approver External
Visual diff passedVisual changesGenerated at 2026-07-14T14:02:34.205Z. Threshold: 0.1% pixel difference.
Commit: Open |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_af645565-9a2f-4e52-ab8f-6ba7ae67c4b8) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (skipped due to usage limit), so automated review is unavailable. Not approving; human review is needed for the observe UI and native stats backend changes. Dalanir and WcaleNieWolny are already assigned as reviewers.
Sent by Cursor Approval Agent: Pull Request Approver External
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (skipped due to usage limit), so automated review is unavailable. Not approving; human review is needed for the observe UI and native stats backend changes. Dalanir and WcaleNieWolny are already assigned as reviewers.
Sent by Cursor Approval Agent: Pull Request Approver
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_15b9cb61-72fb-4940-b517-844e94df92d8) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_ab966591-b686-4d25-bac2-b759f60c29f5) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_ffde334a-b613-47ac-ae3c-d8f53129ba7d) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_5c899b5e-cbed-476f-ad3f-fbd1fbe6bdf9) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_24fe52c3-43c8-450d-881b-9637a6d370c8) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_94281869-902c-4905-9e5e-2f97eee4f8f9) |
|





Summary
Validation
bun lintbun typecheckbun test:unitbun run buildbunx playwright test --list playwright/e2e/observe-tabs.spec.tsVisual proof
Authenticated CI visual-diff capture using the seeded local fixture.
Note
Medium Risk
Touches a private stats API and adds a DB index, but changes are scoped to Observe with RBAC unchanged and unit/e2e coverage.
Overview
Adds route-backed Observe sub-navigation (Global vs Plugins) using the same secondary-tab pattern as Logs, with Global unchanged for period-scoped native health and Plugins at
/observe/pluginsfor updater plugin version adoption.The Plugins screen loads
view: 'plugins'onPOST /private/native_observe_stats, which returns production device counts byplugin_version(not period-limited). Shared fetching moves intouseNativeObserveStats; the global Observe page now passesdaysonly.Backend adds plugin aggregation SQL,
normalizeNativeObserveView, a partial index ondevices (app_id, plugin_version)for prod non-emulator rows, seed data for e2e, andTabsaria-current/aria-labelfor tests. Visual-diff registers both Observe routes and fixes checkout so the head route list is used for before/after captures.Reviewed by Cursor Bugbot for commit 8b2ecd9. Bugbot is set up for automated code reviews on this repo. Configure here.