# 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 and open in the ledger.

## 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 → performer is the product. Performer → 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.

## What ships today

Shipped:
- The package worklists.dev: 5 verbs — claim, complete, query, timeout, trace — with the fold, the append-only ledger, the problem registry and the Gate Rule 6 refusal, under test.
- complete returns a capture intent for the family's event door rather than writing an event itself — one public write door, by law.
- This door: the page, its markdown and JSON twins by content negotiation, the blog, the dated ledger, llms.txt, the sitemap.
- POST /waitlist — the access list, stored in this door's own D1 database, the row exactly what the form says it is.
- Request telemetry to the estate's shared store, disclosed in full at /what-we-log in three faces.
- The security posture every sibling carries: www → apex 301, a CSP with no script source at all, nosniff, frame-ancestors 'none'.
- The OG card per page, carrying a code back to the page it belongs to, decoded by the estate's one card suite.

Open:
- The eight declared verbs not in the package — dispatch, cancel, assign, unassign, start, block, unblock, escalate (P0-W1; dot-do/vis#225–#231).
- A verb answering over HTTP on any worklists origin. The package's handler exists and nothing mounts it; until it does, no /openapi.json and no /.well-known/agents.json (P0-W2).
- The MCP server over the five verbs, hosted (P0-W3). The tool rows are declared in the package; the three write tools route nowhere yet.
- The free/paid line. No price is published on this origin and none may be until the metering unit per verb is settled (P0-W4; dot-do/vis#232).
- A demo tenant a reader can dispatch into without an account (P0-W5; dot-do/vis#424).

Dated ledger: https://worklists.dev/what-ships-today/ · 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.
