Skip to content

fix(software-updater): fix winget parsing bugs and add ignore feature#59

Merged
dbfx merged 3 commits intomainfrom
fix/software-updater-ignore-and-parsing
Mar 24, 2026
Merged

fix(software-updater): fix winget parsing bugs and add ignore feature#59
dbfx merged 3 commits intomainfrom
fix/software-updater-ignore-and-parsing

Conversation

@dbfx
Copy link
Contributor

@dbfx dbfx commented Mar 24, 2026

Summary

  • Fix Driver Booster false positive: Strip < version prefix from winget output (like existing > handling). When the stripped version equals the available version, the app is already up to date — skip it.
  • Fix Handbrake name including version: Strip trailing version-like suffixes from winget display names (e.g. "HandBrake 1.11.0" → "HandBrake").
  • Add persistent ignore feature: Users can hide apps from the update list via an ignore button. Ignored app IDs are stored in KuduSettings and persist across app restarts and re-checks. A collapsible "Ignored" section lets users restore previously ignored apps.

Changes

  • software-updater.ts: stripTrailingVersion() helper, < prefix stripping, skip-if-equal logic
  • updater-store.ts: ignoredApps, ignoredIds, ignoreApp(), unignoreApp(), loadIgnoredIds(); setApps() auto-splits by ignored status
  • SoftwareUpdaterPage.tsx: Ignore button on each row, collapsible ignored section with restore, race-condition-safe settings load before auto-scan, fixed "all up to date" and toast counts to exclude ignored apps
  • types.ts + both settings-store.ts: Added ignoredSoftwareUpdates: string[] to KuduSettings
  • updates.json: Added i18n keys for ignore/unignore/ignored section
  • software-updater.test.ts: 8 new tests for < prefix, version-equal skip, name stripping, stripTrailingVersion()

Test plan

  • npx vitest run — 49/49 tests pass on software-updater.test.ts
  • npx tsc --noEmit — 0 new TypeScript errors (8 pre-existing)
  • Manual: verify Driver Booster no longer shows as outdated when at latest version
  • Manual: verify Handbrake shows as "HandBrake" not "HandBrake 1.11.0"
  • Manual: click ignore on an app → it moves to "Ignored" section
  • Manual: restart app → ignored apps remain ignored after re-check
  • Manual: click "Restore" on ignored app → it returns to update list

🤖 Generated with Claude Code

Fix two user-reported winget parsing issues:
- Strip "< " version prefix (like existing "> " handling) and skip
  entries where stripped version equals available (e.g. Driver Booster
  falsely showing as outdated)
- Strip trailing version numbers from display names (e.g. "HandBrake
  1.11.0" → "HandBrake")

Add persistent ignore feature so users can hide apps from the update
list across sessions. Ignored app IDs are stored in KuduSettings and
survive app restarts and re-checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 330942ad55

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…tition on load

- Add `ignoredSoftwareUpdates` to `validateSettingsPartial` allowed keys
  with array-of-strings validation, so settingsSet() actually persists
- Make `loadIgnoredIds` repartition already-loaded apps (moves entries
  from `apps` to `ignoredApps`) so background scans don't leave ignored
  apps visible
- Load ignored IDs in `useBackgroundScans` before the software check so
  the first setApps() call partitions correctly
- Add 4 ipc-validation tests for the new field

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dbfx
Copy link
Contributor Author

dbfx commented Mar 24, 2026

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4d9e962d17

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…dIgnoredIds

Rebuild both lists from the combined pool of apps + ignoredApps so that
a changed ignore set (e.g. from a stale/fresh read race) correctly
removes entries that are no longer ignored instead of leaving them stuck.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dbfx dbfx merged commit a685406 into main Mar 24, 2026
7 checks passed
@dbfx dbfx deleted the fix/software-updater-ignore-and-parsing branch March 24, 2026 04:12
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fe43bd6b7f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// When winget reports "< X" for the installed version and X matches the
// available version, it cannot determine the real version — the app is
// likely already up to date, so skip it.
if (version === available) continue

Choose a reason for hiding this comment

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

P2 Badge Gate equal-version skip on the original '<' marker

The new if (version === available) continue filter is broader than the intended fix and now suppresses every row with equal version strings after normalization, not just the "< X" ambiguity case described in the comment. If winget emits equal versions for other upgradeable cases (for example metadata/installer transitions), those updates are silently dropped from apps and cannot be acted on. Preserve whether the installed version originally had the < prefix and apply the equality skip only for that path.

Useful? React with 👍 / 👎.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant