Skip to content

Comments

Add CI validation for OSS assets (fonts and licenses)#8828

Merged
christian-byrne merged 10 commits intomainfrom
feat/oss-assets-validation
Feb 23, 2026
Merged

Add CI validation for OSS assets (fonts and licenses)#8828
christian-byrne merged 10 commits intomainfrom
feat/oss-assets-validation

Conversation

@snomiao
Copy link
Member

@snomiao snomiao commented Feb 12, 2026

Summary

Adds CI workflow to validate OSS build compliance by checking for proprietary fonts and non-approved dependency licenses.

Context

Implementation

Font Validation

  • Scans dist/ for proprietary ABCROM fonts (.woff, .woff2, .ttf, .otf)
  • Fails if any ABCROM fonts found in OSS builds
  • Provides clear fix instructions

License Validation

  • Uses license-checker npm package
  • Validates all production dependencies
  • Only allows OSI-approved licenses:
    • MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC
    • 0BSD, BlueOak-1.0.0, Python-2.0, CC0-1.0
    • Unlicense, CC-BY-4.0, CC-BY-3.0
    • Common dual-license combinations

Workflow Details

  • Two separate jobs for parallel execution
  • Runs on PRs and pushes to main/dev
  • Builds with DISTRIBUTION=localhost for OSS mode
  • Clear error messages with remediation steps

Testing

  • Font check passes on current main (no ABCROM fonts in dist)
  • License check passes on current main (all approved licenses)
  • Intentional violation testing

Related

Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com

┆Issue is synchronized with this Notion page by Unito

Copilot AI review requested due to automatic review settings February 12, 2026 06:09
@snomiao snomiao requested a review from a team as a code owner February 12, 2026 06:09
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 12, 2026
@github-actions
Copy link

github-actions bot commented Feb 12, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/22/2026, 05:35:21 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 12, 2026

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 CI workflow that validates builds for proprietary ABCROM fonts and enforces a license allowlist, introduces a Vite/Rollup plugin to exclude ABCROM fonts from non-cloud builds, and updates knip ignore configuration to include the new workflow.

Changes

Cohort / File(s) Summary
CI Validation Workflow
\.github/workflows/ci-oss-assets-validation.yaml
New GitHub Actions workflow with two parallel jobs: validate-fonts (builds with DISTRIBUTION=localhost, ensures dist exists/non-empty, fails if ABCROM font files are present) and validate-licenses (installs deps and runs @onebeyond/license-checker against a strict allowlist).
Build Configuration / Plugin
vite.config.mts
Adds exclude-proprietary-fonts Rollup/Vite plugin that, when DISTRIBUTION !== 'cloud', removes emitted files matching `ABCROM.*.(woff2?
Tooling Configuration
knip.config.ts
Updates the ignore list to include the new workflow file and adjusts an existing ignored entry's formatting/comment.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant GH as GitHub Actions (workflow)
  participant Runner as CI Runner
  participant Setup as Setup (checkout, pnpm, node)
  participant Build as Vite/Rollup build
  participant Dist as Dist filesystem
  participant LicChk as license-checker

  GH->>Runner: trigger workflow
  Runner->>Setup: checkout + pnpm + node setup
  par Validate Fonts
    Setup->>Build: run build (DISTRIBUTION=localhost)
    Build->>Dist: emit bundle files
    Dist->>Runner: scan `dist` for ABCROM fonts
    alt ABCROM found or dist missing
      Runner->>GH: fail job with remediation message
    else
      Runner->>GH: pass font validation
    end
  and Validate Licenses
    Setup->>Runner: install dependencies
    Runner->>LicChk: run license-checker --allowOnly
    alt disallowed licenses found
      LicChk->>GH: non-zero exit -> fail with remediation
    else
      LicChk->>GH: pass license validation
    end
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I chewed through builds by moonlit beams,

snipped ABCROM from our open streams.
Licenses checked, the bundle's neat —
hop, hop, hooray, compliance complete! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding CI validation for OSS assets (fonts and licenses), which aligns with the core content of the changeset.
Description check ✅ Passed The description provides comprehensive details with summary, context, implementation specifics, testing checklist, and related PRs, covering all key aspects beyond the template requirements.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/oss-assets-validation

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions
Copy link

github-actions bot commented Feb 12, 2026

Playwright: ✅ 524 passed, 0 failed · 5 flaky

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

@github-actions
Copy link

github-actions bot commented Feb 12, 2026

📦 Bundle: 4.37 MB gzip 🔴 +1.19 kB

Details

Summary

  • Raw size: 20.5 MB baseline 20.5 MB — 🔴 +1.79 kB
  • Gzip: 4.37 MB baseline 4.37 MB — 🔴 +1.19 kB
  • Brotli: 3.38 MB baseline 3.37 MB — 🔴 +934 B
  • Bundles: 224 current • 223 baseline • 122 added / 121 removed

Category Glance
Other 🔴 +5.41 kB (7.61 MB) · App Entry Points 🟢 -3.62 kB (17.9 kB) · Vendor & Third-Party ⚪ 0 B (8.83 MB) · Data & Services ⚪ 0 B (2.51 MB) · Graph Workspace ⚪ 0 B (942 kB) · Panels & Settings ⚪ 0 B (436 kB) · + 5 more

App Entry Points — 17.9 kB (baseline 21.5 kB) • 🟢 -3.62 kB

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Dm3oEWUG.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -7.03 kB 🟢 -6.11 kB
assets/index-Cw2ymoyW.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.36 kB 🔴 +5.52 kB

Status: 1 added / 1 removed

Graph Workspace — 942 kB (baseline 942 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BYp7yIjU.js (new) 942 kB 🔴 +942 kB 🔴 +202 kB 🔴 +154 kB
assets/GraphView-RnRPqjic.js (removed) 942 kB 🟢 -942 kB 🟢 -202 kB 🟢 -154 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-DDE7ZKU8.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-HNWjBsEy.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.83 kB
assets/CloudLoginView-DKj7-xsv.js (removed) 10 kB 🟢 -10 kB 🟢 -2.93 kB 🟢 -2.57 kB
assets/CloudLoginView-DP7Ar9Tx.js (new) 10 kB 🔴 +10 kB 🔴 +2.93 kB 🔴 +2.58 kB
assets/UserCheckView-CkMQo10w.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/UserCheckView-CY5_B1KJ.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/CloudSignupView-Bb6v2EWl.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.32 kB 🔴 +2.04 kB
assets/CloudSignupView-BDKU_nLT.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.32 kB 🟢 -2.04 kB
assets/CloudLayoutView-Bl3hbJdG.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.84 kB
assets/CloudLayoutView-OnSjM5Dd.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.84 kB
assets/CloudForgotPasswordView-CEQNJiHX.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.94 kB 🔴 +1.71 kB
assets/CloudForgotPasswordView-D9DayUM-.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.93 kB 🟢 -1.71 kB
assets/CloudAuthTimeoutView-bMjfo8sq.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/CloudAuthTimeoutView-CC_PuLet.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CloudSubscriptionRedirectView-DD-PsVLF.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-Dy7xLHrM.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.78 kB 🔴 +1.57 kB
assets/UserSelectView-B0OJqMSL.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.46 kB
assets/UserSelectView-DucBvAVX.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/layout-CmHcUwxS.js (new) 296 B 🔴 +296 B 🔴 +223 B 🔴 +192 B
assets/layout-vBPh8yaQ.js (removed) 296 B 🟢 -296 B 🟢 -225 B 🟢 -193 B
assets/CloudSorryContactSupportView-Bi8IsTTh.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-cjXi6uvo.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.66 kB
assets/SecretsPanel-DmUIzQeY.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.66 kB
assets/LegacyCreditsPanel-Bv0iv67E.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.57 kB 🟢 -4.89 kB
assets/LegacyCreditsPanel-CzZ2tJ9q.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.57 kB 🔴 +4.89 kB
assets/SubscriptionPanel-C9xiNmsN.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.74 kB 🟢 -4.17 kB
assets/SubscriptionPanel-DqAx1MK4.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.73 kB 🔴 +4.17 kB
assets/KeybindingPanel-C97W0NRR.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.57 kB 🟢 -3.17 kB
assets/KeybindingPanel-DZ9LaQnH.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.57 kB 🔴 +3.17 kB
assets/AboutPanel-BKXV6THU.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.47 kB
assets/AboutPanel-WQYqwStB.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.47 kB
assets/ExtensionPanel-B8f6qhi4.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.35 kB
assets/ExtensionPanel-BM-3vUiR.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/ServerConfigPanel-BJHStMqg.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.13 kB 🔴 +1.92 kB
assets/ServerConfigPanel-j80y6b4x.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.13 kB 🟢 -1.92 kB
assets/UserPanel-B2Vf4I0M.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.75 kB
assets/UserPanel-BXpxnPZ7.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/cloudRemoteConfig-BTrs5zvg.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -708 B 🟢 -607 B
assets/cloudRemoteConfig-C312-KTU.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +707 B 🔴 +608 B
assets/refreshRemoteConfig-BHEspQ7f.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -519 B 🟢 -457 B
assets/refreshRemoteConfig-CgJCPt8J.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +464 B
assets/config-QxkqTZy6.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-3cK4vYSX.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AqJa7Oe1.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BOcWl0Qp.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BodhSOuG.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCD8qxmc.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CVDNuOXV.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLodCRRz.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLqeCT09.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DP-OgTXN.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRIXyZ_Z.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-IRk9rDbu.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-CbdHjtcm.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -992 B
assets/auth-DkAMKeJm.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +993 B
assets/SignUpForm-DMwiuxct.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/SignUpForm-Dnj9oMAO.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.11 kB
assets/UpdatePasswordContent-Ch05b4hA.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -947 B
assets/UpdatePasswordContent-DNOZgJue.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +945 B
assets/WorkspaceProfilePic-BRX_wv6S.js (removed) 1.57 kB 🟢 -1.57 kB 🟢 -822 B 🟢 -740 B
assets/WorkspaceProfilePic-ClXtwRB6.js (new) 1.57 kB 🔴 +1.57 kB 🔴 +822 B 🔴 +742 B
assets/firebaseAuthStore-BqADNVo3.js (removed) 790 B 🟢 -790 B 🟢 -387 B 🟢 -349 B
assets/firebaseAuthStore-D3PWtCkN.js (new) 790 B 🔴 +790 B 🔴 +388 B 🔴 +347 B
assets/auth-BqgZPdVL.js (new) 357 B 🔴 +357 B 🔴 +225 B 🔴 +195 B
assets/auth-d4xuD5kV.js (removed) 357 B 🟢 -357 B 🟢 -224 B 🟢 -196 B
assets/PasswordFields-koUYSkkX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

Editors & Dialogs — 738 B (baseline 738 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-DAiMWkY9.js (new) 738 B 🔴 +738 B 🔴 +380 B 🔴 +332 B
assets/useSubscriptionDialog-uYbc0qoj.js (removed) 738 B 🟢 -738 B 🟢 -380 B 🟢 -334 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-CFvZ6eZC.js (removed) 9.85 kB 🟢 -9.85 kB 🟢 -3.4 kB 🟢 -3 kB
assets/useTerminalTabs-DyrW3_HY.js (new) 9.85 kB 🔴 +9.85 kB 🔴 +3.4 kB 🔴 +3 kB
assets/ComfyQueueButton-D8pieJ0i.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.22 kB
assets/ComfyQueueButton-DWBGQ8TK.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.22 kB
assets/TopbarBadge-0OM2g_KN.js (removed) 7.45 kB 🟢 -7.45 kB 🟢 -1.82 kB 🟢 -1.6 kB
assets/TopbarBadge-YGzOQBJD.js (new) 7.45 kB 🔴 +7.45 kB 🔴 +1.82 kB 🔴 +1.6 kB
assets/SubscribeButton-Cwf3QvbV.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -891 B
assets/SubscribeButton-CwSsZmW9.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +888 B
assets/WidgetButton-Db8QZdD0.js (new) 1.84 kB 🔴 +1.84 kB 🔴 +877 B 🔴 +772 B
assets/WidgetButton-DRxh3QrM.js (removed) 1.84 kB 🟢 -1.84 kB 🟢 -876 B 🟢 -769 B
assets/cloudFeedbackTopbarButton-CXh3aHyi.js (new) 1.6 kB 🔴 +1.6 kB 🔴 +857 B 🔴 +769 B
assets/cloudFeedbackTopbarButton-xwD0QFnU.js (removed) 1.6 kB 🟢 -1.6 kB 🟢 -857 B 🟢 -766 B
assets/CloudBadge-CKN9xgaL.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +608 B 🔴 +526 B
assets/CloudBadge-lmHOydPu.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -605 B 🟢 -527 B
assets/ComfyQueueButton-B3hroEzR.js (removed) 795 B 🟢 -795 B 🟢 -395 B 🟢 -355 B
assets/ComfyQueueButton-DY2Xbz24.js (new) 795 B 🔴 +795 B 🔴 +395 B 🔴 +355 B
assets/Button-DcjgQBBu.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-D7H0v_Kw.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-DkTACzmk.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-QnDSbZ9z.js (new) 1.73 MB 🔴 +1.73 MB 🔴 +386 kB 🔴 +292 kB
assets/dialogService-xvxMa2hB.js (removed) 1.73 MB 🟢 -1.73 MB 🟢 -386 kB 🟢 -292 kB
assets/api-BhDnOc9W.js (new) 652 kB 🔴 +652 kB 🔴 +147 kB 🔴 +117 kB
assets/api-C5Ihfp4B.js (removed) 652 kB 🟢 -652 kB 🟢 -147 kB 🟢 -118 kB
assets/load3dService-BdEh3KX5.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/load3dService-BGcDF10b.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/systemStatsStore-CaBt1RRJ.js (new) 12.7 kB 🔴 +12.7 kB 🔴 +4.42 kB 🔴 +3.88 kB
assets/systemStatsStore-ERvycAJD.js (removed) 12.7 kB 🟢 -12.7 kB 🟢 -4.42 kB 🟢 -3.89 kB
assets/releaseStore-ad04k6Hj.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/releaseStore-g0aTpMm0.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/keybindingService-Bm2X8oK0.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/keybindingService-C_b5TrSa.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/serverConfigStore-B17wcfZ1.js (removed) 2.32 kB 🟢 -2.32 kB 🟢 -791 B 🟢 -692 B
assets/serverConfigStore-Bv99woE0.js (new) 2.32 kB 🔴 +2.32 kB 🔴 +789 B 🔴 +692 B
assets/bootstrapStore-BpwA_JXO.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -872 B 🟢 -794 B
assets/bootstrapStore-CQmDy2Bk.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +872 B 🔴 +795 B
assets/userStore-BQtxa8Kz.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +720 B 🔴 +680 B
assets/userStore-DpzkZMsE.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -720 B 🟢 -677 B
assets/audioService-Cvk5xGUV.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -850 B 🟢 -728 B
assets/audioService-CzxlifhT.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +848 B 🔴 +725 B
assets/releaseStore-CljMSJpF.js (removed) 762 B 🟢 -762 B 🟢 -384 B 🟢 -344 B
assets/releaseStore-CZ5SK0N1.js (new) 762 B 🔴 +762 B 🔴 +387 B 🔴 +349 B
assets/settingStore-BcHpIVt1.js (new) 746 B 🔴 +746 B 🔴 +389 B 🔴 +344 B
assets/settingStore-j408lZ8r.js (removed) 746 B 🟢 -746 B 🟢 -387 B 🟢 -345 B
assets/workflowDraftStore-BrHj4fVl.js (removed) 738 B 🟢 -738 B 🟢 -380 B 🟢 -339 B
assets/workflowDraftStore-DObUA3an.js (new) 738 B 🔴 +738 B 🔴 +380 B 🔴 +335 B
assets/dialogService-BgBP73Ed.js (removed) 727 B 🟢 -727 B 🟢 -368 B 🟢 -331 B
assets/dialogService-BPtAN6-3.js (new) 727 B 🔴 +727 B 🔴 +368 B 🔴 +331 B

Status: 14 added / 14 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-0m3nZ4dd.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3d-X5_Fshyf.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3dViewer-C-WzEB5y.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.79 kB
assets/useLoad3dViewer-VjbZAlG0.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useFeatureFlags-Bbqjpni9.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.18 kB 🔴 +1.01 kB
assets/useFeatureFlags-DjmAzP0A.js (removed) 3.86 kB 🟢 -3.86 kB 🟢 -1.18 kB 🟢 -1.01 kB
assets/useWorkspaceUI-BEb49f0r.js (new) 3 kB 🔴 +3 kB 🔴 +823 B 🔴 +700 B
assets/useWorkspaceUI-D7bbpbo_.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -703 B
assets/useSubscriptionCredits-B3-A21Qw.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +906 B
assets/useSubscriptionCredits-Bc8LMMxX.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -904 B
assets/subscriptionCheckoutUtil-B5GUx7Sq.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +955 B
assets/subscriptionCheckoutUtil-JEBmRhBF.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -960 B
assets/useErrorHandling-BbUKA1Sk.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +629 B 🔴 +531 B
assets/useErrorHandling-BR5XNevN.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -629 B 🟢 -531 B
assets/useWorkspaceSwitch-C2eS2NWJ.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +545 B 🔴 +484 B
assets/useWorkspaceSwitch-CoEFgd3G.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -542 B 🟢 -478 B
assets/useLoad3d-B-fA-2H6.js (removed) 861 B 🟢 -861 B 🟢 -427 B 🟢 -387 B
assets/useLoad3d-FL5BIbEF.js (new) 861 B 🔴 +861 B 🔴 +427 B 🔴 +389 B
assets/audioUtils-CB7Qdbjb.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -420 B
assets/audioUtils-D0NYofMZ.js (new) 858 B 🔴 +858 B 🔴 +501 B 🔴 +402 B
assets/useLoad3dViewer-3DgtVDc6.js (removed) 840 B 🟢 -840 B 🟢 -413 B 🟢 -373 B
assets/useLoad3dViewer-BVPrXxRj.js (new) 840 B 🔴 +840 B 🔴 +412 B 🔴 +375 B
assets/useCurrentUser-Dm5tV0Hz.js (removed) 724 B 🟢 -724 B 🟢 -371 B 🟢 -328 B
assets/useCurrentUser-IPRePQAJ.js (new) 724 B 🔴 +724 B 🔴 +371 B 🔴 +326 B
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-m-0Os8lq.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-D8coCOeM.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DccD0mxo.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-BzNZEmD_.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Ca9moc73.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CWMIYdD2.js 379 kB 379 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CHaNo_rA.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-B4hGe0IQ.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-vkxZGffR.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.61 MB (baseline 7.61 MB) • 🔴 +5.41 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-DOIB24Mi.js (new) 72.8 kB 🔴 +72.8 kB 🔴 +18.8 kB 🔴 +16.1 kB
assets/core-ZnZjNQdb.js (removed) 72.8 kB 🟢 -72.8 kB 🟢 -18.8 kB 🟢 -16.1 kB
assets/groupNode-BmSlbynE.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.6 kB 🟢 -15.5 kB
assets/groupNode-Zf0C6sJR.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.5 kB
assets/WidgetSelect--ydGnqdH.js (new) 57.6 kB 🔴 +57.6 kB 🔴 +12.2 kB 🔴 +10.5 kB
assets/WidgetSelect-CM-J6cPD.js (removed) 57.6 kB 🟢 -57.6 kB 🟢 -12.2 kB 🟢 -10.6 kB
assets/SubscriptionRequiredDialogContentWorkspace-CyaQGTA4.js (removed) 45.8 kB 🟢 -45.8 kB 🟢 -8.56 kB 🟢 -7.41 kB
assets/SubscriptionRequiredDialogContentWorkspace-nOA5efpR.js (new) 45.8 kB 🔴 +45.8 kB 🔴 +8.56 kB 🔴 +7.4 kB
assets/Load3DControls-BsbOJVRL.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.65 kB
assets/Load3DControls-DmC2zR-x.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/WorkspacePanelContent-CWcayzme.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.14 kB 🟢 -5.42 kB
assets/WorkspacePanelContent-Mc_etQjH.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.14 kB 🔴 +5.41 kB
assets/SubscriptionRequiredDialogContent-D4m48UZP.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/SubscriptionRequiredDialogContent-D8ZqV9NZ.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.57 kB 🟢 -5.78 kB
assets/Load3dViewerContent-CL_sHVVs.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/Load3dViewerContent-CxIR09kx.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.5 kB
assets/WidgetImageCrop-ChE7zrM4.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.5 kB 🟢 -4.85 kB
assets/WidgetImageCrop-DXesKNrK.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.51 kB 🔴 +4.85 kB
assets/SubscriptionPanelContentWorkspace-DCcJygy1.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/SubscriptionPanelContentWorkspace-DtMIUjso.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/CurrentUserPopoverWorkspace-DEHEsQES.js (new) 19.8 kB 🔴 +19.8 kB 🔴 +4.86 kB 🔴 +4.33 kB
assets/CurrentUserPopoverWorkspace-DmJZFRqp.js (removed) 19.8 kB 🟢 -19.8 kB 🟢 -4.86 kB 🟢 -4.33 kB
assets/SignInContent-B0aCuL3q.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.79 kB 🔴 +4.19 kB
assets/SignInContent-BfmqB-_C.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.78 kB 🟢 -4.19 kB
assets/WidgetInputNumber-C5qNT-4I.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.71 kB 🔴 +4.18 kB
assets/WidgetInputNumber-CmNKeeGM.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.71 kB 🟢 -4.18 kB
assets/WidgetRecordAudio-BrVtwFKQ.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.94 kB 🟢 -4.42 kB
assets/WidgetRecordAudio-BTsLigXa.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.94 kB 🔴 +4.42 kB
assets/Load3D-DI1MSfoD.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.51 kB
assets/Load3D-Dlimsavz.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.52 kB
assets/load3d-C1mhH9Rw.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.63 kB
assets/load3d-Dt3VXhxz.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.19 kB 🟢 -3.63 kB
assets/LazyImage-QLfyKhBu.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.81 kB 🟢 -3.34 kB
assets/LazyImage-s7ubKwbu.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.8 kB 🔴 +3.34 kB
assets/AudioPreviewPlayer-BnJ8RhOF.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.2 kB 🔴 +2.87 kB
assets/AudioPreviewPlayer-u3RFpZRD.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.85 kB
assets/changeTracker-B9rZdSI8.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.54 kB
assets/changeTracker-CrT0AONG.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.54 kB
assets/nodeTemplates-Cv_ENsZL.js (new) 9.3 kB 🔴 +9.3 kB 🔴 +3.26 kB 🔴 +2.86 kB
assets/nodeTemplates-DPZSbzW1.js (removed) 9.3 kB 🟢 -9.3 kB 🟢 -3.26 kB 🟢 -2.86 kB
assets/InviteMemberDialogContent-CPtUJGPq.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2.01 kB
assets/InviteMemberDialogContent-UhMa4WQE.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/WidgetToggleSwitch-DC0xon5p.js (new) 6.8 kB 🔴 +6.8 kB 🔴 +2.19 kB 🔴 +1.94 kB
assets/WidgetToggleSwitch-VrAZFEEv.js (removed) 6.8 kB 🟢 -6.8 kB 🟢 -2.19 kB 🟢 -1.94 kB
assets/Load3DConfiguration-B1xj3gmE.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-DS_rwpsm.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-DDzdwoye.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/CreateWorkspaceDialogContent-DvlVPkXO.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/onboardingCloudRoutes-DY3pFltc.js (new) 5.41 kB 🔴 +5.41 kB 🔴 +1.84 kB 🔴 +1.6 kB
assets/EditWorkspaceDialogContent-9WhTnRBV.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.94 kB 🟢 -1.71 kB
assets/EditWorkspaceDialogContent-j-nyC0nF.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.95 kB 🔴 +1.7 kB
assets/ValueControlPopover-BAT7ncl1.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.58 kB
assets/ValueControlPopover-C1eeud9T.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.6 kB
assets/Preview3d-2aeBy6ke.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/Preview3d-CMukLIg3.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.56 kB 🔴 +1.37 kB
assets/CancelSubscriptionDialogContent-BFgFMTOQ.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.78 kB 🔴 +1.57 kB
assets/CancelSubscriptionDialogContent-CMAx44dF.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.56 kB
assets/DeleteWorkspaceDialogContent-C7Vlgk69.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.42 kB
assets/DeleteWorkspaceDialogContent-GLvBz3R4.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/WidgetWithControl-CiuS96FR.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.78 kB 🟢 -1.6 kB
assets/WidgetWithControl-Y8Bxg5P5.js (new) 4.11 kB 🔴 +4.11 kB 🔴 +1.78 kB 🔴 +1.6 kB
assets/LeaveWorkspaceDialogContent-CpnKG7WU.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.58 kB 🟢 -1.37 kB
assets/LeaveWorkspaceDialogContent-sJM6g4bk.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.58 kB 🔴 +1.38 kB
assets/RemoveMemberDialogContent-5Ueymg4t.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.52 kB 🟢 -1.34 kB
assets/RemoveMemberDialogContent-B6EMunio.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.53 kB 🔴 +1.34 kB
assets/RevokeInviteDialogContent-B8c70FRt.js (removed) 3.96 kB 🟢 -3.96 kB 🟢 -1.54 kB 🟢 -1.36 kB
assets/RevokeInviteDialogContent-B8Y9ne--.js (new) 3.96 kB 🔴 +3.96 kB 🔴 +1.54 kB 🔴 +1.36 kB
assets/InviteMemberUpsellDialogContent-BzxNrfbG.js (new) 3.83 kB 🔴 +3.83 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-CvSj7aKZ.js (removed) 3.83 kB 🟢 -3.83 kB 🟢 -1.4 kB 🟢 -1.23 kB
assets/WidgetGalleria-BaSczjNZ.js (removed) 3.61 kB 🟢 -3.61 kB 🟢 -1.4 kB 🟢 -1.25 kB
assets/WidgetGalleria-Bb1DZ9I_.js (new) 3.61 kB 🔴 +3.61 kB 🔴 +1.39 kB 🔴 +1.25 kB
assets/saveMesh-DVPrNJog.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.45 kB 🔴 +1.3 kB
assets/saveMesh-y5bbi8Ba.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.46 kB 🟢 -1.29 kB
assets/WidgetTextarea-Dw918e6W.js (removed) 3.13 kB 🟢 -3.13 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/WidgetTextarea-DzT8TJBH.js (new) 3.13 kB 🔴 +3.13 kB 🔴 +1.29 kB 🔴 +1.13 kB
assets/cloudSessionCookie-B0RZcRVi.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.09 kB 🔴 +964 B
assets/cloudSessionCookie-Cd4wjykP.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -969 B
assets/WidgetImageCompare-BV2GfN2g.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.15 kB 🟢 -992 B
assets/WidgetImageCompare-DpWt7SLo.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.15 kB 🔴 +994 B
assets/WidgetMarkdown-DbQVdecX.js (removed) 2.93 kB 🟢 -2.93 kB 🟢 -1.23 kB 🟢 -1.07 kB
assets/WidgetMarkdown-Vq4skE3X.js (new) 2.93 kB 🔴 +2.93 kB 🔴 +1.23 kB 🔴 +1.08 kB
assets/GlobalToast-Bm_7jfnC.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.07 kB
assets/GlobalToast-DS0r1fJy.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/WidgetColorPicker-B4mml5Z1.js (new) 2.9 kB 🔴 +2.9 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/WidgetColorPicker-cmpN9z2D.js (removed) 2.9 kB 🟢 -2.9 kB 🟢 -1.23 kB 🟢 -1.11 kB
assets/WidgetChart-BPLD0Sx8.js (new) 2.21 kB 🔴 +2.21 kB 🔴 +953 B 🔴 +825 B
assets/WidgetChart-tDqjft7_.js (removed) 2.21 kB 🟢 -2.21 kB 🟢 -952 B 🟢 -823 B
assets/SubscribeToRun-B8lTpWoq.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +888 B
assets/SubscribeToRun-oh3NYiIR.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -882 B
assets/WidgetLayoutField-1Fl4ror4.js (removed) 1.95 kB 🟢 -1.95 kB 🟢 -876 B 🟢 -763 B
assets/WidgetLayoutField-hmcBQt7E.js (new) 1.95 kB 🔴 +1.95 kB 🔴 +877 B 🔴 +763 B
assets/WidgetInputText-Bkj-AL52.js (new) 1.86 kB 🔴 +1.86 kB 🔴 +873 B 🔴 +790 B
assets/WidgetInputText-Cu2WRFHM.js (removed) 1.86 kB 🟢 -1.86 kB 🟢 -874 B 🟢 -794 B
assets/CloudRunButtonWrapper-B3RPjabP.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -785 B 🟢 -716 B
assets/CloudRunButtonWrapper-BH64TL4J.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +783 B 🔴 +699 B
assets/cloudBadges--FeqArGQ.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -705 B 🟢 -617 B
assets/cloudBadges-cce43aVF.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +704 B 🔴 +611 B
assets/cloudSubscription-BXCOV9CU.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +655 B 🔴 +572 B
assets/cloudSubscription-DKrtYd_M.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -656 B 🟢 -573 B
assets/widgetPropFilter-Cd0O5LPR.js (new) 1.1 kB 🔴 +1.1 kB 🔴 +510 B 🔴 +431 B
assets/widgetPropFilter-COB1L9Pj.js (removed) 1.1 kB 🟢 -1.1 kB 🟢 -511 B 🟢 -431 B
assets/Load3D-B1cENFEl.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +500 B 🔴 +447 B
assets/Load3D-C1HD2D_5.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -499 B 🟢 -448 B
assets/nightlyBadges-BDrO0Cu4.js (removed) 1 kB 🟢 -1 kB 🟢 -534 B 🟢 -471 B
assets/nightlyBadges-CQfuPQTG.js (new) 1 kB 🔴 +1 kB 🔴 +535 B 🔴 +471 B
assets/Load3dViewerContent-B9cHg948.js (removed) 995 B 🟢 -995 B 🟢 -471 B 🟢 -421 B
assets/Load3dViewerContent-D7J2srYq.js (new) 995 B 🔴 +995 B 🔴 +471 B 🔴 +418 B
assets/SubscriptionPanelContentWorkspace-8vBNGFNQ.js (removed) 932 B 🟢 -932 B 🟢 -439 B 🟢 -386 B
assets/SubscriptionPanelContentWorkspace-DPsxhKZ9.js (new) 932 B 🔴 +932 B 🔴 +437 B 🔴 +386 B
assets/graphHasMissingNodes-C_flcSmG.js (new) 761 B 🔴 +761 B 🔴 +372 B 🔴 +326 B
assets/graphHasMissingNodes-Dcau6cKJ.js (removed) 761 B 🟢 -761 B 🟢 -373 B 🟢 -329 B
assets/changeTracker-BFzwt6FK.js (removed) 759 B 🟢 -759 B 🟢 -386 B 🟢 -344 B
assets/changeTracker-DyuksEig.js (new) 759 B 🔴 +759 B 🔴 +387 B 🔴 +345 B
assets/WidgetLegacy-B5rJL5J_.js (removed) 747 B 🟢 -747 B 🟢 -386 B 🟢 -340 B
assets/WidgetLegacy-CT3IKiJZ.js (new) 747 B 🔴 +747 B 🔴 +386 B 🔴 +344 B
assets/WidgetInputNumber-BxOqVOmA.js (new) 469 B 🔴 +469 B 🔴 +265 B 🔴 +230 B
assets/WidgetInputNumber-D_JnWHbB.js (removed) 469 B 🟢 -469 B 🟢 -263 B 🟢 -229 B
assets/AnimationControls-BuN89WBW.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-1YjVaHoW.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-sbUO3_hD.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DhnNuB-i.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CKD9vwNi.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BIWmUVEc.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BOt38VCw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C0NcxRH3.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2xuXGb5.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CmiKIQwc.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMwP8S5e.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwBt3HhT.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-JX559A2n.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-n_2KJWcD.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OO-8nFm9.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-wq2Y-YKn.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BIWjk1ar.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-_ix-_aGb.js 518 kB 518 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Bx5xAAgN.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BA2V8d-C.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BccLgA47.js 168 kB 168 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C-ZfUqj4.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C1DJg0HU.js 123 kB 123 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CjFsXT_Y.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CNIsXuKE.js 147 kB 147 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CqcSAz7B.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DDxNg4P1.js 174 kB 174 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQHvUyvV.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dr-RBucI.js 122 kB 122 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Gap3UP2p.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-D3QRJ6eZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-vXuump5i.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-XsW6Reb5.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-Crhpst_D.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-DLkC3BlW.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-Dxvkupp8.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-2U4KtUml.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5rcOJVex.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BTBSP0IQ.js 480 kB 480 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZEpP7w6.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C-Tw-7I_.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C76rbmLh.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CxxD1ymF.js 395 kB 395 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DciNsuYe.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-G7wcMpUD.js 356 kB 356 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-nGdg-hIO.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xiPSrG6S.js 440 kB 440 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BFioAN8e.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DeIFnh1k.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-bibvA8E3.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CHXN3L2F.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DdhXSGsd.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-1EXhnvTZ.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-vVfixIxQ.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BPh1lTyF.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-xcXafMSV.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BtuQMzwn.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 59 added / 58 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/ci-oss-assets-validation.yaml:
- Around line 93-132: The script currently enables strict exit-on-error with
"set -euo pipefail" so a non-zero exit from the npx license-checker command will
cause the shell to exit before the custom error/ remediation messages run;
modify the logic so the npx license-checker invocation is executed as the
conditional of the if (e.g., use "if npx license-checker ...; then ... else ...
fi") or temporarily disable "set -e" only around the license-checker call
(save/restore errexit) so the exit status can be tested and the remediation
block after the else (the messages that run when license-checker fails) is
reachable; target the npx license-checker invocation and the set -euo pipefail
line when making the change.
- Line 20: The pnpm/action-setup action is pinned to the wrong commit SHA
(pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061) while the intended
version is v4.2.0; update the workflow entry that references pnpm/action-setup
so the pin matches the v4.2.0 commit (9fd676a19091d4595eefd76e4bd31c97133911f1)
or replace the pinned SHA with the v4.2.0 tag itself, ensuring the action
reference and SHA are consistent (look for the string pnpm/action-setup and the
v4.2.0 reference to locate and fix the line).
🧹 Nitpick comments (1)
.github/workflows/ci-oss-assets-validation.yaml (1)

52-54: Nit: redundant -iname patterns.

-iname is already case-insensitive, so -iname '*ABCROM*' -o -iname '*abcrom*' is equivalent to just -iname '*abcrom*'. Same on line 58.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new GitHub Actions workflow to enforce OSS distribution compliance by validating built dist/ assets (proprietary font detection) and production dependency licenses, and updates Knip config to avoid false positives from the new workflow file.

Changes:

  • Add .github/workflows/ci-oss-assets-validation.yaml with two jobs: proprietary font scan in dist/ and production license validation via license-checker.
  • Update knip.config.ts to ignore the new workflow file (avoids Knip misclassification).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
knip.config.ts Ignores the new workflow file to prevent Knip false positives.
.github/workflows/ci-oss-assets-validation.yaml Introduces CI checks for proprietary font artifacts and dependency license compliance.

Comment on lines 117 to 132
if [ $? -eq 0 ]; then
echo ''
echo '✅ All production dependency licenses are approved!'
else
echo ''
echo '❌ ERROR: Found dependencies with non-approved licenses!'
echo ''
echo 'To fix this:'
echo '1. Check the license of the problematic package'
echo '2. Find an alternative package with an approved license'
echo '3. If the license is safe and OSI-approved, add it to the --onlyAllow list'
echo ''
echo 'For more info on OSI-approved licenses:'
echo 'https://opensource.org/licenses'
exit 1
fi
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

With set -euo pipefail, a non-zero exit from npx license-checker ... will terminate the step immediately, so the custom remediation output in the else branch will never run. If you want the friendly error messaging, run the checker inside the if condition (e.g., if ...; then ... else ... fi) or temporarily disable -e while capturing the exit code.

Copilot uses AI. Check for mistakes.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/platform/cloud/onboarding/components/CloudTemplate.vue`:
- Around line 80-84: The dynamic import in CloudTemplate.vue inside onMounted is
a floating promise; update the onMounted handler to handle errors from
import('../assets/css/fonts.css') by either making the onMounted callback async
and awaiting the import with try/catch or by appending a .catch(...) to the
returned promise; ensure the catch logs a clear error (use the app logger or
console.error) and does not swallow the failure so ESLint no-floating-promises
is satisfied and load failures are observable.

@socket-security
Copy link

socket-security bot commented Feb 12, 2026

No dependency changes detected. Learn more about Socket for GitHub.

👍 No dependency changes detected in pull request

snomiao and others added 8 commits February 20, 2026 02:31
- New workflow: ci-oss-assets-validation.yaml
- Two jobs: validate-fonts and validate-licenses
- Font check: Scans dist for proprietary ABCROM fonts
- License check: Validates production dependencies against OSI-approved licenses
- Uses simple bash/grep approach following #8623 pattern

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Replace static CSS @import with dynamic import() to ensure fonts are
only loaded at runtime in cloud builds, not bundled at build time.

This prevents proprietary ABCROM fonts from being included in the dist
output when DISTRIBUTION=localhost.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add the following license types to the validation allowlist:
- MIT* (for packages reporting MIT with variations)
- (MPL-2.0 OR Apache-2.0) (for dompurify security package)
- GPL-3.0-only (for @comfyorg/comfyui-electron-types)
- UNLICENSED and UNKNOWN (for internal @comfyorg workspace packages)

All added licenses are either OSS-approved or internal workspace packages.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The previous commit had leading spaces in the license strings which
caused license-checker to fail matching. This commit puts all licenses
on a single line to avoid whitespace issues.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add a generateBundle hook that removes ABCROM font files from the
output bundle when DISTRIBUTION is not 'cloud'. This approach works
correctly with Vite's asset processing pipeline, unlike the previous
dynamic import approach which still caused fonts to be bundled.

The CloudTemplate component is reverted to use static CSS @import,
as the Vite plugin handles the exclusion at build time.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1. Correct pnpm/action-setup SHA pin to match v4.2.0
   - Was: 41ff72655975bd51cab0327fa583b6e92b6d3061 (incorrect)
   - Now: 9fd676a19091d4595eefd76e4bd31c97133911f1 (correct)

2. Fix error handling with set -e
   - Move license-checker command into if condition directly
   - This allows error message to be displayed before exit

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…e-checker

- Replace license-checker@25.0.1 (7 years old) with @onebeyond/license-checker@6
- Modern, actively maintained (v6.0.0)
- SPDX-compliant license expressions
- Cleaner API with --allowOnly flag
- Includes --ignoreRootPackageLicense flag

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…upport

- Replace @onebeyond/license-checker with license-checker-rseidelsohn@4
- license-checker-rseidelsohn better handles monorepos and non-SPDX licenses
- Exclude internal @comfyorg packages from license validation
- Allow MIT* for packages like wwobjloader2
- Tested locally: 60 packages validated successfully

Licenses approved:
- MIT (50), Apache-2.0 (4), ISC (3)
- (MPL-2.0 OR Apache-2.0) (1), BSD-2-Clause (1), MIT* (1)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@christian-byrne christian-byrne force-pushed the feat/oss-assets-validation branch from 606960e to 6ae2036 Compare February 20, 2026 10:31
Replace static import of cloudOnboardingRoutes with a conditional
dynamic import gated on isCloud. This prevents the entire cloud
onboarding module graph (including proprietary ABCROM fonts and CSS)
from being included in non-cloud builds at the bundler level.

The Vite generateBundle plugin is retained as defense-in-depth.
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

Approval — verified OSS font exclusion is valid and necessary

Verification performed

Quality gates — all pass:

  • pnpm typecheck
  • pnpm lint
  • pnpm format:check
  • pnpm knip
  • pnpm vitest run — 373 files, 4809 tests pass ✅

Font exclusion verified by build:

  • DISTRIBUTION=localhost build on main (no PR changes): ABCROM fonts present in dist/ (ABCROMExtended-BlackItalic-*.woff, .woff2)
  • DISTRIBUTION=localhost build on this branch: ABCROM fonts absent from dist/
  • DISTRIBUTION=cloud build on this branch: ABCROM fonts present in dist/ (correctly included for cloud) ✅

Font usage audit: ABCROM is used exclusively in src/platform/cloud/onboarding/ — zero non-cloud consumers. Only CloudTemplate.vue references font-abcrom / ABC ROM Extended, and only fonts.css declares the @font-face. No other component in the codebase uses this font.

Why the font filtering is genuinely needed

Tree-shaking and DCE do not work on font assets. The root cause: router.ts had a static top-level import { cloudOnboardingRoutes } which forced Vite to follow the full module graph (onboardingCloudRoutes.tsCloudLayoutView.vueCloudTemplate.vue<style> @import fonts.cssurl(ABCROMExtended-*.woff2)). CSS @font-face url() references are asset pipeline operations — the bundler copies them into the output unconditionally, regardless of whether the JS code paths that render the component are reachable.

Improvement pushed

Pushed a commit that converts the static import to a conditional dynamic import:

const cloudOnboardingRoutes = isCloud
  ? (await import("./platform/cloud/onboarding/onboardingCloudRoutes"))
      .cloudOnboardingRoutes
  : []

This fixes the root cause — the entire cloud onboarding module graph (including CSS/fonts) is now excluded from non-cloud builds at the bundler level. Verified: fonts are absent from dist/ with this change alone. The Vite generateBundle plugin is retained as defense-in-depth, and the CI check serves as a regression safety net.

-iname is already case-insensitive, so the duplicate patterns
are unnecessary. Addresses CodeRabbit review nitpick.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7db3-f255-763a-b8be-646d0796accc
@christian-byrne christian-byrne added the preview-cpu Creates a preview ephemeral environment for this PR (CPU only) label Feb 23, 2026
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

LGTM!

@christian-byrne christian-byrne merged commit 5687b44 into main Feb 23, 2026
37 checks passed
@christian-byrne christian-byrne deleted the feat/oss-assets-validation branch February 23, 2026 01:35
@dosubot
Copy link

dosubot bot commented Feb 23, 2026

Related Documentation

Checked 0 published document(s) in 1 knowledge base(s). No updates required.

How did I do? Any feedback?  Join Discord

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

Labels

preview-cpu Creates a preview ephemeral environment for this PR (CPU only) size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants