Tell people when a new version is out - #8
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.0reads as newer than0.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
GETof 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:
SECURITY.mdwith a section on exactly what it does and doesn't send"checkForUpdates": falseinconfig.json, after which OpenKey talks to OpenRouter and nowhere elseconfig.jsongains that field, sodocs/05is 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