Skip to content

test: remove redundant mock cleanup - #15072

Closed
DrJKL wants to merge 1 commit into
mainfrom
test/remove-redundant-mock-cleanup
Closed

test: remove redundant mock cleanup#15072
DrJKL wants to merge 1 commit into
mainfrom
test/remove-redundant-mock-cleanup

Conversation

@DrJKL

@DrJKL DrJKL commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • remove standalone mockReset(), mockClear(), and vi.clearAllMocks() calls from beforeEach hooks
  • rely on the existing Vitest mockReset and restoreMocks configuration
  • preserve configured chains and cleanup outside beforeEach

Stacked on #15057.

Results

  • removed 249 redundant cleanup statements across 120 files
  • removed 29 empty hooks and 21 unused lifecycle imports
  • retained all mock calls that install return values or implementations

Verification

  • root unit suite: 1,159 files passed; 15,897 tests passed, 8 skipped
  • affected website tests: 17 passed
  • pnpm lint
  • pnpm typecheck
  • pnpm typecheck:website
  • formatting and commit hooks

@DrJKL
DrJKL requested a review from christian-byrne as a code owner August 11, 2026 23:29
@DrJKL
DrJKL requested review from a team, comfyui-wiki, jtydhr88 and ltdrdata as code owners August 11, 2026 23:29
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 11, 2026
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ed52a1c1-ba61-4509-9866-7747cdc074eb

📥 Commits

Reviewing files that changed from the base of the PR and between d2f611b and 54a0986.

📒 Files selected for processing (120)
  • apps/website/src/utils/cloudNodes.build.test.ts
  • apps/website/src/utils/cloudNodes.test.ts
  • src/components/dialog/confirm/confirmDialog.test.ts
  • src/components/dialog/content/signin/ApiKeyForm.test.ts
  • src/components/dialog/content/signin/SignInForm.test.ts
  • src/components/dialog/content/signin/SignUpForm.test.ts
  • src/components/error/ErrorOverlay.test.ts
  • src/components/helpcenter/HelpCenterMenuContent.test.ts
  • src/components/load3d/Load3DScene.test.ts
  • src/components/load3d/controls/HDRIControls.test.ts
  • src/components/load3d/controls/ViewerControls.test.ts
  • src/components/queue/JobHistoryActionsMenu.test.ts
  • src/components/queue/QueueOverlayHeader.test.ts
  • src/components/rightSidePanel/errors/MissingNodeCard.test.ts
  • src/components/rightSidePanel/errors/MissingPackGroupRow.test.ts
  • src/components/rightSidePanel/errors/useErrorActions.test.ts
  • src/components/rightSidePanel/errors/useErrorGroups.test.ts
  • src/components/rightSidePanel/errors/useErrorReport.test.ts
  • src/components/rightSidePanel/parameters/SectionWidgets.test.ts
  • src/components/rightSidePanel/rightSidePanelTabTelemetry.test.ts
  • src/components/searchbox/NodeSearchBoxPopover.test.ts
  • src/components/sidebar/tabs/NodeLibrarySidebarTabV2.test.ts
  • src/components/topbar/WorkflowTab.test.ts
  • src/components/topbar/WorkflowTabs.test.ts
  • src/components/videoEdit/WidgetVideoEdit.test.ts
  • src/composables/billing/useLegacyBilling.test.ts
  • src/composables/graph/useArrangeSession.test.ts
  • src/composables/useCopy.test.ts
  • src/composables/useCoreCommands.test.ts
  • src/composables/useCurveEditor.test.ts
  • src/composables/useNodeHelpContent.test.ts
  • src/composables/useRunButtonTelemetry.test.ts
  • src/core/graph/subgraph/promotionUtils.test.ts
  • src/extensions/core/cloudFeedbackTopbarButton.test.ts
  • src/extensions/core/load3d/Load3DConfiguration.test.ts
  • src/extensions/core/load3d/Load3d.test.ts
  • src/extensions/core/load3d/ModelAdapter.test.ts
  • src/extensions/core/load3d/PointCloudModelAdapter.test.ts
  • src/extensions/core/load3d/SplatModelAdapter.test.ts
  • src/lib/litegraph/src/LGraphNode.namedValuesShadowDiff.test.ts
  • src/lib/litegraph/src/utils/namedValuesShadowDiffTelemetry.test.ts
  • src/platform/assets/components/ActiveMediaAssetCard.test.ts
  • src/platform/assets/composables/useMediaAssetActions.test.ts
  • src/platform/assets/utils/markDeletedAssetsAsMissingMedia.test.ts
  • src/platform/auth/session/useSessionCookie.test.ts
  • src/platform/auth/unified/remintRetry.test.ts
  • src/platform/cloud/oauth/useOAuthPostLoginRedirect.test.ts
  • src/platform/cloud/onboarding/auth.test.ts
  • src/platform/cloud/onboarding/desktopLoginRedemption.test.ts
  • src/platform/cloud/subscription/components/FreeTierQuota.test.ts
  • src/platform/cloud/subscription/components/PricingTable.test.ts
  • src/platform/cloud/subscription/composables/useBillingPlans.test.ts
  • src/platform/cloud/subscription/composables/useSubscription.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionCancellationWatcher.test.ts
  • src/platform/missingModel/components/MissingModelRow.test.ts
  • src/platform/nodeReplacement/nodeReplacementStore.test.ts
  • src/platform/remote/comfyui/useQueuePolling.test.ts
  • src/platform/settings/components/SettingDialog.test.ts
  • src/platform/settings/composables/useSettingsDialog.test.ts
  • src/platform/surveys/ErrorPanelSurveyCta.test.ts
  • src/platform/surveys/useErrorSurveyTracking.test.ts
  • src/platform/surveys/useSurveyFeatureTracking.test.ts
  • src/platform/telemetry/nodeAdded/installNodeAddedTelemetry.test.ts
  • src/platform/telemetry/providers/cloud/ImpactTelemetryProvider.test.ts
  • src/platform/telemetry/providers/host/HostTelemetrySink.test.ts
  • src/platform/telemetry/searchQuery/useSearchQueryTracking.test.ts
  • src/platform/workflow/core/services/workflowService.test.ts
  • src/platform/workflow/persistence/composables/useWorkflowPersistenceV2.test.ts
  • src/platform/workflow/sharing/components/ShareWorkflowDialogContent.test.ts
  • src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts
  • src/platform/workspace/composables/useAutoPageSize.test.ts
  • src/platform/workspace/composables/useBillingBanner.test.ts
  • src/platform/workspace/stores/partnerNodeGovernanceStore.test.ts
  • src/renderer/core/layout/sync/useLayoutSync.test.ts
  • src/renderer/extensions/compositor/composables/compositorSave.test.ts
  • src/renderer/extensions/compositor/composables/compositorSession.test.ts
  • src/renderer/extensions/compositor/composables/useCompositorEditor.test.ts
  • src/renderer/extensions/compositor/composables/useCompositorPsdDownload.test.ts
  • src/renderer/extensions/firstRunTour/tour/firstRunTourDefinition.test.ts
  • src/renderer/extensions/layerEditor/components/LayerEditorContent.test.ts
  • src/renderer/extensions/layerEditor/composables/useLayerEditor.test.ts
  • src/renderer/extensions/layerEditor/composables/useLayerEditorExport.test.ts
  • src/renderer/extensions/linearMode/LinearRunErrorWarning.test.ts
  • src/renderer/extensions/linearMode/useOutputHistory.test.ts
  • src/renderer/extensions/minimap/composables/useMinimap.test.ts
  • src/renderer/extensions/vueNodes/composables/useSlotElementTracking.test.ts
  • src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.autoPan.test.ts
  • src/renderer/extensions/vueNodes/composables/useVueNodeResizeTracking.test.ts
  • src/renderer/extensions/vueNodes/layout/useNodeDrag.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/ValueControlPopover.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetDOM.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetTextPreview.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdownMenuActions.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdownMenuFilter.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdownMenuItem.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/useWidgetSelectActions.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/useWidgetSelectItems.test.ts
  • src/renderer/three/RendererView.test.ts
  • src/scripts/changeTracker.test.ts
  • src/scripts/ui.test.ts
  • src/services/dialogService.renderer.test.ts
  • src/services/useNewUserService.test.ts
  • src/stores/authStore.test.ts
  • src/stores/executionStore.test.ts
  • src/stores/missingMediaPreviewRegression.test.ts
  • src/stores/subgraphNavigationStore.viewport.test.ts
  • src/stores/userStore.test.ts
  • src/stores/workspace/sidebarTabStore.test.ts
  • src/utils/litegraphUtil.test.ts
  • src/workbench/extensions/manager/components/manager/PackVersionBadge.test.ts
  • src/workbench/extensions/manager/components/manager/PackVersionSelectorPopover.test.ts
  • src/workbench/extensions/manager/components/manager/button/PackEnableToggle.test.ts
  • src/workbench/extensions/manager/components/manager/packCard/PackCardFooter.test.ts
  • src/workbench/extensions/manager/composables/useManagerDialog.test.ts
  • src/workbench/extensions/manager/composables/useManagerSurveyDialog.test.ts
💤 Files with no reviewable changes (99)
  • apps/website/src/utils/cloudNodes.test.ts
  • src/components/sidebar/tabs/NodeLibrarySidebarTabV2.test.ts
  • src/components/error/ErrorOverlay.test.ts
  • src/platform/cloud/subscription/components/PricingTable.test.ts
  • src/renderer/core/layout/sync/useLayoutSync.test.ts
  • src/components/rightSidePanel/errors/useErrorGroups.test.ts
  • src/components/searchbox/NodeSearchBoxPopover.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdownMenuFilter.test.ts
  • src/composables/useCoreCommands.test.ts
  • src/scripts/changeTracker.test.ts
  • src/renderer/extensions/layerEditor/components/LayerEditorContent.test.ts
  • src/platform/assets/components/ActiveMediaAssetCard.test.ts
  • src/platform/remote/comfyui/useQueuePolling.test.ts
  • src/platform/settings/composables/useSettingsDialog.test.ts
  • src/renderer/extensions/linearMode/useOutputHistory.test.ts
  • src/composables/useNodeHelpContent.test.ts
  • src/workbench/extensions/manager/components/manager/button/PackEnableToggle.test.ts
  • src/components/dialog/content/signin/ApiKeyForm.test.ts
  • src/renderer/extensions/vueNodes/layout/useNodeDrag.test.ts
  • src/extensions/core/load3d/Load3d.test.ts
  • src/components/queue/JobHistoryActionsMenu.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdownMenuItem.test.ts
  • src/platform/cloud/subscription/composables/useSubscriptionCancellationWatcher.test.ts
  • src/platform/cloud/subscription/components/FreeTierQuota.test.ts
  • src/renderer/extensions/vueNodes/composables/useSlotLinkInteraction.autoPan.test.ts
  • src/components/rightSidePanel/parameters/SectionWidgets.test.ts
  • apps/website/src/utils/cloudNodes.build.test.ts
  • src/workbench/extensions/manager/components/manager/PackVersionBadge.test.ts
  • src/platform/telemetry/nodeAdded/installNodeAddedTelemetry.test.ts
  • src/composables/useCurveEditor.test.ts
  • src/components/rightSidePanel/errors/useErrorActions.test.ts
  • src/components/load3d/Load3DScene.test.ts
  • src/components/topbar/WorkflowTab.test.ts
  • src/stores/subgraphNavigationStore.viewport.test.ts
  • src/components/topbar/WorkflowTabs.test.ts
  • src/platform/assets/utils/markDeletedAssetsAsMissingMedia.test.ts
  • src/components/dialog/content/signin/SignInForm.test.ts
  • src/extensions/core/load3d/SplatModelAdapter.test.ts
  • src/platform/workspace/stores/partnerNodeGovernanceStore.test.ts
  • src/components/dialog/content/signin/SignUpForm.test.ts
  • src/lib/litegraph/src/utils/namedValuesShadowDiffTelemetry.test.ts
  • src/platform/auth/unified/remintRetry.test.ts
  • src/components/rightSidePanel/errors/useErrorReport.test.ts
  • src/platform/workflow/core/services/workflowService.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetRecordAudio.test.ts
  • src/platform/surveys/useSurveyFeatureTracking.test.ts
  • src/platform/surveys/useErrorSurveyTracking.test.ts
  • src/platform/workspace/composables/useBillingBanner.test.ts
  • src/renderer/extensions/vueNodes/composables/useVueNodeResizeTracking.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.ts
  • src/platform/cloud/oauth/useOAuthPostLoginRedirect.test.ts
  • src/platform/telemetry/providers/host/HostTelemetrySink.test.ts
  • src/platform/surveys/ErrorPanelSurveyCta.test.ts
  • src/extensions/core/load3d/PointCloudModelAdapter.test.ts
  • src/scripts/ui.test.ts
  • src/renderer/extensions/vueNodes/composables/useSlotElementTracking.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/useWidgetSelectItems.test.ts
  • src/platform/missingModel/components/MissingModelRow.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/ValueControlPopover.test.ts
  • src/services/useNewUserService.test.ts
  • src/renderer/extensions/compositor/composables/compositorSave.test.ts
  • src/components/rightSidePanel/errors/MissingNodeCard.test.ts
  • src/platform/telemetry/providers/cloud/ImpactTelemetryProvider.test.ts
  • src/stores/authStore.test.ts
  • src/platform/workflow/sharing/components/ShareWorkflowDialogContent.test.ts
  • src/stores/workspace/sidebarTabStore.test.ts
  • src/platform/auth/session/useSessionCookie.test.ts
  • src/extensions/core/cloudFeedbackTopbarButton.test.ts
  • src/workbench/extensions/manager/components/manager/PackVersionSelectorPopover.test.ts
  • src/renderer/extensions/compositor/composables/useCompositorPsdDownload.test.ts
  • src/lib/litegraph/src/LGraphNode.namedValuesShadowDiff.test.ts
  • src/renderer/three/RendererView.test.ts
  • src/renderer/extensions/minimap/composables/useMinimap.test.ts
  • src/components/rightSidePanel/errors/MissingPackGroupRow.test.ts
  • src/components/queue/QueueOverlayHeader.test.ts
  • src/renderer/extensions/layerEditor/composables/useLayerEditorExport.test.ts
  • src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts
  • src/components/videoEdit/WidgetVideoEdit.test.ts
  • src/platform/settings/components/SettingDialog.test.ts
  • src/stores/userStore.test.ts
  • src/renderer/extensions/firstRunTour/tour/firstRunTourDefinition.test.ts
  • src/platform/cloud/onboarding/desktopLoginRedemption.test.ts
  • src/renderer/extensions/vueNodes/widgets/components/WidgetDOM.test.ts
  • src/composables/useCopy.test.ts
  • src/stores/missingMediaPreviewRegression.test.ts
  • src/renderer/extensions/compositor/composables/compositorSession.test.ts
  • src/renderer/extensions/compositor/composables/useCompositorEditor.test.ts
  • src/platform/workflow/persistence/composables/useWorkflowPersistenceV2.test.ts
  • src/components/helpcenter/HelpCenterMenuContent.test.ts
  • src/platform/nodeReplacement/nodeReplacementStore.test.ts
  • src/composables/graph/useArrangeSession.test.ts
  • src/stores/executionStore.test.ts
  • src/renderer/extensions/vueNodes/widgets/composables/audio/useAudioRecorder.test.ts
  • src/platform/cloud/subscription/composables/useBillingPlans.test.ts
  • src/extensions/core/load3d/Load3DConfiguration.test.ts
  • src/platform/cloud/subscription/composables/useSubscription.test.ts
  • src/platform/workspace/composables/useAutoPageSize.test.ts
  • src/platform/assets/composables/useMediaAssetActions.test.ts
  • src/composables/useRunButtonTelemetry.test.ts

📝 Walkthrough

Walkthrough

This change removes redundant per-test mock resets across frontend, platform, renderer, store, and extension-manager test suites. Required state resets and explicit default mock implementations remain.

Changes

Mock cleanup reduction

Layer / File(s) Summary
UI, composable, and core test setup
apps/website/src/utils/*, src/components/*, src/composables/*, src/core/*, src/extensions/core/*
Removed redundant mock cleanup from UI, composable, graph, and Load3D tests.
Platform, asset, authentication, and telemetry setup
src/lib/litegraph/*, src/platform/assets/*, src/platform/auth/*, src/platform/cloud/*, src/platform/telemetry/*, src/platform/remote/*, src/platform/settings/*, src/platform/surveys/*
Removed per-test mock resets while retaining required defaults and state initialization.
Workflow and workspace test setup
src/platform/workflow/*, src/platform/workspace/*, src/renderer/core/layout/*
Removed redundant cleanup from workflow, template, billing-banner, and layout synchronization tests.
Renderer, compositor, and editor setup
src/renderer/extensions/compositor/*, src/renderer/extensions/layerEditor/*, src/renderer/extensions/linearMode/*, src/renderer/extensions/minimap/*, src/renderer/extensions/vueNodes/*
Replaced broad mock clearing with targeted state and snap-behavior initialization.
Widget, service, store, and manager setup
src/renderer/extensions/vueNodes/widgets/*, src/renderer/three/*, src/scripts/*, src/services/*, src/stores/*, src/utils/*, src/workbench/extensions/manager/*
Removed redundant mock resets from widget, service, store, utility, and manager tests. Required reactive state and command collection cleanup remain.

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


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
End-To-End Regression Coverage For Fixes ❓ Inconclusive The PR title and commit subjects are not available in the review context, so the required bug-fix signal cannot be evaluated. Provide the PR title and all commit subjects to determine whether the explicit failure conditions apply.
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the primary change: removing redundant mock cleanup from tests.
Description check ✅ Passed The description explains the changes, scope, preserved behavior, and verification results, but omits several template sections.
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.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed litegraph files only remove test mock-clearing calls; the diff adds no entity mutations, APIs, component methods, callbacks, widget access, serialization, or version changes.
✨ 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 test/remove-redundant-mock-cleanup

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

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/12/2026, 02:22:46 AM UTC

Links

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

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

📦 Bundle: 8.71 MB gzip ⚪ 0 B

Details

Summary

  • Raw size: 36.8 MB baseline 36.8 MB — ⚪ 0 B
  • Gzip: 8.71 MB baseline 8.71 MB — ⚪ 0 B
  • Brotli: 6.07 MB baseline 6.07 MB — ⚪ 0 B
  • Bundles: 436 current • 436 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (16.3 MB) · Other ⚪ 0 B (14.1 MB) · Data & Services ⚪ 0 B (3.51 MB) · Graph Workspace ⚪ 0 B (1.36 MB) · Panels & Settings ⚪ 0 B (565 kB) · Utilities & Hooks ⚪ 0 B (550 kB) · + 5 more

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

Main entry bundles and manifests

Status: 1 unchanged

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

Graph editor runtime, canvas, workflow orchestration

Status: 3 unchanged

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

Top-level views, pages, and routed surfaces

Status: 17 unchanged

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

Configuration panels, inspectors, and settings screens

Status: 26 unchanged

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

Authentication, profile, and account management bundles

Status: 10 unchanged

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

Modals, dialogs, drawers, and in-app editors

Status: 8 unchanged

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

Reusable component library chunks

Status: 14 unchanged

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

Stores, services, APIs, and repositories

Status: 17 unchanged

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

Helpers, composables, and utility bundles

Status: 38 unchanged

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

External libraries and shared vendor chunks

Status: 17 unchanged

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

Bundles that do not match a named category

Status: 285 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.0 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.6 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 50.8 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.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.8 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.6 MB heap
minimap-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.5 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.1 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 67.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 58.1 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 145ms TBT · 92.1 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 71.3 MB heap
vue-large-graph-idle: · 56.3 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 168.6 MB heap
vue-large-graph-pan: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 271ms TBT · 158.1 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.5 MB heap

⚠️ 10 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 468ms 494ms +6% ⚠️ z=3.2
canvas-mouse-sweep: layout duration 4ms 5ms +36% ⚠️ z=6.3
canvas-mouse-sweep: task duration 900ms 985ms +10% ⚠️ z=2.1
canvas-zoom-sweep: task duration 386ms 395ms +2% ⚠️ z=2.9
dom-widget-clipping: task duration 380ms 411ms +8% ⚠️ z=2.8
large-graph-idle: task duration 685ms 794ms +16% ⚠️ z=4.6
large-graph-idle: script duration 106ms 126ms +18% ⚠️ z=2.2
large-graph-pan: task duration 1284ms 1350ms +5% ⚠️ z=6.2
minimap-idle: task duration 684ms 730ms +7% ⚠️ z=4.3
subgraph-idle: task duration 469ms 482ms +3% ⚠️ z=3.6
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms -0% z=-0.5
canvas-idle: p95 frame time 17ms 17ms -1%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 8ms 9ms +14% z=-1.7
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 10 +6% z=-2.9
canvas-idle: task duration 468ms 494ms +6% ⚠️ z=3.2
canvas-idle: script duration 17ms 19ms +13% z=-2.6
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 67.1 MB 67.0 MB -0%
canvas-idle: DOM nodes 18 19 +6% z=-2.8
canvas-idle: event listeners 4 4 +0% 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 4ms 5ms +36% ⚠️ z=6.3
canvas-mouse-sweep: style recalc duration 40ms 43ms +7% z=0.0
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 76 77 +1% z=-0.7
canvas-mouse-sweep: task duration 900ms 985ms +10% ⚠️ z=2.1
canvas-mouse-sweep: script duration 125ms 137ms +10% z=0.2
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 49.3 MB 55.6 MB +13%
canvas-mouse-sweep: DOM nodes -282 -112 -60% z=-67.2
canvas-mouse-sweep: event listeners -153 -74 -52% z=-19.7
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=-1.1
canvas-zoom-sweep: p95 frame time 17ms 17ms +0%
canvas-zoom-sweep: layout duration 1ms 1ms -1% z=-1.2
canvas-zoom-sweep: style recalc duration 17ms 18ms +2% z=-0.8
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 31 32 +3% z=1.6
canvas-zoom-sweep: task duration 386ms 395ms +2% ⚠️ z=2.9
canvas-zoom-sweep: script duration 20ms 22ms +8% z=-1.8
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 69.8 MB 69.9 MB +0%
canvas-zoom-sweep: DOM nodes 78 78 -1% z=-2.2
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 +0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 8ms 9ms +11% z=-1.2
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 11 12 +5% z=-3.2
dom-widget-clipping: task duration 380ms 411ms +8% ⚠️ z=2.8
dom-widget-clipping: script duration 60ms 66ms +10% z=-0.5
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 50.7 MB 50.8 MB +0%
dom-widget-clipping: DOM nodes 18 19 +6% z=-2.2
dom-widget-clipping: event listeners 0 2 variance too high
large-graph-idle: avg frame time 17ms 17ms +0% z=-0.2
large-graph-idle: p95 frame time 17ms 17ms -0%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 8ms 9ms +1% z=-3.6
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 8 -11% z=-11.5
large-graph-idle: task duration 685ms 794ms +16% ⚠️ z=4.6
large-graph-idle: script duration 106ms 126ms +18% ⚠️ z=2.2
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 63.3 MB 62.6 MB -1%
large-graph-idle: DOM nodes -284 -284 +0% z=-341.5
large-graph-idle: event listeners -149 -164 +10% z=-31.2
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms +1%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 14ms +2% z=-4.0
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 68 -1% z=-2.4
large-graph-pan: task duration 1284ms 1350ms +5% ⚠️ z=6.2
large-graph-pan: script duration 420ms 442ms +5% z=1.7
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 53.1 MB 63.8 MB +20%
large-graph-pan: DOM nodes -284 -285 +0% z=-184.3
large-graph-pan: event listeners -179 -148 -17% z=-184.7
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms +0%
large-graph-zoom: layout duration 7ms 8ms +7%
large-graph-zoom: style recalc duration 15ms 15ms +0%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 65 -1%
large-graph-zoom: task duration 1535ms 1553ms +1%
large-graph-zoom: script duration 534ms 556ms +4%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 60.1 MB 71.6 MB +19%
large-graph-zoom: DOM nodes -287 -138 -52%
large-graph-zoom: event listeners -153 -73 -53%
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 +6% z=-2.2
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 +0% z=-2.3
minimap-idle: task duration 684ms 730ms +7% ⚠️ z=4.3
minimap-idle: script duration 107ms 118ms +10% z=2.0
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 63.8 MB 64.5 MB +1%
minimap-idle: DOM nodes -283 -284 +0% z=-221.6
minimap-idle: event listeners -177 -180 +2% z=-279.5
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.7
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 10ms 11ms +14% z=-1.5
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 46 47 +2% z=-1.6
subgraph-dom-widget-clipping: task duration 407ms 415ms +2% z=2.0
subgraph-dom-widget-clipping: script duration 120ms 122ms +1% z=-1.0
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 51.3 MB 51.1 MB -1%
subgraph-dom-widget-clipping: DOM nodes 18 20 +11% z=-1.9
subgraph-dom-widget-clipping: event listeners 8 7 -13% z=-1.6
subgraph-idle: avg frame time 17ms 17ms +0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms -0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 8ms 9ms +14% z=-1.9
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 9 +0% z=-2.9
subgraph-idle: task duration 469ms 482ms +3% ⚠️ z=3.6
subgraph-idle: script duration 16ms 16ms +4% z=-1.4
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 67.2 MB 67.1 MB -0%
subgraph-idle: DOM nodes 18 18 +0% z=-2.5
subgraph-idle: event listeners 4 4 +0% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms -0% z=-0.1
subgraph-mouse-sweep: p95 frame time 17ms 17ms -1%
subgraph-mouse-sweep: layout duration 4ms 5ms +10% z=0.2
subgraph-mouse-sweep: style recalc duration 36ms 39ms +8% z=-1.1
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 807ms 829ms +3% z=0.9
subgraph-mouse-sweep: script duration 92ms 101ms +9% z=-0.0
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 44.6 MB 58.1 MB +30%
subgraph-mouse-sweep: DOM nodes 63 63 +0% z=-1.8
subgraph-mouse-sweep: event listeners 4 4 +0% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms +0%
subgraph-transition-enter: layout duration 12ms 13ms +6%
subgraph-transition-enter: style recalc duration 30ms 32ms +6%
subgraph-transition-enter: layout count 15 14 -7%
subgraph-transition-enter: style recalc count 19 18 -5%
subgraph-transition-enter: task duration 933ms 1005ms +8%
subgraph-transition-enter: script duration 35ms 38ms +8%
subgraph-transition-enter: TBT 134ms 145ms +8%
subgraph-transition-enter: heap used 96.3 MB 92.1 MB -4%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2375 2375 +0%
viewport-pan-sweep: avg frame time 17ms 17ms +0%
viewport-pan-sweep: p95 frame time 17ms 17ms +0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 37ms 38ms +5%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 +0%
viewport-pan-sweep: task duration 4511ms 4782ms +6%
viewport-pan-sweep: script duration 1375ms 1475ms +7%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 68.9 MB 71.3 MB +3%
viewport-pan-sweep: DOM nodes -281 -281 -0%
viewport-pan-sweep: event listeners -133 -132 -1%
vue-large-graph-idle: avg frame time 18ms 18ms +0%
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 16872ms 17392ms +3%
vue-large-graph-idle: script duration 552ms 582ms +6%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.3 MB 168.6 MB +6%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16387 -16388 +0%
vue-large-graph-pan: avg frame time 18ms 18ms +2%
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 15ms 18ms +18%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 134 145 +8%
vue-large-graph-pan: task duration 20361ms 21154ms +4%
vue-large-graph-pan: script duration 884ms 916ms +4%
vue-large-graph-pan: TBT 131ms 271ms +106%
vue-large-graph-pan: heap used 158.6 MB 158.1 MB -0%
vue-large-graph-pan: DOM nodes -8312 -8312 +0%
vue-large-graph-pan: event listeners -16383 -16384 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms -1%
workflow-execution: layout duration 1ms 1ms +89% z=-2.1
workflow-execution: style recalc duration 19ms 23ms +22% z=-0.3
workflow-execution: layout count 3 3 +0% z=-3.6
workflow-execution: style recalc count 14 19 +32% z=0.3
workflow-execution: task duration 109ms 126ms +16% z=0.3
workflow-execution: script duration 9ms 10ms +7% z=-6.5
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 65.5 MB 65.5 MB +0%
workflow-execution: DOM nodes 123 149 +21% z=-1.7
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-12T02:33:38.419Z",
  "gitSha": "05e77fd5da692c7c387d0c7e91eadace25a2ff45",
  "branch": "test/remove-redundant-mock-cleanup",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2020.559999999989,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.97,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 485.879,
      "heapDeltaBytes": 5766864,
      "heapUsedBytes": 69981288,
      "domNodes": 18,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 19.347999999999995,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2045.5070000000433,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.67,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 501.75899999999996,
      "heapDeltaBytes": 5933648,
      "heapUsedBytes": 70511848,
      "domNodes": 20,
      "jsHeapTotalBytes": 24379392,
      "scriptDurationMs": 19.571,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2055.857000000003,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 43.715,
      "layouts": 12,
      "layoutDurationMs": 5.959,
      "taskDurationMs": 1088.4989999999998,
      "heapDeltaBytes": -12849756,
      "heapUsedBytes": 51808400,
      "domNodes": -284,
      "jsHeapTotalBytes": 23830528,
      "scriptDurationMs": 140.708,
      "eventListeners": -151,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1926.3909999999669,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 41.742000000000004,
      "layouts": 12,
      "layoutDurationMs": 3.719,
      "taskDurationMs": 882.3369999999999,
      "heapDeltaBytes": 408600,
      "heapUsedBytes": 64727380,
      "domNodes": 61,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 132.58700000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1737.2869999999807,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 18.231,
      "layouts": 6,
      "layoutDurationMs": 0.596,
      "taskDurationMs": 388.641,
      "heapDeltaBytes": 8867200,
      "heapUsedBytes": 73258064,
      "domNodes": 77,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 22.019000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1737.3719999999366,
      "styleRecalcs": 33,
      "styleRecalcDurationMs": 17.451,
      "layouts": 6,
      "layoutDurationMs": 0.5789999999999998,
      "taskDurationMs": 400.45300000000003,
      "heapDeltaBytes": 8818464,
      "heapUsedBytes": 73272764,
      "domNodes": 78,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 21.384,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 595.2599999999961,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.674999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 394.4960000000001,
      "heapDeltaBytes": -11285712,
      "heapUsedBytes": 53228552,
      "domNodes": 18,
      "jsHeapTotalBytes": 25427968,
      "scriptDurationMs": 64.319,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 624.8540000000276,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.142999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 428.0470000000001,
      "heapDeltaBytes": -10964700,
      "heapUsedBytes": 53215160,
      "domNodes": 20,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 68.33500000000001,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2049.261999999999,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.544,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 746.365,
      "heapDeltaBytes": 3711940,
      "heapUsedBytes": 63354272,
      "domNodes": -285,
      "jsHeapTotalBytes": 3510272,
      "scriptDurationMs": 119.07199999999999,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2027.957000000015,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 7.470999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 841.383,
      "heapDeltaBytes": 7559832,
      "heapUsedBytes": 67960780,
      "domNodes": -283,
      "jsHeapTotalBytes": 2985984,
      "scriptDurationMs": 132.23499999999999,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2171.8759999999975,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 12.958999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1342.7820000000002,
      "heapDeltaBytes": 6351236,
      "heapUsedBytes": 68101088,
      "domNodes": -287,
      "jsHeapTotalBytes": 4227072,
      "scriptDurationMs": 442.95300000000003,
      "eventListeners": -147,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2228.3009999999877,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 15.202000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1358.164,
      "heapDeltaBytes": 4995824,
      "heapUsedBytes": 65708916,
      "domNodes": -283,
      "jsHeapTotalBytes": 3964928,
      "scriptDurationMs": 441.11400000000003,
      "eventListeners": -149,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3281.045000000006,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.604999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.747,
      "taskDurationMs": 1583.055,
      "heapDeltaBytes": 1782064,
      "heapUsedBytes": 63920712,
      "domNodes": -287,
      "jsHeapTotalBytes": 6131712,
      "scriptDurationMs": 557.155,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3196.0450000000264,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 15.079999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.265000000000001,
      "taskDurationMs": 1522.597,
      "heapDeltaBytes": 24076952,
      "heapUsedBytes": 86339944,
      "domNodes": 12,
      "jsHeapTotalBytes": 7602176,
      "scriptDurationMs": 554.0110000000001,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2034.4460000000026,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.5340000000000025,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 721.565,
      "heapDeltaBytes": 6509068,
      "heapUsedBytes": 67109888,
      "domNodes": -285,
      "jsHeapTotalBytes": 3772416,
      "scriptDurationMs": 117.51500000000001,
      "eventListeners": -181,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2039.1389999999774,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.054000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 739.336,
      "heapDeltaBytes": 7507060,
      "heapUsedBytes": 68236532,
      "domNodes": -283,
      "jsHeapTotalBytes": 3248128,
      "scriptDurationMs": 117.905,
      "eventListeners": -179,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 595.5640000000244,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.176,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 412.73400000000004,
      "heapDeltaBytes": -11061432,
      "heapUsedBytes": 53618280,
      "domNodes": 20,
      "jsHeapTotalBytes": 26214400,
      "scriptDurationMs": 123.15899999999999,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 592.9830000000038,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.392,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 416.27500000000003,
      "heapDeltaBytes": -11005420,
      "heapUsedBytes": 53470120,
      "domNodes": 20,
      "jsHeapTotalBytes": 25952256,
      "scriptDurationMs": 120.263,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2008.527000000015,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.277000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 477.89899999999994,
      "heapDeltaBytes": 6006308,
      "heapUsedBytes": 70466356,
      "domNodes": 16,
      "jsHeapTotalBytes": 24903680,
      "scriptDurationMs": 16.368000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.1779999999108,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.627000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 486.9260000000001,
      "heapDeltaBytes": 5837500,
      "heapUsedBytes": 70340140,
      "domNodes": 20,
      "jsHeapTotalBytes": 24641536,
      "scriptDurationMs": 16.512999999999998,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1728.589999999997,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 38.971,
      "layouts": 16,
      "layoutDurationMs": 4.956,
      "taskDurationMs": 831.3889999999999,
      "heapDeltaBytes": -3392176,
      "heapUsedBytes": 61175248,
      "domNodes": 63,
      "jsHeapTotalBytes": 25690112,
      "scriptDurationMs": 99.01299999999999,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1762.9779999999755,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 38.980000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.568,
      "taskDurationMs": 826.195,
      "heapDeltaBytes": -3885756,
      "heapUsedBytes": 60637796,
      "domNodes": 63,
      "jsHeapTotalBytes": 25165824,
      "scriptDurationMs": 102.242,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1434.9990000000616,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 31.67600000000001,
      "layouts": 14,
      "layoutDurationMs": 13.041999999999998,
      "taskDurationMs": 1005.0969999999999,
      "heapDeltaBytes": 32575916,
      "heapUsedBytes": 96548200,
      "domNodes": 13673,
      "jsHeapTotalBytes": 14417920,
      "scriptDurationMs": 37.96199999999998,
      "eventListeners": 2375,
      "totalBlockingTimeMs": 145,
      "frameDurationMs": 16.666666666666636,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8424.257000000012,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 38.178000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4701.148,
      "heapDeltaBytes": 14919764,
      "heapUsedBytes": 74325884,
      "domNodes": -281,
      "jsHeapTotalBytes": 5799936,
      "scriptDurationMs": 1428.032,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8646.011000000044,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 38.23,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4861.91,
      "heapDeltaBytes": 15158108,
      "heapUsedBytes": 75125320,
      "domNodes": -280,
      "jsHeapTotalBytes": 6062080,
      "scriptDurationMs": 1522.478,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17472.001000000033,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17446.843,
      "heapDeltaBytes": -20950848,
      "heapUsedBytes": 182416704,
      "domNodes": -8312,
      "jsHeapTotalBytes": -4132864,
      "scriptDurationMs": 581.174,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17373.60100000001,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17337.3,
      "heapDeltaBytes": -54994560,
      "heapUsedBytes": 171110668,
      "domNodes": -8312,
      "jsHeapTotalBytes": -2564096,
      "scriptDurationMs": 582.996,
      "eventListeners": -16389,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.780000000000047,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21358.227999999996,
      "styleRecalcs": 144,
      "styleRecalcDurationMs": 18.386999999999986,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21302.765,
      "heapDeltaBytes": -58840196,
      "heapUsedBytes": 167046504,
      "domNodes": -8312,
      "jsHeapTotalBytes": -10428416,
      "scriptDurationMs": 942.0099999999999,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 238,
      "frameDurationMs": 18.333333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21031.190999999922,
      "styleRecalcs": 146,
      "styleRecalcDurationMs": 17.986999999999973,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21005.218000000004,
      "heapDeltaBytes": -57369632,
      "heapUsedBytes": 164408760,
      "domNodes": -8312,
      "jsHeapTotalBytes": -9641984,
      "scriptDurationMs": 889.763,
      "eventListeners": -16383,
      "totalBlockingTimeMs": 303,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 473.6649999999827,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 24.11,
      "layouts": 3,
      "layoutDurationMs": 1.41,
      "taskDurationMs": 129.166,
      "heapDeltaBytes": 5190800,
      "heapUsedBytes": 68778764,
      "domNodes": 150,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 9.82,
      "eventListeners": 99,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 493.39499999996406,
      "styleRecalcs": 19,
      "styleRecalcDurationMs": 22.877000000000002,
      "layouts": 3,
      "layoutDurationMs": 1.0800000000000003,
      "taskDurationMs": 122.81800000000001,
      "heapDeltaBytes": 5164160,
      "heapUsedBytes": 68674080,
      "domNodes": 147,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 9.533999999999999,
      "eventListeners": 97,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

🌐 Website E2E

Tip

All tests passed.

Status ✅ Passed
Report View Report

🔗 Website Preview

Website Preview: https://comfy-website-preview-pr-15072.vercel.app

This commit: https://website-frontend-h1jgnl74l-comfyui.vercel.app

Last updated: 2026-08-12T02:22:32Z for 54a0986

@DrJKL DrJKL assigned christian-byrne and unassigned AustinMroz Aug 11, 2026
AustinMroz
AustinMroz previously approved these changes Aug 11, 2026
@codecov

codecov Bot commented Aug 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@           Coverage Diff           @@
##             main   #15072   +/-   ##
=======================================
  Coverage   81.41%   81.41%           
=======================================
  Files        1874     1874           
  Lines      107364   107364           
  Branches    33742    33737    -5     
=======================================
  Hits        87413    87413           
+ Misses      19579    19569   -10     
- Partials      372      382   +10     
Flag Coverage Δ
unit 72.55% <ø> (ø)

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

@DrJKL DrJKL assigned christian-byrne and unassigned DrJKL Aug 11, 2026
@DrJKL
DrJKL force-pushed the test/global-vitest-testing-pinia branch from 3b57fa8 to 598ee39 Compare August 11, 2026 23:53
@DrJKL
DrJKL requested a review from trsommer as a code owner August 11, 2026 23:53
@DrJKL
DrJKL force-pushed the test/remove-redundant-mock-cleanup branch from 4985626 to 2bd3205 Compare August 11, 2026 23:53
@DrJKL
DrJKL force-pushed the test/remove-redundant-mock-cleanup branch from 2bd3205 to 7895310 Compare August 12, 2026 01:23
Base automatically changed from test/global-vitest-testing-pinia to main August 12, 2026 01:48
@DrJKL
DrJKL dismissed stale reviews from christian-byrne and AustinMroz August 12, 2026 01:48

The base branch was changed.

@DrJKL
DrJKL force-pushed the test/remove-redundant-mock-cleanup branch from 7895310 to 54a0986 Compare August 12, 2026 02:21
@DrJKL DrJKL assigned christian-byrne and unassigned DrJKL Aug 12, 2026
@DrJKL
DrJKL enabled auto-merge August 12, 2026 02:28
pull Bot pushed a commit to Penguinjanator/ComfyUI_frontend that referenced this pull request Aug 12, 2026
…15104)

## Summary

Combine the test-isolation cleanup and shared component automocks from
the stacked PR series into one merge. The aggregate removes redundant
per-suite setup while preserving within-test resets and
behavior-specific cleanup.

## Constituent changes

- Comfy-Org#15072 — remove 249 redundant `mockReset()`, `mockClear()`, and
`vi.clearAllMocks()` calls across 120 files, relying on Vitest's
configured `mockReset` and `restoreMocks` behavior.
- Comfy-Org#15074 — clear `sessionStorage` in the shared Vitest `beforeEach` and
remove 28 redundant cleanup calls across 21 suites, retaining the
fast-check iteration reset.
- Comfy-Org#15075 — rely on the shared testing Pinia and remove 67 redundant
`setActivePinia(createPinia())` calls across 60 files, retaining
deliberate within-test and independent-store resets.
- Comfy-Org#15082 — clear `document.body` in the shared Vitest setup and remove
28 redundant body resets across 26 suites, preserving behavior-specific
DOM replacement.
- Comfy-Org#15084 — centralize Testing Library cleanup, including scoped website
cleanup for its `globals: false` project, and remove 23 redundant
lifecycle registrations while preserving mid-test cleanup.
- Comfy-Org#15090 — reset browser history to `/` in the shared Vitest setup and
remove five suite-local URL resets while retaining URL mutations used as
test inputs.
- Comfy-Org#15100 — replace three inline Select test doubles with opt-in
colocated Vitest automocks for the Select component family and include
Vue manual mocks in Knip's Vitest entry pattern.
- Comfy-Org#15101 — replace five inline Slider factories with an opt-in colocated
range-input automock that preserves accessibility, numeric conversion,
bounds, step, and array-valued `v-model` behavior.
- Comfy-Org#15104 — replace two queue-menu Popover factories with an opt-in
colocated automock and shared close spy, reset by Vitest's configured
`mockReset` behavior.

## Verification

- root unit suite: 1,160 files passed; 15,926 tests passed, 8 skipped
- `pnpm lint`
- `pnpm typecheck`
- `pnpm format:check`
- `pnpm knip`

---------

Co-authored-by: Amp <amp@ampcode.com>
@DrJKL

DrJKL commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by the combined PR #15104, which has been merged.

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.

4 participants