Skip to content

fix: node replacement fails after execution and modal sync#9269

Merged
christian-byrne merged 2 commits intomainfrom
fix/node-replacement-detection
Feb 28, 2026
Merged

fix: node replacement fails after execution and modal sync#9269
christian-byrne merged 2 commits intomainfrom
fix/node-replacement-detection

Conversation

@jaeone94
Copy link
Collaborator

@jaeone94 jaeone94 commented Feb 27, 2026

Summary

Fixes two bugs in the node replacement flow: placeholder detection failing after workflow execution or pack reinstallation, and missing UI sync in the Errors Tab when replacements are applied from the modal dialog.

Changes

  • Placeholder detection: Node placeholder detection now matches against targetTypes (derived from the replaceable node list built at workflow load time) instead of relying on has_errors flag or registered_node_types lookup. This ensures replacement works reliably after execution (where has_errors gets cleared) and after pack reinstallation (where the type becomes registered).
  • Modal → Errors Tab sync: Added executionErrorStore.removeMissingNodesByType() call in MissingNodesContent.vue after replacement, so the Errors Tab reflects changes immediately without requiring a page reload.

Review Focus

  • collectAllNodes predicate change in useNodeReplacement.ts: now uses targetTypes.has(originalType) to find nodes by their original serialized type. This is independent of runtime state like has_errors or registered_node_types.
  • executionErrorStore.removeMissingNodesByType call timing in MissingNodesContent.vue — runs synchronously after replaceNodesInPlace resolves, before auto-close logic.

┆Issue is synchronized with this Notion page by Unito

- Detect missing nodes by unregistered type instead of has_errors flag,
  which gets cleared by clearAllNodeErrorFlags during execution
- Sync modal replace action with executionErrorStore so Errors Tab
  updates immediately when nodes are replaced from the dialog
@jaeone94 jaeone94 requested a review from a team as a code owner February 27, 2026 01:47
@jaeone94 jaeone94 added verified bug Something isn't working (confirmed by the team) area:nodes labels Feb 27, 2026
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Feb 27, 2026
@github-actions
Copy link

github-actions bot commented Feb 27, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 02/27/2026, 04:16:58 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 27, 2026

🎭 Playwright: ✅ 549 passed, 0 failed · 4 flaky

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

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 27, 2026

📝 Walkthrough

Walkthrough

Integrates execution error store synchronization into the missing-node replacement flow and tightens placeholder selection to only consider nodes whose serialized or inherent type matches selected target types.

Changes

Cohort / File(s) Summary
Error store sync
src/components/dialog/content/MissingNodesContent.vue
Imports useExecutionErrorStore, instantiates executionErrorStore, and calls executionErrorStore.removeMissingNodesByType(result) after successful in-place node replacements to update missing-node errors.
Placeholder selection
src/platform/nodeReplacement/useNodeReplacement.ts
Refines candidate filtering: derives targetTypes from selectedTypes and only includes nodes whose last_serialization.type (or fallback node.type) exists in targetTypes; adds comments and a guarded fallback for type resolution.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant User
participant MissingNodesContent
participant NodeReplacement
participant ExecutionErrorStore

User->>MissingNodesContent: trigger "Replace Selected"
MissingNodesContent->>NodeReplacement: call replaceNodesInPlace(selectedNodes, selectedTypes)
NodeReplacement-->>MissingNodesContent: return replacedTypesList
alt replacements occurred
    MissingNodesContent->>ExecutionErrorStore: removeMissingNodesByType(replacedTypesList)
    ExecutionErrorStore-->>MissingNodesContent: confirm removal
end
MissingNodesContent-->>User: update UI / close dialog

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 I swapped the gaps with careful hops,
Types matched neat without the flops,
Errors chased and gently cleared,
New placeholders now well-steered,
Hooray — the graph bounces and pops! 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the primary fix: node replacement fails after execution and modal sync issues are resolved.
Description check ✅ Passed The pull request description is well-structured, follows the template with Summary and Changes sections, and provides clear details on what was fixed and how.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/node-replacement-detection

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 27, 2026

📦 Bundle: 4.46 MB gzip 🔴 +77 B

Details

Summary

  • Raw size: 20.9 MB baseline 20.9 MB — 🔴 +362 B
  • Gzip: 4.46 MB baseline 4.46 MB — 🔴 +77 B
  • Brotli: 3.44 MB baseline 3.44 MB — 🟢 -95 B
  • Bundles: 228 current • 228 baseline • 108 added / 108 removed

Category Glance
Data & Services 🔴 +362 B (2.55 MB) · Vendor & Third-Party ⚪ 0 B (8.84 MB) · Other ⚪ 0 B (7.86 MB) · Graph Workspace ⚪ 0 B (1.02 MB) · Panels & Settings ⚪ 0 B (435 kB) · Views & Navigation ⚪ 0 B (72.1 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CvcAPZBp.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -6.35 kB 🟢 -5.52 kB
assets/index-Dx-kqYYZ.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.34 kB 🔴 +5.51 kB

Status: 1 added / 1 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-B4Ag8d8i.js (new) 1.02 MB 🔴 +1.02 MB 🔴 +218 kB 🔴 +164 kB
assets/GraphView-QwbcNnEg.js (removed) 1.02 MB 🟢 -1.02 MB 🟢 -218 kB 🟢 -164 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-B3TXMCtf.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-D4Yny-jB.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-CfsWr-12.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.19 kB 🔴 +2.81 kB
assets/CloudLoginView-XU7eQ4Hr.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.19 kB 🟢 -2.82 kB
assets/CloudSignupView-BZo4H2NN.js (removed) 9.37 kB 🟢 -9.37 kB 🟢 -2.69 kB 🟢 -2.37 kB
assets/CloudSignupView-DM4iJp9h.js (new) 9.37 kB 🔴 +9.37 kB 🔴 +2.69 kB 🔴 +2.37 kB
assets/UserCheckView-DNPgh7E1.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/UserCheckView-hrDNZJSK.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/CloudLayoutView-B8yNpLQJ.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.83 kB
assets/CloudLayoutView-DSZhvM3a.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.83 kB
assets/CloudForgotPasswordView-b9_aePzR.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.93 kB 🟢 -1.72 kB
assets/CloudForgotPasswordView-CBcerOvB.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.93 kB 🔴 +1.7 kB
assets/CloudAuthTimeoutView-CHefyuYY.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-PG4Ib_Dz.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/CloudSubscriptionRedirectView-BRxmYeRj.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-Cfn2mD6E.js (new) 4.75 kB 🔴 +4.75 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/UserSelectView-BADWiKfD.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-DkHXdVch.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.45 kB
assets/CloudSorryContactSupportView-Bypca0av.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CI4MZk1L.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BJannuit.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.66 kB
assets/SecretsPanel-ChRyABYU.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.66 kB
assets/LegacyCreditsPanel-C1i2FN3z.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.56 kB 🔴 +4.89 kB
assets/LegacyCreditsPanel-D3O_I7_d.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.56 kB 🟢 -4.89 kB
assets/SubscriptionPanel-D0tldsEh.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.65 kB 🟢 -4.09 kB
assets/SubscriptionPanel-DJHAHuyD.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.65 kB 🔴 +4.09 kB
assets/KeybindingPanel-DESzRQL2.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.52 kB 🟢 -3.12 kB
assets/KeybindingPanel-DzIdO3HR.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.52 kB 🔴 +3.11 kB
assets/AboutPanel-BPCnaP-y.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.47 kB
assets/AboutPanel-DUvZSZ8D.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.45 kB
assets/ExtensionPanel-BD3RRikD.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.35 kB
assets/ExtensionPanel-Czp7spkC.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/ServerConfigPanel-BKDVOPPw.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.12 kB 🔴 +1.93 kB
assets/ServerConfigPanel-BZvHiNyX.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.13 kB 🟢 -1.92 kB
assets/UserPanel-C3zOxhVZ.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/UserPanel-D3uCqXoR.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.75 kB
assets/cloudRemoteConfig-CBcGdIZM.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +705 B 🔴 +615 B
assets/cloudRemoteConfig-CNaSfTJ8.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -708 B 🟢 -616 B
assets/refreshRemoteConfig-Bh2Wkj4A.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -519 B 🟢 -447 B
assets/refreshRemoteConfig-DHm7fmtp.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +448 B
assets/config-CGn5JFmU.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B5oF6TeI.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BVYOg4dh.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CBEvSL1z.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CGx1t8IZ.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CNcb_4nC.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cx1dZM6H.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dw-QS6Nb.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DXxgnCSn.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-GRFn4guL.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-mgwKIVQ2.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-s83B801I.js 28.7 kB 28.7 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-B_OIh6gB.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +994 B
assets/auth-D5yFJMQG.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -987 B
assets/SignUpForm-DnggtlXq.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/SignUpForm-DQJSpLr4.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/UpdatePasswordContent-CH3eTBM_.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -944 B
assets/UpdatePasswordContent-D34rRnrd.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +938 B
assets/firebaseAuthStore-BNjmgRe6.js (removed) 788 B 🟢 -788 B 🟢 -390 B 🟢 -351 B
assets/firebaseAuthStore-DGvTvmcz.js (new) 788 B 🔴 +788 B 🔴 +386 B 🔴 +372 B
assets/auth-CCsl1Uv1.js (removed) 357 B 🟢 -357 B 🟢 -226 B 🟢 -194 B
assets/auth-tcTSQmPR.js (new) 357 B 🔴 +357 B 🔴 +227 B 🔴 +213 B
assets/PasswordFields-DLbVLg8O.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-D6ioir1T.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BjfXoNmE.js (removed) 736 B 🟢 -736 B 🟢 -381 B 🟢 -329 B
assets/useSubscriptionDialog-x-btMFvT.js (new) 736 B 🔴 +736 B 🔴 +379 B 🔴 +356 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-D0WNz2zm.js (removed) 9.84 kB 🟢 -9.84 kB 🟢 -3.4 kB 🟢 -3 kB
assets/useTerminalTabs-urokIE8m.js (new) 9.84 kB 🔴 +9.84 kB 🔴 +3.4 kB 🔴 +3.01 kB
assets/ComfyQueueButton-BDKIMHN1.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.23 kB
assets/ComfyQueueButton-DWcTREm9.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.23 kB
assets/SubscribeButton-CJAdoHgY.js (new) 2.48 kB 🔴 +2.48 kB 🔴 +1.07 kB 🔴 +942 B
assets/SubscribeButton-LY_3a4tQ.js (removed) 2.48 kB 🟢 -2.48 kB 🟢 -1.07 kB 🟢 -945 B
assets/cloudFeedbackTopbarButton-BvqVqAqV.js (removed) 1.59 kB 🟢 -1.59 kB 🟢 -855 B 🟢 -765 B
assets/cloudFeedbackTopbarButton-BWaoiY47.js (new) 1.59 kB 🔴 +1.59 kB 🔴 +851 B 🔴 +729 B
assets/ComfyQueueButton-CopPg6O2.js (new) 793 B 🔴 +793 B 🔴 +394 B 🔴 +353 B
assets/ComfyQueueButton-fR9Z14Hl.js (removed) 793 B 🟢 -793 B 🟢 -395 B 🟢 -353 B
assets/Button-D1z3poyI.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-D1z3EKPy.js 1.16 kB 1.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-Bg4LklDe.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-DecBFGbM.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-CJNpTEnW.js 7.44 kB 7.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CnQQLXB-.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-sg8Jj4MY.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.55 MB (baseline 2.55 MB) • 🔴 +362 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-BuEUFXj6.js (new) 1.75 MB 🔴 +1.75 MB 🔴 +393 kB 🔴 +296 kB
assets/dialogService-_4QhN_pl.js (removed) 1.75 MB 🟢 -1.75 MB 🟢 -393 kB 🟢 -296 kB
assets/api-CfzgSLYO.js (removed) 678 kB 🟢 -678 kB 🟢 -153 kB 🟢 -122 kB
assets/api-D_WyGS_W.js (new) 678 kB 🔴 +678 kB 🔴 +153 kB 🔴 +122 kB
assets/load3dService-dL3lK53M.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-S-IXNUWy.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/extensionStore-kzbLntO8.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +4.21 kB 🔴 +3.7 kB
assets/extensionStore-NgjGqHT4.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -4.21 kB 🟢 -3.7 kB
assets/releaseStore-BzC9l-Ov.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-syrX-IgA.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-Bqc8sJQ_.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/keybindingService-CODmnbsU.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.48 kB
assets/bootstrapStore-BBfihdzQ.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -873 B 🟢 -790 B
assets/bootstrapStore-DfjFwXqT.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +873 B 🔴 +786 B
assets/userStore-Boxmcuka.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +720 B 🔴 +671 B
assets/userStore-i4xJhHyb.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -633 B
assets/audioService-DA6PHOvo.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -849 B 🟢 -729 B
assets/audioService-DlHyYDZY.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +849 B 🔴 +729 B
assets/releaseStore-CAeL8alK.js (removed) 760 B 🟢 -760 B 🟢 -384 B 🟢 -347 B
assets/releaseStore-S3hrWu6E.js (new) 760 B 🔴 +760 B 🔴 +386 B 🔴 +349 B
assets/settingStore-C_9O-3Wh.js (new) 744 B 🔴 +744 B 🔴 +384 B 🔴 +342 B
assets/settingStore-DjhdQ529.js (removed) 744 B 🟢 -744 B 🟢 -387 B 🟢 -345 B
assets/workflowDraftStore-BT6Qebar.js (new) 736 B 🔴 +736 B 🔴 +378 B 🔴 +336 B
assets/workflowDraftStore-Dpsdc1Cb.js (removed) 736 B 🟢 -736 B 🟢 -380 B 🟢 -338 B
assets/dialogService-CkfFSe_r.js (removed) 725 B 🟢 -725 B 🟢 -369 B 🟢 -328 B
assets/dialogService-Ot0_VMfs.js (new) 725 B 🔴 +725 B 🔴 +367 B 🔴 +330 B
assets/serverConfigStore-EPk4OtIK.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-CBKtCsoh.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-JjX6esph.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-B8HS44to.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-n3zhVgDa.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useFeatureFlags-BRLcqq71.js (new) 4.14 kB 🔴 +4.14 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/useFeatureFlags-POItoyOx.js (removed) 4.14 kB 🟢 -4.14 kB 🟢 -1.23 kB 🟢 -1.06 kB
assets/useWorkspaceUI-B3s3b75G.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -703 B
assets/useWorkspaceUI-C4tJB4qt.js (new) 3 kB 🔴 +3 kB 🔴 +823 B 🔴 +703 B
assets/subscriptionCheckoutUtil-BQeQMb9-.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +922 B
assets/subscriptionCheckoutUtil-DDXKZWJa.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -962 B
assets/useErrorHandling-DbL5GSw-.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -630 B 🟢 -530 B
assets/useErrorHandling-DJwVhems.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +629 B 🔴 +531 B
assets/useWorkspaceSwitch-BEmXg-5E.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -543 B 🟢 -482 B
assets/useWorkspaceSwitch-Cz0LYtfH.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +546 B 🔴 +484 B
assets/useLoad3d-Bm0VxQPw.js (removed) 859 B 🟢 -859 B 🟢 -426 B 🟢 -386 B
assets/useLoad3d-BpWs7Sxy.js (new) 859 B 🔴 +859 B 🔴 +424 B 🔴 +382 B
assets/audioUtils-Cfrr_ne3.js (new) 858 B 🔴 +858 B 🔴 +499 B 🔴 +421 B
assets/audioUtils-Cig1JiSK.js (removed) 858 B 🟢 -858 B 🟢 -499 B 🟢 -403 B
assets/useLoad3dViewer-CdGQRBU5.js (new) 838 B 🔴 +838 B 🔴 +409 B 🔴 +374 B
assets/useLoad3dViewer-COJ0CSE3.js (removed) 838 B 🟢 -838 B 🟢 -410 B 🟢 -376 B
assets/useCurrentUser-B-zBJ8BT.js (removed) 722 B 🟢 -722 B 🟢 -375 B 🟢 -329 B
assets/useCurrentUser-CM9ODlpQ.js (new) 722 B 🔴 +722 B 🔴 +370 B 🔴 +326 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CY7QMUhQ.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Clzmwvt4.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cddas8Zl.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-Cf_cbLlH.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 11 added / 11 removed

Vendor & Third-Party — 8.84 MB (baseline 8.84 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-DNX73mqE.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-DrYd4O-6.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BnCPTL0g.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DVmi2O2Z.js 388 kB 388 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-BnYkbQDM.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-DtiQ1dr9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-D2jVNnmE.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-MKpa1ZAW.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.86 MB (baseline 7.86 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-D3R3XjeQ.js (removed) 73.4 kB 🟢 -73.4 kB 🟢 -18.9 kB 🟢 -16.2 kB
assets/core-hZZKy0tn.js (new) 73.4 kB 🔴 +73.4 kB 🔴 +18.9 kB 🔴 +16.2 kB
assets/groupNode-_5CX3xYB.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.5 kB
assets/groupNode-LLcGe9QR.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-CmSDYHOv.js (new) 58.1 kB 🔴 +58.1 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/WidgetSelect-DkcqyPIc.js (removed) 58.1 kB 🟢 -58.1 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-CKNuFRpW.js (new) 46.3 kB 🔴 +46.3 kB 🔴 +8.65 kB 🔴 +7.51 kB
assets/SubscriptionRequiredDialogContentWorkspace-DxcHsjTX.js (removed) 46.3 kB 🟢 -46.3 kB 🟢 -8.65 kB 🟢 -7.54 kB
assets/WidgetPainter-CAggWrRE.js (new) 32.5 kB 🔴 +32.5 kB 🔴 +7.96 kB 🔴 +7.07 kB
assets/WidgetPainter-Cu0orGdI.js (removed) 32.5 kB 🟢 -32.5 kB 🟢 -7.96 kB 🟢 -7.07 kB
assets/Load3DControls-CQ62Malo.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/Load3DControls-D2_2rPP1.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.66 kB
assets/WorkspacePanelContent-BURACQF7.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.15 kB 🔴 +5.41 kB
assets/WorkspacePanelContent-BwpkW05H.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.15 kB 🟢 -5.39 kB
assets/SubscriptionRequiredDialogContent-C_lSxYvL.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/SubscriptionRequiredDialogContent-C-UXKX2H.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -6.57 kB 🟢 -5.76 kB
assets/Load3dViewerContent-Bids7HqM.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/Load3dViewerContent-V10fEi39.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.49 kB
assets/WidgetImageCrop-BkNJ7Tyq.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.51 kB 🟢 -4.85 kB
assets/WidgetImageCrop-CAUL5hZx.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.51 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-CuUPmGH4.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.06 kB 🔴 +4.46 kB
assets/SubscriptionPanelContentWorkspace-DFBuB7_m.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.05 kB 🟢 -4.46 kB
assets/CurrentUserPopoverWorkspace-D1Nib6hJ.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +4.88 kB 🔴 +4.35 kB
assets/CurrentUserPopoverWorkspace-G4aDfZp5.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -4.88 kB 🟢 -4.35 kB
assets/SignInContent-DYI_tFVj.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.76 kB 🔴 +4.16 kB
assets/SignInContent-njloRgFR.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.75 kB 🟢 -4.17 kB
assets/WidgetInputNumber-BzA9Shkp.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.22 kB
assets/WidgetInputNumber-quvsqqWW.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.75 kB 🔴 +4.22 kB
assets/WidgetRecordAudio-DbFA-hHF.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.95 kB 🟢 -4.42 kB
assets/WidgetRecordAudio-uW2aka6K.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.94 kB 🔴 +4.42 kB
assets/Load3D-5-o7d2Ad.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.51 kB
assets/Load3D-B-A1NyEz.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.5 kB
assets/load3d-BO65KaKA.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.19 kB 🟢 -3.63 kB
assets/load3d-Cuu9Icdl.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.63 kB
assets/AudioPreviewPlayer-D95aQ6nk.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.19 kB 🔴 +2.86 kB
assets/AudioPreviewPlayer-SSNbiWnh.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.87 kB
assets/changeTracker-DrwB9D5G.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.9 kB 🟢 -2.55 kB
assets/changeTracker-SvXCXxns.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.55 kB
assets/nodeTemplates-COw1iSFN.js (removed) 9.29 kB 🟢 -9.29 kB 🟢 -3.26 kB 🟢 -2.86 kB
assets/nodeTemplates-mWbS1a0Z.js (new) 9.29 kB 🔴 +9.29 kB 🔴 +3.26 kB 🔴 +2.86 kB
assets/InviteMemberDialogContent-Dy94Piqg.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/InviteMemberDialogContent-y9UycIFc.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2 kB
assets/Load3DConfiguration-De5hCbVS.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/Load3DConfiguration-kUVj-A4m.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/CreateWorkspaceDialogContent-2zlYdDrH.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CreateWorkspaceDialogContent-CEVt9bu-.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.73 kB
assets/onboardingCloudRoutes-BBLA3gLj.js (new) 5.41 kB 🔴 +5.41 kB 🔴 +1.83 kB 🔴 +1.6 kB
assets/onboardingCloudRoutes-DSZ8jBJc.js (removed) 5.41 kB 🟢 -5.41 kB 🟢 -1.84 kB 🟢 -1.6 kB
assets/FreeTierDialogContent-Cnl1oR-e.js (removed) 5.39 kB 🟢 -5.39 kB 🟢 -1.9 kB 🟢 -1.68 kB
assets/FreeTierDialogContent-OpFCzJiY.js (new) 5.39 kB 🔴 +5.39 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/EditWorkspaceDialogContent-C4yDdnI1.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.94 kB 🔴 +1.7 kB
assets/EditWorkspaceDialogContent-NrWny4tZ.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.95 kB 🟢 -1.7 kB
assets/ValueControlPopover-BBE2QCpx.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/ValueControlPopover-VShtSh6g.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/Preview3d-BfMOZbcR.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.56 kB 🔴 +1.37 kB
assets/Preview3d-CKQapS5A.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/CancelSubscriptionDialogContent-BxgJMLsS.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.78 kB 🔴 +1.56 kB
assets/CancelSubscriptionDialogContent-CwpEt7mo.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/DeleteWorkspaceDialogContent-BsMidhNI.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/DeleteWorkspaceDialogContent-CjwQM6ri.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.42 kB
assets/WidgetWithControl-a0H8YGam.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.78 kB 🟢 -1.59 kB
assets/WidgetWithControl-B-vYNwhX.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.77 kB 🔴 +1.59 kB
assets/LeaveWorkspaceDialogContent-CEzodR74.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/LeaveWorkspaceDialogContent-Gw-cKxpA.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.57 kB 🔴 +1.37 kB
assets/RemoveMemberDialogContent-BX8bntXV.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/RemoveMemberDialogContent-D7cd1QAT.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.52 kB 🔴 +1.33 kB
assets/RevokeInviteDialogContent-C0dUF9Vr.js (new) 3.95 kB 🔴 +3.95 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/RevokeInviteDialogContent-CJUYcDlW.js (removed) 3.95 kB 🟢 -3.95 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/InviteMemberUpsellDialogContent-_S-IfPF1.js (new) 3.82 kB 🔴 +3.82 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-DjaK0AQR.js (removed) 3.82 kB 🟢 -3.82 kB 🟢 -1.4 kB 🟢 -1.23 kB
assets/tierBenefits-B95BJmqr.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.17 kB
assets/tierBenefits-CFLw-FdQ.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.3 kB 🔴 +1.17 kB
assets/saveMesh-Cz_U-XLQ.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.45 kB 🟢 -1.29 kB
assets/saveMesh-FH-fAA1h.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.45 kB 🔴 +1.28 kB
assets/cloudSessionCookie--5h-EAOO.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -995 B
assets/cloudSessionCookie-CNPExkfY.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.09 kB 🔴 +979 B
assets/GlobalToast-B9m_0b57.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.06 kB
assets/GlobalToast-CCC-QMcS.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/SubscribeToRun-BclSDO4e.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +879 B
assets/SubscribeToRun-DMQIE4nS.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -896 B
assets/CloudRunButtonWrapper-D6gHfY9F.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +785 B 🔴 +693 B
assets/CloudRunButtonWrapper-njIR2X_t.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -790 B 🟢 -719 B
assets/previousFullPath-CNTiTiMS.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +651 B 🔴 +585 B
assets/previousFullPath-Dil5Rl_B.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -648 B 🟢 -573 B
assets/cloudBadges-CqIXsj_l.js (new) 1.36 kB 🔴 +1.36 kB 🔴 +700 B 🔴 +613 B
assets/cloudBadges-Rl6ndKHD.js (removed) 1.36 kB 🟢 -1.36 kB 🟢 -705 B 🟢 -619 B
assets/cloudSubscription-B3hc-C1K.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +655 B 🔴 +567 B
assets/cloudSubscription-CxNlgR5a.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -656 B 🟢 -571 B
assets/Load3D-Ber43Btd.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -497 B 🟢 -449 B
assets/Load3D-BNSClJAj.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +498 B 🔴 +446 B
assets/nightlyBadges-BpkynF5l.js (removed) 1 kB 🟢 -1 kB 🟢 -529 B 🟢 -472 B
assets/nightlyBadges-BW8XNQYL.js (new) 1 kB 🔴 +1 kB 🔴 +531 B 🔴 +477 B
assets/Load3dViewerContent-Bd9A4_jX.js (removed) 993 B 🟢 -993 B 🟢 -468 B 🟢 -418 B
assets/Load3dViewerContent-CWLuL4P8.js (new) 993 B 🔴 +993 B 🔴 +469 B 🔴 +420 B
assets/SubscriptionPanelContentWorkspace-BxPnxUb6.js (removed) 920 B 🟢 -920 B 🟢 -440 B 🟢 -382 B
assets/SubscriptionPanelContentWorkspace-DGEHe65S.js (new) 920 B 🔴 +920 B 🔴 +439 B 🔴 +381 B
assets/graphHasMissingNodes-Cj4MjWae.js (removed) 761 B 🟢 -761 B 🟢 -374 B 🟢 -320 B
assets/graphHasMissingNodes-VCAECPJu.js (new) 761 B 🔴 +761 B 🔴 +375 B 🔴 +317 B
assets/changeTracker-BE_GODnQ.js (new) 757 B 🔴 +757 B 🔴 +382 B 🔴 +341 B
assets/changeTracker-BrXx_g-i.js (removed) 757 B 🟢 -757 B 🟢 -386 B 🟢 -338 B
assets/WidgetLegacy-BPmzAbQI.js (new) 745 B 🔴 +745 B 🔴 +380 B 🔴 +358 B
assets/WidgetLegacy-C5mcOKAC.js (removed) 745 B 🟢 -745 B 🟢 -385 B 🟢 -342 B
assets/WidgetInputNumber-Bh6UIJdf.js (removed) 469 B 🟢 -469 B 🟢 -266 B 🟢 -229 B
assets/WidgetInputNumber-BPND66Fo.js (new) 469 B 🔴 +469 B 🔴 +265 B 🔴 +229 B
assets/AnimationControls-e1OB6oJR.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-BKNHRD6l.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-DQKI7wOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-D9MrYETV.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CuEodz4y.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B-AdR9IA.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CbkxT8K8.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CJGmjcIS.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CMaLgTTb.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cw07MMbJ.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D7EtdE6o.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DknEFpK3.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ds6WuXnw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dvq-F-mb.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-pUOay9Eo.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-u2AZ8xU4.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-htt0vt7m.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Bcia7X9c.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-DI0OPWoR.js 531 kB 531 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B_Wsy2zX.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgoL-5j1.js 171 kB 171 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BgP6H8V2.js 178 kB 178 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BHnRTSDV.js 153 kB 153 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BVdfMmEN.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CplVY01V.js 185 kB 185 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D3J6T63F.js 207 kB 207 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D8ud0Hl5.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DEL_HfgI.js 156 kB 156 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQyIQ6JB.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Y59dVx3K.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-Dqa2c7nZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DLiWNcHw.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BLQErkwF.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-NQGNpa4H.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-0crUoXWV.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-sJMrm9jB.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-4cn4-gG9.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B5k4lNE3.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BJNVnuoz.js 402 kB 402 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-bylbcqSc.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CU0-WQTL.js 489 kB 489 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D1sHTs_-.js 362 kB 362 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DedOJsaf.js 414 kB 414 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-QD8mdHRS.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Rqekep7N.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-rUOYRJo0.js 394 kB 394 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-wEnA0xcT.js 389 kB 389 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BIYdg9E5.js 3.65 kB 3.65 kB ⚪ 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-C_7cycpB.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CtKEtoXB.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DVkw5nPu.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-CbNGuSYA.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-DVSfLULk.js 2.01 kB 2.01 kB ⚪ 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-D-ZhKuWc.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-NeEr3XWN.js 586 B 586 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BYbwNME9.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-GzA4D-L-.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BtoXUSiF.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DCbDfd19.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-CIcV8pqy.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DZSYhGzO.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-oYMwrOjF.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-0CncUIzA.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-TvCt3ARa.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Cqdttdn1.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DN03zIgB.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-B7IIifV6.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CTquGMvp.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-Br_tbhcL.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 52 added / 52 removed

@github-actions
Copy link

github-actions bot commented Feb 27, 2026

⚡ Performance Report

Metric Baseline PR Δ
canvas-idle: style recalcs 124 124 +0% ⚪
canvas-idle: layouts 0 0 +0% ⚪
canvas-idle: task duration 366ms 413ms +13% 🟠
canvas-mouse-sweep: style recalcs 161 182 +13% 🟠
canvas-mouse-sweep: layouts 12 12 +0% ⚪
canvas-mouse-sweep: task duration 751ms 934ms +24% 🔴
dom-widget-clipping: style recalcs 43 40 -7% ⚪
dom-widget-clipping: layouts 0 0 +0% ⚪
dom-widget-clipping: task duration 372ms 366ms -2% ⚪
Raw data
{
  "timestamp": "2026-02-27T04:18:45.752Z",
  "gitSha": "6bbf55f504152226ec856a3d2f346695ca7eb3b6",
  "branch": "fix/node-replacement-detection",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2019.315000000006,
      "styleRecalcs": 124,
      "styleRecalcDurationMs": 24.5,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 412.57000000000005,
      "heapDeltaBytes": -3687004
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1961.7800000000045,
      "styleRecalcs": 182,
      "styleRecalcDurationMs": 61.297000000000004,
      "layouts": 12,
      "layoutDurationMs": 4.2620000000000005,
      "taskDurationMs": 934.118,
      "heapDeltaBytes": -2400208
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 585.0080000000162,
      "styleRecalcs": 40,
      "styleRecalcDurationMs": 12.628,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 366.143,
      "heapDeltaBytes": 6617468
    }
  ]
}

…ime state

- Replace has_errors/registered_node_types filter with targetTypes Set
  built from the user's explicit selection
- Eliminates dependency on transient flags and pack installation state
- Improve comment in MissingNodesContent.vue explaining error store sync
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 45f112e into main Feb 28, 2026
32 checks passed
@christian-byrne christian-byrne deleted the fix/node-replacement-detection branch February 28, 2026 12:06
@christian-byrne
Copy link
Contributor

note (non-blocking): the collectAllNodes predicate matches originalType against unsanitized targetTypes, but the fallback path (n.last_serialization.type is undefined) uses n.type which is sanitized - so types containing & < > " ' \ =would silently miss theSet.has()check. Super rare edge case (old serializations + special chars in type names), but could be closed withtargetTypes.has(originalType) || targetTypes.has(sanitizeNodeName(originalType))` if it ever comes up.

DrJKL pushed a commit that referenced this pull request Feb 28, 2026
## Summary

Fixes two bugs in the node replacement flow: placeholder detection
failing after workflow execution or pack reinstallation, and missing UI
sync in the Errors Tab when replacements are applied from the modal
dialog.

## Changes

- **Placeholder detection**: Node placeholder detection now matches
against `targetTypes` (derived from the replaceable node list built at
workflow load time) instead of relying on `has_errors` flag or
`registered_node_types` lookup. This ensures replacement works reliably
after execution (where `has_errors` gets cleared) and after pack
reinstallation (where the type becomes registered).
- **Modal → Errors Tab sync**: Added
`executionErrorStore.removeMissingNodesByType()` call in
`MissingNodesContent.vue` after replacement, so the Errors Tab reflects
changes immediately without requiring a page reload.

## Review Focus

- `collectAllNodes` predicate change in `useNodeReplacement.ts`: now
uses `targetTypes.has(originalType)` to find nodes by their original
serialized type. This is independent of runtime state like `has_errors`
or `registered_node_types`.
- `executionErrorStore.removeMissingNodesByType` call timing in
`MissingNodesContent.vue` — runs synchronously after
`replaceNodesInPlace` resolves, before auto-close logic.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9269-fix-node-replacement-fails-after-execution-and-modal-sync-3146d73d365081218398c961639b450f)
by [Unito](https://www.unito.io)
@christian-byrne christian-byrne added core/1.40 Backport PRs for core 1.40 needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch labels Mar 8, 2026
github-actions bot pushed a commit that referenced this pull request Mar 8, 2026
## Summary

Fixes two bugs in the node replacement flow: placeholder detection
failing after workflow execution or pack reinstallation, and missing UI
sync in the Errors Tab when replacements are applied from the modal
dialog.

## Changes

- **Placeholder detection**: Node placeholder detection now matches
against `targetTypes` (derived from the replaceable node list built at
workflow load time) instead of relying on `has_errors` flag or
`registered_node_types` lookup. This ensures replacement works reliably
after execution (where `has_errors` gets cleared) and after pack
reinstallation (where the type becomes registered).
- **Modal → Errors Tab sync**: Added
`executionErrorStore.removeMissingNodesByType()` call in
`MissingNodesContent.vue` after replacement, so the Errors Tab reflects
changes immediately without requiring a page reload.

## Review Focus

- `collectAllNodes` predicate change in `useNodeReplacement.ts`: now
uses `targetTypes.has(originalType)` to find nodes by their original
serialized type. This is independent of runtime state like `has_errors`
or `registered_node_types`.
- `executionErrorStore.removeMissingNodesByType` call timing in
`MissingNodesContent.vue` — runs synchronously after
`replaceNodesInPlace` resolves, before auto-close logic.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9269-fix-node-replacement-fails-after-execution-and-modal-sync-3146d73d365081218398c961639b450f)
by [Unito](https://www.unito.io)
@comfy-pr-bot
Copy link
Member

@jaeone94 Successfully backported to #9568

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Mar 8, 2026
christian-byrne pushed a commit that referenced this pull request Mar 8, 2026
…modal sync (#9568)

Backport of #9269 to `core/1.40`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9568-backport-core-1-40-fix-node-replacement-fails-after-execution-and-modal-sync-31d6d73d365081dc8affc0e1591df4cb)
by [Unito](https://www.unito.io)

Co-authored-by: jaeone94 <89377375+jaeone94@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:nodes core/1.40 Backport PRs for core 1.40 size:S This PR changes 10-29 lines, ignoring generated files. verified bug Something isn't working (confirmed by the team)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants