Skip to content

Add dedicated bounded mailbox vsock service and call/cast API #4629

Open

Description

@auser

Agent pickup triage

Category: ready. This classifies the next task, not completion or a verified current-source pass.

Next bounded step: Verify merged #4694 canonical-envelope and #4698 transport contracts, then implement the standalone bounded local vsock call/cast service with isolation tests.

Read the linked handoff and coordinate any active owner before implementation. Preserve the original acceptance criteria below; this triage grants no spending, credentials, publication, host reconfiguration, or landing authority.


Parent: #4622

Depends on #4627 and #4628.

Outcome

Add a dedicated typed mailbox service over vsock with independent queues, credits, lifecycle, and authorization. It must work in standalone mvm without mvmd and must not share FlowMux, telemetry, or machine-control queues.

This service consumes mvm-contract::protocol::mailbox directly. It owns the workload-facing call/cast/reply behavior and local admission; it must not call into mvmd-types or require an mvmd process for identity, crypto, delivery, or receipts.

Scope

  • A separately registered mailbox vsock service and bounded framing.
  • Guest and host APIs for call and cast, plus a separately named lossy operation only if the ADR admits one.
  • Correlation IDs, reply routing, monotonic deadlines, cancellation, and safe disposal of late replies.
  • Per-mailbox, per-sender, per-tenant, and host aggregate admission limits.
  • Explicit local outcomes for full, backpressured, unauthorized, expired, unavailable, and shutting-down destinations.
  • Clean boot, reconnect, shutdown, and teardown behavior.

Acceptance criteria

  • A guest and host can exchange typed calls and casts without mvmd or a guest NIC.
  • Guest, host, and mock-I/O tests exchange the same canonical MVM envelope later consumed opaquely by cross-host transports and mvmd wrappers.
  • Calls return correlated replies or typed timeout/cancellation results; late replies cannot satisfy a later call.
  • Casts return after local admission and produce no application reply.
  • A full queue fails according to the ADR and never silently drops an accepted normal message.
  • Mailbox saturation cannot consume the configured credits or queues of control, telemetry, or FlowMux services.
  • Malformed frames, unauthorized operations, oversized values, disconnects, and teardown are covered by integration tests over mock I/O and the supported vsock boundary.
  • Dependency checks prove no MVM crate imports mvmd-types and no local mailbox path falls back to an mvmd API.

Activity

  1. added
    enhancementNew feature or request
    mailboxesSigned pass-by-value mailbox program
    mailbox-phase-2Mailbox local runtime and durable state
    on Oct 22, 2026
  2. auser commented on Nov 4, 2026

    @auser
    CollaboratorAuthor

    Coordination proposal opened in #5057 against the active SpiralCore#42/#43 contribution. Please coordinate patch ownership/pins before independently picking up the standalone mailbox service. The proposal separates primitive/Reply authorization, Firecracker custody, experimental registration, local service, and later FlowMux/access review gates. It does not change this issue’s acceptance criteria, assign a maintainer, apply the contributor fork, or claim production adoption. Contributor confirmation has been requested on SpiralCore#42.

  3. auser commented on Nov 5, 2026

    @auser
    CollaboratorAuthor

    Demo scope clarification from the #5126 discussion: the upcoming one-week demo does not require a reply sent before guest replacement to be consumed afterward. Prioritize a real standalone same-host user/host ↔ live-guest call/cast/correlated reply over the canonical MVM envelope, dedicated bounded mailbox service and independent admission/credits, with no MVMD or guest NIC. Demonstrate at least unauthorized/stale-epoch and full/oversized refusals, late-reply isolation, disconnect/teardown and supported native guest/host behavior; label local admission distinctly from durable acceptance. Do not enable opt-in replacement handoff, private context, continuation-plus-outbox, or claim durable/replacement recovery for this demo. #5126 retains those follow-on decisions and evidence gates; no acceptance checkbox is being marked complete here. The active SpiralCore#42/#43 service owner and exact patch pin still need coordination via #5057 before overlapping implementation.

  4. Casey-allard commented on Nov 11, 2026

    @Casey-allard
    Contributor

    Opened draft #5328 for the scoped verified-header and Reply-authorization APIs against current main b3b2afd8. This is an outside contribution and a review/coordination point, not a claim that #4629 is complete. Exact core/host-mailbox/outbox checks and the remaining workspace/platform gates are listed in the PR.

    To make the existing implementation visible and avoid duplicate work, SpiralCore already has:

    Those components include historical fork APIs. They are not a drop-in replacement for today's canonical service, and their old native/WAN results must not be relabeled as current-main qualification. The port will extend the merged outbox spool, backend HostDialRoute, ledger epochs and per-launch key owner, preserving independent mailbox/FlowMux/access semantics. Compression stays at the authorized plaintext endpoint; there is one object protocol and one canonical MVM envelope.

    The remaining port targets are retained request/lost-verdict identity, correlated Call/Cast/Reply and cancellation, bounded replay/aggregate budgets and current admission time. We will reuse #5325's final QueueFull/lifecycle implementation when merged instead of duplicating that work. Canonical cross-host recipient key agreement remains a separate #4633/#5312 prerequisite. Please use #5328 for interface review/coordination while the complete integration is finished and qualified; this comment does not transfer ownership of other active mailbox changes or close any acceptance criterion.

  5. Casey-allard commented on Nov 11, 2026

    @Casey-allard
    Contributor

    Updated implementation and ownership index for the active #4629 contribution, so overlapping work can converge on the existing code before the complete networking submission is qualified.

    Area Published implementation / coordination
    Verified admission, ciphertext-only journal view and Reply authorization Draft #5328, head 78d30afb8c2d988657951933b01dad2945b7328a
    Persistent SDK launch retaining its requested mailbox grant Ready-for-review #5336, head 18b58e1ad2262a1c0bfa23d51f8e5679d3376f60
    Resource-holder epoch exclusion Draft #5340, head 7cd704aefe01ed90169037415dd1574f876fdfea, based directly on upstream a707f5e8; isolated ten-file import, inactive until daemon integration
    Original-child worker ownership, pre-spawn shared in-process budgets, retained cleanup and collected-status accounting Development commit 058d6a94, following the published signer-custody and process-exit components linked in #5328
    Process-resource exec adoption and original watcher jobs Published b0958e006; real CLI/signer entry and retained cleanup, complete host-agent activation still pending
    Tenant lifecycle/admission/Running publication fences Published 50877f564; qualified component scopes and exact gated compile; full coordinator activation remains pending
    Existing lossless transfer protocol and codec implementation SpiralCore core, object-v1 contract and current status

    The resource-exclusion implementation and its provenance are recorded on SpiralCore main. PR #5340 explicitly separates historical component checks from its pending standalone-head qualification. It does not claim daemon activation or collection of the original Child.

    The new worker-owner component passed its exact Linux release scopes: 13 public harness entries (12 behavior plus one fixture), nine private entries (seven behavior plus two fixtures), 16 existing idle cases and strict all-targets Clippy; independent code/Rust and security reviews passed. It remains injected/inactive by default: actual helper/bootstrap wiring and installed lifecycle acceptance are unfinished. These tests are not WAN or fleet qualification.

    The earlier ownership split was accepted in the #5328 reply: this contribution owns the four public API files and disjoint original-child/lifecycle work; the guest owner retains hostd mailbox process/service/reader and agentd integration, and the journal owner retains the existing journal module and focused tests/docs. No overlapping edits without an explicit handoff. Private source access remains subject to Ari’s approval. The scoped, versioned HistoryKeyRef/load_existing contract is accepted; exact original-key recovery, independent custody/anchor checks and current authorization remain delivery requirements.

    SpiralCore #111 tracks actual helper ownership and #114 tracks cooperative host-agent shutdown; the published fresh-profile successor now drains the original signer before idle exit. Complete installed recovery and qualification remain open. Neither issue nor #4629 is complete. Please use #5328 as the shared interface discussion, #5336 for the independent SDK fix, and #5340 for the resource-exclusion primitive; the published components are available for reuse now, without waiting for the final WAN/platform submission.

    The new exact-source process-handoff report is merged to SpiralCore main. It records the fresh standalone #5340 qualification, the separate b0958e0 process/CLI checks, preserved runtime failure and missing embedded-host assets. Full installed/native/WAN acceptance remains open.

    Previous development implementation: 0aa190b32, with the cooperative idle report merged to SpiralCore main. The production Linux host-agent witness collected its original signer before exit 42, with zero fixture-adopted reaping, in 1.03 seconds. Twenty-five selected outer cases passed on the explicitly recorded runtime composition; exact immutable-commit gated compilation passed separately. Strict Clippy and all four original restart consumers still failed, with their raw outputs retained. This is a development checkpoint, not native-guest, WAN, fleet, FIPS or complete-service acceptance. Controlled startup and canonical frontend provisioning are next; the earlier table entries remain historical components, not separate competing protocols.

    Previous frontend checkpoint: 98ec9d270, with the frontend/recovery report on SpiralCore main. It wires canonical local-home preparation before CLI/SDK writers and same-FileGate staged publication. Core 23 selected cases plus strict checks, SDK 56 launch cases, three actual CLI controls and separately exact immutable-commit compile gates are recorded. SDK strict remains blocked by Hostd dependency findings. Canonical provisioning moves the original four restart scenarios to two passes and two recovery failures; supplied fixture revisions are distinct from the published source. Subsequent testing also reproduced incorrect Ready on a used installation with missing journal inventory; that RED is retained, and genuine-first-use versus recovery refusal is being implemented. These are development checkpoints; full installed mailbox, native/WAN, sustained capacity and security qualification remain open. The accepted guest/journal ownership split is unchanged.

    Latest published supporting source: 081901d02. The guarded-startup/publication report is merged to SpiralCore main through PR120. It retains actual RED/GREEN for missing journal after a prior epoch and for strict direct-worker home selection, 21 selected publication/custody/replay cases, and three final process controls with original signer collection. The Hostd runtime overlay is supplied separately from that public commit; exact immutable-commit gated compilation passes on 4,478 Git-matched files. No native/WAN or full installed-service claim is made.

    The newer handoff acceptance supersedes parallel receipt-signer work: Ari's coordinated stream owns the trusted-host local-durable integration and V2 signer/verifier; our overlapping mailbox-core/admission/receipt edits are paused. The original verified-admission capsule and unchanged V1 bytes remain the shared interface. AcceptedLocalDurable is a distinct local-crash tier, not V1 AcceptedDurable, independent rollback protection or host-blind delivery. Access to the reported private integration pins still needs an approved accessible source handoff before our integration review.

    Current disjoint work is the original-owner interrupted-registration recovery consumer and durable endpoint-name ownership. The new signed deregistration regression now reaches the actual retained-lane refusal with original charges preserved; it is RED, not recovered service acceptance. Public upstream was refreshed at a2659fb65b8a862322ec64dd25003811492ab59f (v0.28.0-rc.1 plus #5343 idle guest-dial fix and #5344 demo runbook). Reconciliation with that baseline and Ari's owned service changes remains required before the final combined submission. #5328/#5336/#5340 remain open at their listed heads.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmailbox-phase-2Mailbox local runtime and durable statemailboxesSigned pass-by-value mailbox program

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions