Skip to content

test(litegraph): cover re-promotion when one of several interior widgets disconnects - #15615

Open
christian-byrne wants to merge 1 commit into
feature/ecs-migrationfrom
cb__subgraph-repromotion-guard-test
Open

test(litegraph): cover re-promotion when one of several interior widgets disconnects#15615
christian-byrne wants to merge 1 commit into
feature/ecs-migrationfrom
cb__subgraph-repromotion-guard-test

Conversation

@christian-byrne

Copy link
Copy Markdown
Contributor

Deleting the re-promotion branch in SubgraphNode's input-disconnected listener (SubgraphNode.ts:365-370) leaves the whole suite green. Nothing exercises a subgraph input with more than one interior widget link, so nothing notices that disconnecting one of them tears the host's promoted widget down instead of rebinding it to the remaining one.

The new test connects two interior widgets to one subgraph input, disconnects the first, and asserts the host input is still promoted with one widget; then disconnects the second and asserts it demotes.

Mutation

Denominator: 3842 passing tests across 237 files (src/lib/litegraph + src/stores + src/core/graph + src/renderer/extensions/vueNodes/widgets + 36 further src/**/*.test.ts that reference .configure(, loadGraphData, widgetValueStore or previewExposureStore), enumerated 2026-08-22. Not the full suite.

guard result
deleted, before this test 0 killed
deleted, with this test 1 killed — and it is this test
restored, with this test 3843 passed

Gates

Worktrees run no git hooks, so these were run by hand: oxfmt --check clean, oxlint --type-aware no findings (controlled against an injected debugger, which it reports). Test-only change; vue-tsc exit 0 with zero errors on the sibling branch from the same base.

@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 22, 2026
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 464b5e6b-acf9-4355-9be1-ab82aae663d2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/22/2026, 07:59:28 AM 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 · 59.8 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.4 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.1 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 59.9 MB heap
large-graph-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.6 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 83.3 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.2 MB heap
legacy-node-drag: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 73.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.5 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.9 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 74.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 101ms TBT · 86.0 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 88.1 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 170.3 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 43ms TBT · 163.3 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.6 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 6ms
canvas-idle: layout count 0
canvas-idle: style recalc count 9
canvas-idle: task duration 428ms
canvas-idle: script duration 9ms
canvas-idle: TBT 0ms
canvas-idle: heap used 59.8 MB
canvas-idle: DOM nodes -282
canvas-idle: event listeners -171
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 6ms
canvas-mouse-sweep: style recalc duration 37ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 78
canvas-mouse-sweep: task duration 991ms
canvas-mouse-sweep: script duration 115ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 68.4 MB
canvas-mouse-sweep: DOM nodes -282
canvas-mouse-sweep: event listeners -170
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 14ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 306ms
canvas-zoom-sweep: script duration 12ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 69.1 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 6ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 327ms
dom-widget-clipping: script duration 26ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 59.9 MB
dom-widget-clipping: DOM nodes 18
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 7
large-graph-idle: task duration 454ms
large-graph-idle: script duration 30ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 67.6 MB
large-graph-idle: DOM nodes -268
large-graph-idle: event listeners -152
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 13ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 66
large-graph-pan: task duration 2146ms
large-graph-pan: script duration 701ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 83.3 MB
large-graph-pan: DOM nodes -273
large-graph-pan: event listeners -71
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 9ms
large-graph-zoom: style recalc duration 17ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 68
large-graph-zoom: task duration 2179ms
large-graph-zoom: script duration 681ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 69.2 MB
large-graph-zoom: DOM nodes -261
large-graph-zoom: event listeners -178
legacy-node-drag: avg frame time 17ms
legacy-node-drag: p95 frame time 17ms
legacy-node-drag: layout duration 0ms
legacy-node-drag: style recalc duration 8ms
legacy-node-drag: layout count 0
legacy-node-drag: style recalc count 42
legacy-node-drag: task duration 1856ms
legacy-node-drag: script duration 180ms
legacy-node-drag: TBT 0ms
legacy-node-drag: heap used 73.7 MB
legacy-node-drag: DOM nodes -142
legacy-node-drag: event listeners 95
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 3ms
minimap-idle: layout count 0
minimap-idle: style recalc count 4
minimap-idle: task duration 437ms
minimap-idle: script duration 31ms
minimap-idle: TBT 0ms
minimap-idle: heap used 67.5 MB
minimap-idle: DOM nodes -277
minimap-idle: event listeners -88
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 8ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 46
subgraph-dom-widget-clipping: task duration 413ms
subgraph-dom-widget-clipping: script duration 110ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 68.9 MB
subgraph-dom-widget-clipping: DOM nodes 18
subgraph-dom-widget-clipping: event listeners 7
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 6ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 9
subgraph-idle: task duration 397ms
subgraph-idle: script duration 8ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 62.5 MB
subgraph-idle: DOM nodes -298
subgraph-idle: event listeners -217
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 78
subgraph-mouse-sweep: task duration 911ms
subgraph-mouse-sweep: script duration 88ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 74.2 MB
subgraph-mouse-sweep: DOM nodes -294
subgraph-mouse-sweep: event listeners -232
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 10ms
subgraph-transition-enter: style recalc duration 25ms
subgraph-transition-enter: layout count 15
subgraph-transition-enter: style recalc count 20
subgraph-transition-enter: task duration 725ms
subgraph-transition-enter: script duration 26ms
subgraph-transition-enter: TBT 101ms
subgraph-transition-enter: heap used 86.0 MB
subgraph-transition-enter: DOM nodes 13671
subgraph-transition-enter: event listeners 2383
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 46ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 248
viewport-pan-sweep: task duration 7891ms
viewport-pan-sweep: script duration 2554ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 88.1 MB
viewport-pan-sweep: DOM nodes -282
viewport-pan-sweep: event listeners -157
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 12393ms
vue-large-graph-idle: script duration 249ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 170.3 MB
vue-large-graph-idle: DOM nodes -6548
vue-large-graph-idle: event listeners -7474
vue-large-graph-pan: avg frame time 17ms
vue-large-graph-pan: p95 frame time 17ms
vue-large-graph-pan: layout duration 0ms
vue-large-graph-pan: style recalc duration 19ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 107
vue-large-graph-pan: task duration 15876ms
vue-large-graph-pan: script duration 776ms
vue-large-graph-pan: TBT 43ms
vue-large-graph-pan: heap used 163.3 MB
vue-large-graph-pan: DOM nodes -6548
vue-large-graph-pan: event listeners -7474
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 3
workflow-execution: style recalc count 13
workflow-execution: task duration 99ms
workflow-execution: script duration 6ms
workflow-execution: TBT 0ms
workflow-execution: heap used 67.6 MB
workflow-execution: DOM nodes 126
workflow-execution: event listeners 61
Raw data
{
  "timestamp": "2026-08-22T08:10:35.033Z",
  "gitSha": "81c46742f0fc163d2a2684d4af24efd45e8b7cf9",
  "branch": "cb__subgraph-repromotion-guard-test",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2057.575999999983,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.3690000000000015,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 436.28,
      "heapDeltaBytes": -2256232,
      "heapUsedBytes": 67109312,
      "domNodes": -282,
      "jsHeapTotalBytes": 4448256,
      "scriptDurationMs": 9.183999999999997,
      "eventListeners": -187,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2008.8479999999436,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 6.305999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 419.68199999999996,
      "heapDeltaBytes": -10756748,
      "heapUsedBytes": 58213532,
      "domNodes": -281,
      "jsHeapTotalBytes": 4972544,
      "scriptDurationMs": 8.668000000000001,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1952.303000000029,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 37.801,
      "layouts": 12,
      "layoutDurationMs": 7.640000000000001,
      "taskDurationMs": 977.461,
      "heapDeltaBytes": 1562784,
      "heapUsedBytes": 64012024,
      "domNodes": -283,
      "jsHeapTotalBytes": 4972544,
      "scriptDurationMs": 114.955,
      "eventListeners": -185,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2005.4900000000089,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 35.300000000000004,
      "layouts": 12,
      "layoutDurationMs": 3.796,
      "taskDurationMs": 1004.388,
      "heapDeltaBytes": 9684176,
      "heapUsedBytes": 79534928,
      "domNodes": -280,
      "jsHeapTotalBytes": 5758976,
      "scriptDurationMs": 116.003,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1720.3850000000216,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 15.719999999999997,
      "layouts": 6,
      "layoutDurationMs": 0.889,
      "taskDurationMs": 309.28299999999996,
      "heapDeltaBytes": 3561748,
      "heapUsedBytes": 72258436,
      "domNodes": 78,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 12.277,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1707.2779999999739,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 13.225999999999999,
      "layouts": 6,
      "layoutDurationMs": 0.6349999999999999,
      "taskDurationMs": 302.136,
      "heapDeltaBytes": 3784912,
      "heapUsedBytes": 72734012,
      "domNodes": 77,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 10.895999999999999,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 676.1820000000398,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 6.590999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 331.598,
      "heapDeltaBytes": -7161664,
      "heapUsedBytes": 61978888,
      "domNodes": 20,
      "jsHeapTotalBytes": 6815744,
      "scriptDurationMs": 25.682999999999996,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 684.2819999999392,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 4.456000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 322.823,
      "heapDeltaBytes": -6091428,
      "heapUsedBytes": 63603716,
      "domNodes": 16,
      "jsHeapTotalBytes": 5767168,
      "scriptDurationMs": 25.448,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666682,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2054.463999999996,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 5.651,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 476.185,
      "heapDeltaBytes": -21346136,
      "heapUsedBytes": 68794952,
      "domNodes": -267,
      "jsHeapTotalBytes": 3928064,
      "scriptDurationMs": 30.187,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2028.2740000000103,
      "styleRecalcs": 5,
      "styleRecalcDurationMs": 3.1860000000000013,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 432.14500000000004,
      "heapDeltaBytes": -17020556,
      "heapUsedBytes": 73000540,
      "domNodes": -269,
      "jsHeapTotalBytes": -1576960,
      "scriptDurationMs": 30.651999999999997,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 3168.1580000000054,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 13.48,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 2205.171,
      "heapDeltaBytes": -7279152,
      "heapUsedBytes": 83719696,
      "domNodes": -274,
      "jsHeapTotalBytes": -565248,
      "scriptDurationMs": 717.99,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 3146.963000000028,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 12.992,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 2086.0130000000004,
      "heapDeltaBytes": 26218340,
      "heapUsedBytes": 90914856,
      "domNodes": -272,
      "jsHeapTotalBytes": 225280,
      "scriptDurationMs": 684.557,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 4060.5300000000284,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 14.746999999999996,
      "layouts": 60,
      "layoutDurationMs": 8.681,
      "taskDurationMs": 2155.651,
      "heapDeltaBytes": 743220,
      "heapUsedBytes": 72803640,
      "domNodes": -263,
      "jsHeapTotalBytes": -1875968,
      "scriptDurationMs": 683.075,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666696,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 4179.685000000063,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 18.815,
      "layouts": 60,
      "layoutDurationMs": 8.652,
      "taskDurationMs": 2202.254,
      "heapDeltaBytes": 630104,
      "heapUsedBytes": 72258456,
      "domNodes": -259,
      "jsHeapTotalBytes": -1613824,
      "scriptDurationMs": 679.0649999999999,
      "eventListeners": -177,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666696,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "legacy-node-drag",
      "durationMs": 3125.2210000000105,
      "styleRecalcs": 41,
      "styleRecalcDurationMs": 6.501999999999997,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1802.153,
      "heapDeltaBytes": 13589084,
      "heapUsedBytes": 83838192,
      "domNodes": 0,
      "jsHeapTotalBytes": 942080,
      "scriptDurationMs": 179.05499999999998,
      "eventListeners": 188,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "legacy-node-drag",
      "durationMs": 3159.367999999972,
      "styleRecalcs": 43,
      "styleRecalcDurationMs": 8.662000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1909.8249999999998,
      "heapDeltaBytes": -1366832,
      "heapUsedBytes": 70678956,
      "domNodes": -284,
      "jsHeapTotalBytes": -1351680,
      "scriptDurationMs": 181.887,
      "eventListeners": 1,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 1995.2779999999848,
      "styleRecalcs": 2,
      "styleRecalcDurationMs": 0.9160000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 383.66100000000006,
      "heapDeltaBytes": 8406440,
      "heapUsedBytes": 73368424,
      "domNodes": -274,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 30.093999999999998,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2034.6040000000585,
      "styleRecalcs": 6,
      "styleRecalcDurationMs": 4.502000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 489.98299999999995,
      "heapDeltaBytes": -22818764,
      "heapUsedBytes": 68196176,
      "domNodes": -279,
      "jsHeapTotalBytes": 3403776,
      "scriptDurationMs": 32.455999999999996,
      "eventListeners": -181,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 563.4529999999813,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 7.812999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 391.99699999999996,
      "heapDeltaBytes": -8029820,
      "heapUsedBytes": 62742128,
      "domNodes": 18,
      "jsHeapTotalBytes": 6553600,
      "scriptDurationMs": 100.427,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 632.1249999999736,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 9.092999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 434.17699999999996,
      "heapDeltaBytes": 18070620,
      "heapUsedBytes": 81761420,
      "domNodes": 18,
      "jsHeapTotalBytes": 4718592,
      "scriptDurationMs": 118.96900000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2009.1489999999794,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 6.157999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 390.806,
      "heapDeltaBytes": -8737952,
      "heapUsedBytes": 61399148,
      "domNodes": -297,
      "jsHeapTotalBytes": 5234688,
      "scriptDurationMs": 7.561,
      "eventListeners": -201,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2008.3949999999504,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 5.495,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 402.89399999999995,
      "heapDeltaBytes": 6201504,
      "heapUsedBytes": 69673328,
      "domNodes": -299,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 7.522,
      "eventListeners": -233,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1759.411,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 34.123,
      "layouts": 16,
      "layoutDurationMs": 4.141,
      "taskDurationMs": 869.008,
      "heapDeltaBytes": 11033416,
      "heapUsedBytes": 79937748,
      "domNodes": -297,
      "jsHeapTotalBytes": 5496832,
      "scriptDurationMs": 80.523,
      "eventListeners": -231,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1795.1249999999845,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 32.911,
      "layouts": 16,
      "layoutDurationMs": 4.718,
      "taskDurationMs": 952.623,
      "heapDeltaBytes": 6222588,
      "heapUsedBytes": 75723788,
      "domNodes": -290,
      "jsHeapTotalBytes": 5758976,
      "scriptDurationMs": 94.615,
      "eventListeners": -233,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 935.3939999999739,
      "styleRecalcs": 20,
      "styleRecalcDurationMs": 25.362999999999996,
      "layouts": 15,
      "layoutDurationMs": 9.594,
      "taskDurationMs": 724.5429999999999,
      "heapDeltaBytes": -5402236,
      "heapUsedBytes": 90150872,
      "domNodes": 13671,
      "jsHeapTotalBytes": 11796480,
      "scriptDurationMs": 25.741999999999994,
      "eventListeners": 2383,
      "totalBlockingTimeMs": 101,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 12219.333000000006,
      "styleRecalcs": 247,
      "styleRecalcDurationMs": 46.097,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 7836.687000000001,
      "heapDeltaBytes": 2827984,
      "heapUsedBytes": 92088324,
      "domNodes": -282,
      "jsHeapTotalBytes": 5169152,
      "scriptDurationMs": 2542.882,
      "eventListeners": -157,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 12218.57,
      "styleRecalcs": 248,
      "styleRecalcDurationMs": 46.488,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 7946.173,
      "heapDeltaBytes": 9520196,
      "heapUsedBytes": 92738344,
      "domNodes": -282,
      "jsHeapTotalBytes": 4608000,
      "scriptDurationMs": 2564.1859999999997,
      "eventListeners": -157,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13327.322999999978,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12591.038,
      "heapDeltaBytes": -29465432,
      "heapUsedBytes": 182357876,
      "domNodes": -6548,
      "jsHeapTotalBytes": 1896448,
      "scriptDurationMs": 235.51799999999997,
      "eventListeners": -7473,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12869.680000000017,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12195.261999999999,
      "heapDeltaBytes": -31423196,
      "heapUsedBytes": 174743288,
      "domNodes": -6548,
      "jsHeapTotalBytes": -1171456,
      "scriptDurationMs": 262.82800000000003,
      "eventListeners": -7475,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16228.390999999989,
      "styleRecalcs": 102,
      "styleRecalcDurationMs": 18.477999999999994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15825.920000000002,
      "heapDeltaBytes": -22835844,
      "heapUsedBytes": 176664500,
      "domNodes": -6548,
      "jsHeapTotalBytes": -798720,
      "scriptDurationMs": 771.464,
      "eventListeners": -7473,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16386.13600000008,
      "styleRecalcs": 112,
      "styleRecalcDurationMs": 18.851000000000006,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 15926.607,
      "heapDeltaBytes": -44223392,
      "heapUsedBytes": 165869496,
      "domNodes": -6548,
      "jsHeapTotalBytes": -3678208,
      "scriptDurationMs": 781.482,
      "eventListeners": -7475,
      "totalBlockingTimeMs": 86,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 468.18500000006225,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 22.392,
      "layouts": 4,
      "layoutDurationMs": 1.486,
      "taskDurationMs": 125.63600000000002,
      "heapDeltaBytes": 5479248,
      "heapUsedBytes": 72217728,
      "domNodes": 126,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 7.313000000000001,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 104.3849999999793,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 13.899999999999999,
      "layouts": 2,
      "layoutDurationMs": 1.2889999999999997,
      "taskDurationMs": 72.903,
      "heapDeltaBytes": 3067048,
      "heapUsedBytes": 69450968,
      "domNodes": 125,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 3.9339999999999993,
      "eventListeners": 25,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

🎭 Playwright: ✅ 1991 passed, 0 failed

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

@github-actions

Copy link
Copy Markdown

🎭 Playwright: ⏳ Running...

@github-actions github-actions Bot added the risk:R3 PR risk grade (advisory shadow check; grader-owned) label Aug 22, 2026
@codecov

codecov Bot commented Aug 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@                    Coverage Diff                    @@
##           feature/ecs-migration   #15615      +/-   ##
=========================================================
+ Coverage                  82.30%   82.32%   +0.01%     
=========================================================
  Files                       1900     1900              
  Lines                     107652   107653       +1     
  Branches                   34116    33592     -524     
=========================================================
+ Hits                       88605    88621      +16     
+ Misses                     18711    18702       -9     
+ Partials                     336      330       -6     
Flag Coverage Δ
e2e 67.97% <ø> (+0.02%) ⬆️
unit 73.92% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 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.

…ets disconnects

SubgraphNode's input-disconnected listener re-resolves the promoted widget
when the subgraph input still has connected widgets. Deleting that branch
left every existing test green: nothing exercised a subgraph input with
more than one interior widget link.
@DrJKL
DrJKL force-pushed the cb__subgraph-repromotion-guard-test branch from f5f5ed3 to c5fd5a5 Compare August 22, 2026 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:R3 PR risk grade (advisory shadow check; grader-owned) size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants