Skip to content

manifest: pilotctl that deletes app state on upgrade refuses this version (0.4.1) - #50

Merged
TeoSlayer merged 1 commit into
mainfrom
fix/upgrade-gate-old-pilotctl
Oct 8, 2026
Merged

TeoSlayer merged 1 commit into
mainfrom
fix/upgrade-gate-old-pilotctl

Conversation

@TeoSlayer

Copy link
Copy Markdown
Contributor

Problem

pilotctl v1.13.0–v1.13.9 delete an app's dir on appstore upgrade, and the updater runs that hourly as upgrade --all. State carry-forward first shipped in v1.13.10 (pilotprotocol#467).

Publishing 0.4.0 would have deleted 0.3.3 wallets' EVM keys on those nodes. The delete happens before 0.4.0 ever runs, so there is no copy for it to restore. This was tested with real builds of v1.13.0, v1.13.5 and v1.13.9; 0.4.0 came up with a new key each time. Its catalogue PR (pilotprotocol#529) was closed unmerged.

Fix

  • The manifest declares identity.verify. app-store v1.0.3 added this capability, and v1.0.3 is what pilotctl v1.13.10 ships.
  • Older validators reject the unknown capability, so v1.13.0–v1.13.9 refuse the upgrade before touching the install, and the key stays on disk.
  • v1.13.10 and later upgrade and keep the key.
  • v1.12.x and older have no upgrade command.
  • The wallet does not use the capability; it is a declaration only.
  • TestManifestRefusedByPilotctlThatDeletesState fails if every grant's cap is known to v1.13.0–v1.13.9. It fails with the grant removed.
  • Version 0.4.1. v0.4.0 is released here but was never in the catalogue.

Tested

A bundle with this manifest and the released 0.4.0 binary went through catalogue install 0.3.3 → upgrade → uninstall → reinstall, with 0.3.3 and the new version signed by different publisher keys:

pilotctl result 0.3.3 key
v1.13.0, v1.13.5, v1.13.9 upgrade refused: grants[21].cap "identity.verify" is not a known capability intact
v1.13.10, v1.17.0, main upgrade, uninstall, reinstall same key throughout

🤖 Generated with Claude Code

…sion (0.4.1)

pilotctl v1.13.0-v1.13.9 delete an app's dir on `appstore upgrade`,
which the updater runs hourly as `upgrade --all`. Publishing 0.4.0
would have deleted 0.3.3 wallets' EVM keys on those nodes before 0.4.0
ever ran, so there is no copy to restore (tested with real builds of
v1.13.0, v1.13.5 and v1.13.9).

The manifest now declares identity.verify, which app-store v1.0.3
(pilotctl v1.13.10, the first that carries state forward) added. Older
validators reject it, so those pilotctl versions refuse the upgrade before
touching the install and the key stays on disk; v1.13.10 and later
upgrade and keep it. The wallet does not use the capability.
TestManifestRefusedByPilotctlThatDeletesState keeps the grant in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@TeoSlayer
TeoSlayer merged commit c1e2963 into main Oct 8, 2026
2 checks passed
@TeoSlayer
TeoSlayer deleted the fix/upgrade-gate-old-pilotctl branch October 8, 2026 14:28
@codecov

codecov Bot commented Oct 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

TeoSlayer added a commit to pilot-protocol/app-template that referenced this pull request Oct 8, 2026
pilot-app validated manifests with a June app-store pseudo-version, older
than v1.0.3, which added the identity.verify capability. Wallet 0.4.1
declares it (pilot-protocol/wallet#50) so pilotctl that deletes app
state on upgrade refuses the version; without this bump the review gate,
and so the submission CI and publish-on-merge, reject the wallet.

The go directive follows app-store to 1.25.10; every workflow uses the
latest 1.25 or go.mod. Generated adapters keep their own app-store pin.

Co-authored-by: Teo Calin <calinteodor@Teos-MacBook-Pro.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
TeoSlayer added a commit to pilot-protocol/app-template that referenced this pull request Oct 8, 2026
Replaces 0.4.0, which was never in the catalogue: pilotctl v1.13.0-v1.13.9
would have deleted 0.3.3 wallets' EVM keys while upgrading to it. 0.4.1's
manifest declares identity.verify, which those versions do not know, so
they refuse the upgrade and the key stays (pilot-protocol/wallet#50).
The four bundles are the wallet v0.4.1 release assets, signed with the
rotated publisher key.

Co-authored-by: Teo Calin <calinteodor@Teos-MacBook-Pro.local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant