Skip to content

[backport core/1.49] feat(first-run-tour): run the tour from a picked template - #14637

Merged
comfy-pr-bot merged 2 commits into
core/1.49from
backport-14143-to-core-1.49
Aug 4, 2026
Merged

[backport core/1.49] feat(first-run-tour): run the tour from a picked template#14637
comfy-pr-bot merged 2 commits into
core/1.49from
backport-14143-to-core-1.49

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14143 to core/1.49

Automatically created by backport workflow.

> **Stack — 4 of 6.** Rebuilt from scratch after the review on #13725,
split into short PRs.
> Based on #13290 (coachmark engine); each PR stacks on the one before
it.
>
> 1. #14140 — engine: canvas targets for the coachmark tour
> 2. #14141 — Getting Started screen + entry gating
> 3. #14142 — role pins + live drift guard
> 4. #14143 — the tour itself + e2e walk  ← this PR
> 5. #14144 — post-tour nudge
> 6. #14145 — unpinned workflows (share / template links)

## Summary

The tour a new user actually walks: upload, prompt, run, result. Steps
come from the resolved roles, targets are canvas nodes registered with
the engine, and the engine renders and advances them. The parallel
overlay stack from the previous attempt is conspicuously absent.

## Changes

- `TOURS.firstRun` builds real `CoachStep`s with `coachId`s and
registered canvas targets, so the engine's spotlight, positioning, copy
resolution and telemetry all apply.
- Camera framing is a glide then a fit against a known duration. No
settle detection, no watchdog — `animateToBounds` is wall-clock, so the
end time is already known. Reduced motion frames instantly rather than
skipping.
- The Run step gates on the paywall, consuming the click so the
underlying handler never queues a refused run.
- Run outcomes are matched to the tour's own workflow through the
execution store, so a job queued elsewhere can't speak for the tour.
- The tour turns Nodes 2.0 on when it starts: every step names a
`[data-node-id]`, and a new user has no `Comfy.InstalledVersion`, so the
versioned default never applies and the setting reads off. If no tour
then starts, the switch is undone.
- A Playwright walk: fresh profile → Getting Started → pick a template →
steps → Run → result.

### From the review round (`c504c6a`, `48358e6`)

- A rejecting tour resolver used to escape `begin()` and leave the
engine stuck at `resolving`, refusing every later start. It now resolves
to no steps.
- `beginTour` consulted the engine only after persisting the renderer
switch, mutating the tour registry and waiting out the preview. It bails
first, and undoes only a switch it made itself.
- The Run-button interceptor keyed on `step.name === 'run'`, so renaming
a translation key changed control flow. It reads `selfAdvancing`.
- A registered tour can now carry the condition it runs under, so the
first-run tour is torn down when the layout its coachmarks need goes
away — same path as a trigger's, without the seen flag.
- The Result step's spinner is gone. Its predicate was the same
expression as the copy beside it, and it kept spinning when a run ended
without a recorded status.

## Review focus

No feature-layer RAF, no second overlay, no second i18n namespace, no
inline telemetry — the engine owns all of it. Worth knowing: onboarding
is one-shot by design. A run that fails still ends the tour; the user
sees a "didn't finish" card and moves on.

---------

Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: AustinMroz <austin@comfy.org>
Co-authored-by: bymyself <cbyrne@comfy.org>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 4, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 4, 2026 00:56
@dosubot dosubot Bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Aug 4, 2026
@dosubot

dosubot Bot commented Aug 4, 2026

Copy link
Copy Markdown

📄 Knowledge review

Dosu skipped reviewing this PR because your organization has used its 200 included credits for the month. Your usage will reset on 2026-09-01. To have Dosu review this PR before then, ask your organization admin to upgrade to a pro account.


Leave Feedback Ask Dosu about ComfyUI_frontend Add Dosu to your team

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/04/2026, 03:48:11 AM UTC

Links

🎭 Playwright: ✅ 1787 passed, 0 failed

📊 Browser Reports
  • chromium: View Report (✅ 1766 / ❌ 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 · 69.8 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 47.4 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.4 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.8 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.8 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.9 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.9 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.5 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 82ms TBT · 94.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 74.5 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.9 MB heap
vue-large-graph-pan: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 52ms TBT · 168.9 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.2 MB heap

⚠️ 1 regression detected

Show regressions
Metric Baseline PR (median) Δ Sig
workflow-execution: event listeners 67 98 +46% ⚠️ 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 7ms -22% z=-4.5
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 8 11 +31% z=-1.2
canvas-idle: task duration 644ms 368ms -43% z=-0.8
canvas-idle: script duration 28ms 13ms -53% z=-5.4
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 69.6 MB 69.8 MB +0%
canvas-idle: DOM nodes 16 21 +31% z=-1.2
canvas-idle: event listeners 6 6 +0% z=-1.2
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=0.2
canvas-mouse-sweep: p95 frame time 17ms 17ms -0%
canvas-mouse-sweep: layout duration 4ms 3ms -14% z=-1.6
canvas-mouse-sweep: style recalc duration 47ms 32ms -32% z=-3.4
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 76 72 -5% z=-2.8
canvas-mouse-sweep: task duration 1093ms 764ms -30% z=-1.7
canvas-mouse-sweep: script duration 147ms 99ms -32% z=-5.6
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 57.5 MB 47.4 MB -18%
canvas-mouse-sweep: DOM nodes -114 -281 +148% z=-132.7
canvas-mouse-sweep: event listeners -72 -151 +110% z=-38.3
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=-0.3
canvas-zoom-sweep: p95 frame time 17ms 17ms +0%
canvas-zoom-sweep: layout duration 1ms 1ms -12% z=-0.9
canvas-zoom-sweep: style recalc duration 20ms 14ms -30% z=-3.4
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 32 31 -3% z=-1.7
canvas-zoom-sweep: task duration 489ms 295ms -40% z=-1.4
canvas-zoom-sweep: script duration 29ms 15ms -48% z=-4.0
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 72.5 MB 72.4 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 8ms 7ms -17% z=-4.1
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 12 +10% z=-3.2
dom-widget-clipping: task duration 428ms 299ms -30% z=-4.0
dom-widget-clipping: script duration 66ms 46ms -30% z=-6.7
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.5 MB 53.1 MB -1%
dom-widget-clipping: DOM nodes 17 19 +12% z=-2.2
dom-widget-clipping: event listeners 2 2 +0% variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=0.2
large-graph-idle: p95 frame time 17ms 17ms +0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 10ms 5ms -48% z=-6.5
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 8 9 +6% z=-9.9
large-graph-idle: task duration 913ms 524ms -43% z=-0.3
large-graph-idle: script duration 139ms 72ms -48% z=-2.9
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 64.5 MB 63.8 MB -1%
large-graph-idle: DOM nodes -281 -283 +1% z=-339.9
large-graph-idle: event listeners -144 -149 +3% z=-28.7
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 15ms 14ms -11% z=-4.5
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 69 -1% z=-1.7
large-graph-pan: task duration 1535ms 981ms -36% z=-2.3
large-graph-pan: script duration 530ms 324ms -39% z=-4.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 66.0 MB 71.8 MB +9%
large-graph-pan: DOM nodes -284 -284 +0% z=-183.7
large-graph-pan: event listeners -144 -163 +13% z=-202.8
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 8ms 7ms -12%
large-graph-zoom: style recalc duration 15ms 13ms -10%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 64 66 +3%
large-graph-zoom: task duration 1764ms 1209ms -31%
large-graph-zoom: script duration 624ms 419ms -33%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 74.8 MB 52.9 MB -29%
large-graph-zoom: DOM nodes -289 -289 +0%
large-graph-zoom: event listeners -146 -153 +5%
minimap-idle: avg frame time 17ms 17ms +0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms +0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 8ms 6ms -22% z=-4.5
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 7 9 +21% z=-1.6
minimap-idle: task duration 880ms 523ms -41% z=-0.1
minimap-idle: script duration 133ms 72ms -46% z=-2.6
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 64.4 MB 64.9 MB +1%
minimap-idle: DOM nodes -283 -283 +0% z=-220.9
minimap-idle: event listeners -145 -148 +2% z=-231.1
subgraph-dom-widget-clipping: avg frame time 17ms 17ms -0% z=-0.4
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 11ms 9ms -18% z=-3.6
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 448ms 324ms -28% z=-2.9
subgraph-dom-widget-clipping: script duration 128ms 96ms -25% z=-5.1
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 54.7 MB 53.5 MB -2%
subgraph-dom-widget-clipping: DOM nodes 18 21 +17% z=-1.1
subgraph-dom-widget-clipping: event listeners 8 8 +0% z=-1.4
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 8ms 7ms -11% z=-4.0
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 8 11 +31% z=-0.6
subgraph-idle: task duration 623ms 361ms -42% z=-0.3
subgraph-idle: script duration 25ms 11ms -56% z=-3.5
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 69.6 MB 69.5 MB -0%
subgraph-idle: DOM nodes 16 21 +31% z=-0.5
subgraph-idle: event listeners 4 6 +50% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.8
subgraph-mouse-sweep: p95 frame time 17ms 17ms +1%
subgraph-mouse-sweep: layout duration 4ms 4ms -19% z=-3.6
subgraph-mouse-sweep: style recalc duration 41ms 29ms -28% z=-3.9
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 76 +1% z=-2.1
subgraph-mouse-sweep: task duration 913ms 625ms -32% z=-2.0
subgraph-mouse-sweep: script duration 103ms 73ms -29% z=-4.2
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 53.2 MB 60.5 MB +14%
subgraph-mouse-sweep: DOM nodes -107 65 -160% z=-1.1
subgraph-mouse-sweep: event listeners -71 5 -107% 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 9ms -33%
subgraph-transition-enter: style recalc duration 33ms 23ms -29%
subgraph-transition-enter: layout count 13 15 +15%
subgraph-transition-enter: style recalc count 17 19 +12%
subgraph-transition-enter: task duration 1096ms 704ms -36%
subgraph-transition-enter: script duration 44ms 20ms -54%
subgraph-transition-enter: TBT 146ms 82ms -44%
subgraph-transition-enter: heap used 96.0 MB 94.4 MB -2%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2369 2369 +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 40ms 36ms -8%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 249 249 -0%
viewport-pan-sweep: task duration 5388ms 3408ms -37%
viewport-pan-sweep: script duration 1670ms 1045ms -37%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 73.1 MB 74.5 MB +2%
viewport-pan-sweep: DOM nodes -284 -284 +0%
viewport-pan-sweep: event listeners -126 -147 +17%
vue-large-graph-idle: avg frame time 18ms 18ms -2%
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 18234ms 14258ms -22%
vue-large-graph-idle: script duration 624ms 421ms -33%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 155.6 MB 159.9 MB +3%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16388 -16391 +0%
vue-large-graph-pan: avg frame time 19ms 17ms -7%
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 24ms 14ms -43%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 166 115 -31%
vue-large-graph-pan: task duration 22435ms 16945ms -24%
vue-large-graph-pan: script duration 1005ms 680ms -32%
vue-large-graph-pan: TBT 681ms 52ms -92%
vue-large-graph-pan: heap used 152.1 MB 168.9 MB +11%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16380 -16386 +0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 2ms 1ms -46% z=-4.9
workflow-execution: style recalc duration 26ms 18ms -29% z=-2.6
workflow-execution: layout count 4 3 -14% z=-3.6
workflow-execution: style recalc count 19 16 -16% z=-0.9
workflow-execution: task duration 144ms 103ms -28% z=-1.8
workflow-execution: script duration 14ms 8ms -43% z=-7.0
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 48.9 MB 49.2 MB +0%
workflow-execution: DOM nodes 149 132 -11% z=-4.1
workflow-execution: event listeners 67 98 +46% ⚠️ 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-04T03:57:16.583Z",
  "gitSha": "da9b95afcaa429c40597d517190a5205e9c6de79",
  "branch": "backport-14143-to-core-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2037.2679999999832,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.370000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 380.73,
      "heapDeltaBytes": 5156364,
      "heapUsedBytes": 73179756,
      "domNodes": 20,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 14.663,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2013.7920000000236,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.325,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 356.128,
      "heapDeltaBytes": 5083428,
      "heapUsedBytes": 73284560,
      "domNodes": 22,
      "jsHeapTotalBytes": 20041728,
      "scriptDurationMs": 11.944999999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1825.0620000000026,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 34.182,
      "layouts": 12,
      "layoutDurationMs": 3.2180000000000004,
      "taskDurationMs": 832.2420000000001,
      "heapDeltaBytes": -18260088,
      "heapUsedBytes": 49675400,
      "domNodes": -280,
      "jsHeapTotalBytes": 21479424,
      "scriptDurationMs": 104.467,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1708.9749999999526,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 29.751000000000005,
      "layouts": 12,
      "layoutDurationMs": 3.382,
      "taskDurationMs": 696.5160000000001,
      "heapDeltaBytes": -18463828,
      "heapUsedBytes": 49676792,
      "domNodes": -282,
      "jsHeapTotalBytes": 20430848,
      "scriptDurationMs": 93.66799999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1705.885999999964,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 14.135,
      "layouts": 6,
      "layoutDurationMs": 0.629,
      "taskDurationMs": 292.76599999999996,
      "heapDeltaBytes": 7786312,
      "heapUsedBytes": 75877564,
      "domNodes": 77,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 15.202000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1707.0589999999584,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 13.708,
      "layouts": 6,
      "layoutDurationMs": 0.5720000000000002,
      "taskDurationMs": 296.80899999999997,
      "heapDeltaBytes": 7858672,
      "heapUsedBytes": 75955640,
      "domNodes": 78,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 15.115,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 524.6650000000272,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 6.361999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 303.146,
      "heapDeltaBytes": -12447784,
      "heapUsedBytes": 55834680,
      "domNodes": 18,
      "jsHeapTotalBytes": 21614592,
      "scriptDurationMs": 47.227,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 512.7930000000447,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 6.939000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 295.238,
      "heapDeltaBytes": -12604088,
      "heapUsedBytes": 55488700,
      "domNodes": 20,
      "jsHeapTotalBytes": 21614592,
      "scriptDurationMs": 45.18,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2028.6419999999907,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.126999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 527.824,
      "heapDeltaBytes": 8498440,
      "heapUsedBytes": 67174888,
      "domNodes": -282,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 73.416,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2015.641999999957,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 4.732,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 520.531,
      "heapDeltaBytes": 4749192,
      "heapUsedBytes": 66520416,
      "domNodes": -283,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 70.33399999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2077.3320000000126,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 12.730000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 977.3309999999999,
      "heapDeltaBytes": 4709600,
      "heapUsedBytes": 65019380,
      "domNodes": -285,
      "jsHeapTotalBytes": 4739072,
      "scriptDurationMs": 323.09,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2136.08899999997,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 14.678000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 985.4079999999999,
      "heapDeltaBytes": 25896824,
      "heapUsedBytes": 85540596,
      "domNodes": -283,
      "jsHeapTotalBytes": 5787648,
      "scriptDurationMs": 324.535,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3107.30099999995,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 13.736999999999998,
      "layouts": 60,
      "layoutDurationMs": 7.046,
      "taskDurationMs": 1214.5410000000002,
      "heapDeltaBytes": -7448936,
      "heapUsedBytes": 54381396,
      "domNodes": -289,
      "jsHeapTotalBytes": 7135232,
      "scriptDurationMs": 422.619,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3122.6009999999746,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 13.077000000000002,
      "layouts": 60,
      "layoutDurationMs": 6.925,
      "taskDurationMs": 1203.402,
      "heapDeltaBytes": -5014536,
      "heapUsedBytes": 56576140,
      "domNodes": -288,
      "jsHeapTotalBytes": 7659520,
      "scriptDurationMs": 416.236,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2013.1129999999757,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 4.849999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 525.474,
      "heapDeltaBytes": 7687896,
      "heapUsedBytes": 68080940,
      "domNodes": -285,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 72.687,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2001.4529999999695,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.862000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 520.761,
      "heapDeltaBytes": 7688992,
      "heapUsedBytes": 68055820,
      "domNodes": -281,
      "jsHeapTotalBytes": 5038080,
      "scriptDurationMs": 71.79299999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 504.71899999996594,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 9.573,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 312.31,
      "heapDeltaBytes": -12302608,
      "heapUsedBytes": 55871020,
      "domNodes": 22,
      "jsHeapTotalBytes": 22925312,
      "scriptDurationMs": 93.265,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 535.8580000000757,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 9.120999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 335.57200000000006,
      "heapDeltaBytes": -11963892,
      "heapUsedBytes": 56239740,
      "domNodes": 20,
      "jsHeapTotalBytes": 22138880,
      "scriptDurationMs": 98.08600000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2003.409999999974,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.840999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 368.74899999999997,
      "heapDeltaBytes": 4541328,
      "heapUsedBytes": 72734104,
      "domNodes": 22,
      "jsHeapTotalBytes": 20303872,
      "scriptDurationMs": 11.226999999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1997.9089999999928,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.792,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 354.11,
      "heapDeltaBytes": 4842780,
      "heapUsedBytes": 73016164,
      "domNodes": 20,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 10.498999999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1705.502000000024,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 26.837999999999997,
      "layouts": 16,
      "layoutDurationMs": 3.136,
      "taskDurationMs": 622.846,
      "heapDeltaBytes": -4793636,
      "heapUsedBytes": 63445708,
      "domNodes": 63,
      "jsHeapTotalBytes": 21876736,
      "scriptDurationMs": 70.769,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1726.03399999997,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 32.111000000000004,
      "layouts": 16,
      "layoutDurationMs": 3.9430000000000005,
      "taskDurationMs": 626.4380000000001,
      "heapDeltaBytes": -4764112,
      "heapUsedBytes": 63517356,
      "domNodes": 66,
      "jsHeapTotalBytes": 20566016,
      "scriptDurationMs": 75.319,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 900.3060000000005,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 23.362000000000002,
      "layouts": 15,
      "layoutDurationMs": 9.078000000000001,
      "taskDurationMs": 704.1310000000001,
      "heapDeltaBytes": 30903796,
      "heapUsedBytes": 98988544,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15728640,
      "scriptDurationMs": 20.214000000000002,
      "eventListeners": 2369,
      "totalBlockingTimeMs": 82,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8111.304000000018,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 35.75300000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3419.061,
      "heapDeltaBytes": 28034340,
      "heapUsedBytes": 87777072,
      "domNodes": -284,
      "jsHeapTotalBytes": 6311936,
      "scriptDurationMs": 1044.817,
      "eventListeners": -163,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8095.236,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 37.188,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3397.177,
      "heapDeltaBytes": 9697292,
      "heapUsedBytes": 68368764,
      "domNodes": -283,
      "jsHeapTotalBytes": 6836224,
      "scriptDurationMs": 1045.389,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.660000000000036,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 14264.139,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14255.644999999997,
      "heapDeltaBytes": -41464516,
      "heapUsedBytes": 167498424,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10424320,
      "scriptDurationMs": 414.86699999999996,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 14272.905000000037,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14260.220999999998,
      "heapDeltaBytes": -42689768,
      "heapUsedBytes": 167845960,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11214848,
      "scriptDurationMs": 426.36000000000007,
      "eventListeners": -16393,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16855.624000000033,
      "styleRecalcs": 114,
      "styleRecalcDurationMs": 13.47100000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16836.943,
      "heapDeltaBytes": -39764680,
      "heapUsedBytes": 177240584,
      "domNodes": -8312,
      "jsHeapTotalBytes": -17051648,
      "scriptDurationMs": 653.685,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 10,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 17073.576,
      "styleRecalcs": 115,
      "styleRecalcDurationMs": 14.124999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17053.354,
      "heapDeltaBytes": -49857100,
      "heapUsedBytes": 177025572,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9183232,
      "scriptDurationMs": 705.549,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 94,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "workflow-execution",
      "durationMs": 430.2240000000097,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 20.497,
      "layouts": 4,
      "layoutDurationMs": 1.252,
      "taskDurationMs": 111.38300000000001,
      "heapDeltaBytes": -15438724,
      "heapUsedBytes": 51819684,
      "domNodes": 136,
      "jsHeapTotalBytes": 7458816,
      "scriptDurationMs": 8.443,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 441.983999999934,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 16.38,
      "layouts": 2,
      "layoutDurationMs": 0.42899999999999994,
      "taskDurationMs": 94.582,
      "heapDeltaBytes": -15829332,
      "heapUsedBytes": 51277924,
      "domNodes": 127,
      "jsHeapTotalBytes": 7983104,
      "scriptDurationMs": 8.104,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.669999999999998,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 99.27007% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/platform/onboarding/TourSpotlight.vue 95.83% 1 Missing ⚠️
.../renderer/extensions/firstRunTour/FirstRunTour.vue 0.00% 1 Missing ⚠️
@@              Coverage Diff              @@
##           core/1.49   #14637      +/-   ##
=============================================
+ Coverage      78.47%   78.52%   +0.05%     
=============================================
  Files           1781     1784       +3     
  Lines         103859   104084     +225     
  Branches       31868    31926      +58     
=============================================
+ Hits           81502    81734     +232     
+ Misses         21926    21919       -7     
  Partials         431      431              
Flag Coverage Δ
unit 70.60% <99.27%> (+0.08%) ⬆️

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

Files with missing lines Coverage Δ
src/components/actionbar/ComfyActionbar.vue 82.22% <100.00%> (ø)
src/platform/onboarding/coachmarkLayout.ts 95.34% <100.00%> (+0.22%) ⬆️
src/platform/onboarding/onboardingTourStore.ts 98.26% <100.00%> (+3.02%) ⬆️
src/platform/onboarding/onboardingTours.ts 96.15% <100.00%> (+3.84%) ⬆️
src/platform/onboarding/tourState.ts 100.00% <100.00%> (ø)
src/platform/onboarding/useCoachmarkTarget.ts 96.34% <100.00%> (-0.09%) ⬇️
src/platform/telemetry/types.ts 100.00% <ø> (ø)
...rstRunTour/gettingStarted/GettingStartedScreen.vue 84.72% <100.00%> (+0.89%) ⬆️
...erer/extensions/firstRunTour/tour/cameraFraming.ts 100.00% <100.00%> (ø)
...nsions/firstRunTour/tour/firstRunTourDefinition.ts 100.00% <100.00%> (ø)
... and 3 more
🚀 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.

@christian-byrne christian-byrne left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approving — clean backport of #14143, which I reviewed and approved on main.

This PR was failing 8 checks earlier (setup, and lint/scan/fonts/perf cascading from it). That was not a defect in the backport. The auto-backport bot cherry-picks each PR onto the release branch independently, so this branch carried #14143's code with none of #14142's underneath it — it merged textually and then could not build. Now that #14634/#14635 have landed, I merged the release branch in and CI is green: 49 success, 8 skipped, zero failures.

Same story applies to the #14144 and #14145 backports, whose auto-attempts failed for exactly this reason. I'll re-trigger those once this pair lands.

For confidence rather than hope: a dry run cherry-picking all four onto core/1.49 and cloud/1.49 in stack order produced zero conflicts, the resulting tour code matches main byte-for-byte, and the locale merge loses no keys while correctly not dragging in main-only strings from unrelated PRs.

@comfy-pr-bot
comfy-pr-bot merged commit a333eb5 into core/1.49 Aug 4, 2026
57 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14143-to-core-1.49 branch August 4, 2026 04:35
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:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants