Skip to content

docs(design): microVM Runner V2b — in-guest supervisor + vsock exec control plane (RIG-2493) - #643

Merged
mattwilkinsonn merged 5 commits into
mainfrom
compass-runner/rig-2493-v2b-design
Aug 28, 2026
Merged

docs(design): microVM Runner V2b — in-guest supervisor + vsock exec control plane (RIG-2493)#643
mattwilkinsonn merged 5 commits into
mainfrom
compass-runner/rig-2493-v2b-design

Conversation

@rigel-mintaka

Copy link
Copy Markdown
Contributor

Details the frozen parent's schedule-critical V2b milestone
(microvm-runner.md § Plan V2b): grow compass-guestd into the real in-guest
supervisor serving an additive GuestControl exec surface
(Exec/ExecStream/Signal/Provision over the V2a proto seed), and fill
MicroVMRuntime's Create/Start/Exec/ExecStreaming/Stop/Remove so the microVM
backend behaves identically to PodmanCLI through the ContainerRuntime
interface.

Sibling detailing record to the V2a boot-spike record, under the same
compass-elastic-session-runtime design directory. Resolves the forks the parent
left to detailing — the exec surface (a), the guestd supervisor + fail-closed
gate (b), the MicroVMRuntime methods (c), Stop/Remove teardown (d), and the
exec-transport auth question (e) — and batches seven Open Questions (OQ-A..G)
for a pre-freeze ruling, four of them load-bearing.

Status: PROPOSED.

Ledger-impact: none — details forks the frozen parent already framed and
resolves them within its decisions; no new DECISIONS.md row (OQ-A auth and OQ-G
error-taxonomy are candidates for promotion if Matt wants them citable outside
this lineage).

Refs RIG-2493
Co-authored-by: Matt Wilkinson matt@rigel.build

@linear-code

linear-code Bot commented Aug 26, 2026

Copy link
Copy Markdown

RIG-2493

@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-runner-rig-2493-v2b.compass-eng-docs.pages.dev

Deployed from compass-runner/rig-2493-v2b-design at 44c52ec.

Changed pages:

rigel-mintaka added a commit that referenced this pull request Aug 26, 2026
…, U3b ordering (RIG-2493)

Address the four findings from the review pass on #643 (0 high, 2 medium, 2
low), all internal-consistency drift the record's own decisions already
resolved:

- U1 now explicitly owns the additive `boot_nonce` field on `HealthResponse`
  (medium): the Global Constraint and §(e) mandate it and U2/U4 consume it, but
  no task's stated deliverable produced it. Named in the U1 body and Interfaces
  list as field 4.
- §(c) Create assembles a fixed guest CID (3) + fixed guestd port (medium),
  matching the OQ-F recommendation the body designs against, instead of a
  per-session "fresh CID ≥ 3 and port" — per-session uniqueness rides the
  AF_UNIX socket paths, since nothing routes on the CID.
- Plan ordering names the U3 → U3b type dependency (low): U3's waitFunc
  constructs U3b's portable exit-signal error, so under OQ-G option 1 U3b lands
  with or just before U3; under option 2 U3's contract and the U5 kill/wait row
  change.
- U2 Interfaces cites `healthService`'s definition (`health.go:14-40`) threaded
  through `serveVsock`/`serveHandshake` (`vsock.go:27-41`) instead of a call
  site (low).

Ledger-impact: none

Refs RIG-2493
Co-authored-by: Matt Wilkinson <matt@rigel.build>
@rigel-mintaka
rigel-mintaka force-pushed the compass-runner/rig-2493-v2b-design branch from 56ac7cb to 7c5868c Compare August 26, 2026 04:26
rigel-mintaka added a commit that referenced this pull request Aug 27, 2026
…, U3b ordering (RIG-2493)

Address the four findings from the review pass on #643 (0 high, 2 medium, 2
low), all internal-consistency drift the record's own decisions already
resolved:

- U1 now explicitly owns the additive `boot_nonce` field on `HealthResponse`
  (medium): the Global Constraint and §(e) mandate it and U2/U4 consume it, but
  no task's stated deliverable produced it. Named in the U1 body and Interfaces
  list as field 4.
- §(c) Create assembles a fixed guest CID (3) + fixed guestd port (medium),
  matching the OQ-F recommendation the body designs against, instead of a
  per-session "fresh CID ≥ 3 and port" — per-session uniqueness rides the
  AF_UNIX socket paths, since nothing routes on the CID.
- Plan ordering names the U3 → U3b type dependency (low): U3's waitFunc
  constructs U3b's portable exit-signal error, so under OQ-G option 1 U3b lands
  with or just before U3; under option 2 U3's contract and the U5 kill/wait row
  change.
- U2 Interfaces cites `healthService`'s definition (`health.go:14-40`) threaded
  through `serveVsock`/`serveHandshake` (`vsock.go:27-41`) instead of a call
  site (low).

Ledger-impact: none

Refs RIG-2493
Co-authored-by: Matt Wilkinson <matt@rigel.build>
@rigel-mintaka
rigel-mintaka force-pushed the compass-runner/rig-2493-v2b-design branch 2 times, most recently from 91508a5 to 7fc61e9 Compare August 27, 2026 18:23
rigel-mintaka and others added 5 commits August 27, 2026 17:12
…ontrol plane (RIG-2493)

Details the frozen parent's schedule-critical V2b milestone
(microvm-runner.md § Plan V2b): grow compass-guestd into the real in-guest
supervisor serving an additive GuestControl exec surface
(Exec/ExecStream/Signal/Provision over the V2a proto seed), and fill
MicroVMRuntime's Create/Start/Exec/ExecStreaming/Stop/Remove so the microVM
backend behaves identically to PodmanCLI through the ContainerRuntime
interface.

Sibling detailing record to the V2a boot-spike record, under the same
compass-elastic-session-runtime design directory. Resolves the forks the parent
left to detailing — the exec surface (a), the guestd supervisor + fail-closed
gate (b), the MicroVMRuntime methods (c), Stop/Remove teardown (d), and the
exec-transport auth question (e) — and batches seven Open Questions (OQ-A..G)
for a pre-freeze ruling, four of them load-bearing.

Status: PROPOSED.

Ledger-impact: none — details forks the frozen parent already framed and
resolves them within its decisions; no new DECISIONS.md row (OQ-A auth and OQ-G
error-taxonomy are candidates for promotion if Matt wants them citable outside
this lineage).

Refs RIG-2493
Co-authored-by: Matt Wilkinson <matt@rigel.build>
…, U3b ordering (RIG-2493)

Address the four findings from the review pass on #643 (0 high, 2 medium, 2
low), all internal-consistency drift the record's own decisions already
resolved:

- U1 now explicitly owns the additive `boot_nonce` field on `HealthResponse`
  (medium): the Global Constraint and §(e) mandate it and U2/U4 consume it, but
  no task's stated deliverable produced it. Named in the U1 body and Interfaces
  list as field 4.
- §(c) Create assembles a fixed guest CID (3) + fixed guestd port (medium),
  matching the OQ-F recommendation the body designs against, instead of a
  per-session "fresh CID ≥ 3 and port" — per-session uniqueness rides the
  AF_UNIX socket paths, since nothing routes on the CID.
- Plan ordering names the U3 → U3b type dependency (low): U3's waitFunc
  constructs U3b's portable exit-signal error, so under OQ-G option 1 U3b lands
  with or just before U3; under option 2 U3's contract and the U5 kill/wait row
  change.
- U2 Interfaces cites `healthService`'s definition (`health.go:14-40`) threaded
  through `serveVsock`/`serveHandshake` (`vsock.go:27-41`) instead of a call
  site (low).

Ledger-impact: none

Refs RIG-2493
Co-authored-by: Matt Wilkinson <matt@rigel.build>
…s non-goal (RIG-2493)

Matt ruled the one load-bearing scope fork: no interface is frozen; the
prototype may unfreeze any contract. That lifts the sole blocker on OQ-G and
collapses the two other freeze-gated forks.

- OQ-G resolved (option 1, now unconditional): adopt the portable exported
  runtime.ExitStatusError{Code, Signal} and widen isDeliberateKill via
  errors.As with the *exec.ExitError fallback + podman-row regression guard.
  U3b is no longer gated; the interface alternative is dropped in favor of the
  concrete struct.
- OQ-B / OQ-D resolved to their recommendations (ExecStreamRequest/Response
  direction-specific oneofs; ratified U4 MicroVMConfig field set).
- Batch preamble records that freeze-gated forks are settled by adopting the
  recommendation, and that OQ-A (auth) and OQ-C (mount-owner) remain genuine
  design choices tracked outside this record — reversible, not merge-blockers.
- No-podman-regression constraint reworded: U3b's isDeliberateKill widening is
  a scoped additive exception, no longer conditional.

Adds an explicit non-goal V2b must not foreclose: containers inside the guest
(dev/build sandboxes). An in-guest container runtime is an ordinary ExecStream
child; the isolation boundary is the VM, not the guest uid. Tracked as its own
milestone (RIG-2850) under the parent V-plan.

Refs RIG-2493
Refs RIG-2850

Co-authored-by: Matt Wilkinson <matt@rigel.build>
Review of the rulings fold caught one stale conditional the fold missed: the
Plan dependency-ordering paragraph still framed U3b as "gated on Matt's OQ-G
ruling" and branched on option 1 vs option 2. OQ-G is resolved to option 1 and
U3b is unconditional everywhere else in the record; this sentence now matches —
U3b produces the portable exit-signal error type and lands with or just before
U3, no gate, no option-2 branch.

Refs RIG-2493

Co-authored-by: Matt Wilkinson <matt@rigel.build>
…/dumb-init (RIG-2493)

Ground the V2b exec surface §(a) and the PID-1 supervisor/reaper §(b) in the
proven prior art, adopting it as a reference model rather than vendored code.

- Exec RPC shape cites kata-containers agent.proto (AgentService):
  ExecProcess/SignalProcess/WaitProcess ("wait & reap like waitpid(2)") + the
  stdio verbs, plus the two shape invariants V2b reuses — exit code carried in
  the wait response (not a transport error) and empty exec_id → signal the
  whole session (our Stop path).
- Reaper/signal model cites tini and dumb-init: PID-1 zombie reaping,
  signal-forwarding to the process group, child exit-code propagation.
- Records the four walls (language, transport, scope, host interface) that make
  outright adoption wrong and keep the code a reference. Confirms the current
  Go/Connect/one-session V2b design unchanged.

No design change; grounds an already-settled approach for the U2 implementer.

Refs RIG-2493
Co-authored-by: Matt Wilkinson <matt@rigel.build>
@rigel-mintaka
rigel-mintaka force-pushed the compass-runner/rig-2493-v2b-design branch from 7fc61e9 to 44c52ec Compare August 27, 2026 21:13
@mattwilkinsonn
mattwilkinsonn merged commit a10d765 into main Aug 28, 2026
13 checks passed
@mattwilkinsonn
mattwilkinsonn deleted the compass-runner/rig-2493-v2b-design branch August 28, 2026 01:40
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.

2 participants