AGPL-3.0-or-later · forever.

the language

on_codes

Optional catch-side filter (mirror of retry.on_codes · same regex) · the action applies ONLY when the final error code is listed · unlisted codes fall through to the default fail (spec/05-errors.md §Fields). One of 59 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.

  • 2surfacesretry · on_error
  • optionaleverywherea choice, never a miss
  • arraytypethe declared shape
  • 1skeletonscarry this key

the contract

2 declarations

Descriptions are the schema's own; the deeper invariants (value languages and regexes) ride the same projection. A miss is a nika check finding before anything runs.

retry
arrayinside retry:^NIKA-[A-Z]{2,9}(-[A-Z][A-Z0-9_]{1,15})?-[0-9]{3}$
on_error
arrayOptional catch-side filter (mirror of retry.on_codes · same regex) · the action applies ONLY when the final error code is listed · unlisted codes fall through to the default fail (spec/05-errors.md §Fields).inside on_error:^NIKA-[A-Z]{2,9}(-[A-Z][A-Z0-9_]{1,15})?-[0-9]{3}$

in a real file

from the etl-state skeleton
etl-state.nika.yaml
  previous:    invoke:      tool: "nika:read"      args: { path: "${{ const.state_path }}" }    on_error:      on_codes: [NIKA-BUILTIN-READ-001]   # not-found ONLY · a permission error still fails loudly      recover: ${{ tasks.empty.output }}

a verbatim slice, real line numbers from etl-state.nika.yaml, conformance-gated upstream on every spec push. open the full skeleton →

the block it lives in

on_error: inside on_error:

The whole grammar in one place: the four verbs · the standard library · the spec. Try it in the playground. Read the reference →