# worklists.dev — the work door

An event says what happened. It has never said what it was for.

A task is the causal parent of the events that satisfy it, so the record reads *this was scanned
because this task said to*. With the action verb supplying the step and the badge supplying the
performer, a complete event composes from scans with no application in the loop.

`complete` takes an event hash, not a boolean. Closing a task means presenting an attested capture —
a real *who*, at a real place, inside the window — so the record of work done is the same object as
the evidence it happened.

The same task goes to a human or to an agent, and the door does not change shape. An approval is a
task.

## The verbs

- **Dispatch** — `dispatch`, `cancel`. A demand — a document, an exception, a plan, a schedule — becomes the tasks it implies. Worklists never invents demand; it converts it. A canceled task keeps its record and its partial evidence.
- **Assign** — `assign`, `unassign`, `claim`. assign is the push and claim is the pull, and a pull is not management. Assigning an already-assigned task is reassignment, and the append-only record shows both.
- **Perform** — `start`, `block`, `unblock`, `escalate`, `complete`, `timeout`. The lifecycle. A block belongs to the person who raised it. complete takes an event hash. A timeout is a state the record enters, not a silence.
- **Read** — `query`, `trace`. A worklist is a query, never a store. A task's status is a fold over its own acts, never a column.

5 of 13 are in the package today: `claim`, `complete`, `query`, `timeout`, `trace`. The rest are declared.

## The laws

1. **A task is the causal parent of its events.** The record reads this was scanned because this task said to. With the action verb supplying the step and the badge supplying the performer, a complete event composes from scans with no application in the loop.
2. **complete takes an event hash, not a boolean.** Closing a task means presenting an attested capture — a real who, at a real place, inside the window — so the record of work done is the same object as the evidence it happened.
3. **A worklist is a query, never a store.** Status is a fold over a task's own acts. There is no status column to update, no reopen, no update; the record is append-only and the fold is the truth.
4. **Worklists never invents demand; it converts it.** Every task descends from a demand this door can name — a document, an exception, a plan, a schedule. A task with no parent demand is refused.
5. **Object to performer is the product. Performer to objects is refused.** Trace a bag of lettuce back to the hands that moved it, always. List what one person did across the floor — never, on an employer's instance. A scope with no cited authority does not get the metric, and a rate is never computed.
6. **The same task goes to a human or to an agent.** The door does not change shape. An approval is a task; a pick is a task; the agent that drafts the count and the supervisor who attests it append to the same record.
7. **Emitting is never paywalled.** You can always record what you did. The free/paid line, when it publishes, sits on dispatch volume and on the managed instance — never on the act of closing a task with evidence.

Get started: https://worklists.dev/get-access/ · Blog: https://worklists.dev/blog/

## The family

- [epcis.dev](https://epcis.dev) — the event engine. Translate, validate, hash.
- [barcoding.dev](https://barcoding.dev) — the barcode layer. One codec, with source and license named on every answer.
- [transactions.dev](https://transactions.dev) — the paperwork layer. X12, EDIFACT and API-native documents compiled to bizTransaction context.
- [worklists.app](https://worklists.app) — the frontline app, white-labeled and published under the operator's own name.

Operated by Visibility Cloud, Inc.
