release: v0.4.12 — add kuri update, and actually install kuri-mobile - #191
Merged
Conversation
Two problems that made the installed product differ from the built one. install.sh copied out kuri, kuri-agent, kuri-fetch and kuri-browse but not kuri-mobile, which has been inside the release tarball since 0.4.6. Since `kuri android` and `kuri ios` exec it as a sibling binary, every install since then left those subcommands failing with "failed to exec 'kuri-mobile'" after a successful-looking install — four releases of mobile work that could not be delivered through the documented install path. `kuri update` did not exist; upgrading meant remembering an installer URL and piping it to a shell. It now reads the stable channel manifest, compares against the compiled-in version, and installs if they differ. --check reports without changing anything, --dir overrides the destination, and by default it installs next to the running binary so an update replaces this install rather than creating a second one that may not win on PATH. Two details worth keeping: the SHA-256 is verified in process rather than shelled out, because install.sh's shasum/sha256sum/openssl fallback chain silently skips verification when none is present; and binaries are installed by rename onto the target, since copying over a running executable fails with ETXTBSY on Linux. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012gzdKWXk7UbHm5TtSGqYBJ
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.
Hotfix
Two problems that made the installed product differ from the built one.
install.shnever installedkuri-mobilekuri-mobilehas been inside the release tarball since 0.4.6. It was built, packaged, shipped — and then dropped on the floor at install time. Becausekuri androidandkuri iosexec it as a sibling binary:…every install since 0.4.6 produced a
kuriwhose mobile subcommands fail withfailed to exec 'kuri-mobile', after an install that reported success. Four releases of mobile work were undeliverable through the documented install path.Caught by trying to answer "how do I update kuri" and reading the installer instead of assuming it worked.
kuri updatedid not existUpgrading meant remembering an installer URL and piping it to a shell. Now:
--checkreports what would happen and changes nothing--dir=<path>overrides the destination. By default it installs next to the running binary, so an update replaces this install rather than creating a second one that may or may not win on PATHupgradeis accepted as an alias — failing an upgrade command over vocabulary is a poor way to meet someone trying to get onto a newer versionTwo implementation choices that are the point of doing this in the binary rather than in shell:
The SHA-256 is verified in process.
install.shtriesshasum, thensha256sum, thenopenssl, and if none is present it skips verification entirely and installs anyway. A verification step that depends on which of three tools happens to be on PATH is a verification step that can quietly not happen.Binaries are installed by
rename, notcp. Copying onto a running executable fails withETXTBSYon Linux and can corrupt a concurrently-executing image elsewhere. The staged file is written into the destination directory, since rename cannot cross filesystems and/tmpfrequently is one.curlis used purely as transport, deliberately — routing this through the in-tree TLS stack would let a TLS regression break the one command meant to repair it.Verified
zig build test(root)zig build test(kuri-mobile)zig build e2e-ioskuri update --checkagainst the live channelkuri update --bogusNew unit tests cover manifest parsing (valid, missing-platform, malformed-JSON), the SHA-256 helper against a known digest, and the
v-prefix handling that the version comparison depends on.The upgrade path itself gets a real end-to-end test once this publishes: a stashed 0.4.11 binary runs
kuri updateagainst the live channel and must land on 0.4.12.🤖 Generated with Claude Code
https://claude.ai/code/session_012gzdKWXk7UbHm5TtSGqYBJ