<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Update Internals</title><link>https://sourceforge.net/p/sucrose/wiki/Update%2520Internals/</link><description>Recent changes to Update Internals</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Update%20Internals/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:47 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Update%20Internals/feed" rel="self" type="application/rss+xml"/><item><title>Update Internals modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Update%2520Internals/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -70,7 +70,7 @@
 | `UpdateChannelType` | `Release`, `PreRelease` | `Release` skips pre-releases. |
 | `UpdateModuleType` | `Native`, `Downloader` | Download engine (see below). |
 | `UpdateExtensionType` | `Compressed` (`.7z`), `Executable` (`.exe`) | Determines extract-then-run vs. run-directly. |
-| `UpdateAutoType` | `Visible`, `SemiSilent`, `UpdateSilent`, `CompleteSilent` | Window visibility + silent-install behavior. Default `Visible`. |
+| `UpdateAutoType` | `Visible`, `SemiSilent`, `UpdateSilent`, `CompleteSilent` | Window visibility + silent-install behavior. The persisted setting defaults to `SemiSilent`; `Visible` is only the in-process fallback used when `Sucrose.Update.exe` is launched with no args (a manual UI check). |

 The `UpdateAutoType` modes in practice:

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:47 -0000</pubDate><guid>https://sourceforge.netbdf565e97ec5cf584273e5ae09afe6c121cbdaed</guid></item><item><title>Update Internals modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Update%2520Internals/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -44,7 +44,21 @@
 | 8 | `StepDownloading` | Download the asset via the chosen module, driving a progress ring + taskbar progress. |
 | 9 | `StepExtracting` / `StepRunning` | After download, by extension type: `Compressed` → extract the 7-Zip then run the extracted `.exe`; `Executable` → run the installer directly. |

-&amp;gt; 🖼️ **Diagram needed:** the update step pipeline as a flowchart — Cache → Network → Releases → Release → Comparing → Searching → (Silent) → Downloading → Extracting/Running, with the abort-on-false branches.

+    :::mermaid
+    flowchart TD
+        S1["1. StepCache&lt;br/&gt;clear / recreate cache"] --&amp;gt; S2["2. StepNetwork&lt;br/&gt;connectivity + telemetry"]
+        S2 --&amp;gt; S3["3. StepReleases&lt;br/&gt;fetch release list (GitHub / Soferity)"]
+        S3 --&amp;gt; S4["4. StepRelease&lt;br/&gt;pick newest (skip pre-release on Release)"]
+        S4 --&amp;gt; S5{"5. StepComparing&lt;br/&gt;newer version?"}
+        S5 --&amp;gt;|no| Abort["abort — already up to date"]
+        S5 --&amp;gt;|yes| S6["6. StepSearching&lt;br/&gt;match installer asset"]
+        S6 --&amp;gt; S7["7. StepSilent&lt;br/&gt;SemiSilent: reveal window"]
+        S7 --&amp;gt; S8["8. StepDownloading&lt;br/&gt;Native or Downloader + progress"]
+        S8 --&amp;gt; S9{"9. ExtensionType"}
+        S9 --&amp;gt;|Compressed| Ext["StepExtracting&lt;br/&gt;extract 7-Zip, run .exe"]
+        S9 --&amp;gt;|Executable| RunEx["StepRunning&lt;br/&gt;run installer (/s if CompleteSilent)"]
+
+&amp;gt; Each step must return `true` to proceed; any step returning `false` aborts the chain.

 ## Settings and enums

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:43 -0000</pubDate><guid>https://sourceforge.net43d8c6d2d005107b54d817239ee338ba39b3eb1e</guid></item><item><title>Update Internals modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Update%2520Internals/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-update-internals"&gt;Update Internals&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Sucrose.Update.exe&lt;/code&gt; is the WPF process that checks for, downloads, and launches a new version of Sucrose. Internally it is a strict, sequential pipeline of "step" methods — each step must succeed before the next runs — that resolves the release list, compares versions, finds the matching installer asset, downloads it (with optional speed limiting), and then either extracts and runs it or runs it directly. The behavior is shaped by a handful of enum-typed settings (server, channel, module, extension, auto mode) and a short HTTP cache. This page documents that pipeline for developers. For the user-facing description of update modes and how to trigger updates, see &lt;a href="./Updating-Sucrose"&gt;Updating Sucrose&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#launch-and-visibility"&gt;Launch and visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-update-pipeline-steps"&gt;The update pipeline (steps)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#settings-and-enums"&gt;Settings and enums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#asset-name-pattern"&gt;Asset name pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#download-modules-and-speed-limiting"&gt;Download modules and speed limiting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#install-extract-vs-run"&gt;Install: extract vs. run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release-list-cache"&gt;Release-list cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-telemetry"&gt;Update telemetry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-launch-and-visibility"&gt;Launch and visibility&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Sucrose.Update.exe&lt;/code&gt; is launched through &lt;a href="./Commandog-Dispatcher"&gt;Commandog&lt;/a&gt;:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔Update✖&amp;lt;path-to-Sucrose.Update.exe&amp;gt;          (manual check, visible)
✔Update✖&amp;lt;path-to-Sucrose.Update.exe&amp;gt;✖False    (silent background check)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On startup (&lt;code&gt;App.OnStartup&lt;/code&gt; → &lt;code&gt;Configure&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single-instance guard via the &lt;code&gt;{Sucrose-Wallpaper-Engine-Update}&lt;/code&gt; mutex (see &lt;a href="./Single-Instance-Mutexes"&gt;Single-Instance &amp;amp; Mutexes&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Sets the setting &lt;code&gt;Update.State = false&lt;/code&gt; on start and again on close.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;AutoType&lt;/code&gt; (the &lt;code&gt;UpdateAutoType&lt;/code&gt; setting) defaults to &lt;strong&gt;&lt;code&gt;Visible&lt;/code&gt;&lt;/strong&gt; when no args are passed; with args it reads &lt;code&gt;SSDMMU.AutoType&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;AutoType&lt;/code&gt; is not &lt;code&gt;Visible&lt;/code&gt;, the window is hidden for silent checks (&lt;code&gt;Opacity = 0&lt;/code&gt;, &lt;code&gt;ShowInTaskbar = false&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-the-update-pipeline-steps"&gt;The update pipeline (steps)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;MainWindow.Start&lt;/code&gt; runs gated steps with roughly 1 second between each; a step returning &lt;code&gt;false&lt;/code&gt; aborts the chain:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Order&lt;/th&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepCache&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clear and recreate the cache directory (&lt;code&gt;Internal.CachePath&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepNetwork&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Network.GetHostEntryAsync&lt;/code&gt;; on success applies security, records &lt;code&gt;Update.Time = now&lt;/code&gt;, and (if &lt;code&gt;TelemetryData&lt;/code&gt;) POSTs update telemetry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepReleases&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch the release list from the configured server (GitHub or Soferity).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepRelease&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pick the newest release; if the channel is &lt;code&gt;Release&lt;/code&gt;, skip pre-releases (&lt;code&gt;!PreRelease&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepComparing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Version.Compare(current, latest)&lt;/code&gt;; continue only if &lt;code&gt;Latest&lt;/code&gt; (a newer version exists).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepSearching&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Find the matching installer asset by name pattern; set &lt;code&gt;Internal.Source&lt;/code&gt; = the download URL and &lt;code&gt;Bundle&lt;/code&gt; = the cache path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepSilent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only for &lt;code&gt;SemiSilent&lt;/code&gt;: reveal the previously hidden window now that an update is confirmed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepDownloading&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download the asset via the chosen module, driving a progress ring + taskbar progress.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StepExtracting&lt;/code&gt; / &lt;code&gt;StepRunning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;After download, by extension type: &lt;code&gt;Compressed&lt;/code&gt; → extract the 7-Zip then run the extracted &lt;code&gt;.exe&lt;/code&gt;; &lt;code&gt;Executable&lt;/code&gt; → run the installer directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;🖼️ &lt;strong&gt;Diagram needed:&lt;/strong&gt; the update step pipeline as a flowchart — Cache → Network → Releases → Release → Comparing → Searching → (Silent) → Downloading → Extracting/Running, with the abort-on-false branches.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-settings-and-enums"&gt;Settings and enums&lt;/h2&gt;
&lt;p&gt;The pipeline is driven by these enum settings (verified enum members):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Enum members&lt;/th&gt;
&lt;th&gt;Default / notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateServerType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GitHub&lt;/code&gt;, &lt;code&gt;Soferity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Where the release list comes from.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateChannelType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Release&lt;/code&gt;, &lt;code&gt;PreRelease&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Release&lt;/code&gt; skips pre-releases.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateModuleType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Native&lt;/code&gt;, &lt;code&gt;Downloader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download engine (see below).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateExtensionType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Compressed&lt;/code&gt; (&lt;code&gt;.7z&lt;/code&gt;), &lt;code&gt;Executable&lt;/code&gt; (&lt;code&gt;.exe&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Determines extract-then-run vs. run-directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateAutoType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Visible&lt;/code&gt;, &lt;code&gt;SemiSilent&lt;/code&gt;, &lt;code&gt;UpdateSilent&lt;/code&gt;, &lt;code&gt;CompleteSilent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Window visibility + silent-install behavior. Default &lt;code&gt;Visible&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;UpdateAutoType&lt;/code&gt; modes in practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Visible&lt;/code&gt;&lt;/strong&gt; — window shown; user watches the progress.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SemiSilent&lt;/code&gt;&lt;/strong&gt; — hidden until an update is found, then revealed via &lt;code&gt;StepSilent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CompleteSilent&lt;/code&gt;&lt;/strong&gt; — runs the installer with the &lt;code&gt;/s&lt;/code&gt; silent switch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The release list is fetched per server type:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; — &lt;code&gt;Skylark.Standard.Helper.GitHub.ReleasesList(owner, SucroseRepository, UserAgent, PAT)&lt;/code&gt;. The &lt;code&gt;UserAgent&lt;/code&gt; and optional 93-character &lt;code&gt;PersonalAccessToken&lt;/code&gt; come from the &lt;a href="./Settings-Other"&gt;Settings → Other&lt;/a&gt; page (the PAT raises GitHub's anonymous rate limit).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soferity&lt;/strong&gt; — &lt;code&gt;…/v8/Kernel/Release&lt;/code&gt; on the Soferity v8 backend.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-asset-name-pattern"&gt;Asset name pattern&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;StepSearching&lt;/code&gt; selects the installer asset by matching its file name against the pattern:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Sucrose_Bundle_&amp;lt;Framework&amp;gt;_&amp;lt;Arch&amp;gt;_&amp;lt;Version&amp;gt;&amp;lt;ExtensionDescription&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For example, the &lt;code&gt;.NET Framework 4.8&lt;/code&gt; x64 compressed asset matches &lt;code&gt;Sucrose_Bundle_.NET_Framework_4.8_x64_&amp;lt;version&amp;gt;.7z&lt;/code&gt;, and the executable asset ends in &lt;code&gt;.exe&lt;/code&gt;. If no asset matches the configured framework, it falls back to the default framework. The matched asset's &lt;code&gt;BrowserDownloadUrl&lt;/code&gt; becomes &lt;code&gt;Internal.Source&lt;/code&gt;. See &lt;a href="/p/sucrose/wiki/Installation/"&gt;Installation&lt;/a&gt; for the same naming on GitHub releases.&lt;/p&gt;
&lt;h2 id="h-download-modules-and-speed-limiting"&gt;Download modules and speed limiting&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;StepDownloading&lt;/code&gt; supports two &lt;code&gt;UpdateModuleType&lt;/code&gt; engines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Native&lt;/code&gt;&lt;/strong&gt; — a manual &lt;code&gt;HttpClient&lt;/code&gt; streaming download with an optional speed limit from the &lt;code&gt;Update.LimitValue&lt;/code&gt; / &lt;code&gt;LimitType&lt;/code&gt; settings (default download limit ≈ 500 MB).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Downloader&lt;/code&gt;&lt;/strong&gt; — the &lt;code&gt;Downloader&lt;/code&gt; NuGet package, configured with &lt;code&gt;DownloadConfiguration&lt;/code&gt; and a &lt;code&gt;MaximumBytesPerSecond&lt;/code&gt; cap.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both drive the on-screen progress ring and the Windows taskbar progress indicator.&lt;/p&gt;
&lt;h2 id="h-install-extract-vs-run"&gt;Install: extract vs. run&lt;/h2&gt;
&lt;p&gt;After a successful download, the install path depends on &lt;code&gt;UpdateExtensionType&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Compressed&lt;/code&gt;&lt;/strong&gt; → &lt;code&gt;StepExtracting&lt;/code&gt;: validate and extract the 7-Zip archive (&lt;code&gt;SevenZip.Helper.Zip.CheckArchive&lt;/code&gt; + &lt;code&gt;Extract&lt;/code&gt;), then run the extracted &lt;code&gt;.exe&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Executable&lt;/code&gt;&lt;/strong&gt; → &lt;code&gt;StepRunning&lt;/code&gt;: run the downloaded installer directly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When &lt;code&gt;AutoType == CompleteSilent&lt;/code&gt;, the installer is launched with &lt;code&gt;"/s"&lt;/code&gt; for an unattended install.&lt;/p&gt;
&lt;p&gt;The window's &lt;strong&gt;Reload&lt;/strong&gt; button (&lt;code&gt;Reload_Click&lt;/code&gt;) hands the pending installer off to Commandog instead of running it inline:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔Bundle✖&amp;lt;path-to-installer.exe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For a &lt;code&gt;Compressed&lt;/code&gt; download, the extension is swapped to the executable first. This routes the launch through Commandog's &lt;code&gt;Bundle&lt;/code&gt; command. See &lt;a href="./Bundle-Installer-Internals"&gt;Bundle / Installer Internals&lt;/a&gt; for what the installer itself does.&lt;/p&gt;
&lt;h2 id="h-release-list-cache"&gt;Release-list cache&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Helper/Update.cs&lt;/code&gt; caches the release-list HTTP responses for &lt;strong&gt;5 minutes&lt;/strong&gt; (&lt;code&gt;Time = TimeSpan.FromMinutes(5)&lt;/code&gt;), keyed by &lt;code&gt;(Uri, UserAgent)&lt;/code&gt;. It exposes the releases as string / object / &lt;code&gt;JArray&lt;/code&gt; / &lt;code&gt;List&lt;/code&gt; plus async variants. The cache means repeated checks within five minutes do not re-hit the server.&lt;/p&gt;
&lt;h2 id="h-update-telemetry"&gt;Update telemetry&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;TelemetryData&lt;/code&gt; consent is enabled, &lt;code&gt;StepNetwork&lt;/code&gt; POSTs an &lt;code&gt;UpdateTelemetryData { AppVersion, UpdateAutoType }&lt;/code&gt; record to &lt;code&gt;…/v8/Telemetry/Update/&amp;lt;UserGuid&amp;gt;&lt;/code&gt; on the Soferity v8 backend. This is gated by the same consent switch as the rest of telemetry — see &lt;a href="./Privacy-Telemetry"&gt;Privacy &amp;amp; Telemetry&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Updating-Sucrose"&gt;Updating Sucrose&lt;/a&gt; — the user-facing guide to update modes, sources, and triggering a check.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Settings-Other"&gt;Settings: Other&lt;/a&gt; — the update server / channel / module / extension / limit / auto-type settings and the access token.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Bundle-Installer-Internals"&gt;Bundle / Installer Internals&lt;/a&gt; — what the downloaded installer does when run.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Commandog-Dispatcher"&gt;Commandog Dispatcher&lt;/a&gt; — the &lt;code&gt;✔Update✖…&lt;/code&gt; and &lt;code&gt;✔Bundle✖…&lt;/code&gt; commands.&lt;/li&gt;
&lt;li&gt;&lt;a href="/p/sucrose/wiki/Installation/"&gt;Installation&lt;/a&gt; — the GitHub release asset names and distribution channels.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:40 -0000</pubDate><guid>https://sourceforge.netfefcf90568118ab5628ff884f124f2c4eccff712</guid></item></channel></rss>