Devolutions / Devolutions/UniGetUI

[BUG] Package Details silently falls back to Installed Version data when Pinget API fails to provide latest manifest

Open
#4,819 5 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
C#
Stars
26.1k
Forks
924
Avg merge
15h 52m
Merged PRs (30d)
52

Description

### Please confirm these before moving forward

- [x] I have searched for my issue and have not found a work-in-progress/duplicate/resolved issue.
- [x] I have tested that this issue has not been fixed in the latest [(beta or stable) release](https://github.com/Devolutions/UniGetUI/releases/).
- [x] I have checked the [FAQ](https://github.com/Devolutions/UniGetUI#frequently-asked-questions) section for solutions.
- [x] This issue is about a bug (if it is not, please use the [correct template](https://github.com/Devolutions/UniGetUI/issues/new/choose)).

### UniGetUI Version

2026.1.10

### Windows version, edition, and architecture

Windows 11 Pro, 25H2 (26200) x64

### Describe your issue

### Describe the bug:
When opening the "Package Details" dialog for specific packages (e.g., `Rclone.Rclone`, `Nextcloud.Nextcloud`, `Safing.Portmaster`), UniGetUI displays the Installer URL and Installer SHA256 of the already installed older version, rather than the ones for the latest available version.

The logs reveal that the underlying issue is caused by the Pinget API returning an outdated version or failing. Instead of showing an error or "Not available", the UniGetUI object mapper silently falls back to the locally installed manifest data in both the "Software Updates" and "Discover Packages" tabs.

### Steps to reproduce:
1. Have an older version of `Rclone.Rclone` installed.
2. See the pending update in "Software Updates" (e.g., Update to 1.74.2).
3. Right-click the update -> "Package Details".
4. Check the Installer URL and SHA256. It displays the old/installed data (1.74.1).

### Relevant Log Output:
```
[24.05.2026 20:34:59] Pinget returned manifest version '1.74.1' when '1.74.2' was requested for Rclone.Rclone; treating as not found
[24.05.2026 20:34:59] System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: Authentication failed because the remote party sent a TLS alert: '112'.
...
at UniGetUI.Core.IconEngine.IconCacheEngine.SaveIconToCacheAndGetPath(CacheableIcon icon, String iconLocation)
```
_(Note: The TLS 112 alert happens without any local firewall/DNS filtering active, suggesting an SNI/SSL issue on the server providing the icon URL)._

### Expected behavior:
1. Pinget should ideally be in sync with WinGet.
2. If Pinget fails to find the requested new version, the Details Dialog should NOT silently fall back to the old local manifest. It should either parse the data directly via WinGet CLI/COM or clearly state that details are unavailable.

## Additional context:
I saw that PR #4816 recently refactored the `PackageDetailsViewModel`. I am reporting this because the core issue seems to lie in the `Pinget` backend wrapper and the internal object mapping, which feeds the wrong (fallback) data to the view.

### Steps to reproduce the issue

1. Have an older version of `Rclone.Rclone` installed.
2. See the pending update in "Software Updates" (e.g., Update to 1.74.2).
3. Right-click the update -> "Package Details".
4. Check the Installer URL and SHA256. It displays the old/installed data (1.74.1).

### UniGetUI Log

```text
[24.05.2026 20:48:49] __ __ _ ______ __ __ ______
/ / / /___ (_) ____/__ / /_/ / / / _/
/ / / / __ \/ / / __/ _ \/ __/ / / // /
/ /_/ / / / / / /_/ / __/ /_/ /_/ // /
\____/_/ /_/_/\____/\___/\__/\____/___/
Welcome to UniGetUI Version 2026.1.10
[24.05.2026 20:48:49]
[24.05.2026 20:48:49] Build 107
[24.05.2026 20:48:49] UI Framework: WinUI 3
[24.05.2026 20:48:49] Data directory C:\Users\XXX\AppData\Local\UniGetUI
[24.05.2026 20:48:49] Encoding Code Page set to 437
[24.05.2026 20:48:49] OS: Microsoft Windows 10.0.26200
[24.05.2026 20:48:49] Process arch: X64 (OS: X64)
[24.05.2026 20:48:49] Runtime: .NET 10.0.7
[24.05.2026 20:48:49] Loaded language locale: en
[24.05.2026 20:48:49] Elevated: False
[24.05.2026 20:48:49] Packaged (MSIX): False
[24.05.2026 20:48:49] Args: (none)
[24.05.2026 20:48:49] Command cargo-binstall.exe was not found on the system
[24.05.2026 20:48:50] Command vcpkg.exe was not found on the system
[24.05.2026 20:48:50] Command npm.cmd was not found on the system
[24.05.2026 20:48:50] Command cargo.exe was not found on the system
[24.05.2026 20:48:50] Npm is enabled but was not found on the system!
[24.05.2026 20:48:50] Cargo is enabled but was not found on the system!
[24.05.2026 20:48:50] Command scoop.ps1 was not found on the system
[24.05.2026 20:48:50] Chocolatey is enabled and was found on C:\Users\XXX\AppData\Local\UniGetUI\Chocolatey\bin\choco.exe
[24.05.2026 20:48:50] Scoop is enabled but was not found on the system!
[24.05.2026 20:48:50] PowerShell7 is enabled and was found on C:\Program Files\PowerShell\7\pwsh.exe
[24.05.2026 20:48:50] PowerShell is enabled and was found on C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
[24.05.2026 20:48:50] Command vcpkg was not found on the system
[24.05.2026 20:48:50] Pip is enabled and was found on C:\Users\XXX\AppData\Local\Microsoft\WindowsApps\python.EXE
[24.05.2026 20:48:50] Command vcpkg was not found on the system
[24.05.2026 20:48:50] Vcpkg root was not found. Please define the %VCPKG_ROOT% environment variable or define it from UniGetUI Settings
[24.05.2026 20:48:50] vcpkg is enabled but was not found on the system!
[24.05.2026 20:48:50] Generated a IPC API auth token for the current session
[24.05.2026 20:48:50] .NET Tool is enabled but was not found on the system!
[24.05.2026 20:48:50] Api running on named pipe UniGetUI.IPC
[24.05.2026 20:48:50] Updater source 'ProductInfo' returned version 2026.1.10.0 (upgradable=False)
[24.05.2026 20:48:50] Connected to WinGet API using packaged COM activation.
[24.05.2026 20:48:50] WinGet activation mode selected: packaged COM registration | Source: system COM registration
[24.05.2026 20:48:50] Winget is enabled and was found on C:\Users\XXX\AppData\Local\Microsoft\WindowsApps\winget.exe
[24.05.2026 20:48:50] An error occurred while initialising package manager Pip
[24.05.2026 20:48:50] System.InvalidOperationException: Microsoft Store python alias is not a valid python install
at UniGetUI.PackageEngine.Managers.PipManager.Pip._loadManagerVersion(String& version) in D:\a\UniGetUI\UniGetUI\src\UniGetUI.PackageEngine.Managers.Pip\Pip.cs:line 510
at UniGetUI.PackageEngine.ManagerClasses.Manager.PackageManager.Initialize() in D:\a\UniGetUI\UniGetUI\src\UniGetUI.PackageEngine.PackageManagerClasses\Manager\PackageManager.cs:line 106
[24.05.2026 20:48:50] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
█ Name: PowerShell 7.x (aka PowerShell7)
█ Executable name: "pwsh.exe"
█ Executable path: "C:\Program Files\PowerShell\7\pwsh.exe"
█ Call arguments: " -NoProfile -Command"
█ Version: PowerShell 7.4.14

█ PowerShell 7.x is enabled and ready to go.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[24.05.2026 20:48:50] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
█ Name: WinGet (aka Winget)
█ Executable name: "winget.exe"
█ Executable path: "C:\Users\XXX\AppData\Local\Microsoft\WindowsApps\winget.exe"
█ Call arguments: ""
█ Version: System WinGet (CLI) Version: v1.28.240
█ Using Native WinGet helper (COM Api)
█ Activation mode: packaged COM registration
█ Activation source: system COM registration

█ WinGet is enabled and ready to go.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[24.05.2026 20:48:50] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
█ Name: PowerShell 5.x (aka PowerShell)
█ Executable name: "powershell.exe"
█ Executable path: "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe"
█ Call arguments: " -NoProfile -Command"
█ Version: Name Value
█ ---- -----
█ PSVersion 5.1.26100.8457
█ PSEdition Desktop
█ PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
█ BuildVersion 10.0.26100.8457
█ CLRVersion 4.0.30319.42000
█ WSManStackVersion 3.0
█ PSRemotingProtocolVersion 2.3
█ SerializationVersion 1.1.0.1

█ PowerShell 5.x is enabled and ready to go.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[24.05.2026 20:48:51] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
█ Name: Chocolatey (aka Chocolatey)
█ Executable name: "choco.exe"
█ Executable path: "C:\Users\XXX\AppData\Local\UniGetUI\Chocolatey\bin\choco.exe"
█ Call arguments: ""
█ Version: 2.5.0

█ Chocolatey is enabled and ready to go.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[24.05.2026 20:48:52] LoadComponentsAsync finished executing. All managers loaded. Proceeding to interface.
[24.05.2026 20:48:52] Unable to retrieve secret for resource 'UniGetUI/GitHubAccessToken': Element not found.

Cannot get credential from Vault
[24.05.2026 20:48:53] Downloaded new icons and screenshots successfully!
[24.05.2026 20:48:53] Found 0 installed packages from PowerShell7
[24.05.2026 20:48:53] Found 0 installed packages from PowerShell7
[24.05.2026 20:48:53] Found 0 available updates from PowerShell7
[24.05.2026 20:48:54] Integrity check passed successfully!
[24.05.2026 20:48:54] Found 0 installed packages from Chocolatey
[24.05.2026 20:48:54] Found 0 available updates from Chocolatey
[24.05.2026 20:48:55] Found 2 installed packages from PowerShell
[24.05.2026 20:48:55] Found 2 installed packages from PowerShell
[24.05.2026 20:48:56] Found 0 available updates from PowerShell
[24.05.2026 20:48:56] Found 5 available updates from Winget
[24.05.2026 20:48:56] Pinget returned manifest version '1.74.1' when '1.74.2' was requested for Rclone.Rclone; treating as not found
[24.05.2026 20:48:56] Found 212 installed packages from Winget
[24.05.2026 20:48:57] System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: Authentication failed because the remote party sent a TLS alert: '112'.
---> System.ComponentModel.Win32Exception (0x80090326): The message received was unexpected or badly formatted.
--- End of inner exception stack trace ---
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.InjectNewHttp11ConnectionAsync(QueueItem queueItem)
at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.SocketsHttpHandler.g__CreateHandlerAndSendAsync|115_0(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at UniGetUI.Core.IconEngine.IconCacheEngine.SaveIconToCacheAndGetPath(CacheableIcon icon, String iconLocation) in D:\a\UniGetUI\UniGetUI\src\UniGetUI.Core.IconStore\IconCacheEngine.cs:line 220
[24.05.2026 20:54:28] Found 0 installed packages from PowerShell7
[24.05.2026 20:54:28] Found 0 available updates from PowerShell7
[24.05.2026 20:54:29] Found 0 available updates from Chocolatey
[24.05.2026 20:54:30] Found 2 installed packages from PowerShell
[24.05.2026 20:54:30] Found 0 available updates from PowerShell
[24.05.2026 20:54:31] Found 5 available updates from Winget
[24.05.2026 20:54:31] Pinget returned manifest version '1.74.1' when '1.74.2' was requested for Rclone.Rclone; treating as not found
```

### Package Managers Logs

```text
Manager WinGet with version:
System WinGet (CLI) Version: v1.28.240
Using Native WinGet helper (COM Api)
Activation mode: packaged COM registration
Activation source: system COM registration

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListSources
Process start time: 24.05.2026 20:48:50
Process end time: 24.05.2026 20:48:50

-- Task information
...

The task reported success

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListInstalledPackages
Process start time: 24.05.2026 20:48:52
Process end time: 24.05.2026 20:48:56

-- Task information
...

The task reported success

——————————————————————————————————————————

Logged subprocess-based task on manager Winget. Task type is RefreshIndexes
Subprocess executable: "C:\Users\XXX\AppData\Local\Microsoft\WindowsApps\winget.exe"
Command-line arguments: " source update --disable-interactivity "
Process start time: 24.05.2026 20:48:52
Process end time: 24.05.2026 20:48:53

-- Process STDOUT
...

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager Winget. Task type is OtherTask
Process start time: 24.05.2026 20:48:52
Process end time: 24.05.2026 20:48:55

-- Task information
...

The task reported success

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListUpdates
Process start time: 24.05.2026 20:48:53
Process end time: 24.05.2026 20:48:56

-- Task information
...

The task reported success

——————————————————————————————————————————

Logged subprocess-based task on manager Winget. Task type is RefreshIndexes
Subprocess executable: "C:\Users\XXX\AppData\Local\Microsoft\WindowsApps\winget.exe"
Command-line arguments: " source update --disable-interactivity "
Process start time: 24.05.2026 20:54:27
Process end time: 24.05.2026 20:54:28

-- Process STDOUT
...

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListUpdates
Process start time: 24.05.2026 20:54:28
Process end time: 24.05.2026 20:54:31

-- Task information
...

The task reported success

——————————————————————————————————————————

Logged native task on manager Winget. Task type is OtherTask
Process start time: 24.05.2026 20:54:28
Process end time: 24.05.2026 20:54:30

-- Task information
...

The task reported success

——————————————————————————————————————————
```

### Relevant information

_No response_

### Screenshots and videos

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.