Skip to content

State Transitions

State in Mentu is never stored directly — it is computed by replaying operations from the ledger. This page defines the complete state machines for both commitments and memories, including which operations cause which transitions.

A commitment exists in exactly one of five states at any point in time:

StateCategoryDescription
openAttentionAwaiting an actor to claim it
claimedActiveAn actor is working on it
in_reviewAttentionSubmitted, awaiting approval
closedTerminalCompleted with a verdict
dismissedTerminalDiscarded without completion
  • Attention states (open, in_review) — require someone to take action
  • Active states (claimed) — work is in progress
  • Terminal states (closed, dismissed) — lifecycle is complete (but can be reopened)
stateDiagram-v2
[*] --> open : commit
open --> claimed : claim
open --> dismissed : dismiss
claimed --> open : unclaim
claimed --> in_review : submit
claimed --> closed : close_direct
in_review --> closed : close
in_review --> claimed : reject
closed --> open : reopen
dismissed --> open : reopen
FromToOperationNotes
(none)opencommitCreates the commitment
openclaimedclaimActor takes ownership
opendismisseddismissDiscarded before anyone claims it
claimedopenunclaimActor releases the commitment
claimedin_reviewsubmitActor submits work for review
claimedclosedclose (direct)Bypass review (v0.1 flow or T1 auto-close)
in_reviewclosedcloseReviewer approves with verdict
in_reviewclaimedrejectReviewer sends back for rework
closedopenreopenReopen a previously closed commitment
dismissedopenreopenReopen a previously dismissed commitment

These operations do not change the commitment’s state but are valid while in certain states:

OperationValid InEffect
evidenceclaimedAttaches evidence to the commitment
linkAnyLinks a memory to the commitment

The protocol supports two paths to closing a commitment:

open → claimed → closed

The actor claims the commitment and closes it directly, bypassing the review step. This is the original v0.1 flow and is still supported for:

  • Tier 1 (T1) commitments — trivial changes that auto-close
  • Permissionless workspaces — no Genesis Key, no review enforcement
  • close_direct permission — actors with explicit authority to bypass review
open → claimed → in_review → closed

The actor claims the commitment, submits it for review, and a reviewer (typically a different actor) approves and closes it. This is the standard flow for governed workspaces.

The in_review state is the Accountability Airlock — the mandatory checkpoint between “work done” and “work accepted.” It exists to enforce a separation of concerns:

  1. The doer (who claims and submits) asserts the work is complete
  2. The reviewer (who closes) independently verifies the work meets standards

This separation is critical when autonomous agents are doing the work. The Airlock ensures that a human (or a different, authorized actor) validates agent output before it is accepted as done.

Without the Airlock, an agent could claim a commitment, produce incorrect work, and close it — marking it as complete with no oversight. The review flow prevents this.

The Airlock can be bypassed in controlled circumstances:

  • T1 auto-close — the Genesis Key explicitly marks T1 commitments as not requiring review
  • close_direct permission — an authorized actor (typically a senior human) can close without submitting first
  • Permissionless mode — no Genesis Key means no governance, so direct close is allowed

Memories have a simpler lifecycle than commitments:

StateDescription
rawNewly captured, unprocessed
triagedClassified with severity/priority
linkedAssociated with a commitment
resolvedThe linked commitment is closed
stateDiagram-v2
[*] --> raw : capture
raw --> triaged : triage
raw --> linked : link
triaged --> linked : link
linked --> resolved : (commitment closes)
FromToOperationNotes
(none)rawcaptureMemory is created
rawtriagedtriageMemory is classified
rawlinkedlinkMemory is linked to a commitment
triagedlinkedlinkTriaged memory is linked to a commitment
linkedresolved(implicit)When the linked commitment closes, the memory resolves
OperationValid InEffect
annotateAnyAdds a note to the memory without changing state

To compute the current state of a commitment:

function computeState(commitmentId, ledger):
state = null
for each operation in ledger (ordered by timestamp):
if operation references commitmentId:
state = applyTransition(state, operation.op)
return state

The applyTransition function follows the transition table above. If an operation would be an invalid transition (e.g., close on an open commitment), it is rejected at write time and never enters the ledger.

Both terminal states (closed and dismissed) support the reopen operation, which transitions the commitment back to open. This allows recovery from:

  • Premature closure — a commitment was closed but the fix was incomplete
  • Incorrect dismissal — a commitment was dismissed but is actually valid
  • Regression — a previously fixed issue has reappeared

When a commitment is reopened, its full history (including the previous close/dismiss and reopen) is preserved in the ledger. Nothing is lost.