Skip to content

[backport core/1.48] fix(workspace): let ended subscriptions resubscribe to the same plan - #14610

Merged
wei-hai merged 1 commit into
core/1.48from
backport-14607-to-core-1.48
Aug 3, 2026
Merged

[backport core/1.48] fix(workspace): let ended subscriptions resubscribe to the same plan#14610
wei-hai merged 1 commit into
core/1.48from
backport-14607-to-core-1.48

Conversation

@wei-hai

@wei-hai wei-hai commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Manual backport of #14607 — the auto-backport workflow failed.

Cherry-pick of 10c56a1 applied cleanly; no changes beyond the original PR.

Why this is manual

The backport run (30839173649) hit a conflict on core/1.47 only. That failed the whole "Backport commits" step, which skipped "Create PR for each successful backport" for the targets that did apply cleanly, and the cleanup step then deleted their branches. Filed as a follow-up on the workflow.

Original fix

After a Stripe-side cancellation, access is revoked but Plans & Pricing still showed the lost plan as a disabled "Current Plan", so the user could not resubscribe to it. An ended subscription still reports its plan_slug and subscription_tier, and the pricing table only treated a cancel-scheduled plan as re-buyable. subscription_status: 'ended' now counts as holding no current plan.

Verification

Unit tests pass on this branch; CI covers the rest.

…14607)

After cancelling a subscription on Stripe's side, access is correctly
revoked, but Plans & Pricing still showed the lost plan as "Current
Plan" with a disabled button, so the user could not resubscribe to it.
The other tiers also mislabelled as "Change to X" instead of "Subscribe
to X".

## Root cause

An ended subscription still reports its `plan_slug` and
`subscription_tier` on `GET /api/billing/status` (only `is_active` flips
to false). The pricing table modelled just two states for the plan you
hold — active (disabled "Current Plan") and cancel-scheduled (enabled
"Resubscribe") — and `isCancelled` is derived from `subscription_status
=== 'canceled'` only, so an `ended` subscription fell into the active
bucket.

This is the residual half of #14504, which fixed the same `ended` blind
spot in the subscription panel but not here.

## Change

`UnifiedPricingTable.vue` treats `subscription_status: 'ended'` as
holding no current plan, so the CTA becomes an enabled "Subscribe to
<plan>". Applies to both the personal tier cards (`isCurrentPlan`,
`currentTierKey`) and the team credit stop (`isTeamSubscribed`).

Backend needs no change — the subscribe path already treats an ended
subscription as "no subscription".

## Verification

- Two regression tests added; both fail on `main` and pass with the fix.
- `UnifiedPricingTable` suite: 12 passed, incl. under `--coverage`
(matching CI).
- Workspace + billing + subscription suites: 84 files, 1339 tests
passed.
- `vue-tsc --noEmit`, eslint, oxfmt clean.
@wei-hai wei-hai added the backport Backporting a PR onto a release candidate label Aug 3, 2026
@dosubot dosubot Bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Aug 3, 2026
@coderabbitai

coderabbitai Bot commented Aug 3, 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: c7a1123a-ef40-4f49-84c3-094fde176073

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.

@dosubot

dosubot Bot commented Aug 3, 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 3, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/03/2026, 06:12:40 PM UTC

Links

🎭 Playwright: ✅ 1762 passed, 0 failed · 1 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1741 / ❌ 0 / ⚠️ 1 / ⏭️ 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 · 56.2 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.5 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.0 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.1 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.2 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.2 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.3 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.2 MB heap
subgraph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.7 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 114ms TBT · 97.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.1 MB heap
vue-large-graph-idle: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 161.6 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 46ms TBT · 148.0 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.7 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 496ms 495ms -0% ⚠️ z=3.2
canvas-mouse-sweep: layout duration 4ms 6ms +75% ⚠️ z=13.9
large-graph-idle: task duration 695ms 657ms -5% ⚠️ z=2.1
large-graph-pan: task duration 1273ms 1255ms -1% ⚠️ z=4.0
minimap-idle: task duration 698ms 657ms -6% ⚠️ z=2.7
subgraph-idle: task duration 500ms 460ms -8% ⚠️ z=2.9
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=0.4
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 8ms 7ms -6% z=-4.2
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 10 +11% z=-2.1
canvas-idle: task duration 496ms 495ms -0% ⚠️ z=3.2
canvas-idle: script duration 16ms 22ms +36% z=-1.4
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 55.7 MB 56.2 MB +1%
canvas-idle: DOM nodes 18 -126 -800% z=-116.5
canvas-idle: event listeners 4 -71 -1875% z=-17.4
canvas-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.9
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 6ms +75% ⚠️ z=13.9
canvas-mouse-sweep: style recalc duration 41ms 45ms +9% z=0.6
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 76 78 +3% z=-0.5
canvas-mouse-sweep: task duration 928ms 939ms +1% z=1.3
canvas-mouse-sweep: script duration 125ms 123ms -2% z=-1.9
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 49.1 MB 49.5 MB +1%
canvas-mouse-sweep: DOM nodes -275 -272 -1% z=-129.1
canvas-mouse-sweep: event listeners -148 -148 +0% z=-37.5
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 -6% z=-2.0
canvas-zoom-sweep: style recalc duration 17ms 15ms -12% z=-2.7
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 31 +0% z=-0.6
canvas-zoom-sweep: task duration 392ms 364ms -7% z=1.6
canvas-zoom-sweep: script duration 21ms 21ms -2% z=-2.2
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 71.8 MB 71.5 MB -0%
canvas-zoom-sweep: DOM nodes 78 77 -1% z=-2.8
canvas-zoom-sweep: event listeners 19 21 +11% z=-0.5
dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms +1%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 8ms 7ms -7% z=-3.6
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 12 +5% z=-3.2
dom-widget-clipping: task duration 367ms 359ms -2% z=-0.3
dom-widget-clipping: script duration 58ms 52ms -10% z=-5.0
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.2 MB 53.0 MB -0%
dom-widget-clipping: DOM nodes 18 19 +6% z=-2.2
dom-widget-clipping: event listeners 1 1 +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 8ms 7ms -13% z=-4.7
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 9 +0% z=-8.3
large-graph-idle: task duration 695ms 657ms -5% ⚠️ z=2.1
large-graph-idle: script duration 110ms 98ms -11% z=-0.4
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 61.5 MB 63.1 MB +3%
large-graph-idle: DOM nodes -276 -276 +0% z=-332.1
large-graph-idle: event listeners -143 -144 +1% z=-27.9
large-graph-pan: avg frame time 17ms 17ms +0% z=0.8
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 13ms 13ms +3% z=-4.8
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 68 69 +1% z=-0.9
large-graph-pan: task duration 1273ms 1255ms -1% ⚠️ z=4.0
large-graph-pan: script duration 433ms 403ms -7% z=-0.3
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 62.2 MB 56.2 MB -10%
large-graph-pan: DOM nodes -278 -277 -0% z=-179.1
large-graph-pan: event listeners -143 -143 +0% z=-178.6
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms -1%
large-graph-zoom: layout duration 7ms 7ms -2%
large-graph-zoom: style recalc duration 14ms 14ms +4%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 64 66 +2%
large-graph-zoom: task duration 1517ms 1434ms -5%
large-graph-zoom: script duration 532ms 479ms -10%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 57.0 MB 56.2 MB -1%
large-graph-zoom: DOM nodes -281 -279 -1%
large-graph-zoom: event listeners -148 -148 +0%
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 7ms -14% z=-3.5
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 9 +6% z=-1.6
minimap-idle: task duration 698ms 657ms -6% ⚠️ z=2.7
minimap-idle: script duration 115ms 93ms -19% z=-0.6
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 65.0 MB 64.3 MB -1%
minimap-idle: DOM nodes -276 -276 +0% z=-215.4
minimap-idle: event listeners -144 -144 +0% z=-225.0
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
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 -13% z=-3.8
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 47 -1% z=-2.5
subgraph-dom-widget-clipping: task duration 393ms 378ms -4% z=-0.0
subgraph-dom-widget-clipping: script duration 118ms 112ms -5% z=-2.5
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 53.4 MB 53.2 MB -0%
subgraph-dom-widget-clipping: DOM nodes 20 19 -5% z=-2.8
subgraph-dom-widget-clipping: event listeners 6 6 +0% z=-1.7
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 -15% z=-4.5
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 10 10 +5% z=-1.4
subgraph-idle: task duration 500ms 460ms -8% ⚠️ z=2.9
subgraph-idle: script duration 15ms 16ms +7% z=-1.4
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 43.6 MB 56.1 MB +29%
subgraph-idle: DOM nodes 19 -127 -766% z=-99.2
subgraph-idle: event listeners 4 -70 -1850% 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 4ms 4ms -1% z=-2.4
subgraph-mouse-sweep: style recalc duration 35ms 32ms -7% z=-3.0
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 77 +1% z=-1.9
subgraph-mouse-sweep: task duration 778ms 748ms -4% z=-0.3
subgraph-mouse-sweep: script duration 91ms 78ms -14% z=-3.5
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 53.1 MB 52.7 MB -1%
subgraph-mouse-sweep: DOM nodes -106 -104 -2% z=-76.5
subgraph-mouse-sweep: event listeners -72 -72 +0% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms -0%
subgraph-transition-enter: p95 frame time 17ms 17ms -1%
subgraph-transition-enter: layout duration 13ms 11ms -14%
subgraph-transition-enter: style recalc duration 31ms 27ms -16%
subgraph-transition-enter: layout count 13 15 +15%
subgraph-transition-enter: style recalc count 17 19 +12%
subgraph-transition-enter: task duration 970ms 884ms -9%
subgraph-transition-enter: script duration 39ms 34ms -13%
subgraph-transition-enter: TBT 139ms 114ms -18%
subgraph-transition-enter: heap used 94.7 MB 97.8 MB +3%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2371 2371 +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 36ms 35ms -2%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 249 -0%
viewport-pan-sweep: task duration 4535ms 4250ms -6%
viewport-pan-sweep: script duration 1435ms 1258ms -12%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 63.8 MB 62.1 MB -3%
viewport-pan-sweep: DOM nodes -276 -276 +0%
viewport-pan-sweep: event listeners -127 -128 +1%
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 17062ms 14992ms -12%
vue-large-graph-idle: script duration 545ms 537ms -1%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 160.9 MB 161.6 MB +0%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16386 -16388 +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 17ms 14ms -14%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 141 124 -12%
vue-large-graph-pan: task duration 20457ms 18142ms -11%
vue-large-graph-pan: script duration 890ms 844ms -5%
vue-large-graph-pan: TBT 252ms 46ms -82%
vue-large-graph-pan: heap used 154.6 MB 148.0 MB -4%
vue-large-graph-pan: DOM nodes -8312 -8315 +0%
vue-large-graph-pan: event listeners -16382 -16383 +0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.1
workflow-execution: p95 frame time 17ms 17ms -0%
workflow-execution: layout duration 1ms 1ms +48% z=-4.2
workflow-execution: style recalc duration 16ms 16ms -0% z=-3.6
workflow-execution: layout count 3 3 +0% z=-4.5
workflow-execution: style recalc count 11 11 +5% z=-3.3
workflow-execution: task duration 94ms 96ms +2% z=-2.5
workflow-execution: script duration 8ms 7ms -7% z=-7.4
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 57.8 MB 57.7 MB -0%
workflow-execution: DOM nodes 118 129 +9% z=-4.5
workflow-execution: event listeners 49 41 -16% z=-2.5
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-03T18:22:28.973Z",
  "gitSha": "9e1d9886fe01b6426691ae4c8f2d608f9f12cf30",
  "branch": "backport-14607-to-core-1.48",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2047.0610000000136,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.671999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 474.533,
      "heapDeltaBytes": 4011660,
      "heapUsedBytes": 71876976,
      "domNodes": 20,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 21.348000000000003,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-idle",
      "durationMs": 2039.650999999992,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.576999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 515.558,
      "heapDeltaBytes": -21694484,
      "heapUsedBytes": 46076684,
      "domNodes": -272,
      "jsHeapTotalBytes": 20180992,
      "scriptDurationMs": 22.901,
      "eventListeners": -146,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2059.710999999993,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 52.11000000000001,
      "layouts": 12,
      "layoutDurationMs": 9.131,
      "taskDurationMs": 996.2639999999999,
      "heapDeltaBytes": -15612564,
      "heapUsedBytes": 52299500,
      "domNodes": -271,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 137.153,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1874.66900000004,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 36.98500000000001,
      "layouts": 12,
      "layoutDurationMs": 3.543,
      "taskDurationMs": 880.854,
      "heapDeltaBytes": -16652360,
      "heapUsedBytes": 51493588,
      "domNodes": -272,
      "jsHeapTotalBytes": 21229568,
      "scriptDurationMs": 109.015,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1709.8269999999616,
      "styleRecalcs": 30,
      "styleRecalcDurationMs": 15.408,
      "layouts": 6,
      "layoutDurationMs": 0.541,
      "taskDurationMs": 359.532,
      "heapDeltaBytes": 7038100,
      "heapUsedBytes": 74812424,
      "domNodes": 77,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 19.063999999999997,
      "eventListeners": 21,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1740.6559999999445,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 14.559000000000001,
      "layouts": 6,
      "layoutDurationMs": 0.5599999999999999,
      "taskDurationMs": 368.896,
      "heapDeltaBytes": 7292784,
      "heapUsedBytes": 75176552,
      "domNodes": 77,
      "jsHeapTotalBytes": 20054016,
      "scriptDurationMs": 22.025999999999996,
      "eventListeners": 21,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 574.3449999999939,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.2860000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 359.18300000000005,
      "heapDeltaBytes": -12430740,
      "heapUsedBytes": 55628992,
      "domNodes": 20,
      "jsHeapTotalBytes": 21364736,
      "scriptDurationMs": 51.532999999999994,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 592.3139999999876,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 6.707,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 358.709,
      "heapDeltaBytes": -12450460,
      "heapUsedBytes": 55505420,
      "domNodes": 18,
      "jsHeapTotalBytes": 21889024,
      "scriptDurationMs": 51.836,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999727
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2026.5810000000215,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.978999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 653.2309999999999,
      "heapDeltaBytes": 6929460,
      "heapUsedBytes": 66637900,
      "domNodes": -276,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 99.763,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2031.5949999999816,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.535,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 661.0400000000001,
      "heapDeltaBytes": 6979840,
      "heapUsedBytes": 65673796,
      "domNodes": -275,
      "jsHeapTotalBytes": 5046272,
      "scriptDurationMs": 95.87399999999998,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2191.8440000000032,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 12.993,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1267.371,
      "heapDeltaBytes": -3798220,
      "heapUsedBytes": 56062392,
      "domNodes": -276,
      "jsHeapTotalBytes": 5308416,
      "scriptDurationMs": 416.805,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2161.7389999998977,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 13.881,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1243.349,
      "heapDeltaBytes": 2001404,
      "heapUsedBytes": 61767456,
      "domNodes": -277,
      "jsHeapTotalBytes": 4726784,
      "scriptDurationMs": 389.247,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3200.9479999999826,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 14.639999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.354999999999999,
      "taskDurationMs": 1424.2780000000002,
      "heapDeltaBytes": -1760384,
      "heapUsedBytes": 60027512,
      "domNodes": -278,
      "jsHeapTotalBytes": 7405568,
      "scriptDurationMs": 476.894,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3184.970999999905,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 13.811999999999998,
      "layouts": 60,
      "layoutDurationMs": 7.138,
      "taskDurationMs": 1444.667,
      "heapDeltaBytes": -3528440,
      "heapUsedBytes": 57866072,
      "domNodes": -280,
      "jsHeapTotalBytes": 7667712,
      "scriptDurationMs": 481.399,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2040.9259999999563,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.666999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 660.3990000000002,
      "heapDeltaBytes": 6794852,
      "heapUsedBytes": 67057024,
      "domNodes": -274,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 92.303,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2027.924999999982,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.7150000000000025,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 652.9659999999999,
      "heapDeltaBytes": 6998476,
      "heapUsedBytes": 67820696,
      "domNodes": -277,
      "jsHeapTotalBytes": 4259840,
      "scriptDurationMs": 93.15400000000001,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 564.0339999999924,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 10.538,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 386.44100000000003,
      "heapDeltaBytes": -12138436,
      "heapUsedBytes": 55783008,
      "domNodes": 22,
      "jsHeapTotalBytes": 22151168,
      "scriptDurationMs": 114.55600000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 558.5419999999885,
      "styleRecalcs": 45,
      "styleRecalcDurationMs": 7.783000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 369.721,
      "heapDeltaBytes": -12119856,
      "heapUsedBytes": 55838196,
      "domNodes": 16,
      "jsHeapTotalBytes": 22675456,
      "scriptDurationMs": 109.963,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2006.1719999999923,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.1640000000000015,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 435.851,
      "heapDeltaBytes": 3445456,
      "heapUsedBytes": 71494136,
      "domNodes": 18,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 17.369,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2034.0359999999578,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.542999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 483.20899999999995,
      "heapDeltaBytes": -21693456,
      "heapUsedBytes": 46254792,
      "domNodes": -271,
      "jsHeapTotalBytes": 20180992,
      "scriptDurationMs": 15.477,
      "eventListeners": -146,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1694.9179999999728,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 33.669000000000004,
      "layouts": 16,
      "layoutDurationMs": 3.6400000000000006,
      "taskDurationMs": 730.051,
      "heapDeltaBytes": -5565908,
      "heapUsedBytes": 62436036,
      "domNodes": 64,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 79.888,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1729.7470000000317,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 31.230999999999998,
      "layouts": 16,
      "layoutDurationMs": 4.185,
      "taskDurationMs": 765.207,
      "heapDeltaBytes": -19953884,
      "heapUsedBytes": 48047724,
      "domNodes": -272,
      "jsHeapTotalBytes": 20705280,
      "scriptDurationMs": 75.332,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1351.0220000000004,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 26.606000000000005,
      "layouts": 15,
      "layoutDurationMs": 10.926000000000002,
      "taskDurationMs": 884.0789999999998,
      "heapDeltaBytes": 9199100,
      "heapUsedBytes": 102502756,
      "domNodes": 13673,
      "jsHeapTotalBytes": 10485760,
      "scriptDurationMs": 33.965999999999994,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 114,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8186.024999999972,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.391,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4245.830000000001,
      "heapDeltaBytes": 10753568,
      "heapUsedBytes": 69472496,
      "domNodes": -274,
      "jsHeapTotalBytes": 6823936,
      "scriptDurationMs": 1252.6139999999998,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8150.525000000016,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.439,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4253.650000000001,
      "heapDeltaBytes": 1899708,
      "heapUsedBytes": 60815560,
      "domNodes": -277,
      "jsHeapTotalBytes": 6881280,
      "scriptDurationMs": 1263.514,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333338,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 15150.778000000002,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15103.379,
      "heapDeltaBytes": -57391692,
      "heapUsedBytes": 167314212,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9633792,
      "scriptDurationMs": 552.995,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 14904.665000000023,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14880.841,
      "heapDeltaBytes": -37628876,
      "heapUsedBytes": 171583952,
      "domNodes": -8312,
      "jsHeapTotalBytes": -7540736,
      "scriptDurationMs": 521.347,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.333333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 18032.189000000017,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 13.977000000000018,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 18007.775999999998,
      "heapDeltaBytes": -51264748,
      "heapUsedBytes": 156787092,
      "domNodes": -8317,
      "jsHeapTotalBytes": -13307904,
      "scriptDurationMs": 822.8420000000001,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 72,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 18316.824999999993,
      "styleRecalcs": 125,
      "styleRecalcDurationMs": 14.433000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 18277.102,
      "heapDeltaBytes": -65961532,
      "heapUsedBytes": 153695636,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13832192,
      "scriptDurationMs": 866.139,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 20,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "workflow-execution",
      "durationMs": 458.41400000000476,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 18.262,
      "layouts": 3,
      "layoutDurationMs": 0.71,
      "taskDurationMs": 116.405,
      "heapDeltaBytes": -15916916,
      "heapUsedBytes": 51081348,
      "domNodes": 132,
      "jsHeapTotalBytes": 7995392,
      "scriptDurationMs": 9.491000000000001,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "workflow-execution",
      "durationMs": 109.18000000003758,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 14.435,
      "layouts": 2,
      "layoutDurationMs": 1.174,
      "taskDurationMs": 75.195,
      "heapDeltaBytes": 2846092,
      "heapUsedBytes": 69945140,
      "domNodes": 125,
      "jsHeapTotalBytes": 2621440,
      "scriptDurationMs": 4.664999999999999,
      "eventListeners": 17,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    }
  ]
}

@codecov

codecov Bot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@              Coverage Diff              @@
##           core/1.48   #14610      +/-   ##
=============================================
+ Coverage      79.33%   79.34%   +0.01%     
=============================================
  Files           1746     1746              
  Lines          99377    99385       +8     
  Branches       31860    32616     +756     
=============================================
+ Hits           78842    78859      +17     
+ Misses         20133    20124       -9     
  Partials         402      402              
Flag Coverage Δ
unit 69.17% <100.00%> (+0.01%) ⬆️

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

Files with missing lines Coverage Δ
...tform/workspace/components/UnifiedPricingTable.vue 88.56% <100.00%> (+3.38%) ⬆️

... and 1 file with indirect coverage changes

🚀 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.

@wei-hai
wei-hai merged commit 0d7f74b into core/1.48 Aug 3, 2026
74 checks passed
@wei-hai
wei-hai deleted the backport-14607-to-core-1.48 branch August 3, 2026 19:09
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:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants