test(litegraph): cover re-promotion when one of several interior widgets disconnects - #15615
test(litegraph): cover re-promotion when one of several interior widgets disconnects#15615christian-byrne wants to merge 1 commit into
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
🎨 Storybook: ✅ Built — View Storybook📦 Bundle Size
⚡ Performance Report
Absolute values
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
|
🎭 Playwright: ⏳ Running... |
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
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
…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.
f5f5ed3 to
c5fd5a5
Compare
Deleting the re-promotion branch in
SubgraphNode'sinput-disconnectedlistener (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 furthersrc/**/*.test.tsthat reference.configure(,loadGraphData,widgetValueStoreorpreviewExposureStore), enumerated 2026-08-22. Not the full suite.Gates
Worktrees run no git hooks, so these were run by hand:
oxfmt --checkclean,oxlint --type-awareno findings (controlled against an injecteddebugger, which it reports). Test-only change;vue-tscexit 0 with zero errors on the sibling branch from the same base.