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.
Errors
Section titled “Errors”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: |
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. |
Warnings
Section titled “Warnings”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 ( |
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. |