A3S OCI Runtime Roadmap
August 22, 2026 · View on GitHub
Status: In development
Standards baseline: OCI Runtime Specification 1.3.0
Primary consumer: A3S Box through a3s-oci-sdk
Release Contract
The production runtime must implement every normative OCI Runtime Specification 1.3.0 requirement applicable to Linux containers and every driver it advertises. A reduced A3S-only OCI profile is not an acceptable terminal state.
Complete means all of the following:
- every applicable
config.json, state, and feature property is represented without loss; - every applicable value and cross-field rule is validated before runtime state mutation;
- every requested control is enforced or the operation fails;
- lifecycle and hook ordering matches the specification;
- recovery preserves the same externally observable state;
- upstream OCI validation and lifecycle suites pass;
- the feature report describes only behavior that passed the same release build's tests.
The SDK is also a release blocker. A3S Box must be able to perform the complete supported lifecycle without constructing CLI commands or importing platform driver internals.
Repository Boundary
A3S OCI Runtime is the sole low-level execution engine. It owns exact OCI validation, actual container state, durable operation replay, process control, platform drivers, utility VMs, the guest agent, and runtime-scoped cleanup.
A3S Box owns product configuration and desired state, image distribution and
builds, named volumes and product snapshots, network/IPAM/DNS policy, Compose,
health and restart policy, log retention, and secret authorization. Box passes
prepared, immutable execution inputs through a3s-oci-sdk; OCI Runtime does
not pull images, build images, implement Compose, or become a Docker daemon.
The dependency direction is strict:
A3S Box or containerd shim
|
| a3s-oci-sdk over bounded local IPC
v
OCI Runtime host service
|
+-- native Linux driver
`-- utility-VM drivers (KVM / HVF / WHPX)
|
`-- authenticated Linux guest agent
Boundary rules:
- OCI Runtime must not depend on Box product crates or durable state types. Box-specific fixtures may test compatibility but cannot define runtime semantics.
- Box requests
DedicatedVm,SharedGuestKernel, orSharedHostKernel. Runtime selects an enforcing driver and never silently weakens isolation. - Runtime owns actual OCI state, process/VM identity, generation, exit status, operation journals, recovery, and quarantine. Callers own desired state and retain only an exact runtime reference.
- Image, storage, network, secret, and TEE policy stay outside the OCI core. Versioned extensions may attach already-authorized resources or expose runtime mechanisms without moving product policy into this repository.
- The containerd runtime-v2 shim belongs here and calls the SDK directly. It must not shell out to A3S Box or duplicate lifecycle state.
Delivery Milestones
The detailed workstreams below are not a strict waterfall. Integration begins with an early vertical slice so contract problems are found before every OCI field and platform feature is implemented.
| Milestone | Runtime delivery | Cross-repository exit gate |
|---|---|---|
| M0 - Boundary freeze | Generic public contracts, attachment schemas, driver/isolation vocabulary, and state ownership | Box depends only on a3s-oci-sdk; runtime behavior does not depend on Box types |
| M1 - Host service | Multi-driver registry, secure Unix/Windows service endpoints, durable routing, state migration, restart reconciliation, and reattachment/cleanup | A service restart at every lifecycle boundary preserves or safely terminates the exact workload |
| M2 - Windows experimental | Launch-ready WHPX driver, protected runtime storage, pinned kernel, immutable system root, authenticated protocol-v10 agent, and leak gates | A fresh Windows host passes complete SDK lifecycle, I/O, filesystem, resource, recovery, and multi-container suites |
| M3 - Box cutover | Stable SDK surface and Linux/KVM/HVF drivers needed by the unified Box adapter | Box routes microvm and sandbox through the SDK with no silent fallback |
| M4 - containerd | Runtime-v2 shim using OCI bundles and SDK operations directly | containerd task, restart, I/O, and cleanup suites pass without invoking the Box CLI |
| M5 - parity extensions | Storage/network attachments, reusable guest sessions, checkpoint/restore, and TEE mechanisms | Box storage, networking, warm-pool, snapshot, and security gates pass through public extensions |
| M6 - supported release | OCI 1.3 evidence, adversarial security, upgrade compatibility, signed packages, and long-running real-host qualification | Every advertised driver and operation has evidence from the exact release artifacts |
Conformance is continuous across M1-M6. R5 is the final audit, not the first time normative requirements are enforced. Box migration starts after the M1 vertical slice and does not wait for every optional OCI feature.
Remaining Work Execution Plan
The detailed workstreams below are the canonical task checklist. This section orders that work; it does not maintain a second completion state.
| Wave | Outcome | Canonical workstreams | Exit evidence |
|---|---|---|---|
| W0 - Evidence and host safety | Close normative classification, descriptor-relative ownership, and utility-VM transport recovery gaps before widening launch claims | R0, R1, R5 | No unclassified requirement or silent path fallback; every injected host/agent interruption recovers or cleans up the exact generation |
| W1 - Native Linux qualification | Turn the existing explicit Native Linux path into a packaged, reproducible A3S Box Sandbox baseline without KVM | R3, R4 | Signed or checksummed packages pass the complete Rust, Python, TypeScript, and Go Sandbox suites on x86_64 and aarch64 with /dev/kvm absent and inaccessible |
| W2 - Real-driver restart continuity | Reattach supported live process, I/O, and filesystem sessions after an out-of-process runtime restart, or terminate them with exact durable evidence | R1, R6 | Native Linux and one utility-VM driver pass the same owner-death and service-restart matrix without duplicate effects, invented exit status, or leaked resources |
| W3 - Utility-VM experimental drivers | Qualify immutable guest assets and complete WHPX first, followed by HVF and KVM through the same SDK and guest-agent contract | R2, R2M, R2L, R3 | Each promoted driver independently passes lifecycle, I/O, filesystem, resource, recovery, negative-isolation, multi-container, and soak gates on a fresh host |
| W4 - A3S Box cutover | Route both Box isolation choices through the SDK and remove fallback only after behavior and recovery parity pass | R6 | microvm and sandbox use recorded SDK routes with no direct VMM path, no silent fallback, and complete cross-platform behavior and soak evidence |
| W5 - Downstream adapters and extensions | Add containerd and optional parity mechanisms without moving product policy into the runtime | R7, R8 | Each adapter or extension is version-negotiated, separately advertised, restart-safe, and tested through public SDK contracts |
| W6 - Supported release | Finish upstream OCI, adversarial security, upgrade, packaging, and long-running qualification against exact release artifacts | R5, M6 | The release report binds every advertised driver and operation to passing evidence from the published artifacts |
R5 work runs throughout every wave. W6 is the final audit of evidence produced earlier, not a late conformance implementation phase. Work within a wave may run in parallel, but a readiness promotion waits for that wave's complete exit evidence.
Every retained real-host report must identify the source commit, package or runtime-asset digest, platform, architecture, driver, isolation class, schema version, and exact test profile. A green capability probe, an unretained local run, or evidence from a different artifact does not satisfy an exit gate.
Current Baseline
Completed:
- independent
A3S-Lab/OCI-Runtimerepository and monorepo submodule; - pure OCI lifecycle transition contract;
- versioned driver status, readiness, isolation, and evidence;
- deterministic multi-driver selection and durable recorded-driver routing, including fail-closed startup audit for missing or isolation-drifted drivers;
- protected Windows SDK host serving over a local named pipe with first-owner, DACL, remote-client rejection, concurrency, and shutdown-release gates;
- explicit clone-wide guest-agent transport shutdown before utility-VM shim reap, providing the ownership boundary required by a long-lived VM driver;
- single-owner utility-VM sessions with clone-safe guest access and idempotent retained cleanup evidence, exercised by WHPX/HVF lifecycle harnesses;
- one shared 20-workload-operation guest-to-driver adapter, including
exact-target
file transfer and filesystem metadata/mutations, plus a
qualification-only WHPX
RuntimeDrivercandidate that owns one VM per exact dedicated-VM generation, serializes same-ID launch without blocking distinct container VMs, retains retryable create sessions, reaps terminal failures and deletes once, and refuses bundles outside a protected, per-generation runtime share mounted separately from the system root; owner-death restart reconciliation retains an exact-generation stopped tombstone and replays authenticated exit evidence when available; - one platform-neutral dedicated utility-VM lifecycle shared by the public HVF driver and the Linux KVM candidate. It serializes Create per container, owns one VM per exact generation, validates isolation before moving a bundle, validates missing, linked, non-private, drifted, escaping-rootfs, and absolute-bind handoff sources before creating a Guest-visible share, retains retryable handoffs, removes terminal and conflicting generations, delegates all 20 workload operations and six OCI hook phases, recovers stopped tombstones, and shuts down each live owner at most once;
- secure WHPX DLL loading and hypervisor capability probe;
- native Linux namespace, cgroup v2, and pidfd signaling prerequisite
reporting that does not touch
/dev/kvm; - Linux KVM device, access, ioctl, and API-version reporting without libkrun initialization;
- deterministic Linux x86_64 and AArch64 libkrun archives with one shared manifest binding archive, library, firmware, and exported-kernel identities;
- isolated Linux libkrun create/configure/plain-vsock/release context evidence
with runtime symlink and content-drift rejection, without opening
/dev/kvmor entering a VM; - a shared Linux KVM lifecycle qualification entry for x86_64 and AArch64,
with 16 KVM-gated lifecycle, multi-container, lifecycle-fault, and
transport-fault cases plus an explicit zero-case
unavailablereport on runners that cannot open KVM; - a qualification-only Linux KVM Host Service entry that keeps the public
candidate
probe-only, but permits one explicitly scoped owner-death and restart gate to register the exact driver. The gate SIGKILLs a live service, requires pidfd-bound shim/worker cleanup and authenticated SIGKILL evidence, opens a distinct replacement service, replays stopped state and Wait, and performs stopped-only Delete with descriptor, endpoint, handoff, share, and recovery-report cleanup. CI emits zero-caseunavailableevidence when KVM cannot be opened; fresh-hostavailablereports are still outstanding; - a separate
linux-kvm-bounded-soak-only-v1Host Service entry that runs a default 25 fresh generations through one durable owner. Every wave retains exact generation and replay evidence plus process, descriptor, marker, endpoint, bundle-handoff, runtime-share, recovery-report, and configured GuestcgroupsPathlifetime checks. CI records zero completed iterations and skips the Alpine fixture when KVM cannot be opened; - one fail-closed
a3s.oci.linux-kvm-provenance.v1contract shared by the authenticated entry, post-probe failure, compatibility-drift, lifecycle, owner-restart, and soak reports. It requires a clean exact checkout, rejects a claimed revision that differs from the built checkout, and binds the Git object format, commit/tree, Linux platform/architecture, CLI and shim bytes, runtime manifest and selected runtime files, immutable system-image manifest, build/test profiles,libkrun-kvm, andDedicatedVm. PR qualification now records the actual checked-out merge commit rather than a different branch-head revision; - Apple Silicon and Hypervisor.framework capability reporting through a
direct
kern.hv_supportquery; - entitlement-aware direct Hypervisor.framework VM-object create/destroy evidence with versioned, fail-closed diagnostics;
- isolated macOS libkrun context create/configure/plain-vsock/release evidence from a checksum-pinned, runtime-reverified arm64 bundle;
- real macOS HVF guest entry using the pinned libkrun firmware kernel and a digest-verified Alpine arm64 userspace, with natural exit status, exact host-visible marker verification, bounded worker reap, and marker cleanup;
- real macOS static arm64 guest-agent boot through AF_VSOCK and a private Unix
socket, with
LOCAL_PEERPID, direct shim-worker parent verification, one-time token authentication, protocol-v10 negotiation, exact advertisement of 20 workload operations plus one maintenance acknowledgement, process-group termination, exact endpoint removal, observed PID reap, and in-process descriptor-inventory restoration; - real macOS fixed-bundle create/state/start/kill/wait/delete evidence using the shared Windows lifecycle harness, including exact mutation retries, create/start separation, bounded running wait, exact repeated normal exit status, exact live process inventory, cgroup-v2 pause/resume with real workload-progress evidence, replay-safe live CPU/memory/cpuset/PID update, normalized cgroup-v2 stats, running and stopped observation, post-delete NotFound, and nominal process, endpoint, marker, and runtime-root cleanup;
- real macOS no-delete cleanup after successful create, start, and kill boundaries, with exact fault identity, guest executor shutdown, endpoint and marker removal, shim/worker reap, descriptor-inventory restoration, and no new guest runtime root;
- real macOS protocol-v9
createinterruption at all four Host and five Guest request/dispatch/response transitions, with one exact crossing, nonce-bound Guest cleanup evidence, no normal delete, complete Guest runtime cleanup, and Host endpoint, process, and descriptor restoration, plus both explicit Host shutdown transitions after a successfulcreate, with idempotent owner close and the same complete cleanup evidence; - bounded, versioned macOS HVF soak orchestration that starts a fresh utility VM for every complete two-container lifecycle, namespace-join, rootfs/mount, and PID-supervision matrix, and retains unique endpoint, process, descriptor, marker, runtime-root, and per-wave console evidence;
- explicit native Linux driver integration that reuses the shared executor without linking or initializing libkrun;
- real native Linux create/state/start/kill/wait/delete SDK evidence on x86_64
and aarch64, including exact repeated SIGKILL status and bounded running
wait, plus public SDK exec replay, duplicate process-ID rejection, durable
process journals, pidfd signal replay, stable per-process wait, and init-exit
exec cleanup, exact init/exec
oom_score_adjread-back, plus durable cgroup-v2 pause/resume and exact live process inventory, replay-safe resource update, and normalized stats with real workload-progress evidence, plus controlling PTY allocation, OCIconsoleSizeinitial and resized dimensions, exact initLINUX32personality, exec CPU affinity before and after workload cgroup membership, interactive I/O, merged output, and VEOF close, repeated with/dev/kvmabsent and present but unusable; - type-checked joins for existing UTS, mount, IPC, network, cgroup, PID, user, and time namespaces, including retained rootfs execution after a mount join, three-pass user-namespace permission recovery, and shared native Linux/macOS utility-VM lifecycle evidence;
- detached ID-mapped filesystem and bind mounts using exact dedicated or
container user-namespace mappings, including native
idmapversusridmaprecursion and unchanged source-ownership evidence plus shared native Linux/macOS utility-VM lifecycle evidence; - real native Linux no-delete cleanup after create, start, and kill on x86_64 and aarch64, including init-PID reap and executor, durable-state, marker, and session-root removal;
- WHPX partition-object create/delete smoke on Windows;
- isolated libkrun shim with a pinned, checksum-verified Windows runtime bundle;
- libkrun context create/configure/release smoke on Windows;
- real WHPX VM entry, Linux userspace command, virtiofs marker, and natural exit-code smoke on Windows;
- real WHPX guest-agent boot through AF_VSOCK and the protected Windows pipe, with exact shim-PID authentication, protocol-v1 negotiation, and retained host/shim evidence;
- Linux guest bootstrap executor for an exact fail-closed OCI
profile, with a PID-authenticated abstract Unix create/start barrier,
create-time UTS, mount, IPC, network, cgroup, PID, user, and time namespaces,
parent-installed UID/GID maps, verified time offsets, hostname and domainname,
isolated rootfs propagation, ordered OCI mounts with missing target
creation, masked and read-only paths, read-only rootfs enforcement,
pivot_root, authenticated host-visible PID reporting, exact-generation state, a dedicated namespace PID 1 supervisor with adopted-child reaping, bounded typed init rejection reporting, session idempotency, retained workload pidfd signaling, exact-target exec registries with retained rootfs and namespace descriptors, per-process pidfds and replay journals, stable process wait, cgroup-v2 pause/resume, live process inventory, init-exit supervision, and complete session cleanup; - helper-backed rootless native Linux create/start/exec/signal/wait/kill/delete
evidence on x86_64 and aarch64, with container root mapped exactly to the
nonzero effective host UID/GID, subordinate UID/GID ranges installed through
verified setuid-root
newuidmap/newgidmap,setgroups=deny, exact map and ownership read-back, ordered durable events, and complete cleanup; - single-container native Linux runtime ownership behind a private
0600same-UID Unix SDK endpoint, with an owner-only root, automatic A3S Box FD 3/4/5 binding for one exact container ID, full transported lifecycle evidence,SIGINT/SIGTERMdriver shutdown, inode-scoped socket removal, and empty executor-root evidence on x86_64 and aarch64 without KVM; - a long-lived multi-container Native Linux host owner behind the same private
same-UID Unix SDK contract. It opens the durable service and experimental
driver before publishing
runtime.sock, accepts ordinary SDK attachments without Box process-local descriptors, preserves exact recorded-driver and generation routing across reopen, and performs bounded driver shutdown. The explicitly opted-in x86_64 and aarch64 Box production routes now prepare bundles and launch through this owner; default routing, transparent live-session reattachment, and cross-platform cutover remain; - shared Linux executor support for all six OCI hook phases in normative order, with runtime/container namespace placement, exact OCI state on stdin, bounded configuration, timeout and process-group cleanup, typed rollback for every failing prestart through poststart phase, warning-only poststop continuation, and native Linux lifecycle trace evidence;
- direct A3S Box compiler compatibility fixture pinned to Box commit
d24c951989c8ee8dbc772ccd0021713855613656, with schema/semantic loading and fail-closed executor planning for its absolute rootfs, annotations, capabilities, cgroup v2 resources, exact device allowlist, legacycgroupmount normalization, and AArch64 seccomp policy; - public-SDK-only A3S Box lifecycle, process-session, filesystem,
observability, and resource-control consumer at Box commit
a16772c3, with isolation preflight before product reservation, distinct product/runtime identities and generations, exact endpoint/driver/configuration/attachment binding, attachment-schema negotiation before product mutation, stable SDK operation IDs, lost create/start response recovery without duplicate create, stopped-only cleanup, graceful-signal escalation, exact terminal projection, and memory-retaining pause/resume with capability preflight, claim-scoped replay identities, immutable binding validation, and lost-response reconciliation without repeating freezer mutations. The same in-process contract suite now binds captured and streaming exec to the exact OCI generation; rejects unavailable capabilities, stale generations, alternate rootfs, invalid IDs, empty commands, and changed keyed content before a second process can start; proves replay-safe stdin, cursor-checked output, signal/wait, PTY/resize, exact normal and signaled status, raw-log separation, timeout cleanup, and caller-cancellation cleanup. Exact live process targets, normalized stats, and strict ordered-event cursors are rechecked against the same runtime binding. Partial Box resource intent is compiled into one complete OCI contract, claimed before mutation, replayed after a lost response with one runtime effect, and published atomically to both managed restart state and compatibility state. An immutable create-intent digest keeps the original create operation replayable after later resource changes. File upload/download and filesystem stat/mkdir/move/list/remove use the same cross-platform session facade with capability and Box-generation preflight, bounded response conversion, target/shape drift rejection, and one-effect replay of explicitly retryable mutations. Native Linux executes those calls in a bounded parent-death helper that inherits only the retained root plus exact user/mount namespace descriptors, validates descriptor order and uniqueness, and enters the namespaces before applying container IDs. The native fixture now mounts/tmpas tmpfs so the real filesystem smoke covers namespace-owned mounts rather than only the image rootfs. The deterministic cross-process contract now retains the Box process stream and input handle through an observed owner disconnect, then continues inventory, stdin, output, signal, wait, and cleanup after reconnecting to a replacement durable host service. The x86_64 and aarch64 production owner routes and fresh-Box-process stopped-only restart gates now pass; real-driver live-session reattachment plus WHPX, default-routing, and broader cutover gates remain open; - Linux executor enforcement for exact capability sets with real bounding,
effective, permitted, inheritable, and ambient kernel read-back, exec
bounding ceilings, exact
no_new_privilegesread-back, private controller-enabled cgroup-v2 management, memory/CPU/cpuset/PID settings and live updates with read-back and rollback, normalized cgroup stats, transactional namespaced sysctls with exact read-back and pre-Create rollback, exact static device nodes within a bounded default-deny profile, and pure-Rust x86_64/AArch64 seccomp BPF retained across init and exec; - versioned control/workload cgroup topology for trusted A3S Box init: exact
linux.resourcesenforcement ona3s-workload, derived outer control-plane headroom, pre-opened FD 6/7 membership handoff, read-only guest cgroupfs, workload-scoped update/freeze/stats, non-group OOM behavior, and complete topology cleanup; - real WHPX fixed-bundle create/state/start/kill/delete evidence, including exact mutation retries, pre-start non-execution, running and stopped observation, marker verification, post-delete NotFound, and nominal leak checks;
- direct qualification-only WHPX
RuntimeDriverevidence through the exact protected per-generation share, including create/start/kill/wait replay, authenticated shutdown-report publication, stopped-only delete, and process/share/recovery cleanup; - focused real-host WHPX transport regression evidence across one serial and two parallel lifecycles, network namespace, storage, volume-init, nine negative, and four owner-termination cases, including a request above the 4 KiB stream boundary;
- a runtime-owned Windows libkrun bundle pinned to the 3 KiB host-to-guest
stream segmentation and writable virtio-fs
fsyncfixes, with deterministic archive and payload checksums; - async,
Send + Sync, transport-independent Rust SDK contract; - complete official OCI runtime model pass-through in the SDK;
- strict, bounded OCI 1.0.0 through 1.3.0 bundle decoding;
- pinned OCI Runtime Specification 1.3.0 schemas and upstream fixtures;
- offline configuration, state, and features schema validation;
- a CI-checked v2 support lock for all 423 schema properties and enum values: 257 enforced, two validated, 75 rejected as unsupported, 89 rejected as inapplicable native workload platforms, and zero pending or conformant;
- a CI-checked inventory of all 764 RFC 2119 occurrences across the 15 normative OCI 1.3.0 documents;
- rejection of unknown configuration properties;
- immutable SHA-256 binding of the loaded
config.json; - public
a3s.oci.attachments.v1derivation and validation for rootfs, mounts, networking, process I/O, secret classifications, and optional runtime extensions, with fail-closed protocol-3 negotiation, durable manifest retention, and exact digest replay; - exact
config.jsonretention and fail-closed SDK wire deserialization; - OCI feature reporting for all eight Linux namespaces, 41 capability names, cgroup v2, x86_64/AArch64 seccomp actions and operators, and ID-mapped mounts, with unsupported managers, flags, and security modules disabled;
- phase-aware, bounded common, Linux, and VM semantic validation boundary;
- exhaustive SDK request validation on in-process and transport boundaries;
- version-negotiated, length-delimited transport for every SDK operation;
- tested Windows named-pipe and Unix-domain-socket client connectors;
- authenticated, version-negotiated, bounded host/guest lifecycle protocol with exact bundle and response correlation, protocol-v1 compatibility, and protocol-v2 stable init wait plus protocol-v3 exact-target exec, process signal, and process wait messages, all dispatched by the shared Linux executor with version-filtered capability advertisement, plus protocol-v4 pause, resume, and live process inventory, protocol-v5 update and stats, protocol-v6 bounded process I/O, protocol-v7 terminal resize, and protocol-v8 durable process-I/O mutation contexts with exact session replay, plus protocol-v9 descriptor-confined file and filesystem sessions and protocol-v10 bounded Host acknowledgement of completed Guest replay records;
- an exhaustive negotiated-version fault registry for all 21 guest
operations, spanning four host request/response stages, five guest
read/dispatch/write stages, and two host shutdown stages. An authenticated
in-memory matrix injects every one of the 189 operation-stage pairs, proves
one crossing and terminal disconnect per point. A portable agent-backed
RuntimeDrivermatrix also arms each of the nine transport stages exactly once for all 20 public workload operations across durableHostRuntimeServicereopen. Pre-dispatch faults defer the guest request until the replacement connection; post-dispatch mutation faults replay the guest journal while read-only state and uncached wait observations are safely reissued. A fully written mutation response replays the completed durable record, while a fully written wait response replays its durable terminal cache. Every path preserves the exact generation; mutations retain one effect and reject changed retries, state resolves a current target to that exact generation, wait and wait-process return stable exact exit results while stale targets fail closed, exec preserves the exact process ID, PID, and terminal mode, and signal-process preserves the exact target and signal; - existing
featuresCLI path routed through the Rust SDK; - reconnectable local SDK endpoints that expose the first broken-stream result
without hidden replay, discard the poisoned stream, and renegotiate on the
next caller-initiated request. Real Windows named-pipe and Unix-socket tests
restart the server behind one retained
RuntimeClient; caller-suppliedfrom_iostreams remain fail-closed and non-reconnectable; - cross-platform runtime-owner process restart coverage that launches two
distinct test-binary processes on the same platform-local endpoint and
durable
HostRuntimeServicestate root. One retained client exposes owner death, reconnects to the replacement, recovers the exact generation and live exec target, replays create/start/exec with one deterministic test-driver dispatch each, and continues inventory, stdin, signal, wait, output, and cleanup through the replacement owner; - foreground
runimplemented only as a typed SDK composition of durable create, start, wait, and stable force-delete cleanup; - deterministic durable container enumeration with isolation filtering, complete record validation, host-service reopen evidence, and no driver dispatch;
- durable exact-generation lifecycle and process events with global ordered cursors, replay-safe identities, bounded filtering, long polling, crash repair, host-service reopen evidence, and no driver dispatch;
- single-writer durable state for the complete core lifecycle, with exact bundle snapshots, monotonic generations, generation fencing, global idempotent create/start/kill/delete journals, active-operation claims, terminal failure replay, crash reconciliation, and quarantine;
- deterministic multi-driver registration with one owner per isolation class, identical advertised operation/Hook surfaces, create-time selection, and exact recorded-driver routing across host-service reopen;
- async
RuntimeDriverintegration plus a tested host implementation ofcreate,state,start,kill,delete, and driver-advertisedwait,exec,signal-process,wait-process,pause,resume,processes,update,stats,read-output,write-stdin,close-stdin, andresize; - generation-scoped durable process records, global exec, per-process signal, write-stdin/close-stdin/resize, update, File upload, and Filesystem mkdir/move/remove journals, terminal failure replay, active-operation claims, and stable init/exec exit-status caching across host-service reopen;
- typed, exhaustive recovery injection at all 741 registered durable commit
stages and all 44 before/after
RuntimeDriverboundaries, including startup recovery; - a pinned durable-state root capability used for descendant traversal, reads, enumeration, directory creation, file creation, file replacement, and quarantine moves. macOS, Linux, and Windows reject symlink/reparse-point substitution and path replacement; Linux additionally passes a real same-device bind-mount gate;
- runtime-owned Windows state paths with protected DACLs limited to the runtime principal and LocalSystem, inheritance disabled, and every applied owner and ACL verified;
- Windows, Linux, and macOS CI.
Not yet complete:
- equivalent real-host utility-VM transport/reopen qualification for WHPX and the KVM backend; the complete 180-path HVF matrix is retained;
- complete shared guest OCI executor;
- a production workload driver;
- OCI hook rollback, crash recovery, security-negative, and soak certification;
- complete Linux configuration enforcement and driver feature parity;
- production-ready native Linux execution;
- real-driver live process and filesystem session reattachment;
- A3S Box default routing and cross-platform real-host cutover;
- containerd runtime-v2 task, restart, I/O, and cleanup integration;
- versioned storage, networking, reusable-session, checkpoint/restore, and TEE extensions;
- upstream conformance and security certification.
The built-in WHPX driver remains probe-only, and the default host service
advertises only features. A host explicitly opened around a launch-ready
RuntimeDriver advertises the five required core lifecycle operations,
host-owned durable list and events, plus only the optional operations that
driver implements.
Detailed Workstreams
R0 — Contract And Spec Ingestion
- Create
a3s-oci-sdk. - Use official Rust OCI types for
Spec,Process,LinuxResources,State, andFeatures. - Define all OCI lifecycle and A3S Box control operations.
- Add typed IDs, operation IDs, generation fencing, deadlines, isolation, I/O, stats, events, checkpoint, restore, and stable errors.
- Strictly load and digest-bind OCI bundles.
- Import the pinned OCI 1.3.0 JSON schemas and fixture inventory.
- Generate and verify a schema-property and enum-value coverage manifest in CI. The v2 lock is rebuilt from 31 reviewed evidence bindings for 334 applicable items plus 89 generated platform rejections and must exactly classify all 423 inventory items.
- Generate and verify a SHA-256-bound normative requirement inventory in CI.
- Add phase-aware semantic validators for common, Linux, and VM configuration and enforce them at SDK request boundaries.
- Close the remaining 17-entry pending normative evidence backlog.
- Bind the common configuration and runtime-feature annotation map shapes, optional and empty forms, string values, and unknown-key preservation to pinned schema and bundle round-trip evidence.
- Pin the OCI Image Specification reference used by Runtime
Specification 1.3.0 and validate all eight standard image annotation
values, including RFC 3339 creation times, portable Linux stop signals,
and the JSON-array string representation used by converters for
os.features. Classify conversion provenance and default stop orchestration under their external converter and caller responsibilities. - Report the exact built-in behavior-changing configuration annotations and merge annotation-backed extensions from the active driver capability inventory, while keeping probe-only discovery empty.
- Validate every emitted feature document against the pinned schema and
bind its version range, hooks, Linux availability, namespaces, cgroup,
seccomp, AppArmor, SELinux, and ID-mapped-mount claims to one validated SDK
OciLinuxSupportprofile. Require every driver to publish it, freeze it at registration, reject mixed-driver profile drift, and consume the retained value in Features plus pre-durable Create, Exec, and Update admission. The Linux Agent consumes the same shared profile again during planning. - Bind common Root, Mounts, POSIX-platform Mounts, Process, and
POSIX-platform User behavior to exact admission, planning, init/exec, and
native workload evidence. The 37 promoted entries cover declared-root
directory checks, mount order and root-relative destinations, optional
mount fields, ID-mapped mounts, argv, environment, cwd, terminal default,
UID/GID, supplementary groups, umask, and the Linux-only rejection of
native non-Linux clauses. The conventional
rootfsbasename is recorded as reviewed bundle-author guidance while the runtime preserves every valid alternative. - Honor OCI configuration extensibility by retaining the exact raw document and digest while excluding unknown top-level and nested properties from the typed execution projection. Treat the dependency's deprecated top-level ID-mapping compatibility fields the same way instead of rejecting or applying them. Two requirements are owner-bound.
- Classify the common platform sections at the Linux-only admission boundary: accept Linux and utility-VM configuration together, reject native FreeBSD, Solaris, Windows, and z/OS sections before mutation, and bind optional LSM, z/OS privilege, Windows username, hostname, and domainname fields to their existing exact enforcement boundaries. Eighteen requirements are owner-bound.
- Bind all 14 OCI memory-controller entries to exact cgroup v2 Create
and Update behavior or pre-mutation rejection. Preserve zero, encode
-1asmax, validate finite total swap against a finite hard limit, allowmemory.lowabovememory.max, and reject cgroup v1-only controls. - Bind all five OCI network-controller entries to an explicit cgroup v2
rejection boundary. Create and live Update identify
net_clsandnet_prioas cgroup v1-only controls and fail before cgroup or device-policy mutation for both class IDs and interface priorities. - Bind the 14 previously pending OCI Block I/O entries to cgroup v2
Create and Update behavior or explicit pre-mutation rejection. Together
with the existing validated weight/leaf-weight relationship, all 15 Block
I/O occurrences are owner-bound. Map default and per-device weights through
BFQ or generic
io.weight, merge all four per-device throttle lists intoio.max, preserve omitted keyed values during partial updates, and reverse applied mutations on failure. Require device identity and throttle rates, map OCI zero rates to cgroup v2max, reject duplicate devices, and reportleafWeightas unavailable on cgroup v2. - Bind all three OCI HugeTLB entries to schema validation and exact
cgroup-v2 Create and Update behavior. Preserve the full
uint64input range, require canonical page-size names that match live controls, apply reservation and usage limits together when supported, preserve omitted page sizes, reverse partial writes, and keep the controller optional until requested. Retain conditional real-kernel workload read-back on both Native Linux CI architectures. - Bind all five OCI RDMA entries to semantic validation and exact
cgroup-v2 Create and Update behavior. Require at least one per-device limit,
preserve omitted HCA fields, normalize the kernel signed-counter ceiling to
max, verify effective keyed state, reverse partial writes, keeprdmaoptional until requested, and retain workload-only control/workload placement with conditional real-kernel read-back. - Bind all four OCI Unified entries to bounded cgroup-v2 Create and
Update behavior. Preserve runtime-unknown controller files, enable each
controller through the private hierarchy, reject unsafe or runtime-owned
names and typed-file conflicts, preserve kernel-defined write formatting,
skip readable Update no-ops, snapshot readable controls for rollback,
accept write-only controls, and keep unified settings on the workload leaf.
Retain real
memory.highand normalized partialio.maxread-back plus rootful/rootless live Update coverage on both Native Linux CI architectures. - Bind all 20 OCI Linux device entries to exact schema, planning, rootful
enforcement, cleanup, and ordered cgroup-device evidence. Cover all four
node types, paths outside
/dev, conditional major/minor values, mode and mapped ownership, duplicate kernel identities, existing-target conflicts, the six defaults,/dev/ptmx, terminal/dev/console, and optional or empty device-access fields. Keep the declared/default device inventory as an immutable upper bound beneath ordered resource rules, including an omittedcgroupsPath, live allow-all updates,CAP_MKNOD, and a device source whose bind mount is later remounted withdev. - Bind all ten OCI cgroup-ownership entries to exact cgroup-v2
delegation. Require a newly created cgroup namespace and an exact writable
OCI cgroup mount, map
process.user.uidto its host UID, preserve the group, bound and validate the kernel delegate inventory, tolerate listed files that are absent, use the normative fallback when the inventory is missing, and leave every unlisted file untouched. Retain positive and read-only Native Linux lifecycle evidence with complete cleanup. - Bind all 19 OCI namespace, user-mapping, and time-offset entries. Schema tests require every namespace and mapping member; executor tests distinguish inherit, create, and join for all eight namespace types; descriptor-relative joins verify the requested namespace type and exact identity; UID/GID mappings retain bounded non-overlapping ranges without changing referenced filesystem ownership; and normalized monotonic and boottime offsets are written and read back. Seventeen previously pending requirements are now enforced alongside the two existing validation rules.
- Bind all 36 OCI Seccomp and notification-state entries to exact schema, semantic, executor, feature-report, and fail-closed evidence. Supported x86_64/AArch64 policies retain every advertised action and argument operator through pure-Rust BPF installation. Empty and omitted optional fields remain valid; invalid errno and argument relationships fail deterministically; and unadvertised flags, architecture sets, and userspace notification requests fail during immutable init planning before runtime mutation. Notification transport and process-state requirements therefore remain unreachable instead of being silently ignored.
- Bind all 24 OCI VM configuration entries to pinned schema, semantic,
and selected-driver evidence. Validate every hypervisor, kernel, image,
and hardware member, including required relationships and all image
formats. Current A3S drivers keep utility-VM launch assets runtime-owned
and reject a caller-provided
vmsection before durable generation reservation, bundle handoff, hypervisor launch, or mutating driver dispatch. A future driver must explicitly override this fail-closed policy and enforce every field it accepts. - Bind all 66 OCI runtime lifecycle entries to exact state, preflight, Create, rollback, warning, and process-barrier evidence. The runtime emits only the four standard states, preserves the Linux PID contract, applies or rejects every accepted configuration before committing Create, leaves no live container after failure, and durably recovers every injected mutation stage. Optional nonstandard states and properties remain omitted, while init and exec capability warnings are logged without changing the successful operation flow. Eleven entries move to enforced and four to conformant.
- Separate external normative roles from runtime implementation claims.
Fourteen bundle-packager, bundle-author, configuration-author,
image-converter, runtime-caller, and specification-author entries now use
a dedicated
reviewed-externaldisposition with a mandatory rationale, stable boundary rule, and retained test evidence. Runtime validation adds the previously ambiguous OCI imageos.featuresarray mapping. - Bind the final two common value-policy entries to schema, semantic, executor-plan, selected-driver, and feature-report evidence. Invalid or unsupported values fail before durable mutation, and each configured service publishes the exact supported subset it will enforce.
- Freeze the complete Linux configuration and feature-report ownership
profile. The exact gates cover 190
config-linux.jsonanddefs-linux.jsonitems as 145 enforced and 45 rejected unsupported, all 218config-linux.mdrequirements as 206 enforced, nine validated, and three conformant, and all 41features-linux.mdrequirements as enforced by the runtime feature report. - Bind the two Linux runtime file-descriptor entries to the typed,
collision-safe inherited-descriptor planner. A3S passes only the exact
advertised control descriptors and deliberately adds no optional
/dev/nulldescriptors. - Bind the two network-device termination entries to retained native evidence. The runtime moves interfaces into the container namespace during Create, never reconfigures them as part of workload lifecycle, and never moves them back during termination or cleanup.
- Bind the six remaining cgroup entries to exact v2 behavior: optional fit checks fail when requested controls are unavailable; an omitted path receives a stable private generation-fenced location; unrequested extra controllers are not attached; representable v1 CPU, memory, and Block I/O settings convert to v2; and unrepresentable controls fail before mutation.
- Bind rootfs propagation, masked paths, and read-only paths to shared
planner plus native read-back evidence. Reject
linux.mountLabelat the selected-driver preflight before durable reservation because SELinux mount labeling is not advertised. - Bind the final Features recommendation to the stable configured-service capability report. Runtime driver selection and its Linux support profile are frozen when the service is constructed; opening fails closed for mismatched drivers, and per-container execution cannot alter that report.
- Classify every entry by common/process, Linux, VM, state, or feature semantics and record whether it is applicable to each driver profile.
- Bind every applicable entry to an exact validator, enforcement owner, positive test, negative test, and retained evidence field; bind every inapplicable entry to a reviewed reason.
- Make CI reject pending, unclassified, duplicate, stale, or source-digest-mismatched entries and require the generated ledger to reach zero pending entries.
- Add version-negotiated local IPC transport for out-of-process callers.
Exit gate: every OCI 1.3.0 schema property is accounted for as accepted, rejected as inapplicable, or rejected because the selected driver cannot enforce it. No property is silently ignored.
R1 — Durable OCI Lifecycle
- Add an absolute, single-writer runtime root with plain-path/reparse-point checks, bounded reads, and atomic file replacement.
- Create, apply, and verify runtime ownership plus protected Windows state DACLs limited to the runtime principal and LocalSystem.
- Use descriptor-relative path operations on every supported host and
prove that symlink, mount, and Windows reparse-point replacement cannot move
a validated runtime-owned path before mutation.
- Pin the canonical state root as a
cap_std::fs::Dirand resolve every descendant traversal, read, enumeration, directory creation, file open, file replacement, and quarantine move from retained directory handles. - On macOS and Linux, reject root-path redirection, layout-directory and
transaction-file symlinks, foreign filesystem handles, and mount changes.
Linux additionally passes a root-only bind-mount replacement gate in a
private mount namespace using
statxmount identities; macOS usesfstatfsfilesystem identities. - Cross-compile the no-follow capability implementation and retained-
parent Windows replacement path for
x86_64-pc-windows-msvc. - Run the real Windows matrix for root/layout/transaction reparse-point substitution and file/directory replacement. The August 15, 2026 Windows CI gate covers real reparse points, already-open source-file commits, racing destination replacement, retained root/lock handles, and exact-handle directory moves without modifying an external target.
- Pin the canonical state root as a
- Add atomic creating/created records with exact configuration snapshots and monotonically increasing generations.
- Add a global idempotent create journal keyed by
OperationId. - Extend the operation journal to start, kill, and delete.
- Extend idempotent journals to exec and per-process signal, including generation-scoped process claims and terminal failure replay.
- Extend idempotent journals to pause and resume, including exact freezer observation, reconciliation, claim release, and terminal failure replay.
- Extend idempotent journals to update, including exact retry, terminal failure replay, claim release, and fault-injected recovery.
- Extend idempotent journals to write-stdin, close-stdin, and resize, including exact driver/guest replay, claim release, terminal failure replay, and fault-injected recovery.
- Reclaim completed Native Linux guest mutation records only after the Host durably commits success or terminal failure. Keep prepared, retryable, and asynchronous in-flight effects replayable; acknowledge every derived stdin chunk identity; and reject mixed pending/completed acknowledgement batches atomically. Unit evidence fills all 4,096 guest slots before releasing them, and three complete containerd matrices pass through one unchanged Host PID.
- Carry the same post-commit reclamation boundary across utility-VM protocol v10. Keep protocol-v1 through protocol-v9 acknowledgement as a compatibility no-op, bound each v10 batch to 1..=4,096 unique operation identities, and fan out safely across live HVF/WHPX sessions without holding session locks across transport I/O. The protocol matrix covers all 189 operation/stage pairs; the 20-operation Host reopen matrix proves that a response-write disconnect returns a retryable acknowledgement error, then replays the durable result without redispatch and acknowledges it once after reopen. A real Apple Silicon Guest negotiates v10 and advertises the exact 20 workload operations plus the maintenance acknowledgement.
- Reconcile interrupted core lifecycle operations and quarantine failed create/delete state.
- Implement driver-independent
create,state,start,kill, anddeletehost orchestration. - Register multiple launch-ready drivers behind one host service, reject ambiguous isolation ownership and inconsistent advertised surfaces before state creation, and route every post-create operation by the durable driver identity rather than registration order.
- Invoke an idempotent startup recovery handshake on each record's exact persisted driver, commit optional state observations before serving, and fault-inject both sides of that boundary.
- Preserve the exact create/start barrier in the durable host/driver contract.
- Verify the barrier against the real Linux guest bootstrap executor.
- Fault-inject every registered core-lifecycle durable commit stage and
every
RuntimeDrivermethod boundary, then reopen and replay. - Fault-inject every versioned utility-VM host/agent request, response,
disconnect, replay, and shutdown transition, then prove exact-generation
recovery or complete cleanup after host-service reopen.
- Release the clone-shared host transport immediately after terminal request-write, response EOF/read, correlation, or response-shape failure; prove retained clones cannot dispatch or keep the failed guest connection alive.
- Expose negotiated-version fault points for every current operation at
four host request/response stages, five guest read/dispatch/write stages,
and two host shutdown stages. Prove that a create completed before its
response is lost can reconnect over a newly authenticated stream and replay
the exact
OperationIdand request with one effect, while changed content under that ID fails withConflict. - Arm and cross all 189 current Guest operation-stage pairs over authenticated in-memory streams. Require each selected point exactly once, disconnect the session after every injected failure, and prove that a fault after a fully written response preserves that response but fails the next request.
- Carry the post-dispatch create-response-loss case through a portable
agent-backed
RuntimeDriver: retain the durablecreatingrecord after the first retryable failure, open a new authenticated connection and driver, reopenHostRuntimeService, and resume the same generation with two driver dispatches but one guest effect. Reject changed content at both the durable host and guest journals. Real utility-VM reopen evidence remains required. - Expand portable create recovery across all nine host/guest transport stages and require each selected boundary exactly once. Prove pre-dispatch faults perform the first effect after reopen, post-dispatch faults replay one cached guest effect, and a fully written response replays directly from the completed durable host journal without a second driver dispatch.
- Carry read-only
statethrough all nine portable reopen stages after an exact durable create. Resolve a current host target to the exact generation, expose every retryable first-call transport failure, reopen through a new authenticated connection and driver, and reissue the query even after a fully written first response. Keep durable state unchanged and reject a stale generation at both the host and guest boundaries without driver dispatch from the host. - Apply the same nine-stage portable reopen matrix to
startafter an exact durable create. Keep the host recordcreatedafter every retryable first-call failure even when the guest already reachedrunning, resume through the original operation on a new authenticated connection and driver, and prove exactly one start effect. A fully written start response must replay from the completed durable journal without another dispatch. - Apply the same nine-stage portable reopen matrix to
killafter an exact durable create and start. Keep the host recordrunningafter every retryable first-call failure even when the guest already reachedstopped, resume through the original operation on a new authenticated connection and driver, and prove exactly one kill effect. A fully written kill response must replay from the completed durable journal without another dispatch. - Apply the same nine-stage portable reopen matrix to stopped-only
deleteafter an exact durable create, start, and kill. Keep the stopped host record after every retryable first-call failure even when the guest already removed the generation, resume cleanup through the original operation on a new authenticated connection and driver, and prove exactly one delete effect. A fully written response must leave no live host record and replay from the completed durable journal without driver recovery or another dispatch. - Carry init
waitthrough all nine portable reopen stages after an exact durable create, start, and signal-9 kill. Reissue an uncached observation on the replacement connection after every retryable first-call failure and require the same exact signal result. A fully written response must survive reopen in the durable terminal cache without another driver or guest dispatch; all later waits must use that cache, and stale host and guest generations must fail closed. - Carry
execthrough all nine portable reopen stages after an exact durable create and start. Keep the prepared process claim resumable after every retryable first-call failure, replay post-dispatch effects through the exact guest request journal, and replay a fully written response from the completed durable host journal without another dispatch. Preserve the exact generation, process ID, PID, and terminal mode, require one exec effect, and reject changed content under the same operation ID at both boundaries. - Carry
signal-processthrough all nine portable reopen stages after an exact durable create, start, and exec. Resolve the current host target to the exact generation and process ID, keep the process claim resumable after each retryable first-call failure, replay the exact guest mutation after dispatch, and replay a fully written response from the durable host journal. Require one signal effect and reject a changed signal under the same operation ID at both boundaries. - Carry
wait-processthrough all nine portable reopen stages after an exact durable create, start, exec, and signal. Reissue an uncached process observation after retryable first-call failures, then durably cache one exact exit result. A fully written response and every later retry must avoid another driver or guest dispatch; current targets resolve to the exact generation and process ID, and stale targets fail closed at both boundaries. - Carry
pausethrough all nine portable reopen stages after an exact durable create and start. Keep the host record running and unpaused after every retryable first-call failure even when the guest is already frozen, resume through the original operation on a new authenticated connection and driver, and prove exactly one pause effect. A fully written response must replay from the durable host journal without another dispatch, and changed targets under the same operation ID must fail closed at both boundaries. - Carry
resumethrough all nine portable reopen stages after an exact durable create, start, and pause. Keep the host record running and paused after every retryable first-call failure even when the guest is already thawed, retry the original operation on a new authenticated connection and driver, and prove exactly one resume effect. A fully written response must replay from the durable host journal without another dispatch, and changed targets under the same operation ID must fail closed at both boundaries. - Carry read-only
processesthrough all nine portable reopen stages after an exact durable create, start, and exec. Resolve the current host target to the exact generation, return the same live init and exec process identities after reconnect, and reissue the observation after every retryable first-call failure, including a fully written first response. Keep durable state unchanged and reject stale generations before host driver dispatch and at the guest boundary. - Carry
updatethrough all nine portable reopen stages after an exact durable create and start. Keep the complete OCILinuxResourcesrequest resumable after every retryable first-call failure, replay post-dispatch effects through the exact guest request journal, and replay a fully written response from the durable host journal without another dispatch. Require one resource-update effect and reject changed resources under the same operation ID at both boundaries. - Carry read-only
statsthrough all nine portable reopen stages after an exact durable create and start. Resolve the current host target to the exact generation, validate the same normalized CPU, memory, process-count, and named metrics after reconnect, and reissue the observation after every retryable first-call failure, including a fully written first response. Keep durable state unchanged and reject stale generations before host driver dispatch and at the guest boundary. - Carry read-only
read-outputthrough all nine portable reopen stages for an exact running init process. Resolve the current host target to the exact container generation, preserve the inclusive byte cursor and response limit, and return the same contiguous stdout chunk after reconnect. Reissue the poll after every retryable first-call failure, including a fully written first response, and reject stale process generations before host driver dispatch and at the guest boundary. - Carry replay-safe
write-stdinthrough all nine portable reopen stages for a running init process. Resolve the current host target to the exact generation, retain the original operation context and input bytes, and keep the durable claim resumable after each retryable first-call failure. Replay a post-dispatch guest request without a second input effect, replay a fully written response from the completed host journal without another dispatch, and reject changed bytes under the same operation ID at both boundaries. - Carry replay-safe
close-stdinthrough all nine portable reopen stages for a running init process. Resolve the current host target to the exact generation, retain the original operation context, and keep the durable claim resumable after each retryable first-call failure. Replay a post-dispatch guest request without a second close effect, replay a fully written response from the completed host journal without another dispatch, and reject changed process targets under the same operation ID at both boundaries. - Carry replay-safe
resizethrough all nine portable reopen stages for an exact terminal exec process. Resolve the current host target to the exact generation and process ID, retain the original operation context and terminal dimensions, and keep the durable claim resumable after each retryable first-call failure. Replay a post-dispatch guest request without a second resize effect, replay a fully written response from the completed host journal without another dispatch, and reject changed dimensions under the same operation ID at both boundaries. - Carry a journaled file upload through all nine portable
filereopen stages. Resolve the current host target to the exact generation and retain the path, user, base64 payload, operation context, and acknowledgement. Keep the v3 Host journal resumable before commit, then replay its typed response without driver dispatch after commit. A lost post-commit Guest acknowledgement stays retryable and is repeated by the next owner. Reject changed upload content permanently at the Host and reject stale generations at the Guest boundary and before Host driver dispatch. - Carry a journaled directory creation through all nine portable
filesystemreopen stages. Resolve the current host target to the exact generation and retain the path, user, operation context, and directory metadata response. Keep the v3 Host journal resumable before commit, then replay its typed response without driver dispatch after commit. Repeat a lost post-commit Guest acknowledgement through the replacement owner and retain permanent Host changed-path fencing. Reject stale generations at the Guest boundary and before Host driver dispatch. This completes the portable 20-operation, 180-pair matrix without claiming real utility-VM replacement evidence. - Cross the four host-side
createrequest/response transitions inside fresh, authenticated utility VMs. The qualification-only client injector records the exact negotiated protocol-v9 point once, returns a retryableUnavailableresult, never attempts normal delete, and requires the Guest executor, VM, endpoint, shim, bridge process, workload marker, runtime root, and host descriptor inventory to return to baseline. The Apple Silicon HVF gate passed all four stages once and then five repeated four-stage waves (24 fresh VMs total) with a valid unprivileged UID/GID mapping. The machine-readable evidence now uses the expandeda3s.oci.oci-vm-transport-fault-cleanup.v3schema. - Cross the five Guest-side
createread/dispatch/response transitions inside fresh authenticated utility VMs. The qualification handoff is versioned, accepted only for Guest stages, and bound to the exact validatedOperationIdcarried bycreate. The one-shot Guest injector emits a nonce-bound console record only after the Linux executor has completed cleanup. The four pre-response points expose a retryable disconnect on the current call; the fully written response is delivered and a follow-up request must expose the disconnect. Apple Silicon HVF passed all five stages in five fresh VMs with exact endpoint, process, descriptor, marker, and runtime-root cleanup. - Cross both explicit Host shutdown stages in fresh authenticated utility
VMs. Require a successful exact
createfirst, inject one retryable error before or after orderly stream shutdown, then prove clone-wide idempotent close and complete Guest, VM, endpoint, process, marker, runtime-root, and Host descriptor cleanup. Apple Silicon HVF passed both points in two fresh VMs, then passed the complete eleven-stage matrix in eleven fresh VMs witha3s.oci.oci-vm-transport-fault-cleanup.v3evidence. - Resume one real
createafterhost-before-request-writethrough bothHostRuntimeServicereopen and actual HVF VM/session-owner replacement. The first VM returns a retryableUnavailable, closes with complete Host and Guest cleanup, and leaves the durable record increating. A new service and fresh authenticated VM accept that exact record throughDriverRecovery::none, reuse its OperationId and generation, completecreate, force-delete it, and return every resource inventory to baseline. The August 10, 2026 Apple Silicon gate passed with two distinct endpoint, shim, and VM-worker identities undera3s.oci.oci-vm-reopen-replacement.v2. - Carry the other three Host-side
createrequest/response stages through the same durable reopen and actual HVF owner replacement. The selected point is explicit in the CLI and retained report; every run requires the original OperationId and generation, a distinct endpoint/shim/VM-worker owner, force delete, and complete Host and Guest cleanup. The August 10, 2026 four-stage matrix passed in eight fresh VMs. - Carry all five Guest-side
createstages through the same durable reopen and actual HVF owner replacement. The first four points retaincreatingand complete on the replacement Guest. The fully written response retainscreated; a State probe exposes the disconnect, then an explicit recreated-process recovery rebuilds the pre-start workload, reconciles a changed Guest PID when necessary, and repairs the completed Create journal before replay. Nonce-bound Guest evidence, exact OperationId and generation reuse, two distinct owners, force delete, and complete cleanup are required. Rebinding the record and repairing the journal each pass all seven durable file-commit fault stages. The August 10, 2026 five-stage matrix passed in ten fresh VMs; three additional post-response waves passed in six fresh VMs, including a real replacement PID change. - Carry all nine Host/Guest
statestages through durable service reopen and an actual HVF owner replacement. State has no request OperationId, so Guest qualification binds the boot-time nonce, exact operation, and stage; the evidence returns that nonce after cleanup. The durable record stays increated, replacement recovery rebuilds the pre-start process with the original Create identity and generation, and the reissued State response must equal the recovered record. A fully written first response also requires a follow-up disconnect probe. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs, including real Guest PID changes, distinct owners, force delete, and complete Host and Guest cleanup. - Carry all nine Host/Guest
startstages through durable service reopen and an actual HVF owner replacement. The first eight paths keep the durable record increated; replacement recovery rebuilds the pre-start process, rebinds its PID, and reuses the original Create and Start identities before completing Start. A fully written response instead keepsrunning; replacement recovery recreates and starts the process, repairs the completed Create and Start journals with the new PID, and lets the unchanged Start replay return without another driver dispatch. Every path resets any first-owner marker, verifies the replacement workload, force-deletes the generation, and restores Host and Guest inventories. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs. - Carry all nine Host/Guest
killstages through durable service reopen and an actual HVF owner replacement. The first eight paths keep the durable record inrunning; replacement recovery recreates and starts the workload, rebinds its PID, repairs the completed Create and Start journal responses, and completes the unchanged signal-9 Kill identity once. A fully written response instead keepsstopped; recovery recreates, starts, and kills the replacement workload to rebuild the Guest tombstone, then the completed durable Kill journal replays without an API-driven driver dispatch. Every path verifies the replacement workload before Kill, uses stopped-only Delete, and restores Host and Guest inventories. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs. - Carry all nine Host/Guest
deletestages through durable service reopen and an actual HVF owner replacement. The first eight paths retain the exact stopped live record and a Prepared Delete journal. Replacement recovery recreates, starts, and kills the workload with the original setup identities, rebuilds the Guest stopped tombstone, and dispatches the unchanged stopped-only Delete once. A fully written response instead leaves no live record and a SucceededEmpty journal; the fresh owner performs no workload recovery or driver Delete and replays that exact journal. Every path reuses the original Delete identity and generation, uses two distinct endpoint/shim/VM-worker owners, and restores Host and Guest inventories. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs. - Carry all nine Host/Guest init
waitstages through durable service reopen and an actual HVF owner replacement after exact Create, Start, and signal-9 Kill setup. The first eight paths retain the stopped generation without an init-exit cache; replacement recovery recreates, starts, and kills the workload with the original setup identities, then dispatches the exact resolved Wait target and timeout once and durably cachessignal=9, oom_killed=false. A fully written first response already leaves that cache committed, so the replacement Host and every later Wait return without another driver or Guest dispatch. Every path rejects a stale Guest generation with NotFound and a stale Host generation with Conflict before driver dispatch, uses two distinct endpoint/shim/VM-worker owners, performs stopped-only Delete, and restores Host and Guest inventories. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs. - Carry all nine Host/Guest terminal
execstages through durable service reopen and an actual HVF owner replacement after exact Create and Start. The Linux executor now waits for close-on-exec proof before reporting a successful Exec, so pre-exec failures return through the typed start barrier instead of becoming false process records. The first eight paths retain a Prepared Exec journal and a prepared process record with no live PID; replacement recovery recreates and starts the init process, then the unchanged Exec identity dispatches once. A fully written first response instead retains the exact liveProcessRecordand Succeeded journal; replacement recovery recreates both init and Exec, rebinds their Guest PIDs, repairs the completed journals, and the Host replay returns without another API-driven dispatch. Every path preserves the generation, process ID, terminal mode, and complete request identity; rejects stale and changed Host and Guest requests; accepts a first-owner marker only when it exactly matches the nonce; requires the replacement long-running terminal process to write that marker; force-deletes the generation; and restores Host and Guest inventories. The August 10, 2026 matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v6. - Carry all nine Host/Guest
signal-processstages through durable service reopen and an actual HVF owner replacement after exact Create, Start, and a long-running terminal Exec. The first eight paths retain a Prepared SignalProcess journal; replacement recovery recreates init and Exec, then the unchanged signal-10 request dispatches once. A fully written response instead retains SucceededEmpty. Recovery recreates Exec, waits for its nonce-bound readiness marker after the SIGUSR1 trap is installed, and reapplies the committed signal before Host replay returns without another API-driven dispatch. Every path preserves the generation, process ID, complete Exec and SignalProcess identities, and terminal mode; rejects stale and changed Host and Guest requests; requires the replacement trap to write the exact signal marker; force-deletes the generation; and restores Host and Guest inventories. The August 11, 2026 matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v7. - Carry all nine Host/Guest non-init
wait-processstages through durable service reopen and an actual HVF owner replacement after exact Create, Start, terminal Exec, and signal-10 setup. Recovery always rebuilds the Exec, waits for its nonce-bound readiness marker, and reapplies the committed signal. The first eight paths have no Host process-exit cache, so the unchanged exact target and 15-second timeout dispatch once after reopen. A fully written response already holdssignal=10, oom_killed=false; replacement and later waits return from that cache with no driver dispatch, while the rebuilt exited process is not advertised as live. Every path preserves setup identities, terminal mode, generation, and process ID; rejects stale Host and Guest generations; force-deletes the still-running init; and restores Host and Guest inventories. The August 11, 2026 matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v8. - Carry all nine Host/Guest
pausestages through durable service reopen and an actual HVF owner replacement after exact Create and Start. The first eight paths retain an unpaused running record and a Prepared Pause journal; recovery recreates and starts init, rebinds its PID, repairs the completed Create and Start responses, and dispatches the unchanged Pause once. A fully written response instead retains the paused running record and a Succeeded journal. Recovery recreates and starts init, waits for its exact nonce-bound readiness marker, reapplies the committed freezer state, and repairs the Create, Start, and Pause journal PIDs before Host replay returns without API-driven dispatch. Every path preserves generation and complete request identities, rejects changed and stale Host and Guest requests, force-deletes the paused generation, and restores Host and Guest inventories. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v9. - Carry all nine Host/Guest
resumestages through durable service reopen and an actual HVF owner replacement after exact Create, Start, and Pause. Every recovery recreates and starts init, waits for the exact nonce-bound readiness marker, and reapplies the setup Pause with its original identity. The first eight paths retain a paused running record and Prepared Resume journal, then dispatch the unchanged Resume once. A fully written response instead retains an unpaused running record and Succeeded journal; recovery replays Pause and the committed Resume before returning recreated-running evidence, so Create, Start, Pause, and Resume responses all bind to the replacement PID and the Host retry does not dispatch. Every path preserves generation and complete request identities, rejects changed and stale Host and Guest requests, force-deletes the resumed generation, and restores Host and Guest inventories. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v10. - Carry all nine Host/Guest read-only
processesstages through durable service reopen and an actual HVF owner replacement after exact Create, Start, and live terminal Exec setup. Recovery always recreates init and Exec, rebinds both durable PIDs, repairs their completed responses, and verifies the nonce-bound replacement markers. The Processes query then resolves the same exact generation and returns exactly those two logical process identities from the fresh Guest. Because the query is not journaled, every replacement path dispatches it once, including when the first owner wrote a complete response. Every path rejects stale Host and Guest generations, force-deletes the live generation, and restores both owner inventories. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v11. - Carry all nine Host/Guest
updatestages through durable service reopen and an actual HVF owner replacement after exact Create and Start. The first eight paths retain a Prepared Update journal and dispatch the unchanged exact target plus completeLinuxResourcesonce after recovery recreates the running init. A fully written response retains a Succeeded journal; recovery waits for the fresh nonce-bound workload marker and reapplies the committed resource request before returning recreated-running evidence, so the Host retry repairs the Update response PID and does not dispatch again. Every path preserves the operation, target, resources, and generation; rejects changed resources and stale Host and Guest generations; reads two replacement Stats snapshots proving the 512 MiB memory limit and monotonic live counters; force-deletes the generation; and restores both owner inventories. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v12. - Carry all nine Host/Guest read-only
statsstages through durable service reopen and an actual HVF owner replacement after exact Create, Start, and committed Update setup. Every recovery recreates and starts init, waits for its nonce-bound readiness marker, reapplies the complete resource profile to the fresh cgroup, and repairs the completed Create, Start, and Update response PIDs. Stats has no Host response journal, so the replacement query dispatches exactly once at every stage, including after the first owner wrote a complete snapshot. Both delivered snapshots must prove the exact 512 MiB profile and required live counters; the completed first-owner path additionally requires a newer, distinct replacement snapshot. Every path preserves the target and generation, rejects stale Host and Guest generations, force-deletes the generation, and restores both owner inventories. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v13. - Carry all nine Host/Guest read-only
read-outputstages through durable service reopen and actual HVF owner replacement. Recovery rebuilds the exact Create, Start, and non-terminal captured-output Exec requests, repairs all completed response PIDs, and dispatches the same cursor, byte-limit, and long-poll query once to every fresh owner. A delivered first response must match the nonce-bound stdout chunk, while replacement output must come from the rebuilt Exec. Stale Host and Guest generations fail closed, force delete removes the generation, and both owner inventories return to baseline. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v14. - Carry all nine Host/Guest
write-stdinstages through durable service reopen and actual HVF owner replacement. Recovery always rebuilds the exact pipe-backed Exec. The first eight stages leave the Host journal resumable and dispatch the write once after reopen; when the first owner committed the response, recovery replays those exact bytes into the fresh Exec before Host open completes and the API retry returns from the durable journal without another driver call. Exact effect markers, request identity, changed-payload rejection, stale generations, PID rebinding, force delete, and both owner cleanup inventories are required. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v15. - Carry all nine Host/Guest
close-stdinstages through durable service reopen and actual HVF owner replacement. Recovery always rebuilds the exact pipe-backed Exec. The first eight stages leave the Host journal resumable and dispatch the close once after reopen; when the first owner committed the response, recovery closes the fresh Exec input before Host open completes and the API retry returns from the durable journal without another driver call. Exact EOF markers, request identity, changed-target rejection, stale generations, PID rebinding, force delete, and both owner cleanup inventories are required. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v16. - Carry all nine Host/Guest
resizestages through durable service reopen and actual HVF owner replacement. Recovery always rebuilds the exact terminal-backed Exec. The first eight stages leave the Host journal resumable and dispatch the resize once after reopen; when the first owner committed the response, recovery restores120x40in the fresh terminal before Host open completes and the API retry returns without another driver call. Exact SIGWINCH effect markers, request identity, changed-dimension rejection, stale generations, PID rebinding, force delete, and both owner cleanup inventories are required. The August 11, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v17. - Carry all nine Host/Guest
filestages through service reopen and actual HVF owner replacement. The v3 Host journal retains the exact upload and typed response. Prepared paths dispatch once after reopen. Atguest-after-response-write, the first API call exposes the post-commit acknowledgement disconnect; recovery rebuilds the upload in the fresh/tmpfilesystem, and Host replay returns without another driver dispatch. Exact binary bytes, response shape, permanent changed-content rejection, stale generations, explicit removal, force delete, and both owner cleanup inventories are required. The August 15, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v18. - Carry all nine Host/Guest
filesystemstages through service reopen and actual HVF owner replacement. The v3 Host journal retains the exact MakeDir request and typed response. Prepared paths dispatch once after reopen. Atguest-after-response-write, the first API call exposes the post-commit acknowledgement disconnect; recovery rebuilds the directory in the fresh/tmpfilesystem, and Host replay returns without another driver dispatch. Exact directory metadata, request identity, permanent changed-path rejection, stale generations, replacement Stat, explicit Remove, force delete, and both owner cleanup inventories are required. The August 15, 2026 Apple Silicon matrix passed all nine stages in 18 fresh VMs undera3s.oci.oci-vm-operation-reopen-replacement.v19, completing all 180 real operation-stage paths across all 20 workload operations. - Requalify
guest-after-response-writefor all 14 journaled mutations against real Apple Silicon HVF with protocol v10 acknowledgement. Every first API call returns retryableUnavailableafter its Host outcome is durable, every replacement owner reconstructs any VM-local effect, Host replay avoids a second API-driven dispatch, and Guest evidence is released only after commit. The August 15, 2026 focused matrix passed 14/14 cases.
- Repeat the retained real-host operation-stage and shutdown qualification on WHPX and the future KVM backend before promoting either driver's readiness. This is a per-driver release gate; it does not reopen the protocol contract or the completed HVF matrix.
- Implement all OCI hook phases with typed prestart, createRuntime, createContainer, startContainer, and poststart failure rollback, bounded timeout/process-group cleanup, and warning-only poststop behavior.
- Implement
runas a client composition, not a second lifecycle.
Exit gate: lifecycle tests pass under fault injection at every durable write
and host/agent transition. The durable-write and RuntimeDriver portions pass;
the real HVF host/agent operation-stage matrix passes, while equivalent
real-driver coverage remains open for the other utility-VM backends.
R2 — Windows WHPX Utility VM
-
Load and probe Windows Hypervisor Platform securely.
-
Create and delete a real WHPX partition object.
-
Pin the
a3s-libkrun-sys 3.1.0FFI ABI and stage a runtime-owned, checksum-verified Windows bundle for the isolated shim, with firmware provenance fromA3S-Lab/Box@93fc281and segmented WHPX stream plus writable virtio-fs flush fixes fromA3S-Lab/libkrun@dc5519f. -
Create, configure, and release a real context using the Windows WHPX libkrun build.
-
Configure a plain-vsock device and the fixed guest control port through the Windows named-pipe mapping ABI without enabling TSI.
-
Enter the VM and execute a guest command through WHPX.
-
Configure one vCPU, bounded memory, a diagnostic rootfs share, and console output.
-
Define and test the versioned host/guest lifecycle protocol over a transport-independent byte stream.
-
Bind the host half of the Windows agent bridge with a verified protected DACL, first-instance ownership, remote-client rejection, expected-shim PID verification, and authenticated protocol negotiation over a real named pipe.
-
Implement the Linux guest binary, bounded AF_VSOCK connection retry, secret-zeroizing bootstrap, and static musl build.
-
Replace the diagnostic path with a protected runtime-owned share.
- Separate the guest system root from a protected writable share, export
only
shares/<container>/<generation>with a fixed virtio-fs tag, mount it before agent token access, and reject external or cross-generation bundles before VM launch. - Move one-time token and recovery-report handoff into the exact share and require versioned shim evidence that the device was configured.
- Add an explicit digest-bound product bundle-handoff extension that stages by create-operation identity, moves only after the runtime allocates the real generation, and preserves exact replay and owned cleanup.
- Add an SDK-owned portable-rootfs metadata contract used by Box and replay Linux ownership, modes, and symlink identity inside the guest before OCI mounts, with bounded all-before-mutation validation and one-shot consumption.
- Run the qualification-only
RuntimeDrivernominal lifecycle through that share on a real WHPX host and retain its versioned lifecycle, replay, authenticated recovery-publication, and cleanup evidence. - Run the owner-death and service-restart matrix through that share on a
fresh WHPX-enabled Windows host and retain its machine-readable evidence.
Clean commit
2d91cd0emitteda3s.oci.whpx-recovery-smoke-run.v1after exact owner termination, both Recover fault boundaries, service reopen, terminal replay, stopped-only delete, and complete transient cleanup.
- Separate the guest system root from a protected writable share, export
only
-
Boot the pinned A3S Linux kernel and immutable system root.
- Record source revisions, reproducible build inputs, checksums, and the runtime-to-guest compatibility level in the release evidence.
- Mount the immutable system root separately from the protected per-generation runtime share and reject any digest or provenance drift before VM entry.
- Run the complete WHPX SDK and recovery matrices against those exact assets on a fresh Windows host.
The August 15, 2026 implementation builds the Alpine 3.22.5 x86_64 ext4 image twice and requires byte-for-byte equality, binds Linux 6.12.91 and the Box/libkrun/firmware source revisions in
a3s.oci.windows-system-image.v1, pins the manifest, image,krun.dll, andlibkrunfw.dllwith read-only Windows handles, rejects reparse paths and identity changes, and rehashes every asset immediately before VM entry. The shim attaches the image as a read-only virtio-blk root and exports bundle/token/recovery data only through the separate writable runtime share. These two implementation items do not close the parent gate until a fresh WHPX host retains the full matrix. -
Establish the named-pipe/vsock bridge.
-
Negotiate the guest protocol and retain boot evidence.
-
Run a fixed configured process through distinct OCI create and start calls.
-
Factor native and transport-backed guest execution through one exact twenty-operation driver adapter.
-
Implement a one-VM-per-container WHPX
RuntimeDrivercandidate with exact-generation routing, retry/terminal-failure ownership, delete and whole-driver cleanup, and protected-root bundle containment tests. Keep itprobe-onlyand non-registerable until the remaining exit gates pass. -
Reconcile owner-death cleanup after host restart as an exact-generation stopped tombstone. Permit state, idempotent kill, empty process inventory, and delete while rejecting live-only operations and never synthesizing an exit status.
-
Retain exact init exit evidence across WHPX owner death and host-service restart, including before/after recovery faults.
- Define a versioned and bounded exact-generation report, authenticate it with the ephemeral agent session token, and emit it only after complete guest executor shutdown.
- Have the owner-PID shim verify and copy the normalized report into protected host storage before its owner-death grace expires.
- Consume the report through durable startup recovery, cache exact wait replay, retain the artifact through before/after recovery fault gates, and close the replacement-host/shim handoff race with a protected pending marker plus bounded retryable wait.
- Run the complete owner-death and service-restart gate on a fresh WHPX-enabled Windows host and retain its machine-readable evidence.
-
Verify running state, exact create/kill/delete replay, signal-driven stopped state, post-delete NotFound, marker cleanup, and no new guest runtime directory on the nominal path.
-
Qualify the 3 KiB stream fix with serial and two-lane parallel lifecycle, network namespace, storage, volume-init, typed negative, and four-point owner-termination cleanup paths without residual host processes or guest runtime directories.
-
Prove in-process native handle reclamation independently of Windows process teardown.
- Emit nonzero current-process handle counts immediately before libkrun
context creation and after
krun_start_enterreturns. Shim schema v6 and Host validation require exact equality before cleanup can succeed. - Retain that exact evidence across the complete fresh-host WHPX SDK, recovery, negative, and soak matrices.
- Emit nonzero current-process handle counts immediately before libkrun
context creation and after
Exit gate: a fresh Windows host test boots a utility VM, runs the fixed OCI
bundle, validates negative isolation cases, retains exact terminal evidence
across host restart, and leaves no process, handle, or runtime-root leak. Only
then may WHPX become experimental.
R2M — macOS HVF Utility VM qualification harness — 15/15 complete
- Query Apple Silicon Hypervisor.framework support directly.
- Add the minimal checked-in Hypervisor entitlement used to sign runtime development and CI artifacts.
- Create and destroy a real process-owned HVF VM object through the system framework, with symbolic failure reporting and cleanup ownership.
- Retain the versioned success or fail-closed unavailable report in the CLI and macOS CI.
- Verify a signed round trip on a local Apple Silicon host and verify that
a missing entitlement returns
HV_DENIED. - Stage a runtime-owned, checksum-verified macOS libkrun bundle only for the isolated shim.
- Create, configure plain agent vsock, and release one libkrun context without entering a VM.
- Enter a real HVF VM in an isolated, bounded worker and require a guest-written host marker, natural zero exit, worker reap, and marker cleanup.
- Retain fail-closed unavailable-HVF and missing-entitlement evidence without accepting pre-entry configuration as guest execution.
- Boot the same pinned A3S Linux kernel and immutable system root through
HVF, retain their digests in the host report, keep the writable
per-generation share separate, and rerun the complete macOS SDK and soak
matrices against those exact assets. The retained Apple Silicon run used
manifest SHA-256
e7206ea5c645259fcc9f00d8b3042792d6a6b380436a0a38a1b85dda7c0d4284, raw-image SHA-256e8f5f6713ac093b278b5851129f154b783c08bb8489fe6964bbd93dae0c43910, and agent SHA-256ee7099e367c91b70a1c84cc6f8921da67e7aec4805e6b5c99b6aa683e7544ed1. - Establish the private macOS Unix endpoint and AF_VSOCK guest-agent bridge, verify that the peer is the shim's direct VM worker child, and authenticate version-negotiated protocol with a one-time token. The current immutable Guest negotiates protocol v10; retained v9 evidence remains valid for backward compatibility.
- Run the same fixed create/state/start/kill/wait/delete OCI lifecycle used by WHPX, including bounded running wait, exact repeated exit status, pause/resume, live process inventory, resource update, normalized stats, and the exact six-device privileged profile. Keep durable target-cleanup evidence on the writable runtime share, create temporary source nodes only on Guest-local devtmpfs, and remove those sources at the Create barrier without weakening device identity validation.
- Prove deterministic VM, process, descriptor, and filesystem cleanup without normal delete after successful create, start, and kill boundaries. Each phase requires exact endpoint removal, observed-PID reap, complete descriptor-inventory restoration, marker removal, and no new guest runtime root.
- Add a bounded, versioned 25-wave HVF soak gate that creates a fresh VM for every complete two-container matrix, retains three primary generations per wave, rejects endpoint and descriptor drift, and uploads its JSON report and per-wave consoles in CI.
- Retain fail-closed unavailable-virtualization, missing-entitlement, invalid-runtime-asset, missing-agent-rootfs, wrong-token, and unexpected-peer evidence without reporting false negotiation.
- Expose the launch-ready
HvfRuntimeDriverthrough a public Apple Silicon Host Service and CLI. Use one same-UID mode-0600 Unix socket below a real owner-only mode-0700 root, separate durablestate/from writable HVFruntime/, accept concurrent clients, scope disconnect failures to one connection, clean up only the bound inode, advertise all 20 driver operations and the runtime bundle-handoff extension, and reap every active VM once on graceful shutdown. - Abstract exact-generation VM launch and ownership behind testable factory/owner interfaces. Prove concurrent Create reuses one VM, interrupted Create resumes the moved bundle and starts one VM, and terminal Create failure reaps the VM and removes runtime-owned handoff state.
- Advertise only
DedicatedVmfrom both the macOS probe and the public HVF driver until trust-domain-aware shared-guest pooling exists. - Requalify the current public Host Service through
RuntimeClienton the signed Apple Silicon build, including all 20 driver operations, publicfeatures/list/events, and Box-style bundle handoff without invoking a qualification-only lifecycle entry point. The August 13 closing run exercised all 23 advertised operations and consumed the exact staged bundle. - Kill the public Host Service while a real generation is live, require
exact shim/worker owner-death cleanup and authenticated recovery evidence,
reopen a replacement service, resume Creating or expose exact stopped/exit
state, and prove no socket, process, descriptor, share, or runtime-root leak.
The replacement was accepted only after its kernel peer PID differed from the
killed service; it recovered exact
signal=9, oom_killed=falsestate and restored the service descriptor inventory from 13 descriptors to 13. - Run a new 25/25 fresh-VM soak through the current public Host Service and
retain current-commit evidence. Every wave used distinct shim/worker process
identities, replayed create/kill/wait/delete exactly once, rejected stale
generations, restored the 13-descriptor baseline, and left no endpoint,
bundle handoff, runtime share, recovery report, socket, or process behind.
The August 14 revision-bound rerun at
a5a6b535fb69e16c10708fbc94927cf515e6b4d7included the Guest-local device source fix, exercised all 23 public Host Service operations, recovered the killed owner through a distinct replacement, and completed 25/25 fresh VMs. Lifecycle, replacement, and soak each restored the 14-descriptor baseline with no transient residue.
Exit gate: a fresh Apple Silicon host test boots the utility VM, completes the
fixed OCI lifecycle through the authenticated guest agent, validates negative
isolation cases, and leaves no process, descriptor, or runtime-root leak. Only
then may HVF become experimental. The August 13, 2026 Apple Silicon
qualification passed the same immutable-image multi-container matrix, all 3
no-delete cleanup points, all 11 transport fault points, all 180 operation
replacement paths, the asset/authentication/entitlement negatives, and 25/25
fresh-VM soak waves with 75 primary generations and a stable 10-descriptor
baseline. The built-in HVF capability is therefore experimental.
That evidence qualifies the historical R2M harness. Separate August 13, 2026
closing runs through the public Host Service passed the three real-host gates
above against signed Apple Silicon artifacts, including a complete post-fix
rerun after Unix socket path capacity became a configuration-time invariant.
An August 14, 2026 revision-bound rerun then covered the Guest-local devtmpfs
device-source correction with the same three gates and zero residue.
The currently advertised macOS/HVF public product path is therefore 100%
function-complete and remains experimental. Signed release-package
qualification, upstream OCI conformance, adversarial security review, upgrade
and rollback compatibility, and longer release soak remain promotion gates
before supported.
The August 15, 2026 focused follow-up closed durable Host journaling for File upload and Filesystem mkdir/move/remove, raised the durable operation schema to v3, and passed all 18 real-HVF File/Filesystem owner-replacement paths. It also passed the unified post-commit acknowledgement contract for all 14 journaled mutations. These are function-completeness fixes; they do not remove the release-promotion gates above.
R2L — Linux KVM Utility VM
-
Report
/dev/kvmpresence, access, ioctl, and API-version evidence independently from Native Linux readiness. -
Pin and verify the Linux libkrun runtime, firmware, and firmware-exported A3S Linux kernel for x86_64 and AArch64. The build accepts only the exact two-file archive for the selected architecture, and the isolated shim repeats real-file, size, digest, kernel-size, address, and kernel-digest checks before native API use.
-
Create, configure VM resources and a plain agent vsock, and release one dynamically loaded libkrun context on Linux x86_64 and AArch64 without opening
/dev/kvmor entering a VM. Positive CI and tampered-file plus symbolic-link negatives retain the boundary. -
Bind the verified native runtime and kernel to the immutable system root and static guest agent as one compatibility set for every advertised architecture. CI builds byte-reproducible x86_64 and AArch64 ext4 roots, proves that each contains the exact supplied static agent, embeds the exact target bundle from the strict shared asset manifest, and configures the descriptor-pinned root read-only in an isolated libkrun context. Manifest, image, target, runtime, symbolic-link, replacement, and same-size content drift all fail closed before VM entry.
-
Start the KVM worker in an isolated shim, mount only the protected per-generation runtime share, and authenticate the AF_VSOCK guest-agent session without falling back to host-kernel execution.
The current candidate implements the isolated worker, descriptor-pinned runtime share and KVM device, pidfd-bound direct shim owner, kernel-verified direct Unix peer, one-time token handoff, protocol-v10 negotiation, exact immutable boot evidence, and process/endpoint/handoff cleanup. The x86_64 and AArch64 CI lanes require real authenticated entry whenever their KVM probe is available and otherwise retain explicit post-configuration KVM failure evidence. This parent remains open until both advertised architectures retain successful real-entry reports.
-
Implement the launch-capable KVM
RuntimeDrivercandidate through the shared twenty-operation adapter with exact-generation routing, bounded shutdown, and complete process, endpoint, share, and runtime-root ownership.KvmRuntimeDriver::open_candidateverifies the KVM probe, immutable manifest, private empty bootstrap root, and separate writable runtime share before a launch. The shared lifecycle enforcesDedicatedVm, atomic bundle handoff, concurrent Create fencing, retryable and terminal cleanup, stopped recovery, all 20 workload operations, and all six OCI hook phases. Candidate capability remainsprobe-only, explicitly disables Native Linux fallback, and cannot register withHostRuntimeServiceuntil the real-entry, full-matrix, and soak gates pass. -
Run the same lifecycle, process I/O, filesystem, resource, namespace, multi-container, fault-cleanup, owner-death, and service-restart matrices used to qualify WHPX and HVF.
- Wire the shared Utility VM lifecycle to Linux x86_64/AArch64 and add a
16-case CI entry for the complete 20-operation lifecycle, two-container
isolation, three lifecycle cleanup boundaries, and all 11 Host/Guest
transport interruption points. The
a3s.oci.linux-kvm-lifecycle-matrix.v2report retains endpoint, shim-process, runtime-state, bootstrap, token/recovery, and marker cleanup. Runners without usable KVM emitunavailablewith zero cases and skip the Alpine fixture rather than manufacturing a pass. - Add a qualification-only Unix Host Service and real-process recovery
entry. It binds the override to
linux-kvm-owner-death-restart-only-v1, kills the exact live service with SIGKILL, requires the shim and worker to exit with authenticated recovery evidence, reopens through a distinct kernel-authenticated socket peer, and verifies exact stopped/Wait replay plus stopped-only Delete and zero transient residue. Runners without KVM retain an explicit zero-casea3s.oci.linux-kvm-recovery-matrix.v2report without downloading Alpine. - Add a separately scoped bounded KVM soak for x86_64 and AArch64. One
durable Host Service runs 25 fresh exact generations by default and retains
per-wave generation/replay, process-incarnation, descriptor, marker,
endpoint, bundle-handoff, runtime-share, recovery-report, console, and
configured Guest
cgroupsPathlifetime evidence. Unavailable runners emita3s.oci.linux-kvm-soak-matrix.v2with zero completed iterations and do not download Alpine. - Close the KVM-independent driver isolation preflight before any Guest
share or VM exists. Dedicated-VM Create now rejects
SharedHostKernel,SharedGuestKernel, an inexact generation, or a missing atomic handoff contract before mutation. Missing, linked, non-private, digest-drifted, escaping-rootfs, and absolute-bind handoff sources are fully validated beforeshares/<container>/<generation>is created. The same production path and cleanup assertions run on Linux x86_64 and AArch64 CI without requiring/dev/kvm. - Retain the
available16-case lifecycle, owner-death/restart, and 25-wave soak reports on fresh x86_64 and AArch64 KVM hosts, then complete the remaining real-entry Guest negative-isolation profiles.
- Wire the shared Utility VM lifecycle to Linux x86_64/AArch64 and add a
16-case CI entry for the complete 20-operation lifecycle, two-container
isolation, three lifecycle cleanup boundaries, and all 11 Host/Guest
transport interruption points. The
-
Retain fail-closed context evidence for invalid, missing, symbolic-link, or drifted Linux libkrun, firmware, and exported-kernel assets.
-
Retain real-entry fail-closed evidence for an initialization-failing KVM device and compatibility drift across the system root and guest agent.
- Cover absent, inaccessible, ioctl-failing, and wrong-version KVM devices in the independent probe, and repeat real-character-device, read/write, identity, and API-version checks immediately before libkrun so an unusable entry device returns versioned evidence instead of relying on a native-process abort.
- Add a qualification-only post-probe failure on KVM-capable hosts. The
worker opens and pins the real
/dev/kvm, requires API version 12, recordskvm_post_probe_failure_injected=truein shim schema v7, and exits before native VM entry. The real-host gate requires exit code 2, no bridge or protocol negotiation, and exact endpoint, shim-process, token-handoff, and runtime-share inventory restoration. - Run the complete system-root and guest-agent compatibility-drift matrix
at the configured real-entry worker boundary on x86_64 and AArch64. The
14-case
a3s.oci.linux-kvm-compatibility-drift.v2gate covers manifest and raw-image replacement, same-size mutation, and symlinks; architecture and runtime-target mismatch; Guest Agent version and digest drift; and runtime archive, libkrun, firmware, and exported-kernel provenance drift. Every case fails before KVM-device access or VM entry and restores endpoint, shim-process, token-handoff, and runtime-share inventories, so the two CI architectures retain the matrix even without a usable KVM device.
Exit gate: a fresh KVM-capable Linux host boots the pinned utility VM, passes
the complete SDK and recovery matrices through the authenticated guest agent,
and leaves no process, descriptor, cgroup, endpoint, share, or runtime-root
leak. Only then may KVM become experimental.
R3 — Shared Linux Executor And Guest Agent
- Multi-container guest registry with per-container generations, proven with two distinct bundles, simultaneous create barriers, independent start/kill/wait/delete, nonblocking wait/state progress, exact replay isolation, generation-1 fencing after generation-2 recreation, and complete cleanup through native Linux and the macOS utility VM.
- Create a new UTS namespace and apply the configured hostname and domainname before the created barrier.
- Create a new mount namespace, make the inherited mount tree recursively
private, self-bind the rootfs, and complete
pivot_rootbefore the created barrier. - Apply OCI mount entries in listed order, including safe missing directory/file target creation, bind/rbind, common VFS flags, propagation modes, and filesystem-specific data.
- Own the complete OCI 1.3 Linux mount-option registry in the SDK, consume
every required and recommended control option without forwarding it as
filesystem data, preserve unknown filesystem-specific options, reject the
optional unimplemented
tmpcopyupbehavior explicitly, and derive the sorted feature report from the same registry. All 82 Linux mount-option normative entries are owner-bound: 80 enforced and two optional entries conformant through explicit rejection and honest feature reporting. - After all mounts are in place, create the conditional OCI Linux
/dev/fd,/dev/stdin,/dev/stdout, and/dev/stderrlinks without replacing conflicting container content. Verify their exact targets through native Linux v19 and Apple Silicon utility-VM v11 retained evidence. - Create new IPC, network, and cgroup namespaces atomically before the created barrier.
- Create a new PID namespace, retain a dedicated namespace PID 1 supervisor, run the configured container process as PID 2+, and authenticate the launcher-to-supervisor-to-process identity chain before the created barrier.
- Prove executor shutdown cleanup without delete after successful create, start, and kill through native Linux and the macOS utility-VM path.
- Open and retain a pidfd for every authenticated configured process,
reject kernels without
pidfd_openandpidfd_send_signal, and deliver lifecycle and cleanup signals without a numeric-PID reuse race. Prove the path through native Linux and the macOS utility VM. - Retain exact normal-or-signal configured-process termination, return the same result from repeated waits, enforce bounded wait timeouts, and prove one container's wait does not block another container's state request.
- Create new rootful user and time namespaces, install and read back exact UID/GID mappings through the authenticated parent, apply and verify monotonic/boottime offsets, switch to mapped namespace-root credentials before rootfs mutation, and prove the path through native Linux and the macOS utility VM.
- Create a new rootless user namespace from a non-root native executor,
require exact size-1 effective-UID/GID mappings for container root, install
subordinate ranges through fixed root-owned setuid mapping helpers, deny
supplementary groups, read back both maps and
setgroups=deny, and prove the core lifecycle plus exec and ordered events on x86_64 and aarch64. - Open and type-check all existing namespace descriptors before mutation, join non-user namespaces around the user-namespace capability transition, preserve PID/time next-child semantics, and prove UTS, mount, IPC, network, cgroup, PID, user, and time joins through native Linux and the macOS utility-VM path.
- Apply private, shared, slave, and unbindable rootfs propagation, masked paths, read-only paths, and read-only rootfs enforcement; prove the same create/start barrier and exact cleanup through native Linux and the macOS utility VM.
- Supply OCI's Linux ABI default filesystems in newly created mount
namespaces when their exact destinations are omitted. Mount
/procand an eligible read-only/sysbefore configured child mounts, mount/dev/ptsand writable/dev/shmafter a configured/dev, and preserve exact caller destinations. Do not expose host sysfs when a non-initial user namespace inherits networking; Linux rejects a fresh sysfs there. Prove the rootful, new-network, and rootless security paths through Native Linux. - Apply all OCI recursive VFS mount attributes with
mount_setattr, descriptor-pin each destination, and prove top-level and nested submount enforcement through native Linux and the macOS utility VM. - Apply ID-mapped filesystem and bind mounts through the Linux mount API,
use either exact per-mount mappings or the newly created container user
namespace, distinguish non-recursive
idmapfrom recursiveridmap, and prove filesystem ownership through native Linux and the macOS utility VM plus unchanged bind sources and exact recursion through native Linux. - Apply and verify OCI capability bounding, effective, permitted, inheritable, and ambient sets; read all five sets back from the kernel, prevent exec from exceeding the configured init bounding ceiling, and retain distinct init and exec profiles in Native Linux smoke v18.
- Apply OCI
process.noNewPrivilegesthrough one shared init/exec path, require exactPR_GET_NO_NEW_PRIVSread-back, and retain workload-level/proc/self/statusevidence for init and exec. - Implement and retain the OCI warning-only policy for requested capabilities that the kernel cannot map or grant. Init and exec resolve each requested set against the kernel ceiling, bounding set, and current grant authority, enforce the remaining set exactly, and send one bounded, validated warning per unavailable capability over the authenticated internal control socket. The agent logs each warning before accepting exec success; malformed, duplicate, or unbounded warning frames fail closed.
- Validate, retain, and apply every OCI
process.rlimitstype before credential reduction for both init and exec; reject duplicates, inverted soft/hard values, and unbounded plans; read every successfulsetrlimitback throughgetrlimit, fail closed on either value changing, and retain distinct init and execRLIMIT_NOFILEevidence in the native Linux report. - Validate and retain OCI
process.oomScoreAdj, apply it to init and exec through procfs retained before namespace and root changes, leave the inherited value untouched when omitted, require exact kernel read-back before credential reduction, and bind all three OCI requirements to unit and real Native Linux evidence. - Validate and retain OCI
process.ioPriority, apply all three Linux I/O classes to init and exec before credential reduction, preserve inherited priority when omitted, reject out-of-range or nonzero idle class data, and require exact syscall read-back plus real Native Linux evidence. - Validate, retain, and apply OCI
process.schedulerto init and exec with Linuxsched_setattr/sched_getattr: preserve inherited scheduling when omitted; support all seven OCI policies and flags; reject duplicate flags, invalid nice/realtime/deadline relationships, and unavailableSCHED_ISOwith stable typed errors; preserve the exact OCI flag spellings across SDK transport; and require real Native Linux kernel read-back. - Validate and enforce OCI
process.execCPUAffinityonly for exec. Normalize CPU lists before launch, apply and read backinitialbefore the workload cgroup transition, join through the inheritedcgroup.procsdescriptor, then apply and read backfinal. Omitted or empty phases make no affinity syscall, init ignores the field, and Native Linux, HVF, and WHPX lifecycle probes verify the final kernel mask. - Validate and enforce OCI
linux.personalityfor configured init. Accept only theLINUXandLINUX32domains, reject every nonempty flag list before mutation, perform no syscall when the field is omitted, and require exact syscall and workload read-back on Native Linux, HVF, and WHPX. - Validate and enforce OCI
linux.memoryPolicyfor configured init. Recognize all seven OCI modes and all three flags from one SDK registry, validate bounded node lists and Linux mode/flag relationships, apply the policy before credential reduction and seccomp, and require exact syscall plus workload read-back on Native Linux, HVF, and WHPX. Omission preserves the inherited policy without issuing a syscall. - Implement the OCI 1.3 Intel RDT lifecycle in the runtime-namespace
parent. Create or reuse the requested CLOS, apply
l3CacheSchema,memBwSchema, andschematain normative order with read-back, assign the authenticated init PID before runtime hooks, manage a dedicated monitoring group, preserve explicit CLOS ownership, and recover exact runtime-owned paths after owner death. Omission does not inspect or mutate resctrl. - Qualify Intel RDT on a CAT/MBA-capable x86_64 Linux host, including real-kernel CLOS and monitoring limits, assignment inheritance, delete, failed-Create rollback, and owner-death cleanup with zero resctrl residue.
- Parse OCI Linux sysctls once in the SDK, accept only known IPC, network, UTS-domain, and user-namespace controls, reject aliases and host-global mutation, and apply bounded deterministic writes through retained procfs. Verify every value, reverse all prior writes when Create fails before ready, and retain native x86_64/aarch64 IPC and network read-back evidence.
- Implement OCI 1.3
linux.netDevicesin the runtime-namespace parent. Validate a bounded source-sorted plan and an independent network namespace; reject missing sources, exact target collisions, loopback devices, and master-attached interfaces; support appended%dname templates; move interfaces through retained namespace descriptors; preserve stable link attributes and permanent global addresses; and bring every moved interface up. Retain reverse-order failed-Create rollback until the created state is durably committed, reject rootless requests before mutation without explicit network-device authority, and advertiselinux.netDevices.enabled=truefrom the same implementation. Native Linux qualification covers real dummy-device move/rename, MTU/MAC/address/state read-back, conflict, partial rollback, rootless rejection, and cleanup. Ten OCI requirements are owner-bound. - Make the OCI feature report fail closed against the pinned schema, derive its accepted specification range and seccomp values from SDK-owned registries, and prove every advertised seccomp action, architecture, and operator against the shared executor. Forty-one feature requirements are owner-bound. Subsequent common-configuration, platform, extensibility, namespace, ID-mapping, time-offset, PIDs, memory, Block I/O, Linux-device, HugeTLB, RDMA, Unified, network-controller, Seccomp, and VM-configuration promotions plus Linux default-filesystem, runtime-lifecycle, common value, file-descriptor, cgroup, rootfs, network-device, mount-label, and stable feature-report evidence leave 578 enforced, 51 validated, 12 conformant, 14 reviewed-external, and zero pending entries.
- Compile and install pure-Rust x86_64/AArch64 seccomp BPF with OCI argument comparisons, stacked default/specific actions, and retained exec policy.
- Apply and read back cgroup v2 memory limit/reservation/swap, CPU
shares/quota/burst/period/cpuset/idle, PID limits, Block I/O default and
per-device weight plus read/write BPS/IOPS limits, HugeTLB usage plus optional
reservation limits for every requested live page size, keyed RDMA HCA
handle/object limits, and bounded unified control-file settings whose
controllers are present and enableable. Preserve zero and map
the OCI memory and PIDs
-1sentinel to cgroup v2maxfor Create and Update, reject values below-1, keep reservation independent of the hard limit, require finite total swap to have a compatible finite memory limit, and reject cgroup v1-only memory andnet_cls/net_prionetwork controls before mutation. Keepcontrol-workload-v1finite while accepting zero for the exact workload leaf and adding only its configured headroom to the management envelope. Allow independent CPU quota and period requests, reject cgroup v1 realtime controls, and order live quota/burst changes without a transient invalid state. Join init and exec to the same owned leaf; freeze and thaw that leaf throughcgroup.freezeand verify the exact transition throughcgroup.events. Keep Block I/O on the workload leaf, preserve omitted keyed values during partial updates, verify every write, and roll back in reverse order if a later resource or device-policy mutation fails. Keep HugeTLB, RDMA, and Unified settings on the workload leaf as well, preserve omitted page sizes and HCA fields, and preflight every dynamic control, unified file, and RDMA device before device-policy mutation. - Create a private controller-enabled cgroup-v2 manager, apply generation-fenced typed resource updates with exact read-back and reverse-order rollback, accept kernel-defined Unified writes with readable no-op/rollback snapshots, and expose normalized CPU, memory, PID, and event statistics through native Linux and the shared utility-VM lifecycle harness.
- Preserve OCI
linux.cgroupsPathidentity in one SDK parser, resolve absolute values from the visible cgroup v2 mount, keep relative values stable below one private manager, confine rootless absolute values to the verified delegation, and retain exact normal and owner-death cleanup paths. Native x86_64/aarch64 gates read both host memberships, recreate the relative value at the same location, and require both leaves to disappear after delete. - Delegate writable cgroup-v2 ownership only for the OCI 1.3 exact mount and new-namespace profile. Resolve the configured process UID through the container user mapping, forbid rootless transfer to subordinate identities, preserve GID, and mutate only the retained cgroup directory plus existing kernel-listed delegate files. Bound and validate the inventory, use the normative fallback only when it is absent, and verify positive, read-only, unlisted-file, and cleanup behavior on a real Linux kernel.
- Add the opt-in
control-workload-v1topology for a trusted configured init: retain exact workload limits inlinux.resources, derive a bounded outer management envelope, create fixed control/workload children, pass collision-checked membership FDs, keep guest cgroupfs read-only, and update, freeze, inspect, and clean up the workload topology through the same cgroup owner. - Enforce rootful OCI block, character, unbuffered-character, and FIFO
nodes at normalized paths inside or outside
/dev, with exact identity, mode, mapped ownership, existing-target conflict handling, and durable cleanup. Supply the six default nodes,/dev/ptmx, and terminal-backed/dev/console; retain the bounded A3S Box rootless profile and ordered cgroup-device policy path. - Complete the remaining process and rootless configuration boundary.
- Enforce supplementary credentials, I/O priority, exec CPU affinity, and supported rootless ID-mapping shapes before executor mutation; reject every unsupported shape.
- Advertise and enforce the exact supported LSM set, with fail-closed behavior and positive and negative evidence for every reported module.
- Extend seccomp classification and enforcement to every advertised architecture and notification mode; reject every other requested action, flag, or architecture before launch.
- Replace the Box-specific device profile boundary with an exact generated support policy or reject broader OCI device requests without mutating the rootfs or cgroup by requiring an explicit cgroup path before any device-policy mutation.
- Complete the remaining cgroup v2 resource boundary.
- Bind every OCI CPU field to cgroup v2 or an explicit pre-mutation
rejection. Preserve omitted current values during partial updates, return
Unsupportedfor unavailable burst or idle controls, and keep burst and idle on the exact workload leaf rather than the derivedcontrol-workload-v1management envelope. - Enforce cgroup v2 Block I/O default and per-device weights plus all four throttle lists with exact keyed read-back and rollback; reject the cgroup v1-only leaf-weight model before mutation.
- Enforce HugeTLB usage and reservation controls for canonical live page
sizes, including full-range
uint64decoding, kernel-aligned read-back, partial Update preservation, reverse rollback, optional-controller propagation, and workload-only control/workload placement. - Enforce keyed RDMA handle/object limits with controller and device preflight, partial-update preservation, exact read-back, reverse rollback, and workload-only control/workload placement.
- Enforce bounded OCI Unified control-file maps with dynamic controller propagation, runtime-unknown and write-only file support, safe-name and typed-ownership validation, writable-file preflight, kernel-defined read-back formatting, readable no-op/rollback snapshots, and workload-only control/workload placement.
- Add rootful device-access BPF with exact block/char allowlists, access subsets, and live filter replacement on update.
- Make the OCI declared/default device inventory an immutable cgroup-v2
BPF upper bound for rootful and delegated-rootless execution. Generate a
private generation-fenced cgroup path when
linux.cgroupsPathis omitted, intersect orderedlinux.resources.devicesrules with that boundary, and preserve it when rules are cleared. Native ARM64 Linux evidence grantsCAP_MKNOD, permits a declared node, rejects an undeclared node, remounts anodevdevice source withdev, rejects the late access, and returns executor, session, and cgroup inventories to zero. - Qualify the rootless delegation model and device support for every
advertised profile on real hosts. The v4 rootless gate retains an exact
user-owned cgroup-v2 descriptor, starts a parent-bound privileged helper
before Tokio, permanently drops the owner to its real UID/GID, and accepts
only structured install/replace/remove requests for normalized descendants.
The first bounded profile is the exact six-device A3S Box fixture. Its smoke
verifies retained device-node mounts, read-only replacement, failed-update
rollback, resource-rule clear/restore with the inventory boundary retained,
durable events, helper shutdown, and complete
cgroup/runtime cleanup. Runtime commit
bed43d2passed both x86_64 and aarch64 real-host lanes in CI run31714178349. Both retained v4 reports recordavailable, UID/GID 20000, verified helper, nodes, updates, events, deletion replay, durable-state removal, and empty cgroup, runtime, session, and marker cleanup. This is the only advertised rootless device profile; broader device and controller profiles remain outside that boundary. - Supply the six normative default device nodes for an ordinary rootless
launch through the same bounded helper without requiring or fabricating a
linux.resources.devicesaccess policy. Recreate the helper for both sides of owner-death recovery and verify the nodes from inside the workload. - Define a fail-closed authority contract for default devices when a
container joins an externally owned user namespace. Pin and type-check the
descriptor, observe bounded non-overlapping UID/GID maps from inside the
namespace, recheck its device/inode identity immediately before
setns, and use the observed namespace-root mapping with the existing detached device-source and exact-cleanup path. Native Linux multi-container v19 and real Apple Silicon utility-VM multi-container v11 verify all six nodes from inside the joined-user workload. - Run create, update, stats, pause/resume, recovery, and cleanup evidence for every newly advertised controller on x86_64 and aarch64.
- Bind every OCI CPU field to cgroup v2 or an explicit pre-mutation
rejection. Preserve omitted current values during partial updates, return
- Reap adopted orphan and zombie processes under namespace PID 1, terminate all remaining namespace processes after the configured process exits, and preserve that process's exact exit code or terminating signal.
- Add exact-generation container exec with a reserved init process ID, shared fail-closed OCI process planning, retained rootfs and all configured namespace descriptors, authenticated helper/parent/PID/root/namespace identities, per-process pidfds, replay-safe signal, stable repeated wait, WNOWAIT process-group cleanup, and automatic exec termination when init or the agent session exits. Prove the path through native Linux and the shared utility-VM lifecycle harness.
- Put configured and exec workloads in separately supervised process
groups, retain each leader with pidfd plus non-reaping wait ownership, use
waitid(WNOWAIT)in fork supervisors, serialize signal/reap through a cross-process lease, and fan replay-safekill(all=true)signals across every live group without requiring delegated cgroup v2. Prove descendant delivery and the closed PGID-reuse race with real Linux regressions and the rootless native lifecycle. - Add exact-generation live init/exec process inventory plus replay-safe pause/resume, and prove with a progress-producing workload that cgroup freeze stops execution and resume restarts it through native Linux and the shared utility-VM lifecycle harness.
- Ordered hooks with OCI state on stdin.
- Backpressured piped stdin, bounded captured stdout/stderr, controlling
PTYs, OCI
consoleSizeinitial terminal dimensions, resize, merged terminal output, VEOF close, signals, and byte-accurate output cursors. - Native inherited descriptor handoff for the A3S Box exec listener on FD
3, PTY listener on FD 4, and dedicated init log on FD 5, with type/role/count
validation, collision-safe child
dup2, stable host/agent replay schemas, non-native rejection, exact listener/log lifecycle evidence, and cleanup. - Update and stats.
- Persist exact-generation lifecycle and process events behind a global
nonzero sequence, deterministic replay identity, bounded pagination and
filtering, exclusive cursors, long polling, crash repair, and host-service
reopen. The configured host owns and advertises
eventswithout driver or guest dispatch, and native Linux verifies the exact lifecycle stream.
Exit gate: the same executor passes its lifecycle, configuration, security, and recovery suites in the Windows guest and on native Linux.
R4 — Native Linux Without KVM
- Report native namespace, cgroup v2, and pidfd signaling prerequisites
without opening
/dev/kvmor initializing libkrun. - Report optional KVM absence, permission failure, ioctl failure, and API version independently from native readiness.
- Add the native Linux driver without linking or initializing libkrun.
- Reuse the R3 Linux executor directly.
- Prove runtime binary startup, feature inspection, Rust SDK loading, and the rootful lifecycle through the versioned create-attachment contract, including exact repeated init wait plus public SDK exec/signal/wait, pause/resume, process inventory, resource update, and normalized stats plus PTY allocation, resize, interactive I/O, and VEOF without KVM on x86_64 and aarch64.
- Prove the helper-backed non-root core lifecycle with subordinate
UID/GID ownership and
setgroups=denyon x86_64 and aarch64. - Qualify explicit rootless cgroup-v2 delegation on x86_64 and aarch64.
The v4 lifecycle gate covers create, update, stats, pause/resume, replay,
events, and runtime-owned subtree cleanup on both architectures. A separate
owner-
SIGKILLgate now reopens the exact delegation as the same non-root UID/GID and requires stopped-only recovery plus complete cgroup cleanup. Runtime commit49cea11passed both real-host lanes in CI run31674526443; the retained x86_64 and aarch64 v2 recovery reports bind UID/GID 20000, verified delegation use, workload termination, stopped-only deletion, and an empty runtime-created cgroup subtree. - Prove shutdown cleanup without delete after create, start, and kill on x86_64 and aarch64 without KVM.
- Add the Sandbox-scoped native runtime owner, bind its protected Unix SDK
endpoint, route the complete lifecycle through
a3s-oci-sdk, fence inherited Box descriptors to one container ID, and prove signal-driven cleanup on x86_64 and aarch64 without KVM. - Add a bounded, versioned native complex-container soak that repeatedly drives concurrent lifecycle, query, captured exec, pause, durable service reopen, resume, generation reuse, and leak checks across four independent slots on x86_64 and aarch64 without KVM. CI defaults to 25 waves, verifies 100 complete lifecycles from dynamic operation counts, and retains each architecture's JSON report.
- Retain a versioned real-driver configuration matrix for private, host-inherited, and donor-shared network namespaces; shared/read-only bind and private-tmpfs storage; inline/script/direct/nonzero init; and independent prestart/createRuntime/createContainer/startContainer/poststart rollback, timeout, and warning-only poststop behavior on x86_64 and aarch64.
- Prove the Box-owned production bundle and explicitly opted-in long-lived Native Linux owner composition on x86_64 and aarch64 through the Rust, Python, TypeScript, and Go SDK lifecycle, exec, filesystem, route-aware stats, pause/resume, snapshot restore, restart, and cleanup surfaces.
- Safely reconcile abrupt Native Linux owner death on x86_64 and aarch64.
Bind the launcher and all helper chains to their authenticated parents,
persist PID-start-time/config-digest/cgroup recovery evidence per exact
generation, kill the owner with
SIGKILL, reopen the real driver in a distinct process, commit only a stopped tombstone, refuse invented wait evidence, and prove stopped-only delete plus complete transient cleanup. Live process-session reattachment remains an R6 gate. - Prove packaged installation and A3S Box product startup without KVM.
- Run the full Sandbox SDK suite with
/dev/kvmabsent and inaccessible. - Fail explicit dedicated-VM requests before runtime state or driver mutation.
- Reject unavailable dedicated-VM selection in A3S Box before image mutation.
Exit gate: A3S Box Sandbox and its Rust, Python, TypeScript, and Go SDK tests pass on supported x86_64 and aarch64 Linux hosts without KVM.
R5 — Full OCI 1.3 Conformance
- Complete common configuration and process semantics and bind every
accepted or rejected field to the zero-pending normative evidence ledger.
The pinned gate freezes all 79 common configuration schema items outside the
separately reviewed VM section: 69 are enforced, two are validated, four
unsupported Linux process fields are rejected, and four native non-Linux
sections are rejected as inapplicable. All 278
config.mdrequirements are frozen as 227 enforced, 35 validated, 13 reviewed external, and three conformant entries with no pending owner. Arbitrary annotation keys and values remain exact JSON metadata through bundle decoding and Linux executor planning, including escaped NUL and control characters; they are not incorrectly treated as C strings. Empty keys and bounded resource limits still fail closed. This closes common configuration semantics, not Linux configuration, cross-driver lifecycle, security, or release conformance. - Complete Linux configuration enforcement and generate feature reporting from the same driver-specific support data used by validation and execution.
- Complete applicable VM configuration semantics without executing
untrusted hypervisor, kernel, or firmware paths during validation. The
pinned gate freezes all 26 VM-related schema items and all 24 normative VM
requirements: four absolute runtime-path requirements are semantically
validated, while the remaining 20 requirements and every caller-provided
hypervisor, kernel, image, and hardware field are bound to the selected
driver's fail-closed runtime-owned-asset policy. Dedicated negative evidence
rejects NUL bytes in every executable VM path and parameter. The Host
Service rejects the complete schema-valid
vmsection before durable generation reservation, bundle handoff, platform mutation, or mutating driver dispatch. This closes bundle-supplied VM configuration semantics, not utility-VM lifecycle, security, real-host, or packaged-artifact qualification. - Pass the pinned OCI JSON schema suites for config, state, and features using fixtures emitted by every advertised driver profile. The exhaustive SDK gate runs all 19 vendored positive, schema-negative, and malformed-JSON cases and SHA-256-binds the exact fixture inventory and canonical LF text. A separate Host Service matrix validates the checked-in Native Linux, Linux KVM, macOS HVF, and Windows WHPX configurations, each generated Features document, and created, running, and stopped State documents. This closes schema compatibility only, not the remaining semantic, lifecycle, security, or release-artifact gates.
- Pass upstream lifecycle validation tools on every supported platform and architecture using the exact packaged runtime binaries.
- Cross-check supported bundles with upstream OCI lifecycle validation tools without shipping a second runtime backend.
- Run hook-order, rollback, crash-recovery, security-negative, and long-running soak suites on every advertised driver profile.
- Publish an exact, generated support manifest with no unclassified field. The schema-support v2 lock records 257 enforced, two validated, 75 rejected unsupported, 89 rejected inapplicable, zero pending, and zero conformant items. This closes field classification only; release conformance still requires the remaining lifecycle, security, cross-driver, upstream-tool, and packaged-artifact gates above.
Exit gate: the release report contains retained evidence for every applicable normative MUST and MUST NOT requirement in OCI Runtime Specification 1.3.0.
R6 — A3S Box Migration
- Add the pinned
a3s-oci-sdkdependency to A3S Box. - Implement the Box adapter using SDK types only.
- Route explicitly opted-in new Linux Sandbox records through Box-owned resource and bundle preparation into the long-lived Native Linux host owner, with a persisted route and no fallback after selection.
- Add an early cross-platform vertical slice for create, state, start, wait, kill, delete, exact exit status, and runtime-service restart before completing every optional OCI field.
- Route both Box isolation choices through the SDK:
microvmrequestsDedicatedVm, whilesandboxrequestsSharedHostKernel. - Persist only the exact OCI container ID, generation, endpoint, driver, isolation, configuration digest, and attachment digest needed for reconciliation; stop persisting runtime-owned process, VM, socket, pipe, and cgroup identities in new records.
- Preserve memory-retaining pause/resume through exact SDK targets with operation capability checks, durable replay identities, immutable binding validation, and lost-response reconciliation.
- Preserve captured and streaming exec, initial and streaming stdin, cursor-checked output, signal/wait, PTY/resize, exact terminal status, and cancellation-safe timeout cleanup through exact-generation SDK operations.
- Preserve exact-generation process inventory, resource updates, normalized stats, and ordered events through the public SDK, including capability preflight, binding drift rejection, durable Box claims, and lost-response replay.
- Preserve exact-generation file upload/download and filesystem stat/mkdir/move/list/remove through the public SDK with bounded payloads, capability preflight, mutation replay identities, descriptor-confined rootfs resolution, and Box type conversion.
- Preserve Box log policy and complete stop, kill, recovery, and cleanup parity.
- Prove the production x86_64 Native Linux owner/Box process restart boundary: kill the exact owner, cascade launcher/init termination, rebind through a fresh Box process, reconcile stopped state without invented exit evidence, delete the exact old generation, and restart the next Box and OCI generations.
- Prove Box process-session recovery across an out-of-process runtime restart on real native Linux and utility-VM drivers.
- Complete the Box cross-platform behavior and soak suites against A3S OCI Runtime.
- Qualify the Box R17 resource profile against
control-workload-v1, including exact CPU/memory/PID enforcement, control-service survival under workload OOM pressure, and zero leaked processes or cgroups. A3S Box PR #180 used OCI Runtimee6b840b73a4e5c3bbfa72c2b5d6fd89104a60f9ato resolve the fixed control and workload children, verify the derived outer headroom and exact workload limits, observe real CPU throttling, PID exhaustion, and workload OOM, then complete a post-OOM exec through the surviving control transport. Its required CI gate passed all advertised R17 profiles in 67.20 seconds and required the final process, cgroup, mount, provider-home, and runtime-state inventory to equal the clean baseline. - Remove external-runtime discovery, direct invocation, configuration, and fallback paths.
- Remove Box's direct libkrun, VMM, guest-init, and containerd-shim paths only after their replacement gates pass through the packaged OCI Runtime.
The Native Linux side now exposes a packaged, long-lived multi-container host
service suitable for the unified Box adapter. Box persists an explicit
box_vm or oci_sdk route before preflight, prepares its product resources and
minimal OCI bundle, and passes the opt-in x86_64 and aarch64 production-owner
composition through all four SDKs. Separate gates on both architectures now
prove owner/Box process restart with safe stopped-only reconciliation and
explicit next-generation restart. The broader gate remains unchecked until
live session reattachment passes on the real driver, the same production
composition passes WHPX, and the default/MicroVM cutover is complete. OCI
Runtime independently proves that abrupt Native Linux owner death safely
terminates and reconciles the exact generation without inventing terminal
evidence.
R7 — containerd Runtime V2
- Define the supported containerd runtime-v2 API and version matrix, the shim binary and package layout, and the exact mapping from containerd namespace and task identity to OCI container ID and runtime generation.
- Load the containerd-provided OCI bundle and translate create, start,
state, wait, kill, delete, exec, resize, close-I/O, and stats operations into
public
a3s-oci-sdkcalls without invoking A3S Box or importing driver internals. - Preserve containerd stdin/stdout/stderr and terminal semantics through the SDK's bounded process-I/O contract, including reconnect, EOF, resize, exact exit status, and cancellation cleanup.
- Reconcile shim and containerd restart at every lifecycle boundary using the runtime's durable generation and operation identities; prove that restart never duplicates a mutation, reroutes a driver, or invents process state.
- Run real
containerdandctrintegration suites for lifecycle, exec, I/O, signals, stats, restart, forced cleanup, stale identity, and parallel tasks against every advertised driver profile. - Publish the shim with signed or checksummed runtime packages and retain the exact containerd, shim, SDK, runtime, and driver compatibility record.
Contract v1 now freezes containerd.task.v2.Task, the exact 16 implemented
methods and explicit Checkpoint gap, runtime type io.containerd.a3s-oci.v2,
binary and Linux archive entry containerd-shim-a3s-oci-v2, installation at
/usr/local/bin/containerd-shim-a3s-oci-v2, the exact compatibility matrix,
and sha256-length-framed-u64be-v1 identity vectors. Tagged Linux archives
include the shim and contract document; RuntimeInfo exposes the contract,
identity, generation, and exact development-qualification annotations.
The same code-owned contract now freezes 23 exact Task and FIFO-pump routes
and derives their 18-operation public-SDK union. Endpoint admission consumes
that union directly, version and RuntimeInfo output expose it, and manifest
tests reject A3S Box, Runtime implementation, Agent, or Core dependencies in
the shim crate.
Current Native Linux development evidence covers containerd 2.2.2 lifecycle,
exec, pause/resume, update, stats, PID inventory, exact init and exec exits,
separate stdout/stderr plus stdin from empty input through 4 MiB,
Created/Running/Stopped daemon-restart boundaries, terminal exec resize before
and after daemon restart, schema-v8 durable exec incarnations plus init/exec
stdin, signal, and resize sequences, exact pending input payloads, signals,
and terminal sizes,
Open/Closing/Closed stdin state, output cursors, and per-task control
sequencing, live
terminal-exec input and output continuation without replay after manual shim
replacement, including a pending WriteStdin operation committed remotely
before the replacement can observe its response and replayed with exactly one
input effect, plus a committed CloseStdin boundary that persists Closing,
loses the original response, replays through the replacement, commits Closed,
and delivers one terminal EOF effect without reopening its FIFO, plus a
committed exec SignalProcess boundary that retains sequence 1 SIGSTOP as
pending, commits it remotely, replaces the shim, joins the completed operation,
and then proves the real process transitions through
SIGCONT→SIGSTOP→SIGCONT under fresh sequences 2 through 4, stale task
incarnation and runtime-generation replacement, a
four-task parallel Create/Start/running-restart/137-cleanup matrix, and exact
cleanup after shim
SIGKILL with init Created or Running and exec Added or Running. A durable
pre-generation create intent now also replays an in-flight Create through its
exact incarnation and operation identity after shim SIGKILL, obtains the one
runtime generation, and force-cleans it without task, process, bundle, or
runtime-state residue. A post-commit Start boundary runs the exact stable Start
identity while shim metadata still records Created, then kills the shim and
proves bounded DeleteShim cleanup terminates and deletes that running exact
generation. A separate post-commit Delete boundary removes the exact runtime
generation before killing the shim, then proves DeleteShim treats only that
generation's NotFound result plus a successful replay of its stable normal or
force Delete identity as a completed remote effect. It then finishes local
metadata, rootfs, and bundle cleanup without touching caller-owned container
metadata; unconfirmed state loss fails closed. A post-commit Exec boundary
submits the exact stable generation-scoped process identity while shim metadata
still records the exec as Added, verifies its live PID, then proves DeleteShim
reaps both init and exec and removes the exact generation without touching
caller-owned metadata. A post-commit SignalProcess boundary starts an exec,
suspends the shim before submitting its exact stable SIGKILL identity directly
to the runtime, observes the exact signal-9 exit while the init remains Running
at its original PID, then kills the stopped shim and proves bounded cleanup
removes both processes and the exact generation. A post-commit Kill boundary
also submits the exact stable SIGSTOP mutation against a running generation,
kills the shim while the stopped process remains live, and proves bounded
cleanup delivers the terminal signal and reaps the exact PID. Post-commit Pause,
Resume, and PID-limit Update boundaries retain the same exact generation,
verify the real paused state or applied pids.max, then kill the shim and prove
the same bounded cleanup converges without leaked cgroups or processes. Paused
cleanup uses the exact force Delete operation so the runtime thaws and stops
the generation as one cleanup operation instead of waiting on a frozen
terminal signal. Repeated controls now use a monotonically increasing durable
sequence instead of one fixed operation identity: two different Updates and
two complete Pause/Resume cycles dispatch distinct mutations, identical
completed retries do not dispatch twice, concurrent same-task controls are
serialized, and an in-flight retry retains the same sequence across shim
metadata reopen. Canonical JSON request fingerprints keep unordered resource
maps stable across shim, host, and guest reconstruction. Runtime operation
schema v2 records that encoding explicitly while retaining schema-v1 retry
validation with the legacy serializer. The August 14, 2026
Ubuntu arm64/containerd 2.2.2 release build also freezes the Runtime before a
terminal ResizePty, persists the next per-exec sequence and size, freezes the
original shim, commits that exact Resize directly, and replaces the shim before
its local journal can observe the response. The replacement replays the same
sequence without a second terminal effect, commits the observed size,
suppresses an identical retry, and proves that A→B→A allocates fresh
identities and restores the real PTY to A instead of replaying the first A.
The latest gate also runs one exec to exit 7, deletes it, reuses the same
containerd exec ID, restarts containerd while the replacement is Added, and
requires exit 23 from a fresh SDK process identity. Its durable per-task exec
sequence survives DeleteProcess; exit monitors are incarnation-bound so a
late result cannot terminate or poison the replacement. The latest
qualification also releases each Native Linux guest mutation record only
after its Host result is durable, including every derived chunk identity for a
stdin payload larger than the 4 MiB guest frame limit. Three complete 46.92,
47.39, and 47.23-second matrices passed consecutively through Host PID 3605
with installed shim SHA-256
a0e7dce493308ebea0b4642dd81a9e489109a8b3709f2a1ede62b015cc123482.
The matching Host and agent SHA-256 values were
f097da3529c47a06b32271550417ed810d698a2a6e385f122771c197b7de2b67
and be0b13215c21a2312f8a3e8d79cc9a39ed1a4b07b539f3d557e0f4e168c3345a.
The qualification recreates the killed task ID with a new incarnation and
generation and leaves no matching task, container, shim, agent child,
workload process, bundle, live runtime record, prepared Host operation,
session, marker, workload cgroup, or zombie. The remaining R7 items stay open
until the remaining failure boundaries, every advertised driver profile, and
the published release-artifact compatibility record pass.
Exit gate: containerd task, restart, I/O, and cleanup suites pass through the public SDK without the Box CLI, a direct VMM path, duplicate lifecycle state, or leaked runtime resources.
R8 — Optional Parity Extensions
- Add versioned extension discovery and negotiation so an optional operation is advertised only when the selected driver and exact release artifact passed its own gate.
- Accept already-authorized storage attachments with immutable identity, access mode, ownership, and cleanup contracts while leaving named-volume and snapshot policy in A3S Box.
- Accept already-authorized network attachments with exact namespace, interface, and cleanup identities while leaving IPAM, DNS, and network policy in A3S Box.
- Add reusable guest-session ownership with trust-domain, isolation, generation, capacity, reset, and leak fences; never reuse a guest across an incompatible or undeclared trust boundary.
- Implement checkpoint and restore as generation-fenced SDK operations with immutable artifact identity, compatibility validation, durable replay, rollback, and exact restored-process evidence.
- Carry TEE launch measurements and attestation evidence through typed SDK contracts without moving attestation authorization or product policy into the runtime.
- Run Box storage, networking, warm-session, snapshot, restart, and security suites through only the public extensions on each driver that advertises them.
Exit gate: every advertised extension has a versioned contract, fail-closed capability report, recovery semantics, exact release-artifact evidence, and a passing Box consumer gate. Unadvertised optional extensions do not block a supported core runtime release.
Platform Promotion
| Driver | Probe-only | Experimental | Supported |
|---|---|---|---|
| Windows libkrun/WHPX | Capability and partition smoke | Fixed bundle plus full SDK lifecycle | OCI, security, recovery, and soak gates |
| Native Linux | Host feature inventory | Full A3S Box Sandbox suite without KVM | OCI and adversarial gates on x86_64/aarch64 |
| Linux libkrun/KVM | KVM capability evidence | Same guest lifecycle as WHPX | Driver-specific isolation and soak gates |
| macOS libkrun/HVF | HVF capability and signed VM-object evidence | Same guest lifecycle as WHPX | Driver-specific isolation and soak gates |
Promotion is monotonic and evidence-based. Host hypervisor availability alone never enables workload launch.
Commit And Integration Policy
Each coherent, tested increment is committed and pushed to
git@github.com:A3S-Lab/OCI-Runtime.git. The a3s monorepo gitlink is updated
only after the runtime commit is remotely available and all focused checks
pass. Unrelated dirty submodules are never staged.