Keep 0.2 — gated on hardware
Do not claim unread-by-operator until a real SNP/TDX integration run flips
FluxVM security.snp_launch_verified / security.tdx_launch_verified.
Required (hardware)
- User-held unwrap — vault opens only after phone or YubiKey unwraps a key
onto a measured/attested guest (
POST /v1/vault/user-held/completestays refuse-closed until verified flags are true). - Flip FluxVM SNP/TDX verified flags after one hardware launch; evidence class
may then become
sev-snp/tdx. - Align with confidential-agent-vms.md (confidential machine type, block volumes, key broker).
Software scaffolding (landed; still software-test)
These ship so the product never mislabels a measured VM:
- Attestation receipt — cockpit
attestationobject: profile, softimage_hash,evidence_class,snp_launch_verified/tdx_launch_verified(false until hardware),host_recover_allowed,operator_can_read, honesty text. Console Keep view +/keep/cockpitshow it. - No host recover on confidential —
POST /v1/sessions/{id}/host-recoveralways 403 when the profile is confidential or confidential launch is active. On measured/standard, dual keys (ZYVOR_AGENT_RECOVER_KEY_A+_B) are required; grant is audited and still labeled software-test. - Host guest-agent channel helpers —
FluxVm::process_for_session/fs_write_for_sessionrefuse when confidential launch is active. - Browser screenshot + screencast —
GET …/browser/screenshotandWS …/browser/screencast(frames only; no input) via FluxVM sandbox WS bridge; fabricdWS /ws/sessions/{id}/browser/screencast?token=for the console. - User-held challenge API —
POST /v1/vault/user-held/challengemints a nonce;completereads FluxVMGET /v1/security/capabilitiesand is 403 untilsnp_launch_verified/tdx_launch_verified. When verified, a key-broker stub grants a vault lease (wrapped disk key still not done). fabricd proxies/api/vault/statusand/api/vault/user-held/*. - browser-agent bake script —
scripts/keep-bake-browser-agent.sh.
Soft scaffolding for Keep 0.2 is complete. Until hardware: the host can still see a measured VM. That is intentional.