Must store
- Request records with id, protocol_version, work_session_id, requester_actor_id, requester_worker_id, target_human_worker_id, policy_decision_id, type, status, blocking_scope, reason_code, reason_summary, requested_action, requested_outcome, risk_class, human_decision_needed, options, default_if_no_response, created_at, expires_at, and resolver refs when resolved or closed.
- Review records with reviewer_actor_id, target_ref, decision, created_at, comments, and ApprovalScope when authority is granted.
- Takeover records with requested_by_actor_id, controlling_actor_id, affected_scope, request_id, reason, state, lock_epoch, created_at, reconciliation refs, and resolved_at.
Must validate and reject
Request
Reject Request resolution without Review or Takeover. Reject unresolved Request at terminal WorkSession export.
ApprovalScope
Reject approval outside normalized_action_hash, applies_to_work_session_id, applies_to_actor_id, max_uses, and expires_at.
Takeover
Reject stale AgentWorker continuation when attempted_lock_epoch is older than the active lock_epoch.
Mutation gate
Reject missing mutating headers, stale WorkSession revision, previous event hash mismatch, actor/body mismatch, and unauthorized Actor.
Lifecycle
PolicyDecision denies or flags action
-> Request created with blocking_scope
-> HumanWorker Review or Takeover
-> Request status records resolver ref
-> AgentWorker resumes only inside approved or reconciled scope
Host boundary
Hosts own UI, auth, storage, runtime behavior, model routing, tool execution, billing, scoring, payment, deployment, monitoring, and host workflow.
Jarvis owns Request, Review, ApprovalScope, and Takeover protocol records.
Source contracts