Skip to content

refactor: rename isActiveSubscription to canAccessSubscriptionFeatures#11464

Open
christian-byrne wants to merge 1 commit into
mainfrom
glary/rename-is-active-subscription
Open

refactor: rename isActiveSubscription to canAccessSubscriptionFeatures#11464
christian-byrne wants to merge 1 commit into
mainfrom
glary/rename-is-active-subscription

Conversation

@christian-byrne

@christian-byrne christian-byrne commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

PR Created by the Glary-Bot Agent


Summary

Stacked on #11463. Renames the public isActiveSubscription composable property to canAccessSubscriptionFeatures across the codebase. Pure identifier rename, zero behavioral changes.

Motivation

The name isActiveSubscription was misleading. Its actual definition in useSubscription.ts:

const canAccessSubscriptionFeatures = computed(() => {
  if (!isCloud || !window.__CONFIG__?.subscription_required) return true
  return subscriptionStatus.value?.is_active ?? false
})

Semantics: returns true when any of these hold:

  • build is not cloud, OR
  • subscription is not required, OR
  • user has an active subscription

So it was true on local/desktop builds regardless of actual subscription state. Several call sites (e.g. CurrentUserPopoverLegacy.vue with its redundant isCloud && isActiveSubscription pattern) suggested authors misread the name as "literally has active subscription" and added defensive guards. The new name reads correctly at every call site: "if can access features, show UI / allow action".

PR #7127 previously attempted the internal rename (isSubscribedisSubscribedOrIsNotCloud) but was closed without merge after scope-creep feedback from CodeRabbit. It never touched the exported public name. This PR completes that work.

Changes

  • Renamed the public composable property isActiveSubscriptioncanAccessSubscriptionFeatures in:
    • useSubscription (the source of truth)
    • useBillingContext (convenience wrapper)
    • useWorkspaceBilling (workspace-scoped variant)
    • useLegacyBilling
  • Renamed the internal alias isSubscribedOrIsNotCloudcanAccessSubscriptionFeatures to match.
  • Updated all 112 call sites across 37 files (templates, composables, services, tests).
  • Converted the one kebab-case prop binding (:is-active-subscription:can-access-subscription-features) in MembersPanelContent.vue.

Verification

  • pnpm typecheck: clean
  • pnpm test:unit: 613 files / 8125 tests pass — existing coverage preserved since the rename is identifier-only
  • pnpm lint / pnpm format:check: clean (pre-commit hooks auto-format)

Coverage note

Per request for "65%+ unit test coverage on lines/functions in the diff": because this PR is a pure rename with zero logical change, the existing test suite (which continues to pass in full) covers every renamed line at exactly the coverage level it had before the rename. No new behavior was introduced that needs new test cases. The subscription composables, billing context, and the popover components involved already have dedicated test files (useSubscription.test.ts, useBillingContext.test.ts, useWorkspaceBilling.test.ts, CurrentUserPopoverLegacy.test.ts, SubscriptionPanel.test.ts, PricingTable.test.ts, etc.).


Targets glary/fix-fe-219-credits-local (the PR #11463 branch). Merge that PR first.

┆Issue is synchronized with this Notion page by Unito

@coderabbitai

coderabbitai Bot commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a Vitest test suite for dialogService verifying showTopUpCreditsDialog behavior across legacy and workspace billing states and that dialog props are forwarded to showDialog.

Changes

Subscription Feature-Access Migration

Layer / File(s) Summary
Type & Interface Definitions
src/composables/billing/types.ts, src/platform/cloud/subscription/composables/useSubscriptionCancellationWatcher.ts
BillingState exposes new canAccessSubscriptionFeatures: ComputedRef<boolean> (replacing isActiveSubscription). CancellationWatcherOptions type updated to require canAccessSubscriptionFeatures parameter.
Core Composable Implementation
src/composables/billing/useBillingContext.ts, src/composables/billing/useLegacyBilling.ts, src/platform/cloud/subscription/composables/useSubscription.ts, src/platform/workspace/composables/useWorkspaceBilling.ts
Core billing/subscription composables derive and expose canAccessSubscriptionFeatures (replacing isActiveSubscription). useSubscription introduces new canAccessSubscriptionFeatures computed for cloud subscription-required mode; useBillingContext and workspace billing proxy the new property from their sources.
Command & Action Integration
src/composables/useCoreCommands.ts, src/composables/auth/useAuthActions.ts
Queue/prompt commands and credit-purchase actions now gate access using canAccessSubscriptionFeatures.value instead of isActiveSubscription.value before showing subscription dialogs.
Component UI Integration
src/components/actionbar/ComfyRunButton/CloudRunButtonWrapper.vue, src/components/dialog/content/setting/LegacyCreditsPanel.vue, src/components/topbar/CurrentUserPopoverLegacy.vue, src/platform/cloud/onboarding/CloudSubscriptionRedirectView.vue, src/platform/cloud/subscription/components/PricingTable.vue, src/platform/cloud/subscription/components/SubscribeButton.vue, src/platform/cloud/subscription/components/SubscriptionPanel.vue, src/platform/cloud/subscription/components/SubscriptionPanelContentLegacy.vue, src/platform/cloud/subscription/components/SubscriptionRequiredDialogContent.vue, src/platform/workspace/components/CurrentUserPopoverWorkspace.vue, src/platform/workspace/components/SubscriptionPanelContentWorkspace.vue, src/platform/workspace/components/dialogs/InviteMemberUpsellDialogContent.vue, src/platform/workspace/components/dialogs/settings/MemberUpsellBanner.vue, src/platform/workspace/components/dialogs/settings/MembersPanelContent.vue, src/platform/workspace/components/dialogs/settings/WorkspacePanelContent.vue, src/renderer/extensions/linearMode/LinearControls.vue
All components update destructuring from useBillingContext or useSubscription to consume canAccessSubscriptionFeatures, and conditionally render subscription-gated UI (buttons, dialogs, panels, credit options) based on the new access flag.
Extension & Service Integration
src/extensions/core/cloudRemoteConfig.ts, src/services/dialogService.ts, src/platform/settings/composables/useSettingUI.ts
Config watchers and dialog services update their subscription-access checks to use canAccessSubscriptionFeatures for determining feature eligibility and remote-config refresh triggers.
Tests
src/components/topbar/CurrentUserPopoverLegacy.test.ts, src/composables/billing/useBillingContext.test.ts, src/composables/useCoreCommands.test.ts, src/platform/cloud/onboarding/CloudSubscriptionRedirectView.test.ts, src/platform/cloud/subscription/components/PricingTable.test.ts, src/platform/cloud/subscription/components/SubscriptionPanel.test.ts, src/platform/cloud/subscription/composables/useSubscription.test.ts, src/platform/cloud/subscription/composables/useSubscriptionCancellationWatcher.test.ts, src/platform/settings/composables/useSettingUI.test.ts, src/platform/workspace/composables/useWorkspaceBilling.test.ts, src/services/dialogService.test.ts
All test mocks and assertions updated or added to provide canAccessSubscriptionFeatures instead of isActiveSubscription, validating subscription feature-access behavior across integration points; adds dialogService tests for top-up dialog flows.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Suggested reviewers:
    • benceruleanlu

"I hopped through code with joyful paws,
Swapping flags and fixing clause by clause,
From 'active' to 'can access' the features gleam,
Tests updated, components aligned — what a dream! 🐇✨"

🚥 Pre-merge checks | ✅ 6 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 27.27% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: renaming isActiveSubscription to canAccessSubscriptionFeatures across the codebase.
Description check ✅ Passed The description covers all required template sections: Summary (one sentence), Changes (What, Breaking, Dependencies), Review Focus, and includes detailed motivation explaining why the rename improves code clarity.
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 PR is a refactoring (rename), not a bug fix. Title starts with "refactor:" and commits use "test:" prefix. Check only applies to PRs with bug-fix language in title or commits.
Adr Compliance For Entity/Litegraph Changes ✅ Passed PR does not modify files in src/lib/litegraph/, src/ecs/, or graph entity implementation files. ADR compliance check is not applicable to this billing/subscription refactoring PR.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch glary/rename-is-active-subscription

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

@codecov

codecov Bot commented Apr 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.28571% with 11 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...onents/dialogs/InviteMemberUpsellDialogContent.vue 0.00% 3 Missing ⚠️
...n/components/SubscriptionRequiredDialogContent.vue 0.00% 2 Missing ⚠️
...c/platform/workspace/composables/useWorkspaceUI.ts 33.33% 2 Missing ⚠️
src/composables/billing/useLegacyBilling.ts 80.00% 1 Missing ⚠️
.../cloud/subscription/components/SubscribeButton.vue 0.00% 1 Missing ⚠️
src/platform/settings/composables/useSettingUI.ts 50.00% 1 Missing ⚠️
src/storybook/mocks/useBillingContext.ts 0.00% 1 Missing ⚠️
@@            Coverage Diff             @@
##             main   #11464      +/-   ##
==========================================
+ Coverage   77.48%   77.54%   +0.05%     
==========================================
  Files        1632     1632              
  Lines       90940    90946       +6     
  Branches    31048    30298     -750     
==========================================
+ Hits        70465    70522      +57     
+ Misses      19829    19779      -50     
+ Partials      646      645       -1     
Flag Coverage Δ
unit 65.41% <84.28%> (+0.12%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...actionbar/ComfyRunButton/CloudRunButtonWrapper.vue 100.00% <100.00%> (ø)
src/components/topbar/CurrentUserPopoverLegacy.vue 89.65% <100.00%> (ø)
src/composables/auth/useAuthActions.ts 54.25% <100.00%> (-1.07%) ⬇️
src/composables/billing/useBillingContext.ts 88.57% <100.00%> (ø)
src/composables/useCoreCommands.ts 56.30% <100.00%> (ø)
src/extensions/core/cloudRemoteConfig.ts 100.00% <100.00%> (+100.00%) ⬆️
...cloud/onboarding/CloudSubscriptionRedirectView.vue 94.11% <100.00%> (ø)
...form/cloud/subscription/components/CreditsTile.vue 96.40% <100.00%> (+0.07%) ⬆️
...orm/cloud/subscription/components/PricingTable.vue 95.48% <100.00%> (ø)
...loud/subscription/components/SubscriptionPanel.vue 92.30% <100.00%> (ø)
... and 16 more

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

@github-actions

github-actions Bot commented Apr 20, 2026

Copy link
Copy Markdown

📦 Bundle: 5.35 MB gzip 🔴 +294 B

Details

Summary

  • Raw size: 24.7 MB baseline 24.7 MB — 🔴 +748 B
  • Gzip: 5.35 MB baseline 5.35 MB — 🔴 +294 B
  • Brotli: 4.14 MB baseline 4.14 MB — 🔴 +42 B
  • Bundles: 268 current • 268 baseline • 118 added / 118 removed

Category Glance
Other 🔴 +317 B (9.14 MB) · Data & Services 🔴 +179 B (3.16 MB) · Panels & Settings 🔴 +117 B (526 kB) · Graph Workspace 🔴 +99 B (1.24 MB) · Views & Navigation 🔴 +18 B (82.7 kB) · UI Components 🔴 +18 B (57.9 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Cjw6LjPy.js (removed) 32 kB 🟢 -32 kB 🟢 -9.94 kB 🟢 -8.6 kB
assets/index-DBfr55Xr.js (new) 32 kB 🔴 +32 kB 🔴 +9.94 kB 🔴 +8.6 kB

Status: 1 added / 1 removed

Graph Workspace — 1.24 MB (baseline 1.24 MB) • 🔴 +99 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CCyrSVN5.js (new) 1.24 MB 🔴 +1.24 MB 🔴 +264 kB 🔴 +199 kB
assets/GraphView-BrQDCvvc.js (removed) 1.24 MB 🟢 -1.24 MB 🟢 -264 kB 🟢 -199 kB

Status: 1 added / 1 removed

Views & Navigation — 82.7 kB (baseline 82.6 kB) • 🔴 +18 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-CJXnTiAh.js (new) 19.6 kB 🔴 +19.6 kB 🔴 +5.14 kB 🔴 +4.57 kB
assets/CloudSurveyView-Cw9VkfdX.js (removed) 19.6 kB 🟢 -19.6 kB 🟢 -5.14 kB 🟢 -4.58 kB
assets/CloudLoginView-B9BT4zKN.js (removed) 12.5 kB 🟢 -12.5 kB 🟢 -3.53 kB 🟢 -3.12 kB
assets/CloudLoginView-CQHq577t.js (new) 12.5 kB 🔴 +12.5 kB 🔴 +3.54 kB 🔴 +3.12 kB
assets/CloudSignupView-B-4eGf_7.js (removed) 10.4 kB 🟢 -10.4 kB 🟢 -3.04 kB 🟢 -2.69 kB
assets/CloudSignupView-BYo-mSaS.js (new) 10.4 kB 🔴 +10.4 kB 🔴 +3.04 kB 🔴 +2.69 kB
assets/UserCheckView-ceoM7yif.js (new) 9.07 kB 🔴 +9.07 kB 🔴 +2.34 kB 🔴 +2.05 kB
assets/UserCheckView-DA8l7GgX.js (removed) 9.07 kB 🟢 -9.07 kB 🟢 -2.33 kB 🟢 -2.05 kB
assets/CloudLayoutView-Cypho-1j.js (new) 7.78 kB 🔴 +7.78 kB 🔴 +2.47 kB 🔴 +2.16 kB
assets/CloudLayoutView-CzxF8-FI.js (removed) 7.78 kB 🟢 -7.78 kB 🟢 -2.47 kB 🟢 -2.16 kB
assets/CloudForgotPasswordView-ByI53Bsw.js (new) 6.18 kB 🔴 +6.18 kB 🔴 +2.2 kB 🔴 +1.94 kB
assets/CloudForgotPasswordView-Dejd6mOq.js (removed) 6.18 kB 🟢 -6.18 kB 🟢 -2.2 kB 🟢 -1.93 kB
assets/CloudAuthTimeoutView-BXd7rioU.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +2.04 kB 🔴 +1.79 kB
assets/CloudAuthTimeoutView-uz9TRuBw.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -2.03 kB 🟢 -1.79 kB
assets/CloudSubscriptionRedirectView-BChRlRBv.js (new) 5.34 kB 🔴 +5.34 kB 🔴 +2.02 kB 🔴 +1.8 kB
assets/CloudSubscriptionRedirectView-Bf1-qei3.js (removed) 5.32 kB 🟢 -5.32 kB 🟢 -2.01 kB 🟢 -1.8 kB
assets/UserSelectView-D5OBOvoQ.js (new) 4.7 kB 🔴 +4.7 kB 🔴 +1.75 kB 🔴 +1.55 kB
assets/UserSelectView-mAXuTjxx.js (removed) 4.7 kB 🟢 -4.7 kB 🟢 -1.74 kB 🟢 -1.54 kB

Status: 9 added / 9 removed / 2 unchanged

Panels & Settings — 526 kB (baseline 526 kB) • 🔴 +117 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-CYt8ngQG.js (new) 47.5 kB 🔴 +47.5 kB 🔴 +9.85 kB 🔴 +8.73 kB
assets/KeybindingPanel-DtMdg8vi.js (removed) 47.5 kB 🟢 -47.5 kB 🟢 -9.85 kB 🟢 -8.73 kB
assets/SecretsPanel-C8eRMa6T.js (new) 22.9 kB 🔴 +22.9 kB 🔴 +5.55 kB 🔴 +4.87 kB
assets/SecretsPanel-uOPq49X7.js (removed) 22.9 kB 🟢 -22.9 kB 🟢 -5.54 kB 🟢 -4.88 kB
assets/LegacyCreditsPanel-OutwiCio.js (new) 21.8 kB 🔴 +21.8 kB 🔴 +5.93 kB 🔴 +5.22 kB
assets/LegacyCreditsPanel-v4eP37jd.js (removed) 21.8 kB 🟢 -21.8 kB 🟢 -5.93 kB 🟢 -5.23 kB
assets/SubscriptionPanel-BtEkQQWH.js (new) 20.2 kB 🔴 +20.2 kB 🔴 +5.19 kB 🔴 +4.55 kB
assets/SubscriptionPanel-BYXfA_5a.js (removed) 20.1 kB 🟢 -20.1 kB 🟢 -5.17 kB 🟢 -4.53 kB
assets/AboutPanel-BlGG78-D.js (new) 12 kB 🔴 +12 kB 🔴 +3.32 kB 🔴 +2.99 kB
assets/AboutPanel-CXPmB9Sh.js (removed) 12 kB 🟢 -12 kB 🟢 -3.33 kB 🟢 -2.98 kB
assets/ExtensionPanel-B5wbFLrf.js (new) 10 kB 🔴 +10 kB 🔴 +2.93 kB 🔴 +2.6 kB
assets/ExtensionPanel-P6Z1wopH.js (removed) 10 kB 🟢 -10 kB 🟢 -2.93 kB 🟢 -2.61 kB
assets/ServerConfigPanel-D3mosgK8.js (removed) 7.09 kB 🟢 -7.09 kB 🟢 -2.38 kB 🟢 -2.12 kB
assets/ServerConfigPanel-MO6a6MBt.js (new) 7.09 kB 🔴 +7.09 kB 🔴 +2.38 kB 🔴 +2.12 kB
assets/UserPanel-D41G3t_C.js (new) 6.8 kB 🔴 +6.8 kB 🔴 +2.26 kB 🔴 +2 kB
assets/UserPanel-DIwuS7sb.js (removed) 6.8 kB 🟢 -6.8 kB 🟢 -2.26 kB 🟢 -1.98 kB
assets/cloudRemoteConfig-lXpWuXkn.js (new) 2.11 kB 🔴 +2.11 kB 🔴 +1.01 kB 🔴 +866 B
assets/cloudRemoteConfig-BbbfAvSI.js (removed) 2.09 kB 🟢 -2.09 kB 🟢 -1.01 kB 🟢 -867 B
assets/refreshRemoteConfig-BRWPak4y.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +650 B 🔴 +553 B
assets/refreshRemoteConfig-dtPCJEaJ.js (removed) 1.45 kB 🟢 -1.45 kB 🟢 -645 B 🟢 -548 B

Status: 10 added / 10 removed / 14 unchanged

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BCFXjMCV.js (new) 3.65 kB 🔴 +3.65 kB 🔴 +1.29 kB 🔴 +1.12 kB
assets/auth-C6LccHvN.js (removed) 3.65 kB 🟢 -3.65 kB 🟢 -1.29 kB 🟢 -1.11 kB
assets/SignUpForm-CgFvMZEM.js (removed) 3.19 kB 🟢 -3.19 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/SignUpForm-CPSPyYRn.js (new) 3.19 kB 🔴 +3.19 kB 🔴 +1.29 kB 🔴 +1.15 kB
assets/UpdatePasswordContent-CAPD1QJC.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -1.31 kB 🟢 -1.16 kB
assets/UpdatePasswordContent-CkuFDMsG.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +1.32 kB 🔴 +1.16 kB
assets/authStore-D3moma7z.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -580 B 🟢 -513 B
assets/authStore-DEwKOF6V.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +583 B 🔴 +514 B
assets/auth-CfGo5SDw.js (removed) 348 B 🟢 -348 B 🟢 -217 B 🟢 -211 B
assets/auth-DVPfOeNJ.js (new) 348 B 🔴 +348 B 🔴 +217 B 🔴 +190 B

Status: 5 added / 5 removed / 2 unchanged

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-BJ40LdfP.js (new) 85.8 kB 🔴 +85.8 kB 🔴 +18.6 kB 🔴 +15.9 kB
assets/ComfyHubPublishDialog-YZsh_v-U.js (removed) 85.8 kB 🟢 -85.8 kB 🟢 -18.6 kB 🟢 -15.9 kB
assets/useShareDialog-4mL5jmIM.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.8 kB 🔴 +5.14 kB
assets/useShareDialog-BzPrLcnp.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.8 kB 🟢 -5.14 kB
assets/ComfyHubPublishDialog-BtlF60Qc.js (new) 1.4 kB 🔴 +1.4 kB 🔴 +646 B 🔴 +581 B
assets/ComfyHubPublishDialog-Bww7WY74.js (removed) 1.4 kB 🟢 -1.4 kB 🟢 -645 B 🟢 -567 B
assets/useSubscriptionDialog-D_q1-2xR.js (removed) 1.21 kB 🟢 -1.21 kB 🟢 -575 B 🟢 -504 B
assets/useSubscriptionDialog-sYbfL5s8.js (new) 1.21 kB 🔴 +1.21 kB 🔴 +576 B 🔴 +503 B

Status: 4 added / 4 removed

UI Components — 57.9 kB (baseline 57.9 kB) • 🔴 +18 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-CnjaDHY2.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.79 kB 🟢 -3.38 kB
assets/ComfyQueueButton-DVphpjC7.js (new) 13.5 kB 🔴 +13.5 kB 🔴 +3.79 kB 🔴 +3.38 kB
assets/useTerminalTabs-CfUDhjhv.js (removed) 11.1 kB 🟢 -11.1 kB 🟢 -3.75 kB 🟢 -3.3 kB
assets/useTerminalTabs-DNpSkeOf.js (new) 11.1 kB 🔴 +11.1 kB 🔴 +3.75 kB 🔴 +3.29 kB
assets/SubscribeButton-CjvdQxJE.js (new) 2.44 kB 🔴 +2.44 kB 🔴 +1.06 kB 🔴 +943 B
assets/SubscribeButton-BhRBLH3Q.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -920 B
assets/cloudFeedbackTopbarButton-CXjiWYXf.js (new) 1.9 kB 🔴 +1.9 kB 🔴 +951 B 🔴 +839 B
assets/cloudFeedbackTopbarButton-Dkk74ZBn.js (removed) 1.9 kB 🟢 -1.9 kB 🟢 -949 B 🟢 -836 B
assets/ComfyQueueButton-B8Y6z_dQ.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +611 B 🔴 +539 B
assets/ComfyQueueButton-CgOoZwVf.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -608 B 🟢 -534 B

Status: 5 added / 5 removed / 8 unchanged

Data & Services — 3.16 MB (baseline 3.16 MB) • 🔴 +179 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-DSA9Y3fv.js (new) 2.08 MB 🔴 +2.08 MB 🔴 +475 kB 🔴 +360 kB
assets/dialogService-bjUGOh16.js (removed) 2.08 MB 🟢 -2.08 MB 🟢 -475 kB 🟢 -360 kB
assets/api-BfEmw0rz.js (removed) 898 kB 🟢 -898 kB 🟢 -214 kB 🟢 -169 kB
assets/api-D82-OBXg.js (new) 898 kB 🔴 +898 kB 🔴 +214 kB 🔴 +169 kB
assets/load3dService-Cj-ppg6U.js (removed) 116 kB 🟢 -116 kB 🟢 -25.4 kB 🟢 -21.6 kB
assets/load3dService-CpmDvNbr.js (new) 116 kB 🔴 +116 kB 🔴 +25.4 kB 🔴 +21.6 kB
assets/workflowShareService-BfjhYZ2I.js (removed) 16.7 kB 🟢 -16.7 kB 🟢 -4.92 kB 🟢 -4.37 kB
assets/workflowShareService-SFsqYVPO.js (new) 16.7 kB 🔴 +16.7 kB 🔴 +4.93 kB 🔴 +4.37 kB
assets/keybindingService-D0MWbZ4Q.js (removed) 13.8 kB 🟢 -13.8 kB 🟢 -3.67 kB 🟢 -3.21 kB
assets/keybindingService-dlXPnGb-.js (new) 13.8 kB 🔴 +13.8 kB 🔴 +3.67 kB 🔴 +3.22 kB
assets/releaseStore-BtGB2bvn.js (new) 8.12 kB 🔴 +8.12 kB 🔴 +2.28 kB 🔴 +1.99 kB
assets/releaseStore-DvVHwL0u.js (removed) 8.12 kB 🟢 -8.12 kB 🟢 -2.28 kB 🟢 -2 kB
assets/userStore-CDyvpzBR.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +934 B 🔴 +826 B
assets/userStore-Cx61b8Jm.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -933 B 🟢 -823 B
assets/audioService-DVaF8Zjg.js (removed) 1.8 kB 🟢 -1.8 kB 🟢 -876 B 🟢 -760 B
assets/audioService-X7aFuRIj.js (new) 1.8 kB 🔴 +1.8 kB 🔴 +878 B 🔴 +756 B
assets/releaseStore-D5hViJCR.js (removed) 1.23 kB 🟢 -1.23 kB 🟢 -577 B 🟢 -513 B
assets/releaseStore-uTffkFrF.js (new) 1.23 kB 🔴 +1.23 kB 🔴 +578 B 🔴 +508 B
assets/workflowDraftStore-COZshdzu.js (new) 1.21 kB 🔴 +1.21 kB 🔴 +574 B 🔴 +507 B
assets/workflowDraftStore-xZTHFS5l.js (removed) 1.21 kB 🟢 -1.21 kB 🟢 -573 B 🟢 -508 B
assets/dialogService-C6QuOimP.js (removed) 1.2 kB 🟢 -1.2 kB 🟢 -566 B 🟢 -504 B
assets/dialogService-DbwGhDKY.js (new) 1.2 kB 🔴 +1.2 kB 🔴 +568 B 🔴 +504 B
assets/settingStore-Bs2__-H0.js (new) 1.2 kB 🔴 +1.2 kB 🔴 +570 B 🔴 +503 B
assets/settingStore-DD7eP1MC.js (removed) 1.2 kB 🟢 -1.2 kB 🟢 -568 B 🟢 -504 B
assets/assetsStore-BhxmsL0I.js (removed) 1.2 kB 🟢 -1.2 kB 🟢 -568 B 🟢 -504 B
assets/assetsStore-KB2Hxqd0.js (new) 1.2 kB 🔴 +1.2 kB 🔴 +570 B 🔴 +502 B

Status: 13 added / 13 removed / 4 unchanged

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-_mUFl0q5.js (removed) 234 kB 🟢 -234 kB 🟢 -52.1 kB 🟢 -42.4 kB
assets/useConflictDetection--aR_XG2X.js (new) 234 kB 🔴 +234 kB 🔴 +52.1 kB 🔴 +42.4 kB
assets/useLoad3d-CS5IEjDN.js (removed) 22.7 kB 🟢 -22.7 kB 🟢 -5.22 kB 🟢 -4.61 kB
assets/useLoad3d-CZBeJerx.js (new) 22.7 kB 🔴 +22.7 kB 🔴 +5.22 kB 🔴 +4.61 kB
assets/useLoad3dViewer-AkSHlqN8.js (new) 21 kB 🔴 +21 kB 🔴 +4.92 kB 🔴 +4.3 kB
assets/useLoad3dViewer-Bh32bc5T.js (removed) 21 kB 🟢 -21 kB 🟢 -4.92 kB 🟢 -4.32 kB
assets/useFeatureFlags-Brypujqz.js (removed) 5.95 kB 🟢 -5.95 kB 🟢 -1.79 kB 🟢 -1.52 kB
assets/useFeatureFlags-DkcbO2YB.js (new) 5.95 kB 🔴 +5.95 kB 🔴 +1.8 kB 🔴 +1.52 kB
assets/useCopyToClipboard-CjNtCrKM.js (new) 5.29 kB 🔴 +5.29 kB 🔴 +1.86 kB 🔴 +1.57 kB
assets/useCopyToClipboard-JY2DFwq-.js (removed) 5.29 kB 🟢 -5.29 kB 🟢 -1.86 kB 🟢 -1.57 kB
assets/useWorkspaceUI-cK5dsH4z.js (removed) 3.34 kB 🟢 -3.34 kB 🟢 -982 B 🟢 -812 B
assets/useWorkspaceUI-DYqgbQoJ.js (new) 3.34 kB 🔴 +3.34 kB 🔴 +983 B 🔴 +814 B
assets/subscriptionCheckoutUtil-D4u09smo.js (removed) 3.31 kB 🟢 -3.31 kB 🟢 -1.36 kB 🟢 -1.18 kB
assets/subscriptionCheckoutUtil-EJeJNqAA.js (new) 3.31 kB 🔴 +3.31 kB 🔴 +1.37 kB 🔴 +1.18 kB
assets/assetPreviewUtil-DIsEAYR4.js (new) 2.43 kB 🔴 +2.43 kB 🔴 +1.01 kB 🔴 +884 B
assets/assetPreviewUtil-SLm6-MA5.js (removed) 2.43 kB 🟢 -2.43 kB 🟢 -1.01 kB 🟢 -880 B
assets/useUpstreamValue-CjVLbgRY.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +806 B 🔴 +711 B
assets/useUpstreamValue-hFqSd7no.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -802 B 🟢 -707 B
assets/useLoad3d-BD5Agc3_.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +635 B 🔴 +580 B
assets/useLoad3d-CBBPSHIU.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -635 B 🟢 -565 B
assets/useLoad3dViewer-C3BPHp5q.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +604 B 🔴 +535 B
assets/useLoad3dViewer-CCrwyVuW.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -603 B 🟢 -535 B
assets/useCurrentUser-BtXzujCa.js (new) 1.2 kB 🔴 +1.2 kB 🔴 +570 B 🔴 +502 B
assets/useCurrentUser-DksvxrgC.js (removed) 1.2 kB 🟢 -1.2 kB 🟢 -568 B 🟢 -502 B
assets/useWorkspaceSwitch-RHXo3QZw.js (new) 747 B 🔴 +747 B 🔴 +386 B 🔴 +334 B
assets/useWorkspaceSwitch-YUyozEtT.js (removed) 747 B 🟢 -747 B 🟢 -387 B 🟢 -332 B

Status: 13 added / 13 removed / 19 unchanged

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

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 9.14 MB (baseline 9.14 MB) • 🔴 +317 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-B7RNvaHq.js (new) 77.9 kB 🔴 +77.9 kB 🔴 +20.2 kB 🔴 +17.2 kB
assets/core-CrCuXyL7.js (removed) 77.9 kB 🟢 -77.9 kB 🟢 -20.2 kB 🟢 -17.2 kB
assets/groupNode-BnAY8uhI.js (new) 74.9 kB 🔴 +74.9 kB 🔴 +18.7 kB 🔴 +16.5 kB
assets/groupNode-zFLho8f1.js (removed) 74.9 kB 🟢 -74.9 kB 🟢 -18.7 kB 🟢 -16.5 kB
assets/WidgetSelect-B2n6a_8a.js (removed) 67.8 kB 🟢 -67.8 kB 🟢 -14.8 kB 🟢 -12.8 kB
assets/WidgetSelect-D04nqJRc.js (new) 67.8 kB 🔴 +67.8 kB 🔴 +14.8 kB 🔴 +12.8 kB
assets/SubscriptionRequiredDialogContentWorkspace-B3P-AF1A.js (removed) 48.9 kB 🟢 -48.9 kB 🟢 -9.54 kB 🟢 -8.23 kB
assets/SubscriptionRequiredDialogContentWorkspace-Ds8JsrdV.js (new) 48.9 kB 🔴 +48.9 kB 🔴 +9.54 kB 🔴 +8.22 kB
assets/Load3DControls-NQfpsLMt.js (new) 46.1 kB 🔴 +46.1 kB 🔴 +7.51 kB 🔴 +6.55 kB
assets/Load3DControls-UioDqi4U.js (removed) 46.1 kB 🟢 -46.1 kB 🟢 -7.51 kB 🟢 -6.54 kB
assets/WorkspacePanelContent-BHtA-Hlu.js (new) 34.3 kB 🔴 +34.3 kB 🔴 +7.44 kB 🔴 +6.58 kB
assets/WorkspacePanelContent-BwRaeJzZ.js (removed) 34.2 kB 🟢 -34.2 kB 🟢 -7.43 kB 🟢 -6.58 kB
assets/WidgetPainter-BK-olML2.js (new) 33.4 kB 🔴 +33.4 kB 🔴 +8.27 kB 🔴 +7.34 kB
assets/WidgetPainter-X3ubLG_S.js (removed) 33.4 kB 🟢 -33.4 kB 🟢 -8.27 kB 🟢 -7.31 kB
assets/Load3dViewerContent-1lwEEbm7.js (removed) 30.6 kB 🟢 -30.6 kB 🟢 -6.2 kB 🟢 -5.37 kB
assets/Load3dViewerContent-DQY3VSDh.js (new) 30.6 kB 🔴 +30.6 kB 🔴 +6.2 kB 🔴 +5.37 kB
assets/SubscriptionRequiredDialogContent-VN-Y-PFR.js (new) 27.6 kB 🔴 +27.6 kB 🔴 +7.01 kB 🔴 +6.19 kB
assets/SubscriptionRequiredDialogContent-DhvCgrRO.js (removed) 27.6 kB 🟢 -27.6 kB 🟢 -7 kB 🟢 -6.19 kB
assets/WidgetImageCrop-CNR29TJJ.js (removed) 24.3 kB 🟢 -24.3 kB 🟢 -6.22 kB 🟢 -5.48 kB
assets/WidgetImageCrop-XpKWfCf2.js (new) 24.3 kB 🔴 +24.3 kB 🔴 +6.22 kB 🔴 +5.48 kB
assets/SubscriptionPanelContentWorkspace-CnWJfIcY.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.19 kB 🔴 +4.57 kB
assets/SubscriptionPanelContentWorkspace-D2s2FjuS.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.18 kB 🟢 -4.57 kB
assets/CurrentUserPopoverWorkspace-DLSpufOc.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +4.99 kB 🔴 +4.45 kB
assets/SignInContent-BFCDIi4B.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -5.46 kB 🟢 -4.78 kB
assets/SignInContent-CvVBKneT.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +5.46 kB 🔴 +4.79 kB
assets/CurrentUserPopoverWorkspace-v9WN8png.js (removed) 20.8 kB 🟢 -20.8 kB 🟢 -4.98 kB 🟢 -4.45 kB
assets/WidgetInputNumber-DPV0S_EL.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.84 kB 🟢 -4.29 kB
assets/WidgetInputNumber-Q8Sh3K0q.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.84 kB 🔴 +4.3 kB
assets/Load3D-Bq5FceHD.js (removed) 18.5 kB 🟢 -18.5 kB 🟢 -4.39 kB 🟢 -3.84 kB
assets/Load3D-ZfFEDOm_.js (new) 18.5 kB 🔴 +18.5 kB 🔴 +4.39 kB 🔴 +3.83 kB
assets/WidgetRecordAudio-C4LtLHsT.js (new) 17.5 kB 🔴 +17.5 kB 🔴 +5.06 kB 🔴 +4.52 kB
assets/WidgetRecordAudio-CaE8gJPv.js (removed) 17.5 kB 🟢 -17.5 kB 🟢 -5.05 kB 🟢 -4.51 kB
assets/WidgetRange-B5xs_Leg.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.63 kB 🔴 +4.14 kB
assets/WidgetRange-TJVyvUBi.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.63 kB 🟢 -4.13 kB
assets/load3d-CNzTPLXi.js (removed) 15.8 kB 🟢 -15.8 kB 🟢 -4.61 kB 🟢 -4 kB
assets/load3d-DTztADhR.js (new) 15.8 kB 🔴 +15.8 kB 🔴 +4.61 kB 🔴 +4 kB
assets/WaveAudioPlayer-CNYG6JSs.js (new) 13.4 kB 🔴 +13.4 kB 🔴 +3.69 kB 🔴 +3.23 kB
assets/WaveAudioPlayer-DWZFZLg6.js (removed) 13.4 kB 🟢 -13.4 kB 🟢 -3.69 kB 🟢 -3.23 kB
assets/WidgetCurve-C-PTQH_A.js (removed) 12.2 kB 🟢 -12.2 kB 🟢 -3.94 kB 🟢 -3.57 kB
assets/WidgetCurve-DE2t-qwf.js (new) 12.2 kB 🔴 +12.2 kB 🔴 +3.95 kB 🔴 +3.56 kB
assets/TeamWorkspacesDialogContent-Cy6i4zfx.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.44 kB 🔴 +3.06 kB
assets/TeamWorkspacesDialogContent-DmJrPYSc.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.44 kB 🟢 -3.07 kB
assets/nodeTemplates-CCooNhv8.js (new) 9.88 kB 🔴 +9.88 kB 🔴 +3.5 kB 🔴 +3.09 kB
assets/nodeTemplates-CTQeYKR3.js (removed) 9.88 kB 🟢 -9.88 kB 🟢 -3.5 kB 🟢 -3.1 kB
assets/NightlySurveyController-CFQCJIgH.js (removed) 9.01 kB 🟢 -9.01 kB 🟢 -3.17 kB 🟢 -2.79 kB
assets/NightlySurveyController-CR59CFu3.js (new) 9.01 kB 🔴 +9.01 kB 🔴 +3.17 kB 🔴 +2.81 kB
assets/Load3DConfiguration-CqrqSR2o.js (new) 8.77 kB 🔴 +8.77 kB 🔴 +2.61 kB 🔴 +2.29 kB
assets/Load3DConfiguration-Ujg-bd91.js (removed) 8.77 kB 🟢 -8.77 kB 🟢 -2.61 kB 🟢 -2.3 kB
assets/InviteMemberDialogContent-2Q6oOdEn.js (removed) 7.99 kB 🟢 -7.99 kB 🟢 -2.54 kB 🟢 -2.23 kB
assets/InviteMemberDialogContent-B6VZt_5I.js (new) 7.99 kB 🔴 +7.99 kB 🔴 +2.54 kB 🔴 +2.23 kB
assets/onboardingCloudRoutes-pEqh2tVb.js (removed) 6.94 kB 🟢 -6.94 kB 🟢 -2.17 kB 🟢 -1.86 kB
assets/onboardingCloudRoutes-zEI6al8f.js (new) 6.94 kB 🔴 +6.94 kB 🔴 +2.17 kB 🔴 +1.85 kB
assets/WidgetWithControl-Bbbn-9a6.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +2.5 kB 🔴 +2.23 kB
assets/WidgetWithControl-CV7s3ijF.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -2.5 kB 🟢 -2.21 kB
assets/CreateWorkspaceDialogContent-DkwU4L_z.js (new) 6.19 kB 🔴 +6.19 kB 🔴 +2.25 kB 🔴 +1.97 kB
assets/CreateWorkspaceDialogContent-Wm467dtf.js (removed) 6.19 kB 🟢 -6.19 kB 🟢 -2.25 kB 🟢 -1.97 kB
assets/FreeTierDialogContent-BlghuhuQ.js (new) 6.06 kB 🔴 +6.06 kB 🔴 +2.15 kB 🔴 +1.91 kB
assets/FreeTierDialogContent-fuiZHdh-.js (removed) 6.06 kB 🟢 -6.06 kB 🟢 -2.15 kB 🟢 -1.91 kB
assets/EditWorkspaceDialogContent-BEGzX5A7.js (removed) 5.99 kB 🟢 -5.99 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/EditWorkspaceDialogContent-ClU5pNTX.js (new) 5.99 kB 🔴 +5.99 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/WidgetTextarea-C5R1wSYO.js (removed) 5.8 kB 🟢 -5.8 kB 🟢 -2.29 kB 🟢 -2.02 kB
assets/WidgetTextarea-CO029e7y.js (new) 5.8 kB 🔴 +5.8 kB 🔴 +2.29 kB 🔴 +2.03 kB
assets/Preview3d-C838WLn_.js (new) 5.77 kB 🔴 +5.77 kB 🔴 +1.94 kB 🔴 +1.7 kB
assets/Preview3d-ne0E6PUX.js (removed) 5.77 kB 🟢 -5.77 kB 🟢 -1.94 kB 🟢 -1.69 kB
assets/ValueControlPopover-B6UG-7Hz.js (new) 5.57 kB 🔴 +5.57 kB 🔴 +2.03 kB 🔴 +1.81 kB
assets/ValueControlPopover-eYQzpiq6.js (removed) 5.57 kB 🟢 -5.57 kB 🟢 -2.03 kB 🟢 -1.82 kB
assets/CancelSubscriptionDialogContent-BC0MaTFW.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +2.08 kB 🔴 +1.84 kB
assets/CancelSubscriptionDialogContent-BTQVcqrP.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -2.07 kB 🟢 -1.83 kB
assets/DeleteWorkspaceDialogContent-BcmMz8ot.js (removed) 4.89 kB 🟢 -4.89 kB 🟢 -1.89 kB 🟢 -1.64 kB
assets/DeleteWorkspaceDialogContent-pHbkHF0I.js (new) 4.89 kB 🔴 +4.89 kB 🔴 +1.89 kB 🔴 +1.67 kB
assets/saveMesh-BuR_WiZE.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.89 kB 🟢 -1.67 kB
assets/saveMesh-D8m_sXMG.js (new) 4.75 kB 🔴 +4.75 kB 🔴 +1.88 kB 🔴 +1.68 kB
assets/LeaveWorkspaceDialogContent-Cl8Hu5ea.js (removed) 4.72 kB 🟢 -4.72 kB 🟢 -1.84 kB 🟢 -1.6 kB
assets/LeaveWorkspaceDialogContent-CslBxynz.js (new) 4.72 kB 🔴 +4.72 kB 🔴 +1.84 kB 🔴 +1.61 kB
assets/RemoveMemberDialogContent-BksbfBOm.js (new) 4.7 kB 🔴 +4.7 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/RemoveMemberDialogContent-Bv29lO-F.js (removed) 4.7 kB 🟢 -4.7 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/RevokeInviteDialogContent-Cct7opEN.js (new) 4.61 kB 🔴 +4.61 kB 🔴 +1.8 kB 🔴 +1.6 kB
assets/RevokeInviteDialogContent-CqidHi0y.js (removed) 4.61 kB 🟢 -4.61 kB 🟢 -1.8 kB 🟢 -1.58 kB
assets/InviteMemberUpsellDialogContent-6sRGdGWz.js (new) 4.55 kB 🔴 +4.55 kB 🔴 +1.67 kB 🔴 +1.47 kB
assets/InviteMemberUpsellDialogContent-CnCUzWyz.js (removed) 4.51 kB 🟢 -4.51 kB 🟢 -1.67 kB 🟢 -1.46 kB
assets/tierBenefits-BOYqifpF.js (new) 4.45 kB 🔴 +4.45 kB 🔴 +1.58 kB 🔴 +1.36 kB
assets/tierBenefits-C8wYOzUW.js (removed) 4.45 kB 🟢 -4.45 kB 🟢 -1.58 kB 🟢 -1.37 kB
assets/Media3DTop-BOMQ_Kgk.js (removed) 4.39 kB 🟢 -4.39 kB 🟢 -1.79 kB 🟢 -1.59 kB
assets/Media3DTop-CUT7jtv8.js (new) 4.39 kB 🔴 +4.39 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/cloudSessionCookie-CVreMjjc.js (new) 4.36 kB 🔴 +4.36 kB 🔴 +1.59 kB 🔴 +1.39 kB
assets/cloudSessionCookie-DDPxzy7D.js (removed) 4.36 kB 🟢 -4.36 kB 🟢 -1.59 kB 🟢 -1.39 kB
assets/GlobalToast-BQcTa3cC.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.26 kB 🔴 +1.11 kB
assets/GlobalToast-DYM6OUS8.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.26 kB 🟢 -1.08 kB
assets/CloudRunButtonWrapper-DArHw9eU.js (new) 2.3 kB 🔴 +2.3 kB 🔴 +1.04 kB 🔴 +922 B
assets/CloudRunButtonWrapper-BmFW0YYx.js (removed) 2.27 kB 🟢 -2.27 kB 🟢 -1.03 kB 🟢 -918 B
assets/SubscribeToRun-c1WFp_sG.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +984 B 🔴 +874 B
assets/SubscribeToRun-DweGWcCD.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -983 B 🟢 -878 B
assets/MediaAudioTop-B6Kpj13X.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +1.01 kB 🔴 +859 B
assets/MediaAudioTop-BXsvSdJ7.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -1.01 kB 🟢 -861 B
assets/cloudBadges-BlYV0NPH.js (new) 2.01 kB 🔴 +2.01 kB 🔴 +994 B 🔴 +861 B
assets/cloudBadges-pfbqN64T.js (removed) 2.01 kB 🟢 -2.01 kB 🟢 -992 B 🟢 -855 B
assets/cloudSubscription-0__r54Ih.js (new) 1.92 kB 🔴 +1.92 kB 🔴 +916 B 🔴 +793 B
assets/cloudSubscription-O33u6ZRl.js (removed) 1.92 kB 🟢 -1.92 kB 🟢 -913 B 🟢 -792 B
assets/graphHasMissingNodes-Bdfo52EE.js (removed) 1.84 kB 🟢 -1.84 kB 🟢 -859 B 🟢 -771 B
assets/graphHasMissingNodes-ZVhi0EYr.js (new) 1.84 kB 🔴 +1.84 kB 🔴 +861 B 🔴 +762 B
assets/Load3D-B2utRGod.js (new) 1.62 kB 🔴 +1.62 kB 🔴 +727 B 🔴 +643 B
assets/Load3D-CYYxxAgY.js (removed) 1.62 kB 🟢 -1.62 kB 🟢 -726 B 🟢 -644 B
assets/nightlyBadges-B9O14bgQ.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -762 B 🟢 -671 B
assets/nightlyBadges-DJfXbKjV.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +764 B 🔴 +672 B
assets/previousFullPath-BY_UWty5.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +696 B 🔴 +599 B
assets/previousFullPath-uEkk94us.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -693 B 🟢 -618 B
assets/Load3dViewerContent-C5NcJvkS.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +681 B 🔴 +596 B
assets/Load3dViewerContent-CmLZG4co.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -679 B 🟢 -599 B
assets/SubscriptionPanelContentWorkspace-B93R3jKM.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +634 B 🔴 +553 B
assets/SubscriptionPanelContentWorkspace-CB-Afnot.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -633 B 🟢 -549 B
assets/WidgetLegacy--ekIoel4.js (new) 1.22 kB 🔴 +1.22 kB 🔴 +582 B 🔴 +512 B
assets/WidgetLegacy-DbUugD9R.js (removed) 1.22 kB 🟢 -1.22 kB 🟢 -579 B 🟢 -511 B
assets/changeTracker-Cy_wFFgl.js (new) 1.19 kB 🔴 +1.19 kB 🔴 +570 B 🔴 +500 B
assets/changeTracker-Dor0WZiI.js (removed) 1.19 kB 🟢 -1.19 kB 🟢 -567 B 🟢 -502 B

Status: 57 added / 57 removed / 85 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.9 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.4 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.9 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 56.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 60.6 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 77.5 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 77.5 MB heap
minimap-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.4 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 59.5 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.0 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 157ms TBT · 211.3 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 98.4 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 157.9 MB heap
vue-large-graph-pan: · 57.1 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 209.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 51.6 MB heap

⚠️ 2 regressions detected

Metric Baseline PR (median) Δ Sig
large-graph-pan: task duration 1188ms 1197ms +1% ⚠️ z=2.7
subgraph-idle: task duration 498ms 470ms -6% ⚠️ z=3.2
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 -1%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 9ms 9ms -1% z=-1.8
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 9 9 -6% z=-4.7
canvas-idle: task duration 453ms 451ms -1% z=1.8
canvas-idle: script duration 23ms 21ms -8% z=-1.9
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 70.9 MB 63.9 MB -10%
canvas-idle: DOM nodes 18 -124 -789% z=-114.9
canvas-idle: event listeners 4 -79 -2063% z=-19.0
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-1.5
canvas-mouse-sweep: p95 frame time 17ms 17ms +1%
canvas-mouse-sweep: layout duration 4ms 4ms +3% z=0.9
canvas-mouse-sweep: style recalc duration 44ms 43ms -2% z=0.2
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 80 76 -5% z=-1.1
canvas-mouse-sweep: task duration 971ms 859ms -12% z=-0.1
canvas-mouse-sweep: script duration 141ms 142ms +1% z=1.1
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 65.4 MB 56.4 MB -14%
canvas-mouse-sweep: DOM nodes 65 -103 -258% z=-63.9
canvas-mouse-sweep: event listeners 6 -63 -1142% z=-17.0
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 1ms 1ms +2% z=-0.4
canvas-zoom-sweep: style recalc duration 19ms 18ms -5% z=-0.5
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 339ms 353ms +4% z=1.1
canvas-zoom-sweep: script duration 25ms 25ms +1% z=-0.8
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 46.9 MB 49.9 MB +6%
canvas-zoom-sweep: DOM nodes 78 -66 -185% z=-183.5
canvas-zoom-sweep: event listeners 19 -50 -361% z=-14.1
dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.5
dom-widget-clipping: p95 frame time 17ms 17ms -0%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 9ms 9ms +1% z=-0.5
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 13 13 -4% z=-1.2
dom-widget-clipping: task duration 371ms 361ms -3% z=-0.2
dom-widget-clipping: script duration 69ms 67ms -2% z=-0.1
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 56.6 MB 56.3 MB -1%
dom-widget-clipping: DOM nodes 21 21 +0% z=-0.8
dom-widget-clipping: event listeners 2 1 -50% 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 10ms 10ms -1% z=-2.5
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 8 9 +13% z=-8.3
large-graph-idle: task duration 661ms 586ms -11% z=0.8
large-graph-idle: script duration 123ms 100ms -19% z=-0.2
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 63.1 MB 60.6 MB -4%
large-graph-idle: DOM nodes -264 -261 -1% z=-316.1
large-graph-idle: event listeners -129 -129 +0% z=-25.4
large-graph-pan: avg frame time 17ms 17ms -0% z=-0.2
large-graph-pan: p95 frame time 17ms 17ms -1%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 18ms 19ms +1% z=1.7
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 69 69 +0% z=-0.9
large-graph-pan: task duration 1188ms 1197ms +1% ⚠️ z=2.7
large-graph-pan: script duration 432ms 419ms -3% z=0.5
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 59.0 MB 77.5 MB +31%
large-graph-pan: DOM nodes -263 -262 -0% z=-170.3
large-graph-pan: event listeners -129 -127 -2% z=-159.3
large-graph-zoom: avg frame time 17ms 17ms -0%
large-graph-zoom: p95 frame time 17ms 17ms -0%
large-graph-zoom: layout duration 8ms 7ms -2%
large-graph-zoom: style recalc duration 19ms 18ms -10%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 65 64 -2%
large-graph-zoom: task duration 1452ms 1392ms -4%
large-graph-zoom: script duration 519ms 501ms -3%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 66.7 MB 77.5 MB +16%
large-graph-zoom: DOM nodes -267 -270 +1%
large-graph-zoom: event listeners -125 -141 +13%
minimap-idle: avg frame time 17ms 17ms -0% z=-0.9
minimap-idle: p95 frame time 17ms 17ms +1%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 9ms 9ms +3% z=-0.8
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 -6% z=-3.0
minimap-idle: task duration 640ms 572ms -11% z=0.9
minimap-idle: script duration 115ms 98ms -15% z=-0.0
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 67.3 MB 64.4 MB -4%
minimap-idle: DOM nodes -265 -267 +1% z=-208.8
minimap-idle: event listeners -129 -129 +0% z=-202.3
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
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 12ms 12ms -3% z=-1.0
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 46 -2% z=-3.3
subgraph-dom-widget-clipping: task duration 366ms 404ms +10% z=1.4
subgraph-dom-widget-clipping: script duration 122ms 125ms +2% z=-0.5
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 55.4 MB 53.3 MB -4%
subgraph-dom-widget-clipping: DOM nodes 20 -122 -708% z=-128.4
subgraph-dom-widget-clipping: event listeners 6 -77 -1375% z=-15.9
subgraph-idle: avg frame time 17ms 17ms -0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms -1%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 11ms +22% z=0.3
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 11 +17% z=-0.6
subgraph-idle: task duration 498ms 470ms -6% ⚠️ z=3.2
subgraph-idle: script duration 23ms 22ms -4% z=0.5
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 57.7 MB 59.5 MB +3%
subgraph-idle: DOM nodes -261 -261 +0% z=-189.2
subgraph-idle: event listeners -131 -132 +1% 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 5ms 4ms -11% z=-1.5
subgraph-mouse-sweep: style recalc duration 42ms 38ms -9% z=-1.4
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 78 76 -3% z=-2.1
subgraph-mouse-sweep: task duration 799ms 758ms -5% z=-0.1
subgraph-mouse-sweep: script duration 106ms 100ms -5% z=-0.1
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 57.1 MB 66.0 MB +16%
subgraph-mouse-sweep: DOM nodes -260 -97 -63% z=-73.4
subgraph-mouse-sweep: event listeners -133 -64 -52% 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 12ms 12ms -1%
subgraph-transition-enter: style recalc duration 28ms 27ms -4%
subgraph-transition-enter: layout count 4 4 +0%
subgraph-transition-enter: style recalc count 17 16 -6%
subgraph-transition-enter: task duration 909ms 815ms -10%
subgraph-transition-enter: script duration 40ms 27ms -32%
subgraph-transition-enter: TBT 157ms 157ms +0%
subgraph-transition-enter: heap used 215.2 MB 211.3 MB -2%
subgraph-transition-enter: DOM nodes 13513 13513 +0%
subgraph-transition-enter: event listeners 2529 2527 -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 53ms 51ms -3%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 249 250 +0%
viewport-pan-sweep: task duration 4569ms 3939ms -14%
viewport-pan-sweep: script duration 1490ms 1262ms -15%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 139.3 MB 98.4 MB -29%
viewport-pan-sweep: DOM nodes -263 -261 -1%
viewport-pan-sweep: event listeners -125 -120 -4%
vue-large-graph-idle: avg frame time 18ms 17ms -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 15066ms 12525ms -17%
vue-large-graph-idle: script duration 744ms 605ms -19%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 253.8 MB 157.9 MB -38%
vue-large-graph-idle: DOM nodes -8329 -5821 -30%
vue-large-graph-idle: event listeners -16490 -16469 -0%
vue-large-graph-pan: avg frame time 17ms 17ms +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 17ms 18ms +8%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 67 84 +25%
vue-large-graph-pan: task duration 14526ms 15763ms +9%
vue-large-graph-pan: script duration 937ms 987ms +5%
vue-large-graph-pan: TBT 0ms 0ms +0%
vue-large-graph-pan: heap used 171.8 MB 209.5 MB +22%
vue-large-graph-pan: DOM nodes -8331 -5816 -30%
vue-large-graph-pan: event listeners -16464 -16477 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.6
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 2ms 1ms -15% z=-1.7
workflow-execution: style recalc duration 27ms 24ms -11% z=-0.1
workflow-execution: layout count 5 5 -10% z=-0.8
workflow-execution: style recalc count 18 18 -3% z=-0.2
workflow-execution: task duration 137ms 131ms -5% z=0.7
workflow-execution: script duration 32ms 26ms -19% z=-1.0
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 54.2 MB 51.6 MB -5%
workflow-execution: DOM nodes 158 164 +3% z=0.4
workflow-execution: event listeners 69 70 +1% z=4.2
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-05-14T23:48:11.360Z",
  "gitSha": "8445c0bf6d7aa76c1d3f5466d34cc62aa0e22892",
  "branch": "glary/rename-is-active-subscription",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2043.058999999971,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 8.651,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 429.272,
      "heapDeltaBytes": 1263868,
      "heapUsedBytes": 67499352,
      "domNodes": 16,
      "jsHeapTotalBytes": 19226624,
      "scriptDurationMs": 22.463000000000005,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-idle",
      "durationMs": 2028.9820000000418,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.783,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 471.968,
      "heapDeltaBytes": 12116,
      "heapUsedBytes": 66532376,
      "domNodes": -264,
      "jsHeapTotalBytes": 23023616,
      "scriptDurationMs": 19.78,
      "eventListeners": -161,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1994.782999999984,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 44.126,
      "layouts": 12,
      "layoutDurationMs": 3.887,
      "taskDurationMs": 921.633,
      "heapDeltaBytes": 1229952,
      "heapUsedBytes": 50174176,
      "domNodes": -265,
      "jsHeapTotalBytes": 15593472,
      "scriptDurationMs": 145.327,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1841.3460000000441,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 42.548,
      "layouts": 12,
      "layoutDurationMs": 3.7,
      "taskDurationMs": 796.7729999999999,
      "heapDeltaBytes": -96512,
      "heapUsedBytes": 68000720,
      "domNodes": 59,
      "jsHeapTotalBytes": 19922944,
      "scriptDurationMs": 139.544,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1722.201000000041,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 16.804000000000002,
      "layouts": 6,
      "layoutDurationMs": 0.6329999999999999,
      "taskDurationMs": 300.354,
      "heapDeltaBytes": 269852,
      "heapUsedBytes": 49732732,
      "domNodes": 77,
      "jsHeapTotalBytes": 14942208,
      "scriptDurationMs": 19.698000000000008,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1739.2449999999826,
      "styleRecalcs": 32,
      "styleRecalcDurationMs": 19.858,
      "layouts": 6,
      "layoutDurationMs": 0.621,
      "taskDurationMs": 406.336,
      "heapDeltaBytes": -13528220,
      "heapUsedBytes": 54810876,
      "domNodes": -209,
      "jsHeapTotalBytes": 19877888,
      "scriptDurationMs": 29.985,
      "eventListeners": -118,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 569.5450000000051,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 8.957,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 359.349,
      "heapDeltaBytes": 9414204,
      "heapUsedBytes": 58875484,
      "domNodes": 20,
      "jsHeapTotalBytes": 15466496,
      "scriptDurationMs": 69.609,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 575.0439999999344,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 10.03,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 363.52,
      "heapDeltaBytes": -9070776,
      "heapUsedBytes": 59175416,
      "domNodes": 22,
      "jsHeapTotalBytes": 18874368,
      "scriptDurationMs": 65.37799999999999,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2072.3009999999817,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.982000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 580.665,
      "heapDeltaBytes": 7517808,
      "heapUsedBytes": 65551840,
      "domNodes": -260,
      "jsHeapTotalBytes": -237568,
      "scriptDurationMs": 98.404,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2053.4790000000385,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.212000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 590.4689999999999,
      "heapDeltaBytes": 2707276,
      "heapUsedBytes": 61458764,
      "domNodes": -262,
      "jsHeapTotalBytes": 5005312,
      "scriptDurationMs": 102.08300000000001,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2264.6859999999833,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 18.575,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1279.615,
      "heapDeltaBytes": 42945756,
      "heapUsedBytes": 103862388,
      "domNodes": -262,
      "jsHeapTotalBytes": 37744640,
      "scriptDurationMs": 442.414,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2145.087000000103,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 18.746000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1115.0669999999998,
      "heapDeltaBytes": -858604,
      "heapUsedBytes": 58624408,
      "domNodes": -262,
      "jsHeapTotalBytes": 5472256,
      "scriptDurationMs": 395.39799999999997,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3184.7569999999905,
      "styleRecalcs": 65,
      "styleRecalcDurationMs": 18.732000000000003,
      "layouts": 60,
      "layoutDurationMs": 7.661,
      "taskDurationMs": 1377.593,
      "heapDeltaBytes": -4366876,
      "heapUsedBytes": 56334548,
      "domNodes": -268,
      "jsHeapTotalBytes": 5267456,
      "scriptDurationMs": 507.984,
      "eventListeners": -157,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3231.5949999999702,
      "styleRecalcs": 63,
      "styleRecalcDurationMs": 16.286,
      "layouts": 60,
      "layoutDurationMs": 7.156,
      "taskDurationMs": 1406.072,
      "heapDeltaBytes": 43392388,
      "heapUsedBytes": 106145788,
      "domNodes": -272,
      "jsHeapTotalBytes": 43540480,
      "scriptDurationMs": 494.971,
      "eventListeners": -125,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2034.074999999973,
      "styleRecalcs": 7,
      "styleRecalcDurationMs": 7.978000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 544.2900000000001,
      "heapDeltaBytes": 8014876,
      "heapUsedBytes": 68401224,
      "domNodes": -265,
      "jsHeapTotalBytes": 1073152,
      "scriptDurationMs": 91.37099999999998,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2025.6969999999228,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 9.764999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 598.776,
      "heapDeltaBytes": 6442012,
      "heapUsedBytes": 66616164,
      "domNodes": -268,
      "jsHeapTotalBytes": 548864,
      "scriptDurationMs": 104.575,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 621.0159999999973,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 11.763,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 432.56100000000004,
      "heapDeltaBytes": -19593228,
      "heapUsedBytes": 46628732,
      "domNodes": -261,
      "jsHeapTotalBytes": 21450752,
      "scriptDurationMs": 131.47199999999998,
      "eventListeners": -159,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999727
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 555.8230000000322,
      "styleRecalcs": 46,
      "styleRecalcDurationMs": 11.817999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 376.1960000000001,
      "heapDeltaBytes": -3635068,
      "heapUsedBytes": 65147460,
      "domNodes": 18,
      "jsHeapTotalBytes": 20185088,
      "scriptDurationMs": 118.079,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2026.4490000000137,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 12.472999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 514.0519999999999,
      "heapDeltaBytes": 20032316,
      "heapUsedBytes": 68769260,
      "domNodes": -259,
      "jsHeapTotalBytes": 19001344,
      "scriptDurationMs": 26.601999999999997,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2024.7779999999693,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.864,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 426.42900000000003,
      "heapDeltaBytes": 7308788,
      "heapUsedBytes": 56110440,
      "domNodes": -263,
      "jsHeapTotalBytes": 16117760,
      "scriptDurationMs": 16.616,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1749.9540000000025,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 39.275,
      "layouts": 16,
      "layoutDurationMs": 4.649,
      "taskDurationMs": 770.818,
      "heapDeltaBytes": 10073128,
      "heapUsedBytes": 60305684,
      "domNodes": -258,
      "jsHeapTotalBytes": 21975040,
      "scriptDurationMs": 104.347,
      "eventListeners": -131,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1720.9179999999833,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 36.573,
      "layouts": 16,
      "layoutDurationMs": 3.7880000000000007,
      "taskDurationMs": 744.9870000000001,
      "heapDeltaBytes": 24420300,
      "heapUsedBytes": 78121508,
      "domNodes": 64,
      "jsHeapTotalBytes": 46137344,
      "scriptDurationMs": 95.67600000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1011.0220000000254,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 26.542,
      "layouts": 4,
      "layoutDurationMs": 11.722,
      "taskDurationMs": 814.716,
      "heapDeltaBytes": 82022184,
      "heapUsedBytes": 221583616,
      "domNodes": 13513,
      "jsHeapTotalBytes": 80478208,
      "scriptDurationMs": 27.072000000000013,
      "eventListeners": 2527,
      "totalBlockingTimeMs": 157,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8451.629000000026,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 52.51500000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4113.539000000001,
      "heapDeltaBytes": 72589960,
      "heapUsedBytes": 132477120,
      "domNodes": -260,
      "jsHeapTotalBytes": 53735424,
      "scriptDurationMs": 1265.382,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8146.317999999951,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 50.477999999999994,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3764.0640000000003,
      "heapDeltaBytes": 14416432,
      "heapUsedBytes": 73894292,
      "domNodes": -261,
      "jsHeapTotalBytes": 5238784,
      "scriptDurationMs": 1258.732,
      "eventListeners": -113,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 12029.558000000008,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 12019.436,
      "heapDeltaBytes": -37544848,
      "heapUsedBytes": 165844216,
      "domNodes": -8331,
      "jsHeapTotalBytes": 16576512,
      "scriptDurationMs": 581.393,
      "eventListeners": -16464,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13074.79699999999,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13030.823999999999,
      "heapDeltaBytes": -27523208,
      "heapUsedBytes": 165193732,
      "domNodes": -3310,
      "jsHeapTotalBytes": 20156416,
      "scriptDurationMs": 627.9939999999999,
      "eventListeners": -16474,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.220000000000073,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 17116.538000000048,
      "styleRecalcs": 102,
      "styleRecalcDurationMs": 18.63300000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17091.209,
      "heapDeltaBytes": 6640656,
      "heapUsedBytes": 269279976,
      "domNodes": -8329,
      "jsHeapTotalBytes": -548864,
      "scriptDurationMs": 1061.911,
      "eventListeners": -16488,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 14462.356999999996,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 18.30499999999996,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 14435.392999999998,
      "heapDeltaBytes": -28005748,
      "heapUsedBytes": 169982144,
      "domNodes": -3302,
      "jsHeapTotalBytes": 14856192,
      "scriptDurationMs": 912.6619999999998,
      "eventListeners": -16466,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "workflow-execution",
      "durationMs": 466.02600000005623,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 25.514999999999997,
      "layouts": 5,
      "layoutDurationMs": 1.5199999999999998,
      "taskDurationMs": 150.133,
      "heapDeltaBytes": -14584064,
      "heapUsedBytes": 52993800,
      "domNodes": 170,
      "jsHeapTotalBytes": 4022272,
      "scriptDurationMs": 29.900000000000002,
      "eventListeners": 71,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    },
    {
      "name": "workflow-execution",
      "durationMs": 449.1570000000138,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 22.424,
      "layouts": 4,
      "layoutDurationMs": 1.073,
      "taskDurationMs": 111.54900000000004,
      "heapDeltaBytes": 5065512,
      "heapUsedBytes": 55278864,
      "domNodes": 157,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 22.529,
      "eventListeners": 69,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000273
    }
  ]
}

🎭 Playwright: ✅ 1713 passed, 0 failed · 2 flaky

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

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 07/17/2026, 09:56:08 PM UTC

Links

📦 Bundle: 7.91 MB gzip 🟢 -2.26 kB

Details

Summary

  • Raw size: 33.4 MB baseline 33.4 MB — 🟢 -8.14 kB
  • Gzip: 7.91 MB baseline 7.91 MB — 🟢 -2.26 kB
  • Brotli: 5.45 MB baseline 5.45 MB — 🟢 -1.7 kB
  • Bundles: 302 current • 302 baseline • 136 added / 136 removed

Category Glance
Other 🟢 -12.1 kB (11.9 MB) · Panels & Settings 🔴 +4.46 kB (555 kB) · Utilities & Hooks 🟢 -530 B (3.4 MB) · Views & Navigation 🔴 +18 B (109 kB) · UI Components 🔴 +18 B (56.9 kB) · Graph Workspace 🟢 -15 B (1.25 MB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Bo0_hrTF.js (new) 47.3 kB 🔴 +47.3 kB 🔴 +14.1 kB 🔴 +12.2 kB
assets/index-JlzmmnQG.js (removed) 47.3 kB 🟢 -47.3 kB 🟢 -14.1 kB 🟢 -12.2 kB

Status: 1 added / 1 removed

Graph Workspace — 1.25 MB (baseline 1.25 MB) • 🟢 -15 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-XGmZHAUY.js (removed) 1.25 MB 🟢 -1.25 MB 🟢 -266 kB 🟢 -200 kB
assets/GraphView-B8pgzGtK.js (new) 1.25 MB 🔴 +1.25 MB 🔴 +266 kB 🔴 +200 kB

Status: 1 added / 1 removed

Views & Navigation — 109 kB (baseline 109 kB) • 🔴 +18 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BsDCl-Gm.js (new) 25 kB 🔴 +25 kB 🔴 +6.25 kB 🔴 +5.53 kB
assets/CloudSurveyView-Dt1lJNwI.js (removed) 25 kB 🟢 -25 kB 🟢 -6.26 kB 🟢 -5.53 kB
assets/CloudLoginView-D-6Ei3K6.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.07 kB 🔴 +2.68 kB
assets/CloudLoginView-DNB8NSyf.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.07 kB 🟢 -2.69 kB
assets/CloudSignupView-B9CublT9.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.74 kB 🟢 -2.4 kB
assets/CloudSignupView-D69dDM6K.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.75 kB 🔴 +2.41 kB
assets/CloudLayoutView-BZgmlGuU.js (removed) 9.54 kB 🟢 -9.54 kB 🟢 -2.35 kB 🟢 -2.03 kB
assets/CloudLayoutView-Qn8nEYw5.js (new) 9.54 kB 🔴 +9.54 kB 🔴 +2.35 kB 🔴 +2.04 kB
assets/UserCheckView-CpmJCBcw.js (new) 8.8 kB 🔴 +8.8 kB 🔴 +2.22 kB 🔴 +1.93 kB
assets/UserCheckView-HpvlfeY3.js (removed) 8.8 kB 🟢 -8.8 kB 🟢 -2.22 kB 🟢 -1.93 kB
assets/WidgetTextPreview-BAGDBsMs.js (removed) 6.13 kB 🟢 -6.13 kB 🟢 -2.17 kB 🟢 -1.92 kB
assets/WidgetTextPreview-CrindBq2.js (new) 6.13 kB 🔴 +6.13 kB 🔴 +2.17 kB 🔴 +1.92 kB
assets/CloudSubscriptionRedirectView-eOPF5bfP.js (new) 6.08 kB 🔴 +6.08 kB 🔴 +2.27 kB 🔴 +1.97 kB
assets/CloudSubscriptionRedirectView-C2klTi37.js (removed) 6.06 kB 🟢 -6.06 kB 🟢 -2.27 kB 🟢 -1.97 kB
assets/UserSelectView-C-RwjxZR.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/UserSelectView-m8jJGLFf.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CloudForgotPasswordView-DFxuXoPM.js (removed) 5.15 kB 🟢 -5.15 kB 🟢 -1.76 kB 🟢 -1.54 kB
assets/CloudForgotPasswordView-Duq10tHy.js (new) 5.15 kB 🔴 +5.15 kB 🔴 +1.76 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-1EK88lJH.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.57 kB 🔴 +1.36 kB
assets/CloudAuthTimeoutView-B8iUiU5_.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.57 kB 🟢 -1.36 kB
assets/WidgetTextPreview-C504roBw.js (new) 131 B 🔴 +131 B 🔴 +100 B 🔴 +89 B
assets/WidgetTextPreview-DRbv6vd0.js (removed) 131 B 🟢 -131 B 🟢 -100 B 🟢 -88 B

Status: 11 added / 11 removed / 3 unchanged

Panels & Settings — 555 kB (baseline 550 kB) • 🔴 +4.46 kB

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-CVsoAFjv.js (new) 49.5 kB 🔴 +49.5 kB 🔴 +9.97 kB 🔴 +8.82 kB
assets/KeybindingPanel-DUBukUt3.js (removed) 49.5 kB 🟢 -49.5 kB 🟢 -9.97 kB 🟢 -8.83 kB
assets/SecretsPanel-8xkUyoRV.js (removed) 31 kB 🟢 -31 kB 🟢 -7.51 kB 🟢 -6.57 kB
assets/SecretsPanel-ZPwc4qF3.js (new) 31 kB 🔴 +31 kB 🔴 +7.51 kB 🔴 +6.57 kB
assets/CreditsPanel-CYECm1uB.js (new) 16 kB 🔴 +16 kB 🔴 +4.67 kB 🔴 +4.1 kB
assets/CreditsPanel-Du6ZIuFo.js (removed) 16 kB 🟢 -16 kB 🟢 -4.67 kB 🟢 -4.09 kB
assets/SubscriptionPanel-CRu0UUiy.js (new) 15.9 kB 🔴 +15.9 kB 🔴 +4.53 kB 🔴 +3.99 kB
assets/SubscriptionPanel-Bx2t1-tp.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.64 kB 🟢 -3.21 kB
assets/AboutPanel-BwdUs6eY.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.06 kB 🔴 +2.75 kB
assets/AboutPanel-CdR4tmcq.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.06 kB 🟢 -2.75 kB
assets/ExtensionPanel-CM07Aol_.js (new) 9.04 kB 🔴 +9.04 kB 🔴 +2.5 kB 🔴 +2.2 kB
assets/ExtensionPanel-DZ3mYGM7.js (removed) 9.04 kB 🟢 -9.04 kB 🟢 -2.5 kB 🟢 -2.19 kB
assets/ServerConfigPanel-C55PNFIl.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -1.98 kB 🟢 -1.76 kB
assets/ServerConfigPanel-DDJrotQI.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +1.98 kB 🔴 +1.76 kB
assets/UserPanel-BVt8l-zi.js (new) 5.78 kB 🔴 +5.78 kB 🔴 +1.82 kB 🔴 +1.58 kB
assets/UserPanel-DaAeOWQy.js (removed) 5.78 kB 🟢 -5.78 kB 🟢 -1.82 kB 🟢 -1.58 kB
assets/refreshRemoteConfig-BbhzGOt-.js (new) 2.84 kB 🔴 +2.84 kB 🔴 +1.24 kB 🔴 +1.08 kB
assets/refreshRemoteConfig-DQG94FNe.js (removed) 2.84 kB 🟢 -2.84 kB 🟢 -1.24 kB 🟢 -1.08 kB
assets/cloudRemoteConfig-CQfdXbSE.js (new) 1.01 kB 🔴 +1.01 kB 🔴 +549 B 🔴 +456 B
assets/cloudRemoteConfig-aXpmjy1j.js (removed) 990 B 🟢 -990 B 🟢 -541 B 🟢 -471 B
assets/refreshRemoteConfig-_fL4gUXZ.js (removed) 110 B 🟢 -110 B 🟢 -89 B 🟢 -92 B
assets/refreshRemoteConfig-Ct8LEJhJ.js (new) 110 B 🔴 +110 B 🔴 +89 B 🔴 +85 B

Status: 11 added / 11 removed / 15 unchanged

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SignUpForm-B_O8uVch.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.19 kB 🟢 -3.66 kB
assets/SignUpForm-Bb3li_EJ.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +4.19 kB 🔴 +3.65 kB
assets/auth-BVvoGcPQ.js (new) 3.69 kB 🔴 +3.69 kB 🔴 +1.3 kB 🔴 +1.14 kB
assets/auth-CTt3dwHn.js (removed) 3.69 kB 🟢 -3.69 kB 🟢 -1.3 kB 🟢 -1.14 kB
assets/usePostAuthRedirect-CS_Irz79.js (new) 3.33 kB 🔴 +3.33 kB 🔴 +1.27 kB 🔴 +1.11 kB
assets/usePostAuthRedirect-CzvSa36t.js (removed) 3.33 kB 🟢 -3.33 kB 🟢 -1.27 kB 🟢 -1.1 kB
assets/UpdatePasswordContent-Tlf3vkeN.js (removed) 1.92 kB 🟢 -1.92 kB 🟢 -876 B 🟢 -764 B
assets/UpdatePasswordContent-zlhlw0RG.js (new) 1.92 kB 🔴 +1.92 kB 🔴 +876 B 🔴 +760 B
assets/authStore-D0RGjlj2.js (removed) 130 B 🟢 -130 B 🟢 -109 B 🟢 -122 B
assets/authStore-iw5qmpHA.js (new) 130 B 🔴 +130 B 🔴 +109 B 🔴 +106 B
assets/workspaceAuthStore-BtM5PQ15.js (new) 110 B 🔴 +110 B 🔴 +104 B 🔴 +113 B
assets/workspaceAuthStore-DcjkKnMz.js (removed) 110 B 🟢 -110 B 🟢 -104 B 🟢 -114 B
assets/auth-DTU_3x-W.js (removed) 105 B 🟢 -105 B 🟢 -96 B 🟢 -81 B
assets/auth-grjGdc7Q.js (new) 105 B 🔴 +105 B 🔴 +96 B 🔴 +89 B

Status: 7 added / 7 removed / 3 unchanged

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-CXLP3QK6.js (new) 90.5 kB 🔴 +90.5 kB 🔴 +19.3 kB 🔴 +16.5 kB
assets/ComfyHubPublishDialog-nrdpTFhA.js (removed) 90.5 kB 🟢 -90.5 kB 🟢 -19.3 kB 🟢 -16.5 kB
assets/useShareDialog-37sqY3uc.js (new) 23.7 kB 🔴 +23.7 kB 🔴 +5.58 kB 🔴 +4.97 kB
assets/useShareDialog-ClIgdZP0.js (removed) 23.7 kB 🟢 -23.7 kB 🟢 -5.58 kB 🟢 -4.97 kB
assets/feedbackDialog-CR_Ry9kI.js (new) 4.51 kB 🔴 +4.51 kB 🔴 +1.9 kB 🔴 +1.63 kB
assets/feedbackDialog-D0ejr9CP.js (removed) 4.51 kB 🟢 -4.51 kB 🟢 -1.9 kB 🟢 -1.63 kB
assets/ComfyHubPublishDialog-B9YiZMc3.js (removed) 143 B 🟢 -143 B 🟢 -105 B 🟢 -90 B
assets/ComfyHubPublishDialog-D17_BiEY.js (new) 143 B 🔴 +143 B 🔴 +105 B 🔴 +90 B
assets/useSubscriptionDialog-_b3YlmTf.js (new) 110 B 🔴 +110 B 🔴 +102 B 🔴 +89 B
assets/useSubscriptionDialog-C8vzntpl.js (removed) 110 B 🟢 -110 B 🟢 -102 B 🟢 -94 B

Status: 5 added / 5 removed / 1 unchanged

UI Components — 56.9 kB (baseline 56.8 kB) • 🔴 +18 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-0T84cxdv.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -3.8 kB 🟢 -3.39 kB
assets/ComfyQueueButton-BeJeNbZN.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +3.81 kB 🔴 +3.4 kB
assets/useTerminalTabs-Cmge2xpR.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.72 kB 🟢 -3.29 kB
assets/useTerminalTabs-CYK2yvqU.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.72 kB 🔴 +3.29 kB
assets/SubscribeButton-BccSgZ6Y.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1 kB 🔴 +880 B
assets/SubscribeButton-BqfrbsSU.js (removed) 2.18 kB 🟢 -2.18 kB 🟢 -993 B 🟢 -875 B
assets/cloudFeedbackTopbarButton-B4csjy1f.js (new) 771 B 🔴 +771 B 🔴 +459 B 🔴 +396 B
assets/cloudFeedbackTopbarButton-JDnZbJfQ.js (removed) 771 B 🟢 -771 B 🟢 -460 B 🟢 -419 B
assets/ComfyQueueButton-2MuPJiiz.js (removed) 128 B 🟢 -128 B 🟢 -99 B 🟢 -88 B
assets/ComfyQueueButton-C9gB5943.js (new) 128 B 🔴 +128 B 🔴 +99 B 🔴 +93 B

Status: 5 added / 5 removed / 8 unchanged

Data & Services — 270 kB (baseline 270 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/load3dService-B-Wlz10B.js (removed) 132 kB 🟢 -132 kB 🟢 -29.5 kB 🟢 -25 kB
assets/load3dService-BEucPXo4.js (new) 132 kB 🔴 +132 kB 🔴 +29.6 kB 🔴 +24.9 kB
assets/api-BLFn9wIT.js (new) 89.1 kB 🔴 +89.1 kB 🔴 +24.5 kB 🔴 +21.2 kB
assets/api-D5BfHjpu.js (removed) 89.1 kB 🟢 -89.1 kB 🟢 -24.5 kB 🟢 -21.1 kB
assets/workflowShareService-BMcs59F7.js (new) 17 kB 🔴 +17 kB 🔴 +5 kB 🔴 +4.44 kB
assets/workflowShareService-U9d1bM0B.js (removed) 17 kB 🟢 -17 kB 🟢 -5 kB 🟢 -4.44 kB
assets/keybindingService-B7DAlG8a.js (removed) 7.21 kB 🟢 -7.21 kB 🟢 -1.88 kB 🟢 -1.61 kB
assets/keybindingService-DVyQYUxq.js (new) 7.21 kB 🔴 +7.21 kB 🔴 +1.88 kB 🔴 +1.61 kB
assets/releaseStore-BAYscfw5.js (new) 6.77 kB 🔴 +6.77 kB 🔴 +2.07 kB 🔴 +1.81 kB
assets/releaseStore-CQmFvjkm.js (removed) 6.77 kB 🟢 -6.77 kB 🟢 -2.07 kB 🟢 -1.81 kB
assets/systemStatsStore-c4-5ePP-.js (new) 4.99 kB 🔴 +4.99 kB 🔴 +1.77 kB 🔴 +1.49 kB
assets/systemStatsStore-DiEJTjGx.js (removed) 4.99 kB 🟢 -4.99 kB 🟢 -1.77 kB 🟢 -1.49 kB
assets/userStore-CtxA_XJm.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +930 B 🔴 +821 B
assets/userStore-Dd7B5W0A.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -931 B 🟢 -820 B
assets/audioService-9VYnfW_J.js (new) 1.76 kB 🔴 +1.76 kB 🔴 +862 B 🔴 +747 B
assets/audioService-BUVikOm0.js (removed) 1.76 kB 🟢 -1.76 kB 🟢 -861 B 🟢 -751 B
assets/dialogService-CERTKrjY.js (new) 100 B 🔴 +100 B 🔴 +99 B 🔴 +97 B
assets/dialogService-DhMecbyl.js (removed) 100 B 🟢 -100 B 🟢 -99 B 🟢 -95 B
assets/settingStore-CpbEyPJO.js (new) 98 B 🔴 +98 B 🔴 +98 B 🔴 +89 B
assets/settingStore-iCpv4TH9.js (removed) 98 B 🟢 -98 B 🟢 -98 B 🟢 -90 B
assets/assetsStore-1qLGVpvE.js (removed) 96 B 🟢 -96 B 🟢 -97 B 🟢 -85 B
assets/assetsStore-BrtrLh-H.js (new) 96 B 🔴 +96 B 🔴 +97 B 🔴 +99 B
assets/releaseStore-7Ojpj30z.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -85 B
assets/releaseStore-ijradYL3.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +79 B
assets/api-CKK0wLIT.js (new) 62 B 🔴 +62 B 🔴 +74 B 🔴 +66 B
assets/api-CmUzwjcs.js (removed) 62 B 🟢 -62 B 🟢 -74 B 🟢 -66 B

Status: 13 added / 13 removed / 3 unchanged

Utilities & Hooks — 3.4 MB (baseline 3.4 MB) • 🟢 -530 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/promotionUtils-55CLiObf.js (removed) 3.04 MB 🟢 -3.04 MB 🟢 -704 kB 🟢 -531 kB
assets/promotionUtils-BBMhGy6_.js (new) 3.04 MB 🔴 +3.04 MB 🔴 +704 kB 🔴 +531 kB
assets/useConflictDetection-BIye680W.js (new) 235 kB 🔴 +235 kB 🔴 +52.3 kB 🔴 +42.6 kB
assets/useConflictDetection-HB6BNsLU.js (removed) 235 kB 🟢 -235 kB 🟢 -52.3 kB 🟢 -42.6 kB
assets/useLoad3d-BAm3EZ1v.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -5.82 kB 🟢 -5.17 kB
assets/useLoad3d-BYILp6UT.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +5.82 kB 🔴 +5.17 kB
assets/useLoad3dViewer-DmBjd_Fo.js (removed) 21.2 kB 🟢 -21.2 kB 🟢 -4.99 kB 🟢 -4.38 kB
assets/useLoad3dViewer-vsGlc0WJ.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +4.99 kB 🔴 +4.38 kB
assets/useFeatureFlags-Cttw4eSs.js (new) 6.75 kB 🔴 +6.75 kB 🔴 +2.07 kB 🔴 +1.76 kB
assets/useFeatureFlags-D3GzBDxV.js (removed) 6.75 kB 🟢 -6.75 kB 🟢 -2.07 kB 🟢 -1.74 kB
assets/useDowngradeToPersonal-4gzKccfn.js (new) 3 kB 🔴 +3 kB 🔴 +1.18 kB 🔴 +1.02 kB
assets/useDowngradeToPersonal-B13REVo8.js (removed) 3 kB 🟢 -3 kB 🟢 -1.18 kB 🟢 -1.04 kB
assets/assetPreviewUtil-BVMDErcM.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1 kB 🟢 -874 B
assets/assetPreviewUtil-C_klLZt3.js (new) 2.41 kB 🔴 +2.41 kB 🔴 +1 kB 🔴 +876 B
assets/useUpstreamValue-BRcgcadh.js (removed) 2.04 kB 🟢 -2.04 kB 🟢 -791 B 🟢 -701 B
assets/useUpstreamValue-u5uDGDDb.js (new) 2.04 kB 🔴 +2.04 kB 🔴 +793 B 🔴 +703 B
assets/useWorkspaceTierLabel-DIn0_RWo.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -852 B 🟢 -739 B
assets/useWorkspaceTierLabel-DK3X5dn1.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +854 B 🔴 +734 B
assets/useSessionCookie-BTIEi8VF.js (removed) 995 B 🟢 -995 B 🟢 -520 B 🟢 -438 B
assets/useSessionCookie-D7eCfFK4.js (new) 995 B 🔴 +995 B 🔴 +516 B 🔴 +438 B
assets/subscriptionCheckoutUtil-DOsFEDma.js (new) 905 B 🔴 +905 B 🔴 +536 B 🔴 +451 B
assets/subscriptionCheckoutUtil-zpqkgeTR.js (removed) 905 B 🟢 -905 B 🟢 -537 B 🟢 -454 B
assets/useLoad3d-BsMY2XuD.js (removed) 311 B 🟢 -311 B 🟢 -164 B 🟢 -147 B
assets/useLoad3d-LoZ9q9AS.js (new) 311 B 🔴 +311 B 🔴 +165 B 🔴 +148 B
assets/useSessionCookie-5l1EZihU.js (removed) 101 B 🟢 -101 B 🟢 -86 B 🟢 -88 B
assets/useSessionCookie-DXpZdRrh.js (new) 101 B 🔴 +101 B 🔴 +86 B 🔴 +77 B
assets/useFeatureFlags-BLpxDnHN.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -83 B
assets/useFeatureFlags-CZZMPkSn.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +85 B
assets/useLoad3dViewer-DJziw3-9.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +86 B
assets/useLoad3dViewer-K0QaDIgB.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -85 B
assets/useCurrentUser-BsL8QNhI.js (removed) 96 B 🟢 -96 B 🟢 -97 B 🟢 -92 B
assets/useCurrentUser-C_yg1nkm.js (new) 96 B 🔴 +96 B 🔴 +97 B 🔴 +83 B

Status: 16 added / 16 removed / 20 unchanged

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

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 11.9 MB (baseline 11.9 MB) • 🟢 -12.1 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-BQ2DH-S-.js (removed) 111 kB 🟢 -111 kB 🟢 -28.6 kB 🟢 -24.2 kB
assets/core-DffJrXE4.js (new) 111 kB 🔴 +111 kB 🔴 +28.6 kB 🔴 +24.2 kB
assets/WidgetSelect--HkOb5K0.js (new) 88.1 kB 🔴 +88.1 kB 🔴 +20 kB 🔴 +17.1 kB
assets/WidgetSelect-CYibi2Ko.js (removed) 88.1 kB 🟢 -88.1 kB 🟢 -20 kB 🟢 -17.1 kB
assets/Load3D-BnCrfOBH.js (new) 68.8 kB 🔴 +68.8 kB 🔴 +11.1 kB 🔴 +9.51 kB
assets/Load3D-DAx1qtoL.js (removed) 68.8 kB 🟢 -68.8 kB 🟢 -11 kB 🟢 -9.5 kB
assets/Preview3d-C_XOk4lu.js (new) 51 kB 🔴 +51 kB 🔴 +8.36 kB 🔴 +7.29 kB
assets/Preview3d-dIW8SPn5.js (removed) 51 kB 🟢 -51 kB 🟢 -8.36 kB 🟢 -7.3 kB
assets/SubscriptionTransitionPreviewWorkspace-DFiaqeql.js (new) 46.8 kB 🔴 +46.8 kB 🔴 +9.66 kB 🔴 +8.53 kB
assets/SubscriptionTransitionPreviewWorkspace-WvQOBGSR.js (removed) 46.8 kB 🟢 -46.8 kB 🟢 -9.66 kB 🟢 -8.55 kB
assets/WorkspacePanelContent-B36Kujsp.js (new) 41.8 kB 🔴 +41.8 kB 🔴 +8.88 kB 🔴 +7.86 kB
assets/SubscriptionRequiredDialogContentUnified-aUIJaKGI.js (removed) 41.2 kB 🟢 -41.2 kB 🟢 -9.17 kB 🟢 -7.99 kB
assets/SubscriptionRequiredDialogContentUnified-MnI26ai5.js (new) 41.2 kB 🔴 +41.2 kB 🔴 +9.16 kB 🔴 +7.98 kB
assets/WorkspacePanelContent-DTXaoKPM.js (removed) 40.8 kB 🟢 -40.8 kB 🟢 -8.63 kB 🟢 -7.63 kB
assets/WidgetBoundingBoxes-B0YiXz8Z.js (removed) 33.8 kB 🟢 -33.8 kB 🟢 -9.2 kB 🟢 -8.16 kB
assets/WidgetBoundingBoxes-sATtjgru.js (new) 33.8 kB 🔴 +33.8 kB 🔴 +9.2 kB 🔴 +8.17 kB
assets/WidgetPainter-CJwQGaoO.js (removed) 32.7 kB 🟢 -32.7 kB 🟢 -7.91 kB 🟢 -6.99 kB
assets/WidgetPainter-owKOITRa.js (new) 32.7 kB 🔴 +32.7 kB 🔴 +7.91 kB 🔴 +7.02 kB
assets/Load3dViewerContent-BYe17XRB.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -6.31 kB 🟢 -5.47 kB
assets/Load3dViewerContent-DLsTqEC3.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +6.31 kB 🔴 +5.47 kB
assets/SubscriptionPanelContentWorkspace-Bj5MG-1k.js (removed) 25 kB 🟢 -25 kB 🟢 -5.86 kB 🟢 -5.14 kB
assets/SubscriptionRequiredDialogContentWorkspace-Cwz-J_tY.js (new) 24.6 kB 🔴 +24.6 kB 🔴 +5.66 kB 🔴 +4.98 kB
assets/SubscriptionRequiredDialogContentWorkspace-FSSpO3yT.js (removed) 24.6 kB 🟢 -24.6 kB 🟢 -5.66 kB 🟢 -4.97 kB
assets/SubscriptionRequiredDialogContent-B-hu2K_J.js (new) 24.5 kB 🔴 +24.5 kB 🔴 +6.01 kB 🔴 +5.3 kB
assets/SubscriptionRequiredDialogContent-B8s-0Qfc.js (removed) 24.4 kB 🟢 -24.4 kB 🟢 -6 kB 🟢 -5.3 kB
assets/WidgetImageCrop-BFJ8s0le.js (new) 23.3 kB 🔴 +23.3 kB 🔴 +5.75 kB 🔴 +5.04 kB
assets/WidgetImageCrop-BY9wE_AJ.js (removed) 23.3 kB 🟢 -23.3 kB 🟢 -5.75 kB 🟢 -5.05 kB
assets/load3d-DjWsLb7b.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -5.46 kB 🟢 -4.72 kB
assets/load3d-ohY1-EZc.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.46 kB 🔴 +4.72 kB
assets/CurrentUserPopoverWorkspace-D8vcROE-.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +4.73 kB 🔴 +4.2 kB
assets/CurrentUserPopoverWorkspace-CpTCR2dx.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -4.72 kB 🟢 -4.21 kB
assets/SignInContent-BljZtpAT.js (removed) 20 kB 🟢 -20 kB 🟢 -5.05 kB 🟢 -4.41 kB
assets/SignInContent-Dz3u2zui.js (new) 20 kB 🔴 +20 kB 🔴 +5.04 kB 🔴 +4.41 kB
assets/WidgetInputNumber-CJ8EyaAv.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.83 kB 🟢 -4.29 kB
assets/WidgetInputNumber-lJV3a1EI.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.83 kB 🔴 +4.29 kB
assets/CreditsTile-KiGdx4DJ.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.55 kB 🔴 +4.01 kB
assets/CreditsTile-CddryjFC.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.54 kB 🟢 -4 kB
assets/SubscriptionPanelContentWorkspace-DimqfZAX.js (new) 16.7 kB 🔴 +16.7 kB 🔴 +4.11 kB 🔴 +3.65 kB
assets/WidgetRecordAudio-DnPO_qrK.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.63 kB 🟢 -4.14 kB
assets/WidgetRecordAudio-XrTLvB2O.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.63 kB 🔴 +4.14 kB
assets/WidgetRange-C5Sf2SpW.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.17 kB 🔴 +3.73 kB
assets/WidgetRange-Djkxyxib.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.17 kB 🟢 -3.72 kB
assets/WaveAudioPlayer-DpODd_Yr.js (new) 12.8 kB 🔴 +12.8 kB 🔴 +3.49 kB 🔴 +3.06 kB
assets/WaveAudioPlayer-KGqD4Pll.js (removed) 12.8 kB 🟢 -12.8 kB 🟢 -3.49 kB 🟢 -3.06 kB
assets/WidgetCurve-B0-_nozp.js (new) 11.3 kB 🔴 +11.3 kB 🔴 +3.51 kB 🔴 +3.16 kB
assets/WidgetCurve-DWWZMinl.js (removed) 11.3 kB 🟢 -11.3 kB 🟢 -3.51 kB 🟢 -3.16 kB
assets/TeamWorkspacesDialogContent-B2kAGlx9.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -3 kB 🟢 -2.66 kB
assets/TeamWorkspacesDialogContent-Cpq0NSLm.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +3 kB 🔴 +2.67 kB
assets/Load3DConfiguration-D7zwR8hK.js (removed) 9.02 kB 🟢 -9.02 kB 🟢 -2.67 kB 🟢 -2.35 kB
assets/Load3DConfiguration-Wxvm4abe.js (new) 9.02 kB 🔴 +9.02 kB 🔴 +2.67 kB 🔴 +2.35 kB
assets/onboardingCloudRoutes-BJQrSwv_.js (new) 8.44 kB 🔴 +8.44 kB 🔴 +2.63 kB 🔴 +2.26 kB
assets/onboardingCloudRoutes-Ck-QnppC.js (removed) 8.44 kB 🟢 -8.44 kB 🟢 -2.63 kB 🟢 -2.27 kB
assets/nodeTemplates-C9P0AOk0.js (new) 8.33 kB 🔴 +8.33 kB 🔴 +2.88 kB 🔴 +2.54 kB
assets/nodeTemplates-DhxjVj3k.js (removed) 8.33 kB 🟢 -8.33 kB 🟢 -2.88 kB 🟢 -2.53 kB
assets/NightlySurveyController-BhHnoLOH.js (removed) 7.56 kB 🟢 -7.56 kB 🟢 -2.59 kB 🟢 -2.3 kB
assets/NightlySurveyController-DnIdQ1ro.js (new) 7.56 kB 🔴 +7.56 kB 🔴 +2.59 kB 🔴 +2.3 kB
assets/InviteMemberDialogContent-BlZOQLqv.js (new) 6.76 kB 🔴 +6.76 kB 🔴 +2.23 kB 🔴 +1.96 kB
assets/InviteMemberDialogContent-CQ6qfsfc.js (removed) 6.76 kB 🟢 -6.76 kB 🟢 -2.23 kB 🟢 -1.96 kB
assets/WidgetWithControl-Bbh-CQ2S.js (removed) 6.36 kB 🟢 -6.36 kB 🟢 -2.58 kB 🟢 -2.27 kB
assets/WidgetWithControl-DkOYWw6p.js (new) 6.36 kB 🔴 +6.36 kB 🔴 +2.58 kB 🔴 +2.29 kB
assets/tierBenefits-BWGSNfbR.js (removed) 6.02 kB 🟢 -6.02 kB 🟢 -1.93 kB 🟢 -1.67 kB
assets/load3dPreviewExtensions-BVmXhmnT.js (new) 5.95 kB 🔴 +5.95 kB 🔴 +1.85 kB 🔴 +1.64 kB
assets/load3dPreviewExtensions-nb1w1WBk.js (removed) 5.95 kB 🟢 -5.95 kB 🟢 -1.85 kB 🟢 -1.64 kB
assets/CancelSubscriptionDialogContent-ChNiBwpW.js (removed) 5.76 kB 🟢 -5.76 kB 🟢 -1.97 kB 🟢 -1.73 kB
assets/CancelSubscriptionDialogContent-CKCSl6m-.js (new) 5.76 kB 🔴 +5.76 kB 🔴 +1.97 kB 🔴 +1.73 kB
assets/FreeTierDialogContent-aWGnUvLH.js (new) 5.25 kB 🔴 +5.25 kB 🔴 +1.76 kB 🔴 +1.55 kB
assets/FreeTierDialogContent-BHKijUBo.js (removed) 5.25 kB 🟢 -5.25 kB 🟢 -1.76 kB 🟢 -1.55 kB
assets/CreateWorkspaceDialogContent-D-TJfCY0.js (new) 5.19 kB 🔴 +5.19 kB 🔴 +1.83 kB 🔴 +1.58 kB
assets/CreateWorkspaceDialogContent-DHeon8A0.js (removed) 5.19 kB 🟢 -5.19 kB 🟢 -1.83 kB 🟢 -1.58 kB
assets/ChangeMemberRoleDialogContent-BmZQYQmW.js (removed) 5.04 kB 🟢 -5.04 kB 🟢 -1.67 kB 🟢 -1.46 kB
assets/ChangeMemberRoleDialogContent-KqFODdS7.js (new) 5.04 kB 🔴 +5.04 kB 🔴 +1.67 kB 🔴 +1.46 kB
assets/missingModelDownload-873WxKx5.js (new) 5.04 kB 🔴 +5.04 kB 🔴 +1.96 kB 🔴 +1.71 kB
assets/missingModelDownload-yTzXT0uR.js (removed) 5.04 kB 🟢 -5.04 kB 🟢 -1.95 kB 🟢 -1.7 kB
assets/EditWorkspaceDialogContent-AByGMHfL.js (new) 5 kB 🔴 +5 kB 🔴 +1.79 kB 🔴 +1.55 kB
assets/EditWorkspaceDialogContent-vy3SimWH.js (removed) 5 kB 🟢 -5 kB 🟢 -1.79 kB 🟢 -1.55 kB
assets/WidgetTextarea-B6g2qjZZ.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.91 kB 🔴 +1.66 kB
assets/WidgetTextarea-pYis9JKU.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.91 kB 🟢 -1.66 kB
assets/saveMesh-BNlxNxMu.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.55 kB 🔴 +1.38 kB
assets/saveMesh-BR_sXK9n.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.56 kB 🟢 -1.38 kB
assets/ValueControlPopover-cK764Jev.js (new) 4.55 kB 🔴 +4.55 kB 🔴 +1.59 kB 🔴 +1.42 kB
assets/ValueControlPopover-obXglOB-.js (removed) 4.55 kB 🟢 -4.55 kB 🟢 -1.58 kB 🟢 -1.42 kB
assets/DeleteWorkspaceDialogContent-BlNBYEWx.js (removed) 3.91 kB 🟢 -3.91 kB 🟢 -1.47 kB 🟢 -1.27 kB
assets/DeleteWorkspaceDialogContent-CCWamaDc.js (new) 3.91 kB 🔴 +3.91 kB 🔴 +1.47 kB 🔴 +1.27 kB
assets/LeaveWorkspaceDialogContent-dZst7Kmj.js (removed) 3.73 kB 🟢 -3.73 kB 🟢 -1.41 kB 🟢 -1.22 kB
assets/LeaveWorkspaceDialogContent-R8o9x5Za.js (new) 3.73 kB 🔴 +3.73 kB 🔴 +1.41 kB 🔴 +1.22 kB
assets/RemoveMemberDialogContent-DT2uRPra.js (new) 3.71 kB 🔴 +3.71 kB 🔴 +1.37 kB 🔴 +1.18 kB
assets/RemoveMemberDialogContent-NPTP6IFu.js (removed) 3.71 kB 🟢 -3.71 kB 🟢 -1.37 kB 🟢 -1.18 kB
assets/RevokeInviteDialogContent-CBB0Mtac.js (new) 3.63 kB 🔴 +3.63 kB 🔴 +1.38 kB 🔴 +1.2 kB
assets/RevokeInviteDialogContent-DmBe6_q7.js (removed) 3.63 kB 🟢 -3.63 kB 🟢 -1.38 kB 🟢 -1.2 kB
assets/InviteMemberUpsellDialogContent-C4LoPAMx.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.27 kB 🔴 +1.1 kB
assets/InviteMemberUpsellDialogContent-D5BFycky.js (removed) 3.52 kB 🟢 -3.52 kB 🟢 -1.26 kB 🟢 -1.12 kB
assets/workspaceCheckoutTelemetry-DJM0JCGh.js (new) 3.47 kB 🔴 +3.47 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/workspaceCheckoutTelemetry-Gf0xlEYd.js (removed) 3.47 kB 🟢 -3.47 kB 🟢 -1.56 kB 🟢 -1.36 kB
assets/Media3DTop-BSf-hBLK.js (new) 3.26 kB 🔴 +3.26 kB 🔴 +1.3 kB 🔴 +1.13 kB
assets/Media3DTop-D5mmX27U.js (removed) 3.26 kB 🟢 -3.26 kB 🟢 -1.3 kB 🟢 -1.13 kB
assets/GlobalToast-CKBWfIIC.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.26 kB 🔴 +1.09 kB
assets/GlobalToast-D9FF6Kon.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.26 kB 🟢 -1.08 kB
assets/load3dAdvanced-C12mQhfL.js (removed) 2.87 kB 🟢 -2.87 kB 🟢 -1.13 kB 🟢 -987 B
assets/load3dAdvanced-CL0r0Edh.js (new) 2.87 kB 🔴 +2.87 kB 🔴 +1.13 kB 🔴 +979 B
assets/SubscribeToRun-B19J_rov.js (new) 2.45 kB 🔴 +2.45 kB 🔴 +1.07 kB 🔴 +933 B
assets/SubscribeToRun-BMTQ2SIV.js (removed) 2.45 kB 🟢 -2.45 kB 🟢 -1.07 kB 🟢 -933 B
assets/graphHasMissingNodes-DqxVJ831.js (new) 1.93 kB 🔴 +1.93 kB 🔴 +907 B 🔴 +794 B
assets/graphHasMissingNodes-Ydn636bR.js (removed) 1.93 kB 🟢 -1.93 kB 🟢 -905 B 🟢 -787 B
assets/MediaAudioTop-BapVLFdP.js (new) 1.67 kB 🔴 +1.67 kB 🔴 +835 B 🔴 +699 B
assets/MediaAudioTop-C1s1BUFJ.js (removed) 1.67 kB 🟢 -1.67 kB 🟢 -837 B 🟢 -695 B
assets/tierBenefits-CxvHmqYV.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +495 B 🔴 +444 B
assets/CloudRunButtonWrapper-CqZLyodd.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -551 B 🟢 -488 B
assets/CloudRunButtonWrapper-uzJEdYQY.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +549 B 🔴 +511 B
assets/cloudSessionCookie-BKnk9iB5.js (new) 991 B 🔴 +991 B 🔴 +467 B 🔴 +400 B
assets/cloudSessionCookie-BY5dAZfN.js (removed) 991 B 🟢 -991 B 🟢 -468 B 🟢 -413 B
assets/cloudBadges-BGjqN57a.js (new) 973 B 🔴 +973 B 🔴 +550 B 🔴 +469 B
assets/cloudBadges-CKwNm7sD.js (removed) 973 B 🟢 -973 B 🟢 -549 B 🟢 -467 B
assets/Load3DAdvanced-3O_Q6gA1.js (new) 813 B 🔴 +813 B 🔴 +453 B 🔴 +407 B
assets/Load3DAdvanced-BQxRYRlG.js (removed) 813 B 🟢 -813 B 🟢 -453 B 🟢 -401 B
assets/nightlyBadges-aVs4zZjQ.js (new) 464 B 🔴 +464 B 🔴 +307 B 🔴 +254 B
assets/nightlyBadges-DnadzXV6.js (removed) 464 B 🟢 -464 B 🟢 -306 B 🟢 -256 B
assets/missingModelDownload-BijLI3-P.js (removed) 228 B 🟢 -228 B 🟢 -150 B 🟢 -128 B
assets/missingModelDownload-XUWHCbYe.js (new) 228 B 🔴 +228 B 🔴 +151 B 🔴 +130 B
assets/SubscriptionPanelContentWorkspace-BxmpfjIW.js (removed) 179 B 🟢 -179 B 🟢 -117 B 🟢 -108 B
assets/SubscriptionPanelContentWorkspace-qslZcznJ.js (new) 179 B 🔴 +179 B 🔴 +117 B 🔴 +91 B
assets/Load3dViewerContent-ChTXerUE.js (removed) 137 B 🟢 -137 B 🟢 -103 B 🟢 -92 B
assets/Load3dViewerContent-DfLqON-H.js (new) 137 B 🔴 +137 B 🔴 +103 B 🔴 +90 B
assets/Load3DAdvanced-C_QvHLAt.js (removed) 122 B 🟢 -122 B 🟢 -97 B 🟢 -89 B
assets/Load3DAdvanced-CmS1RvX-.js (new) 122 B 🔴 +122 B 🔴 +97 B 🔴 +84 B
assets/WidgetLegacy-C0NnBgG8.js (new) 119 B 🔴 +119 B 🔴 +108 B 🔴 +93 B
assets/WidgetLegacy-D_0UfLev.js (removed) 119 B 🟢 -119 B 🟢 -108 B 🟢 -94 B
assets/workflowDraftStoreV2-DUtCwOBv.js (new) 113 B 🔴 +113 B 🔴 +105 B 🔴 +116 B
assets/workflowDraftStoreV2-DX_yNfBk.js (removed) 113 B 🟢 -113 B 🟢 -105 B 🟢 -114 B
assets/Load3D-CorjgNPe.js (new) 98 B 🔴 +98 B 🔴 +89 B 🔴 +86 B
assets/Load3D-hnZSfdmX.js (removed) 98 B 🟢 -98 B 🟢 -89 B 🟢 -88 B
assets/changeTracker-Bvu5fLLE.js (removed) 93 B 🟢 -93 B 🟢 -95 B 🟢 -92 B
assets/changeTracker-CmU39CPs.js (new) 93 B 🔴 +93 B 🔴 +95 B 🔴 +81 B

Status: 66 added / 66 removed / 97 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.1 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 47.7 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.8 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.5 MB heap
large-graph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.3 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.0 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.5 MB heap
minimap-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 63.7 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.0 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 45.3 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.3 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 113ms TBT · 93.2 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 73.0 MB heap
vue-large-graph-idle: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 163.6 MB heap
vue-large-graph-pan: · 58.1 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 37ms TBT · 155.5 MB heap
workflow-execution: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.3 MB heap

⚠️ 3 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 435ms 535ms +23% ⚠️ z=4.5
canvas-mouse-sweep: layout duration 4ms 4ms +6% ⚠️ z=2.3
subgraph-idle: task duration 392ms 447ms +14% ⚠️ z=2.5
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=0.4
canvas-idle: p95 frame time 17ms 17ms -0%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 8ms 9ms +5% z=-2.5
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 10 -5% z=-2.9
canvas-idle: task duration 435ms 535ms +23% ⚠️ z=4.5
canvas-idle: script duration 18ms 26ms +45% z=0.5
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 69.3 MB 45.1 MB -35%
canvas-idle: DOM nodes 14 -123 -979% z=-114.1
canvas-idle: event listeners 4 -64 -1688% z=-15.9
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-0.4
canvas-mouse-sweep: p95 frame time 17ms 17ms -1%
canvas-mouse-sweep: layout duration 4ms 4ms +6% ⚠️ z=2.3
canvas-mouse-sweep: style recalc duration 39ms 42ms +6% z=-0.3
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 73 75 +2% z=-1.8
canvas-mouse-sweep: task duration 802ms 813ms +1% z=-0.9
canvas-mouse-sweep: script duration 122ms 117ms -5% z=-2.9
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 49.9 MB 47.7 MB -4%
canvas-mouse-sweep: DOM nodes -265 -103 -61% z=-63.9
canvas-mouse-sweep: event listeners -133 -65 -52% z=-17.5
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 1ms 1ms +5% z=1.2
canvas-zoom-sweep: style recalc duration 17ms 16ms -7% z=-2.0
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 32 31 -3% z=-0.6
canvas-zoom-sweep: task duration 304ms 302ms -1% z=-1.1
canvas-zoom-sweep: script duration 17ms 18ms +9% z=-2.9
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 72.9 MB 72.8 MB -0%
canvas-zoom-sweep: DOM nodes 79 77 -3% z=-2.8
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 9ms 8ms -12% z=-1.9
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 13 12 -12% z=-3.2
dom-widget-clipping: task duration 341ms 343ms +0% z=-1.3
dom-widget-clipping: script duration 56ms 54ms -4% z=-4.4
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 54.6 MB 54.5 MB -0%
dom-widget-clipping: DOM nodes 22 19 -14% z=-2.2
dom-widget-clipping: event listeners 2 1 -50% 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 9ms 9ms -7% z=-3.4
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 9 10 +6% z=-6.7
large-graph-idle: task duration 532ms 593ms +12% z=0.9
large-graph-idle: script duration 92ms 91ms -1% z=-1.1
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 62.3 MB 62.3 MB -0%
large-graph-idle: DOM nodes -265 -268 +1% z=-323.3
large-graph-idle: event listeners -129 -128 -1% z=-25.3
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
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.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 1090ms 1089ms -0% z=0.2
large-graph-pan: script duration 387ms 393ms +1% z=-0.8
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 54.0 MB 54.0 MB +0%
large-graph-pan: DOM nodes -269 -271 +1% z=-175.5
large-graph-pan: event listeners -129 -128 -1% z=-160.5
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 +0%
large-graph-zoom: task duration 1340ms 1287ms -4%
large-graph-zoom: script duration 481ms 465ms -3%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 53.6 MB 52.5 MB -2%
large-graph-zoom: DOM nodes -273 -130 -53%
large-graph-zoom: event listeners -133 -133 +0%
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 8ms 8ms -5% z=-2.0
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 9 10 +11% z=0.6
minimap-idle: task duration 559ms 535ms -4% z=0.2
minimap-idle: script duration 97ms 84ms -13% z=-1.4
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 63.6 MB 63.7 MB +0%
minimap-idle: DOM nodes -267 -268 +0% z=-209.6
minimap-idle: event listeners -129 -128 -1% z=-200.8
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
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 11ms 12ms +8% z=-1.1
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 48 +2% z=0.1
subgraph-dom-widget-clipping: task duration 358ms 368ms +3% z=-0.6
subgraph-dom-widget-clipping: script duration 118ms 123ms +4% z=-0.8
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 54.9 MB 55.0 MB +0%
subgraph-dom-widget-clipping: DOM nodes 20 22 +10% z=-0.2
subgraph-dom-widget-clipping: event listeners 6 6 +0% z=-1.7
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 9ms 10ms +5% z=-0.8
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 9 11 +22% z=0.2
subgraph-idle: task duration 392ms 447ms +14% ⚠️ z=2.5
subgraph-idle: script duration 13ms 18ms +44% z=-0.7
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 45.4 MB 45.3 MB -0%
subgraph-idle: DOM nodes -266 -264 -1% z=-191.2
subgraph-idle: event listeners -133 -133 +0% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.4
subgraph-mouse-sweep: p95 frame time 17ms 17ms -0%
subgraph-mouse-sweep: layout duration 4ms 4ms +9% z=-1.2
subgraph-mouse-sweep: style recalc duration 37ms 35ms -6% z=-2.3
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 75 -1% z=-2.7
subgraph-mouse-sweep: task duration 708ms 676ms -5% z=-1.3
subgraph-mouse-sweep: script duration 89ms 86ms -3% z=-2.2
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 47.5 MB 54.3 MB +14%
subgraph-mouse-sweep: DOM nodes -263 -102 -61% z=-75.4
subgraph-mouse-sweep: event listeners -133 -65 -52% 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 15ms 11ms -23%
subgraph-transition-enter: style recalc duration 33ms 29ms -12%
subgraph-transition-enter: layout count 15 14 -7%
subgraph-transition-enter: style recalc count 19 18 -5%
subgraph-transition-enter: task duration 843ms 729ms -13%
subgraph-transition-enter: script duration 37ms 29ms -22%
subgraph-transition-enter: TBT 148ms 113ms -24%
subgraph-transition-enter: heap used 81.9 MB 93.2 MB +14%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2371 2369 -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 41ms +10%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 -0%
viewport-pan-sweep: task duration 3758ms 3583ms -5%
viewport-pan-sweep: script duration 1228ms 1146ms -7%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 70.4 MB 73.0 MB +4%
viewport-pan-sweep: DOM nodes -267 -266 -1%
viewport-pan-sweep: event listeners -115 -113 -2%
vue-large-graph-idle: avg frame time 17ms 17ms -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 12728ms 13310ms +5%
vue-large-graph-idle: script duration 533ms 544ms +2%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 163.2 MB 163.6 MB +0%
vue-large-graph-idle: DOM nodes -8311 -8311 +0%
vue-large-graph-idle: event listeners -16384 -16387 +0%
vue-large-graph-pan: avg frame time 17ms 17ms +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 12ms 15ms +23%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 77 84 +9%
vue-large-graph-pan: task duration 15448ms 16149ms +5%
vue-large-graph-pan: script duration 860ms 824ms -4%
vue-large-graph-pan: TBT 55ms 37ms -33%
vue-large-graph-pan: heap used 169.2 MB 155.5 MB -8%
vue-large-graph-pan: DOM nodes -8311 -8311 +0%
vue-large-graph-pan: event listeners -16382 -16381 -0%
workflow-execution: avg frame time 17ms 17ms +0% z=1.1
workflow-execution: p95 frame time 17ms 17ms -0%
workflow-execution: layout duration 0ms 1ms +132% z=-4.3
workflow-execution: style recalc duration 21ms 22ms +5% z=-1.2
workflow-execution: layout count 2 3 +50% z=-3.6
workflow-execution: style recalc count 14 15 +7% z=-1.4
workflow-execution: task duration 120ms 116ms -4% z=-0.7
workflow-execution: script duration 10ms 10ms -0% z=-6.4
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 49.3 MB 49.3 MB -0%
workflow-execution: DOM nodes 121 125 +3% z=-5.1
workflow-execution: event listeners 65 66 +2% z=3.2
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-07-17T22:05:41.788Z",
  "gitSha": "e20e71c75b71a18a71495340afa75b037bcb1311",
  "branch": "glary/rename-is-active-subscription",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2161.6020000000162,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 9.123000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 618.104,
      "heapDeltaBytes": -22896788,
      "heapUsedBytes": 45958728,
      "domNodes": 20,
      "jsHeapTotalBytes": 19542016,
      "scriptDurationMs": 31.861,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-idle",
      "durationMs": 2014.6560000000022,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.072,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 452.046,
      "heapDeltaBytes": -20241940,
      "heapUsedBytes": 48534992,
      "domNodes": -266,
      "jsHeapTotalBytes": 19279872,
      "scriptDurationMs": 20.959000000000003,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1825.0129999999842,
      "styleRecalcs": 72,
      "styleRecalcDurationMs": 42.751,
      "layouts": 12,
      "layoutDurationMs": 3.4379999999999997,
      "taskDurationMs": 795.786,
      "heapDeltaBytes": -14456596,
      "heapUsedBytes": 54254952,
      "domNodes": -264,
      "jsHeapTotalBytes": 20852736,
      "scriptDurationMs": 113.80200000000002,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1824.3559999999661,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 40.466,
      "layouts": 12,
      "layoutDurationMs": 4.674,
      "taskDurationMs": 830.4469999999999,
      "heapDeltaBytes": -22959448,
      "heapUsedBytes": 45861920,
      "domNodes": 58,
      "jsHeapTotalBytes": 19542016,
      "scriptDurationMs": 119.279,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1710.8159999999657,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 15.491999999999999,
      "layouts": 6,
      "layoutDurationMs": 0.6589999999999998,
      "taskDurationMs": 295.13900000000007,
      "heapDeltaBytes": 7546944,
      "heapUsedBytes": 76437596,
      "domNodes": 77,
      "jsHeapTotalBytes": 19152896,
      "scriptDurationMs": 17.565,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1724.6300000000474,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 16.508000000000003,
      "layouts": 6,
      "layoutDurationMs": 0.7329999999999999,
      "taskDurationMs": 309.183,
      "heapDeltaBytes": 7406880,
      "heapUsedBytes": 76157104,
      "domNodes": 77,
      "jsHeapTotalBytes": 19939328,
      "scriptDurationMs": 19.168999999999997,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 559.8480000000166,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 8.677999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 335.818,
      "heapDeltaBytes": -11809712,
      "heapUsedBytes": 57107208,
      "domNodes": 20,
      "jsHeapTotalBytes": 20201472,
      "scriptDurationMs": 53.18600000000001,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 561.8529999999851,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.014000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 349.65999999999997,
      "heapDeltaBytes": -11623944,
      "heapUsedBytes": 57241684,
      "domNodes": 18,
      "jsHeapTotalBytes": 19677184,
      "scriptDurationMs": 54.056,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2013.5310000000004,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.437,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 656.4870000000001,
      "heapDeltaBytes": 4882328,
      "heapUsedBytes": 64121704,
      "domNodes": -269,
      "jsHeapTotalBytes": 4407296,
      "scriptDurationMs": 101.73000000000002,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2040.300000000002,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.818000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 530.1560000000001,
      "heapDeltaBytes": 5793928,
      "heapUsedBytes": 66596888,
      "domNodes": -266,
      "jsHeapTotalBytes": 4669440,
      "scriptDurationMs": 80.35000000000001,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2142.9129999999645,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 15.355999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1104.145,
      "heapDeltaBytes": -4770620,
      "heapUsedBytes": 55836560,
      "domNodes": -268,
      "jsHeapTotalBytes": 5455872,
      "scriptDurationMs": 385.35999999999996,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2140.529000000015,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 12.822000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1074.7179999999998,
      "heapDeltaBytes": -3509900,
      "heapUsedBytes": 57361932,
      "domNodes": -273,
      "jsHeapTotalBytes": 5980160,
      "scriptDurationMs": 400.081,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3151.666999999975,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 15.69,
      "layouts": 60,
      "layoutDurationMs": 8.122,
      "taskDurationMs": 1284.069,
      "heapDeltaBytes": -5003696,
      "heapUsedBytes": 56650628,
      "domNodes": -269,
      "jsHeapTotalBytes": 8077312,
      "scriptDurationMs": 466.94800000000004,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3119.098000000008,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 14.036999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.8999999999999995,
      "taskDurationMs": 1290.0320000000002,
      "heapDeltaBytes": -8235288,
      "heapUsedBytes": 53532068,
      "domNodes": 10,
      "jsHeapTotalBytes": 7815168,
      "scriptDurationMs": 463.575,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2009.7670000000107,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.912000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 533.15,
      "heapDeltaBytes": 5017824,
      "heapUsedBytes": 66936476,
      "domNodes": -267,
      "jsHeapTotalBytes": 4931584,
      "scriptDurationMs": 84.598,
      "eventListeners": -127,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2037.9830000000538,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 7.979,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 537.4559999999999,
      "heapDeltaBytes": 5584572,
      "heapUsedBytes": 66621040,
      "domNodes": -268,
      "jsHeapTotalBytes": 4931584,
      "scriptDurationMs": 83.68,
      "eventListeners": -129,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 555.4199999999696,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 11.409,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 355.281,
      "heapDeltaBytes": -11096812,
      "heapUsedBytes": 57787384,
      "domNodes": 22,
      "jsHeapTotalBytes": 20201472,
      "scriptDurationMs": 118.981,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 585.837999999967,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 11.977,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 380.06600000000003,
      "heapDeltaBytes": -11473256,
      "heapUsedBytes": 57526380,
      "domNodes": 22,
      "jsHeapTotalBytes": 20987904,
      "scriptDurationMs": 127.37600000000002,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2046.3469999999973,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.72,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 452.6910000000001,
      "heapDeltaBytes": -20581700,
      "heapUsedBytes": 48381668,
      "domNodes": -263,
      "jsHeapTotalBytes": 19804160,
      "scriptDurationMs": 17.476,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2054.463999999996,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.876000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 441.40500000000003,
      "heapDeltaBytes": -22486276,
      "heapUsedBytes": 46546580,
      "domNodes": -265,
      "jsHeapTotalBytes": 19279872,
      "scriptDurationMs": 19.391,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1693.394000000012,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 35.284,
      "layouts": 16,
      "layoutDurationMs": 4.432,
      "taskDurationMs": 712.581,
      "heapDeltaBytes": -19213788,
      "heapUsedBytes": 49970336,
      "domNodes": -265,
      "jsHeapTotalBytes": 19542016,
      "scriptDurationMs": 89.42699999999999,
      "eventListeners": -133,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1713.2139999999936,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 34.217,
      "layouts": 16,
      "layoutDurationMs": 4.222,
      "taskDurationMs": 639.096,
      "heapDeltaBytes": -5238372,
      "heapUsedBytes": 63828916,
      "domNodes": 62,
      "jsHeapTotalBytes": 19939328,
      "scriptDurationMs": 82.959,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 933.2160000000158,
      "styleRecalcs": 18,
      "styleRecalcDurationMs": 28.821000000000012,
      "layouts": 14,
      "layoutDurationMs": 11.397999999999998,
      "taskDurationMs": 729.4490000000002,
      "heapDeltaBytes": 29060008,
      "heapUsedBytes": 97764600,
      "domNodes": 13673,
      "jsHeapTotalBytes": 13107200,
      "scriptDurationMs": 28.735999999999997,
      "eventListeners": 2369,
      "totalBlockingTimeMs": 113,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8184.225000000026,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 40.903,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3578.6230000000005,
      "heapDeltaBytes": 15522220,
      "heapUsedBytes": 74948936,
      "domNodes": -266,
      "jsHeapTotalBytes": 6709248,
      "scriptDurationMs": 1148.29,
      "eventListeners": -113,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8163.210999999933,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 41.508,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 3587.404,
      "heapDeltaBytes": 17278316,
      "heapUsedBytes": 78144152,
      "domNodes": -265,
      "jsHeapTotalBytes": 6709248,
      "scriptDurationMs": 1143.0249999999999,
      "eventListeners": -113,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13357.966000000033,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13336.645,
      "heapDeltaBytes": -40465636,
      "heapUsedBytes": 170671264,
      "domNodes": -8311,
      "jsHeapTotalBytes": -7540736,
      "scriptDurationMs": 564.773,
      "eventListeners": -16386,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333358,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 13300.19200000004,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 13283.967,
      "heapDeltaBytes": -37996204,
      "heapUsedBytes": 172401860,
      "domNodes": -8311,
      "jsHeapTotalBytes": -4919296,
      "scriptDurationMs": 523.722,
      "eventListeners": -16388,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.223333333333237,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16152.250000000038,
      "styleRecalcs": 84,
      "styleRecalcDurationMs": 13.659000000000033,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16113.952000000001,
      "heapDeltaBytes": -40166972,
      "heapUsedBytes": 169671248,
      "domNodes": -8311,
      "jsHeapTotalBytes": -7540736,
      "scriptDurationMs": 843.049,
      "eventListeners": -16379,
      "totalBlockingTimeMs": 37,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 16207.90599999998,
      "styleRecalcs": 84,
      "styleRecalcDurationMs": 15.573999999999977,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16184.255000000001,
      "heapDeltaBytes": -68099376,
      "heapUsedBytes": 156407008,
      "domNodes": -8311,
      "jsHeapTotalBytes": -14618624,
      "scriptDurationMs": 804.0319999999999,
      "eventListeners": -16382,
      "totalBlockingTimeMs": 37,
      "frameDurationMs": 17.219999999999953,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "workflow-execution",
      "durationMs": 450.6629999999632,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 20.925,
      "layouts": 2,
      "layoutDurationMs": 0.446,
      "taskDurationMs": 114.56799999999998,
      "heapDeltaBytes": -16423932,
      "heapUsedBytes": 51655656,
      "domNodes": 132,
      "jsHeapTotalBytes": 7094272,
      "scriptDurationMs": 10.012999999999998,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 459.4369999999799,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 22.301000000000002,
      "layouts": 4,
      "layoutDurationMs": 1.403,
      "taskDurationMs": 116.721,
      "heapDeltaBytes": -16338392,
      "heapUsedBytes": 51656060,
      "domNodes": 117,
      "jsHeapTotalBytes": 6832128,
      "scriptDurationMs": 10.22,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

Base automatically changed from glary/fix-fe-219-credits-local to main April 20, 2026 20:30
@christian-byrne
christian-byrne force-pushed the glary/rename-is-active-subscription branch from f97a432 to aa548ff Compare May 3, 2026 08:16
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 3, 2026
@christian-byrne
christian-byrne requested review from pythongosssss and removed request for pythongosssss May 3, 2026 08:24
@christian-byrne
christian-byrne marked this pull request as ready for review May 4, 2026 21:38
@christian-byrne
christian-byrne requested a review from a team May 4, 2026 21:38
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label May 4, 2026
@jtydhr88

jtydhr88 commented May 5, 2026

Copy link
Copy Markdown
Collaborator

there is conflict, please fix

coderabbitai[bot]
coderabbitai Bot previously approved these changes May 11, 2026

@christian-byrne christian-byrne left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Code Review

Overall: Clean refactoring that improves naming clarity. The rename from isActiveSubscription to canAccessSubscriptionFeatures better communicates the semantic meaning - this flag represents whether a user has access to subscription-gated features, not just whether a subscription exists.

Positives

  • Consistent rename across all 35+ files
  • Tests updated appropriately to reflect new naming
  • Type interface in composables/billing/types.ts properly updated
  • No functional logic changes, purely a naming refactor

Minor Observations

  1. Component prop consistency - In MemberUpsellBanner.vue, the prop is renamed to canAccessSubscriptionFeatures which maintains consistency with the composable API. Good.

  2. Computed property derivation - In useLegacyBilling.ts:42-44, the computed wraps the value from useSubscription():

    const canAccessSubscriptionFeatures = computed(
      () => legacyCanAccessSubscriptionFeatures.value
    )

    This is necessary for the reactive wrapper, though it could theoretically use toRef - current approach is fine.

  3. Test mock updates - All hoisted mocks in test files properly renamed (e.g., mockCanAccessSubscriptionFeatures). Good attention to detail.

Questions for the Author

  1. Is there documentation (e.g., in docs.comfy.org or internal docs) that references isActiveSubscription which should also be updated?

  2. The name change is more descriptive but also longer - was there consideration of alternatives like hasSubscriptionAccess or isSubscribed?

Verdict

Approve - This is a straightforward, well-executed naming refactor that improves code clarity without changing behavior. All quality gates pass.

@christian-byrne christian-byrne left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We need 65%+ unit test code coverage to make the codecov CI check pass.

christian-byrne added a commit that referenced this pull request May 14, 2026
christian-byrne added a commit that referenced this pull request May 14, 2026
@christian-byrne

Copy link
Copy Markdown
Contributor Author

Addressing the self-review questions:

1. Documentation references to isActiveSubscription:
This is an internal composable API, not documented externally. No external docs reference this name.

2. Naming alternatives consideration:
canAccessSubscriptionFeatures was chosen because it accurately describes the semantic meaning - the flag returns true when the user CAN access subscription features, regardless of whether they actually have an active subscription (it's also true for non-cloud builds and when subscription_required is false). Alternatives like hasSubscriptionAccess or isSubscribed would have been misleading for the same reasons the original isActiveSubscription was problematic.

3. Coverage requirement (65%+):
Addressed by adding 63 new tests across 2 test files:

  • bd49a23: unit tests for useLegacyBilling composable
  • 36841d6: unit tests for nodeDefSchema

coderabbitai[bot]
coderabbitai Bot previously approved these changes May 14, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 14, 2026
christian-byrne added a commit that referenced this pull request May 14, 2026
christian-byrne added a commit that referenced this pull request May 14, 2026
christian-byrne added a commit that referenced this pull request May 14, 2026
@christian-byrne
christian-byrne force-pushed the glary/rename-is-active-subscription branch from 1868d66 to 0a06cca Compare May 14, 2026 22:35
pythongosssss
pythongosssss previously approved these changes May 19, 2026

@pythongosssss pythongosssss left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, although the nodeDef tests look like they could be moved to their own PR

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown

✅ All contributors have signed the CLA. Thank you! This PR is ready to be merged.
Posted by the CLA Assistant Lite bot.

@christian-byrne
christian-byrne force-pushed the glary/rename-is-active-subscription branch from fa1f336 to 22ec131 Compare June 25, 2026 20:26
@christian-byrne
christian-byrne force-pushed the glary/rename-is-active-subscription branch from a794625 to 8dfb024 Compare June 30, 2026 03:33
@pythongosssss pythongosssss removed their assignment Jul 10, 2026
The name isActiveSubscription was misleading: it's defined as
  !isCloud || !subscription_required || subscription.is_active
so it returns true on non-cloud builds and when subscription is not
required, regardless of actual subscription state. The new name
canAccessSubscriptionFeatures reads correctly at every call site:
'if can access features, show UI / allow action'.

Pure identifier rename, no behavioral changes. Also renames the internal
alias isSubscribedOrIsNotCloud to match.
@christian-byrne
christian-byrne force-pushed the glary/rename-is-active-subscription branch from 8dfb024 to cf6f0dd Compare July 17, 2026 21:54
@christian-byrne

Copy link
Copy Markdown
Contributor Author

Rebased onto main and resolved merge conflicts. Summary of what changed during the rebase:

Conflict resolutions (15 files):

  • Files that gated on canRunWorkflows (introduced on main after this PR) kept canRunWorkflowsCloudRunButtonWrapper.vue, CloudRunButtonWrapper.test.ts, LinearControls.vue
  • All other conflicts took the PR's canAccessSubscriptionFeatures rename
  • useBillingContext.ts now exports all three: isActiveSubscription (deprecated alias = canAccessSubscriptionFeatures), canRunWorkflows, and canAccessSubscriptionFeatures

Post-rebase type fixes:

  • SubscriptionPanel.vue: removed unused helper functions (handleInvoiceHistory, handleOpenPartnerNodesInfo) that the conflict resolver over-adopted from the PR's original commit
  • useSubscription.test.ts, useWorkspaceBilling.test.ts: updated test assertions from isActiveSubscription to canAccessSubscriptionFeatures
  • CurrentUserPopoverWorkspace.vue: reverted invalid variant="gradient"variant="subscribe" (gradient not in Button variant union)
  • SubscriptionPanelContentWorkspace.vue: removed benefit.type === 'icon' branch (not in BenefitType union); changed members benefit to type: 'feature'

All quality gates pass: typecheck ✅, lint ✅, format ✅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants