Skip to content

feat(minvmd): T01 — crate scaffold, libkrun FFI wrappers, smoke test - #236

Closed
norrietaylor wants to merge 5 commits into
mainfrom
feature/minvmd-host-daemon
Closed

feat(minvmd): T01 — crate scaffold, libkrun FFI wrappers, smoke test#236
norrietaylor wants to merge 5 commits into
mainfrom
feature/minvmd-host-daemon

Conversation

@norrietaylor

@norrietaylor norrietaylor commented May 27, 2026

Copy link
Copy Markdown
Member

Summary

Lands the scaffold forminvmd

  • New crates/minvmd workspace member; macOS-only krun module gated via #[cfg(target_os = "macos")] so existing Linux-only CI stays green (R1.1).
  • libkrun FFI in src/krun/raw.rs (T01 + T02 surface pulled forward to avoid churn) with a single block-level // SAFETY: enumerating C-ABI invariants; safe wrappers in src/krun/ctx.rs with per-call SAFETY comments (9 unsafe blocks, 9 SAFETY comments).
  • RAII Context handle: non-Clone/non-Copy, Drop calls krun_free_ctx, start_enter consumes via mem::forget (libkrun docs: configuration is consumed unconditionally → no double-free).
  • Typed VmError matching the sandbox2 convention (hand-rolled Display + std::error::Error, no thiserror). Backend { op, code } preserves errno magnitude per spec lesson error fidelity; dedicated StartEnterReturnedUnexpectedly { ret } variant for the libkrun-docs-violating path.
  • minvmd.entitlements grants only com.apple.security.hypervisor; justfile codesign-minvmd recipe builds release + ad-hoc-signs.
  • Gated tests/krun_smoke.rs + helper bin src/bin/krun_smoke_child.rs#[ignore] + MINVMD_E2E=1 guard. Verified end-to-end against libkrun v1.18.1 on aarch64-apple-darwin

Out of scope (intentional)

  • VM boot with a real kernel + Alpine rootfs
  • UDS↔vsock bridge to minimald
  • Lifecycle daemon (run/status/stop, auto-spawn from minimal2)\
  • Networking (gvproxy / TSI) → gated on .github/workflows/ci.yml: check if Cargo.lock is up-to-date #160; not in v0.1.
  • All forward surface (krun_set_kernel, krun_set_root, krun_add_vsock_port, krun_set_console_output) is declared and wrapped but not exercised by this PR — will wire it up in subsequent PR

Test plan

  • cargo build -p minvmd — green
  • cargo clippy -p minvmd --all-targets -- -D warnings — no issues
  • cargo fmt --check — clean
  • cargo test -p minvmd — 9 passed, 1 ignored (the gated smoke test)
  • MINVMD_E2E=1 cargo test -p minvmd --test krun_smoke -- --include-ignored — 1 passed against real libkrun v1.18.1 on macOS
  • Linux CI gate: existing Linux-only workflow stays green (krun module gated out, no libkrun linkage attempted)
  • just codesign-minvmd on a Mac dev box — produces a release binary signed with the hypervisor entitlement

Commits

  1. 3928bbed docs(minvmd): land 01-spec-minvmd-host-daemon and BDD features
  2. 9e4799b9 feat(minvmd): scaffold crate with build.rs, entitlements, and codesign justfile target
  3. 04ad1068 feat(minvmd): libkrun FFI bindings with safe wrappers and typed VmError
  4. d08671cc test(minvmd): gated krun_smoke FFI bring-up test
  5. b05e4918 refactor(minvmd): address cw-review advisories on ctx.rs

🤖 Generated with Claude Code

norrietaylor and others added 5 commits May 26, 2026 21:51
Pre-implementation baseline: the spec authored via cw-spec plus the four
Gherkin features (one per demoable unit) and the local task-list-id
settings. No code changes; subsequent commits implement against this spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…n justfile target

T01.1 — workspace skeleton only. No FFI, no runtime VM logic, no subcommands
beyond `completions`. Future sub-tasks add `src/krun/{raw,ctx}.rs` + VmError
(T01.2), the gated smoke test (T01.3), and the supervisor/boot/lifecycle
surface (T02–T04).

- crates/minvmd registered in the workspace; deps inherit via .workspace = true.
- build.rs gates link wiring on CARGO_CFG_TARGET_OS == macos; LIBKRUN_PREFIX
  env overrides the default Homebrew prefix (/opt/homebrew/lib).
- minvmd.entitlements grants only com.apple.security.hypervisor.
- justfile codesign-minvmd recipe builds release and ad-hoc-signs with
  `codesign --entitlements ... -s -` — reproduces the dev signing step.
- Linux build compiles to a runtime stub (R1.1); existing Linux-only CI stays
  green because build.rs emits no link flags on non-macOS targets.

Refs: docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md R1.1, R1.4

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
T01.2 — adds src/krun/{raw,ctx}.rs and src/error.rs. The wrappers cover the
T01 smoke-test surface (create_ctx, free_ctx, set_vm_config, set_exec,
start_enter) plus the T02 boot surface (set_root, set_kernel, add_vsock_port,
set_console_output) pulled forward to avoid a churn-only re-edit later.

- raw.rs declarations mirror libkrun.h exactly; one block-level SAFETY comment
  enumerates pointer / NUL-termination / ctx_id provenance / ownership-transfer
  invariants the unsafe extern block inherits from the C ABI.
- ctx.rs Context is an RAII handle: non-Clone/non-Copy, Drop calls krun_free_ctx,
  start_enter consumes self via mem::forget so the freed-by-libkrun configuration
  is not double-freed. Each unsafe call site (9 total) has its own SAFETY
  comment naming the specific invariants the wrapper enforces.
- VmError::{Backend, NulInPath, NulInString} with hand-rolled Display +
  std::error::Error impls matching the sandbox2 convention. check_backend()
  preserves errno magnitude (negative → positive code) per spec lesson
  "error fidelity".
- krun module is #[cfg(target_os = "macos")]-gated; portable VmError surface
  compiles on both platforms. Linux build still produces only the runtime
  stub — no libkrun linkage, CI stays green (R1.1).

Tests: 8 unit tests cover NUL-validation paths and check_backend semantics.

Refs: docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md R1.2, R1.3

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
T01.3 — adds tests/krun_smoke.rs plus the src/bin/krun_smoke_child.rs helper.
The helper exists as a separate binary because krun_start_enter never returns
on success — it exit()s with the guest workload's exit code, which would tear
down the test harness if called in-process. The integration test spawns the
helper via env!("CARGO_BIN_EXE_krun_smoke_child") and observes its exit code.

Gates: #[ignore] + MINVMD_E2E=1 self-skip inside the test body. Both must be
opted into before any libkrun call happens.

Two paths:
  - Bring-up only: drive create_ctx → set_vm_config(1, 512) → set_exec("/bin/true")
    through the safe wrappers, exit 0. Verified end-to-end against libkrun
    v1.18.1 on aarch64-apple-darwin.
  - Full start_enter: when MINVMD_KERNEL_PATH and MINVMD_ROOTFS_PATH are both
    set, the helper additionally calls set_root + set_kernel and invokes
    start_enter. Accepts libkrun's documented exit-code set
    (0 / 2 / 125 / 126 / 127). T02.4 (boot_e2e) exercises this path with a
    real Alpine guest + READY-marker round-trip.

Linux is unaffected: the test is target_os=macos-gated to an empty crate, and
the helper bin compiles to a stub that exits 0.

Refs: docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md R1.5

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two cosmetic cleanups from the T01 cw-review report
(docs/specs/01-spec-minvmd-host-daemon/01-review-minvmd-host-daemon.md):

- D-1: Context::start_enter no longer synthesises a misleading
  `VmError::Backend { code: 0 }` when libkrun's documented "only returns on
  error" contract is violated. New typed variant
  `VmError::StartEnterReturnedUnexpectedly { ret }` makes the protocol
  violation explicit instead of pretending it was errno 0. Added a unit
  test for the Display formatting.

- D-2: set_exec envp construction unified into a single `match envp_cstrs.as_ref()`
  expression that returns `(Vec<*const c_char>, *const *const c_char)`
  directly, eliminating the three repeated `envp_cstrs.is_some()` checks.
  Behaviour unchanged.

Also commits the cw-review report itself as the durable artifact.

Verified: cargo fmt + cargo clippy -p minvmd --all-targets -- -D warnings
clean; cargo test -p minvmd → 9 passed; gated krun_smoke against real
libkrun v1.18.1 still passes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 27, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR introduces the minvmd crate, a macOS-only host daemon scaffolding that uses libkrun to boot a Linux microVM. It includes raw FFI bindings with typed error handling, a safe RAII wrapper, a CLI skeleton, a smoke test, and comprehensive feature specifications for a four-unit implementation roadmap.

Changes

minvmd Host Daemon Scaffold and Specification

Layer / File(s) Summary
Workspace integration and build configuration
.claude/settings.local.json, Cargo.toml, crates/minvmd/Cargo.toml, crates/minvmd/build.rs, crates/minvmd/minvmd.entitlements, justfile
minvmd is added as a workspace member with workspace-inherited dependencies. The build script conditionally links libkrun on macOS, defaulting to /opt/homebrew/lib with a LIBKRUN_PREFIX override. macOS entitlements declare the hypervisor capability. A justfile recipe signs the release binary using these entitlements.
Error types and FFI bindings
crates/minvmd/src/error.rs, crates/minvmd/src/krun/raw.rs, crates/minvmd/src/krun/mod.rs
VmError enum captures backend errno failures (operation name + absolute code), NUL-byte validation failures for paths/strings, and unexpected non-negative returns from krun_start_enter. Raw FFI declares context lifecycle, VM/executable/kernel setup, vsock port mapping, and console output functions with extensive safety documentation.
Safe Rust wrapper and public API
crates/minvmd/src/lib.rs, crates/minvmd/src/krun/ctx.rs
Context RAII wrapper manages a ctx_id, validates inputs (CString conversion for NUL-termination), translates FFI return codes to VmError via check_backend, and frees resources on Drop. Public methods configure VM settings, guest root, executable, kernel/initramfs, vsock ports, and console output. start_enter consumes the context and treats non-negative returns as protocol violations.
CLI and test infrastructure
crates/minvmd/src/main.rs, crates/minvmd/src/bin/krun_smoke_child.rs, crates/minvmd/tests/krun_smoke.rs
CLI entry point provides a Completions subcommand and logging initialization. Test helper krun_smoke_child drives libkrun bring-up (create context, set VM config, set exec, optionally configure kernel/rootfs and call start_enter). Integration test validates mandatory bring-up markers and conditional start_enter behavior based on environment variables, gated by MINVMD_E2E=1 and #[ignore].
Feature specifications for future units
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md, docs/specs/01-spec-minvmd-host-daemon/{crate-scaffold-ffi-wrappers-libkrun-smoke-test,lifecycle-daemon-auto-spawn-status-stop,uds-vsock-bridge,vm-bring-up-with-virtio-linux-kernel-and-alpine-rootfs}.feature
Comprehensive roadmap documenting four units: Unit 1 (completed scaffold with FFI and smoke test), Unit 2 (VM bring-up with virtio-linux kernel and Alpine rootfs), Unit 3 (UDS↔vsock bridge for ssh.sock), and Unit 4 (lifecycle daemon with state management, auto-spawn, and stop semantics). Non-goals, design model, security/technical considerations, and open questions are included.
Proof artifacts and code review documentation
docs/specs/01-spec-minvmd-host-daemon/01-proofs/{T01.1-01-cli.txt,T01.1-proofs.md,T01.2-01-file.txt,T01.2-proofs.md,T01.3-01-cli.txt,T01.3-proofs.md}, docs/specs/01-spec-minvmd-host-daemon/01-review-minvmd-host-daemon.md
Proof artifacts document T01.1 (workspace and build wiring), T01.2 (FFI bindings and safe wrapper error translation with 8 unit tests), and T01.3 (krun integration smoke test exercising the full bring-up surface). Code review report traces compliance to all requirements and approves the scaffold.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

  • Implements the macOS minvmd host daemon scaffold with libkrun FFI bindings, VM error types, CLI/test infrastructure, and specifications for a four-unit implementation roadmap, directly addressing the feature requested in inbox#164.

Suggested reviewers

  • 0chroma
  • evanspearman
  • msample
  • bryan-minimal

Poem

🐰 Hops with glee
A daemon springs forth on Apple's shore,
Binding krun's libmagic to Rust's core,
Errors typed safe, wrappers true—
Alpine boots while UDS flows through!
Specs chart the path for Units yet to brew. ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and clearly summarizes the main change: introducing T01 (crate scaffold, FFI wrappers, and smoke test) for minvmd, which is the core focus of the pull request.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/specs/01-spec-minvmd-host-daemon/uds-vsock-bridge.feature (1)

42-48: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix inconsistent socket path to match spec.

The socket path ~/.local/state/minimal/minvmd/minimald.sock is inconsistent with the main specification. According to R3.1 in 01-spec-minvmd-host-daemon.md, the UDS should be at:

  • Primary: $XDG_RUNTIME_DIR/minimal/minimald.sock
  • Fallback: ~/.minimal/local/minimald.sock

The path used here mixes XDG_STATE_HOME location (~/.local/state) with the socket, but sockets belong in XDG_RUNTIME_DIR (or the fallback location), not in the state directory.

🔧 Proposed fix
-    When the host runs a client that sends "list-sessions" over the UDS at "~/.local/state/minimal/minvmd/minimald.sock"
+    When the host runs a client that sends "list-sessions" over the UDS at "$XDG_RUNTIME_DIR/minimal/minimald.sock"

Or use the fallback path if testing without XDG_RUNTIME_DIR set:

-    When the host runs a client that sends "list-sessions" over the UDS at "~/.local/state/minimal/minvmd/minimald.sock"
+    When the host runs a client that sends "list-sessions" over the UDS at "~/.minimal/local/minimald.sock"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/specs/01-spec-minvmd-host-daemon/uds-vsock-bridge.feature` around lines
42 - 48, Update the UDS path in the scenario string that currently uses
"~/.local/state/minimal/minvmd/minimald.sock" to match the spec: use the primary
path "$XDG_RUNTIME_DIR/minimal/minimald.sock" and, where tests run without
XDG_RUNTIME_DIR set, use the fallback "~/.minimal/local/minimald.sock"; locate
and replace the literal socket path in the scenario text so the Given/When steps
reference the spec-compliant path instead of the mixed "~/.local/state/…" path.
🧹 Nitpick comments (4)
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md (2)

134-139: 💤 Low value

Add language specifier to code block for better rendering.

The process model diagram is in a fenced code block without a language specifier. Adding text or plaintext would improve rendering and satisfy markdown linters.

📝 Proposed formatting fix
-```
+```text
 minvmd run                       (parent — supervisor)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md` around
lines 134 - 139, Update the fenced code block containing the process model
diagram (the block showing "minvmd run", "minvmd __krun-vmm", "libkrun + Alpine
VM", "minimald (pid-1)") to include a language specifier such as text or
plaintext (e.g., replace ``` with ```text) so Markdown renders it correctly and
markdown linters accept it.

182-187: 💤 Low value

Surround verification table with blank lines.

Markdown best practices require tables to be surrounded by blank lines for proper parsing and rendering.

📝 Proposed formatting fix

Add a blank line before line 182 (| Check | Command |).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md` around
lines 182 - 187, The Markdown table starting with the header "| Check | Command
|" needs blank lines before and after it to follow Markdown parsing best
practices; edit the docs block that contains the table by inserting an empty
line immediately before the line containing "| Check | Command |" and another
empty line immediately after the final table row so the table is surrounded by
blank lines.
crates/minvmd/src/krun/ctx.rs (1)

93-96: ⚡ Quick win

Prefer Option combinators over enum-rebuilding match blocks.

These matches rebuild Option directly and can be simplified with combinators for consistency.

♻️ Proposed refactor
-        let envp_cstrs: Option<Vec<CString>> = match envp {
-            Some(entries) => Some(cstrings_from_strs(entries, "envp")?),
-            None => None,
-        };
+        let envp_cstrs: Option<Vec<CString>> =
+            envp.map(|entries| cstrings_from_strs(entries, "envp")).transpose()?;
...
-        let initramfs_cstr = match initramfs {
-            Some(p) => Some(cstring_from_path(p.as_ref(), "initramfs")?),
-            None => None,
-        };
-        let cmdline_cstr = match cmdline {
-            Some(s) => Some(cstring_from_str(s, "cmdline")?),
-            None => None,
-        };
+        let initramfs_cstr = initramfs
+            .map(|p| cstring_from_path(p.as_ref(), "initramfs"))
+            .transpose()?;
+        let cmdline_cstr = cmdline
+            .map(|s| cstring_from_str(s, "cmdline"))
+            .transpose()?;

As per coding guidelines, "Use combinators on Option/Result (map, and_then, ok_or, unwrap_or_else, map_err) instead of match expressions that reconstruct the same enum".

Also applies to: 148-155

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/minvmd/src/krun/ctx.rs` around lines 93 - 96, The match that
reconstructs envp_cstrs should be replaced with an Option combinator: call
envp.map(|entries| cstrings_from_strs(entries, "envp")).transpose()/map(|e| ...
) as appropriate so you don't rebuild the Option via match; update the analogous
match at lines 148-155 (e.g., argv_cstrs / cstrings_from_strs usage) to use the
same Option combinator pattern (map/and_then/transpose) to simplify and follow
the guideline.
crates/minvmd/src/bin/krun_smoke_child.rs (1)

44-44: ⚡ Quick win

Use captured identifier formatting for consistency.

Switch to captured formatting to match the Rust style guideline.

✏️ Proposed change
-    eprintln!("STAGE: create_ctx ok ctx_id={}", ctx.id());
+    eprintln!("STAGE: create_ctx ok ctx_id={}", ctx.id());
// Better:
eprintln!("STAGE: create_ctx ok ctx_id={ctx_id}");

As per coding guidelines, "Use captured-identifier formatting in format strings: format!("{path}") over format!("{}", path)".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/minvmd/src/bin/krun_smoke_child.rs` at line 44, The eprintln uses
positional formatting with ctx.id(); instead, bind the id to a local identifier
and use captured-identifier formatting: create a let ctx_id = ctx.id();
(referencing ctx.id()) and change the eprintln call to use the captured {ctx_id}
in the format string (eprintln!("STAGE: create_ctx ok ctx_id={ctx_id}")),
keeping the same message and using the existing ctx and eprintln symbols.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/specs/01-spec-minvmd-host-daemon/uds-vsock-bridge.feature`:
- Around line 42-48: Update the UDS path in the scenario string that currently
uses "~/.local/state/minimal/minvmd/minimald.sock" to match the spec: use the
primary path "$XDG_RUNTIME_DIR/minimal/minimald.sock" and, where tests run
without XDG_RUNTIME_DIR set, use the fallback "~/.minimal/local/minimald.sock";
locate and replace the literal socket path in the scenario text so the
Given/When steps reference the spec-compliant path instead of the mixed
"~/.local/state/…" path.

---

Nitpick comments:
In `@crates/minvmd/src/bin/krun_smoke_child.rs`:
- Line 44: The eprintln uses positional formatting with ctx.id(); instead, bind
the id to a local identifier and use captured-identifier formatting: create a
let ctx_id = ctx.id(); (referencing ctx.id()) and change the eprintln call to
use the captured {ctx_id} in the format string (eprintln!("STAGE: create_ctx ok
ctx_id={ctx_id}")), keeping the same message and using the existing ctx and
eprintln symbols.

In `@crates/minvmd/src/krun/ctx.rs`:
- Around line 93-96: The match that reconstructs envp_cstrs should be replaced
with an Option combinator: call envp.map(|entries| cstrings_from_strs(entries,
"envp")).transpose()/map(|e| ... ) as appropriate so you don't rebuild the
Option via match; update the analogous match at lines 148-155 (e.g., argv_cstrs
/ cstrings_from_strs usage) to use the same Option combinator pattern
(map/and_then/transpose) to simplify and follow the guideline.

In `@docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md`:
- Around line 134-139: Update the fenced code block containing the process model
diagram (the block showing "minvmd run", "minvmd __krun-vmm", "libkrun + Alpine
VM", "minimald (pid-1)") to include a language specifier such as text or
plaintext (e.g., replace ``` with ```text) so Markdown renders it correctly and
markdown linters accept it.
- Around line 182-187: The Markdown table starting with the header "| Check |
Command |" needs blank lines before and after it to follow Markdown parsing best
practices; edit the docs block that contains the table by inserting an empty
line immediately before the line containing "| Check | Command |" and another
empty line immediately after the final table row so the table is surrounded by
blank lines.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3985049a-0b99-45e6-997d-8fa51a09263f

📥 Commits

Reviewing files that changed from the base of the PR and between 002fb9e and b05e491.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (26)
  • .claude/settings.local.json
  • Cargo.toml
  • crates/minvmd/Cargo.toml
  • crates/minvmd/build.rs
  • crates/minvmd/minvmd.entitlements
  • crates/minvmd/src/bin/krun_smoke_child.rs
  • crates/minvmd/src/error.rs
  • crates/minvmd/src/krun/ctx.rs
  • crates/minvmd/src/krun/mod.rs
  • crates/minvmd/src/krun/raw.rs
  • crates/minvmd/src/lib.rs
  • crates/minvmd/src/main.rs
  • crates/minvmd/tests/krun_smoke.rs
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.1-01-cli.txt
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.1-proofs.md
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.2-01-file.txt
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.2-proofs.md
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.3-01-cli.txt
  • docs/specs/01-spec-minvmd-host-daemon/01-proofs/T01.3-proofs.md
  • docs/specs/01-spec-minvmd-host-daemon/01-review-minvmd-host-daemon.md
  • docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md
  • docs/specs/01-spec-minvmd-host-daemon/crate-scaffold-ffi-wrappers-libkrun-smoke-test.feature
  • docs/specs/01-spec-minvmd-host-daemon/lifecycle-daemon-auto-spawn-status-stop.feature
  • docs/specs/01-spec-minvmd-host-daemon/uds-vsock-bridge.feature
  • docs/specs/01-spec-minvmd-host-daemon/vm-bring-up-with-virtio-linux-kernel-and-alpine-rootfs.feature
  • justfile

@norrietaylor
norrietaylor deleted the feature/minvmd-host-daemon branch May 27, 2026 05:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant