fix: show promoted advanced widgets on subgraph nodes - #14647
Conversation
🎨 Storybook: ✅ Built — View Storybook📦 Bundle: 8.85 MB gzip 🟢 -32 BDetailsSummary
Category Glance App Entry Points — 3.71 kB (baseline 3.71 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.37 MB (baseline 1.37 MB) • 🔴 +57 BGraph editor runtime, canvas, workflow orchestration
Status: 2 added / 2 removed / 1 unchanged Views & Navigation — 124 kB (baseline 124 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 13 added / 13 removed / 4 unchanged Panels & Settings — 566 kB (baseline 566 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 16 unchanged User & Accounts — 27.7 kB (baseline 27.7 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 6 added / 6 removed / 5 unchanged Editors & Dialogs — 125 kB (baseline 125 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 7 added / 7 removed / 1 unchanged UI Components — 67.1 kB (baseline 67.1 kB) • ⚪ 0 BReusable component library chunks
Status: 6 added / 6 removed / 8 unchanged Data & Services — 3.52 MB (baseline 3.52 MB) • 🔴 +89 BStores, services, APIs, and repositories
Status: 14 added / 14 removed / 3 unchanged Utilities & Hooks — 550 kB (baseline 550 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 18 added / 18 removed / 20 unchanged Vendor & Third-Party — 16.8 MB (baseline 16.8 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 18 unchanged Other — 14.2 MB (baseline 14.2 MB) • ⚪ 0 BBundles that do not match a named category
Status: 68 added / 68 removed / 217 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-08-17T04:21:16.387Z",
"gitSha": "b9acfa457df0b410b670ace7a8ba4fa697f38cd9",
"branch": "jaeone/fe-854-bug-promoted-advanced-inputs-do-not-appear-as-subgraph",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2030.6999999999675,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.064,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 483.3229999999999,
"heapDeltaBytes": 4795036,
"heapUsedBytes": 69339204,
"domNodes": 18,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 7.862000000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2066.3500000000568,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.337000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 525.601,
"heapDeltaBytes": 4769056,
"heapUsedBytes": 69255368,
"domNodes": 16,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 9.854999999999999,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2089.476999999988,
"styleRecalcs": 79,
"styleRecalcDurationMs": 50.241,
"layouts": 12,
"layoutDurationMs": 4.286,
"taskDurationMs": 993.353,
"heapDeltaBytes": -382628,
"heapUsedBytes": 63905336,
"domNodes": 63,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 125.413,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1860.922999999957,
"styleRecalcs": 78,
"styleRecalcDurationMs": 39.111000000000004,
"layouts": 12,
"layoutDurationMs": 3.6359999999999997,
"taskDurationMs": 898.974,
"heapDeltaBytes": -18527096,
"heapUsedBytes": 46069728,
"domNodes": 6,
"jsHeapTotalBytes": 24350720,
"scriptDurationMs": 115.76899999999998,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1772.1300000000042,
"styleRecalcs": 32,
"styleRecalcDurationMs": 24.229,
"layouts": 6,
"layoutDurationMs": 0.6739999999999999,
"taskDurationMs": 415.56499999999994,
"heapDeltaBytes": 8168800,
"heapUsedBytes": 72719124,
"domNodes": 78,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 11.357,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1754.5130000000881,
"styleRecalcs": 32,
"styleRecalcDurationMs": 20.091,
"layouts": 6,
"layoutDurationMs": 0.616,
"taskDurationMs": 407.3300000000001,
"heapDeltaBytes": 8027396,
"heapUsedBytes": 72539492,
"domNodes": 78,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 11.406000000000002,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "dom-widget-clipping",
"durationMs": 635.263000000009,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.252,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 400.02000000000004,
"heapDeltaBytes": -11140100,
"heapUsedBytes": 53458748,
"domNodes": 18,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 60.141,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 628.7150000000565,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.833999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 391.909,
"heapDeltaBytes": -10783948,
"heapUsedBytes": 53860768,
"domNodes": 20,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 57.516999999999996,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2018.500999999958,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.0489999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 594.841,
"heapDeltaBytes": 8620876,
"heapUsedBytes": 68779056,
"domNodes": -283,
"jsHeapTotalBytes": 2981888,
"scriptDurationMs": 13.018000000000002,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2036.8459999999686,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.882,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 722.356,
"heapDeltaBytes": 12794972,
"heapUsedBytes": 73063340,
"domNodes": -283,
"jsHeapTotalBytes": 2719744,
"scriptDurationMs": 17.579000000000004,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2129.505999999992,
"styleRecalcs": 69,
"styleRecalcDurationMs": 13.959,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1181.268,
"heapDeltaBytes": 7878148,
"heapUsedBytes": 68935296,
"domNodes": -283,
"jsHeapTotalBytes": 3960832,
"scriptDurationMs": 332.269,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2350.007000000005,
"styleRecalcs": 68,
"styleRecalcDurationMs": 14.669999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1302.699,
"heapDeltaBytes": 10252692,
"heapUsedBytes": 70954520,
"domNodes": -283,
"jsHeapTotalBytes": 3436544,
"scriptDurationMs": 355.782,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3201.1830000000145,
"styleRecalcs": 65,
"styleRecalcDurationMs": 13.810000000000002,
"layouts": 60,
"layoutDurationMs": 7.117999999999999,
"taskDurationMs": 1392.6680000000001,
"heapDeltaBytes": -3596696,
"heapUsedBytes": 58464284,
"domNodes": -288,
"jsHeapTotalBytes": 4030464,
"scriptDurationMs": 401.33399999999995,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3248.790999999983,
"styleRecalcs": 65,
"styleRecalcDurationMs": 14.579000000000002,
"layouts": 60,
"layoutDurationMs": 7.242999999999999,
"taskDurationMs": 1413.3029999999999,
"heapDeltaBytes": -553248,
"heapUsedBytes": 61495780,
"domNodes": -287,
"jsHeapTotalBytes": 2457600,
"scriptDurationMs": 385.885,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2039.8569999999836,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.716999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 653.0419999999999,
"heapDeltaBytes": 12784504,
"heapUsedBytes": 73886004,
"domNodes": -281,
"jsHeapTotalBytes": 2719744,
"scriptDurationMs": 17.512000000000008,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2046.3600000000497,
"styleRecalcs": 7,
"styleRecalcDurationMs": 12.761999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 633.516,
"heapDeltaBytes": 12599760,
"heapUsedBytes": 73710128,
"domNodes": -286,
"jsHeapTotalBytes": 2981888,
"scriptDurationMs": 17.106999999999996,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 612.6810000000091,
"styleRecalcs": 46,
"styleRecalcDurationMs": 10.232,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 417.6810000000001,
"heapDeltaBytes": -10320536,
"heapUsedBytes": 54183036,
"domNodes": 18,
"jsHeapTotalBytes": 25952256,
"scriptDurationMs": 123.182,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 573.5859999999775,
"styleRecalcs": 46,
"styleRecalcDurationMs": 9.868,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 394.10799999999995,
"heapDeltaBytes": -10312392,
"heapUsedBytes": 54372848,
"domNodes": 18,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 113.403,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2010.5890000000386,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.108999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 462.89200000000005,
"heapDeltaBytes": 4903796,
"heapUsedBytes": 69674960,
"domNodes": 20,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 6.331999999999999,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 1993.3089999999538,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.271999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 542.667,
"heapDeltaBytes": 5202956,
"heapUsedBytes": 69965932,
"domNodes": 18,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 9.734000000000002,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1717.8880000000163,
"styleRecalcs": 78,
"styleRecalcDurationMs": 35.885,
"layouts": 16,
"layoutDurationMs": 3.9290000000000003,
"taskDurationMs": 783.199,
"heapDeltaBytes": -4016960,
"heapUsedBytes": 60494620,
"domNodes": 66,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 88.03,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1727.4059999999736,
"styleRecalcs": 76,
"styleRecalcDurationMs": 40.386,
"layouts": 16,
"layoutDurationMs": 4.923,
"taskDurationMs": 834.318,
"heapDeltaBytes": -4239512,
"heapUsedBytes": 60226212,
"domNodes": 62,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 94.323,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 1401.0090000000446,
"styleRecalcs": 20,
"styleRecalcDurationMs": 32.181000000000004,
"layouts": 15,
"layoutDurationMs": 13.001999999999999,
"taskDurationMs": 997.8499999999999,
"heapDeltaBytes": -3986388,
"heapUsedBytes": 80244024,
"domNodes": 13673,
"jsHeapTotalBytes": 9175040,
"scriptDurationMs": 17.732,
"eventListeners": 2375,
"totalBlockingTimeMs": 146,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8494.338000000027,
"styleRecalcs": 249,
"styleRecalcDurationMs": 37.581,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4382.149,
"heapDeltaBytes": 9574320,
"heapUsedBytes": 69638932,
"domNodes": -284,
"jsHeapTotalBytes": 5009408,
"scriptDurationMs": 1070.185,
"eventListeners": -131,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8445.859999999924,
"styleRecalcs": 250,
"styleRecalcDurationMs": 37.456,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4338.527,
"heapDeltaBytes": 3436576,
"heapUsedBytes": 64211260,
"domNodes": -281,
"jsHeapTotalBytes": 3174400,
"scriptDurationMs": 1070.6419999999998,
"eventListeners": -163,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 18312.208,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 17260.492,
"heapDeltaBytes": -40121632,
"heapUsedBytes": 170367648,
"domNodes": -8312,
"jsHeapTotalBytes": -15142912,
"scriptDurationMs": 130.993,
"eventListeners": -16389,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.776666666666763,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 17612.180999999964,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16847.871000000003,
"heapDeltaBytes": -28204164,
"heapUsedBytes": 171104752,
"domNodes": -8312,
"jsHeapTotalBytes": -9379840,
"scriptDurationMs": 123.35,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.80000000000291
},
{
"name": "vue-large-graph-pan",
"durationMs": 22506.73999999998,
"styleRecalcs": 175,
"styleRecalcDurationMs": 29.02199999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 21888.704999999998,
"heapDeltaBytes": -29265248,
"heapUsedBytes": 168375212,
"domNodes": -8312,
"jsHeapTotalBytes": -12820480,
"scriptDurationMs": 457.13300000000004,
"eventListeners": -16383,
"totalBlockingTimeMs": 138,
"frameDurationMs": 18.333333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20938.987999999994,
"styleRecalcs": 172,
"styleRecalcDurationMs": 17.649000000000026,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20276.78,
"heapDeltaBytes": -47606708,
"heapUsedBytes": 162827012,
"domNodes": -8316,
"jsHeapTotalBytes": -12263424,
"scriptDurationMs": 400.3690000000001,
"eventListeners": -16383,
"totalBlockingTimeMs": 15,
"frameDurationMs": 17.776666666666763,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 455.73699999999917,
"styleRecalcs": 15,
"styleRecalcDurationMs": 27.503,
"layouts": 4,
"layoutDurationMs": 1.3850000000000002,
"taskDurationMs": 127.647,
"heapDeltaBytes": 4949524,
"heapUsedBytes": 68420152,
"domNodes": 128,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 8.717999999999998,
"eventListeners": 99,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "workflow-execution",
"durationMs": 464.30499999996755,
"styleRecalcs": 13,
"styleRecalcDurationMs": 20.209999999999997,
"layouts": 3,
"layoutDurationMs": 0.7159999999999999,
"taskDurationMs": 112.57999999999998,
"heapDeltaBytes": 4927104,
"heapUsedBytes": 68679556,
"domNodes": 123,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 7.871000000000001,
"eventListeners": 97,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
}🎭 Playwright: ✅ 1817 passed, 0 failed · 4 flaky📊 Browser Reports
|
🎭 Playwright: ⏳ Running... |
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe PR records promotion state in widget metadata and updates Vue widget visibility handling. Promoted advanced widgets remain visible when global advanced widgets are disabled. Unit, component, and Vue-mode browser tests cover the behavior. ChangesPromoted widget visibility
Estimated code review effort: 3 (Moderate) | ~20 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/renderer/extensions/vueNodes/composables/useProcessedWidgets.test.ts`:
- Around line 326-371: The new visibility tests must not be merged while
production behavior still fails: keep
src/renderer/extensions/vueNodes/composables/useProcessedWidgets.test.ts lines
326-371 in draft status until the production fix is implemented; land
browser_tests/tests/subgraph/subgraphPromotion.spec.ts lines 97-144 with that
same fix without marking it expected-to-fail or suppressing it. Run the relevant
tests and quality gates, and track the source defect in a dedicated follow-up
rather than masking it in test-only coverage.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 0e1c8a38-6b09-49e2-8582-3a39cbc86fc5
📒 Files selected for processing (2)
browser_tests/tests/subgraph/subgraphPromotion.spec.tssrc/renderer/extensions/vueNodes/composables/useProcessedWidgets.test.ts
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #14647 +/- ##
==========================================
+ Coverage 78.49% 78.83% +0.34%
==========================================
Files 1790 1880 +90
Lines 105515 116053 +10538
Branches 33298 37717 +4419
==========================================
+ Hits 82819 91485 +8666
- Misses 22251 24033 +1782
- Partials 445 535 +90
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 630 files with indirect coverage changes 🚀 New features to boost your workflow:
|
📄 Knowledge reviewDosu skipped reviewing this PR because your organization has used its |
…puts-do-not-appear-as-subgraph # Conflicts: # src/renderer/extensions/vueNodes/composables/useProcessedWidgets.test.ts
christian-byrne
left a comment
There was a problem hiding this comment.
Reviewed the diff plus the surrounding promotion machinery, and ran the unit suite and mutations locally. The fix is sound and the flag derivation is exact: input.widgetId is written only on subgraph host inputs (SubgraphNode.ts:653, promotionUtils.ts:326) and deleted on demotion and rebind, so promoted and promotedInputWidgets can never disagree. hidden is still short-circuited, and the ADR 0009 black-box claim holds since nothing in the visibility path walks the interior.
Two things I suspected and confirmed are NOT problems, recorded so nobody re-litigates them:
- The classic canvas is unaffected and was never broken.
LGraphNode.isWidgetVisible(:4033) reads the top-levelwidget.advanced, which_projectPromotedWidgetnever sets, while the Vue path readsoptions.advancedfrom the cloned interior options. This PR aligns Vue with canvas rather than diverging from it. - Un-promotion leaves no stale flag.
_clearPromotedWidgetdoes not clearwidgetId, butremoving-inputdrops the whole slot, so no live input survives with a stale id.
Three findings that could not be anchored inline because their lines are not in the diff:
issue: src/components/builder/AppModeWidgetList.vue:80 — this PR makes a broken App Mode state reachable.
matchingWidget.slotMetadata = undefined strips the new promoted flag before useProcessedWidgets runs, so the advanced filter re-applies and visibleWidgets comes back empty. Pre-fix the widget was unrenderable on the node, and selection is a click on a rendered widget (AppBuilder.vue:147), so it could never be selected. Now it can be, and the App Mode entry renders a labelled row with a rename popover and no control.
Preserving the flag rather than nulling the object would avoid it:
matchingWidget.slotMetadata = slotMetadata && { ...slotMetadata, linked: false }question: src/renderer/extensions/vueNodes/composables/useProcessedWidgets.ts:338 — permanent advanced ring on the host node.
ProcessedWidget.advanced stays true, so the promoted widget keeps the ring ring-component-node-widget-advanced treatment, and the host node has no advanced toggle that could ever turn it off. Is that intended? Neither the unit test nor the E2E asserts on it either way, so it is currently unverified in both directions.
nitpick (non-blocking): useProcessedWidgets.test.ts:176 — stale name after the rename.
Reads "keeps advanced widgets visible when linked and showAdvanced is false" while the third parameter is now ignoreAdvanced. It covers both branches but is named for one.
- keep selected advanced widgets visible in app mode - pin promoted slot metadata at its producer boundary - simplify and clarify promoted visibility coverage
|
Addressed the unanchored review items in the follow-up commit:
|
65bef75
|
Merge queue follow-up: this was a semantic conflict with #15057, which moved Testing Pinia initialization into the shared Vitest setup and removed file-local imports and setup. The queue merge retained the newly added local beforeEach after those imports were removed. Pushed 65bef75 to remove the redundant local setup and rely on the shared test setup. Verification:
The new commit dismissed the previous approval, so the PR is ready for re-review. Created by Codex |
## Summary Forward-ports the promoted advanced-widget visibility invariant from #14647 to the store-backed ECS rendering path. Promoted host inputs are user-selected public controls and bypass only the advanced-widget filter. Explicitly hidden widgets remain hidden. ## Red-green verification - `4e2084d8a0` adds canvas and App Mode regressions; both fail on the ECS base because visibility only recognizes external links. - `796648dcae` derives promotion from the host input's canonical `widgetId`; all regressions pass. ## Test plan - [x] Confirm canvas regression fails before the fix - [x] Confirm App Mode regression fails before the fix - [x] Confirm targeted unit suite passes after the fix (39 tests) - [x] Run typecheck, lint, and format checks --------- Co-authored-by: Amp <amp@ampcode.com>
ELI5
A control moved to the outside of a grouped node should stay usable, even if it was originally marked advanced. This change keeps that promoted control visible and connectable while leaving ordinary advanced controls hidden as configured.
Motivation
Promoting an advanced widget from inside a subgraph preserved its advanced flag on the outer node. When global advanced widgets were disabled, the promoted control was filtered out even though the outer subgraph node has no equivalent per-node reveal path, preventing the promoted input from being used there.
Provenance
pnpm test:unit src/renderer/extensions/vueNodes/composables/useProcessedWidgets.test.ts: 35 passed; targeted Playwright regression: 1 passed;pnpm typecheck, browser typecheck, staged lint/format checks, andpnpm knippassed on the current head; CI Unit and E2E workflows passed on the GREEN commit.Reviewer context
Summary
advanced: true.widgetId, without using or traversing interior source metadata for visibility.hiddenbehavior and the existing visibility rules for ordinary advanced and linked widgets.Changes
promotedflag into widget slot metadata and lets it bypass only the advanced-visibility filter.Review Focus
SubgraphInputsurface, consistent with ADR 0009's black-box boundary.Red-green proof
3cc5ad9d72test: add failing coverage for promoted advanced widgetsvisible: falsemax_shiftlabel was absent736f2d8b32fix: show promoted advanced widgets on subgraph nodesThe follow-up commit
0c9529e999replaces the GREEN commit's transitional source-metadata signal with host-scoped promotion metadata while preserving the proven behavior.Test plan
Screenshots