Skip to content

Add offline signed-update verification and checkpoint codec - #8294

Merged
lidge-jun merged 43 commits into
devfrom
codex/auto-update-kernel-19f8b8aa1e
Nov 8, 2026
Merged

lidge-jun merged 43 commits into
devfrom
codex/auto-update-kernel-19f8b8aa1e

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Add bounded offline verification for signed update roots, transitions, releases, targets, artifacts, and metadata. Evidence handles and detached snapshots do not authorize download or installation.
  • Generate the initial public trust-root resources from the existing updater pin and share minisign primitives with the desktop release verifier while preserving its legacy adapter behavior.
  • Add a canonical, bounded checkpoint payload codec for future trust-state work. Its decoded records and digest are unverified data; they do not authenticate persistence, establish freshness, or authorize an update.
  • The roadmap landed on dev in docs: plan automatic update parity #8275. This branch merged dev (64036bf) and kept dev's audited roadmap for the add/add conflicts in devlog/_plan/261107_auto_update_parity/, so the diff no longer touches devlog/. Durable trust ownership, witness, feed production, native verifier parity, and activation remain separate work.

Follow-ups recorded before this kernel is wired into any update path (all fail closed today; nothing calls these paths yet):

  • Artifact verification requires a version: field in the trusted comment; the pinned Tauri CLI signs timestamp:…\tfile:… only. Add the version at signing time or bind it through the signed target digest.
  • An expired embedded root cannot verify its signed successor; decide on checking expiry on the final root of a chain before activation.
  • Separate root keys from the CI release key and add a purpose tag to metadata signatures before durable trust promotion.
  • Bound checkpoint history acceptedAtMs by clockHighWaterMs before the checkpoint format is frozen; run the Node 18 interoperability harnesses from a registered test or describe them as manual.

Verification

  • Head 64036bf63, isolated homes (env -i with temporary HOME, OPENCODEX_HOME, CODEX_HOME, CLAUDE_CONFIG_DIR, TMPDIR): bun test tests/update/ tests/ci-workflows/release-desktop-scripts.test.ts tests/ci-workflows/release-pipeline-contract.test.ts tests/test-layout.test.ts tests/test-layout-tooling.test.ts tests/lab/core-lab-boundary.test.ts tests/ci-workflows/file-size-ratchet.test.ts: 1163 pass, 317 skip, 0 fail. bun run typecheck, bun run privacy:scan, bun run structure:check: pass.
  • Fresh independent review at 64036bf63: PASS (three P3 items above). Separate security review at 64036bf63: PASS (P3 items above; signature soundness, root transitions, target/artifact binding, evidence handles, bounded JSON and the release-verifier extraction checked).
  • Pushed with --no-verify; the repository installs no pre-push hook. Local full suite NOT RUN (shared-host contention); hosted ci:full on this head is the broad gate. Not run: native Tauri parity, other-platform execution, actual publication or installation, Node 18 harness runs.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 10 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between fabc69e and 64036bf.

Files ignored due to path filters: 1

  • tests/fixtures/update-checkpoint/initial.bin is excluded by !**/*.bin
Files selected for processing: 43

  • desktop/scripts/verify-release-assets.ts
  • desktop/src-tauri/update-trust-root.json
  • scripts/generate-update-trust-root.ts
  • scripts/test-layout/layout.json
  • src/update/minisign.d.mts
  • src/update/minisign.mjs
  • src/update/signed-supply.d.mts
  • src/update/signed-supply.mjs
  • src/update/trust-root.json
  • src/update/update-bounded-json.d.mts
  • src/update/update-bounded-json.mjs
  • src/update/update-bytes.d.mts
  • src/update/update-bytes.mjs
  • src/update/update-candidate-id.d.mts
  • src/update/update-candidate-id.mjs
  • src/update/update-checkpoint-codec.d.mts
  • src/update/update-checkpoint-codec.mjs
  • src/update/update-contracts.d.mts
  • src/update/update-contracts.mjs
  • src/update/update-signature-threshold.d.mts
  • src/update/update-signature-threshold.mjs
  • src/update/update-signed-version.d.mts
  • src/update/update-signed-version.mjs
  • src/update/update-trust-anchor.d.mts
  • src/update/update-trust-anchor.mjs
  • structure/desktop-shell.md
  • structure/runtime.md
  • tests/fixtures/test-layout-expected.json
  • tests/fixtures/update-checkpoint/corpus.json
  • tests/fixtures/update-checkpoint/history-limits.json
  • tests/helpers/update-node-harness.mjs
  • tests/helpers/update-release-adapter-entry.ts
  • tests/helpers/update-release-adapter-harness.mjs
  • tests/update/update-bounded-json.test.ts
  • tests/update/update-candidate-id.test.ts
  • tests/update/update-checkpoint-codec.test.ts
  • tests/update/update-contracts.test.ts
  • tests/update/update-external-metadata.test.ts
  • tests/update/update-minisign.test.ts
  • tests/update/update-root-snapshot.test.ts
  • tests/update/update-signed-supply.test.ts
  • tests/update/update-signed-version.test.ts
  • tests/update/update-trust-root.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions

github-actions Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Nov 7, 2026
@lidge-jun lidge-jun changed the title Add offline signed-update verification kernel Add offline signed-update verification and checkpoint codec Nov 7, 2026
@lidge-jun lidge-jun added the ci:full Run the four full Ubuntu test shards on this pull request label Nov 7, 2026
Resolve the add/add conflicts in devlog/_plan/261107_auto_update_parity by keeping the audited roadmap that landed on dev in #8275.
@lidge-jun
lidge-jun marked this pull request as ready for review November 8, 2026 11:37
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner November 8, 2026 11:37
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-08T11:39:30.090307Z 64036bf Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@lidge-jun
lidge-jun merged commit 10972dd into dev Nov 8, 2026
45 of 47 checks passed
@lidge-jun
lidge-jun deleted the codex/auto-update-kernel-19f8b8aa1e branch November 8, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:full Run the four full Ubuntu test shards on this pull request documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant