Skip to content

fix(install): resilient latest-version fetch (both installers)#946

Merged
sahrizvi merged 4 commits into
mainfrom
feat/installer-version-fetch-resilience
Jun 18, 2026
Merged

fix(install): resilient latest-version fetch (both installers)#946
sahrizvi merged 4 commits into
mainfrom
feat/installer-version-fetch-resilience

Conversation

@mdesmet

@mdesmet mdesmet commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

What

Follow-up to #930 (reported by @ralphstodomingo): a transient 504 from api.github.com/.../releases/latest — or the 60/hr/IP unauthenticated rate limit — aborted the whole install with Failed to fetch version information, even though the download uses releases/latest/download/<file> (GitHub resolves "latest" server-side, no API call needed). The API response only feeds the version-string display and the already-installed short-circuit.

This issue exists in both installers (install bash:206-213 and install.ps1), so both are fixed here for parity.

Stacked on feat/windows-powershell-installer (sibling to #942) because install.ps1 isn't on main yet.

Changes (latest path, both installers)

  • Retry the releases/latest API call up to 3× with linear backoff (bash uses curl --fail so a 504 retries instead of parsing an error body).
  • On continued failure, degrade gracefully: print a muted notice and install latest anyway (banner shows latest).
  • Only short-circuit as "already installed" on a real version match — never treat empty==empty (unresolved version + unreadable binary) as installed.
  • Pinned -Version/--version unchanged: a genuine 404 still hard-fails.

Note (from the same review comment): the exit 0-closes-an-interactive-window quirk under irm | iex is PowerShell-only and only affects pasting directly into an interactive shell (not the documented powershell -c "…" form); curl | bash exits in a subshell. Left as-is — low severity, no parity gap to fix.

Verification

  • bash -n install clean; install.ps1 parses clean and the Pester suite (6/6) still passes on PowerShell 7.6.2.
  • version-fetch-resilience.test.ts pins retry + graceful-degrade in both installers (57 pass across the install/branding set).
  • The degrade path isn't exercised end-to-end (forcing an API failure then proceeds to a 268 MB download); covered by content assertions + parse + no-regression.

🤖 Generated with Claude Code


Summary by cubic

Makes the “latest” install path resilient in both installers and fixes Windows parsing on PowerShell 5.1. Installs no longer fail when the GitHub releases API blips; they retry and proceed with “latest”.

  • Bug Fixes
    • Latest path (both): retry releases/latest up to 3 times with backoff and a 10s timeout; on failure, continue and show “latest”. Pinned --version/-Version installs unchanged.
    • Correct “already installed” check: only short-circuit on a real version match; in PowerShell reset $specificVersion to $null on degrade to avoid empty==empty.
    • Windows: make install.ps1 ASCII-only so it parses on Windows PowerShell 5.1.
    • Tests: add packages/opencode/test/install/version-fetch-resilience.test.ts to pin retry, timeout, and graceful-degrade; update packages/opencode/test/release-validation/windows-installer-930-codex.test.ts to expect degrade (not hard-fail) on latest-version fetch.

Written for commit e10e322. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Improved “latest release” resolution in both installers: transient GitHub API failures are retried and no longer stop the installation process.
    • Prevented incorrect “already installed” skipping when version resolution fails, and updated install status to show latest when the resolved tag isn’t available.
  • Tests

    • Updated and added automated coverage to confirm both bash and PowerShell installers degrade gracefully during GitHub API failures and behave correctly afterward.

@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 84976b6b-bec3-45cb-9e0d-979699337e19

📥 Commits

Reviewing files that changed from the base of the PR and between 5f9cf45 and e10e322.

📒 Files selected for processing (1)
  • packages/opencode/test/release-validation/windows-installer-930-codex.test.ts

📝 Walkthrough

Walkthrough

Both the bash (install) and PowerShell (install.ps1) installers replace single-shot GitHub releases/latest API calls with 3-attempt retry loops bounded by per-request timeouts. Persistent API failures are non-fatal; installation proceeds with an empty/null version targeting the "latest" release asset. The "already installed" short-circuit is tightened to only match when a real version string is present, preventing empty-equals-empty false skips. New and existing test suites validate all resilience properties for both installers.

Changes

Installer GitHub API Retry and Fallback

Layer / File(s) Summary
Bash and PowerShell retry/fallback and version-guard implementation
install, install.ps1
Replaces single-shot GitHub API calls with 3-attempt retry loops with bounded timeouts (curl --max-time 10 in bash; -TimeoutSec 10 in PowerShell). On persistent failure, installation continues with an empty/null version rather than aborting. The "already installed" guard requires a non-empty version to match. Log output defaults to "latest" when no version is resolved. Minor comment/dash formatting changes in install.ps1 carry no execution impact.
Resilience test validation
packages/opencode/test/install/version-fetch-resilience.test.ts, packages/opencode/test/release-validation/windows-installer-930-codex.test.ts
New Bun test file reads both installer scripts at runtime and uses string/regex assertions to verify retry loops, timeout bounds, graceful fallback text, absence of fatal error paths, and the empty-version guard for both bash and PowerShell. Existing PR #930 test expectations are updated to reflect non-fatal fallback behavior and the tightened version resolution guard.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • AltimateAI/altimate-code#930: Introduced the Windows install.ps1 installer whose specificVersion resolution and "already installed" short-circuit logic this PR directly modifies.

Suggested reviewers

  • anandgupta42

Poem

🐇 The GitHub API went dark one night,
But the installer kept its head just right.
Three tries it gave with a timeout's grace,
Then installed "latest" and held its place.
No empty match shall fool this hare —
If version's blank, reinstall with care! 🌟

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is missing the required 'PINEAPPLE' marker for AI-generated contributions and lacks explicit Test Plan and Checklist sections matching the template. Add 'PINEAPPLE' at the top as required for AI-generated contributions, and reorganize content to include explicit Test Plan and Checklist sections per template.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: making latest-version fetching resilient in both installers.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/installer-version-fetch-resilience

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cubic-dev-ai cubic-dev-ai Bot 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.

No issues found across 3 files

Re-trigger cubic

@dev-punia-altimate dev-punia-altimate left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 Code Review — OpenCodeReview (Gemini) — 1 finding(s)

  • 1 anchored to a line (posted inline when the comment stream is on)
  • 0 without a line anchor
All findings (full text)

1. install.ps1 (L130)

[🟠 MEDIUM] By changing the API failure behavior from exit 1 to a fallback mechanism, $specificVersion can now safely be an empty string "".

However, this introduces a subtle bug further down in the script when it checks if the app is already installed:

  try { $installedVersion = (& $probe --version 2>$null | Select-Object -First 1).ToString().Trim() } catch {}
  if ($installedVersion -eq $specificVersion) {
    Write-Muted "Version $specificVersion already installed"
    exit 0
  }

If the GitHub API fails ($specificVersion = "") AND the local executable is missing or corrupted such that the --version command fails ($installedVersion defaults to ""), the condition "" -eq "" will evaluate to $true. The installer will output Version already installed and incorrectly short-circuit with exit 0 instead of downloading and replacing the broken installation.

To avoid this, you can explicitly reset $specificVersion = $null here when the API fails, which ensures the downstream string-comparison evaluates to $false.

Suggested change:

    Write-Muted "Could not resolve the latest version from GitHub (API unavailable) — installing the latest release anyway."
    $specificVersion = $null

Comment thread install.ps1 Outdated
@dev-punia-altimate

Copy link
Copy Markdown
Contributor

🤖 Code Review — OpenCodeReview (Gemini) — No Issues Found

No supported files changed.

@sahrizvi sahrizvi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Three findings inline below — one Critical (the retry loop is currently a no-op under set -euo pipefail), and two High (install.ps1 short-circuit on empty==empty, and no HTTP timeout on either retry). Repro details and one-line suggested fixes inline.

Comment thread install Outdated
Comment thread install.ps1 Outdated
Comment thread install.ps1 Outdated
mdesmet and others added 2 commits June 18, 2026 15:50
Reported on #930: a transient 504 from api.github.com/.../releases/latest (or
the 60/hr/IP unauthenticated rate limit) aborted the whole install with
"Failed to fetch version information" — even though the download itself uses
releases/latest/download/<file>, which GitHub resolves server-side with no API
call. The API response only feeds the version-string display and the
already-installed short-circuit.

Both installers now, in the latest path:
- retry the API call up to 3x with linear backoff (bash uses curl --fail so a
  504 retries instead of parsing an error body);
- on continued failure, print a muted notice and proceed to install latest
  anyway (version string shown as "latest");
- only short-circuit as "already installed" on a real version match — never
  treat empty==empty (unresolved version + unreadable binary) as installed.

Pinned-version installs (-Version / --version) are unchanged: a genuine 404
still hard-fails.

Tests: version-fetch-resilience.test.ts pins the retry + graceful-degrade
behavior in both installers. bash -n clean; install.ps1 parses clean and the
Pester suite (6/6) still passes on PowerShell 7.6.2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- install: append `|| true` to the retry's curl|sed assignment. Under
  `set -euo pipefail` a failing `curl --fail` propagated through the pipeline
  and aborted the script at attempt 1, before the loop could retry or degrade
  (sahrizvi; reproduced: exit 22 without the fix, all 3 attempts + degrade with
  it). Also add `--max-time 10` to bound a dead-air socket.
- install.ps1: reset $specificVersion to $null (not "") on the degrade path, so
  the already-installed short-circuit can't false-match "" -eq "" when the
  version probe of a missing/corrupt binary also yields "" (dev-punia, sahrizvi).
- install.ps1: add -TimeoutSec 10 to Invoke-RestMethod (defaults to 100s on
  PS 5.1, unbounded on PS 7+) to bound retries on dead air (sahrizvi).
- tests: TS guards for `|| true`, --max-time/-TimeoutSec, and the $null reset.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
@ralphstodomingo ralphstodomingo force-pushed the feat/installer-version-fetch-resilience branch from be6c0c0 to d23fc1a Compare June 18, 2026 08:30
@ralphstodomingo ralphstodomingo changed the base branch from feat/windows-powershell-installer to main June 18, 2026 08:31
ralphstodomingo added a commit that referenced this pull request Jun 18, 2026
- install.ps1: decode a Byte[] checksums.txt body so verification works on
  Windows PowerShell 5.1. GitHub serves release assets as octet-stream, so on
  PS 5.1 Invoke-WebRequest returns .Content as Byte[]; it coerced to a decimal
  string and every check silently soft-skipped (sahrizvi, P1).
- install.ps1: pin the archive and checksums.txt to the resolved release tag
  instead of the mutable latest/ URL, so a release published mid-install can't
  hand back mismatched assets and trigger a spurious hard-fail (cubic, P2).
  Falls back to latest/ only when the version can't be resolved.
- install: in verify_checksum, clean up via $(dirname "$file") rather than the
  caller's dynamically-scoped $tmp_dir local — self-contained (cubic, P2).
- tests: Pester coverage for Test-Checksum (String + Byte[] + mismatch paths,
  verified to fail without the decode) and TS guards for the decode and the
  PowerShell same-release pinning.

Note: the bash installer is intentionally left on the latest/download path here
to keep this PR disjoint from #946 (which owns the bash latest-version block);
the two PRs then merge in either order with no conflict.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
ralphstodomingo added a commit that referenced this pull request Jun 18, 2026
- install.ps1: decode a Byte[] checksums.txt body so verification works on
  Windows PowerShell 5.1. GitHub serves release assets as octet-stream, so on
  PS 5.1 Invoke-WebRequest returns .Content as Byte[]; it coerced to a decimal
  string and every check silently soft-skipped (sahrizvi, P1).
- install.ps1: pin the archive and checksums.txt to the resolved release tag
  instead of the mutable latest/ URL, so a release published mid-install can't
  hand back mismatched assets and trigger a spurious hard-fail (cubic, P2).
  Falls back to latest/ only when the version can't be resolved.
- install: in verify_checksum, clean up via $(dirname "$file") rather than the
  caller's dynamically-scoped $tmp_dir local — self-contained (cubic, P2).
- tests: Pester coverage for Test-Checksum (String + Byte[] + mismatch paths,
  verified to fail without the decode) and TS guards for the decode and the
  PowerShell same-release pinning.

Note: the bash installer is intentionally left on the latest/download path here
to keep this PR disjoint from #946 (which owns the bash latest-version block);
the two PRs then merge in either order with no conflict.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
install.ps1 had no BOM and used a few non-ASCII characters (em dash, ellipsis,
right arrow) in comments and messages. Windows PowerShell 5.1 - the default
shell on Windows 10 and preinstalled on Windows 11 - reads a BOM-less file as
the system ANSI codepage, not UTF-8, so those multi-byte characters corrupt the
token stream and the whole script fails to parse (verified on real PS 5.1).

This is a pre-existing issue (the characters predate this PR) that CI doesn't
catch because the Pester job runs under pwsh (PowerShell 7, UTF-8 by default).
Replacing the three characters with ASCII equivalents (-, ..., ->) makes the
installer parse and run on PS 5.1 while keeping pwsh behavior identical.

Also removes the now-obsolete "integrity verification deferred" NOTE comment:
the sibling PR #942 implements that verification and removes the same block, so
deleting it here too keeps the two PRs mergeable in either order with no
conflict. Same transliteration is applied verbatim in #942.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
ralphstodomingo added a commit that referenced this pull request Jun 18, 2026
install.ps1 had no BOM and used a few non-ASCII characters (em dash, ellipsis,
right arrow) in comments and messages. Windows PowerShell 5.1 — the default
shell on Windows 10 and preinstalled on Windows 11 — reads a BOM-less file as
the system ANSI codepage, not UTF-8, so those multi-byte characters corrupt the
token stream and the whole script fails to parse (verified on real PS 5.1:
"The '<' operator is reserved", cascading to "Missing closing '}'").

This is a pre-existing issue (the characters predate this PR) that CI doesn't
catch because the Pester job runs under pwsh (PowerShell 7, UTF-8 by default).
Replacing the three characters with ASCII equivalents (-, ..., ->) makes the
installer parse and run on PS 5.1 while keeping pwsh behavior identical. Verified
end-to-end on real Windows PowerShell 5.1: resolve version -> download -> extract
-> place the binary all succeed.

Same transliteration is applied verbatim in #946 so the two PRs merge cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
The #952 release-validation suite asserted the latest path hard-fails with
"Failed to fetch version information" (>=2) and that exit 1 appears >=3 times.
This PR makes the latest path retry then degrade gracefully instead of aborting,
so update those assertions: the latest path no longer hard-fails (the unsupported
-arch and pinned-404 paths still exit 1, hence >=2).

(This test never ran on this PR until it was retargeted from the merged
feat/windows-powershell-installer branch to main.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG
@ralphstodomingo

Copy link
Copy Markdown
Contributor

Combined end-to-end verification (both installer PRs together)

#942 and #946 are sibling PRs that both touch install / install.ps1. Both were rebased onto main (now that #930 has merged) and verified together as the combined installer that will ship.

Merge safety

Real Windows verification

Ran the merged install.ps1 on a real Windows PowerShell 5.1 host (5.1.26100, Desktop), the default shell on Windows 10 / clean Windows 11:

  • 🐛 Found & fixed a pre-existing parse failure on PS 5.1. install.ps1 had a few non-ASCII characters (em dash / ellipsis / arrow) and no BOM, so PS 5.1 read it as ANSI and the whole script failed to tokenize. CI never caught it because the Pester job runs under pwsh (PowerShell 7, UTF-8). Both PRs are now ASCII-only and parse cleanly on 5.1. (The characters predate these PRs.)
  • Full install E2E on real PS 5.1: resolve latest (0.8.7) → download the real altimate-windows-x64.zip (~268 MB) from the pinned release URL → checksum step (soft-skips correctly, since v0.8.7 predates the new checksums.txt asset) → Expand-Archive → binary placed (verified as a valid 281 MB PE executable).

#942 — checksum verification

  • The real Test-Checksum was exercised on PS 5.1 against checksums.txt served both as a String and as a Byte[] (the latter is what Windows PowerShell 5.1 actually returns for GitHub's application/octet-stream assets), plus a mismatch case.
  • Confirmed the Byte[] test fails on the old code (silent soft-skip) and passes with the decode fix — i.e. it's a real regression guard, now also pinned by a Pester test.
  • Archive + checksums.txt are pinned to one resolved $base, so they can't come from two different releases.

#946 — resilient latest-version fetch

  • Reproduced the set -euo pipefail abort: without the trailing || true, a failing curl --fail aborts the script at attempt 1 (exit 22); with it, all three retries run and the graceful-degrade path prints and continues.
  • Confirmed on real PowerShell that resetting $specificVersion = $null makes the "already installed" check fall through ($null -eq "" is $false) instead of falsely short-circuiting on "" -eq "" for a missing/corrupt binary.

Cross-PR composition (verified on real PowerShell)

With both changes combined: when the version can't be resolved, #946 sets $specificVersion = $null, which flows into #942's URL selection and correctly falls back to the mutable latest/ path; when a version is resolved, both the archive and checksums pin to it.

CI

Green on both: TypeScript, Windows Installer (Pester), and the #930 release-validation suite (updated in each PR to track the URL-construction and version-fetch behavior changes).

@dev-punia-altimate

Copy link
Copy Markdown
Contributor

❌ Tests — Failures Detected

TypeScript — 15 failure(s)

  • connection_refused
  • timeout
  • permission_denied
  • parse_error
  • network_error [1.00ms]
  • auth_failure
  • rate_limit
  • internal_error
  • empty_error
  • connection_refused
  • timeout
  • permission_denied
  • parse_error
  • oom [1.00ms]
  • network_error

Next Step

Please address the failing cases above and re-run verification.

cc @mdesmet

sahrizvi pushed a commit that referenced this pull request Jun 18, 2026
)

* feat(install): verify release archive checksums (both installers)

Raises the integrity bar for the standalone installers (follow-up to #930).

- release.yml: generate a checksums.txt (sha256sum format) over the release
  archives and publish it as a release asset.
- install (bash) + install.ps1: fetch checksums.txt and verify the downloaded
  archive's SHA256 before extracting. Hard-fail on mismatch; soft-skip with a
  notice when checksums.txt is absent (older pinned releases) or unreachable, so
  existing version-pinned installs keep working.
- Cross-platform sha in bash (sha256sum or shasum -a 256); Get-FileHash on
  Windows. Verification runs before extraction in both.
- Tests: checksum-verification.test.ts asserts release.yml publishes the file
  and both installers fetch + compare + hard-fail on mismatch.

Verified: bash -n clean; install.ps1 parses clean and the Pester suite (6/6)
still passes on PowerShell 7.6.2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(install): address checksum-verification review

- install.ps1: decode a Byte[] checksums.txt body so verification works on
  Windows PowerShell 5.1. GitHub serves release assets as octet-stream, so on
  PS 5.1 Invoke-WebRequest returns .Content as Byte[]; it coerced to a decimal
  string and every check silently soft-skipped (sahrizvi, P1).
- install.ps1: pin the archive and checksums.txt to the resolved release tag
  instead of the mutable latest/ URL, so a release published mid-install can't
  hand back mismatched assets and trigger a spurious hard-fail (cubic, P2).
  Falls back to latest/ only when the version can't be resolved.
- install: in verify_checksum, clean up via $(dirname "$file") rather than the
  caller's dynamically-scoped $tmp_dir local — self-contained (cubic, P2).
- tests: Pester coverage for Test-Checksum (String + Byte[] + mismatch paths,
  verified to fail without the decode) and TS guards for the decode and the
  PowerShell same-release pinning.

Note: the bash installer is intentionally left on the latest/download path here
to keep this PR disjoint from #946 (which owns the bash latest-version block);
the two PRs then merge in either order with no conflict.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG

* fix(install.ps1): ASCII-only so it parses on Windows PowerShell 5.1

install.ps1 had no BOM and used a few non-ASCII characters (em dash, ellipsis,
right arrow) in comments and messages. Windows PowerShell 5.1 — the default
shell on Windows 10 and preinstalled on Windows 11 — reads a BOM-less file as
the system ANSI codepage, not UTF-8, so those multi-byte characters corrupt the
token stream and the whole script fails to parse (verified on real PS 5.1:
"The '<' operator is reserved", cascading to "Missing closing '}'").

This is a pre-existing issue (the characters predate this PR) that CI doesn't
catch because the Pester job runs under pwsh (PowerShell 7, UTF-8 by default).
Replacing the three characters with ASCII equivalents (-, ..., ->) makes the
installer parse and run on PS 5.1 while keeping pwsh behavior identical. Verified
end-to-end on real Windows PowerShell 5.1: resolve version -> download -> extract
-> place the binary all succeed.

Same transliteration is applied verbatim in #946 so the two PRs merge cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG

* fix(install): guard the verify_checksum cleanup against a pathological path

Defensive depth (coderabbit): only `rm -rf` the cleanup dir when dirname
resolves to a real subdirectory, never "." or "/", so an unexpectedly empty or
root-level $file can't wipe the cwd or worse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG

* test: update #930 release-validation for the checksum URL refactor

The #952 release-validation suite asserted the exact #930 URL literals. This PR
builds the archive and checksums.txt from a shared $base (so they always come
from the same release), so update those assertions to the $base/$url form, and
convert the now-obsolete "verification deferred" test.todo into a real assertion
that Test-Checksum verifies SHA256 before extraction.

(This test never ran on this PR until it was retargeted from the merged
feat/windows-powershell-installer branch to main.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019M7GkS3bYZaFhEbBhVTecG

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: ralphstodomingo <ralphstodomingo@users.noreply.github.com>

@sahrizvi sahrizvi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

E2E tested, doesnt't touch core altimate-code, so LGTM.

@sahrizvi sahrizvi merged commit dfe0364 into main Jun 18, 2026
20 checks passed
@ralphstodomingo ralphstodomingo deleted the feat/installer-version-fetch-resilience branch June 18, 2026 14:15
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.

4 participants