AGPL-3.0-or-later · forever.

the language

backoff_strategy

Which curve the delay follows between attempts · `fixed` · `linear` · `exponential` · default `exponential`. Each attempt waits `backoff_ms` flat, `backoff_ms × attempt`, or `backoff_ms × 2^(attempt-1)` capped at `backoff_max_ms`. One of 62 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.

  • 1surfaceretry
  • optionaleverywherea choice, never a miss
  • stringtypethe declared shape
  • 1skeletonscarry this key

the contract

1 declaration

the failure grammar · this word only ever speaks inside the recovery block, so meeting it means you are reading what happens when something breaks

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
stringWhich curve the delay follows between attempts · `fixed` · `linear` · `exponential` · default `exponential`. Each attempt waits `backoff_ms` flat, `backoff_ms × attempt`, or `backoff_ms × 2^(attempt-1)` capped at `backoff_max_ms`.inside retry:fixedlinearexponential

in a real file

from the fanout skeleton
fanout.nika.yaml
  process:    with:      read: ${{ tasks.read.output }}    # The quiet-day guard: an EMPTY discovery skips the `read` fan, and a    # skipped task hands NULL — which a bare for_each refuses (NIKA-VAR-006).    # The ternary keeps the no-items day green end to end.    for_each: "${{ with.read == null ? [] : with.read }}"    max_parallel: 4                 # SLOT: the polite ceiling    fail_fast: false    timeout: "60s"                  # SLOT: per-iteration bound    retry:      max_attempts: 3      backoff_strategy: exponential      jitter: true    on_error:      recover: null                 # a failed item yields null at its index · the batch lives    infer:                          # SLOT: the per-item job (any verb)      max_tokens: 500               # SLOT: the per-ITEM ceiling · multiply by the fan width      prompt: |        Process this item · ${{ item }}

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

the block it lives in

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