Skip to content

fix: await needsLogin#8340

Merged
DrJKL merged 2 commits intomainfrom
drjkl/fix/loading
Jan 27, 2026
Merged

fix: await needsLogin#8340
DrJKL merged 2 commits intomainfrom
drjkl/fix/loading

Conversation

@DrJKL
Copy link
Contributor

@DrJKL DrJKL commented Jan 27, 2026

Summary

Add additional protection for bootstrap order issues.

┆Issue is synchronized with this Notion page by Unito

@DrJKL DrJKL requested a review from a team as a code owner January 27, 2026 21:37
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Jan 27, 2026
@github-actions
Copy link

github-actions bot commented Jan 27, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/27/2026, 09:48:54 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@DrJKL DrJKL removed their assignment Jan 27, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 27, 2026

📝 Walkthrough

Walkthrough

The bootstrap initialization was refactored to centralize authenticated store loading. A storesLoaded flag and loadAuthenticatedStores function ensure settingsStore.load() and workflowStore.loadWorkflows() run once. startStoreBootstrap now awaits user init, waits for needsLogin = false, loads i18n, then triggers authenticated store loading.

Changes

Cohort / File(s) Summary
Store Bootstrap Refactoring
src/stores/bootstrapStore.ts
Added storesLoaded flag and loadAuthenticatedStores to centralize authenticated store initialization. Rewrote startStoreBootstrap to await user initialization, wait for user.needsLogin to become false, load i18n, then call loadAuthenticatedStores. Removed prior conditional multi-path loading and added isCloud import.
Tests — needsLogin mock
src/stores/bootstrapStore.test.ts
Introduced a reactive mockNeedsLogin used by the userStore mock; reset mockNeedsLogin.value in beforeEach so tests can simulate both logged-in and login-required states.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant App as App Start
participant Bootstrap as BootstrapStore
participant User as UserStore
participant I18n as i18n
participant AuthStores as AuthenticatedStores
participant Settings as SettingsStore
participant Workflows as WorkflowStore

App->>Bootstrap: startStoreBootstrap()
Bootstrap->>User: await user.init
Bootstrap->>User: wait for needsLogin == false
Bootstrap->>I18n: load i18n
I18n-->>Bootstrap: i18n ready
Bootstrap->>AuthStores: loadAuthenticatedStores() [guard: storesLoaded == false]
AuthStores->>Settings: settings.load()
AuthStores->>Workflows: workflowStore.loadWorkflows()
Settings-->>AuthStores: settings loaded
Workflows-->>AuthStores: workflows loaded
AuthStores-->>Bootstrap: storesLoaded = true
Bootstrap-->>App: bootstrap complete
✨ Finishing touches
  • 📝 Generate docstrings

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

@github-actions
Copy link

github-actions bot commented Jan 27, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 503 passed, 0 failed, 2 flaky, 8 skipped (Total: 513)

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 491 / ❌ 0 / ⚠️ 2 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Jan 27, 2026

Bundle Size Report

Summary

  • Raw size: 22.1 MB baseline 22.1 MB — 🟢 -3 B
  • Gzip: 4.59 MB baseline 4.59 MB — 🔴 +28 B
  • Brotli: 3.41 MB baseline 3.41 MB — 🟢 -163 B
  • Bundles: 176 current • 176 baseline • 85 added / 85 removed

Category Glance
Data & Services 🔴 +205 B (2.7 MB) · Other 🟢 -200 B (7.04 MB) · Panels & Settings 🟢 -8 B (470 kB) · Vendor & Third-Party ⚪ 0 B (10.7 MB) · Graph Workspace ⚪ 0 B (960 kB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

Per-category breakdown
App Entry Points — 23.6 kB (baseline 23.6 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-D8JZTN49.js (new) 23.6 kB 🔴 +23.6 kB 🔴 +7.09 kB 🔴 +6.22 kB
assets/index-xNsBAUYl.js (removed) 23.6 kB 🟢 -23.6 kB 🟢 -7.09 kB 🟢 -6.22 kB

Status: 1 added / 1 removed

Graph Workspace — 960 kB (baseline 960 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-DaB56CW7.js (new) 960 kB 🔴 +960 kB 🔴 +194 kB 🔴 +147 kB
assets/GraphView-DrbLzcbz.js (removed) 960 kB 🟢 -960 kB 🟢 -194 kB 🟢 -147 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BpOV_Jyz.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.6 kB 🔴 +3.06 kB
assets/CloudSurveyView-PVzyUScs.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.61 kB 🟢 -3.06 kB
assets/CloudLoginView-BM9uWLFJ.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.72 kB
assets/CloudLoginView-FLved3qo.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/UserCheckView-a0vxYWhh.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.44 kB 🔴 +2.13 kB
assets/UserCheckView-Do06EMDw.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.15 kB
assets/CloudLayoutView-Bb6ZHFuI.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.24 kB 🔴 +1.96 kB
assets/CloudLayoutView-C1MEZpsy.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.24 kB 🟢 -1.96 kB
assets/CloudSignupView-BvWK5hTJ.js (new) 8.22 kB 🔴 +8.22 kB 🔴 +2.34 kB 🔴 +2.04 kB
assets/CloudSignupView-N0-e7PdW.js (removed) 8.22 kB 🟢 -8.22 kB 🟢 -2.34 kB 🟢 -2.04 kB
assets/CloudForgotPasswordView-Cy7LsCpl.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/CloudForgotPasswordView-qcbySxnj.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/UserSelectView-Bnb3mbnx.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/UserSelectView-DtAXbafo.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-Bc1d4Bvl.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.54 kB
assets/CloudSubscriptionRedirectView-r3UrtPZn.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudAuthTimeoutView-C54oVmrC.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.71 kB 🔴 +1.48 kB
assets/CloudAuthTimeoutView-CqtsmQfD.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/CloudSorryContactSupportView-BVJCIN1x.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-DKV9PQKI.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 470 kB (baseline 470 kB) • 🟢 -8 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-C0bYehnj.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.14 kB
assets/WorkspacePanel-DHSyvdUS.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.14 kB
assets/LegacyCreditsPanel-B55apdyz.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.23 kB
assets/LegacyCreditsPanel-DJ7R6YHU.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.95 kB 🔴 +5.23 kB
assets/SubscriptionPanel-DPNJ1n3u.js (removed) 21 kB 🟢 -21 kB 🟢 -5.05 kB 🟢 -4.46 kB
assets/SubscriptionPanel-vSBLEkbM.js (new) 21 kB 🔴 +21 kB 🔴 +5.05 kB 🔴 +4.46 kB
assets/KeybindingPanel-CZ_7Sxzo.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.74 kB 🟢 -3.31 kB
assets/KeybindingPanel-nEZNQww6.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.74 kB 🔴 +3.31 kB
assets/AboutPanel-C6inMBTB.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.44 kB
assets/AboutPanel-D9vtwWSW.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.44 kB
assets/ExtensionPanel-DVvWrh1r.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ExtensionPanel-npPNGCA1.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ServerConfigPanel-CRhcEZps.js (removed) 7.26 kB 🟢 -7.26 kB 🟢 -2.18 kB 🟢 -1.95 kB
assets/ServerConfigPanel-D46wdRY9.js (new) 7.26 kB 🔴 +7.26 kB 🔴 +2.18 kB 🔴 +1.95 kB
assets/UserPanel-CXbUeVtU.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/UserPanel-DMNQ95uW.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/config-7fwyFDVl.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -604 B 🟢 -531 B
assets/config-B1Y-wvqK.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +600 B 🔴 +526 B
assets/refreshRemoteConfig-C_mGJRee.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +521 B 🔴 +483 B
assets/refreshRemoteConfig-CPz2Mxgo.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -525 B 🟢 -484 B
assets/cloudRemoteConfig-CK9tVoiO.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +508 B 🔴 +437 B
assets/cloudRemoteConfig-Dw4kyKPN.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -510 B 🟢 -450 B
assets/refreshRemoteConfig-3V5tYozh.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +109 B
assets/refreshRemoteConfig-BFp9Lh4J.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -107 B
assets/remoteConfig-BfvcASY0.js 536 B 536 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings--v6Wg3FT.js 29.4 kB 29.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-6AWMdbEo.js 25.8 kB 25.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bd_PrHyW.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BvViWXfv.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CBT5fUQX.js 32.9 kB 32.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cr7txePz.js 30.2 kB 30.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DdPwS08h.js 39.4 kB 39.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DqMxzK_S.js 30.4 kB 30.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dwt3wMav.js 26.4 kB 26.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-pjwHe3bJ.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-yUgaGSFI.js 35.2 kB 35.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BK-RA3Cp.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.07 kB
assets/auth-OA2zwr-3.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/firebaseAuthStore-CCNnoEi_.js (removed) 217 B 🟢 -217 B 🟢 -136 B 🟢 -119 B
assets/firebaseAuthStore-cHLTyC1J.js (new) 217 B 🔴 +217 B 🔴 +136 B 🔴 +118 B
assets/auth-CBabFubs.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +144 B
assets/auth-DE23fdl_.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -144 B

Status: 3 added / 3 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CIQCyPCa.js (removed) 2.73 kB 🟢 -2.73 kB 🟢 -1.3 kB 🟢 -1.16 kB
assets/useSubscriptionDialog-HsgoaEFr.js (new) 2.73 kB 🔴 +2.73 kB 🔴 +1.3 kB 🔴 +1.16 kB
assets/useSubscriptionDialog-CASldhZa.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -97 B
assets/useSubscriptionDialog-CgXwWTCw.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +97 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-DnQwVUiZ.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.42 kB
assets/ComfyQueueButton-DNuIThqw.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.69 kB 🔴 +2.42 kB
assets/SubscribeButton-D3N_dnCE.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.56 kB 🔴 +1.39 kB
assets/SubscribeButton-UgR5j9Ty.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.56 kB 🟢 -1.39 kB
assets/cloudFeedbackTopbarButton-BpNTXQxW.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -676 B 🟢 -573 B
assets/cloudFeedbackTopbarButton-l1xdv5Qm.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +676 B 🔴 +572 B
assets/ComfyQueueButton-C-gGLUWb.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -121 B
assets/ComfyQueueButton-DCRkZ2o_.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +122 B
assets/Button-CVvRRDRm.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-8qn1CSZJ.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-CQpfNQiD.js 8.36 kB 8.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-BcT4RJD_.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-pw5t2dq3.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 4 added / 4 removed

Data & Services — 2.7 MB (baseline 2.7 MB) • 🔴 +205 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CjMa7hCj.js (removed) 2.01 MB 🟢 -2.01 MB 🟢 -425 kB 🟢 -324 kB
assets/dialogService-CTfk_JZx.js (new) 2.01 MB 🔴 +2.01 MB 🔴 +425 kB 🔴 +324 kB
assets/api-CdRjwRmY.js (new) 672 kB 🔴 +672 kB 🔴 +148 kB 🔴 +118 kB
assets/api-JQwoNhq7.js (removed) 672 kB 🟢 -672 kB 🟢 -148 kB 🟢 -118 kB
assets/releaseStore-Bf5LNngL.js (removed) 8.94 kB 🟢 -8.94 kB 🟢 -2.41 kB 🟢 -2.13 kB
assets/releaseStore-CTtPixaL.js (new) 8.94 kB 🔴 +8.94 kB 🔴 +2.41 kB 🔴 +2.13 kB
assets/keybindingService-CSa4puOi.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.51 kB
assets/keybindingService-Dsq4I4ok.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.52 kB
assets/bootstrapStore-CShNlrRe.js (new) 2.73 kB 🔴 +2.73 kB 🔴 +1.04 kB 🔴 +984 B
assets/bootstrapStore-BnNawucj.js (removed) 2.52 kB 🟢 -2.52 kB 🟢 -977 B 🟢 -898 B
assets/userStore-CKcH79aO.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -813 B 🟢 -724 B
assets/userStore-DxffuJOg.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +811 B 🔴 +726 B
assets/audioService-DjawJACU.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +931 B 🔴 +817 B
assets/audioService-DR85I751.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -933 B 🟢 -811 B
assets/teamWorkspaceStore-CRqWQuZ3.js (removed) 165 B 🟢 -165 B 🟢 -123 B 🟢 -108 B
assets/teamWorkspaceStore-DSpsPL3J.js (new) 165 B 🔴 +165 B 🔴 +123 B 🔴 +107 B
assets/releaseStore-Dp76t0Hl.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -108 B
assets/releaseStore-llYVbymg.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +107 B
assets/serverConfigStore-Bx_up0Gg.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-DQZhwSQa.js (removed) 5.15 kB 🟢 -5.15 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/useErrorHandling-tr7tw696.js (new) 5.15 kB 🔴 +5.15 kB 🔴 +1.52 kB 🔴 +1.33 kB
assets/useWorkspaceUI-Cm_faiAe.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -974 B 🟢 -849 B
assets/useWorkspaceUI-CMRS5NcS.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +976 B 🔴 +839 B
assets/subscriptionCheckoutUtil-Dp3gT_JX.js (removed) 2.23 kB 🟢 -2.23 kB 🟢 -909 B 🟢 -800 B
assets/subscriptionCheckoutUtil-DQIpCFZF.js (new) 2.23 kB 🔴 +2.23 kB 🔴 +910 B 🔴 +803 B
assets/useSubscriptionActions-CoToDXnq.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -865 B 🟢 -752 B
assets/useSubscriptionActions-DaeaBw-Q.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +866 B 🔴 +755 B
assets/useSubscriptionCredits-RNhbJZef.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +600 B 🔴 +530 B
assets/useSubscriptionCredits-V2k5g2QP.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -602 B 🟢 -533 B
assets/audioUtils-38WCOpCS.js (new) 970 B 🔴 +970 B 🔴 +549 B 🔴 +486 B
assets/audioUtils-CPCokIYl.js (removed) 970 B 🟢 -970 B 🟢 -547 B 🟢 -488 B
assets/useCurrentUser-BQrGr1Va.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +103 B
assets/useCurrentUser-N1eueyWh.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -104 B
assets/_plugin-vue_export-helper-D8rH49Eq.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-BnkGPxsj.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-ku3y2eO8.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-C2cDRPKn.js 488 B 488 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-CKfqpTaz.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-ZXGkzPq1.js 4.1 MB 4.1 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-C6oIq5r_.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-BIaZqDUN.js 256 kB 256 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-DyMKDuqR.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-TV831oRr.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-DzppPAJv.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-B0dJmw9h.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.04 MB (baseline 7.04 MB) • 🟢 -200 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-DGg6ctyv.js (removed) 180 kB 🟢 -180 kB 🟢 -43.4 kB 🟢 -36.2 kB
assets/core-JhqsrO0V.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.2 kB
assets/WidgetSelect-2yD1xWYh.js (removed) 51 kB 🟢 -51 kB 🟢 -11.3 kB 🟢 -9.83 kB
assets/WidgetSelect-hDmFemAm.js (new) 51 kB 🔴 +51 kB 🔴 +11.3 kB 🔴 +9.82 kB
assets/Load3DControls-DNoHpnx1.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.87 kB 🟢 -5.08 kB
assets/Load3DControls-DZNVHZ4q.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.09 kB
assets/SubscriptionRequiredDialogContent-CsWcjnb6.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.79 kB 🟢 -5.91 kB
assets/SubscriptionRequiredDialogContent-DW3jIPhC.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.79 kB 🔴 +5.93 kB
assets/CurrentUserPopoverWorkspace-B4rsuoCj.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.43 kB
assets/CurrentUserPopoverWorkspace-Cbgf8o7W.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -4.99 kB 🟢 -4.43 kB
assets/Load3D-BHqQpqRg.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -4.58 kB 🟢 -4.02 kB
assets/Load3D-DQnIhpfA.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +4.58 kB 🔴 +4.02 kB
assets/WidgetRecordAudio-CtwAe5Bc.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-LykqeA3n.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.97 kB 🔴 +4.44 kB
assets/WidgetInputNumber-Di9Is_Ln.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.52 kB 🔴 +4.02 kB
assets/WidgetInputNumber-FMJ6U8wm.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.52 kB 🟢 -4.01 kB
assets/SubscriptionPanelContentWorkspace-B-enOU-X.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.89 kB
assets/SubscriptionPanelContentWorkspace-CZ8qxrN1.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.47 kB 🟢 -3.9 kB
assets/WidgetImageCrop-BP2xwgV8.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.63 kB
assets/WidgetImageCrop-CznXauwh.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.61 kB
assets/PanelTemplate-BPebZWtX.js (removed) 16.3 kB 🟢 -16.3 kB 🟢 -5.47 kB 🟢 -4.82 kB
assets/PanelTemplate-BTDW0xg8.js (new) 16.3 kB 🔴 +16.3 kB 🔴 +5.47 kB 🔴 +4.82 kB
assets/AudioPreviewPlayer-BiLlFW9f.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/AudioPreviewPlayer-DJ6_eWa5.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.97 kB 🔴 +2.65 kB
assets/InviteMemberDialogContent-Caz13PwZ.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.51 kB 🔴 +2.16 kB
assets/InviteMemberDialogContent-D-mp2fUj.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.5 kB 🟢 -2.17 kB
assets/WidgetWithControl-DqLexM3v.js (removed) 8.09 kB 🟢 -8.09 kB 🟢 -2.7 kB 🟢 -2.43 kB
assets/WidgetWithControl-Dyj7kexJ.js (new) 8.09 kB 🔴 +8.09 kB 🔴 +2.7 kB 🔴 +2.42 kB
assets/CreateWorkspaceDialogContent-Bc_08cfT.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.93 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-C_6Lzmjs.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.93 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-B9X3LQRv.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.65 kB
assets/EditWorkspaceDialogContent-CTBt9nFD.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/ValueControlPopover-9veRmYwT.js (new) 5.17 kB 🔴 +5.17 kB 🔴 +1.69 kB 🔴 +1.5 kB
assets/ValueControlPopover-CghkH2Jd.js (removed) 5.17 kB 🟢 -5.17 kB 🟢 -1.69 kB 🟢 -1.5 kB
assets/DeleteWorkspaceDialogContent-B4jtkhlU.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/DeleteWorkspaceDialogContent-BLTvsXGR.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.57 kB 🔴 +1.35 kB
assets/LeaveWorkspaceDialogContent-BKcKttG1.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.5 kB 🔴 +1.31 kB
assets/LeaveWorkspaceDialogContent-BOGEhcZT.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.51 kB 🟢 -1.3 kB
assets/RemoveMemberDialogContent-Bsf9MDG1.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.45 kB 🟢 -1.27 kB
assets/RemoveMemberDialogContent-v-wO_StP.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.45 kB 🔴 +1.27 kB
assets/RevokeInviteDialogContent-CS_k4Sym.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.29 kB
assets/RevokeInviteDialogContent-ZWkhXGfA.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/GlobalToast-Bu4iXCXF.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -940 B
assets/GlobalToast-iHSbgQNn.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +939 B
assets/cloudSessionCookie-Bwlf0yYF.js (removed) 2.97 kB 🟢 -2.97 kB 🟢 -944 B 🟢 -816 B
assets/cloudSessionCookie-CR3ziUL6.js (new) 2.97 kB 🔴 +2.97 kB 🔴 +942 B 🔴 +810 B
assets/SubscribeToRun-B8aUpo9F.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.15 kB 🟢 -1.01 kB
assets/SubscribeToRun-BDUk1l5j.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.15 kB 🔴 +1.01 kB
assets/BaseViewTemplate-B2j8OPUA.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -933 B
assets/BaseViewTemplate-y5IgE3vW.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +935 B
assets/CloudRunButtonWrapper-B1V9dzF9.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -645 B 🟢 -566 B
assets/CloudRunButtonWrapper-DyvfajeF.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +644 B 🔴 +597 B
assets/gtm-CkX_rs8c.js (removed) 1.3 kB 🟢 -1.3 kB 🟢 -625 B 🟢 -527 B
assets/gtm-DanqTfzl.js (new) 1.3 kB 🔴 +1.3 kB 🔴 +626 B 🔴 +500 B
assets/cloudBadges-BoEarKvI.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -534 B 🟢 -481 B
assets/cloudBadges-K19CyNf5.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +538 B 🔴 +478 B
assets/graphHasMissingNodes-BzoGZftM.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +462 B 🔴 +419 B
assets/graphHasMissingNodes-D_6mD2QP.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -463 B 🟢 -418 B
assets/cloudSubscription-BX4jcSjN.js (new) 976 B 🔴 +976 B 🔴 +462 B 🔴 +398 B
assets/cloudSubscription-YMOIeCcQ.js (removed) 976 B 🟢 -976 B 🟢 -460 B 🟢 -398 B
assets/types-9RyZweiA.js (new) 909 B 🔴 +909 B 🔴 +458 B 🔴 +384 B
assets/types-Cm9RavTs.js (removed) 908 B 🟢 -908 B 🟢 -455 B 🟢 -385 B
assets/nightlyBadges-BEuHD8tJ.js (removed) 595 B 🟢 -595 B 🟢 -355 B 🟢 -312 B
assets/nightlyBadges-CgFQqQ_H.js (new) 595 B 🔴 +595 B 🔴 +357 B 🔴 +309 B
assets/SubscriptionPanelContentWorkspace-B_vzhjmB.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -125 B
assets/SubscriptionPanelContentWorkspace-CF7sdoyX.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +116 B
assets/WidgetInputNumber-CX-W2HmU.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -120 B
assets/WidgetInputNumber-Rn2BJjqQ.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +111 B
assets/WidgetLegacy-B-AzfoGY.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -117 B
assets/WidgetLegacy-BaZOucfq.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +112 B
assets/Load3D-BtIBlrTb.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -105 B
assets/Load3D-Ch-gtiI0.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +112 B
assets/gtm-dUv7avmH.js (new) 122 B 🔴 +122 B 🔴 +116 B 🔴 +110 B
assets/gtm-jkR_i4KL.js (removed) 122 B 🟢 -122 B 🟢 -116 B 🟢 -109 B
assets/auto-CIz1W2VX.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B2kaqXwB.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C4b7jkru.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CfyfvZ26.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CVGDesiQ.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D5s7OQ2Y.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DIpat94F.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DIyyDM8B.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DmapSMuR.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DVgVR6E3.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-rL7INiLx.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-XNemNPrT.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Dk7sED4k.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-x1ecoGAi.js 495 kB 495 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-B52CO4wd.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BYMeROYU.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CgEoH02C.js 154 kB 154 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CGlcISI9.js 111 kB 111 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CI3jqob9.js 172 kB 172 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CKO629VV.js 150 kB 150 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CL7lQuTU.js 132 kB 132 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cz7KlYu8.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D1SebohP.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DcZO51UE.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DPjf0Yxm.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-K82I8n9k.js 129 kB 129 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-C2-Fo6sU.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-Ci-kpVMy.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-7wwB8kp9.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-CTPTvpaW.js 2.82 kB 2.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-D-d59EhC.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bnfj3jVd.js 412 kB 412 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BOtpSRhY.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CJdnE3iS.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CUtkGNC5.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CvJk0KJv.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DMSL5DLd.js 413 kB 413 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dun_mUNl.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-eLEyykRM.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-mMDG_apG.js 363 kB 363 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Q0xInTMU.js 342 kB 342 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-wT_xujHW.js 339 kB 339 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CATisLRM.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-cVp-94Rc.js 1.96 kB 1.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-R6kcTWkS.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-BEaQgM5X.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BdFPwTvH.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-D_TNvFYD.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CLCIoBG-.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-B95EgZ9s.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-Bq63isMV.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-CfAADsD-.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-qw2JhjpM.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-D45M9V7O.js 2.61 kB 2.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-CDoGZEj1.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BFYO1LwS.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DMpade_j.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-C6wrHdtT.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 37 added / 37 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/stores/bootstrapStore.ts`:
- Around line 47-51: Add explicit timeouts to the blocking until(...) calls:
change the Firebase auth initialization wait (the until(...).toBe(...) used in
cloud mode) and the await until(needsLogin).toBe(false) to include a timeout
option (e.g., { timeout: 16_000 }) and wrap each await in try/catch so a timeout
doesn't indefinitely block startup; in the catch log a clear error/warning and
allow execution to continue so functions like loadI18n() and
loadAuthenticatedStores() still run.

Comment on lines +47 to +51
const { needsLogin } = storeToRefs(userStore)
await until(needsLogin).toBe(false)

if (!userStore.needsLogin) {
void settingStore.load()
void workflowStore.loadWorkflows()
}
void loadI18n()
loadAuthenticatedStores()
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, get the repository structure overview
echo "=== Repository structure ==="
find . -type f -name "*.ts" -path "*store*" | grep -E "(bootstrap|user)" | head -20

echo ""
echo "=== Check bootstrapStore.ts content ==="
cat -n src/stores/bootstrapStore.ts | head -80

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 2313


🏁 Script executed:

#!/bin/bash
# Check userStore implementation
echo "=== Check userStore.ts for needsLogin ==="
fd "userStore.ts$" --exec cat -n {} \;

echo ""
echo "=== Search for needsLogin usage pattern ==="
rg "needsLogin" -n -C3 --type ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 5395


🏁 Script executed:

#!/bin/bash
# Check how startStoreBootstrap is called and used
echo "=== Check startStoreBootstrap usage ==="
rg "startStoreBootstrap" -n -B2 -A2 --type ts --type vue

echo ""
echo "=== Check if bootstrap completion is awaited in App.vue or main.ts ==="
rg -n "bootstrap|isI18nReady|needsLogin" src/App.vue src/main.ts --type vue --type ts 2>/dev/null | head -30

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 226


🏁 Script executed:

#!/bin/bash
# Check if there's a timeout mechanism in the bootstrap flow
echo "=== Search for timeout in bootstrap or until usage ==="
rg "until.*toBe|timeout|abortSignal" -n --type ts | grep -E "(bootstrap|until|timeout)"

echo ""
echo "=== Check the 'until' function import ==="
rg "import.*until" -n --type ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 15501


🏁 Script executed:

#!/bin/bash
# Understand the user authentication flow
echo "=== Check user initialization and login flow ==="
rg "initialize|needsLogin.*true|needsLogin.*false|setNeedsLogin" -n -C2 --type ts | head -50

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 4777


🏁 Script executed:

#!/bin/bash
# Search for startStoreBootstrap invocation
echo "=== Searching for startStoreBootstrap calls ==="
rg "startStoreBootstrap" -n --type ts --type vue

echo ""
echo "=== Check App initialization in main files ==="
fd -e ts -e vue "main\.(ts|vue)$|App\.(ts|vue)$" | head -10 | xargs -I {} bash -c 'echo "=== {} ===" && head -50 {}'

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 4777


🏁 Script executed:

#!/bin/bash
# Check if bootstrap is awaited at application startup
echo "=== Search for bootstrap in entry points ==="
find . -name "main.ts" -o -name "main.js" | xargs cat 2>/dev/null | head -100

echo ""
echo "=== Check vite.config or entry points ==="
find . \( -name "vite.config.*" -o -name "tsconfig.json" \) -exec grep -l "entry\|src/main" {} \;

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 3380


🏁 Script executed:

#!/bin/bash
# Look at App.vue setup
echo "=== Check App.vue or root component ==="
find src -name "App.vue" -o -name "App.ts" | xargs cat 2>/dev/null | head -100

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 2133


🏁 Script executed:

#!/bin/bash
# Search for router guards and how bootstrap is used
echo "=== Check router.ts for bootstrap usage ==="
cat -n src/router.ts | head -200

echo ""
echo "=== Search specifically for bootstrap in router ==="
rg "bootstrap|startStoreBootstrap" src/router.ts -n -A3 -B3

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 7292


🏁 Script executed:

#!/bin/bash
# Check if bootstrap is called in beforeEach or other router hooks
echo "=== Full router.ts ==="
wc -l src/router.ts && echo "File is large, checking structure..." && grep -n "beforeEach\|startStoreBootstrap\|Bootstrap" src/router.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 200


🏁 Script executed:

#!/bin/bash
# Get full main.ts content
echo "=== Full main.ts content ==="
cat -n src/main.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 3541


🏁 Script executed:

#!/bin/bash
# Search more broadly for useBootstrapStore usage
echo "=== Search for useBootstrapStore usage ==="
rg "useBootstrapStore" -n --type ts

echo ""
echo "=== Check if bootstrap is referenced anywhere ==="
rg "startStoreBootstrap|useBootstrapStore" -r . --type ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1386


🏁 Script executed:

#!/bin/bash
# Verify the until function signature and confirm no default timeout
echo "=== Check VueUse documentation for until() ==="
rg "from '@vueuse/core'" -A5 src/router.ts src/stores/bootstrapStore.ts

echo ""
echo "=== Check if there's any error handling around the until() call ==="
cat -n src/stores/bootstrapStore.ts | sed -n '38,52p'

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1399


Add timeout to until(needsLogin).toBe(false) to prevent indefinite blocking.

The await until(needsLogin).toBe(false) on line 48 lacks a timeout and will hang indefinitely if the user is on a multi-user server and hasn't logged in yet (making needsLogin remain true). This blocks loadI18n() and loadAuthenticatedStores() from completing.

Add a timeout parameter matching the pattern used in src/router.ts:141:

await until(needsLogin).toBe(false, { timeout: 16_000 })

The same issue exists on line 44 for Firebase auth initialization in cloud mode—both until() calls should have explicit timeouts with appropriate error handling.

🤖 Prompt for AI Agents
In `@src/stores/bootstrapStore.ts` around lines 47 - 51, Add explicit timeouts to
the blocking until(...) calls: change the Firebase auth initialization wait (the
until(...).toBe(...) used in cloud mode) and the await
until(needsLogin).toBe(false) to include a timeout option (e.g., { timeout:
16_000 }) and wrap each await in try/catch so a timeout doesn't indefinitely
block startup; in the catch log a clear error/warning and allow execution to
continue so functions like loadI18n() and loadAuthenticatedStores() still run.

AustinMroz
AustinMroz previously approved these changes Jan 27, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

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

⚠️ Outside diff range comments (1)
src/stores/bootstrapStore.test.ts (1)

45-70: Hoist mock state via vi.hoisted() to avoid module-level mutable refs in vi.mock factories.

mockNeedsLogin, mockIsSettingsReady, and mockIsFirebaseInitialized are all module-level refs referenced directly in vi.mock factories, creating hoisting pitfalls. Extract all three into vi.hoisted() containers for safer per-test state management, consistent with the pattern already used for mockDistributionTypes.

♻️ Proposed refactor
-const mockIsSettingsReady = ref(false)
-
+const mockSettingsState = vi.hoisted(() => ({
+  isReady: ref(false)
+}))
 vi.mock('@/platform/settings/settingStore', () => ({
   useSettingStore: vi.fn(() => ({
     load: vi.fn(() => {
-      mockIsSettingsReady.value = true
+      mockSettingsState.isReady.value = true
     }),
     get isReady() {
-      return mockIsSettingsReady.value
+      return mockSettingsState.isReady.value
     },
     isLoading: ref(false),
     error: ref(undefined)
   }))
 }))

-const mockNeedsLogin = ref(false)
+const mockUserState = vi.hoisted(() => ({
+  needsLogin: ref(false)
+}))
 vi.mock('@/stores/userStore', () => ({
   useUserStore: vi.fn(() => ({
     initialize: vi.fn().mockResolvedValue(undefined),
-    needsLogin: mockNeedsLogin
+    needsLogin: mockUserState.needsLogin
   }))
 }))

-const mockIsFirebaseInitialized = ref(false)
+const mockFirebaseState = vi.hoisted(() => ({
+  isInitialized: ref(false)
+}))
 vi.mock('@/stores/firebaseAuthStore', () => ({
   useFirebaseAuthStore: vi.fn(() => ({
-    isInitialized: mockIsFirebaseInitialized
+    isInitialized: mockFirebaseState.isInitialized
   }))
 }))

 describe('bootstrapStore', () => {
   beforeEach(() => {
-    mockIsSettingsReady.value = false
-    mockIsFirebaseInitialized.value = false
-    mockNeedsLogin.value = false
+    mockSettingsState.isReady.value = false
+    mockFirebaseState.isInitialized.value = false
+    mockUserState.needsLogin.value = false
     mockDistributionTypes.isCloud = false
     setActivePinia(createTestingPinia({ stubActions: false }))
     vi.clearAllMocks()
   })

@DrJKL DrJKL disabled auto-merge January 27, 2026 22:04
@DrJKL DrJKL merged commit bcb4d6e into main Jan 27, 2026
27 checks passed
@DrJKL DrJKL deleted the drjkl/fix/loading branch January 27, 2026 22:04
{ immediate: false }
)

let storesLoaded = false
Copy link
Contributor

Choose a reason for hiding this comment

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

gasp

viva-jinyi added a commit that referenced this pull request Feb 15, 2026
  Move nodeReplacementStore.load() to bootstrapStore for parallel
  initialization and await isLoaded at consumption point using
  reactive wait, aligned with #8340 bootstrap architecture.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants