Action
Purpose
Defines an interaction that may occur between Objects.
An Action describes behavior, not implementation. It expresses what interactions are possible within the canonical model without prescribing how they are performed.
Responsibilities
- Define interactions that Objects may perform.
- Define interactions that Objects may receive.
- Provide a canonical description of available behavior.
- Support discovery of capabilities across runtimes and services.
Used By
- Dataset
- Object
- Runtime
- World
- Mind
Structure
An Action contains:
- id
- type
- name
- description
- actor
- target
- operation_invocation
- availability
- parameters
- result
- metadata
The canonical structure is defined in action.json.
Semantics
An Action represents a capability rather than an event.
Actions are not executions or history. They describe what may occur.
For example:
- open
- close
- edit
- reply
- join
- leave
- save
- share
- navigate
- purchase
Actions may exist independently or be associated with one or more Objects.
An Object may:
- perform an Action on itself. "local"
- perform an Action on another Object. "outbound"
- receive an Action from another Object. "inbound"
Invocation and availability
An Action is invoked through its operation_invocation — the canonical operation the
platform processes into a new Dataset (the operation name, its arguments, and the id of the
Object it targets). Every Action carries an operation_invocation. An entry that carries no
operation_invocation is not a canonical Action and is rejected by the component that
produced it; it is never emitted across a Component boundary.
There is no URL on an Action. An Action is not a destination string a consumer opens. A
reference to an external page, a document, or another resource is a Resource — or a
Relationship to one — not an Action (see resource.md, relationship.md). "Following a link"
is focusing that Resource, a platform operation, not a consumer interpreting a string.
Every Action carries availability — state and reason:
- state — whether the capability is currently offered. enabled or unavailable
(extensible). This is not the authorization system; it communicates only whether the
Action is presented as takeable right now.
- reason — member-facing copy explaining an unavailable state, owned by the component
that produced the Action (a Service, or World). Empty when state is enabled.
In a World Dataset, World normalises availability on every Action: the state and reason a
Service supplied are preserved; where a Service supplied neither, World sets
{ enabled, "" }. A consumer renders an Action from availability.state and reason as
given. It does not compute availability from the Action's shape, infer it from the presence
or absence of a target, or compose its own reason copy.
Recognized detail: opening an Object
An open Action's effect is to open its target.
Focusing a Finding opens the Object it references on Carry. Following a link inside an Object
opened on Carry navigates within that Object — it does not open another Object (see layout.md,
Object navigation, and context.md). window and workspace are not part of this model; they
are noncanonical presentation terms (see layout.md).
Scope
Actions describe interactions only.
They do not define:
- business logic
- permissions
- implementation
- user interface
- execution history
Those concerns belong to the systems that consume the canonical model.
Invariants
- Every Action has a unique identifier within a Dataset.
- An Action represents a capability, not an occurrence.
- Actions are immutable descriptions within a Dataset.
- Execution state is outside the canonical model.
Related Models
- Object
- Relationship
- Collection
- Dataset