Skip to content

spec(minvmd-host-daemon): minvmd macOS VM provider host daemon - #313

Merged
norrietaylor merged 2 commits into
mainfrom
spec/minvmd-host-daemon-265228b1ef0604eb
Jun 3, 2026
Merged

spec(minvmd-host-daemon): minvmd macOS VM provider host daemon#313
norrietaylor merged 2 commits into
mainfrom
spec/minvmd-host-daemon-265228b1ef0604eb

Conversation

@gominimal-aw-bot

@gominimal-aw-bot gominimal-aw-bot Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Adds the specification for the minvmd macOS VM provider host daemon at docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md.

Translated from the plan document in #311 (plan:provided).

Demoable Units

  1. Unit 1: Crate scaffold, FFI wrappers, libkrun smoke test — R1.1–R1.5
  2. Unit 2: VM bring-up with virtio-linux kernel + Alpine rootfs — R2.1–R2.5
  3. Unit 3: UDS↔vsock bridge for ssh.sock — R3.1–R3.5
  4. Unit 4: Lifecycle daemon — auto-spawn, status, stop — R4.1–R4.7

Next step

Please review and merge this spec PR to advance #311 from the spec phase into triage. Merging the spec PR will close the spec sub-issue (Closes keyword is added by sdd-pr-sanitize).

#311

Generated by sdd-spec for issue #311 · ● 32.4M ·

Closes #312

Summary by CodeRabbit

  • Documentation
    • Added a comprehensive specification for minvmd (macOS host daemon) covering architecture and responsibilities: VM boot and supervision, transparent host-to-guest socket bridging for CLI access, lifecycle and UX (foreground vs detach, status output including JSON, idempotent stop), demoable requirement units, expected socket paths/permissions, security/access controls, design considerations, non-goals, and verification/CI guidance.

@gominimal-aw-bot

This comment has been minimized.

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This pull request introduces a comprehensive planning specification for minvmd, the macOS-only host daemon for the Minimal One architecture. The document defines minvmd's responsibilities—booting a Linux microVM via libkrun, bridging host sockets to in-VM vsock services, and supervising lifecycle—organized as four units of work with explicit functional requirements, design constraints, and verification guidance.

Changes

minvmd Host Daemon Specification

Layer / File(s) Summary
Spec header and overview
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md
Adds spec metadata, high-level context, constraints, goals, and user stories explaining minvmd's purpose and behavior.
Unit 1 (crate/FFI) and Unit 2 (VM bring-up)
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md
Defines FFI safety and OS shim behavior, gated libkrun smoke test, runtime-resolved kernel/rootfs boot flow, hidden __krun-vmm child lifecycle, READY vsock marker, and v0.1 timing/network constraints.
Unit 3 (UDS↔vsock), Unit 4 (lifecycle), and supporting sections
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md
Specifies UDS↔vsock bridge contract (XDG discovery, socket modes, multiplexing, v0.1 stub), lifecycle/PID/lock file behavior, atomic state transitions, security considerations, open questions, and CI/verification guidance.

Sequence Diagram(s)

sequenceDiagram
  participant minimal_cli as minimal (CLI)
  participant minvmd as minvmd (host daemon)
  participant libkrun as libkrun (FFI)
  participant vm as microVM (guest)
  participant minimald as minimald (in-VM service)

  minimal_cli->>minvmd: connect to host UDS (ssh.sock)
  minvmd->>libkrun: invoke VM boot (kernel + rootfs)
  libkrun->>vm: start VM
  vm->>minvmd: vsock READY marker
  minvmd->>vm: bridge UDS↔vsock (forward connections)
  minimal_cli->>minimald: reach minimald via bridged vsock
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

  • gominimal/minspec-test#33 — Overlaps the minvmd bring-up and libkrun FFI scope described in this spec.

Poem

🐰
I dig a tunnel of spec and code,
Boot a tiny VM down the road.
Sockets bridge where rabbits dash,
READY hops and log files stash.
Minvmd hums — a quiet, cozy pod.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change—adding a specification document for the minvmd macOS VM provider host daemon.
Linked Issues check ✅ Passed The PR successfully delivers the spec document for #312, translating the requirements from #311 into detailed architecture specifications covering all four demoable units and their requirements.
Out of Scope Changes check ✅ Passed The PR contains only the specification document addition with no out-of-scope changes; all content directly addresses the minvmd host daemon specification requirements.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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


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.

🧹 Nitpick comments (5)
docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md (5)

410-411: ⚡ Quick win

Clarify the security implications of deferred image provenance.

The statement "Image provenance is deferred — v0.1 reads kernel + rootfs from caller-supplied paths" understates the security posture: v0.1 implicitly trusts the caller to provide non-malicious kernel and rootfs images, with no integrity verification.

Consider rephrasing to make the trust assumption explicit: "v0.1 trusts caller-supplied kernel and rootfs paths without integrity verification; provenance checking is deferred to a future version."

🤖 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 410 - 411, Update the sentence that currently reads "Image provenance is
deferred — v0.1 reads kernel + rootfs from caller-supplied paths" to explicitly
state the trust model and lack of integrity checks; i.e., change it to something
like "v0.1 trusts caller-supplied kernel and rootfs paths without integrity
verification; provenance and integrity checking are deferred to a future
version" so readers understand the security implication.

246-251: 💤 Low value

Forward-reference the lifecycle state enum.

R4.1 mentions "lifecycle enum" in state.toml but doesn't define the enum values. The definition appears later in Technical Considerations (lines 394-395) as NotProvisioned | Stopped | Starting | Running | Stopping.

For better readability, consider adding a forward reference here: "lifecycle enum (see Technical Considerations)" or defining the enum inline within R4.1.

🤖 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 246 - 251, Update R4.1 to forward-reference or inline the lifecycle enum
so readers know the allowed values: modify the R4.1 sentence that currently
refers to "lifecycle enum" in state.toml to either append "(see Technical
Considerations for lifecycle enum: NotProvisioned | Stopped | Starting | Running
| Stopping)" or expand it inline to list those enum values; ensure you reference
the same symbol names (state.toml, lifecycle enum, and the enum values
NotProvisioned, Stopped, Starting, Running, Stopping) to keep the spec
consistent with the later Technical Considerations section.

198-203: ⚡ Quick win

Clarify XDG_RUNTIME_DIR fallback conditions.

R3.2 specifies the host UDS path as $XDG_RUNTIME_DIR/minimal/minimald.sock with fallback to ~/.minimal/local/minimald.sock, but doesn't state when the fallback is used. Is it when XDG_RUNTIME_DIR is unset, or when it's inaccessible?

Additionally, the requirement states minvmd "shall create the parent directory (mode 0700)" but doesn't clarify whether this means:

  1. Create with mode 0700 if absent (scoped to creation), or
  2. Enforce mode 0700 on pre-existing directories (verify and chmod)

Based on learnings, the pattern is (1) — mode is set only on creation. Consider making this explicit: "shall create the parent directory with mode 0700 (if absent)" to match the R4.5 phrasing pattern.

🤖 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 198 - 203, Clarify R3.2 by stating when the fallback path is used and that
mode-setting applies only on creation: update the R3.2 text for the host UDS
path to say that the socket path is $XDG_RUNTIME_DIR/minimal/minimald.sock and
that if XDG_RUNTIME_DIR is unset or not usable the implementation shall use the
fallback ~/.minimal/local/minimald.sock; and change the parent-directory
requirement for minvmd to read something like "minvmd shall create the parent
directory with mode 0700 if absent" so it is clear minvmd must set 0700 on
creation but not forcibly chmod existing directories (reference symbols: R3.2,
minvmd, XDG_RUNTIME_DIR, mode 0700, fallback ~/.minimal/local/minimald.sock).

149-153: 💤 Low value

Clarify process spawning terminology.

R2.3 uses "exec-spawn" to describe the child process creation, which mixes two distinct Unix syscall concepts (exec replaces the current process; spawn/fork creates a new one). The design considerations section (lines 316-319) clarifies this is a standard parent-supervises-child fork model.

Consider revising to "spawn" or "fork-exec-spawn" for precision.

🤖 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 149 - 153, R2.3's phrase "exec-spawn" is ambiguous; update the text for
precision to reflect the fork-plus-exec parent-supervises-child model—replace
"exec-spawn a hidden `minvmd __krun-vmm` child" with a clearer term like
"fork-exec (spawn) a hidden `minvmd __krun-vmm` child" and keep the rest of the
sentence referencing `krun_start_enter`, the parent writing `vmm.pid`, and
signal handling unchanged so readers understand the parent supervises the child
process.

21-27: ⚡ Quick win

Clarify scope: existing vs. remaining work.

The context states "The crate already exists...with FFI bindings (src/krun/raw.rs), safe wrappers (src/krun/ctx.rs)...and a CLI skeleton," yet Unit 1 requirements (R1.2, R1.3) use "shall" to define those same FFI bindings and safe wrappers. This creates ambiguity: are R1.2/R1.3 validation criteria for existing code, or are they defining new work?

Consider adding a sentence clarifying whether Unit 1 is landing greenfield code or refining/completing existing scaffolding.

🤖 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 21 - 27, Update the spec to remove ambiguity by explicitly stating whether
Unit 1 (R1.2 and R1.3) are acceptance criteria for existing implementations or
requirements to be implemented anew: mention the existing crate crates/minvmd/
and its files src/krun/raw.rs and src/krun/ctx.rs (and the CLI skeleton) and
then state whether R1.2 (FFI bindings) and R1.3 (safe wrappers) are being
validated as already-present or must be completed/landed as part of this work;
add one sentence after the crate description clarifying "validation vs. new
work" so readers know if Unit 1 is checking current scaffolding or specifying
new deliverables.
🤖 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.

Nitpick comments:
In `@docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md`:
- Around line 410-411: Update the sentence that currently reads "Image
provenance is deferred — v0.1 reads kernel + rootfs from caller-supplied paths"
to explicitly state the trust model and lack of integrity checks; i.e., change
it to something like "v0.1 trusts caller-supplied kernel and rootfs paths
without integrity verification; provenance and integrity checking are deferred
to a future version" so readers understand the security implication.
- Around line 246-251: Update R4.1 to forward-reference or inline the lifecycle
enum so readers know the allowed values: modify the R4.1 sentence that currently
refers to "lifecycle enum" in state.toml to either append "(see Technical
Considerations for lifecycle enum: NotProvisioned | Stopped | Starting | Running
| Stopping)" or expand it inline to list those enum values; ensure you reference
the same symbol names (state.toml, lifecycle enum, and the enum values
NotProvisioned, Stopped, Starting, Running, Stopping) to keep the spec
consistent with the later Technical Considerations section.
- Around line 198-203: Clarify R3.2 by stating when the fallback path is used
and that mode-setting applies only on creation: update the R3.2 text for the
host UDS path to say that the socket path is
$XDG_RUNTIME_DIR/minimal/minimald.sock and that if XDG_RUNTIME_DIR is unset or
not usable the implementation shall use the fallback
~/.minimal/local/minimald.sock; and change the parent-directory requirement for
minvmd to read something like "minvmd shall create the parent directory with
mode 0700 if absent" so it is clear minvmd must set 0700 on creation but not
forcibly chmod existing directories (reference symbols: R3.2, minvmd,
XDG_RUNTIME_DIR, mode 0700, fallback ~/.minimal/local/minimald.sock).
- Around line 149-153: R2.3's phrase "exec-spawn" is ambiguous; update the text
for precision to reflect the fork-plus-exec parent-supervises-child
model—replace "exec-spawn a hidden `minvmd __krun-vmm` child" with a clearer
term like "fork-exec (spawn) a hidden `minvmd __krun-vmm` child" and keep the
rest of the sentence referencing `krun_start_enter`, the parent writing
`vmm.pid`, and signal handling unchanged so readers understand the parent
supervises the child process.
- Around line 21-27: Update the spec to remove ambiguity by explicitly stating
whether Unit 1 (R1.2 and R1.3) are acceptance criteria for existing
implementations or requirements to be implemented anew: mention the existing
crate crates/minvmd/ and its files src/krun/raw.rs and src/krun/ctx.rs (and the
CLI skeleton) and then state whether R1.2 (FFI bindings) and R1.3 (safe
wrappers) are being validated as already-present or must be completed/landed as
part of this work; add one sentence after the crate description clarifying
"validation vs. new work" so readers know if Unit 1 is checking current
scaffolding or specifying new deliverables.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e55207e7-4bf4-460c-badd-9a4665f7a678

📥 Commits

Reviewing files that changed from the base of the PR and between 00e95c6 and 1dbe72b.

📒 Files selected for processing (1)
  • docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md

@norrietaylor

Copy link
Copy Markdown
Member

/revise

Address code rabbit concerns and adhere to conventional commits as per the guidelines of this report.

Ensure additional agents working from this spec adhere to repo conventions as well

@gominimal-aw-bot gominimal-aw-bot Bot mentioned this pull request Jun 3, 2026
@gominimal-aw-bot

Copy link
Copy Markdown
Contributor Author

Commit pushed: 4b3501d

Generated by sdd-spec · ● 63.7M

@gominimal-aw-bot

Copy link
Copy Markdown
Contributor Author

Applied /revise — addressed CodeRabbit nitpicks and added repo convention references:

  • Context clarity: Unit 1 R1.2/R1.3 now explicitly stated as acceptance criteria for existing scaffolding
  • R2.3: exec-spawnfork-exec for precision
  • R3.2: Clarified XDG_RUNTIME_DIR fallback (when unset) and parent-dir creation (mode 0700 if absent)
  • R4.1: Inlined lifecycle enum values (NotProvisioned | Stopped | Starting | Running | Stopping)
  • Security: Made image provenance trust model explicit (v0.1 trusts caller-supplied paths without integrity verification)
  • Repository Standards: Added conventional commits (docs/commit-conventions.md) and Rust coding standards (docs/rust-coding-standards.md) references so downstream agents adhere to repo conventions

Generated by sdd-spec for issue #313 · ● 63.7M ·

@gominimal-aw-bot

This comment has been minimized.

gominimal-aw-bot Bot and others added 2 commits June 3, 2026 22:44
Translate the plan from #311 into a structured spec covering four
demoable units: FFI scaffold, VM boot, UDS-vsock bridge, and lifecycle
daemon.

Refs: #311

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Clarify Unit 1 scope: R1.2/R1.3 are acceptance criteria for existing
  scaffolding, not greenfield deliverables
- Fix R2.3 terminology: replace ambiguous exec-spawn with fork-exec
- Clarify R3.2 XDG_RUNTIME_DIR fallback condition (unset) and
  parent-directory creation (mode 0700 if absent)
- Inline lifecycle enum values in R4.1 for readability
- Make image provenance trust model explicit in Security Considerations
- Expand Repository Standards with conventional commits and Rust coding
  standards references for downstream agents

Refs: #311

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@norrietaylor
norrietaylor force-pushed the spec/minvmd-host-daemon-265228b1ef0604eb branch from 4b3501d to ac03593 Compare June 3, 2026 22:44

@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.

Actionable comments posted: 2

🤖 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.

Inline comments:
In `@docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md`:
- Around line 402-405: The spec currently hardcodes /opt/homebrew/lib as the
default libkrun rpath via build.rs (emitting cargo:rustc-link-search and
cargo:rustc-link-arg=-Wl,-rpath) with only a LIBKRUN_PREFIX env override; update
the spec to use architecture-aware defaults or Homebrew-prefix discovery
instead: state that build.rs should detect platform/arch (e.g., ARM64 vs x86_64)
and prefer /opt/homebrew/lib on Apple Silicon and /usr/local/lib on Intel, or
invoke Homebrew prefix discovery (e.g., `$(brew --prefix)` style) when present,
and document that LIBKRUN_PREFIX can still override this behavior; reference
build.rs, the cargo:rustc-link-search and cargo:rustc-link-arg=-Wl,-rpath
emissions, and the LIBKRUN_PREFIX env var so implementers know where to change
defaults.
- Around line 71-72: The spec currently contradicts itself about Linux behavior
for minvmd (one place says “not be installed” and other places describe a
“compile no-op shim”); pick a single canonical contract (either “not installed
at all on Linux” or “installed as a no-op shim”) and update all
occurrences—including the sentence at the current diff and the other mentions
around lines referenced (51-53 and 96-97)—so the document consistently states
the chosen behavior, updates packaging/CLI notes to match (remove the alternate
outcome), and adjusts any examples or installation steps that assume the other
behavior; search for “minvmd”, “not be installed”, and “compile no-op shim” to
locate and change every instance.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 698b5b47-987b-46c2-8b2b-7152bd37f690

📥 Commits

Reviewing files that changed from the base of the PR and between 4b3501d and ac03593.

📒 Files selected for processing (1)
  • docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md

Comment on lines +71 to +72
- As a Linux user, I want `minvmd` to not be installed at all so that my
install path stays simple.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify Linux behavior: “not installed” conflicts with “compile no-op shim.”

This currently defines two different Linux outcomes (no installation vs installed stub). Please resolve to one contract so packaging and CLI integration are unambiguous.

Also applies to: 51-53, 96-97

🤖 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 71 - 72, The spec currently contradicts itself about Linux behavior for
minvmd (one place says “not be installed” and other places describe a “compile
no-op shim”); pick a single canonical contract (either “not installed at all on
Linux” or “installed as a no-op shim”) and update all occurrences—including the
sentence at the current diff and the other mentions around lines referenced
(51-53 and 96-97)—so the document consistently states the chosen behavior,
updates packaging/CLI notes to match (remove the alternate outcome), and adjusts
any examples or installation steps that assume the other behavior; search for
“minvmd”, “not be installed”, and “compile no-op shim” to locate and change
every instance.

Comment on lines +402 to +405
- **libkrun linking** — pinned to a known-good version (v1.18.0).
`build.rs` emits `cargo:rustc-link-search` and
`cargo:rustc-link-arg=-Wl,-rpath` pointing at `/opt/homebrew/lib`
with a `LIBKRUN_PREFIX` env override.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Default libkrun link path risks breaking x86_64 macOS builds.

Using /opt/homebrew/lib as the default is Apple Silicon-specific; Intel Homebrew commonly uses /usr/local/lib. Since x86_64 support is a stated goal, specify architecture-aware defaults (or Homebrew-prefix discovery) in the spec instead of relying on manual env override.

Also applies to: 51-52

🤖 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 402 - 405, The spec currently hardcodes /opt/homebrew/lib as the default
libkrun rpath via build.rs (emitting cargo:rustc-link-search and
cargo:rustc-link-arg=-Wl,-rpath) with only a LIBKRUN_PREFIX env override; update
the spec to use architecture-aware defaults or Homebrew-prefix discovery
instead: state that build.rs should detect platform/arch (e.g., ARM64 vs x86_64)
and prefer /opt/homebrew/lib on Apple Silicon and /usr/local/lib on Intel, or
invoke Homebrew prefix discovery (e.g., `$(brew --prefix)` style) when present,
and document that LIBKRUN_PREFIX can still override this behavior; reference
build.rs, the cargo:rustc-link-search and cargo:rustc-link-arg=-Wl,-rpath
emissions, and the LIBKRUN_PREFIX env var so implementers know where to change
defaults.

@norrietaylor
norrietaylor enabled auto-merge (squash) June 3, 2026 22:47
@norrietaylor
norrietaylor merged commit c7c87b4 into main Jun 3, 2026
22 of 28 checks passed
@norrietaylor
norrietaylor deleted the spec/minvmd-host-daemon-265228b1ef0604eb branch June 3, 2026 22:47
@gominimal-aw-bot

Copy link
Copy Markdown
Contributor Author

sdd-validate · Spec boundary · Clean pass ✅

Boundary: Spec (adds docs/specs/01-spec-minvmd-host-daemon/01-spec-minvmd-host-daemon.md)
Gate set: Spec gates · plan:provided relaxation active (tracking issue #311)

# Gate Result
1 Acceptance criteria testable ✅ All 22 requirements (R1.1–R1.5, R2.1–R2.5, R3.1–R3.5, R4.1–R4.7) are observable pass/fail statements
2 No implementation leakage ✅ All implementation-detail statements carry (translated from plan: step R*.*) citations — exempt under plan:provided
3 Assumptions explicit ✅ Context, Open Questions, and Technical Considerations cover libkrun dep, existing scaffold, deferred networking (#160), no-op Linux shim, and linking assumptions
4 Proof artifacts present and behavioral ✅ Each of 4 units carries 2–3 proof artifacts (File, CLI, Test); none would pass against an empty PR

No findings. All spec gates passed clean.

Generated by sdd-validate for issue #313 · ● 14.8M ·

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.

spec: minvmd macOS VM provider host daemon

1 participant