Skip to content

Fix updater codec failures and offer explicit one-time alpha consent - #485

Merged
gustavo-barrios2006 merged 4 commits into
gabrielhhaber:mainfrom
m-enes-senovali:fix/updater-codec-alpha-choice
Oct 13, 2026
Merged

gustavo-barrios2006 merged 4 commits into
gabrielhhaber:mainfrom
m-enes-senovali:fix/updater-codec-alpha-choice

Conversation

@m-enes-senovali

@m-enes-senovali m-enes-senovali commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

An alpha install with alpha updates disabled can compare itself only with an older stable release and report no update. Missing codec lookup errors can also escape the WPP update checker and stop its retry chain.

Keep alpha opt-out effective. A manual check on an alpha build offers explicit, default-No consent to view a newer alpha once without changing the saved channel. The exact selected release follows the normal checksum/signature and installation flow. Automatic checks remain on the chosen channel, while forced ZIP reinstall warns before a downgrade. Opted-in alpha checks retry if the release listing failed instead of treating a stable-only fallback as complete.

Version and package readers use strict UTF-8 with leading-BOM support and preserve their fallback contracts on lookup/read/decode errors. Unexpected WPP check errors retain the existing retry path; forced reinstall check failures report an error without silently repeating the forced operation. Choice identities protect replacement prompts from stale callbacks, and retry timer publication is serialized with stop. No dependency, build, signature, installer handoff or provider changes.

Validation at PR head bcd9f57cd58dbb9ce1e591fd7ff8a713c4b98054:

  • CI run 38445248600 completed successfully. Its test-suite job reports 20175 passed / 320 skipped in 1116.93s; its separate pip-environment job reports 28 passed in 0.61s. Both check runs match this exact head.
  • Local staged validation: 271 focused headless checks, a separate 143-check locale/prompt/gate group, and 146 relevant checks after source-review repairs. The repair run overlaps the earlier groups; these counts are not additive.
  • Independent source re-review found no remaining actionable findings after fixing stale-choice ownership, shutdown/timer ordering and Romanian release-note placement. This is local source review, not a GitHub APPROVED review.
  • Seven locale catalogs updated, compiled and checked with zero pending entries; all seven current changelogs include the correction.

The local source/test base was 32da4b151fd19125da746e7788719fda1cbee256. Upstream advanced to d54d77ef8482a3789e7cf3d48437cbb60df92545 (#483: country list and changelogs), with no updater runtime changes; no local fetch or main synchronization was performed. The CI result above is this PR head's evidence, not current-main or release acceptance.

Copied production logs confirm the disabled-alpha selection. Their undated codec traceback matches older source and cannot be assigned to the current successful WPP check. Frozen codec packaging, real-provider/phone and packaged NVDA acceptance remain unverified. No local full suite, GUI, installer, live-account or recovery operations were run. Ready for maintainer review after the exact-head CI and independent source re-review completed. No merge, release or manual workflow was requested.

@m-enes-senovali
m-enes-senovali marked this pull request as ready for review October 13, 2026 18:42
Copilot AI balanced review requested due to automatic review settings October 13, 2026 18:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

- pl, ro, tr-TR: "alfa", the spelling each catalog already uses for the
  alpha channel (its checkbox reads "alfa"), in the two new strings and
  the changelog; the Romanian message now uses the catalog's formal
  register ("Folosiți", "Doriți").
- A manual check whose fetch fails is answered with the update error
  instead of silence. With the alpha channel on, a failed listing now
  propagates, so an opted-in user's Help > Check for updates could end
  with nothing said; automatic checks and their quick retries stay quiet.
  The _fetch_releases docstring and the trap doc say so.
- The excluded-alpha rule is now newer_excluded_alpha(), a plain
  function tested directly; _check_once only dispatches on it.
- The reinstall confirmation (with its downgrade warning) and the
  reinstall error go through message_box with an announcement, so they
  reach a user whose window is hidden in the tray.
- .claude/rules/updater.md covers client/update_channel_choice.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WmFGjY3WDiwbRjXL6zhiyY
Runs the real _schedule_retry with a fake Timer: the quick retries after
a forced, failing check run as automatic checks and show nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WmFGjY3WDiwbRjXL6zhiyY
The unit is stable-to-stable. A user on 2.0.0.0 never sees the alpha
one-time choice or the downgrade warning (both need an alpha build), and
no build was shown to lack a codec, so those details go. What does reach
them: Help > Check for updates used to say nothing when the update
server could not be reached (v2.0.0.0's _check_once only logged and
rescheduled); it now says so. Same item, every locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WmFGjY3WDiwbRjXL6zhiyY
@gustavo-barrios2006

Copy link
Copy Markdown
Collaborator

Very good, Muhammet.

Excellent improvements to the updater, thank you for the great contributions.

@gustavo-barrios2006
gustavo-barrios2006 merged commit d0f9187 into gabrielhhaber:main Oct 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants