Skip to content

[backport cloud/1.48] fix(billing): stop reporting "processing" while a payment waits on the customer - #14912

Merged
comfy-pr-bot merged 1 commit into
cloud/1.48from
backport-14910-to-cloud-1.48
Aug 7, 2026
Merged

[backport cloud/1.48] fix(billing): stop reporting "processing" while a payment waits on the customer#14912
comfy-pr-bot merged 1 commit into
cloud/1.48from
backport-14910-to-cloud-1.48

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14910 to cloud/1.48

Automatically created by backport workflow.

…e customer (#14910)

## Summary

The billing-operation toast is created once when the operation starts
and never revised, so an operation that parks on a 3DS challenge kept
announcing "Processing payment — setting up your workspace..." while it
was in fact waiting on the customer.

## Changes

- **What**: Drive the toast from the current `action_url`, which the
generated contract defines as present exactly while a pending operation
cannot proceed without the customer. The store already tracks that field
and already renders a verification prompt from it — only the toast was
left behind, so it contradicted the prompt beside it. The toast swaps
whenever that answer changes, in either direction, so it can never
outlive the action it points at.

## Reproduction

Any environment in Stripe test mode:

1. New workspace, no subscription.
2. Subscribe to a monthly plan; complete checkout with the 3DS test card
`4000 0027 6000 3184`.
3. The first invoice needs authentication, so the operation parks and
the status endpoint returns `status: "pending"` with `action_url` set to
the Stripe-hosted invoice page.
4. Observe the toast while parked.

**AS IS** — "Processing payment — setting up your workspace..." with a
spinner, for the whole time the operation waits on the customer, beside
a "Complete verification" affordance rendered from the same
`action_url`. A reload does not clear it.

**TO BE** — "Verify your payment to finish setting up your workspace"
with a prompt icon, for as long as `action_url` is present.

The same state is reached before any payment exists, when the operation
is waiting for the customer to finish checkout.

## Before / after

```mermaid
flowchart TD
    A["Subscription operation starts"] --> B["⟳ Processing payment —<br/>setting up your workspace…"]
    B --> C["Poll returns action_url<br/>(bank challenge required)"]
    C --> D["Before: ⟳ Processing payment —<br/>setting up your workspace…"]
    C --> E["After: ⚠ Verify your payment to<br/>finish setting up your workspace"]
    D --> F["Contradicts the 'Complete<br/>verification' prompt beside it"]
    E --> G["Matches the 'Complete<br/>verification' prompt beside it"]
    E --> H["action_url clears →<br/>reverts to processing"]
```

## Review Focus

- The toast keys on the **current** `action_url`, not on the sticky
`authenticationRequiredSeen` — so it cannot ask for verification after
the verification action has gone. `authenticationRequiredSeen` continues
to carry only polling cadence and the 23h timeout.
- Swapped only when the answer changes, so a toast the customer
dismissed is not resurfaced on every poll (cadence is 30s while parked).
- `severity: 'warn'` only selects the icon in `GlobalToast`; this toast
group renders through a custom `#message` slot, so severity carries no
other behaviour here. The state is conveyed in the summary text, not by
icon or colour alone.
- English strings only — other locales are generated during release PRs.
- Deliberately out of scope: the same stale copy appears in the
subscription settings panel (`SubscriptionPanelContentWorkspace.vue`).
Same fix, different surface — left for a follow-up to keep this
reviewable.

## Verification

- `billingOperationStore` tests: 56 passed, 4 new. Each new test fails
without the store change (verified by stashing it).
- `vitest run src/platform/workspace src/components/toast` — 1075
passed.
- `vue-tsc --noEmit`, `oxfmt --check`, `oxlint --type-aware`, `eslint` —
clean.
- Reproduced end to end on a fresh workspace with the 3DS test card
before and after the change.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 7, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 7, 2026 21:28
@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

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

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

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/07/2026, 09:30:13 PM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.6 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.9 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.0 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.9 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.7 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.9 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.6 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 44.2 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 118ms TBT · 93.3 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.0 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 158.7 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 85ms TBT · 160.4 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 9ms
canvas-idle: layout count 0
canvas-idle: style recalc count 10
canvas-idle: task duration 585ms
canvas-idle: script duration 23ms
canvas-idle: TBT 0ms
canvas-idle: heap used 68.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 49ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 77
canvas-mouse-sweep: task duration 997ms
canvas-mouse-sweep: script duration 122ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 56.9 MB
canvas-mouse-sweep: DOM nodes -104
canvas-mouse-sweep: event listeners -72
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 18ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 32
canvas-zoom-sweep: task duration 427ms
canvas-zoom-sweep: script duration 24ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 72.0 MB
canvas-zoom-sweep: DOM nodes 77
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 8ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 392ms
dom-widget-clipping: script duration 57ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 53.1 MB
dom-widget-clipping: DOM nodes 18
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 8ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 9
large-graph-idle: task duration 727ms
large-graph-idle: script duration 105ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 62.9 MB
large-graph-idle: DOM nodes -275
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 69
large-graph-pan: task duration 1349ms
large-graph-pan: script duration 427ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 60.7 MB
large-graph-pan: DOM nodes -278
large-graph-pan: event listeners -142
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 1625ms
large-graph-zoom: script duration 549ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 65.7 MB
large-graph-zoom: DOM nodes -283
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 7ms
minimap-idle: layout count 0
minimap-idle: style recalc count 8
minimap-idle: task duration 727ms
minimap-idle: script duration 107ms
minimap-idle: TBT 0ms
minimap-idle: heap used 64.9 MB
minimap-idle: DOM nodes -276
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 12ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 48
subgraph-dom-widget-clipping: task duration 418ms
subgraph-dom-widget-clipping: script duration 122ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 53.6 MB
subgraph-dom-widget-clipping: DOM nodes 21
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 9ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 11
subgraph-idle: task duration 567ms
subgraph-idle: script duration 19ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 44.2 MB
subgraph-idle: DOM nodes -125
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 40ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 77
subgraph-mouse-sweep: task duration 874ms
subgraph-mouse-sweep: script duration 91ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 53.3 MB
subgraph-mouse-sweep: DOM nodes -106
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 12ms
subgraph-transition-enter: style recalc duration 28ms
subgraph-transition-enter: layout count 15
subgraph-transition-enter: style recalc count 19
subgraph-transition-enter: task duration 916ms
subgraph-transition-enter: script duration 35ms
subgraph-transition-enter: TBT 118ms
subgraph-transition-enter: heap used 93.3 MB
subgraph-transition-enter: DOM nodes 13673
subgraph-transition-enter: event listeners 2375
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 39ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 250
viewport-pan-sweep: task duration 4930ms
viewport-pan-sweep: script duration 1471ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 66.0 MB
viewport-pan-sweep: DOM nodes -276
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 15582ms
vue-large-graph-idle: script duration 560ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 158.7 MB
vue-large-graph-idle: DOM nodes -8315
vue-large-graph-idle: event listeners -16389
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 16ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 123
vue-large-graph-pan: task duration 18416ms
vue-large-graph-pan: script duration 831ms
vue-large-graph-pan: TBT 85ms
vue-large-graph-pan: heap used 160.4 MB
vue-large-graph-pan: DOM nodes -8313
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 16
workflow-execution: task duration 135ms
workflow-execution: script duration 12ms
workflow-execution: TBT 0ms
workflow-execution: heap used 48.8 MB
workflow-execution: DOM nodes 137
workflow-execution: event listeners 66
Raw data
{
  "timestamp": "2026-08-07T21:40:06.739Z",
  "gitSha": "4ddfc1ccb0c93fa8c10e24e77d8432064617617a",
  "branch": "backport-14910-to-cloud-1.48",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2084.07600000001,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.510000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 626.895,
      "heapDeltaBytes": 4008088,
      "heapUsedBytes": 71906744,
      "domNodes": 20,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 23.406999999999996,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2039.607999999987,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.501,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 544.0229999999999,
      "heapDeltaBytes": 4070480,
      "heapUsedBytes": 72018336,
      "domNodes": 18,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 22.288000000000004,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1943.2309999999688,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 58.059,
      "layouts": 12,
      "layoutDurationMs": 6.172000000000001,
      "taskDurationMs": 1007.144,
      "heapDeltaBytes": -1164128,
      "heapUsedBytes": 66917248,
      "domNodes": 64,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 121.32699999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1944.0180000000282,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 39.908,
      "layouts": 12,
      "layoutDurationMs": 3.9380000000000006,
      "taskDurationMs": 987.4860000000001,
      "heapDeltaBytes": -15587384,
      "heapUsedBytes": 52339528,
      "domNodes": -272,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 123.42999999999998,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1758.892000000003,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 17.705000000000002,
      "layouts": 6,
      "layoutDurationMs": 0.591,
      "taskDurationMs": 429.42600000000004,
      "heapDeltaBytes": 7309392,
      "heapUsedBytes": 75370560,
      "domNodes": 77,
      "jsHeapTotalBytes": 20316160,
      "scriptDurationMs": 23.786,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.6290000000363,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 18.106,
      "layouts": 6,
      "layoutDurationMs": 0.6979999999999998,
      "taskDurationMs": 425.497,
      "heapDeltaBytes": 7621892,
      "heapUsedBytes": 75649360,
      "domNodes": 77,
      "jsHeapTotalBytes": 19791872,
      "scriptDurationMs": 23.616,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 606.5879999999879,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.358,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 385.055,
      "heapDeltaBytes": -12062972,
      "heapUsedBytes": 55812548,
      "domNodes": 16,
      "jsHeapTotalBytes": 20840448,
      "scriptDurationMs": 54.209999999999994,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 611.5959999999632,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.020999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 399.545,
      "heapDeltaBytes": -12316436,
      "heapUsedBytes": 55554600,
      "domNodes": 20,
      "jsHeapTotalBytes": 21626880,
      "scriptDurationMs": 59.005,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2027.7280000000246,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.901000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 708.25,
      "heapDeltaBytes": 6812712,
      "heapUsedBytes": 66227476,
      "domNodes": -276,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 106.44199999999998,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2022.154999999998,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.841000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 745.9550000000002,
      "heapDeltaBytes": 6505548,
      "heapUsedBytes": 65669784,
      "domNodes": -274,
      "jsHeapTotalBytes": 5046272,
      "scriptDurationMs": 103.331,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2174.572000000012,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.641,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1335.0819999999999,
      "heapDeltaBytes": 4679048,
      "heapUsedBytes": 64979008,
      "domNodes": -279,
      "jsHeapTotalBytes": 4988928,
      "scriptDurationMs": 429.06300000000005,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2145.4390000000103,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.547999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1362.7959999999998,
      "heapDeltaBytes": 2350232,
      "heapUsedBytes": 62386776,
      "domNodes": -276,
      "jsHeapTotalBytes": 5775360,
      "scriptDurationMs": 424.528,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3296.264000000008,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 16.484999999999996,
      "layouts": 60,
      "layoutDurationMs": 8.870999999999999,
      "taskDurationMs": 1565.1249999999998,
      "heapDeltaBytes": 2188800,
      "heapUsedBytes": 63724668,
      "domNodes": -281,
      "jsHeapTotalBytes": 7405568,
      "scriptDurationMs": 524.286,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3478.6770000000615,
      "styleRecalcs": 63,
      "styleRecalcDurationMs": 13.344999999999999,
      "layouts": 60,
      "layoutDurationMs": 8.064,
      "taskDurationMs": 1685.5449999999998,
      "heapDeltaBytes": 11934332,
      "heapUsedBytes": 73971032,
      "domNodes": -284,
      "jsHeapTotalBytes": 7667712,
      "scriptDurationMs": 573.5340000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2041.1220000000299,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.002999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 712.675,
      "heapDeltaBytes": 6808956,
      "heapUsedBytes": 67913660,
      "domNodes": -276,
      "jsHeapTotalBytes": 4521984,
      "scriptDurationMs": 104.59800000000001,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2035.8639999999468,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.470000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 741.644,
      "heapDeltaBytes": 7219480,
      "heapUsedBytes": 68111588,
      "domNodes": -275,
      "jsHeapTotalBytes": 4784128,
      "scriptDurationMs": 108.72299999999998,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 613.4010000000103,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.263000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 409.475,
      "heapDeltaBytes": -11844492,
      "heapUsedBytes": 56262912,
      "domNodes": 20,
      "jsHeapTotalBytes": 21889024,
      "scriptDurationMs": 119.70500000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 641.3489999999911,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 12.378,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 425.67900000000003,
      "heapDeltaBytes": -11872172,
      "heapUsedBytes": 56240956,
      "domNodes": 22,
      "jsHeapTotalBytes": 22151168,
      "scriptDurationMs": 124.85099999999998,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2023.050000000012,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.671000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 550.64,
      "heapDeltaBytes": -22262448,
      "heapUsedBytes": 45853748,
      "domNodes": 22,
      "jsHeapTotalBytes": 20443136,
      "scriptDurationMs": 19.491999999999997,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1994.0510000000131,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.189,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 583.98,
      "heapDeltaBytes": -21188824,
      "heapUsedBytes": 46785924,
      "domNodes": -272,
      "jsHeapTotalBytes": 20967424,
      "scriptDurationMs": 19.337999999999997,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1735.839999999996,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 36.418000000000006,
      "layouts": 16,
      "layoutDurationMs": 4.51,
      "taskDurationMs": 868.724,
      "heapDeltaBytes": -18983004,
      "heapUsedBytes": 49094432,
      "domNodes": -276,
      "jsHeapTotalBytes": 20180992,
      "scriptDurationMs": 90.641,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1783.6239999999748,
      "styleRecalcs": 79,
      "styleRecalcDurationMs": 42.878,
      "layouts": 16,
      "layoutDurationMs": 5.1450000000000005,
      "taskDurationMs": 879.013,
      "heapDeltaBytes": -5344496,
      "heapUsedBytes": 62614268,
      "domNodes": 64,
      "jsHeapTotalBytes": 20578304,
      "scriptDurationMs": 92.35,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1367.6850000000513,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 27.962000000000007,
      "layouts": 15,
      "layoutDurationMs": 11.618,
      "taskDurationMs": 915.911,
      "heapDeltaBytes": 30934568,
      "heapUsedBytes": 97786360,
      "domNodes": 13673,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 34.571000000000005,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 118,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8235.681,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 38.885999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4854.223999999999,
      "heapDeltaBytes": 10302480,
      "heapUsedBytes": 69499096,
      "domNodes": -275,
      "jsHeapTotalBytes": 7348224,
      "scriptDurationMs": 1420.9850000000001,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8238.472999999998,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 39.415,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 5005.005,
      "heapDeltaBytes": 9887052,
      "heapUsedBytes": 68865708,
      "domNodes": -276,
      "jsHeapTotalBytes": 9183232,
      "scriptDurationMs": 1520.907,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 15714.600000000019,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15694.958000000002,
      "heapDeltaBytes": -52022348,
      "heapUsedBytes": 166095264,
      "domNodes": -8312,
      "jsHeapTotalBytes": -13307904,
      "scriptDurationMs": 561.4859999999999,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 15501.055000000066,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15468.229999999998,
      "heapDeltaBytes": -58369392,
      "heapUsedBytes": 166750896,
      "domNodes": -8317,
      "jsHeapTotalBytes": -14356480,
      "scriptDurationMs": 558.34,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 18390.191999999955,
      "styleRecalcs": 125,
      "styleRecalcDurationMs": 15.740000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 18337.671000000002,
      "heapDeltaBytes": -36611768,
      "heapUsedBytes": 172120376,
      "domNodes": -8313,
      "jsHeapTotalBytes": -13393920,
      "scriptDurationMs": 833.4749999999999,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 139,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 18538.225000000013,
      "styleRecalcs": 121,
      "styleRecalcDurationMs": 15.763,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 18494.446,
      "heapDeltaBytes": -48461448,
      "heapUsedBytes": 164335816,
      "domNodes": -8313,
      "jsHeapTotalBytes": -11472896,
      "scriptDurationMs": 827.643,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 30,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "workflow-execution",
      "durationMs": 513.2770000000164,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 21.89,
      "layouts": 3,
      "layoutDurationMs": 1.097,
      "taskDurationMs": 149.86599999999999,
      "heapDeltaBytes": -15599860,
      "heapUsedBytes": 51419780,
      "domNodes": 154,
      "jsHeapTotalBytes": 7733248,
      "scriptDurationMs": 15.649999999999997,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "workflow-execution",
      "durationMs": 478.1239999999798,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 18.136,
      "layouts": 2,
      "layoutDurationMs": 0.33799999999999997,
      "taskDurationMs": 119.189,
      "heapDeltaBytes": -16228452,
      "heapUsedBytes": 50930780,
      "domNodes": 119,
      "jsHeapTotalBytes": 7471104,
      "scriptDurationMs": 9.053000000000003,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.700000000000273
    }
  ]
}

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

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

Files with missing lines Patch % Lines
src/components/toast/GlobalToast.vue 0.00% 2 Missing ⚠️
@@              Coverage Diff              @@
##             cloud/1.48   #14912   +/-   ##
=============================================
  Coverage              ?   69.49%           
=============================================
  Files                 ?     1662           
  Lines                 ?    85986           
  Branches              ?    24785           
=============================================
  Hits                  ?    59756           
  Misses                ?    26121           
  Partials              ?      109           
Flag Coverage Δ
unit 69.49% <90.90%> (?)

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

Files with missing lines Coverage Δ
...platform/workspace/stores/billingOperationStore.ts 99.15% <100.00%> (ø)
src/components/toast/GlobalToast.vue 2.22% <0.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.

@comfy-pr-bot
comfy-pr-bot merged commit b3b3993 into cloud/1.48 Aug 7, 2026
75 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14910-to-cloud-1.48 branch August 7, 2026 21:44
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:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants