AGPL-3.0-or-later · forever.

the language

after

The CONTROL boundary · {producer-task: predicate}. Each entry is one control edge (spec/03-dag.md §after). State, never data — observe outcomes through with:. One of 59 words the served contract declares, projected from workflow.schema.json, the same file your editor validates against.

  • 1surfacetask
  • optionaleverywherea choice, never a miss
  • objecttypethe declared shape
  • 2skeletonscarry this key

the contract

1 declaration

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.

task
objectThe CONTROL boundary · {producer-task: predicate}. Each entry is one control edge (spec/03-dag.md §after). State, never data — observe outcomes through with:.one step of the plan

in a real file

from the etl-state skeleton
etl-state.nika.yaml
  delta:    with:                           # the bindings ARE the edges · previous + fresh → delta      previous: ${{ tasks.previous.output }}      fresh: ${{ tasks.fresh.output }}    invoke:      tool: "nika:json_diff"        # RFC 6902 · empty patch = nothing new      args:        before: "${{ with.previous }}"        after: "${{ with.fresh }}"

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

cross-references

skeletons that carry it

defined by

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