Skip to content

[backport core/1.49] fix(workspace): recover from initialization failures - #14801

Merged
comfy-pr-bot merged 1 commit into
core/1.49from
backport-14612-to-core-1.49
Aug 8, 2026
Merged

[backport core/1.49] fix(workspace): recover from initialization failures#14801
comfy-pr-bot merged 1 commit into
core/1.49from
backport-14612-to-core-1.49

Conversation

@dante01yoon

Copy link
Copy Markdown
Collaborator

Backport of #14612 to core/1.49.

Summary

Restores the workspace initialization recovery behavior from the merged PR, including retryable fail-closed errors, account actions during Cloud loading/error states, retryable workspace-store initialization, and supporting test fixtures.

Conflict resolution

Resolved browser_tests/fixtures/utils/workspaceMocks.ts by retaining the merged PR behavior: route helpers accept Page | BrowserContext and workspace routes use the supplied routeTarget. Kept the workspace-list helper local because this release branch does not yet contain its later stack consumers.

Validation

  • pnpm typecheck
  • pnpm typecheck:browser
  • pnpm knip --cache
  • Focused Vitest: 6 files, 143 tests passed
  • lint/format pre-commit hooks
  • git diff --check

Original PR: #14612

Part 1/4 of the workspace/billing rollout retirement stack. Makes Cloud
workspace initialization failures recoverable without changing either
rollout flag or flag-off behavior.

Predecessor: none (base: main). Successor:
[#14613](#14613).

`WorkspaceAuthGate` failed closed on config, unified-auth, workspace
initialization, and timeout failures but exposed no recovery action. The
team workspace store also treated `error` as terminal, and the Cloud
account popover disappeared while workspace initialization was loading
or failed, preventing account actions.

- Render a fail-closed initialization error with a retry action for
config, timeout, unified-auth, and workspace failures.
- Permit `teamWorkspaceStore.initialize()` to retry from `error`.
- Keep the account menu usable in flag-on loading/error states via
account-only workspace popover content.
- Preserve legacy popover and gate behavior when
`team_workspaces_enabled` is off.
- Filter empty logged-out Workspace settings groups.
- Add only the Cloud boot session/workspace fixture coverage needed by
this layer; both rollout keys remain supported.

Initialization failures permanently gate the app and loading/error
workspace state removes Cloud account actions.

Initialization failures remain fail-closed but can be retried, and Cloud
account actions remain available during loading/error. This is the only
intended visual change in the stack; it is a state-dependent recovery
UI, so no static screenshot is required.

- WorkspaceAuthGate failure, timeout, and retry paths with asynchronous
settling.
- Team workspace store `error -> loading -> ready` retry.
- Current user button/popover flag-off, flag-on loading/error, and ready
behavior.
- Logged-out settings group filtering.
- Cloud boot fixture session/workspace bootstrap.

- `pnpm test:unit src/platform/workspace/auth/WorkspaceAuthGate.test.ts
src/platform/workspace/stores/teamWorkspaceStore.test.ts
src/components/topbar/CurrentUserButton.test.ts
src/platform/workspace/components/CurrentUserPopoverWorkspace.test.ts
src/platform/settings/composables/useSettingUI.test.ts` (125 passed)
- `pnpm typecheck` (passed via commit hook after final fix)
- `pnpm typecheck:browser` (passed)
- targeted `oxfmt --check` (passed)
- `git diff --check public/main...HEAD` (passed)
- `pnpm knip --cache` (passed via push hook)

Review only recoverability, retry state transitions, and preservation of
both rollout modes. Flag retirement belongs to later PRs.

1. **This PR** — recovery foundation
2. [#14613](#14613) —
retire team workspace rollout flag
3. [#14614](#14614) —
canonical billing status and legacy rail preservation
4. [#14615](#14615) —
retire consolidated billing rollout flag

Deploy the frontend stack before the backend removes `/api/features`
compatibility keys.

---------

Co-authored-by: Dante <6510430+dante01yoon@users.noreply.github.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Amp-Thread-ID: https://ampcode.com/threads/T-019fc8cd-b288-7161-a590-cd76d51212bf
@dante01yoon dante01yoon added the backport Backporting a PR onto a release candidate label Aug 5, 2026
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Aug 5, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Ignore keyword(s) in the title.

⛔ Ignored keywords (2)
  • [release]
  • [backport

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8fcbab94-0768-4f68-aff4-7925a28281e6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

❤️ Share

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

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

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

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

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/05/2026, 12:43:43 PM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 47.7 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.7 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.7 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.2 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.0 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.3 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.6 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.8 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.8 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 138ms TBT · 94.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.3 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 156.1 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 180ms TBT · 164.3 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.3 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 531ms 469ms -12% ⚠️ z=2.4
large-graph-idle: task duration 769ms 685ms -11% ⚠️ z=2.6
large-graph-pan: task duration 1328ms 1262ms -5% ⚠️ z=4.2
minimap-idle: task duration 764ms 694ms -9% ⚠️ z=3.5
subgraph-idle: task duration 527ms 446ms -15% ⚠️ z=2.4
workflow-execution: event listeners 73 98 +34% ⚠️ z=10.6
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.5
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 9ms 9ms +5% z=-2.1
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 8 10 +19% z=-2.9
canvas-idle: task duration 531ms 469ms -12% ⚠️ z=2.4
canvas-idle: script duration 23ms 17ms -28% z=-3.8
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 69.9 MB 69.9 MB +0%
canvas-idle: DOM nodes 16 19 +19% z=-2.8
canvas-idle: event listeners 4 4 +0% z=-1.6
canvas-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.9
canvas-mouse-sweep: p95 frame time 17ms 17ms -1%
canvas-mouse-sweep: layout duration 4ms 4ms -0% z=-0.5
canvas-mouse-sweep: style recalc duration 42ms 38ms -10% z=-1.5
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 76 75 -1% z=-1.8
canvas-mouse-sweep: task duration 892ms 912ms +2% z=0.8
canvas-mouse-sweep: script duration 132ms 126ms -4% z=-1.4
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 64.8 MB 47.7 MB -26%
canvas-mouse-sweep: DOM nodes 58 -281 -584% z=-132.5
canvas-mouse-sweep: event listeners 4 -153 -3925% z=-38.7
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=0.5
canvas-zoom-sweep: p95 frame time 17ms 17ms +0%
canvas-zoom-sweep: layout duration 1ms 1ms -8% z=-1.6
canvas-zoom-sweep: style recalc duration 19ms 17ms -13% z=-1.6
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 32 32 +0% z=0.5
canvas-zoom-sweep: task duration 396ms 368ms -7% z=1.8
canvas-zoom-sweep: script duration 24ms 19ms -24% z=-2.9
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 72.7 MB 72.7 MB +0%
canvas-zoom-sweep: DOM nodes 77 78 +1% z=-2.2
canvas-zoom-sweep: event listeners 19 19 +0% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms -0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms +0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 9ms 7ms -15% z=-3.2
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 11 +0% z=-4.2
dom-widget-clipping: task duration 429ms 375ms -13% z=0.6
dom-widget-clipping: script duration 63ms 59ms -7% z=-2.8
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.6 MB 53.5 MB -0%
dom-widget-clipping: DOM nodes 18 18 +0% z=-2.9
dom-widget-clipping: event listeners 2 0 -100% variance too high
large-graph-idle: avg frame time 17ms 17ms -0% z=-0.6
large-graph-idle: p95 frame time 17ms 17ms +0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 9ms 7ms -19% z=-4.9
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 8 -6% z=-11.5
large-graph-idle: task duration 769ms 685ms -11% ⚠️ z=2.6
large-graph-idle: script duration 123ms 108ms -13% z=0.5
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 63.1 MB 63.7 MB +1%
large-graph-idle: DOM nodes -283 -283 +0% z=-340.4
large-graph-idle: event listeners -163 -163 +0% z=-31.0
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 15ms 13ms -11% z=-5.3
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 70 69 -1% z=-1.7
large-graph-pan: task duration 1328ms 1262ms -5% ⚠️ z=4.2
large-graph-pan: script duration 445ms 432ms -3% z=1.2
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 62.7 MB 58.2 MB -7%
large-graph-pan: DOM nodes -283 -285 +1% z=-184.3
large-graph-pan: event listeners -149 -164 +10% z=-204.0
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 7ms 7ms -4%
large-graph-zoom: style recalc duration 15ms 13ms -10%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 64 -2%
large-graph-zoom: task duration 1606ms 1480ms -8%
large-graph-zoom: script duration 559ms 525ms -6%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 67.0 MB 70.0 MB +4%
large-graph-zoom: DOM nodes -289 -139 -52%
large-graph-zoom: event listeners -152 -73 -52%
minimap-idle: avg frame time 17ms 17ms +0% z=0.7
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 8ms 7ms -11% z=-3.1
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 -6% z=-3.0
minimap-idle: task duration 764ms 694ms -9% ⚠️ z=3.5
minimap-idle: script duration 121ms 112ms -7% z=1.4
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 65.5 MB 66.3 MB +1%
minimap-idle: DOM nodes -284 -284 +0% z=-221.3
minimap-idle: event listeners -164 -149 -9% z=-232.6
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.7
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 10ms 11ms +1% z=-2.3
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 48 +3% z=-0.8
subgraph-dom-widget-clipping: task duration 425ms 407ms -4% z=1.5
subgraph-dom-widget-clipping: script duration 126ms 120ms -5% z=-1.3
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 54.2 MB 54.6 MB +1%
subgraph-dom-widget-clipping: DOM nodes 18 21 +17% z=-1.1
subgraph-dom-widget-clipping: event listeners 8 7 -13% z=-1.6
subgraph-idle: avg frame time 17ms 17ms -0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms -0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 8ms -4% z=-2.8
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 10 +11% z=-1.4
subgraph-idle: task duration 527ms 446ms -15% ⚠️ z=2.4
subgraph-idle: script duration 19ms 13ms -29% z=-2.6
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 69.8 MB 69.8 MB -0%
subgraph-idle: DOM nodes 18 20 +11% z=-1.2
subgraph-idle: event listeners 5 4 -20% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.4
subgraph-mouse-sweep: p95 frame time 17ms 17ms -0%
subgraph-mouse-sweep: layout duration 5ms 4ms -15% z=-1.9
subgraph-mouse-sweep: style recalc duration 39ms 37ms -4% z=-1.6
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 77 76 -1% z=-2.1
subgraph-mouse-sweep: task duration 822ms 761ms -7% z=-0.1
subgraph-mouse-sweep: script duration 96ms 91ms -5% z=-1.5
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 53.9 MB 60.8 MB +13%
subgraph-mouse-sweep: DOM nodes -109 64 -159% z=-1.5
subgraph-mouse-sweep: event listeners -75 4 -105% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms -0%
subgraph-transition-enter: p95 frame time 17ms 17ms +0%
subgraph-transition-enter: layout duration 14ms 12ms -9%
subgraph-transition-enter: style recalc duration 32ms 30ms -8%
subgraph-transition-enter: layout count 15 13 -13%
subgraph-transition-enter: style recalc count 19 17 -11%
subgraph-transition-enter: task duration 1027ms 926ms -10%
subgraph-transition-enter: script duration 38ms 36ms -5%
subgraph-transition-enter: TBT 150ms 138ms -8%
subgraph-transition-enter: heap used 71.9 MB 94.8 MB +32%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2375 2375 +0%
viewport-pan-sweep: avg frame time 17ms 17ms -0%
viewport-pan-sweep: p95 frame time 17ms 17ms +0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 38ms 36ms -4%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 4839ms 4480ms -7%
viewport-pan-sweep: script duration 1505ms 1402ms -7%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 71.6 MB 65.3 MB -9%
viewport-pan-sweep: DOM nodes -284 -285 +0%
viewport-pan-sweep: event listeners -133 -149 +12%
vue-large-graph-idle: avg frame time 18ms 18ms -0%
vue-large-graph-idle: p95 frame time 17ms 17ms -0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 17463ms 17178ms -2%
vue-large-graph-idle: script duration 587ms 565ms -4%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 162.0 MB 156.1 MB -4%
vue-large-graph-idle: DOM nodes -8313 -8316 +0%
vue-large-graph-idle: event listeners -16388 -16387 -0%
vue-large-graph-pan: avg frame time 18ms 18ms -2%
vue-large-graph-pan: p95 frame time 17ms 17ms -0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 19ms 16ms -12%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 149 138 -8%
vue-large-graph-pan: task duration 21195ms 20472ms -3%
vue-large-graph-pan: script duration 915ms 884ms -3%
vue-large-graph-pan: TBT 261ms 180ms -31%
vue-large-graph-pan: heap used 170.3 MB 164.3 MB -4%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16382 -16385 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 1ms 1ms +107% z=-0.9
workflow-execution: style recalc duration 18ms 23ms +27% z=-0.4
workflow-execution: layout count 3 4 +17% z=-2.7
workflow-execution: style recalc count 11 16 +41% z=-1.1
workflow-execution: task duration 108ms 129ms +20% z=0.6
workflow-execution: script duration 9ms 10ms +10% z=-6.3
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 58.5 MB 49.3 MB -16%
workflow-execution: DOM nodes 122 140 +14% z=-3.0
workflow-execution: event listeners 73 98 +34% ⚠️ z=10.6
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-08-05T12:54:14.873Z",
  "gitSha": "ab5d6eb030d34a3d8bb1b7db6a9ffc4d50dc972d",
  "branch": "backport-14612-to-core-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2037.8729999999905,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.935,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 466.292,
      "heapDeltaBytes": 5140428,
      "heapUsedBytes": 73318212,
      "domNodes": 18,
      "jsHeapTotalBytes": 19779584,
      "scriptDurationMs": 16.325,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-idle",
      "durationMs": 2015.2310000000284,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.977,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 471.20099999999996,
      "heapDeltaBytes": 5217100,
      "heapUsedBytes": 73322232,
      "domNodes": 20,
      "jsHeapTotalBytes": 20041728,
      "scriptDurationMs": 17.146,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1857.2389999999928,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.354000000000006,
      "layouts": 12,
      "layoutDurationMs": 3.277,
      "taskDurationMs": 893.491,
      "heapDeltaBytes": -17253980,
      "heapUsedBytes": 50901996,
      "domNodes": -280,
      "jsHeapTotalBytes": 21217280,
      "scriptDurationMs": 122.90899999999999,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1866.9479999999794,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 40.17900000000001,
      "layouts": 12,
      "layoutDurationMs": 3.7520000000000002,
      "taskDurationMs": 930.2719999999999,
      "heapDeltaBytes": -18994640,
      "heapUsedBytes": 49174308,
      "domNodes": -281,
      "jsHeapTotalBytes": 21217280,
      "scriptDurationMs": 129.506,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1721.9949999999926,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.455000000000002,
      "layouts": 6,
      "layoutDurationMs": 0.521,
      "taskDurationMs": 363.303,
      "heapDeltaBytes": 8132576,
      "heapUsedBytes": 76264288,
      "domNodes": 78,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 18.215999999999998,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.0209999999797,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 16.869,
      "layouts": 6,
      "layoutDurationMs": 0.616,
      "taskDurationMs": 372.126,
      "heapDeltaBytes": 7971752,
      "heapUsedBytes": 76293232,
      "domNodes": 77,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 18.796000000000003,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 562.419000000034,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.24,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 373.26400000000007,
      "heapDeltaBytes": -11989312,
      "heapUsedBytes": 56131464,
      "domNodes": 18,
      "jsHeapTotalBytes": 21090304,
      "scriptDurationMs": 58.991,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 590.118000000075,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.465999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 376.41,
      "heapDeltaBytes": -12060340,
      "heapUsedBytes": 56077240,
      "domNodes": 18,
      "jsHeapTotalBytes": 21090304,
      "scriptDurationMs": 58.25699999999999,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2030.0090000000068,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.112,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 680.442,
      "heapDeltaBytes": 6708744,
      "heapUsedBytes": 65919712,
      "domNodes": -283,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 105.093,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2025.9399999999914,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.0859999999999985,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 688.83,
      "heapDeltaBytes": 8081840,
      "heapUsedBytes": 67632904,
      "domNodes": -283,
      "jsHeapTotalBytes": 5562368,
      "scriptDurationMs": 109.92200000000001,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2186.9199999999864,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 12.581999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1263.736,
      "heapDeltaBytes": -4203712,
      "heapUsedBytes": 56116812,
      "domNodes": -286,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 428.031,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2196.0619999999835,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 13.532000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1259.425,
      "heapDeltaBytes": 5829664,
      "heapUsedBytes": 65973812,
      "domNodes": -284,
      "jsHeapTotalBytes": 5787648,
      "scriptDurationMs": 435.43,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3128.0340000000137,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 13.627999999999998,
      "layouts": 60,
      "layoutDurationMs": 7.144,
      "taskDurationMs": 1443.516,
      "heapDeltaBytes": 22590912,
      "heapUsedBytes": 84812948,
      "domNodes": 10,
      "jsHeapTotalBytes": 8388608,
      "scriptDurationMs": 520.235,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3244.854999999916,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 12.928000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.2330000000000005,
      "taskDurationMs": 1516.9139999999998,
      "heapDeltaBytes": 14360,
      "heapUsedBytes": 61913148,
      "domNodes": -287,
      "jsHeapTotalBytes": 9232384,
      "scriptDurationMs": 530.524,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2054.7710000000166,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.731999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 698.683,
      "heapDeltaBytes": 8753468,
      "heapUsedBytes": 69594668,
      "domNodes": -283,
      "jsHeapTotalBytes": 3727360,
      "scriptDurationMs": 113.833,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2033.6730000000216,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.256999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 688.5179999999999,
      "heapDeltaBytes": 8338284,
      "heapUsedBytes": 69467064,
      "domNodes": -284,
      "jsHeapTotalBytes": 5038080,
      "scriptDurationMs": 111.13299999999998,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 606.9269999999847,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.539000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 405.582,
      "heapDeltaBytes": -10994876,
      "heapUsedBytes": 57223464,
      "domNodes": 20,
      "jsHeapTotalBytes": 21090304,
      "scriptDurationMs": 117.44099999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 647.0319999999674,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 10.59,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 407.641,
      "heapDeltaBytes": -10991736,
      "heapUsedBytes": 57328988,
      "domNodes": 22,
      "jsHeapTotalBytes": 21614592,
      "scriptDurationMs": 122.83099999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1993.4769999999844,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.674999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 445.14099999999996,
      "heapDeltaBytes": 4923272,
      "heapUsedBytes": 73114964,
      "domNodes": 22,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 12.589999999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2022.139999999922,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.775,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 446.40500000000003,
      "heapDeltaBytes": 4687156,
      "heapUsedBytes": 73167080,
      "domNodes": 18,
      "jsHeapTotalBytes": 19779584,
      "scriptDurationMs": 14.084000000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1695.0449999999933,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 35.545,
      "layouts": 16,
      "layoutDurationMs": 4.23,
      "taskDurationMs": 752.836,
      "heapDeltaBytes": -4670232,
      "heapUsedBytes": 63673660,
      "domNodes": 62,
      "jsHeapTotalBytes": 21090304,
      "scriptDurationMs": 89.62100000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1711.426000000074,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.819,
      "layouts": 16,
      "layoutDurationMs": 3.9590000000000005,
      "taskDurationMs": 768.2280000000001,
      "heapDeltaBytes": -4336244,
      "heapUsedBytes": 63902068,
      "domNodes": 65,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 91.999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1401.6300000000115,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 29.778000000000006,
      "layouts": 13,
      "layoutDurationMs": 12.355999999999998,
      "taskDurationMs": 926.2219999999999,
      "heapDeltaBytes": 30957688,
      "heapUsedBytes": 99446028,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15728640,
      "scriptDurationMs": 35.747,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 138,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8270.657999999969,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 36.621,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4479.034000000001,
      "heapDeltaBytes": 12972600,
      "heapUsedBytes": 72083352,
      "domNodes": -285,
      "jsHeapTotalBytes": 7098368,
      "scriptDurationMs": 1413.699,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.80000000000109
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8288.243999999962,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.908,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4481.3,
      "heapDeltaBytes": 5578044,
      "heapUsedBytes": 64952920,
      "domNodes": -284,
      "jsHeapTotalBytes": 5230592,
      "scriptDurationMs": 1390.275,
      "eventListeners": -165,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17163.666000000034,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17145.441,
      "heapDeltaBytes": -56681012,
      "heapUsedBytes": 155882028,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10952704,
      "scriptDurationMs": 530.4839999999999,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17228.749999999993,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17210.665,
      "heapDeltaBytes": -54868256,
      "heapUsedBytes": 171416264,
      "domNodes": -8319,
      "jsHeapTotalBytes": -3350528,
      "scriptDurationMs": 599.723,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.773333333333238,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20817.41400000004,
      "styleRecalcs": 144,
      "styleRecalcDurationMs": 17.330000000000013,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20791.961,
      "heapDeltaBytes": -32451284,
      "heapUsedBytes": 177799352,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10760192,
      "scriptDurationMs": 883.061,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 255,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20188.28999999994,
      "styleRecalcs": 131,
      "styleRecalcDurationMs": 15.599000000000029,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20152.490999999998,
      "heapDeltaBytes": -42910524,
      "heapUsedBytes": 166749736,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13836288,
      "scriptDurationMs": 884.2420000000001,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 104,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "workflow-execution",
      "durationMs": 461.75199999998995,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 22.924000000000003,
      "layouts": 4,
      "layoutDurationMs": 1.361,
      "taskDurationMs": 129.062,
      "heapDeltaBytes": -15485044,
      "heapUsedBytes": 51623728,
      "domNodes": 132,
      "jsHeapTotalBytes": 7720960,
      "scriptDurationMs": 11.031,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 477.0529999999553,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 23.651,
      "layouts": 3,
      "layoutDurationMs": 1.47,
      "taskDurationMs": 128.677,
      "heapDeltaBytes": -15626072,
      "heapUsedBytes": 51852432,
      "domNodes": 147,
      "jsHeapTotalBytes": 7720960,
      "scriptDurationMs": 9.680000000000001,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@codecov

codecov Bot commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.46018% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/platform/settings/composables/useSettingUI.ts 84.61% 2 Missing ⚠️
src/platform/remoteConfig/refreshRemoteConfig.ts 96.00% 1 Missing ⚠️
...rkspace/components/CurrentUserPopoverWorkspace.vue 88.88% 1 Missing ⚠️
@@              Coverage Diff              @@
##           core/1.49   #14801      +/-   ##
=============================================
+ Coverage      78.75%   78.77%   +0.01%     
=============================================
  Files           1791     1791              
  Lines         104546   104625      +79     
  Branches       32923    32094     -829     
=============================================
+ Hits           82338    82416      +78     
- Misses         21778    21779       +1     
  Partials         430      430              
Flag Coverage Δ
unit 71.00% <96.46%> (+0.02%) ⬆️

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

Files with missing lines Coverage Δ
src/components/topbar/CurrentUserButton.vue 90.00% <100.00%> (ø)
src/platform/remoteConfig/remoteConfig.ts 100.00% <100.00%> (ø)
src/platform/workspace/auth/WorkspaceAuthGate.vue 100.00% <100.00%> (ø)
...rc/platform/workspace/stores/teamWorkspaceStore.ts 76.36% <100.00%> (+0.04%) ⬆️
src/platform/remoteConfig/refreshRemoteConfig.ts 98.14% <96.00%> (-1.86%) ⬇️
...rkspace/components/CurrentUserPopoverWorkspace.vue 78.26% <88.88%> (+1.19%) ⬆️
src/platform/settings/composables/useSettingUI.ts 88.05% <84.61%> (+0.15%) ⬆️
🚀 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 774e430 into core/1.49 Aug 8, 2026
79 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14612-to-core-1.49 branch August 8, 2026 00:46
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:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants