Skip to content

v2026.5.16: SPEC-029 sendability enforcement

v2026.5.16: SPEC-029 sendability enforcement

Section titled “v2026.5.16: SPEC-029 sendability enforcement”

Janus now enforces the SPEC-029 sendability rule before the actor wire path ships. Proven actor, channel, and mailbox .send(...) calls are checked by the compiler:

  • ref T cannot cross the send boundary. The compiler emits E2801.
  • iso T can cross the boundary, and the binding is consumed by the send.
  • A later read of that consumed iso binding emits E2802.
  • val T and tag T are sendable.

The check is intentionally bounded to proven send boundaries. A normal method named send on an unrelated object is not treated as an actor or channel send.

This is not a Serialize trait gate. Janus actor sendability comes from reference capabilities and, for wire transport, SBI-compatible layout. As of the typed local message ABI closure, node-local ActorRef[Msg] and local GrainRef[Msg] payload sends use the same visible .send(...) surface: unit variants lower to tags, payload-bearing variants lower to boxed SBI-scalar slot vectors, and receive can destructure those payload fields. Cross-node actor/grain wire transport remains deferred to SPEC-039/SPEC-236.

Terminal window
./scripts/zb test-intent-enforcement
./scripts/zb test-diagnostics-intents
./scripts/zb test-capability
./scripts/zb test-parser-cap-seam
./scripts/zb test-spec-085-pipeline
./scripts/zb test-cluster-send-safety-payload
./scripts/zb test-cluster-actors