Skip to content

fix: preserve billing RUM lifecycle pairing - #15205

Open
dante01yoon wants to merge 2 commits into
mainfrom
fix/billing-rum-lifecycle-pairing
Open

fix: preserve billing RUM lifecycle pairing#15205
dante01yoon wants to merge 2 commits into
mainfrom
fix/billing-rum-lifecycle-pairing

Conversation

@dante01yoon

@dante01yoon dante01yoon commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Improve FE-1391 dashboard accuracy by preserving one canonical lifecycle across workspace billing retries and recording resubscribe latency.

Datadog dashboard: Billing UX — Frontend RUM

Why this is needed

The dashboard treats each billing.<operation>.started action and its terminal succeeded, failed, or timeout action as one lifecycle.

  • Workspace resubscribe terminal events had no duration_ms, so resubscribe was absent from the dashboard's Terminal Latency by Operation widget, which only queries terminal events containing @context.duration_ms.
  • When downgrade-to-personal received REACTIVATION_CONFIRMATION_REQUIRED, the first call emitted terminal failures and the confirmed retry emitted a second set of started events. The backend response is an intermediate consent state, not a completed attempt, so this inflated started/failure counts and broke lifecycle pairing.

Changes

  • Add duration_ms to workspace resubscribe terminal events from both settings and pricing entry points.
  • Retain downgrade telemetry state through the backend-requested reactivation confirmation retry.
  • Suppress terminal failure and duplicate start events for that intermediate confirmation state.
  • Clear retained telemetry state on success, asynchronous operation handoff, or a real terminal failure.
  • Reuse the existing canonical event names and fields. Legacy billing, hosted portal coverage, page-abandonment tracking, and new event contracts remain out of scope.

AS IS / TO BE

Journey AS IS TO BE
Workspace resubscribe Terminal events have no duration; latency widget has no resubscribe samples Terminal events include duration_ms; P50/P95 latency can include resubscribe
Downgrade reactivation retry started → failed, then another started → terminal One started → terminal lifecycle across confirmation and retry

What this satisfies

  • Lifecycle count accuracy: a reactivation retry contributes one started lifecycle and one terminal outcome per operation instead of duplicate starts and a false intermediate failure.
  • Failure-rate accuracy: REACTIVATION_CONFIRMATION_REQUIRED is no longer counted as a billing failure.
  • Latency coverage: workspace resubscribe appears in the dashboard's terminal P50/P95 latency table.
  • Existing dashboard contract: the implementation now matches the dashboard SSOT definition of started → one terminal event without introducing another event family.

This does not make historical events complete; the corrected telemetry appears after the frontend revision is deployed and users execute these journeys.

Review Focus

  • A backend-requested reactivation retry produces one ordered lifecycle per operation: started then succeeded/failed.
  • Non-confirmation failures still terminate and clear the active telemetry attempt.
  • Workspace resubscribe terminal events include duration without changing legacy behavior.

Validation

  • pnpm test:unit src/platform/workspace/composables/useDowngradeToPersonal.test.ts src/platform/workspace/composables/useResubscribe.test.ts src/platform/workspace/composables/useSubscriptionCheckout.test.ts (151 tests)
  • pnpm typecheck
  • pnpm lint:unstaged
  • Push hook: pnpm knip --cache

Screenshots (if applicable)

Not applicable: this is a telemetry-only change with no visual UI change. The affected output is the Datadog dashboard.

@dante01yoon
dante01yoon requested a review from a team August 13, 2026 19:10
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Aug 13, 2026
@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown

🎭 Playwright: ✅ 1822 passed, 0 failed · 2 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1801 / ❌ 0 / ⚠️ 2 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 18 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • New-test walkthrough (chromium, recorded video): View Report

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/17/2026, 11:31:06 PM UTC

Links

📦 Bundle: 8.85 MB gzip 🔴 +224 B

Details

Summary

  • Raw size: 37.4 MB baseline 37.4 MB — 🔴 +1.3 kB
  • Gzip: 8.85 MB baseline 8.85 MB — 🔴 +224 B
  • Brotli: 6.19 MB baseline 6.19 MB — 🔴 +129 B
  • Bundles: 438 current • 438 baseline • 145 added / 145 removed

Category Glance
Utilities & Hooks 🔴 +891 B (551 kB) · Other 🔴 +408 B (14.2 MB) · Vendor & Third-Party ⚪ 0 B (16.8 MB) · Data & Services ⚪ 0 B (3.52 MB) · Graph Workspace ⚪ 0 B (1.37 MB) · Panels & Settings ⚪ 0 B (566 kB) · + 5 more

App Entry Points — 3.71 kB (baseline 3.71 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Cp-xfDy1.js (new) 3.71 kB 🔴 +3.71 kB 🔴 +1.86 kB 🔴 +1.6 kB
assets/index-CulOoow4.js (removed) 3.71 kB 🟢 -3.71 kB 🟢 -1.86 kB 🟢 -1.62 kB

Status: 1 added / 1 removed

Graph Workspace — 1.37 MB (baseline 1.37 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BUKSFY6F.js (new) 1.36 MB 🔴 +1.36 MB 🔴 +297 kB 🔴 +223 kB
assets/GraphView-yjy-S3N7.js (removed) 1.36 MB 🟢 -1.36 MB 🟢 -297 kB 🟢 -223 kB
assets/WidgetCompositor-BysKZhqg.js (removed) 8.17 kB 🟢 -8.17 kB 🟢 -2.76 kB 🟢 -2.46 kB
assets/WidgetCompositor-BZO1_58W.js (new) 8.17 kB 🔴 +8.17 kB 🔴 +2.76 kB 🔴 +2.45 kB

Status: 2 added / 2 removed / 1 unchanged

Views & Navigation — 124 kB (baseline 124 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BY2HyRiT.js (new) 25 kB 🔴 +25 kB 🔴 +6.24 kB 🔴 +5.52 kB
assets/CloudSurveyView-DV6JNz3s.js (removed) 25 kB 🟢 -25 kB 🟢 -6.24 kB 🟢 -5.52 kB
assets/CloudLayoutView-Be2Xcmxl.js (new) 21.8 kB 🔴 +21.8 kB 🔴 +6.57 kB 🔴 +5.75 kB
assets/CloudLayoutView-C6x1XSsv.js (removed) 21.8 kB 🟢 -21.8 kB 🟢 -6.57 kB 🟢 -5.75 kB
assets/UserCheckView-BQ3fpDeO.js (removed) 8.75 kB 🟢 -8.75 kB 🟢 -2.19 kB 🟢 -1.9 kB
assets/UserCheckView-CCe1m43P.js (new) 8.75 kB 🔴 +8.75 kB 🔴 +2.19 kB 🔴 +1.9 kB
assets/CloudLoginView-DNE0iDIa.js (new) 8.74 kB 🔴 +8.74 kB 🔴 +2.55 kB 🔴 +2.27 kB
assets/CloudLoginView-DZFf0QHE.js (removed) 8.74 kB 🟢 -8.74 kB 🟢 -2.55 kB 🟢 -2.26 kB
assets/useCloudAuthPage-BoJtNDAJ.js (removed) 7.08 kB 🟢 -7.08 kB 🟢 -2.51 kB 🟢 -2.2 kB
assets/useCloudAuthPage-RLXu75PG.js (new) 7.08 kB 🔴 +7.08 kB 🔴 +2.51 kB 🔴 +2.22 kB
assets/CloudSignupView-D_OTHyc3.js (new) 6.96 kB 🔴 +6.96 kB 🔴 +2.28 kB 🔴 +2 kB
assets/CloudSignupView-hGPgDifq.js (removed) 6.96 kB 🟢 -6.96 kB 🟢 -2.27 kB 🟢 -1.99 kB
assets/WidgetTextPreview-cCq9motJ.js (removed) 6.07 kB 🟢 -6.07 kB 🟢 -2.13 kB 🟢 -1.9 kB
assets/WidgetTextPreview-DJjwnB34.js (new) 6.07 kB 🔴 +6.07 kB 🔴 +2.13 kB 🔴 +1.9 kB
assets/CloudSubscriptionRedirectView-BEyJRftp.js (removed) 6.05 kB 🟢 -6.05 kB 🟢 -2.25 kB 🟢 -1.96 kB
assets/CloudSubscriptionRedirectView-D20aGu2u.js (new) 6.05 kB 🔴 +6.05 kB 🔴 +2.25 kB 🔴 +1.96 kB
assets/UserSelectView-BnwjRRUN.js (new) 5.49 kB 🔴 +5.49 kB 🔴 +1.96 kB 🔴 +1.72 kB
assets/UserSelectView-CdJWqyDr.js (removed) 5.49 kB 🟢 -5.49 kB 🟢 -1.96 kB 🟢 -1.72 kB
assets/CloudForgotPasswordView-Bua1O1KK.js (removed) 4.97 kB 🟢 -4.97 kB 🟢 -1.72 kB 🟢 -1.49 kB
assets/CloudForgotPasswordView-dnuKAoOb.js (new) 4.97 kB 🔴 +4.97 kB 🔴 +1.72 kB 🔴 +1.49 kB
assets/CloudAuthTimeoutView-BZYScNOO.js (removed) 4.43 kB 🟢 -4.43 kB 🟢 -1.54 kB 🟢 -1.34 kB
assets/CloudAuthTimeoutView-DUC6WnM4.js (new) 4.43 kB 🔴 +4.43 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/OAuthLayoutView-BPfMdxNK.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -703 B 🟢 -586 B
assets/OAuthLayoutView-CM-7dp2q.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +700 B 🔴 +596 B
assets/WidgetTextPreview-BpeRbN6-.js (new) 131 B 🔴 +131 B 🔴 +100 B 🔴 +91 B
assets/WidgetTextPreview-BuU_qzXE.js (removed) 131 B 🟢 -131 B 🟢 -100 B 🟢 -89 B

Status: 13 added / 13 removed / 4 unchanged

Panels & Settings — 566 kB (baseline 566 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-C2We41Gl.js (removed) 49.4 kB 🟢 -49.4 kB 🟢 -9.95 kB 🟢 -8.8 kB
assets/KeybindingPanel-sgw-QsAj.js (new) 49.4 kB 🔴 +49.4 kB 🔴 +9.95 kB 🔴 +8.8 kB
assets/SecretsPanel-CCyWxAbb.js (new) 33.7 kB 🔴 +33.7 kB 🔴 +7.87 kB 🔴 +6.9 kB
assets/SecretsPanel-CTzsGAHu.js (removed) 33.7 kB 🟢 -33.7 kB 🟢 -7.87 kB 🟢 -6.92 kB
assets/CreditsPanel-BpjJQ7ft.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.21 kB 🟢 -2.81 kB
assets/CreditsPanel-DJ7iaJCq.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.21 kB 🔴 +2.81 kB
assets/AboutPanel-D7yWkBEF.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.03 kB 🔴 +2.72 kB
assets/AboutPanel-DYPKyJWo.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.03 kB 🟢 -2.72 kB
assets/ExtensionPanel-D8EBuQ55.js (new) 9.19 kB 🔴 +9.19 kB 🔴 +2.51 kB 🔴 +2.22 kB
assets/ExtensionPanel-DFYsu_AJ.js (removed) 9.19 kB 🟢 -9.19 kB 🟢 -2.51 kB 🟢 -2.22 kB
assets/ServerConfigPanel-0OEi-ylL.js (removed) 6.09 kB 🟢 -6.09 kB 🟢 -1.94 kB 🟢 -1.72 kB
assets/ServerConfigPanel-UQDU96Eu.js (new) 6.09 kB 🔴 +6.09 kB 🔴 +1.94 kB 🔴 +1.72 kB
assets/UserPanel-BMXj3L0s.js (removed) 5.73 kB 🟢 -5.73 kB 🟢 -1.78 kB 🟢 -1.54 kB
assets/UserPanel-DXMuJnLB.js (new) 5.73 kB 🔴 +5.73 kB 🔴 +1.78 kB 🔴 +1.54 kB
assets/refreshRemoteConfig-B69WsyfN.js (removed) 4.24 kB 🟢 -4.24 kB 🟢 -1.51 kB 🟢 -1.34 kB
assets/refreshRemoteConfig-Dg-VUaXS.js (new) 4.24 kB 🔴 +4.24 kB 🔴 +1.51 kB 🔴 +1.33 kB
assets/cloudRemoteConfig-CO0yHpdd.js (removed) 951 B 🟢 -951 B 🟢 -514 B 🟢 -422 B
assets/cloudRemoteConfig-VlhY_7Vy.js (new) 951 B 🔴 +951 B 🔴 +514 B 🔴 +423 B
assets/refreshRemoteConfig-D2LEzFVP.js (new) 110 B 🔴 +110 B 🔴 +89 B 🔴 +86 B
assets/refreshRemoteConfig-DBpuA66Z.js (removed) 110 B 🟢 -110 B 🟢 -89 B 🟢 -86 B

Status: 10 added / 10 removed / 16 unchanged

User & Accounts — 27.7 kB (baseline 27.7 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SignUpForm-BksPe5Jb.js (removed) 13.3 kB 🟢 -13.3 kB 🟢 -4.52 kB 🟢 -3.93 kB
assets/SignUpForm-CXOzEaWa.js (new) 13.3 kB 🔴 +13.3 kB 🔴 +4.52 kB 🔴 +3.93 kB
assets/auth-BFWox2Nj.js (removed) 3.71 kB 🟢 -3.71 kB 🟢 -1.29 kB 🟢 -1.1 kB
assets/auth-CMrClw5Z.js (new) 3.71 kB 🔴 +3.71 kB 🔴 +1.29 kB 🔴 +1.1 kB
assets/UpdatePasswordContent-BzL-QoIc.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +842 B 🔴 +734 B
assets/UpdatePasswordContent-XFnC32oX.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -841 B 🟢 -735 B
assets/authStore-Cr3i7ftF.js (removed) 128 B 🟢 -128 B 🟢 -104 B 🟢 -105 B
assets/authStore-pYuCG0Ep.js (new) 128 B 🔴 +128 B 🔴 +104 B 🔴 +104 B
assets/workspaceAuthStore-CwumQcF3.js (removed) 108 B 🟢 -108 B 🟢 -99 B 🟢 -106 B
assets/workspaceAuthStore-D3mBhp_p.js (new) 108 B 🔴 +108 B 🔴 +99 B 🔴 +108 B
assets/auth-9extWcD2.js (removed) 105 B 🟢 -105 B 🟢 -96 B 🟢 -87 B
assets/auth-BQbZLb3m.js (new) 105 B 🔴 +105 B 🔴 +96 B 🔴 +86 B

Status: 6 added / 6 removed / 5 unchanged

Editors & Dialogs — 125 kB (baseline 125 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-C0IST6UT.js (new) 90.1 kB 🔴 +90.1 kB 🔴 +19.3 kB 🔴 +16.5 kB
assets/ComfyHubPublishDialog-C2ESeQmG.js (removed) 90.1 kB 🟢 -90.1 kB 🟢 -19.3 kB 🟢 -16.5 kB
assets/useShareDialog-D9n2Ap6i.js (removed) 23.9 kB 🟢 -23.9 kB 🟢 -5.69 kB 🟢 -5.04 kB
assets/useShareDialog-DniCvCqv.js (new) 23.9 kB 🔴 +23.9 kB 🔴 +5.7 kB 🔴 +5.04 kB
assets/feedbackDialog-CWtPFy2K.js (removed) 4.45 kB 🟢 -4.45 kB 🟢 -1.87 kB 🟢 -1.59 kB
assets/feedbackDialog-Uv8ECu3k.js (new) 4.45 kB 🔴 +4.45 kB 🔴 +1.87 kB 🔴 +1.59 kB
assets/useRangeEditor-Cr20Cjtu.js (new) 3.29 kB 🔴 +3.29 kB 🔴 +1.14 kB 🔴 +1.03 kB
assets/useRangeEditor-PXjE4V2p.js (removed) 3.29 kB 🟢 -3.29 kB 🟢 -1.14 kB 🟢 -1.03 kB
assets/useLayerEditor-B1KqVU_J.js (removed) 1.01 kB 🟢 -1.01 kB 🟢 -490 B 🟢 -408 B
assets/useLayerEditor-B8wl-XJl.js (new) 1.01 kB 🔴 +1.01 kB 🔴 +492 B 🔴 +409 B
assets/ComfyHubPublishDialog-Bdqict40.js (removed) 143 B 🟢 -143 B 🟢 -105 B 🟢 -89 B
assets/ComfyHubPublishDialog-BpIdS_fo.js (new) 143 B 🔴 +143 B 🔴 +105 B 🔴 +89 B
assets/useSubscriptionDialog-DUjaxWK5.js (new) 108 B 🔴 +108 B 🔴 +102 B 🔴 +96 B
assets/useSubscriptionDialog-JHhkfGzR.js (removed) 108 B 🟢 -108 B 🟢 -102 B 🟢 -91 B

Status: 7 added / 7 removed / 1 unchanged

UI Components — 67.1 kB (baseline 67.1 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-C3QCbhiO.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.97 kB 🟢 -3.53 kB
assets/ComfyQueueButton-CVsHsWJr.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.97 kB 🔴 +3.52 kB
assets/useTerminalTabs-BHB8Yuzi.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.69 kB 🟢 -3.27 kB
assets/useTerminalTabs-MFKq6Vqd.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.69 kB 🔴 +3.27 kB
assets/InviteMembersForm-BfMgZExI.js (removed) 8.23 kB 🟢 -8.23 kB 🟢 -2.74 kB 🟢 -2.43 kB
assets/InviteMembersForm-C7V96uHm.js (new) 8.23 kB 🔴 +8.23 kB 🔴 +2.74 kB 🔴 +2.43 kB
assets/SubscribeButton-DzJVjyke.js (new) 2.15 kB 🔴 +2.15 kB 🔴 +969 B 🔴 +849 B
assets/SubscribeButton-onqaUcR3.js (removed) 2.15 kB 🟢 -2.15 kB 🟢 -968 B 🟢 -848 B
assets/cloudFeedbackTopbarButton-CBEGa-fO.js (removed) 705 B 🟢 -705 B 🟢 -421 B 🟢 -360 B
assets/cloudFeedbackTopbarButton-DnFsz5rW.js (new) 705 B 🔴 +705 B 🔴 +420 B 🔴 +361 B
assets/ComfyQueueButton-CjRhjC2t.js (removed) 128 B 🟢 -128 B 🟢 -99 B 🟢 -89 B
assets/ComfyQueueButton-CQAm97Nj.js (new) 128 B 🔴 +128 B 🔴 +99 B 🔴 +92 B

Status: 6 added / 6 removed / 8 unchanged

Data & Services — 3.52 MB (baseline 3.52 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/settingStore-JUGiFinM.js (new) 3.16 MB 🔴 +3.16 MB 🔴 +740 kB 🔴 +556 kB
assets/settingStore-pOoTnsC_.js (removed) 3.16 MB 🟢 -3.16 MB 🟢 -740 kB 🟢 -556 kB
assets/api-COMMLwm1.js (new) 186 kB 🔴 +186 kB 🔴 +39.8 kB 🔴 +33.4 kB
assets/api-Q7hmgNwS.js (removed) 186 kB 🟢 -186 kB 🟢 -39.8 kB 🟢 -33.4 kB
assets/load3dService-DHXrjLL0.js (new) 132 kB 🔴 +132 kB 🔴 +29.3 kB 🔴 +24.6 kB
assets/load3dService-YIAhSnQ8.js (removed) 132 kB 🟢 -132 kB 🟢 -29.3 kB 🟢 -24.6 kB
assets/workflowShareService-Bt5ESu93.js (new) 16.5 kB 🔴 +16.5 kB 🔴 +4.91 kB 🔴 +4.35 kB
assets/workflowShareService-vveOvl3f.js (removed) 16.5 kB 🟢 -16.5 kB 🟢 -4.91 kB 🟢 -4.34 kB
assets/keybindingService-Atvpr2se.js (removed) 6.89 kB 🟢 -6.89 kB 🟢 -1.73 kB 🟢 -1.49 kB
assets/keybindingService-BMGrmkta.js (new) 6.89 kB 🔴 +6.89 kB 🔴 +1.73 kB 🔴 +1.49 kB
assets/releaseStore-D5fT1TqN.js (new) 6.72 kB 🔴 +6.72 kB 🔴 +2.03 kB 🔴 +1.77 kB
assets/releaseStore-WgPZk0Or.js (removed) 6.72 kB 🟢 -6.72 kB 🟢 -2.03 kB 🟢 -1.77 kB
assets/systemStatsStore-H9VxIRaM.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.74 kB 🔴 +1.47 kB
assets/systemStatsStore-rJqqaVpT.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.74 kB 🟢 -1.47 kB
assets/userStore-CUIREld-.js (new) 2.38 kB 🔴 +2.38 kB 🔴 +897 B 🔴 +796 B
assets/userStore-DAib1BT8.js (removed) 2.38 kB 🟢 -2.38 kB 🟢 -898 B 🟢 -796 B
assets/audioService-D40Hc7bn.js (new) 1.71 kB 🔴 +1.71 kB 🔴 +831 B 🔴 +733 B
assets/audioService-DRQy9s0b.js (removed) 1.71 kB 🟢 -1.71 kB 🟢 -830 B 🟢 -732 B
assets/dialogService-CgZWQ87n.js (removed) 98 B 🟢 -98 B 🟢 -97 B 🟢 -80 B
assets/dialogService-RTePFImO.js (new) 98 B 🔴 +98 B 🔴 +97 B 🔴 +84 B
assets/releaseStore-DUzZYYLF.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -90 B
assets/releaseStore-MtDdnLcK.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +89 B
assets/settingStore-CY3EQfCZ.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +88 B
assets/settingStore-D6KtmHNj.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -81 B
assets/assetsStore-B_a4n7XI.js (removed) 94 B 🟢 -94 B 🟢 -92 B 🟢 -82 B
assets/assetsStore-DC5z8T51.js (new) 94 B 🔴 +94 B 🔴 +92 B 🔴 +85 B
assets/api-B1y_2QX0.js (removed) 62 B 🟢 -62 B 🟢 -74 B 🟢 -66 B
assets/api-TD7xMAit.js (new) 62 B 🔴 +62 B 🔴 +74 B 🔴 +66 B

Status: 14 added / 14 removed / 3 unchanged

Utilities & Hooks — 551 kB (baseline 550 kB) • 🔴 +891 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-CFczSVDB.js (new) 236 kB 🔴 +236 kB 🔴 +53 kB 🔴 +43.2 kB
assets/useConflictDetection-CgPSJaz5.js (removed) 236 kB 🟢 -236 kB 🟢 -53 kB 🟢 -43.2 kB
assets/useLayerEditorSession-C9LesQWz.js (removed) 158 kB 🟢 -158 kB 🟢 -40.8 kB 🟢 -34.3 kB
assets/useLayerEditorSession-DzRBPsOH.js (new) 158 kB 🔴 +158 kB 🔴 +40.8 kB 🔴 +34.3 kB
assets/useLoad3d-_hCFArZs.js (new) 25.8 kB 🔴 +25.8 kB 🔴 +5.8 kB 🔴 +5.15 kB
assets/useLoad3d-7w8sUtTd.js (removed) 25.8 kB 🟢 -25.8 kB 🟢 -5.8 kB 🟢 -5.13 kB
assets/useLoad3dViewer-BbRoaN4s.js (removed) 21.2 kB 🟢 -21.2 kB 🟢 -4.98 kB 🟢 -4.36 kB
assets/useLoad3dViewer-JjtFcEVG.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +4.98 kB 🔴 +4.38 kB
assets/useImageCrop-COmIhw4N.js (new) 14.9 kB 🔴 +14.9 kB 🔴 +3.42 kB 🔴 +2.98 kB
assets/useImageCrop-DKFGwUjp.js (removed) 14.9 kB 🟢 -14.9 kB 🟢 -3.42 kB 🟢 -2.98 kB
assets/useDowngradeToPersonal-1-JTaE-Q.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +2.81 kB 🔴 +2.41 kB
assets/useDowngradeToPersonal-CCYmVYUe.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -2.73 kB 🟢 -2.35 kB
assets/useFeatureFlags-BwAZUJ-i.js (new) 7.32 kB 🔴 +7.32 kB 🔴 +2.06 kB 🔴 +1.73 kB
assets/useFeatureFlags-CKtPaW9V.js (removed) 7.32 kB 🟢 -7.32 kB 🟢 -2.06 kB 🟢 -1.76 kB
assets/useCompositorLayers-DAkCnu-l.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +897 B 🔴 +805 B
assets/useCompositorLayers-DgMx1ViI.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -896 B 🟢 -804 B
assets/assetPreviewUtil-CdD8Wihl.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -966 B 🟢 -850 B
assets/assetPreviewUtil-CZlcUIfE.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +967 B 🔴 +845 B
assets/useUpstreamValue-Cc7ExZTS.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -757 B 🟢 -684 B
assets/useUpstreamValue-D0CJSuk7.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +758 B 🔴 +685 B
assets/useWorkspaceTierLabel-0rdVUJL9.js (new) 1.93 kB 🔴 +1.93 kB 🔴 +814 B 🔴 +698 B
assets/useWorkspaceTierLabel-kM08FwJD.js (removed) 1.93 kB 🟢 -1.93 kB 🟢 -812 B 🟢 -697 B
assets/subscriptionCheckoutUtil-DOwOBMQd.js (new) 877 B 🔴 +877 B 🔴 +520 B 🔴 +430 B
assets/subscriptionCheckoutUtil-OQjelesV.js (removed) 877 B 🟢 -877 B 🟢 -520 B 🟢 -434 B
assets/useSessionCookie-BXaOXDvV.js (new) 652 B 🔴 +652 B 🔴 +336 B 🔴 +292 B
assets/useSessionCookie-Z5c5yNwS.js (removed) 652 B 🟢 -652 B 🟢 -334 B 🟢 -292 B
assets/useLoad3d-BAvoO6y_.js (removed) 311 B 🟢 -311 B 🟢 -163 B 🟢 -147 B
assets/useLoad3d-eE7fVV7z.js (new) 311 B 🔴 +311 B 🔴 +165 B 🔴 +147 B
assets/useSessionCookie-DxOCa_wG.js (removed) 101 B 🟢 -101 B 🟢 -86 B 🟢 -84 B
assets/useSessionCookie-Vl16MLc5.js (new) 101 B 🔴 +101 B 🔴 +86 B 🔴 +82 B
assets/useFeatureFlags-BmeXChD6.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -83 B
assets/useFeatureFlags-CdagRa9_.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +81 B
assets/useLoad3dViewer-BS9gmIQB.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +84 B
assets/useLoad3dViewer-CPGevo_S.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -90 B
assets/useCurrentUser-BWJ6868h.js (new) 94 B 🔴 +94 B 🔴 +95 B 🔴 +93 B
assets/useCurrentUser-CfmBL7_n.js (removed) 94 B 🟢 -94 B 🟢 -95 B 🟢 -80 B

Status: 18 added / 18 removed / 20 unchanged

Vendor & Third-Party — 16.8 MB (baseline 16.8 MB) • ⚪ 0 B

External libraries and shared vendor chunks

Status: 18 unchanged

Other — 14.2 MB (baseline 14.2 MB) • 🔴 +408 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BpmHRFQn.js (removed) 115 kB 🟢 -115 kB 🟢 -29.7 kB 🟢 -25.1 kB
assets/core-D4Dqhc0T.js (new) 115 kB 🔴 +115 kB 🔴 +29.7 kB 🔴 +25.1 kB
assets/WidgetSelect-8dcm8L88.js (new) 88.8 kB 🔴 +88.8 kB 🔴 +20.1 kB 🔴 +17.2 kB
assets/WidgetSelect-BLEGI2Fa.js (removed) 88.8 kB 🟢 -88.8 kB 🟢 -20.1 kB 🟢 -17.2 kB
assets/SubscriptionPanelContentWorkspace-9b5Ud3c4.js (new) 81.5 kB 🔴 +81.5 kB 🔴 +16.1 kB 🔴 +13.9 kB
assets/SubscriptionPanelContentWorkspace-CFxJM6xk.js (removed) 81.3 kB 🟢 -81.3 kB 🟢 -16.1 kB 🟢 -13.9 kB
assets/Load3D-bSRZyDXD.js (new) 73.3 kB 🔴 +73.3 kB 🔴 +12.1 kB 🔴 +10.3 kB
assets/Load3D-H-SEnN6r.js (removed) 73.3 kB 🟢 -73.3 kB 🟢 -12.1 kB 🟢 -10.3 kB
assets/WidgetVideoEdit-CHQtDPqo.js (removed) 67.5 kB 🟢 -67.5 kB 🟢 -15.7 kB 🟢 -13.9 kB
assets/WidgetVideoEdit-Cq875idf.js (new) 67.5 kB 🔴 +67.5 kB 🔴 +15.7 kB 🔴 +13.9 kB
assets/SubscriptionTransitionPreviewWorkspace-DfMLifpp.js (new) 66.8 kB 🔴 +66.8 kB 🔴 +13.5 kB 🔴 +11.7 kB
assets/SubscriptionTransitionPreviewWorkspace-B3Diks6y.js (removed) 66.6 kB 🟢 -66.6 kB 🟢 -13.4 kB 🟢 -11.7 kB
assets/WorkspaceSettingsPanelContent-BmKeK-QU.js (removed) 58.2 kB 🟢 -58.2 kB 🟢 -12.4 kB 🟢 -10.8 kB
assets/WorkspaceSettingsPanelContent-BrPp_rsy.js (new) 58.2 kB 🔴 +58.2 kB 🔴 +12.4 kB 🔴 +10.8 kB
assets/Preview3d-boZes_-D.js (new) 50.9 kB 🔴 +50.9 kB 🔴 +8.32 kB 🔴 +7.25 kB
assets/Preview3d-C6gpx9H6.js (removed) 50.9 kB 🟢 -50.9 kB 🟢 -8.32 kB 🟢 -7.25 kB
assets/main-BziIBOzh.js (removed) 45.3 kB 🟢 -45.3 kB 🟢 -13.2 kB 🟢 -11.4 kB
assets/main-FhVN2pk_.js (new) 45.3 kB 🔴 +45.3 kB 🔴 +13.2 kB 🔴 +11.4 kB
assets/SubscriptionRequiredDialogContentUnified-DWleEkj_.js (removed) 42.7 kB 🟢 -42.7 kB 🟢 -9.39 kB 🟢 -8.18 kB
assets/SubscriptionRequiredDialogContentUnified-wQlmLzyY.js (new) 42.7 kB 🔴 +42.7 kB 🔴 +9.39 kB 🔴 +8.18 kB
assets/LayerEditorContent-DBMu3zVl.js (new) 42.5 kB 🔴 +42.5 kB 🔴 +9.62 kB 🔴 +8.43 kB
assets/LayerEditorContent-Uknyid_k.js (removed) 42.5 kB 🟢 -42.5 kB 🟢 -9.62 kB 🟢 -8.44 kB
assets/WidgetBoundingBoxes-4X0k0_Kf.js (removed) 33.7 kB 🟢 -33.7 kB 🟢 -9.16 kB 🟢 -8.13 kB
assets/WidgetBoundingBoxes-DJ5sge9z.js (new) 33.7 kB 🔴 +33.7 kB 🔴 +9.16 kB 🔴 +8.13 kB
assets/WidgetPainter-Fg0Li7ER.js (removed) 32.6 kB 🟢 -32.6 kB 🟢 -7.87 kB 🟢 -6.97 kB
assets/WidgetPainter-iBqKA1Bu.js (new) 32.6 kB 🔴 +32.6 kB 🔴 +7.88 kB 🔴 +6.97 kB
assets/Load3dViewerContent-6HR1ojJQ.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +6.28 kB 🔴 +5.45 kB
assets/Load3dViewerContent-D4BrNE7t.js (removed) 30.8 kB 🟢 -30.8 kB 🟢 -6.28 kB 🟢 -5.45 kB
assets/SubscriptionRequiredDialogContent-BbP7tNQE.js (new) 26.9 kB 🔴 +26.9 kB 🔴 +6.36 kB 🔴 +5.59 kB
assets/SubscriptionRequiredDialogContent-C96NF7w2.js (removed) 26.9 kB 🟢 -26.9 kB 🟢 -6.35 kB 🟢 -5.59 kB
assets/SubscriptionRequiredDialogContentWorkspace-C06icbKA.js (new) 25.1 kB 🔴 +25.1 kB 🔴 +5.81 kB 🔴 +5.12 kB
assets/SubscriptionRequiredDialogContentWorkspace-Wl9Awzk6.js (removed) 25.1 kB 🟢 -25.1 kB 🟢 -5.81 kB 🟢 -5.11 kB
assets/CreditsTile-BnqN5Aa4.js (new) 24.9 kB 🔴 +24.9 kB 🔴 +6.65 kB 🔴 +5.83 kB
assets/CreditsTile-DmXSKHU2.js (removed) 24.9 kB 🟢 -24.9 kB 🟢 -6.65 kB 🟢 -5.83 kB
assets/load3d-aiDQUCuY.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.4 kB 🟢 -4.68 kB
assets/load3d-BjuTit-O.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.41 kB 🔴 +4.68 kB
assets/CurrentUserPopoverWorkspace-CcyUGqSd.js (removed) 21.8 kB 🟢 -21.8 kB 🟢 -4.94 kB 🟢 -4.4 kB
assets/CurrentUserPopoverWorkspace-DoV9UQxQ.js (new) 21.8 kB 🔴 +21.8 kB 🔴 +4.94 kB 🔴 +4.4 kB
assets/SignInContent-60Xx6PwB.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.18 kB 🟢 -4.53 kB
assets/SignInContent-Detzk3yZ.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.18 kB 🔴 +4.54 kB
assets/WidgetRecordAudio-BIFU8Nk7.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.6 kB 🔴 +4.1 kB
assets/WidgetRecordAudio-BrQse1dE.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.6 kB 🟢 -4.1 kB
assets/WidgetInputNumber-C7Dat4sn.js (new) 13.9 kB 🔴 +13.9 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/WidgetInputNumber-CHalCwY7.js (removed) 13.9 kB 🟢 -13.9 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/WidgetRange-DqcoS7vO.js (removed) 13.7 kB 🟢 -13.7 kB 🟢 -3.55 kB 🟢 -3.13 kB
assets/WidgetRange-nnQKGkdw.js (new) 13.7 kB 🔴 +13.7 kB 🔴 +3.55 kB 🔴 +3.13 kB
assets/WaveAudioPlayer-C1CtFr3Y.js (new) 12.8 kB 🔴 +12.8 kB 🔴 +3.46 kB 🔴 +3.05 kB
assets/WaveAudioPlayer-RXMpenFT.js (removed) 12.8 kB 🟢 -12.8 kB 🟢 -3.46 kB 🟢 -3.05 kB
assets/WidgetCurve-BsYJ9oFt.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.48 kB 🔴 +3.15 kB
assets/WidgetCurve-D69iI3d_.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.47 kB 🟢 -3.15 kB
assets/TeamWorkspacesDialogContent-BbwVMs7J.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.97 kB 🟢 -2.63 kB
assets/TeamWorkspacesDialogContent-CRtrwHwC.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.97 kB 🔴 +2.63 kB
assets/onboardingCloudRoutes-BP5q6nfE.js (removed) 9.46 kB 🟢 -9.46 kB 🟢 -2.85 kB 🟢 -2.43 kB
assets/onboardingCloudRoutes-emNF2gLu.js (new) 9.46 kB 🔴 +9.46 kB 🔴 +2.84 kB 🔴 +2.42 kB
assets/Load3DConfiguration-BPfvR7rt.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.61 kB 🟢 -2.3 kB
assets/Load3DConfiguration-ByyL0POA.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.61 kB 🔴 +2.3 kB
assets/WidgetImageCrop-B-lngUh4.js (removed) 8.49 kB 🟢 -8.49 kB 🟢 -2.66 kB 🟢 -2.35 kB
assets/WidgetImageCrop-BFgoJ0vf.js (new) 8.49 kB 🔴 +8.49 kB 🔴 +2.66 kB 🔴 +2.35 kB
assets/SetMemberCreditLimitDialogContent-BQeu2YaN.js (new) 8.47 kB 🔴 +8.47 kB 🔴 +2.34 kB 🔴 +2.05 kB
assets/SetMemberCreditLimitDialogContent-D0rFYewC.js (removed) 8.47 kB 🟢 -8.47 kB 🟢 -2.34 kB 🟢 -2.05 kB
assets/nodeTemplates-D8wMGQ4M.js (removed) 8.32 kB 🟢 -8.32 kB 🟢 -2.85 kB 🟢 -2.51 kB
assets/nodeTemplates-Dxtr8BR4.js (new) 8.32 kB 🔴 +8.32 kB 🔴 +2.85 kB 🔴 +2.5 kB
assets/NightlySurveyController-1pHhs7GC.js (new) 7.5 kB 🔴 +7.5 kB 🔴 +2.55 kB 🔴 +2.24 kB
assets/NightlySurveyController-C4wO_um_.js (removed) 7.5 kB 🟢 -7.5 kB 🟢 -2.55 kB 🟢 -2.23 kB
assets/CloudRunButtonWrapper-DVEHEOwP.js (new) 7.29 kB 🔴 +7.29 kB 🔴 +2.29 kB 🔴 +2.01 kB
assets/CloudRunButtonWrapper-DyUl0UoH.js (removed) 7.29 kB 🟢 -7.29 kB 🟢 -2.29 kB 🟢 -2.01 kB
assets/WidgetWithControl-DU3EWqzC.js (removed) 6.48 kB 🟢 -6.48 kB 🟢 -2.64 kB 🟢 -2.35 kB
assets/WidgetWithControl-DVdJLejV.js (new) 6.48 kB 🔴 +6.48 kB 🔴 +2.64 kB 🔴 +2.33 kB
assets/missingModelMetadata-B4wREQIr.js (removed) 6.45 kB 🟢 -6.45 kB 🟢 -2.2 kB 🟢 -1.93 kB
assets/missingModelMetadata-BeNxjHa7.js (new) 6.45 kB 🔴 +6.45 kB 🔴 +2.21 kB 🔴 +1.93 kB
assets/CancelSubscriptionDialogContent-BUU97CVc.js (removed) 5.97 kB 🟢 -5.97 kB 🟢 -1.98 kB 🟢 -1.75 kB
assets/CancelSubscriptionDialogContent-C_ceEVtk.js (new) 5.97 kB 🔴 +5.97 kB 🔴 +1.98 kB 🔴 +1.75 kB
assets/load3dPreviewExtensions-BPEtkh8f.js (removed) 5.88 kB 🟢 -5.88 kB 🟢 -1.81 kB 🟢 -1.6 kB
assets/load3dPreviewExtensions-rJOW80FZ.js (new) 5.88 kB 🔴 +5.88 kB 🔴 +1.81 kB 🔴 +1.6 kB
assets/launchCancellationFlow-CN1EIJyy.js (removed) 5.18 kB 🟢 -5.18 kB 🟢 -1.78 kB 🟢 -1.56 kB
assets/launchCancellationFlow-gndZtBfJ.js (new) 5.18 kB 🔴 +5.18 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/CreateWorkspaceDialogContent-D3vXLg9O.js (new) 5.12 kB 🔴 +5.12 kB 🔴 +1.79 kB 🔴 +1.55 kB
assets/CreateWorkspaceDialogContent-D6AJal7n.js (removed) 5.12 kB 🟢 -5.12 kB 🟢 -1.79 kB 🟢 -1.55 kB
assets/ChangeMemberRoleDialogContent-Dwfl-duO.js (removed) 4.97 kB 🟢 -4.97 kB 🟢 -1.64 kB 🟢 -1.43 kB
assets/ChangeMemberRoleDialogContent-n0gaoQoZ.js (new) 4.97 kB 🔴 +4.97 kB 🔴 +1.64 kB 🔴 +1.43 kB
assets/InviteMemberDialogContent-CLhlkZX0.js (new) 4.96 kB 🔴 +4.96 kB 🔴 +1.64 kB 🔴 +1.43 kB
assets/InviteMemberDialogContent-IqP04Wo5.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.64 kB 🟢 -1.43 kB
assets/EditWorkspaceDialogContent-BQjWFYEQ.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.76 kB 🔴 +1.53 kB
assets/EditWorkspaceDialogContent-CY8kOoU-.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.76 kB 🟢 -1.52 kB
assets/WidgetTextarea-BGJoj-fR.js (removed) 4.83 kB 🟢 -4.83 kB 🟢 -1.88 kB 🟢 -1.65 kB
assets/WidgetTextarea-DOGZLx_K.js (new) 4.83 kB 🔴 +4.83 kB 🔴 +1.88 kB 🔴 +1.64 kB
assets/saveMesh-CVXjwl0n.js (removed) 4.76 kB 🟢 -4.76 kB 🟢 -1.52 kB 🟢 -1.34 kB
assets/saveMesh-lU3bxPt6.js (new) 4.76 kB 🔴 +4.76 kB 🔴 +1.52 kB 🔴 +1.34 kB
assets/WorkspacePanelContent-a5n4gpo9.js (new) 4.74 kB 🔴 +4.74 kB 🔴 +1.63 kB 🔴 +1.44 kB
assets/WorkspacePanelContent-Bxew2_ng.js (removed) 4.74 kB 🟢 -4.74 kB 🟢 -1.62 kB 🟢 -1.44 kB
assets/ValueControlPopover-CNLCdwy3.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.55 kB 🟢 -1.38 kB
assets/ValueControlPopover-DUy6aAzS.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.55 kB 🔴 +1.38 kB
assets/DeleteWorkspaceDialogContent-2zSoZAur.js (removed) 3.84 kB 🟢 -3.84 kB 🟢 -1.44 kB 🟢 -1.24 kB
assets/DeleteWorkspaceDialogContent-TGGm9zUI.js (new) 3.84 kB 🔴 +3.84 kB 🔴 +1.44 kB 🔴 +1.24 kB
assets/RemoveMemberDialogContent-62oCZTJh.js (new) 3.76 kB 🔴 +3.76 kB 🔴 +1.38 kB 🔴 +1.21 kB
assets/RemoveMemberDialogContent-BJivC9Pz.js (removed) 3.76 kB 🟢 -3.76 kB 🟢 -1.38 kB 🟢 -1.22 kB
assets/RevokeInviteDialogContent-CT0pLSg-.js (removed) 3.67 kB 🟢 -3.67 kB 🟢 -1.39 kB 🟢 -1.21 kB
assets/RevokeInviteDialogContent-uSKUKKhP.js (new) 3.67 kB 🔴 +3.67 kB 🔴 +1.39 kB 🔴 +1.21 kB
assets/LeaveWorkspaceDialogContent-B9SsFTyx.js (removed) 3.67 kB 🟢 -3.67 kB 🟢 -1.38 kB 🟢 -1.19 kB
assets/LeaveWorkspaceDialogContent-E-X29sfR.js (new) 3.67 kB 🔴 +3.67 kB 🔴 +1.39 kB 🔴 +1.19 kB
assets/InviteMemberUpsellDialogContent-2_rd7sss.js (new) 3.47 kB 🔴 +3.47 kB 🔴 +1.24 kB 🔴 +1.09 kB
assets/InviteMemberUpsellDialogContent-fOdHoKjx.js (removed) 3.47 kB 🟢 -3.47 kB 🟢 -1.24 kB 🟢 -1.09 kB
assets/workspaceCheckoutTelemetry-B2hrWJKY.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.52 kB 🟢 -1.32 kB
assets/workspaceCheckoutTelemetry-CFHSDOCP.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.52 kB 🔴 +1.32 kB
assets/GlobalToast-CLRkldx3.js (new) 3.25 kB 🔴 +3.25 kB 🔴 +1.3 kB 🔴 +1.11 kB
assets/GlobalToast-JkutR5Ww.js (removed) 3.25 kB 🟢 -3.25 kB 🟢 -1.3 kB 🟢 -1.11 kB
assets/Media3DTop-Crm8-iWY.js (removed) 3.21 kB 🟢 -3.21 kB 🟢 -1.26 kB 🟢 -1.11 kB
assets/Media3DTop-CSDTE4r7.js (new) 3.21 kB 🔴 +3.21 kB 🔴 +1.26 kB 🔴 +1.11 kB
assets/load3dAdvanced-CBcjKdZj.js (new) 2.82 kB 🔴 +2.82 kB 🔴 +1.09 kB 🔴 +955 B
assets/load3dAdvanced-Q08tPm5H.js (removed) 2.82 kB 🟢 -2.82 kB 🟢 -1.09 kB 🟢 -956 B
assets/SubscribeToRun-BFAaTAmA.js (removed) 2.39 kB 🟢 -2.39 kB 🟢 -1.03 kB 🟢 -908 B
assets/SubscribeToRun-BNGdOxWy.js (new) 2.39 kB 🔴 +2.39 kB 🔴 +1.03 kB 🔴 +909 B
assets/MediaAudioTop-D28wn-ZW.js (new) 1.62 kB 🔴 +1.62 kB 🔴 +807 B 🔴 +666 B
assets/MediaAudioTop-Wzx3qXOX.js (removed) 1.62 kB 🟢 -1.62 kB 🟢 -807 B 🟢 -669 B
assets/cloudSessionCookie-DelfD7D5.js (removed) 933 B 🟢 -933 B 🟢 -432 B 🟢 -377 B
assets/cloudSessionCookie-HnT21aoW.js (new) 933 B 🔴 +933 B 🔴 +432 B 🔴 +379 B
assets/cloudBadges-ButwimK5.js (new) 922 B 🔴 +922 B 🔴 +515 B 🔴 +463 B
assets/cloudBadges-MK8sfkBx.js (removed) 922 B 🟢 -922 B 🟢 -513 B 🟢 -441 B
assets/Load3DAdvanced-DCAbqoDX.js (new) 761 B 🔴 +761 B 🔴 +424 B 🔴 +361 B
assets/Load3DAdvanced-DIhuUG7C.js (removed) 761 B 🟢 -761 B 🟢 -423 B 🟢 -360 B
assets/nightlyBadges-BetOOXt-.js (removed) 411 B 🟢 -411 B 🟢 -272 B 🟢 -268 B
assets/nightlyBadges-CKgTQjJw.js (new) 411 B 🔴 +411 B 🔴 +272 B 🔴 +229 B
assets/Load3dViewerContent-BN2cTckt.js (new) 137 B 🔴 +137 B 🔴 +103 B 🔴 +98 B
assets/Load3dViewerContent-CaYtAihF.js (removed) 137 B 🟢 -137 B 🟢 -103 B 🟢 -96 B
assets/missingModelMetadata-CWbkRBb8.js (new) 125 B 🔴 +125 B 🔴 +103 B 🔴 +103 B
assets/missingModelMetadata-D5TusP4x.js (removed) 125 B 🟢 -125 B 🟢 -103 B 🟢 -110 B
assets/Load3DAdvanced-BWQLqslG.js (new) 122 B 🔴 +122 B 🔴 +97 B 🔴 +87 B
assets/Load3DAdvanced-DTCvWew7.js (removed) 122 B 🟢 -122 B 🟢 -97 B 🟢 -89 B
assets/WidgetLegacy-D6OBoDK8.js (new) 117 B 🔴 +117 B 🔴 +106 B 🔴 +104 B
assets/WidgetLegacy-Dwxg39il.js (removed) 117 B 🟢 -117 B 🟢 -106 B 🟢 -103 B
assets/workflowDraftStoreV2-6tM7y_7m.js (removed) 112 B 🟢 -112 B 🟢 -101 B 🟢 -109 B
assets/workflowDraftStoreV2-BCTY7C1E.js (new) 112 B 🔴 +112 B 🔴 +101 B 🔴 +111 B
assets/Load3D-B2Ub6i4o.js (new) 98 B 🔴 +98 B 🔴 +89 B 🔴 +81 B
assets/Load3D-Bsu1beL8.js (removed) 98 B 🟢 -98 B 🟢 -89 B 🟢 -89 B
assets/changeTracker-BBegIGBK.js (removed) 91 B 🟢 -91 B 🟢 -93 B 🟢 -87 B
assets/changeTracker-C7WX2sgy.js (new) 91 B 🔴 +91 B 🔴 +93 B 🔴 +84 B

Status: 68 added / 68 removed / 217 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.8 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.0 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.2 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.7 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.5 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 78.9 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.0 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.5 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.3 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.1 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 137ms TBT · 78.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.9 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 168.1 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 40ms TBT · 169.6 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.5 MB heap

⚠️ 3 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 514ms 474ms -8% ⚠️ z=2.5
large-graph-pan: task duration 1190ms 1175ms -1% ⚠️ z=2.2
subgraph-idle: task duration 519ms 489ms -6% ⚠️ z=3.8
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.1
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 8ms 8ms +2% z=-3.1
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 9 +0% z=-3.8
canvas-idle: task duration 514ms 474ms -8% ⚠️ z=2.5
canvas-idle: script duration 7ms 6ms -10% z=-8.7
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 57.5 MB 56.8 MB -1%
canvas-idle: DOM nodes -281 -281 +0% z=-238.0
canvas-idle: event listeners -151 -149 -1% z=-33.9
canvas-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.9
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 4ms -4% z=-0.1
canvas-mouse-sweep: style recalc duration 40ms 34ms -14% z=-2.7
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 74 72 -3% z=-2.8
canvas-mouse-sweep: task duration 865ms 852ms -1% z=-0.2
canvas-mouse-sweep: script duration 113ms 110ms -3% z=-4.0
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 58.5 MB 64.0 MB +9%
canvas-mouse-sweep: DOM nodes -283 -284 +0% z=-133.9
canvas-mouse-sweep: event listeners -151 -167 +11% z=-42.1
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=1.4
canvas-zoom-sweep: p95 frame time 17ms 17ms +1%
canvas-zoom-sweep: layout duration 1ms 1ms +1% z=-0.1
canvas-zoom-sweep: style recalc duration 16ms 16ms +0% z=-2.0
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 30 32 +5% z=0.5
canvas-zoom-sweep: task duration 375ms 342ms -9% z=0.6
canvas-zoom-sweep: script duration 10ms 9ms -9% z=-6.2
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 60.0 MB 60.2 MB +0%
canvas-zoom-sweep: DOM nodes 75 77 +2% z=-3.5
canvas-zoom-sweep: event listeners 19 20 +5% z=-0.7
dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms -0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 7ms 7ms +1% z=-3.2
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 11 +0% z=-4.2
dom-widget-clipping: task duration 370ms 392ms +6% z=1.6
dom-widget-clipping: script duration 57ms 60ms +5% z=-2.3
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 68.0 MB 67.7 MB -0%
dom-widget-clipping: DOM nodes 18 18 +0% z=-2.9
dom-widget-clipping: event listeners 2 1 -50% variance too high
large-graph-idle: avg frame time 17ms 17ms -0% z=-0.6
large-graph-idle: p95 frame time 17ms 17ms -1%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 10ms 8ms -21% z=-4.5
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 9 -6% z=-9.9
large-graph-idle: task duration 619ms 589ms -5% z=0.9
large-graph-idle: script duration 15ms 13ms -16% z=-8.5
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 72.9 MB 66.5 MB -9%
large-graph-idle: DOM nodes -264 -271 +2% z=-326.6
large-graph-idle: event listeners -151 -165 +9% z=-31.3
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms -1%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 13ms 13ms -6% z=-5.8
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -2% z=-3.2
large-graph-pan: task duration 1190ms 1175ms -1% ⚠️ z=2.2
large-graph-pan: script duration 346ms 344ms -1% z=-3.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 73.0 MB 78.9 MB +8%
large-graph-pan: DOM nodes -267 -275 +3% z=-177.9
large-graph-pan: event listeners -147 -163 +11% z=-202.8
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -1%
large-graph-zoom: layout duration 7ms 7ms +0%
large-graph-zoom: style recalc duration 15ms 13ms -12%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 64 -2%
large-graph-zoom: task duration 1372ms 1285ms -6%
large-graph-zoom: script duration 390ms 381ms -2%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 72.7 MB 69.9 MB -4%
large-graph-zoom: DOM nodes -273 8 -103%
large-graph-zoom: event listeners -147 7 -105%
minimap-idle: avg frame time 17ms 17ms +0% z=0.1
minimap-idle: p95 frame time 17ms 17ms +0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 6ms 6ms -6% z=-4.3
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 7 7 +0% z=-3.8
minimap-idle: task duration 591ms 573ms -3% z=1.0
minimap-idle: script duration 16ms 13ms -20% z=-8.6
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 73.9 MB 72.0 MB -3%
minimap-idle: DOM nodes -264 -270 +2% z=-211.0
minimap-idle: event listeners -149 -147 -1% z=-229.6
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=-0.4
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +1%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 10ms 10ms -4% z=-2.9
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 47 +1% z=-2.5
subgraph-dom-widget-clipping: task duration 390ms 374ms -4% z=-0.2
subgraph-dom-widget-clipping: script duration 118ms 116ms -1% z=-1.9
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 68.5 MB 68.5 MB -0%
subgraph-dom-widget-clipping: DOM nodes 18 19 +6% z=-2.8
subgraph-dom-widget-clipping: event listeners 8 8 +0% z=-1.4
subgraph-idle: avg frame time 17ms 17ms +0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms +1%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 8ms 9ms +10% z=-1.9
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 9 -6% z=-3.7
subgraph-idle: task duration 519ms 489ms -6% ⚠️ z=3.8
subgraph-idle: script duration 8ms 6ms -20% z=-5.3
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 58.2 MB 57.3 MB -2%
subgraph-idle: DOM nodes -280 -282 +1% z=-202.9
subgraph-idle: event listeners -149 -151 +1% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.4
subgraph-mouse-sweep: p95 frame time 17ms 17ms -0%
subgraph-mouse-sweep: layout duration 4ms 4ms -6% z=-1.8
subgraph-mouse-sweep: style recalc duration 36ms 40ms +10% z=-0.9
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 76 -1% z=-2.4
subgraph-mouse-sweep: task duration 811ms 784ms -3% z=0.3
subgraph-mouse-sweep: script duration 87ms 83ms -4% z=-2.7
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 53.4 MB 56.1 MB +5%
subgraph-mouse-sweep: DOM nodes -281 -278 -1% z=-154.4
subgraph-mouse-sweep: event listeners -151 -151 +0% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms -0%
subgraph-transition-enter: p95 frame time 17ms 17ms +1%
subgraph-transition-enter: layout duration 15ms 14ms -4%
subgraph-transition-enter: style recalc duration 33ms 31ms -6%
subgraph-transition-enter: layout count 14 15 +7%
subgraph-transition-enter: style recalc count 19 20 +5%
subgraph-transition-enter: task duration 947ms 905ms -4%
subgraph-transition-enter: script duration 17ms 16ms -9%
subgraph-transition-enter: TBT 143ms 137ms -4%
subgraph-transition-enter: heap used 86.3 MB 78.4 MB -9%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2375 2373 -0%
viewport-pan-sweep: avg frame time 17ms 17ms +0%
viewport-pan-sweep: p95 frame time 17ms 17ms +0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 38ms 36ms -4%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 4274ms 4003ms -6%
viewport-pan-sweep: script duration 1096ms 1039ms -5%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 79.9 MB 68.9 MB -14%
viewport-pan-sweep: DOM nodes -263 -272 +3%
viewport-pan-sweep: event listeners -135 -149 +10%
vue-large-graph-idle: avg frame time 18ms 17ms -3%
vue-large-graph-idle: p95 frame time 17ms 17ms -0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 16499ms 15882ms -4%
vue-large-graph-idle: script duration 120ms 101ms -16%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 170.0 MB 168.1 MB -1%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16389 -16388 -0%
vue-large-graph-pan: avg frame time 18ms 17ms -2%
vue-large-graph-pan: p95 frame time 17ms 17ms -0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 18ms 18ms +1%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 174 175 +1%
vue-large-graph-pan: task duration 20239ms 20232ms -0%
vue-large-graph-pan: script duration 410ms 430ms +5%
vue-large-graph-pan: TBT 64ms 40ms -38%
vue-large-graph-pan: heap used 184.4 MB 169.6 MB -8%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16383 -16382 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=-0.4
workflow-execution: p95 frame time 17ms 17ms -0%
workflow-execution: layout duration 1ms 2ms +97% z=-0.2
workflow-execution: style recalc duration 17ms 16ms -6% z=-3.8
workflow-execution: layout count 3 5 +50% z=-0.8
workflow-execution: style recalc count 8 8 +0% z=-4.8
workflow-execution: task duration 91ms 86ms -6% z=-3.4
workflow-execution: script duration 7ms 7ms +6% z=-7.4
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 60.6 MB 60.5 MB -0%
workflow-execution: DOM nodes 117 130 +11% z=-4.4
workflow-execution: event listeners 49 25 -49% z=-6.1
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-08-17T23:41:50.019Z",
  "gitSha": "b2b30b4789f3f4565fefbfb0d289921caeffa696",
  "branch": "fix/billing-rum-lifecycle-pairing",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2037.554,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.719000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 475.57899999999995,
      "heapDeltaBytes": -185768,
      "heapUsedBytes": 60774632,
      "domNodes": -281,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 6.201,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2038.7610000000222,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.471,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 471.6549999999999,
      "heapDeltaBytes": -2965368,
      "heapUsedBytes": 58270540,
      "domNodes": -281,
      "jsHeapTotalBytes": 4448256,
      "scriptDurationMs": 5.759000000000002,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1813.826000000006,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 31.988000000000003,
      "layouts": 12,
      "layoutDurationMs": 3.714,
      "taskDurationMs": 848.3810000000001,
      "heapDeltaBytes": 675312,
      "heapUsedBytes": 60935968,
      "domNodes": -288,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 109.828,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1858.161999999993,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 36.447,
      "layouts": 12,
      "layoutDurationMs": 3.4549999999999996,
      "taskDurationMs": 854.88,
      "heapDeltaBytes": 13248760,
      "heapUsedBytes": 73362620,
      "domNodes": -280,
      "jsHeapTotalBytes": 4972544,
      "scriptDurationMs": 110.122,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1751.1709999999994,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 16.212,
      "layouts": 6,
      "layoutDurationMs": 0.629,
      "taskDurationMs": 350.492,
      "heapDeltaBytes": 2809744,
      "heapUsedBytes": 63167148,
      "domNodes": 75,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 8.512,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1738.7360000000172,
      "styleRecalcs": 33,
      "styleRecalcDurationMs": 15.848,
      "layouts": 6,
      "layoutDurationMs": 0.647,
      "taskDurationMs": 333.32800000000003,
      "heapDeltaBytes": 2422616,
      "heapUsedBytes": 63074880,
      "domNodes": 78,
      "jsHeapTotalBytes": 4194304,
      "scriptDurationMs": 8.802,
      "eventListeners": 21,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 722.0800000000054,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.608000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 433.514,
      "heapDeltaBytes": 10234716,
      "heapUsedBytes": 70959768,
      "domNodes": 16,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 63.69800000000001,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 573.6970000000383,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.996000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 349.555,
      "heapDeltaBytes": 10296428,
      "heapUsedBytes": 71074316,
      "domNodes": 20,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 56.98400000000001,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2022.654999999986,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.468000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 583.812,
      "heapDeltaBytes": -11063860,
      "heapUsedBytes": 63208940,
      "domNodes": -280,
      "jsHeapTotalBytes": -1576960,
      "scriptDurationMs": 13.894,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2044.1859999999679,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.582999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 593.902,
      "heapDeltaBytes": 2229008,
      "heapUsedBytes": 76307948,
      "domNodes": -261,
      "jsHeapTotalBytes": -1576960,
      "scriptDurationMs": 11.655,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2172.867999999994,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 12.183,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1178.862,
      "heapDeltaBytes": 13904056,
      "heapUsedBytes": 88032624,
      "domNodes": -282,
      "jsHeapTotalBytes": 5201920,
      "scriptDurationMs": 336.395,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2156.829000000016,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.175999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1171.779,
      "heapDeltaBytes": 2607184,
      "heapUsedBytes": 77507324,
      "domNodes": -267,
      "jsHeapTotalBytes": -1351680,
      "scriptDurationMs": 351.061,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3109.5210000000293,
      "styleRecalcs": 62,
      "styleRecalcDurationMs": 10.974000000000002,
      "layouts": 60,
      "layoutDurationMs": 6.763000000000001,
      "taskDurationMs": 1283.145,
      "heapDeltaBytes": 15613792,
      "heapUsedBytes": 78058540,
      "domNodes": 4,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 384.424,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3131.5160000000333,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.571999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.177,
      "taskDurationMs": 1286.2310000000002,
      "heapDeltaBytes": -8178044,
      "heapUsedBytes": 68447108,
      "domNodes": 12,
      "jsHeapTotalBytes": 5804032,
      "scriptDurationMs": 377.221,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2037.1250000000032,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.494000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 599.998,
      "heapDeltaBytes": -7197020,
      "heapUsedBytes": 73474704,
      "domNodes": -273,
      "jsHeapTotalBytes": 3735552,
      "scriptDurationMs": 14.372,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2022.7950000000874,
      "styleRecalcs": 6,
      "styleRecalcDurationMs": 4.5889999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 546.627,
      "heapDeltaBytes": 1690048,
      "heapUsedBytes": 77545264,
      "domNodes": -266,
      "jsHeapTotalBytes": -2101248,
      "scriptDurationMs": 11.467999999999996,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 572.371999999973,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.160000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 375.059,
      "heapDeltaBytes": 11396204,
      "heapUsedBytes": 71825064,
      "domNodes": 18,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 117.954,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 561.1900000000105,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.839,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 372.149,
      "heapDeltaBytes": 11028596,
      "heapUsedBytes": 71736504,
      "domNodes": 20,
      "jsHeapTotalBytes": 4718592,
      "scriptDurationMs": 114.23599999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2047.6320000000214,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 9.798,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 512.081,
      "heapDeltaBytes": -1109864,
      "heapUsedBytes": 59718852,
      "domNodes": -283,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 6.473,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.7399999999698,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.083000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 465.78000000000003,
      "heapDeltaBytes": -307356,
      "heapUsedBytes": 60357296,
      "domNodes": -280,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 5.65,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1707.224999999994,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 33.472,
      "layouts": 16,
      "layoutDurationMs": 4.023,
      "taskDurationMs": 784.207,
      "heapDeltaBytes": -1629672,
      "heapUsedBytes": 59058904,
      "domNodes": -278,
      "jsHeapTotalBytes": 4448256,
      "scriptDurationMs": 84.002,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1755.6280000000015,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 45.721,
      "layouts": 16,
      "layoutDurationMs": 4.2,
      "taskDurationMs": 783.4499999999999,
      "heapDeltaBytes": -1876312,
      "heapUsedBytes": 58537588,
      "domNodes": -278,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 82.78999999999999,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1400.4650000000538,
      "styleRecalcs": 20,
      "styleRecalcDurationMs": 30.955999999999996,
      "layouts": 15,
      "layoutDurationMs": 14.213999999999999,
      "taskDurationMs": 905.1020000000001,
      "heapDeltaBytes": -5771784,
      "heapUsedBytes": 82184608,
      "domNodes": 13673,
      "jsHeapTotalBytes": 10747904,
      "scriptDurationMs": 15.516000000000002,
      "eventListeners": 2373,
      "totalBlockingTimeMs": 137,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8247.342000000004,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 36.257999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4032.0640000000003,
      "heapDeltaBytes": 8342552,
      "heapUsedBytes": 82302712,
      "domNodes": -263,
      "jsHeapTotalBytes": -1908736,
      "scriptDurationMs": 1043.058,
      "eventListeners": -135,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8228.77399999993,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 36.166000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3974.807,
      "heapDeltaBytes": -10969656,
      "heapUsedBytes": 62278412,
      "domNodes": -280,
      "jsHeapTotalBytes": 3928064,
      "scriptDurationMs": 1034.149,
      "eventListeners": -163,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16958.656000000017,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16129.663,
      "heapDeltaBytes": -31629784,
      "heapUsedBytes": 173540120,
      "domNodes": -8312,
      "jsHeapTotalBytes": -12259328,
      "scriptDurationMs": 102.39699999999999,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16708.163999999895,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15633.978000000003,
      "heapDeltaBytes": -26307708,
      "heapUsedBytes": 178914296,
      "domNodes": -8312,
      "jsHeapTotalBytes": -7282688,
      "scriptDurationMs": 98.77299999999998,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21159.676000000047,
      "styleRecalcs": 176,
      "styleRecalcDurationMs": 18.739000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20585.783,
      "heapDeltaBytes": -21394216,
      "heapUsedBytes": 183875456,
      "domNodes": -8312,
      "jsHeapTotalBytes": -14381056,
      "scriptDurationMs": 452.22900000000004,
      "eventListeners": -16379,
      "totalBlockingTimeMs": 63,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20473.60400000002,
      "styleRecalcs": 174,
      "styleRecalcDurationMs": 17.43699999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 19877.485,
      "heapDeltaBytes": -48770440,
      "heapUsedBytes": 171734684,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11210752,
      "scriptDurationMs": 407.829,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 17,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 132.28200000003199,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 18.636,
      "layouts": 8,
      "layoutDurationMs": 2.332,
      "taskDurationMs": 96.16399999999999,
      "heapDeltaBytes": 3175404,
      "heapUsedBytes": 63558332,
      "domNodes": 133,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 8.037,
      "eventListeners": 25,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 129.8829999999498,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 13.048000000000002,
      "layouts": 1,
      "layoutDurationMs": 0.7179999999999999,
      "taskDurationMs": 75.37599999999999,
      "heapDeltaBytes": 3028864,
      "heapUsedBytes": 63395652,
      "domNodes": 126,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 6.0920000000000005,
      "eventListeners": 25,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@github-actions github-actions Bot added the risk:R3 PR risk grade (advisory shadow check; grader-owned) label Aug 13, 2026
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cd5b324a-b9da-41e8-a89d-e6a078161940

📥 Commits

Reviewing files that changed from the base of the PR and between 0c1ea6c and 2c838f3.

📒 Files selected for processing (2)
  • src/platform/workspace/composables/useDowngradeToPersonal.test.ts
  • src/platform/workspace/composables/useDowngradeToPersonal.ts

Included review availability: Your plan includes up to 4 reviews per rolling hour; 3 remain after this review.


📝 Walkthrough

Walkthrough

The changes add elapsed-time metadata to resubscription telemetry and preserve downgrade telemetry across reactivation retries. Tests verify numeric durations and prevent duplicate downgrade lifecycle events.

Changes

Subscription telemetry

Layer / File(s) Summary
Resubscription duration telemetry
src/platform/telemetry/types.ts, src/platform/workspace/composables/useResubscribe.ts, src/platform/workspace/composables/useSubscriptionCheckout.ts, src/platform/workspace/composables/*.test.ts
Resubscription events now include numeric duration_ms values for workspace billing. Legacy checkout behavior remains unchanged.
Downgrade retry telemetry
src/platform/workspace/composables/useDowngradeToPersonal.ts, src/platform/workspace/composables/useDowngradeToPersonal.test.ts
Downgrade attempts retain member-removal, checkout, target-plan, and timing data across reactivation retries. Terminal outcomes clear the retained state and emit one lifecycle sequence.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 2c838

The change preserves billing lifecycle pairing and adds resubscribe latency telemetry without introducing an actionable merge-blocking risk; it is merge-ready after normal checks and review.

Possibly related PRs

Suggested reviewers: drjkl


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
End-To-End Regression Coverage For Fixes ❓ Inconclusive The changed files and description are available, but the PR title and commit subjects are not provided; the required bug-fix signal cannot be verified. Provide the PR title and commit subjects, then re-evaluate whether bug-fix language is present.
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the primary change: preserving billing RUM lifecycle pairing.
Description check ✅ Passed The description covers the summary, changes, review focus, validation, and screenshot status with sufficient technical detail.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Website End-To-End Regression Coverage ✅ Passed The PR changes only src/platform files. It does not change apps/website runtime files, so this website-specific check does not apply.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed-file list contains only telemetry and workspace composable files. No files under src/lib/litegraph/, src/ecs/, or graph-entity-related paths are modified.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/billing-rum-lifecycle-pairing

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 13, 2026
@codecov

codecov Bot commented Aug 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main   #15205      +/-   ##
==========================================
+ Coverage   78.93%   81.12%   +2.19%     
==========================================
  Files        2211     1882     -329     
  Lines      111813   108726    -3087     
  Branches    31564    31633      +69     
==========================================
- Hits        88254    88206      -48     
+ Misses      23105    20115    -2990     
+ Partials      454      405      -49     
Flag Coverage Δ
unit 72.89% <100.00%> (+0.05%) ⬆️
website-unit ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/platform/telemetry/types.ts 97.05% <ø> (ø)
...rm/workspace/composables/useDowngradeToPersonal.ts 98.54% <100.00%> (+0.07%) ⬆️
...c/platform/workspace/composables/useResubscribe.ts 96.77% <100.00%> (+0.34%) ⬆️
...m/workspace/composables/useSubscriptionCheckout.ts 96.75% <100.00%> (+0.03%) ⬆️

... and 378 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dante01yoon dante01yoon added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.50 Backport PRs for core 1.50 cloud/1.50 Backport PRs for cloud 1.50 labels Aug 13, 2026

@christian-byrne christian-byrne left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you fix merge conflicts?

@dante01yoon

Copy link
Copy Markdown
Collaborator Author

Rebased onto the latest origin/main and resolved the downgrade telemetry conflict by retaining main's toTierKey() normalization in the persisted telemetry attempt. Focused tests (151), typecheck, lint/format, and the push-time knip check pass.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 16, 2026
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.test.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.test.ts
Comment thread src/platform/workspace/composables/useDowngradeToPersonal.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.50 Backport PRs for cloud 1.50 core/1.50 Backport PRs for core 1.50 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch risk:R3 PR risk grade (advisory shadow check; grader-owned) size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants