Skip to content

ci: run typecheck:browser unconditionally so browser_tests type errors block main (FE-1507) - #14717

Merged
DrJKL merged 4 commits into
mainfrom
glary/fe-1507-unconditional-typecheck-browser
Aug 5, 2026
Merged

ci: run typecheck:browser unconditionally so browser_tests type errors block main (FE-1507)#14717
DrJKL merged 4 commits into
mainfrom
glary/fe-1507-unconditional-typecheck-browser

Conversation

@DrJKL

@DrJKL DrJKL commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

PR Created by the Glary-Bot Agent


Summary

pnpm typecheck:browser was gated on a browser_tests/** paths filter, so type errors in the E2E suite could reach main — and nine of them already had.

Changes

  • What: Removed the dorny/paths-filter step and the if: 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 required CI: Lint Format check. Backfilled the max_seats / occupied_seats fields the cloud billing fixtures were missing, which is what the gate had been hiding.

Why the gate was wrong on both sides:

  • A src/ change can break browser_tests types without touching browser_tests/**. That is exactly what happened here: BillingStatusResponse gained required max_seats / occupied_seats in the ingest-types regen ([chore] Update Ingest API types from cloud@9cd6161 #13499) and the fixtures were never updated.
  • paths-filter has no diff to inspect in merge_group runs, so the merge queue — the last gate before main — could not have caught it either.

pnpm typecheck:browser on main today:

browser_tests/fixtures/data/cloudWorkspace.ts(84,3): error TS1360
browser_tests/fixtures/data/cloudWorkspace.ts(96,3): error TS1360
browser_tests/fixtures/helpers/CloudWorkspaceMockHelper.ts(51,5): error TS2739
browser_tests/tests/dialogs/endedSubscription.spec.ts(22,7): error TS2345
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts(103,3): error TS1360
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts(115,3): error TS1360
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts(121,3): error TS1360
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts(126,3): error TS1360
browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts(300,3): error TS1360

On this branch it exits 0 in ~11s, so the always-on step adds negligible CI time.

Review Focus

  • The added max_seats / occupied_seats values are mock-only: nothing in src/ reads either field (the app's own BillingStatusResponse in workspaceApi.ts does not declare them), so no E2E behaviour changes. Values are anchored to existing fixture data — TEAM_PLAN_MAX_SEATS for the team plan's seat limit, DEFAULT_TEAM_MEMBERS.length for occupancy, STANDARD_ANNUAL_PLAN.max_seats for the personal plan.
  • The derived statuses (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-filter is still used by .github/actions/changes-filter/action.yaml, so its pin remains exercised by CI: 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 (the CI: YAML Validation gate) clean on the changed action, and the parsed action confirms no if: remains on the typecheck step.

Playwright could not confirm the two touched specs end-to-end here: @cloud specs need the cloud-distribution build, and against a plain pnpm dev server the settings dialog has no Workspace panel, so endedSubscription.spec.ts times 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.

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.
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

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

📊 Browser Reports
  • chromium: View Report (✅ 1767 / ❌ 0 / ⚠️ 2 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 16 / ❌ 0 / ⚠️ 1 / ⏭️ 0)

📦 Bundle: 8.26 MB gzip ⚪ 0 B

Details

Summary

  • Raw size: 34.7 MB baseline 34.7 MB — ⚪ 0 B
  • Gzip: 8.26 MB baseline 8.26 MB — ⚪ 0 B
  • Brotli: 5.72 MB baseline 5.72 MB — ⚪ 0 B
  • Bundles: 432 current • 432 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (15.7 MB) · Other ⚪ 0 B (12.8 MB) · Data & Services ⚪ 0 B (3.48 MB) · Graph Workspace ⚪ 0 B (1.35 MB) · Panels & Settings ⚪ 0 B (552 kB) · Utilities & Hooks ⚪ 0 B (387 kB) · + 5 more

App Entry Points — 3.64 kB (baseline 3.64 kB) • ⚪ 0 B

Main entry bundles and manifests

Status: 1 unchanged

Graph Workspace — 1.35 MB (baseline 1.35 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

Status: 2 unchanged

Views & Navigation — 124 kB (baseline 124 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

Status: 17 unchanged

Panels & Settings — 552 kB (baseline 552 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

Status: 27 unchanged

User & Accounts — 27 kB (baseline 27 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

Status: 10 unchanged

Editors & Dialogs — 124 kB (baseline 124 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

Status: 7 unchanged

UI Components — 72.1 kB (baseline 72.1 kB) • ⚪ 0 B

Reusable component library chunks

Status: 15 unchanged

Data & Services — 3.48 MB (baseline 3.48 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

Status: 17 unchanged

Utilities & Hooks — 387 kB (baseline 387 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

Status: 36 unchanged

Vendor & Third-Party — 15.7 MB (baseline 15.7 MB) • ⚪ 0 B

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 12.8 MB (baseline 12.8 MB) • ⚪ 0 B

Bundles that do not match a named category

Status: 284 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.4 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.2 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.1 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 50.6 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.6 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 61.8 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.3 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.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 50.9 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.6 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 129ms TBT · 96.0 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 75.1 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 160.9 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 167ms TBT · 147.4 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.2 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 411ms 503ms +22% ⚠️ z=3.5
canvas-zoom-sweep: task duration 296ms 407ms +38% ⚠️ z=3.5
large-graph-idle: task duration 536ms 682ms +27% ⚠️ z=2.6
large-graph-pan: task duration 964ms 1263ms +31% ⚠️ z=4.2
minimap-idle: task duration 546ms 707ms +29% ⚠️ z=3.8
subgraph-idle: task duration 411ms 484ms +18% ⚠️ z=3.6
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.1
canvas-idle: p95 frame time 17ms 17ms +0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 6ms 10ms +58% z=-1.3
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 10 +0% z=-2.1
canvas-idle: task duration 411ms 503ms +22% ⚠️ z=3.5
canvas-idle: script duration 14ms 19ms +34% z=-2.7
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 66.2 MB 66.4 MB +0%
canvas-idle: DOM nodes 20 20 +0% z=-2.0
canvas-idle: event listeners 6 4 -33% z=-1.6
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-0.4
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 3ms 4ms +31% z=1.4
canvas-mouse-sweep: style recalc duration 29ms 43ms +49% z=-0.0
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 72 77 +6% z=-0.9
canvas-mouse-sweep: task duration 676ms 959ms +42% z=1.6
canvas-mouse-sweep: script duration 98ms 137ms +39% z=0.2
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 43.7 MB 53.2 MB +22%
canvas-mouse-sweep: DOM nodes 28 -110 -493% z=-66.6
canvas-mouse-sweep: event listeners -149 -74 -51% z=-19.7
canvas-zoom-sweep: avg frame time 17ms 17ms +0% z=0.5
canvas-zoom-sweep: p95 frame time 17ms 17ms +0%
canvas-zoom-sweep: layout duration 0ms 1ms +28% z=-0.3
canvas-zoom-sweep: style recalc duration 13ms 18ms +45% z=-0.4
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 32 +2% z=0.5
canvas-zoom-sweep: task duration 296ms 407ms +38% ⚠️ z=3.5
canvas-zoom-sweep: script duration 15ms 22ms +42% z=-1.7
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 69.3 MB 69.1 MB -0%
canvas-zoom-sweep: DOM nodes 77 78 +1% z=-1.6
canvas-zoom-sweep: event listeners 19 19 +0% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
dom-widget-clipping: p95 frame time 17ms 17ms -1%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 7ms 8ms +10% z=-2.8
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 12 12 -4% z=-3.2
dom-widget-clipping: task duration 299ms 385ms +29% z=1.2
dom-widget-clipping: script duration 46ms 61ms +33% z=-2.1
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 50.4 MB 50.6 MB +0%
dom-widget-clipping: DOM nodes 20 19 -5% z=-2.2
dom-widget-clipping: event listeners 2 0 -100% variance too high
large-graph-idle: avg frame time 17ms 17ms -0% z=-0.6
large-graph-idle: p95 frame time 17ms 17ms -0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 6ms 9ms +47% z=-3.4
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 10 9 -15% z=-9.9
large-graph-idle: task duration 536ms 682ms +27% ⚠️ z=2.6
large-graph-idle: script duration 73ms 108ms +48% z=0.6
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 65.6 MB 62.6 MB -5%
large-graph-idle: DOM nodes -281 -282 +0% z=-338.8
large-graph-idle: event listeners -149 -163 +9% z=-31.0
large-graph-pan: avg frame time 17ms 17ms +0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms +0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 14ms +3% z=-4.1
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 68 69 +1% z=-0.9
large-graph-pan: task duration 964ms 1263ms +31% ⚠️ z=4.2
large-graph-pan: script duration 314ms 426ms +36% z=0.9
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 58.6 MB 61.8 MB +5%
large-graph-pan: DOM nodes -283 -284 +0% z=-183.3
large-graph-pan: event listeners -147 -148 +1% z=-184.7
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms -1%
large-graph-zoom: layout duration 7ms 7ms +7%
large-graph-zoom: style recalc duration 14ms 13ms -7%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 66 64 -3%
large-graph-zoom: task duration 1204ms 1466ms +22%
large-graph-zoom: script duration 421ms 525ms +25%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 54.3 MB 69.3 MB +28%
large-graph-zoom: DOM nodes -284 -138 -51%
large-graph-zoom: event listeners -151 -73 -52%
minimap-idle: avg frame time 17ms 17ms +0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms +0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 7ms 8ms +19% z=-2.0
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 10 8 -20% z=-2.3
minimap-idle: task duration 546ms 707ms +29% ⚠️ z=3.8
minimap-idle: script duration 75ms 112ms +49% z=1.4
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 64.5 MB 64.6 MB +0%
minimap-idle: DOM nodes -282 -282 +0% z=-220.2
minimap-idle: event listeners -149 -148 -1% z=-231.1
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=1.2
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +1%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 9ms 10ms +9% z=-2.7
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 48 47 -3% z=-2.5
subgraph-dom-widget-clipping: task duration 315ms 398ms +26% z=1.1
subgraph-dom-widget-clipping: script duration 94ms 119ms +26% z=-1.5
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 51.0 MB 50.9 MB -0%
subgraph-dom-widget-clipping: DOM nodes 22 19 -14% z=-2.8
subgraph-dom-widget-clipping: event listeners 8 6 -25% z=-1.7
subgraph-idle: avg frame time 17ms 17ms +0% z=0.4
subgraph-idle: p95 frame time 17ms 17ms -0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 7ms 9ms +35% z=-1.9
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 10 10 -5% z=-2.1
subgraph-idle: task duration 411ms 484ms +18% ⚠️ z=3.6
subgraph-idle: script duration 11ms 16ms +37% z=-1.7
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 44.3 MB 66.1 MB +49%
subgraph-idle: DOM nodes 18 19 +6% z=-1.9
subgraph-idle: event listeners 0 4 variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.1
subgraph-mouse-sweep: p95 frame time 17ms 17ms +0%
subgraph-mouse-sweep: layout duration 3ms 5ms +39% z=-0.2
subgraph-mouse-sweep: style recalc duration 27ms 37ms +37% z=-1.6
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 77 77 -1% z=-1.9
subgraph-mouse-sweep: task duration 613ms 783ms +28% z=0.2
subgraph-mouse-sweep: script duration 72ms 92ms +29% z=-1.3
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 44.3 MB 57.6 MB +30%
subgraph-mouse-sweep: DOM nodes 20 63 +213% z=-2.0
subgraph-mouse-sweep: event listeners -151 4 -103% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +1%
subgraph-transition-enter: layout duration 9ms 12ms +33%
subgraph-transition-enter: style recalc duration 23ms 30ms +27%
subgraph-transition-enter: layout count 16 13 -19%
subgraph-transition-enter: style recalc count 20 17 -15%
subgraph-transition-enter: task duration 724ms 964ms +33%
subgraph-transition-enter: script duration 23ms 36ms +58%
subgraph-transition-enter: TBT 83ms 129ms +55%
subgraph-transition-enter: heap used 92.7 MB 96.0 MB +4%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2373 2375 +0%
viewport-pan-sweep: avg frame time 17ms 17ms -0%
viewport-pan-sweep: p95 frame time 17ms 17ms -1%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 37ms 37ms +1%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 251 +0%
viewport-pan-sweep: task duration 3449ms 4458ms +29%
viewport-pan-sweep: script duration 1086ms 1390ms +28%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 66.9 MB 75.1 MB +12%
viewport-pan-sweep: DOM nodes -282 -282 +0%
viewport-pan-sweep: event listeners -133 -149 +12%
vue-large-graph-idle: avg frame time 17ms 18ms +3%
vue-large-graph-idle: p95 frame time 17ms 17ms +0%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 14183ms 16938ms +19%
vue-large-graph-idle: script duration 426ms 543ms +28%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.6 MB 160.9 MB +1%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16389 -16387 -0%
vue-large-graph-pan: avg frame time 18ms 18ms +0%
vue-large-graph-pan: p95 frame time 17ms 17ms -0%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 13ms 17ms +36%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 116 140 +20%
vue-large-graph-pan: task duration 16781ms 20578ms +23%
vue-large-graph-pan: script duration 689ms 908ms +32%
vue-large-graph-pan: TBT 37ms 167ms +351%
vue-large-graph-pan: heap used 168.9 MB 147.4 MB -13%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16387 -16383 -0%
workflow-execution: avg frame time 17ms 17ms -0% z=0.1
workflow-execution: p95 frame time 17ms 17ms +1%
workflow-execution: layout duration 0ms 1ms +124% z=-3.1
workflow-execution: style recalc duration 14ms 20ms +42% z=-1.9
workflow-execution: layout count 3 4 +17% z=-2.7
workflow-execution: style recalc count 13 17 +27% z=-0.6
workflow-execution: task duration 96ms 116ms +21% z=-0.6
workflow-execution: script duration 8ms 10ms +24% z=-6.5
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 65.1 MB 65.2 MB +0%
workflow-execution: DOM nodes 134 141 +5% z=-2.9
workflow-execution: event listeners 97 98 +1% z=10.6
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
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
    }
  ]
}

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

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

Changes

Browser typechecking

Layer / File(s) Summary
Unconditional browser typecheck
.github/actions/lint-format-verify/action.yml
The action removes browser-test path detection and always runs pnpm typecheck:browser.

Billing seat fixtures

Layer / File(s) Summary
Billing seat-capacity fixture data
browser_tests/fixtures/data/cloudWorkspace.ts, browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts
Billing fixtures and test statuses now include maximum and occupied seat counts. The team plan uses a shared maximum-seat constant.

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

Possibly related PRs

Suggested reviewers: dante01yoon

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the primary CI change: running browser typechecking unconditionally.
Description check ✅ Passed The description includes the required summary, changes, review focus, issue reference, and verification details; screenshots are not applicable.
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 CI configuration and browser_tests fixtures/specs, with no src/ or packages/ files; the failure conditions are not met.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed files are CI configuration and browser-test fixtures/specs; none are under src/lib/litegraph/, src/ecs/, or graph-entity-related implementation paths.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch glary/fe-1507-unconditional-typecheck-browser

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

@DrJKL
DrJKL requested a review from huntcsg August 4, 2026 22:45
@DrJKL
DrJKL marked this pull request as ready for review August 4, 2026 22:46
@DrJKL
DrJKL requested a review from a team August 4, 2026 22:46
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 4, 2026
@dosubot

dosubot Bot commented Aug 4, 2026

Copy link
Copy Markdown

📄 Knowledge review

Dosu skipped reviewing this PR because your organization has used its 200 included credits for the month. Your usage will reset on 2026-09-01. To have Dosu review this PR before then, ask your organization admin to upgrade to a pro account.


Leave Feedback Ask Dosu about ComfyUI_frontend Add Dosu to your team

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 4, 2026
@codecov

codecov Bot commented Aug 4, 2026

Copy link
Copy Markdown

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     
Flag Coverage Δ
unit 71.55% <ø> (ø)

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

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

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 win

Keep one seat-capacity pair in ACTIVE_TEAM_STATUS.

The object defines these fields again at Lines 105-106. The later max_seats: 30 overwrites max_seats: 50, so the fixture no longer represents the 50-seat team plan. Remove one pair and retain max_seats: 50 with occupied_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 win

Remove duplicate seat-capacity fields from all billing fixtures.

Each affected object defines max_seats and occupied_seats twice. Later properties overwrite earlier properties. This makes ACTIVE_TEAM_STATUS report 30 seats instead of 50 and triggers duplicate-key lint errors.

  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts#L91-L92: keep one pair with max_seats: 50 and occupied_seats: 1.
  • browser_tests/fixtures/data/cloudWorkspace.ts#L77-L78: keep one pair and use TEAM_PLAN_MAX_SEATS.
  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts#L111-L112: keep one pair with max_seats: 1 and occupied_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

📥 Commits

Reviewing files that changed from the base of the PR and between c9054a4 and 00f5e5d.

📒 Files selected for processing (2)
  • browser_tests/fixtures/data/cloudWorkspace.ts
  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 4, 2026
…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.
@fennuck-bot

fennuck-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

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: Fix Team Workspace seat capacity handling (FE-1497) (#14050) landed on main and added max_seats / occupied_seats to these same two fixtures. When main was merged into this branch (00f5e5d), git kept both sides' additions, so each object literal ended up with the fields twice — hence the max_seats: 50 (from main) being overwritten by my max_seats: 30.

Since main already makes pnpm typecheck:browser green on its own, my fixture backfill is redundant. I restored both files to main's versions in 0702bbe, so this PR is now only the CI change: 1 file, +2/−11.

  • browser_tests/fixtures/data/cloudWorkspace.ts — reverted to main (keeps Fix Team Workspace seat capacity handling (FE-1497) #14050's max_seats: 30 / occupied_seats: DEFAULT_TEAM_MEMBERS.length)
  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts — reverted to main (keeps max_seats: 50 / occupied_seats: 1 on ACTIVE_TEAM_STATUS, and 1 / 1 on ACTIVE_STANDARD_STATUS)

The merge commit 00f5e5d is preserved; nothing was force-rewritten over it.

Verified on the new tip: pnpm lint && pnpm stylelint && pnpm format:check && pnpm knip && pnpm typecheck:browser → exit 0, and yamllint clean on the changed action. typecheck:browser passing here without any fixture edits from me is the point of the change: the gate is now unconditional and main is already type-clean.

Two notes for reviewers:

  1. The PR description above still describes the fixture backfill and the nine main type errors. That was accurate when opened; Fix Team Workspace seat capacity handling (FE-1497) #14050 has since fixed those errors upstream, so treat the "Changes" and "Review Focus" sections as historical context — the live diff is the gate removal alone.
  2. fix(test): restore typecheck:browser after the ingest-types seat fields #14714 (fix(test): restore typecheck:browser after the ingest-types seat fields) is now also redundant for the same reason and can probably be closed.

@DrJKL
DrJKL added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 673fb51 Aug 5, 2026
63 checks passed
@DrJKL
DrJKL deleted the glary/fe-1507-unconditional-typecheck-browser branch August 5, 2026 21:31
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.

5 participants