Skip to content

docs: ADR-112, verify the signed runtime release proof once per launch - #5514

Open
auser wants to merge 2 commits into
mainfrom
docs/adr-112-verify-release-proof-once
Open

auser wants to merge 2 commits into
mainfrom
docs/adr-112-verify-release-proof-once

Conversation

@auser

@auser auser commented Nov 15, 2026

Copy link
Copy Markdown
Collaborator

Part of #5487.

A cold launch of the signed v0.28.0-rc.2 release takes about 5.6 s on an idle machine against a 300 ms gate, and about 4.5 s of it is one check repeated: the signed guest-runtime archive is verified from scratch seven times per launch, at about 640 ms each (read and digest, two signature checks, a temporary copy, and decompressing and SHA-256ing all of its members). It is deterministic, which is why it looked like load.

This PR is documentation only. It adds ADR-112 and updates the launch-cost section of the factory-edge contract, which still said the cause was not established.

The ADR is written for a reader who starts cold: a short summary, the measurements and what was ruled out, the decision (verify once per launch, scoped to a launch and not the process, so a long-lived embedder such as mvm-client or mvm-hostlib still verifies at every launch), the conditions that keep it the same verification, what it does not do (it projects to about 1.7 s, not 300 ms), the alternatives (including the persisted record, which is a cached authorization and needs its own decision, and a throwaway that cached only the member check and took 5.58 s to 3.03 s), the tests the implementation needs, and how to repeat the measurement on a temporary cloud VM and clean it up.

Status: Proposed. The direction (verify once) is chosen; the review of the claim-20 consequences is still to be done before any code lands. No code changes here.

Spec hygiene, overclaim, ADR coverage, doc links, deferrals, honesty, declared-backing and claim-catalog gates pass.

A cold launch of the signed v0.28.0-rc.2 release takes about 5.6 s on an idle
machine, against a 300 ms gate. About 4.5 s of it is the signed guest-runtime
archive being verified from scratch seven times per launch, at about 640 ms each:
read and digest, two signature checks, a temporary copy, and decompressing and
SHA-256ing all of its members. The cost is deterministic, which is why it looked
like load.

The ADR records the measurements and what was ruled out, decides to verify once
per launch (scoped to a launch, not the process, so a long-lived embedder still
verifies at every launch), lists the conditions that keep it the same
verification, the alternatives including the persisted record that is left for a
separate decision, and the tests the implementation needs. It also records how to
repeat the measurement on a temporary cloud VM and clean it up.

The contract document's launch-cost section now states the cause and links to
the ADR instead of saying it was not established.
…rmed claim

The guest-runtime archive is 19.8 MB compressed and 42.4 MB uncompressed in 77
members, measured on the installed rc.2 archive; the 62 MB figure came from a
cache directory size that included other files. Also say that software SHA-256
as part of the 420 ms is not established, since the CPU flags were not checked.

This branch has not been deployed

No deployments
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