fix(self): self update reported success without updating (2026.8.17.2) - #555
Merged
Conversation
Four artifact checks and six sandbox assertions, plus the two things that only show up when you run them. `bump-index` reported SUCCESS and merged nothing -- index `latest` still named 2026.8.14.1 until PR #642 was merged by hand. That is the third time this has been recorded and it was the same shape each time, which is the argument for `tools/verify-release.sh` existing at all. (A side benefit: the bot's four sha256 values and the ones computed locally from the downloads agree byte for byte, which is an independent check neither side could give alone.) And a new defect, found because verifying the release required updating the home to it and that did not work: #554 -- `self update` exits 0 without updating on any home that has ever had a `local:` build, because `use <name> latest` resolves within the currently active provider and `cmd_update` only checks that `use` returned 0. It is the seventh row of this release's own "claimed something it never observed" table, and it lands on the remedy command this whole round kept pointing people at. Also records the eight review angles the work was asked to cover, and says plainly which one it did not: performance was never measured.
Closes #554. Measured on a real home the day 2026.8.17.1 shipped, while trying to update that home so the sandbox verification could run against the release: $ xlings self update xim:xlings@2026.8.17.1 is already installed [xlings] xlings -> local:0.4.51 $ echo $? 0 $ xlings --version xlings 0.4.51 Isolated to the third step. `use <name> latest` resolves WITHIN the currently active provider: from 2026.8.17.1 active -> xlings -> 2026.8.17.1 from local:0.4.51 active -> xlings -> local:0.4.51 Same command, same workspace (both are in `installed`), and the result depends on which provider was active before it ran. That behaviour is defensible on its own -- silently switching provider for an ambiguous name is worse -- but `cmd_update` only checked `rc != 0`, and `use` returns 0 because it did activate something. So a home that ever carried a `local:` build could never update again, and was never told. `cmd_update` already carries a comment about exactly this shape from the 0.4.69 404. That one was fixed by checking the install step's exit code; this is the same conclusion reached through a different door, and it is the command this release kept pointing people at as a remedy. The test is the PROVIDER, not the version. "Did the version change" is the obvious check and it is wrong: on an already-current home nothing changes and that IS success, so it would fail every no-op update -- which I confirmed by writing it that way first and running it. A namespaced active version is precisely the statement that we are not on the index build; an index install records a bare version. `update_landed_on_index_build` is exported so the rule has a test. It was inline, and inline is why the original had no check: there was nothing to write a test against. Both directions covered, plus the no-op case and the "no recorded active version is not a verdict" case. Verified end to end on the real home, both directions: from `local:0.4.51` active it now exits 1 naming the provider and what to run; from an already-current home it still exits 0 and prints the migration nudge.
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 things: the post-release record for 2026.8.17.1, and a fix for a defect that release verification itself uncovered.
self updatereported success without updating — closes #554Measured on a real home the day 2026.8.17.1 shipped, while updating that home so the sandbox verification could run against the release:
Isolated to the third step.
use <name> latestresolves within the currently active provider:xlings use xlings latest2026.8.17.1active2026.8.17.1✅local:0.4.51activelocal:0.4.51❌Same command, same workspace — both are in
installed— and the result depends on which provider was active before it ran. That behaviour is defensible on its own; silently switching provider for an ambiguous name is worse. Butcmd_updateonly checkedrc != 0, andusereturns 0 because it did activate something. A home that ever carried alocal:build could never update again, and was never told.cmd_updatealready carries a comment about exactly this shape from the 0.4.69 404. That one was fixed by checking the install step's exit code. This is the same conclusion through a different door — and it lands on the command this release kept pointing people at as a remedy.The test is the provider, not the version
"Did the version change" is the obvious check and it is wrong: on an already-current home nothing changes and that is success, so it fails every no-op update. I know because I wrote it that way first and ran it. A namespaced active version is precisely the statement that we are not on the index build; an index install records a bare version.
update_landed_on_index_buildis exported so the rule has a test. It was inline, and inline is why the original had no check at all — there was nothing to write a test against.Verified end to end on the real home, both directions:
Post-release record for 2026.8.17.1
Four artifact checks (
tools/verify-release.sh) and six sandbox assertions, plus the two things that only show up by running them:bump-indexreported SUCCESS and merged nothing. Indexlateststill named 2026.8.14.1 until PR #642 was merged by hand. Third time recorded, same shape each time — which is the argument for the verifier existing. Side benefit: the bot's four sha256 values and the ones computed locally from the downloads agree byte for byte, an independent check neither side could give alone.The notes also record the eight review angles the work was asked to cover, and say plainly which one it did not: performance was never measured.
Verification
43 unit binaries green, including four new
SelfUpdateLandingcases. Version bumped to 2026.8.17.2;test_version_consistency.pypasses.