Skip to content

Subgraph io fixes#12281

Open
AustinMroz wants to merge 6 commits into
mainfrom
austin/subgraphIO-fixes
Open

Subgraph io fixes#12281
AustinMroz wants to merge 6 commits into
mainfrom
austin/subgraphIO-fixes

Conversation

@AustinMroz
Copy link
Copy Markdown
Collaborator

@AustinMroz AustinMroz commented May 14, 2026

Fixes 3 different bugs when making links to and from subgraph IO from vue nodes

  • When dragging a link from a node to a subgraph IO, there is no feedback if a slot is not a valid connection target or if a slot is actively hovered
  • When a link is made from a subgraph IO to a node, the reactivity is not triggered on the node to indicate a change of link state.
  • When dragging a link from a subgraph IO to a node, the link would not snap to the valid connection targets on nodes
    • The fix for this one is not as thorough as I would like. It only allows connections to the slot, not connections to the hovered widget. We have two deeply disconnected linking systems and properly reconciling them would be a multi-week project.

Resolves FE-561

┆Issue is synchronized with this Notion page by Unito

@AustinMroz AustinMroz requested a review from a team May 14, 2026 23:44
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label May 14, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 14, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a Playwright test that exercises subgraph link UI in Vue nodes mode and a helper to compute a subgraph input node's canvas-space bounds; the test covers connecting a node output to a subgraph input, hover/link highlighting, slot visibility, and snap/highlight polling.

Changes

Vue Subgraph Slot Link Interactions

Layer / File(s) Summary
Subgraph link interactions test
browser_tests/tests/subgraph/subgraphSlots.spec.ts, browser_tests/fixtures/helpers/SubgraphHelper.ts
Adds the link interactions Playwright test (drag-to-connect, hover/link-gesture highlight and screenshot, visibility assertions, snap/highlight polling) and SubgraphHelper.getInputBounds() to compute input I/O bounds in canvas coordinates.

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

size:M, core/1.44

Suggested reviewers

  • DrJKL
  • pythongosssss
  • christian-byrne

Poem

🐰 Hop, I bound across the test,
I nudge the slot, I do my best,
A drag, a hover, highlight bright,
Canvas maps the IO right,
Hooray—connections snap to rest!

🚥 Pre-merge checks | ✅ 5 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive Title is vague and does not clearly describe the specific bugs being fixed; 'io fixes' lacks detail about what was fixed. Consider a more specific title like 'Fix subgraph IO link visual feedback, reactivity, and snap behavior in Vue nodes' to better communicate the main changes.
✅ Passed checks (5 passed)
Check name Status Explanation
Description check ✅ Passed Description is mostly complete with clear explanation of three bugs fixed and their scope, but lacks the Summary section from the template.
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.
End-To-End Regression Coverage For Fixes ✅ Passed PR appropriately includes browser_tests/ changes (SubgraphHelper.ts, subgraphSlots.spec.ts) alongside src/ fixes, meeting end-to-end regression test requirements despite using bug-fix language.
Adr Compliance For Entity/Litegraph Changes ✅ Passed PR complies with ADR 0003 and 0008. All litegraph changes enhance existing methods using existing event mechanisms. No new public methods added to core classes or extension API changes.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch austin/subgraphIO-fixes

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 and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 14, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 05/15/2026, 02:29:21 AM UTC

Links

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 14, 2026

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

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

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 14, 2026

📦 Bundle: 5.36 MB gzip 🔴 +334 B

Details

Summary

  • Raw size: 24.7 MB baseline 24.7 MB — 🔴 +739 B
  • Gzip: 5.36 MB baseline 5.36 MB — 🔴 +334 B
  • Brotli: 4.14 MB baseline 4.14 MB — 🟢 -112 B
  • Bundles: 268 current • 268 baseline • 118 added / 118 removed

Category Glance
Data & Services 🔴 +739 B (3.16 MB) · Vendor & Third-Party ⚪ 0 B (9.94 MB) · Other ⚪ 0 B (9.16 MB) · Graph Workspace ⚪ 0 B (1.24 MB) · Panels & Settings ⚪ 0 B (527 kB) · Utilities & Hooks ⚪ 0 B (366 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CeHEui-F.js (new) 26.1 kB 🔴 +26.1 kB 🔴 +8.76 kB 🔴 +7.54 kB
assets/index-CV5nSbsN.js (removed) 26.1 kB 🟢 -26.1 kB 🟢 -8.76 kB 🟢 -7.56 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BbDKLabA.js (new) 1.24 MB 🔴 +1.24 MB 🔴 +264 kB 🔴 +199 kB
assets/GraphView-BH_h0BxN.js (removed) 1.24 MB 🟢 -1.24 MB 🟢 -264 kB 🟢 -199 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BintzqVU.js (new) 19.6 kB 🔴 +19.6 kB 🔴 +5.14 kB 🔴 +4.57 kB
assets/CloudSurveyView-C1lLAkBd.js (removed) 19.6 kB 🟢 -19.6 kB 🟢 -5.14 kB 🟢 -4.58 kB
assets/CloudLoginView-BEIK1s_G.js (removed) 12.5 kB 🟢 -12.5 kB 🟢 -3.55 kB 🟢 -3.12 kB
assets/CloudLoginView-LUKWPHAv.js (new) 12.5 kB 🔴 +12.5 kB 🔴 +3.55 kB 🔴 +3.13 kB
assets/CloudSignupView-C9q04rN2.js (new) 10.4 kB 🔴 +10.4 kB 🔴 +3.06 kB 🔴 +2.69 kB
assets/CloudSignupView-CLWnhA1T.js (removed) 10.4 kB 🟢 -10.4 kB 🟢 -3.06 kB 🟢 -2.71 kB
assets/UserCheckView-5pDi3dDa.js (new) 9.07 kB 🔴 +9.07 kB 🔴 +2.34 kB 🔴 +2.04 kB
assets/UserCheckView-o_0aipFs.js (removed) 9.07 kB 🟢 -9.07 kB 🟢 -2.34 kB 🟢 -2.05 kB
assets/CloudLayoutView-BuUz_NcG.js (removed) 7.81 kB 🟢 -7.81 kB 🟢 -2.48 kB 🟢 -2.17 kB
assets/CloudLayoutView-COcIRPTq.js (new) 7.81 kB 🔴 +7.81 kB 🔴 +2.48 kB 🔴 +2.16 kB
assets/CloudForgotPasswordView-Cop3cVlT.js (new) 6.22 kB 🔴 +6.22 kB 🔴 +2.21 kB 🔴 +1.95 kB
assets/CloudForgotPasswordView-ZBnO4PXH.js (removed) 6.22 kB 🟢 -6.22 kB 🟢 -2.21 kB 🟢 -1.95 kB
assets/CloudAuthTimeoutView--fwBBr5d.js (removed) 5.58 kB 🟢 -5.58 kB 🟢 -2.05 kB 🟢 -1.8 kB
assets/CloudAuthTimeoutView-Dakzd8rw.js (new) 5.58 kB 🔴 +5.58 kB 🔴 +2.05 kB 🔴 +1.81 kB
assets/CloudSubscriptionRedirectView-B4epFELK.js (removed) 5.36 kB 🟢 -5.36 kB 🟢 -2.03 kB 🟢 -1.8 kB
assets/CloudSubscriptionRedirectView-DTtj4KAH.js (new) 5.36 kB 🔴 +5.36 kB 🔴 +2.03 kB 🔴 +1.8 kB
assets/UserSelectView-DcSCew0Z.js (new) 4.7 kB 🔴 +4.7 kB 🔴 +1.75 kB 🔴 +1.54 kB
assets/UserSelectView-YVyRNCfG.js (removed) 4.7 kB 🟢 -4.7 kB 🟢 -1.75 kB 🟢 -1.55 kB

Status: 9 added / 9 removed / 2 unchanged

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-BK0dP2_B.js (removed) 47.5 kB 🟢 -47.5 kB 🟢 -9.86 kB 🟢 -8.75 kB
assets/KeybindingPanel-gjbparEP.js (new) 47.5 kB 🔴 +47.5 kB 🔴 +9.87 kB 🔴 +8.74 kB
assets/SecretsPanel-CuLheLfr.js (new) 23.9 kB 🔴 +23.9 kB 🔴 +5.73 kB 🔴 +5.04 kB
assets/SecretsPanel-noDYLbaa.js (removed) 23.9 kB 🟢 -23.9 kB 🟢 -5.73 kB 🟢 -5.04 kB
assets/LegacyCreditsPanel-DF-9CnNn.js (removed) 21.8 kB 🟢 -21.8 kB 🟢 -5.94 kB 🟢 -5.25 kB
assets/LegacyCreditsPanel-DkGJpcpH.js (new) 21.8 kB 🔴 +21.8 kB 🔴 +5.94 kB 🔴 +5.25 kB
assets/SubscriptionPanel-BeSWJW71.js (removed) 20.2 kB 🟢 -20.2 kB 🟢 -5.19 kB 🟢 -4.55 kB
assets/SubscriptionPanel-DYHlkx6K.js (new) 20.2 kB 🔴 +20.2 kB 🔴 +5.19 kB 🔴 +4.54 kB
assets/AboutPanel-DZ9SXOIm.js (new) 12 kB 🔴 +12 kB 🔴 +3.33 kB 🔴 +2.99 kB
assets/AboutPanel-h4DlAUyi.js (removed) 12 kB 🟢 -12 kB 🟢 -3.33 kB 🟢 -3 kB
assets/ExtensionPanel-B_KcCqcm.js (new) 10.1 kB 🔴 +10.1 kB 🔴 +2.94 kB 🔴 +2.62 kB
assets/ExtensionPanel-Bxy8ddcM.js (removed) 10.1 kB 🟢 -10.1 kB 🟢 -2.94 kB 🟢 -2.61 kB
assets/ServerConfigPanel-8sGavokZ.js (new) 7.13 kB 🔴 +7.13 kB 🔴 +2.39 kB 🔴 +2.13 kB
assets/ServerConfigPanel-upL2PWcM.js (removed) 7.13 kB 🟢 -7.13 kB 🟢 -2.39 kB 🟢 -2.13 kB
assets/UserPanel-COQH-sGk.js (removed) 6.84 kB 🟢 -6.84 kB 🟢 -2.27 kB 🟢 -2.01 kB
assets/UserPanel-D1agyo66.js (new) 6.84 kB 🔴 +6.84 kB 🔴 +2.27 kB 🔴 +2 kB
assets/cloudRemoteConfig-DnjrzSiq.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -1.02 kB 🟢 -884 B
assets/cloudRemoteConfig-DwSm79sf.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +1.02 kB 🔴 +881 B
assets/refreshRemoteConfig-CGZwOPkt.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +648 B 🔴 +547 B
assets/refreshRemoteConfig-CzaVXHP3.js (removed) 1.45 kB 🟢 -1.45 kB 🟢 -650 B 🟢 -554 B

Status: 10 added / 10 removed / 14 unchanged

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-Cxu34cLN.js (removed) 3.65 kB 🟢 -3.65 kB 🟢 -1.29 kB 🟢 -1.1 kB
assets/auth-DVHrUsV2.js (new) 3.65 kB 🔴 +3.65 kB 🔴 +1.29 kB 🔴 +1.1 kB
assets/SignUpForm-UtQysRdf.js (removed) 3.19 kB 🟢 -3.19 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/SignUpForm-VLrGpd4z.js (new) 3.19 kB 🔴 +3.19 kB 🔴 +1.29 kB 🔴 +1.15 kB
assets/UpdatePasswordContent-DD-CvjlS.js (new) 2.98 kB 🔴 +2.98 kB 🔴 +1.33 kB 🔴 +1.18 kB
assets/UpdatePasswordContent-DDwhNdWJ.js (removed) 2.98 kB 🟢 -2.98 kB 🟢 -1.33 kB 🟢 -1.18 kB
assets/authStore-CDBP-fvK.js (new) 1.27 kB 🔴 +1.27 kB 🔴 +600 B 🔴 +538 B
assets/authStore-dQOduR2q.js (removed) 1.27 kB 🟢 -1.27 kB 🟢 -600 B 🟢 -539 B
assets/auth-DH-7W4gs.js (removed) 348 B 🟢 -348 B 🟢 -218 B 🟢 -191 B
assets/auth-DVBRxdAd.js (new) 348 B 🔴 +348 B 🔴 +218 B 🔴 +191 B

Status: 5 added / 5 removed / 2 unchanged

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-Ch-oYt2W.js (removed) 85.8 kB 🟢 -85.8 kB 🟢 -18.6 kB 🟢 -15.9 kB
assets/ComfyHubPublishDialog-D2VdwY8r.js (new) 85.8 kB 🔴 +85.8 kB 🔴 +18.6 kB 🔴 +15.9 kB
assets/useShareDialog-B0is7owG.js (new) 23.9 kB 🔴 +23.9 kB 🔴 +5.81 kB 🔴 +5.16 kB
assets/useShareDialog-DXJiKCBV.js (removed) 23.9 kB 🟢 -23.9 kB 🟢 -5.81 kB 🟢 -5.15 kB
assets/ComfyHubPublishDialog-DUySJrPL.js (new) 1.43 kB 🔴 +1.43 kB 🔴 +658 B 🔴 +586 B
assets/ComfyHubPublishDialog-Eozo4_Ve.js (removed) 1.43 kB 🟢 -1.43 kB 🟢 -656 B 🟢 -588 B
assets/useSubscriptionDialog-BXY9n4Ax.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +590 B 🔴 +522 B
assets/useSubscriptionDialog-Dlxq4RfN.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -589 B 🟢 -523 B

Status: 4 added / 4 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-B5O2ULQC.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.79 kB 🟢 -3.38 kB
assets/ComfyQueueButton-D6CmXogZ.js (new) 13.5 kB 🔴 +13.5 kB 🔴 +3.79 kB 🔴 +3.37 kB
assets/useTerminalTabs-CxHE5fYF.js (new) 11.1 kB 🔴 +11.1 kB 🔴 +3.76 kB 🔴 +3.31 kB
assets/useTerminalTabs-VM2rb-Vm.js (removed) 11.1 kB 🟢 -11.1 kB 🟢 -3.76 kB 🟢 -3.31 kB
assets/SubscribeButton-B3L77tFR.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.05 kB 🔴 +918 B
assets/SubscribeButton-CXBtj-Yq.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -918 B
assets/cloudFeedbackTopbarButton-D8FCehMo.js (removed) 1.94 kB 🟢 -1.94 kB 🟢 -964 B 🟢 -858 B
assets/cloudFeedbackTopbarButton-DqVwF2hp.js (new) 1.94 kB 🔴 +1.94 kB 🔴 +967 B 🔴 +860 B
assets/ComfyQueueButton-BbcI7_Ij.js (removed) 1.35 kB 🟢 -1.35 kB 🟢 -623 B 🟢 -578 B
assets/ComfyQueueButton-DuC_yucz.js (new) 1.35 kB 🔴 +1.35 kB 🔴 +625 B 🔴 +562 B

Status: 5 added / 5 removed / 8 unchanged

Data & Services — 3.16 MB (baseline 3.16 MB) • 🔴 +739 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService--fTOEtrS.js (new) 2.09 MB 🔴 +2.09 MB 🔴 +476 kB 🔴 +360 kB
assets/dialogService-xxDFiCUH.js (removed) 2.09 MB 🟢 -2.09 MB 🟢 -476 kB 🟢 -361 kB
assets/api-BN088Xpt.js (new) 898 kB 🔴 +898 kB 🔴 +215 kB 🔴 +169 kB
assets/api-uQwhUmAH.js (removed) 898 kB 🟢 -898 kB 🟢 -215 kB 🟢 -169 kB
assets/load3dService-DdPuvc-R.js (removed) 116 kB 🟢 -116 kB 🟢 -25.4 kB 🟢 -21.6 kB
assets/load3dService-DkxNbbT1.js (new) 116 kB 🔴 +116 kB 🔴 +25.4 kB 🔴 +21.6 kB
assets/workflowShareService-03XgRraP.js (new) 16.7 kB 🔴 +16.7 kB 🔴 +4.92 kB 🔴 +4.36 kB
assets/workflowShareService-y_1WDuNC.js (removed) 16.7 kB 🟢 -16.7 kB 🟢 -4.92 kB 🟢 -4.36 kB
assets/keybindingService-B1UVf69_.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.67 kB 🟢 -3.21 kB
assets/keybindingService-XGVSMDAw.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.67 kB 🔴 +3.22 kB
assets/releaseStore-1igkS75F.js (removed) 8.12 kB 🟢 -8.12 kB 🟢 -2.28 kB 🟢 -2 kB
assets/releaseStore-BaVbaEwg.js (new) 8.12 kB 🔴 +8.12 kB 🔴 +2.28 kB 🔴 +2 kB
assets/userStore-CiWtMpAj.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +933 B 🔴 +821 B
assets/userStore-CzRsNFDP.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -932 B 🟢 -818 B
assets/audioService-BVNW84DV.js (removed) 1.8 kB 🟢 -1.8 kB 🟢 -880 B 🟢 -762 B
assets/audioService-DDXenFB6.js (new) 1.8 kB 🔴 +1.8 kB 🔴 +879 B 🔴 +764 B
assets/releaseStore-B6rnxN-S.js (new) 1.27 kB 🔴 +1.27 kB 🔴 +593 B 🔴 +531 B
assets/releaseStore-BFSPgkFX.js (removed) 1.27 kB 🟢 -1.27 kB 🟢 -593 B 🟢 -531 B
assets/workflowDraftStore-BIBBMzmb.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +589 B 🔴 +524 B
assets/workflowDraftStore-Dvp0_euM.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -588 B 🟢 -525 B
assets/dialogService-DlND_9iJ.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +582 B 🔴 +523 B
assets/dialogService-Oryoyk_y.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -581 B 🟢 -525 B
assets/settingStore-B4FJ0UEG.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +584 B 🔴 +517 B
assets/settingStore-BUu3rg1G.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -583 B 🟢 -521 B
assets/assetsStore-7feyAzfx.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +585 B 🔴 +520 B
assets/assetsStore-DkBN-DMv.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -583 B 🟢 -519 B

Status: 13 added / 13 removed / 4 unchanged

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-B9bI8HvF.js (removed) 234 kB 🟢 -234 kB 🟢 -52.1 kB 🟢 -42.4 kB
assets/useConflictDetection-BMEuEcdY.js (new) 234 kB 🔴 +234 kB 🔴 +52.1 kB 🔴 +42.4 kB
assets/useLoad3d-B1rXj9U0.js (removed) 22.7 kB 🟢 -22.7 kB 🟢 -5.22 kB 🟢 -4.61 kB
assets/useLoad3d-CAzmP_Jp.js (new) 22.7 kB 🔴 +22.7 kB 🔴 +5.22 kB 🔴 +4.61 kB
assets/useLoad3dViewer-Bv5jEi6q.js (removed) 21 kB 🟢 -21 kB 🟢 -4.92 kB 🟢 -4.31 kB
assets/useLoad3dViewer-N2ZoR31E.js (new) 21 kB 🔴 +21 kB 🔴 +4.93 kB 🔴 +4.31 kB
assets/useFeatureFlags-CDy92W1Y.js (removed) 5.95 kB 🟢 -5.95 kB 🟢 -1.8 kB 🟢 -1.52 kB
assets/useFeatureFlags-VR3Qf9u-.js (new) 5.95 kB 🔴 +5.95 kB 🔴 +1.79 kB 🔴 +1.52 kB
assets/useCopyToClipboard-BblZzlnB.js (removed) 5.29 kB 🟢 -5.29 kB 🟢 -1.86 kB 🟢 -1.57 kB
assets/useCopyToClipboard-DNpbGD_Y.js (new) 5.29 kB 🔴 +5.29 kB 🔴 +1.86 kB 🔴 +1.57 kB
assets/useWorkspaceUI-BANyFoRx.js (removed) 3.34 kB 🟢 -3.34 kB 🟢 -982 B 🟢 -813 B
assets/useWorkspaceUI-DQ4FMo2r.js (new) 3.34 kB 🔴 +3.34 kB 🔴 +980 B 🔴 +812 B
assets/subscriptionCheckoutUtil-BSobM_2f.js (removed) 3.31 kB 🟢 -3.31 kB 🟢 -1.36 kB 🟢 -1.19 kB
assets/subscriptionCheckoutUtil-noDMTVA_.js (new) 3.31 kB 🔴 +3.31 kB 🔴 +1.36 kB 🔴 +1.19 kB
assets/assetPreviewUtil-C8Kt4NeO.js (new) 2.43 kB 🔴 +2.43 kB 🔴 +1.01 kB 🔴 +884 B
assets/assetPreviewUtil-D81ZJ8Dm.js (removed) 2.43 kB 🟢 -2.43 kB 🟢 -1.01 kB 🟢 -880 B
assets/useUpstreamValue-CxWDIBEE.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +802 B 🔴 +718 B
assets/useUpstreamValue-z654WzV_.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -803 B 🟢 -708 B
assets/useLoad3d-DASuo9_R.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -648 B 🟢 -586 B
assets/useLoad3d-DuSIC4H0.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +651 B 🔴 +585 B
assets/useLoad3dViewer-B-vfcDHy.js (new) 1.35 kB 🔴 +1.35 kB 🔴 +620 B 🔴 +576 B
assets/useLoad3dViewer-BOeFhjJb.js (removed) 1.35 kB 🟢 -1.35 kB 🟢 -617 B 🟢 -570 B
assets/useCurrentUser-B7Oht7x3.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +586 B 🔴 +523 B
assets/useCurrentUser-CCMpxo-k.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -584 B 🟢 -524 B
assets/useWorkspaceSwitch-BzWI9_OJ.js (new) 747 B 🔴 +747 B 🔴 +384 B 🔴 +335 B
assets/useWorkspaceSwitch-Diz7iEBf.js (removed) 747 B 🟢 -747 B 🟢 -383 B 🟢 -331 B

Status: 13 added / 13 removed / 18 unchanged

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

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 9.16 MB (baseline 9.16 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BCW_oWNN.js (removed) 78 kB 🟢 -78 kB 🟢 -20.2 kB 🟢 -17.2 kB
assets/core-DYmrS-Yv.js (new) 78 kB 🔴 +78 kB 🔴 +20.2 kB 🔴 +17.2 kB
assets/groupNode-CDB47rqi.js (new) 74.9 kB 🔴 +74.9 kB 🔴 +18.7 kB 🔴 +16.5 kB
assets/groupNode-v1fU_yZP.js (removed) 74.9 kB 🟢 -74.9 kB 🟢 -18.7 kB 🟢 -16.5 kB
assets/WidgetSelect-DOQXRseo.js (new) 67.9 kB 🔴 +67.9 kB 🔴 +14.8 kB 🔴 +12.8 kB
assets/WidgetSelect-It5t8iiY.js (removed) 67.9 kB 🟢 -67.9 kB 🟢 -14.8 kB 🟢 -12.8 kB
assets/SubscriptionRequiredDialogContentWorkspace-CI7EMChJ.js (new) 48.9 kB 🔴 +48.9 kB 🔴 +9.56 kB 🔴 +8.27 kB
assets/SubscriptionRequiredDialogContentWorkspace-s4BRqD8q.js (removed) 48.9 kB 🟢 -48.9 kB 🟢 -9.56 kB 🟢 -8.26 kB
assets/Load3DControls-BRzJzbq6.js (removed) 46.1 kB 🟢 -46.1 kB 🟢 -7.5 kB 🟢 -6.55 kB
assets/Load3DControls-BZ4N5WxQ.js (new) 46.1 kB 🔴 +46.1 kB 🔴 +7.5 kB 🔴 +6.54 kB
assets/WorkspacePanelContent-C2wJhPd-.js (removed) 34.3 kB 🟢 -34.3 kB 🟢 -7.44 kB 🟢 -6.59 kB
assets/WorkspacePanelContent-DNr3S-1S.js (new) 34.3 kB 🔴 +34.3 kB 🔴 +7.44 kB 🔴 +6.6 kB
assets/WidgetPainter-a4aps5cR.js (new) 33.5 kB 🔴 +33.5 kB 🔴 +8.28 kB 🔴 +7.31 kB
assets/WidgetPainter-BIWrXbEV.js (removed) 33.5 kB 🟢 -33.5 kB 🟢 -8.28 kB 🟢 -7.34 kB
assets/Load3dViewerContent-BA5_cAVI.js (removed) 30.6 kB 🟢 -30.6 kB 🟢 -6.19 kB 🟢 -5.36 kB
assets/Load3dViewerContent-D7ugHZEi.js (new) 30.6 kB 🔴 +30.6 kB 🔴 +6.19 kB 🔴 +5.37 kB
assets/SubscriptionRequiredDialogContent-BTaELo55.js (new) 27.6 kB 🔴 +27.6 kB 🔴 +7.02 kB 🔴 +6.19 kB
assets/SubscriptionRequiredDialogContent-BUuCSyTA.js (removed) 27.6 kB 🟢 -27.6 kB 🟢 -7.02 kB 🟢 -6.19 kB
assets/WidgetImageCrop-Brfc4Z4G.js (new) 24.4 kB 🔴 +24.4 kB 🔴 +6.23 kB 🔴 +5.48 kB
assets/WidgetImageCrop-CTO0_dkt.js (removed) 24.4 kB 🟢 -24.4 kB 🟢 -6.23 kB 🟢 -5.48 kB
assets/SubscriptionPanelContentWorkspace-DE1pjQse.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.18 kB 🟢 -4.57 kB
assets/SubscriptionPanelContentWorkspace-Dq3GV0Wr.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.17 kB 🔴 +4.56 kB
assets/SignInContent-BacPXh4T.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +5.47 kB 🔴 +4.79 kB
assets/SignInContent-My5-xHGX.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -5.47 kB 🟢 -4.78 kB
assets/CurrentUserPopoverWorkspace-DMp3aYLQ.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -4.99 kB 🟢 -4.46 kB
assets/CurrentUserPopoverWorkspace-DPF5N6Ck.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +5 kB 🔴 +4.46 kB
assets/WidgetInputNumber-C3H6oKaz.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.84 kB 🔴 +4.29 kB
assets/WidgetInputNumber-D-undYvG.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.84 kB 🟢 -4.29 kB
assets/Load3D-by1uKRv5.js (new) 18.5 kB 🔴 +18.5 kB 🔴 +4.39 kB 🔴 +3.83 kB
assets/Load3D-DuKtvXig.js (removed) 18.5 kB 🟢 -18.5 kB 🟢 -4.39 kB 🟢 -3.83 kB
assets/WidgetRecordAudio-B7bFV5Zp.js (new) 17.6 kB 🔴 +17.6 kB 🔴 +5.07 kB 🔴 +4.52 kB
assets/WidgetRecordAudio-BNt4SWUx.js (removed) 17.6 kB 🟢 -17.6 kB 🟢 -5.07 kB 🟢 -4.53 kB
assets/WidgetRange-BGrKMpg6.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.64 kB 🔴 +4.13 kB
assets/WidgetRange-CN93gPVd.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.64 kB 🟢 -4.13 kB
assets/load3d-CrUZWdig.js (removed) 15.9 kB 🟢 -15.9 kB 🟢 -4.62 kB 🟢 -4.01 kB
assets/load3d-kF7Fvrp2.js (new) 15.9 kB 🔴 +15.9 kB 🔴 +4.62 kB 🔴 +4.01 kB
assets/WaveAudioPlayer-B1PeVW9o.js (removed) 13.4 kB 🟢 -13.4 kB 🟢 -3.68 kB 🟢 -3.22 kB
assets/WaveAudioPlayer-CWM7dIGc.js (new) 13.4 kB 🔴 +13.4 kB 🔴 +3.68 kB 🔴 +3.22 kB
assets/WidgetCurve-7cCZymFc.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.96 kB 🔴 +3.58 kB
assets/WidgetCurve-B3WTro1O.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.96 kB 🟢 -3.59 kB
assets/TeamWorkspacesDialogContent-BaqiYhtA.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.45 kB 🔴 +3.07 kB
assets/TeamWorkspacesDialogContent-ChJW2rgt.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.45 kB 🟢 -3.1 kB
assets/nodeTemplates--3RogAvx.js (removed) 9.92 kB 🟢 -9.92 kB 🟢 -3.51 kB 🟢 -3.1 kB
assets/nodeTemplates-BHAkKa8y.js (new) 9.92 kB 🔴 +9.92 kB 🔴 +3.51 kB 🔴 +3.1 kB
assets/NightlySurveyController-CEsfLJgF.js (removed) 9.05 kB 🟢 -9.05 kB 🟢 -3.18 kB 🟢 -2.8 kB
assets/NightlySurveyController-D8epIfbk.js (new) 9.05 kB 🔴 +9.05 kB 🔴 +3.18 kB 🔴 +2.8 kB
assets/Load3DConfiguration-2QN-HuxY.js (new) 8.77 kB 🔴 +8.77 kB 🔴 +2.61 kB 🔴 +2.3 kB
assets/Load3DConfiguration-C9GbfRR0.js (removed) 8.77 kB 🟢 -8.77 kB 🟢 -2.61 kB 🟢 -2.29 kB
assets/InviteMemberDialogContent-avVfmJJ4.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.56 kB 🟢 -2.25 kB
assets/InviteMemberDialogContent-DfkLr56_.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.56 kB 🔴 +2.26 kB
assets/onboardingCloudRoutes-HnOgu_52.js (new) 6.94 kB 🔴 +6.94 kB 🔴 +2.17 kB 🔴 +1.88 kB
assets/onboardingCloudRoutes-IGNCZ_61.js (removed) 6.94 kB 🟢 -6.94 kB 🟢 -2.17 kB 🟢 -1.86 kB
assets/CreateWorkspaceDialogContent-BdANpMI3.js (removed) 6.23 kB 🟢 -6.23 kB 🟢 -2.27 kB 🟢 -1.99 kB
assets/CreateWorkspaceDialogContent-DqVlrT8i.js (new) 6.23 kB 🔴 +6.23 kB 🔴 +2.27 kB 🔴 +1.99 kB
assets/WidgetWithControl-D8l0CO-m.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.5 kB 🟢 -2.22 kB
assets/WidgetWithControl-t8WwW6Q1.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.5 kB 🔴 +2.21 kB
assets/FreeTierDialogContent--g53qM2u.js (new) 6.09 kB 🔴 +6.09 kB 🔴 +2.17 kB 🔴 +1.93 kB
assets/FreeTierDialogContent-BcO1KeHx.js (removed) 6.09 kB 🟢 -6.09 kB 🟢 -2.17 kB 🟢 -1.93 kB
assets/EditWorkspaceDialogContent-BPgFxO_Z.js (removed) 6.03 kB 🟢 -6.03 kB 🟢 -2.23 kB 🟢 -1.95 kB
assets/EditWorkspaceDialogContent-wMyg5mHK.js (new) 6.03 kB 🔴 +6.03 kB 🔴 +2.23 kB 🔴 +1.96 kB
assets/WidgetTextarea-C3knNzmT.js (new) 5.84 kB 🔴 +5.84 kB 🔴 +2.3 kB 🔴 +2.03 kB
assets/WidgetTextarea-CNPIQ7Cd.js (removed) 5.84 kB 🟢 -5.84 kB 🟢 -2.3 kB 🟢 -2.03 kB
assets/Preview3d-BSeQl8wY.js (new) 5.81 kB 🔴 +5.81 kB 🔴 +1.96 kB 🔴 +1.71 kB
assets/Preview3d-X-e3BvRZ.js (removed) 5.81 kB 🟢 -5.81 kB 🟢 -1.96 kB 🟢 -1.71 kB
assets/ValueControlPopover-Co7JJaeb.js (removed) 5.61 kB 🟢 -5.61 kB 🟢 -2.04 kB 🟢 -1.83 kB
assets/ValueControlPopover-D_pkiYrx.js (new) 5.61 kB 🔴 +5.61 kB 🔴 +2.05 kB 🔴 +1.85 kB
assets/CancelSubscriptionDialogContent-BtWNAsZo.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -2.07 kB 🟢 -1.82 kB
assets/CancelSubscriptionDialogContent-CTI7Zfwg.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +2.07 kB 🔴 +1.83 kB
assets/DeleteWorkspaceDialogContent-CBHRwqYL.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.91 kB 🔴 +1.66 kB
assets/DeleteWorkspaceDialogContent-CMap7o2E.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.91 kB 🟢 -1.66 kB
assets/saveMesh-BvZVNbnj.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.9 kB 🟢 -1.69 kB
assets/saveMesh-CjSZTYzA.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.9 kB 🔴 +1.7 kB
assets/LeaveWorkspaceDialogContent-CwfZRSUL.js (new) 4.76 kB 🔴 +4.76 kB 🔴 +1.85 kB 🔴 +1.62 kB
assets/LeaveWorkspaceDialogContent-euZI9c2d.js (removed) 4.76 kB 🟢 -4.76 kB 🟢 -1.85 kB 🟢 -1.61 kB
assets/RemoveMemberDialogContent-BXsA_26k.js (removed) 4.74 kB 🟢 -4.74 kB 🟢 -1.81 kB 🟢 -1.58 kB
assets/RemoveMemberDialogContent-DvUV7fea.js (new) 4.74 kB 🔴 +4.74 kB 🔴 +1.8 kB 🔴 +1.58 kB
assets/RevokeInviteDialogContent-BEGv1dLu.js (removed) 4.65 kB 🟢 -4.65 kB 🟢 -1.82 kB 🟢 -1.59 kB
assets/RevokeInviteDialogContent-QXpPLCET.js (new) 4.65 kB 🔴 +4.65 kB 🔴 +1.82 kB 🔴 +1.59 kB
assets/InviteMemberUpsellDialogContent-CKjl9qyM.js (removed) 4.55 kB 🟢 -4.55 kB 🟢 -1.68 kB 🟢 -1.48 kB
assets/InviteMemberUpsellDialogContent-Creq-YP-.js (new) 4.55 kB 🔴 +4.55 kB 🔴 +1.68 kB 🔴 +1.48 kB
assets/tierBenefits-BL6dS2-P.js (new) 4.45 kB 🔴 +4.45 kB 🔴 +1.58 kB 🔴 +1.37 kB
assets/tierBenefits-Dl5SZJ3W.js (removed) 4.45 kB 🟢 -4.45 kB 🟢 -1.58 kB 🟢 -1.36 kB
assets/Media3DTop-BEPdlZWH.js (new) 4.43 kB 🔴 +4.43 kB 🔴 +1.81 kB 🔴 +1.6 kB
assets/Media3DTop-Bkm_ZhCL.js (removed) 4.43 kB 🟢 -4.43 kB 🟢 -1.81 kB 🟢 -1.59 kB
assets/cloudSessionCookie-Cdb1dKUg.js (removed) 4.39 kB 🟢 -4.39 kB 🟢 -1.61 kB 🟢 -1.41 kB
assets/cloudSessionCookie-DwaclVsY.js (new) 4.39 kB 🔴 +4.39 kB 🔴 +1.61 kB 🔴 +1.4 kB
assets/GlobalToast-BCNb2kSz.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.26 kB 🟢 -1.12 kB
assets/GlobalToast-CLQio8Lm.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.26 kB 🔴 +1.08 kB
assets/CloudRunButtonWrapper-D1uL-pQJ.js (new) 2.31 kB 🔴 +2.31 kB 🔴 +1.05 kB 🔴 +944 B
assets/CloudRunButtonWrapper-OY08epsA.js (removed) 2.31 kB 🟢 -2.31 kB 🟢 -1.05 kB 🟢 -939 B
assets/SubscribeToRun-DITm2JxG.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +983 B 🔴 +874 B
assets/SubscribeToRun-DmeD86sb.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -981 B 🟢 -877 B
assets/MediaAudioTop-m7PSx3Y5.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -1 kB 🟢 -894 B
assets/MediaAudioTop-no7DBKbv.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +1 kB 🔴 +859 B
assets/cloudBadges-b2rNTHu_.js (new) 2.04 kB 🔴 +2.04 kB 🔴 +1.01 kB 🔴 +881 B
assets/cloudBadges-B5HJoPQI.js (removed) 2.04 kB 🟢 -2.04 kB 🟢 -1.01 kB 🟢 -879 B
assets/cloudSubscription-BHbscBZ7.js (new) 1.96 kB 🔴 +1.96 kB 🔴 +931 B 🔴 +808 B
assets/cloudSubscription-DTMqf2E-.js (removed) 1.96 kB 🟢 -1.96 kB 🟢 -929 B 🟢 -811 B
assets/graphHasMissingNodes-Bu8xI-6J.js (new) 1.84 kB 🔴 +1.84 kB 🔴 +861 B 🔴 +763 B
assets/graphHasMissingNodes-C3ydInTN.js (removed) 1.84 kB 🟢 -1.84 kB 🟢 -860 B 🟢 -764 B
assets/Load3D-BpDeXEbf.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +743 B 🔴 +663 B
assets/Load3D-sf_fM6iE.js (removed) 1.66 kB 🟢 -1.66 kB 🟢 -738 B 🟢 -661 B
assets/nightlyBadges-BjQli0zA.js (removed) 1.57 kB 🟢 -1.57 kB 🟢 -778 B 🟢 -690 B
assets/nightlyBadges-Ch_DB-2O.js (new) 1.57 kB 🔴 +1.57 kB 🔴 +779 B 🔴 +688 B
assets/Load3dViewerContent-C9eqjbdT.js (removed) 1.54 kB 🟢 -1.54 kB 🟢 -692 B 🟢 -619 B
assets/Load3dViewerContent-L7kyolPI.js (new) 1.54 kB 🔴 +1.54 kB 🔴 +696 B 🔴 +620 B
assets/previousFullPath-85kSMw5y.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -696 B 🟢 -601 B
assets/previousFullPath-BUYnXc2E.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +694 B 🔴 +598 B
assets/SubscriptionPanelContentWorkspace-ClDbdeS9.js (removed) 1.43 kB 🟢 -1.43 kB 🟢 -646 B 🟢 -582 B
assets/SubscriptionPanelContentWorkspace-DJhQ1AkK.js (new) 1.43 kB 🔴 +1.43 kB 🔴 +648 B 🔴 +581 B
assets/WidgetLegacy-9HpHkglN.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -595 B 🟢 -532 B
assets/WidgetLegacy-DZbJnG5I.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +597 B 🔴 +530 B
assets/changeTracker-BS83DOYv.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -583 B 🟢 -522 B
assets/changeTracker-Dqjrd2Hl.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +586 B 🔴 +518 B

Status: 57 added / 57 removed / 86 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.9 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.3 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.7 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 79.3 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.6 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 83.9 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.3 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.3 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.7 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 129ms TBT · 91.0 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 136.8 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 164.4 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 31ms TBT · 202.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.8 MB heap

⚠️ 1 regression detected

Metric Baseline PR (median) Δ Sig
minimap-idle: task duration 554ms 665ms +20% ⚠️ z=2.9
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 10ms 7ms -28% z=-4.5
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 11 7 -36% z=-7.4
canvas-idle: task duration 410ms 409ms -0% z=0.5
canvas-idle: script duration 21ms 21ms -2% z=-1.9
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 66.2 MB 68.9 MB +4%
canvas-idle: DOM nodes -258 14 -105% z=-6.7
canvas-idle: event listeners -129 4 -103% z=-1.6
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 3ms 4ms +14% z=1.7
canvas-mouse-sweep: style recalc duration 42ms 46ms +10% z=1.0
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 75 77 +3% z=-0.7
canvas-mouse-sweep: task duration 920ms 859ms -7% z=-0.1
canvas-mouse-sweep: script duration 136ms 135ms -1% z=-0.1
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 59.4 MB 62.5 MB +5%
canvas-mouse-sweep: DOM nodes -261 -100 -62% z=-62.8
canvas-mouse-sweep: event listeners -131 -63 -52% z=-17.0
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=1.4
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms +8% z=1.5
canvas-zoom-sweep: style recalc duration 18ms 20ms +9% z=0.5
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 32 +3% z=1.6
canvas-zoom-sweep: task duration 312ms 364ms +17% z=1.6
canvas-zoom-sweep: script duration 24ms 28ms +17% z=0.4
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 68.8 MB 45.3 MB -34%
canvas-zoom-sweep: DOM nodes 78 -65 -183% z=-182.2
canvas-zoom-sweep: event listeners 19 -49 -355% z=-13.9
dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms +0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 8ms 9ms +13% z=-1.3
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 12 +5% z=-3.2
dom-widget-clipping: task duration 319ms 373ms +17% z=0.5
dom-widget-clipping: script duration 58ms 66ms +14% z=-0.5
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 54.8 MB 55.7 MB +2%
dom-widget-clipping: DOM nodes 17 19 +12% z=-2.2
dom-widget-clipping: event listeners 0 1 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 8ms -10% z=-4.5
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 9 -6% z=-9.9
large-graph-idle: task duration 520ms 583ms +12% z=0.8
large-graph-idle: script duration 90ms 89ms -1% z=-1.3
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 61.9 MB 79.3 MB +28%
large-graph-idle: DOM nodes -262 -263 +0% z=-317.7
large-graph-idle: event listeners -129 -129 +0% z=-25.4
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 19ms 19ms +1% z=1.9
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 69 +0% z=-0.9
large-graph-pan: task duration 1085ms 1071ms -1% z=-0.3
large-graph-pan: script duration 396ms 397ms +0% z=-0.6
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 63.2 MB 67.6 MB +7%
large-graph-pan: DOM nodes -262 -123 -53% z=-86.1
large-graph-pan: event listeners -127 -62 -52% z=-80.2
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 7ms 8ms +16%
large-graph-zoom: style recalc duration 18ms 19ms +7%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 65 +0%
large-graph-zoom: task duration 1333ms 1383ms +4%
large-graph-zoom: script duration 503ms 503ms +0%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 75.5 MB 83.9 MB +11%
large-graph-zoom: DOM nodes -267 -267 +0%
large-graph-zoom: event listeners -125 -126 +1%
minimap-idle: avg frame time 17ms 17ms +0% z=0.7
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 10ms 9ms -8% z=-0.9
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 10 9 -10% z=-0.8
minimap-idle: task duration 554ms 665ms +20% ⚠️ z=2.9
minimap-idle: script duration 95ms 107ms +12% z=0.9
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 65.3 MB 69.3 MB +6%
minimap-idle: DOM nodes -262 -261 -1% z=-204.5
minimap-idle: event listeners -129 -145 +12% z=-226.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 10ms 11ms +7% z=-2.1
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 45 46 +1% z=-4.2
subgraph-dom-widget-clipping: task duration 356ms 376ms +6% z=-0.1
subgraph-dom-widget-clipping: script duration 119ms 126ms +6% z=-0.3
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 56.6 MB 61.3 MB +8%
subgraph-dom-widget-clipping: DOM nodes 16 17 +6% z=-4.6
subgraph-dom-widget-clipping: event listeners 6 6 +0% z=-1.7
subgraph-idle: avg frame time 17ms 17ms -0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms +0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 9ms +1% z=-1.9
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 10 +11% z=-1.4
subgraph-idle: task duration 331ms 400ms +21% z=1.0
subgraph-idle: script duration 12ms 21ms +66% z=0.1
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 64.3 MB 66.7 MB +4%
subgraph-idle: DOM nodes 18 20 +8% z=-1.5
subgraph-idle: event listeners 4 5 +25% 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 +10% z=0.3
subgraph-mouse-sweep: style recalc duration 36ms 41ms +15% z=-0.4
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 75 80 +6% z=-0.3
subgraph-mouse-sweep: task duration 686ms 865ms +26% z=1.4
subgraph-mouse-sweep: script duration 91ms 98ms +8% z=-0.4
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 45.5 MB 52.2 MB +15%
subgraph-mouse-sweep: DOM nodes -262 -263 +0% z=-147.4
subgraph-mouse-sweep: event listeners -131 -132 +1% 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 15ms 12ms -21%
subgraph-transition-enter: style recalc duration 31ms 28ms -10%
subgraph-transition-enter: layout count 4 5 +25%
subgraph-transition-enter: style recalc count 15 16 +7%
subgraph-transition-enter: task duration 770ms 820ms +6%
subgraph-transition-enter: script duration 30ms 37ms +24%
subgraph-transition-enter: TBT 175ms 129ms -26%
subgraph-transition-enter: heap used 73.5 MB 91.0 MB +24%
subgraph-transition-enter: DOM nodes 13513 13513 +0%
subgraph-transition-enter: event listeners 2527 2529 +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 53ms 59ms +11%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 251 +0%
viewport-pan-sweep: task duration 3855ms 4133ms +7%
viewport-pan-sweep: script duration 1302ms 1243ms -5%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 70.6 MB 136.8 MB +94%
viewport-pan-sweep: DOM nodes -260 -263 +1%
viewport-pan-sweep: event listeners -113 -140 +24%
vue-large-graph-idle: avg frame time 18ms 17ms -3%
vue-large-graph-idle: p95 frame time 17ms 17ms +0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 12459ms 13080ms +5%
vue-large-graph-idle: script duration 591ms 610ms +3%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 164.1 MB 164.4 MB +0%
vue-large-graph-idle: DOM nodes -8331 -8331 +0%
vue-large-graph-idle: event listeners -16468 -16462 -0%
vue-large-graph-pan: avg frame time 17ms 18ms +2%
vue-large-graph-pan: p95 frame time 17ms 17ms +0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 16ms 23ms +38%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 67 99 +48%
vue-large-graph-pan: task duration 14491ms 17029ms +18%
vue-large-graph-pan: script duration 869ms 1039ms +20%
vue-large-graph-pan: TBT 0ms 31ms
vue-large-graph-pan: heap used 167.4 MB 202.5 MB +21%
vue-large-graph-pan: DOM nodes -8330 -8329 -0%
vue-large-graph-pan: event listeners -16490 -16473 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.1
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 1ms 1ms -2% z=-1.3
workflow-execution: style recalc duration 26ms 25ms -4% z=0.2
workflow-execution: layout count 5 5 -10% z=-0.8
workflow-execution: style recalc count 18 18 -3% z=-0.2
workflow-execution: task duration 125ms 123ms -2% z=0.0
workflow-execution: script duration 25ms 25ms -1% z=-1.4
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 52.7 MB 54.8 MB +4%
workflow-execution: DOM nodes 159 164 +3% z=0.4
workflow-execution: event listeners 71 70 -1% z=4.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-05-15T02:38:32.240Z",
  "gitSha": "25b92a89196fd2fbeb543811a3866b2651b9d506",
  "branch": "austin/subgraphIO-fixes",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2034.165999999999,
      "styleRecalcs": 6,
      "styleRecalcDurationMs": 5.495999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 399.956,
      "heapDeltaBytes": 23145456,
      "heapUsedBytes": 72858148,
      "domNodes": 12,
      "jsHeapTotalBytes": 14680064,
      "scriptDurationMs": 18.966,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2018.5089999999946,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.215,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 419.003,
      "heapDeltaBytes": 23165612,
      "heapUsedBytes": 71729940,
      "domNodes": 16,
      "jsHeapTotalBytes": 14680064,
      "scriptDurationMs": 23.122,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1813.2760000000019,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 38.478,
      "layouts": 12,
      "layoutDurationMs": 3.9189999999999996,
      "taskDurationMs": 772.566,
      "heapDeltaBytes": 18729708,
      "heapUsedBytes": 67952272,
      "domNodes": 58,
      "jsHeapTotalBytes": 15990784,
      "scriptDurationMs": 129.84799999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1963.0180000000337,
      "styleRecalcs": 80,
      "styleRecalcDurationMs": 53.43099999999999,
      "layouts": 12,
      "layoutDurationMs": 3.9639999999999995,
      "taskDurationMs": 945.254,
      "heapDeltaBytes": 14448688,
      "heapUsedBytes": 63149472,
      "domNodes": -258,
      "jsHeapTotalBytes": 21622784,
      "scriptDurationMs": 140.362,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1761.3769999999818,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 20.663999999999998,
      "layouts": 6,
      "layoutDurationMs": 0.7649999999999998,
      "taskDurationMs": 339.5199999999999,
      "heapDeltaBytes": 809760,
      "heapUsedBytes": 50078920,
      "domNodes": 79,
      "jsHeapTotalBytes": 15204352,
      "scriptDurationMs": 30.029999999999994,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1763.2869999999912,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 19.073,
      "layouts": 6,
      "layoutDurationMs": 0.66,
      "taskDurationMs": 388.517,
      "heapDeltaBytes": -3616356,
      "heapUsedBytes": 45026404,
      "domNodes": -209,
      "jsHeapTotalBytes": 19787776,
      "scriptDurationMs": 26.380999999999993,
      "eventListeners": -116,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 553.0369999999891,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.887000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 364.63800000000003,
      "heapDeltaBytes": 9184756,
      "heapUsedBytes": 57796416,
      "domNodes": 16,
      "jsHeapTotalBytes": 15204352,
      "scriptDurationMs": 62.84300000000001,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 597.9839999999967,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 9.859,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 382.014,
      "heapDeltaBytes": 9833232,
      "heapUsedBytes": 59079480,
      "domNodes": 22,
      "jsHeapTotalBytes": 15466496,
      "scriptDurationMs": 69.464,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2021.7250000000035,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.225,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 645.387,
      "heapDeltaBytes": 40884840,
      "heapUsedBytes": 99724752,
      "domNodes": -261,
      "jsHeapTotalBytes": 33320960,
      "scriptDurationMs": 97.431,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2040.5000000000086,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.856999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 521.2520000000001,
      "heapDeltaBytes": 8131732,
      "heapUsedBytes": 66562004,
      "domNodes": -264,
      "jsHeapTotalBytes": 290816,
      "scriptDurationMs": 80.016,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2115.51399999999,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 20.262,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1107.416,
      "heapDeltaBytes": 10213508,
      "heapUsedBytes": 76164196,
      "domNodes": 18,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 428.983,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2110.7319999999845,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 17.317,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1034.435,
      "heapDeltaBytes": 5821400,
      "heapUsedBytes": 65661380,
      "domNodes": -264,
      "jsHeapTotalBytes": -552960,
      "scriptDurationMs": 364.045,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3246.532000000002,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 19.739,
      "layouts": 60,
      "layoutDurationMs": 8.318000000000001,
      "taskDurationMs": 1413.157,
      "heapDeltaBytes": 39236448,
      "heapUsedBytes": 102143352,
      "domNodes": -266,
      "jsHeapTotalBytes": 34951168,
      "scriptDurationMs": 496.031,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3200.885000000028,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 18.899,
      "layouts": 60,
      "layoutDurationMs": 8.202000000000002,
      "taskDurationMs": 1352.442,
      "heapDeltaBytes": 13110228,
      "heapUsedBytes": 73907072,
      "domNodes": -268,
      "jsHeapTotalBytes": 290816,
      "scriptDurationMs": 510.10900000000004,
      "eventListeners": -125,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2068.443000000002,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 10.345999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 771.1589999999999,
      "heapDeltaBytes": 10920180,
      "heapUsedBytes": 76159356,
      "domNodes": -259,
      "jsHeapTotalBytes": 15609856,
      "scriptDurationMs": 115.102,
      "eventListeners": -161,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2023.0809999999906,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.237999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 558.973,
      "heapDeltaBytes": 10527088,
      "heapUsedBytes": 69165496,
      "domNodes": -262,
      "jsHeapTotalBytes": 552960,
      "scriptDurationMs": 98.465,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 552.4110000000064,
      "styleRecalcs": 45,
      "styleRecalcDurationMs": 10.296,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 370.321,
      "heapDeltaBytes": 15460100,
      "heapUsedBytes": 64583836,
      "domNodes": 16,
      "jsHeapTotalBytes": 16777216,
      "scriptDurationMs": 126.98800000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 570.968999999991,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 11.206999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 381.6120000000001,
      "heapDeltaBytes": 14874956,
      "heapUsedBytes": 63908524,
      "domNodes": 18,
      "jsHeapTotalBytes": 17563648,
      "scriptDurationMs": 125.994,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.7250000000076,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.674999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 368.649,
      "heapDeltaBytes": 22930724,
      "heapUsedBytes": 71928728,
      "domNodes": 18,
      "jsHeapTotalBytes": 14942208,
      "scriptDurationMs": 16.645,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2006.3650000000166,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 10.137,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 431.72599999999994,
      "heapDeltaBytes": 1738952,
      "heapUsedBytes": 67947168,
      "domNodes": 21,
      "jsHeapTotalBytes": 19230720,
      "scriptDurationMs": 24.514,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 2021.8969999999956,
      "styleRecalcs": 83,
      "styleRecalcDurationMs": 44.337,
      "layouts": 16,
      "layoutDurationMs": 4.64,
      "taskDurationMs": 994.913,
      "heapDeltaBytes": 14880588,
      "heapUsedBytes": 63956892,
      "domNodes": -263,
      "jsHeapTotalBytes": 19787776,
      "scriptDurationMs": 98.996,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1734.863999999959,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.277,
      "layouts": 16,
      "layoutDurationMs": 4.920000000000001,
      "taskDurationMs": 735.862,
      "heapDeltaBytes": -3387732,
      "heapUsedBytes": 45581532,
      "domNodes": -262,
      "jsHeapTotalBytes": 15331328,
      "scriptDurationMs": 97.446,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1200.7049999999708,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 27.614,
      "layouts": 5,
      "layoutDurationMs": 11.626000000000001,
      "taskDurationMs": 819.6650000000001,
      "heapDeltaBytes": 30341864,
      "heapUsedBytes": 95443704,
      "domNodes": 13513,
      "jsHeapTotalBytes": 16515072,
      "scriptDurationMs": 36.836999999999996,
      "eventListeners": 2529,
      "totalBlockingTimeMs": 129,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8466.75799999997,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 61.157999999999994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4376.782,
      "heapDeltaBytes": 80732700,
      "heapUsedBytes": 138133308,
      "domNodes": -261,
      "jsHeapTotalBytes": 72585216,
      "scriptDurationMs": 1327.185,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8432.598999999982,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 56.534,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3889.352,
      "heapDeltaBytes": 88431088,
      "heapUsedBytes": 148745084,
      "domNodes": -264,
      "jsHeapTotalBytes": 66846720,
      "scriptDurationMs": 1158.6940000000002,
      "eventListeners": -125,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13570.467000000008,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13540.163999999999,
      "heapDeltaBytes": -43329108,
      "heapUsedBytes": 172124232,
      "domNodes": -8331,
      "jsHeapTotalBytes": 26275840,
      "scriptDurationMs": 601.565,
      "eventListeners": -16460,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12629.33899999996,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12618.880000000001,
      "heapDeltaBytes": -26223660,
      "heapUsedBytes": 172735656,
      "domNodes": -8331,
      "jsHeapTotalBytes": 24702976,
      "scriptDurationMs": 618.773,
      "eventListeners": -16464,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333237,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 19142.611000000044,
      "styleRecalcs": 131,
      "styleRecalcDurationMs": 26.466999999999963,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 19120.65,
      "heapDeltaBytes": -17069228,
      "heapUsedBytes": 259203940,
      "domNodes": -8327,
      "jsHeapTotalBytes": 4517888,
      "scriptDurationMs": 1196.3980000000001,
      "eventListeners": -16488,
      "totalBlockingTimeMs": 61,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 14957.090999999991,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 18.542,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14937.836999999998,
      "heapDeltaBytes": -36179092,
      "heapUsedBytes": 165368040,
      "domNodes": -8331,
      "jsHeapTotalBytes": -3608576,
      "scriptDurationMs": 882.129,
      "eventListeners": -16458,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 458.4509999999682,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 25.459,
      "layouts": 5,
      "layoutDurationMs": 1.6229999999999998,
      "taskDurationMs": 132.81,
      "heapDeltaBytes": 5577496,
      "heapUsedBytes": 59729700,
      "domNodes": 168,
      "jsHeapTotalBytes": 1048576,
      "scriptDurationMs": 26.758000000000003,
      "eventListeners": 69,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "workflow-execution",
      "durationMs": 451.5450000000101,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 23.732,
      "layouts": 4,
      "layoutDurationMs": 1.091,
      "taskDurationMs": 113.26599999999998,
      "heapDeltaBytes": 5065908,
      "heapUsedBytes": 55202552,
      "domNodes": 159,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 22.785,
      "eventListeners": 71,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.700000000000273
    }
  ]
}

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/lib/litegraph/src/subgraph/SubgraphInputNode.ts (1)

229-235: ⚡ Quick win

Event emission completes disconnect reactivity.

The disconnect path now emits node:slot-links:changed with connected: false, mirroring the connect logic. Note that the event fires after onConnectionsChange here, whereas in SubgraphInput.connect() it fires before. Verify this ordering difference is intentional for the different lifecycle phases.

🔧 Optional: Use property shorthand
     subgraph.trigger('node:slot-links:changed', {
       nodeId: node.id,
       slotType: NodeSlotType.INPUT,
-      slotIndex: slotIndex,
+      slotIndex,
       connected: false,
       linkId: link.id
     })
🤖 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/lib/litegraph/src/subgraph/SubgraphInputNode.ts` around lines 229 - 235,
The event emission in SubgraphInputNode.disconnect currently calls
subgraph.trigger('node:slot-links:changed', { nodeId, slotType, slotIndex,
connected: false, linkId }) after onConnectionsChange, while
SubgraphInput.connect fires that same event before onConnectionsChange; confirm
whether this ordering difference is intentional for lifecycle reasons, and if
not move the trigger in SubgraphInputNode.disconnect to execute before
onConnectionsChange to match SubgraphInput.connect (or add a comment documenting
the intentional ordering). Also consider using property shorthand for the
payload object keys (nodeId, slotType, slotIndex, linkId) to simplify the call.
🤖 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 `@browser_tests/fixtures/helpers/SubgraphHelper.ts`:
- Around line 245-254: getInputBounds assumes a subgraph and input node always
exist and can throw opaque errors; add explicit guards inside getInputBounds
(and inside the page.evaluate callback) to check that app, app.canvas,
app.canvas.graph is a Subgraph, and graph.inputNode exists before calling
convertOffsetToCanvas or accessing size/pos, and return a sensible fallback
(e.g., null or a rejected Promise with a clear error) if preconditions fail;
specifically update the getInputBounds function and the evaluate callback that
references app!.canvas.graph, inputNode, and
app!.canvas.ds.convertOffsetToCanvas to validate those symbols and surface a
clear error message instead of letting a runtime exception propagate.

In `@src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts`:
- Around line 414-415: In useSlotLinkInteraction, avoid capturing app.canvas and
node at composable creation; instead re-resolve canvas via app.canvas and the
node via canvas.graph.getNodeById(nodeId) inside the pointer handlers (e.g., the
pointer move/drag and pointer down/up callbacks referenced around the existing
canvas/node usage) and guard each use with null/undefined checks so you never
operate on a stale or unready canvas/graph/node; update the usages at the spots
that previously read the top-level const canvas and const node (and the
subsequent block at the later references) to resolve them lazily inside the
handler before using them.

---

Nitpick comments:
In `@src/lib/litegraph/src/subgraph/SubgraphInputNode.ts`:
- Around line 229-235: The event emission in SubgraphInputNode.disconnect
currently calls subgraph.trigger('node:slot-links:changed', { nodeId, slotType,
slotIndex, connected: false, linkId }) after onConnectionsChange, while
SubgraphInput.connect fires that same event before onConnectionsChange; confirm
whether this ordering difference is intentional for lifecycle reasons, and if
not move the trigger in SubgraphInputNode.disconnect to execute before
onConnectionsChange to match SubgraphInput.connect (or add a comment documenting
the intentional ordering). Also consider using property shorthand for the
payload object keys (nodeId, slotType, slotIndex, linkId) to simplify the call.
🪄 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: CHILL

Plan: Pro

Run ID: fcddccaa-ac35-4fba-91a2-8e6e122bea01

📥 Commits

Reviewing files that changed from the base of the PR and between e35bea5 and 1425775.

📒 Files selected for processing (7)
  • browser_tests/fixtures/helpers/SubgraphHelper.ts
  • browser_tests/tests/subgraph/subgraphSlots.spec.ts
  • src/lib/litegraph/src/LGraphCanvas.ts
  • src/lib/litegraph/src/subgraph/SubgraphInput.ts
  • src/lib/litegraph/src/subgraph/SubgraphInputNode.ts
  • src/lib/litegraph/src/subgraph/SubgraphOutput.ts
  • src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.ts

Comment thread browser_tests/fixtures/helpers/SubgraphHelper.ts
@codecov
Copy link
Copy Markdown

codecov Bot commented May 14, 2026

Codecov Report

❌ Patch coverage is 50.00000% with 3 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...ons/vueNodes/composables/useSlotLinkInteraction.ts 50.00% 3 Missing ⚠️
@@             Coverage Diff             @@
##             main   #12281       +/-   ##
===========================================
- Coverage   73.78%   59.57%   -14.22%     
===========================================
  Files        1520     1411      -109     
  Lines       84941    71883    -13058     
  Branches    22393    19024     -3369     
===========================================
- Hits        62674    42823    -19851     
- Misses      21455    28587     +7132     
+ Partials      812      473      -339     
Flag Coverage Δ
e2e ?
unit 59.57% <50.00%> (+0.15%) ⬆️

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

Files with missing lines Coverage Δ
...ons/vueNodes/composables/useSlotLinkInteraction.ts 39.35% <50.00%> (-38.32%) ⬇️

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

@AustinMroz AustinMroz added the New Browser Test Expectations New browser test screenshot should be set by github action label May 15, 2026
@github-actions
Copy link
Copy Markdown

Updating Playwright Expectations

@github-actions github-actions Bot removed the New Browser Test Expectations New browser test screenshot should be set by github action label May 15, 2026
@AustinMroz AustinMroz force-pushed the austin/subgraphIO-fixes branch from 96ee7ac to 23c5d31 Compare May 15, 2026 00:19
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 15, 2026
@AustinMroz AustinMroz added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.44 Backport PRs for core 1.44 cloud/1.44 Backport PRs for cloud 1.44 labels May 15, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
browser_tests/tests/subgraph/subgraphSlots.spec.ts (1)

676-676: ⚡ Quick win

Prefer a more stable selector over DOM traversal.

Using locator('../..') to navigate up the DOM tree is brittle and will break if the component's DOM structure changes. Consider using a data attribute (e.g., data-testid) on the slot container or querying from a more stable parent reference.

♻️ Suggested refactor

If the slot container has a test ID:

-const slotParent = stepsSlot.locator('../..')
+const slotParent = stepsSlot.locator('[data-testid="slot-container"]')

Or query from the node level:

-const slotParent = stepsSlot.locator('../..')
+const slotParent = ksampler.locator('[data-slot-key="steps"]').locator('..')
🤖 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 `@browser_tests/tests/subgraph/subgraphSlots.spec.ts` at line 676, The test
creates slotParent by brittle DOM traversal using stepsSlot.locator('../..');
instead, add or use a stable selector on the slot container (e.g.,
data-testid="slot-parent") and update the assignment of slotParent to query that
stable selector (replace stepsSlot.locator('../..') with a locator that targets
the data-testid or a stable parent locator), or if adding attributes isn't
possible, use an ancestor selector that targets a stable attribute/class (e.g.,
stepsSlot.locator('xpath=ancestor::*[`@data-testid`="slot-parent"]')) so tests
rely on stable identifiers rather than DOM-tree navigation.
🤖 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.

Nitpick comments:
In `@browser_tests/tests/subgraph/subgraphSlots.spec.ts`:
- Line 676: The test creates slotParent by brittle DOM traversal using
stepsSlot.locator('../..'); instead, add or use a stable selector on the slot
container (e.g., data-testid="slot-parent") and update the assignment of
slotParent to query that stable selector (replace stepsSlot.locator('../..')
with a locator that targets the data-testid or a stable parent locator), or if
adding attributes isn't possible, use an ancestor selector that targets a stable
attribute/class (e.g.,
stepsSlot.locator('xpath=ancestor::*[`@data-testid`="slot-parent"]')) so tests
rely on stable identifiers rather than DOM-tree navigation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b088fee7-aa05-4323-a07c-3d0f382cbee6

📥 Commits

Reviewing files that changed from the base of the PR and between 1425775 and 5cce74e.

⛔ Files ignored due to path filters (1)
  • browser_tests/tests/subgraph/subgraphSlots.spec.ts-snapshots/vue-io-highlight-chromium-linux.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • browser_tests/tests/subgraph/subgraphSlots.spec.ts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.44 Backport PRs for cloud 1.44 core/1.44 Backport PRs for core 1.44 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants