Skip to content

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

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

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

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #15063 to cloud/1.49

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:55 AM UTC

Links

🎭 Playwright: ✅ 1794 passed, 0 failed

📊 Browser Reports
  • chromium: View Report (✅ 1773 / ❌ 0 / ⚠️ 0 / ⏭️ 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.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.6 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.0 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 73.6 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.9 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.4 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.0 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.9 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 143ms TBT · 70.2 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.2 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 160.3 MB heap
vue-large-graph-pan: · 55.4 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 212ms TBT · 172.8 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.7 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 9ms
canvas-idle: layout count 0
canvas-idle: style recalc count 9
canvas-idle: task duration 490ms
canvas-idle: script duration 20ms
canvas-idle: TBT 0ms
canvas-idle: heap used 70.6 MB
canvas-idle: DOM nodes 18
canvas-idle: event listeners 4
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 44ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 78
canvas-mouse-sweep: task duration 956ms
canvas-mouse-sweep: script duration 131ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 56.0 MB
canvas-mouse-sweep: DOM nodes -109
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 18ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 414ms
canvas-zoom-sweep: script duration 24ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 73.6 MB
canvas-zoom-sweep: DOM nodes 77
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 8ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 418ms
dom-widget-clipping: script duration 65ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 54.3 MB
dom-widget-clipping: DOM nodes 18
dom-widget-clipping: event listeners 1
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 7ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 8
large-graph-idle: task duration 715ms
large-graph-idle: script duration 114ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 63.9 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 1352ms
large-graph-pan: script duration 457ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 60.0 MB
large-graph-pan: DOM nodes -284
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 16ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 65
large-graph-zoom: task duration 1601ms
large-graph-zoom: script duration 555ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 61.7 MB
large-graph-zoom: DOM nodes -288
large-graph-zoom: event listeners -152
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 757ms
minimap-idle: script duration 122ms
minimap-idle: TBT 0ms
minimap-idle: heap used 67.4 MB
minimap-idle: DOM nodes -284
minimap-idle: event listeners -150
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 418ms
subgraph-dom-widget-clipping: script duration 124ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 55.0 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 11
subgraph-idle: task duration 486ms
subgraph-idle: script duration 17ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 70.9 MB
subgraph-idle: DOM nodes 21
subgraph-idle: event listeners 4
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 5ms
subgraph-mouse-sweep: style recalc duration 38ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 76
subgraph-mouse-sweep: task duration 805ms
subgraph-mouse-sweep: script duration 96ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 62.2 MB
subgraph-mouse-sweep: DOM nodes 62
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 15
subgraph-transition-enter: style recalc count 19
subgraph-transition-enter: task duration 999ms
subgraph-transition-enter: script duration 37ms
subgraph-transition-enter: TBT 143ms
subgraph-transition-enter: heap used 70.2 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 37ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 249
viewport-pan-sweep: task duration 4806ms
viewport-pan-sweep: script duration 1452ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 67.2 MB
viewport-pan-sweep: DOM nodes -283
viewport-pan-sweep: event listeners -132
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 17384ms
vue-large-graph-idle: script duration 590ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 160.3 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16389
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 20861ms
vue-large-graph-pan: script duration 882ms
vue-large-graph-pan: TBT 212ms
vue-large-graph-pan: heap used 172.8 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16385
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 0ms
workflow-execution: style recalc duration 19ms
workflow-execution: layout count 3
workflow-execution: style recalc count 14
workflow-execution: task duration 123ms
workflow-execution: script duration 10ms
workflow-execution: TBT 0ms
workflow-execution: heap used 49.7 MB
workflow-execution: DOM nodes 129
workflow-execution: event listeners 98
Raw data
{
  "timestamp": "2026-08-13T05:03:34.625Z",
  "gitSha": "a2312d7ba8f73c14a726ea475b9ece0ea03deca2",
  "branch": "backport-15063-to-cloud-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2071.5430000000197,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.269,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 493.156,
      "heapDeltaBytes": 5532336,
      "heapUsedBytes": 74116564,
      "domNodes": 20,
      "jsHeapTotalBytes": 20037632,
      "scriptDurationMs": 20.173999999999996,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-idle",
      "durationMs": 2033.551999999986,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.337000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 486.584,
      "heapDeltaBytes": 5266184,
      "heapUsedBytes": 74025300,
      "domNodes": 16,
      "jsHeapTotalBytes": 20299776,
      "scriptDurationMs": 20.120999999999995,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2065.1169999999865,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 46.855999999999995,
      "layouts": 12,
      "layoutDurationMs": 4.103,
      "taskDurationMs": 1010.5470000000001,
      "heapDeltaBytes": 175652,
      "heapUsedBytes": 69125800,
      "domNodes": 62,
      "jsHeapTotalBytes": 21348352,
      "scriptDurationMs": 136.048,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1874.4930000000295,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 40.408,
      "layouts": 12,
      "layoutDurationMs": 3.654,
      "taskDurationMs": 902.205,
      "heapDeltaBytes": -20567992,
      "heapUsedBytes": 48332976,
      "domNodes": -280,
      "jsHeapTotalBytes": 20164608,
      "scriptDurationMs": 126.44800000000001,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1748.8109999999892,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 18.545,
      "layouts": 6,
      "layoutDurationMs": 0.549,
      "taskDurationMs": 430.628,
      "heapDeltaBytes": 8330752,
      "heapUsedBytes": 77102272,
      "domNodes": 77,
      "jsHeapTotalBytes": 20037632,
      "scriptDurationMs": 26.151999999999997,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1741.7549999998982,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 18.038999999999998,
      "layouts": 6,
      "layoutDurationMs": 0.7599999999999998,
      "taskDurationMs": 396.972,
      "heapDeltaBytes": 8388968,
      "heapUsedBytes": 77246248,
      "domNodes": 77,
      "jsHeapTotalBytes": 20299776,
      "scriptDurationMs": 21.909,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 694.1630000000032,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.8039999999999985,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 431.673,
      "heapDeltaBytes": -12310520,
      "heapUsedBytes": 56475988,
      "domNodes": 18,
      "jsHeapTotalBytes": 21872640,
      "scriptDurationMs": 68.64099999999999,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 623.5960000000205,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.658,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 405.179,
      "heapDeltaBytes": -11447524,
      "heapUsedBytes": 57376876,
      "domNodes": 18,
      "jsHeapTotalBytes": 21086208,
      "scriptDurationMs": 61.126,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2059.042999999974,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.7330000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 741.99,
      "heapDeltaBytes": 5505784,
      "heapUsedBytes": 65629016,
      "domNodes": -284,
      "jsHeapTotalBytes": 4513792,
      "scriptDurationMs": 122.787,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2029.8440000000255,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.196000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 687.8410000000001,
      "heapDeltaBytes": 8505756,
      "heapUsedBytes": 68433616,
      "domNodes": -284,
      "jsHeapTotalBytes": 5038080,
      "scriptDurationMs": 105.70299999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2384.08400000003,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 15.66,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1422.071,
      "heapDeltaBytes": 7877080,
      "heapUsedBytes": 68979620,
      "domNodes": -281,
      "jsHeapTotalBytes": 4476928,
      "scriptDurationMs": 472.54300000000006,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2172.209000000066,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.316,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1282.726,
      "heapDeltaBytes": -4408788,
      "heapUsedBytes": 56793596,
      "domNodes": -287,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 441.12999999999994,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3328.9970000000153,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 16.302,
      "layouts": 60,
      "layoutDurationMs": 7.537,
      "taskDurationMs": 1649.3430000000003,
      "heapDeltaBytes": 4215500,
      "heapUsedBytes": 67273824,
      "domNodes": -287,
      "jsHeapTotalBytes": 6610944,
      "scriptDurationMs": 574.6510000000001,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3228.566999999998,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.896000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.323000000000001,
      "taskDurationMs": 1552.7649999999999,
      "heapDeltaBytes": -495844,
      "heapUsedBytes": 62188588,
      "domNodes": -288,
      "jsHeapTotalBytes": 8708096,
      "scriptDurationMs": 535.177,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2035.7290000000035,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 9.023,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 804.4520000000001,
      "heapDeltaBytes": 7403120,
      "heapUsedBytes": 69673604,
      "domNodes": -283,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 126.506,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2041.6779999999335,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.976,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 709.0520000000001,
      "heapDeltaBytes": 9713016,
      "heapUsedBytes": 71652124,
      "domNodes": -284,
      "jsHeapTotalBytes": 5562368,
      "scriptDurationMs": 118.43299999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 627.9570000000376,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 10.223999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 428.471,
      "heapDeltaBytes": -11207688,
      "heapUsedBytes": 57815996,
      "domNodes": 18,
      "jsHeapTotalBytes": 21348352,
      "scriptDurationMs": 125.31200000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 594.8130000000447,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.36,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 407.671,
      "heapDeltaBytes": -11241724,
      "heapUsedBytes": 57632200,
      "domNodes": 20,
      "jsHeapTotalBytes": 21872640,
      "scriptDurationMs": 121.756,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2035.2159999999913,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.563,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 502.11899999999997,
      "heapDeltaBytes": 5367192,
      "heapUsedBytes": 74325092,
      "domNodes": 20,
      "jsHeapTotalBytes": 20824064,
      "scriptDurationMs": 19.159000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1992.3209999999472,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.369999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 469.81899999999996,
      "heapDeltaBytes": 5452196,
      "heapUsedBytes": 74354388,
      "domNodes": 22,
      "jsHeapTotalBytes": 20037632,
      "scriptDurationMs": 15.207,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1740.883999999994,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 38.336,
      "layouts": 16,
      "layoutDurationMs": 4.774000000000001,
      "taskDurationMs": 835.897,
      "heapDeltaBytes": -3782364,
      "heapUsedBytes": 65470756,
      "domNodes": 63,
      "jsHeapTotalBytes": 19513344,
      "scriptDurationMs": 97.996,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1702.7560000000221,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 37.382,
      "layouts": 16,
      "layoutDurationMs": 4.669,
      "taskDurationMs": 773.468,
      "heapDeltaBytes": -3952196,
      "heapUsedBytes": 65014328,
      "domNodes": 60,
      "jsHeapTotalBytes": 20299776,
      "scriptDurationMs": 94.076,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1431.8519999999921,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 31.167,
      "layouts": 15,
      "layoutDurationMs": 13.094999999999999,
      "taskDurationMs": 998.7340000000003,
      "heapDeltaBytes": 1477992,
      "heapUsedBytes": 73576164,
      "domNodes": 13673,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 36.93700000000001,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 143,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8740.384000000005,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 36.609,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4887.709,
      "heapDeltaBytes": 8803868,
      "heapUsedBytes": 68922484,
      "domNodes": -282,
      "jsHeapTotalBytes": 6836224,
      "scriptDurationMs": 1486.19,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8400.237999999945,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 36.69700000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4723.559,
      "heapDeltaBytes": 12302032,
      "heapUsedBytes": 72023508,
      "domNodes": -283,
      "jsHeapTotalBytes": 6574080,
      "scriptDurationMs": 1418.128,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17477.517999999975,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17456.430999999997,
      "heapDeltaBytes": -58928568,
      "heapUsedBytes": 168474640,
      "domNodes": -8312,
      "jsHeapTotalBytes": -7806976,
      "scriptDurationMs": 562.6850000000001,
      "eventListeners": -16391,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17329.031999999985,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17311.442999999996,
      "heapDeltaBytes": -60006156,
      "heapUsedBytes": 167751492,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9641984,
      "scriptDurationMs": 617.004,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21071.02100000003,
      "styleRecalcs": 147,
      "styleRecalcDurationMs": 19.70900000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21043.665,
      "heapDeltaBytes": -38871676,
      "heapUsedBytes": 184653116,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11247616,
      "scriptDurationMs": 879.2059999999999,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 235,
      "frameDurationMs": 18.333333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20746.531000000003,
      "styleRecalcs": 139,
      "styleRecalcDurationMs": 16.38400000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20677.678,
      "heapDeltaBytes": -32619808,
      "heapUsedBytes": 177769820,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10498048,
      "scriptDurationMs": 884.358,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 189,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 450.16200000003437,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 18.992,
      "layouts": 2,
      "layoutDurationMs": 0.30499999999999994,
      "taskDurationMs": 126.227,
      "heapDeltaBytes": -16012640,
      "heapUsedBytes": 52212852,
      "domNodes": 134,
      "jsHeapTotalBytes": 7716864,
      "scriptDurationMs": 10.477,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 459.6129999999903,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 18.750000000000004,
      "layouts": 3,
      "layoutDurationMs": 0.5289999999999999,
      "taskDurationMs": 118.82000000000001,
      "heapDeltaBytes": -15998160,
      "heapUsedBytes": 52016992,
      "domNodes": 123,
      "jsHeapTotalBytes": 6930432,
      "scriptDurationMs": 9.469999999999999,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@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.49   #15179   +/-   ##
=============================================
  Coverage              ?   71.92%           
=============================================
  Files                 ?     1767           
  Lines                 ?    92476           
  Branches              ?    24894           
=============================================
  Hits                  ?    66514           
  Misses                ?    25843           
  Partials              ?      119           
Flag Coverage Δ
unit 71.92% <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 0.00% <ø> (ø)
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 5f7b80e into cloud/1.49 Aug 13, 2026
76 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-15063-to-cloud-1.49 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