Outcomes, effects, and safety rules
This page is the canonical assistant-facing interpretation of Domino's cross-surface execution contract.
Effect classes
Read
Reads inspect current authorized state. They do not require idempotency keys and do not create mutation receipts.
Write
Writes change private or shared Domino state. They require a caller-stable idempotency key on direct MCP and API surfaces. Exact replay returns the stored result; changed input under the same key conflicts.
External send
External effects can reach another person. They require a valid prepared action, current authorization, recipient and destination revalidation, a matching principal and surface, and explicit confirmation.
The hosted model never receives direct send capabilities. Direct v2 callers use actions.commit; SMS uses its deterministic exact-SEND protocol to consume the current SMS preparation.
Capability statuses
| Status | Meaning | Correct caller behavior |
|---|---|---|
completed |
Terminal result was reached | Present only confirmed facts and effects. |
unchanged |
State already matched | Explain that no new change was needed. |
accepted |
Work began asynchronously | Poll or invoke the returned status action. |
needs_input |
A user decision or missing field is required | Ask one useful question, then submit an intentional follow-up. |
failed |
Domino could not safely complete the operation | Follow normalized error and recovery guidance. |
Canonical outcome
The canonical contract is domino.capability-outcome.v1.
Facts
outcome.facts contains safe current facts about the result.
Resources
outcome.resources contains authorized resource summaries and opaque handles. Do not expose or fabricate internal database IDs.
Collections
outcome.collection can contain:
- a stable
snapshot_handle; - ordered
items; - a
next_cursor; has_more.
Use snapshot and cursor state for continuation. Do not rediscover merely to recreate a prior numbered choice.
Disclosures
outcome.disclosures contains statements that must be presented before a related next action or commitment.
Next actions
outcome.next_actions contains permitted, typed continuations. A returned next action does not itself grant permission; it tells the caller what operation can follow after satisfying user intent and authorization.
Confirmation
outcome.confirmation.state explains whether no confirmation is needed, an action is prepared, approval is required, or a confirmed effect was consumed. Treat any non-consumed preparation as incomplete.
Confirmed and unconfirmed effects
Only effects.confirmed authorizes a claim that a mutation or external effect happened. effects.unconfirmed describes intended or pending effects and must not be phrased as completed.
Prepared-action invariants
A prepared action binds:
- actor and authenticated principal;
- surface;
- exact action and payload;
- subject and revision;
- recipient and destination fingerprints;
- payload integrity;
- expiry;
- required authorization.
An edit can supersede it. Expiry invalidates it. Commit rechecks current state immediately before the effect. Replay must not duplicate the effect.
Reference safety
- Resolve named people against authorized current state.
- Ambiguous people require clarification rather than name matching.
- Use handles and public identifiers returned by Domino.
- A stale, invisible, revised, or unauthorized reference is unavailable.
- Never ask an ordinary user for an internal database ID.
Surface-specific confirmation
| Surface | Confirmation |
|---|---|
| Web | Explicit current UI review and publish/send action |
| SMS | Current eligible preparation plus entire uppercase SEND message |
| MCP | Later explicit approval followed by same-principal MCP actions.commit |
| API | Later explicit approval followed by same-principal API commit |
Safe claims
Say:
- “The draft is saved.”
- “The share link is ready to copy.”
- “Domino is still processing that capture.”
- “The invitation was sent to Emily; Andrew still needs the host to share his link.”
Do not say:
- “Everyone was invited” when only a draft exists.
- “The link was shared” when it was only copied.
- “They are free” without current authorized availability evidence.
- “The plan changed” when the result is
needs_inputorfailed.
LLM answering guidance
Before making a consequential claim, locate the supporting terminal status, outcome fact, and confirmed effect. If those are absent, describe the current preparation, pending work, or required recovery instead.