ci: serialize every cloud-gate run and stop the per-PR stampede - #15060
Conversation
The cloud gate's automatic runs share one serial resource (the smoke account's queue) behind a single-pending-slot concurrency group, so per-PR pushes evicted each other instead of queueing - 16 of the last 40 runs were cancelled and no PR-triggered run produced a verdict a PR acted on. Drop the pull_request trigger (core gate + pure specs remain the PR-time coverage) and run Cloud on suite-branch/main pushes, the merge queue, and dispatch. Fold dispatches into the same group: the separate dispatch group allowed live co-tenancy (dispatch 31541231667 alongside run 31530265854), which corrupts whole-queue observation for both runs. Bound the job at 150m so a wedged run cannot hold the serial group for GitHub's 360m default.
|
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:
📝 WalkthroughWalkthroughThe custom-node cloud workflow removes pull request triggers, adds the custom-node suite branch to push triggers, shares one concurrency group across events, and sets a 150-minute cloud job timeout. ChangesCustom-node cloud CI
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🎭 Playwright: ✅ 1984 passed, 0 failed · 3 flaky📊 Browser Reports
📦 Bundle Size
⚡ Performance Report
Absolute values
Raw data{
"timestamp": "2026-08-11T22:41:59.614Z",
"gitSha": "bda42f81a7bd5f35470a561c80d65a91d116a545",
"branch": "benjcooley/cloud-gate-serialization",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2022.4919999999997,
"styleRecalcs": 10,
"styleRecalcDurationMs": 7.640000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 460.07699999999994,
"heapDeltaBytes": 5801260,
"heapUsedBytes": 69846512,
"domNodes": 20,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 15.665000000000003,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2054.287000000045,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.342,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 451.35600000000005,
"heapDeltaBytes": 5910296,
"heapUsedBytes": 70156640,
"domNodes": 18,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 14.766,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2026.6349999999989,
"styleRecalcs": 77,
"styleRecalcDurationMs": 43.983000000000004,
"layouts": 12,
"layoutDurationMs": 4.564,
"taskDurationMs": 1034.4,
"heapDeltaBytes": -12300244,
"heapUsedBytes": 51969424,
"domNodes": -282,
"jsHeapTotalBytes": 24354816,
"scriptDurationMs": 132.36999999999998,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1867.2219999999697,
"styleRecalcs": 74,
"styleRecalcDurationMs": 35.894000000000005,
"layouts": 12,
"layoutDurationMs": 3.4799999999999995,
"taskDurationMs": 863.851,
"heapDeltaBytes": -12582832,
"heapUsedBytes": 51672344,
"domNodes": -281,
"jsHeapTotalBytes": 24092672,
"scriptDurationMs": 119.96399999999998,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1755.4340000000366,
"styleRecalcs": 31,
"styleRecalcDurationMs": 20.296999999999997,
"layouts": 6,
"layoutDurationMs": 0.658,
"taskDurationMs": 399.68399999999997,
"heapDeltaBytes": 8760516,
"heapUsedBytes": 73178052,
"domNodes": 78,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 19.811999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1739.8259999999937,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.271,
"layouts": 6,
"layoutDurationMs": 0.6529999999999999,
"taskDurationMs": 360.058,
"heapDeltaBytes": 8610304,
"heapUsedBytes": 72865180,
"domNodes": 78,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 17.465999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 624.9250000000188,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.399,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 417.889,
"heapDeltaBytes": -11189984,
"heapUsedBytes": 53231636,
"domNodes": 18,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 63.595,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "dom-widget-clipping",
"durationMs": 594.4799999999759,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.006,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 362.29200000000003,
"heapDeltaBytes": -11186436,
"heapUsedBytes": 53092344,
"domNodes": 20,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 58.462,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2027.3159999999848,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.046999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 660.804,
"heapDeltaBytes": 7306844,
"heapUsedBytes": 67354648,
"domNodes": -283,
"jsHeapTotalBytes": 3248128,
"scriptDurationMs": 100.61900000000001,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2027.9059999999163,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.940000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 664.0630000000001,
"heapDeltaBytes": 6747676,
"heapUsedBytes": 66287492,
"domNodes": -280,
"jsHeapTotalBytes": 3248128,
"scriptDurationMs": 100.17999999999999,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2295.0399999999718,
"styleRecalcs": 68,
"styleRecalcDurationMs": 14.720000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1386.7469999999998,
"heapDeltaBytes": 7219824,
"heapUsedBytes": 68478568,
"domNodes": -287,
"jsHeapTotalBytes": 3440640,
"scriptDurationMs": 467.84000000000003,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2199.493000000075,
"styleRecalcs": 68,
"styleRecalcDurationMs": 13.175000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1311.1299999999999,
"heapDeltaBytes": 4862436,
"heapUsedBytes": 66134008,
"domNodes": -285,
"jsHeapTotalBytes": 3702784,
"scriptDurationMs": 474.03299999999996,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3209.327999999971,
"styleRecalcs": 65,
"styleRecalcDurationMs": 14.604,
"layouts": 60,
"layoutDurationMs": 7.407,
"taskDurationMs": 1514.699,
"heapDeltaBytes": -2899052,
"heapUsedBytes": 59241280,
"domNodes": -289,
"jsHeapTotalBytes": 6393856,
"scriptDurationMs": 532.201,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3195.7179999999425,
"styleRecalcs": 64,
"styleRecalcDurationMs": 14.085,
"layouts": 60,
"layoutDurationMs": 7.089,
"taskDurationMs": 1501.713,
"heapDeltaBytes": -2625300,
"heapUsedBytes": 59733792,
"domNodes": -289,
"jsHeapTotalBytes": 6918144,
"scriptDurationMs": 530.431,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2034.603000000061,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.2,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 647.1690000000001,
"heapDeltaBytes": 6598332,
"heapUsedBytes": 67221524,
"domNodes": -282,
"jsHeapTotalBytes": 3248128,
"scriptDurationMs": 95.03200000000001,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2058.1500000000688,
"styleRecalcs": 8,
"styleRecalcDurationMs": 9.238999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 671.9820000000001,
"heapDeltaBytes": 7475972,
"heapUsedBytes": 68254252,
"domNodes": -282,
"jsHeapTotalBytes": 3510272,
"scriptDurationMs": 103.48400000000001,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 590.1870000000145,
"styleRecalcs": 46,
"styleRecalcDurationMs": 10.707999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 399.8090000000001,
"heapDeltaBytes": -10992100,
"heapUsedBytes": 53479224,
"domNodes": 18,
"jsHeapTotalBytes": 25952256,
"scriptDurationMs": 121.08299999999998,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 600.2740000000131,
"styleRecalcs": 47,
"styleRecalcDurationMs": 11.648999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 422.03200000000004,
"heapDeltaBytes": -10635556,
"heapUsedBytes": 53780476,
"domNodes": 20,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 126.73799999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2003.6179999999604,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.475999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 484.0799999999999,
"heapDeltaBytes": -18774676,
"heapUsedBytes": 45531732,
"domNodes": 20,
"jsHeapTotalBytes": 22781952,
"scriptDurationMs": 12.065,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2013.2380000000012,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.425999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 462.982,
"heapDeltaBytes": 5897928,
"heapUsedBytes": 70465112,
"domNodes": 20,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 12.184000000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1747.8140000000053,
"styleRecalcs": 80,
"styleRecalcDurationMs": 39.29,
"layouts": 16,
"layoutDurationMs": 5.271999999999999,
"taskDurationMs": 839.0690000000001,
"heapDeltaBytes": -18030148,
"heapUsedBytes": 46670284,
"domNodes": -279,
"jsHeapTotalBytes": 23306240,
"scriptDurationMs": 95.303,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1689.9099999999407,
"styleRecalcs": 76,
"styleRecalcDurationMs": 34.592999999999996,
"layouts": 16,
"layoutDurationMs": 4.519,
"taskDurationMs": 743.934,
"heapDeltaBytes": -3815340,
"heapUsedBytes": 60641504,
"domNodes": 62,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 88.507,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-transition-enter",
"durationMs": 949.3620000000647,
"styleRecalcs": 18,
"styleRecalcDurationMs": 30.724,
"layouts": 14,
"layoutDurationMs": 13.053000000000003,
"taskDurationMs": 735.835,
"heapDeltaBytes": 28689076,
"heapUsedBytes": 97220308,
"domNodes": 13673,
"jsHeapTotalBytes": 15990784,
"scriptDurationMs": 26.478,
"eventListeners": 2373,
"totalBlockingTimeMs": 136,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "viewport-pan-sweep",
"durationMs": 8247.47500000001,
"styleRecalcs": 250,
"styleRecalcDurationMs": 36.117,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4383.666,
"heapDeltaBytes": 5349172,
"heapUsedBytes": 64755824,
"domNodes": -281,
"jsHeapTotalBytes": 5275648,
"scriptDurationMs": 1366.9199999999998,
"eventListeners": -163,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.80000000000109
},
{
"name": "viewport-pan-sweep",
"durationMs": 8306.070999999974,
"styleRecalcs": 249,
"styleRecalcDurationMs": 34.629000000000005,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4477.057000000001,
"heapDeltaBytes": 12979180,
"heapUsedBytes": 72502708,
"domNodes": -280,
"jsHeapTotalBytes": 7110656,
"scriptDurationMs": 1452.138,
"eventListeners": -133,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 15745.007999999983,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15705.624,
"heapDeltaBytes": -53876364,
"heapUsedBytes": 171460688,
"domNodes": -8312,
"jsHeapTotalBytes": -3874816,
"scriptDurationMs": 530.244,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 16408.50899999998,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16393.56,
"heapDeltaBytes": -39924372,
"heapUsedBytes": 166714348,
"domNodes": -8312,
"jsHeapTotalBytes": -8593408,
"scriptDurationMs": 523.687,
"eventListeners": -16385,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 19724.138999999923,
"styleRecalcs": 131,
"styleRecalcDurationMs": 14.078000000000035,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 19695.068,
"heapDeltaBytes": -71447472,
"heapUsedBytes": 153983856,
"domNodes": -8312,
"jsHeapTotalBytes": -12521472,
"scriptDurationMs": 863.4110000000001,
"eventListeners": -16383,
"totalBlockingTimeMs": 66,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 20176.122000000076,
"styleRecalcs": 137,
"styleRecalcDurationMs": 15.427999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20150.773,
"heapDeltaBytes": -46951092,
"heapUsedBytes": 158602120,
"domNodes": -8312,
"jsHeapTotalBytes": -10162176,
"scriptDurationMs": 847.9870000000001,
"eventListeners": -16387,
"totalBlockingTimeMs": 103,
"frameDurationMs": 17.77333333333336,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 456.4139999999952,
"styleRecalcs": 16,
"styleRecalcDurationMs": 23.398,
"layouts": 3,
"layoutDurationMs": 1.019,
"taskDurationMs": 122.32100000000001,
"heapDeltaBytes": 5062940,
"heapUsedBytes": 68469128,
"domNodes": 128,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 9.17,
"eventListeners": 99,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "workflow-execution",
"durationMs": 451.2849999999844,
"styleRecalcs": 14,
"styleRecalcDurationMs": 18.939,
"layouts": 2,
"layoutDurationMs": 0.4519999999999999,
"taskDurationMs": 106.10300000000001,
"heapDeltaBytes": 5037448,
"heapUsedBytes": 68579216,
"domNodes": 125,
"jsHeapTotalBytes": 5242880,
"scriptDurationMs": 11.452,
"eventListeners": 97,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
} |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## nathaniel/custom-node-e2e-suite #15060 +/- ##
===================================================================
- Coverage 81.34% 81.34% -0.01%
===================================================================
Files 1873 1873
Lines 106545 106544 -1
Branches 33236 32772 -464
===================================================================
- Hits 86666 86665 -1
Misses 19525 19525
Partials 354 354
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/ci-tests-custom-nodes-cloud.yaml:
- Around line 69-76: Update the concurrency comment in the companion record
workflow to match the shared custom-nodes-cloud-instance group used by the gate
workflow. Remove the stale claim that workflow_dispatch runs use a separate
group or can overlap, while preserving accurate concurrency behavior
documentation.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: cc9f6984-cc9e-4114-ae6a-b9ee1af7963c
📒 Files selected for processing (1)
.github/workflows/ci-tests-custom-nodes-cloud.yaml
f82454a
into
nathaniel/custom-node-e2e-suite
|
Timeout recalibrated 150 -> 180 in 4c49eaf: the serialized solo measurement (run 31541231667) completed honestly at 160m of suite under testcloud boot-502 retries - a 150m cap would have killed a legitimate run. Same run, for the record: best cloud result yet (147 passed / 38 failed vs 135/50 prior), token-mint 502s down 36 -> 4 (the storm was transient deploy churn; 4 is the historical background), job-record failures still 0. The dominant remaining failure class is now 12x boot-time errorToasts - a testcloud-health signal the suite currently reports as a bare element count. |
Summary
The cloud gate has zero genuine green runs and constant cancellations - both are structural, not test-content, problems. This makes every run serial and stops per-PR pushes from evicting each other.
Changes
pull_requesttrigger. Every automatic run shares one serial resource (the smoke account's queue) behind a single-pending-slot concurrency group, so per-PR pushes stampeded it: 16 of the last 40 runs were cancelled, mostly PR-triggered runs evicting each other (four in a row 21:03-21:18 on 2026-08-11), and no PR-triggered run produced a verdict a PR acted on. PR-time custom-node coverage stays with the core gate and the pure specs in the main shards; Cloud verdicts come from suite-branch/main pushes, the merge queue, and dispatch.waitForQueueQuiet) for both runs. The eviction pressure that justified the split dies with the per-PR trigger.timeout-minutes: 150on the job (longest healthy suite ~110m): a wedged run can no longer hold the serial group for GitHub's 360m default.Review Focus
if:still referencespull_request; left in place deliberately as defence-in-depth if the trigger ever returns.