Skip to content

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Nov 2, 2025

Fixes an issue where combo widgets in Vue nodes would not display values from deserialized workflows if those values were not in the current options list (e.g., deleted model files, removed checkpoints). This brings Vue nodes behavior in line with legacy canvas rendering, which always displays the current value regardless of whether it exists in the options list.

┆Issue is synchronized with this Notion page by Unito

Fixes an issue where combo widgets in Vue nodes would not display values
from deserialized workflows if those values were not in the current options
list (e.g., deleted model files, removed checkpoints). This brings Vue nodes
behavior in line with legacy canvas rendering, which always displays the
current value regardless of whether it exists in the options.
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Nov 2, 2025
@github-actions
Copy link

github-actions bot commented Nov 2, 2025

🎨 Storybook Build Status

Build failed!

⏰ Completed at: 11/03/2025, 02:33:29 AM UTC

🔗 Links


⚠️ Please check the workflow logs for error details.

@github-actions
Copy link

github-actions bot commented Nov 2, 2025

🎭 Playwright Test Results

🕵🏻 No test results found

⏰ Completed at: 11/03/2025, 02:35:54 AM UTC

📊 Test Reports by Browser

  • chromium: Deployment failed
  • chromium-2x: Deployment failed
  • chromium-0.5x: Deployment failed
  • mobile-chrome: Deployment failed

🎉 Click on the links above to view detailed test results for each browser configuration.

@github-actions
Copy link

github-actions bot commented Nov 2, 2025

Bundle Size Report

Summary

  • Raw size: 12.2 MB baseline 12.2 MB — 🔴 +502 B
  • Gzip: 2.48 MB baseline 2.48 MB — 🔴 +131 B
  • Brotli: 1.95 MB baseline 1.95 MB — 🔴 +75 B
  • Bundles: 58 current • 58 baseline • 13 added / 13 removed

Category Glance
App Entry Points 🔴 +502 B (3.27 MB) · Vendor & Third-Party ⚪ 0 B (5.32 MB) · Other ⚪ 0 B (2.55 MB) · Graph Workspace ⚪ 0 B (725 kB) · Panels & Settings ⚪ 0 B (295 kB) · UI Components ⚪ 0 B (12.5 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.27 MB (baseline 3.27 MB) • 🔴 +502 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-ZFYtmzbM.js (new) 2.89 MB 🔴 +2.89 MB 🔴 +597 kB 🔴 +451 kB
assets/index-BZggncZk.js (removed) 2.89 MB 🟢 -2.89 MB 🟢 -597 kB 🟢 -451 kB
assets/index-Bb63HmF1.js (removed) 381 kB 🟢 -381 kB 🟢 -76.6 kB 🟢 -62.1 kB
assets/index-D_DpMeON.js (new) 381 kB 🔴 +381 kB 🔴 +76.6 kB 🔴 +62 kB
assets/index-DrqTP7cg.js (new) 1.75 kB 🔴 +1.75 kB 🔴 +576 B 🔴 +485 B
assets/index-kv9ypXUS.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -575 B 🟢 -487 B

Status: 3 added / 3 removed

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

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-C0SdCvPN.js (new) 725 kB 🔴 +725 kB 🔴 +142 kB 🔴 +109 kB
assets/GraphView-D2AIGM-Z.js (removed) 725 kB 🟢 -725 kB 🟢 -142 kB 🟢 -109 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-CQIyS4_M.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.48 kB 🟢 -2.17 kB
assets/UserSelectView-D63Hx0X0.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.48 kB 🔴 +2.17 kB

Status: 1 added / 1 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-Dh6lyCtk.js (new) 22.9 kB 🔴 +22.9 kB 🔴 +5.45 kB 🔴 +4.76 kB
assets/CreditsPanel-DoyHC-Vw.js (removed) 22.9 kB 🟢 -22.9 kB 🟢 -5.45 kB 🟢 -4.76 kB
assets/KeybindingPanel-BGWdanCO.js (new) 15.3 kB 🔴 +15.3 kB 🔴 +3.78 kB 🔴 +3.33 kB
assets/KeybindingPanel-BxskE51s.js (removed) 15.3 kB 🟢 -15.3 kB 🟢 -3.77 kB 🟢 -3.33 kB
assets/ExtensionPanel-B5M7pxqV.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +2.84 kB 🔴 +2.49 kB
assets/ExtensionPanel-DS0d618I.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -2.84 kB 🟢 -2.49 kB
assets/AboutPanel-CMDtsrBl.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.67 kB 🔴 +2.35 kB
assets/AboutPanel-F3Wz-ooN.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.67 kB 🟢 -2.34 kB
assets/ServerConfigPanel-CPsQCtDQ.js (removed) 8.23 kB 🟢 -8.23 kB 🟢 -2.17 kB 🟢 -1.91 kB
assets/ServerConfigPanel-DIo9hz2M.js (new) 8.23 kB 🔴 +8.23 kB 🔴 +2.18 kB 🔴 +1.91 kB
assets/UserPanel-3sM6z2u2.js (removed) 7.94 kB 🟢 -7.94 kB 🟢 -2.07 kB 🟢 -1.81 kB
assets/UserPanel-h1yfBOCE.js (new) 7.94 kB 🔴 +7.94 kB 🔴 +2.07 kB 🔴 +1.81 kB
assets/settings-B-df0dZe.js 20.7 kB 20.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CI6OKvJn.js 22.9 kB 22.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CXGVj_nD.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DfQ6dSJj.js 31.6 kB 31.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DJ2QgDzm.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRNLPMG6.js 23.7 kB 23.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DVVycxDc.js 19.9 kB 19.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-G6Dybj1b.js 24.1 kB 24.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-M6_GZccG.js 26 kB 26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-C-29AqC2.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -2.78 kB 🟢 -2.46 kB
assets/ComfyQueueButton-CGp5eSbR.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +2.78 kB 🔴 +2.46 kB
assets/UserAvatar.vue_vue_type_script_setup_true_lang-CY-Afo9h.js 1.29 kB 1.29 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

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

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-CHsYaloY.js (new) 8.61 kB 🔴 +8.61 kB 🔴 +2.08 kB 🔴 +1.78 kB
assets/keybindingService-D5Pw9HOe.js (removed) 8.61 kB 🟢 -8.61 kB 🟢 -2.08 kB 🟢 -1.78 kB
assets/serverConfigStore-BXxesUPS.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 5.32 MB (baseline 5.32 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-DTJaZ2wB.js 3.22 MB 3.22 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-JDoAqkQm.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BovKm-bo.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-CE9hyBb0.js 92.4 kB 92.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 2.55 MB (baseline 2.55 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/commands-B2KZRBmX.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bw-ckyga.js 13.9 kB 13.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_NmM85I.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CuozCW4W.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DGfVUJCR.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dOJNDogK.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiE551e.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Fw7mvqSy.js 13.1 kB 13.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-FXnO1W4Q.js 13.2 kB 13.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bgu6_Hvd.js 59.5 kB 59.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bv0L0qvp.js 93 kB 93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C3Doz3n_.js 67.6 kB 67.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C7eBl607.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CHiV9ds2.js 76.4 kB 76.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CIc79Nts.js 68.5 kB 68.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DK5LmuBm.js 58.8 kB 58.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-J1nit7cj.js 66.3 kB 66.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-W97XgvAQ.js 80.4 kB 80.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-8Ef8lY1m.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BdF8EiZl.js 200 kB 200 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bv9Y8Cvp.js 229 kB 229 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-cMdB_wHv.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CvNWbbtX.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CwDWxzVz.js 215 kB 215 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CyPAVHpA.js 191 kB 191 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D6QTD6bJ.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DKn6VmRJ.js 192 kB 192 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

@github-actions
Copy link

github-actions bot commented Nov 2, 2025

🔧 Auto-fixes Applied

This PR has been automatically updated to fix linting and formatting issues.

⚠️ Important: Your local branch is now behind. Run git pull before making additional changes to avoid conflicts.

Changes made:

  • ESLint auto-fixes
  • Prettier formatting

@christian-byrne christian-byrne added the claude-review Add to trigger a PR code review from Claude Code label Nov 3, 2025
): T[] {
// Early return for empty/null values
if (currentValue == null || currentValue === '') {
return [...options]
Copy link

Choose a reason for hiding this comment

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

[performance] medium Priority

Issue: The ensureValueInOptions function creates new arrays on every computed execution, even when no changes occur
Context: In both WidgetSelectDefault.vue and WidgetSelectDropdown.vue, the computed selectOptions/inputItems will recreate arrays on every re-render, causing unnecessary memory allocations
Suggestion: Consider memoizing the result or adding a check to avoid array recreation when values haven't changed

currentValue: T | undefined | null
): T[] {
// Early return for empty/null values
if (currentValue == null || currentValue === '') {
Copy link

Choose a reason for hiding this comment

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

[quality] low Priority

Issue: The empty string check may not be appropriate for numeric types
Context: The function handles both string and number types but checks for empty string ('') even for numeric values, which could cause unexpected behavior for 0 values
Suggestion: Consider separating the empty checks by type: '(currentValue == null || (typeof currentValue === "string" && currentValue === ""))'

const result = ensureValueInOptions(options, 99)

expect(result).toEqual([99, 1, 2, 3])
})
Copy link

Choose a reason for hiding this comment

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

[quality] low Priority

Issue: Test coverage missing for numeric 0 edge case
Context: The tests verify numeric values but don't test the edge case where currentValue is 0, which might be treated as falsy in the empty check condition
Suggestion: Add test case: 'it("handles numeric zero value", () => { const result = ensureValueInOptions([1,2,3], 0); expect(result).toEqual([0,1,2,3]); })'

// Should not duplicate the value
expect(selectOptions).toEqual(options)
expect(
selectOptions.filter((opt: string) => opt === 'option2')
Copy link

Choose a reason for hiding this comment

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

[quality] low Priority

Issue: Type annotation added for TS7006 fix but inconsistent application across codebase
Context: The recent fix added explicit type annotation 'as string[]' but this pattern should be consistent with other similar lines in the file
Suggestion: Consider applying the same type annotation pattern to line 211 'selectOptions.filter((opt: string) => opt === "option2")' for consistency

Copy link

@claude claude bot left a comment

Choose a reason for hiding this comment

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

Comprehensive PR Review

This review is generated by Claude. It may not always be accurate, as with human reviewers. If you believe that any of the comments are invalid or incorrect, please state why for each. For others, please implement the changes in one way or another.

Review Summary

PR: [bugfix] Fix Vue nodes combo widgets not displaying deserialized values (#6545)
Impact: 194 additions, 2 deletions across 5 files

Issue Distribution

  • Critical: 0
  • High: 0
  • Medium: 1
  • Low: 3

Category Breakdown

  • Architecture: 0 issues
  • Security: 0 issues
  • Performance: 1 issues
  • Code Quality: 3 issues

Key Findings

Architecture & Design

The PR follows Vue 3 Composition API patterns correctly and maintains consistency with existing widget architecture. The new ensureValueInOptions utility is appropriately placed and follows the project's separation of concerns. The solution elegantly addresses the deserialized workflow value display issue by preserving legacy behavior while maintaining Vue component reactivity.

Security Considerations

No security vulnerabilities identified. The function properly handles input validation and type checking without introducing XSS or injection risks.

Performance Impact

The main performance concern is the repeated array creation in computed properties. While functional and correct, the ensureValueInOptions function creates new arrays on every computed execution, which could cause unnecessary memory allocations during frequent re-renders.

Integration Points

The changes maintain backward compatibility and correctly integrate with existing Vue widget infrastructure. The solution preserves the behavior users expect when loading workflows with missing assets (deleted models, removed files) by displaying the deserialized values even when not in current options lists.

Positive Observations

  • Comprehensive test coverage with excellent edge case handling
  • Clean, readable implementation with clear documentation
  • Proper TypeScript typing with generic constraints
  • Follows established patterns for Vue widget components
  • Maintains immutability by returning new arrays instead of mutating inputs
  • Good separation of concerns with utility function extraction
  • Excellent commit message explaining the problem and solution

References

  • Repository Architecture Guide
  • Frontend Standards
  • Security Guidelines

Next Steps

  1. Address the performance optimization for array recreation if needed
  2. Consider the type safety improvement for numeric zero handling
  3. Add the suggested test case for numeric zero edge case
  4. Verify consistent TypeScript annotation patterns

This is a comprehensive automated review. The PR successfully addresses the stated issue with high code quality. The implementation is solid and the minor suggestions are optimizations rather than blocking issues.

@github-actions github-actions bot removed the claude-review Add to trigger a PR code review from Claude Code label Nov 3, 2025
@christian-byrne
Copy link
Contributor Author

christian-byrne commented Nov 3, 2025

All 7 Playwright test failures are due to the widget now showing the value from the de-serialized data (how litegraph works).

…odifying options

Simplified the approach to show deserialized workflow values that are not in
the current options list. Instead of adding missing values to the options array,
we now display them as the placeholder text. This is cleaner, avoids array
manipulation, and addresses performance concerns from code review.
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Nov 3, 2025
@christian-byrne
Copy link
Contributor Author

Refactored Approach

I've simplified the implementation based on the suggestion. Instead of modifying the options array to include deserialized values, we now display them as the placeholder text when they're not in the current options list.

Changes:

  • Removed utility function and tests (simpler approach doesn't need them)
  • No array manipulation - options remain unchanged
  • Deserialized values (e.g., deleted models) are shown as placeholder text
  • Addresses all performance concerns from the code review

This maintains the legacy behavior while being cleaner and more performant.

@github-actions
Copy link

github-actions bot commented Nov 3, 2025

🔧 Auto-fixes Applied

This PR has been automatically updated to fix linting and formatting issues.

⚠️ Important: Your local branch is now behind. Run git pull before making additional changes to avoid conflicts.

Changes made:

  • ESLint auto-fixes
  • Prettier formatting

@christian-byrne
Copy link
Contributor Author

Replaced by #6555

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

Labels

size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants