Commit graph

181 commits

Author SHA1 Message Date
Shekhar Vaidya
fba4502055 docs: log Aug 17 Sentinel check-in, file per-language checksums idea
TLS fingerprint fix (v0.3.7) checked in 17 days post-release: aggregate
CLI Sentinel-rejection rate still ~21%, unchanged -- inconclusive given
mixed-version population, revisit once 0.3.7+ dominates usage.

New backlog item: per-language SHA256 checksums on product pages.
Confirmed live that Microsoft's own download pages publish a static
per-locale hash table for the current build, not reachable through any
API call MSDL/CLI already makes. Since it only changes when a product
ID is replaced, no scraper needed -- just copy it by hand at the same
time a new product gets added to the catalog.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-17 23:52:21 +05:30
Shekhar Vaidya
d562bf8d0e fix(frontend): Windows 10 lifecycle text/badge were stale (dated Oct 2025, now Aug 2026)
Homepage's featured card said "Security support until October 2025" --
that date has already passed, so it read as a future deadline that
wasn't. Updated to reflect actual status (mainstream support ended,
consumer ESU runs through Oct 2026) -- kept tight to match the other
three cards' description length so the grid stays even (the first
draft ran long enough to wrap to 3 lines and grow that one card's
height past its siblings).

Also found products.json still tagged both Windows 10 22H2 variants
(2618, 2378) as "EOL SOON" -- inconsistent with the homepage's own
"EOL"/"END OF LIFE" badge for the same product, and equally stale
for the same reason. products.json's badge field renders verbatim
on the product detail page, so this was live and user-facing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-17 23:28:21 +05:30
Shekhar Vaidya
f6659fcc42 docs(ci): add AUR install method to release notes template
Now that msdl-bin is actually published on AUR, future releases'
auto-generated "What's New" -> Install section should mention it
too, matching what's already in README.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 13:14:34 +05:30
Shekhar Vaidya
34e2b35486 docs: msdl-bin is published on AUR now, not just prepared
README still said the AUR package was "prepared but not yet
published" -- it went live today (msdl-bin 0.3.7-1, now that AUR
registration reopened). Added it as a proper install method alongside
winget/Homebrew, matching their existing formatting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 13:12:38 +05:30
Shekhar Vaidya
f27e2931b4 chore(aur): bump msdl-bin to v0.3.7, note AUR registration reopened
.SRCINFO regenerated with real makepkg this time (Docker was running),
confirming the same values as the manual field-mapping used previously.

AUR disabled new account registrations 2026-06-15 after a malware
campaign; reopened as of today. Updated the README note accordingly --
this package is ready to actually publish once an account + SSH key
are set up, which is a manual step only the maintainer can do.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 12:49:31 +05:30
Shekhar Vaidya
33f3a46777 chore(release): bump to v0.3.7 -- backend version string + winget manifests; fix(ci): winget submission needs a Windows runner
Version bump: backend/main.go latestCLIVersion and the local
winget/manifests/*.yaml mirror to 0.3.7, with the real
InstallerUrl/InstallerSha256 for the cli/v0.3.7 release asset.

CI fix: the first real winget-submission attempt (v0.3.7, now that
WINGET_TOKEN is finally set) failed immediately -- wingetcreate isn't
published as a NuGet/dotnet-tool package at all, it's a native Windows
binary requiring .NET 6 + VC++ Redistributable. `dotnet tool install
--global wingetcreate` on ubuntu-latest could never have worked; this
path was just never exercised before since the empty-token check
always short-circuited it first. Split winget submission into its own
job on windows-latest, downloading wingetcreate.exe directly from its
GitHub release instead of dotnet tool install.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 12:29:08 +05:30
Shekhar
cf318eb15c
Merge pull request #40 from starkSV/feat/cli-tls-fingerprint-hardening
feat(cli): TLS/HTTP2 fingerprint hardening via tls-client
2026-07-31 12:18:56 +05:30
Shekhar Vaidya
78be837a4a docs: explain the Sentinel WAF saga, retire completed plans, commit the needs-warming spec
PROGRESS.md and CLAUDE.md now document the full investigation: three
weekly checkpoints confirming the backend's direct link-fetch is
100% dead, the crowdsourced CLI-contribution cache carrying the real
load (286 accepted, 0 rejected), the two merged backend fixes
(lockdown TTL, /proxy product_id validation), and the CLI TLS
fingerprint hardening in this branch (functionally verified, not yet
validated against the Sentinel-rejection-rate trend).

Removed two plan+spec pairs under docs/superpowers/ (the original CLI
build plan and the telemetry/update-check plan+design) -- both fully
shipped, redundant with PROGRESS.md's own record of what happened.

Committed docs/superpowers/specs/2026-07-13-needs-warming-design.md
for the first time -- it's been sitting untracked in the working tree
for weeks. Unlike the two removed docs, this one is a live, unbuilt
proposal (a public page surfacing which products are currently
Sentinel-locked with no cached fallback), not completed work, so it's
kept and now tracked in the backlog instead of discarded.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 12:08:38 +05:30
Shekhar Vaidya
9e22cd8bf8 feat(cli): TLS/HTTP2 fingerprint hardening via tls-client
Three checkpoints over 17 days confirmed a stable ~20% Sentinel
rejection rate on the CLI's own requests, despite running from
residential IPs specifically to avoid ASN-based blocking. That
persistence points at TLS ClientHello fingerprinting as an additional
signal: Go's stdlib crypto/tls produces a handshake that looks nothing
like a real browser, independent of IP or headers.

Swaps the CLI's HTTP transport (session setup, SKU lookup, download
link fetch, eval link resolution) from net/http to
github.com/bogdanfinn/tls-client, which wraps utls with a maintained
Chrome browser profile (TLS + HTTP2 fingerprint together, not just
TLS -- a browser-consistent one without the other is its own tell).
Bumped msUA's claimed Chrome version to 133 to match the chosen
profile, since a mismatched UA vs. TLS fingerprint is itself
detectable.

The custom simpleCookieJar is gone -- tls-client provides its own
cookie jar. fetchEvalLinks got the same treatment for consistency,
even though the Eval Center path isn't currently blocked.

Verified: go build/vet/test all pass, and a live end-to-end run
(msdl --id 3262 --lang English) returned a real signed download link
and successfully contributed it back to the shared cache. That proves
the flow still works functionally through the new client -- it does
NOT prove the fingerprint theory, since the old client already
succeeded ~80% of the time. The real test is watching the Sentinel-
rejection-rate telemetry over a comparable multi-day window after
this ships.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 12:02:44 +05:30
Shekhar
6ace2ceb19
Merge pull request #39 from starkSV/fix/sentinel-lockdown-and-proxy-validation
fix(backend): back off Sentinel lockdown retries, validate product_id in /proxy
2026-07-31 11:49:57 +05:30
Shekhar Vaidya
6ab849be5e fix(backend): back off Sentinel lockdown retries, validate product_id in /proxy
Log analysis over 17 days showed 181 Sentinel-block retry attempts on
/proxy, all 181 failed (0% success). Retrying every 90 minutes yields
zero value right now and just adds more blocked-request noise against
our own IP for nothing in return. Bumped lockdownTTL to 5h so it backs
off harder while still recovering same-day if Microsoft's block ever
eases.

Also found /proxy never validated product_id against the known
catalog, so a request for a nonexistent ID (e.g. product_id=2861,
never a real product) still burned a full outbound Microsoft session
attempt and a Sentinel-block hit for something that could never
succeed anyway. Now rejected with 404 before any Microsoft call,
reusing the existing validContributeProducts allow-list.

Verified locally: unknown product_id -> 404 (no MS fetch attempted in
logs), missing params -> 400 unchanged, known product_id -> proceeds
to a real MS session attempt as before.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-31 11:35:44 +05:30
Shekhar Vaidya
5a806eea87 fix(frontend): remove redundant, ignored _redirects rule
Cloudflare's deploy log has been flagging the SPA fallback rule
(/* /index.html 200) as a false-positive infinite loop and ignoring
it on every deploy. Investigated live: direct navigation to /about, a
dynamic route, and a genuinely invalid path all return 200 with the
correct content already, since Cloudflare Pages' own default fallback
serves index.html for any unmatched path. The rule was dead weight --
removing it to stop the recurring warning noise. Closes the tracked
issue in CLAUDE.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:19:50 +05:30
Shekhar Vaidya
73eee730c9 fix(frontend): CLI curl-command copy bug, stale/missing content, and Fido attribution cleanup
- CliHandoff: the visible curl install command was a hardcoded truncated
  placeholder ("...install.sh"), so the copy button worked but manually
  selecting/copying the text gave a broken command. Now shows the real URL
  and lets CSS `truncate` handle the visual clipping.
- Dock: adds a full-width backdrop-blur shelf under the floating desktop
  dock so it doesn't visually blend into scrolled content (page bg is
  near-black, so plain color gradients were invisible -- blur is what
  actually reads). Desktop only; the mobile dock is already a flush bar.
- HomePage: hero now mentions "Open source" (linked, dotted underline) --
  previously absent anywhere on the landing page.
- StatsBar: "releases available" count now includes eval/enterprise
  editions, not just the consumer catalog (17 -> combined total).
- About/Privacy/Disclaimer: these hadn't been updated since the CLI
  shipped. Privacy Policy now discloses the CLI's anonymous telemetry and
  crowdsourced link-contribution behavior (previously undisclosed). About
  page's stale hardcoded product list replaced with a link to the catalog,
  plus a new section explaining the CLI. Disclaimer now covers the CLI
  binary under the same terms.
- Fido/Rufus attribution was scattered with duplicate linked mentions on
  the same pages; consolidated to one canonical linked credit per surface
  (About's Credits section, README's intro) instead of repeating it.
- FAQAccordion: fixed a factual error ("ported to Go and Node.js" -- no
  Node.js backend exists), and linked the actual repo in the open-source
  FAQ answer (previously just asserted it with no link).
- sitemap.xml: removed a dead entry for product 48, which was already
  removed from the catalog (Microsoft returns 502 for it).
- README: fixed three inaccuracies in the /contribute API doc (wrong auth
  header, wrong body field name, wrong status codes) against the actual
  backend/main.go implementation, and added the missing telemetry/sentinel
  fields to the /metrics example response.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:10:38 +05:30
Shekhar Vaidya
b516804541 chore: add GitHub Sponsors funding link
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-15 13:13:48 +05:30
Shekhar Vaidya
47698d8129 chore(aur): bump msdl-bin to v0.3.6
Local mirror only -- AUR account registration is still disabled
(since 2026-06-15), so this isn't pushed to aur.archlinux.org yet.
Kept in sync so it's ready to publish the moment registration
reopens.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 11:49:07 +05:30
Shekhar
61fdcffaaa
Merge pull request #38 from starkSV/chore/cli-v0.3.6-bump
chore(release): bump to v0.3.6 -- backend version string + winget manifests
2026-07-14 11:35:08 +05:30
Shekhar Vaidya
a831cddb8e chore(release): bump to v0.3.6 -- backend version string + winget manifests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 11:33:48 +05:30
Shekhar
8019db0314
Merge pull request #36 from starkSV/feat/check-new-releases-script
feat: new-release detector tools + missing 25H2 V2 China catalog entries
2026-07-14 11:29:25 +05:30
Shekhar
da1e894e6b
Merge pull request #37 from starkSV/chore/cleanup-stale-docs
chore: remove superseded implementation plan and stale issue draft
2026-07-14 11:27:20 +05:30
Shekhar Vaidya
c53eae3f0e chore: remove superseded implementation plan and stale issue draft
IMPLEMENTATION_PLAN.md (Phases 1-5: CLI direct-to-Microsoft, Redis L2
cache, /contribute crowdsourcing, web graceful degradation, CLI
handoff UI, distribution) had shipped in full but still read "Status:
Proposed" -- folded a summary of what actually landed into
PROGRESS.md instead.

issues.md's one drafted issue (inactive products still triggering
backend requests) is already fixed -- ProductDetailPage.tsx gates the
SKU-info effect on meta.active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 11:18:39 +05:30
Shekhar Vaidya
c30c2d2b3b docs: finish check-new-releases README rewrite
Prior commit staged an intermediate version of this file. Completes
the Method 1 / Method 2 writeup with usage examples, the comparison
table, and the field-name bug/session-permit history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 11:10:11 +05:30
Shekhar Vaidya
da8787e93a feat: add check-new-releases tools; fix msdls_v3.py; add missing 25H2 V2 China variants
Moves msdls_v3.py from repo root into scripts/check-new-releases/,
alongside a new Go tool, documented as Method 1 (Python brute-force
range scan, can write results to a catalog-shaped JSON) and Method 2
(Go auto-discovery via page-scrape + bounded adjacent-ID probe, no
range-guessing needed). Only Windows 11 is checked -- 8.1 is fully
frozen and Windows 10 is past end-of-life, so neither will produce a
new consumer ISO again.

Fixed msdls_v3.py's release-name extraction: it checked EditionName/
ReleaseName/FriendlyName, none of which exist in the real API
response -- the actual field is ProductDisplayName, confirmed live.
Also added the vlscppe session-permit call to setup_session(), which
was skipped entirely; higher-risk gap for this script's brute-force
range-scan usage pattern than for a single lookup.

Both tools' live runs surfaced a real catalog gap: product IDs
3322/3323/3325/3326 (Home/Pro China variants of the 25H2 "V2" refresh)
exist on Microsoft's side but weren't in our catalog. Added them to
cli/catalog.go, products.json, validContributeProducts, and
sitemap.xml, and renamed 3321/3324 from our own guessed "(Updated
Oct)" label to Microsoft's actual name for this refresh, "(V2)"
(their internal name is "Windows 11 25H2__V2"; cleaned up the
double-underscore for user-facing display).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 11:07:45 +05:30
Shekhar
f67fe84348
Merge pull request #35 from starkSV/fix/remove-brew-note
fix(frontend): remove redundant brew formula-name disclaimer from CLI page
2026-07-14 00:59:09 +05:30
Shekhar Vaidya
3ceb179ae6 fix(frontend): remove redundant brew formula-name disclaimer from CLI page
The msdl-cli vs msdl naming footnote is useful context in README/release
notes, but unnecessary clutter for a casual visitor on the web CLI page --
the "recommended" badge and the command itself are enough.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 00:58:35 +05:30
Shekhar
11e7f7274f
Merge pull request #34 from starkSV/fix/homebrew-formula-collision
fix: update Homebrew install command to msdl-cli formula
2026-07-14 00:54:20 +05:30
Shekhar Vaidya
4dce41483d fix: update Homebrew install command to msdl-cli formula
homebrew/core already has an unrelated package literally named "msdl"
(a streaming-protocol downloader). brew install msdl silently
resolved to that instead of our tap, since Homebrew always prefers
core for a bare-name collision -- confirmed in production when a
user's `brew install msdl` pulled homebrew-core's msdl 1.2.7-r2
instead of ours. The tap's formula is renamed to msdl-cli
(starkSV/homebrew-msdl, separate repo) to fix this permanently; the
installed command itself is unaffected, still just `msdl`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 00:52:57 +05:30
Shekhar
2fae096b15
Merge pull request #33 from starkSV/feat/install-script
feat: add curl | bash installer for Linux/macOS without Homebrew
2026-07-13 22:29:55 +05:30
Shekhar Vaidya
5eec0351e7 feat: add curl | bash installer for Linux/macOS without Homebrew
Adds a GET /install.sh endpoint on the backend (embedded via Go's
embed package, so the script stays a real, shellcheck-able .sh file
rather than a Go string literal). Auto-detects OS/arch (including
Termux on Android via $PREFIX) and always resolves the latest GitHub
release via the /releases/latest/download/ redirect, so unlike the
winget/brew/AUR manifests it needs no per-release maintenance.

Verified end-to-end in an ephemeral Ubuntu container (both the normal
/usr/local/bin path and the Termux $PREFIX path), and locally against
a running backend instance.

Documented alongside the existing winget/Homebrew instructions in
README.md, the release notes template, the web CLI page, and the
per-product CliHandoff card.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 22:28:23 +05:30
Shekhar
151f70d67f
Merge pull request #32 from starkSV/feat/aur-package
feat: add AUR msdl-bin package; document Homebrew tap everywhere
2026-07-13 13:40:17 +05:30
Shekhar Vaidya
eddf7802bb docs: note AUR publishing is blocked; add Homebrew install everywhere
Arch Linux disabled new AUR account registrations on 2026-06-15 after
a malware campaign compromised 1,500+ AUR packages. There's no
announced reopening date, so aur/msdl-bin/README.md now says so
clearly instead of implying publishing is just a pending step.

Adds the Homebrew tap install command (brew tap starkSV/msdl && brew
install msdl) to every place winget is already documented: README.md,
the release workflow's notes, the web CLI page, and the per-product
CliHandoff card. Also adds the missing linux-arm64 row to the manual
download tables.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 13:39:30 +05:30
Shekhar Vaidya
c14c18e955 feat: generate .SRCINFO via Docker; pin AUR files to LF line endings
.SRCINFO generated with the real makepkg tool inside an ephemeral
archlinux container -- no VM or native Arch install needed, and no
risk of hand-written formatting drift from the makepkg-canonical
output.

Also adds .gitattributes forcing LF for PKGBUILD/.SRCINFO regardless
of platform checkout settings -- both are parsed by shell/makepkg
tooling that breaks on CRLF.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 13:26:26 +05:30
Shekhar Vaidya
e660e95d49 feat: add AUR msdl-bin package; document Homebrew tap
Tracks the AUR PKGBUILD in-repo for version history, mirroring how
winget/manifests/ already works. Also corrects CONTRIBUTING.md's claim
that winget auto-updates via CI -- WINGET_TOKEN isn't set, so that
step always no-ops; package manager updates are all submitted
manually by the maintainer after each release.

Homebrew tap published separately at starkSV/homebrew-msdl.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 13:16:12 +05:30
Shekhar
f514d972a3
Merge pull request #31 from starkSV/chore/cli-v0.3.5-bump
chore(release): bump to v0.3.5 -- backend version string + winget manifests
2026-07-13 12:58:55 +05:30
Shekhar Vaidya
388f115db6 chore(release): bump to v0.3.5 -- backend version string + winget manifests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 12:58:06 +05:30
Shekhar
a314cdcb5e
Merge pull request #30 from starkSV/fix/help-lang-example
feat(cli): homepage landing screen, search fix, and --lang example fix
2026-07-13 12:53:42 +05:30
Shekhar
1432cb3158
Merge pull request #29 from starkSV/feat/sentinel-distinct-sources
feat(backend): approximate distinct-source count for Sentinel rejections
2026-07-13 12:46:06 +05:30
Shekhar Vaidya
327c5e195d simplify(backend): drop date-scoping for Sentinel stats, use flat all-time fields
Matches the shape actually asked for and how every other telemetry
counter in this file already works (all-time cumulative via HIncrBy,
no expiry, no per-day key rotation): /metrics now exposes flat
sentinel_errors and sentinel_distinct_sources_est fields instead of a
nested, date-scoped sentinel_today object.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 12:43:31 +05:30
Shekhar Vaidya
b252ba1c30 feat(backend): approximate distinct-source count for Sentinel rejections
CLI telemetry showed a growing count of Sentinel rejections but no way
to tell whether they come from one user retrying repeatedly or many
distinct users independently getting blocked.

Adds a per-day Redis HyperLogLog (msdl:telemetry:sentinel_hll:<date>)
seeded from the reporting IP whenever a CLI error contains "Sentinel",
plus a parallel daily counter. /metrics now exposes sentinel_today:
{date, errors_today, distinct_sources_est}. No raw IPs are stored --
HLL is a one-way cardinality estimator, and both keys expire after 48h.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 12:37:01 +05:30
Shekhar Vaidya
3994a82d6d feat(cli): homepage landing screen for bare msdl; fix search substring bug
The bare `msdl` invocation showed all 22 products (17 consumer + 5
eval) as a flat numbered list. Replaces it with a curated landing
screen: 5 popular products (picked from real usage telemetry) plus a
2-item eval shortlist, with "list" as an escape hatch to today's full
picker and free text routed through the existing search flow.

Also fixes a search bug: querying "windows 10" incorrectly matched
Windows 11 24H2 because "10" is a substring of its build number
(26100.1742). Query words now must start at a word boundary rather
than matching anywhere, so digit fragments inside unrelated numbers
can no longer collide -- while "arm" still fuzzy-matches "ARM64".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 12:24:43 +05:30
Shekhar Vaidya
b1ee80f9b6 fix(cli): use plain "English" in --lang examples, not "English (United States)"
Consumer Windows products list their English option as "English" (or
"English International"), not "English (United States)" -- the exact
example this used, which is why it was such a common source of --lang
mismatch errors. Applies to --help, the --lang flag description, and
the release workflow's usage example.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 11:27:12 +05:30
Shekhar
6e374e6a45
Merge pull request #28 from starkSV/fix/changelog-generation
fix(ci): correct release changelog generation
2026-07-13 11:18:24 +05:30
Shekhar Vaidya
1d5fc9c0f5 fix(ci): correct release changelog generation
Two bugs combined to make v0.3.4's changelog show the previous
release's version-bump commit instead of the actual change:

1. The path filter (cli/ backend/ frontend/) excluded workflow-only
   changes, so a CI-only addition (like linux-arm64) never appeared.
2. The "bump version + winget manifest" commit is created *after* its
   own tag (it needs the release's SHA256, which doesn't exist until
   after tagging) -- so it always lands in the *next* release's diff
   range instead of its own, showing up as stale noise.

Adds .github/workflows/cli-release.yml to the path filter, filters
out "chore(release): bump" commits as noise, and falls back to a
generic line if a release genuinely has nothing else to show.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 11:16:24 +05:30
Shekhar
e1151ff0cf
Merge pull request #27 from starkSV/docs/contributing
docs: add CONTRIBUTING.md
2026-07-13 11:03:44 +05:30
Shekhar Vaidya
4bb0ba9f2a docs: add CONTRIBUTING.md
Moves the README's inline contributing notes into a dedicated file
and expands them with dev setup, PR conventions, and how CLI releases
work, so contributors have one place to look.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 11:00:46 +05:30
Shekhar
98f61b1831
Merge pull request #26 from starkSV/feat/linux-arm64-build
feat(ci): add linux-arm64 build target for CLI releases
2026-07-13 10:50:49 +05:30
Shekhar Vaidya
e2e41e8ecf feat(ci): add linux-arm64 build target for CLI releases
Telemetry showed a growing number of Termux (Android) users running
the CLI, but the release workflow only builds linux-amd64 -- those
users had to build from source since Termux runs on ARM64. Adds a
linux-arm64 binary and install line so they can just curl it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 10:45:33 +05:30
Shekhar
c4fb7a251b
Merge pull request #25 from starkSV/chore/cli-v0.3.3-bump
chore(release): bump to v0.3.3 -- backend version string + winget manifests
2026-07-12 18:18:05 +05:30
Shekhar Vaidya
a3f75c1ce5 chore(release): bump to v0.3.3 -- backend version string + winget manifests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-12 18:17:30 +05:30
Shekhar
75295943b6
Merge pull request #24 from starkSV/feat/cli-error-messages
fix(cli): list available languages on --lang mismatch; fix telemetry truncation
2026-07-12 18:14:26 +05:30
Shekhar Vaidya
61a296b92b fix(cli): list available languages on --lang mismatch; fix telemetry truncation
Real-world telemetry showed --lang "English (United States)" failing
for several consumer products that only list "English International"
-- the exact example used in --help. The mismatch error now lists the
languages actually available, and the help text notes names vary by
product.

Also fixes truncateError to keep both head and tail of long error
strings (previously kept only the head, which for wrapped errors with
a long URL cut off the actual root cause at the end).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-12 18:13:48 +05:30