NexusFabricRequest a walkthrough

Transformations

A flow describes what happens to the message, in order. This page is about the language that is written in, and about what the compiler refuses before the flow reaches production.

Where a flow is written

The same file opens in two ways. In VS Code it opens as a canvas: a node per step, routes labelled on the edges, drag to reorder, jump into a subflow — and it saves back into the same text. A language-server extension checks it as it is written and puts the error on its position in the file. On disk it stays text: it reads in a git diff, and it is published from the command line.

The refusals below are the compiler’s, and they arrive at publication — the same verdict nexus validate gives, before the flow goes anywhere.

A broken file stops the publication, not the installation

The flow language has one parser. A broken file produces a parse error naming the position, and the installation goes on running the flows already published.

  • A context name is read one way only. Credential keys and outbound headers are templates, checked at publication — not strings interpreted at runtime.
  • A flow name is a path segment under one rule, applied at publication, at the door and at the queue.

Two guards, two meanings

The difference between filtering and refusing is written in the flow, not discovered in production. condition filters silently: a message that does not match goes no further. validate refuses explicitly, at the first rule that is false, with the message and status the rule asks for; the remaining rules are not evaluated.

The two guards, side by side
## Step: filtreaza
```condition
$.type == "order"
```

## Step: verifica
```validate
$.orderId != null | "orderId is required" | syntactic
$.amount > 0      | "amount must be positive"
```

Routing runs exactly one arm

Arms are evaluated in declaration order, the first match runs, and the others do not execute at all. The shape of the arm block is required at publication: a target written outside the block, an order that would leave an empty region, or an arm written below the one that always matches are refusals, not silent behaviour.

A routing block
## Step: alege
```route
$.channel == "retail"  -> catre-retail
$.channel == "partner" -> catre-partener
otherwise              -> catre-implicit
```

Transforms are compiled at publication

XSLT outside the supported subset is refused at publication, not run some other way. The refusal names the unsupported construct, and it arrives when someone publishes, not when the first production message arrives.

Flow libraries

A flow can call a library flow, expanded at compile time with literal parameters. The reference resolves within the caller’s tenant, and the compiled artifact carries that tenant’s copy — so two organisations with a same-named library do not borrow from each other.

What an error message carries

A runtime error message carries the shape, not the content: no error site in the executor interpolates a value from the message. That means an error log can be read, forwarded and retained without carrying your customer’s data with it.

What the language does not do

Parallel branching without a rejoin, no schema-driven coercion and no temporal type are real limits of the language.