Skip to content

Error codes

A code is a promise: it names a kind of failure that keeps meaning the same thing across releases. Branch on the code, never on the sentence.

Adding one is a deliberate act. A test refuses any code the loader emits that is not enumerated, and any enumerated code that nothing emits, so this table cannot drift in either direction.

Emitted while loading and checking the project file. Each failure carries the code, the path that produced it, and where possible the line and the resolving command.

CodeMeans
app_requiredthe shorthand form needs an application name to attach the workload to
backup_driver_unsupporteda runnable service driver has no qualified executable protection contract
backup_encryption_unverifiedthe selected target cannot prove the encryption mode required by the recovery kind
backup_interruption_not_authorizedthe selected recovery contract needs a recurring stopped-service window the author did not permit
backup_retention_unsupportedthe declared recovery history cannot map to supported retention semantics
backup_target_not_independenta backup target shares the protected failure domain
backup_target_unknowna protection policy selects no declared backup target
compose_container_namea referenced service fixes its container name, which Onebox owns
compose_extendsa referenced service uses extends, which hides what runs
compose_file_unparsablea referenced Compose file is not valid YAML
compose_file_unreadablea referenced Compose file could not be read
compose_ingress_attacheda referenced service already attaches the ingress network
compose_network_modea referenced service sets network_mode, which conflicts with the network it needs
compose_ob_labela referenced service carries a label in a namespace Onebox generates into
compose_ref_malformeda Compose reference is not of the form path#service
compose_service_missinga referenced Compose file has no such service
compose_traefik_labela referenced service carries routing labels while also declaring a route
connection_variable_claimedan authored value claims a name a managed-service connection supplies
derived_name_too_longa name Onebox derives exceeds the runtime’s limit
eject_destination_existsthe ejection destination already exists
eject_failedthe runtime could not be handed over
eject_nothing_to_doevery workload already references a Compose file
env_file_missingan environment file the project declares is not on disk
env_file_unreadablean environment file the project declares cannot be read
health_port_unknownan http health check has no port to probe and none can be derived
identifier_collisiona name is used by both a workload and a service
image_unresolveda build-sourced workload has no resolved image for this release
internal_copy_faileda project could not be copied internally
internal_decode_faileda normalised project could not be decoded
no_environmenta project must declare at least one environment
no_workloada project must declare at least one workload
override_invalidan override produced a value the contract does not accept
override_not_permitteda field that may not vary per environment
override_unknown_servicean override names a service the project does not declare
override_unknown_workloadan override names a workload the project does not declare
path_absolutea repository path may not be absolute
path_escapes_repositorya path resolves outside the project directory
path_unresolvablea path could not be resolved
preflight_env_incompletean environment file is missing keys the project requires
prerequisite_has_no_healtha wait for health names something with no health check
project_invalida value that does not satisfy the contract
project_unparsablethe project file is not valid YAML, or is not a mapping
project_unreadablethe project file could not be read
protected_service_patch_unsupportedno exact qualified protected current-to-candidate image transition exists
protection_image_revert_unsafetag rendering would strand an effective protection prerequisite
protection_service_image_unpublishedthe protected service image lacks verified publication provenance
recovery_objective_unsupportedthe service driver, target, or version cannot execute the declared recovery kind
render_failedthe runtime could not be rendered
restore_drill_schedule_too_sparsethe restore-drill cadence cannot keep restore proof current
route_collisiontwo workloads claim the same address
route_without_proxya route is declared with nothing to route it
routing_exclusivethe domain shorthand and the routes list say the same thing twice
routing_incompletedomain and port are declared together or not at all
schedule_untranslatablea cron expression whose meaning the host’s scheduler cannot preserve
schema_identity_missingthe project declares no api_version
schema_identity_unsupportedthe project declares an api_version this binary does not speak
secrets_withdrawnthe withdrawn secrets block; environment files carry encrypted entries now
server_unreachablethe server could not be reached
service_image_digest_unavailablethe immutable service image is unavailable from registry and exact cache
service_image_patch_disable_pendingprotected image refresh is refused while disablement is pending
service_settings_unsupporteda setting was declared for a driver with no way to apply it
shorthand_and_workloadstop-level shorthand cannot be combined with a workloads block
stateful_replicasa workload keeping durable state asks for more than one replica
strategy_ungateda rolling release is asked for by a workload with no health check to gate it
unknown_environmentan environment the project does not declare
unknown_fielda field the contract does not define
unknown_prerequisitea prerequisite names something the project does not declare
unknown_service_drivera service names a driver Onebox has no implementation for
workload_malformeda workload is not a mapping
workload_sourcea workload declares other than exactly one of build, image or compose

Raised while a command runs, rather than while the project file is read. These are the codes a deploy, a rollback, a secret rotation or an audited exec puts in the error.code field, so they are the set to branch on when automating.

A blank command is deliberate: some failures have no honest Onebox command that resolves them. A local artifact that could not be written is fixed on the filesystem, not by running the tool again. An angle-bracketed command names a step to complete rather than a line to run verbatim.

CodeMeansGuidance roleCommand
activation_refusedthe release cannot be activated from its recorded manifest stateresolvingob abort --output ndjson
approval_expiredthe local confirmation is older than its validity windownextob approve --plan <path>
approval_failedthe approval artifact is missing, unreadable, or not bound to this plannextob approve --plan <path>
artifact_write_faileda requested local artifact could not be written
cancelledthe operation was cancelled or interrupted; consult the journal for how far it gotdiagnosticob audit --output json
command_failedthe command failed; diagnostic detail is on stderr
compose_invalidthe Compose project could not be loadeddiagnosticob validate --output json
compose_not_foundno Compose file was found to adoptresolvingob init --output json
config_existsa project file already exists and init refuses to overwrite itdiagnosticob validate --output json
config_write_failedthe project file could not be written
confirmation_failedthe typed confirmation did not match the release identifiernextob approve --plan <path>
divergence_detectedthe live release does not match the recorded release statediagnosticob audit --output json
doctor_faileda local readiness check failed
exec_failedthe audited exec could not be completeddiagnosticob status --output json
finalize_refusedthe release cannot be finalized because the recorded activation evidence disagrees with the live hostdiagnosticob status --output json
host_owner_mismatchthis host is owned by a different Onebox application, and one host has one ownerdiagnosticob preflight --output json
job_plan_failedthe one-shot job plan could not be producednextob job plan <job> --output json
logs_failedlog retrieval faileddiagnosticob status --output json
manifest_invalida release manifest is not valid closed JSON for its schemadiagnosticob status --output json
manifest_missinga release directory carries no manifest, so its lifecycle state is unknowndiagnosticob status --output json
manifest_mode_unsafea release manifest is not mode 0600 on the hostdiagnosticob doctor --output json
manifest_read_faileda release manifest could not be read from the hostdiagnosticob status --output json
manifest_schema_unknowna release manifest declares a schema this binary does not supportdiagnosticob version --output json
manifest_write_faileda release manifest could not be written to the hostdiagnosticob status --output json
migration_backup_requireda migration-effect step requires a plan-bound backup report or an audited overridenextob plan --backup-report-out <path>
migration_gate_closedthe interrupted release ran rollback-unknown data effects, so the requested recovery action is refusedresolvingob resume --output ndjson
operation_failedthe operation failed; inspect stderr and journal evidencediagnosticob audit --output json
output_mode_incompatiblethe requested output mode is incompatible with this commanddiagnosticob help
plan_expiredthe sealed plan is older than its validity windownextob plan --output json
plan_failedthe plan could not be produced; inspect stderr for local diagnosticsdiagnosticob validate --output json
plan_requiredthis command requires a sealed plan when run with structured outputnextob plan --output json
post_activation_failedthe release is serving, but the work after activation did not finishresolvingob resume --output ndjson
preflight_faileda target readiness check failed before any mutation
recovery_incompleterecovery did not reach its verified terminal stateresolvingob resume --output ndjson
rollback_target_missingno previously serving release is recorded as a rollback targetnextob plan --output json
secret_cleanup_pendingthe rotation is applied and verified, but removing the retired generation did not finishresolvingob secrets push --output ndjson
secret_declaration_not_deployedthe deployed release does not declare this secret graphnextob plan --output json
secret_entry_not_selectedmore than one editable secret source exists, so an entry identifier is requireddiagnosticob secrets list --output json
secret_generation_not_deployedthe deployed release predates opaque secret generationsnextob plan --output json
secret_recovery_incompletesecret recovery did not reach its verified terminal stateresolvingob secrets push --output ndjson
secret_rotation_rolled_backan interrupted rotation was restored to its prior generation and the requested payload was not appliedresolvingob secrets push --output ndjson
sops_failedthe SOPS editor exited with a failure
sops_source_missinga declared encrypted source file does not existdiagnosticob validate --output json
status_failedthe status snapshot could not be readdiagnosticob doctor --output json
unknown_runtime_targetthe requested runtime target is not declareddiagnosticob status --output json

The failure contract shared by plans, event streams, terminal results, status and doctor. Each carries a stable code and one safe command in its semantic role; diagnostic detail stays in restricted local evidence, never in the public record.

CodeReachableMeansGuidance roleCommand
assurance_stalereservedcontinuous assurance evidence is no longer currentdiagnosticob status --output json
backup_conflictyesanother protected-service operation holds the serialization boundarydiagnosticob status --output json
backup_driver_unsupportedyesthe service driver has no qualified executable protection contractdiagnosticob validate --output json
backup_encryption_unverifiedyesthe selected protection destination cannot prove its required encryption modediagnosticob validate --output json
backup_interruption_not_authorizedyesthe recovery contract requires a recurring stopped-service window the author did not permitdiagnosticob validate --output json
backup_retention_unsupportedyesthe declared recovery history cannot map to qualified native retention semanticsdiagnosticob validate --output json
backup_stalereservedthe latest recoverable point is older than policy permitsnextob plan --output json
backup_target_not_independentyesthe backup target shares the protected failure domaindiagnosticob validate --output json
backup_target_unauthorizedyesthe backup target credentials are unavailable, unsafe, or unauthorizednextob plan --output json
backup_target_unknownyesthe protection policy selects no declared backup targetdiagnosticob validate --output json
backup_target_unreachableyesthe selected backup target cannot be reachednextob plan --output json
disk_pressure_criticalreserveda relevant filesystem lacks safe headroom for a space-increasing mutationdiagnosticob status --output json
drill_deferred_capacityreserveda restore drill was deferred before materialization because aggregate staging headroom is insufficientdiagnosticob status --output json
external_service_not_ownedreservedthe requested lifecycle mutation targets a dependency Onebox does not owndiagnosticob status --output json
external_service_state_stalereservedan external-service observation changed after planningnextob plan --output json
protected_service_identity_changedyesa protected service name would orphan durable recovery identitydiagnosticob validate --output json
protected_service_patch_incompatiblereservedthe candidate protected service or helper cannot prove repository and runtime compatibilitydiagnosticob status --output json
protected_service_patch_unsupportedyesno exact qualified protected current-to-candidate transition existsdiagnosticob status --output json
protection_disable_pendingyesprotection removal is waiting for an authorized safe prerequisite reversaldiagnosticob status --output json
protection_disablement_not_authorizedyesprotection disablement requires a fresh local confirmation bound to current statediagnosticob status --output json
protection_disablement_overdueyesprotection disablement remains pending beyond its action deadlinediagnosticob status --output json
protection_enablement_restart_not_authorizedreserveda restart-bound protection prerequisite lacks fresh local confirmationdiagnosticob validate --output json
protection_image_revert_unsafeyesthe requested image reversion would strand an effective protection prerequisitediagnosticob status --output json
protection_image_update_overduereserveda qualified protected service image publication missed its maintenance targetdiagnosticob status --output json
protection_prerequisite_driftedreserveda live prerequisite no longer matches the verified protection configurationdiagnosticob validate --output json
protection_service_image_unpublishedyesno qualified immutable protection image is published for the observed service basediagnosticob status --output json
protection_service_patch_availablereserveda qualified exact protected service image transition is availableresolvingob service apply --output ndjson
protection_service_patch_requiredreservedprotection enablement requires a separate qualified same-major service patch firstresolvingob service apply --output ndjson
recovery_objective_unsupportedyesthe selected driver, version, or target cannot execute the declared recovery kinddiagnosticob validate --output json
replay_continuity_brokenreservedthe native replay sequence has a gap inside the required recovery windownextob plan --output json
restore_drill_schedule_too_sparseyesthe restore-drill cadence cannot keep restore proof currentdiagnosticob validate --output json
restore_state_stalereservedlive service, volume, or repository state changed after restore planningdiagnosticob status --output json
service_image_digest_unavailableyesthe exact immutable service image required by recovery is unavailablediagnosticob status --output json
service_image_patch_disable_pendingyesservice image refresh is refused while safe protection disablement is pendingdiagnosticob status --output json
service_major_upgrade_unsupportedreservedthe requested service image transition crosses an unsupported major versiondiagnosticob status --output json