Of record

The running jobjob_7Hq2 · waiting · on approval · $49.00 held

A member who attests at a named step stays of record on the subject across jobs. They withdraw by naming a successor, and if their credential or coverage lapses, the custodian ladder covers the subject so nothing falls into a gap.

Of record answers one question: who answers for a subject between jobs? A patent family outlives the filing that opened it, and someone has to stay on it. The member who attests at the step you name is that person, until they hand it on.

One line on the subject: the role, the step that names them, and who covers it if they can't:

Run
grep -A3 subject: services/provisional-patent.ts
magic values: applicant.email = signs@example.test
  subject: {
    kind: 'patent family', key: 'application_number', steward: docketWatch,
    of_record: { role: 'practitioner', named_at: 'sign', custodian: ['practitioner', 'brand'] },
  },

The practitioner signs and the application is filed. The subject now names them, and so does their own list. The legal brand calls a subject an asset, so its routes read /assets:

Call
→ GET /assets/sbj_7Hq2
200 · magic values: applicant.email = signs@example.test
{
  "id": "sbj_7Hq2",
  "object": "subject",
  "livemode": false,
  "kind": "patent family",
  "key": {
    "field": "application_number",
    "value": "rcp_7Hq2"
  },
  "created": "2026-10-25T14:02:11.000Z",
  "jobs": [
    "job_7Hq2"
  ],
  "of_record": {
    "role": "practitioner",
    "member": "mbr_7Hq2",
    "named_at": "sign",
    "since": "2026-10-25T14:02:11.000Z",
    "status": "of_record"
  },
Call
→ GET /me/assets   # as mbr_7Hq2
magic values: applicant.email = signs@example.test
← 200 sbj_7Hq2 · patent family rcp_7Hq2 · of_record

A member of record may withdraw at any time, and withdrawal is an act that names who takes the seat. Without a successor it is refused:

Call
→ POST /assets/sbj_7Hq2/withdraw {}   # as mbr_7Hq2
magic values: applicant.email = signs@example.test
← 422 input_invalid: Withdrawal names a successor: the mbr_ id of the signer who becomes of record.

The seat stays theirs, withdrawing, until the successor accepts it, in a Task offered to them alone. Accepting is an attestation, unpaid, after the same conflicts check as any Task:

Call
→ POST /assets/sbj_7Hq2/withdraw {"successor":"mbr_7Hq3"}   # as mbr_7Hq2
200 · magic values: applicant.email = signs@example.test
  of_record  mbr_7Hq2 · withdrawing · successor mbr_7Hq3
  history    opened | of_record mbr_7Hq2 | withdrawing mbr_7Hq2 mbr_7Hq3
  14:02 · task.posted · tsk_7Hq3 · $0.00 · dispatch direct · to mbr_7Hq3
  14:02 · task.offered · tsk_7Hq3 · mbr_7Hq3 · client
Call
→ POST /reviews/tsk_7Hq3/attest {"checklist":["I take this subject of record, and its deadlines with it"]}   # as mbr_7Hq3
magic values: applicant.email = signs@example.test
← 200 tsk_7Hq3 · done · practitioner · of_record · * · $0.00 · attested · no estimate · due 2026-10-30 14:02
Call
→ GET /assets/sbj_7Hq2
magic values: applicant.email = signs@example.test
← 200 sbj_7Hq2 · patent family
  of_record  mbr_7Hq3 · of_record
  history    opened | of_record mbr_7Hq2 | withdrawing mbr_7Hq2 mbr_7Hq3 | withdrawn mbr_7Hq2 mbr_7Hq3

A member of record whose credential or coverage lapses can't hold the seat. The subject turns vacant, the custodian ladder covers it, rung by rung and then the brand, and the owner console raises an alarm:

Call
→ POST /attorneys/signers/mbr_7Hq3/verify {"facts":{"credentials":{"patent agent":["US-CA"]},"coverage":{"per_act":1000000,"until":"2026-10-01T00:00:00Z"}}}   # the verifier: the policy lapsed
magic values: applicant.email = signs@example.test

→ GET /assets/sbj_7Hq2
← 200 sbj_7Hq2 · patent family
  of_record  mbr_7Hq3 · vacant · covered by brand · coverage lapsed on 2026-10-01
  history    opened | of_record mbr_7Hq2 | withdrawing mbr_7Hq2 mbr_7Hq3 | withdrawn mbr_7Hq2 mbr_7Hq3 | vacant mbr_7Hq3 brand
Run
open http://localhost:8787/console   # the owner console
magic values: applicant.email = signs@example.test
alarm · vacant · sbj_7Hq2 · patent family rcp_7Hq2 · practitioner mbr_7Hq3: coverage lapsed on 2026-10-01 · covered by brand

Staying of record carries first refusal: a follow-on Task on the same subject, such as the next filing on a patent family, is offered to the member of record first, for the Pool's affinity window, before anyone else.

  • Withdraw with a successor. The member names who takes the seat, and the successor accepts in their own session.
  • Withdraw without one. The seat goes to the Pool, offered like any Task, and the custodian ladder covers it until someone accepts.
  • Before a lapse. A notice goes out 30, 14 and 3 days before a credential or a policy lapses, so the member renews before the seat falls vacant. A seat that falls vacant anyway alarms in the owner console, and the custodian covers it.
KeyWhat it saysDefault
of_record.roleThe role whose member stays of recordrequired
of_record.named_atThe step whose attestation names themrequired
of_record.custodianWho covers a vacant seat, in order: roles, then 'brand'['brand']
SurfaceWhat it adds
APIGET /subjects/:id, and for a member GET /me/subjects and POST /subjects/:id/withdraw
CLIsubjects get, and me subjects and subjects withdraw in a member's session
MCPthe subject:// resource, with its clocks and who is of record
SDKsubjects.get(), typed, with its clocks and who is of record
Site—
DocsThe subject routes, in openapi.json
AppThe delivery portal lists where the member is of record; the owner console alarms on a vacancy
CodeWhen
input_invalidA withdrawal names no successor, or one who holds no current credential for the role
not_foundThe member isn't of record on that subject
custodian_unqualifiedcheck: the ladder leaves the brand of record for a credential it doesn't hold
  • Legal. The practitioner who signs stays of record on the patent family, and a vacant seat is covered by the brand. Provisional patent application.
  • Tax. The signer stays of record on the taxpayer across years, and owns the filing clock. Annual return.
  • Sales. A deal's account names no one of record.