Of record
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:
grep -A3 subject: services/provisional-patent.ts 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:
→ GET /assets/sbj_7Hq2{
"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"
},
→ GET /me/assets # as mbr_7Hq2← 200 sbj_7Hq2 · patent family rcp_7Hq2 · of_recordA 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:
→ POST /assets/sbj_7Hq2/withdraw {} # as mbr_7Hq2← 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:
→ POST /assets/sbj_7Hq2/withdraw {"successor":"mbr_7Hq3"} # as mbr_7Hq2 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→ POST /reviews/tsk_7Hq3/attest {"checklist":["I take this subject of record, and its deadlines with it"]} # as mbr_7Hq3← 200 tsk_7Hq3 · done · practitioner · of_record · * · $0.00 · attested · no estimate · due 2026-10-30 14:02→ GET /assets/sbj_7Hq2← 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_7Hq3A 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:
→ 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
→ 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 brandopen http://localhost:8787/console # the owner consolealarm · vacant · sbj_7Hq2 · patent family rcp_7Hq2 · practitioner mbr_7Hq3: coverage lapsed on 2026-10-01 · covered by brandStaying 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.
| Key | What it says | Default |
|---|---|---|
of_record.role | The role whose member stays of record | required |
of_record.named_at | The step whose attestation names them | required |
of_record.custodian | Who covers a vacant seat, in order: roles, then 'brand' | ['brand'] |
| Surface | What it adds |
|---|---|
| API | GET /subjects/:id, and for a member GET /me/subjects and POST /subjects/:id/withdraw |
| CLI | subjects get, and me subjects and subjects withdraw in a member's session |
| MCP | the subject:// resource, with its clocks and who is of record |
| SDK | subjects.get(), typed, with its clocks and who is of record |
| Site | — |
| Docs | The subject routes, in openapi.json |
| App | The delivery portal lists where the member is of record; the owner console alarms on a vacancy |
| Code | When |
|---|---|
input_invalid | A withdrawal names no successor, or one who holds no current credential for the role |
not_found | The member isn't of record on that subject |
custodian_unqualified | check: 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.