FlowDrop Workflow Specification 1.0-draft

A conditional schema request is exact string equality and nothing more

A partial wildcard implementation would report "unchanged" to a client that holds no copy at all, which is worse than answering unconditionally.

The rule

Normative: this is the rule
  1. If-None-Match on a workflow schema read is compared for exact string equality against the tag of the variant being requested.
  2. A match answers 304 carrying the entity tag and the body {}, and does so before the schema itself is assembled.
  3. A mismatch answers the full 200.
  4. The wildcard *, a comma-separated list of tags and weak comparison are not implemented: a caller sending any of them receives a correct but unconditional 200.
  5. Each variant answers its own conditional request, so carrying the variant in the tag costs no variant a 304.

What it means

Only one comparison is implemented: the tag sent must equal, character for character, the tag of the variant actually being requested. The wildcard, a comma-separated list of tags and weak comparison are not read at all — a caller sending any of them falls through to the full response rather than being told, wrongly, that nothing has changed. A partial reading of the wildcard would be worse than none: it would tell a caller holding no copy at all that its (nonexistent) copy is still current.

Because the tag carries the variant (META-6), a tag minted for one variant does not short-circuit a request for the other — each variant answers only its own conditional request.

Example

A held copy's tag, sent back unchanged304 — unchanged
GET /api/flowdrop/workflows/{id}/schema
If-None-Match: "1.2.3"

{}
The plain copy's tag, sent while asking for the annotated body200 — unconditional
GET /api/flowdrop/workflows/{id}/schema?annotated=1
If-None-Match: "1.2.3"
A wildcard match, which this door does not read200 — unconditional
GET /api/flowdrop/workflows/{id}/schema
If-None-Match: *
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 · META-7 · changed in spec 1.0