Skip to content

[backport cloud/1.51] feat: align local settings with V1 billing layout (FE-1609) - #15589

Merged
comfy-pr-bot merged 1 commit into
cloud/1.51from
backport-15239-to-cloud-1.51
Aug 22, 2026
Merged

[backport cloud/1.51] feat: align local settings with V1 billing layout (FE-1609)#15589
comfy-pr-bot merged 1 commit into
cloud/1.51from
backport-15239-to-cloud-1.51

Conversation

@comfy-pr-bot

Copy link
Copy Markdown
Member

Backport of #15239 to cloud/1.51

Automatically created by backport workflow.

## Why

Settings currently builds separate local and cloud navigation trees, and
cloud's V1 workspace sections are additionally gated by
`billing_control_enabled`. This leaves local and flag-off users on the
legacy Workspace/Credits organization and forces billing work to target
two layouts.

The [latest product direction in
Slack](https://comfy-organization.slack.com/archives/C0BNGQG2LCW/p1786668631144379?thread_ts=1786649682.983289&cid=C0BNGQG2LCW)
clarifies that Activity should reuse `UsageLogsTable` for both personal
and team workspaces until the backend-backed workspace activity feed is
available.

## What changed

- Use the V1 Workspace / Account / General / Other sidebar organization
for logged-in local and cloud users.
- Always expose Plan & Credits and Members as workspace sections; keep
the owner-only Allowlist policy unchanged.
- Keep the legacy local Credits entry reachable so existing profile-menu
and top-up flows continue to work.
- Render the existing `UsageLogsTable` in Activity for personal and team
workspaces, remove the obsolete search field, and report refresh
failures.
- Preserve `WorkspaceActivityContent` unchanged for FE-1249.

## AS IS / TO BE

### AS IS — current local Credits settings

![Current local Credits settings with legacy Account and Application
Settings
grouping](https://ampcode.com/user-content/artifacts/736a6cfaafead9868352c7f1a5fcd4c9850ae2d21c7d994f37bf7aa8932b8975-file.png)

Source: [current local settings screenshot from the product
thread](https://comfy-organization.slack.com/archives/C0BNGQG2LCW/p1786651103082259?thread_ts=1786649682.983289&cid=C0BNGQG2LCW).

### TO BE — local V1 workspace layout

![Local V1 settings with Workspace and General
grouping](https://ampcode.com/user-content/artifacts/d62d83edd3f6f0c0f5b27d209ec340dab403afa9546cade29daef46a9282c9c1-file.png)

Source: [local unsubscribed V1 frame in
Figma](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5874-71646).

### IMPLEMENTED — local Activity tab

![Local Plan & Credits Activity tab using
UsageLogsTable](https://ampcode.com/user-content/artifacts/bb6000311c626dc9faba1a444fd5d3017e288bd3bece120968a8aa7988aab282-file.png)

Captured from the local distribution with mocked activity events.

| Area | AS IS | TO BE |
| --- | --- | --- |
| Settings navigation | Local and flag-off users use the legacy grouping
and Workspace panel, while cloud users can receive the V1 structure. |
All logged-in local and cloud users share the V1 Workspace / Account /
General / Other organization. |
| Workspace billing | Plan & Credits and Members depend on cloud/billing
configuration. | Plan & Credits and Members are consistently surfaced
under Workspace; existing owner-only policy rules remain unchanged. |
| Activity | Uses the placeholder workspace ledger and search path. |
Reuses the paginated `UsageLogsTable` backed by billing events for
personal and team workspaces, with the obsolete search removed. |
| Existing local flows | Credits navigation is coupled to the legacy
local settings structure. | The existing local Credits route remains
reachable for profile-menu and top-up flows while the V1 workspace
sections are also available. |
| Future workspace activity | The backend-dependent activity
implementation is blocked. | `WorkspaceActivityContent` stays intact for
FE-1249 and can replace the stopgap once backend data is available. |

## Design references

- [Unified V1 Tab Layout for Local &
Cloud](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=6258-41203)
— local unsubscribed, cloud unsubscribed, and subscribed settings
variants
- [Credits / Plan & Credits tab
variants](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5874-72767)
— Overview/Credits and Activity states
- [Profile menu
updates](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=6258-41204)
— aligned billing navigation labels and entry points
- [Settings sidebar
reference](https://www.figma.com/design/CkFTD4c20PyRGpNVAJgpfV/Team-Plan---Workspaces?node-id=5999-37953)

Based on the approach in draft PRs #15206 and #15219, rebuilt from
`main`.

## Verification

- `pnpm test:unit src/platform/settings/composables/useSettingUI.test.ts
src/platform/workspace/components/dialogs/settings/PlanCreditsPanelContent.test.ts`
(18 passed)
- `pnpm test:unit src/platform/workspace` (1,118 passed)
- `pnpm typecheck`
- Targeted oxlint and ESLint (0 warnings/errors)
- `pnpm format:check` for changed files

FE-1609

---------

Co-authored-by: Amp <amp@ampcode.com>
@comfy-pr-bot comfy-pr-bot added the backport Backporting a PR onto a release candidate label Aug 21, 2026
@comfy-pr-bot
comfy-pr-bot enabled auto-merge (squash) August 21, 2026 23:35
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown

🎭 Playwright: ✅ 1829 passed, 0 failed

📊 Browser Reports
  • chromium: View Report (✅ 1808 / ❌ 0 / ⚠️ 0 / ⏭️ 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/21/2026, 11:36:55 PM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.2 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.5 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.2 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.1 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.0 MB heap
large-graph-pan: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.4 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 75.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.1 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.0 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.8 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 59.0 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 81ms TBT · 77.1 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.7 MB heap
vue-large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 162.9 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 23ms TBT · 165.4 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.4 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 5ms
canvas-idle: layout count 0
canvas-idle: style recalc count 11
canvas-idle: task duration 324ms
canvas-idle: script duration 4ms
canvas-idle: TBT 0ms
canvas-idle: heap used 67.2 MB
canvas-idle: DOM nodes 21
canvas-idle: event listeners 6
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 2ms
canvas-mouse-sweep: style recalc duration 20ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 72
canvas-mouse-sweep: task duration 520ms
canvas-mouse-sweep: script duration 59ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 62.5 MB
canvas-mouse-sweep: DOM nodes 55
canvas-mouse-sweep: event listeners 4
canvas-zoom-sweep: avg frame time 17ms
canvas-zoom-sweep: p95 frame time 17ms
canvas-zoom-sweep: layout duration 0ms
canvas-zoom-sweep: style recalc duration 10ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 30
canvas-zoom-sweep: task duration 235ms
canvas-zoom-sweep: script duration 6ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 70.2 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 5ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 15
dom-widget-clipping: task duration 232ms
dom-widget-clipping: script duration 29ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 51.1 MB
dom-widget-clipping: DOM nodes 24
dom-widget-clipping: event listeners 2
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 4ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 10
large-graph-idle: task duration 414ms
large-graph-idle: script duration 8ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 68.0 MB
large-graph-idle: DOM nodes -282
large-graph-idle: event listeners -162
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 8ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 69
large-graph-pan: task duration 755ms
large-graph-pan: script duration 202ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 62.4 MB
large-graph-pan: DOM nodes -283
large-graph-pan: event listeners -162
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 4ms
large-graph-zoom: style recalc duration 9ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 67
large-graph-zoom: task duration 789ms
large-graph-zoom: script duration 204ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 75.7 MB
large-graph-zoom: DOM nodes 18
large-graph-zoom: event listeners 8
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 5ms
minimap-idle: layout count 0
minimap-idle: style recalc count 10
minimap-idle: task duration 426ms
minimap-idle: script duration 8ms
minimap-idle: TBT 0ms
minimap-idle: heap used 72.1 MB
minimap-idle: DOM nodes -281
minimap-idle: event listeners -147
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 7ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 48
subgraph-dom-widget-clipping: task duration 238ms
subgraph-dom-widget-clipping: script duration 67ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 53.0 MB
subgraph-dom-widget-clipping: DOM nodes 22
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 5ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 11
subgraph-idle: task duration 311ms
subgraph-idle: script duration 4ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 67.8 MB
subgraph-idle: DOM nodes 22
subgraph-idle: event listeners 6
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 2ms
subgraph-mouse-sweep: style recalc duration 21ms
subgraph-mouse-sweep: layout count 17
subgraph-mouse-sweep: style recalc count 78
subgraph-mouse-sweep: task duration 465ms
subgraph-mouse-sweep: script duration 44ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 59.0 MB
subgraph-mouse-sweep: DOM nodes 64
subgraph-mouse-sweep: event listeners 4
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 7ms
subgraph-transition-enter: style recalc duration 20ms
subgraph-transition-enter: layout count 15
subgraph-transition-enter: style recalc count 20
subgraph-transition-enter: task duration 573ms
subgraph-transition-enter: script duration 9ms
subgraph-transition-enter: TBT 81ms
subgraph-transition-enter: heap used 77.1 MB
subgraph-transition-enter: DOM nodes 13673
subgraph-transition-enter: event listeners 2373
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 20ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 249
viewport-pan-sweep: task duration 2570ms
viewport-pan-sweep: script duration 596ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 70.7 MB
viewport-pan-sweep: DOM nodes -281
viewport-pan-sweep: event listeners -133
vue-large-graph-idle: avg frame time 17ms
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 8421ms
vue-large-graph-idle: script duration 45ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 162.9 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16393
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 10ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 67
vue-large-graph-pan: task duration 10774ms
vue-large-graph-pan: script duration 285ms
vue-large-graph-pan: TBT 23ms
vue-large-graph-pan: heap used 165.4 MB
vue-large-graph-pan: DOM nodes -8314
vue-large-graph-pan: event listeners -16388
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 12ms
workflow-execution: layout count 3
workflow-execution: style recalc count 16
workflow-execution: task duration 80ms
workflow-execution: script duration 5ms
workflow-execution: TBT 0ms
workflow-execution: heap used 66.4 MB
workflow-execution: DOM nodes 138
workflow-execution: event listeners 99
Raw data
{
  "timestamp": "2026-08-21T23:45:26.297Z",
  "gitSha": "6a55350aa11850e64bfe0d76a34780a564ef4b4b",
  "branch": "backport-15239-to-cloud-1.51",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2021.4490000000183,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 5.498000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 345.17199999999997,
      "heapDeltaBytes": 5077420,
      "heapUsedBytes": 70489812,
      "domNodes": 22,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 4.727,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 1990.1370000000043,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 4.877,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 303.783,
      "heapDeltaBytes": 4932184,
      "heapUsedBytes": 70534304,
      "domNodes": 20,
      "jsHeapTotalBytes": 23855104,
      "scriptDurationMs": 4.1209999999999996,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1711.8990000000167,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 21.232999999999997,
      "layouts": 12,
      "layoutDurationMs": 2.261,
      "taskDurationMs": 552.984,
      "heapDeltaBytes": 44384,
      "heapUsedBytes": 65432164,
      "domNodes": 53,
      "jsHeapTotalBytes": 24645632,
      "scriptDurationMs": 63.21300000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1673.6250000000155,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 18.137,
      "layouts": 12,
      "layoutDurationMs": 1.6590000000000003,
      "taskDurationMs": 487.364,
      "heapDeltaBytes": 54384,
      "heapUsedBytes": 65620636,
      "domNodes": 56,
      "jsHeapTotalBytes": 24907776,
      "scriptDurationMs": 54.778999999999996,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1716.8439999999805,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 10.34,
      "layouts": 6,
      "layoutDurationMs": 0.36299999999999993,
      "taskDurationMs": 232.323,
      "heapDeltaBytes": 7981864,
      "heapUsedBytes": 73443012,
      "domNodes": 78,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 5.844000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1668.4599999999818,
      "styleRecalcs": 29,
      "styleRecalcDurationMs": 9.772000000000002,
      "layouts": 6,
      "layoutDurationMs": 0.3979999999999999,
      "taskDurationMs": 236.933,
      "heapDeltaBytes": 8307364,
      "heapUsedBytes": 73818448,
      "domNodes": 78,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 5.6209999999999996,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 390.1910000000157,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 5.195999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 236.23799999999997,
      "heapDeltaBytes": -11851568,
      "heapUsedBytes": 53540512,
      "domNodes": 24,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 27.726,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 391.9819999999845,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 5.073000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 227.61899999999997,
      "heapDeltaBytes": -11808304,
      "heapUsedBytes": 53583772,
      "domNodes": 24,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 29.344,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.799999999999727
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2012.2119999999768,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 4.175,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 415.566,
      "heapDeltaBytes": 12521628,
      "heapUsedBytes": 73167516,
      "domNodes": -283,
      "jsHeapTotalBytes": 3506176,
      "scriptDurationMs": 9.395000000000001,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 1998.312999999996,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 4.773999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 412.924,
      "heapDeltaBytes": 9025048,
      "heapUsedBytes": 69399896,
      "domNodes": -280,
      "jsHeapTotalBytes": 2981888,
      "scriptDurationMs": 7.389999999999997,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2078.109999999981,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 8.622,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 766.7190000000002,
      "heapDeltaBytes": 9975780,
      "heapUsedBytes": 71557516,
      "domNodes": -283,
      "jsHeapTotalBytes": 3960832,
      "scriptDurationMs": 209.62900000000002,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2093.9710000000105,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 8.204999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 743.452,
      "heapDeltaBytes": -2212036,
      "heapUsedBytes": 59390632,
      "domNodes": -282,
      "jsHeapTotalBytes": 3174400,
      "scriptDurationMs": 194.26399999999998,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3063.6989999999855,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 9.421000000000001,
      "layouts": 60,
      "layoutDurationMs": 4.417000000000001,
      "taskDurationMs": 805.2450000000001,
      "heapDeltaBytes": 16517384,
      "heapUsedBytes": 79259056,
      "domNodes": 18,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 203.38400000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3021.8169999999986,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 8.75,
      "layouts": 60,
      "layoutDurationMs": 4.34,
      "taskDurationMs": 773.076,
      "heapDeltaBytes": 16384064,
      "heapUsedBytes": 79441356,
      "domNodes": 18,
      "jsHeapTotalBytes": 5767168,
      "scriptDurationMs": 204.14600000000002,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2001.1749999999893,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 4.874999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 403.21399999999994,
      "heapDeltaBytes": 12897492,
      "heapUsedBytes": 76315860,
      "domNodes": -280,
      "jsHeapTotalBytes": 3244032,
      "scriptDurationMs": 7.181,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2007.8649999999243,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 5.309000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 449.7559999999999,
      "heapDeltaBytes": 13249424,
      "heapUsedBytes": 74913720,
      "domNodes": -282,
      "jsHeapTotalBytes": 2981888,
      "scriptDurationMs": 8.868,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 425.1729999999725,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 6.7170000000000005,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 246.13100000000003,
      "heapDeltaBytes": -10012364,
      "heapUsedBytes": 55643964,
      "domNodes": 22,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 66.05999999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 420.7979999999907,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 6.851,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 230.235,
      "heapDeltaBytes": -9977092,
      "heapUsedBytes": 55568804,
      "domNodes": 22,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 67.093,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1991.7310000000157,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 5.183999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 301.87199999999996,
      "heapDeltaBytes": 5529324,
      "heapUsedBytes": 71129104,
      "domNodes": 22,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 3.941,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2003.0780000000163,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 5.701,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 319.141,
      "heapDeltaBytes": 5474156,
      "heapUsedBytes": 71130440,
      "domNodes": 22,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 4.612,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1672.1919999999955,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 22.386999999999997,
      "layouts": 16,
      "layoutDurationMs": 2.6159999999999997,
      "taskDurationMs": 472.993,
      "heapDeltaBytes": -3650304,
      "heapUsedBytes": 61860720,
      "domNodes": 63,
      "jsHeapTotalBytes": 23592960,
      "scriptDurationMs": 44.629000000000005,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1674.303000000009,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 19.264,
      "layouts": 17,
      "layoutDurationMs": 2.292,
      "taskDurationMs": 457.62,
      "heapDeltaBytes": -3614660,
      "heapUsedBytes": 61862700,
      "domNodes": 65,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 42.52,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 799.4019999999864,
      "styleRecalcs": 20,
      "styleRecalcDurationMs": 19.604999999999997,
      "layouts": 15,
      "layoutDurationMs": 7.140000000000002,
      "taskDurationMs": 573.0649999999999,
      "heapDeltaBytes": -4021216,
      "heapUsedBytes": 80821412,
      "domNodes": 13673,
      "jsHeapTotalBytes": 10223616,
      "scriptDurationMs": 8.998,
      "eventListeners": 2373,
      "totalBlockingTimeMs": 81,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8087.20500000004,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 19.584,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 2553.4410000000003,
      "heapDeltaBytes": 15252248,
      "heapUsedBytes": 75909200,
      "domNodes": -282,
      "jsHeapTotalBytes": 3436544,
      "scriptDurationMs": 606.749,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8061.149,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 20.041000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 2586.3619999999996,
      "heapDeltaBytes": 10281124,
      "heapUsedBytes": 72321960,
      "domNodes": -280,
      "jsHeapTotalBytes": 3436544,
      "scriptDurationMs": 586.2429999999999,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 9033.644000000038,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 8268.479000000001,
      "heapDeltaBytes": -36839164,
      "heapUsedBytes": 175021776,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11472896,
      "scriptDurationMs": 38.56699999999999,
      "eventListeners": -16393,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 9517.021000000113,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 8573.768999999998,
      "heapDeltaBytes": -30775280,
      "heapUsedBytes": 166678512,
      "domNodes": -8312,
      "jsHeapTotalBytes": -6496256,
      "scriptDurationMs": 50.43300000000001,
      "eventListeners": -16393,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 11734.601999999995,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 10.809999999999986,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 10997.520999999999,
      "heapDeltaBytes": -29030932,
      "heapUsedBytes": 169433684,
      "domNodes": -8316,
      "jsHeapTotalBytes": -15179776,
      "scriptDurationMs": 321.412,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 45,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 11463.456000000064,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 9.992999999999974,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 10550.43,
      "heapDeltaBytes": -35608240,
      "heapUsedBytes": 177381972,
      "domNodes": -8312,
      "jsHeapTotalBytes": -6303744,
      "scriptDurationMs": 249.209,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 458.48499999999603,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 14.320999999999998,
      "layouts": 3,
      "layoutDurationMs": 0.852,
      "taskDurationMs": 95.59399999999998,
      "heapDeltaBytes": 5093380,
      "heapUsedBytes": 69667760,
      "domNodes": 152,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 5.451,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999727
    },
    {
      "name": "workflow-execution",
      "durationMs": 419.36500000008436,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 9.956000000000001,
      "layouts": 2,
      "layoutDurationMs": 0.2459999999999999,
      "taskDurationMs": 64.27000000000001,
      "heapDeltaBytes": 4951008,
      "heapUsedBytes": 69521760,
      "domNodes": 123,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 4.906000000000001,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.663333333333338,
      "p95FrameDurationMs": 16.799999999999727
    }
  ]
}

@github-actions github-actions Bot added the risk:R3 PR risk grade (advisory shadow check; grader-owned) label Aug 21, 2026
@github-actions
github-actions Bot requested a review from AustinMroz August 21, 2026 23:36
@codecov

codecov Bot commented Aug 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 70.00000% with 9 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...components/dialog/content/setting/CreditsPanel.vue 18.18% 9 Missing ⚠️
@@              Coverage Diff              @@
##             cloud/1.51   #15589   +/-   ##
=============================================
  Coverage              ?   81.52%           
=============================================
  Files                 ?     1884           
  Lines                 ?   117704           
  Branches              ?    37242           
=============================================
  Hits                  ?    95961           
  Misses                ?    21272           
  Partials              ?      471           
Flag Coverage Δ
unit 73.11% <70.00%> (?)

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

Files with missing lines Coverage Δ
src/platform/settings/composables/useSettingUI.ts 86.06% <100.00%> (ø)
...nents/dialogs/settings/PlanCreditsPanelContent.vue 100.00% <100.00%> (ø)
...components/dialog/content/setting/CreditsPanel.vue 10.52% <18.18%> (ø)
🚀 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 1828973 into cloud/1.51 Aug 22, 2026
88 of 90 checks passed
@comfy-pr-bot
comfy-pr-bot deleted the backport-15239-to-cloud-1.51 branch August 22, 2026 01:50
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 risk:R3 PR risk grade (advisory shadow check; grader-owned) size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants