ci: run typecheck:browser unconditionally so browser_tests type errors block main (FE-1507) - #14717
Conversation
The step was gated on a dorny/paths-filter check for browser_tests/**, so a src/ change that broke a type the E2E fixtures consume skipped the typecheck entirely, and merge_group runs have no diff for paths-filter to inspect. Nine type errors had already reached main this way: BillingStatusResponse gained required max_seats/occupied_seats fields that the cloud billing fixtures never picked up. Drop the gate and backfill the two fields on the affected fixtures. The typecheck takes ~11s, so running it on every PR, merge-queue and push run costs almost nothing.
🎭 Playwright: ✅ 1786 passed, 0 failed · 3 flaky📊 Browser Reports
📦 Bundle: 8.26 MB gzip ⚪ 0 BDetailsSummary
Category Glance App Entry Points — 3.64 kB (baseline 3.64 kB) • ⚪ 0 BMain entry bundles and manifests Status: 1 unchanged Graph Workspace — 1.35 MB (baseline 1.35 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration Status: 2 unchanged Views & Navigation — 124 kB (baseline 124 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces Status: 17 unchanged Panels & Settings — 552 kB (baseline 552 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens Status: 27 unchanged User & Accounts — 27 kB (baseline 27 kB) • ⚪ 0 BAuthentication, profile, and account management bundles Status: 10 unchanged Editors & Dialogs — 124 kB (baseline 124 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors Status: 7 unchanged UI Components — 72.1 kB (baseline 72.1 kB) • ⚪ 0 BReusable component library chunks Status: 15 unchanged Data & Services — 3.48 MB (baseline 3.48 MB) • ⚪ 0 BStores, services, APIs, and repositories Status: 17 unchanged Utilities & Hooks — 387 kB (baseline 387 kB) • ⚪ 0 BHelpers, composables, and utility bundles Status: 36 unchanged Vendor & Third-Party — 15.7 MB (baseline 15.7 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 12.8 MB (baseline 12.8 MB) • ⚪ 0 BBundles that do not match a named category Status: 284 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-08-05T20:52:51.555Z",
"gitSha": "04ab1aaec77e8191948d6d747b6c0cb62691e96c",
"branch": "glary/fe-1507-unconditional-typecheck-browser",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2022.3580000000254,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.5,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 540.902,
"heapDeltaBytes": 5741092,
"heapUsedBytes": 69734596,
"domNodes": 20,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 21.814,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2038.34599999999,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.847999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 464.353,
"heapDeltaBytes": 5532272,
"heapUsedBytes": 69435248,
"domNodes": 20,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 16.521,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1973.1840000000034,
"styleRecalcs": 78,
"styleRecalcDurationMs": 46.751,
"layouts": 12,
"layoutDurationMs": 3.811,
"taskDurationMs": 1014.172,
"heapDeltaBytes": 395636,
"heapUsedBytes": 64558296,
"domNodes": 61,
"jsHeapTotalBytes": 25952256,
"scriptDurationMs": 150.54600000000002,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1857.0030000000202,
"styleRecalcs": 75,
"styleRecalcDurationMs": 38.459999999999994,
"layouts": 12,
"layoutDurationMs": 3.974,
"taskDurationMs": 903.4279999999999,
"heapDeltaBytes": -17222932,
"heapUsedBytes": 47013584,
"domNodes": -281,
"jsHeapTotalBytes": 23310336,
"scriptDurationMs": 122.948,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1755.9510000000387,
"styleRecalcs": 32,
"styleRecalcDurationMs": 19.053,
"layouts": 6,
"layoutDurationMs": 0.627,
"taskDurationMs": 446.82700000000006,
"heapDeltaBytes": 8385852,
"heapUsedBytes": 72374088,
"domNodes": 78,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 25.970999999999997,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1737.679000000071,
"styleRecalcs": 31,
"styleRecalcDurationMs": 17.87,
"layouts": 6,
"layoutDurationMs": 0.634,
"taskDurationMs": 368.022,
"heapDeltaBytes": 8255572,
"heapUsedBytes": 72460444,
"domNodes": 78,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 17.794,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 588.1870000000049,
"styleRecalcs": 11,
"styleRecalcDurationMs": 7.2250000000000005,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 381.816,
"heapDeltaBytes": -10943132,
"heapUsedBytes": 53007076,
"domNodes": 18,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 61.24399999999999,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 576.5039999999999,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.113999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 388.176,
"heapDeltaBytes": -11005012,
"heapUsedBytes": 53064972,
"domNodes": 20,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 60.983999999999995,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2040.9660000000258,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.255000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 692.719,
"heapDeltaBytes": 7243544,
"heapUsedBytes": 67210976,
"domNodes": -282,
"jsHeapTotalBytes": 3252224,
"scriptDurationMs": 113.16499999999999,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2014.8770000000695,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.149000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 672.2490000000001,
"heapDeltaBytes": 4661728,
"heapUsedBytes": 64009272,
"domNodes": -281,
"jsHeapTotalBytes": 3514368,
"scriptDurationMs": 103.711,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2163.778999999977,
"styleRecalcs": 69,
"styleRecalcDurationMs": 14.202999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1260.0849999999998,
"heapDeltaBytes": 3959332,
"heapUsedBytes": 64120296,
"domNodes": -283,
"jsHeapTotalBytes": 2920448,
"scriptDurationMs": 418.35,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2198.996000000079,
"styleRecalcs": 69,
"styleRecalcDurationMs": 13.854999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1265.752,
"heapDeltaBytes": 5199424,
"heapUsedBytes": 65553932,
"domNodes": -284,
"jsHeapTotalBytes": 3706880,
"scriptDurationMs": 433.897,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3199.0820000000326,
"styleRecalcs": 63,
"styleRecalcDurationMs": 12.616999999999999,
"layouts": 60,
"layoutDurationMs": 7.129,
"taskDurationMs": 1505.164,
"heapDeltaBytes": -2640752,
"heapUsedBytes": 60151916,
"domNodes": -288,
"jsHeapTotalBytes": 7184384,
"scriptDurationMs": 531.793,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3128.6079999999856,
"styleRecalcs": 65,
"styleRecalcDurationMs": 14.194000000000003,
"layouts": 60,
"layoutDurationMs": 7.319999999999999,
"taskDurationMs": 1427.2279999999998,
"heapDeltaBytes": 23120364,
"heapUsedBytes": 85149388,
"domNodes": 12,
"jsHeapTotalBytes": 7602176,
"scriptDurationMs": 518.493,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2038.5970000000384,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.198999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 758.281,
"heapDeltaBytes": 7060580,
"heapUsedBytes": 67469204,
"domNodes": -282,
"jsHeapTotalBytes": 4038656,
"scriptDurationMs": 123.228,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "minimap-idle",
"durationMs": 2035.8210000000554,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.619000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 655.409,
"heapDeltaBytes": 7112308,
"heapUsedBytes": 68082136,
"domNodes": -282,
"jsHeapTotalBytes": 2727936,
"scriptDurationMs": 100.411,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 604.8359999999775,
"styleRecalcs": 46,
"styleRecalcDurationMs": 10.585,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 408.879,
"heapDeltaBytes": -10698260,
"heapUsedBytes": 53356600,
"domNodes": 18,
"jsHeapTotalBytes": 26214400,
"scriptDurationMs": 122.302,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 563.4099999999762,
"styleRecalcs": 47,
"styleRecalcDurationMs": 9.721999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 387.322,
"heapDeltaBytes": -10937572,
"heapUsedBytes": 53346356,
"domNodes": 20,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 115.57199999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2013.2669999999848,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.802000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 462.90799999999996,
"heapDeltaBytes": 5092124,
"heapUsedBytes": 69341172,
"domNodes": 18,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 14.014000000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 1994.7590000000446,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.113,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 505.6240000000001,
"heapDeltaBytes": 5063944,
"heapUsedBytes": 69307820,
"domNodes": 20,
"jsHeapTotalBytes": 26214400,
"scriptDurationMs": 17.302,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1723.4200000000328,
"styleRecalcs": 77,
"styleRecalcDurationMs": 36.869,
"layouts": 16,
"layoutDurationMs": 4.358,
"taskDurationMs": 788.326,
"heapDeltaBytes": -4081900,
"heapUsedBytes": 60315344,
"domNodes": 63,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 93.164,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1701.112999999964,
"styleRecalcs": 76,
"styleRecalcDurationMs": 37.6,
"layouts": 16,
"layoutDurationMs": 4.888,
"taskDurationMs": 777.1519999999999,
"heapDeltaBytes": -3755288,
"heapUsedBytes": 60467672,
"domNodes": 62,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 91.743,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 1401.520000000005,
"styleRecalcs": 17,
"styleRecalcDurationMs": 29.703999999999994,
"layouts": 13,
"layoutDurationMs": 12.237000000000002,
"taskDurationMs": 964.073,
"heapDeltaBytes": 8717332,
"heapUsedBytes": 100691484,
"domNodes": 13673,
"jsHeapTotalBytes": 11272192,
"scriptDurationMs": 35.519999999999996,
"eventListeners": 2375,
"totalBlockingTimeMs": 129,
"frameDurationMs": 16.666666666666696,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "viewport-pan-sweep",
"durationMs": 8308.613000000038,
"styleRecalcs": 250,
"styleRecalcDurationMs": 36.477999999999994,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4527.017,
"heapDeltaBytes": 26183912,
"heapUsedBytes": 86307264,
"domNodes": -284,
"jsHeapTotalBytes": 5017600,
"scriptDurationMs": 1401.0660000000003,
"eventListeners": -165,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8283.64600000009,
"styleRecalcs": 251,
"styleRecalcDurationMs": 37.119,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4388.012,
"heapDeltaBytes": 11973556,
"heapUsedBytes": 71263780,
"domNodes": -280,
"jsHeapTotalBytes": 5804032,
"scriptDurationMs": 1379.919,
"eventListeners": -133,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 16967.195000000003,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16928.517,
"heapDeltaBytes": -39995444,
"heapUsedBytes": 170573428,
"domNodes": -8312,
"jsHeapTotalBytes": -2826240,
"scriptDurationMs": 575.6170000000001,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.80000000000291
},
{
"name": "vue-large-graph-idle",
"durationMs": 16968.011000000046,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16946.962999999996,
"heapDeltaBytes": -60932688,
"heapUsedBytes": 166833008,
"domNodes": -8312,
"jsHeapTotalBytes": -10166272,
"scriptDurationMs": 510.738,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.780000000000047,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20948.402999999984,
"styleRecalcs": 145,
"styleRecalcDurationMs": 18.813999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20913.057,
"heapDeltaBytes": -70411520,
"heapUsedBytes": 155627268,
"domNodes": -8312,
"jsHeapTotalBytes": -7806976,
"scriptDurationMs": 928.3569999999999,
"eventListeners": -16383,
"totalBlockingTimeMs": 234,
"frameDurationMs": 17.77333333333336,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 20272.571999999967,
"styleRecalcs": 134,
"styleRecalcDurationMs": 15.77099999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20242.430000000004,
"heapDeltaBytes": -53004924,
"heapUsedBytes": 153545444,
"domNodes": -8312,
"jsHeapTotalBytes": -9609216,
"scriptDurationMs": 887.4739999999998,
"eventListeners": -16383,
"totalBlockingTimeMs": 100,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 481.04699999998957,
"styleRecalcs": 19,
"styleRecalcDurationMs": 22.604000000000003,
"layouts": 4,
"layoutDurationMs": 1.513,
"taskDurationMs": 129.262,
"heapDeltaBytes": 5434284,
"heapUsedBytes": 68484384,
"domNodes": 158,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 10.309000000000003,
"eventListeners": 99,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 460.7180000000426,
"styleRecalcs": 14,
"styleRecalcDurationMs": 17.392,
"layouts": 3,
"layoutDurationMs": 0.673,
"taskDurationMs": 103.154,
"heapDeltaBytes": 5076380,
"heapUsedBytes": 68353344,
"domNodes": 123,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 9.449999999999998,
"eventListeners": 97,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
📝 WalkthroughWalkthroughThe PR makes browser-tests typechecking unconditional in the lint-format action. It also adds maximum and occupied seat data to cloud billing fixtures and pricing deep-link test statuses. ChangesBrowser typechecking
Billing seat fixtures
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
📄 Knowledge reviewDosu skipped reviewing this PR because your organization has used its |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #14717 +/- ##
==========================================
+ Coverage 77.47% 78.75% +1.28%
==========================================
Files 1804 1803 -1
Lines 112180 109400 -2780
Branches 32503 30152 -2351
==========================================
- Hits 86911 86160 -751
+ Misses 24651 22750 -1901
+ Partials 618 490 -128
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.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts (1)
91-92: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winKeep one seat-capacity pair in
ACTIVE_TEAM_STATUS.The object defines these fields again at Lines 105-106. The later
max_seats: 30overwritesmax_seats: 50, so the fixture no longer represents the 50-seat team plan. Remove one pair and retainmax_seats: 50withoccupied_seats: 1.🤖 Prompt for 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. In `@browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts` around lines 91 - 92, In the ACTIVE_TEAM_STATUS fixture, remove the duplicate max_seats/occupied_seats pair and retain the values max_seats: 50 and occupied_seats: 1 so the fixture represents the 50-seat team plan.Source: Linters/SAST tools
browser_tests/fixtures/data/cloudWorkspace.ts (1)
77-78: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winRemove duplicate seat-capacity fields from all billing fixtures.
Each affected object defines
max_seatsandoccupied_seatstwice. Later properties overwrite earlier properties. This makesACTIVE_TEAM_STATUSreport 30 seats instead of 50 and triggers duplicate-key lint errors.
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts#L91-L92: keep one pair withmax_seats: 50andoccupied_seats: 1.browser_tests/fixtures/data/cloudWorkspace.ts#L77-L78: keep one pair and useTEAM_PLAN_MAX_SEATS.browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts#L111-L112: keep one pair withmax_seats: 1andoccupied_seats: 1.🤖 Prompt for 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. In `@browser_tests/fixtures/data/cloudWorkspace.ts` around lines 77 - 78, Remove the duplicate max_seats and occupied_seats properties from all affected billing fixtures. In browser_tests/fixtures/data/cloudWorkspace.ts:77-78, retain one pair using TEAM_PLAN_MAX_SEATS; in browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts:91-92, retain max_seats 50 and occupied_seats 1; and at browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts:111-112, retain max_seats 1 and occupied_seats 1.Source: Linters/SAST tools
🤖 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.
Outside diff comments:
In `@browser_tests/fixtures/data/cloudWorkspace.ts`:
- Around line 77-78: Remove the duplicate max_seats and occupied_seats
properties from all affected billing fixtures. In
browser_tests/fixtures/data/cloudWorkspace.ts:77-78, retain one pair using
TEAM_PLAN_MAX_SEATS; in
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts:91-92, retain max_seats
50 and occupied_seats 1; and at
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts:111-112, retain
max_seats 1 and occupied_seats 1.
In `@browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts`:
- Around line 91-92: In the ACTIVE_TEAM_STATUS fixture, remove the duplicate
max_seats/occupied_seats pair and retain the values max_seats: 50 and
occupied_seats: 1 so the fixture represents the 50-seat team plan.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 12a230dc-2346-4c42-92df-d2f0f2a21640
📒 Files selected for processing (2)
browser_tests/fixtures/data/cloudWorkspace.tsbrowser_tests/tests/dialogs/pricingTableDeepLink.spec.ts
…n main The seat-capacity backfill in this branch duplicated the fields #14050 added to the same fixtures, so merging main in produced duplicate object keys. Main already makes typecheck:browser green; this branch is now the CI change alone.
|
Both duplicate-key findings were valid, and the cause was upstream rather than in the original diff — resolved by dropping my fixture edits entirely. What happened: Since
The merge commit 00f5e5d is preserved; nothing was force-rewritten over it. Verified on the new tip: Two notes for reviewers:
|
PR Created by the Glary-Bot Agent
Summary
pnpm typecheck:browserwas gated on abrowser_tests/**paths filter, so type errors in the E2E suite could reachmain— and nine of them already had.Changes
dorny/paths-filterstep and theif: steps.changed-paths.outputs.browser_tests == 'true'gate from.github/actions/lint-format-verify/action.yml, so the browser typecheck runs on every PR, merge-queue and push run of the requiredCI: Lint Formatcheck. Backfilled themax_seats/occupied_seatsfields the cloud billing fixtures were missing, which is what the gate had been hiding.Why the gate was wrong on both sides:
src/change can breakbrowser_teststypes without touchingbrowser_tests/**. That is exactly what happened here:BillingStatusResponsegained requiredmax_seats/occupied_seatsin the ingest-types regen ([chore] Update Ingest API types from cloud@9cd6161 #13499) and the fixtures were never updated.paths-filterhas no diff to inspect inmerge_groupruns, so the merge queue — the last gate beforemain— could not have caught it either.pnpm typecheck:browseronmaintoday:On this branch it exits 0 in ~11s, so the always-on step adds negligible CI time.
Review Focus
max_seats/occupied_seatsvalues are mock-only: nothing insrc/reads either field (the app's ownBillingStatusResponseinworkspaceApi.tsdoes not declare them), so no E2E behaviour changes. Values are anchored to existing fixture data —TEAM_PLAN_MAX_SEATSfor the team plan's seat limit,DEFAULT_TEAM_MEMBERS.lengthfor occupancy,STANDARD_ANNUAL_PLAN.max_seatsfor the personal plan.ACTIVE_CREATOR_STATUS,LEGACY_ACTIVE_STANDARD_STATUS,RECOVERED_3DS_STATUS) inherit the new fields through their spreads, so only the two base objects needed editing.dorny/paths-filteris still used by.github/actions/changes-filter/action.yaml, so its pin remains exercised byCI: Validate Action Pins.Fixes FE-1507
Verification
Ran the composite action's exact command sequence locally on this branch —
pnpm lint && pnpm stylelint && pnpm format:check && pnpm knip && pnpm typecheck:browser— exit 0.yamllint(theCI: YAML Validationgate) clean on the changed action, and the parsed action confirms noif:remains on the typecheck step.Playwright could not confirm the two touched specs end-to-end here:
@cloudspecs need the cloud-distribution build, and against a plainpnpm devserver the settings dialog has no Workspace panel, soendedSubscription.spec.tstimes out. It times out identically with these changes stashed, i.e. the failure is environmental, not a regression. No screenshots — the change has no UI surface.