duration: "streaming"; the action is the channel’s anchor — grants, envelopes, lifecycle, preemption, and audit all apply through it. The action is best read as a mode switch (“enter servo control”), and the frames as data within that mode.
Fragment (illustrative) of a manifest declaring one command channel and its anchoring action; the complete, validated manifest is examples/v0.1/world-manifest-servo.json:
- Command channels are gated on the
command_channelscapability, declared in the manifest’s top-levelcommand_channelslist using the standard channel schema, and available only in the streaming time model.[AWP-CMD-001] - Every action schema naming a
command_channelMUST declareduration: "streaming"and reference a declared command channel; a granted streaming action type implies access to its bound channel, whosechannel_idis assigned insession.readylike any other.[AWP-CMD-002] - Frames are accepted on a command channel only while exactly one bound action is
executing; worlds MUST discard frames received outside such a binding.[AWP-CMD-003] - A streaming action never completes on its own: it remains
executingwhile the stream is live and reaches a terminal state only viaaction.cancel(safe abort per AWP-LIF-005, thencancelled, closing the channel), preemption, failure, or deadline.deadline_ms, when given, bounds the total stream lifetime and is binding.[AWP-CMD-004] - Streaming action types MUST declare
watchdog_ms. If no valid frame arrives withinwatchdog_mswhile the action isexecuting, the world MUST apply the type’s safe-abort behavior and fail the action with reasonwatchdog.[AWP-CMD-005] - Every inbound frame MUST be envelope-checked world-side before actuation (AWP-ENV-001):
clampexecutes at the limit;rejectdrops the frame. Persistent violations MAY fail the action with reasonenvelope.[AWP-CMD-006] - Frames carry the standard frame envelope with per-channel monotonically increasing
seqandts_mono_nsas the setpoint’s issue time on the session clock (AWP-CLK-009); worlds MUST apply frames inseqorder and, onlatest-winschannels, MUST drop a frame older than the last applied one.[AWP-CMD-007] - The audit log records inbound frames — payload or SHA-256 hash plus header — exactly as observation frames.
[AWP-CMD-008]
executing, progress is not meaningful and MAY be omitted; status updates SHOULD instead carry a stream object ({ frames_applied, last_seq, clamped_count }, see action.status) at ≥1 Hz. Preemption and concurrency groups apply to streaming actions as to any other: a replace submission preempts the running stream and closes its channel.