Skip to content

test: cover session and UI stores#13257

Closed
huang47 wants to merge 6 commits into
Comfy-Org:mainfrom
huang47:shihchi/coverage-session-ui-stores
Closed

test: cover session and UI stores#13257
huang47 wants to merge 6 commits into
Comfy-Org:mainfrom
huang47:shihchi/coverage-session-ui-stores

Conversation

@huang47

@huang47 huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Add unit branch-coverage for session, dialog and UI stores. Part of the overall-coverage track of the test-coverage initiative.

Changes

  • What: New/expanded tests for src/stores/actionBarButtonStore.test.ts, src/stores/appModeStore.test.ts, src/stores/authStore.test.ts, src/stores/bootstrapStore.test.ts, src/stores/commandStore.test.ts, src/stores/dialogStore.test.ts, src/stores/domWidgetStore.test.ts, src/stores/jobPreviewStore.test.ts, src/stores/menuItemStore.test.ts, src/stores/previewExposureStore.test.ts. Test-only — no source changes.
  • Breaking: none.

Review Focus

These target files outside the 27-file critical allow-list, so they do not move pnpm test:coverage:critical — they raise overall project coverage. The exact coverage delta is reported automatically by the codecov bot on this PR. All tests verified green on main.

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds and extends Vitest test suites across ten Pinia store test files, covering new edge cases, async state transitions, and additional store behaviors.

Changes

Store Test Suite Expansion

Layer / File(s) Summary
Small store tests
src/stores/actionBarButtonStore.test.ts, src/stores/bootstrapStore.test.ts, src/stores/domWidgetStore.test.ts, src/stores/previewExposureStore.test.ts, src/stores/jobPreviewStore.test.ts
New and extended tests cover action bar button collection, bootstrap idempotency, widget replacement and no-op paths, exposure host isolation, and preview cleanup when ids are missing or storage is disabled.
commandStore and dialogStore tests
src/stores/commandStore.test.ts, src/stores/dialogStore.test.ts
Command store tests now cover mutable keybinding lookup plus function-valued command fields; dialog store tests cover key generation, stack limits, lifecycle handlers, partial updates, and extension-dialog validation.
New menuItemStore test suite
src/stores/menuItemStore.test.ts
A new menuItemStore test file covers linear-mode tracking, menu group construction and repair, command conversion, extension command filtering, and core command registration.
appModeStore test extensions
src/stores/appModeStore.test.ts
App mode tests add a reactive canvas mock, broader selection pruning cases, a loading-graph watcher guard, remove-selected-input edge cases, mode transition assertions, and legacy tuple migration pruning.
authStore test extensions
src/stores/authStore.test.ts
Auth store tests add workspace auth mocking, token selection cases, null-email telemetry, refresh-trigger guarding, workspace auth minting, billing and balance error handling, password actions, and credit purchase auth checks.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

size:XXL

Suggested reviewers

  • DrJKL

🐇 Thump-thump through tests I go,
Buttons, dialogs, tokens in a row.
Tiny edge cases now safely bright,
The warren’s covered end to end tonight.

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately reflects the main changes: added test coverage for session and UI-related stores.
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 is coverage-focused, not bug-fix language; no commit-subject fix signal is provided, so the E2E-regression requirement is not triggered.
Adr Compliance For Entity/Litegraph Changes ✅ Passed No changed files touch src/lib/litegraph/, src/ecs/, or graph-entity paths, so the ADR compliance check is not applicable.
Description check ✅ Passed The PR description covers Summary, Changes, and Review Focus with the required details; only the optional Screenshots section is omitted.
✨ 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.

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown

🎨 Storybook: 🚧 Building...

🎭 Playwright: ✅ 1687 passed, 0 failed · 3 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 (✅ 16 / ❌ 0 / ⚠️ 1 / ⏭️ 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-DIeg7iQT.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-DHomeUF6.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-CkPWDK5T.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-CVd36FAw.js (new) 11.4 kB 3.06 kB 2.69 kB
assets/CloudSignupView-VKD1oRX0.js (new) 9.79 kB 2.74 kB 2.41 kB
assets/CloudLayoutView-BcV1iQxz.js (new) 9.36 kB 2.34 kB 2.03 kB
assets/UserCheckView-Cbd28SXD.js (new) 8.8 kB 2.22 kB 1.93 kB
assets/CloudSubscriptionRedirectView-BI4ruemd.js (new) 6.63 kB 2.45 kB 2.15 kB
assets/UserSelectView-C8xg5pY5.js (new) 6 kB 2.15 kB 1.89 kB
assets/CloudForgotPasswordView-DoS2ZyXQ.js (new) 5.15 kB 1.76 kB 1.54 kB
assets/CloudAuthTimeoutView-0lWtKtTw.js (new) 4.49 kB 1.57 kB 1.36 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-CMGdDTd9.js (new) 49.4 kB 9.96 kB 8.82 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-BzmF4S2d.js (new) 24.2 kB 5.76 kB 5.07 kB
assets/CreditsPanel-DKldnMWC.js (new) 15.6 kB 4.61 kB 4.04 kB
assets/AboutPanel-B1mFYxYj.js (new) 12 kB 3.29 kB 2.94 kB
assets/SubscriptionPanel-Bon7OLKV.js (new) 11.2 kB 3.5 kB 3.08 kB
assets/ExtensionPanel-BP7nK5zm.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-B_whiScF.js (new) 6.15 kB 1.97 kB 1.76 kB
assets/UserPanel-Czf4KLCn.js (new) 5.78 kB 1.82 kB 1.57 kB
assets/refreshRemoteConfig-DeIGzlB6.js (new) 2.42 kB 1.06 kB 941 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-C6qK65x2.js (new) 990 B 541 B 466 B
assets/refreshRemoteConfig-CLc3gXA1.js (new) 110 B 89 B 92 B

Status: 27 added

User & Accounts — 26.9 kB

Authentication, profile, and account management bundles

File Size Gzip Brotli
assets/SignUpForm-DV2LrPjn.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-BWUV5-Bd.js (new) 3.69 kB 1.3 kB 1.13 kB
assets/usePostAuthRedirect-DFpJ_Zmd.js (new) 3.33 kB 1.27 kB 1.1 kB
assets/UpdatePasswordContent-BekbnUJ-.js (new) 1.92 kB 874 B 768 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-CudUtbDA.js (new) 130 B 112 B 115 B
assets/workspaceAuthStore-HWvVy9r8.js (new) 110 B 104 B 103 B
assets/auth-BJ6hgqWg.js (new) 105 B 96 B 87 B

Status: 10 added

Editors & Dialogs — 117 kB

Modals, dialogs, drawers, and in-app editors

File Size Gzip Brotli
assets/ComfyHubPublishDialog-CldiUmhc.js (new) 90.5 kB 19.3 kB 16.5 kB
assets/useShareDialog-BeLmBvbT.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-CKTHXEok.js (new) 143 B 105 B 91 B
assets/useSubscriptionDialog--HGl3QSF.js (new) 110 B 102 B 88 B

Status: 5 added

UI Components — 57.2 kB

Reusable component library chunks

File Size Gzip Brotli
assets/ComfyQueueButton-DklOOR9t.js (new) 13.6 kB 3.82 kB 3.41 kB
assets/useTerminalTabs-nm74YbrD.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-B0tPBTH3.js (new) 2.35 kB 1.04 kB 906 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-3bc_gUm2.js (new) 829 B 494 B 416 B
assets/ComfyQueueButton-tVsV6gwo.js (new) 128 B 99 B 88 B

Status: 13 added

Data & Services — 269 kB

Stores, services, APIs, and repositories

File Size Gzip Brotli
assets/load3dService-fFdPYE61.js (new) 126 kB 27.8 kB 23.5 kB
assets/api-BezRp4-7.js (new) 91.9 kB 25.3 kB 21.7 kB
assets/workflowShareService-DXfmTPF-.js (new) 17 kB 5.01 kB 4.44 kB
assets/releaseStore-DOZfY2U8.js (new) 8.29 kB 2.33 kB 2.04 kB
assets/keybindingService-4knbEHH6.js (new) 7.12 kB 1.77 kB 1.52 kB
assets/dialogStore-BYoDry7e.js (new) 5.36 kB 1.66 kB 1.43 kB
assets/extensionStore-DcfnNQ8s.js (new) 5.29 kB 1.86 kB 1.57 kB
assets/userStore-DOEUhvXn.js (new) 2.42 kB 932 B 819 B
assets/serverConfigStore-m5ZP9rkQ.js (new) 2.35 kB 811 B 707 B
assets/audioService-BjI5idEW.js (new) 1.76 kB 861 B 751 B
assets/toastStore-Dj6onFfy.js (new) 889 B 431 B 371 B
assets/dialogService-7ct-xjII.js (new) 100 B 99 B 91 B
assets/settingStore-Y5NKGpZ6.js (new) 98 B 98 B 102 B
assets/assetsStore-BNZIPjjM.js (new) 96 B 97 B 85 B
assets/releaseStore-moO29ioO.js (new) 95 B 86 B 88 B
assets/api-xC8-IicA.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-C_sfca8m.js (new) 3.01 MB 695 kB 524 kB
assets/useConflictDetection-CHNQoRw0.js (new) 234 kB 52.3 kB 42.6 kB
assets/useLoad3d-FXxZUAjG.js (new) 25.5 kB 5.75 kB 5.09 kB
assets/useLoad3dViewer-DgMLyJlB.js (new) 21.1 kB 4.98 kB 4.37 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-Wcg-ajwC.js (new) 5.55 kB 1.7 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-BFbllk3h.js (new) 3.52 kB 1.45 kB 1.25 kB
assets/useSessionCookie-DKa3pTwh.js (new) 3.33 kB 1.15 kB 976 B
assets/useExternalLink-T3WvYWNJ.js (new) 3.03 kB 1.16 kB 1.02 kB
assets/useDowngradeToPersonal-CeT1Bfkr.js (new) 3 kB 1.18 kB 1.02 kB
assets/assetPreviewUtil-BqujcI2h.js (new) 2.41 kB 1 kB 881 B
assets/useFeatureUsageTracker-DwLGqx-X.js (new) 2.13 kB 945 B 802 B
assets/useUpstreamValue-DulgKrZi.js (new) 2.04 kB 792 B 701 B
assets/useWorkspaceTierLabel-D43joabq.js (new) 1.99 kB 851 B 728 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-TYRtul-0.js (new) 311 B 165 B 147 B
assets/SkeletonUtils-BHtFQJC3.js (new) 133 B 111 B 119 B
assets/useSessionCookie-uW25nb-x.js (new) 101 B 86 B 83 B
assets/useFeatureFlags-Dd4XJKMR.js (new) 98 B 85 B 79 B
assets/useLoad3dViewer-BOD9NWvG.js (new) 98 B 85 B 86 B
assets/useCurrentUser-tu3kvNiv.js (new) 96 B 97 B 83 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-vkuYAf4x.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-CBx5LbrD.js (new) 83.9 kB 18.3 kB 15.8 kB
assets/Load3DControls-D-ONGQbJ.js (new) 46.8 kB 7.56 kB 6.62 kB
assets/SubscriptionTransitionPreviewWorkspace-nVJcP9_a.js (new) 45.7 kB 9.47 kB 8.39 kB
assets/SubscriptionRequiredDialogContentUnified-16ZsX2-_.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-DigqpPvI.js (new) 34.5 kB 7.48 kB 6.59 kB
assets/WidgetPainter-QDGT1VhL.js (new) 32.7 kB 7.9 kB 6.98 kB
assets/Load3dViewerContent-COoHovKZ.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-yjYeOKgU.js (new) 28.6 kB 7.9 kB 7 kB
assets/SubscriptionRequiredDialogContent-BhyXG4rg.js (new) 26.8 kB 6.63 kB 5.85 kB
assets/initHostTelemetry-wXQKbW7r.js (new) 25.2 kB 6.22 kB 5.2 kB
assets/SubscriptionPanelContentWorkspace-D6t61mLE.js (new) 24.8 kB 5.77 kB 5.06 kB
assets/SubscriptionRequiredDialogContentWorkspace-nE_9A1tc.js (new) 24.6 kB 5.65 kB 4.96 kB
assets/ColorPicker-B_i68tMU.js (new) 24.3 kB 6.34 kB 5.6 kB
assets/WidgetImageCrop-BNtXVwEH.js (new) 23.3 kB 5.75 kB 5.05 kB
assets/load3d-CVVyFf7N.js (new) 21.3 kB 5.19 kB 4.5 kB
assets/CurrentUserPopoverWorkspace-BNoKdZyJ.js (new) 20.5 kB 4.7 kB 4.19 kB
assets/SignInContent-BVpZAmZO.js (new) 20.1 kB 5.07 kB 4.43 kB
assets/Load3D-51tEtiRi.js (new) 19.1 kB 4.52 kB 3.94 kB
assets/WidgetInputNumber-CIQedbny.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-CRVjYZ0Z.js (new) 17 kB 4.52 kB 3.98 kB
assets/WidgetRecordAudio-BImYbIbv.js (new) 16.6 kB 4.63 kB 4.15 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-IXdATMBZ.js (new) 16.2 kB 4.17 kB 3.73 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-DNlsl972.js (new) 12.8 kB 3.48 kB 3.05 kB
assets/i18n-Cs3vFkk2.js (new) 12.2 kB 3.24 kB 2.73 kB
assets/WidgetCurve-CYNgIvqn.js (new) 11.3 kB 3.5 kB 3.17 kB
assets/AudioPreviewPlayer-Db__VoO2.js (new) 10.6 kB 3.06 kB 2.73 kB
assets/TeamWorkspacesDialogContent-DgXnk1vw.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-DQtwEdUf.js (new) 9.02 kB 2.66 kB 2.35 kB
assets/nodeTemplates-jlBBPg34.js (new) 8.33 kB 2.88 kB 2.54 kB
assets/onboardingCloudRoutes-D6BVBcQY.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-DEVtV4OW.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-CH-_WxrW.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-DTyZ4aGs.js (new) 6.3 kB 2.53 kB 2.26 kB
assets/AnimationControls-BjoZoGOM.js (new) 6.16 kB 1.88 kB 1.66 kB
assets/tierBenefits-kf4MtlQs.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-XugatK17.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-Xh_AF3Do.js (new) 5.23 kB 1.77 kB 1.55 kB
assets/CreateWorkspaceDialogContent-DMjfXjec.js (new) 5.19 kB 1.82 kB 1.58 kB
assets/CloudNotificationContent-B0TgMiwU.js (new) 5.11 kB 1.79 kB 1.54 kB
assets/missingModelDownload-CkTcFsFO.js (new) 5.07 kB 1.98 kB 1.72 kB
assets/ChangeMemberRoleDialogContent-BwiKJnVw.js (new) 5.04 kB 1.66 kB 1.46 kB
assets/EditWorkspaceDialogContent-CadYMjJp.js (new) 5 kB 1.79 kB 1.56 kB
assets/WidgetTextarea-o_xg92WK.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-LYDwZSnp.js (new) 4.81 kB 1.55 kB 1.37 kB
assets/Preview3d-v9ebC8So.js (new) 4.59 kB 1.43 kB 1.23 kB
assets/ValueControlPopover-DDHp_4nP.js (new) 4.55 kB 1.59 kB 1.42 kB
assets/CancelSubscriptionDialogContent-CFItSGsc.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-CKBmh6mY.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-fuvfkbCy.js (new) 3.73 kB 1.41 kB 1.22 kB
assets/RemoveMemberDialogContent-CdxOHYt0.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-H6e4c8G-.js (new) 3.63 kB 1.38 kB 1.21 kB
assets/InviteMemberUpsellDialogContent-CH6dZ_YW.js (new) 3.47 kB 1.25 kB 1.09 kB
assets/Media3DTop-BOqI4GQq.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-D_S3LDeH.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-B5n5Juua.js (new) 2.87 kB 1.13 kB 981 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-CrdMXWp8.js (new) 2.53 kB 1.1 kB 969 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-BmHldoPI.js (new) 1.93 kB 905 B 791 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-CKOs-J6b.js (new) 1.67 kB 836 B 698 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-BQ5HjlNa.js (new) 1.13 kB 547 B 485 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-Brr9XpZV.js (new) 991 B 468 B 424 B
assets/cloudBadges-C5ovBXo8.js (new) 973 B 548 B 468 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-CPFF7llc.js (new) 813 B 453 B 413 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-B9r4gBHE.js (new) 464 B 306 B 296 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-BAYMY7B3.js (new) 228 B 150 B 130 B
assets/SubscriptionPanelContentWorkspace-BigMppIY.js (new) 179 B 117 B 90 B
assets/Load3dViewerContent-N3f1sVC3.js (new) 137 B 103 B 95 B
assets/WidgetBoundingBox-C8NW77kH.js (new) 131 B 100 B 92 B
assets/Load3DAdvanced-DMPGm4bh.js (new) 122 B 97 B 92 B
assets/WidgetLegacy-CitiZw1o.js (new) 119 B 108 B 95 B
assets/workflowDraftStoreV2-D9SkBVX_.js (new) 113 B 105 B 110 B
assets/Load3D-Cqoz_IhS.js (new) 98 B 89 B 82 B
assets/i18n-DMxzA6fv.js (new) 97 B 92 B 85 B
assets/changeTracker-Bxo8UKPC.js (new) 93 B 95 B 83 B

Status: 165 added

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.1 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.7 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.0 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.1 MB heap
large-graph-pan: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 79.4 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.9 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.1 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.5 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 46.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 151ms TBT · 77.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.5 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 164.5 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 6ms TBT · 161.2 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.3 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 8ms
canvas-idle: layout count 0
canvas-idle: style recalc count 10
canvas-idle: task duration 353ms
canvas-idle: script duration 16ms
canvas-idle: TBT 0ms
canvas-idle: heap used 54.1 MB
canvas-idle: DOM nodes 19
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 766ms
canvas-mouse-sweep: script duration 118ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 49.7 MB
canvas-mouse-sweep: DOM nodes 56
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 16ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 301ms
canvas-zoom-sweep: script duration 19ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 58.0 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 7ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 413ms
dom-widget-clipping: script duration 61ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 67.1 MB
dom-widget-clipping: DOM nodes -138
dom-widget-clipping: event listeners -101
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 7ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 8
large-graph-idle: task duration 478ms
large-graph-idle: script duration 75ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 62.1 MB
large-graph-idle: DOM nodes 16
large-graph-idle: event listeners 4
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 20ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 69
large-graph-pan: task duration 995ms
large-graph-pan: script duration 352ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 79.4 MB
large-graph-pan: DOM nodes -125
large-graph-pan: event listeners -62
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 9ms
large-graph-zoom: style recalc duration 21ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 66
large-graph-zoom: task duration 1284ms
large-graph-zoom: script duration 485ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 65.9 MB
large-graph-zoom: DOM nodes 14
large-graph-zoom: event listeners 8
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 8ms
minimap-idle: layout count 0
minimap-idle: style recalc count 9
minimap-idle: task duration 491ms
minimap-idle: script duration 79ms
minimap-idle: TBT 0ms
minimap-idle: heap used 61.1 MB
minimap-idle: DOM nodes 18
minimap-idle: event listeners 4
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 11ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 359ms
subgraph-dom-widget-clipping: script duration 125ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 63.5 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 8ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 351ms
subgraph-idle: script duration 14ms
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 36ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 76
subgraph-mouse-sweep: task duration 658ms
subgraph-mouse-sweep: script duration 91ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 46.2 MB
subgraph-mouse-sweep: DOM nodes 61
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 12ms
subgraph-transition-enter: style recalc duration 28ms
subgraph-transition-enter: layout count 4
subgraph-transition-enter: style recalc count 16
subgraph-transition-enter: task duration 804ms
subgraph-transition-enter: script duration 36ms
subgraph-transition-enter: TBT 151ms
subgraph-transition-enter: heap used 77.8 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 63ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 251
viewport-pan-sweep: task duration 3523ms
viewport-pan-sweep: script duration 1169ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 66.5 MB
viewport-pan-sweep: DOM nodes 20
viewport-pan-sweep: event listeners 20
vue-large-graph-idle: avg frame time 17ms
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 13418ms
vue-large-graph-idle: script duration 504ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 164.5 MB
vue-large-graph-idle: DOM nodes -3302
vue-large-graph-idle: event listeners -16375
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 22ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 94
vue-large-graph-pan: task duration 16050ms
vue-large-graph-pan: script duration 818ms
vue-large-graph-pan: TBT 6ms
vue-large-graph-pan: heap used 161.2 MB
vue-large-graph-pan: DOM nodes -3302
vue-large-graph-pan: event listeners -16370
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 21ms
workflow-execution: layout count 4
workflow-execution: style recalc count 15
workflow-execution: task duration 102ms
workflow-execution: script duration 16ms
workflow-execution: TBT 0ms
workflow-execution: heap used 61.3 MB
workflow-execution: DOM nodes 155
workflow-execution: event listeners 54
Raw data
{
  "timestamp": "2026-06-30T06:11:38.443Z",
  "gitSha": "8fa4f4b8638d0c7e4750c23c455e66155b473325",
  "branch": "shihchi/coverage-session-ui-stores",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2022.0449999999914,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.294999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 354.766,
      "heapDeltaBytes": -1909940,
      "heapUsedBytes": 56848612,
      "domNodes": 18,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 16.059000000000005,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2014.3350000000169,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.213,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 350.305,
      "heapDeltaBytes": -2191876,
      "heapUsedBytes": 56545032,
      "domNodes": 20,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 15.752000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1858.542,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 39.274,
      "layouts": 12,
      "layoutDurationMs": 3.4499999999999997,
      "taskDurationMs": 822.624,
      "heapDeltaBytes": -6652616,
      "heapUsedBytes": 52062028,
      "domNodes": 55,
      "jsHeapTotalBytes": 26738688,
      "scriptDurationMs": 126.87,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1743.09199999999,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 33.870000000000005,
      "layouts": 12,
      "layoutDurationMs": 3.3569999999999998,
      "taskDurationMs": 709.424,
      "heapDeltaBytes": -6629596,
      "heapUsedBytes": 52064672,
      "domNodes": 56,
      "jsHeapTotalBytes": 25952256,
      "scriptDurationMs": 109.72,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1660.2350000000001,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 16.634,
      "layouts": 6,
      "layoutDurationMs": 0.753,
      "taskDurationMs": 299.787,
      "heapDeltaBytes": 1924032,
      "heapUsedBytes": 60678928,
      "domNodes": 77,
      "jsHeapTotalBytes": 25952256,
      "scriptDurationMs": 17.924000000000003,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1738.2730000000493,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 15.945999999999998,
      "layouts": 6,
      "layoutDurationMs": 0.5650000000000002,
      "taskDurationMs": 302.273,
      "heapDeltaBytes": 1921848,
      "heapUsedBytes": 60863668,
      "domNodes": 78,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 19.205000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 729.4880000000035,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.138999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 476.495,
      "heapDeltaBytes": 3784416,
      "heapUsedBytes": 72275280,
      "domNodes": -296,
      "jsHeapTotalBytes": 6979584,
      "scriptDurationMs": 65.281,
      "eventListeners": -201,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 568.5579999999959,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.4860000000000015,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 350.354,
      "heapDeltaBytes": 7706312,
      "heapUsedBytes": 68393196,
      "domNodes": 20,
      "jsHeapTotalBytes": 20447232,
      "scriptDurationMs": 56.314,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2000.4240000000095,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.894999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 469.545,
      "heapDeltaBytes": 10554996,
      "heapUsedBytes": 68196776,
      "domNodes": 16,
      "jsHeapTotalBytes": 6029312,
      "scriptDurationMs": 73.30600000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 1994.1779999999767,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.341,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 486.923,
      "heapDeltaBytes": -9846308,
      "heapUsedBytes": 62036468,
      "domNodes": 16,
      "jsHeapTotalBytes": 9842688,
      "scriptDurationMs": 77.252,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2122.5450000000023,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 19.406000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1004.67,
      "heapDeltaBytes": 23030612,
      "heapUsedBytes": 83792452,
      "domNodes": -268,
      "jsHeapTotalBytes": 5447680,
      "scriptDurationMs": 349.576,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2103.911000000039,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 20.226000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 985.552,
      "heapDeltaBytes": 10048660,
      "heapUsedBytes": 82780988,
      "domNodes": 18,
      "jsHeapTotalBytes": 13164544,
      "scriptDurationMs": 355.365,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3120.9759999999847,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 20.755000000000003,
      "layouts": 60,
      "layoutDurationMs": 8.834,
      "taskDurationMs": 1304.698,
      "heapDeltaBytes": 14292284,
      "heapUsedBytes": 69447508,
      "domNodes": 14,
      "jsHeapTotalBytes": 7864320,
      "scriptDurationMs": 495.448,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3102.805999999987,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 21.028000000000002,
      "layouts": 60,
      "layoutDurationMs": 8.503,
      "taskDurationMs": 1263.003,
      "heapDeltaBytes": 13750128,
      "heapUsedBytes": 68800944,
      "domNodes": 14,
      "jsHeapTotalBytes": 7864320,
      "scriptDurationMs": 475.352,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2015.6709999999975,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.338000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 488.77099999999996,
      "heapDeltaBytes": -9503908,
      "heapUsedBytes": 64096204,
      "domNodes": 18,
      "jsHeapTotalBytes": 8007680,
      "scriptDurationMs": 80.403,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2009.7170000000233,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.850000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 493.36800000000005,
      "heapDeltaBytes": -9509192,
      "heapUsedBytes": 63988352,
      "domNodes": 18,
      "jsHeapTotalBytes": 9056256,
      "scriptDurationMs": 78.232,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 560.8970000000113,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 10.33,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 363.443,
      "heapDeltaBytes": 7722416,
      "heapUsedBytes": 66785656,
      "domNodes": 18,
      "jsHeapTotalBytes": 19922944,
      "scriptDurationMs": 126.43100000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 559.5710000000054,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 12.279,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 354.42600000000004,
      "heapDeltaBytes": 7637624,
      "heapUsedBytes": 66431308,
      "domNodes": 22,
      "jsHeapTotalBytes": 19660800,
      "scriptDurationMs": 122.60399999999998,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1991.7930000000297,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.812999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 356.221,
      "heapDeltaBytes": -2105208,
      "heapUsedBytes": 56793324,
      "domNodes": 20,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 13.585,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2006.1729999999898,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.128000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 346.763,
      "heapDeltaBytes": -2200044,
      "heapUsedBytes": 56630908,
      "domNodes": 20,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 13.492,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1675.4179999999792,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 34.30800000000001,
      "layouts": 16,
      "layoutDurationMs": 4.042000000000001,
      "taskDurationMs": 645.209,
      "heapDeltaBytes": -10502208,
      "heapUsedBytes": 48512000,
      "domNodes": 60,
      "jsHeapTotalBytes": 26738688,
      "scriptDurationMs": 87.11,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1692.6490000000172,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 37.866,
      "layouts": 16,
      "layoutDurationMs": 4.537,
      "taskDurationMs": 670.919,
      "heapDeltaBytes": -10493448,
      "heapUsedBytes": 48354032,
      "domNodes": 61,
      "jsHeapTotalBytes": 26738688,
      "scriptDurationMs": 94.608,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1216.3309999999683,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 27.749999999999996,
      "layouts": 4,
      "layoutDurationMs": 12.193,
      "taskDurationMs": 804.255,
      "heapDeltaBytes": 4568340,
      "heapUsedBytes": 81543656,
      "domNodes": 13833,
      "jsHeapTotalBytes": 16777216,
      "scriptDurationMs": 35.51,
      "eventListeners": 2531,
      "totalBlockingTimeMs": 151,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8176.88099999998,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 62.518,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3561.5,
      "heapDeltaBytes": -2985648,
      "heapUsedBytes": 68625188,
      "domNodes": 20,
      "jsHeapTotalBytes": 17096704,
      "scriptDurationMs": 1185.5500000000002,
      "eventListeners": 20,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8151.091999999949,
      "styleRecalcs": 251,
      "styleRecalcDurationMs": 64.07000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3484.483,
      "heapDeltaBytes": -712884,
      "heapUsedBytes": 70932040,
      "domNodes": 20,
      "jsHeapTotalBytes": 16572416,
      "scriptDurationMs": 1152.0829999999999,
      "eventListeners": 20,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13523.69200000004,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13499.16,
      "heapDeltaBytes": -21388380,
      "heapUsedBytes": 174420956,
      "domNodes": -3302,
      "jsHeapTotalBytes": 24875008,
      "scriptDurationMs": 517.775,
      "eventListeners": -16374,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13351.336999999945,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13336.625000000002,
      "heapDeltaBytes": -12561072,
      "heapUsedBytes": 170524956,
      "domNodes": -3302,
      "jsHeapTotalBytes": 20418560,
      "scriptDurationMs": 491.00100000000003,
      "eventListeners": -16376,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 15711.313000000018,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 20.06299999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15672.947,
      "heapDeltaBytes": -39758548,
      "heapUsedBytes": 156333256,
      "domNodes": -3302,
      "jsHeapTotalBytes": 17010688,
      "scriptDurationMs": 808.319,
      "eventListeners": -16371,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16451.066999999966,
      "styleRecalcs": 108,
      "styleRecalcDurationMs": 23.194999999999965,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16427.354,
      "heapDeltaBytes": -33169664,
      "heapUsedBytes": 181808020,
      "domNodes": -3302,
      "jsHeapTotalBytes": 19283968,
      "scriptDurationMs": 827.964,
      "eventListeners": -16368,
      "totalBlockingTimeMs": 12,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 134.26300000003266,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 20.116,
      "layouts": 3,
      "layoutDurationMs": 1.5419999999999998,
      "taskDurationMs": 92.48499999999999,
      "heapDeltaBytes": 3492284,
      "heapUsedBytes": 63394128,
      "domNodes": 150,
      "jsHeapTotalBytes": 1835008,
      "scriptDurationMs": 15.172999999999998,
      "eventListeners": 37,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "workflow-execution",
      "durationMs": 456.3870000000634,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 22.556000000000004,
      "layouts": 5,
      "layoutDurationMs": 1.3639999999999997,
      "taskDurationMs": 111.32600000000001,
      "heapDeltaBytes": 5148540,
      "heapUsedBytes": 65062372,
      "domNodes": 159,
      "jsHeapTotalBytes": 3145728,
      "scriptDurationMs": 16.502,
      "eventListeners": 71,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@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   #13257      +/-   ##
=============================================================
+ Coverage                      78.24%   78.29%   +0.04%     
=============================================================
  Files                           1633     1633              
  Lines                         114228   114103     -125     
  Branches                       39071    38392     -679     
=============================================================
- Hits                           89382    89337      -45     
+ Misses                         23937    23862      -75     
+ Partials                         909      904       -5     
Flag Coverage Δ
unit 65.43% <ø> (+0.16%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 17 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 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.

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

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.

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

@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: 2

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

Inline comments:
In `@src/stores/appModeStore.test.ts`:
- Around line 987-998: The test for leaving builder mode is not actually proving
the watcher stopped enforcing read-only because it still expects readOnly to be
true after exitBuilder(). Update the assertion in appModeStore.test.ts so that
after calling enterBuilder() and exitBuilder(), you set
mockCanvas.state.readOnly to false and verify it remains false, using the
existing appModeStore flow and mockCanvas.state to make the post-exit behavior
observable.

In `@src/stores/bootstrapStore.test.ts`:
- Around line 96-104: The test only checks that bootstrap completes, but it does
not verify the idempotent behavior in loadAuthenticatedStores(). Update the
bootstrapStore test to spy on the authenticated store actions triggered by
useBootstrapStore().startStoreBootstrap()—specifically the settingStore.load()
and workflowStore.loadWorkflows() calls—and assert they are invoked exactly once
across both bootstrap calls, while still keeping the i18n readiness assertion.
🪄 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: e21a119f-1da6-48b0-a5f4-c7622c845604

📥 Commits

Reviewing files that changed from the base of the PR and between 3377b8e and 0a37f62.

📒 Files selected for processing (10)
  • src/stores/actionBarButtonStore.test.ts
  • src/stores/appModeStore.test.ts
  • src/stores/authStore.test.ts
  • src/stores/bootstrapStore.test.ts
  • src/stores/commandStore.test.ts
  • src/stores/dialogStore.test.ts
  • src/stores/domWidgetStore.test.ts
  • src/stores/jobPreviewStore.test.ts
  • src/stores/menuItemStore.test.ts
  • src/stores/previewExposureStore.test.ts

Comment thread src/stores/appModeStore.test.ts Outdated
Comment thread src/stores/bootstrapStore.test.ts
@huang47 huang47 force-pushed the shihchi/coverage-session-ui-stores branch from 0a37f62 to 57cd114 Compare June 28, 2026 23:49
@huang47

huang47 commented Jun 28, 2026

Copy link
Copy Markdown
Contributor Author

Addressed both threads. Fixed the read-only-sync test in appModeStore.test.ts: after exitBuilder() it now sets readOnly=false and asserts it stays false, proving the watcher stopped enforcing (a stuck watcher would flip it back). The bootstrapStore idempotency thread was resolved without changes — exercising the second bootstrap is already covered, and asserting load call-counts would require hoisting shared store-action spies, which is out of scope for this test-only coverage PR.

@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/previewExposureStore.test.ts`:
- Around line 142-146: The “is a no-op for an unknown host” test only checks the
missing-host bucket and can miss regressions that accidentally mutate the seeded
host bucket. Update the previewExposureStore behavior test around
store.removeExposure and store.getExposures to also assert that the existing
hostA exposures remain unchanged after removing from an unknown host, so the
test verifies true no-op behavior rather than only empty reads.
🪄 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: dd6d9e8f-1a6b-4b93-b976-5692dbcd9506

📥 Commits

Reviewing files that changed from the base of the PR and between 0a37f62 and 57cd114.

📒 Files selected for processing (10)
  • src/stores/actionBarButtonStore.test.ts
  • src/stores/appModeStore.test.ts
  • src/stores/authStore.test.ts
  • src/stores/bootstrapStore.test.ts
  • src/stores/commandStore.test.ts
  • src/stores/dialogStore.test.ts
  • src/stores/domWidgetStore.test.ts
  • src/stores/jobPreviewStore.test.ts
  • src/stores/menuItemStore.test.ts
  • src/stores/previewExposureStore.test.ts

Comment thread src/stores/previewExposureStore.test.ts
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 29, 2026
@huang47

huang47 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the remaining review thread. The flagged no-op test was already refactored into is a no-op when no entry matches, which snapshots the seeded host bucket and asserts equality after the no-op, so true no-op behavior is verified (not just an empty read). No code changes needed; all threads resolved.

@huang47

huang47 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 29, 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.

@huang47 huang47 force-pushed the shihchi/coverage-session-ui-stores branch from 57cd114 to fe17d92 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 — hopping back through #13257 for another pass. Review time, no delay, let’s bound this bunny your way.

✅ 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 40 minutes and 6 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 #13339 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