Skip to content

ci: serialize every cloud-gate run and stop the per-PR stampede - #15060

Merged
benjcooley merged 2 commits into
nathaniel/custom-node-e2e-suitefrom
benjcooley/cloud-gate-serialization
Aug 12, 2026
Merged

ci: serialize every cloud-gate run and stop the per-PR stampede#15060
benjcooley merged 2 commits into
nathaniel/custom-node-e2e-suitefrom
benjcooley/cloud-gate-serialization

Conversation

@benjcooley

Copy link
Copy Markdown
Contributor

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

  • What:
    • Drop the pull_request trigger. 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.
    • Fold dispatches into the instance group. The separate dispatch group allowed a manual run to execute concurrently with an instance-group run - observed live: dispatch 31541231667 co-tenant with run 31530265854, which then sat 125m+ in its suite step. Co-tenancy corrupts whole-queue observation (waitForQueueQuiet) for both runs. The eviction pressure that justified the split dies with the per-PR trigger.
    • timeout-minutes: 150 on the job (longest healthy suite ~110m): a wedged run can no longer hold the serial group for GitHub's 360m default.

Review Focus

  • This trades PR-time cloud signal (which the eviction data shows was ~never delivered) for runs that actually complete. If per-PR cloud coverage is wanted later, it needs the prompt-scoped queue observation change first - the serial contract is the binding constraint, not this workflow.
  • The fork-safety job if: still references pull_request; left in place deliberately as defence-in-depth if the trigger ever returns.

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.
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 11, 2026
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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: a1d46b34-8e4d-4d09-a57a-e0563a8daff4

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
📝 Walkthrough

Walkthrough

The 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.

Changes

Custom-node cloud CI

Layer / File(s) Summary
Workflow triggers and execution controls
.github/workflows/ci-tests-custom-nodes-cloud.yaml
The workflow adds the custom-node suite branch to push triggers, removes pull request triggers, uses one concurrency group for manual dispatches and other events, and sets a 150-minute cloud job timeout.

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

Suggested reviewers: austinmroz, codejuggernaut

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Description check ✅ Passed The description covers the required Summary, Changes, and Review Focus sections with clear rationale and scope.
Title check ✅ Passed The title clearly summarizes serializing cloud-gate runs and preventing per-PR cancellations.
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.
End-To-End Regression Coverage For Fixes ✅ Passed The PR changes only a GitHub Actions workflow, so this is a CI-process change covered by the explicit no-fail exception.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed-file list contains only .github/workflows/ci-tests-custom-nodes-cloud.yaml, so no litegraph, ECS, or graph-entity files are modified.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch benjcooley/cloud-gate-serialization

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.

❤️ Share

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

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

🎭 Playwright: ✅ 1984 passed, 0 failed · 3 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1963 / ❌ 0 / ⚠️ 3 / ⏭️ 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)

📦 Bundle Size

⏳ Size data collection in progress…

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.8 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.4 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.6 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 50.7 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.7 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.2 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.7 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.6 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.1 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.3 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.2 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 136ms TBT · 92.7 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.4 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 161.3 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 85ms TBT · 149.1 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.3 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 7ms
canvas-idle: layout count 0
canvas-idle: style recalc count 10
canvas-idle: task duration 456ms
canvas-idle: script duration 15ms
canvas-idle: TBT 0ms
canvas-idle: heap used 66.8 MB
canvas-idle: DOM nodes 19
canvas-idle: event listeners 4
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 4ms
canvas-mouse-sweep: style recalc duration 40ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 76
canvas-mouse-sweep: task duration 949ms
canvas-mouse-sweep: script duration 126ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 49.4 MB
canvas-mouse-sweep: DOM nodes -282
canvas-mouse-sweep: event listeners -153
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 18ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 380ms
canvas-zoom-sweep: script duration 19ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 69.6 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 390ms
dom-widget-clipping: script duration 61ms
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 8ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 8
large-graph-idle: task duration 662ms
large-graph-idle: script duration 100ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 63.7 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 14ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 68
large-graph-pan: task duration 1349ms
large-graph-pan: script duration 471ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 64.2 MB
large-graph-pan: DOM nodes -286
large-graph-pan: event listeners -149
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 7ms
large-graph-zoom: style recalc duration 14ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 65
large-graph-zoom: task duration 1508ms
large-graph-zoom: script duration 531ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 56.7 MB
large-graph-zoom: DOM nodes -289
large-graph-zoom: event listeners -168
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 9ms
minimap-idle: layout count 0
minimap-idle: style recalc count 9
minimap-idle: task duration 660ms
minimap-idle: script duration 99ms
minimap-idle: TBT 0ms
minimap-idle: heap used 64.6 MB
minimap-idle: DOM nodes -282
minimap-idle: event listeners -150
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 11ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 411ms
subgraph-dom-widget-clipping: script duration 124ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 51.1 MB
subgraph-dom-widget-clipping: DOM nodes 19
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 8ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 10
subgraph-idle: task duration 474ms
subgraph-idle: script duration 12ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 55.3 MB
subgraph-idle: DOM nodes 20
subgraph-idle: event listeners 4
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 5ms
subgraph-mouse-sweep: style recalc duration 37ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 78
subgraph-mouse-sweep: task duration 792ms
subgraph-mouse-sweep: script duration 92ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 51.2 MB
subgraph-mouse-sweep: DOM nodes -109
subgraph-mouse-sweep: event listeners -75
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 13ms
subgraph-transition-enter: style recalc duration 31ms
subgraph-transition-enter: layout count 14
subgraph-transition-enter: style recalc count 18
subgraph-transition-enter: task duration 736ms
subgraph-transition-enter: script duration 26ms
subgraph-transition-enter: TBT 136ms
subgraph-transition-enter: heap used 92.7 MB
subgraph-transition-enter: DOM nodes 13673
subgraph-transition-enter: event listeners 2373
viewport-pan-sweep: avg frame time 17ms
viewport-pan-sweep: p95 frame time 17ms
viewport-pan-sweep: layout duration 0ms
viewport-pan-sweep: style recalc duration 35ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 250
viewport-pan-sweep: task duration 4430ms
viewport-pan-sweep: script duration 1410ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 65.4 MB
viewport-pan-sweep: DOM nodes -281
viewport-pan-sweep: event listeners -148
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 16050ms
vue-large-graph-idle: script duration 527ms
vue-large-graph-idle: TBT 0ms
vue-large-graph-idle: heap used 161.3 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 15ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 134
vue-large-graph-pan: task duration 19923ms
vue-large-graph-pan: script duration 856ms
vue-large-graph-pan: TBT 85ms
vue-large-graph-pan: heap used 149.1 MB
vue-large-graph-pan: DOM nodes -8312
vue-large-graph-pan: event listeners -16385
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 21ms
workflow-execution: layout count 3
workflow-execution: style recalc count 15
workflow-execution: task duration 114ms
workflow-execution: script duration 10ms
workflow-execution: TBT 0ms
workflow-execution: heap used 65.3 MB
workflow-execution: DOM nodes 127
workflow-execution: event listeners 98
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

codecov Bot commented Aug 11, 2026

Copy link
Copy Markdown

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              
Flag Coverage Δ
unit 72.54% <ø> (-0.01%) ⬇️

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

@benjcooley
benjcooley requested review from a team and AustinMroz August 11, 2026 22:50

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a062fe0 and d8722e1.

📒 Files selected for processing (1)
  • .github/workflows/ci-tests-custom-nodes-cloud.yaml

Comment thread .github/workflows/ci-tests-custom-nodes-cloud.yaml
@benjcooley
benjcooley merged commit f82454a into nathaniel/custom-node-e2e-suite Aug 12, 2026
59 of 61 checks passed
@benjcooley
benjcooley deleted the benjcooley/cloud-gate-serialization branch August 12, 2026 00:41
@benjcooley

Copy link
Copy Markdown
Contributor Author

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.

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.

1 participant