Skip to content

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

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

[backport cloud/1.48] fix(workspace): let ended subscriptions resubscribe to the same plan#14611
wei-hai merged 1 commit into
cloud/1.48from
backport-14607-to-cloud-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: cbe18f64-4f50-44d7-a4f1-6964e9a69e66

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:13:07 PM UTC

Links

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

📊 Browser Reports
  • chromium: View Report (✅ 1740 / ❌ 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 · 68.1 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.9 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.4 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.9 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.5 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.5 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.8 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.2 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.5 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.2 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.1 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 128ms TBT · 92.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.9 MB heap
vue-large-graph-idle: · 55.4 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 166.9 MB heap
vue-large-graph-pan: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 514ms TBT · 157.8 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 48.6 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 9ms
canvas-idle: layout count 0
canvas-idle: style recalc count 9
canvas-idle: task duration 544ms
canvas-idle: script duration 21ms
canvas-idle: TBT 0ms
canvas-idle: heap used 68.1 MB
canvas-idle: DOM nodes 17
canvas-idle: event listeners 5
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 3ms
canvas-mouse-sweep: style recalc duration 38ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 74
canvas-mouse-sweep: task duration 888ms
canvas-mouse-sweep: script duration 127ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 49.9 MB
canvas-mouse-sweep: DOM nodes -275
canvas-mouse-sweep: event listeners -148
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 19ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 32
canvas-zoom-sweep: task duration 451ms
canvas-zoom-sweep: script duration 26ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 71.4 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 9ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 12
dom-widget-clipping: task duration 397ms
dom-widget-clipping: script duration 61ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 52.9 MB
dom-widget-clipping: DOM nodes 19
dom-widget-clipping: event listeners 1
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 9ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 9
large-graph-idle: task duration 826ms
large-graph-idle: script duration 132ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 62.5 MB
large-graph-idle: DOM nodes -276
large-graph-idle: event listeners -144
large-graph-pan: avg frame time 17ms
large-graph-pan: p95 frame time 17ms
large-graph-pan: layout duration 0ms
large-graph-pan: style recalc duration 14ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 68
large-graph-pan: task duration 1395ms
large-graph-pan: script duration 480ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 60.5 MB
large-graph-pan: DOM nodes -279
large-graph-pan: event listeners -144
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 16ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 64
large-graph-zoom: task duration 1692ms
large-graph-zoom: script duration 602ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 58.8 MB
large-graph-zoom: DOM nodes -282
large-graph-zoom: event listeners -147
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 9ms
minimap-idle: layout count 0
minimap-idle: style recalc count 8
minimap-idle: task duration 882ms
minimap-idle: script duration 143ms
minimap-idle: TBT 0ms
minimap-idle: heap used 64.2 MB
minimap-idle: DOM nodes -277
minimap-idle: event listeners -144
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 12ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 451ms
subgraph-dom-widget-clipping: script duration 130ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 53.5 MB
subgraph-dom-widget-clipping: DOM nodes 19
subgraph-dom-widget-clipping: event listeners 8
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 13ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 11
subgraph-idle: task duration 550ms
subgraph-idle: script duration 20ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 56.2 MB
subgraph-idle: DOM nodes -126
subgraph-idle: event listeners -72
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 5ms
subgraph-mouse-sweep: style recalc duration 44ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 77
subgraph-mouse-sweep: task duration 926ms
subgraph-mouse-sweep: script duration 109ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 53.1 MB
subgraph-mouse-sweep: DOM nodes -105
subgraph-mouse-sweep: event listeners -72
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 13ms
subgraph-transition-enter: style recalc duration 30ms
subgraph-transition-enter: layout count 15
subgraph-transition-enter: style recalc count 19
subgraph-transition-enter: task duration 908ms
subgraph-transition-enter: script duration 32ms
subgraph-transition-enter: TBT 128ms
subgraph-transition-enter: heap used 92.8 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 249
viewport-pan-sweep: task duration 5058ms
viewport-pan-sweep: script duration 1557ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 70.9 MB
viewport-pan-sweep: DOM nodes -275
viewport-pan-sweep: event listeners -126
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 17645ms
vue-large-graph-idle: script duration 603ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 166.9 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16387
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 23ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 154
vue-large-graph-pan: task duration 21828ms
vue-large-graph-pan: script duration 993ms
vue-large-graph-pan: TBT 514ms
vue-large-graph-pan: heap used 157.8 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16382
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 22ms
workflow-execution: layout count 4
workflow-execution: style recalc count 14
workflow-execution: task duration 127ms
workflow-execution: script duration 12ms
workflow-execution: TBT 0ms
workflow-execution: heap used 48.6 MB
workflow-execution: DOM nodes 123
workflow-execution: event listeners 66
Raw data
{
  "timestamp": "2026-08-03T18:24:01.585Z",
  "gitSha": "14696db5f3aa17fdd0e157b95dc769ca8fc9c422",
  "branch": "backport-14607-to-cloud-1.48",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2141.5020000000027,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 10.613000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 641.444,
      "heapDeltaBytes": 3700368,
      "heapUsedBytes": 71697944,
      "domNodes": 14,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 26.947999999999997,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2040.149999999926,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.147,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 446.95399999999995,
      "heapDeltaBytes": 3508784,
      "heapUsedBytes": 71067016,
      "domNodes": 20,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 15.346000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1864.2320000000154,
      "styleRecalcs": 73,
      "styleRecalcDurationMs": 37.427,
      "layouts": 12,
      "layoutDurationMs": 3.173,
      "taskDurationMs": 895.7169999999999,
      "heapDeltaBytes": -16921364,
      "heapUsedBytes": 50893424,
      "domNodes": -274,
      "jsHeapTotalBytes": 21491712,
      "scriptDurationMs": 129.54399999999998,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1839.8849999999811,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 37.900999999999996,
      "layouts": 12,
      "layoutDurationMs": 3.512,
      "taskDurationMs": 881.1949999999999,
      "heapDeltaBytes": -14213232,
      "heapUsedBytes": 53717260,
      "domNodes": -275,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 125.026,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1722.4899999999934,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.73,
      "layouts": 6,
      "layoutDurationMs": 0.6509999999999999,
      "taskDurationMs": 395.05899999999997,
      "heapDeltaBytes": 7172360,
      "heapUsedBytes": 74864700,
      "domNodes": 78,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 21.158000000000005,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1741.3269999999557,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 20.433000000000003,
      "layouts": 6,
      "layoutDurationMs": 0.7520000000000001,
      "taskDurationMs": 506.825,
      "heapDeltaBytes": 7186192,
      "heapUsedBytes": 74887712,
      "domNodes": 77,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 31.302999999999997,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 594.1189999999779,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.203000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 393.449,
      "heapDeltaBytes": -12319628,
      "heapUsedBytes": 55490760,
      "domNodes": 20,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 61.21800000000001,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 608.9970000000449,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.030000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 400.969,
      "heapDeltaBytes": -12397488,
      "heapUsedBytes": 55547348,
      "domNodes": 18,
      "jsHeapTotalBytes": 21102592,
      "scriptDurationMs": 61.18600000000001,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2020.6110000000308,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.015999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 770.9639999999999,
      "heapDeltaBytes": 6611044,
      "heapUsedBytes": 66095208,
      "domNodes": -276,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 123.82900000000002,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2036.055000000033,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 10.094000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 881.2390000000001,
      "heapDeltaBytes": 6312064,
      "heapUsedBytes": 65031588,
      "domNodes": -275,
      "jsHeapTotalBytes": 4784128,
      "scriptDurationMs": 140.823,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2213.9620000000377,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 13.301999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1301.209,
      "heapDeltaBytes": 2181296,
      "heapUsedBytes": 62121840,
      "domNodes": -277,
      "jsHeapTotalBytes": 4988928,
      "scriptDurationMs": 456.295,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2367.3179999999547,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 14.495999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1487.98,
      "heapDeltaBytes": 4770576,
      "heapUsedBytes": 64720248,
      "domNodes": -281,
      "jsHeapTotalBytes": 4988928,
      "scriptDurationMs": 504.108,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3346.241999999961,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.515,
      "layouts": 60,
      "layoutDurationMs": 7.581999999999999,
      "taskDurationMs": 1600.4429999999998,
      "heapDeltaBytes": 8222788,
      "heapUsedBytes": 69665880,
      "domNodes": -283,
      "jsHeapTotalBytes": 6619136,
      "scriptDurationMs": 563.027,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3616.203999999925,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 16.505999999999997,
      "layouts": 60,
      "layoutDurationMs": 8.477,
      "taskDurationMs": 1783.4189999999999,
      "heapDeltaBytes": -8079724,
      "heapUsedBytes": 53620092,
      "domNodes": -281,
      "jsHeapTotalBytes": 7929856,
      "scriptDurationMs": 640.482,
      "eventListeners": -146,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "minimap-idle",
      "durationMs": 2042.429000000027,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.194999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 792.364,
      "heapDeltaBytes": 6550460,
      "heapUsedBytes": 66931988,
      "domNodes": -275,
      "jsHeapTotalBytes": 4259840,
      "scriptDurationMs": 128.626,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2070.8989999999403,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 8.811,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 970.806,
      "heapDeltaBytes": 7128208,
      "heapUsedBytes": 67799844,
      "domNodes": -278,
      "jsHeapTotalBytes": 3997696,
      "scriptDurationMs": 157.636,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 596.9599999999673,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.187000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 408.117,
      "heapDeltaBytes": -11674196,
      "heapUsedBytes": 56129816,
      "domNodes": 20,
      "jsHeapTotalBytes": 21889024,
      "scriptDurationMs": 119.33099999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 725.5109999999831,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 12.965,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 494.02599999999995,
      "heapDeltaBytes": -11727840,
      "heapUsedBytes": 56122360,
      "domNodes": 18,
      "jsHeapTotalBytes": 21364736,
      "scriptDurationMs": 140.667,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2046.9029999999862,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 15.602999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 570.404,
      "heapDeltaBytes": -21487328,
      "heapUsedBytes": 46390400,
      "domNodes": -271,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 20.755000000000003,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2003.8409999999658,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 10.974000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 530.363,
      "heapDeltaBytes": 3502124,
      "heapUsedBytes": 71402080,
      "domNodes": 20,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 20.084000000000003,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1740.2589999999805,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 40.446000000000005,
      "layouts": 16,
      "layoutDurationMs": 5.04,
      "taskDurationMs": 888.639,
      "heapDeltaBytes": -18958968,
      "heapUsedBytes": 48970868,
      "domNodes": -273,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 103.545,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1776.1990000000196,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 47.092,
      "layouts": 16,
      "layoutDurationMs": 5.346,
      "taskDurationMs": 963.641,
      "heapDeltaBytes": -5659912,
      "heapUsedBytes": 62287268,
      "domNodes": 63,
      "jsHeapTotalBytes": 21364736,
      "scriptDurationMs": 114.794,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1383.8630000000194,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 29.691000000000003,
      "layouts": 15,
      "layoutDurationMs": 12.573,
      "taskDurationMs": 908.3090000000001,
      "heapDeltaBytes": 29118580,
      "heapUsedBytes": 97299632,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15728640,
      "scriptDurationMs": 31.583,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 128,
      "frameDurationMs": 16.666666666666636,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8615.822000000036,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 37.861000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4852.877,
      "heapDeltaBytes": 9932664,
      "heapUsedBytes": 69193716,
      "domNodes": -276,
      "jsHeapTotalBytes": 7057408,
      "scriptDurationMs": 1475.6979999999999,
      "eventListeners": -126,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 9182.195999999976,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 43.133,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 5263.397999999999,
      "heapDeltaBytes": 20892648,
      "heapUsedBytes": 79523808,
      "domNodes": -274,
      "jsHeapTotalBytes": 7319552,
      "scriptDurationMs": 1638.6889999999999,
      "eventListeners": -126,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17523.398999999983,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17501.548,
      "heapDeltaBytes": -39893900,
      "heapUsedBytes": 183173228,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13832192,
      "scriptDurationMs": 601.715,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17813.040999999997,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17788.032000000003,
      "heapDeltaBytes": -55977896,
      "heapUsedBytes": 166931308,
      "domNodes": -8312,
      "jsHeapTotalBytes": -14618624,
      "scriptDurationMs": 605.07,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.330000000000048,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21103.95600000004,
      "styleRecalcs": 142,
      "styleRecalcDurationMs": 19.833000000000045,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21063.874000000003,
      "heapDeltaBytes": -48761596,
      "heapUsedBytes": 164309000,
      "domNodes": -8312,
      "jsHeapTotalBytes": -17764352,
      "scriptDurationMs": 965.806,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 303,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 22630.371999999967,
      "styleRecalcs": 165,
      "styleRecalcDurationMs": 25.577000000000016,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 22592.429,
      "heapDeltaBytes": -41483244,
      "heapUsedBytes": 166557292,
      "domNodes": -8312,
      "jsHeapTotalBytes": -15929344,
      "scriptDurationMs": 1019.644,
      "eventListeners": -16379,
      "totalBlockingTimeMs": 724,
      "frameDurationMs": 18.333333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 482.8330000000278,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 21.334000000000007,
      "layouts": 4,
      "layoutDurationMs": 1.454,
      "taskDurationMs": 133.51599999999996,
      "heapDeltaBytes": -15998120,
      "heapUsedBytes": 51038592,
      "domNodes": 128,
      "jsHeapTotalBytes": 7995392,
      "scriptDurationMs": 12.875000000000002,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 469.97399999997924,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 22.684,
      "layouts": 4,
      "layoutDurationMs": 1.316,
      "taskDurationMs": 119.68200000000002,
      "heapDeltaBytes": -16108836,
      "heapUsedBytes": 50797096,
      "domNodes": 117,
      "jsHeapTotalBytes": 7995392,
      "scriptDurationMs": 10.373,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@codecov

codecov Bot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@              Coverage Diff              @@
##             cloud/1.48   #14611   +/-   ##
=============================================
  Coverage              ?   69.17%           
=============================================
  Files                 ?     1659           
  Lines                 ?    85718           
  Branches              ?    24701           
=============================================
  Hits                  ?    59293           
  Misses                ?    26315           
  Partials              ?      110           
Flag Coverage Δ
unit 69.17% <100.00%> (?)

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%> (ø)
🚀 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 6da2e00 into cloud/1.48 Aug 3, 2026
75 checks passed
@wei-hai
wei-hai deleted the backport-14607-to-cloud-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