Eligibility
Seven predicates, in order, decide whether a member may take a Task, and a work register adds two. The first one they fail is the answer, with its cure, and no tier overrides it.
| # | Predicate | Needs | Cure |
|---|---|---|---|
| 1 | credential | <credential> | Finish /join: the verifier checks the application before any Task is offered. |
| 1 | credential | <credential> | Renew <credential>; the verifier writes it once it checks. |
| 2 | region | <credential> in <region> | Add <region> to your regions at /join; the verifier checks the admission. |
| 3 | coverage | <amount> of coverage in force per act | Renew the policy; the verifier writes the new term. |
| 4 | availability | availability on | Set your availability to on. |
| 4 | availability | verified facts fresh at use | The verifier rechecks your facts; nothing waits on you. |
| 5 | separation | a member who did not do <role> | None: another member takes this one. |
| 5 | separation | the member who did <role> | None: the member who did it takes this one. |
| 5 | separation | separation: recused from <subject> | None: you stepped aside, and another member takes it. |
| 6 | conflict | no party in your conflicts ledger | None for this Task: your ledger stays yours, and no one learns which entry matched. |
| 7 | clearance | each statement attested: <statements> | Send each statement in attest, word for word. |
| 8 | in_range | in a work register: the site within your radius of your base | Widen your radius at /join, or set a base nearer the work. |
| 9 | window_free | in a work register: the window, and 30 minutes either side, free of every window you hold | Give back a window you hold before notice, or wait for the next Task. |
| Member | Branch |
|---|---|
mbr_eligible | A member who holds every credential the Pool names, everywhere, with coverage in force: eligible for every Task, and the last member a cascade offers one to. |
mbr_lapsed_credential | A member whose credential has lapsed: ineligible, on the credential predicate. |
mbr_lapsed_coverage | A member whose coverage lapsed yesterday: ineligible, on the coverage predicate. |
mbr_out_of_region | A member admitted only in ZZ, a region no job names: ineligible on the region predicate wherever an act needs a region. |
→ POST /matters {"service":"contract-review","contract":"lease.pdf","client":{"name":"Ada Lovelace","email":"signs@example.test"},"client_region":"US-CA","max_usd":99,"key":"lease-ca"}← job_7Hq2 · waiting · on claim · $99.00 held · advise · tsk_7Hq2
→ POST /reviews/tsk_7Hq2/claim # as mbr_lapsed_credential
← 403 ineligible · credential: attorney needs bar admission, and the verifier holds no current one for mbr_lapsed_credential.
cure Renew bar admission; the verifier writes it once it checks.
→ POST /reviews/tsk_7Hq2/claim # as mbr_out_of_region
← 403 ineligible · region: attorney needs bar admission in US-CA, and mbr_out_of_region holds it in ZZ.
cure Add US-CA to your regions at /join; the verifier checks the admission.
→ POST /reviews/tsk_7Hq2/claim # as mbr_lapsed_coverage
← 403 ineligible · coverage: attorney needs $1,000,000 of coverage in force per act, and mbr_lapsed_coverage's policy lapsed on 2026-10-24.
cure Renew the policy; the verifier writes the new term.
→ POST /reviews/tsk_7Hq2/claim # as mbr_eligible
← 200 tsk_7Hq2 · claimed · attorney · advise · US-CA · $50.00 · 45 min · $66.67 an hour · due 2026-10-27 14:02grep -E "coverage:|dispatch:" pools/attorneys.ts coverage: { per_act: 1_000_000, by: 'member', usd: 4 },
dispatch: 'feed', affinity: '30d', rank: ['fit', 'track', 'speed'],
→ POST /matters {"service":"contract-review","contract":"lease.pdf","client":{"name":"Ada Lovelace","email":"signs@example.test"},"client_region":"US-CA","max_usd":99,"key":"lease-ca"}
← job_7Hq2 · waiting · on claim · $99.00 held · advise · tsk_7Hq2
→ POST /reviews/tsk_7Hq2/claim # as mbr_lapsed_credential
← 403 ineligible · credential: attorney needs bar admission, and the verifier holds no current one for mbr_lapsed_credential.
cure Renew bar admission; the verifier writes it once it checks.| Code | Category | HTTP | Why |
|---|---|---|---|
ineligible | blocked | 403 | The member can't take this Task: the answer names the first eligibility predicate they fail, and its cure. |
task_taken | conflict | 409 | Another member holds this Task, or has it offered to them first. |