worklists.dev

The work door,
written down.

One thesis per post: why a task is the reason on the event, why complete takes a hash, why a worklist is a query, and what this door refuses to compute.

  • A task is the causal parent of its events

    An event says what happened; it has never said what it was for. A task supplies the missing parent, so the record reads "this was scanned because this task said to" — and the join is a hash, not a foreign key.

  • A worklist is a query, never a store

    There is no Task table with a status column. A task's status is a fold over its own acts, a worklist is a predicate over those folds, and the materialized list exists only because the ledger can regenerate it.

  • Assign is the push, claim is the pull

    Two verbs move a task to a performer, and they are not the same act. assign is a routing decision somebody maintains; claim is a performer taking the next thing. A pull is not management, and the line between them decides what is free.

  • complete takes an event hash, not a boolean

    A workforce system knows a button was pressed. A task closed with an event hash knows that an attested who scanned at an attested place inside the window. The type signature is the whole product.

  • Dispatch converts demand; it never invents it

    Every task on this door can name what dispatched it — a document, an exception, a plan or a schedule. dispatch is the compile-down from demand to work, and the reason a work door belongs next to an event spine at all.

  • Object → performer is the product; performer → objects is refused

    "Who touched this pallet?" is the question a work door exists to answer. "What has this person done?" is the same join read backward, and it is refused where queries are constructed — in the grain, the group-by, the parameters and the rendered keys.

  • The same task goes to a human or an agent

    A task is an Action at the human tier. The same object runs as code, as a model call, as an agent, or as a person on a phone; the tier changes how long it takes to settle, never its shape. An approval is a task.

  • Timeout is a state, not a silence

    On an append-only ledger a state change with no actor must be explicit. A breached deadline is written by an alarm, never by a person; a block belongs to whoever raised it; and escalate is a separate act by a separate party.

Get started.

Say what you will dispatch. Access opens the verbs against your own demand, the closing event validated at epcis.dev, and the frontline app under your own name.