Skip to content

[backport cloud/1.49] feat(first-run-tour): resolve tour roles from pinned nodes - #14635

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

[backport cloud/1.49] feat(first-run-tour): resolve tour roles from pinned nodes#14635
comfy-pr-bot merged 1 commit into
cloud/1.49from
backport-14142-to-cloud-1.49

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14142 to cloud/1.49

Automatically created by backport workflow.

> **Stack — 3 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  ← this PR
> 4. #14143 — the tour itself + e2e walk
> 5. #14144 — post-tour nudge
> 6. #14145 — unpinned workflows (share / template links)

## Summary

Given a loaded graph, which nodes does the tour point at? For the eight
templates the Getting Started grid can show, the answer is pinned by
hand — three node ids each. The previous attempt inferred this with a
544-line resolver that parsed serialized JSON; this is 161 lines that
read the live graph.

## Changes

- `TOUR_ROLE_PINS` maps each supported template to its source / prompt /
sink. The type is exhaustive over both grid id lists, so a card without
pins is a compile error.
- Pins carry the node type alongside the id, and resolution checks both
— a renumbered template degrades to null instead of spotlighting the
wrong node.
- All three roles host-map through the same path, so a pin inside a
subgraph resolves to the root node that hosts it.
- A Playwright guard fetches every pinned template from the backend and
asserts each pinned node still exists with its expected type.

## Review focus

No vendored fixtures. The old PR carried 12,723 lines of copied template
JSON; the drift guard replaces it by checking against what the backend
actually serves, so an upstream rename fails CI instead of silently
mis-targeting a spotlight.

---------

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>
@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:17
@dosubot dosubot Bot added the size:L This PR changes 100-499 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

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

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

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/04/2026, 12:19:29 AM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.6 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.4 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.3 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.2 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.8 MB heap
large-graph-pan: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.8 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.6 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.4 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 · 56.9 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.6 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 122ms TBT · 69.9 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.2 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.5 MB heap
vue-large-graph-pan: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 461ms TBT · 169.2 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 48.8 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 8ms
canvas-idle: layout count 0
canvas-idle: style recalc count 10
canvas-idle: task duration 515ms
canvas-idle: script duration 20ms
canvas-idle: TBT 0ms
canvas-idle: heap used 69.6 MB
canvas-idle: DOM nodes 19
canvas-idle: event listeners 4
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 5ms
canvas-mouse-sweep: style recalc duration 41ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 77
canvas-mouse-sweep: task duration 929ms
canvas-mouse-sweep: script duration 121ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 45.4 MB
canvas-mouse-sweep: DOM nodes -125
canvas-mouse-sweep: event listeners -147
canvas-zoom-sweep: avg frame time 17ms
canvas-zoom-sweep: p95 frame time 17ms
canvas-zoom-sweep: layout duration 1ms
canvas-zoom-sweep: style recalc duration 17ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 382ms
canvas-zoom-sweep: script duration 19ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 72.3 MB
canvas-zoom-sweep: DOM nodes 78
canvas-zoom-sweep: event listeners 19
dom-widget-clipping: avg frame time 17ms
dom-widget-clipping: p95 frame time 17ms
dom-widget-clipping: layout duration 0ms
dom-widget-clipping: style recalc duration 7ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 368ms
dom-widget-clipping: script duration 55ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 53.2 MB
dom-widget-clipping: DOM nodes 17
dom-widget-clipping: event listeners 0
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 6ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 8
large-graph-idle: task duration 668ms
large-graph-idle: script duration 92ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 64.8 MB
large-graph-idle: DOM nodes -283
large-graph-idle: event listeners -142
large-graph-pan: avg frame time 17ms
large-graph-pan: p95 frame time 17ms
large-graph-pan: layout duration 0ms
large-graph-pan: style recalc duration 15ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 69
large-graph-pan: task duration 1215ms
large-graph-pan: script duration 395ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 62.8 MB
large-graph-pan: DOM nodes -283
large-graph-pan: event listeners -143
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 8ms
large-graph-zoom: style recalc duration 15ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 65
large-graph-zoom: task duration 1465ms
large-graph-zoom: script duration 508ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 56.6 MB
large-graph-zoom: DOM nodes -286
large-graph-zoom: event listeners -148
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 6ms
minimap-idle: layout count 0
minimap-idle: style recalc count 8
minimap-idle: task duration 662ms
minimap-idle: script duration 92ms
minimap-idle: TBT 0ms
minimap-idle: heap used 65.4 MB
minimap-idle: DOM nodes -283
minimap-idle: event listeners -143
subgraph-dom-widget-clipping: avg frame time 17ms
subgraph-dom-widget-clipping: p95 frame time 17ms
subgraph-dom-widget-clipping: layout duration 0ms
subgraph-dom-widget-clipping: style recalc duration 10ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 394ms
subgraph-dom-widget-clipping: script duration 120ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 54.6 MB
subgraph-dom-widget-clipping: DOM nodes 19
subgraph-dom-widget-clipping: event listeners 7
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 8ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 11
subgraph-idle: task duration 476ms
subgraph-idle: script duration 13ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 56.9 MB
subgraph-idle: DOM nodes -128
subgraph-idle: event listeners -72
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 4ms
subgraph-mouse-sweep: style recalc duration 35ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 76
subgraph-mouse-sweep: task duration 758ms
subgraph-mouse-sweep: script duration 93ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 60.6 MB
subgraph-mouse-sweep: DOM nodes 64
subgraph-mouse-sweep: event listeners 4
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 11ms
subgraph-transition-enter: style recalc duration 29ms
subgraph-transition-enter: layout count 14
subgraph-transition-enter: style recalc count 18
subgraph-transition-enter: task duration 907ms
subgraph-transition-enter: script duration 31ms
subgraph-transition-enter: TBT 122ms
subgraph-transition-enter: heap used 69.9 MB
subgraph-transition-enter: DOM nodes 13673
subgraph-transition-enter: event listeners 2371
viewport-pan-sweep: avg frame time 17ms
viewport-pan-sweep: p95 frame time 17ms
viewport-pan-sweep: layout duration 0ms
viewport-pan-sweep: style recalc duration 40ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 250
viewport-pan-sweep: task duration 4262ms
viewport-pan-sweep: script duration 1276ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 66.2 MB
viewport-pan-sweep: DOM nodes -282
viewport-pan-sweep: event listeners -128
vue-large-graph-idle: avg frame time 18ms
vue-large-graph-idle: p95 frame time 17ms
vue-large-graph-idle: layout duration 0ms
vue-large-graph-idle: style recalc duration 0ms
vue-large-graph-idle: layout count 0
vue-large-graph-idle: style recalc count 0
vue-large-graph-idle: task duration 17443ms
vue-large-graph-idle: script duration 571ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 159.5 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16388
vue-large-graph-pan: avg frame time 18ms
vue-large-graph-pan: p95 frame time 17ms
vue-large-graph-pan: layout duration 0ms
vue-large-graph-pan: style recalc duration 18ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 145
vue-large-graph-pan: task duration 21489ms
vue-large-graph-pan: script duration 863ms
vue-large-graph-pan: TBT 461ms
vue-large-graph-pan: heap used 169.2 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16384
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 20ms
workflow-execution: layout count 3
workflow-execution: style recalc count 14
workflow-execution: task duration 115ms
workflow-execution: script duration 10ms
workflow-execution: TBT 0ms
workflow-execution: heap used 48.8 MB
workflow-execution: DOM nodes 126
workflow-execution: event listeners 66
Raw data
{
  "timestamp": "2026-08-04T00:29:47.322Z",
  "gitSha": "5aec7bd330dcd6797624b4c5e09789b3dd8ae608",
  "branch": "backport-14142-to-cloud-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2080.2610000000072,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.322,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 556.466,
      "heapDeltaBytes": 5085992,
      "heapUsedBytes": 72823864,
      "domNodes": 18,
      "jsHeapTotalBytes": 20307968,
      "scriptDurationMs": 22.652999999999995,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2073.7179999999853,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.279,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 473.161,
      "heapDeltaBytes": 5195808,
      "heapUsedBytes": 73171868,
      "domNodes": 20,
      "jsHeapTotalBytes": 20045824,
      "scriptDurationMs": 16.431,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1974.5530000000144,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 45.227000000000004,
      "layouts": 12,
      "layoutDurationMs": 5.694999999999999,
      "taskDurationMs": 976.6350000000001,
      "heapDeltaBytes": -21200180,
      "heapUsedBytes": 46756068,
      "domNodes": 30,
      "jsHeapTotalBytes": 21483520,
      "scriptDurationMs": 124.276,
      "eventListeners": -146,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1897.5469999999746,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 36.318000000000005,
      "layouts": 12,
      "layoutDurationMs": 3.636,
      "taskDurationMs": 880.562,
      "heapDeltaBytes": -19418668,
      "heapUsedBytes": 48393172,
      "domNodes": -279,
      "jsHeapTotalBytes": 20697088,
      "scriptDurationMs": 116.87100000000002,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1757.2959999999966,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.822000000000003,
      "layouts": 6,
      "layoutDurationMs": 0.7690000000000001,
      "taskDurationMs": 383.463,
      "heapDeltaBytes": 7871152,
      "heapUsedBytes": 75842612,
      "domNodes": 79,
      "jsHeapTotalBytes": 20570112,
      "scriptDurationMs": 19.014999999999997,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1764.440000000036,
      "styleRecalcs": 29,
      "styleRecalcDurationMs": 15.866999999999999,
      "layouts": 6,
      "layoutDurationMs": 0.6680000000000001,
      "taskDurationMs": 380.90900000000005,
      "heapDeltaBytes": 7894492,
      "heapUsedBytes": 75854660,
      "domNodes": 76,
      "jsHeapTotalBytes": 20307968,
      "scriptDurationMs": 18.598,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 586.9890000000169,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 5.912000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 366.17100000000005,
      "heapDeltaBytes": -12206212,
      "heapUsedBytes": 55912968,
      "domNodes": 14,
      "jsHeapTotalBytes": 22142976,
      "scriptDurationMs": 54.90200000000001,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.669999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 577.6520000000005,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.814999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 370.59799999999996,
      "heapDeltaBytes": -12183464,
      "heapUsedBytes": 55759740,
      "domNodes": 20,
      "jsHeapTotalBytes": 21356544,
      "scriptDurationMs": 55.443999999999996,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2032.623000000001,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 5.911,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 656.3460000000001,
      "heapDeltaBytes": 8346556,
      "heapUsedBytes": 68348116,
      "domNodes": -284,
      "jsHeapTotalBytes": 4513792,
      "scriptDurationMs": 88.68799999999999,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2027.8190000000222,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.388000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 680.385,
      "heapDeltaBytes": 8285488,
      "heapUsedBytes": 67532108,
      "domNodes": -281,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 94.476,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2159.6959999999967,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.796,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1206.1680000000001,
      "heapDeltaBytes": 6283300,
      "heapUsedBytes": 66142280,
      "domNodes": -282,
      "jsHeapTotalBytes": 5001216,
      "scriptDurationMs": 391.8469999999999,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2202.481999999918,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.396000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1223.57,
      "heapDeltaBytes": 5896672,
      "heapUsedBytes": 65662520,
      "domNodes": -283,
      "jsHeapTotalBytes": 5525504,
      "scriptDurationMs": 398.868,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3129.871000000037,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 15.294000000000002,
      "layouts": 60,
      "layoutDurationMs": 7.726999999999999,
      "taskDurationMs": 1451.457,
      "heapDeltaBytes": -5524952,
      "heapUsedBytes": 55912188,
      "domNodes": -286,
      "jsHeapTotalBytes": 7659520,
      "scriptDurationMs": 500.2490000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3226.3320000000704,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.494,
      "layouts": 60,
      "layoutDurationMs": 7.608,
      "taskDurationMs": 1478.1149999999998,
      "heapDeltaBytes": 1506580,
      "heapUsedBytes": 62825128,
      "domNodes": -286,
      "jsHeapTotalBytes": 6610944,
      "scriptDurationMs": 515.4029999999999,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2041.3930000000278,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.635999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 662.4870000000001,
      "heapDeltaBytes": 8414540,
      "heapUsedBytes": 68769736,
      "domNodes": -282,
      "jsHeapTotalBytes": 4513792,
      "scriptDurationMs": 92.25800000000001,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2028.5350000000335,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.295000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 661.998,
      "heapDeltaBytes": 7611764,
      "heapUsedBytes": 68448272,
      "domNodes": -283,
      "jsHeapTotalBytes": 3989504,
      "scriptDurationMs": 91.13700000000001,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 583.1410000000119,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 9.957999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 388.981,
      "heapDeltaBytes": -10956520,
      "heapUsedBytes": 57185860,
      "domNodes": 20,
      "jsHeapTotalBytes": 21880832,
      "scriptDurationMs": 118.146,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 589.6819999999252,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.887000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 399.94399999999996,
      "heapDeltaBytes": -10966668,
      "heapUsedBytes": 57222028,
      "domNodes": 18,
      "jsHeapTotalBytes": 21618688,
      "scriptDurationMs": 121.625,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2007.682999999986,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.126000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 461.927,
      "heapDeltaBytes": 4915272,
      "heapUsedBytes": 72749936,
      "domNodes": 22,
      "jsHeapTotalBytes": 20570112,
      "scriptDurationMs": 13.809999999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2020.9209999999302,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.465999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 490.743,
      "heapDeltaBytes": -21328956,
      "heapUsedBytes": 46678824,
      "domNodes": -278,
      "jsHeapTotalBytes": 19910656,
      "scriptDurationMs": 12.895,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1775.4360000000133,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 35.07599999999999,
      "layouts": 16,
      "layoutDurationMs": 4.173000000000001,
      "taskDurationMs": 797.859,
      "heapDeltaBytes": -4597140,
      "heapUsedBytes": 63521016,
      "domNodes": 63,
      "jsHeapTotalBytes": 20832256,
      "scriptDurationMs": 104.31899999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1696.7540000000554,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 35.626,
      "layouts": 16,
      "layoutDurationMs": 3.835,
      "taskDurationMs": 718.0649999999999,
      "heapDeltaBytes": -4608440,
      "heapUsedBytes": 63497920,
      "domNodes": 65,
      "jsHeapTotalBytes": 20570112,
      "scriptDurationMs": 81.234,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1367.8199999999947,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 28.872000000000003,
      "layouts": 14,
      "layoutDurationMs": 11.110999999999999,
      "taskDurationMs": 906.7259999999997,
      "heapDeltaBytes": 3728152,
      "heapUsedBytes": 73343708,
      "domNodes": 13673,
      "jsHeapTotalBytes": 16777216,
      "scriptDurationMs": 30.635999999999996,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 122,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8234.796000000017,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 40.244,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4208.831,
      "heapDeltaBytes": 10598696,
      "heapUsedBytes": 69321152,
      "domNodes": -281,
      "jsHeapTotalBytes": 7622656,
      "scriptDurationMs": 1261.035,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8202.958999999964,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 40.440000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4316.046,
      "heapDeltaBytes": 10377864,
      "heapUsedBytes": 69589576,
      "domNodes": -283,
      "jsHeapTotalBytes": 6836224,
      "scriptDurationMs": 1291.22,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17544.062999999995,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17517.979,
      "heapDeltaBytes": -56894788,
      "heapUsedBytes": 167763720,
      "domNodes": -8312,
      "jsHeapTotalBytes": -6754304,
      "scriptDurationMs": 555.122,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17385.381000000052,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17367.522,
      "heapDeltaBytes": -44136100,
      "heapUsedBytes": 166634688,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9900032,
      "scriptDurationMs": 587.712,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 22053.778999999962,
      "styleRecalcs": 145,
      "styleRecalcDurationMs": 18.245999999999984,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 22007.74,
      "heapDeltaBytes": -49092624,
      "heapUsedBytes": 177171708,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10493952,
      "scriptDurationMs": 850.7479999999999,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 612,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21015.578000000005,
      "styleRecalcs": 144,
      "styleRecalcDurationMs": 17.759999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20969.583,
      "heapDeltaBytes": -29720696,
      "heapUsedBytes": 177606880,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11542528,
      "scriptDurationMs": 876.088,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 309,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 443.54699999996683,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 22.448000000000004,
      "layouts": 4,
      "layoutDurationMs": 1.515,
      "taskDurationMs": 121.202,
      "heapDeltaBytes": -15660504,
      "heapUsedBytes": 51404652,
      "domNodes": 132,
      "jsHeapTotalBytes": 7462912,
      "scriptDurationMs": 9.833,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 464.38100000000304,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 18.357,
      "layouts": 2,
      "layoutDurationMs": 0.44000000000000006,
      "taskDurationMs": 108.63700000000001,
      "heapDeltaBytes": -16058340,
      "heapUsedBytes": 51016284,
      "domNodes": 119,
      "jsHeapTotalBytes": 7725056,
      "scriptDurationMs": 10.805,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@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 — this is a clean cherry-pick of #14142, which I reviewed and approved on main.

Verified the backport itself rather than assuming: cherry-picking all four stack PRs onto core/1.49 and cloud/1.49 in stack order produces zero conflicts, and the resulting tour code matches main byte-for-byte. The locale merge adds 30 onboardingCoachmarks.firstRun.* keys, loses none, and correctly does not drag in main-only keys from unrelated PRs.

Worth knowing for the rest of this set: core/1.49 and cloud/1.49 are currently the same commit with zero commits not on main, so both take identical cherry-picks.

These must merge in stack order. #14637 (the #14143 backport) is currently failing 8 checks purely because its branch has none of this PR's files under it — setup fails, and lint/scan/fonts/perf cascade from that. Once this lands, #14637 needs its branch updated and its CI will be meaningful. Same story for #14144 and #14145, whose auto-backports failed for exactly this reason and should be re-triggered only after the ones below them land.

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