Skip to content

Validation codes

ost validate and the loader report every problem with a stable code, so scripts and assistants can match on it. Codes never change meaning; new ones are added. See the CLI reference for exit codes and the team.yaml reference for the fields.

An error means the config cannot be used. ost validate exits with 1.

Code Meaning
catalog.invalid_version catalog.version is not an exact version (for example 1.0.0).
config.git_failed The team repository could not be fetched or checked out.
config.not_found No team file was found in any of the places searched.
config.read_failed The team file could not be read.
config.yaml_syntax The team file is not valid YAML.
email.missing_placeholder email.pattern does not contain {handle}.
integrations.invalid_options An integration’s options are rejected by its adapter.
integrations.unknown_adapter An integration names an adapter that is not installed for that port.
memory.store_unsupported memory.store is knowledge, but no knowledge integration is configured or it does not provide knowledge.notes.
network.duplicate_name Two network grants of the same kind share a name.
network.invalid_url A network http grant url is not an origin (scheme, host and optional port only).
network.reserved_token A network token names a secret the framework or an adapter reads, so it cannot be a service token.
people.duplicate_handle Two people share the same handle.
people.invalid_grant_key A repo grant key is not a repo name, kind: or *.
people.missing_model A person has no model; every person names the model they run on.
people.runtime_missing_capability A person’s runtime lacks a capability every agent needs (runtime.permissions) or one the person’s role needs.
people.unknown_extends An extends entry names a role that is not in the catalog.
people.unknown_repo A repo grant names a repo that is not listed in repos.
people.unknown_role A person’s role is not in the catalog.
people.write_without_vcs A person has a write grant but no vcs integration supports pull requests.
policies.command_program A policies.commands entry names git, which repository grants govern.
policies.custom_invalid A policies.custom entry cannot be loaded, exports no policy, or is not a policy by the @outstaff/policy schema.
policies.merge_unknown_repo policies.merge.repos names a repo that is not listed in repos.
policies.retry_backoff_order base_minutes is higher than cap_minutes.
policies.usage_shared_mixed_runtime A policies.usage.shared group has people on different runtimes; a group shares one credential, so one runtime.
policies.usage_shared_overlap A person appears in more than one policies.usage.shared group.
policies.usage_shared_unknown_person A policies.usage.shared group names someone who is not in people.
policies.usage_threshold_order defer_scheduled_at is higher than pause_automatic_at.
repos.duplicate_name Two repos share the same name.
repos.multiple_primary More than one repo has kind primary.
roles.unknown_role A roles entry names a role that is not in the catalog.
schema.invalid A value fails a schema rule not covered by a more specific code.
schema.invalid_format A value does not match the required format.
schema.invalid_type A value has the wrong type.
schema.invalid_value A value is not one of the allowed values.
schema.removed_key A key was removed from the schema; the message says what replaces it.
schema.too_big A value, list or string is above its maximum.
schema.too_small A value, list or string is below its minimum.
schema.unknown_key A key is not part of the schema.
tools.duplicate A tool lists a verb twice, or two tools share a source.
tools.http_checksum A tool with an http: source has no checksum, or a platform without one, so the download is not pinned.
tools.invalid_version A tool version is a range, prefix or alias instead of an exact version.
tools.options_without_source A tool sets options but no source to pass them to.
tools.reserved_option A tool option is version, which the tool’s version field sets.
tools.rule_program A structured rule of a tool names a different program than the tool.
workflow.duplicate_status_name Two canonical statuses map to the same tracker status name.

A warning describes something that will not work as written or a default that applies. ost validate still exits with 0.

Code Meaning
capability.missing A role needs a capability that no configured integration provides.
capability.optional_missing A role can use a capability that no configured integration provides.
identities.chat_not_member_id A chat identity is not a Slack member id (for example U0123ABCD); names never match.
identities.tracker_empty A tracker identity is blank.
identities.vcs_not_bot_login A person’s vcs identity is not a GitHub App bot login ([bot]), so the agent’s own activity is not recognized.
identities.vcs_not_login A human’s vcs identity is not a GitHub login (letters, digits, hyphens or underscores, up to 39 characters).
people.missing_chat_identity A person has no identities.chat while a chat integration is configured.
people.missing_tracker_identity A person has no identities.tracker while a tracker integration is configured.
people.missing_vcs_identity A person has a write grant but no identities.vcs, while a vcs integration is configured.
people.reviewer_without_github A person in the reviewer role has no repo grant, or no identities.vcs, so cannot review pull requests as themselves.
people.runtime_without_usage A person’s runtime reports no usage windows, so the usage policy is not applied to that person.
policies.capability_missing A policies switch is on, but the configured adapter lacks the capability it needs.
trust.default humans is omitted, so the default trust rule applies.