Skip to content

Framework Messaging Glossary

Foundation topic table of contents · Spec table of contents · Previous: 01. Public Contract Governance · Next: 03. Framework Overview

What this chapter defines — the common domain terms, state names, and result names used throughout this spec.

Spec documentation writing guide · Spot Messaging

How to Read the Tables and .NET Code Examples

For a term denoting a value or a record, a summary table like the one below comes first.

Item Meaning
Shape Indicates whether this is a single value, a closed value, a composite record, or a runtime object/state/process.
.NET notation The precise type, if a formal public .NET type exists.
Public composition The field, value range, and format the public contract defines.
Creation/management Who creates, updates, or discards the value.
Lifetime The scope in which the value is valid and the condition under which it stops being usable.

A value whose .NET notation says no public type isn't exposed to the application as an independent type. In that case, the C# shape shown is contract pseudocode meant to illustrate structure — it doesn't name a real API or constructor. For values the public contract defines as opaque, internal fields aren't guessed at and added.

A composite value that does have a real .NET public type shows the formal C# declaration below the summary table. The declaration and member names use the language-specific interface as-is, and each member's role is explained with a comment on the same line.

The single source of truth for the actual .NET declarations is the .NET Server per-language interface and the .NET Stream Connector per-language interface. The .NET notation in this glossary is a supplementary notation for reading the common contract concretely.

Rules This Glossary Follows

This glossary is the single source of truth for domain term definitions shared across multiple specs. An individual spec introduces a term at its first use with one sentence suited to the current context, then links to this document's entry — it doesn't redefine the term for the whole spec (spec documentation writing guide §3.2).

  • A term denoting a value or a record first gets a summary table (Shape / .NET notation / Public composition / Creation-management / Lifetime), and shows the real .NET declaration below it when one exists.
  • For an entry whose .NET notation says "no public type," the code block is contract pseudocode meant to illustrate structure — it isn't a real API name.
  • The single source of truth for the actual .NET declarations is the .NET language-specific interface document. The .NET notation in this glossary is only a supplementary notation for reading the common contract concretely.
  • The glossary is divided into 11 topic sections (## N. Title), and each entry has a fixed <a id> anchor and ### Term heading. Other specs link directly into these anchors, so the anchor and heading strings never change.
  • The same name is never reused for a different concept. When two contracts need the same name (for example, OperationId), the entry states within itself that they are different contracts to distinguish them.
  • An entry doesn't restate a procedure, table, or error condition already owned by another contract document. This document owns the definition itself (shape, public composition, creation/management, lifetime), but the flow in which the value is used links to the document that owns that procedure.
  • A new term is added only when all four of the following conditions hold — it can't be described precisely with an existing public identifier or industry term, several documents or APIs repeatedly need to distinguish the same concept, naming it is easier to understand than repeatedly explaining the behavior, and it doesn't overlap in meaning with another term (spec documentation writing guide §3.4).

1. Spot and Location

Spot

A logical instance with an address and state. It represents a target that can receive messages — like a room, stage, or zone — and stays reachable at the same Spot ID even when the node actually executing it changes.

Item Content
Shape Stateful runtime object
.NET notation IZLinkSpot, IZLinkInstanceSpot, IZLinkEntrySpot; the location snapshot pinned to one specific incarnation is SpotRef
Public composition Has a global Spot ID, Spot kind, stable type, ObjectGeneration, current owner, and an application queue/execution gate that depends on execution mode.
Creation/management Managed jointly by the framework's Object runtime and the application's Spot implementation.
Lifetime Distinguished across incarnations by ObjectGeneration; the global Spot ID stays the same even when the owner moves.

Spot ID

A globally unique logical address identifying a Spot. It can't be duplicated within the same Location Store scope, and the framework uses it to find which node the Spot is currently on.

Item Content
Shape UTF-8 string
.NET notation string
Public composition Compared byte-for-byte, case-sensitive; UTF-8-encoded, 1 to 255 bytes. MeshName, Spot kind, and stable type aren't part of the ID.
Creation/management The framework issues it for Entry Spot; the application specifies it in the manager call for User/Instance Spot.
Lifetime Kept as the Spot's identity across the whole Location Store namespace. The same value can't be reused for a different Spot kind or stable type.

Use the following SpotRef when you need to point to a specific Spot incarnation together with its current location.

public readonly record struct SpotRef(
    string SpotId,           // the Spot's global logical address
    ulong ObjectGeneration,  // the incarnation distinguishing a Spot re-created under the same ID
    string MeshName,         // the Mesh this specific incarnation belongs to
    RoutingId NodeRid);      // the owner node when this snapshot was made

SpotRef is an immutable location snapshot and doesn't own a local Spot instance or a runtime resource. A regular Spot message takes only the Spot ID and re-resolves current authority.

Entry Spot, User Spot, and Instance Spot

  • Entry Spot has its Spot ID issued by the framework and is provided as a server entry point.
  • User Spot is a Spot the application explicitly creates and manages.
  • Instance Spot is a Spot that can be prepared on demand by its first message, without a separate create call.
Kind .NET public type How it's created
Entry Spot IZLinkEntrySpot Registered at Object Server startup; the framework issues the Spot ID.
User Spot IZLinkSpot Explicitly created by the application via IZLinkSpotManager.Create or GetOrCreate.
Instance Spot IZLinkInstanceSpot Prepared by the first message when an InstanceSpot(...) intent is present on IZLinkSpotSendCall/IZLinkSpotRequestCall.

The Entry Spot ID is issued in the form <prefix>-entry-<lowercase-canonical-uuid-v4> for every Object Server MeshNode lifecycle. MeshNode and Entry Spot use the same prefix but each generates its own separate UUID v4.

A descriptor records the relationship between the MeshNode and that Entry Spot ID, and the application doesn't infer node relationships by parsing the Spot ID string.

The RID stays the same within the same lifecycle and a new RID is issued on a replacement lifecycle.

If a global Spot ID authority conflict occurs, startup ends immediately as a configuration error instead of generating a new UUID or reservation.

This format is reserved for framework issuance, so if a caller specifies a User/Instance Spot ID in the same format, it's rejected with InvalidOperation before the Store and factory run.

The three kinds' functionality, and the differences in Actor membership, close, and relocation, are defined by the Spot model.

Actor

An execution object identified by Actor ID, with its own state and mailbox. The Actor model owns Spot membership and lifecycle.

Item Content
Shape Logical execution object
.NET notation IZLinkActor; declarations follow the Actor interface.
Public composition Refs and contexts identify the Actor ID and incarnation. The Actor interface owns the full member list.
Creation/management The runtime creates and manages it through a registered factory. Identity scope follows the Actor model.
Transfer Actor messages address a global Actor ID; the object itself is not sent on the wire.
Lifetime From creation until that logical incarnation ends. Continuity during a move follows the Actor lifecycle contract.
Application authority The application registers Actor implementations and handlers, and uses public managers and clients.

Actor Membership

The relationship indicating which Entry Spot or User Spot an Actor currently belongs to. The Location Store holds the source of truth for this relationship. Moving an Actor to a different Spot or node changes the Actor owner and the source/target Spot's membership together in a single Location Store change.

This is a different concept from Membership, which is about a node participating in a Channel or Mesh.

User Spot Execution Mode

A startup registration option that decides which execution gate the Spot handler, member Actor handlers, and timer callbacks share inside a User Spot.

Mode Execution contract
SpotWide Gate, turn, and Yield follow the execution contract §2–§3.
PerActor Follows the mode-specific scope in the same execution contract.

SpotWide is the default. The mode is fixed when registering the User Spot stable type and doesn't change during the same MeshNode lifecycle. This option doesn't apply to Entry Spot or Instance Spot.

The relocation procedure per mode, and how the Spot instance is re-created on a PerActor target, are owned by Spot Model "5. User Spot".

Spot Relocation Coordination Mode

A startup registration option that decides at which turn boundary a SpotWide User Spot can start relocation.

Mode Meaning
FrameworkManaged The framework picks a generally safe turn boundary. This is the default.
ApplicationSignaled Only uses the boundary the application signals as safe, after the current turn, via RelocationReady().Defer().

In ApplicationSignaled, Defer() doesn't request relocation — if a relocation is ready on the current host, that boundary is used; if not, execution continues under the same owner. Calling Defer() under FrameworkManaged, PerActor, Entry Spot, or Instance Spot fails with InvalidOperation before the queue changes.

The timing of the OnRelocationReadyCompleted callback call after Defer(), and its default no-op implementation, are owned by Spot Model "5.1 SpotWide Relocation Boundary".

MeshNode

A runtime node that participates in a RouteMesh to send or receive messages. A MeshNode with the Object Server role can provide a Spot factory and lifecycle.

Item Content
Shape RouteMesh runtime component
.NET notation Startup configuration is IZLinkMeshNodeBuilder; execution-state observation is IZLinkRouteMeshRuntime and ZLinkMeshNodeSnapshot
Public composition Has a MeshName, Routing ID, ROUTER listener, peer set, Channel membership, and an optional Object role.
Lifetime Kept from when the host starts this RouteMesh component until drain/shutdown completes.

RouteMesh

The scope in which multiple MeshNodes participate to exchange node and Channel messages. ChannelName is used to determine which node participating in a specific RouteMesh is a candidate to receive a message.

Item Content
Shape Distributed topology distinguished by MeshName
.NET notation IZLinkFrameworkOptions.AddRouteMesh(string) returns an IZLinkMeshNodeBuilder.
Public composition Made up of the MeshNodes sharing a MeshName, their peer connections, the Routing ID namespace, and Channel membership.
Lifetime Has a lifecycle per participating MeshNode; the framework doesn't automatically relay between different MeshNames.

Location Store

The storage that holds each Spot's current owner, ObjectGeneration, and lifecycle state so multiple nodes can check it together. It also coordinates creation authority so exactly one target is decided when a Spot is newly created.

Item Content
Shape Distributed provider capability
.NET notation IZLinkLocationStore; provides descriptor, owner lease, and authority transactions as a single provider interface.
Public composition Manages descriptor, host owner lease, Spot/Actor location, durable authority, placement reservation, and generation counters.
Lifetime One provider instance is registered per host. Ephemeral descriptor and durable authority follow different lifetime rules.

Relocation Store

The storage that keeps, as an opaque byte payload, the activation envelope needed for an Instance Spot's cold activation and the reply payload/completion result of a request that completes after relocation. It doesn't handle the authority the Location Store manages, and stores only the payload before it's published to the Location Store and the already-published payload, under a reference the framework issues.

Item Content
Shape Distributed provider capability
.NET notation IZLinkRelocationStore; a provider interface offering Put/Read/Renew/Delete operations.
Public composition An immutable payload identified by a framework-issued opaque reference, managing retention and a provider-relative expiration time (StoreNow).
Creation/management A provider package implements the SPI, and the framework calls the registered provider instance. The application doesn't call this SPI directly.
Lifetime Kept for the retention the framework specifies; extended with Renew or explicitly removed with Delete.

Object Client and Object Server Role

  • Object Client can request Spot creation, lookup, and messaging, but doesn't provide a Spot factory.
  • Object Server includes Client functionality and can provide a Spot factory, Entry Spot, and lifecycle.

Object Client is outbound-only in terms of Object functionality. It doesn't provide a Spot/Actor factory or an application Node direct handler, but an independent RouteMesh Channel Server can still be registered on the same MeshNode. The peer connection is skipped only when both nodes are Object Client and neither has RouteMesh Channel Server membership. If either side has Server membership, a connection is required even if Channel weight is 0.

Item Content
Shape Closed MeshNode Object role
.NET notation Configuration is IZLinkMeshObjectRoleBuilder.Client()/Server(); observation is ZLinkMeshNodeObjectRole
Public composition None, Client, Server; Server includes Client functionality plus factory/lifecycle provision.
Lifetime Fixed at MeshNode startup configuration.

MeshName

A name identifying one RouteMesh physical connection group. MeshNodes registered under the same MeshName participate in the same RouteMesh. This name is also used to specify which RouteMesh's nodes are candidates when initially placing an Object. It isn't part of the Spot ID and isn't used to re-decide the current owner of an already-created Spot.

Item Content
Shape Logical namespace name
.NET notation string
Public composition A single string. Doesn't include a Routing ID or endpoint.
Creation/management Specified by the application in RouteMesh registration and optional initial Mesh selection.
Lifetime Kept as the same topology name for the duration of the RouteMesh registration. After being used for initial placement, it doesn't become part of the Spot identity or current owner.

Spot Kind

A value indicating which kind of Spot — Entry, User, or Instance — this is. The same Spot ID can't be reused under a different kind.

Item Content
Shape Closed enum
.NET notation ZLinkSpotKind
Public composition Invalid = 0, Entry = 1, User = 2, Instance = 3
Creation/management Fixed by the framework based on how the Spot is registered/created.
Lifetime Doesn't change for the lifecycle of the same Spot ID.

Stable Type

A fixed name identifying that a Spot is the same kind even when the deployed version or executing node changes. Used to decide which factory to use when preparing a new Instance Spot.

Item Content
Shape Case-sensitive stable name
.NET notation string
Public composition A single UTF-8, 1-255 byte string. No Unicode normalization or case folding is applied.
Creation/management Specified by the application when registering a factory. It isn't automatically taken from a language class FQN.
Lifetime Kept as the Spot type identity in the Store and on the wire. Can't be registered twice on the same Object Server.

ObjectGeneration

A number distinguishing different logical incarnations of the same ActorId or Spot ID. Used so that a previous generation's lifecycle/relocation control doesn't change the new incarnation's state. A regular Actor/Spot message targets the current Ready object the logical ID points to, so it doesn't use ObjectGeneration as a target match condition. Even when the application object is re-created on the target during relocation under the RecreateOnRelocation policy, this value is kept because it's still the same logical incarnation continuing.

Item Content
Shape An increasing generation value
.NET notation ulong
Public composition A single integer in the range 1..long.MaxValue. Represented as a decimal string in JSON.
Creation/management Issued by the Location Store provider's transaction-domain global counter.
Lifetime Kept for the duration of the same logical incarnation. Unchanged across same-node Join, cross-node relocation, and RecreateOnRelocation. A new value is issued when a new object is created after ending the logical incarnation. Doesn't wrap past the maximum value — fails with GenerationExhausted instead.

Owner

The MeshNode that currently executes an Actor or Spot and manages its application queue. The application doesn't directly specify the owner — the framework finds it through the Location Store.

Item Content
Shape The current MeshNode role that authority points to
.NET notation No independent application type. In the provider contract it's expressed with OwnerId, ZLinkLocationOwnerToken, and an owner node descriptor.
Public composition Verified against authority together with owner identity, owner lease generation, MeshNode RID, and lifecycle generation.
Lifetime Current until an authority owner transition. Replaced by a new owner generation when relocation or takeover succeeds.

Authority

The reference information that determines which node an Actor or Spot currently exists on, and which node is currently the owner. The Location Store manages this information, so different nodes can't consider different owners "the current owner" at the same time.

Authority isn't just a simple endpoint or send path. It records object identity and membership, ObjectGeneration, AuthorityOwnerGeneration, StoreVersion, and the current owner lease together. The framework checks these values to distinguish:

  • a new object re-created under the same Spot ID versus the previous object
  • the current owner versus a previous owner
  • the current Location Store record versus a stale record from before a change

So a lifecycle change targeting a control message a previous owner sent late, or a previous object generation, isn't applied to the current object. A regular Actor/Spot message uses authority's logical ID and the current Ready owner, and doesn't restrict the handler target by ObjectGeneration.

Item Content
Shape Composite durable record
.NET notation ZLinkAuthorityKey and ZLinkAuthoritySnapshot
Public composition Includes object identity, current owner and owner lease, lifecycle state, ObjectGeneration, AuthorityOwnerGeneration, StoreVersion, membership, and placement allocation.
Creation/management Created/changed by the Location Store provider through reservation and compare-exchange transactions.
Lifetime Kept until an explicit fenced delete; not deleted by TTL.

An authority record lookup passes the object's global logical key as the following type.

public readonly record struct ZLinkAuthorityKey(
    string Value); // provider key corresponding to the object kind and global logical key

Compare-And-Set

A conditional change in the Store that only changes the value if the version received on read is unchanged. If another request already changed the value first, the change is rejected as a conflict instead. The framework uses this to prevent two concurrent requests from changing the same Actor/Spot's owner or membership differently. This document abbreviates it as CAS.

When CAS targets multiple records, the condition check and every change are handled in a single Store request. If even one condition differs, no record is changed.

ZLinkAuthoritySnapshot's public fields are as follows.

public sealed record ZLinkAuthoritySnapshot(
    string StoreVersion,                         // version compared against the current authority revision
    ReadOnlyMemory<byte> Payload,                // opaque lifecycle payload the framework encoded
    ulong ObjectGeneration,                     // the object incarnation for this key
    ulong AuthorityOwnerGeneration,             // the order the owner changed within the same incarnation
    string OwnerId,                              // current owner identity
    long OwnerLeaseGeneration,                  // current owner process lifecycle fence
    ZLinkPlacementAllocation Allocation,        // Pending or Active capacity allocation
    ZLinkPendingObjectCreation? PendingCreation, // creation info that exists only in the Creating state
    DateTimeOffset StoreNow);                    // the store-relative time the provider returned

Ready

The state reached once Spot creation, initialization, and Location Store recording are all complete, allowing the Spot to receive application messages. A Spot direct call generally sends a message to the owner of a Ready Spot.

Item Content
Shape Lifecycle state
.NET notation Expressed as the Ready value of a per-feature state enum/snapshot; there's no single common Ready type.
Public composition A state where every per-feature serving condition is finished — listener/transport admission, or object creation/initialization.
Lifetime Excluded from the Ready state for new admission once drain, disconnect, relocation, close, or fencing starts.

Admission Seal

A lifecycle action that closes new application-work admission for a defined scope. Host relocation §14 owns the Shutdown host seal, the Relocate unit seal, and handling of accepted work. This decision differs from an execution gate, which orders execution, or a permit, which limits capacity.

Owner Route

The send path delivering a message from the source runtime to the current owner. When the owner changes, the framework re-resolves a new owner route.

Item Content
Shape Framework-managed routing state
.NET notation No public route type
Public composition Combines the current owner MeshNode identity, transport route, and object generation fence.
Lifetime Usable only while current authority and transport readiness are maintained.

Owner Fence

A value distinguishing work from the current owner from work a previous owner sent late. If this value doesn't match the current owner, the receiving node doesn't put the message on the Spot queue.

Item Content
Shape A fence checking several generations and an owner token together
.NET notation No independent public type
Public composition Compares that operation's ObjectGeneration, AuthorityOwnerGeneration, OwnerId, and OwnerLeaseGeneration against current authority, requiring all of them to match. Depending on the operation, the expected StoreVersion is also checked.
Creation/management Fixed by the framework when it reads authority or receives a reservation.
Lifetime A previous fence becomes stale once the authority owner or owner process lifecycle changes.

Target Descriptor Fence

The version of the target's registration information the source checked when selecting the target. Used to determine whether the target's role, registration type, or lifecycle information changed after selection.

Item Content
Shape A composite fence fixing target descriptor identity and lifecycle
.NET notation A combination of ZLinkMeshNodeDescriptorKey, a ulong lifecycle generation, and ZLinkLocationOwnerToken
Public composition Includes the MeshName/RID descriptor key, target lifecycle generation, and that target's owner lease token. For reservation, capacity delta and descriptor conditions are also verified together.
Creation/management Fixed by the source when selecting a target, and re-verified by the target and Store before reservation.
Lifetime Becomes stale if the descriptor lifecycle or owner lease changes.

Positive Route Cache

Information the source runtime briefly holds — the owner route of a recently confirmed Ready Spot. Re-queried from the Location Store if no usable cache exists or it's stale.

Item Content
Shape A source-runtime-internal cache entry
.NET notation No public type
Public composition Holds the Ready object key, current owner route, and the generation fence needed for admission. The internal storage format isn't part of the public contract.
Creation/management Created by the framework from a successful Ready authority lookup result and managed by the source runtime.
Lifetime Doesn't exceed RouteCacheMaxAge, the owner admission deadline, or the Message Follow duration limit. Missing, Creating, and Store failure aren't stored as a positive cache.

Creation Attempt

A single creation attempt to build one logical object, running from reservation through recording the final result. If multiple callers concurrently call GetOrCreate for the same object, the Location Store reservation serializes factory and callback execution one at a time. Other operations don't share the application result of an attempt that started earlier.

Item Content
Shape Durable state managed by the Location Store
Identifying value Reservation ID
Start state Reserved
Terminal state Authority ends in a Ready commit or Creating cleanup. The operation result is recorded in a separate terminal record as Created, Rejected, or Failed.
Creation execution Only the caller that wins the reservation CAS runs the factory and creation callback.
Lifetime The reservation is kept until Ready commit or Creating cleanup. The operation terminal is kept for 5 minutes after the original deadline.

Reservation ID

An identifier the Location Store uses to distinguish the admitted capacity and progress record reserved for creation or relocation. Creation IDs and relocation IDs use separate namespaces. Resending the same request with the same ID returns the previously issued result. Sending a request with different content under the same ID is a Conflict.

For creation, it can be used to continue the same work after a process restart, or to cancel exactly that work. For relocation, it's used only to distinguish duplicate requests within the running source and target processes, and doesn't carry work over after process termination. It isn't an identifier that merges different operations into the same application result.

public readonly record struct ZLinkCreationReservationId(
    string Value); // opaque value identifying one creation attempt

The code above is notation used to explain structure in this document. The actual public type's name and encoding follow each language's interface contract.

Creation Terminal Result

The final result indicating a creation attempt won't progress further.

State Meaning Ready authority and capacity
Created The application approved creation, and the object became Ready. Creates Ready authority and converts reserved capacity to active capacity.
Rejected The application callback ran normally but declined creation. May include an optional application reply. Doesn't create Ready authority or active capacity; returns reserved capacity.
Failed A normal approve/reject result wasn't produced due to node shutdown, timeout, or a callback exception. Includes a typed creation failure. Doesn't create Ready authority or active capacity; returns reserved capacity.

Existing isn't a creation terminal result. It's the result of looking up an already-Ready object, so no new creation attempt, reservation, or creation callback execution occurs.

2. Instance Spot Preparation

Instance Intent

The caller's explicit choice that it's fine to prepare a new Instance Spot when the target Spot doesn't exist. Expressed in .NET by specifying InstanceSpot(...) on a Spot direct call.

Item Content
Shape Fluent call option
.NET notation IZLinkSpotSendCall.InstanceSpot(...), IZLinkSpotRequestCall.InstanceSpot(...)
Public composition Expressed as whether Instance activation is allowed, plus an optional stable type.
Lifetime Applies only to that single-use call; doesn't carry over to a regular Spot direct or a later call.

Connection Intent

A MeshNode's intention to keep a connection to a specific peer node. In manual topology the application configuration registers and removes one per peer; in automatic discovery the auto-connect owner that reads the Location Store does. The runtime attempts connect and reconnect to that peer only while the intent exists, and removing the intent also removes the binding's connection registration.

Item Content
Shape Runtime state, one per peer. No standalone public type.
Creation and management Created and removed by the application configuration (manual) or the auto-connect owner (automatic). The runtime's READY/DISCONNECTED observations don't create an intent.
Lifetime From registration until the owner removes it. Removal is terminal; a late READY doesn't revive it.
Application authority In manual topology the application registers and removes connect targets. In automatic mode the application doesn't handle it directly.

Cold Activation

The process of creating and initializing a new Instance Spot so it can receive its first message, when the Location Store's authority is Missing and the caller specified Instance intent.

Item Content
Shape Framework lifecycle process
.NET notation No independent public type. Observed through the InstanceSpot(...) call and IZLinkInstanceSpot lifecycle callbacks.
Public composition Made up of the stages: target selection, durable envelope storage, reservation, factory/initialize, inbox first record, Ready commit, and first handler dispatch.
Lifetime Starts from Missing authority and ends in Ready or a fenced terminal failure.

The order of each stage, the coordination among competing targets, and the sequence diagram are owned by Framework API "16. Creating A Missing Object — Cold Activation Sequence".

Activation Envelope

A delivery unit sent to the target, bundling the first application message together with the information needed for Spot creation and reply. The target holds this message and places it on the same Spot queue once, after the Spot becomes Ready.

Item Content
Shape Framework-internal composite envelope
.NET notation No public type. The composition table below is contract pseudocode.
Creation/management Created once by the source framework when it starts a call to a Missing Instance Spot, and preserved by the target runtime and the Relocation Store.
Lifetime Kept until the first handler's terminal completion, the replay cursor update, and the release of the recovery pointer.
Public composition Meaning
First application message The payload to process on the same Spot queue after Ready
Send/request kind Distinguishes a one-way message from a request needing a reply
Operation identity Distinguishes whether a retry or a duplicate envelope is the same work
Reply correlation Links the request to its terminal reply
Deadline The final time point applied to the whole activation and request
Source identity Source node RID, lifecycle generation, and an optional source Spot ID
Target identity Global Spot ID, the selected MeshName/stable type, and target descriptor fence
Metadata Whether Command 39's optional metadata is present, plus the immutable metadata frame

Operation Identity

A value distinguishing whether a retry or duplicate delivery came from the same work. Used to decide not to process the same first message twice.

Item Content
Shape Opaque operation identifier
.NET notation No public type
Public composition A single opaque value. Length and internal encoding aren't part of the public contract.
Creation/management Generated by the framework when starting a terminal-once operation, and kept the same across redirect/recovery.
Lifetime Valid for as long as needed for that operation's terminal completion and duplicate detection. Not generated or interpreted by the application.

Actor Join OperationId

A non-zero 128-bit value letting the application distinguish whether an Actor Join completion callback is redelivering the same result. RelocationId — which identifies the relocation execution itself — the placement reservation ID, and the bounded aggregate commit ID are each separate internal IDs with different purposes, and none substitutes for this value.

public readonly record struct ZLinkActorJoinOperationId(
    ulong High, // upper 64 bits of the 128-bit ID
    ulong Low); // lower 64 bits of the 128-bit ID
Item Content
Shape A non-zero 128-bit value made of two ulongs
.NET notation ZLinkActorJoinOperationId
Public composition High and Low must be compared together. The application doesn't assign separate meaning to each field.
Creation/management Generated by the framework at Actor Join registration; the same value is passed on every completion retry.
Delivery Included in Accepted, Rejected, and Failed Actor Join completions. For a cross-node Accepted, it's also stored in a separate field of the relocation manifest.
Lifetime For same-node outcomes, Rejected, and Failed before relay-ready is accepted, retry is only guaranteed for the current process lifetime. For a cross-node Accepted, it's used for durable at-least-once completion for as long as the manifest is kept.

Deferred Join Barrier

A process-local queue boundary that runs Actor Join after the current handler ends normally, and prevents a later-arriving Actor message from overtaking the Join. It's registered inactive at the moment Defer() is called, and doesn't start a target lookup or Store I/O.

Item Content
Shape A framework-internal, handler-scoped queue barrier
.NET notation No public type
Public composition Combines the current Actor identity/ObjectGeneration/membership, an immutable join request snapshot, an absolute deadline, and the Actor Join OperationId. The internal encoding isn't part of the public contract.
Creation/management Registered by Defer() within an open handler registration scope. Activated when the handler ends normally; discarded on exception, cancellation, or reply-encoding failure.
Lifetime Kept from registration until Join terminal and completion ordering finish. If the process terminates before Location commit, this barrier itself isn't re-created.

Bounded Aggregate Commit

A commit boundary that finalizes several related location-information items together in one bounded Store transaction, as in cross-node Actor Join. It doesn't expose a partial state where only the Actor owner changes first and membership or capacity changes later.

Item Content
Shape A bounded multi-record atomic transaction in the Location Store
.NET notation No independent public type
Public composition Verifies and changes Actor authority, source/target membership, capacity, and aggregate generation together.
Creation/management Run once by the framework's relocation coordinator after target staging finishes.
Lifetime A successful commit is the confirmation point of the logical relocation. The same aggregate isn't committed a second time to record callback, relay, and cleanup completion.

Message Follow

The action of forwarding a message that arrives at the previous owner node, on behalf of the new owner, after an Actor or Spot has relocated to another MeshNode. Its purpose is to avoid losing a message even when the sender still has the old location cached — it isn't a redirect that tells the sender the new address and asks it to resend.

An individual message that arrives late at the previous owner after a relocation commit is the target of Message Follow. Message Follow isn't kept indefinitely — it's valid only within the Message Follow duration; a message arriving after that period ends is treated as a normal stale-route failure.

This is different from relocation ingress hold, which the source holds after sealing during relocation. The hold is temporary storage the source keeps until commit and then hands to the target queue; Message Follow handles messages that arrive at the old owner after the commit is done and the owner has already changed.

Item Content
Shape Framework-managed message delivery after an owner transition
.NET notation No public type
Public composition Keeps the new owner's ActorRef or Spot location and the Message Follow expiration time.
Creation/management Created by the previous owner's runtime after a relocation commit finishes.
Lifetime Removed once the Message Follow duration ends; a message arriving at the same location afterward is treated as a stale-route failure.

Message Follow Duration

The period for which Message Follow is valid. Starts at the relocation commit and, once it passes, the previous owner no longer forwards.

Item Content
Shape A framework-managed duration
.NET notation ZLinkLocationOptions.MessageFollowDuration
Lifetime Starts at relocation commit and ends at expiration. The Message Follow entry is removed after expiration.

Relocation Ingress Hold

A queue that prevents message loss after the source Actor seals message acceptance. It temporarily keeps messages that still arrive on the previous source route. The queue has no record-count or byte bound defined specifically for relocation. A message that arrives after Defer() but before the seal goes into the Actor queue behind the deferred Join barrier instead.

Item Content
Shape A framework-managed message hold with no relocation-specific record-count or byte bound
.NET notation No public type
Public composition Keeps the message payload, original operation identity, ObjectGeneration, and the framework metadata needed for queue ordering. Internal storage format isn't disclosed.
Creation/management The source runtime holds messages arriving after the relocation seal. It does not reuse the ordinary application lane's count and byte reservations as a relocation-specific ceiling. Separate limits set by transport, deadline, and cancellation still apply.
Lifetime On an explicit abort before relay-ready is accepted, restored to the source queue in original order. After that boundary, source isn't restored regardless of cutover-submit result; target handoff or Message Follow owns it until removal.

Reply Correlation

Identifying information created when sending a request and kept together on the request and reply. In the public contract this is a single value called correlation_id, not a combination of several fields.

Aspect Contract
Value A single correlation_id
.NET notation Observed as string? CorrelationId in handler/monitoring context. Can be null for a one-way message.
Format A framework-generated opaque ASCII identifier, 1-64 bytes
Generator The MeshNode, ClientServer client, or STREAM runtime that started the request
Uniqueness scope Can't be duplicated among requests concurrently pending within the same lifecycle of the runtime that generated the value.
Delivery The same value is kept on the request and its terminal reply or error. Not generated for a one-way message.
Lifetime Valid until the request terminally completes with a reply, error, timeout, cancellation, or shutdown.
Application constraint Doesn't interpret the value or assemble a new one. Not placed into application metadata as a key.

flow_id, target RID, endpoint, user ID, and payload aren't components of correlation_id. flow_id is a separate value for observing a business flow that chains several messages, and isn't used as the basis for linking a request and reply.

When a reply arrives, the client compares correlation_id against the value of the currently pending request. It's only treated as that request's result if the values match; if no pending request matches, it's judged a late-arriving reply and discarded.

This information is kept even when the target has to newly prepare the Spot or forward the request to the current owner. A downstream request the handler starts separately uses a value different from the original request's.

The full generation/propagation contract follows Flow correlation.

Deadline

The final time point by which work must finish. For a request, a single end-to-end deadline can apply across Spot lookup, cold activation, handler execution, and reply.

Item Content
Shape Absolute end-to-end time boundary
.NET notation The caller specifies a TimeSpan timeout, while the framework and lifecycle context use a fixed DateTimeOffset Deadline.
Public composition A single final time point computed once when the terminal submit starts. Not the sum of per-stage timeouts.
Creation/management Fixed by the source framework from the caller's timeout and the current time.
Lifetime Shared by resolve, reservation, factory, Ready barrier, handler, and reply; discarded after terminal completion.

Factory

Application-provided code that creates a Spot instance matching a registered stable type. Even if multiple targets try to create it concurrently, only the target that first secures creation authority runs the factory.

Item Content
Shape Application-provided construction capability
.NET notation For Spot, AddSpotFactory<TSpot>/AddInstanceSpotFactory<TSpot>; for Actor, IZLinkActorFactory<TActor>
Public composition Combines the stable type, per-object-kind factory option, relocation policy, and concrete instance type in the registration.
Lifetime Kept for the duration of the Object Server registration. May run at-least-once during a creation attempt, so it must be retry-safe.

Activation Barrier

A boundary preventing the first application message from being delivered to the handler before Spot initialization and confirmation of the durable activation inbox's first record finish. The framework opens this boundary after confirming the Ready authority — which keeps the recovery root and replay cursor — and restoring the first record to the head of the queue.

Item Content
Shape Framework-internal admission barrier
.NET notation No public type
Public composition Jointly checks initialize completion, the durable inbox first record, Ready authority, and the local queue-head restore condition.
Lifetime Kept from the start of cold activation until every condition is met and first-handler admission opens.

Durable Activation Inbox

A record storing an Instance Spot cold activation's first application message so it can be restored even after a process restart. The framework only publishes the Spot's Ready authority after confirming this message as the first record.

Item Content
Shape Durable ordered record sequence
.NET notation No public type
Public composition Preserves the inbox sequence, the complete activation envelope, and processing-completion state. The provider doesn't interpret the envelope payload.
Creation/management The target runtime confirms the first record in the Relocation Store and durably records handler completion.
Lifetime Created before Ready; kept as recovery evidence until first-handler completion, the replay cursor update, and the release of the recovery pointer.

Replay Cursor

The last position durably recorded as processed in the durable activation inbox. The framework updates the cursor to that inbox sequence after recording the first handler's completion.

Item Content
Shape Monotonic inbox position
.NET notation No public type
Public composition A single inbox sequence — the last one whose terminal completion was recorded. The concrete encoding isn't part of the public contract.
Creation/management Updated by the target runtime after durably recording the handler's terminal completion.
Lifetime Included in the Ready authority's recovery pointer; kept until the pointer is released. Never rolled back to an earlier position.

Activation Recovery Pointer

Information that keeps the Ready authority pointed at the recovery root and replay cursor used when recovering a cold activation. This pointer isn't removed before the first handler completes and the cursor update finishes.

Item Content
Shape A composite pointer of a recovery root reference and a cursor
.NET notation No public type. Included in authority's opaque framework payload.
Public composition Points jointly at an immutable activation recovery root reference and the current replay cursor.
Creation/management Recorded into the authority payload by the Ready commit, and removed by an expected-version Preserve CAS.
Lifetime Exists only for a Ready Instance's cold activation. Can't exist on Creating/Closing/Relocating authority or on Actor/Entry/User Spot.

Recovery Receipt

Information confirming the link between the activation recovery root stored in the Relocation Store and the Pending creation authority. The Location Store records this together with the creation reservation and returns it on a direct read.

Item Content
Shape Immutable content verification record
.NET notation No dedicated public type. On the provider surface it's expressed as a content reference, a ReadOnlyMemory<byte> SHA-256, and encoded size.
Public composition Includes the recovery root reference, SHA-256 hash, and encoded byte size.
Creation/management The target stores the root first, then atomically links it to the Location Store reservation.
Lifetime Kept together with the Pending creation authority until Ready commit or fenced-failure cleanup.

Reservation Fence

An identifying value the provider issues so only a specific creation reservation can continue or abort. Prevents a late-arriving commit or abort from a previous reservation from changing the current creation.

Item Content
Shape A provider-issued, composite reservation record
.NET notation ZLinkObjectReservation
Creation/management Issued by the Location Store provider on a successful Reserve. Commit and Abort compare the same fence for equality.
Lifetime Closes when the corresponding Creating authority commits to Ready or is cleaned up via that abort.
public sealed record ZLinkObjectReservation(
    ZLinkAuthorityKey Key,                  // authority key for the object kind and global logical key
    string StoreVersion,                    // the Creating authority version Reserve created
    ulong ObjectGeneration,                 // the new object incarnation
    ulong AuthorityOwnerGeneration,         // the initial authority owner generation
    string ReservationVersion,              // the fence letting only this reservation commit/abort
    ZLinkMeshNodeDescriptorKey TargetDescriptor, // the identity of the selected target MeshNode
    ulong TargetNodeLifecycleGeneration,    // target descriptor lifecycle fence
    ZLinkLocationOwnerToken TargetOwner);   // target host owner lease fence

3. Message Calls and Async Execution

Spot Direct

A way of delivering a send or request to a Spot by specifying a single global Spot ID. The application doesn't specify an owner RID or endpoint.

Item Content
Shape ID-addressed messaging surface
.NET notation IZLinkSpotClient.SendToSpot<T>(), RequestToSpot<T>(); the resulting call is IZLinkSpotSendCall, IZLinkSpotRequestCall
Public composition Builds the call from a global Spot ID, typed payload, and optional metadata/timeout/Instance intent.
Lifetime A single-use fluent call; can't be reused after terminal submit.

Execution Gate

A runtime mechanism that assigns execution authority so callbacks in one scope do not access state concurrently. Handler turn and execution gate §2 owns its scope.

Item Content
Shape Runtime execution authority
.NET notation No public type.
Public composition No public fields; observed through callback execution order.
Creation/management Managed by the runtime according to execution mode; not a value transmitted by ID.
Transfer Process-local execution context, not transmitted on the wire.
Lifetime Used within the execution object's lifetime. Authority transfer across turns and Yield follows execution contract §2–§3.
Application authority The application uses registration options and public calls rather than creating or acquiring gates directly.

Handler Turn

The interval in which a handler acquires an execution gate, runs, and releases that authority. It describes Node, Channel, Actor, and Session execution contexts as well as Spots.

Item Content
Shape Callback execution interval
.NET notation No public type.
Public composition No public fields; observed through handler and continuation execution.
Creation/management The runtime associates it with the handler's execution authority.
Transfer Process-local execution context, not a message field.
Lifetime Start, wait, release, and resumption boundaries follow execution contract §2–§3.
Application authority The application uses handlers and eligible terminals; it does not create or change turn identifiers.

Spot Turn

A handler turn that runs a Spot callback. The execution contract §2–§3 owns gate sharing and turn boundaries around Yield.

Item Content
Shape Serialized callback execution unit
.NET notation No independent public type. Provided as the execution context of a Spot handler or lifecycle callback.
Public composition Made of one callback, the application queue it entered, and ownership of the execution gate that queue uses.
Lifetime Kept from the callback's start to its completion. In a SpotWide User Spot or Instance Spot, Yield can return the shared Spot turn first.

Async and Yield

  • Async holds the current Spot turn while waiting.
  • Yield returns the shared turn of a SpotWide User Spot or Instance Spot so the next queue item can run, and resumes execution on a new turn of the same Spot once the awaited result is settled. Not usable in other execution contexts.
Item Content
Shape Two kinds of request-call terminators
.NET notation ValueTask<TReply> Async<TReply>(...), ValueTask<TReply> Yield<TReply>(...)
Public composition Both return the same request result. Availability by call follows execution contract §16.
Lifetime Only one terminal method can run per fluent request call.

Gate and Actor queue claim lifetime follow execution contract §3.

Source-Local Admission

The boundary where the sending runtime's queue for an operation family accepts work. It distinguishes one-way completion from remote handler processing.

Item Content
Shape Operation acceptance phase
.NET notation No public type.
Public composition Returns no separate status or remote-receipt confirmation value.
Creation/management Managed by the sending runtime; Submit and completion §4 owns queue boundaries by target kind.
Transfer A source-local completion boundary, not a wire receipt.
Lifetime Applies through acceptance of one submission operation. Waiting and failure follow that family's completion contract.
Application authority The application awaits a public call's terminal rather than directly selecting an internal queue.

One-Way Normal Completion

Normal completion of a one-way call means that source-local outbound admission accepted the operation. It doesn't return a public status or result value, and doesn't confirm target handler execution or remote queue acceptance.

Completion Dispatcher

The component that delivers a finalized Framework operation's completion callback in a new execution interval. It is distinct from the pending registry that decides completion races.

Item Content
Shape Process-shared runtime execution component
.NET notation No public type.
Public composition No public fields; observed through callback execution and completion.
Creation/management Managed per process by the runtime. Its Framework service-operation responsibility differs from the native completion owner.
Transfer Not transmitted on the wire; receives finalized callbacks inside the runtime.
Lifetime Submit and completion §11 owns slot reservation and callback-return boundaries.
Application authority The application receives public-operation results rather than configuring or posting to the dispatcher directly.

Backpressure

Flow control in which Core limits new send admission using local byte HWM and remote receive-flow state. The local HWM value and the remote PAUSED/RUNNING state are separate inputs. Their composition follows the Core socket receive-flow contract; Framework permit pressure is forwarded as specified in Application job queue §6.

Submit and completion §4–§5 owns one-way call waiting and completion. The internal waiting state is Backpressured, not a public terminal result.

Backpressured

The internal state where the send path or queue's capacity is temporarily insufficient. It is not a public terminal result; Core handles HWM retry until the binding operation completes. Once Logical Multicast has started, per-target capacity shortfalls aren't aggregated into public results or publish-only monitoring.

Completion connection

A separate physical connection used by RouteMesh ROUTER-ROUTER peers to keep terminal replies, error replies, and receive-flow control progressing independently of bidirectional request wait cycles and Application HWM. ClientServer DEALER-ROUTER peers don't have this connection: replies share the single Application connection's FIFO, HWM, and PAUSED state with DATA. Framework request results and Core's socket-local completion queue are distinct from this physical connection.

Core HWM budget

The byte budget a framework host instance forwards to Core for directional queue HWMs. The framework forwards CoreHwmMemoryLimitBytes, CoreHwmBudgetBytes, and CoreHwmProfile unchanged; Core computes the effective budget and per-queue HWMs. The CoreHwmProfile name here is an independent type and calculation from the same-named profile used by the application job queue.

Application job queue

The shared supply-permit queue a framework host instance holds until an application callback actually starts. Only supply identified as terminal reply/error completion during pre-receive bypasses this permit; ordinary receive cannot gain a bypass after classification. Every other application, control, or malformed ordinary ingress record acquires a permit before receive/claim. An application record releases it at the handler's first instruction; a control or malformed record releases it immediately after internal processing. When capacity is unavailable, a cancellable wait propagates backpressure; there is no generic capacity reject, drop, polling, busy-spin, or unbounded bypass queue.

At or above the configured pause boundary, the number of permits in use changes the host pressure state to paused; at or below the configured resume boundary, it changes the state to running. The default percentages are 80 and 60, and the current state is kept between the boundaries. This is an absolute flow state applied to supported sockets; it does not directly change route readiness or transport liveness.

DeadlineExceeded

A framework exception raised when the completion condition for an operation isn't met by its allowed deadline. The completion condition differs per operation — for example, a one-way send waits for the source queue to accept the message; object creation waits until Ready or a creation-failure result is confirmed.

Not a public submit status, and distinct from a state where a request handler simply hasn't returned an application reply yet.

TargetNotFound

The error category an operation family raises when a matching logical target can't be found or newly prepared. The public framework error kind is NotFound.

RouteNotConnected

An internal transport state raised when the logical target is confirmed but no send path is currently usable. The public framework error kind is Unavailable.

Shutdown

A state where the runtime is proceeding with shutdown and can't accept new operation admission. A new one-way call completes with a ShuttingDown exception. The runtime termination reason and outcome are owned by a separate lifecycle result.

4. Channel and Logical Multicast

ChannelName

A name identifying the Channel scope a message is sent to. In Logical Multicast, it decides which RouteMesh participating nodes are considered remote target candidates.

Item Content
Shape Logical Channel name
.NET notation string
Public composition A single string. Doesn't include MeshName, socket, or endpoint.
Creation/management Specified by the application when registering topology and handlers.
Lifetime Kept as a process-local registration key. The same name can't be registered twice for different physical topologies.

Topic

A value selecting which local Spot subscription should receive a message within the same ChannelName. Each receiving node checks only its own subscriptions.

Item Content
Shape Subscription selector
.NET notation string
Public composition A single value passed separately from ChannelName. Doesn't include a Spot ID or remote node list.
Creation/management The application specifies the same value on subscription registration and publish calls.
Lifetime Kept for the duration of the registered subscription. Classic fanout's liveness topic can't be used as an application topic.

Logical Multicast

A way of delivering one message to multiple Spots in the same Channel, using ChannelName and topic. The framework sends the message once per remote node, and each node decides which local Spots actually receive it.

Item Content
Shape Multi-target publish surface
.NET notation IZLinkSpotPublisherClient.Publish<T>(), IZLinkPublishCall
Public composition Takes ChannelName, topic, typed payload, and optional metadata as input, and completes with no return value.
Lifetime Kept while submission is attempted to the targets fixed at the start of one publish transaction.

Subscription

Registration information indicating a Spot will receive messages matching a specific ChannelName, topic, and packet name. The receiving node puts a message into the queue of a Spot whose registration matches.

Item Content
Shape Composite handler registration key
.NET notation No independent public type. Expressed by an IZLinkSpotHandlerRegistry.AddSubscribe<THandler>(string channelName, string topic) registration and the handler type.
Public composition A combination of ChannelName, topic, message kind, and packet name.
Creation/management Registered by the application in the Spot's Configure(); the framework validates duplicates and Channel membership at startup.
Lifetime Kept for the Spot handler registry's lifecycle; the same key can't be registered twice on the same Spot.

Publish Target Snapshot

A Snapshot of the publish target set. Creation timing and target selection are owned by Spot messaging §4.

Item Content
Shape The target set fixed at the start of a publish
.NET notation Target identity and count aren't exposed as a public return value.
Public composition The set of positive-weight ready remote MeshNodes, and the matching local Spot set on the source node.
Creation/management Fixed once by the framework when the publish transaction starts.
Lifetime Kept until that publish's target submissions finish; unaffected by mid-flight membership changes.

Relocation Policy

The policy — fixed at factory registration — deciding how to handle application state when an Actor or Spot must keep running on a different node.

Policy What's kept on the target
DisableRelocation Cross-node relocation isn't allowed. The source owner and application admission are kept.
RecreateOnRelocation The application object is re-created by the target factory. Framework queue/timer are kept, but application state isn't restored. ObjectGeneration is kept since it's the same logical incarnation.
PreserveStateWith Application state at a boundary where the handler ended normally is captured/restored as an opaque byte sequence by the specified relocation adapter. Framework queue/timer are also kept.

The application can't change the policy per operation, and registration can't be changed after startup.

Preserve-State Relocation Policy

A relocation policy that saves application state as bytes when moving an Actor or Spot to another node, and restores it into a new instance on the target. The framework-managed queue, unfinished work, and timers move along with it.

The factory configure callback's PreserveStateWith also specifies the adapter.

Classic Fanout

A feature that delivers service events to subscribers using a separate PUB/SUB socket. Doesn't share a physical connection or subscription state with Spot Logical Multicast.

Item Content
Shape Independent PUB/SUB messaging surface
.NET notation IZLinkFanoutClient, IZLinkFanoutPublishCall, IZLinkFanoutHandler<TEvent>
Public composition Uses a fanout ChannelName, topic, and typed event; has no per-subscriber acknowledgement or replay state.
Lifetime Kept for the publisher/subscriber listener lifecycle and each publish admission.

5. Queue, Control, and Lifetime

State Lane

An execution unit serializing code that reads and writes one component's mutable state. It differs from application and lifecycle lanes that classify handler work.

Item Content
Shape Component-internal state-ownership primitive
.NET notation No public type.
Public composition No public fields. Common internal entry points follow State ownership and state lanes §7.
Creation/management Managed by the component owning the state. Collections participating in one invariant follow the same ownership boundary.
Transfer A process-local execution unit, not transmitted on the wire.
Lifetime Valid while the component accepts state access; closing and reentrancy follow the state-lane contract.
Application authority Not a public API through which the application directly selects a lane.

Application Lane

The FIFO classification retaining a serial execution object's business payloads and timer callbacks. It is distinct from the application/infrastructure execution-domain split.

Item Content
Shape Runtime FIFO per execution object
.NET notation No public type.
Public composition No public fields. Execution contract §7 owns work classification and bounds.
Creation/management The runtime manages the execution object's queue; this does not mean one queue per MeshNode Owner.
Transfer Not transmitted on the wire; retains accepted runtime work.
Lifetime Used during the execution object's lifetime; work-reservation lifetime follows execution contract §7.
Application authority The application uses messaging and timer APIs rather than changing internal lanes directly.

Lifecycle Lane

The FIFO classification retaining a serial execution object's join, leave, relocation, and lifecycle control work. User callbacks executed here also belong to the application execution domain.

Item Content
Shape Runtime FIFO per execution object
.NET notation No public type.
Public composition No public fields. Execution contract §7 owns separation from the application lane, priority, and bounds.
Creation/management The runtime manages lifecycle work for the execution object.
Transfer Not transmitted on the wire; retains work the runtime creates or classifies from received input.
Lifetime Used during the execution object's lifecycle; work-reservation lifetime follows execution contract §7.
Application authority The application uses lifecycle APIs and callbacks rather than changing internal lanes directly.

Yield Debt

Per-execution-object state marking the need to prioritize an application turn after consecutive lifecycle selections. It is a scheduler concept distinct from a public Yield call.

Item Content
Shape Runtime fairness state
.NET notation No public type.
Public composition No public fields. Execution contract §7 owns the bound and clearing conditions.
Creation/management The scheduler manages it when selecting lanes for each execution object.
Transfer Not transmitted on the wire or in a public snapshot.
Lifetime From reaching the consecutive-lifecycle bound until an application turn runs and clears it.
Application authority Not a value the application reads or sets.

Snapshot

The result of copying runtime state at a specific point in time into a read-only value. If the actual state changes after the snapshot is taken, the already-returned value doesn't change. So when using a Snapshot for monitoring or target selection, don't interpret it as a guarantee that "the state is still the same right now."

Where used What the Snapshot represents
Monitoring Node, channel, connection, and capacity state at the moment of the query
Publish target The set of receiving targets fixed when the publish started
Metadata An immutable copy of metadata at the moment it was passed to the handler or send call

Spot Application Queue

The application queue retaining Spot business payloads and timer callbacks. Handler turn and execution gate §7 owns work classification and the separate lifecycle lane for control claims.

Item Content
Shape Framework-owned serialized application queue
.NET notation No public queue type
Public composition Retains Spot direct, matching publish, and timer work items. Classification of Actor business payloads and lifecycle control follows the execution contract above.
Lifetime Exists for the Spot incarnation; close and relocation follow their lifecycle contracts.

Object Execution Queue

A framework-internal queue holding an Actor's or Spot's application work in execution order. Before locating the application instance, the framework checks the message's object identity and generation to find this queue. If a Create is in progress, the queue can exist even before the application instance does. Relocation Restore uses the temporary queue described below.

Item Content
Shape A framework-owned serialized queue, per object identity and generation
.NET notation No public queue type
Public composition Holds the execution order of lifecycle work like Create, and messages to deliver to the application object once it's ready.
Lifetime Can be created before the object is ready; used for as long as the same incarnation is maintained. If preparation fails or the object is removed, remaining work is ended with a terminal result and the queue is removed once empty.

During relocation, messages for a target object that isn't ready yet aren't put directly on this queue. They're first held in the relocation temporary queue defined below, and moved behind existing work once target preparation finishes.

Relocation Temporary Queue

A framework-internal queue that briefly holds messages arriving for an Actor or Spot while the target runtime is restoring it. Dispatch checks whether a temporary queue registered for the current relocation exists before locating the Actor or Spot instance. If one exists, the message goes onto that queue; otherwise it uses the existing dispatch path.

Item Content
Shape A framework queue tied to a RelocationId, target attempt, object kind/ID, and ObjectGeneration, with no relocation-specific item-count or byte bound
.NET notation No public queue type
Public composition Preserves target identity, original operation identity, deadline, payload, and reply route. For SpotWide, the Spot and member Actors go in the same relocation group, but each record preserves its actual target.
Lifetime Registered when the target accepts a Restore request. Work is moved to the real object queue and this queue removed after owner commit and any needed callbacks. Discarded without running and source restored only on an abort before relay-ready is accepted.

The switchover from temporary queue to real object queue is handled atomically. Messages accepted before the switch stay on the temporary queue; messages accepted after the switch go straight into the real queue. The framework puts the previously saved work into the real queue first, then the temporary queue's work after it. The real queue's application handlers don't run until all of this is finished.

Spot Control Claim

Control work that changes state a Spot manages, following an Actor join, leave, or lifecycle change. Runs in the same queue order as the target Spot's other callbacks.

Item Content
Shape Spot queue control work item
.NET notation No independent public type. Expressed as the result of Actor join/leave and lifecycle APIs.
Public composition Has target Spot identity, control kind, and the Actor/lifecycle information to apply. The internal envelope isn't public.
Lifetime Valid until that control callback finishes on the Spot application queue.

Actor Queue Claim

The right to run the single current job at the head of an Actor queue. Prevents two jobs on the same Actor from overlapping, or a later job running before an earlier one.

Item Content
Shape Framework-owned Actor queue execution claim
.NET notation No independent public type. Provided as the Actor handler's execution context.
Public composition Combines Actor identity with the current queue-head job.
Lifetime Kept from handler start through completion of the current job, including its continuation. Even if a SpotWide member Actor yields, only the User Spot gate is returned — this claim is kept.

Relocation Mode

The caller's intent specifying which application version to move a host's stateful objects to. Use PlannedMaintenance for node maintenance that keeps the application version, and RollingUpdate for a deployment that switches to a prepared new version.

Item Content
Shape Closed value PlannedMaintenance=0, RollingUpdate=1
.NET notation ZLinkFrameworkRelocationMode
Public composition PlannedMaintenance uses the same effective target version as the source. RollingUpdate also specifies the TargetApplicationVersion greater than the source's.
Lifetime Fixed when a host Relocate operation starts; the same mode and effective target version are also recorded in the terminal result.

The version the mode determines is applied first, and then capability, policy, adapter, capacity, and placement weight are evaluated. A node with a version different from the requested one isn't a target, even if it's a higher version.

Relocation Unit

The smallest bundle of Actors or a Spot for which the framework, during host relocation, blocks new work on the source once, restores it on the target, and then switches the currently processing node. Different units can move concurrently, in the order they finish preparing. If a unit includes both Actors and a Spot together, the node handling the Actors and the Spot they belong to are changed together per that unit's contract.

Item Content
Shape Either a single Actor, or a Spot bundled with the Actors that must move together. No independent public type.
Public composition One of: a single Entry Spot Actor, a single Actor of a PerActor User Spot, a PerActor Spot message target, a SpotWide User Spot with all of its member Actors, or a single Instance Spot.
Creation/management Built by the framework handling the host Relocate, based on the currently processing node and the Spot execution mode. The application doesn't add or remove members of the unit.
Delivery The unit's identity, captured state/queue/timer, and target restore information are sent directly from the source to the target as relocation state chunks. Not exposed in application messages.
Lifetime Created when the source blocks new work and starts the move; ends when the target starts processing after the location change, or the move is canceled before the location change.
Application authority The application doesn't directly create or change a unit. Only when ApplicationSignaled is chosen under SpotWide can it signal a safe turn to start the move.

Relocation State Chunk

A piece of the relocation payload that is no larger than a configured size and is sent directly from the source to the target. The payload doesn't pass through a store; it crosses the network exactly once, on the same source–target ordered mesh connection that relay uses. Messages of other objects can interleave on the same connection, so which assembly a chunk belongs to is decided only by the arriving connection and whether the identity the chunk carries matches.

Item Content
Shape Framework-internal wire record. No independent public type.
Public composition Carries the RelocationId, target attempt, chunk ordinal, and encoded length. The whole-payload checksum that validates the assembled result is carried by the Restore request, not by chunks.
Creation/management The source runtime splits the captured payload into pieces no larger than the effective chunk size. The effective size is the smallest of the server setting RelocationPayloadChunkLimit (default 256 KiB), the effective receive chunk bound announced by the target, and the effective in-flight payload budget.
Delivery Sent with [send] on the same ordered mesh connection after the Restore request. Not exposed in application messages.
Lifetime Core's byte charge ends when the complete chunk message is dequeued into the binding/framework. The target copies the chunk data into the assembly buffer, then releases the input message buffer under ordinary framework ownership. A missing or duplicate ordinal, a chunk of an already-ended attempt, or exceeding the declared length isn't added to the assembly and is treated as an explicit failure.
Application authority The application doesn't create, interpret, or change chunks.

In-Flight Payload Budget

The ceiling on the sum of relocation chunk bytes a source node is sending concurrently on one peer connection. Keeps a large payload from monopolizing the bandwidth of ordinary messages on the same connection. It limits concurrently in-flight bytes, not the total payload size, so a payload larger than the budget still starts and completes as its chunks flow in order.

Item Content
Shape Byte ceiling set by server settings. No independent public type.
Public composition The per-connection ceiling is set by RelocationInFlightPayloadBudget (default 16 MiB; 0 means not applied), and the node-wide ceiling by RelocationNodeInFlightPayloadBudget (default 0, not applied).
Creation/management The source runtime applies it per peer connection by observing the sum of relocation chunk charges the Core still accounts.
Delivery A source-local value; not carried on the wire.
Lifetime While the budget is full, a new relocation unit waits before the source admission seal is applied, and the next chunk submission of an already-started unit waits until room opens. Because the wait is before the seal, a waiting Actor or Spot keeps processing messages normally, and this wait isn't included in interruption-time measurement.
Application authority The application sets the values only through settings and doesn't change them per relocation.

Cutover Retransmission Window

The period after the cutover submit terminal during which the source keeps a copy of the pre-boundary relay batch and the cutover, and retransmits them on a new connection if the connection dropped and the cutover was lost. The target discards the partially received pre-boundary relay segment and atomically replaces it with the whole retransmitted batch. The window's length equals the server setting RelocationCutoverWaitTimeout (default 1,000 ms).

Item Content
Shape A framework-managed source-local period. No independent public type.
Public composition Its length is the single value equal to RelocationCutoverWaitTimeout.
Creation/management The source runtime starts it at the cutover submit terminal; the kept copy is framework memory that doesn't occupy the pipe, so it isn't counted against the in-flight payload budget.
Delivery Retransmission resends one batch; it isn't a per-message journal or ACK.
Lifetime Starts at the cutover submit terminal; when the window ends, the copy is cleaned up exactly once. Once the source is already cleaned up or terminated, retransmission is impossible.
Application authority The application doesn't observe or change the window. An orchestrator uses SafeToShutdown to confirm the shutdown-safe point, which includes the window's end.

SafeToShutdown

An observation value the source runtime publishes in its own host status for the relocation operations it started, after every unit has reached the point where its Message Follow route can be removed and each unit's retransmission window has ended. It isn't a completion ACK sent by the target or any other party. Both conditions are source-local events, so the decision doesn't use another node's clock.

Item Content
Shape A source-local observation value in host status. No independent public type.
Public composition Exposed through the host status query and change observation of Runtime monitoring.
Creation/management The source runtime publishes it after confirming that every relocation unit reached the point where its Message Follow route can be removed and that each unit's retransmission window ended. It's never published earlier.
Delivery Delivered only through the host status observation surface; not carried in relocation wire messages.
Lifetime After publication, a deployment orchestrator uses it to decide when to call Shutdown. Calling Shutdown before publication is still allowed; in that case the remaining Message Follow routes disappear with the transport, and requests from senders that cached the previous route can end with Unavailable.
Application authority The application only observes the value; it doesn't publish or change it.

Maintenance Wave

An application configuration value distinguishing a bundle of hosts that shouldn't be taken down together in the same maintenance operation. If the source's and target's maintenance wave are the same, that target is excluded from relocation candidates.

If the value isn't set, this exclusion rule doesn't apply. The framework compares the configured string as a whole, case-sensitively.

Drain and Draining

Drain is the process of closing admission for new application work in order to shut down a host, and cleaning up already-accepted work and infrastructure resources within a fixed time. While this process is in progress, the state is called draining or "in drain." Relocation — moving stateful objects to another host — is a separate operation; a host becomes Relocated when it succeeds.

Starting a drain doesn't immediately cut existing connections or cancel already-accepted work right away. Which new work is blocked and how long existing work continues to be processed depends on the component and the Shutdown stage. Relocate keeps processing existing application work until each unit's seal, and doesn't shut down the host even on success.

On a ClientServer Server, starting drain excludes it from target selection for new sends and requests and stops accepting new business messages. Already-accepted handlers and request replies are processed up to their deadline, and then descriptor, owner lease, and listener are cleaned up. Unlike weight 0, which only zeroes selection share while keeping the Server running, drain is a lifecycle procedure that completes shutdown.

Item Content
Shape Lifecycle process and closed state
.NET notation IZLinkFrameworkRuntime, ZLinkFrameworkRuntimeState, ZLinkFrameworkRuntimeEvent
Public composition Uses RelocateAsync, which takes a mode and the target application version specified; a separate ShutdownAsync; and host runtime state and deadline.
Lifetime Proceeds from the start of Shutdown to either normal cleanup or force-stop completion, preserving the deadline of already-accepted work.

Drain Deadline

The time allowed, after shutdown starts, to finish already-accepted work and lifecycle cleanup. Once shutdown starts, no new application payload is accepted.

Item Content
Shape Absolute lifecycle deadline
.NET notation DateTimeOffset Deadline; the drain-start API can also take a duration as TimeSpan?.
Public composition A single final time point fixed when drain starts.
Creation/management Computed by the framework from a caller-specified duration or a per-feature default.
Lifetime Shared by already-accepted work and lifecycle cleanup up to this point. Per-feature force-stop/fence rules apply after the deadline.

Metadata Snapshot

A small key-value payload delivered separately from the business payload. The framework fixes it as an immutable snapshot before providing it to the handler context. The actual copy timing and internal storage method aren't part of the public contract.

Item Content
Shape Immutable key-value snapshot
.NET notation ZLinkMessageMetadata and IReadOnlyDictionary<string, string>
Public composition A map of UTF-8 keys and values. NUL isn't allowed; encoded keys/values plus structural overhead total at most 1024 bytes.
Creation/management The application sets it on the outbound builder, and the framework fixes it as an immutable snapshot at submit. For the same key, the last value set applies.
Lifetime Valid until the handler turn ends. The application must copy it to keep it; request metadata isn't auto-copied to a reply.

ZLinkMessageMetadata's public surface is as follows.

public sealed class ZLinkMessageMetadata
{
    // builds an immutable metadata snapshot from the given key-values.
    public ZLinkMessageMetadata(
        IReadOnlyDictionary<string, string> values);

    public static ZLinkMessageMetadata Empty { get; } // a snapshot with no values

    // exposes the whole key-value set as an unmodifiable view.
    public IReadOnlyDictionary<string, string> Values { get; }

    public string? Find(string key); // returns null if the key isn't present.
}

6. RouteMesh and Channel Topology

Membership

Registration information stating that a node or Server participates in a specific Mesh or Channel. ChannelName Server membership includes the weight used for handler and target selection.

Item Content
Shape Composite topology registration
.NET notation No independent public type. Expressed via builder registration and monitoring's ZLinkMeshChannelSnapshot.
Public composition Includes MeshName, ChannelName, Client/Server role, and — when Server — the weight/handler namespace.
Creation/management Registered by the application in the startup builder; the framework reflects it into the descriptor and process-local channel index.
Lifetime Kept for the lifecycle of that MeshNode or ClientServer registration. Drain and weight changes only change selectability.

Channel Client and Server Role

The per-ChannelName registration roles of a RouteMesh.

  • Client role only registers the send path to start Channel calls.
  • Server role registers the send path plus remote target membership, and provides handlers and weight. A RouteMesh Server role also includes the Client's send capability.

The Client and Server of a ClientServer Channel share the names but are a different contract. The rule that a Server cannot start new business calls toward a Client is owned by ClientServer Channel §1.

Item Content
Shape Closed registration role
.NET notation Expressed by the RouteMesh builder's Client/Server registration methods. ZLinkClientServerRole of ClientServer monitoring follows the ClientServer Channel document.
Public composition Client registers only the send path; Server registers the send path plus target membership, handler namespace, and weight.
Creation/management The application registers at most once per role for the same ChannelName.
Lifetime Fixed during host startup configuration. Weight 0 or drain doesn't turn a Server into a Client role.

Weight

A relative share, 0..10000, deciding how often new work is assigned when choosing among several ready targets. It doesn't mean the number of concurrent jobs a target can handle, or its physical performance. For example, if two otherwise-equal targets have weight 100 and 50, repeated selection assigns twice the share to the target with 100.

0 excludes a target from new select-one and Logical Multicast remote target selection, but doesn't cancel already-submitted work. Setting weight to 0 alone doesn't put the target into drain state or start a shutdown procedure. Raising weight back up while running lets a target satisfying other conditions become a candidate again.

Item Content
Shape Relative selection weight
.NET notation int
Public composition A single integer in 0..10000; the default is 100. A value outside the range is a configuration error, both at startup and at runtime change.
Creation/management Specified by the application at Server registration and changed via an allowed runtime API. Descriptor revision orders the changes.
Lifetime Kept for the Server's lifecycle. 0 only excludes it from new selection — it doesn't remove the role, connection, or already-submitted work.

Node placement, RouteMesh Channel Server, and ClientServer Server use the same range and default. Weighted selection computes the candidate weight sum using at least a 64-bit integer. Logical Multicast includes an eligible remote member exactly once, regardless of the magnitude of its positive weight.

Full Mesh

The topology that directly connects MeshNode pairs that need to exchange messages within the same MeshName. With N nodes, each node manages at most N-1 peer connections. If both nodes are Object Client and neither has RouteMesh Channel Server membership, they aren't connected, so the actual connection count can be lower than this cap.

Item Content
Shape RouteMesh connection topology
.NET notation Configured via IZLinkMeshNodeBuilder.PeerConnections and observed via ZLinkMeshNodeSnapshot.Peers.
Public composition The set of direct peer connections for pairs that need one, among the MeshNodes sharing a MeshName. Only excludes pairs where both sides are Object Client with no RouteMesh Channel Server membership.
Lifetime Reconciled based on MeshNode join/leave and readiness; each connection has its own independent lifecycle.

Peer Admission

The process of checking a connected remote node's MeshName, RID, lifecycle, descriptor, object role, and security identity to decide whether to accept it as a ready peer connection. For a manual connection, if both sides are Object Client with no RouteMesh Channel Server membership, a terminal admission result indicating that the connection isn't needed is recorded, and the socket is closed before becoming ready.

Item Content
Shape Transport validation process
.NET notation No independent public result type. Peer state is observed via ZLinkPeerStatus.State, distinguishing connection failure NotConnected from normal omission NotRequired.
Public composition Made of MeshName, RID, lifecycle generation, object role, descriptor condition, protocol capability, and security identity verification.
Lifetime Performed for every new connection. For the same manual endpoint and configuration generation, a result that ended as an Object Client pair with no Server membership isn't retried until the connection configuration changes.

NotRequired means both nodes are Object Client and neither has RouteMesh Channel Server membership, so no connection is needed. This peer is still shown in public monitoring but excluded from ready/liveness/health failure aggregation. NotConnected means a connection is needed but no ready connection exists, and it's reflected in failure aggregation.

Authenticated Peer

A peer whose identity on the current connection the transport has verified during Peer admission. The term identifies the sender of a received message; it does not mean that the runtime is ready to send new messages to that peer.

Session-Actor Binding §8.1 defines the validation checks and their boundaries.

Item Content
Form and management The peer identity verified by the runtime's existing peer admission. No separate public type is defined.
Validity While the identity verification remains valid for the current connection. Wire §4 governs admission and connection replacement.
Application authority Applications do not directly set or change the identity verification result.

Admitted Peer

A remote peer accepted as a current peer connection through Peer admission. MeshNode §7.1 governs the end of the peer lifecycle, and §7.3 governs eligibility as an outbound target.

Lifecycle Generation

A value distinguishing a previous run from the current run when the same logical server or listener restarts. Used so a late frame or reply from a previous generation isn't applied to the current connection.

Item Content
Shape A non-zero opaque equality token. Execution order isn't judged by numeric magnitude.
.NET notation ulong LifecycleGeneration
Public composition A single non-zero generation value. A restarted run at the same endpoint uses a new value different from the previous one.
Creation/management The framework determines the value to use for each new listener/server lifecycle. Issued values stay within the wire nonzero-u64 range 1..long.MaxValue (2^63-1) — values using the top bit of a full-width ulong must not be issued. Receivers compare only whether the values are equal.
Lifetime Kept until that run ends. The remote compares the descriptor's and transport admission's values for equality.

Descriptor

Registration information a remote runtime publishes so its endpoint, identity, Channel membership, weight, and state can be discovered. RouteMesh, ClientServer, and fanout each use a different kind of descriptor. Descriptor is a generic term for this registration information; the actual documents specify which topology's information it is — MeshNode descriptor, ClientServer Server descriptor, fanout publisher descriptor.

Item Content
Shape The parent concept of a discovery record
.NET notation No common base type; split into ZLinkMeshNodeDescriptor, ZLinkClientServerServerDescriptor, ZLinkFanoutPublisherDescriptor.
Public composition Commonly has identity, lifecycle, advertised endpoint, state, and the current owner lease; each per-topology field is defined by its own descriptor entry.
Lifetime An ephemeral record tied to a host owner lease.

MeshNode Descriptor

A RouteMesh-specific registration a MeshNode publishes to the Location Store in automatic discovery, to tell other nodes its identity and connection information. Not a general object description — it's the framework contract a remote MeshNode uses to find and verify peer connection candidates.

A MeshNode descriptor includes the following information.

  • MeshName and RID
  • Lifecycle generation and descriptor revision
  • The actual advertised ROUTER endpoint to connect to
  • The Server ChannelName set and per-Channel weight
  • Object role, one of None, Client, Server
  • The security identity used to verify the connecting peer
  • Protocol version and required capabilities
  • If this is an Object Server, the Entry Spot ID issued in the same lifecycle
Item Content
Shape Composite discovery record
.NET notation ZLinkMeshNodeDescriptor; key is ZLinkMeshNodeDescriptorKey
Creation/management The MeshNode runtime publishes this to the Location Store after listener bind and admission info are confirmed, and refreshes it via the owner lease.
Lifetime An ephemeral record tied to the host owner lease. A new lifecycle publishes a descriptor with a new generation.
public sealed record ZLinkMeshNodeDescriptor(
    string MeshName,                              // RouteMesh namespace
    RoutingId Rid,                               // MeshNode transport identity
    ulong LifecycleGeneration,                   // the current MeshNode run
    ulong DescriptorRevision,                    // change order within the same lifecycle
    string Endpoint,                             // the actual advertised ROUTER endpoint
    string? EntrySpotId,                        // Entry Spot ID for the Object Server lifecycle
    IReadOnlyDictionary<string, int> ChannelWeights, // per-Server-Channel selection weight
    string SecurityIdentity,                     // transport peer admission identity
    string OwnerId,                              // the host owner that published the descriptor
    long LeaseGeneration,                        // host process lifecycle fence
    DateTimeOffset UpdatedAt)                    // when the Store recorded the update
{
    public long ApplicationVersion { get; init; } // application deployment sequence number

    // object kind/stable type/policy/placement capability
    public IReadOnlyList<ZLinkObjectCapability> ObjectCapabilities { get; init; }
        = Array.Empty<ZLinkObjectCapability>();

    public string? MaintenanceWave { get; init; } // optional maintenance wave stable ID
    public ZLinkFrameworkRuntimeState State { get; init; } // runtime state
    public ZLinkMeshNodeObjectRole ObjectRole { get; init; } // Object Client/Server role
    public int PlacementWeight { get; init; } = 100; // object placement selection weight

}

public readonly record struct ZLinkMeshNodeDescriptorKey(
    string MeshName, // RouteMesh namespace
    RoutingId Rid);  // MeshNode transport identity

A descriptor's capacity information is a projection that separately tracks active/ reserved count and configured limit for Actors overall, User/Instance Spots overall, and per Spot stable type. It doesn't use a single combined active-object cap of 10,000. Limit 0 means no limit, and Entry Spot isn't counted in Spot capacity. Descriptor values are only used to quickly filter candidates — actual slot acquisition is confirmed by the Location Store's atomic reservation.

A remote MeshNode checks the endpoint and Object role from this registration information. If both descriptors' Object role is Client, an automatic connection intent isn't created. For every other pair, the actual transport handshake must also re-verify that MeshName, RID, lifecycle generation, Object role, and security identity match the registration information, before completing peer admission.

ClientServer Server, fanout publisher, and Spot/Actor location aren't recorded in the MeshNode descriptor. Each feature uses its own descriptor or location record.

ClientServer Server Descriptor

Registration information a Server publishes to the Location Store in ClientServer Channel automatic discovery, to tell Clients its identity, connection location, and selection state. The Server publishes this together with an owner lease.

Includes the following information.

  • ChannelName
  • Server RID and lifecycle generation
  • The actual advertised endpoint to connect to
  • Weight and drain state
  • Descriptor revision
Item Content
Shape Composite discovery record
.NET notation ZLinkClientServerServerDescriptor; key is ZLinkClientServerServerDescriptorKey
Creation/management The ClientServer Server runtime publishes listener and selection state to the Location Store and refreshes it via the owner lease.
Lifetime An ephemeral record tied to the host owner lease. A listener restart uses a new lifecycle generation.
public sealed record ZLinkClientServerServerDescriptor(
    string ChannelName,                 // the service Channel Clients look up
    RoutingId ServerRid,                // Server identity
    ulong LifecycleGeneration,          // the current Server run
    ulong DescriptorRevision,           // weight/drain-state change order
    string Endpoint,                    // the actual advertised endpoint
    int Weight,                         // relative selection share for new requests/sends
    ZLinkFrameworkRuntimeState State,   // runtime state such as serving/draining
    string SecurityIdentity,            // transport admission identity
    string OwnerId,                     // the host owner that published the descriptor
    long LeaseGeneration,               // host process lifecycle fence
    DateTimeOffset UpdatedAt);           // when the Store recorded the update

public readonly record struct ZLinkClientServerServerDescriptorKey(
    string ChannelName,   // ClientServer Channel
    RoutingId ServerRid); // Server identity

The owner lease proves, by renewing on a fixed schedule, that the Server still has the right to keep using this registration information.

The Client looks up the endpoint from valid registration information for the same ChannelName. The actual transport connection must also re-verify that Server identity, lifecycle generation, and security identity match the registration information before using it as a ready target.

MeshName, RouteMesh membership, and Spot/Actor location aren't recorded in the ClientServer Server descriptor. ClientServer discovery also doesn't substitute the MeshNode descriptor for this.

Fanout Publisher Descriptor

Registration information a publisher publishes to the Location Store in Classic fanout automatic discovery, to tell subscribers its identity and PUB endpoint. Includes ChannelName, Publisher RID, lifecycle generation, and advertised endpoint.

Item Content
Shape Composite discovery record
.NET notation ZLinkFanoutPublisherDescriptor; key is ZLinkFanoutPublisherDescriptorKey
Creation/management The publisher runtime publishes this to the Location Store after PUB listener bind, and refreshes it via the owner lease.
Lifetime An ephemeral record tied to the host owner lease. A new generation is used when the publisher lifecycle changes.
public sealed record ZLinkFanoutPublisherDescriptor(
    string ChannelName,                // fanout Channel
    RoutingId PublisherRid,            // publisher identity
    ulong LifecycleGeneration,         // the current publisher run
    ulong DescriptorRevision,          // change order within the same lifecycle
    string Endpoint,                   // the advertised PUB endpoint subscribers connect to
    ZLinkFrameworkRuntimeState State,  // publisher runtime state
    string SecurityIdentity,           // connection admission identity
    string OwnerId,                    // the host owner that published the descriptor
    long LeaseGeneration,              // host process lifecycle fence
    DateTimeOffset UpdatedAt);          // when the Store recorded the update

public readonly record struct ZLinkFanoutPublisherDescriptorKey(
    string ChannelName,      // fanout Channel
    RoutingId PublisherRid); // publisher identity

A subscriber only looks up publisher descriptors for the same fanout ChannelName. It doesn't use a MeshNode or ClientServer Server descriptor as fanout connection information. It creates a separate SUB socket per publisher endpoint and judges each connection's ready and liveness independently.

Descriptor Revision

A monotonically increasing number, starting at 1, marking the version of mutable descriptor information — like weight or drain state — within the same lifecycle. Current state is never rolled back to a lower revision.

Item Content
Shape Monotonic revision
.NET notation ulong DescriptorRevision
Public composition A single integer of at least 1. Compared together with lifecycle generation.
Creation/management Incremented by the descriptor owner whenever it changes public state within the same lifecycle.
Lifetime Ordering is compared only within that lifecycle. A new lifecycle's revision isn't directly compared to a previous lifecycle's value.

Automatic Discovery

A way of finding a remote endpoint and identity by querying descriptors published to the Location Store. After finding the descriptor, identity and lifecycle generation must also be verified on the actual transport connection before it's used as a ready target.

Item Content
Shape Descriptor-based discovery process
.NET notation Used via IZLinkLocationStore registration and topology builder configuration that omits an endpoint.
Public composition Made of the stages: descriptor query, excluding Object Client pairs with no Server membership, desired-set reconcile, transport connect, and identity/lifecycle admission.
Lifetime Repeated by the host runtime for the duration of store polling and connection lifecycle.

Manual Endpoint

A way of directly registering a remote endpoint through application configuration. The endpoint alone isn't trusted — the actual connection's identity and configuration condition are re-verified.

Item Content
Shape Application-provided endpoint configuration
.NET notation Specified as a string on each topology builder's Listen(string), manual peer, or subscriber endpoint method.
Public composition Made of the remote endpoint and the expected-identity condition the topology requires. A pair where both sides are Object Client with no RouteMesh Channel Server membership is excluded from handshake admission before becoming ready.
Lifetime Fixed during host startup configuration. Reconnecting a pair that needs a connection re-runs transport admission. A pair excluded under the same endpoint and configuration generation isn't reconnected until the configuration changes.

Ready Target

A target where the listener, transport connection, identity check, and required handler registration are all finished, so it can receive new messages.

Item Content
Shape Selectable runtime target state
.NET notation ZLinkMeshPeerSnapshot.Ready, ZLinkClientServerServerSnapshot.Ready, and per-feature state enums
Public composition Transport is ready, identity/lifecycle checks passed, and required handler/role conditions are met. A select-one candidate must also satisfy positive weight and non-draining.
Lifetime Immediately excluded from new target selection once any condition closes.

MaxMessageSize

The byte cap on the complete transport message a listener can receive. A message exceeding the cap doesn't have any partial payload delivered to the handler. A regular application listener uses the value owned by its socket options. A StreamNode has a separate rule for its Core STREAM inbound path.

For a StreamNode, MaxMessageSize checks a complete message received from client to server. Its size is the sum of header bytes and payload bytes, excluding the 6-byte prefix. The default is 64 KiB (65,536 bytes).

0 adds no separate Framework cap and maps to Core ZLINK_OPT_MAXMSGSIZE = -1. A positive value is finite, and a negative value is a startup configuration error.

This cap isn't applied to a message sent from server to client.

An over-limit message isn't partly delivered to the session handler; the server records EMSGSIZE and closes the connection. A raw client receives no separate error code and observes only the connection closing.

Item Content
Shape Byte-size configuration limit
.NET notation long MaxMessageSize for a regular socket, and MaxMessageSize(long bytes) on a StreamNode builder.
Public composition Applies to the complete message received by the socket owner. A regular socket's 0 uses its binding or transport default; a StreamNode's 0 maps to Core -1.
Creation/management The application sets it in the listener or StreamNode socket options before startup.
Lifetime Fixed for the listener lifecycle; the StreamNode value is fixed after startup. Framework doesn't add the StreamNode-specific cap to ClientServer listeners or RouteMesh SS transport; ClientServer keeps its regular application-listener rule.

7. Channel Messaging

Node Direct

A way for the caller to specify both MeshName and a target RID to send a message to a specific MeshNode. The framework doesn't substitute a different node for the specified RID. Object Client can't register an application Node direct handler, so it isn't a Node direct target.

Item Content
Shape Explicit node-addressed messaging surface
.NET notation IZLinkRouteClient's node-direct send/request calls
Public composition Built from MeshName, a target RoutingId that isn't Object Client, typed payload, and optional metadata/timeout.
Lifetime A single-use call; doesn't switch to a different node if no route exists for the specified RID.

Select-One

A way of choosing one Server, among several ready Servers participating in a ChannelName, to receive the current call. Reflects weight, ready, and drain state together, and submits the message to the selected target within the same operation.

Item Content
Shape Atomic target selection and submit operation
.NET notation Internal behavior of the Channel send/request call builder; doesn't return the selected Server identity as an intermediate result.
Public composition Made of the process-local ChannelName route, the eligible ready target snapshot, and weight/drain filters.
Lifetime Ends once a single target is selected and the message is submitted within one submit operation.

Handler Namespace

A scope distinguishing which handler registration scope to look up the same packet name in. Node direct and ChannelName handlers use different namespaces.

Item Content
Shape Composite handler lookup scope
.NET notation No independent public type. Distinguished by handler registry and context type.
Public composition Node direct uses MeshName, message kind, and packet name; Channel handlers use ChannelName, message kind, and packet name.
Creation/management The framework builds an index from startup handler registration.
Lifetime Kept for the host handler registry's lifecycle; the same key can't be registered twice within the same namespace.

Message Kind

A value distinguishing which processing style a message uses — send, request, or publish. Used together with ChannelName or MeshName and packet name when looking up a handler.

Item Content
Shape Closed message category
.NET notation Distinguished by handler type; monitoring uses ZLinkDispatchMessageKind.
Public composition A single category — Send, Request, Publish — each with a different completion/reply style.
Creation/management Determined by the framework from the send/request/publish surface that was called.
Lifetime Unchanged for the duration of the message envelope and handler lookup.

Packet Name

The message name selecting a typed handler within the same handler namespace. A handler with the same message kind and packet name can't be registered twice in the same namespace.

Item Content
Shape Typed handler selector
.NET notation The default name is a string the framework determines from the message type. In the Stream Connector, IZlinkStreamSendCall.PacketName(string) and IZlinkStreamRequestCall.PacketName(string) can specify a per-call name.
Public composition A single name compared within a handler namespace and message kind. Doesn't include payload bytes or correlation.
Creation/management Fixed by the framework at typed message registration. The application can specify a per-call name when the given public contract allows an override. Codec doesn't determine packet name.
Lifetime Must stay stable for that message and handler registration.

Liveness and Liveness Beacon

Liveness checking is the action of confirming whether signals from a connected peer keep arriving within a fixed time, to judge whether a connection can be kept in a Ready state. It isn't a feature that confirms application-message handler execution or business processing success.

Liveness beacon is an internal message the runtime periodically sends so a unidirectional connection's liveness can be checked. Classic fanout's connection-status-checking topic and beacon aren't exposed to application publish or handlers.

Item Content
Shape A two-frame internal multipart record
.NET notation No public type
Public composition Exactly two frames: the topic frame 01 5A 4C 46 31 and the payload frame 5A 46 01 01.
Creation/management Sent by the fanout publisher runtime every 5 seconds, independent of application publish.
Lifetime The subscriber processes only a record matching the defined format as a liveness signal. If the topic matches but the payload or frame count differs, it's a protocol error and isn't delivered to an application handler.

8. ClientServer Channel

ClientServer Channel

A unidirectional service boundary where the Client initiates sends and requests and the Server handles execution and reply. The Server doesn't start new business calls targeting the Client. One process can register a Client and a Server each once for the same ChannelName. Monitoring's client_and_server is a snapshot expression meaning both registrations exist together — it isn't a separate builder role.

Item Content
Shape Client-initiated service topology
.NET notation IZLinkClientServerChannelRoleBuilder, IZLinkClientServerRuntime, ZLinkClientServerChannelSnapshot
Public composition Made of ChannelName, Client/Server registration, Server descriptor/connection set, handler namespace, and select-one state.
Lifetime Kept for the host registration lifecycle; Client and Server roles are each registered at most once.

Server Identity

A value identifying a specific Server run in a ClientServer connection. Checked together with lifecycle generation so a stale connection from before a restart isn't used as a new target.

Item Content
Shape Composite identity of Server RID and lifecycle
.NET notation ZLinkClientServerServerDescriptorKey(ChannelName, ServerRid) and ulong LifecycleGeneration
Public composition Used together: ChannelName, RoutingId Server RID, and lifecycle generation. Endpoint isn't part of identity.
Creation/management Fixed by the Server runtime at the start of the listener lifecycle, and provided identically to the descriptor and transport admission.
Lifetime Valid for that Server's lifecycle. A restart uses a new lifecycle generation, even at the same endpoint.

Reply Token

A capability the Framework provides to reply once to the current request. A typed handler's reply return and an explicit STREAM Reply call use this capability through different surfaces.

Item Content
Shape One-shot reply capability
.NET notation No independent token type. Used through a typed request handler's reply return or the STREAM context's Reply(...) call.
Public composition An opaque capability tied to the current request correlation. The internal handle and route are not public.
Creation/management The Framework associates it with request dispatch. Conversion of typed handler completion into a reply and explicit STREAM reply submission follow their respective surface contracts.
Lifetime The typed handler capability closes on the first terminal reply, error, or request cancellation/timeout. Submit and completion §8 owns STREAM token consumption and the responder admission deadline; the typed-handler lifetime statement does not apply to STREAM.

Downstream Request

A new request a handler sends to a different RouteMesh, ClientServer Channel, Spot, or Actor while it's processing the original request. Uses a different correlation than the original request.

Item Content
Shape A handler-originated independent request
.NET notation That target surface's IZLinkRequestCall, IZLinkSpotRequestCall, or IZLinkActorRequestCall
Public composition Made of a new target, typed payload, new reply correlation, and optional metadata/timeout.
Lifetime Has terminal completion independent of the original request; its result doesn't get folded back into the original correlation.

Owner Lease

Information proving, by renewing on a fixed schedule, that a framework host still has the right to keep using the current lifecycle's registration information and object ownership. The same host token fences MeshNode/ClientServer Server/fanout publisher descriptors, automatic RID claims, Actor/Spot authority, and maintenance role.

Item Content
Shape A composite lease record of an owner token and expiry
.NET notation ZLinkLocationOwnerToken, ZLinkOwnerLeaseReadResult.Found
Creation/management The Location Store provider issues a generation on claim, and the host renews it on a fixed schedule.
Lifetime Valid until LeaseExpiresAt. Stale if the stored owner token differs or the store-relative expiry has passed.

Owner identity is bundled into the following ZLinkLocationOwnerToken.

public readonly record struct ZLinkLocationOwnerToken(
    string OwnerId,         // host owner identity
    long LeaseGeneration);  // process lifecycle fence for the same OwnerId

ZLinkOwnerLeaseReadResult.Found, the result of reading the lease, returns the token and timestamp together.

public abstract record ZLinkOwnerLeaseReadResult
{
    private protected ZLinkOwnerLeaseReadResult() { }

    public sealed record Found(
        ZLinkLocationOwnerToken Token, // the current owner identity and generation
        DateTimeOffset LeaseExpiresAt, // store-relative expiration time
        DateTimeOffset StoreNow)       // provider-relative time used to judge expiry
        : ZLinkOwnerLeaseReadResult;

    public sealed record Missing : ZLinkOwnerLeaseReadResult;
}

Fencing Deadline

The final time point by which a Server that failed to renew its owner lease must stop accepting new business messages.

Item Content
Shape Absolute lease-derived deadline
.NET notation No public standalone type. The computed result is a DateTimeOffset time point.
Public composition A single time point reflecting the fencing margin against the last valid owner lease deadline.
Creation/management Computed by the framework from the last confirmed valid lease and location options.
Lifetime Refreshed whenever a new valid lease is confirmed. Once the deadline is reached, new business admission closes regardless of Store failure grace.

9. Network Listener

Network Listener

A transport component in the current process that binds a network endpoint and accepts remote connections.

Item Content
Shape Runtime transport component
.NET notation Process default is IZLinkNetworkOptions; listeners are configured by the RouteMesh/ClientServer/fanout/STREAM builders.
Public composition Has BindHost, a configured or allocated port, AdvertiseHost, the actual advertised endpoint, and topology identity.
Lifetime Kept from a successful bind until the listener is closed via drain/shutdown.

BindHost

The address specifying which local network interface on the current host a listener accepts connections on. A wildcard address can be used.

Item Content
Shape Host/address configuration value
.NET notation string
Public composition A single host name or IP address. The process default is 127.0.0.1.
Creation/management Specified by the application, either the process default or a listener override.
Lifetime Fixed before the listener binds. 0.0.0.0 and :: can be used but aren't emitted as the remote advertised address.

AdvertiseHost

The host or address a remote process actually uses to connect to the listener. A wildcard address that doesn't pin down where the remote should connect can't be used.

Item Content
Shape Host/address configuration value
.NET notation string
Public composition A single host name or IP address resolvable from the remote side.
Creation/management Specified by the application, or the framework uses the same host as a non-wildcard BindHost.
Lifetime Fixed before the descriptor is published. A listener restart with a changed value uses a new lifecycle generation.

Wildcard Address

A bind address, like 0.0.0.0 or ::, that accepts connections on multiple local network interfaces. Usable for local BindHost but not for AdvertiseHost.

Item Content
Shape Special bind address value
.NET notation string
Public composition Matches IPv4 0.0.0.0 or IPv6 :: byte-for-byte.
Lifetime Usable only as local bind input; can't remain in the descriptor or a manual remote endpoint.

Advertised Endpoint

The connection address provided to a remote process, combining AdvertiseHost with the actual bound port. Can't be left with a wildcard host or port 0.

Item Content
Shape A composite connection address of host and port
.NET notation Public descriptors use string Endpoint
Public composition AdvertiseHost + actual bound port. Additional format, such as a URI scheme, is defined by that transport's contract.
Creation/management Fixed by the framework after reading the actual port from the listener bind, and recorded into the per-topology descriptor.
Lifetime Kept for the listener's lifecycle. Published with a new lifecycle generation if the host or actual port changes.

Routing ID

A byte value identifying a MeshNode within the same RouteMesh. In automatic discovery, the framework generates a new value per lifecycle; in manual topology, an explicit fixed RID can be used.

Item Content
Shape Opaque byte identifier
.NET notation RoutingId
Public composition A full RID is at most 255 bytes. Core's raw-socket automatic RID is a 16-byte binary UUID v4. The framework's automatic RID, which provides a diagnostic prefix, is made of a prefix plus a 36-character lowercase canonical UUID v4.
Creation/management Generated by the framework per lifecycle in automatic mode. On an active conflict, it doesn't generate a new UUID or a second claim. In manual topology, the application can specify a fixed RID.
Lifetime Unchanged for a MeshNode's lifecycle. A replacement lifecycle uses a new Automatic RID even at the same endpoint.

Transport RID and Spot ID issuance format and namespace boundaries follow the system-wide Routing ID policy.

Routing ID Prefix

A diagnostic string prepended to an automatic MeshNode RID. Not used as application identity, placement, shard, or a host name that survives a restart.

Item Content
Shape Optional diagnostic string
.NET notation string?
Public composition ASCII [A-Za-z0-9._-], 1-64 characters. The framework builds prefix-<lowercase-canonical-uuid-v4>.
Creation/management Specified by the application in startup configuration and used by the framework when generating an Automatic RID.
Lifetime Used only for that RID's generation. Not interpreted as a stable application identity or placement key.

CSPRNG

A cryptographically secure pseudo-random number generator whose next value is hard to predict. The framework uses the platform's cryptographic random API to generate the random bits of a UUID v4.

Item Content
Shape Framework-internal randomness capability
.NET notation No public framework type. The implementation uses the platform's cryptographic random API.
Public composition Generates the random bits of a UUID v4, excluding the version/variant bits. The UUID's public representation is a lowercase canonical string, or Core's 16-byte binary value.
Lifetime Generates a new value per RID-generation operation; doesn't expose random state to the application.

RoutingIdConflict

The result of confirming, when claiming a framework-auto-issued RID, that an active identity is already using it. A UUID collision isn't treated as a normal operating condition, so a new UUID isn't generated and retried.

Item Content
Shape Startup configuration failure
.NET notation ZLinkConfigurationException
Public composition Provides a description that an active transport descriptor owner claim conflicted. Doesn't include the conflicting owner token.
Lifetime Ends that startup operation with a terminal failure; doesn't generate a new UUID within the same operation.

SpotIdConflict

The result of confirming that an Entry/User/Instance Spot identity claim is already in use within the global Spot ID namespace. The framework doesn't overwrite the existing claim or retry the same operation with a new UUID.

Item Content
Shape Startup or create failure
.NET notation Startup uses ZLinkConfigurationException; exclusive create uses ZLinkFrameworkErrorKind.AlreadyExists
Public composition Describes that a global Spot ID claim conflicted. Doesn't include the conflicting owner token.
Lifetime Ends that startup or create operation with a terminal failure.

10. STREAM Session and Actor Binding

STREAM Session

A server-side execution unit kept from accepting one STREAM client connection until it closes. Typed packet handlers, request correlation, backpressure, and close handling are all tied to this unit.

Item Content
Shape Runtime session object
.NET notation IZLinkSession; context is IZLinkSessionContext
Public composition The context provides SessionId, an optional RoutingId, local/remote address, an outbound client, Actor binding, and a handler registry.
Creation/management The framework creates a session instance and runs lifecycle callbacks when accepting a STREAM connection.
Lifetime Kept from accepting the connection until disconnect/close finishes. A reconnection doesn't reuse the previous session identity or binding state.

Binding Token

A value identifying the binding between an Actor and the current STREAM session, and distinguishing late-arriving work from a previous session after a reconnect.

Item Content
Shape Opaque one-binding token
.NET notation Not exposed to the application as an independent public scalar type. The binding API owns the internal token.
Public composition A single opaque token. Internal encoding isn't part of the public contract. The binding relationship is verified together with the bound ActorRef, current authority/lease generation, session identity, and binding generation.
Creation/management Issued as a new token by the current Actor owner on a successful bind or rebind.
Lifetime Invalidated by rebind, unbind, session close, or a generation change. A previous token can't be used for dispatch/reply/push/close.

Binding Route

The current Actor owner delivery path a session owner keeps for a specific Actor binding. On a successful bind, a route built from the verified ActorRef location is stored, and relay/disconnect notification and Actor push use this stored route. The route isn't re-selected by re-querying the Location Store on every message.

The Location Store and Relocation Store don't store or update the binding route. The procedure by which the target requests a route update during Actor relocation, which Actor's route changes, and the conditions under which other Actors' routes and connections are kept, are owned by Session And Actor Binding "8. The Session's Responsibility During Actor Relocation".

Session Actor Location Update

Command 44 route update that the target runtime sends to the Session owner as [send] after the Location Store CAS and target queue opening. The Session owner uses this update to change the binding route and submit messages held during the seal. There is no reply, and reserved command 45 sessionRelocationRouted is neither sent nor accepted.

Command 44's precise fields, timeout, abort handling, and the Message Follow condition are owned by Session And Actor Binding "8.2 Control Messages 42, 43, 44".

Binding Generation

An owner-local value distinguishing the order in which a binding was replaced within the same session owner process lifecycle. Not compared in magnitude against a different owner's or a restarted process's value.

Item Content
Shape Owner-local monotonic generation
.NET notation A ulong contract value not exposed directly to the application
Public composition A single generation value of at least 1. Binding identity also uses the session owner node RID and node lifecycle generation together.
Creation/management Incremented by the session owner following bind/rebind order.
Lifetime Compared only within the same session owner process lifecycle. Values from a different owner or process lifecycle aren't compared in magnitude.

AuthorityOwnerGeneration

A provider-issued value indicating the order in which the authority owner changed within the same object incarnation. Different from ObjectGeneration, which distinguishes whether an object was re-created after deletion.

Item Content
Shape Provider-issued monotonic generation
.NET notation ulong AuthorityOwnerGeneration
Public composition A single integer in the range 1..long.MaxValue.
Creation/management Issued by the Location Store provider's global durable counter on initial reserve and on a NewOwner transition.
Lifetime A new value is used when the owner changes within the same ObjectGeneration. Doesn't wrap at the maximum value — fails with GenerationExhausted instead.

OwnerLeaseGeneration

A provider-issued value distinguishing the host process lifecycle the current object owner belongs to. Prevents work from a previous process, under the same owner identity, from being accepted as current work after a restart.

Item Content
Shape Provider-issued owner lifecycle generation
.NET notation long OwnerLeaseGeneration; in an owner token it's ZLinkLocationOwnerToken.LeaseGeneration
Public composition A single positive generation value that, together with OwnerId, forms the owner token.
Creation/management Issued by the Location Store provider on a new owner lease claim.
Lifetime Kept for that host process owner lease's lifecycle. A restart under the same OwnerId uses a new value.

Session Sequence

A value representing the order of ingress messages accepted on one STREAM session. Actor handoff doesn't use it as a cutover high-water. The Session owner holds messages arriving after seal, while ordered TCP relay provides pre-cutover order between source and target.

Item Content
Shape Per-session monotonic sequence
.NET notation A ulong contract value not exposed directly to the application
Public composition A single ingress-order value in the range 1..long.MaxValue. A separate axis from binding generation.
Creation/management Incremented by the session owner in the order ingress messages are accepted.
Lifetime Compared only within one STREAM session. It isn't owner-transition evidence for relocation.

11. Stream Connector

Stream Connector

A client library that connects to the server framework's STREAM model to exchange packets. Distributed separately from the server framework package, providing transport, codec, reconnect, and dispatch suited to the client's execution environment.

Item Content
Shape Client runtime component
.NET notation IZlinkStreamConnector, ZlinkStreamConnectorFactory, ZlinkStreamConnectorOptions
Public composition Provides connection lifecycle, typed send/request, wait/handler registration, a pending dispatch queue, and runtime events.
Lifetime Kept from factory creation through Close and DisposeAsync completion.

Stream Packet

A STREAM transport unit combining header information — message kind and an optional packet name — with a payload. The header also includes the value linking a request to its reply.

Item Content
Shape Binary frame with a composite header
.NET notation No public raw-packet type. The .NET Connector wraps it with typed send/request calls and ZLinkMessage-family values.
Creation/management Encoded/decoded by the connector runtime; the application doesn't directly assemble or modify the header.
Lifetime Kept for the duration of sending/receiving one STREAM transport frame and matching a pending request.
Wire composition Format
Frame prefix u16 header_len, u32 payload_size
Fixed header format_marker = 0xF2, kind u8, codec u8, flags u8
Request sequence request_seq u64 when the flag is set; 0 isn't used.
Packet name u8 name_len + UTF-8 bytes, at most 255 bytes. Length 0 for Response and Error.
Metadata u16 meta_len + encoded metadata when the flag is set
Correlation ID u8 length + ASCII bytes when the flag is set
Flow A 36-byte flow_id and a 1-byte flow_origin are both present when the flag is set.
Payload payload_size bytes following the header

Every multi-byte integer uses network byte order.

Dispatch Mode

A Connector setting deciding whether receive callbacks run automatically in the receive loop, or are explicitly pumped in an application-specified context. Game engines default to Manual because of main-thread constraints.

Item Content
Shape Closed Connector execution mode
.NET notation The current common .NET per-language interface has no independent public enum. As C# contract pseudocode it's the two values Manual and Immediate.
Public composition Manual has the application explicitly pump the dispatch queue; Immediate runs the callback inline on the receive path.
Creation/management Specified by the application in Connector options; a game engine's default is Manual.
Lifetime Kept for the Connector instance's configuration.

Foundation topic table of contents · Spec table of contents · Previous: 01. Public Contract Governance · Next: 03. Framework Overview