test(infra): cloud Playwright project with @cloud/@oss tagging#10546
test(infra): cloud Playwright project with @cloud/@oss tagging#10546christian-byrne merged 12 commits intomainfrom
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a cloud-specific Playwright test file, a new TestId for the topbar subscribe button, a Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
🎭 Playwright: ✅ 767 passed, 0 failed · 2 flaky📊 Browser Reports
|
🎨 Storybook: ✅ Built — View Storybook |
📦 Bundle: 5.09 MB gzip 🟢 -11 BDetailsSummary
Category Glance App Entry Points — 22.3 kB (baseline 22.3 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.14 MB (baseline 1.14 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 76.6 kB (baseline 76.6 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 9 added / 9 removed / 2 unchanged Panels & Settings — 484 kB (baseline 484 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 12 unchanged User & Accounts — 17.1 kB (baseline 17.1 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 5 added / 5 removed / 2 unchanged Editors & Dialogs — 109 kB (baseline 109 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 2 added / 2 removed UI Components — 60.3 kB (baseline 60.3 kB) • ⚪ 0 BReusable component library chunks
Status: 5 added / 5 removed / 8 unchanged Data & Services — 2.96 MB (baseline 2.96 MB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 13 added / 13 removed / 4 unchanged Utilities & Hooks — 334 kB (baseline 334 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 13 added / 13 removed / 12 unchanged Vendor & Third-Party — 9.8 MB (baseline 9.8 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 8.43 MB (baseline 8.43 MB) • ⚪ 0 BBundles that do not match a named category
Status: 55 added / 55 removed / 79 unchanged ⚡ Performance Report
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-03-29T04:50:15.234Z",
"gitSha": "79d3d07cfa36b5c71409decc492165dd74922d92",
"branch": "feat/cloud-e2e-project",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2024.1749999999854,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.402,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 433.503,
"heapDeltaBytes": 19961680,
"heapUsedBytes": 62993008,
"domNodes": 18,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 24.082,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-idle",
"durationMs": 2032.521000000031,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.661999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 353.56699999999995,
"heapDeltaBytes": 20407524,
"heapUsedBytes": 64077512,
"domNodes": 22,
"jsHeapTotalBytes": 22282240,
"scriptDurationMs": 23.712999999999997,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-idle",
"durationMs": 1986.460999999963,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.530000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 374.153,
"heapDeltaBytes": 20001172,
"heapUsedBytes": 64407704,
"domNodes": 16,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 18.856,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1993.5279999999977,
"styleRecalcs": 81,
"styleRecalcDurationMs": 44.096000000000004,
"layouts": 12,
"layoutDurationMs": 3.77,
"taskDurationMs": 984.694,
"heapDeltaBytes": 18469200,
"heapUsedBytes": 67169220,
"domNodes": 66,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 128.502,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1990.364999999997,
"styleRecalcs": 84,
"styleRecalcDurationMs": 43.068000000000005,
"layouts": 12,
"layoutDurationMs": 3.7340000000000004,
"taskDurationMs": 974.553,
"heapDeltaBytes": 16321316,
"heapUsedBytes": 59064620,
"domNodes": 68,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 126.98500000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1984.7709999999097,
"styleRecalcs": 82,
"styleRecalcDurationMs": 44.269999999999996,
"layouts": 12,
"layoutDurationMs": 4.058,
"taskDurationMs": 982.6160000000001,
"heapDeltaBytes": 16667136,
"heapUsedBytes": 59375648,
"domNodes": 64,
"jsHeapTotalBytes": 23068672,
"scriptDurationMs": 125.498,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1724.240999999978,
"styleRecalcs": 32,
"styleRecalcDurationMs": 17.586,
"layouts": 6,
"layoutDurationMs": 0.7460000000000001,
"taskDurationMs": 312.884,
"heapDeltaBytes": 24673572,
"heapUsedBytes": 67095624,
"domNodes": 79,
"jsHeapTotalBytes": 20185088,
"scriptDurationMs": 25.637,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1738.6579999999867,
"styleRecalcs": 32,
"styleRecalcDurationMs": 17.7,
"layouts": 6,
"layoutDurationMs": 0.743,
"taskDurationMs": 319.501,
"heapDeltaBytes": 15111092,
"heapUsedBytes": 65984612,
"domNodes": 80,
"jsHeapTotalBytes": 21757952,
"scriptDurationMs": 29.48,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000027
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1732.0209999999179,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.184,
"layouts": 6,
"layoutDurationMs": 0.869,
"taskDurationMs": 292.343,
"heapDeltaBytes": 24678432,
"heapUsedBytes": 67433600,
"domNodes": 78,
"jsHeapTotalBytes": 20971520,
"scriptDurationMs": 25.875999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "dom-widget-clipping",
"durationMs": 581.2579999999912,
"styleRecalcs": 13,
"styleRecalcDurationMs": 12.381000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 365.86199999999997,
"heapDeltaBytes": 7621548,
"heapUsedBytes": 50396396,
"domNodes": 22,
"jsHeapTotalBytes": 12582912,
"scriptDurationMs": 64.325,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "dom-widget-clipping",
"durationMs": 592.5510000000145,
"styleRecalcs": 12,
"styleRecalcDurationMs": 7.3919999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 333.901,
"heapDeltaBytes": 6587172,
"heapUsedBytes": 49335652,
"domNodes": 19,
"jsHeapTotalBytes": 13107200,
"scriptDurationMs": 60.217,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "dom-widget-clipping",
"durationMs": 561.7359999999962,
"styleRecalcs": 13,
"styleRecalcDurationMs": 8.761999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 337.108,
"heapDeltaBytes": 6549152,
"heapUsedBytes": 49241812,
"domNodes": 22,
"jsHeapTotalBytes": 13369344,
"scriptDurationMs": 58.95499999999999,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-idle",
"durationMs": 2064.0949999999802,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.36,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 552.451,
"heapDeltaBytes": 4776260,
"heapUsedBytes": 55815844,
"domNodes": -259,
"jsHeapTotalBytes": 16297984,
"scriptDurationMs": 91.76899999999999,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "large-graph-idle",
"durationMs": 2044.2940000000362,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.655000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 524.241,
"heapDeltaBytes": 4850624,
"heapUsedBytes": 55809956,
"domNodes": -255,
"jsHeapTotalBytes": 16453632,
"scriptDurationMs": 84.708,
"eventListeners": -121,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-idle",
"durationMs": 2056.2079999999696,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.899000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 568.698,
"heapDeltaBytes": 4633072,
"heapUsedBytes": 55166956,
"domNodes": -258,
"jsHeapTotalBytes": 16453632,
"scriptDurationMs": 97.171,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-pan",
"durationMs": 2195.3519999999853,
"styleRecalcs": 69,
"styleRecalcDurationMs": 16.711999999999996,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1165.1560000000002,
"heapDeltaBytes": 22145368,
"heapUsedBytes": 75760004,
"domNodes": -259,
"jsHeapTotalBytes": 18493440,
"scriptDurationMs": 434.77900000000005,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "large-graph-pan",
"durationMs": 2139.589000000001,
"styleRecalcs": 71,
"styleRecalcDurationMs": 18.919999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1102.0159999999998,
"heapDeltaBytes": -12374516,
"heapUsedBytes": 47786644,
"domNodes": -256,
"jsHeapTotalBytes": 17616896,
"scriptDurationMs": 379.822,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "large-graph-pan",
"durationMs": 2148.131000000035,
"styleRecalcs": 69,
"styleRecalcDurationMs": 15.741000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1117.6339999999998,
"heapDeltaBytes": 15887536,
"heapUsedBytes": 68944396,
"domNodes": -259,
"jsHeapTotalBytes": 18755584,
"scriptDurationMs": 404.014,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "large-graph-zoom",
"durationMs": 3177.6030000000046,
"styleRecalcs": 66,
"styleRecalcDurationMs": 19.601,
"layouts": 60,
"layoutDurationMs": 8.068000000000001,
"taskDurationMs": 1349.8860000000002,
"heapDeltaBytes": 7039924,
"heapUsedBytes": 61582700,
"domNodes": -262,
"jsHeapTotalBytes": 17764352,
"scriptDurationMs": 477.98199999999997,
"eventListeners": -123,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "large-graph-zoom",
"durationMs": 3111.924999999985,
"styleRecalcs": 66,
"styleRecalcDurationMs": 16.819,
"layouts": 60,
"layoutDurationMs": 7.495,
"taskDurationMs": 1253.8870000000002,
"heapDeltaBytes": 7970776,
"heapUsedBytes": 63433776,
"domNodes": -261,
"jsHeapTotalBytes": 17297408,
"scriptDurationMs": 444.98199999999997,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "large-graph-zoom",
"durationMs": 3162.83999999996,
"styleRecalcs": 66,
"styleRecalcDurationMs": 17.556,
"layouts": 60,
"layoutDurationMs": 7.639999999999999,
"taskDurationMs": 1313.57,
"heapDeltaBytes": 7007888,
"heapUsedBytes": 61533968,
"domNodes": -264,
"jsHeapTotalBytes": 17502208,
"scriptDurationMs": 462.1719999999999,
"eventListeners": -123,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "minimap-idle",
"durationMs": 2025.7090000000062,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.253,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 570.903,
"heapDeltaBytes": 16118020,
"heapUsedBytes": 69390224,
"domNodes": -258,
"jsHeapTotalBytes": 14151680,
"scriptDurationMs": 96.439,
"eventListeners": -127,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "minimap-idle",
"durationMs": 2015.6949999999938,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.0120000000000005,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 519.0680000000001,
"heapDeltaBytes": 3106096,
"heapUsedBytes": 57382352,
"domNodes": -262,
"jsHeapTotalBytes": 15405056,
"scriptDurationMs": 80.089,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "minimap-idle",
"durationMs": 2046.858000000043,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.648999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 526.8770000000001,
"heapDeltaBytes": 3264272,
"heapUsedBytes": 56754200,
"domNodes": -262,
"jsHeapTotalBytes": 15929344,
"scriptDurationMs": 82.96100000000001,
"eventListeners": -125,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 552.2109999999998,
"styleRecalcs": 49,
"styleRecalcDurationMs": 10.924,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 348.92400000000004,
"heapDeltaBytes": 6136912,
"heapUsedBytes": 49169828,
"domNodes": 23,
"jsHeapTotalBytes": 13631488,
"scriptDurationMs": 116.85,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 534.6519999999941,
"styleRecalcs": 49,
"styleRecalcDurationMs": 13.064999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 355.14200000000005,
"heapDeltaBytes": 6821276,
"heapUsedBytes": 49502024,
"domNodes": 25,
"jsHeapTotalBytes": 13369344,
"scriptDurationMs": 115.88400000000001,
"eventListeners": 12,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 521.3990000000877,
"styleRecalcs": 48,
"styleRecalcDurationMs": 11.122,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 333.315,
"heapDeltaBytes": 6133160,
"heapUsedBytes": 49162728,
"domNodes": 22,
"jsHeapTotalBytes": 13631488,
"scriptDurationMs": 112.80199999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000027
},
{
"name": "subgraph-idle",
"durationMs": 2024.6080000000006,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.409999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 353.15799999999996,
"heapDeltaBytes": 19836808,
"heapUsedBytes": 64218628,
"domNodes": 20,
"jsHeapTotalBytes": 22806528,
"scriptDurationMs": 20.576,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-idle",
"durationMs": 2011.8640000000028,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.93,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 342.879,
"heapDeltaBytes": 19937432,
"heapUsedBytes": 63012096,
"domNodes": 22,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 17.355000000000004,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-idle",
"durationMs": 2020.7110000000057,
"styleRecalcs": 12,
"styleRecalcDurationMs": 12.512,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 368.914,
"heapDeltaBytes": 20122312,
"heapUsedBytes": 63509508,
"domNodes": 23,
"jsHeapTotalBytes": 22544384,
"scriptDurationMs": 21.447,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 2017.4769999999853,
"styleRecalcs": 89,
"styleRecalcDurationMs": 47.114000000000004,
"layouts": 16,
"layoutDurationMs": 5.105,
"taskDurationMs": 932.549,
"heapDeltaBytes": 12246816,
"heapUsedBytes": 55324760,
"domNodes": 72,
"jsHeapTotalBytes": 23330816,
"scriptDurationMs": 97.701,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1710.6310000000349,
"styleRecalcs": 77,
"styleRecalcDurationMs": 41.159,
"layouts": 16,
"layoutDurationMs": 7.109999999999999,
"taskDurationMs": 690.64,
"heapDeltaBytes": 11941840,
"heapUsedBytes": 54675244,
"domNodes": 65,
"jsHeapTotalBytes": 23592960,
"scriptDurationMs": 91.09900000000002,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 2038.9719999999443,
"styleRecalcs": 84,
"styleRecalcDurationMs": 47.861000000000004,
"layouts": 16,
"layoutDurationMs": 4.409000000000001,
"taskDurationMs": 946.1010000000001,
"heapDeltaBytes": 2700300,
"heapUsedBytes": 54365488,
"domNodes": 74,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 99.388,
"eventListeners": 10,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.659999999999947
},
{
"name": "viewport-pan-sweep",
"durationMs": 8225.090999999991,
"styleRecalcs": 252,
"styleRecalcDurationMs": 46.235,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3655.988,
"heapDeltaBytes": 27989968,
"heapUsedBytes": 78916488,
"domNodes": -253,
"jsHeapTotalBytes": 19542016,
"scriptDurationMs": 1204.213,
"eventListeners": -105,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "viewport-pan-sweep",
"durationMs": 8170.540999999957,
"styleRecalcs": 251,
"styleRecalcDurationMs": 45.06399999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3711.785,
"heapDeltaBytes": 24478372,
"heapUsedBytes": 75082096,
"domNodes": -257,
"jsHeapTotalBytes": 19542016,
"scriptDurationMs": 1201.327,
"eventListeners": -111,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "viewport-pan-sweep",
"durationMs": 8183.445000000006,
"styleRecalcs": 251,
"styleRecalcDurationMs": 45.075,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3691.466000000001,
"heapDeltaBytes": 25217980,
"heapUsedBytes": 76239544,
"domNodes": -256,
"jsHeapTotalBytes": 19804160,
"scriptDurationMs": 1201.854,
"eventListeners": -107,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
},
{
"name": "vue-large-graph-idle",
"durationMs": 10533.663999999988,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10522.532,
"heapDeltaBytes": -31543380,
"heapUsedBytes": 163373876,
"domNodes": -8331,
"jsHeapTotalBytes": 23683072,
"scriptDurationMs": 548.388,
"eventListeners": -16468,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "vue-large-graph-idle",
"durationMs": 10512.842000000035,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10497.828,
"heapDeltaBytes": -37496564,
"heapUsedBytes": 157190368,
"domNodes": -8331,
"jsHeapTotalBytes": 16343040,
"scriptDurationMs": 547.4159999999999,
"eventListeners": -16466,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000073
},
{
"name": "vue-large-graph-idle",
"durationMs": 10665.596999999934,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 10649.431,
"heapDeltaBytes": -33645944,
"heapUsedBytes": 162851056,
"domNodes": -8331,
"jsHeapTotalBytes": 24731648,
"scriptDurationMs": 531.4810000000001,
"eventListeners": -16468,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999971
},
{
"name": "vue-large-graph-pan",
"durationMs": 12718.185000000005,
"styleRecalcs": 67,
"styleRecalcDurationMs": 14.201000000000018,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12695.11,
"heapDeltaBytes": -45048164,
"heapUsedBytes": 148547292,
"domNodes": -8331,
"jsHeapTotalBytes": -3842048,
"scriptDurationMs": 819.6159999999999,
"eventListeners": -16488,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999971
},
{
"name": "vue-large-graph-pan",
"durationMs": 12706.457999999999,
"styleRecalcs": 67,
"styleRecalcDurationMs": 14.585999999999988,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12687.669000000002,
"heapDeltaBytes": -45858000,
"heapUsedBytes": 148710732,
"domNodes": -8333,
"jsHeapTotalBytes": -1482752,
"scriptDurationMs": 844.3759999999999,
"eventListeners": -16488,
"totalBlockingTimeMs": 34,
"frameDurationMs": 18.329999999999927
},
{
"name": "vue-large-graph-pan",
"durationMs": 12515.919000000053,
"styleRecalcs": 64,
"styleRecalcDurationMs": 14.068999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12495.244,
"heapDeltaBytes": -21719076,
"heapUsedBytes": 173807040,
"domNodes": -8331,
"jsHeapTotalBytes": 25432064,
"scriptDurationMs": 827.452,
"eventListeners": -16460,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.33000000000029
},
{
"name": "workflow-execution",
"durationMs": 108.78599999995231,
"styleRecalcs": 10,
"styleRecalcDurationMs": 16.031999999999996,
"layouts": 5,
"layoutDurationMs": 1.474,
"taskDurationMs": 88.57799999999999,
"heapDeltaBytes": 2904104,
"heapUsedBytes": 46736264,
"domNodes": 147,
"jsHeapTotalBytes": 524288,
"scriptDurationMs": 23.892000000000003,
"eventListeners": 37,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000027
},
{
"name": "workflow-execution",
"durationMs": 465.5450000000201,
"styleRecalcs": 17,
"styleRecalcDurationMs": 23.605,
"layouts": 5,
"layoutDurationMs": 1.426,
"taskDurationMs": 127.36799999999998,
"heapDeltaBytes": 4503516,
"heapUsedBytes": 48825492,
"domNodes": 158,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 29.248,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.65999999999999
},
{
"name": "workflow-execution",
"durationMs": 101.81899999997768,
"styleRecalcs": 8,
"styleRecalcDurationMs": 12.735999999999997,
"layouts": 4,
"layoutDurationMs": 1.2020000000000002,
"taskDurationMs": 81.992,
"heapDeltaBytes": 2566840,
"heapUsedBytes": 47722564,
"domNodes": 142,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 19.875999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.660000000000036
}
]
} |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
browser_tests/tests/cloud.spec.ts (1)
9-11: Replace rawdata-testidstrings with centralized selectors.Lines 9-11 and Line 21 hardcode test IDs. Please import and use shared
TestIdsconstants to prevent selector drift.As per coding guidelines: "Use centralized TestIds from
fixtures/selectors.tsfor DOM element selection in E2E tests".Also applies to: 21-21
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@browser_tests/tests/cloud.spec.ts` around lines 9 - 11, The test hardcodes data-testid strings when selecting elements (e.g., the subscribeButton created via comfyPage.page.getByTestId('topbar-subscribe-button') and the other selector at line 21); import the shared TestIds constant from fixtures/selectors.ts and replace those raw strings with the appropriate TestIds properties (e.g., TestIds.TopbarSubscribe or the matching key) when calling getByTestId so all selectors use the centralized TestIds object instead of literal test-id strings.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@browser_tests/tests/cloud.spec.ts`:
- Around line 9-11: The test hardcodes data-testid strings when selecting
elements (e.g., the subscribeButton created via
comfyPage.page.getByTestId('topbar-subscribe-button') and the other selector at
line 21); import the shared TestIds constant from fixtures/selectors.ts and
replace those raw strings with the appropriate TestIds properties (e.g.,
TestIds.TopbarSubscribe or the matching key) when calling getByTestId so all
selectors use the centralized TestIds object instead of literal test-id strings.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 877f1ad4-2f7a-48bd-8f64-1d220a22863c
📒 Files selected for processing (3)
browser_tests/tests/cloud.spec.tspackage.jsonplaywright.config.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
browser_tests/tests/cloud.spec.ts (2)
9-10: Use centralized TestIds instead of inline string literalsPlease replace raw test-id strings with constants from
browser_tests/fixtures/selectors.tsfor consistency and safer refactors.As per coding guidelines: "Use centralized TestIds from
fixtures/selectors.tsfor DOM element selection in E2E tests".Also applies to: 23-23
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@browser_tests/tests/cloud.spec.ts` around lines 9 - 10, Replace inline test-id string literals used in comfyPage.page.getByTestId (e.g., the 'topbar-subscribe-button' occurrence assigned to subscribeButton and the similar usage at the other location) with the centralized constants exported from browser_tests/fixtures/selectors.ts; import the appropriate constant (for example TOPBAR_SUBSCRIBE_BUTTON or the name used in selectors.ts) at the top of the test file and pass that constant to comfyPage.page.getByTestId instead of the raw string for both occurrences.
27-30: Prefer explicit non-rendered assertion for cloud-only removalLine 30 uses
toBeHidden(), which also passes for elements that exist but are merely hidden. Since this behavior is distribution-gated,toHaveCount(0)is a stricter check.Suggested fix
- await expect(bottomPanelToggle).toBeHidden() + await expect(bottomPanelToggle).toHaveCount(0)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@browser_tests/tests/cloud.spec.ts` around lines 27 - 30, The test currently asserts existence+hidden via the locator bottomPanelToggle and expect(...).toBeHidden(), which can pass for an element that exists but is hidden; instead assert non-rendered by checking the locator has count 0. Replace the toBeHidden() assertion on bottomPanelToggle (from sideToolbar.getByRole('button', { name: /bottom panel|terminal/i })) with an assertion that that locator has count 0 (await expect(bottomPanelToggle).toHaveCount(0) or re-query via sideToolbar.getByRole(...).toHaveCount(0)) so the test fails if the button exists but is hidden.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@browser_tests/tests/cloud.spec.ts`:
- Around line 15-17: Replace the flaky assertion that uses
subscribeButton.or(comfyPage.page.locator('body')) with a direct DOM existence
check and centralize the selector: change the test to assert await
expect(subscribeButton).toBeAttached() (or await
expect(subscribeButton).toBeVisible() if you mock billing state) so the body
fallback cannot mask failures, and add the 'topbar-subscribe-button' selector to
the TestIds export in fixtures/selectors.ts (mirroring how side-toolbar is
centralized) so the test imports TestIds.topbarSubscribeButton instead of
hardcoding the locator.
---
Nitpick comments:
In `@browser_tests/tests/cloud.spec.ts`:
- Around line 9-10: Replace inline test-id string literals used in
comfyPage.page.getByTestId (e.g., the 'topbar-subscribe-button' occurrence
assigned to subscribeButton and the similar usage at the other location) with
the centralized constants exported from browser_tests/fixtures/selectors.ts;
import the appropriate constant (for example TOPBAR_SUBSCRIBE_BUTTON or the name
used in selectors.ts) at the top of the test file and pass that constant to
comfyPage.page.getByTestId instead of the raw string for both occurrences.
- Around line 27-30: The test currently asserts existence+hidden via the locator
bottomPanelToggle and expect(...).toBeHidden(), which can pass for an element
that exists but is hidden; instead assert non-rendered by checking the locator
has count 0. Replace the toBeHidden() assertion on bottomPanelToggle (from
sideToolbar.getByRole('button', { name: /bottom panel|terminal/i })) with an
assertion that that locator has count 0 (await
expect(bottomPanelToggle).toHaveCount(0) or re-query via
sideToolbar.getByRole(...).toHaveCount(0)) so the test fails if the button
exists but is hidden.
🪄 Autofix (Beta)
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: CHILL
Plan: Pro
Run ID: d6ccd66b-def2-4e3f-9232-838c463c002a
📒 Files selected for processing (1)
browser_tests/tests/cloud.spec.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@browser_tests/tests/cloud.spec.ts`:
- Around line 7-14: The test name currently claims "subscribe button is visible
for free-tier users `@cloud`" but the assertion uses
comfyPage.page.getByTestId(TestIds.topbar.subscribeButton) and await
expect(subscribeButton).toBeAttached(), which only checks attachment, not
visibility; either update the assertion to await
expect(subscribeButton).toBeVisible() to match the test title or rename the test
string in the test("...") to say "is attached" (or similar). Locate the test by
the test name and symbols comfyPage, subscribeButton, and
TestIds.topbar.subscribeButton and make the single change so the name and
assertion align.
🪄 Autofix (Beta)
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: CHILL
Plan: Pro
Run ID: fd9681e6-7ce4-4658-bbea-73988bbaee93
📒 Files selected for processing (2)
browser_tests/fixtures/selectors.tsbrowser_tests/tests/cloud.spec.ts
|
testing locally.... |
wasn't able to get past authentication locally. Can we fix the merge conflicts pls |
cca34c4 to
07d32a9
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@browser_tests/tests/cloud.spec.ts`:
- Around line 7-14: The test "subscribe button is attached in cloud mode `@cloud`"
depends on a free-tier authenticated user, so either document that precondition
near the test, ensure the cloud test fixture authenticates a free-tier user
(update the comfyPage setup/auth helper used by this test to sign in a free-tier
account), or guard the test with a runtime skip if the current user isn't
free-tier (use the same pattern as missingMedia.spec.ts); locate the test by the
name and the use of TestIds.topbar.subscribeButton / comfyPage.page.getByTestId
and apply one of these fixes so the test no longer fails when run against
non-free-tier cloud environments.
🪄 Autofix (Beta)
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: CHILL
Plan: Pro
Run ID: 313c173f-9aca-432e-a237-32e5b92aae41
📒 Files selected for processing (4)
browser_tests/fixtures/selectors.tsbrowser_tests/tests/cloud.spec.tspackage.jsonplaywright.config.ts
✅ Files skipped from review due to trivial changes (1)
- package.json
🚧 Files skipped from review as they are similar to previous changes (2)
- browser_tests/fixtures/selectors.ts
- playwright.config.ts
There was a problem hiding this comment.
We need to add a new workflow variant of https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/.github/workflows/ci-tests-e2e.yaml that just uses env variable DISTRIBUTION=cloud during the setup frontend step. Otherwise the vite define variable is not interpolated at build time.
If possible, use matrix in playwright config or matrix in the existing ci-tests-e2e.yaml instead of duplicating a ton of code.
Addresses review feedback: #10546 (comment) #10546 (comment)
Addresses review feedback: #10546 (comment)
christian-byrne
left a comment
There was a problem hiding this comment.
Did you not see previous comments or reviews? we still need a build step that does DISTRIBUTION=cloud pnpm build
- Add 'cloud' Playwright project for testing DISTRIBUTION=cloud builds
- Add build:cloud npm script (DISTRIBUTION=cloud vite build)
- Cloud project uses grep: /@cloud/ to run cloud-only tests
- Default chromium project uses grepInvert to exclude @cloud tests
- Add 2 example cloud-only tests (subscribe button, bottom panel toggle)
- Runtime toggle investigation: NOT feasible (breaks tree-shaking)
→ separate build approach chosen
Convention:
test('feature works @cloud', ...) — cloud-only
test('feature works @oss', ...) — OSS-only
test('feature works', ...) — runs in both
Part of: Test Coverage Q2 Overhaul (UTIL-07)
…ds, stricter assertions
Addresses review feedback: #10546 (comment) #10546 (comment)
Addresses review feedback: #10546 (comment)
d20fb2b to
703283e
Compare
|
Branch has been rebased onto main — no conflicts. Force-pushed with the rebased history. |
|
Addressed in the latest force-push:
|
Nx cached the first OSS build and returned it for the cloud build since env vars aren't part of the cache key. This caused cloud tests to run against the OSS build where __DISTRIBUTION__ is 'localhost' instead of 'cloud', making cloud-only UI elements (subscribe button, hidden bottom panel) not render correctly.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Cloud build has an auth guard that redirects to /cloud/login when no Firebase auth is configured (CI has no auth). Previous tests used comfyPageFixture which waits for the graph editor to load, causing timeouts since the auth guard redirects before that. New tests verify: 1. Cloud build redirects to /cloud/login (route only exists in cloud distribution, tree-shaken in OSS) 2. Cloud login page renders sign-in options Uses raw Playwright test fixture instead of comfyPageFixture since we don't need the full graph editor setup.
What
Adds a
cloudPlaywright project so E2E tests can run againstDISTRIBUTION=cloudbuilds, with@cloud/@osstest tagging.Why
100+ usages of
isCloud/DISTRIBUTIONacross 9 categories (API routing, UI visibility, settings, auth). Zero cloud test infrastructure existed — cloud-specific UI components (LoginButton, SubscribeButton, etc.) had no E2E coverage path.Investigation: Runtime Toggle
Investigated whether
isCloudcould be made runtime-toggleable in dev/test mode (viawindow.__FORCE_CLOUD__). Not feasible —__DISTRIBUTION__is a Vitedefinecompile-time constant used for dead-code elimination. Runtime override would break tree-shaking in production.Full investigation:
research/architecture/cloud-runtime-toggle-investigation.mdWhat's included
Playwright Config
cloudproject alongside existingchromiumgrep: /@cloud/— only runs@cloudtagged testsgrepInvert: /@cloud/— excludes cloud testsBuild Script
npm run build:cloud→DISTRIBUTION=cloud vite buildTest Tagging Convention
Example Tests
NOT included (future work)
Unblocks
Part of: Test Coverage Q2 Overhaul
┆Issue is synchronized with this Notion page by Unito