Skip to content

Tell people when a new version is out - #8

Merged
corecompiled merged 1 commit into
mainfrom
feat/update-checker
Aug 3, 2026
Merged

Tell people when a new version is out#8
corecompiled merged 1 commit into
mainfrom
feat/update-checker

Conversation

@corecompiled

Copy link
Copy Markdown
Owner

Two releases shipped today, each fixing something the previous got wrong. Anyone still on v0.2.0 has a key validation that accepts any string and an app that crashes on piped input — and no way to discover either is fixed. Shipping fixes nobody learns about is most of the way to not shipping them.

What it does

One request at launch to the GitHub releases API. Compared numerically, so 0.10.0 reads as newer than 0.9.0. Any failure — offline, rate-limited, captive portal, nonsense response — produces silence, not an error.

Shown in grey at the prompt, never mid-reply: a version being available is information, not a warning. The check isn't awaited, so it can't delay the app becoming usable.

Notify only. Nothing is downloaded or installed automatically, in any phase. A tool that replaces its own binary is one people are right to distrust, and it fights the "one file you can copy anywhere" model.

The part worth scrutinising

This project's stated rule is no telemetry, no phone-home. An update check sits close enough to that line to deserve care rather than a shrug.

It sends no identifier, no key, no version history, no usage data — an unauthenticated GET of a public page, the same URL a browser would open. But it does reveal that someone at an IP launched OpenKey. That's a real disclosure, small but not nothing.

So rather than quietly adding it, it's:

  • declared in SECURITY.md with a section on exactly what it does and doesn't send
  • documented in the user guide in plain language
  • switchable off via "checkForUpdates": false in config.json, after which OpenKey talks to OpenRouter and nowhere else

config.json gains that field, so docs/05 is updated.

Verified

Live call against the real GitHub API returns v0.3.0, matching the running version, and correctly shows nothing. 146 tests, including drafts and prereleases being ignored, and that an unparseable version never counts as newer — a bad comparison must not nag someone about an update that isn't real.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WGcarVYpt1mfjk6iFkcDpZ

Two releases shipped today, each fixing something the previous one got
wrong — and anyone still on v0.2.0 has a key validation that accepts any
string and an app that crashes on piped input, with no way to find out
either is fixed. Shipping fixes nobody learns about is most of the way to
not shipping them.

One request at launch to the GitHub releases API, compared numerically so
0.10.0 reads as newer than 0.9.0. Failure of any kind — offline, rate
limited, captive portal, nonsense response — produces silence rather than
an error, because a failed update check is not worth a word on screen.

Notify only. Nothing is downloaded or installed automatically, in any
phase. A tool that replaces its own binary is a tool people are right to
distrust, and it fights the "one file you can copy anywhere" model.

Shown in grey at the prompt rather than yellow mid-reply: a version being
available is information, not a warning, and never urgent enough to
interrupt a reply. The check itself is not awaited, so it cannot delay the
app becoming usable.

The honest part. This project's stated rule is no telemetry and no
phone-home, and an update check sits close enough to that line to deserve
care rather than a shrug. It sends no identifier, no key and no usage data
— an unauthenticated GET of a public page — but it does reveal that
someone at an IP launched OpenKey. So it is declared plainly in SECURITY.md
with what it does and does not send, documented in the user guide, and
switchable off with checkForUpdates in config.json, after which OpenKey
talks to OpenRouter and nowhere else.

config.json gains that field, so docs/05 is updated too.

146 tests, including that an unparseable version never counts as newer —
a bad comparison must not nag someone about an update that isn't real.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGcarVYpt1mfjk6iFkcDpZ
@corecompiled
corecompiled merged commit a85b569 into main Aug 3, 2026
1 check passed
@corecompiled
corecompiled deleted the feat/update-checker branch August 3, 2026 13:07
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.

1 participant