Skip to main content

Standards

A standard in orun is a declaration the platform can read: a schema, a profile, a rule, an ordering, a contract. This page lists every one of them by the question it answers, and says plainly what orun does with each today.

LabelMeaning
EnforcedA violation fails a command: orun validate, orun plan, orun task check, or the agent runtime. Run that command in CI and the standard cannot be skipped.
RecordedThe declaration is resolved into the plan, the catalog, or a sealed brief as evidence, but nothing blocks on it.
Declared onlyorun parses and carries the declaration, but does not act on it yet.

What must a component look like?​

StandardDeclared inStatus
Component schema. The parameters a type requires and the shape of eachComponentSchema in the compositionEnforced by orun plan: every component's merged parameters are checked against its type's schema, and a mismatch fails the plan
Known type. A component's type must resolve to a composition from a declared sourcecomponent.yaml type, intent.yaml compositions.sourcesEnforced by orun plan
Reserved environment names. User-declared env may not use the ORUN_ prefixAny env blockEnforced by orun validate and orun plan

Which version of a golden path?​

StandardDeclared inStatus
A pinned source. A composition source fixed to an exact content digestdigest: on a source in intent.yamlEnforced by orun plan: if the source resolves to a different digest, the plan fails
A versioned source. A source fixed to a version tagThe source's refRecorded: the tag is resolved at plan time, and the digest it resolved to is written into the plan (spec.compositionSources), so a moved tag shows in the plan diff
Lifecycle. A golden path marked stable, beta, or deprecatedspec.lifecycle on the CompositionRecorded on the composition's catalog entity, so "which components ride a deprecated path?" is a catalog query. No warning is printed

See Stacks and intent presets for how golden paths and platform rules are packaged and adopted.

How may it run in each lane?​

StandardDeclared inStatus
Execution profile. Which steps of a job run in a lane, and with which overridesExecutionProfile in the composition; profile: on a subscriptionEnforced by orun plan: a subscription naming a profile the composition does not define fails, and only the steps the profile selects are rendered into the plan
Profile rules. Which profile applies under which triggerprofileRules on a subscriptionEnforced: orun validate rejects malformed rules, and orun plan applies them and records which rule chose the profile
Trigger bindings. Which CI events activate which environments, and how much each plansautomation.triggerBindings, environments.<name>.activationEnforced by orun plan when it plans for an event (--trigger, --from-ci): an environment the event does not activate is not planned

See compositions, profile rules, and trigger bindings.

In what order?​

StandardDeclared inStatus
Component dependencies. One component's jobs wait for another'sdependsOn in component.yamlEnforced by default: the edge is in the plan and the runner waits on it. orun plan rejects a dependency cycle
Dependency mode. Whether an edge blocks, is advisory, or is dropped, per environment or triggerdependencyMode, dependency rulesEnforced for enforced edges; advisory edges are recorded in the plan as advisoryDependsOn and do not block
Promotion within a plan. Production waits for staging when both are in the same planenvironments.<name>.promotion.dependsOnEnforced: compiled into DAG edges
Promotion across plans. Production may only run after staging succeeded in an earlier runThe same, when the environments are in separate plansRecorded: compiled into evidence gates on the plan's jobs. orun does not yet check them before running

See dependency rules and environment promotion.

With which secrets?​

StandardDeclared inStatus
References, never values. A secret slot holds a secret:// referencesecretEnv, optionalSecretEnvEnforced by orun plan: a literal value in a secret slot fails the plan
Declared output secrets. A job may only publish the secret keys it declaressecretOutputsEnforced by the runner, which discards undeclared keys
Secret access policy. Who may resolve which secrets, under which run factsSecretPolicy documentsEnforced by Orunbase when a secret is resolved; orun policy lint and orun policy test check a policy before it is pushed

See secrets and orun policy.

Within what blast radius may a change go?​

StandardDeclared inStatus
Task contract. The components a change for a task may affect, and the gates it must passtasks/<KEY>.TaskContract.yaml affects, gatesEnforced by orun task check <key>, which fails when the branch changes a component outside affects
Provenance. A task's pull request carries its key in the branch name and an Orun-Task trailer on every commit, one task per PRRepository convention, checked by the platformEnforced by orun pr check locally and by the orun/compliance check on the pull request
Agent tool policy. Which tools an agent type may call, must ask about, or may never calltools.allow, tools.ask, tools.deny in agents/<name>.mdEnforced by the agent runtime; tools not allowed are denied by default
Agent reach. The components an agent type is meant to work onmayAffect in agents/<name>.mdRecorded in the sealed agent type and shown in the cockpit; the runtime does not check it. Use a task contract's affects for an enforced limit

See the task plane and the agent runtime.

Declared, not yet enforced​

These are parsed, merged, and carried through to each component instance, but neither the planner nor the runner acts on them:

  • Group and environment policies in intent.yaml, including those inherited from presets.
  • Execution profile policies: requireCleanGitTree, requirePinnedTerraformVersion, and requireApproval.
  • condition on a component's dependsOn (success, always, failure). An enforced edge always waits for the dependency to succeed.

Write them down if they document intent, but do not rely on them as guardrails. For an approval that actually blocks, use a workflow step with an approval gate (orun approve); for ordering, use dependency rules and promotion.

Making standards stick​

A standard is only as strong as the command that checks it. In CI, run on every pull request:

orun validate # the intent and its rules
orun plan --changed # schemas, pins, profiles, secrets, cycles
orun task check "$TASK_KEY" # on a task branch: the change stays inside its contract
orun pr check # the branch and commits carry the task's lineage

Then review the plan diff: it shows exactly what each standard resolved to for this change. See trigger bindings in CI for a complete GitHub Actions setup.