Skip to content

feat: add workflow context to RUM events - #14084

Merged
huang47 merged 4 commits into
mainfrom
codex/workflow-rum-context
Jul 28, 2026
Merged

feat: add workflow context to RUM events#14084
huang47 merged 4 commits into
mainfrom
codex/workflow-rum-context

Conversation

@huang47

@huang47 huang47 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Stack

  1. #14084: feat: add workflow context to RUM events
  2. #14098: refactor: make workflow context graph selection explicit

Summary

Emit one workflow_execution Datadog duration vital for every workflow attempt and remove the separate workflow_queue action. The vital excludes the redundant subscribe_to_run and constant product attributes.

image

Verification

Datadog runtime evidence below was captured at pre-rebase commit d5faddde2d, using localhost RUM support from #14105 only in a temporary checkout. The rebased head f9185311bf preserves the same workflow telemetry tree and passes the focused regression suite. The two-node Empty Latent Image -> Save Latent workflow produced one failed execution and one successful execution in Datadog.

@type:vital service:comfy-cloud-frontend env:test-v2 @vital.name:workflow_execution @view.url_host:localhost

Open the fixed Datadog Explorer window

Datadog Explorer showing the failed and successful workflow_execution vitals from the pre-rebase PR head

Successful execution

Datadog attributes for a successful workflow_execution vital without redundant attributes
  • success: true, failure_reason is empty, and terminal_stage: execution.
  • The stage durations are additive: 10.1 ms submission + 8.4 ms queue wait + 6.3 ms execution = 24.8 ms total vital duration.
  • All four lifecycle timestamps are present and monotonic.
  • The complete custom-attribute list contains neither subscribe_to_run nor product.

Failed execution

Datadog attributes for a failed workflow_execution vital without redundant attributes
  • success: false, failure_reason: execution_failed, and terminal_stage: execution are emitted on the same vital.
  • The stage durations remain additive: 7.4 ms submission + 7.9 ms queue wait + 29.0 ms execution = 44.3 ms total vital duration.
  • All four lifecycle timestamps are present and monotonic.
  • The complete custom-attribute list contains neither subscribe_to_run nor product.

Focused unit coverage additionally verifies prompt-build failure, submission rejection, execution failure, interruption, successful completion, monotonic normalization, and one terminal vital per attempt. The live Datadog evidence above covers the successful and execution-failure boundaries; earlier failure stages are covered by those regression tests.

Created by Codex

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 07/28/2026, 06:16:18 PM UTC

Links

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

📊 Browser Reports
  • chromium: View Report (✅ 1716 / ❌ 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)

📦 Bundle: 8.15 MB gzip 🔴 +1.29 kB

Details

Summary

  • Raw size: 34.2 MB baseline 34.2 MB — 🔴 +5.27 kB
  • Gzip: 8.15 MB baseline 8.14 MB — 🔴 +1.29 kB
  • Brotli: 5.63 MB baseline 5.63 MB — 🔴 +954 B
  • Bundles: 420 current • 420 baseline • 143 added / 143 removed

Category Glance
Data & Services 🔴 +4.76 kB (3.41 MB) · Other 🔴 +349 B (12.5 MB) · Graph Workspace 🔴 +179 B (1.28 MB) · Panels & Settings 🟢 -7 B (551 kB) · App Entry Points 🟢 -7 B (3.63 kB) · Vendor & Third-Party ⚪ 0 B (15.7 MB) · + 5 more

App Entry Points — 3.63 kB (baseline 3.64 kB) • 🟢 -7 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-DnbsBf88.js (removed) 3.64 kB 🟢 -3.64 kB 🟢 -1.82 kB 🟢 -1.59 kB
assets/index-BRpwnzbi.js (new) 3.63 kB 🔴 +3.63 kB 🔴 +1.82 kB 🔴 +1.59 kB

Status: 1 added / 1 removed

Graph Workspace — 1.28 MB (baseline 1.28 MB) • 🔴 +179 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BcVWZ0SR.js (new) 1.28 MB 🔴 +1.28 MB 🔴 +275 kB 🔴 +207 kB
assets/GraphView-DI3Oc3Zm.js (removed) 1.28 MB 🟢 -1.28 MB 🟢 -275 kB 🟢 -207 kB

Status: 1 added / 1 removed / 1 unchanged

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-DwwLGgqo.js (removed) 25 kB 🟢 -25 kB 🟢 -6.25 kB 🟢 -5.53 kB
assets/CloudSurveyView-iSEYMgth.js (new) 25 kB 🔴 +25 kB 🔴 +6.26 kB 🔴 +5.53 kB
assets/CloudLoginView-DdcWgqmJ.js (removed) 11.6 kB 🟢 -11.6 kB 🟢 -3.14 kB 🟢 -2.76 kB
assets/CloudLoginView-DV2ZHMgr.js (new) 11.6 kB 🔴 +11.6 kB 🔴 +3.14 kB 🔴 +2.77 kB
assets/CloudSignupView-CEou4irb.js (removed) 9.96 kB 🟢 -9.96 kB 🟢 -2.81 kB 🟢 -2.46 kB
assets/CloudSignupView-DhlIE9Yj.js (new) 9.96 kB 🔴 +9.96 kB 🔴 +2.81 kB 🔴 +2.46 kB
assets/CloudLayoutView-B13i8RpJ.js (new) 9.54 kB 🔴 +9.54 kB 🔴 +2.35 kB 🔴 +2.02 kB
assets/CloudLayoutView-BFn-67bh.js (removed) 9.54 kB 🟢 -9.54 kB 🟢 -2.35 kB 🟢 -2.02 kB
assets/UserCheckView-Dk1ujprQ.js (removed) 8.8 kB 🟢 -8.8 kB 🟢 -2.22 kB 🟢 -1.93 kB
assets/UserCheckView-Dkxj3LJu.js (new) 8.8 kB 🔴 +8.8 kB 🔴 +2.22 kB 🔴 +1.93 kB
assets/WidgetTextPreview-4Ao9N2qE.js (new) 6.13 kB 🔴 +6.13 kB 🔴 +2.16 kB 🔴 +1.92 kB
assets/WidgetTextPreview-B-qx75HG.js (removed) 6.13 kB 🟢 -6.13 kB 🟢 -2.16 kB 🟢 -1.92 kB
assets/CloudSubscriptionRedirectView-B9q0IKee.js (removed) 6.06 kB 🟢 -6.06 kB 🟢 -2.26 kB 🟢 -1.96 kB
assets/CloudSubscriptionRedirectView-D29aX4VP.js (new) 6.06 kB 🔴 +6.06 kB 🔴 +2.26 kB 🔴 +1.97 kB
assets/UserSelectView-ll5nFqGK.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/UserSelectView-OVqXQNcF.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CloudForgotPasswordView-jYFxTDk4.js (new) 5.15 kB 🔴 +5.15 kB 🔴 +1.76 kB 🔴 +1.54 kB
assets/CloudForgotPasswordView-xbj8Adkd.js (removed) 5.15 kB 🟢 -5.15 kB 🟢 -1.76 kB 🟢 -1.54 kB
assets/CloudAuthTimeoutView-BOc4M4p2.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.57 kB 🔴 +1.36 kB
assets/CloudAuthTimeoutView-BUrIJTuf.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/OAuthLayoutView-5mwWxTEd.js (new) 1.36 kB 🔴 +1.36 kB 🔴 +734 B 🔴 +620 B
assets/OAuthLayoutView-B36NZM7f.js (removed) 1.36 kB 🟢 -1.36 kB 🟢 -734 B 🟢 -620 B
assets/WidgetTextPreview-Cipw8I3v.js (new) 131 B 🔴 +131 B 🔴 +100 B 🔴 +90 B
assets/WidgetTextPreview-Dz4oLLTw.js (removed) 131 B 🟢 -131 B 🟢 -100 B 🟢 -88 B

Status: 12 added / 12 removed / 4 unchanged

Panels & Settings — 551 kB (baseline 551 kB) • 🟢 -7 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-B2oGNVMU.js (new) 49.5 kB 🔴 +49.5 kB 🔴 +9.97 kB 🔴 +8.84 kB
assets/KeybindingPanel-BVhIJ9Gd.js (removed) 49.5 kB 🟢 -49.5 kB 🟢 -9.97 kB 🟢 -8.83 kB
assets/SecretsPanel-Bl5mAb5Q.js (removed) 31 kB 🟢 -31 kB 🟢 -7.51 kB 🟢 -6.57 kB
assets/SecretsPanel-DtCyRmM_.js (new) 31 kB 🔴 +31 kB 🔴 +7.51 kB 🔴 +6.57 kB
assets/CreditsPanel-DTF15_IT.js (removed) 16 kB 🟢 -16 kB 🟢 -4.66 kB 🟢 -4.09 kB
assets/CreditsPanel-zxveSkzM.js (new) 16 kB 🔴 +16 kB 🔴 +4.65 kB 🔴 +4.09 kB
assets/SubscriptionPanel-D972V6KK.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.65 kB 🟢 -3.22 kB
assets/SubscriptionPanel-BBR94aXC.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.65 kB 🔴 +3.21 kB
assets/AboutPanel-Bl4aMlA4.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.06 kB 🟢 -2.74 kB
assets/AboutPanel-CHxRDsCP.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.06 kB 🔴 +2.74 kB
assets/ExtensionPanel-BEkYKg98.js (new) 9.24 kB 🔴 +9.24 kB 🔴 +2.54 kB 🔴 +2.25 kB
assets/ExtensionPanel-iRTg_0wo.js (removed) 9.24 kB 🟢 -9.24 kB 🟢 -2.54 kB 🟢 -2.25 kB
assets/ServerConfigPanel-C2hNyZuN.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -1.97 kB 🟢 -1.75 kB
assets/ServerConfigPanel-iATTXyoD.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +1.97 kB 🔴 +1.75 kB
assets/UserPanel-BiDSGrgb.js (new) 5.78 kB 🔴 +5.78 kB 🔴 +1.81 kB 🔴 +1.57 kB
assets/UserPanel-DZavnBxD.js (removed) 5.78 kB 🟢 -5.78 kB 🟢 -1.81 kB 🟢 -1.57 kB
assets/refreshRemoteConfig-BMsWWFR7.js (new) 2.97 kB 🔴 +2.97 kB 🔴 +1.27 kB 🔴 +1.11 kB
assets/refreshRemoteConfig-dIiifBNA.js (removed) 2.97 kB 🟢 -2.97 kB 🟢 -1.27 kB 🟢 -1.11 kB
assets/cloudRemoteConfig-BFENawX6.js (removed) 988 B 🟢 -988 B 🟢 -537 B 🟢 -447 B
assets/cloudRemoteConfig-CVKxsVYa.js (new) 988 B 🔴 +988 B 🔴 +535 B 🔴 +445 B
assets/refreshRemoteConfig-BjKtJfVv.js (new) 110 B 🔴 +110 B 🔴 +89 B 🔴 +90 B
assets/refreshRemoteConfig-DWOO7p1z.js (removed) 110 B 🟢 -110 B 🟢 -89 B 🟢 -82 B

Status: 11 added / 11 removed / 15 unchanged

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SignUpForm-B58IZ1px.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +4.18 kB 🔴 +3.64 kB
assets/SignUpForm-C_bpqSIW.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.18 kB 🟢 -3.65 kB
assets/auth-CabetWzL.js (removed) 3.69 kB 🟢 -3.69 kB 🟢 -1.3 kB 🟢 -1.12 kB
assets/auth-nsRPuKej.js (new) 3.69 kB 🔴 +3.69 kB 🔴 +1.3 kB 🔴 +1.12 kB
assets/usePostAuthRedirect-B8ihr77B.js (removed) 3.33 kB 🟢 -3.33 kB 🟢 -1.27 kB 🟢 -1.11 kB
assets/usePostAuthRedirect-Bdabsf8L.js (new) 3.33 kB 🔴 +3.33 kB 🔴 +1.27 kB 🔴 +1.11 kB
assets/UpdatePasswordContent-C6BXy9Xw.js (removed) 1.91 kB 🟢 -1.91 kB 🟢 -870 B 🟢 -759 B
assets/UpdatePasswordContent-COx-_ocI.js (new) 1.91 kB 🔴 +1.91 kB 🔴 +869 B 🔴 +759 B
assets/authStore-0Zwgkn4R.js (new) 128 B 🔴 +128 B 🔴 +104 B 🔴 +104 B
assets/authStore-Bn91RfoM.js (removed) 128 B 🟢 -128 B 🟢 -104 B 🟢 -107 B
assets/workspaceAuthStore-7i3IDDOb.js (removed) 108 B 🟢 -108 B 🟢 -99 B 🟢 -108 B
assets/workspaceAuthStore-vOUstmyH.js (new) 108 B 🔴 +108 B 🔴 +99 B 🔴 +100 B
assets/auth-BsVotP_d.js (removed) 105 B 🟢 -105 B 🟢 -96 B 🟢 -91 B
assets/auth-DE0NXAL9.js (new) 105 B 🔴 +105 B 🔴 +96 B 🔴 +91 B

Status: 7 added / 7 removed / 3 unchanged

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-BQPNIUbV.js (removed) 89.9 kB 🟢 -89.9 kB 🟢 -19.2 kB 🟢 -16.5 kB
assets/ComfyHubPublishDialog-DuRwb9q_.js (new) 89.9 kB 🔴 +89.9 kB 🔴 +19.2 kB 🔴 +16.5 kB
assets/useShareDialog-BoNwAAFz.js (removed) 23.7 kB 🟢 -23.7 kB 🟢 -5.59 kB 🟢 -4.96 kB
assets/useShareDialog-C5CFpSrx.js (new) 23.7 kB 🔴 +23.7 kB 🔴 +5.58 kB 🔴 +4.95 kB
assets/feedbackDialog-B1QIlF7Q.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.9 kB 🔴 +1.61 kB
assets/feedbackDialog-BedzokvI.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.9 kB 🟢 -1.62 kB
assets/ComfyHubPublishDialog-CroHb8dh.js (new) 143 B 🔴 +143 B 🔴 +105 B 🔴 +89 B
assets/ComfyHubPublishDialog-Dh7cvvBK.js (removed) 143 B 🟢 -143 B 🟢 -105 B 🟢 -89 B
assets/useSubscriptionDialog-BrI5b459.js (new) 108 B 🔴 +108 B 🔴 +102 B 🔴 +90 B
assets/useSubscriptionDialog-DqoltSSi.js (removed) 108 B 🟢 -108 B 🟢 -102 B 🟢 -95 B

Status: 5 added / 5 removed / 1 unchanged

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-Do9HL8e6.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.77 kB 🟢 -3.34 kB
assets/ComfyQueueButton-DyFkN5BT.js (new) 13.5 kB 🔴 +13.5 kB 🔴 +3.77 kB 🔴 +3.34 kB
assets/useTerminalTabs-DXrK4DkR.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.72 kB 🔴 +3.28 kB
assets/useTerminalTabs-o3XjYSHZ.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.72 kB 🟢 -3.29 kB
assets/InviteMembersForm-BFiElnCW.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.67 kB 🔴 +2.4 kB
assets/InviteMembersForm-ChHtQpsD.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.67 kB 🟢 -2.41 kB
assets/SubscribeButton-CW3DhbSg.js (new) 2.18 kB 🔴 +2.18 kB 🔴 +986 B 🔴 +864 B
assets/SubscribeButton-DQVlYTQ3.js (removed) 2.18 kB 🟢 -2.18 kB 🟢 -988 B 🟢 -864 B
assets/cloudFeedbackTopbarButton-DPrAYhJw.js (removed) 768 B 🟢 -768 B 🟢 -451 B 🟢 -407 B
assets/cloudFeedbackTopbarButton-DztZ87wN.js (new) 768 B 🔴 +768 B 🔴 +452 B 🔴 +409 B
assets/ComfyQueueButton-BjjSWN9p.js (new) 128 B 🔴 +128 B 🔴 +99 B 🔴 +90 B
assets/ComfyQueueButton-Cc8crO2k.js (removed) 128 B 🟢 -128 B 🟢 -99 B 🟢 -90 B

Status: 6 added / 6 removed / 8 unchanged

Data & Services — 3.41 MB (baseline 3.41 MB) • 🔴 +4.76 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/settingStore-BkpniveE.js (new) 3.14 MB 🔴 +3.14 MB 🔴 +728 kB 🔴 +549 kB
assets/settingStore-CXxfJmoX.js (removed) 3.14 MB 🟢 -3.14 MB 🟢 -727 kB 🟢 -548 kB
assets/load3dService-CGv0eV_O.js (removed) 132 kB 🟢 -132 kB 🟢 -29.2 kB 🟢 -24.6 kB
assets/load3dService-8wYDN9ag.js (new) 132 kB 🔴 +132 kB 🔴 +29.2 kB 🔴 +24.6 kB
assets/api-DjpBRplN.js (removed) 91.4 kB 🟢 -91.4 kB 🟢 -25.3 kB 🟢 -21.7 kB
assets/api-Cnuej9tc.js (new) 91.4 kB 🔴 +91.4 kB 🔴 +25.3 kB 🔴 +21.7 kB
assets/workflowShareService-DDqjZRID.js (removed) 16.5 kB 🟢 -16.5 kB 🟢 -4.92 kB 🟢 -4.36 kB
assets/workflowShareService-DyEZBz-T.js (new) 16.5 kB 🔴 +16.5 kB 🔴 +4.92 kB 🔴 +4.38 kB
assets/keybindingService-Bp9zyY-_.js (removed) 7.28 kB 🟢 -7.28 kB 🟢 -1.9 kB 🟢 -1.62 kB
assets/keybindingService-Clqsk1W7.js (new) 7.28 kB 🔴 +7.28 kB 🔴 +1.89 kB 🔴 +1.62 kB
assets/releaseStore-DCf8_xpi.js (new) 6.77 kB 🔴 +6.77 kB 🔴 +2.06 kB 🔴 +1.8 kB
assets/releaseStore-DmaFMnpt.js (removed) 6.77 kB 🟢 -6.77 kB 🟢 -2.06 kB 🟢 -1.8 kB
assets/systemStatsStore-CP6xGsrz.js (new) 4.99 kB 🔴 +4.99 kB 🔴 +1.77 kB 🔴 +1.5 kB
assets/systemStatsStore-DgfxkFqr.js (removed) 4.99 kB 🟢 -4.99 kB 🟢 -1.77 kB 🟢 -1.5 kB
assets/userStore-CLTsbVRj.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -929 B 🟢 -818 B
assets/userStore-gB6YxCDU.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +928 B 🔴 +821 B
assets/audioService-4hWpxk0o.js (removed) 1.76 kB 🟢 -1.76 kB 🟢 -860 B 🟢 -748 B
assets/audioService-CTIZ_-0j.js (new) 1.76 kB 🔴 +1.76 kB 🔴 +861 B 🔴 +751 B
assets/dialogService-Bcev6fLs.js (removed) 98 B 🟢 -98 B 🟢 -97 B 🟢 -86 B
assets/dialogService-huqpwtLS.js (new) 98 B 🔴 +98 B 🔴 +97 B 🔴 +83 B
assets/releaseStore-B5URIcqk.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -85 B
assets/releaseStore-DhcFIi59.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +87 B
assets/settingStore-BAjwup3A.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -85 B
assets/settingStore-BJWKajm3.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +83 B
assets/assetsStore-Cqsl6Tqj.js (removed) 94 B 🟢 -94 B 🟢 -92 B 🟢 -84 B
assets/assetsStore-DnzwAOlg.js (new) 94 B 🔴 +94 B 🔴 +92 B 🔴 +83 B
assets/api-BLHn7FcL.js (new) 62 B 🔴 +62 B 🔴 +74 B 🔴 +66 B
assets/api-BndPahSI.js (removed) 62 B 🟢 -62 B 🟢 -74 B 🟢 -66 B

Status: 14 added / 14 removed / 3 unchanged

Utilities & Hooks — 369 kB (baseline 369 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-Cs9Zru9z.js (new) 235 kB 🔴 +235 kB 🔴 +52.5 kB 🔴 +42.7 kB
assets/useConflictDetection-DctGhQKc.js (removed) 235 kB 🟢 -235 kB 🟢 -52.5 kB 🟢 -42.7 kB
assets/useLoad3d-B420Amv5.js (new) 25.8 kB 🔴 +25.8 kB 🔴 +5.82 kB 🔴 +5.15 kB
assets/useLoad3d-CCefGF5X.js (removed) 25.8 kB 🟢 -25.8 kB 🟢 -5.82 kB 🟢 -5.15 kB
assets/useLoad3dViewer-BSBAvrif.js (removed) 21.3 kB 🟢 -21.3 kB 🟢 -5 kB 🟢 -4.38 kB
assets/useLoad3dViewer-DQBD9572.js (new) 21.3 kB 🔴 +21.3 kB 🔴 +5.01 kB 🔴 +4.38 kB
assets/useFeatureFlags-CfoXSE3A.js (removed) 7.26 kB 🟢 -7.26 kB 🟢 -2.17 kB 🟢 -1.83 kB
assets/useFeatureFlags-CH7vcPZF.js (new) 7.26 kB 🔴 +7.26 kB 🔴 +2.17 kB 🔴 +1.83 kB
assets/useDowngradeToPersonal-5s0G5DYy.js (removed) 5.9 kB 🟢 -5.9 kB 🟢 -1.8 kB 🟢 -1.57 kB
assets/useDowngradeToPersonal-Bj9GrM_6.js (new) 5.9 kB 🔴 +5.9 kB 🔴 +1.8 kB 🔴 +1.57 kB
assets/assetPreviewUtil-CCwxh3HO.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1 kB 🟢 -872 B
assets/assetPreviewUtil-DzlEoufS.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +997 B 🔴 +875 B
assets/useUpstreamValue-BWazi0iw.js (new) 2.04 kB 🔴 +2.04 kB 🔴 +785 B 🔴 +699 B
assets/useUpstreamValue-CoX88s_L.js (removed) 2.04 kB 🟢 -2.04 kB 🟢 -788 B 🟢 -701 B
assets/useWorkspaceTierLabel-D30gmDPF.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -848 B 🟢 -729 B
assets/useWorkspaceTierLabel-DyEo4ao5.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +844 B 🔴 +726 B
assets/subscriptionCheckoutUtil-BtjCnN2F.js (removed) 903 B 🟢 -903 B 🟢 -535 B 🟢 -457 B
assets/subscriptionCheckoutUtil-BwE_0BOB.js (new) 903 B 🔴 +903 B 🔴 +534 B 🔴 +453 B
assets/useSessionCookie-BPS5_-Zz.js (new) 746 B 🔴 +746 B 🔴 +388 B 🔴 +337 B
assets/useSessionCookie-C9VT8UaF.js (removed) 746 B 🟢 -746 B 🟢 -389 B 🟢 -337 B
assets/useLoad3d-BfdGVo-L.js (removed) 311 B 🟢 -311 B 🟢 -164 B 🟢 -148 B
assets/useLoad3d-pm5l3Qno.js (new) 311 B 🔴 +311 B 🔴 +164 B 🔴 +147 B
assets/useSessionCookie-DK5kqZq2.js (new) 101 B 🔴 +101 B 🔴 +86 B 🔴 +84 B
assets/useSessionCookie-DUSuF1jU.js (removed) 101 B 🟢 -101 B 🟢 -86 B 🟢 -77 B
assets/useFeatureFlags-C0TuD9RP.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +81 B
assets/useFeatureFlags-Cx9NrFB0.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -87 B
assets/useLoad3dViewer-CyCIOk38.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -92 B
assets/useLoad3dViewer-D4qRA9LJ.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +86 B
assets/useCurrentUser-9_WYiMdD.js (new) 94 B 🔴 +94 B 🔴 +95 B 🔴 +83 B
assets/useCurrentUser-yTuJe0Bu.js (removed) 94 B 🟢 -94 B 🟢 -95 B 🟢 -85 B

Status: 15 added / 15 removed / 20 unchanged

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

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 12.5 MB (baseline 12.5 MB) • 🔴 +349 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BCb3AFY4.js (removed) 111 kB 🟢 -111 kB 🟢 -28.7 kB 🟢 -24.3 kB
assets/core-DsHy8H2v.js (new) 111 kB 🔴 +111 kB 🔴 +28.7 kB 🔴 +24.3 kB
assets/WidgetSelect-B9KHQ0ED.js (new) 88 kB 🔴 +88 kB 🔴 +20 kB 🔴 +17.1 kB
assets/WidgetSelect-DKyZn79_.js (removed) 88 kB 🟢 -88 kB 🟢 -20 kB 🟢 -17.1 kB
assets/Load3D-BRLkYR5Q.js (removed) 71.3 kB 🟢 -71.3 kB 🟢 -11.7 kB 🟢 -10 kB
assets/Load3D-CmDZByY4.js (new) 71.3 kB 🔴 +71.3 kB 🔴 +11.7 kB 🔴 +10 kB
assets/WorkspaceSettingsPanelContent-D69sqlf0.js (new) 61.6 kB 🔴 +61.6 kB 🔴 +13.2 kB 🔴 +11.5 kB
assets/WorkspaceSettingsPanelContent-DWGnry4L.js (removed) 61.6 kB 🟢 -61.6 kB 🟢 -13.2 kB 🟢 -11.5 kB
assets/Preview3d-Bmo2HTdH.js (new) 50.9 kB 🔴 +50.9 kB 🔴 +8.33 kB 🔴 +7.25 kB
assets/Preview3d-DLeirpEq.js (removed) 50.9 kB 🟢 -50.9 kB 🟢 -8.33 kB 🟢 -7.26 kB
assets/main-Cd_9Kl4K.js (removed) 46.7 kB 🟢 -46.7 kB 🟢 -13.8 kB 🟢 -11.9 kB
assets/main-C4kRHgXE.js (new) 46.7 kB 🔴 +46.7 kB 🔴 +13.8 kB 🔴 +11.9 kB
assets/SubscriptionTransitionPreviewWorkspace-jEgS-Yli.js (removed) 45.4 kB 🟢 -45.4 kB 🟢 -9.65 kB 🟢 -8.44 kB
assets/SubscriptionTransitionPreviewWorkspace-D4PVeFRB.js (new) 45.4 kB 🔴 +45.4 kB 🔴 +9.65 kB 🔴 +8.47 kB
assets/SubscriptionRequiredDialogContentUnified-CmL-4vke.js (new) 42.1 kB 🔴 +42.1 kB 🔴 +9.37 kB 🔴 +8.15 kB
assets/SubscriptionRequiredDialogContentUnified-Q79zNri5.js (removed) 42.1 kB 🟢 -42.1 kB 🟢 -9.37 kB 🟢 -8.15 kB
assets/MembersPanelContent-BtS7rvfu.js (removed) 41.9 kB 🟢 -41.9 kB 🟢 -8.8 kB 🟢 -7.84 kB
assets/MembersPanelContent-EDa2Cy8i.js (new) 41.9 kB 🔴 +41.9 kB 🔴 +8.8 kB 🔴 +7.84 kB
assets/WidgetBoundingBoxes-0Tnfmbmf.js (new) 33.8 kB 🔴 +33.8 kB 🔴 +9.18 kB 🔴 +8.16 kB
assets/WidgetBoundingBoxes-DJhjV23c.js (removed) 33.8 kB 🟢 -33.8 kB 🟢 -9.19 kB 🟢 -8.16 kB
assets/WidgetPainter-DAgTMM6G.js (new) 32.7 kB 🔴 +32.7 kB 🔴 +7.9 kB 🔴 +6.98 kB
assets/WidgetPainter-rfG5YXGS.js (removed) 32.7 kB 🟢 -32.7 kB 🟢 -7.9 kB 🟢 -6.98 kB
assets/Load3dViewerContent-C4Ma5KD5.js (removed) 30.8 kB 🟢 -30.8 kB 🟢 -6.3 kB 🟢 -5.46 kB
assets/Load3dViewerContent-CD-c4Czo.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +6.29 kB 🔴 +5.45 kB
assets/initHostTelemetry-BZLzELmo.js (removed) 28.4 kB 🟢 -28.4 kB 🟢 -6.79 kB 🟢 -5.66 kB
assets/SubscriptionPanelContentWorkspace-BIm3ykuJ.js (new) 26.3 kB 🔴 +26.3 kB 🔴 +6.11 kB 🔴 +5.38 kB
assets/SubscriptionPanelContentWorkspace-D7uFMaKe.js (removed) 26.3 kB 🟢 -26.3 kB 🟢 -6.12 kB 🟢 -5.38 kB
assets/SubscriptionRequiredDialogContentWorkspace-BUef_YbT.js (new) 24.9 kB 🔴 +24.9 kB 🔴 +5.76 kB 🔴 +5.06 kB
assets/SubscriptionRequiredDialogContentWorkspace-liA3GX0V.js (removed) 24.9 kB 🟢 -24.9 kB 🟢 -5.77 kB 🟢 -5.07 kB
assets/SubscriptionRequiredDialogContent-C5Ag_Jz2.js (new) 24.4 kB 🔴 +24.4 kB 🔴 +6 kB 🔴 +5.29 kB
assets/SubscriptionRequiredDialogContent-DsR0Lp-1.js (removed) 24.4 kB 🟢 -24.4 kB 🟢 -6 kB 🟢 -5.29 kB
assets/initHostTelemetry-BjPavo6H.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.7 kB 🔴 +4.73 kB
assets/WidgetImageCrop-BwYlsIoX.js (new) 23.3 kB 🔴 +23.3 kB 🔴 +5.75 kB 🔴 +5.04 kB
assets/WidgetImageCrop-k0oI42oB.js (removed) 23.3 kB 🟢 -23.3 kB 🟢 -5.75 kB 🟢 -5.04 kB
assets/load3d-BiNpeMlA.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.44 kB 🟢 -4.7 kB
assets/load3d-D7o4AHYH.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.43 kB 🔴 +4.7 kB
assets/CurrentUserPopoverWorkspace-BLHtty1P.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.71 kB 🟢 -4.2 kB
assets/CurrentUserPopoverWorkspace-BMk_hw3X.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +4.7 kB 🔴 +4.18 kB
assets/SignInContent-_yStaW_5.js (new) 20.3 kB 🔴 +20.3 kB 🔴 +5.13 kB 🔴 +4.47 kB
assets/SignInContent-ZuIVtyRc.js (removed) 20.3 kB 🟢 -20.3 kB 🟢 -5.13 kB 🟢 -4.48 kB
assets/WidgetInputNumber-BITqpbzv.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.83 kB 🔴 +4.29 kB
assets/WidgetInputNumber-HlvTgI2t.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.83 kB 🟢 -4.29 kB
assets/CreditsTile-CWAXEMpm.js (removed) 17.2 kB 🟢 -17.2 kB 🟢 -4.57 kB 🟢 -4.03 kB
assets/CreditsTile--ArcK21s.js (new) 17.2 kB 🔴 +17.2 kB 🔴 +4.57 kB 🔴 +4.03 kB
assets/WidgetRange-BizPi8pr.js (new) 16.7 kB 🔴 +16.7 kB 🔴 +4.3 kB 🔴 +3.85 kB
assets/WidgetRange-Ci6z0jy0.js (removed) 16.7 kB 🟢 -16.7 kB 🟢 -4.31 kB 🟢 -3.85 kB
assets/WidgetRecordAudio-CuwrsY9I.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.63 kB 🔴 +4.13 kB
assets/WidgetRecordAudio-DEkSin9a.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.63 kB 🟢 -4.13 kB
assets/WaveAudioPlayer-DE0EGaRl.js (new) 12.8 kB 🔴 +12.8 kB 🔴 +3.49 kB 🔴 +3.06 kB
assets/WaveAudioPlayer-IALN4RON.js (removed) 12.8 kB 🟢 -12.8 kB 🟢 -3.5 kB 🟢 -3.06 kB
assets/WidgetCurve-BrKAZQOt.js (new) 11.3 kB 🔴 +11.3 kB 🔴 +3.51 kB 🔴 +3.16 kB
assets/WidgetCurve-D1bngB8R.js (removed) 11.3 kB 🟢 -11.3 kB 🟢 -3.5 kB 🟢 -3.18 kB
assets/TeamWorkspacesDialogContent-DgGGBscd.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -3 kB 🟢 -2.66 kB
assets/TeamWorkspacesDialogContent-vA7HC0xs.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +3 kB 🔴 +2.66 kB
assets/onboardingCloudRoutes-CukRxu3e.js (removed) 9.03 kB 🟢 -9.03 kB 🟢 -2.76 kB 🟢 -2.38 kB
assets/onboardingCloudRoutes-DXWiksTQ.js (new) 9.02 kB 🔴 +9.02 kB 🔴 +2.76 kB 🔴 +2.37 kB
assets/Load3DConfiguration-Bebkb0jq.js (new) 8.97 kB 🔴 +8.97 kB 🔴 +2.63 kB 🔴 +2.32 kB
assets/Load3DConfiguration-YK4IbGJf.js (removed) 8.97 kB 🟢 -8.97 kB 🟢 -2.64 kB 🟢 -2.32 kB
assets/SetMemberCreditLimitDialogContent-Btjx0F6M.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.37 kB 🟢 -2.08 kB
assets/SetMemberCreditLimitDialogContent-BZMkuejx.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.37 kB 🔴 +2.07 kB
assets/nodeTemplates-CaTZoSeE.js (removed) 8.33 kB 🟢 -8.33 kB 🟢 -2.87 kB 🟢 -2.54 kB
assets/nodeTemplates-N0EM-XKK.js (new) 8.33 kB 🔴 +8.33 kB 🔴 +2.87 kB 🔴 +2.54 kB
assets/NightlySurveyController-BJlaxrWZ.js (new) 7.56 kB 🔴 +7.56 kB 🔴 +2.58 kB 🔴 +2.28 kB
assets/NightlySurveyController-CzrGQuUO.js (removed) 7.56 kB 🟢 -7.56 kB 🟢 -2.59 kB 🟢 -2.28 kB
assets/types-DQDrDd50.js (new) 7 kB 🔴 +7 kB 🔴 +2.44 kB 🔴 +1.97 kB
assets/WidgetWithControl-Dxed4fTt.js (removed) 6.38 kB 🟢 -6.38 kB 🟢 -2.59 kB 🟢 -2.28 kB
assets/WidgetWithControl-mscExcY9.js (new) 6.37 kB 🔴 +6.37 kB 🔴 +2.59 kB 🔴 +2.29 kB
assets/tierBenefits-C6WZcZrR.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -2 kB 🟢 -1.75 kB
assets/tierBenefits-FQmqoHld.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +2 kB 🔴 +1.75 kB
assets/CancelSubscriptionDialogContent-BJJP3QEY.js (removed) 5.98 kB 🟢 -5.98 kB 🟢 -2.04 kB 🟢 -1.79 kB
assets/CancelSubscriptionDialogContent-BrBd9UGh.js (new) 5.98 kB 🔴 +5.98 kB 🔴 +2.03 kB 🔴 +1.79 kB
assets/load3dPreviewExtensions-CCoV0hLV.js (new) 5.94 kB 🔴 +5.94 kB 🔴 +1.85 kB 🔴 +1.63 kB
assets/load3dPreviewExtensions-DKelN0Oc.js (removed) 5.94 kB 🟢 -5.94 kB 🟢 -1.84 kB 🟢 -1.62 kB
assets/FreeTierDialogContent-CtEG8_S3.js (removed) 5.47 kB 🟢 -5.47 kB 🟢 -1.82 kB 🟢 -1.61 kB
assets/FreeTierDialogContent-DyLG6vfx.js (new) 5.47 kB 🔴 +5.47 kB 🔴 +1.83 kB 🔴 +1.61 kB
assets/CreateWorkspaceDialogContent-B5fbktqA.js (new) 5.19 kB 🔴 +5.19 kB 🔴 +1.82 kB 🔴 +1.58 kB
assets/CreateWorkspaceDialogContent-sB0tEIql.js (removed) 5.19 kB 🟢 -5.19 kB 🟢 -1.83 kB 🟢 -1.58 kB
assets/ChangeMemberRoleDialogContent-BExoP1dQ.js (new) 5.04 kB 🔴 +5.04 kB 🔴 +1.67 kB 🔴 +1.45 kB
assets/ChangeMemberRoleDialogContent-HVPl28dU.js (removed) 5.04 kB 🟢 -5.04 kB 🟢 -1.67 kB 🟢 -1.45 kB
assets/missingModelDownload-DOUflm7X.js (removed) 5.03 kB 🟢 -5.03 kB 🟢 -1.95 kB 🟢 -1.7 kB
assets/missingModelDownload-DZcSpNhq.js (new) 5.03 kB 🔴 +5.03 kB 🔴 +1.95 kB 🔴 +1.7 kB
assets/EditWorkspaceDialogContent-DC5N3tRI.js (new) 5 kB 🔴 +5 kB 🔴 +1.79 kB 🔴 +1.55 kB
assets/EditWorkspaceDialogContent-DGpBStut.js (removed) 5 kB 🟢 -5 kB 🟢 -1.79 kB 🟢 -1.55 kB
assets/WidgetTextarea-CzN3txKT.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.9 kB 🔴 +1.66 kB
assets/WidgetTextarea-DMPS9jUo.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.9 kB 🟢 -1.66 kB
assets/saveMesh-BOVZ_9h5.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.55 kB 🔴 +1.37 kB
assets/saveMesh-e9bA58bR.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.55 kB 🟢 -1.37 kB
assets/WorkspacePanelContent-BNBP4fJP.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.63 kB 🟢 -1.43 kB
assets/WorkspacePanelContent-Bo21Hiwj.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.63 kB 🔴 +1.43 kB
assets/InviteMemberDialogContent-bELUyoUQ.js (new) 4.75 kB 🔴 +4.75 kB 🔴 +1.61 kB 🔴 +1.4 kB
assets/InviteMemberDialogContent-DRRZ8zZc.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.61 kB 🟢 -1.4 kB
assets/ValueControlPopover-_FEbu-YC.js (new) 4.54 kB 🔴 +4.54 kB 🔴 +1.58 kB 🔴 +1.42 kB
assets/ValueControlPopover-CU95QZsH.js (removed) 4.54 kB 🟢 -4.54 kB 🟢 -1.58 kB 🟢 -1.41 kB
assets/DeleteWorkspaceDialogContent-BdxkNIXk.js (new) 3.91 kB 🔴 +3.91 kB 🔴 +1.47 kB 🔴 +1.26 kB
assets/DeleteWorkspaceDialogContent-DhsavUlg.js (removed) 3.91 kB 🟢 -3.91 kB 🟢 -1.47 kB 🟢 -1.26 kB
assets/LeaveWorkspaceDialogContent-9PMqVybe.js (removed) 3.73 kB 🟢 -3.73 kB 🟢 -1.42 kB 🟢 -1.24 kB
assets/LeaveWorkspaceDialogContent-CzkbLWC0.js (new) 3.73 kB 🔴 +3.73 kB 🔴 +1.41 kB 🔴 +1.22 kB
assets/RemoveMemberDialogContent-CB0oaA8_.js (new) 3.71 kB 🔴 +3.71 kB 🔴 +1.37 kB 🔴 +1.2 kB
assets/RemoveMemberDialogContent-hlzuqKq6.js (removed) 3.71 kB 🟢 -3.71 kB 🟢 -1.37 kB 🟢 -1.18 kB
assets/RevokeInviteDialogContent-BFgKlWgG.js (new) 3.62 kB 🔴 +3.62 kB 🔴 +1.38 kB 🔴 +1.2 kB
assets/RevokeInviteDialogContent-TqFMQTWP.js (removed) 3.62 kB 🟢 -3.62 kB 🟢 -1.38 kB 🟢 -1.2 kB
assets/InviteMemberUpsellDialogContent-2oGUuV9l.js (new) 3.51 kB 🔴 +3.51 kB 🔴 +1.26 kB 🔴 +1.09 kB
assets/InviteMemberUpsellDialogContent-DVmrD_Lq.js (removed) 3.51 kB 🟢 -3.51 kB 🟢 -1.26 kB 🟢 -1.1 kB
assets/workspaceCheckoutTelemetry-DpFnmoy0.js (new) 3.46 kB 🔴 +3.46 kB 🔴 +1.55 kB 🔴 +1.35 kB
assets/workspaceCheckoutTelemetry-DrJcOw8e.js (removed) 3.46 kB 🟢 -3.46 kB 🟢 -1.55 kB 🟢 -1.35 kB
assets/Media3DTop-BCmoqKWf.js (removed) 3.26 kB 🟢 -3.26 kB 🟢 -1.29 kB 🟢 -1.13 kB
assets/Media3DTop-wTMlRoeq.js (new) 3.26 kB 🔴 +3.26 kB 🔴 +1.29 kB 🔴 +1.13 kB
assets/GlobalToast-C1FiIlvs.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.25 kB 🔴 +1.11 kB
assets/GlobalToast-dunaLbeD.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.25 kB 🟢 -1.07 kB
assets/load3dAdvanced-BClD4Xyd.js (new) 2.87 kB 🔴 +2.87 kB 🔴 +1.13 kB 🔴 +978 B
assets/load3dAdvanced-DiPHDjyI.js (removed) 2.87 kB 🟢 -2.87 kB 🟢 -1.13 kB 🟢 -977 B
assets/SubscribeToRun-BDSdGW-9.js (removed) 2.45 kB 🟢 -2.45 kB 🟢 -1.06 kB 🟢 -925 B
assets/SubscribeToRun-CBOtoN8z.js (new) 2.45 kB 🔴 +2.45 kB 🔴 +1.06 kB 🔴 +923 B
assets/topupTracker-B-NRdn-K.js (removed) 2.05 kB 🟢 -2.05 kB 🟢 -884 B 🟢 -748 B
assets/MediaAudioTop-Cba-0zx8.js (removed) 1.67 kB 🟢 -1.67 kB 🟢 -838 B 🟢 -693 B
assets/MediaAudioTop-G1jbRo7i.js (new) 1.67 kB 🔴 +1.67 kB 🔴 +837 B 🔴 +697 B
assets/CloudRunButtonWrapper---AZwi3r.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -547 B 🟢 -482 B
assets/CloudRunButtonWrapper-Dvz6KRqx.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +545 B 🔴 +509 B
assets/cloudSessionCookie-BOvxdNKi.js (new) 989 B 🔴 +989 B 🔴 +464 B 🔴 +399 B
assets/cloudSessionCookie-CIbjpLIf.js (removed) 989 B 🟢 -989 B 🟢 -463 B 🟢 -412 B
assets/cloudBadges-D4YcRgD3.js (new) 971 B 🔴 +971 B 🔴 +546 B 🔴 +462 B
assets/cloudBadges-DKJpYdyU.js (removed) 971 B 🟢 -971 B 🟢 -547 B 🟢 -463 B
assets/Load3DAdvanced-Cfi12Loh.js (new) 813 B 🔴 +813 B 🔴 +454 B 🔴 +410 B
assets/Load3DAdvanced-V8D-i8ha.js (removed) 813 B 🟢 -813 B 🟢 -452 B 🟢 -406 B
assets/nightlyBadges-BhXebbM8.js (new) 462 B 🔴 +462 B 🔴 +302 B 🔴 +251 B
assets/nightlyBadges-CylJlssn.js (removed) 462 B 🟢 -462 B 🟢 -302 B 🟢 -249 B
assets/missingModelDownload-CP4PCtAc.js (new) 228 B 🔴 +228 B 🔴 +150 B 🔴 +129 B
assets/missingModelDownload-DPtxVH-q.js (removed) 228 B 🟢 -228 B 🟢 -149 B 🟢 -130 B
assets/SubscriptionPanelContentWorkspace-BNW-KCrM.js (removed) 179 B 🟢 -179 B 🟢 -117 B 🟢 -90 B
assets/SubscriptionPanelContentWorkspace-BshMlWDE.js (new) 179 B 🔴 +179 B 🔴 +117 B 🔴 +84 B
assets/Load3dViewerContent-C7Dli7Un.js (new) 137 B 🔴 +137 B 🔴 +103 B 🔴 +90 B
assets/Load3dViewerContent-DMkz4Eaa.js (removed) 137 B 🟢 -137 B 🟢 -103 B 🟢 -90 B
assets/Load3DAdvanced-D3ZBQkAF.js (removed) 122 B 🟢 -122 B 🟢 -97 B 🟢 -96 B
assets/Load3DAdvanced-DYg_o1Vh.js (new) 122 B 🔴 +122 B 🔴 +97 B 🔴 +89 B
assets/WidgetLegacy-628ULeaF.js (removed) 117 B 🟢 -117 B 🟢 -106 B 🟢 -101 B
assets/WidgetLegacy-8sc-7gHG.js (new) 117 B 🔴 +117 B 🔴 +106 B 🔴 +97 B
assets/workflowDraftStoreV2-C2Gd85u4.js (removed) 112 B 🟢 -112 B 🟢 -101 B 🟢 -105 B
assets/workflowDraftStoreV2-CJQq_YLk.js (new) 112 B 🔴 +112 B 🔴 +101 B 🔴 +109 B
assets/Load3D-5HaeAdQe.js (new) 98 B 🔴 +98 B 🔴 +89 B 🔴 +88 B
assets/Load3D-6Xyrc3zv.js (removed) 98 B 🟢 -98 B 🟢 -89 B 🟢 -82 B
assets/changeTracker-CCUMRyZT.js (removed) 91 B 🟢 -91 B 🟢 -93 B 🟢 -89 B
assets/changeTracker-uJiGEITz.js (new) 91 B 🔴 +91 B 🔴 +93 B 🔴 +87 B

Status: 71 added / 71 removed / 206 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.3 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.7 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.0 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.8 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.3 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.2 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.4 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.6 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 130ms TBT · 94.9 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.1 MB heap
vue-large-graph-idle: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 161.2 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 180ms TBT · 162.6 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 48.6 MB heap

⚠️ 7 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 454ms 528ms +16% ⚠️ z=4.3
canvas-zoom-sweep: task duration 373ms 375ms +1% ⚠️ z=2.1
large-graph-idle: task duration 665ms 665ms -0% ⚠️ z=2.3
large-graph-pan: task duration 1299ms 1327ms +2% ⚠️ z=5.7
large-graph-pan: script duration 442ms 470ms +6% ⚠️ z=3.1
minimap-idle: task duration 662ms 683ms +3% ⚠️ z=3.3
subgraph-idle: task duration 477ms 478ms +0% ⚠️ z=3.4
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 9ms 8ms -8% z=-2.8
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 9 -10% z=-3.8
canvas-idle: task duration 454ms 528ms +16% ⚠️ z=4.3
canvas-idle: script duration 16ms 18ms +10% z=-3.3
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 68.4 MB 68.3 MB -0%
canvas-idle: DOM nodes 20 18 -10% z=-3.6
canvas-idle: event listeners 4 5 +25% z=-1.4
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-0.4
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 4ms -7% z=-0.1
canvas-mouse-sweep: style recalc duration 43ms 38ms -12% z=-1.5
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 77 74 -4% z=-2.0
canvas-mouse-sweep: task duration 901ms 846ms -6% z=-0.3
canvas-mouse-sweep: script duration 128ms 121ms -6% z=-2.3
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 50.0 MB 55.5 MB +11%
canvas-mouse-sweep: DOM nodes -275 -110 -60% z=-66.4
canvas-mouse-sweep: event listeners -148 -72 -51% z=-19.3
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=0.5
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms +2% z=-1.4
canvas-zoom-sweep: style recalc duration 17ms 18ms +7% z=-0.9
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 33 +5% z=2.7
canvas-zoom-sweep: task duration 373ms 375ms +1% ⚠️ z=2.1
canvas-zoom-sweep: script duration 19ms 19ms -0% z=-2.6
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 71.6 MB 71.7 MB +0%
canvas-zoom-sweep: DOM nodes 77 78 +1% z=-1.6
canvas-zoom-sweep: event listeners 19 19 +0% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms -0% z=-0.2
dom-widget-clipping: p95 frame time 17ms 17ms -1%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 8ms 8ms -2% z=-2.5
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 12 11 -13% z=-5.2
dom-widget-clipping: task duration 372ms 367ms -1% z=0.2
dom-widget-clipping: script duration 59ms 58ms -1% z=-3.1
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.2 MB 53.0 MB -0%
dom-widget-clipping: DOM nodes 20 17 -15% z=-3.6
dom-widget-clipping: event listeners 0 0 +0% variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.2
large-graph-idle: p95 frame time 17ms 17ms -0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 8ms 9ms +6% z=-3.3
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 8 9 +13% z=-8.3
large-graph-idle: task duration 665ms 665ms -0% ⚠️ z=2.3
large-graph-idle: script duration 106ms 104ms -2% z=0.1
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 62.2 MB 63.8 MB +3%
large-graph-idle: DOM nodes -275 -274 -0% z=-330.5
large-graph-idle: event listeners -144 -143 -1% z=-27.7
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 15ms +4% z=-3.1
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -1% z=-2.4
large-graph-pan: task duration 1299ms 1327ms +2% ⚠️ z=5.7
large-graph-pan: script duration 442ms 470ms +6% ⚠️ z=3.1
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 60.6 MB 57.1 MB -6%
large-graph-pan: DOM nodes -277 -279 +1% z=-180.3
large-graph-pan: event listeners -144 -143 -1% z=-178.6
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms +0%
large-graph-zoom: layout duration 7ms 7ms +4%
large-graph-zoom: style recalc duration 14ms 13ms -5%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 64 -2%
large-graph-zoom: task duration 1511ms 1554ms +3%
large-graph-zoom: script duration 534ms 564ms +6%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 57.9 MB 60.3 MB +4%
large-graph-zoom: DOM nodes -281 -283 +1%
large-graph-zoom: event listeners -148 -163 +10%
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 8ms 8ms -0% z=-2.1
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 9 +6% z=-1.6
minimap-idle: task duration 662ms 683ms +3% ⚠️ z=3.3
minimap-idle: script duration 104ms 113ms +8% z=1.5
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 64.0 MB 64.2 MB +0%
minimap-idle: DOM nodes -277 -276 -0% z=-215.8
minimap-idle: event listeners -144 -143 -1% z=-223.5
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 11ms 11ms +3% z=-1.4
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 47 +0% z=-1.6
subgraph-dom-widget-clipping: task duration 405ms 401ms -1% z=1.2
subgraph-dom-widget-clipping: script duration 119ms 121ms +1% z=-1.1
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.5 MB 53.3 MB -0%
subgraph-dom-widget-clipping: DOM nodes 20 20 +0% z=-1.9
subgraph-dom-widget-clipping: event listeners 6 6 +0% z=-1.7
subgraph-idle: avg frame time 17ms 17ms +0% z=0.9
subgraph-idle: p95 frame time 17ms 17ms -1%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 9ms -8% z=-2.4
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 10 10 -5% z=-2.1
subgraph-idle: task duration 477ms 478ms +0% ⚠️ z=3.4
subgraph-idle: script duration 16ms 15ms -5% z=-2.0
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 68.3 MB 56.4 MB -17%
subgraph-idle: DOM nodes 20 -127 -735% z=-99.5
subgraph-idle: event listeners 4 -72 -1900% 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 5ms +5% z=-0.3
subgraph-mouse-sweep: style recalc duration 35ms 38ms +8% z=-1.3
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 75 76 +1% z=-2.1
subgraph-mouse-sweep: task duration 779ms 810ms +4% z=0.6
subgraph-mouse-sweep: script duration 93ms 93ms +1% z=-1.1
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 59.3 MB 45.6 MB -23%
subgraph-mouse-sweep: DOM nodes 61 -273 -547% z=-151.9
subgraph-mouse-sweep: event listeners 4 -148 -3800% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +0%
subgraph-transition-enter: layout duration 14ms 12ms -11%
subgraph-transition-enter: style recalc duration 32ms 32ms -0%
subgraph-transition-enter: layout count 15 15 +0%
subgraph-transition-enter: style recalc count 19 19 +0%
subgraph-transition-enter: task duration 1019ms 926ms -9%
subgraph-transition-enter: script duration 39ms 35ms -10%
subgraph-transition-enter: TBT 138ms 130ms -6%
subgraph-transition-enter: heap used 92.4 MB 94.9 MB +3%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2371 2371 +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 36ms 36ms -1%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 248 -1%
viewport-pan-sweep: task duration 4437ms 4519ms +2%
viewport-pan-sweep: script duration 1395ms 1421ms +2%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 66.3 MB 67.1 MB +1%
viewport-pan-sweep: DOM nodes -275 -278 +1%
viewport-pan-sweep: event listeners -128 -128 +0%
vue-large-graph-idle: avg frame time 18ms 18ms +2%
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 16594ms 17349ms +5%
vue-large-graph-idle: script duration 556ms 588ms +6%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.0 MB 161.2 MB +1%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16387 -16387 +0%
vue-large-graph-pan: avg frame time 18ms 18ms -0%
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 17ms 17ms -0%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 138 146 +5%
vue-large-graph-pan: task duration 20372ms 20600ms +1%
vue-large-graph-pan: script duration 889ms 868ms -2%
vue-large-graph-pan: TBT 147ms 180ms +22%
vue-large-graph-pan: heap used 156.6 MB 162.6 MB +4%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16381 -16382 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.1
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 0ms 1ms +84% z=-5.8
workflow-execution: style recalc duration 17ms 20ms +15% z=-1.9
workflow-execution: layout count 2 3 +25% z=-4.5
workflow-execution: style recalc count 12 14 +13% z=-2.1
workflow-execution: task duration 116ms 115ms -2% z=-0.8
workflow-execution: script duration 10ms 10ms -1% z=-6.6
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 48.7 MB 48.6 MB -0%
workflow-execution: DOM nodes 119 125 +5% z=-5.1
workflow-execution: event listeners 67 66 -1% z=3.2
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-07-28T18:26:37.371Z",
  "gitSha": "403a639c8a364929ffedaadbeb3944a4142e757c",
  "branch": "codex/workflow-rum-context",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2134.426000000019,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.8900000000000015,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 600.637,
      "heapDeltaBytes": 3920512,
      "heapUsedBytes": 71810780,
      "domNodes": 16,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 20.212,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2010.8979999999974,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.694000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 454.67400000000004,
      "heapDeltaBytes": 3650092,
      "heapUsedBytes": 71351196,
      "domNodes": 20,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 15.405,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1858.6770000000001,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 38.864,
      "layouts": 12,
      "layoutDurationMs": 3.746,
      "taskDurationMs": 869.0060000000001,
      "heapDeltaBytes": -17828144,
      "heapUsedBytes": 50221888,
      "domNodes": -274,
      "jsHeapTotalBytes": 21229568,
      "scriptDurationMs": 121.454,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1793.978999999922,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 36.896,
      "layouts": 12,
      "layoutDurationMs": 3.439,
      "taskDurationMs": 823.192,
      "heapDeltaBytes": -1812948,
      "heapUsedBytes": 66070620,
      "domNodes": 55,
      "jsHeapTotalBytes": 21626880,
      "scriptDurationMs": 119.589,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1723.0199999999627,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.622,
      "layouts": 6,
      "layoutDurationMs": 0.51,
      "taskDurationMs": 365.092,
      "heapDeltaBytes": 7267296,
      "heapUsedBytes": 75147720,
      "domNodes": 78,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 18.022999999999996,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1736.6949999999406,
      "styleRecalcs": 33,
      "styleRecalcDurationMs": 18.887,
      "layouts": 6,
      "layoutDurationMs": 0.6449999999999999,
      "taskDurationMs": 385.299,
      "heapDeltaBytes": 7346128,
      "heapUsedBytes": 75258196,
      "domNodes": 78,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 20.666,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 590.0669999999764,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.797,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 365.36400000000003,
      "heapDeltaBytes": -12385096,
      "heapUsedBytes": 55545340,
      "domNodes": 14,
      "jsHeapTotalBytes": 21889024,
      "scriptDurationMs": 57.434,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 591.611999999941,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 8.062999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 369.551,
      "heapDeltaBytes": -12422988,
      "heapUsedBytes": 55530080,
      "domNodes": 20,
      "jsHeapTotalBytes": 21626880,
      "scriptDurationMs": 57.888999999999996,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2029.2200000000093,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.692000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 657.4680000000001,
      "heapDeltaBytes": 6350124,
      "heapUsedBytes": 65243752,
      "domNodes": -276,
      "jsHeapTotalBytes": 5308416,
      "scriptDurationMs": 101.89199999999998,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2034.9630000000616,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.879999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 671.7299999999999,
      "heapDeltaBytes": 7301184,
      "heapUsedBytes": 68573720,
      "domNodes": -272,
      "jsHeapTotalBytes": 3997696,
      "scriptDurationMs": 105.42500000000001,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2170.166999999992,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 15.983999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1344.7779999999998,
      "heapDeltaBytes": 3379500,
      "heapUsedBytes": 63321880,
      "domNodes": -279,
      "jsHeapTotalBytes": 5251072,
      "scriptDurationMs": 487.247,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2218.3560000000853,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.714000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1308.344,
      "heapDeltaBytes": -3767000,
      "heapUsedBytes": 56387608,
      "domNodes": -278,
      "jsHeapTotalBytes": 5832704,
      "scriptDurationMs": 451.87699999999995,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3311.7599999999925,
      "styleRecalcs": 63,
      "styleRecalcDurationMs": 12.485999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.375000000000002,
      "taskDurationMs": 1603.7449999999997,
      "heapDeltaBytes": 3136356,
      "heapUsedBytes": 66299696,
      "domNodes": -285,
      "jsHeapTotalBytes": 8978432,
      "scriptDurationMs": 599.733,
      "eventListeners": -178,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3214.244000000008,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.199000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.396999999999999,
      "taskDurationMs": 1504.3999999999999,
      "heapDeltaBytes": -1227956,
      "heapUsedBytes": 60244928,
      "domNodes": -281,
      "jsHeapTotalBytes": 8192000,
      "scriptDurationMs": 527.7610000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2072.710000000029,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.199000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 666.6080000000001,
      "heapDeltaBytes": 7112292,
      "heapUsedBytes": 67418700,
      "domNodes": -276,
      "jsHeapTotalBytes": 4784128,
      "scriptDurationMs": 106.564,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2039.158000000043,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.429000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 698.9159999999999,
      "heapDeltaBytes": 6819300,
      "heapUsedBytes": 67182576,
      "domNodes": -276,
      "jsHeapTotalBytes": 3997696,
      "scriptDurationMs": 118.5,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 593.2739999999512,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.865,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 409.45699999999994,
      "heapDeltaBytes": -12123340,
      "heapUsedBytes": 55854396,
      "domNodes": 20,
      "jsHeapTotalBytes": 22151168,
      "scriptDurationMs": 123.01400000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 593.2669999999689,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.910000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 392.22999999999996,
      "heapDeltaBytes": -12275756,
      "heapUsedBytes": 55947376,
      "domNodes": 20,
      "jsHeapTotalBytes": 21889024,
      "scriptDurationMs": 119.149,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2022.6669999999558,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.166999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 448.974,
      "heapDeltaBytes": 3633260,
      "heapUsedBytes": 71693036,
      "domNodes": 18,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 13.998999999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2046.199999999999,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.972,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 506.4080000000001,
      "heapDeltaBytes": -21635400,
      "heapUsedBytes": 46519144,
      "domNodes": -272,
      "jsHeapTotalBytes": 19656704,
      "scriptDurationMs": 15.921000000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1741.4509999999837,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 39.218999999999994,
      "layouts": 16,
      "layoutDurationMs": 4.836,
      "taskDurationMs": 823.241,
      "heapDeltaBytes": -19091064,
      "heapUsedBytes": 49002068,
      "domNodes": -272,
      "jsHeapTotalBytes": 19918848,
      "scriptDurationMs": 94.53,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1714.5890000000463,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 37.166,
      "layouts": 16,
      "layoutDurationMs": 4.358,
      "taskDurationMs": 796.922,
      "heapDeltaBytes": -21557484,
      "heapUsedBytes": 46574996,
      "domNodes": -273,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 92.31400000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1399.731000000088,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 31.982999999999997,
      "layouts": 15,
      "layoutDurationMs": 12.295999999999998,
      "taskDurationMs": 926.237,
      "heapDeltaBytes": 31391180,
      "heapUsedBytes": 99516400,
      "domNodes": 13673,
      "jsHeapTotalBytes": 13631488,
      "scriptDurationMs": 35.231,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 130,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8340.697000000035,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 36.058,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4594.726000000001,
      "heapDeltaBytes": 11150660,
      "heapUsedBytes": 71281604,
      "domNodes": -279,
      "jsHeapTotalBytes": 9154560,
      "scriptDurationMs": 1462.321,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.660000000000036,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8233.745999999996,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 35.686,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4442.717,
      "heapDeltaBytes": 9841460,
      "heapUsedBytes": 69480028,
      "domNodes": -276,
      "jsHeapTotalBytes": 6270976,
      "scriptDurationMs": 1379.086,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17522.040000000005,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17495.047,
      "heapDeltaBytes": -36527248,
      "heapUsedBytes": 172324792,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13307904,
      "scriptDurationMs": 586.549,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.33666666666662,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17245.090000000004,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17202.581000000002,
      "heapDeltaBytes": -59289540,
      "heapUsedBytes": 165720676,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11735040,
      "scriptDurationMs": 590.097,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20557.074999999997,
      "styleRecalcs": 143,
      "styleRecalcDurationMs": 16.878999999999976,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20509.097,
      "heapDeltaBytes": -68389584,
      "heapUsedBytes": 164245380,
      "domNodes": -8312,
      "jsHeapTotalBytes": -15929344,
      "scriptDurationMs": 863.0759999999999,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 210,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20760.50500000008,
      "styleRecalcs": 148,
      "styleRecalcDurationMs": 17.452999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20691.108,
      "heapDeltaBytes": -41246680,
      "heapUsedBytes": 176849496,
      "domNodes": -8312,
      "jsHeapTotalBytes": -14442496,
      "scriptDurationMs": 873.3850000000001,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 149,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 462.270999999987,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 18.748,
      "layouts": 2,
      "layoutDurationMs": 0.43999999999999984,
      "taskDurationMs": 112.64699999999999,
      "heapDeltaBytes": -15952648,
      "heapUsedBytes": 51180232,
      "domNodes": 130,
      "jsHeapTotalBytes": 7471104,
      "scriptDurationMs": 9.72,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 465.70699999995213,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 21.125,
      "layouts": 3,
      "layoutDurationMs": 0.975,
      "taskDurationMs": 116.479,
      "heapDeltaBytes": -16237612,
      "heapUsedBytes": 50736248,
      "domNodes": 119,
      "jsHeapTotalBytes": 8257536,
      "scriptDurationMs": 9.607000000000001,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Workflow queueing now derives and persists workflow context, propagates queue intent, and emits queued or submission-error telemetry. Telemetry contracts, registry dispatch, Datadog RUM reporting, execution outcomes, and local RUM proxy routing are updated.

Changes

Workflow telemetry

Layer / File(s) Summary
Context contracts and derivation
src/platform/telemetry/types.ts, src/platform/telemetry/utils/*
Defines workflow context, queue intent, queued/error metadata, provider methods, and conversion from execution context.
Queue context capture and outcome propagation
src/scripts/app.ts, src/stores/executionStore.ts, src/scripts/ui.ts, src/composables/useCoreCommands.ts, src/scripts/app.test.ts, src/stores/executionStore.test.ts
Captures workflow context during queueing, persists it with jobs, forwards queue intent, filters submission errors, and includes context in execution telemetry.
Telemetry dispatch and provider reporting
src/platform/telemetry/TelemetryRegistry.ts, src/platform/telemetry/providers/cloud/*
Dispatches workflow queue/error events and reports them through Datadog RUM, including workflow context in execution vitals.

Datadog RUM proxy

Layer / File(s) Summary
Local RUM proxy configuration
src/platform/telemetry/initDatadogRum.ts, src/platform/telemetry/initDatadogRum.test.ts, vite.config.mts
Routes local Datadog RUM traffic through /api/datadog-rum, rewrites intake paths, and removes authorization and cookie headers from proxied requests.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant LegacyUI
  participant ComfyApp
  participant ExecutionStore
  participant TelemetryRegistry
  participant DatadogRumTelemetryProvider
  LegacyUI->>ComfyApp: queuePrompt with workflowQueueIntent
  ComfyApp->>ComfyApp: derive workflowContext
  ComfyApp->>ExecutionStore: store workflowContext with queued job
  ComfyApp->>TelemetryRegistry: trackWorkflowQueued or trackWorkflowError
  TelemetryRegistry->>DatadogRumTelemetryProvider: dispatch metadata
  ExecutionStore->>TelemetryRegistry: trackExecutionOutcome with workflowContext
Loading

Possibly related PRs

Suggested labels: cloud/1.47

Suggested reviewers: christian-byrne


Important

Pre-merge checks failed

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

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning No pull request description was provided, so the required template sections are missing. Add the template sections: Summary, Changes, Review Focus, and Screenshots if applicable.
End-To-End Regression Coverage For Fixes ❓ Inconclusive PR title/commit subjects are not provided, so I can't tell whether bug-fix language is present and the fail condition is met. Please provide the PR title or commit subjects so I can verify whether the PR is framed as a bug fix and decide if browser_tests/ coverage is required.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Adr Compliance For Entity/Litegraph Changes ✅ Passed No changed files are under src/lib/litegraph/, src/ecs/, or graph-entity paths, so ADR 0003/0008 checks are not applicable.
Title check ✅ Passed The title accurately summarizes the main change: adding workflow context to Datadog RUM events.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/workflow-rum-context

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 coderabbitai Bot 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/telemetry/utils/getExecutionContext.test.ts`:
- Line 5: The tests currently use graph-agnostic fixtures and do not verify
explicit graph selection. In
src/platform/telemetry/utils/getExecutionContext.test.ts:5, create distinct
graph fixtures and assert returned node metrics come from the supplied graph; in
src/composables/useRunButtonTelemetry.test.ts:35-37, make context resolution
depend on app.rootGraph and assert the emitted telemetry payload reflects that
graph. Ensure both workflow-context tests directly validate graph-sensitive
behavior rather than only validating mocks.

In `@src/platform/telemetry/utils/workflowExecutionContext.test.ts`:
- Around line 7-42: Expand the toWorkflowExecutionContext tests beyond the
single interior case: add boundary cases for total_node_count 20, 21, 50, 51,
100, and 101 with the expected complexity_bucket values, and cover
dependency_profile outputs core_only, custom_nodes, mixed, and partner_nodes
using representative execution contexts. Reuse shared base context/options and
assert only the derived fields needed to verify these boundary and profile
rules.

In `@src/scripts/app.test.ts`:
- Around line 361-386: Add a dedicated test beside the existing prompt
validation test in the app queuePrompt suite for an account-precondition
PromptExecutionError, using the sign_in_required error type. Reuse the telemetry
registry setup and cleanup, invoke app.queuePrompt, and assert
trackWorkflowError is not called.

In `@src/scripts/app.ts`:
- Around line 1741-1748: Sanitize the error before passing it to
trackWorkflowError in the workflow queue submission path. Within the existing
non-PromptExecutionError branch, replace the raw error value with a sanitized
error context that removes message and stack details while preserving the
telemetry event structure and workflowContext.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4e896ff6-12f2-48ec-a222-279532297c67

📥 Commits

Reviewing files that changed from the base of the PR and between e1b25e7 and 019f7e2.

📒 Files selected for processing (18)
  • src/composables/useCoreCommands.ts
  • src/composables/useRunButtonTelemetry.test.ts
  • src/composables/useRunButtonTelemetry.ts
  • src/platform/telemetry/TelemetryRegistry.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts
  • src/platform/telemetry/providers/cloud/GtmTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.test.ts
  • src/platform/telemetry/providers/host/HostTelemetrySink.test.ts
  • src/platform/telemetry/types.ts
  • src/platform/telemetry/utils/getExecutionContext.test.ts
  • src/platform/telemetry/utils/getExecutionContext.ts
  • src/platform/telemetry/utils/workflowExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/stores/executionStore.test.ts
  • src/stores/executionStore.ts

Comment thread src/platform/telemetry/utils/getExecutionContext.test.ts Outdated
Comment thread src/scripts/app.test.ts Outdated
Comment thread src/scripts/app.ts Outdated
@codecov

codecov Bot commented Jul 24, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.88525% with 16 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/scripts/ui.ts 0.00% 8 Missing ⚠️
src/composables/useCoreCommands.ts 0.00% 3 Missing ⚠️
src/scripts/app.ts 93.10% 1 Missing and 1 partial ⚠️
src/services/autoQueueService.ts 0.00% 2 Missing ⚠️
src/stores/executionStore.ts 98.07% 1 Missing ⚠️
@@            Coverage Diff             @@
##             main   #14084      +/-   ##
==========================================
+ Coverage   79.50%   79.52%   +0.01%     
==========================================
  Files        1750     1751       +1     
  Lines       97739    97822      +83     
  Branches    32541    32584      +43     
==========================================
+ Hits        77708    77790      +82     
  Misses      19653    19653              
- Partials      378      379       +1     
Flag Coverage Δ
unit 69.13% <86.88%> (+0.05%) ⬆️

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

Files with missing lines Coverage Δ
...try/providers/cloud/DatadogRumTelemetryProvider.ts 100.00% <100.00%> (ø)
src/platform/telemetry/types.ts 100.00% <100.00%> (ø)
...atform/telemetry/utils/workflowExecutionContext.ts 100.00% <100.00%> (ø)
src/stores/executionStore.ts 95.30% <98.07%> (+0.31%) ⬆️
src/scripts/app.ts 75.70% <93.10%> (+0.39%) ⬆️
src/services/autoQueueService.ts 77.27% <0.00%> (-9.10%) ⬇️
src/composables/useCoreCommands.ts 59.35% <0.00%> (-0.70%) ⬇️
src/scripts/ui.ts 35.58% <0.00%> (-0.27%) ⬇️

... and 3 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.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/composables/useRunButtonTelemetry.test.ts`:
- Around line 98-100: Update the assertion around state.getExecutionContext in
the telemetry test to verify the expected rootGraph argument without requiring
an exact invocation count. Preserve the existing payload assertions that
validate app.rootGraph and focus the test on resulting telemetry behavior rather
than helper call frequency.

In `@src/scripts/app.ts`:
- Around line 1768-1775: In src/scripts/app.ts:1768-1775, replace the broad
PromptExecutionError exclusion with a check that ignores only prompt-validation
and account-precondition errors, while tracking the sanitized workflow error for
all other submission failures. In src/scripts/app.test.ts:360-394, add a
PromptExecutionError fixture outside those excluded categories and assert its
workflow-error payload is emitted, covering queue success with handled submit
errors versus ignored error types.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ce9e95cc-4e29-499a-bb93-4eb3419d6ba3

📥 Commits

Reviewing files that changed from the base of the PR and between 019f7e2 and 3a187d1.

📒 Files selected for processing (13)
  • src/composables/useCoreCommands.ts
  • src/composables/useRunButtonTelemetry.test.ts
  • src/composables/useRunButtonTelemetry.ts
  • src/platform/telemetry/TelemetryRegistry.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts
  • src/platform/telemetry/types.ts
  • src/platform/telemetry/utils/getExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/scripts/ui.ts
💤 Files with no reviewable changes (1)
  • src/platform/telemetry/utils/workflowExecutionContext.ts

Comment thread src/composables/useRunButtonTelemetry.test.ts Outdated
Comment thread src/scripts/app.ts Outdated

@coderabbitai coderabbitai Bot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/scripts/app.test.ts (1)

328-354: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Cover explicit run-button metadata.

This verifies only fallback metadata. Add a case with a valid trigger_source and
subscribe_to_run: true, asserting both fields in the emitted queue payload;
the forwarding branch at Lines 1738-1741 is otherwise untested.

As per path instructions, prefer observable emitted-telemetry payload assertions
and add targeted coverage for changed telemetry behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/scripts/app.test.ts` around lines 328 - 354, Extend the queue telemetry
tests around app.queuePrompt with a case using valid trigger_source metadata and
subscribe_to_run: true. Assert the emitted trackWorkflowQueued payload preserves
both fields, covering the forwarding branch while continuing to verify the
observable telemetry payload.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/scripts/app.test.ts`:
- Around line 328-354: Extend the queue telemetry tests around app.queuePrompt
with a case using valid trigger_source metadata and subscribe_to_run: true.
Assert the emitted trackWorkflowQueued payload preserves both fields, covering
the forwarding branch while continuing to verify the observable telemetry
payload.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4f63c10d-8cd6-4b3e-87fd-bd43af2a2f8e

📥 Commits

Reviewing files that changed from the base of the PR and between 3a187d1 and b6bc757.

📒 Files selected for processing (3)
  • src/composables/useRunButtonTelemetry.test.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
💤 Files with no reviewable changes (1)
  • src/composables/useRunButtonTelemetry.test.ts

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 24, 2026
@huang47
huang47 marked this pull request as ready for review July 24, 2026 21:44
@huang47
huang47 requested a review from a team July 24, 2026 21:44
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jul 24, 2026

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/scripts/app.ts`:
- Around line 1643-1649: Update the enqueue flow around the queueItems push and
nextQueueRequestId to snapshot the workflow context inputs before the
authentication await, then use that snapshot when deriving queued telemetry so
tab switches cannot alter the queued graph context. Add a regression test
covering a tab switch while authentication is pending and verify telemetry
reflects the graph active at enqueue time.

In `@src/scripts/ui.ts`:
- Around line 493-495: Handle rejected promises from app.queuePrompt in both
src/scripts/ui.ts lines 493-495 and 602-609: attach the established user-facing
error handling to each legacy click handler so authentication or
prompt-construction failures are surfaced rather than becoming unhandled
rejections. Preserve the existing telemetry and queueing behavior for successful
calls.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cb1c354a-ae47-4008-b196-3f9286aa2092

📥 Commits

Reviewing files that changed from the base of the PR and between b6bc757 and 4467d6f.

📒 Files selected for processing (6)
  • src/composables/useCoreCommands.ts
  • src/composables/useRunButtonTelemetry.ts
  • src/platform/telemetry/types.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/scripts/ui.ts

Comment thread src/scripts/app.ts Outdated
Comment thread src/scripts/ui.ts Outdated
@huang47
huang47 force-pushed the codex/workflow-rum-context branch from 4467d6f to 0a6e557 Compare July 24, 2026 22:34

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/telemetry/types.ts`:
- Around line 191-196: Constrain WorkflowErrorMetadata.error in
src/platform/telemetry/types.ts:191-196 and the trackWorkflowError handling in
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts:15-26 to a
fixed sanitized error payload rather than caller-controlled unknown values.
Update
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts:59-86
to assert only the sanitized error context is forwarded.

In `@src/scripts/app.test.ts`:
- Around line 284-336: Strengthen the test “keeps queue telemetry attached to
the graph selected at enqueue” so the queued and subsequent graphs have distinct
node counts, then assert telemetry reports the queued graph’s unique
total_node_count. Update the graph fixtures and expectation without changing the
test’s intended enqueue-time selection behavior.

In `@src/scripts/app.ts`:
- Around line 1646-1665: The queue item currently stores the shared rootGraph
reference before the asynchronous getAuthToken gap, allowing later configure()
calls to change the graph used for submission. Update the queue submission flow
around queuedGraph, queuedWorkflow, and executionContext to capture or process
an immutable graph/workflow payload after authentication resolves, ensuring
graphToPrompt and workflowContext use the same current submission state rather
than stale queued data.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6845a638-792e-4484-8def-7f16a3341e16

📥 Commits

Reviewing files that changed from the base of the PR and between 4467d6f and 0a6e557.

📒 Files selected for processing (16)
  • src/composables/useCoreCommands.ts
  • src/composables/useRunButtonTelemetry.test.ts
  • src/composables/useRunButtonTelemetry.ts
  • src/platform/telemetry/TelemetryRegistry.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts
  • src/platform/telemetry/types.ts
  • src/platform/telemetry/utils/getExecutionContext.test.ts
  • src/platform/telemetry/utils/getExecutionContext.ts
  • src/platform/telemetry/utils/workflowExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/scripts/ui.ts
  • src/stores/executionStore.test.ts
  • src/stores/executionStore.ts

Comment thread src/platform/telemetry/types.ts Outdated
Comment thread src/scripts/app.test.ts Outdated
Comment thread src/scripts/app.ts
@huang47

huang47 commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/telemetry/utils/workflowExecutionContext.test.ts`:
- Around line 27-42: Add coverage in the toWorkflowExecutionContext tests for a
template execution context by creating a fixture with is_template set to true
and asserting the returned workflow_type is 'template'. Keep the existing
custom-workflow assertions and validate the complete bounded context output for
the template case.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c76776ee-63d4-4a16-b6fd-493e1ba4106c

📥 Commits

Reviewing files that changed from the base of the PR and between 1039660 and 5a24a33.

📒 Files selected for processing (12)
  • src/composables/useCoreCommands.ts
  • src/platform/telemetry/TelemetryRegistry.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts
  • src/platform/telemetry/types.ts
  • src/platform/telemetry/utils/workflowExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/scripts/ui.ts
  • src/stores/executionStore.test.ts
  • src/stores/executionStore.ts

Comment thread src/platform/telemetry/utils/workflowExecutionContext.test.ts
@huang47

huang47 commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

@CodeRabbit full review

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/composables/useCoreCommands.ts (1)

506-509: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated inline metadata type — reuse WorkflowQueueIntent.

The same inline object type is repeated across three commands. Since WorkflowQueueIntent already models this exact shape, use it directly to avoid the types drifting apart.

♻️ Suggested refactor
+import type { WorkflowQueueIntent } from '`@/platform/telemetry/types`'
...
-      function: async (metadata?: {
-        subscribe_to_run?: boolean
-        trigger_source?: ExecutionTriggerSource
-      }) => {
+      function: async (metadata?: WorkflowQueueIntent) => {

(repeat for all three commands)

Also applies to: 529-532, 551-554

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/composables/useCoreCommands.ts` around lines 506 - 509, Replace the
duplicated inline metadata object types in all three command callbacks with the
existing WorkflowQueueIntent type. Update the callback parameter declarations
around the three command functions while preserving their optional metadata
behavior and fields.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/telemetry/initDatadogRum.test.ts`:
- Around line 78-81: Update the proxy assertion in the initDatadogRum test to
compare the complete same-origin URL produced by new
URL(LOCAL_DATADOG_RUM_PROXY, window.location.origin).href, rather than matching
only the /api/datadog-rum suffix. Keep the conditional proxy assertion behavior
unchanged.

In `@src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts`:
- Around line 55-82: Add a direct unit test alongside the existing
`trackWorkflowError` test in `DatadogRumTelemetryProvider` for a call without
`workflowContext`. Assert that `addError` receives the expected error name,
operation, phase, and product fields only, with no workflow context fields.

In `@vite.config.mts`:
- Line 279: Update the proxy configuration around DATADOG_RUM_PROXY_PATH so
localhost, 127.0.0.1, and [::1] route /api/datadog-rum through
datadogRumProxyConfig in the local proxy table, rather than the generic /api
backend proxy. Preserve the existing cloud proxy behavior and ensure the default
localhost distribution selects the RUM-specific route.

---

Outside diff comments:
In `@src/composables/useCoreCommands.ts`:
- Around line 506-509: Replace the duplicated inline metadata object types in
all three command callbacks with the existing WorkflowQueueIntent type. Update
the callback parameter declarations around the three command functions while
preserving their optional metadata behavior and fields.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 71a05b95-5071-4359-9010-fccccb71381b

📥 Commits

Reviewing files that changed from the base of the PR and between 1039660 and f971f48.

📒 Files selected for processing (15)
  • src/composables/useCoreCommands.ts
  • src/platform/telemetry/TelemetryRegistry.ts
  • src/platform/telemetry/initDatadogRum.test.ts
  • src/platform/telemetry/initDatadogRum.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.ts
  • src/platform/telemetry/types.ts
  • src/platform/telemetry/utils/workflowExecutionContext.test.ts
  • src/platform/telemetry/utils/workflowExecutionContext.ts
  • src/scripts/app.test.ts
  • src/scripts/app.ts
  • src/scripts/ui.ts
  • src/stores/executionStore.test.ts
  • src/stores/executionStore.ts
  • vite.config.mts

Comment thread src/platform/telemetry/initDatadogRum.test.ts Outdated
Comment thread src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts Outdated
Comment thread vite.config.mts Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 25, 2026
@huang47
huang47 force-pushed the codex/workflow-rum-context branch from 85ba35f to 10db7d0 Compare July 25, 2026 07:14
@huang47
huang47 force-pushed the codex/workflow-rum-context branch 2 times, most recently from 87e3963 to 8c1bea3 Compare July 25, 2026 16:38
@huang47
huang47 force-pushed the codex/workflow-rum-context branch from d5faddd to f918531 Compare July 28, 2026 18:14
@huang47
huang47 enabled auto-merge July 28, 2026 21:41
@huang47
huang47 added this pull request to the merge queue Jul 28, 2026
Merged via the queue into main with commit 58c95af Jul 28, 2026
84 of 88 checks passed
@huang47
huang47 deleted the codex/workflow-rum-context branch July 28, 2026 21:58
@huang47 huang47 added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.47 labels Jul 28, 2026
@github-actions

Copy link
Copy Markdown

⚠️ Backport to core/1.47 failed

Reason: Merge conflicts detected during cherry-pick of 58c95af

The auto-backport could not be completed automatically. Please backport
manually onto branch backport-14084-to-core-1.47 (from origin/core/1.47) and
open a PR to core/1.47.

📄 Conflicting files
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
src/scripts/app.test.ts
src/scripts/app.ts
src/stores/executionStore.ts
🤖 Prompt for AI Agents
Backport PR #14084 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/14084) to core/1.47.
Cherry-pick merge commit 58c95af5f034a74ba0a5670eff173c64b81e5337 onto new branch
backport-14084-to-core-1.47 from origin/core/1.47.
Resolve conflicts in: src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts src/scripts/app.test.ts src/scripts/app.ts src/stores/executionStore.ts .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport core/1.47] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @huang47

@github-actions

Copy link
Copy Markdown

⚠️ Backport to cloud/1.47 failed

Reason: Merge conflicts detected during cherry-pick of 58c95af

The auto-backport could not be completed automatically. Please backport
manually onto branch backport-14084-to-cloud-1.47 (from origin/cloud/1.47) and
open a PR to cloud/1.47.

📄 Conflicting files
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
src/scripts/app.test.ts
src/scripts/app.ts
src/stores/executionStore.ts
🤖 Prompt for AI Agents
Backport PR #14084 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/14084) to cloud/1.47.
Cherry-pick merge commit 58c95af5f034a74ba0a5670eff173c64b81e5337 onto new branch
backport-14084-to-cloud-1.47 from origin/cloud/1.47.
Resolve conflicts in: src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts src/scripts/app.test.ts src/scripts/app.ts src/stores/executionStore.ts .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.47] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @huang47

@github-actions

Copy link
Copy Markdown

⚠️ Backport to core/1.47 failed

Reason: Merge conflicts detected during cherry-pick of 58c95af

The auto-backport could not be completed automatically. Please backport
manually onto branch backport-14084-to-core-1.47 (from origin/core/1.47) and
open a PR to core/1.47.

📄 Conflicting files
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
src/scripts/app.test.ts
src/scripts/app.ts
src/stores/executionStore.ts
🤖 Prompt for AI Agents
Backport PR #14084 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/14084) to core/1.47.
Cherry-pick merge commit 58c95af5f034a74ba0a5670eff173c64b81e5337 onto new branch
backport-14084-to-core-1.47 from origin/core/1.47.
Resolve conflicts in: src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts src/scripts/app.test.ts src/scripts/app.ts src/stores/executionStore.ts .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport core/1.47] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @huang47

@github-actions

Copy link
Copy Markdown

⚠️ Backport to cloud/1.47 failed

Reason: Merge conflicts detected during cherry-pick of 58c95af

The auto-backport could not be completed automatically. Please backport
manually onto branch backport-14084-to-cloud-1.47 (from origin/cloud/1.47) and
open a PR to cloud/1.47.

📄 Conflicting files
src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts
src/scripts/app.test.ts
src/scripts/app.ts
src/stores/executionStore.ts
🤖 Prompt for AI Agents
Backport PR #14084 (https://github.com/Comfy-Org/ComfyUI_frontend/pull/14084) to cloud/1.47.
Cherry-pick merge commit 58c95af5f034a74ba0a5670eff173c64b81e5337 onto new branch
backport-14084-to-cloud-1.47 from origin/cloud/1.47.
Resolve conflicts in: src/platform/telemetry/providers/cloud/DatadogRumTelemetryProvider.test.ts src/scripts/app.test.ts src/scripts/app.ts src/stores/executionStore.ts .
For test snapshots (browser_tests/**/*-snapshots/), accept PR version if
changed in original PR, else keep target. For package.json versions, keep
target branch. For pnpm-lock.yaml, regenerate with pnpm install.
Ask user for non-obvious conflicts.
Create PR titled "[backport cloud/1.47] <original title>" with label "backport".
See .github/workflows/pr-backport.yaml for workflow details.

cc @huang47

comfy-pr-bot pushed a commit that referenced this pull request Jul 28, 2026
## Summary

Backport #14084 to `cloud/1.47`, resolving the release-branch conflicts
without importing unrelated newer-`main` billing or governance behavior.

## Changes

- **What**: Adds bounded workflow context, queue-trigger attribution,
submission/queue/execution timing, and one terminal `workflow_execution`
vital per attempt.
- **Dependencies**: Builds on the frontend observability stack already
backported in #14211.

## Review Focus

The conflict resolution keeps the 1.47 execution-error store API and
Cloud-only free-tier run tracking while applying #14084's structured
workflow status and timing metadata.

Validation:
- 4 focused Vitest files, 136 tests passed
- `pnpm typecheck`
- Commit hooks: oxfmt, Oxlint, ESLint
- Pre-push `pnpm knip`
- `git diff --check`

Created by Codex

Co-authored-by: huang47 <157390+huang47@users.noreply.github.com>
comfy-pr-bot pushed a commit that referenced this pull request Jul 28, 2026
## Summary

Backport #14084 to `core/1.47`, resolving the release-branch conflicts
without importing unrelated newer-`main` billing or governance behavior.

## Changes

- **What**: Adds bounded workflow context, queue-trigger attribution,
submission/queue/execution timing, and one terminal `workflow_execution`
vital per attempt.
- **Dependencies**: Builds on the frontend observability stack already
backported in #14210.

## Review Focus

The conflict resolution keeps the 1.47 execution-error store API while
applying #14084's structured workflow status and timing metadata.

Validation:
- 4 focused Vitest files, 136 tests passed
- `pnpm typecheck`
- Commit hooks: oxfmt, Oxlint, ESLint
- Pre-push `pnpm knip`
- `git diff --check`

Created by Codex

Co-authored-by: huang47 <157390+huang47@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch preview size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants