Skip to content

[backport cloud/1.50] fix: bound auth wait in startStoreBootstrap + catch-all for unknown routes (IR-105) - #15180

Merged
comfy-pr-bot merged 1 commit into
cloud/1.50from
backport-15063-to-cloud-1.50
Aug 13, 2026
Merged

[backport cloud/1.50] fix: bound auth wait in startStoreBootstrap + catch-all for unknown routes (IR-105)#15180
comfy-pr-bot merged 1 commit into
cloud/1.50from
backport-15063-to-cloud-1.50

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #15063 to cloud/1.50

Automatically created by backport workflow.

…outes (IR-105) (#15063)

## Summary

Two durable fixes for the IR-105 splash-screen hang incident.

### Fix 1 — Bootstrap auth wait timeout (`bootstrapStore.ts`)

**Root cause:** `until(isInitialized).toBe(true)` and
`until(isAuthenticated).toBe(true)` in `startStoreBootstrap` have no
timeout. A stale Firebase session or broken auth response hangs
bootstrap silently and indefinitely — no error, no log, just a forever
splash screen.

**Fix:** Extract `waitForCloudAuth()` with:
- 16 s timeout (matching `router.ts:176` and `WorkspaceAuthGate.vue:78`
— existing convention)
- One retry after 3 s backoff
- On second timeout: `captureException` to Sentry + **continue
bootstrap** rather than blocking

This means the worst case is now 35 s to a usable (logged-out) state
instead of infinity.

### Fix 2 — Catch-all route for unknown paths (`router.ts`)

**Root cause:** A request to e.g. `cloud.comfy.org/woiadawd` gets a 200
+ app shell from the static host, Vue boots, finds **no matching
route**, and the global auth guard's `until(isInitialized)` then hangs
(see Fix 1). Even with Fix 1, a no-match route leaves the app on the
splash screen.

**Fix:** Add `{ path: '/:pathMatch(.*)*', redirect: '/' }` at the end of
the route list. Unknown paths redirect to root; the global auth guard
then sends unauthenticated users to `/cloud/login` as normal.

## Red-Green Verification

| Commit | Purpose |
|--------|---------|
| `test: add failing tests for unbounded auth wait in
startStoreBootstrap` | 🔴 Proves test catches the bug — the
"gives up" test times out in 5 s against the unpatched code |
| `fix: bound auth wait in startStoreBootstrap and add catch-all route`
| 🟢 Both new tests pass, all 18 tests in the two affected
files pass |

## Relation to open PRs

- Supersedes / closes the scope of #15032
(`fix/bootstrap-auth-wait-timeout`) — same fix, same tests. If reviewers
prefer to land #15032 first this PR can drop Fix 1.
- Companion to #15022 (marketing-site redirect) and #15026 (`/login` →
`cloud-login` route, already on main).

## Test Plan

- [x] `pnpm vitest run src/stores/bootstrapStore.test.ts` — 7/7 pass
(including 2 new timeout tests)
- [x] `pnpm vitest run
src/platform/cloud/onboarding/onboardingCloudRoutes.test.ts` — 11/11
pass
- [x] `pnpm typecheck` — clean
- [x] `pnpm exec eslint src/stores/bootstrapStore.ts src/router.ts` —
clean
- [ ] CI green (Playwright, Storybook, Codecov)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 13, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 13, 2026 04:51
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Aug 13, 2026
@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/13/2026, 04:52:57 AM UTC

Links

🎭 Playwright: ✅ 1795 passed, 0 failed · 4 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1774 / ❌ 0 / ⚠️ 4 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 18 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.4 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.7 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.2 MB heap
large-graph-pan: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 73.4 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.3 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.7 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.4 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.6 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 142ms TBT · 96.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.1 MB heap
vue-large-graph-idle: · 54.6 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.2 MB heap
vue-large-graph-pan: · 56.2 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 161ms TBT · 149.0 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.8 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 9
canvas-idle: task duration 519ms
canvas-idle: script duration 20ms
canvas-idle: TBT 0ms
canvas-idle: heap used 67.4 MB
canvas-idle: DOM nodes 17
canvas-idle: event listeners 5
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 4ms
canvas-mouse-sweep: style recalc duration 40ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 76
canvas-mouse-sweep: task duration 912ms
canvas-mouse-sweep: script duration 129ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 54.7 MB
canvas-mouse-sweep: DOM nodes -112
canvas-mouse-sweep: event listeners -74
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 19ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 32
canvas-zoom-sweep: task duration 414ms
canvas-zoom-sweep: script duration 25ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 69.9 MB
canvas-zoom-sweep: DOM nodes 78
canvas-zoom-sweep: event listeners 19
dom-widget-clipping: avg frame time 17ms
dom-widget-clipping: p95 frame time 17ms
dom-widget-clipping: layout duration 0ms
dom-widget-clipping: style recalc duration 7ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 382ms
dom-widget-clipping: script duration 60ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 51.1 MB
dom-widget-clipping: DOM nodes 17
dom-widget-clipping: event listeners 2
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 10ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 8
large-graph-idle: task duration 697ms
large-graph-idle: script duration 115ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 64.2 MB
large-graph-idle: DOM nodes -284
large-graph-idle: event listeners -149
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 14ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 69
large-graph-pan: task duration 1334ms
large-graph-pan: script duration 447ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 61.1 MB
large-graph-pan: DOM nodes -286
large-graph-pan: event listeners -149
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 7ms
large-graph-zoom: style recalc duration 15ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 65
large-graph-zoom: task duration 1570ms
large-graph-zoom: script duration 563ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 73.4 MB
large-graph-zoom: DOM nodes -139
large-graph-zoom: event listeners -73
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 8
minimap-idle: task duration 727ms
minimap-idle: script duration 121ms
minimap-idle: TBT 0ms
minimap-idle: heap used 63.3 MB
minimap-idle: DOM nodes -284
minimap-idle: event listeners -165
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 10ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 409ms
subgraph-dom-widget-clipping: script duration 122ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 51.7 MB
subgraph-dom-widget-clipping: DOM nodes 19
subgraph-dom-widget-clipping: event listeners 7
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 9ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 473ms
subgraph-idle: script duration 15ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 67.4 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 38ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 77
subgraph-mouse-sweep: task duration 785ms
subgraph-mouse-sweep: script duration 96ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 58.6 MB
subgraph-mouse-sweep: DOM nodes 64
subgraph-mouse-sweep: event listeners 4
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 13ms
subgraph-transition-enter: style recalc duration 31ms
subgraph-transition-enter: layout count 14
subgraph-transition-enter: style recalc count 18
subgraph-transition-enter: task duration 1020ms
subgraph-transition-enter: script duration 40ms
subgraph-transition-enter: TBT 142ms
subgraph-transition-enter: heap used 96.4 MB
subgraph-transition-enter: DOM nodes 13673
subgraph-transition-enter: event listeners 2375
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 39ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 250
viewport-pan-sweep: task duration 4720ms
viewport-pan-sweep: script duration 1445ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 62.1 MB
viewport-pan-sweep: DOM nodes -284
viewport-pan-sweep: event listeners -148
vue-large-graph-idle: avg frame time 18ms
vue-large-graph-idle: p95 frame time 17ms
vue-large-graph-idle: layout duration 0ms
vue-large-graph-idle: style recalc duration 0ms
vue-large-graph-idle: layout count 0
vue-large-graph-idle: style recalc count 0
vue-large-graph-idle: task duration 17157ms
vue-large-graph-idle: script duration 560ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 159.2 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16387
vue-large-graph-pan: avg frame time 18ms
vue-large-graph-pan: p95 frame time 17ms
vue-large-graph-pan: layout duration 0ms
vue-large-graph-pan: style recalc duration 18ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 143
vue-large-graph-pan: task duration 20677ms
vue-large-graph-pan: script duration 913ms
vue-large-graph-pan: TBT 161ms
vue-large-graph-pan: heap used 149.0 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16387
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 23ms
workflow-execution: layout count 4
workflow-execution: style recalc count 17
workflow-execution: task duration 126ms
workflow-execution: script duration 12ms
workflow-execution: TBT 0ms
workflow-execution: heap used 65.8 MB
workflow-execution: DOM nodes 147
workflow-execution: event listeners 98
Raw data
{
  "timestamp": "2026-08-13T05:03:50.203Z",
  "gitSha": "834036eec330c85271afc24a7e8adcfb173af11b",
  "branch": "backport-15063-to-cloud-1.50",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2029.4880000000148,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.744,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 545.9200000000001,
      "heapDeltaBytes": 5850012,
      "heapUsedBytes": 70638948,
      "domNodes": 14,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 19.311000000000003,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2038.1150000000616,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.5,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 491.6070000000001,
      "heapDeltaBytes": 5967688,
      "heapUsedBytes": 70608312,
      "domNodes": 20,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 21.080000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1940.5669999999873,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 40.739,
      "layouts": 12,
      "layoutDurationMs": 3.6109999999999998,
      "taskDurationMs": 962.828,
      "heapDeltaBytes": -15216648,
      "heapUsedBytes": 49431740,
      "domNodes": -282,
      "jsHeapTotalBytes": 22519808,
      "scriptDurationMs": 133.192,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1857.0079999999507,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.663999999999994,
      "layouts": 12,
      "layoutDurationMs": 3.488,
      "taskDurationMs": 860.251,
      "heapDeltaBytes": 475888,
      "heapUsedBytes": 65276952,
      "domNodes": 59,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 125.774,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.2970000000219,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 18.700000000000003,
      "layouts": 6,
      "layoutDurationMs": 0.7210000000000001,
      "taskDurationMs": 398.199,
      "heapDeltaBytes": 8925344,
      "heapUsedBytes": 73482792,
      "domNodes": 77,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 22.765,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1742.9179999999178,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 18.358000000000004,
      "layouts": 6,
      "layoutDurationMs": 0.696,
      "taskDurationMs": 428.951,
      "heapDeltaBytes": 8634668,
      "heapUsedBytes": 73206856,
      "domNodes": 78,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 27.031,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 603.2999999999902,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.7269999999999985,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 385.974,
      "heapDeltaBytes": -11015888,
      "heapUsedBytes": 53572516,
      "domNodes": 16,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 60.899,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 574.9160000000302,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.447999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 378.347,
      "heapDeltaBytes": -11273336,
      "heapUsedBytes": 53538316,
      "domNodes": 18,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 59.23699999999999,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2031.5259999999853,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.614999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 700.2570000000002,
      "heapDeltaBytes": 6859052,
      "heapUsedBytes": 66953784,
      "domNodes": -284,
      "jsHeapTotalBytes": 4034560,
      "scriptDurationMs": 113.10100000000001,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2056.940999999938,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 11.269000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 694.207,
      "heapDeltaBytes": 7686084,
      "heapUsedBytes": 67772372,
      "domNodes": -284,
      "jsHeapTotalBytes": 3510272,
      "scriptDurationMs": 116.056,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2199.1649999999936,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.188999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1321.862,
      "heapDeltaBytes": 4749108,
      "heapUsedBytes": 65674656,
      "domNodes": -284,
      "jsHeapTotalBytes": 4751360,
      "scriptDurationMs": 442.05899999999997,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2170.5950000000485,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.710000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1346.976,
      "heapDeltaBytes": 1553364,
      "heapUsedBytes": 62471504,
      "domNodes": -287,
      "jsHeapTotalBytes": 4227072,
      "scriptDurationMs": 451.878,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3229.4780000000287,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.604000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.244,
      "taskDurationMs": 1510.6739999999998,
      "heapDeltaBytes": 24754908,
      "heapUsedBytes": 87227244,
      "domNodes": 10,
      "jsHeapTotalBytes": 7340032,
      "scriptDurationMs": 544.8960000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3310.9379999999646,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 15.099000000000002,
      "layouts": 60,
      "layoutDurationMs": 7.413,
      "taskDurationMs": 1630.2839999999999,
      "heapDeltaBytes": 4021068,
      "heapUsedBytes": 66653372,
      "domNodes": -287,
      "jsHeapTotalBytes": 6131712,
      "scriptDurationMs": 581.155,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2011.8820000000142,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.973000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 705.5089999999999,
      "heapDeltaBytes": 5944580,
      "heapUsedBytes": 66878532,
      "domNodes": -284,
      "jsHeapTotalBytes": 4034560,
      "scriptDurationMs": 115.15400000000001,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2067.9139999999734,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.814000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 747.9490000000001,
      "heapDeltaBytes": 5002656,
      "heapUsedBytes": 65886052,
      "domNodes": -283,
      "jsHeapTotalBytes": 2723840,
      "scriptDurationMs": 126.58900000000001,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 590.8230000000003,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.738000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 406.18199999999996,
      "heapDeltaBytes": -10729684,
      "heapUsedBytes": 54244580,
      "domNodes": 20,
      "jsHeapTotalBytes": 26476544,
      "scriptDurationMs": 118.60699999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 595.8669999999984,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.531,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 411.69000000000005,
      "heapDeltaBytes": -10620612,
      "heapUsedBytes": 54091304,
      "domNodes": 18,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 126.11,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.0919999999574,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.946000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 473.908,
      "heapDeltaBytes": 6023316,
      "heapUsedBytes": 70672500,
      "domNodes": 18,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 16.421,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2007.4010000000726,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.82,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 471.93600000000004,
      "heapDeltaBytes": 5906396,
      "heapUsedBytes": 70774860,
      "domNodes": 22,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 14.55,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1725.375999999983,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.884,
      "layouts": 16,
      "layoutDurationMs": 4.746,
      "taskDurationMs": 804.091,
      "heapDeltaBytes": -3189776,
      "heapUsedBytes": 61628532,
      "domNodes": 62,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 98.92200000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1694.2450000000235,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 36.658,
      "layouts": 16,
      "layoutDurationMs": 4.194,
      "taskDurationMs": 764.9469999999999,
      "heapDeltaBytes": -3211536,
      "heapUsedBytes": 61357144,
      "domNodes": 65,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 93.45200000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1417.3039999999446,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 30.872999999999998,
      "layouts": 14,
      "layoutDurationMs": 12.849000000000002,
      "taskDurationMs": 1020.0180000000001,
      "heapDeltaBytes": 8593592,
      "heapUsedBytes": 101124920,
      "domNodes": 13673,
      "jsHeapTotalBytes": 11534336,
      "scriptDurationMs": 40.39299999999999,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 142,
      "frameDurationMs": 16.666666666666636,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8409.800000000017,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 38.193999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4680.695,
      "heapDeltaBytes": 71540,
      "heapUsedBytes": 59223020,
      "domNodes": -282,
      "jsHeapTotalBytes": 4296704,
      "scriptDurationMs": 1430.433,
      "eventListeners": -163,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8446.217000000048,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 39.044999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4760.259,
      "heapDeltaBytes": 10620856,
      "heapUsedBytes": 71102720,
      "domNodes": -285,
      "jsHeapTotalBytes": 4751360,
      "scriptDurationMs": 1458.901,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17164.556000000004,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17145.865,
      "heapDeltaBytes": -60365824,
      "heapUsedBytes": 165993292,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9641984,
      "scriptDurationMs": 538.516,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.329999999999927,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17188.600000000064,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17169.115999999998,
      "heapDeltaBytes": -35680232,
      "heapUsedBytes": 167865696,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8327168,
      "scriptDurationMs": 581.171,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.333333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20758.488,
      "styleRecalcs": 144,
      "styleRecalcDurationMs": 18.093999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20723.051,
      "heapDeltaBytes": -74875700,
      "heapUsedBytes": 154545728,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8069120,
      "scriptDurationMs": 928.177,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 195,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20667.12599999994,
      "styleRecalcs": 141,
      "styleRecalcDurationMs": 17.342000000000024,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20630.866,
      "heapDeltaBytes": -48335688,
      "heapUsedBytes": 157904080,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9375744,
      "scriptDurationMs": 898.174,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 127,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 480.8219999999892,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 22.944,
      "layouts": 4,
      "layoutDurationMs": 1.595,
      "taskDurationMs": 128,
      "heapDeltaBytes": 5191820,
      "heapUsedBytes": 68871916,
      "domNodes": 148,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 10.853000000000002,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 488.9290000000983,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 22.295999999999996,
      "layouts": 3,
      "layoutDurationMs": 1.2069999999999999,
      "taskDurationMs": 123.94300000000001,
      "heapDeltaBytes": 5287440,
      "heapUsedBytes": 69116564,
      "domNodes": 145,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 12.443000000000001,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@codecov

codecov Bot commented Aug 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@              Coverage Diff              @@
##             cloud/1.50   #15180   +/-   ##
=============================================
  Coverage              ?   81.33%           
=============================================
  Files                 ?     1872           
  Lines                 ?   106229           
  Branches              ?    32727           
=============================================
  Hits                  ?    86398           
  Misses                ?    19475           
  Partials              ?      356           
Flag Coverage Δ
unit 72.46% <100.00%> (?)

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

Files with missing lines Coverage Δ
src/router.ts 23.25% <ø> (ø)
src/stores/bootstrapStore.ts 100.00% <100.00%> (ø)
🚀 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.

@comfy-pr-bot
comfy-pr-bot merged commit 4657873 into cloud/1.50 Aug 13, 2026
77 of 79 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-15063-to-cloud-1.50 branch August 13, 2026 05:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport Backporting a PR onto a release candidate size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants