fix: gate version-update notifications on the ShowVersionUpdates setting (default off on local installs)#13171
fix: gate version-update notifications on the ShowVersionUpdates setting (default off on local installs)#13171Kosinkadink wants to merge 5 commits into
Conversation
The Comfy.Notification.ShowVersionUpdates default now reads the show_version_updates server feature flag (defaulting to true), letting launchers like ComfyUI Desktop change whether new-release notifications show by default. The user setting still overrides it. Amp-Thread-ID: https://ampcode.com/threads/T-019f0347-dc00-723a-a4d2-558539329035 Co-authored-by: Amp <amp@ampcode.com>
🎨 Storybook: ✅ Built — View Storybook🎭 Playwright: ✅ 1692 passed, 0 failed · 2 flaky📊 Browser Reports
📦 Bundle: 7.78 MB gzip 🔴 +42 BDetailsSummary
Category Glance App Entry Points — 47.8 kB (baseline 47.8 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.27 MB (baseline 1.27 MB) • 🔴 +95 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 98 kB (baseline 98 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 9 added / 9 removed / 3 unchanged Panels & Settings — 547 kB (baseline 547 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 11 added / 11 removed / 16 unchanged User & Accounts — 29.1 kB (baseline 29.1 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 7 added / 7 removed / 3 unchanged Editors & Dialogs — 117 kB (baseline 117 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 4 added / 4 removed / 1 unchanged UI Components — 57.5 kB (baseline 57.5 kB) • ⚪ 0 BReusable component library chunks
Status: 5 added / 5 removed / 8 unchanged Data & Services — 270 kB (baseline 270 kB) • 🔴 +76 BStores, services, APIs, and repositories
Status: 13 added / 13 removed / 3 unchanged Utilities & Hooks — 3.39 MB (baseline 3.39 MB) • 🔴 +69 BHelpers, composables, and utility bundles
Status: 16 added / 16 removed / 18 unchanged Vendor & Third-Party — 15.3 MB (baseline 15.3 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 11.7 MB (baseline 11.7 MB) • ⚪ 0 BBundles that do not match a named category
Status: 67 added / 67 removed / 98 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-07-09T02:23:08.672Z",
"gitSha": "2ac2edd3a77fab50a1ed5169289e6690944d8e07",
"branch": "feature/show-version-updates-flag",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2028.8989999999956,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.683000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 448.1460000000001,
"heapDeltaBytes": -1950500,
"heapUsedBytes": 56430304,
"domNodes": 16,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 22.558000000000003,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2051.906000000031,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.934,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 506.33399999999995,
"heapDeltaBytes": 18798152,
"heapUsedBytes": 70905536,
"domNodes": -292,
"jsHeapTotalBytes": 15855616,
"scriptDurationMs": 24.902,
"eventListeners": -191,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1850.3990000000385,
"styleRecalcs": 72,
"styleRecalcDurationMs": 39.254999999999995,
"layouts": 12,
"layoutDurationMs": 3.682,
"taskDurationMs": 847.661,
"heapDeltaBytes": -4523604,
"heapUsedBytes": 47509184,
"domNodes": -275,
"jsHeapTotalBytes": 16642048,
"scriptDurationMs": 127.44,
"eventListeners": -191,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1826.3979999999833,
"styleRecalcs": 73,
"styleRecalcDurationMs": 39.382,
"layouts": 12,
"layoutDurationMs": 3.743,
"taskDurationMs": 836.717,
"heapDeltaBytes": -3600688,
"heapUsedBytes": 53479712,
"domNodes": 55,
"jsHeapTotalBytes": 18612224,
"scriptDurationMs": 133.137,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1745.0569999999743,
"styleRecalcs": 30,
"styleRecalcDurationMs": 18.988,
"layouts": 6,
"layoutDurationMs": 0.7229999999999999,
"taskDurationMs": 415.41900000000004,
"heapDeltaBytes": 9211504,
"heapUsedBytes": 61191816,
"domNodes": -241,
"jsHeapTotalBytes": 5632000,
"scriptDurationMs": 29.155,
"eventListeners": -176,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1751.6920000000482,
"styleRecalcs": 30,
"styleRecalcDurationMs": 18.450000000000003,
"layouts": 6,
"layoutDurationMs": 0.6660000000000001,
"taskDurationMs": 397.933,
"heapDeltaBytes": 867748,
"heapUsedBytes": 53683668,
"domNodes": -241,
"jsHeapTotalBytes": 6942720,
"scriptDurationMs": 27.612000000000002,
"eventListeners": -178,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "dom-widget-clipping",
"durationMs": 628.594000000021,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.494,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 427.2130000000001,
"heapDeltaBytes": -22705568,
"heapUsedBytes": 46757084,
"domNodes": -281,
"jsHeapTotalBytes": 4870144,
"scriptDurationMs": 58.711,
"eventListeners": -193,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 600.6669999999872,
"styleRecalcs": 13,
"styleRecalcDurationMs": 15.566,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 387.747,
"heapDeltaBytes": 7453624,
"heapUsedBytes": 66283380,
"domNodes": 22,
"jsHeapTotalBytes": 19136512,
"scriptDurationMs": 61.643,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2034.45499999998,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.764999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 639.07,
"heapDeltaBytes": -8581464,
"heapUsedBytes": 58292440,
"domNodes": -269,
"jsHeapTotalBytes": -2367488,
"scriptDurationMs": 108.925,
"eventListeners": -189,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2020.2339999999595,
"styleRecalcs": 10,
"styleRecalcDurationMs": 11.649,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 669.34,
"heapDeltaBytes": -46264,
"heapUsedBytes": 60253516,
"domNodes": -265,
"jsHeapTotalBytes": 3948544,
"scriptDurationMs": 111.579,
"eventListeners": -116,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2123.9739999999756,
"styleRecalcs": 69,
"styleRecalcDurationMs": 18.537,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1159.0629999999999,
"heapDeltaBytes": 14347624,
"heapUsedBytes": 82594060,
"domNodes": -269,
"jsHeapTotalBytes": -1114112,
"scriptDurationMs": 403.87800000000004,
"eventListeners": -189,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2089.3089999999575,
"styleRecalcs": 67,
"styleRecalcDurationMs": 16.541,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1159.515,
"heapDeltaBytes": 2369152,
"heapUsedBytes": 55033976,
"domNodes": -281,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 409.745,
"eventListeners": -189,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3170.7460000000083,
"styleRecalcs": 66,
"styleRecalcDurationMs": 20.538999999999998,
"layouts": 60,
"layoutDurationMs": 7.987999999999999,
"taskDurationMs": 1365.795,
"heapDeltaBytes": 14418132,
"heapUsedBytes": 69540200,
"domNodes": 14,
"jsHeapTotalBytes": 7340032,
"scriptDurationMs": 511.2220000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3168.5380000000123,
"styleRecalcs": 62,
"styleRecalcDurationMs": 16.394999999999996,
"layouts": 60,
"layoutDurationMs": 8.005999999999998,
"taskDurationMs": 1384.463,
"heapDeltaBytes": 13082616,
"heapUsedBytes": 67132824,
"domNodes": -285,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 515.037,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2061.2299999999664,
"styleRecalcs": 7,
"styleRecalcDurationMs": 7.577,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 604.923,
"heapDeltaBytes": -2668284,
"heapUsedBytes": 59246600,
"domNodes": -276,
"jsHeapTotalBytes": -1089536,
"scriptDurationMs": 111.061,
"eventListeners": -189,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2030.856999999969,
"styleRecalcs": 9,
"styleRecalcDurationMs": 12.163,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 691.276,
"heapDeltaBytes": -9024784,
"heapUsedBytes": 64358392,
"domNodes": 18,
"jsHeapTotalBytes": 8007680,
"scriptDurationMs": 114.505,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 592.4969999999803,
"styleRecalcs": 48,
"styleRecalcDurationMs": 11.625000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 372.344,
"heapDeltaBytes": -12105660,
"heapUsedBytes": 53847888,
"domNodes": 22,
"jsHeapTotalBytes": 20471808,
"scriptDurationMs": 118.234,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 623.4410000000707,
"styleRecalcs": 45,
"styleRecalcDurationMs": 10.209,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 436.73100000000005,
"heapDeltaBytes": -22173056,
"heapUsedBytes": 47518052,
"domNodes": -281,
"jsHeapTotalBytes": 6180864,
"scriptDurationMs": 130.136,
"eventListeners": -187,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-idle",
"durationMs": 2034.858999999983,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.288999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 483.03799999999995,
"heapDeltaBytes": -5527352,
"heapUsedBytes": 47207932,
"domNodes": -291,
"jsHeapTotalBytes": 16904192,
"scriptDurationMs": 21.450000000000003,
"eventListeners": -191,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2014.300999999989,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.411000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 472.82199999999995,
"heapDeltaBytes": 1852596,
"heapUsedBytes": 66588376,
"domNodes": 20,
"jsHeapTotalBytes": 22568960,
"scriptDurationMs": 23.605999999999995,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1732.0650000000342,
"styleRecalcs": 76,
"styleRecalcDurationMs": 42.81,
"layouts": 16,
"layoutDurationMs": 4.929,
"taskDurationMs": 749.749,
"heapDeltaBytes": -6148524,
"heapUsedBytes": 59681800,
"domNodes": 63,
"jsHeapTotalBytes": 20471808,
"scriptDurationMs": 102.48,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1723.203000000069,
"styleRecalcs": 75,
"styleRecalcDurationMs": 40.397000000000006,
"layouts": 16,
"layoutDurationMs": 4.351,
"taskDurationMs": 790.081,
"heapDeltaBytes": -17266216,
"heapUsedBytes": 52279940,
"domNodes": -242,
"jsHeapTotalBytes": 20860928,
"scriptDurationMs": 101.858,
"eventListeners": -191,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-transition-enter",
"durationMs": 1433.0090000000268,
"styleRecalcs": 18,
"styleRecalcDurationMs": 34.582,
"layouts": 14,
"layoutDurationMs": 16.717,
"taskDurationMs": 928.7379999999998,
"heapDeltaBytes": 4607572,
"heapUsedBytes": 81072552,
"domNodes": 13673,
"jsHeapTotalBytes": 17039360,
"scriptDurationMs": 43.64399999999999,
"eventListeners": 2533,
"totalBlockingTimeMs": 178,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8227.444999999989,
"styleRecalcs": 250,
"styleRecalcDurationMs": 55.61600000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4012.715,
"heapDeltaBytes": 21807788,
"heapUsedBytes": 81184192,
"domNodes": -265,
"jsHeapTotalBytes": 7794688,
"scriptDurationMs": 1260.8619999999999,
"eventListeners": -112,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8215.323000000011,
"styleRecalcs": 250,
"styleRecalcDurationMs": 56.188,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4078.182,
"heapDeltaBytes": -326276,
"heapUsedBytes": 71445720,
"domNodes": 18,
"jsHeapTotalBytes": 16048128,
"scriptDurationMs": 1325.083,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 13735.981000000038,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13696.615,
"heapDeltaBytes": -40130608,
"heapUsedBytes": 164575940,
"domNodes": -3302,
"jsHeapTotalBytes": 20680704,
"scriptDurationMs": 605.482,
"eventListeners": -16374,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 13347.240000000056,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13305.443999999998,
"heapDeltaBytes": -32562684,
"heapUsedBytes": 170840032,
"domNodes": -3302,
"jsHeapTotalBytes": 21729280,
"scriptDurationMs": 586.029,
"eventListeners": -16374,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333237,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15542.456000000017,
"styleRecalcs": 79,
"styleRecalcDurationMs": 19.764000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15507.677,
"heapDeltaBytes": -48530608,
"heapUsedBytes": 176130176,
"domNodes": -3300,
"jsHeapTotalBytes": 10371072,
"scriptDurationMs": 857.1059999999999,
"eventListeners": -16376,
"totalBlockingTimeMs": 9,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 15517.241000000013,
"styleRecalcs": 82,
"styleRecalcDurationMs": 21.461999999999982,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15489.527000000002,
"heapDeltaBytes": -35777656,
"heapUsedBytes": 170784840,
"domNodes": -3300,
"jsHeapTotalBytes": 1806336,
"scriptDurationMs": 912.717,
"eventListeners": -16374,
"totalBlockingTimeMs": 55,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 461.2989999999968,
"styleRecalcs": 18,
"styleRecalcDurationMs": 26.364,
"layouts": 6,
"layoutDurationMs": 1.7389999999999999,
"taskDurationMs": 128.138,
"heapDeltaBytes": 5178512,
"heapUsedBytes": 69789588,
"domNodes": 166,
"jsHeapTotalBytes": 5505024,
"scriptDurationMs": 21.935999999999996,
"eventListeners": 69,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.669999999999998,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "workflow-execution",
"durationMs": 477.5839999999789,
"styleRecalcs": 16,
"styleRecalcDurationMs": 24.282999999999998,
"layouts": 4,
"layoutDurationMs": 1.084,
"taskDurationMs": 221.683,
"heapDeltaBytes": -22296528,
"heapUsedBytes": 48484924,
"domNodes": -176,
"jsHeapTotalBytes": 5132288,
"scriptDurationMs": 19.782,
"eventListeners": -124,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
} |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds a server flag for version updates, makes the notification default resolve from server state, and updates release-store initialization and visibility checks around cloud and feature-flag readiness. ChangesFeature-flagged version updates and release gating
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested labels: 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 |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #13171 +/- ##
==========================================
- Coverage 77.48% 76.81% -0.67%
==========================================
Files 1651 1653 +2
Lines 93753 114788 +21035
Branches 33059 37035 +3976
==========================================
+ Hits 72642 88180 +15538
- Misses 20428 25667 +5239
- Partials 683 941 +258
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 463 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Gates release fetching in releaseStore.initialize() on the server feature flags arriving (non-empty), with a 3s timeout fallback, so a host that set show_version_updates=false isn't briefly treated as enabled on first load before negotiation completes. Also replaces the change-detector setting test with behavioral coverage. Amp-Thread-ID: https://ampcode.com/threads/T-019f0347-dc00-723a-a4d2-558539329035 Co-authored-by: Amp <amp@ampcode.com>
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/platform/updates/common/releaseStore.test.ts`:
- Around line 106-111: The current `until` mock in the release store test
resolves immediately and never exercises the new `initialize()` feature-flag
gate. Update `releaseStore.test.ts` to add focused coverage around
`initialize()` using the real wait behavior: start with an empty
`serverFeatureFlags` ref and verify `fetchReleases` does not run, then set the
flag ref and assert it proceeds, and add a separate test for the 3s timeout
fallback path. Keep the mock shape compatible with both direct `until()` awaits
and chained `until(...).toBe(...)` calls, but make sure the new tests actually
validate the gating logic in `initialize()`.
🪄 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: 228b2fb9-798d-436e-b4b5-88e70e123c46
📒 Files selected for processing (3)
src/platform/settings/constants/coreSettings.test.tssrc/platform/updates/common/releaseStore.test.tssrc/platform/updates/common/releaseStore.ts
…cal installs Amp-Thread-ID: https://ampcode.com/threads/T-019f0347-dc00-723a-a4d2-558539329035 Co-authored-by: Amp <amp@ampcode.com>
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/platform/settings/constants/coreSettings.ts`:
- Around line 489-490: The fallback for Comfy.Notification.ShowVersionUpdates is
incorrectly tied to isCloud, which changes the default when the server omits the
flag. Update the defaultValue in coreSettings to preserve the previous behavior
unless the host explicitly sets show_version_updates, and make sure the
releaseStore path continues using the existing default for local installs when
ServerFeatureFlag.SHOW_VERSION_UPDATES is unset.
🪄 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: 49643db7-532d-4f9b-9153-25609f2e8e29
📒 Files selected for processing (4)
src/platform/settings/constants/coreSettings.test.tssrc/platform/settings/constants/coreSettings.tssrc/platform/updates/common/releaseStore.test.tssrc/platform/updates/common/releaseStore.ts
…updates-flag # Conflicts: # src/composables/useFeatureFlags.ts
The release / version-update notifications (the "What's New" popup, the update toast, and the help-center red dot) were gated behind the compile-time
isDesktopdistribution constant (__DISTRIBUTION__ === 'desktop'). That desktop-specific build is no longer shipped — builds arelocalhost(plain git installs and the new Comfy Desktop) andcloud— so on local installs those notifications never showed, regardless of any setting or flag.This PR moves the gating off the dead
isDesktopconstant and onto theComfy.Notification.ShowVersionUpdatessetting, whose default is sourced from theshow_version_updatesserver feature flag. The result is that a host/launcher can actually control whether new-release notifications show, and they default off on local installs.Changes
ServerFeatureFlag.SHOW_VERSION_UPDATES.releaseStore: dropped theisDesktopgating.shouldShowToast/shouldShowRedDotare now suppressed on Cloud and otherwise driven by the setting;shouldShowPopupis driven purely by the setting.coreSettings:Comfy.Notification.ShowVersionUpdatesdefault is() => api.getServerFeature('show_version_updates', isCloud)— falls back to off on local installs and on for Cloud. The user setting still overrides.initialize()waits for server feature flags before fetching on non-cloud, so an injectedfalseisn't briefly treated as enabled on first load.Behavior
Part of a 3-repo change for Comfy-Org/Comfy-Desktop#1194 (depends on the
show_version_updatesflag added in Comfy-Org/ComfyUI#14646).