the flow layer
Flow.
Tasks link through two doors: with: binds a value, after: orders on outcome, and the engine reads those bindings into the run graph: nothing else creates an edge. There is no dependency list to maintain beside the file; every verdict on this page replays a conformance fixture.
- 6edge kindsthe closed set
- 4gate predicatesafter: gates on state
- 40matrix cellsproducer × form
- 35replayed verdictsspec-authored fixtures
The two doors
2 doorswith: binds a value and IS a data edge · after: orders on outcome and IS a control edge. Nothing else creates an edge; there is no dependency list to maintain beside the file.
The edge kinds
6 kindsThe run graph speaks a closed set of edge kinds: value bindings, the two observations, control, recovery and the reserved finally. Unknown kinds are reader-tolerated by law · new ones arrive with the spec.
- valuea with binding referencing a task output · carries the binding name
- terminal-observationa status or timing read in with · settles with the producer
- failure-observationan error read in with · flows only when the producer failed
- controlan after entry · carries its gate predicate
- recoveryan on_error.recover reference · a parking read, not an ordering edge
- finallyW5reserved · named so the enum is complete before the trace wave gives cleanup identity
release-gatedreal nika inspect payloads per kind land with the first W2+ release train (engine captures are release-gated by law) · until then every kind above links its conformance fixtures through the matrix below.
The gate predicates
4 predicatesAn after entry gates on producer state: succeeded, failed, skipped or terminal. The full producer-status by predicate matrix is fixture-proven upstream · the site replays it, never re-derives it.
The gate, exhaustively
40 cellsProducer state by consumer edge form: 40 cells, 35 run against the reference model (the spec authors every verdict), 5 statically dead. Pick a cell; the site replays the fixture truth, it never re-derives it.
| producer ↓ · form → | with-value | with-status | with-error | after-success | after-failure | after-skipped | after-terminal | when-true | when-false | no-edge |
|---|---|---|---|---|---|---|---|---|---|---|
| success | ||||||||||
| failure | ||||||||||
| skipped | ||||||||||
| cancelled |
Waves
4 roomsThe engine reads every edge and runs Kahn fronts: tasks with no unmet producer start together, each wave as wide as the graph allows. max_parallel caps a fan-out politely · fail_fast decides whether one failure drains the batch · when: is business logic AFTER the gate admits a task, never the gate itself.
Decisions
W-DECratifiedships with the decisions wave: nika:decide and the Decision IR join this page when the resync brings the W-DEC canon.
Edges are read, never declared: change the file and the graph follows, and /proof renders what the engine derived. Sketch an edge in the playground, or install and let nika check read your file. Read the spec →