Repository navigation
Conversation
b29f47a to
ce7b806
Compare
## Summary Runtime-manager now routes catalog listings, installs, retries and removals through a source/store pair for the requested runtime. Node-manager selects its privileged publication store from that same runtime identity instead of sending every release to Firecracker's directory. Diagnostic inventory can scan several managed roots without merging releases that share a version. Configuration rejects duplicate runtime sources and overlapping stores, including aliases through existing ancestors. Missing routing is an explicit refusal; it never falls back to another runtime. Store overlap checks are scoped to the requested store so an unrelated broken layout does not disable Firecracker provisioning. Existing Firecracker paths, download configuration, job payloads and RPCs are unchanged. Production configuration still registers only Firecracker; Cloud Hypervisor's pinned source is a separate change. Kernel storage remains shared. ## Validation - Review follow-up documents the execution gate: additional runtimes must extend inventory filtering and execution-root overlap checks before execution is enabled. The follow-up changes comments only; the previously executed Linux routing regression remains the behavior evidence. - Runtime-manager library suite with `github`: 64 passed; one upstream network test remains ignored. - Runtime-core diagnostic suite: 28 passed, including coexisting same-version runtimes and an independently damaged CH entry. - Linux arm64 all-target Clippy for node-manager, runtime-manager and its service passed with warnings denied. The node-manager routing regression also passed in an unprivileged Linux ARM64 container using the installation-stack head; the routing implementation is unchanged from this PR. - Formatting and `cargo arch` passed; existing advisory size warnings remain. No live installation or KVM test was performed. No SQL or protobuf changes. ## Severity and risk Severity does not apply: this adds routing for additional runtime families. The main risk is source/store disagreement. Immutable artifact identities and privileged byte verification are preserved, and unconfigured runtimes are refused. Custom Rust configurations now provide a collection of sources; store paths must be absolute without parent traversal. ## Stack Cloud Hypervisor installation: perplexityai#915 → perplexityai#922 → perplexityai#923 → perplexityai#924, based on main after perplexityai#921. This group ends at verified runtime installation; it does not enable sandbox execution or change Firecracker/E0 defaults. Upgrade node-manager and runtime-manager before requesting Cloud Hypervisor installs. The dependent execution stack begins at perplexityai#925. AI assistance: Codex drafted code, tests and this description.
…plexityai#924) ## Summary Install and remove the pinned Cloud Hypervisor v54.0 ARM64 and x86_64 static executables through the existing bounded download, verification, publication and durable operation pipeline. Register its own source and managed store, and add a runtime filter to the CLI's available-release listing. Firecracker paths, pins and default execution policy remain unchanged. The transfer and executable SHA-256 pins were checked against the downloaded upstream release asset. The fs-verity measurement uses SHA-256, 4096-byte blocks and no salt. This establishes byte identity, not independent build provenance or guest compatibility. Installation does not advertise a runnable CH environment or snapshot support. ## Validation - Review follow-up: runtime-manager 66 passed (two existing external-network tests ignored); service CLI credential regression 1 passed; runtime-core 111 passed; execution-spec 29 passed. Credential tests failed before the fix. Formatting and all-target Linux ARM64 Clippy for these four packages passed with warnings denied. - Catalog tests: 8 passed, including complete executable and fs-verity pins for both architectures. Runtime-manager tests with `github`: 65 passed; one existing upstream-network test ignored. CLI tests: 13 passed. - Formatting and all-target Linux ARM64 Clippy for runtime-core, runtime-manager and the CLI passed with warnings denied. - The node-manager routing regression passed in an unprivileged Linux ARM64 container. - Both content pins match upstream v54.0 release-asset metadata. The x86_64 content and fs-verity pins were moved unchanged from the dependent boot-environment PR; their earlier Linux measurements remain the provenance for the verity values. This update does not add live service-driven install/uninstall evidence. Run that acceptance check before merging; compilation and unit tests do not establish deployed publication or guest execution. Release-source URLs reject userinfo, query parameters and fragments. Rejected values are omitted from parse errors and service CLI diagnostics; the public GitHub defaults remain valid. Credential-bearing mirror configurations now fail at startup and must be replaced with credential-free endpoints. ## Severity and risk Severity: does not apply; new runtime installation support. Risk is routing or verification regressions in artifact management. Separate runtime roots and unchanged FC URL/layout coverage protect existing installs. Both architectures are installable; no automatic execution selection is added. Upgrade node-manager first, then runtime-manager, before submitting CH installs. The status audit reports the new root as absent until node-manager provisions it. An older node-manager refuses the unknown pin; resubmit a failed install after upgrading. Rolling back the artifact services leaves CH bytes unused and does not require deleting them. ## Stack Cloud Hypervisor installation: perplexityai#915 → perplexityai#922 → perplexityai#923 → perplexityai#924, based on main after perplexityai#921. This group ends at verified runtime installation; it does not enable sandbox execution or change Firecracker/E0 defaults. Upgrade node-manager and runtime-manager before requesting Cloud Hypervisor installs. The dependent execution stack begins at perplexityai#925. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Ruff checks/formatting passed; both embedded Python programs compile, including the previously broken crash script. Focused Linux recovery tests pass, but the revised crash and manager-restart scenario has not been executed on a live KVM node. It remains a qualification gate, not passing acceptance evidence. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy the supervisor before node-manager and runtime-manager. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary The standalone guard also inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Current CPU-stack validation: 64 focused Linux tests passed, including managed-store ancestry, both release locator layouts, catalog pins, control protocol behavior, supervisor config refusals and launcher outcome handling. Linux ARM64 all-target/all-feature workspace Clippy and runtime-core default-feature Clippy passed with warnings denied; workspace rustfmt passed. Live KVM crash/restart qualification was not repeated. Ruff checks/formatting passed; both embedded Python programs compile, including the previously broken crash script. Focused Linux recovery tests pass, but the revised crash and manager-restart scenario has not been executed on a live KVM node. It remains a qualification gate, not passing acceptance evidence. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary The standalone guard also inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Current CPU-stack validation: 64 focused Linux tests passed, including managed-store ancestry, both release locator layouts, catalog pins, control protocol behavior, supervisor config refusals and launcher outcome handling. Linux ARM64 all-target/all-feature workspace Clippy and runtime-core default-feature Clippy passed with warnings denied; workspace rustfmt passed. Live KVM crash/restart qualification was not repeated. Ruff checks/formatting passed; both embedded Python programs compile, including the previously broken crash script. Focused Linux recovery tests pass, but the revised crash and manager-restart scenario has not been executed on a live KVM node. It remains a qualification gate, not passing acceptance evidence. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Check crash opt-in before creating a sandbox and again before fault injection. The standalone guard inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Check crash opt-in before creating a sandbox and again before fault injection. The standalone guard inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Check crash opt-in before creating a sandbox and again before fault injection. The standalone guard inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Remove the unused fixture memory override: the start CLI uses persisted template resources and does not accept --memory. Ruff and embedded-program syntax checks passed after the helper change. Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Check crash opt-in before creating a sandbox and again before fault injection. The standalone guard inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Remove the unused fixture memory override: the start CLI uses persisted template resources and does not accept --memory. Ruff and embedded-program syntax checks passed after the helper change. Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
Review — 7 findingsMedium
Low
Two things are fixed later in the stack, so I'm not filing them here. First, with a CH environment allowed, Verified against |
the-gigi-pplx
left a comment
There was a problem hiding this comment.
Approved. 7 non-blocking findings in the review comment above.
## Summary Check crash opt-in before creating a sandbox and again before fault injection. The standalone guard inspects each running node-ctl process, including its own environment and --config path. The quarantined crash scenario links its recovery issue explicitly. Add typed direct-node recovery exercises for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation. Fence fault injection with sandbox/execution ownership, cgroup membership, recorded process birth time and a live pidfd. The crash exercise performs repeated VMM termination, including a manager restart, waits for normal cleanup to reach Stopped and release the node lease, then proves a new execution retains the disk marker. Keep it quarantined pending live qualification of #953. Document supervisor-first compact-layout rollout, drain-before-rollback, x86-64 usage and the ARM64 admission gate. ## Validation Remove the unused fixture memory override: the start CLI uses persisted template resources and does not accept --memory. Ruff and embedded-program syntax checks passed after the helper change. Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Opt-in disruptive tests, restricted to the owned execution on an authorized standalone worker. The guard is not a lock against concurrent administrators; exclusive operator access is required. Ambiguous ownership refuses fault injection and cleanup. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed recovery scenarios for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation, including each node-ctl process's environment and config. Require crash opt-in before create and fault injection. Pin the owned Firecracker or CH process with its execution fence, cgroup, process birth time and pidfd. Exercise manager restart with running and stopped sandboxes, then repeated VMM termination with and without a manager restart. Require ordinary cleanup to reach Stopped and release the node lease, and prove a fresh execution retains the disk marker. Keep the crash scenario quarantined until end-to-end qualification of #953 completes. Use the current Runtime PID label and independent SSH connections for disruptive recovery checks. Remove the unused memory override; start uses persisted sandbox resources. Document supervisor-first rollout, historical directory handling, drain-before-rollback, and the ARM64 admission gate. ## Validation Ruff, workspace rustfmt and compilation of both embedded Python programs passed. The isolated x86-64 KVM deployment installed CH and its kernel through runtime-manager and built seed and derived templates for both runtimes. Guest-agent processes with checked stdout/exit and gateway allow/deny checks pass for both. Running/stopped CH manager restart passed. Firecracker pause/resume, checkpoint, suspend/restore, repeated cold starts, auto-stop and final pool drain passed. The repeated CH crash test exposed a startup path that quarantined a fenced Started row before periodic recovery could clean it; #930 now preserves it for the fenced reconciler. Its regression failed before the correction. All 384 store tests passed on Linux; four source-audit tests needed the checkout mounted read-only. Store Linux all-target/all-feature Clippy passed with warnings denied, and the optimized deployment bundle rebuilt. Final live crash/restart qualification is being repeated after deployment; a transport-interrupted run is not counted as a pass. Earlier combined validation: 35 focused Linux tests cover containment filesystem contracts, control peer/protocol handling, authenticated publication/removal, both directory layouts, and fair fenced crash recovery. The fresh-process launcher also passed a privileged Linux containment probe. These checks do not substitute for live KVM acceptance. ## Severity and risk Disruptive tests require exclusive operator access to a dedicated standalone worker. They affect only the run-owned sandbox and its normal managers. Ambiguous ownership refuses fault injection. Background slot resetting can outlast sandbox deletion; the benchmark measures pool drain separately. This is CPU qualification, not GPU, Windows, ARM64 or multi-node qualification. ## Stack CPU sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor containing #930 before node-manager and runtime-manager; #929 alone is not an enablement boundary. Drain CH executions before rollback below #930 and keep the compatible supervisor while CH executions exist. Firecracker/E0 remains the default; CH is explicit opt-in. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed recovery scenarios for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation, including each node-ctl process's environment and config. Require crash opt-in before create and fault injection. Pin the owned Firecracker or CH process with its execution fence, cgroup, process birth time and pidfd. Exercise manager restart with running and stopped sandboxes, then repeated VMM termination with and without a manager restart. Require ordinary cleanup to reach Stopped and release the node lease, and prove a fresh execution retains the disk marker. The CH crash scenario now passes on live x86-64 KVM, including the manager-restart case from #953. Remove its known-failure quarantine; retain explicit dedicated-worker opt-in. Use the current Runtime PID label and independent SSH connections for disruptive recovery checks. Remove the unused memory override; start uses persisted sandbox resources. Document supervisor-first rollout, historical directory handling, drain-before-rollback, and the ARM64 admission gate. ## Validation Ruff, workspace rustfmt and compilation of both embedded Python programs passed. The isolated x86-64 KVM deployment installed CH and its kernel through runtime-manager and built seed and derived templates for both runtimes. Guest-agent processes with checked stdout/exit and gateway allow/deny checks pass for both. Running/stopped CH manager restart passed. Firecracker pause/resume, checkpoint, suspend/restore, repeated cold starts, auto-stop and final pool drain passed. The repeated CH crash test exposed a startup path that quarantined a fenced Started row before periodic recovery could clean it; #930 now preserves it for the fenced reconciler. Its regression failed before the correction. All 384 store tests passed on Linux; four source-audit tests needed the checkout mounted read-only. Store Linux all-target/all-feature Clippy passed with warnings denied, and the optimized deployment bundle rebuilt. The final live CH crash/restart run passed with independent SSH connections: two kills, recovery to Stopped, new executions, preserved disk marker, and complete lease cleanup. The earlier transport-interrupted run is not counted as a pass. Earlier combined validation: 35 focused Linux tests cover containment filesystem contracts, control peer/protocol handling, authenticated publication/removal, both directory layouts, and fair fenced crash recovery. The fresh-process launcher also passed a privileged Linux containment probe. These checks do not substitute for live KVM acceptance. ## Severity and risk Disruptive tests require exclusive operator access to a dedicated standalone worker. They affect only the run-owned sandbox and its normal managers. Ambiguous ownership refuses fault injection. Background slot resetting can outlast sandbox deletion; the benchmark measures pool drain separately. This is CPU qualification, not GPU, Windows, ARM64 or multi-node qualification. ## Stack CPU sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor containing #930 before node-manager and runtime-manager; #929 alone is not an enablement boundary. Drain CH executions before rollback below #930 and keep the compatible supervisor while CH executions exist. Firecracker/E0 remains the default; CH is explicit opt-in. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed scenarios for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation; crash injection also requires explicit opt-in and pinned execution/process ownership. Cover running/stopped manager restarts, repeated VMM termination and recovery with preserved disk, and memory lifecycle: pause/resume, full capture, two suspend/restore cycles, and manager restarts while suspended and after restore. RAM/disk markers and guest boot identity distinguish restore from cold boot. Blocking readiness exercises the restored guest transport. Cleanup owns only the scenario sandbox. Document the snapshot-capable environment and remove the stale crash-quarantine description after the live recovery test passed. ## Validation Linux ARM64 tests passed: 78 runtime-core tests covering boot codecs, control operations, environment identities, inventory and selection; 61 sandbox-manager tests covering lifecycle policy and snapshot materialization. Affected-package all-target/all-feature Linux Clippy passed with warnings denied, workspace rustfmt passed, cargo arch passed, and the optimized x86-64 deployment bundle rebuilt. Ruff validates the typed smoke scenario. Live CH and Firecracker memory lifecycle tests passed with no cleanup failures. CH and Firecracker S3 materialization passed after the local checkpoint was removed, including a retained root-owned instance, preserved RAM/disk/boot identity, gateway traffic and checked guest-agent stdout/exit. The existing CH crash scenario passed two VMM kills, including manager restart, followed by disk-preserving restart and lease cleanup. These are standalone same-node tests, not cluster or cross-node qualification. ## Severity and risk Disruptive scenarios require exclusive operator access to a dedicated worker. Ambiguous ownership refuses mutation. Snapshot tests require an explicitly selected snapshot-capable environment; production credentials and customer data are not test fixtures. ## Rollout Deploy the complete CPU sequence (#925 → #926 → #928 → #929 → #930 → #931 → #960). Install a supervisor containing #930 before enabling CH through node-manager. Firecracker/E0 remains the default. Keep compatible services and authenticated boot artifacts while CH snapshots exist; drain CH executions before rollback to builds without CH. ARM64, GPU, Windows, warm pools, cross-node placement and encrypted CH snapshots are not qualified by this change. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed scenarios for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation; crash injection also requires explicit opt-in and pinned execution/process ownership. Cover running/stopped manager restarts, repeated VMM termination and recovery with preserved disk, and memory lifecycle: pause/resume, full capture, two suspend/restore cycles, and manager restarts while suspended and after restore. RAM/disk markers and guest boot identity distinguish restore from cold boot. Blocking readiness exercises the restored guest transport. Cleanup owns only the scenario sandbox. Document the snapshot-capable environment and remove the stale crash-quarantine description after the live recovery test passed. ## Validation Linux ARM64 tests passed: 78 runtime-core tests covering boot codecs, control operations, environment identities, inventory and selection; 61 sandbox-manager tests covering lifecycle policy and snapshot materialization. Affected-package all-target/all-feature Linux Clippy passed with warnings denied, workspace rustfmt passed, cargo arch passed, and the optimized x86-64 deployment bundle rebuilt. Ruff validates the typed smoke scenario; all 31 smoke framework tests passed. The final live memory scenario, including pause/resume after manager adoption, passed with no cleanup failures. Live CH and Firecracker memory lifecycle tests passed with no cleanup failures. CH and Firecracker S3 materialization passed after the local checkpoint was removed, including a retained root-owned instance, preserved RAM/disk/boot identity, gateway traffic and checked guest-agent stdout/exit. The existing CH crash scenario passed two VMM kills, including manager restart, followed by disk-preserving restart and lease cleanup. These are standalone same-node tests, not cluster or cross-node qualification. ## Severity and risk Disruptive scenarios require exclusive operator access to a dedicated worker. Ambiguous ownership refuses mutation. Snapshot tests require an explicitly selected snapshot-capable environment; production credentials and customer data are not test fixtures. ## Rollout Deploy the complete CPU sequence (#925 → #926 → #928 → #929 → #930 → #931 → #960). Install a supervisor containing #930 before enabling CH through node-manager. Firecracker/E0 remains the default. Keep compatible services and authenticated boot artifacts while CH snapshots exist; drain CH executions before rollback to builds without CH. ARM64, GPU, Windows, warm pools, cross-node placement and encrypted CH snapshots are not qualified by this change. AI assistance: Codex drafted code, tests and this description.
## Summary Add typed scenarios for an explicitly opted-in, idle standalone worker. Check machine identity and effective cluster authority before mutation; crash injection also requires explicit opt-in and pinned execution/process ownership. Cover running/stopped manager restarts, repeated VMM termination and recovery with preserved disk, and memory lifecycle: pause/resume, full capture, two suspend/restore cycles, and manager restarts while suspended and after restore. RAM/disk markers and guest boot identity distinguish restore from cold boot. Blocking readiness exercises the restored guest transport. Cleanup owns only the scenario sandbox. Document the snapshot-capable environment and remove the stale crash-quarantine description after the live recovery test passed. ## Validation A further 44 Linux regression tests passed for launch admission, snapshot path validation, policy admission and create selection; affected-package Linux Clippy and rustfmt passed after the CI corrections. Linux ARM64 tests passed: 78 runtime-core tests covering boot codecs, control operations, environment identities, inventory and selection; 61 sandbox-manager tests covering lifecycle policy and snapshot materialization. Affected-package all-target/all-feature Linux Clippy passed with warnings denied, workspace rustfmt passed, cargo arch passed, and the optimized x86-64 deployment bundle rebuilt. Ruff validates the typed smoke scenario; all 31 smoke framework tests passed. The final live memory scenario, including pause/resume after manager adoption, passed with no cleanup failures. Live CH and Firecracker memory lifecycle tests passed with no cleanup failures. CH and Firecracker S3 materialization passed after the local checkpoint was removed, including a retained root-owned instance, preserved RAM/disk/boot identity, gateway traffic and checked guest-agent stdout/exit. The existing CH crash scenario passed two VMM kills, including manager restart, followed by disk-preserving restart and lease cleanup. These are standalone same-node tests, not cluster or cross-node qualification. ## Severity and risk Disruptive scenarios require exclusive operator access to a dedicated worker. Ambiguous ownership refuses mutation. Snapshot tests require an explicitly selected snapshot-capable environment; production credentials and customer data are not test fixtures. ## Rollout Deploy the complete CPU sequence (#925 → #926 → #928 → #929 → #930 → #931 → #960). Install a supervisor containing #930 before enabling CH through node-manager. Firecracker/E0 remains the default. Keep compatible services and authenticated boot artifacts while CH snapshots exist; drain CH executions before rollback to builds without CH. ARM64, GPU, Windows, warm pools, cross-node placement and encrypted CH snapshots are not qualified by this change. AI assistance: Codex drafted code, tests and this description.
|
@the-gigi-pplx Reviewed these against the complete seven-PR CPU sequence. The accepted fixes are applied and absorbed locally, not pushed at the author’s request; the GitHub heads do not contain them yet. The later GPU/Windows drafts were left untouched.
These integration fixes are absorbed in #930, where the final dispatch and endpoint checks live. Validation: the metadata-selection regression and targeted runtime tests passed on Linux. This does not replace live endpoint qualification. |
## Summary Parse historical 64-hex directory suffixes as full digests and preserve their complete digest cross-check; compact locators retain prefix matching. Keep diagnostic inventory compatible with historical installs. Compare kernel source sizes with catalog pins and identify the runtime in missing-source errors. Reuse historical full-digest execution-cache inodes instead of publishing duplicate compact copies. Locator inspection failures withdraw only the affected runtime or kernel binding; observe both layouts so repair triggers rediscovery. Managed discovery verifies the selected historical or compact release under the store ancestry and publication lock. Tests cover selected-copy verification under the protected store boundary. Pin CH 54.0 Linux 7.2.8+ boot artifacts for x86-64 and ARM64. Only the x86-64 complete environment is admitted: ARM64 artifacts remain installable for qualification, while ARM64 environment admission refuses until guest traffic, recovery and cleanup are qualified. Keep existing Firecracker identities and default policy. Publish compact 12-hex artifact locators while retaining full-digest authentication. Inventory, runtime-manager presence and operation targets, publication, execution-source validation and removal recognize historical 64-hex directories. Completed operations retain their durable locator when retried after removal. Prefer a compact copy when both exist; verify all copies before deleting either so an identity refusal leaves both untouched. Invalid preferred entries never fall back to an older copy. A missing runtime store does not discard unrelated environments. ## Validation Current review revision: 52 targeted Linux ARM64 tests passed across runtime, supervisor, node-manager, sandbox-manager/store, runtime-manager and builder code. Affected-package Linux Clippy (libraries and tests, all features, warnings denied), workspace rustfmt, Ruff, shell syntax and embedded Python compilation passed. The historical full-digest parser regression failed before the fix and passed afterward. These review fixes have not been deployed or rerun on a live KVM worker. Earlier revision evidence (not a live qualification of the review changes): Additional review validation: five focused Linux tests passed for orphan discovery, historical execution-cache reuse, and per-binding I/O isolation. A numeric-comm orphan fixture failed before the discovery fix. Affected runtime-core, node-manager and runtime-manager Linux ARM64 Clippy passed with all targets/features and warnings denied; rustfmt, Ruff and embedded Python syntax checks passed. Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Upgrade the supervisor first: the updated supervisor accepts both locator forms; an older supervisor rejects compact execution paths. Then upgrade publishers. Keep the updated supervisor in rollback images after publishing compact paths. Historical installs require no rename. A short-name collision refuses rather than replacing content. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Use an explicitly tagged internal launcher specification and avoid duplicate limit writes for fresh VM cgroups. Resident process attestation, exact cgroup checks and rlimit ordering are completed with the integration in #930. Add the single-threaded standalone process-launch mechanism used by #930. Authenticate the executable descriptor, enter the leased network namespace and VM cgroup, create private namespaces, drop privileges and report the VMM PID. The supervisor owns process lifetime and termination; node-manager owns guest boot and the control endpoint. The complete integration in #930 additionally detaches the host mount tree, protects device creation and control connections, and publishes process identity before execution. Deploy these changes together before enabling CH. ## Validation Current review revision: 52 targeted Linux ARM64 tests passed across runtime, supervisor, node-manager, sandbox-manager/store, runtime-manager and builder code. Affected-package Linux Clippy (libraries and tests, all features, warnings denied), workspace rustfmt, Ruff, shell syntax and embedded Python compilation passed. The historical full-digest parser regression failed before the fix and passed afterward. These review fixes have not been deployed or rerun on a live KVM worker. Earlier revision evidence (not a live qualification of the review changes): Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Privileged boundary for an opt-in runtime. Do not expose the intermediate launcher independently of #930. Authentication, namespace or credential failures refuse launch and leave cleanup ownership with the supervisor. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
## Summary Connect Cloud Hypervisor to fenced node launch, control and sandbox lifecycle while preserving Firecracker/E0 defaults. Authenticate opened executable and kernel descriptors, attest control sockets to the registered process lifetime, and require containment and Landlock. Prefer fs-verity; unsupported filesystems use catalog SHA-256 verification of protected source inodes. Add pause/resume and persisted memory capture/restore through a separately qualified state environment. Preserve guest device identities while rebinding host resources. Reuse existing publication and S3 materialization, including replacement of retained instances through node-manager's fenced operation. Keep historical cold-only environment identities unchanged. Preserve execution metadata in donor clones, both in the sandbox record and beside the checkpoint. Refuse restore when the checkpoint runtime or guest contradicts the saved sandbox binding. Permit local base-snapshot and pool creation for memory-state-qualified template bindings; explicit environment overrides remain cold-only and cluster creation remains gated. Bound endpoint probes and blocking work. Reconcile exited Started executions for both runtimes using positive process-exit evidence and fenced cleanup, preserving disks. Inconclusive ownership never releases resources. ## Validation The clone metadata regression failed before the fix and passed afterward in Linux. Targeted Linux tests cover clone path safety, runtime/environment admission, request identity preservation and runtime control. The prior review pass also passed 52 Linux tests, affected-package Clippy, formatting, and smoke syntax checks. An x86-64 working build containing these changes passed CH pause/resume, full snapshot, two suspend/restore cycles and manager restart recovery with RAM, disk and boot identity preserved. Broader parity work remains in progress and is not included in this revision. Earlier combined-stack runs passed the corresponding Firecracker lifecycle and real S3 upload/download with a missing local checkpoint; this does not establish cluster placement or credential-broker qualification. ## Severity and risk Opt-in privileged runtime integration. Process-exit recovery and retained-instance replacement also affect Firecracker. CH restore copies RAM, so large-memory latency needs workload-specific measurement. Encrypted CH memory state and cluster routes remain refused. The live pool run exposed missing disk-level metadata on the second donor clone; that correction remains in progress before pool parity can be qualified. ## Rollout Deploy #925 → #926 → #928 → #929 → #930 → #931 → #960 together before enabling CH. Install the supervisor containing #930 before enabling CH in node-manager. Keep compatible services and boot artifacts while snapshots exist; drain CH executions before rolling back to a build without CH. ARM64 execution, GPU, Windows, cross-node placement and encrypted CH state are outside this revision's qualification. AI assistance: Codex drafted code, tests and this description.
## Summary Build and register CH seed and derived templates through the existing services, preserving exact environment, runtime and guest identity. Derive installed guest-seed versions from both executables, reject disagreements, and flush and stop the guest before publishing its disk. CH finalization powers off because a reboot keeps its VMM resident. Resolve base-snapshot and in-node pool requests from the registered template's runtime instead of hardcoding Firecracker. Pin the selected build hash when creating a pool member. Request-construction coverage iterates all runtime kinds; environment qualification and lifecycle admission remain responsible for whether snapshots are supported. Share the architecture-to-boot-format contract, validate bundled recipes without a runtime-directory allowlist, and document the cold-only and snapshot-capable environments. Existing templates are not relabeled to gain capabilities. ## Validation The all-runtime base-snapshot request-construction test passed on Linux, including gVisor identity forwarding without claiming gVisor snapshot support. Related Linux clone/admission tests passed. The prior review pass passed affected-package Clippy and 52 targeted Linux tests. The current x86-64 working build created a CH base snapshot and started a usable guest from it without cold fallback. The two-member in-node pool run created its first paused donor but the second clone refused because disk-level execution metadata is not yet preserved. That defect is being fixed in this PR; pool parity is not qualified. Earlier combined-stack qualification built CH seed/derived templates and exercised persisted memory and S3 materialization. None of these runs qualifies cluster placement or encrypted CH snapshots. ## Severity and risk Opt-in template support; fleet defaults do not change. Workers and builders must share allowed environments and authenticated artifacts. The pool runtime selection change also affects Firecracker and pins the build selected by template-manager. Unsupported or mismatched bindings refuse rather than silently select another runtime. ## Rollout Deploy the complete CPU sequence #925 → #926 → #928 → #929 → #930 → #931 → #960 before enabling CH. Keep compatible services and boot artifacts while CH snapshots exist. ARM64 execution, GPU, Windows, cross-node placement and encrypted CH state are not qualified here; in-node pool validation remains in progress. AI assistance: Codex drafted code, tests and this description.
## Summary Runtime inventory no longer requires a jailer or memory-state format for every installation. Add managed-only CH discovery and runtime-owned resident state observation. External diagnostic files remain ineligible for execution. Firecracker retains its implementation and historical metadata reader. Unknown observations remain errors, never guessed lifecycle states. This introduces the control seam; the guarded boot consumer and authenticated connections arrive in #930. No protobuf, SQL, default-policy or runnable-environment changes. ## Validation Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward. The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot. Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required. ## Severity and risk Runtime observation changes can affect recovery. CH remains unlaunchable until the compiled environment and complete launch integration land; this PR alone does not enable it. ## Stack CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work. AI assistance: Codex drafted code, tests and this description.
Summary
Runtime inventory no longer requires a jailer or memory-state format for every installation. Add managed-only CH discovery and runtime-owned resident state observation. External diagnostic files remain ineligible for execution. Firecracker retains its implementation and historical metadata reader. Unknown observations remain errors, never guessed lifecycle states.
This introduces the control seam; the guarded boot consumer and authenticated connections arrive in #930. No protobuf, SQL, default-policy or runnable-environment changes.
Validation
Combined CPU-stack validation at #960: 35 focused Linux tests passed for containment filesystem contracts, control-peer/protocol handling, authenticated-store publication/removal, install/retry/removal across both directory layouts, and fenced crash recovery with saturated storage capacity. The production-permission registration test, shared-inode output test, and saturated-recovery test failed before their respective fixes and passed afterward.
The actual fresh-process launcher passed a disposable privileged Linux probe with the production sidecar-directory mode and console ownership: PID 1, dropped credentials, detached host mount tree, private devices, inherited root-only listener, and refusal of a substituted device directory. This does not qualify KVM, cgroup limits or a CH guest boot.
Affected-package Linux ARM64 all-target/all-feature Clippy passed with warnings denied; workspace rustfmt passed. Ruff passed and both embedded smoke programs compile. Live guest and repeated crash/manager-restart qualification has not been repeated and remains required.
Severity and risk
Runtime observation changes can affect recovery. CH remains unlaunchable until the compiled environment and complete launch integration land; this PR alone does not enable it.
Stack
CPU execution sequence: #925 → #926 → #928 → #929 → #930 → #931 → #960. Deploy a supervisor binary containing #930 before node-manager and runtime-manager. #929 alone is not an enablement boundary. Drain CH executions before rolling back below #930; retain a supervisor containing #930 while any CH execution exists. Enable CH explicitly only after the complete sequence is deployed. Firecracker/E0 remains the default. GPU and Windows are separate work.
AI assistance: Codex drafted code, tests and this description.