Skip to content

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

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

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

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #14910 to cloud/1.49

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

🎨 Storybook: ✅ Built — View Storybook

Details

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

Links

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

📊 Browser Reports
  • chromium: View Report (✅ 1768 / ❌ 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 · 70.4 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.1 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 73.1 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.8 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.9 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.2 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.9 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.6 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.8 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.7 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 136ms TBT · 93.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.2 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 164.2 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 204ms TBT · 167.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.0 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 462ms
canvas-idle: script duration 16ms
canvas-idle: TBT 0ms
canvas-idle: heap used 70.4 MB
canvas-idle: DOM nodes 20
canvas-idle: event listeners 4
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 4ms
canvas-mouse-sweep: style recalc duration 39ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 77
canvas-mouse-sweep: task duration 920ms
canvas-mouse-sweep: script duration 128ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 57.1 MB
canvas-mouse-sweep: DOM nodes -112
canvas-mouse-sweep: event listeners -75
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 426ms
canvas-zoom-sweep: script duration 24ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 73.1 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 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 12
dom-widget-clipping: task duration 372ms
dom-widget-clipping: script duration 58ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 53.8 MB
dom-widget-clipping: DOM nodes 20
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 7ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 9
large-graph-idle: task duration 661ms
large-graph-idle: script duration 101ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 64.9 MB
large-graph-idle: DOM nodes -283
large-graph-idle: event listeners -164
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 12ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 67
large-graph-pan: task duration 1237ms
large-graph-pan: script duration 418ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 71.2 MB
large-graph-pan: DOM nodes -287
large-graph-pan: event listeners -164
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 7ms
large-graph-zoom: style recalc duration 15ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 66
large-graph-zoom: task duration 1514ms
large-graph-zoom: script duration 537ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 60.9 MB
large-graph-zoom: DOM nodes -288
large-graph-zoom: event listeners -153
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 664ms
minimap-idle: script duration 105ms
minimap-idle: TBT 0ms
minimap-idle: heap used 66.6 MB
minimap-idle: DOM nodes -283
minimap-idle: event listeners -149
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 11ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 48
subgraph-dom-widget-clipping: task duration 395ms
subgraph-dom-widget-clipping: script duration 116ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 54.8 MB
subgraph-dom-widget-clipping: DOM nodes 22
subgraph-dom-widget-clipping: event listeners 6
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 8ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 458ms
subgraph-idle: script duration 15ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 70.5 MB
subgraph-idle: DOM nodes 20
subgraph-idle: event listeners 4
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 4ms
subgraph-mouse-sweep: style recalc duration 35ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 76
subgraph-mouse-sweep: task duration 756ms
subgraph-mouse-sweep: script duration 91ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 61.7 MB
subgraph-mouse-sweep: DOM nodes 61
subgraph-mouse-sweep: event listeners 4
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 12ms
subgraph-transition-enter: style recalc duration 30ms
subgraph-transition-enter: layout count 14
subgraph-transition-enter: style recalc count 18
subgraph-transition-enter: task duration 894ms
subgraph-transition-enter: script duration 43ms
subgraph-transition-enter: TBT 136ms
subgraph-transition-enter: heap used 93.8 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 35ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 249
viewport-pan-sweep: task duration 4388ms
viewport-pan-sweep: script duration 1369ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 70.2 MB
viewport-pan-sweep: DOM nodes -282
viewport-pan-sweep: event listeners -133
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 16838ms
vue-large-graph-idle: script duration 549ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 164.2 MB
vue-large-graph-idle: DOM nodes -8312
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 18ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 142
vue-large-graph-pan: task duration 20521ms
vue-large-graph-pan: script duration 885ms
vue-large-graph-pan: TBT 204ms
vue-large-graph-pan: heap used 167.5 MB
vue-large-graph-pan: DOM nodes -8314
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 18ms
workflow-execution: layout count 4
workflow-execution: style recalc count 11
workflow-execution: task duration 114ms
workflow-execution: script duration 8ms
workflow-execution: TBT 0ms
workflow-execution: heap used 49.0 MB
workflow-execution: DOM nodes 164
workflow-execution: event listeners 88
Raw data
{
  "timestamp": "2026-08-07T21:40:30.423Z",
  "gitSha": "a598b1e407c73790524543eb56ce62895372e298",
  "branch": "backport-14910-to-cloud-1.49",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2054.279000000008,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.862,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 472.212,
      "heapDeltaBytes": 5318428,
      "heapUsedBytes": 73804112,
      "domNodes": 20,
      "jsHeapTotalBytes": 20299776,
      "scriptDurationMs": 16.006,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-idle",
      "durationMs": 2020.4420000000027,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.453999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 451.495,
      "heapDeltaBytes": 5282056,
      "heapUsedBytes": 73752976,
      "domNodes": 20,
      "jsHeapTotalBytes": 20037632,
      "scriptDurationMs": 15.603000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2021.505000000019,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 40.224999999999994,
      "layouts": 12,
      "layoutDurationMs": 3.79,
      "taskDurationMs": 975.0770000000001,
      "heapDeltaBytes": 323016,
      "heapUsedBytes": 69071852,
      "domNodes": 58,
      "jsHeapTotalBytes": 21086208,
      "scriptDurationMs": 131.39199999999997,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1856.6260000000057,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 37.102000000000004,
      "layouts": 12,
      "layoutDurationMs": 3.509,
      "taskDurationMs": 865.162,
      "heapDeltaBytes": -18006752,
      "heapUsedBytes": 50609468,
      "domNodes": -282,
      "jsHeapTotalBytes": 20951040,
      "scriptDurationMs": 124.89999999999999,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1721.2169999999674,
      "styleRecalcs": 33,
      "styleRecalcDurationMs": 17.146,
      "layouts": 6,
      "layoutDurationMs": 0.548,
      "taskDurationMs": 377.653,
      "heapDeltaBytes": 8035224,
      "heapUsedBytes": 76611132,
      "domNodes": 78,
      "jsHeapTotalBytes": 20561920,
      "scriptDurationMs": 19.809,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1773.800000000051,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 19.496,
      "layouts": 6,
      "layoutDurationMs": 0.738,
      "taskDurationMs": 474.65799999999996,
      "heapDeltaBytes": 8099308,
      "heapUsedBytes": 76759372,
      "domNodes": 79,
      "jsHeapTotalBytes": 19775488,
      "scriptDurationMs": 28.660000000000004,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 596.5170000000057,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.599000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 375.904,
      "heapDeltaBytes": -12715244,
      "heapUsedBytes": 55626124,
      "domNodes": 20,
      "jsHeapTotalBytes": 22134784,
      "scriptDurationMs": 58.182,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 545.4979999999523,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 8.705,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 367.195,
      "heapDeltaBytes": -11336580,
      "heapUsedBytes": 57172364,
      "domNodes": 20,
      "jsHeapTotalBytes": 19775488,
      "scriptDurationMs": 56.89900000000001,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2009.9730000000022,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.819,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 671.814,
      "heapDeltaBytes": 7474500,
      "heapUsedBytes": 67343552,
      "domNodes": -281,
      "jsHeapTotalBytes": 5300224,
      "scriptDurationMs": 102.10600000000001,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2032.6410000000124,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.7299999999999995,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 650.5240000000001,
      "heapDeltaBytes": 8636300,
      "heapUsedBytes": 68737132,
      "domNodes": -284,
      "jsHeapTotalBytes": 4775936,
      "scriptDurationMs": 98.978,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2126.055000000008,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 11.26,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1217.837,
      "heapDeltaBytes": 19242588,
      "heapUsedBytes": 80538920,
      "domNodes": -287,
      "jsHeapTotalBytes": 5525504,
      "scriptDurationMs": 417.97499999999997,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2171.3179999999284,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.106,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1256.214,
      "heapDeltaBytes": 7887040,
      "heapUsedBytes": 68779388,
      "domNodes": -287,
      "jsHeapTotalBytes": 5787648,
      "scriptDurationMs": 418.33099999999996,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3229.039,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.553000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.035,
      "taskDurationMs": 1505.7450000000001,
      "heapDeltaBytes": 822076,
      "heapUsedBytes": 63138660,
      "domNodes": -288,
      "jsHeapTotalBytes": 7921664,
      "scriptDurationMs": 525.856,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3260.9500000000935,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 14.818000000000001,
      "layouts": 60,
      "layoutDurationMs": 7.287,
      "taskDurationMs": 1523.146,
      "heapDeltaBytes": 1917528,
      "heapUsedBytes": 64509152,
      "domNodes": -288,
      "jsHeapTotalBytes": 8183808,
      "scriptDurationMs": 549.083,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "minimap-idle",
      "durationMs": 2021.3039999999864,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.567,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 665.3849999999999,
      "heapDeltaBytes": 7994072,
      "heapUsedBytes": 69685816,
      "domNodes": -283,
      "jsHeapTotalBytes": 3989504,
      "scriptDurationMs": 105.435,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "minimap-idle",
      "durationMs": 2037.871999999993,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 6.615999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 662.1429999999999,
      "heapDeltaBytes": 8559264,
      "heapUsedBytes": 70013440,
      "domNodes": -283,
      "jsHeapTotalBytes": 4513792,
      "scriptDurationMs": 104.518,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 574.766000000011,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 11.219999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 397.24099999999993,
      "heapDeltaBytes": -10890920,
      "heapUsedBytes": 57663160,
      "domNodes": 22,
      "jsHeapTotalBytes": 21086208,
      "scriptDurationMs": 116.16499999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 584.9940000000515,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 10.706999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 392.324,
      "heapDeltaBytes": -11368400,
      "heapUsedBytes": 57285060,
      "domNodes": 22,
      "jsHeapTotalBytes": 21610496,
      "scriptDurationMs": 115.64200000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.6649999999886,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.857000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 439.835,
      "heapDeltaBytes": 5356932,
      "heapUsedBytes": 73891984,
      "domNodes": 22,
      "jsHeapTotalBytes": 19775488,
      "scriptDurationMs": 13.368000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2007.9200000000128,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.982000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 476.354,
      "heapDeltaBytes": 5185992,
      "heapUsedBytes": 73959668,
      "domNodes": 18,
      "jsHeapTotalBytes": 20037632,
      "scriptDurationMs": 17.558999999999997,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1681.8719999999985,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 34.815,
      "layouts": 16,
      "layoutDurationMs": 4.126,
      "taskDurationMs": 742.341,
      "heapDeltaBytes": -4026596,
      "heapUsedBytes": 64686200,
      "domNodes": 62,
      "jsHeapTotalBytes": 20299776,
      "scriptDurationMs": 88.223,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1673.3199999999897,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.643,
      "layouts": 16,
      "layoutDurationMs": 4.6,
      "taskDurationMs": 768.7610000000001,
      "heapDeltaBytes": -3808432,
      "heapUsedBytes": 64702968,
      "domNodes": 60,
      "jsHeapTotalBytes": 20561920,
      "scriptDurationMs": 93.011,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1383.971000000031,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 30.201000000000004,
      "layouts": 14,
      "layoutDurationMs": 12.417000000000002,
      "taskDurationMs": 893.5899999999999,
      "heapDeltaBytes": 30610328,
      "heapUsedBytes": 98312384,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15990784,
      "scriptDurationMs": 42.77600000000001,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 136,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8270.98699999999,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.13,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4377.807000000001,
      "heapDeltaBytes": 11836772,
      "heapUsedBytes": 71923488,
      "domNodes": -283,
      "jsHeapTotalBytes": 7360512,
      "scriptDurationMs": 1367.872,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8216.510000000086,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 35.373000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4398.692999999999,
      "heapDeltaBytes": 13858484,
      "heapUsedBytes": 75388620,
      "domNodes": -281,
      "jsHeapTotalBytes": 7589888,
      "scriptDurationMs": 1370.6490000000001,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17161.649000000012,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17143.461000000003,
      "heapDeltaBytes": -59450348,
      "heapUsedBytes": 167188196,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10952704,
      "scriptDurationMs": 588.865,
      "eventListeners": -16391,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16549.85399999998,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16533.498000000003,
      "heapDeltaBytes": -35690952,
      "heapUsedBytes": 177110476,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11214848,
      "scriptDurationMs": 509.82600000000014,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20564.899000000027,
      "styleRecalcs": 142,
      "styleRecalcDurationMs": 19.246999999999957,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20505.537999999997,
      "heapDeltaBytes": -32781444,
      "heapUsedBytes": 177307792,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8925184,
      "scriptDurationMs": 874.265,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 174,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20585.44800000004,
      "styleRecalcs": 141,
      "styleRecalcDurationMs": 16.645999999999994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20537.396999999997,
      "heapDeltaBytes": -35188628,
      "heapUsedBytes": 174033556,
      "domNodes": -8316,
      "jsHeapTotalBytes": -13643776,
      "scriptDurationMs": 895.268,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 233,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 130.70899999996755,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 17.887999999999998,
      "layouts": 4,
      "layoutDurationMs": 1.517,
      "taskDurationMs": 111.39900000000002,
      "heapDeltaBytes": -16701060,
      "heapUsedBytes": 50917732,
      "domNodes": 205,
      "jsHeapTotalBytes": 7192576,
      "scriptDurationMs": 7.519999999999999,
      "eventListeners": 79,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "workflow-execution",
      "durationMs": 463.7729999999465,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 17.770999999999997,
      "layouts": 3,
      "layoutDurationMs": 0.4810000000000001,
      "taskDurationMs": 115.83699999999999,
      "heapDeltaBytes": -15736064,
      "heapUsedBytes": 51856980,
      "domNodes": 123,
      "jsHeapTotalBytes": 6930432,
      "scriptDurationMs": 8.642000000000001,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@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.49   #14913   +/-   ##
=============================================
  Coverage              ?   79.03%           
=============================================
  Files                 ?     1853           
  Lines                 ?   109089           
  Branches              ?    34370           
=============================================
  Hits                  ?    86216           
  Misses                ?    22428           
  Partials              ?      445           
Flag Coverage Δ
unit 71.73% <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 97.54% <100.00%> (ø)
src/components/toast/GlobalToast.vue 65.95% <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 29da0a1 into cloud/1.49 Aug 7, 2026
77 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-14910-to-cloud-1.49 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