Task verbs

The running jobjob_7Hq2 · delivered · document.fr-CA.pdf · $49.00 charged

Every act on a Task, the worklists.dev verb it maps to, who writes it, the operation and event, the status it folds to on both sides, and what it means for the member.

A Task's status is never a column. It is a fold over the Task's own appended acts, and each act names its worklists.dev verb, so any client that speaks those verbs reads a Task the same way. Surfaces keep their own status words. Tasks explains the lifecycle, and What a person can do each act.

One row per act. A status shows as services.dev's word, then what a worklists.dev client reads.

worklists.devActWritten byOperationEventFolds to: services.dev · worklists.devFor the member
dispatchpostedthe stepnone: the job reaching the steptask.postedopen · pendingan offer, at a fee fixed now
assignofferedthe dispatch, a direct or the owner's picktask.offertask.offeredopen · pendinga teaser, never a party's name
claimclaimedthe membertask.claimtask.claimedclaimed · claimedheld for them, gone from every other feed
unassignreleasedthe membertask.releasenoneopen · pendingfree, and never scored
unassignreopenedthe clock, after expirednonenoneopen · pendingnever scored
startclearedthe membertask.clearnonecleared · in-progressthe packet opens to them alone
startarrivedthe member, at the sitetask.arrivenoneon_site · in-progresslocation is read now
blockquestionedthe membertask.message with questionjob.pausedcleared, waiting on the client · blockedthe hold and the step's clock pause
unblockansweredthe partythe threadnonecleared · in-progressthe hold runs again
completeattested, sent_back, declinedthe membertask.attest, task.send_back, task.declinepay.accrueddone · settledpaid at the act, whichever they chose
completecompletedthe membertask.completepay.accrueddone · settledpaid per completed Task
completeparty_absentthe member, after site.gracetask.complete with party_absentpay.accrueddone · settledthe full fee
captured/task-verbs.txt · 200 · tsk_7Hq2 · done · magic values: member = mbr_eligible
→ GET /owner/tasks/tsk_7Hq2?acts=true   # the owner: the Task, and the acts its status folds from
{
  "id": "tsk_7Hq2",
  "object": "task",
  "pool": "translators",
  "role": "translator",
  "status": "done",
  "outcome": "attested",
  "acts": [
    { "seq": 1, "act": "posted", "verb": "dispatch", "by": "step:sign", "at": "2026-10-27T14:02:11Z", "fee_usd": 30 },
    { "seq": 2, "act": "offered", "verb": "assign", "by": "dispatch:feed", "at": "2026-10-27T14:02:11Z" },
    { "seq": 3, "act": "claimed", "verb": "claim", "by": "mbr_7Hq4", "at": "2026-10-27T14:20:03Z" },
    { "seq": 4, "act": "expired", "verb": "timeout", "by": "clock", "at": "2026-10-28T14:20:03Z", "breached": "held_until" },
    { "seq": 5, "act": "reopened", "verb": "unassign", "by": "clock", "at": "2026-10-28T14:20:03Z", "reopened": 1 },
    { "seq": 6, "act": "raised", "verb": null, "by": "fill:raise", "at": "2026-10-28T16:20:03Z", "fee_usd": 33 },

A member who works Pools on several doors reads them as one worklist: GET /tasks?doors=all lists every Task offered to them, in one order for every brand. A worklist is a query, so nothing is copied between doors, and each Task still answers to its own Pool's rules.

On an imported or listed Pool, complete accrues the placement line beside the member's pay. A timeout, a cancel and a pass accrue none.

RuleOn services.dev
complete takes a hash, never a booleanan act binds the hash of the packet the member read, or of the evidence they captured
A client acts only as the memberevery act carries the member's own ms_ session token; a brand's key or an agent never can, and gets needs_a_person
Pay follows the act, not the clientthe same act pays the same fee whichever client wrote it
No claim on behalf of anothera claim names its caller; only the owner's task.offer reaches a named member
A refusal never names the holdertask_taken says the Task is held, never by whom
A timeout has no performerthe clock writes expired and no_show, and no person is put in by
No reopen of a done Taska done Task takes no second act; a send-back on attested work is contested, never edited
A pull is freeno line charges a member to claim, clear or complete a Task
A worklist is a query, never a storethe feed is computed from open Tasks and the member's eligibility at the moment it is read
Call
→ POST /tasks/tsk_7Hq2/claim   # as mbr_7Hq9, while mbr_eligible holds it
magic values: member = mbr_eligible
← 409 task_taken: Another member holds this Task, or has it offered to them first. Read your feed for the Tasks offered to you now.