appstore: tombstone + deprecation redirect for io.pilot.smolmachines → io.pilot.smol#357
Closed
Alexgodoroja wants to merge 2 commits into
Closed
appstore: tombstone + deprecation redirect for io.pilot.smolmachines → io.pilot.smol#357Alexgodoroja wants to merge 2 commits into
Alexgodoroja wants to merge 2 commits into
Conversation
…chines → io.pilot.smol Renames the smolmachines app id to io.pilot.smol (rename + cloud upgrade) without breaking existing installs. A hard delete would drop the app's publisher pin, and the daemon supervisor fail-closes an installed app whose id has no pin — so instead the old id becomes a hidden "tombstone" that redirects. Catalogue (needs re-sign — see below): - catalogue.json: replace the io.pilot.smolmachines entry with a minimal tombstone (id + publisher pin retained so existing installs keep running; renamed_to: io.pilot.smol; hidden). Drops the bundle/metadata — it is no longer installable. - delete catalogue/apps/io.pilot.smolmachines/ (io.pilot.smol carries the app now). - README: document the renamed_to + hidden fields and the rename procedure. pilotctl (cmd/pilotctl): - catalogueEntry gains optional renamed_to + hidden (omitempty; v2-compatible, older clients ignore them). - resolveRenamed(): shared one-hop resolver that warns on stderr and returns the canonical entry. Wired into install (installs the canonical app), view (shows the renamed app), call (warns with a switch hint on a socket miss — it does not silently retarget, since the method namespace changes with the rename), and the catalogue listing (tombstone/hidden entries are omitted). - appstore_rename_test.go: covers tombstone→canonical, plain id, missing canonical, and one-hop-only (no loop). Verified end-to-end with a dev-signed catalogue: `catalogue` hides smolmachines, `view`/`install io.pilot.smolmachines` warn and resolve to io.pilot.smol (install fetched the io.pilot.smol bundle). All cmd/pilotctl tests pass except TestLoadCatalogue_VerifiesSignedRepoCatalogue, which fails until catalogue.json.sig is regenerated with the release key (I don't hold it): pilotctl appstore sign-catalogue --key <release.key> catalogue/catalogue.json Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Regenerates catalogue.json.sig over the tombstoned catalogue so it verifies against the embedded catalogue anchor. TestLoadCatalogue_VerifiesSignedRepoCatalogue and the full cmd/pilotctl suite are green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
Superseded by #360, which bundles this change with the other three open catalogue PRs so the shared |
auto-merge was automatically disabled
July 8, 2026 00:46
Pull request was closed
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.
Removes io.pilot.smolmachines from the catalogue and redirects it to io.pilot.smol (the rename + cloud upgrade), without breaking existing installs. Pairs with the website change (pilot-protocol/website#74).
Why not a hard delete
The daemon supervisor pins each installed app's publisher key from its
catalogue.jsonentry and fail-closes (stops) an installed app whose id has no pin (cmd/daemon/main.go→internal/catalogue). A hard delete ofio.pilot.smolmachineswould therefore stop every already-installed copy — exactly the "installed clients break" objection that closed website#74. So the old id stays as a hidden tombstone that preserves the pin and redirects.Catalogue
catalogue.json: theio.pilot.smolmachinesentry is replaced by a minimal tombstone —id+publisherretained (existing installs keep their pin and keep running), plusrenamed_to: io.pilot.smolandhidden: true. Bundle/metadata pins dropped: it is no longer installable.catalogue.json.sig: re-signed with the release key — the signed-catalogue test and fullcmd/pilotctlsuite are green. ✅catalogue/apps/io.pilot.smolmachines/(io.pilot.smol carries the app).catalogue/README.md: documents the newrenamed_to+hiddenfields and the rename procedure.pilotctl (
cmd/pilotctl)catalogueEntrygains optionalrenamed_to+hidden(omitempty; v2-compatible — older clients ignore them, keep"version": 2).resolveRenamed()— shared one-hop resolver that prints a deprecation warning to stderr and returns the canonical entry. Wired into:smolmachines.*→smol.*);--json).appstore_rename_test.go— tombstone→canonical, plain id, missing canonical, and one-hop-only (no loop).Verification (end-to-end, against the re-signed catalogue)
appstore catalogue→ smolmachines not listed, io.pilot.smol listed.appstore view io.pilot.smolmachines→ deprecation warning + renders the io.pilot.smol detail.appstore install io.pilot.smolmachines→ warning + fetched the/bundles/io.pilot.smol/1.2.0/...bundle (sha256 OK).go test ./cmd/pilotctl/ ./internal/catalogue/→ all green.🤖 Generated with Claude Code