Skip to content

refactor: extract filename via lastIndexOf instead of split/pop#13263

Closed
huang47 wants to merge 6 commits into
Comfy-Org:mainfrom
huang47:shihchi/refactor-string-extraction
Closed

refactor: extract filename via lastIndexOf instead of split/pop#13263
huang47 wants to merge 6 commits into
Comfy-Org:mainfrom
huang47:shihchi/refactor-string-extraction

Conversation

@huang47

@huang47 huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Behavior-preserving refactor: extract the trailing path segment with slice(lastIndexOf('/') + 1) instead of split('/').pop() ?? ''.

Changes

  • What: modelStore.ts (simplified_file_name) and nodeBookmarkStore.ts (bookmark name/category) — same output for no-slash, trailing-slash and empty-string inputs, while removing the ?? '' nullish branch.
  • Breaking: none. Refactor series (separated from the coverage tests for isolated review).

Review Focus

Pure equivalence. Verified by the existing modelStore/nodeBookmarkStore suites (in the store-coverage PRs) — 33 tests pass against this new source. nodeBookmarkStore is on the critical allow-list, so dropping the un-coverable ?? '' branch also nudges its branch-coverage up.

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown

🎨 Storybook: 🚧 Building...

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

📊 Browser Reports
  • chromium: View Report (✅ 1668 / ❌ 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: 7.76 MB gzip

Details

Summary

  • Raw size: 32.8 MB
  • Gzip: 7.76 MB
  • Brotli: 5.34 MB
  • Bundles: 298 current • 298 added
    Baseline artifact not found; showing current bundle sizes only.

Category Glance
Vendor & Third-Party 15.3 MB · Other 11.7 MB · Utilities & Hooks 3.36 MB · Graph Workspace 1.25 MB · Panels & Settings 546 kB · Data & Services 269 kB · + 5 more

App Entry Points — 47.3 kB

Main entry bundles and manifests

File Size Gzip Brotli
assets/index-CQ_x0T2O.js (new) 47.3 kB 13.9 kB 12 kB

Status: 1 added

Graph Workspace — 1.25 MB

Graph editor runtime, canvas, workflow orchestration

File Size Gzip Brotli
assets/GraphView-CyCkNlyX.js (new) 1.25 MB 268 kB 202 kB

Status: 1 added

Views & Navigation — 97.7 kB

Top-level views, pages, and routed surfaces

File Size Gzip Brotli
assets/CloudSurveyView-DeLbEA3n.js (new) 19.4 kB 5.03 kB 4.46 kB
assets/OAuthConsentView-pGhL8MOg.js (new) 15 kB 4.1 kB 3.58 kB
assets/CloudLoginView-uTdMBd-u.js (new) 11.4 kB 3.06 kB 2.68 kB
assets/CloudSignupView-BfpoQZMK.js (new) 9.79 kB 2.74 kB 2.4 kB
assets/CloudLayoutView-CBf7hHSD.js (new) 9.36 kB 2.34 kB 2.03 kB
assets/UserCheckView-C3dFGC_Q.js (new) 8.8 kB 2.22 kB 1.93 kB
assets/CloudSubscriptionRedirectView-DQKDBmgX.js (new) 6.63 kB 2.46 kB 2.16 kB
assets/UserSelectView-B0a4hUtW.js (new) 6 kB 2.15 kB 1.89 kB
assets/CloudForgotPasswordView-BkF9zyCL.js (new) 5.15 kB 1.76 kB 1.54 kB
assets/CloudAuthTimeoutView-DvT19rtO.js (new) 4.49 kB 1.57 kB 1.37 kB
assets/CloudSorryContactSupportView-B3wxn0H5.js (new) 1.21 kB 606 B 528 B
assets/layout-BRFZlDUd.js (new) 447 B 285 B 231 B

Status: 12 added

Panels & Settings — 546 kB

Configuration panels, inspectors, and settings screens

File Size Gzip Brotli
assets/KeybindingPanel-BXpwaV3P.js (new) 49.4 kB 9.97 kB 8.83 kB
assets/settings-C9Tmk3bJ.js (new) 39.8 kB 9.73 kB 7.99 kB
assets/settings-C2wKwgxO.js (new) 35.4 kB 8.66 kB 7.29 kB
assets/settings-zmAzXhGy.js (new) 33.5 kB 8.48 kB 6.9 kB
assets/settings-C4BF2z9s.js (new) 33.1 kB 8.51 kB 7.1 kB
assets/settings-DMXOgQVA.js (new) 31.5 kB 8.78 kB 7.31 kB
assets/settings-BwQRFbgb.js (new) 30.9 kB 8.41 kB 7.37 kB
assets/settings-C2gc9HUt.js (new) 29.7 kB 8.07 kB 6.88 kB
assets/settings-DbaQC_wv.js (new) 29.6 kB 8.31 kB 7.25 kB
assets/settings-DPFn4SDi.js (new) 28.8 kB 7.99 kB 6.95 kB
assets/settings-C0b1G-4Q.js (new) 28.7 kB 8.44 kB 7.03 kB
assets/settings-SBB4ueng.js (new) 27.2 kB 7.75 kB 6.44 kB
assets/settings-Dd_PQ-qm.js (new) 25.2 kB 8.2 kB 6.6 kB
assets/settings-hVo59da3.js (new) 24.6 kB 8.01 kB 6.28 kB
assets/SecretsPanel-DhBPs6xo.js (new) 24.2 kB 5.77 kB 5.07 kB
assets/CreditsPanel-Cg8Fj8kU.js (new) 15.6 kB 4.61 kB 4.04 kB
assets/AboutPanel-DeOQ5fIw.js (new) 12 kB 3.29 kB 2.94 kB
assets/SubscriptionPanel-BXpGUz0O.js (new) 11.2 kB 3.51 kB 3.08 kB
assets/ExtensionPanel-D46MTVI6.js (new) 9.03 kB 2.49 kB 2.2 kB
assets/settings-BMsHiZv0.js (new) 7.07 kB 1.86 kB 1.59 kB
assets/ServerConfigPanel-D3dAQuGc.js (new) 6.15 kB 1.97 kB 1.76 kB
assets/UserPanel-dgkPVJb4.js (new) 5.78 kB 1.82 kB 1.57 kB
assets/refreshRemoteConfig-DVUgDOLb.js (new) 2.42 kB 1.06 kB 943 B
assets/config-CqDoJ9_I.js (new) 2.14 kB 1.04 kB 841 B
assets/remoteConfig-_BsfIY_T.js (new) 1.38 kB 690 B 568 B
assets/cloudRemoteConfig-GsA8nR07.js (new) 990 B 542 B 465 B
assets/refreshRemoteConfig-fxgjRHsO.js (new) 110 B 89 B 90 B

Status: 27 added

User & Accounts — 26.9 kB

Authentication, profile, and account management bundles

File Size Gzip Brotli
assets/SignUpForm-Dswr71vF.js (new) 10 kB 3.46 kB 3.03 kB
assets/PasswordFields-nBXpoMpD.js (new) 4.68 kB 1.42 kB 1.26 kB
assets/auth-CKQ4LaTr.js (new) 3.69 kB 1.3 kB 1.14 kB
assets/usePostAuthRedirect-De6Hzgl0.js (new) 3.33 kB 1.27 kB 1.1 kB
assets/UpdatePasswordContent-CxmG_GQH.js (new) 1.92 kB 876 B 764 B
assets/WorkspaceProfilePic-1GR-yxtZ.js (new) 1.66 kB 862 B 777 B
assets/oauthState-DA6y_Uhn.js (new) 1.21 kB 510 B 446 B
assets/authStore-Cz8dHZO7.js (new) 130 B 112 B 104 B
assets/workspaceAuthStore-BBnGUwci.js (new) 110 B 104 B 111 B
assets/auth-DV1JIvNl.js (new) 105 B 96 B 75 B

Status: 10 added

Editors & Dialogs — 117 kB

Modals, dialogs, drawers, and in-app editors

File Size Gzip Brotli
assets/ComfyHubPublishDialog-CjZ6vHA-.js (new) 90.5 kB 19.3 kB 16.5 kB
assets/useShareDialog-BWn_noBF.js (new) 23.7 kB 5.58 kB 4.96 kB
assets/SubscriptionInactiveMemberDialog-B5vrhY3g.js (new) 2.55 kB 1.03 kB 903 B
assets/ComfyHubPublishDialog-RtZ3ES70.js (new) 143 B 105 B 90 B
assets/useSubscriptionDialog-BhXoNMmw.js (new) 110 B 102 B 101 B

Status: 5 added

UI Components — 57.2 kB

Reusable component library chunks

File Size Gzip Brotli
assets/ComfyQueueButton-u9wP1NIN.js (new) 13.6 kB 3.82 kB 3.41 kB
assets/useTerminalTabs-CBqZ3LBP.js (new) 12.1 kB 3.83 kB 3.38 kB
assets/TopbarBadge-CCWL39lh.js (new) 7.7 kB 1.87 kB 1.65 kB
assets/ScrubableNumberInput-B5Jse9fS.js (new) 6.31 kB 2.13 kB 1.88 kB
assets/toggle-group-CIAJOPbA.js (new) 4.16 kB 1.45 kB 1.28 kB
assets/Button-TdUOZFPi.js (new) 3.71 kB 1.41 kB 1.23 kB
assets/SubscribeButton-CtKVqr_E.js (new) 2.35 kB 1.04 kB 907 B
assets/WidgetButton-Drd5UvQL.js (new) 1.98 kB 919 B 825 B
assets/Input-Buxd172o.js (new) 1.81 kB 901 B 789 B
assets/UserAvatar-Bc6vTz_1.js (new) 1.29 kB 673 B 576 B
assets/CloudBadge-BAArT0Ef.js (new) 1.18 kB 593 B 521 B
assets/cloudFeedbackTopbarButton-sB_Og8cU.js (new) 829 B 497 B 448 B
assets/ComfyQueueButton-BOk8XuRJ.js (new) 128 B 99 B 90 B

Status: 13 added

Data & Services — 269 kB

Stores, services, APIs, and repositories

File Size Gzip Brotli
assets/load3dService-RwBj2lfR.js (new) 126 kB 27.8 kB 23.5 kB
assets/api-B3vBqlzQ.js (new) 91.9 kB 25.3 kB 21.7 kB
assets/workflowShareService-BTLb1ftb.js (new) 17 kB 5.01 kB 4.43 kB
assets/releaseStore-Cm-sU2qM.js (new) 8.29 kB 2.33 kB 2.04 kB
assets/keybindingService-CmCgIsUq.js (new) 7.12 kB 1.76 kB 1.53 kB
assets/dialogStore-BYoDry7e.js (new) 5.36 kB 1.66 kB 1.43 kB
assets/extensionStore-BvvkoMkS.js (new) 5.29 kB 1.86 kB 1.57 kB
assets/userStore-DgF5pdAf.js (new) 2.42 kB 933 B 816 B
assets/serverConfigStore-m5ZP9rkQ.js (new) 2.35 kB 811 B 707 B
assets/audioService-Da1dnJms.js (new) 1.76 kB 861 B 744 B
assets/toastStore-Dj6onFfy.js (new) 889 B 431 B 371 B
assets/dialogService-CIzFdaQa.js (new) 100 B 99 B 97 B
assets/settingStore-B1LNcLIv.js (new) 98 B 98 B 102 B
assets/assetsStore-u0GNdbbA.js (new) 96 B 97 B 100 B
assets/releaseStore-CO-qiHbt.js (new) 95 B 86 B 84 B
assets/api-Cv3E106u.js (new) 62 B 74 B 66 B

Status: 16 added

Utilities & Hooks — 3.36 MB

Helpers, composables, and utility bundles

File Size Gzip Brotli
assets/promotionUtils-DI_c2wNu.js (new) 3.01 MB 695 kB 524 kB
assets/useConflictDetection-BDKqNugz.js (new) 234 kB 52.3 kB 42.6 kB
assets/useLoad3d-CmPbdEoy.js (new) 25.5 kB 5.75 kB 5.09 kB
assets/useLoad3dViewer-BhqWUZDA.js (new) 21.1 kB 4.98 kB 4.36 kB
assets/formatUtil-KK3zIb6e.js (new) 16 kB 5.45 kB 4.81 kB
assets/useImageQuiet-BCtJ0CtY.js (new) 10.4 kB 3.5 kB 3.01 kB
assets/useFeatureFlags-DVwgYtRO.js (new) 5.55 kB 1.71 kB 1.46 kB
assets/useTypeformEmbed-QglVlHgE.js (new) 4.92 kB 1.95 kB 1.64 kB
assets/downloadUtil-CLjfRHxK.js (new) 4.68 kB 1.85 kB 1.53 kB
assets/curveUtils-CrKIAjXG.js (new) 3.83 kB 1.29 kB 1.14 kB
assets/subscriptionCheckoutUtil-ByajPcsa.js (new) 3.52 kB 1.45 kB 1.25 kB
assets/useSessionCookie-DIQo5pvU.js (new) 3.33 kB 1.15 kB 979 B
assets/useExternalLink-T3WvYWNJ.js (new) 3.03 kB 1.16 kB 1.02 kB
assets/useDowngradeToPersonal-CRtsl6E-.js (new) 3 kB 1.18 kB 1.05 kB
assets/assetPreviewUtil-CmtroShF.js (new) 2.41 kB 1.01 kB 884 B
assets/useFeatureUsageTracker-DwLGqx-X.js (new) 2.13 kB 945 B 802 B
assets/useUpstreamValue-BPt-bYx2.js (new) 2.04 kB 793 B 703 B
assets/useWorkspaceTierLabel-DSP0HQFp.js (new) 1.99 kB 852 B 729 B
assets/markdownRendererUtil-Bq_UpFWP.js (new) 1.59 kB 830 B 722 B
assets/useErrorHandling-CWFWiW1g.js (new) 1.54 kB 645 B 551 B
assets/hdrFormatUtil-Bp_FtymG.js (new) 1.08 kB 516 B 436 B
assets/histogramUtil-CQKlj0cH.js (new) 972 B 572 B 488 B
assets/errorUtil-M5jHbrXr.js (new) 843 B 490 B 406 B
assets/useClickDragGuard-B7vIq_1f.js (new) 828 B 412 B 360 B
assets/envUtil-sFgUSLSD.js (new) 489 B 307 B 243 B
assets/_plugin-vue_export-helper-BTZD_w11.js (new) 365 B 254 B 213 B
assets/useLoad3d-DROjx7fe.js (new) 311 B 162 B 147 B
assets/SkeletonUtils-BHtFQJC3.js (new) 133 B 111 B 119 B
assets/useSessionCookie-CvIKEa_h.js (new) 101 B 86 B 80 B
assets/useFeatureFlags-Uj1ESi-N.js (new) 98 B 85 B 83 B
assets/useLoad3dViewer-C59E5jts.js (new) 98 B 85 B 83 B
assets/useCurrentUser-4oZZVytL.js (new) 96 B 97 B 82 B

Status: 32 added

Vendor & Third-Party — 15.3 MB

External libraries and shared vendor chunks

File Size Gzip Brotli
assets/vendor-three-abO_IwlS.js (new) 7.09 MB 2.18 MB 1.02 MB
assets/vendor-other-C6K9d_qr.js (new) 1.87 MB 404 kB 326 kB
assets/vendor-primevue-9-ZyisZ2.js (new) 1.69 MB 303 kB 185 kB
assets/vendor-firebase-C7k8AidI.js (new) 1.12 MB 225 kB 180 kB
assets/vendor-tiptap-CB23DSsg.js (new) 743 kB 183 kB 147 kB
assets/vendor-reka-ui-BAysHLjf.js (new) 491 kB 89.4 kB 68.9 kB
assets/vendor-chart-BoRC8cqn.js (new) 411 kB 100 kB 82.9 kB
assets/vendor-xterm-Dw-c804Z.js (new) 374 kB 75.6 kB 61 kB
assets/vendor-vue-core-D3WB7mNE.js (new) 343 kB 86 kB 72.5 kB
assets/vendor-sentry-CJqm_Nmo.js (new) 268 kB 69.2 kB 57 kB
assets/vendor-yjs-BiH7xZSO.js (new) 246 kB 53.3 kB 44.1 kB
assets/vendor-vueuse-D6IWVgo4.js (new) 155 kB 38.8 kB 33.1 kB
assets/vendor-i18n-C9te7Dy0.js (new) 140 kB 30.7 kB 25.8 kB
assets/vendor-markdown-DaMlfZYH.js (new) 120 kB 30.3 kB 26.5 kB
assets/vendor-axios-T2xEda2b.js (new) 110 kB 29.6 kB 25.6 kB
assets/vendor-zod-cnyoNRiP.js (new) 105 kB 18.8 kB 16 kB

Status: 16 added

Other — 11.7 MB

Bundles that do not match a named category

File Size Gzip Brotli
assets/nodeDefs-BVReO2Ir.js (new) 692 kB 112 kB 76.7 kB
assets/nodeDefs-DEt_ujgC.js (new) 634 kB 102 kB 71.1 kB
assets/nodeDefs-BOZkNaBV.js (new) 631 kB 105 kB 73.1 kB
assets/nodeDefs-DvtYNaPO.js (new) 580 kB 102 kB 70.7 kB
assets/nodeDefs-BHolcFG0.js (new) 577 kB 96.2 kB 68.5 kB
assets/nodeDefs-daSYebel.js (new) 559 kB 99.4 kB 70 kB
assets/nodeDefs-C7QsZoqL.js (new) 556 kB 97.8 kB 71 kB
assets/nodeDefs-DlE0SJ96.js (new) 551 kB 98.5 kB 71.5 kB
assets/nodeDefs-BHxUV7Wu.js (new) 548 kB 95.3 kB 69.2 kB
assets/nodeDefs-CRNmGaHv.js (new) 541 kB 94.2 kB 68.5 kB
assets/nodeDefs-B5HdWigg.js (new) 520 kB 87.4 kB 64.3 kB
assets/nodeDefs-BBEK8jGs.js (new) 504 kB 97.6 kB 68.3 kB
assets/nodeDefs-CWSr3nGp.js (new) 499 kB 96.2 kB 66.8 kB
assets/main-9WVPdED5.js (new) 286 kB 71.4 kB 55.8 kB
assets/main-ZsakGBGn.js (new) 256 kB 64.6 kB 51.7 kB
assets/main-CyKvEzda.js (new) 244 kB 64.1 kB 50.9 kB
assets/main-DxtZVO1O.js (new) 235 kB 63.7 kB 50.3 kB
assets/main-BAB5Pyne.js (new) 227 kB 61.5 kB 49.3 kB
assets/main-DAb8ArUg.js (new) 214 kB 62.4 kB 51.7 kB
assets/main-x8Swm7YW.js (new) 212 kB 61.7 kB 49.4 kB
assets/main-Ca3MK5T7.js (new) 207 kB 60.7 kB 50.2 kB
assets/main-uG0Jrrrl.js (new) 204 kB 61 kB 50.8 kB
assets/main-zAY2e_61.js (new) 203 kB 60.1 kB 50.2 kB
assets/main-CIfN8UfE.js (new) 184 kB 54.1 kB 45.4 kB
assets/main-BT8KtYQg.js (new) 180 kB 59.8 kB 47.6 kB
assets/main-CBKTaxLV.js (new) 179 kB 59.7 kB 47.3 kB
assets/core-BTcki7v5.js (new) 119 kB 30.7 kB 25.9 kB
assets/OBJLoader2WorkerModule-DTMpvldF.js (new) 109 kB 27.1 kB 21.9 kB
assets/WidgetSelect-or_AzCn0.js (new) 83.9 kB 18.3 kB 15.9 kB
assets/Load3DControls-CZtMx5F-.js (new) 46.8 kB 7.56 kB 6.61 kB
assets/SubscriptionTransitionPreviewWorkspace-AsE2rMrh.js (new) 45.7 kB 9.48 kB 8.37 kB
assets/SubscriptionRequiredDialogContentUnified-D48XynZI.js (new) 41.2 kB 9.15 kB 7.96 kB
assets/nodeDefs-DxeIoN_d.js (new) 37.2 kB 9.55 kB 8.3 kB
assets/WorkspacePanelContent-BoFeiY38.js (new) 34.5 kB 7.48 kB 6.6 kB
assets/WidgetPainter-Cgd0SxzA.js (new) 32.7 kB 7.9 kB 7.01 kB
assets/Load3dViewerContent-ZlrSlY9E.js (new) 30.9 kB 6.3 kB 5.46 kB
assets/HdrViewerContent-YMIw-8ay.js (new) 29.2 kB 8.09 kB 7.14 kB
assets/WidgetBoundingBoxes-Dqw6OQpc.js (new) 28.6 kB 7.9 kB 7 kB
assets/SubscriptionRequiredDialogContent-DxSUaZ2Y.js (new) 26.8 kB 6.63 kB 5.84 kB
assets/initHostTelemetry-wXQKbW7r.js (new) 25.2 kB 6.22 kB 5.2 kB
assets/SubscriptionPanelContentWorkspace-DlOrA5Nk.js (new) 24.8 kB 5.77 kB 5.06 kB
assets/SubscriptionRequiredDialogContentWorkspace-BqrYosbK.js (new) 24.6 kB 5.65 kB 4.97 kB
assets/ColorPicker-B_i68tMU.js (new) 24.3 kB 6.34 kB 5.6 kB
assets/WidgetImageCrop-DztdZ88D.js (new) 23.3 kB 5.75 kB 5.05 kB
assets/load3d-Dkayb5Xu.js (new) 21.3 kB 5.19 kB 4.5 kB
assets/CurrentUserPopoverWorkspace-DlCKlJ3L.js (new) 20.5 kB 4.71 kB 4.2 kB
assets/SignInContent-_bsnp1km.js (new) 20.1 kB 5.06 kB 4.44 kB
assets/Load3D-VTKz8m-R.js (new) 19.1 kB 4.51 kB 3.93 kB
assets/WidgetInputNumber-Ds5m2yWa.js (new) 19 kB 4.79 kB 4.25 kB
assets/commands-BCR5v4jO.js (new) 18.4 kB 4 kB 3.12 kB
assets/commands-DLhPZ1b6.js (new) 17.5 kB 3.65 kB 2.88 kB
assets/commands-ZL67hGVC.js (new) 17.2 kB 3.69 kB 2.84 kB
assets/commands-DNq7V1Bd.js (new) 17.1 kB 3.77 kB 2.96 kB
assets/CreditsTile-BFBO9sQC.js (new) 17 kB 4.52 kB 3.99 kB
assets/WidgetRecordAudio-Be0EKSrt.js (new) 16.6 kB 4.63 kB 4.14 kB
assets/commands-q6-PsLUZ.js (new) 16.6 kB 3.8 kB 2.99 kB
assets/commands-EZNoZhIQ.js (new) 16.3 kB 3.53 kB 2.95 kB
assets/WidgetRange-CgF3t69j.js (new) 16.2 kB 4.17 kB 3.72 kB
assets/commands-Cq6ZsgGb.js (new) 15.8 kB 3.5 kB 2.91 kB
assets/commands-aQkHTdTB.js (new) 15.8 kB 3.42 kB 2.8 kB
assets/commands-Dxp06ttF.js (new) 15.7 kB 3.39 kB 2.81 kB
assets/commands-BQu3xLRE.js (new) 15.6 kB 3.65 kB 2.85 kB
assets/commands-CFf0b0b9.js (new) 15.3 kB 3.18 kB 2.69 kB
assets/commands-DeppHLGy.js (new) 14.9 kB 3.59 kB 2.72 kB
assets/commands-cQYjl6qv.js (new) 14.7 kB 3.54 kB 2.64 kB
assets/DialogHeader-CKIboROh.js (new) 13.9 kB 3.79 kB 3.36 kB
assets/WaveAudioPlayer-B2p-b486.js (new) 12.8 kB 3.48 kB 3.06 kB
assets/i18n-Cs3vFkk2.js (new) 12.2 kB 3.24 kB 2.73 kB
assets/WidgetCurve-CAp_S2Bu.js (new) 11.3 kB 3.5 kB 3.16 kB
assets/AudioPreviewPlayer-Db__VoO2.js (new) 10.6 kB 3.06 kB 2.73 kB
assets/TeamWorkspacesDialogContent-CfqTXfvb.js (new) 10.3 kB 3 kB 2.66 kB
assets/SelectValue-BkSaG9gi.js (new) 10.2 kB 2.48 kB 2.19 kB
assets/Load3DConfiguration-z-y5xArO.js (new) 9.02 kB 2.66 kB 2.35 kB
assets/nodeTemplates-BYhRhoWW.js (new) 8.33 kB 2.88 kB 2.54 kB
assets/onboardingCloudRoutes-C1YXlHgH.js (new) 8.28 kB 2.58 kB 2.21 kB
assets/WidgetImageCompare-LMVN8Asq.js (new) 8.19 kB 2.33 kB 2.04 kB
assets/NightlySurveyController-BYWZijXd.js (new) 7.95 kB 2.7 kB 2.39 kB
assets/Popover-DI4zxci5.js (new) 7.18 kB 2.59 kB 2.29 kB
assets/InviteMemberDialogContent-BCxbbsHo.js (new) 6.76 kB 2.22 kB 1.95 kB
assets/commands-B0yn9kyb.js (new) 6.45 kB 1.52 kB 1.31 kB
assets/WidgetWithControl-SuiQ6vut.js (new) 6.3 kB 2.54 kB 2.26 kB
assets/AnimationControls-BjoZoGOM.js (new) 6.16 kB 1.88 kB 1.66 kB
assets/tierBenefits-DLvU60un.js (new) 5.94 kB 1.9 kB 1.65 kB
assets/main-DIZrBS1R.js (new) 5.68 kB 1.83 kB 1.54 kB
assets/load3dPreviewExtensions-CEyXY1AJ.js (new) 5.38 kB 1.75 kB 1.54 kB
assets/PaletteSwatchRow-BVZvBnAt.js (new) 5.27 kB 1.98 kB 1.75 kB
assets/FreeTierDialogContent-B95B-P_1.js (new) 5.23 kB 1.77 kB 1.54 kB
assets/CreateWorkspaceDialogContent-B9epf63T.js (new) 5.19 kB 1.83 kB 1.58 kB
assets/CloudNotificationContent-B0TgMiwU.js (new) 5.11 kB 1.79 kB 1.54 kB
assets/missingModelDownload-DsqgSjxG.js (new) 5.07 kB 1.98 kB 1.72 kB
assets/ChangeMemberRoleDialogContent-B9072ifN.js (new) 5.04 kB 1.66 kB 1.45 kB
assets/EditWorkspaceDialogContent-BGj6jea1.js (new) 5 kB 1.79 kB 1.55 kB
assets/WidgetTextarea-BWpm1M-Q.js (new) 4.86 kB 1.9 kB 1.66 kB
assets/DowngradeRemoveMembersDialogContent-DjwFr0KZ.js (new) 4.83 kB 1.7 kB 1.47 kB
assets/saveMesh-CBe-iEnO.js (new) 4.81 kB 1.55 kB 1.36 kB
assets/Preview3d-BsySNNBH.js (new) 4.59 kB 1.43 kB 1.23 kB
assets/ValueControlPopover-BQ4TE2wb.js (new) 4.55 kB 1.59 kB 1.42 kB
assets/CancelSubscriptionDialogContent-J8sLePuR.js (new) 4.54 kB 1.65 kB 1.44 kB
assets/ApiNodesSignInContent-Dg2_k5ya.js (new) 4.14 kB 1.34 kB 1.2 kB
assets/Slider-2XbZbg-u.js (new) 3.92 kB 1.45 kB 1.25 kB
assets/DeleteWorkspaceDialogContent-C4vM7HO3.js (new) 3.91 kB 1.47 kB 1.27 kB
assets/WidgetBoundingBox-BVykncVt.js (new) 3.82 kB 1.06 kB 922 B
assets/WidgetGalleria-CTLOpZXG.js (new) 3.8 kB 1.48 kB 1.32 kB
assets/LeaveWorkspaceDialogContent-3xKv7tcf.js (new) 3.73 kB 1.41 kB 1.22 kB
assets/RemoveMemberDialogContent-F5T607hx.js (new) 3.71 kB 1.37 kB 1.19 kB
assets/WidgetToggleSwitch-DiZiv3Q2.js (new) 3.67 kB 1.4 kB 1.23 kB
assets/RevokeInviteDialogContent-Cu2fH6qv.js (new) 3.63 kB 1.38 kB 1.21 kB
assets/InviteMemberUpsellDialogContent-EAG7KOMq.js (new) 3.47 kB 1.25 kB 1.11 kB
assets/Media3DTop-CBAoSJWC.js (new) 3.26 kB 1.3 kB 1.13 kB
assets/WidgetMarkdown-Bmn5Rrb1.js (new) 3.1 kB 1.27 kB 1.1 kB
assets/WidgetInputText-DPYQFarF.js (new) 3.07 kB 1.29 kB 1.16 kB
assets/GlobalToast-BpwOJEq4.js (new) 3.05 kB 1.26 kB 1.08 kB
assets/MediaVideoTop-DDUj_jrY.js (new) 2.91 kB 1.18 kB 1.03 kB
assets/load3dAdvanced-BV0sZaNS.js (new) 2.87 kB 1.13 kB 982 B
assets/teamPlanCreditStops-BK6OKGCe.js (new) 2.83 kB 1.3 kB 1.11 kB
assets/loadExternalScript-DOxt3YET.js (new) 2.65 kB 947 B 771 B
assets/ErrorPanelSurveyCta-CXMeQDVM.js (new) 2.64 kB 1.16 kB 1.03 kB
assets/SubscribeToRun-BZIAJFPz.js (new) 2.53 kB 1.1 kB 970 B
assets/WidgetLayoutField-CpJ2dyVi.js (new) 2.43 kB 1.06 kB 935 B
assets/WidgetChart-CUcivpiS.js (new) 2.41 kB 1.03 kB 887 B
assets/SubscriptionBenefits-B-DXLZh1.js (new) 2.07 kB 710 B 609 B
assets/MediaImageTop-B_ciDQso.js (new) 2.06 kB 992 B 858 B
assets/topupTracker-9H8jaRDc.js (new) 2.05 kB 884 B 739 B
assets/constants-DY0idKVf.js (new) 2.04 kB 724 B 613 B
assets/rolldown-runtime-w0pxe0c8.js (new) 2.03 kB 937 B 803 B
assets/graphHasMissingNodes-BihV5FX0.js (new) 1.93 kB 908 B 795 B
assets/webviewDetection-BGmTq1SX.js (new) 1.81 kB 865 B 715 B
assets/WidgetColorPicker-CrMOZ_6d.js (new) 1.74 kB 783 B 693 B
assets/auto-DlCaDGq4.js (new) 1.7 kB 619 B 546 B
assets/Loader-BVSBfRt3.js (new) 1.69 kB 814 B 745 B
assets/WidgetColors-BpKkEVMg.js (new) 1.68 kB 833 B 739 B
assets/MediaAudioTop-CQqHClVd.js (new) 1.67 kB 837 B 699 B
assets/Textarea-BhEWysFk.js (new) 1.61 kB 842 B 739 B
assets/signInSchema-BrpwADcU.js (new) 1.6 kB 584 B 523 B
assets/widgetPropFilter-Dpa84SyG.js (new) 1.52 kB 704 B 604 B
assets/VideoPlayOverlay-U5W2B6_T.js (new) 1.52 kB 762 B 679 B
assets/CloudRunButtonWrapper-C5j5Ecki.js (new) 1.13 kB 551 B 488 B
assets/MediaOtherTop-wWt5rXzg.js (new) 1.08 kB 606 B 502 B
assets/MediaTextTop-BsXZPdug.js (new) 1.06 kB 600 B 503 B
assets/cloudSessionCookie-D-Y9e51S.js (new) 991 B 468 B 424 B
assets/cloudBadges-CZs1O34e.js (new) 973 B 551 B 469 B
assets/ComfyOrgHeader-CB9bZtIQ.js (new) 960 B 530 B 464 B
assets/nodeTypes-DgIyNkY-.js (new) 932 B 446 B 369 B
assets/load3dSerialize-BGyX73HL.js (new) 885 B 426 B 363 B
assets/WebGLViewport-CV29bZH4.js (new) 842 B 418 B 339 B
assets/Load3DAdvanced-C8F1FAl_.js (new) 813 B 455 B 412 B
assets/devFeatureFlagOverride-BkGrEGSd.js (new) 756 B 467 B 408 B
assets/telemetry-BQKS_Is7.js (new) 546 B 334 B 271 B
assets/nightlyBadges-CvAtgq6H.js (new) 464 B 307 B 262 B
assets/src-x0-YC1Q7.js (new) 446 B 319 B 268 B
assets/widgetTypes--JmKRdKA.js (new) 416 B 274 B 261 B
assets/vRekaZIndex-BAGPgZGT.js (new) 360 B 262 B 223 B
assets/types-LUZjNlbK.js (new) 313 B 224 B 171 B
assets/cloud-subscription-CMkhwSUG.js (new) 279 B 184 B 147 B
assets/comfy-logo-single-DiwGj85E.js (new) 272 B 186 B 150 B
assets/missingModelDownload-SbIHyftI.js (new) 228 B 149 B 129 B
assets/SubscriptionPanelContentWorkspace-CwPdi0z3.js (new) 179 B 117 B 100 B
assets/Load3dViewerContent-FFj0Xp46.js (new) 137 B 103 B 106 B
assets/WidgetBoundingBox-C8NW77kH.js (new) 131 B 100 B 92 B
assets/Load3DAdvanced-CTltv4Du.js (new) 122 B 97 B 89 B
assets/WidgetLegacy-Bma-1bRN.js (new) 119 B 108 B 94 B
assets/workflowDraftStoreV2-M5UoKpxY.js (new) 113 B 105 B 117 B
assets/Load3D-BcwRaNF8.js (new) 98 B 89 B 93 B
assets/i18n-DMxzA6fv.js (new) 97 B 92 B 85 B
assets/changeTracker-1jL1pwGV.js (new) 93 B 95 B 82 B

Status: 165 added

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.6 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 59.3 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 80.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.0 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.7 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.9 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 46.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 179ms TBT · 77.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.3 MB heap
vue-large-graph-idle: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 157.6 MB heap
vue-large-graph-pan: · 58.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 41ms TBT · 173.1 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.1 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 9ms
canvas-idle: layout count 0
canvas-idle: style recalc count 9
canvas-idle: task duration 415ms
canvas-idle: script duration 24ms
canvas-idle: TBT 0ms
canvas-idle: heap used 54.6 MB
canvas-idle: DOM nodes 18
canvas-idle: event listeners 5
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 3ms
canvas-mouse-sweep: style recalc duration 37ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 73
canvas-mouse-sweep: task duration 803ms
canvas-mouse-sweep: script duration 128ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 49.5 MB
canvas-mouse-sweep: DOM nodes 55
canvas-mouse-sweep: event listeners 4
canvas-zoom-sweep: avg frame time 17ms
canvas-zoom-sweep: p95 frame time 17ms
canvas-zoom-sweep: layout duration 1ms
canvas-zoom-sweep: style recalc duration 18ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 32
canvas-zoom-sweep: task duration 334ms
canvas-zoom-sweep: script duration 25ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 57.9 MB
canvas-zoom-sweep: DOM nodes 78
canvas-zoom-sweep: event listeners 19
dom-widget-clipping: avg frame time 17ms
dom-widget-clipping: p95 frame time 17ms
dom-widget-clipping: layout duration 0ms
dom-widget-clipping: style recalc duration 9ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 12
dom-widget-clipping: task duration 378ms
dom-widget-clipping: script duration 63ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 63.1 MB
dom-widget-clipping: DOM nodes 19
dom-widget-clipping: event listeners 1
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 10ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 9
large-graph-idle: task duration 610ms
large-graph-idle: script duration 112ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 59.3 MB
large-graph-idle: DOM nodes 18
large-graph-idle: event listeners 6
large-graph-pan: avg frame time 17ms
large-graph-pan: p95 frame time 17ms
large-graph-pan: layout duration 0ms
large-graph-pan: style recalc duration 21ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 70
large-graph-pan: task duration 1183ms
large-graph-pan: script duration 421ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 80.1 MB
large-graph-pan: DOM nodes 18
large-graph-pan: event listeners 5
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 8ms
large-graph-zoom: style recalc duration 22ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 66
large-graph-zoom: task duration 1374ms
large-graph-zoom: script duration 504ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 67.0 MB
large-graph-zoom: DOM nodes 13
large-graph-zoom: event listeners 7
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
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 569ms
minimap-idle: script duration 108ms
minimap-idle: TBT 0ms
minimap-idle: heap used 64.7 MB
minimap-idle: DOM nodes 18
minimap-idle: event listeners 6
subgraph-dom-widget-clipping: avg frame time 17ms
subgraph-dom-widget-clipping: p95 frame time 17ms
subgraph-dom-widget-clipping: layout duration 0ms
subgraph-dom-widget-clipping: style recalc duration 12ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 378ms
subgraph-dom-widget-clipping: script duration 122ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 63.9 MB
subgraph-dom-widget-clipping: DOM nodes 20
subgraph-dom-widget-clipping: event listeners 6
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 10ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 385ms
subgraph-idle: script duration 17ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 54.1 MB
subgraph-idle: DOM nodes 20
subgraph-idle: event listeners 4
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 4ms
subgraph-mouse-sweep: style recalc duration 37ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 76
subgraph-mouse-sweep: task duration 719ms
subgraph-mouse-sweep: script duration 97ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 46.2 MB
subgraph-mouse-sweep: DOM nodes 64
subgraph-mouse-sweep: event listeners 4
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 14ms
subgraph-transition-enter: style recalc duration 30ms
subgraph-transition-enter: layout count 4
subgraph-transition-enter: style recalc count 16
subgraph-transition-enter: task duration 786ms
subgraph-transition-enter: script duration 32ms
subgraph-transition-enter: TBT 179ms
subgraph-transition-enter: heap used 77.4 MB
subgraph-transition-enter: DOM nodes 13833
subgraph-transition-enter: event listeners 2531
viewport-pan-sweep: avg frame time 17ms
viewport-pan-sweep: p95 frame time 17ms
viewport-pan-sweep: layout duration 0ms
viewport-pan-sweep: style recalc duration 58ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 252
viewport-pan-sweep: task duration 4022ms
viewport-pan-sweep: script duration 1334ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 67.3 MB
viewport-pan-sweep: DOM nodes 21
viewport-pan-sweep: event listeners 20
vue-large-graph-idle: avg frame time 18ms
vue-large-graph-idle: p95 frame time 17ms
vue-large-graph-idle: layout duration 0ms
vue-large-graph-idle: style recalc duration 0ms
vue-large-graph-idle: layout count 0
vue-large-graph-idle: style recalc count 0
vue-large-graph-idle: task duration 12923ms
vue-large-graph-idle: script duration 538ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 157.6 MB
vue-large-graph-idle: DOM nodes -3302
vue-large-graph-idle: event listeners -16374
vue-large-graph-pan: avg frame time 17ms
vue-large-graph-pan: p95 frame time 17ms
vue-large-graph-pan: layout duration 0ms
vue-large-graph-pan: style recalc duration 20ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 76
vue-large-graph-pan: task duration 15344ms
vue-large-graph-pan: script duration 855ms
vue-large-graph-pan: TBT 41ms
vue-large-graph-pan: heap used 173.1 MB
vue-large-graph-pan: DOM nodes -3302
vue-large-graph-pan: event listeners -16371
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 25ms
workflow-execution: layout count 5
workflow-execution: style recalc count 19
workflow-execution: task duration 121ms
workflow-execution: script duration 18ms
workflow-execution: TBT 0ms
workflow-execution: heap used 62.1 MB
workflow-execution: DOM nodes 162
workflow-execution: event listeners 70
Raw data
{
  "timestamp": "2026-06-30T06:24:05.320Z",
  "gitSha": "5e1f192da3145b34d544525e455c1460761c4610",
  "branch": "shihchi/refactor-string-extraction",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2039.7690000000068,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.935000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 400.111,
      "heapDeltaBytes": -2311620,
      "heapUsedBytes": 56387428,
      "domNodes": 18,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 22.630999999999997,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2039.6029999999996,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.708,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 429.76399999999995,
      "heapDeltaBytes": 1337072,
      "heapUsedBytes": 58086556,
      "domNodes": 18,
      "jsHeapTotalBytes": 18350080,
      "scriptDurationMs": 24.653000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1859.2879999999923,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 39.269999999999996,
      "layouts": 12,
      "layoutDurationMs": 3.5770000000000004,
      "taskDurationMs": 853.715,
      "heapDeltaBytes": -6662732,
      "heapUsedBytes": 52057684,
      "domNodes": 55,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 131.358,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1776.7640000000142,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 34.603,
      "layouts": 12,
      "layoutDurationMs": 3.0889999999999995,
      "taskDurationMs": 752.87,
      "heapDeltaBytes": -7062220,
      "heapUsedBytes": 51749944,
      "domNodes": 54,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 124.77799999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1721.9780000000355,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.647999999999996,
      "layouts": 6,
      "layoutDurationMs": 0.5889999999999999,
      "taskDurationMs": 331.254,
      "heapDeltaBytes": 1883292,
      "heapUsedBytes": 60639148,
      "domNodes": 78,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 23.555,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1722.0869999999877,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.903999999999996,
      "layouts": 6,
      "layoutDurationMs": 0.619,
      "taskDurationMs": 336.036,
      "heapDeltaBytes": 1917248,
      "heapUsedBytes": 60701428,
      "domNodes": 78,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 25.687,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 653.8999999999646,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.760000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 408.2710000000001,
      "heapDeltaBytes": 7539048,
      "heapUsedBytes": 66278092,
      "domNodes": 16,
      "jsHeapTotalBytes": 19136512,
      "scriptDurationMs": 65.84899999999999,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 576.1119999999664,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 9.397,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 347.357,
      "heapDeltaBytes": 7410096,
      "heapUsedBytes": 66116496,
      "domNodes": 22,
      "jsHeapTotalBytes": 18874368,
      "scriptDurationMs": 60.869,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2022.90899999997,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 10.116,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 620.9720000000001,
      "heapDeltaBytes": -9620656,
      "heapUsedBytes": 62195396,
      "domNodes": 18,
      "jsHeapTotalBytes": 9580544,
      "scriptDurationMs": 113.453,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2043.5109999999668,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.100999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 598.1229999999999,
      "heapDeltaBytes": -9526568,
      "heapUsedBytes": 62214940,
      "domNodes": 18,
      "jsHeapTotalBytes": 11677696,
      "scriptDurationMs": 110.10400000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2128.6079999999856,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 20.322000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1166.5390000000002,
      "heapDeltaBytes": 10811512,
      "heapUsedBytes": 83833932,
      "domNodes": 18,
      "jsHeapTotalBytes": 11329536,
      "scriptDurationMs": 410.749,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2176.7620000000534,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 20.945999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1198.536,
      "heapDeltaBytes": 11366344,
      "heapUsedBytes": 84151244,
      "domNodes": 18,
      "jsHeapTotalBytes": 10543104,
      "scriptDurationMs": 430.701,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3136.91799999998,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 19.808,
      "layouts": 60,
      "layoutDurationMs": 7.802,
      "taskDurationMs": 1336.47,
      "heapDeltaBytes": 13899960,
      "heapUsedBytes": 68900572,
      "domNodes": 14,
      "jsHeapTotalBytes": 6553600,
      "scriptDurationMs": 495.05400000000003,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3168.1219999999257,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 25.167,
      "layouts": 60,
      "layoutDurationMs": 8.203,
      "taskDurationMs": 1411.712,
      "heapDeltaBytes": 15993100,
      "heapUsedBytes": 71660168,
      "domNodes": 12,
      "jsHeapTotalBytes": 6291456,
      "scriptDurationMs": 512.295,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2020.6959999999867,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.717,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 557.137,
      "heapDeltaBytes": -9285616,
      "heapUsedBytes": 63849440,
      "domNodes": 18,
      "jsHeapTotalBytes": 8007680,
      "scriptDurationMs": 107.66,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2004.666000000043,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.312000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 580.0970000000001,
      "heapDeltaBytes": 10670288,
      "heapUsedBytes": 71928788,
      "domNodes": 18,
      "jsHeapTotalBytes": 5767168,
      "scriptDurationMs": 107.73100000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 580.3869999999733,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.783,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 366.31100000000004,
      "heapDeltaBytes": 7836828,
      "heapUsedBytes": 66793064,
      "domNodes": 20,
      "jsHeapTotalBytes": 18350080,
      "scriptDurationMs": 119.652,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 576.8199999999979,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 12.573999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 389.18399999999997,
      "heapDeltaBytes": 8409028,
      "heapUsedBytes": 67189240,
      "domNodes": 20,
      "jsHeapTotalBytes": 19922944,
      "scriptDurationMs": 125.05,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1997.1869999999967,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.117,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 352.60999999999996,
      "heapDeltaBytes": -2200120,
      "heapUsedBytes": 56900376,
      "domNodes": 20,
      "jsHeapTotalBytes": 26476544,
      "scriptDurationMs": 13.07,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1995.5750000000307,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 10.007,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 417.204,
      "heapDeltaBytes": -2158196,
      "heapUsedBytes": 56574720,
      "domNodes": 20,
      "jsHeapTotalBytes": 26738688,
      "scriptDurationMs": 19.986000000000004,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1679.4519999999693,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.853,
      "layouts": 16,
      "layoutDurationMs": 4.0600000000000005,
      "taskDurationMs": 722.158,
      "heapDeltaBytes": -10349932,
      "heapUsedBytes": 48481436,
      "domNodes": 64,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 96.80699999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1683.4610000000225,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.436,
      "layouts": 16,
      "layoutDurationMs": 4.286999999999999,
      "taskDurationMs": 716.519,
      "heapDeltaBytes": -10443928,
      "heapUsedBytes": 48309660,
      "domNodes": 63,
      "jsHeapTotalBytes": 25952256,
      "scriptDurationMs": 97.74199999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1084.9190000000135,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 29.56600000000001,
      "layouts": 4,
      "layoutDurationMs": 14.112000000000004,
      "taskDurationMs": 785.522,
      "heapDeltaBytes": 4528112,
      "heapUsedBytes": 81171648,
      "domNodes": 13833,
      "jsHeapTotalBytes": 16777216,
      "scriptDurationMs": 32.435,
      "eventListeners": 2531,
      "totalBlockingTimeMs": 179,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8221.059000000025,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 57.13999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3936.553,
      "heapDeltaBytes": -3851324,
      "heapUsedBytes": 68061268,
      "domNodes": 20,
      "jsHeapTotalBytes": 16834560,
      "scriptDurationMs": 1291.981,
      "eventListeners": 20,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8229.542999999921,
      "styleRecalcs": 252,
      "styleRecalcDurationMs": 58.257,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4107.612,
      "heapDeltaBytes": 1108772,
      "heapUsedBytes": 73064256,
      "domNodes": 22,
      "jsHeapTotalBytes": 19718144,
      "scriptDurationMs": 1375.422,
      "eventListeners": 20,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12923.325999999975,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12904.417,
      "heapDeltaBytes": -21591404,
      "heapUsedBytes": 162549548,
      "domNodes": -3302,
      "jsHeapTotalBytes": 17010688,
      "scriptDurationMs": 538.823,
      "eventListeners": -16374,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.886666666666617,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12959.347999999976,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12941.554999999998,
      "heapDeltaBytes": -15042280,
      "heapUsedBytes": 167956212,
      "domNodes": -3302,
      "jsHeapTotalBytes": 16486400,
      "scriptDurationMs": 536.6880000000001,
      "eventListeners": -16373,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15418.141999999989,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 20.12900000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15390.277000000002,
      "heapDeltaBytes": -11643364,
      "heapUsedBytes": 182158536,
      "domNodes": -3302,
      "jsHeapTotalBytes": 17973248,
      "scriptDurationMs": 842.007,
      "eventListeners": -16372,
      "totalBlockingTimeMs": 47,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15321.467999999983,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 20.203000000000028,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15297.601999999997,
      "heapDeltaBytes": -33665828,
      "heapUsedBytes": 180913216,
      "domNodes": -3302,
      "jsHeapTotalBytes": 16662528,
      "scriptDurationMs": 868.512,
      "eventListeners": -16370,
      "totalBlockingTimeMs": 35,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 453.4580000000119,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 25.567000000000004,
      "layouts": 5,
      "layoutDurationMs": 1.5050000000000003,
      "taskDurationMs": 124.66300000000001,
      "heapDeltaBytes": 5400860,
      "heapUsedBytes": 65222876,
      "domNodes": 168,
      "jsHeapTotalBytes": 3407872,
      "scriptDurationMs": 18.536000000000005,
      "eventListeners": 69,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 462.3839999999291,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 24.595,
      "layouts": 4,
      "layoutDurationMs": 1.1179999999999999,
      "taskDurationMs": 117.15400000000001,
      "heapDeltaBytes": 5149892,
      "heapUsedBytes": 65028192,
      "domNodes": 155,
      "jsHeapTotalBytes": 2883584,
      "scriptDurationMs": 18.436,
      "eventListeners": 71,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Two stores now use lastIndexOf('/') with slice(...) for slash-delimited extraction, and nodeBookmarkStore gains tests covering bookmark, folder, and customization behaviors.

Changes

Slash Parsing Updates

Layer / File(s) Summary
Model filename extraction
src/stores/modelStore.ts
ComfyModelDef now derives simplified_file_name from normalized_file_name with lastIndexOf('/') and slice(...) before the existing .safetensors handling.
Bookmark path parsing
src/stores/nodeBookmarkStore.ts
buildBookmarkTree now computes bookmark name and category with lastIndexOf('/') and slice(...) instead of split('/')-based parsing.
Bookmark store tests
src/stores/nodeBookmarkStore.test.ts
A Vitest suite adds mocked settings and node definitions, resets Pinia state, and covers bookmark lookup, mutation, folder creation, and tree building.
Folder and customization tests
src/stores/nodeBookmarkStore.test.ts
The suite adds coverage for folder rename and delete behavior, bookmark customization persistence, and customization key renaming.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐇 I hop through slashes, neat and bright,
One slice to name the path just right.
Bookmarks bloom and folders grow,
With tests to guard the rabbit’s flow.

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main refactor in the PR.
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 title/description describe a refactor, not a bug fix; the E2E-test requirement is not triggered.
Adr Compliance For Entity/Litegraph Changes ✅ Passed Changed files are only store files and tests, not litegraph/ecs/entity code, so ADR 0003/0008 checks do not apply.
Description check ✅ Passed The PR description matches the template closely with Summary, Changes, and Review Focus filled in, and the omitted optional sections are acceptable.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

❤️ Share

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

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 28, 2026
@codecov

codecov Bot commented Jun 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@                      Coverage Diff                      @@
##           codex/coverage-gate-infra   #13263      +/-   ##
=============================================================
+ Coverage                      78.24%   78.25%   +0.01%     
=============================================================
  Files                           1633     1633              
  Lines                         114228   114103     -125     
  Branches                       39071    38390     -681     
=============================================================
- Hits                           89382    89297      -85     
+ Misses                         23937    23901      -36     
+ Partials                         909      905       -4     
Flag Coverage Δ
unit 65.36% <100.00%> (+0.09%) ⬆️

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

Files with missing lines Coverage Δ
src/stores/modelStore.ts 93.10% <100.00%> (ø)
src/stores/nodeBookmarkStore.ts 100.00% <100.00%> (+23.91%) ⬆️

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

@huang47 huang47 force-pushed the shihchi/refactor-string-extraction branch from 1bea28e to 0b91930 Compare June 28, 2026 19:31
@huang47

huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

Added the covering test(s) for the refactored lines so codecov/patch sees them (the broader suite still lives in the coverage PRs).

@huang47

huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@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/stores/nodeBookmarkStore.test.ts`:
- Around line 30-37: The node bookmark test currently only verifies child count,
so it can miss incorrect slash parsing in the category-to-folder logic. Update
the affected tests in nodeBookmarkStore.test.ts to assert the actual parsed
category/tree placement produced by the bookmark flow, or replace the
buildNodeDefTree mock with one that preserves category semantics. Use the
existing useNodeDefStore, buildNodeDefTree, and createDummyFolderNodeDef test
setup to validate the parent folder path, not just the number of children.
🪄 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: 6932052c-f766-4406-bb7b-2c95092c5397

📥 Commits

Reviewing files that changed from the base of the PR and between 1bea28e and 0b91930.

📒 Files selected for processing (3)
  • src/stores/modelStore.ts
  • src/stores/nodeBookmarkStore.test.ts
  • src/stores/nodeBookmarkStore.ts

Comment thread src/stores/nodeBookmarkStore.test.ts
@huang47 huang47 force-pushed the shihchi/refactor-string-extraction branch from 0b91930 to ea3299e Compare June 28, 2026 19:49
@huang47

huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the CodeRabbit finding:

  • nodeBookmarkStore.test.ts: the bookmark-tree test previously asserted only child count, so a wrong parse from the new bookmark.slice(0, Math.max(0, slashIndex)) could slip through (the buildNodeDefTree mock ignores category). Replaced it with a test that asserts the parsed parent category for each surviving node across the cases the refactor touches — top-level/no-slash (LoadImage -> ''), single-slash (sampling/KSampler -> 'sampling'), and nested (image/preprocessors/Canny -> 'image/preprocessors') — while still dropping unknown defs and placing folder dummies. This now guards the Math.max no-slash branch and lastIndexOf-vs-split nesting semantics. 16 tests pass; typecheck/lint green.

The source refactor is behavior-preserving across no-slash, nested, leading-slash, and empty inputs (trailing-slash handled earlier by the folder check).

@huang47

huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 28, 2026
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Add a COVERAGE_CRITICAL gate that measures coverage over a curated
allow-list of critical files and wire it into the unit CI job. Thresholds
are locked to the current main baseline (statements 58 / branches 47 /
functions 54 / lines 58); later PRs ratchet them upward as tests land.
huang47 added 5 commits June 29, 2026 15:22
Replace split('/').pop() ?? '' with slice(lastIndexOf('/') + 1) in modelStore
and nodeBookmarkStore. Equivalent across no-slash/trailing-slash/empty inputs and
drops the nullish fallback branch.
@huang47 huang47 force-pushed the shihchi/refactor-string-extraction branch from ea3299e to ea91c63 Compare June 30, 2026 06:00
@huang47 huang47 changed the base branch from main to codex/coverage-gate-infra June 30, 2026 06:00
@huang47

huang47 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Created by Codex

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@huang47 On it — I’ll review the changes. A quick hop, skip, and review. 🐇

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@huang47

huang47 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai approve

Created by Codex

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Rate Limit Exceeded

@huang47 have exceeded the limit for the number of chat messages per hour. Please wait 39 minutes and 58 seconds before sending another message.

@huang47

huang47 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai approve

Created by Codex

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 30, 2026
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@huang47 Approved.

✅ Action performed

Comments resolved and changes approved.

@huang47 huang47 deleted the branch Comfy-Org:main June 30, 2026 22:17
@huang47 huang47 closed this Jun 30, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 30, 2026
@huang47 huang47 reopened this Jun 30, 2026
@huang47 huang47 changed the base branch from codex/coverage-gate-infra to main June 30, 2026 22:23
@huang47 huang47 dismissed coderabbitai[bot]’s stale review June 30, 2026 22:23

The base branch was changed.

@huang47

huang47 commented Jul 1, 2026

Copy link
Copy Markdown
Contributor Author

Replaced by #13345 so the draft PR uses an origin-backed branch.

@huang47 huang47 closed this Jul 1, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant