Skip to content

test: clear local storage before each test - #15053

Merged
DrJKL merged 1 commit into
mainfrom
test/global-vitest-local-storage-cleanup
Aug 11, 2026
Merged

test: clear local storage before each test#15053
DrJKL merged 1 commit into
mainfrom
test/global-vitest-local-storage-cleanup

Conversation

@DrJKL

@DrJKL DrJKL commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Child of #15052. Give every test a clean localStorage baseline through the shared Vitest setup.

beforeEach(() => {
  globalThis.localStorage?.clear()
})

The optional access keeps the shared setup compatible with the website and object-parser projects, which use Vitest's Node environment and do not expose localStorage.

Audit results

Classification Calls Outcome
Test-boundary setup/teardown 50 Removed as globally redundant
Intra-test fast-check run isolation 1 Retained
Total audited 51 30 test files

The retained call separates generated command sequences and shrink attempts inside a single Vitest test. A global beforeEach cannot replace it.

The cleanup also removes empty hooks, stale comments, and unused lifecycle imports. Net diff: 10 additions and 106 deletions across 31 files.

Validation

Project Test files Passed Skipped Failed
Root 1,159 15,896 8 0
Desktop UI 16 125 0 0
Website 41 387 0 0
Object info parser 4 33 0 0

Also passed:

  • pnpm typecheck
  • pnpm lint (six pre-existing warnings, zero errors)
  • oxfmt and type-aware Oxlint on all changed files
  • pre-push pnpm knip --cache

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

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

📊 Browser Reports
  • chromium: View Report (✅ 1783 / ❌ 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)

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/11/2026, 11:09:37 PM UTC

Links

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.4 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 46.1 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.8 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 50.7 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.3 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.5 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.4 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.2 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.0 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 46.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 119ms TBT · 94.8 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.2 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.7 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 229ms TBT · 158.1 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.5 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 8ms
canvas-idle: layout count 0
canvas-idle: style recalc count 10
canvas-idle: task duration 500ms
canvas-idle: script duration 16ms
canvas-idle: TBT 0ms
canvas-idle: heap used 55.4 MB
canvas-idle: DOM nodes 13
canvas-idle: event listeners 4
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 8ms
canvas-mouse-sweep: style recalc duration 42ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 76
canvas-mouse-sweep: task duration 906ms
canvas-mouse-sweep: script duration 117ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 46.1 MB
canvas-mouse-sweep: DOM nodes -283
canvas-mouse-sweep: event listeners -168
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 16ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 32
canvas-zoom-sweep: task duration 379ms
canvas-zoom-sweep: script duration 19ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 69.8 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 8ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 12
dom-widget-clipping: task duration 395ms
dom-widget-clipping: script duration 60ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 50.7 MB
dom-widget-clipping: DOM nodes 19
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 7ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 9
large-graph-idle: task duration 680ms
large-graph-idle: script duration 93ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 63.3 MB
large-graph-idle: DOM nodes -282
large-graph-idle: event listeners -149
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 15ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 69
large-graph-pan: task duration 1219ms
large-graph-pan: script duration 399ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 61.0 MB
large-graph-pan: DOM nodes -283
large-graph-pan: event listeners -148
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 1488ms
large-graph-zoom: script duration 515ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 57.5 MB
large-graph-zoom: DOM nodes -290
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 9
minimap-idle: task duration 676ms
minimap-idle: script duration 94ms
minimap-idle: TBT 0ms
minimap-idle: heap used 64.4 MB
minimap-idle: DOM nodes -284
minimap-idle: event listeners -148
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 10ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 396ms
subgraph-dom-widget-clipping: script duration 121ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 51.2 MB
subgraph-dom-widget-clipping: DOM nodes 20
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 7ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 516ms
subgraph-idle: script duration 14ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 56.0 MB
subgraph-idle: DOM nodes -131
subgraph-idle: event listeners -74
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 34ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 75
subgraph-mouse-sweep: task duration 777ms
subgraph-mouse-sweep: script duration 84ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 46.2 MB
subgraph-mouse-sweep: DOM nodes -281
subgraph-mouse-sweep: event listeners -153
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 11ms
subgraph-transition-enter: style recalc duration 28ms
subgraph-transition-enter: layout count 13
subgraph-transition-enter: style recalc count 17
subgraph-transition-enter: task duration 921ms
subgraph-transition-enter: script duration 34ms
subgraph-transition-enter: TBT 119ms
subgraph-transition-enter: heap used 94.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 40ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 250
viewport-pan-sweep: task duration 4241ms
viewport-pan-sweep: script duration 1291ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 68.2 MB
viewport-pan-sweep: DOM nodes -281
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 17444ms
vue-large-graph-idle: script duration 551ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 159.7 MB
vue-large-graph-idle: DOM nodes -8312
vue-large-graph-idle: event listeners -16386
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 145
vue-large-graph-pan: task duration 21315ms
vue-large-graph-pan: script duration 905ms
vue-large-graph-pan: TBT 229ms
vue-large-graph-pan: heap used 158.1 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16382
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 19ms
workflow-execution: layout count 2
workflow-execution: style recalc count 11
workflow-execution: task duration 106ms
workflow-execution: script duration 9ms
workflow-execution: TBT 0ms
workflow-execution: heap used 64.5 MB
workflow-execution: DOM nodes 119
workflow-execution: event listeners 74
Raw data
{
  "timestamp": "2026-08-11T22:31:56.319Z",
  "gitSha": "756a330ab3616e7c0f7d9e603bfd308124a8e636",
  "branch": "test/global-vitest-local-storage-cleanup",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2061.128999999994,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.581,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 524.723,
      "heapDeltaBytes": -18724384,
      "heapUsedBytes": 45599740,
      "domNodes": 6,
      "jsHeapTotalBytes": 22781952,
      "scriptDurationMs": 16.636,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2045.39699999998,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.759,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 474.743,
      "heapDeltaBytes": 5869680,
      "heapUsedBytes": 70635712,
      "domNodes": 20,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 15.831999999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1922.5110000000143,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 48.034000000000006,
      "layouts": 12,
      "layoutDurationMs": 11.84,
      "taskDurationMs": 954.1290000000001,
      "heapDeltaBytes": -14222772,
      "heapUsedBytes": 50195968,
      "domNodes": -282,
      "jsHeapTotalBytes": 24616960,
      "scriptDurationMs": 123.736,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1791.0360000000196,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 35.55500000000001,
      "layouts": 12,
      "layoutDurationMs": 3.718,
      "taskDurationMs": 857.391,
      "heapDeltaBytes": -17921680,
      "heapUsedBytes": 46517224,
      "domNodes": -283,
      "jsHeapTotalBytes": 23830528,
      "scriptDurationMs": 111.215,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1738.027000000045,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 16.091,
      "layouts": 6,
      "layoutDurationMs": 0.6199999999999999,
      "taskDurationMs": 383.60499999999996,
      "heapDeltaBytes": 8774472,
      "heapUsedBytes": 73150460,
      "domNodes": 77,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 18.642000000000003,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1737.940999999978,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.467,
      "layouts": 6,
      "layoutDurationMs": 0.737,
      "taskDurationMs": 374.556,
      "heapDeltaBytes": 8644828,
      "heapUsedBytes": 73159764,
      "domNodes": 79,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 18.723,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 628.2180000000039,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 7.304999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 416.28,
      "heapDeltaBytes": -11155908,
      "heapUsedBytes": 53131180,
      "domNodes": 18,
      "jsHeapTotalBytes": 25690112,
      "scriptDurationMs": 63.267999999999994,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 595.8799999999655,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 7.771999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 374.711,
      "heapDeltaBytes": -11213648,
      "heapUsedBytes": 53252824,
      "domNodes": 20,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 56.283,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2030.5930000000103,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.675000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 687.8220000000001,
      "heapDeltaBytes": -16354032,
      "heapUsedBytes": 65563920,
      "domNodes": -282,
      "jsHeapTotalBytes": 8597504,
      "scriptDurationMs": 94.486,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2025.5119999999351,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.515999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 672.274,
      "heapDeltaBytes": 6734708,
      "heapUsedBytes": 67246812,
      "domNodes": -281,
      "jsHeapTotalBytes": 4034560,
      "scriptDurationMs": 91.99300000000001,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2158.5640000000126,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 15.420000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1225.123,
      "heapDeltaBytes": 2042996,
      "heapUsedBytes": 62479984,
      "domNodes": -281,
      "jsHeapTotalBytes": 3964928,
      "scriptDurationMs": 399.545,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2137.2900000000072,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 13.627000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1212.8719999999998,
      "heapDeltaBytes": 4594804,
      "heapUsedBytes": 65425372,
      "domNodes": -285,
      "jsHeapTotalBytes": 3964928,
      "scriptDurationMs": 399.011,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3229.026000000033,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 14.698999999999996,
      "layouts": 60,
      "layoutDurationMs": 7.873,
      "taskDurationMs": 1495.5500000000002,
      "heapDeltaBytes": -1650712,
      "heapUsedBytes": 61208044,
      "domNodes": -289,
      "jsHeapTotalBytes": 6656000,
      "scriptDurationMs": 519.361,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3180.2750000000515,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.313000000000002,
      "layouts": 60,
      "layoutDurationMs": 7.942999999999999,
      "taskDurationMs": 1481.3550000000002,
      "heapDeltaBytes": -3594136,
      "heapUsedBytes": 59328820,
      "domNodes": -291,
      "jsHeapTotalBytes": 6656000,
      "scriptDurationMs": 509.917,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2036.4289999999983,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.473,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 673.8899999999999,
      "heapDeltaBytes": 6847880,
      "heapUsedBytes": 67465044,
      "domNodes": -283,
      "jsHeapTotalBytes": 3510272,
      "scriptDurationMs": 93.18499999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2035.229999999956,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 7.087999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 678.741,
      "heapDeltaBytes": 6838308,
      "heapUsedBytes": 67569316,
      "domNodes": -284,
      "jsHeapTotalBytes": 3248128,
      "scriptDurationMs": 94.89799999999998,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 573.5099999999989,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.307999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.458,
      "heapDeltaBytes": -11039696,
      "heapUsedBytes": 53582624,
      "domNodes": 18,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 122.37699999999998,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 568.9750000000231,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 10.866000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.54,
      "heapDeltaBytes": -10749748,
      "heapUsedBytes": 53786344,
      "domNodes": 22,
      "jsHeapTotalBytes": 25952256,
      "scriptDurationMs": 120.51200000000001,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2019.8669999999765,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.088000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 520.0429999999999,
      "heapDeltaBytes": 5935736,
      "heapUsedBytes": 70387480,
      "domNodes": 18,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 13.883999999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2027.5500000000193,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.518,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 511.14400000000006,
      "heapDeltaBytes": -17375588,
      "heapUsedBytes": 47077280,
      "domNodes": -280,
      "jsHeapTotalBytes": 23044096,
      "scriptDurationMs": 13.572,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1713.6069999999677,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 34.337,
      "layouts": 16,
      "layoutDurationMs": 4.2299999999999995,
      "taskDurationMs": 779.832,
      "heapDeltaBytes": -16667952,
      "heapUsedBytes": 48021104,
      "domNodes": -280,
      "jsHeapTotalBytes": 23044096,
      "scriptDurationMs": 82.58500000000001,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1712.5250000000278,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 33.503,
      "layouts": 16,
      "layoutDurationMs": 3.962,
      "taskDurationMs": 773.51,
      "heapDeltaBytes": -15693264,
      "heapUsedBytes": 48928524,
      "domNodes": -281,
      "jsHeapTotalBytes": 21471232,
      "scriptDurationMs": 85.787,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1384.568999999999,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 28.384,
      "layouts": 13,
      "layoutDurationMs": 11.113999999999999,
      "taskDurationMs": 921.3360000000001,
      "heapDeltaBytes": 31068396,
      "heapUsedBytes": 99451984,
      "domNodes": 13673,
      "jsHeapTotalBytes": 15466496,
      "scriptDurationMs": 33.904,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 119,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8214.646000000015,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 40.391999999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4261.169,
      "heapDeltaBytes": 12042500,
      "heapUsedBytes": 71493044,
      "domNodes": -280,
      "jsHeapTotalBytes": 5799936,
      "scriptDurationMs": 1281.615,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8201.404999999908,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 39.782,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4220.5779999999995,
      "heapDeltaBytes": 11461004,
      "heapUsedBytes": 71462740,
      "domNodes": -282,
      "jsHeapTotalBytes": 5537792,
      "scriptDurationMs": 1301.123,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17591.050999999992,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17575.63,
      "heapDeltaBytes": -38808104,
      "heapUsedBytes": 166903768,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8589312,
      "scriptDurationMs": 546.8369999999999,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17356.640999999967,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17312.604,
      "heapDeltaBytes": -49109464,
      "heapUsedBytes": 168050056,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8593408,
      "scriptDurationMs": 554.815,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21249.62400000004,
      "styleRecalcs": 143,
      "styleRecalcDurationMs": 17.887999999999987,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21206.533,
      "heapDeltaBytes": -35072708,
      "heapUsedBytes": 164827456,
      "domNodes": -8312,
      "jsHeapTotalBytes": -11739136,
      "scriptDurationMs": 924.794,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 233,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21450.81800000003,
      "styleRecalcs": 146,
      "styleRecalcDurationMs": 18.079999999999984,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21423.804,
      "heapDeltaBytes": -39897624,
      "heapUsedBytes": 166816948,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9117696,
      "scriptDurationMs": 884.536,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 224,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 454.36699999999064,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 21.592,
      "layouts": 3,
      "layoutDurationMs": 0.697,
      "taskDurationMs": 116.96600000000001,
      "heapDeltaBytes": 5068452,
      "heapUsedBytes": 68459304,
      "domNodes": 128,
      "jsHeapTotalBytes": 4718592,
      "scriptDurationMs": 11.910000000000002,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 137.85699999993994,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 16.541,
      "layouts": 1,
      "layoutDurationMs": 0.3600000000000001,
      "taskDurationMs": 95.576,
      "heapDeltaBytes": 3136620,
      "heapUsedBytes": 66752076,
      "domNodes": 110,
      "jsHeapTotalBytes": 2883584,
      "scriptDurationMs": 5.772999999999999,
      "eventListeners": 49,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66666666666665,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ec06a7ff-ed75-428f-a16c-2855ff3bbb39

📥 Commits

Reviewing files that changed from the base of the PR and between 2bdf764 and bb573d8.

📒 Files selected for processing (31)
  • src/components/TopMenuSection.test.ts
  • src/components/actionbar/ComfyActionbar.test.ts
  • src/composables/maskeditor/useBrushPersistence.test.ts
  • src/composables/useFeatureFlags.test.ts
  • src/composables/useRunButtonTelemetry.test.ts
  • src/platform/cloud/subscription/components/CreditsTile.test.ts
  • src/platform/surveys/ErrorPanelSurveyCta.test.ts
  • src/platform/surveys/NightlySurveyPopover.test.ts
  • src/platform/surveys/useFeatureUsageTracker.test.ts
  • src/platform/surveys/useSurveyEligibility.test.ts
  • src/platform/surveys/useSurveyFeatureTracking.test.ts
  • src/platform/telemetry/initHostTelemetry.test.ts
  • src/platform/telemetry/manualRefreshTracker.test.ts
  • src/platform/telemetry/providers/cloud/GtmTelemetryProvider.test.ts
  • src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.test.ts
  • src/platform/telemetry/topupTracker.test.ts
  • src/platform/telemetry/utils/__tests__/checkoutAttribution.test.ts
  • src/platform/telemetry/utils/getActionbarDockState.test.ts
  • src/platform/telemetry/utils/getShellLayoutSnapshot.test.ts
  • src/platform/workflow/management/stores/workflowStore.test.ts
  • src/platform/workflow/persistence/base/storageIO.test.ts
  • src/platform/workflow/persistence/composables/useWorkflowPersistenceV2.test.ts
  • src/platform/workflow/persistence/migration/migrateV1toV2.test.ts
  • src/platform/workflow/persistence/stores/workflowDraftStoreV2.fsm.test.ts
  • src/platform/workflow/persistence/stores/workflowDraftStoreV2.test.ts
  • src/scripts/api.featureFlags.test.ts
  • src/scripts/api.sessionOverride.test.ts
  • src/stores/userStore.test.ts
  • src/utils/devFeatureFlagOverride.test.ts
  • src/workbench/extensions/manager/composables/useConflictAcknowledgment.test.ts
  • vitest.timer.setup.ts
💤 Files with no reviewable changes (21)
  • src/platform/telemetry/initHostTelemetry.test.ts
  • src/platform/telemetry/manualRefreshTracker.test.ts
  • src/platform/workflow/persistence/stores/workflowDraftStoreV2.fsm.test.ts
  • src/platform/workflow/management/stores/workflowStore.test.ts
  • src/platform/telemetry/utils/tests/checkoutAttribution.test.ts
  • src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.test.ts
  • src/platform/workflow/persistence/composables/useWorkflowPersistenceV2.test.ts
  • src/platform/workflow/persistence/base/storageIO.test.ts
  • src/platform/workflow/persistence/stores/workflowDraftStoreV2.test.ts
  • src/components/actionbar/ComfyActionbar.test.ts
  • src/stores/userStore.test.ts
  • src/composables/maskeditor/useBrushPersistence.test.ts
  • src/platform/telemetry/utils/getShellLayoutSnapshot.test.ts
  • src/platform/telemetry/providers/cloud/GtmTelemetryProvider.test.ts
  • src/components/TopMenuSection.test.ts
  • src/scripts/api.sessionOverride.test.ts
  • src/scripts/api.featureFlags.test.ts
  • src/composables/useFeatureFlags.test.ts
  • src/platform/workflow/persistence/migration/migrateV1toV2.test.ts
  • src/platform/cloud/subscription/components/CreditsTile.test.ts
  • src/composables/useRunButtonTelemetry.test.ts

📝 Walkthrough

Walkthrough

The change removes per-suite localStorage.clear() calls from Vitest tests. It preserves other test resets and adds an optional localStorage.clear() call to vitest.timer.setup.ts.

Changes

Test storage reset

Layer / File(s) Summary
Global storage reset
vitest.timer.setup.ts
The shared timer setup clears localStorage when available before fake timers are enabled.
Feature, survey, telemetry, and component test cleanup
src/components/*, src/composables/*, src/platform/cloud/..., src/platform/surveys/*, src/platform/telemetry/*, src/stores/*, src/utils/*, src/workbench/*
Individual test suites no longer clear localStorage. Existing module, mock, Pinia, distribution flag, and telemetry resets remain.
Workflow and script test cleanup
src/platform/workflow/*, src/scripts/*
Workflow and script tests retain sessionStorage and other state cleanup while removing localStorage lifecycle cleanup.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: jtydhr88


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
End-To-End Regression Coverage For Fixes ❓ Inconclusive The changed-file list is available, but the PR title and commit subjects are not provided, so the required bug-fix signal cannot be assessed. Provide the PR title and commit subjects, then re-evaluate the end-to-end regression coverage criteria.
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the primary change: clearing localStorage before each test through shared Vitest setup.
Description check ✅ Passed The description explains the shared setup, removed redundant cleanup, retained isolation, compatibility, and validation results; some template headings are omitted.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed files are Vitest setup and test files. None are under src/lib/litegraph/, src/ecs/, or related to graph entities, so this check does not apply.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch test/global-vitest-local-storage-cleanup

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Aug 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main   #15053      +/-   ##
==========================================
- Coverage   81.37%   81.37%   -0.01%     
==========================================
  Files        1873     1873              
  Lines      106432   106432              
  Branches    33270    33269       -1     
==========================================
- Hits        86614    86613       -1     
+ Misses      19474    19465       -9     
- Partials      344      354      +10     
Flag Coverage Δ
unit 72.52% <ø> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 9 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@DrJKL
DrJKL force-pushed the test/global-vitest-clock-baseline branch from ea7aee6 to 95a43cd Compare August 11, 2026 22:19
@DrJKL
DrJKL force-pushed the test/global-vitest-local-storage-cleanup branch from cf2cdc0 to b6aab32 Compare August 11, 2026 22:19
@DrJKL
DrJKL marked this pull request as ready for review August 11, 2026 22:40
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 11, 2026
Base automatically changed from test/global-vitest-clock-baseline to main August 11, 2026 23:05
@DrJKL
DrJKL force-pushed the test/global-vitest-local-storage-cleanup branch from b6aab32 to bb573d8 Compare August 11, 2026 23:07
@DrJKL DrJKL assigned christian-byrne and unassigned AustinMroz Aug 11, 2026
@DrJKL
DrJKL added this pull request to the merge queue Aug 11, 2026
Merged via the queue into main with commit 1d26632 Aug 11, 2026
63 checks passed
@DrJKL
DrJKL deleted the test/global-vitest-local-storage-cleanup branch August 11, 2026 23:51
pull Bot pushed a commit to Penguinjanator/ComfyUI_frontend that referenced this pull request Aug 12, 2026
## Summary

- create a fresh `createTestingPinia({ stubActions: false })` before
each root and desktop UI test
- remove 207 redundant per-suite activations
- retain 11 explicit activations needed for module initialization,
mid-test resets, and property-based iteration isolation
- leave specialized suites free to replace the active Pinia with real
Pinia, stubbed actions, plugins, or custom spies

Stacked on Comfy-Org#15053.

## Verification

- root Vitest suite: 15,896 passed, 8 skipped across 1,159 files
- desktop UI Vitest suite: 125 passed across 16 files
- `pnpm lint`
- `pnpm typecheck`
- formatting and commit hooks

Co-authored-by: Amp <amp@ampcode.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants