Skip to content

Updates & signing

There is no custom “firmware.” usb.plan.ai ships software on a standard drive, so “updates” means a signed app/update pipeline, not a hardware firmware flash. (If a branded hardware SKU ever ships, firmware gets its own doc.)

NeedToolNotes
Signed releasescosign (sign-blob --bundle)Sign release ZIPs, SBOMs, and the model manifest.
Rollback-safe updaterThe Update Framework (TUF)Signed metadata, expiry, version counters, target hashes, delegated roles.
Delta updatesxdelta3 patches as TUF targetsVerify patch SHA → apply into a staging dir → verify final tree SHA → switch.
SBOMsyft (-o cyclonedx-json)One per release.
RollbackVersioned dirs: app/versions/1.0.4/ + app/current-version.txtKeep the last known-good. Avoid symlinks; exFAT doesn’t do them.
Runtime integritypreflight-checkVerifies release manifest, engine binary hashes, model SHA-256, and license notices before launch.
download TUF metadata → verify signatures + expiry
→ download full ZIP or xdelta3 patch → verify SHA
→ apply into app/versions/<new>/ (staging)
→ smoke test → atomically update current-version.txt

Model packs update separately. They are content-addressed by SHA-256, so a small app patch never rewrites 20 GB+ GGUF files. See the software stack for the models.lock.json shape and the security model for the threat boundary.

Sources: cosign / Sigstore · The Update Framework · syft. Pin exact tool versions per release.