feat(cli): nudge to upgrade when a newer roar is available on pypi#131
Merged
Conversation
Checks pypi for the latest roar-cli version in the BACKGROUND telemetry uploader subprocess (already detached + fire-and-forget) and caches the result to disk under the cache home (~24h TTL). The foreground only ever reads the cache, so the command path never makes a network call — zero added latency. `roar init` emits a `hint:` (git-advice style, gated by hints.enabled) when the cached latest is newer than the running version. Every path is fail-open: a slow/unreachable pypi, or a corrupt/missing cache, simply means no nudge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
TrevorBasinger
approved these changes
May 28, 2026
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.
Why
Users on stale roar versions have no signal that a newer one exists.
How (zero foreground latency)
roar.telemetry.uploader, already detached + DEVNULL'd), and caches{latest, checked_at}to disk under the cache home with a ~24h TTL. The foreground command path never makes a network call — it only reads the cache.roar initemits an amberhint:(git-advice style, gated byhints.enabled) when the cached latest is newer than the running version, e.g.:hint:(notwarning:) is deliberate — an available upgrade is advisory, not an error; the hint system is exactly the opt-out-able advice channel for it.Tests
tests/unit/test_version_check.py(8): hint when newer / none when current-or-newer / none without-or-corrupt cache (fail-open), refresh writes cache, refresh skips network when cache is fresh, refresh fail-opens on network error. ruff clean; existing init + telemetry suites green.🤖 Generated with Claude Code