# worklists.dev > The work door of the visibility family, operated by Visibility Cloud, Inc. A task is the causal > parent of the events that satisfy it, and `complete` takes an event hash rather than a boolean. An event says what happened. It has never said what it was for. A task supplies that: the record reads *this was scanned because this task said to*. 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. ## Verbs - `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`, `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. - `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. - `query`, `trace` — A worklist is a query, never a store. A task's status is a fold over its own acts, never a column. In the package `worklists.dev` today: `claim`, `complete`, `query`, `timeout`, `trace` (5 of 13). Declared and open: `dispatch`, `cancel`, `assign`, `unassign`, `start`, `block`, `unblock`, `escalate`. ## Addresses on this origin - / the door (HTML; `Accept: text/markdown` or /index.md for the twin; /index.json for JSON) - /blog/ the posts, each with a markdown twin at /index.md - /what-ships-today/ the dated ledger — shipped vs open - /get-access/ the access list; POST /waitlist stores an address in this door's own D1 - /what-we-log request-telemetry disclosure, three faces (html · md · json) - /llms.txt this file - /sitemap.xml This origin answers no verb over HTTP. It publishes no `/openapi.json` and no `/.well-known/agents.json`, because a machine face describing an endpoint that does not answer would be a fabricated one. Unknown is absent, never invented. When a verb answers here, the AXP surface is added then. ## Posts - https://worklists.dev/blog/a-task-is-the-causal-parent-of-its-events/ — A task is the causal parent of its events - https://worklists.dev/blog/a-worklist-is-a-query-never-a-store/ — A worklist is a query, never a store - https://worklists.dev/blog/assign-is-the-push-claim-is-the-pull/ — Assign is the push, claim is the pull - https://worklists.dev/blog/complete-takes-an-event-hash/ — "`complete` takes an event hash, not a boolean" - https://worklists.dev/blog/dispatch-converts-demand-it-never-invents-it/ — Dispatch converts demand; it never invents it - https://worklists.dev/blog/object-to-performer-is-the-product/ — Object → performer is the product; performer → objects is refused - https://worklists.dev/blog/the-same-task-goes-to-a-human-or-an-agent/ — The same task goes to a human or an agent - https://worklists.dev/blog/timeout-is-a-state-not-a-silence/ — Timeout is a state, not a silence ## Family - https://epcis.dev — the event engine - https://barcoding.dev — the barcode layer - https://transactions.dev — the paperwork layer - https://worklists.app — the frontline app, white-labeled under the operator's own name