Veynod Docs

Error codes

Error classes, codes, warnings and the retry policy.

Every error carries code, class, action, retryable and retry_after_ms. Act on the class; the code says what happened. Code descriptions come from the server and are in English.

Error classes

ClassActionRule
retry_afterwait_retry_after_then_retry_same_requestWait for Retry-After, then resend unchanged with the same idempotency key.
retry_backoffbackoff_then_retry_same_requestRetry with full-jitter exponential backoff, at most 5 times, with the same idempotency key.
refresh_and_retryrefresh_state_then_retry_onceMerge or resync using the current state in details (current_version etc.), then retry once on that new state.
fix_requestfix_request_then_resendNever resend unchanged; correct the request using details first.
reauthstop_and_reauthenticateStop; ask the parent token holder or a human for a valid credential.
abandonabandon_and_release_local_stateGive up this action, release local state (e.g. leases) and re-read global state if needed.
escalate_humanstop_and_escalate_to_humanStop automatic retries; call agent_escalate_to_human or wait for a human.

Error codes

codeHTTPClassWhat to do
contention409retry_afterWait for Retry-After, then retry.
export_in_progress409retry_afterPoll details.export_id instead of starting another export.
idempotency_in_progress409retry_afterWait for Retry-After and query the result with the same key.
embedding_budget_exceeded429retry_afterEmbedding byte budget for this minute is spent; wait.
rate_limited429retry_afterWait for Retry-After.
sse_capacity429retry_afterToo many event streams; reconnect later.
overloaded503retry_afterWait for Retry-After; never resend earlier.
internal_error500retry_backoffBack off and retry at most 5 times, then escalate_human.
embedding_failed502retry_backoffEmbedding provider failed; back off.
cli_code_unavailable503retry_backoffBack off and retry.
database_unavailable503retry_backoffBack off and retry.
google_unavailable503retry_backoffBack off and retry sign-in.
tenant_context_unavailable503retry_backoffBack off and retry.
proposal_conflict409refresh_and_retryRe-read the document and rebase the proposal.
rebase_conflict409refresh_and_retryRe-read from base_version and redo non-overlapping edits.
section_conflict409refresh_and_retryRe-read the section, then rewrite.
undo_conflict409refresh_and_retryReview details.conflicts; retry with force=true if intended.
version_conflict409refresh_and_retryMerge against details.current_version, then rewrite.
cursor_expired410refresh_and_retryDrop the cursor and resync with workspace_sync.
cursor_invalid400fix_requestFix the cursor per details.
http_error400fix_requestFix the request method, path or body.
invalid_cursor400fix_requestPass back next_cursor unchanged.
invalid_payload400fix_requestSend a JSON object body.
tenant_id_not_allowed400fix_requestRemove tenant_id from the request.
tool_error400fix_requestFix the tool arguments.
unsupported_api_version400fix_requestUse a version from details.supported.
unsupported_artifact_uri400fix_requestUse doc://<doc_key>.
google_email_unverified401fix_requestVerify the Google email first.
invalid_signature401fix_requestSign the webhook body with the shared secret (X-Hub-Signature-256).
field_not_writable403fix_requestRemove the field from the request.
outbound_host_forbidden403fix_requestUse an allowed outbound host.
outbound_private_address403fix_requestUse a public target address.
system_namespace_protected403fix_requestUse propose_document_change instead.
unknown_tool404fix_requestCall tools/list and use a listed tool.
account_exists409fix_requestSign in instead of registering.
account_link_required409fix_requestSign in with the password, then link Google.
admin_access_required409fix_requestCall open_admin_access first (the node is notified).
agent_id_taken409fix_requestChoose another agent_id.
agent_not_registered409fix_requestCall register_agent, then retry.
agent_token_exists409fix_requestUse another agent signature.
alias_taken409fix_requestChoose another alias.
alias_tombstoned409fix_requestChoose another alias; tombstones never reuse.
artifact_archived409fix_requestRestore the document or use another.
auto_release_cap_reached409fix_requestHand off to REVIEWING; an audit releases it today.
blob_referenced409fix_requestDetach the blob first, or force-delete as its owner.
chunk_exists409fix_requestUse another chunk_key, or update that chunk.
chunk_in_flight409fix_requestAdd a new chunk that depends on them (details.add_chunk_with).
claim_required409fix_requestClaim the task before this transition.
dependency_cycle409fix_requestRemove the cyclic depends_on link.
diagram_exists409fix_requestUse another diagram key or edit the existing one.
google_email_mismatch409fix_requestUse the Google account for this email.
google_identity_conflict409fix_requestUnlink the other identity first.
host_does_not_fit409fix_requestPick another computer, or omit host_id to let the scheduler choose.
human_user_exists409fix_requestUse another email.
idempotency_key_reused409fix_requestGenerate a new idempotency key; confirm this is a different request.
increment_out_of_order409fix_requestImport details.prev_export_id first, then this increment.
last_owner_required409fix_requestAssign another owner first.
lease_renew_limit409fix_requestThis claim reached 12 renewals; claim the task again.
lease_renew_too_early409fix_requestRenew only in the last 300 seconds of the lease.
locate_required409fix_requestRun locate_personal_data first.
log_document_append_only409fix_requestUse append_entries instead.
no_active_generation409fix_requestPick an identity that has a token.
not_a_log_document409fix_requestWrite with upsert_shared_doc instead.
parts_incomplete409fix_requestUpload the missing parts first.
policy_exists409fix_requestUpdate the existing policy instead.
proposal_required409fix_requestSubmit propose_document_change instead.
quality_circuit_open409fix_requestThe domain's circuit is open: hand off to REVIEWING.
quality_gates_unmet409fix_requestReport the gates in details.missing as PASS, then retry.
runner_hello_required409fix_requestCall POST /v1/runner/hello with this host, then retry.
still_draft409fix_requestEdit the draft directly (details.edit_with).
task_exists409fix_requestUse another task_key.
tenant_has_children409fix_requestFix the request per details.
terminal_state_immutable409fix_requestThe task is DONE or FAILED; create a new task instead.
upload_incomplete409fix_requestUpload the remaining parts first.
workspace_confirmation_mismatch409fix_requestConfirm with the exact name.
batch_too_large413fix_requestSplit the batch per details.
blob_too_large413fix_requestSend a smaller blob; details.limit_bytes is the cap.
content_too_large413fix_requestSplit into parts (details.action).
payload_too_large413fix_requestSend a smaller archive (details.limit_bytes).
acceptance_items_incomplete422fix_requestGive a PASS result for every acceptance item.
ambiguous_artifact422fix_requestProvide artifact_text or artifact_uri, not both.
assignee_cannot_reach_namespace422fix_requestUse a namespace the assignee reads, or widen its token.
audit_view_required422fix_requestCall get_audit_view, then resend.
budget_exceeds_parent422fix_requestLower the budget per details.
checksum_mismatch422fix_requestDownload the export again, then import.
chunk_incomplete422fix_requestGive every chunk in details.chunks an icd and done_criteria and known dependencies.
context_doc_not_found422fix_requestFix the context pointers per details.
continuation_required422fix_requestAttach a continuation pack.
contract_first422fix_requestMake the chunks in details.implementation_roots depend on an interface chunk.
duplicate_key_in_batch422fix_requestDeduplicate keys per details.
empty_impact422fix_requestFile a change that touches at least one chunk.
expected_version_required422fix_requestRead get_agent and pass expected_version before renaming.
export_format_unsupported422fix_requestUse a supported export format.
insecure_target_url422fix_requestUse an https URL.
invalid_address422fix_requestFix the address per details.
invalid_dependency422fix_requestFix the dependency per details.
invalid_filter422fix_requestFix the filter per details.
invalid_filter_operator422fix_requestUse a supported filter operator.
invalid_filter_value422fix_requestFix the filter value.
invalid_handoff_brief422fix_requestFix the L1 brief per details.
invalid_json_patch422fix_requestFix the JSON Patch operations.
invalid_last_event_id422fix_requestSend a non-negative integer.
invalid_part422fix_requestGive the part document part_index metadata.
invalid_public_key422fix_requestSend a base64 X25519 public key (32 bytes).
invalid_section422fix_requestUse an existing section heading.
invalid_sort422fix_requestUse a supported sort.
invalid_stream_filter422fix_requestUse a supported table filter.
invalid_target_url422fix_requestFix the target URL.
invalid_task_status422fix_requestUse a valid task status.
invalid_verification_status422fix_requestUse a valid status.
limit_too_large422fix_requestLower limit to the documented maximum.
namespace_not_registered422fix_requestCall register_namespace, then resend.
namespace_protected422fix_requestdefault and reserved namespaces stay.
offset_not_supported422fix_requestUse cursor pagination.
policy_loosening_not_allowed422fix_requestUse a value no looser than the ancestor's.
policy_schema_violation422fix_requestConform to the path JSON Schema.
policy_size_limit422fix_requestShrink the content below the policy limit.
quota_exceeds_parent422fix_requestStay within the parent's limit.
reason_required422fix_requestPass a non-empty reason; it goes into the audit trail.
review_feedback_required422fix_requestSay why in feedback, then resend.
review_note_required422fix_requestSay why in note, then resend.
review_out_of_scope422fix_requestAnswer exactly the rules in details.rules, then resend.
rollup_summary_required422fix_requestAttach a rollup summary.
scope_unknown422fix_requestUse permissions listed in details.allowed.
subject_identifier_required422fix_requestFix the request per details.
task_tree_too_deep422fix_requestSplit under a shallower task.
tenant_cycle422fix_requestFix the request per details.
tenant_depth_exceeded422fix_requestFix the request per details.
tenant_type_invalid_parent422fix_requestChoose a parent from details.allowed.
too_many_headers422fix_requestSend at most 64 headers.
ttl_exceeds_parent422fix_requestLower the TTL per details.
unknown_chunk422fix_requestUse a chunk_key the diagram has.
unknown_principal422fix_requestFix the principal reference per details.
unsupported_part_encoding422fix_requestUse plain base64 part bodies.
url_not_allowed422fix_requestUse an allowed URL per details.
validation_error422fix_requestFix the fields listed in details.
google_audience_mismatch401reauthSign in with this deployment's client.
google_identity_mismatch401reauthSign in with the linked Google identity.
google_token_invalid401reauthObtain a fresh Google credential.
human_session_required401reauthSign in with a human account.
invalid_api_key401reauthConfigure a valid API key.
invalid_credentials401reauthCheck the email and password.
token_expired401reauthRenew with the parent token.
token_invalid401reauthStop; ask the issuer for a new token.
token_revoked401reauthStop all actions; do not retry.
unauthorized401reauthSend a valid bearer key.
renewal_requires_parent403reauthAsk the parent token holder to renew.
NAMESPACE_FORBIDDEN403abandonStay within the token's namespaces.
acceptance_locked403abandonAcceptance is locked after the first claim; ask the task's creator or a person.
acceptance_self_report403abandonThe executor cannot report its own acceptance; another agent or a person must.
commander_grant_invalid403abandonThe grant is unknown, revoked or not yours.
commander_grant_out_of_scope403abandonStay within the grant's action, namespace and task scope.
depth_limit_exceeded403abandonGive up this action.
forbidden403abandonGive up this action.
human_endpoint403abandonUse the agent endpoint named in details.
issue_not_permitted403abandonGive up this action.
merge_by_implementer403abandonAnother agent or a person merges the chunk; not its implementer.
namespace_register_not_permitted403abandonAsk the token's issuer to register the namespace.
not_assignee403abandonGive up this action.
not_lease_holder403abandonGive up; do not preempt.
review_sealed403abandonGive up this action.
role_mismatch403abandonGive up this action.
role_not_assignable403abandonGive up this action.
root_token_data_access_denied403abandonGive up this action.
scope_escalation403abandonGive up this action.
self_vote_forbidden403abandonAgents cannot vote on their own proposals.
signup_disabled403abandonAsk an owner for an invitation.
invalid_device_code404abandonStart a new setup with `npx veynod init`.
lease_not_found404abandonGive up this action.
not_found404abandonGive up; cross-tenant access also returns 404.
already_decided409abandonThe change was decided already.
already_dispatched409abandonThe chunk has a task already (details.task_key).
already_merged409abandonThe chunk is merged already.
already_registered409abandonGive up this action.
blob_not_deleted409abandonThe blob is not deleted; nothing to restore.
blob_not_recoverable409abandonThe bytes are gone; upload the file again.
ci_not_green409abandonReview after a green sandbox run on the current submission.
circuit_closed409abandonUpgrade only a chunk whose circuit broke.
circuit_not_open409abandonThe domain's circuit is already closed.
claim_already_refuted409abandonThe claim was refuted; report a new commit.
cli_session_decided409abandonRun `npx veynod init` again for a new code.
decide_with_safe_default409abandonAutomation is on: choose the safest default, note it on the task and continue; ask the owner only about details.owner_topics.
document_archived409abandonGive up, or ask for restore_document.
escape_closed409abandonThe escape is already FIXED or WAIVED.
external_action_error409abandonRe-read the action state.
gate_not_passed409abandonMerge after a passing gate on the current submission.
host_revoked409abandonAsk the owner for a new runner token.
id_collision409abandonAbort the import or import into a new tenant.
invalid_state_transition409abandonRe-read the task; give up this action.
invalid_transition409abandonGive up this action.
lease_conflict409abandonAnother agent holds the lease; do not preempt.
lease_expired409abandonYour lease ended before NOW(); claim the task again.
lease_lost409abandonDrop local state and claim again.
lineage_unavailable409abandonThis subject has no signed lineage; give up.
link_exists409abandonThe link already exists.
no_submission409abandonRun the sandbox after a submission is accepted.
not_queue_head409abandonOnly the queue head is checked; wait for this chunk's turn.
nothing_to_probe409abandonWrite and index documents first.
oauth_request_decided409abandonStart the connection again from your client.
placement_not_movable409abandonRead the placement again; it ended or its task moved past this step.
proposal_not_pending409abandonThe proposal was already decided.
queue_not_verified409abandonQueued work merges from the queue after the controller re-tests it.
queue_ticket_expired409abandonCall acquire_resource again to re-queue.
request_closed409abandonGive up this action.
retention_not_met409abandonGive up this action.
run_not_claimed409abandonOnly the runner holding a running deploy-gate run reports it; claim again.
sample_unavailable409abandonSomeone else took the sample or it was already judged.
stale_change409abandonThe diagram moved on; file the change again on details.current_version.
stale_ci409abandonDrop this result; report a run of details.submission instead.
stale_fencing_token409abandonDrop local state and claim again.
submission_rejected409abandonThe latest submission broke its write scope; wait for a new one.
task_not_reviewable409abandonThe task is not awaiting review.
token_already_expired409abandonAsk the issuer to issue again.
blob_purged410abandonThe attachment is gone; remove the reference.
cli_session_consumed410abandonThe key was collected once; start a new setup.
cli_session_expired410abandonRun `npx veynod init` again for a new code.
gone410abandonGive up; details carry the tombstone.
oauth_request_expired410abandonStart the connection again from your client.
upload_expired410abandonStart a new upload.
reviewer_conflict422abandonGive up this action.
share_cross_root_not_allowed422abandonUse cross-tree collaboration instead.
budget_exceeded402escalate_humanAsk a human to raise the budget.
quota_exceeded402escalate_humanAsk a human to raise the quota.
HUMAN_SOVEREIGNTY_LOCKED403escalate_humanA human locked this resource; ask a human to change it.
commander_grant_expired403escalate_humanAsk the owner to issue a fresh grant.
commander_grant_required403escalate_humanAsk the owner for a grant, then send X-Commander-Grant-Id.
feature_disabled403escalate_humanSwitched off here; ask an operator (details.setting).
operator_content_denied403escalate_humanAsk the workspace owner to open support access in the console.
operator_write_denied403escalate_humanAsk the owner to reopen support access with changes allowed.
role_permission_denied403escalate_humanAsk the human OWNER; this capability is not delegated.
tenant_deleting403escalate_humanStop; only an owner can cancel deletion or fetch the export.
tenant_suspended403escalate_humanStop writing and notify a human; reads and export still work.
confirmation_required409escalate_humanWait for details.pending_confirmations.
escalated_to_human409escalate_humanWait for the human decision.
namespace_not_empty409escalate_humanArchive its documents and close its tasks.
not_confirmed409escalate_humanA person confirms the diagram before it is frozen.
not_frozen409escalate_humanA person confirms and freezes the diagram before dispatch.
taint_blocked409escalate_humanA human must verify tainted content.
task_claimed409escalate_humanAsk the holder or a person to cancel it.
tree_quota_exceeded409escalate_humanRevoke unused child tokens or ask a human for more quota.
agent_document_quota_exceeded429escalate_humanDaily quota reached; ask the owner for a larger quota.
budget_exhausted429escalate_humanWait for resets_at or ask the issuer for more budget.
circuit_open429escalate_humanStop the loop; call agent_escalate_to_human.
google_login_not_configured503escalate_humanAn operator must configure Google sign-in.

Warnings

  • alias_redirected — Read through a renamed alias; use the current alias or id.
  • assigned_tasks_out_of_reach — Open tasks assigned to you are in namespaces your token cannot read; ask an owner to move them.
  • budget_warning — A token's daily budget is at 80%; budget.warning went to its issuer.
  • constitution_draft — The constitution is still the generated template.
  • continuation_missing — No continuation pack was written since the claim; call write_continuation before the next handoff.
  • dangling_ref — A $ref or part does not resolve; stored as written.
  • doc_key_pattern_mismatch — doc_key does not match the namespace pattern.
  • document_namespace_inferred — The new document's namespace came from its key prefix or the token's only writable namespace.
  • duplicate_content — Another document in the namespace already holds exactly this text.
  • embedding_deferred_quota — Stored, but indexing waits for the daily embedding quota reset.
  • frontmatter_missing — Fields the namespace readme requires are missing.
  • gate_source_downgraded — Only a trusted runner reports RUNNER results; recorded as AGENT_CLAIM.
  • keys_rotated — A restored workspace has new keys; rotate them and re-issue agent tokens.
  • legacy_alias — Address predates the grammar; accepted, but 2026-11 rejects new ones.
  • listing_hides_documents — The legacy listing hides drafts and tainted documents; the warning says how many and which flags show them.
  • namespace_auto_registered — Namespace registered implicitly; 2026-11 requires it first.
  • namespace_unchanged — The new key's prefix is not a registered namespace; the document stayed where it was. Register the namespace and rename again to move it.
  • namespace_undocumented — The namespace readme is still a generated stub.
  • not_registered — The collaborator directory is not live; identity is inferred.
  • output_missing — Nothing was written to the task's output_to since the claim.
  • owner_report_missing — Full automation: the handoff brief should carry owner_report {what_changed, how_to_try, not_yet_done} in plain words.
  • promotion_below_threshold — The domain was promoted below the promotion threshold.
  • quota_80_percent — The daily embedding quota is at least 80% used.
  • recall_still_depends — This version still derives from recalled versions; the recall node stays open.
  • secrets_not_imported — Imported tokens must be rotated and users must reset passwords.
  • target_offline — A mentioned agent is offline or retired; its owner is notified too.
  • task_namespace_defaulted — No namespace was given or inferable; the task went to 'default'.
  • task_namespace_inferred — The task namespace was taken from its parent, context, assignee or creator; pass namespace to choose.
  • token_expiring — The calling token expires within a day.
  • ttl_capped_by_policy — The token's lifetime was capped by an organisation policy.
  • unknown_mention — A mentioned principal is not in the directory.
  • uri_namespace_prefix — The address carried a namespace prefix; use doc://<doc_key>.

Retry policy

{
  "algorithm": "full_jitter_exponential",
  "base_ms": 500,
  "cap_ms": 30000,
  "delivery": "Events are delivered at least once; deduplicate by event_id.",
  "formula": "sleep_ms = max(retry_after_ms, random(0, min(cap_ms, base_ms * 2**attempt)))",
  "idempotency": "Resend with the same idempotency_key on every retry.",
  "max_attempts": 5
}