Error Code Playbook (v3 Contract)

All tool/resource failures now use one JSON envelope shape:

{
  "code": "invalid_command",
  "message": "...",
  "details": {},
  "descriptor": {
    "category": "validation",
    "retryable": false,
    "exitCode": 64,
    "httpLikeStatus": 400
  },
  "recovery": {
    "summary": "...",
    "fix_command": "..."
  }
}

Use this table as the source-of-truth contract for emitted code values.

CodeSource areaMeaningRetryableExit codeRecovery command
unexpected_executor_errorcore executorUnhandled execution failure.false70flutter_mcp_cli doctor --json
connect_failedconnection layerVM target connection failed.true67flutter_mcp_cli exec --name get_vm --args '{"connection":{"uri":"ws://127.0.0.1:8181/<token>/ws"}}'
vm_not_connectedVM command guardVM-dependent command called without connection.true68flutter_mcp_cli exec --name status --args '{}'
connection_selection_requiredconnection selectionMultiple targets exist; explicit target required.true64flutter_mcp_cli exec --name discover_debug_apps --args '{}'
discover_debug_apps_faileddiscoveryTarget discovery failed.true69flutter_mcp_cli doctor --json
get_vm_failedVM toolsget_vm execution failed.true68flutter_mcp_cli doctor --json
get_extension_rpcs_failedVM toolsget_extension_rpcs execution failed.true68flutter_mcp_cli doctor --json
hot_reload_failedVM toolsHot reload execution failed.true69flutter_mcp_cli doctor --json
hot_restart_failedVM toolsHot restart execution failed.true69flutter_mcp_cli doctor --json
get_active_ports_faileddiscoveryActive debug port lookup failed.true69flutter_mcp_cli doctor --json
get_app_errors_failedtoolkit bridgeApp error retrieval failed.true69flutter_mcp_cli doctor --json
get_screenshots_failedtoolkit bridgeScreenshot retrieval failed.true69flutter_mcp_cli doctor --json
get_view_details_failedtoolkit bridgeView details retrieval failed.true69flutter_mcp_cli doctor --json
debug_dump_failedVM dump toolsDump command failed.true69flutter_mcp_cli doctor --json
dynamic_registry_disableddynamic registryDynamic registry is disabled in runtime config.false78flutter_mcp_cli --dynamics exec --name status --args '{}'
dynamic_registry_list_faileddynamic registryDynamic tool/resource listing failed.true69flutter_mcp_cli doctor --json
missing_tool_namedynamic registryDynamic tool name was required but missing.false64flutter_mcp_cli doctor --json
dynamic_tool_faileddynamic registryDynamic tool invocation failed.true69flutter_mcp_cli doctor --json
missing_resource_uridynamic registryDynamic resource URI was required but missing.false64flutter_mcp_cli doctor --json
dynamic_resource_faileddynamic registryDynamic resource read failed.true69flutter_mcp_cli doctor --json
session_manager_not_configuredsession layerSession command called without session manager wiring.false70flutter_mcp_cli doctor --json
session_not_foundsession layerRequested session does not exist.false66flutter_mcp_cli doctor --json
invalid_commandparser/validationCommand name or argument contract is invalid.false64flutter_mcp_cli schema --name <command_name>
state_store_read_failedstate storePersistent state read failed.true74flutter_mcp_cli doctor --json
state_store_write_failedstate storePersistent state write failed.true74flutter_mcp_cli doctor --json
state_lock_timeoutstate lockState lock acquisition timed out.true75flutter_mcp_cli doctor --json
state_lock_conflictstate lockConflicting state lock detected.true75flutter_mcp_cli doctor --json
diagnose_faileddiagnosticsComposite diagnose command failed.true69flutter_mcp_cli doctor --json
explain_errors_faileddiagnosticsError explanation command failed.true69flutter_mcp_cli doctor --json
unsupported_summary_providerdiagnosticsUnsupported summary provider requested.false64flutter_mcp_cli doctor --json
snapshot_not_foundsnapshotsRequested snapshot ID does not exist.false66flutter_mcp_cli snapshot create --name <snapshot_id> --args '{}'
snapshot_invalidsnapshotsSnapshot payload is malformed or invalid.false65flutter_mcp_cli doctor --json
bundle_build_failedbundlesBundle creation/publish failed.true74flutter_mcp_cli doctor --json
write_blockedsafe writesWrite blocked by --no-overwrite.false73Retry without --no-overwrite or choose a new --output/--name.
doctor_critical_faileddoctorOne or more critical doctor checks failed.true1flutter_mcp_cli doctor --json
unknown_errorfallbackUnknown code fallback.false70flutter_mcp_cli doctor --json

Notes

  • descriptor fields are authoritative for machine retry policies and status mapping.
  • recovery.fix_command is emitted in every envelope and should be surfaced by agents/clients.
  • connection_selection_required details include availableTargets and retry guidance in the same envelope shape.