Skip to content

appstore: carry install.json/install.sh on install + wire trust anchor#318

Merged
TeoSlayer merged 5 commits into
mainfrom
install-spec-and-trust-wiring
Jun 22, 2026
Merged

appstore: carry install.json/install.sh on install + wire trust anchor#318
TeoSlayer merged 5 commits into
mainfrom
install-spec-and-trust-wiring

Conversation

@Alexgodoroja

Copy link
Copy Markdown
Collaborator

Carry install.json/install.sh on install + wire the trust anchor

Two changes the native-CLI (proc.exec) app delivery needs, surfaced by an end-to-end smol machines install via pilotctl. Stacks on #317.

  1. pilotctl appstore install now stages install.json + install.sh into $APP (previously only manifest.json + the binary), so an asset-delivering cli adapter can read $APP/install.json and fetch/verify/stage its binaries from the R2 artifact registry. Covered by the bundle sha — no new trust surface.
  2. The daemon now populates manifest.TrustedPublishers from PILOT_TRUSTED_PUBLISHERS (the reviewed publisher registry) and honors PILOT_APPSTORE_ROOT. app-store#23 enforces the trust anchor for non-sideloaded installs, but nothing wired the list — so the proc.exec daemon skipped every catalogue app (cosift/sixtyfour included). ⚠️ Without this, upgrading the daemon to the proc.exec version bricks the existing app store.

Verified: catalogue install → daemon spawn (sideloaded=false, full grants) → adapter stages smolvm from R2 → pilotctl appstore call runs a real microVM. A/B report: https://raw.githack.com/pilot-protocol/app-template/feat/r2-artifacts-on-cli/docs/samples/ab-report-smolvm.html

🤖 Generated with Claude Code

Alex Godoroja and others added 2 commits June 22, 2026 11:13
Repoint the pinned app-store dependency to the commit that adds the proc.exec
capability, so the daemon's manifest validation accepts CLI apps (which ship a
proc.exec grant scoped to one command). Without the bump, the deployed daemon
validates against a capability vocabulary that lacks proc.exec and rejects them.

No daemon code changes: pilotctl/supervisor already delegate validation to
app-store's manifest.Validate(). Adds a regression test asserting a proc.exec
manifest validates (and that a wildcard target is still rejected).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… anchor

Two changes the native-CLI (proc.exec) app delivery needs, surfaced by an
end-to-end smol machines install via pilotctl:

1. pilotctl appstore install now stages install.json + install.sh into $APP
   (previously only manifest.json + the binary), so an asset-delivering cli
   adapter can read $APP/install.json and fetch/verify/stage its binaries from
   the R2 artifact registry. Covered by the bundle sha, no new trust surface.

2. The daemon now populates manifest.TrustedPublishers from
   PILOT_TRUSTED_PUBLISHERS (the reviewed publisher registry) and honors
   PILOT_APPSTORE_ROOT. app-store#23 enforces the trust anchor for
   non-sideloaded installs, but nothing wired the list — so the proc.exec
   daemon skipped EVERY catalogue app. Without this, upgrading the daemon to
   the proc.exec version bricks the existing app store.

Verified: catalogue install → daemon spawn (sideloaded=false) → adapter stages
smolvm from R2 → pilotctl appstore call runs a real microVM.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Alexgodoroja Alexgodoroja requested a review from TeoSlayer as a code owner June 22, 2026 20:20
@Alexgodoroja Alexgodoroja changed the base branch from bump-app-store-proc-exec to main June 22, 2026 22:52
Comment thread cmd/pilotctl/appstore.go Fixed
Comment thread cmd/pilotctl/appstore.go Fixed
…r (G304)

Mirror the binary-copy containment pattern: resolveUnder cleans the join and
verifies the path stays under the bundle/staging root, clearing the two gosec
'path traversal via taint analysis' (G304) alerts on the aux-file carry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@TeoSlayer TeoSlayer enabled auto-merge (squash) June 22, 2026 22:59
TeoSlayer
TeoSlayer previously approved these changes Jun 22, 2026
Comment thread cmd/pilotctl/appstore.go Fixed
The aux paths are resolveUnder-confined (bundle/staging roots) and aux is a
constant allow-list ('install.json'/'install.sh'), so no traversal is possible.
gosec's SSA taint analyzer can't see resolveUnder as a sanitizer, so annotate the
file ops + the new staging-cleanup with #nosec G703 (the same pattern this file
already uses for the binary copy).
@TeoSlayer TeoSlayer merged commit 7422e26 into main Jun 22, 2026
15 checks passed
TeoSlayer pushed a commit that referenced this pull request Jun 23, 2026
…anchor) (#320)

daemon: drop PILOT_TRUSTED_PUBLISHERS wiring; bump app-store (trust anchor removed)

The per-publisher trust anchor is removed in app-store (the release-signed
catalogue is the source of truth). So the env-var wiring added in #318 is no
longer needed — a fresh node installs and runs catalogue apps with zero config.

- remove the PILOT_TRUSTED_PUBLISHERS env block + the now-unused manifest import
- bump github.com/pilot-protocol/app-store to the trust-anchor-removal commit
- keep PILOT_APPSTORE_ROOT honoring

Depends on pilot-protocol/app-store#25; re-pin go.mod to the merged app-store
commit before this lands. Verified: a fresh node with NO env installs
io.pilot.smolmachines from the real catalogue and boots a microVM.

Co-authored-by: Alex Godoroja <alex@vulturelabs.io>
Co-authored-by: Claude Opus 4.8 (1M context) <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.

3 participants