FlowDrop Workflow Specification 1.0-draft

A shape is a named JSON Schema, and the shape id is the lane id

Shapes let a lane say what it carries (an order, an entity, a remote contract) without adding a second vocabulary an editor would have to reconcile with lanes.

The rule

Normative: this is the rule
  1. A port shape is a named JSON Schema whose id is a lane id: one id space, no second vocabulary axis.
  2. A shape is declared in one of two places, and the difference is whose it is.
  3. A shape that belongs to code ships and updates with the ports that wear it, needs nothing installed alongside it, and may compute its schema, so one declaration can yield a family of lanes; a derived member's id is base:derivative.
  4. A shape that belongs to the site is declared in the site's own configuration, added without writing code, and travels and diffs with that configuration.
  5. Every shipped lane that is not a primitive has a shape.
  6. A shape names a value; it does not check one.
  7. Nothing validates a value against a shape.

What it means

A shape is a schema with one job: giving a lane a name. It shares the lane's own id space rather than adding a second vocabulary a reader would have to line up against lanes by hand, and it never checks a value — nothing in the system validates a value against a shape's schema; a shape only labels the port that carries one. It is declared in one of two places, and the difference is ownership: a shape belonging to a component ships and updates with the ports that wear it, needs nothing installed alongside it, and may compute its own schema, so one declaration can mint a whole family of lanes; a shape belonging to the site is declared in the site's own configuration and travels with it instead.

Example

The fields the error shape declaresdeclared
["message", "code", "node_id", "retryable"]
The fields a message-list entry must declarerequired
["role"]

Both are declared in code, on the two lanes the implementation ships with an internal structure of their own; a lane that is already a bare JSON type carries no shape at all.

Rule identifiers are permanent and are never renumbered. Each implementation publishes its own standing against these rules; this specification does not.spec 1.0-draft · SCH-42 · changed in spec 1.0