Error envelope
{
"error_id": "missing_policy_decision",
"protocol_version": "v0.1",
"object_type": "PolicyDecision",
"field": "policy_decision_id",
"reason": "AgentWorker action requires PolicyDecision before accepted protocol state.",
"remediation": "Record PolicyDecision before accepting the AgentWorker action.",
"trace_id": "trace:example"
}
Required rejection surfaces
missing_protocol_version
unsupported_protocol_version
missing_actor
missing_idempotency_key
missing_request_timestamp
stale_request_timestamp
missing_expected_work_session_revision
missing_previous_event_hash
invalid_previous_event_hash
missing_policy_decision
missing_review_resolution
missing_takeover_resolution
stale_takeover_continuation
forbidden_host_private_field
sealed_work_session_mutation
sealed_evidence_mutation
outcome_report_without_learning_record
outcome_report_requires_terminal_source
Must validate and reject
- Return the required public envelope fields: error_id, protocol_version, object_type, field, reason, remediation, and trace_id.
- Do not include host-private response fields.
- Use fixture-backed rejection ids when a fixture proves the behavior.
- Use checklist-only rejection ids without claiming fixture coverage.
Host boundary
Hosts own UI, auth, storage, runtime behavior, model routing, tool execution, billing, scoring, payment, deployment, monitoring, and host workflow.
Jarvis owns public protocol errors and rejection semantics.
Source contracts