Task
object type
The CsCase chassis reused: caption REQUIRED (the subject line) + its OWN description field (≤8192 — the task's brief; the conversation is the generic Note thread at NOTE#<taskId>, addNote/notes). priority ∈ {low, normal, high, urgent} (its OWN canned registry — kit-stamped 'normal' when unnamed). createdBy is SERVER-STAMPED (IMMUTABLE); reportTo names WHO the work reports to. Assignment is MULTI: assigneeUserIds ≤8 + teamIds ≤4 (in-tenant + ACTIVE at set) — each holds a write-once TASKBOOK inbox row while the task LIVES (terminal transitions remove USER/TEAM rows in the SAME txn: the inbox self-prunes, bounded by open work). labelIds ≤16 (TaskLabel — the work vocabulary). constructRefs ≤16 {type,id} bind LIVE domain constructs REF-ONLY (the CsCase @375 law: validated in-tenant + non-doomed at write, NO doom arms grow, a purged target renders as a tombstone; each holds a TASKBOOK#REF row while the task is non-doomed — the tasksByConstruct lane). dueAt: overdue = COMPUTED at read (dueAt < now ∧ live; + the dueBefore filter) — NO sweep lane in v1 (the overdue-vitals/notification lane = a NAMED deferral). FSM: open(i) ⇄ in_progress (start/unstart — the inbox retreat) · open|in_progress → postponed (postponeTask — the boomerang: returnAt future-only; the USER/TEAM inbox rows PRUNE [parking means quiet — the REF row stays]; the scheduled-due sweep fires postponed→open AT returnAt, or “Return now” [unpostpone] pulls it back early — either return RE-MINTS the inbox rows) · open|in_progress|postponed → completed (terminal ▣ immutable, doomed:false — legitimate history; REOPEN = a NEW task via linkedFromTaskId, COMPLETED-only) · open|in_progress|postponed → cancelled (terminal ✦ doomed — lists filter it; NOT reopenable-by-link). 'blocked' is deliberately NOT a state — it is a label (no machine consequence in v1). SEARCHABLE by caption (the law; ⚠ the WIRE enum joins at the deploy leg). The ops event domain (at.ops.task.* — the facility→ops neighborhood).
Fields
| Field | Type | Notes |
|---|---|---|
id | ID ID! | The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it. |
sysId | String String! | The group-scoped human-facing system id (TK-…). |
type | String String! | The kind of record — always Task here. |
caption | String String! | The record’s display name — what people see it called. |
status | String String! | The FSM state: open | in_progress | postponed | completed | cancelled. |
parentId | ID ID! | The parent org group; for a Task parentId === rootId. |
rootId | ID ID! | The org-group family root. |
createdAt | String String! | When the record was created, as a UTC timestamp. |
updatedAt | String String! | When the record last changed, as a UTC timestamp. |
revisionNum | Int Int! | How many times this record has been edited; the first save is 0. |
revision | ID ID! | The OCC revision token — supply it on every mutation of this record; rotates on every write. |
refCaptions | RefCaption [RefCaption!]! | The server-composed captions of this record's declared references (the referenced-caption rule) — one row per referenced id; see RefCaption. |
description | String | The task's own brief (≤8192: ≠ the CsCase message-spine ruling; the Note thread is the conversation). Absent = caption-only. |
priority | String String! | low | normal | high | urgent — kit-stamped 'normal' when the caller names none (its OWN registry — the CS shape, deliberately not shared). |
createdBy | ID | WHO opened the task — SERVER-STAMPED from the acting principal; IMMUTABLE. NULL exactly when systemOrigin is set. |
systemOrigin | String | WHICH platform lane minted the task when NO human did. NEVER caller-suppliable — absent from create/edit inputs by law; IMMUTABLE at birth; null on every human-created task. |
reportTo | ID | WHO the work reports to — an User (in-tenant + ACTIVE at set); the notification lane = the deferral. |
assigneeUserIds | ID [ID!]! | The assigned workers. |
teamIds | ID [ID!]! | The assigned Teams (≤4, distinct; in-tenant + ACTIVE at set; each holds a TASKBOOK#TEAM inbox row while the task lives). |
labelIds | ID [ID!]! | The work labels (≤16, distinct; in-tenant + ACTIVE TaskLabels at set). |
dueAt | String | The expected-completion instant (ISO-8601) — overdue is COMPUTED at read (dueAt < now ∧ live), never stored. |
overdue | Boolean Boolean! | COMPUTED at read via the ONE isTaskOverdue home (dueAt < now ∧ live; never stored, so nothing exists to drift; completed the wire face the prose promised). |
constructRefs | TaskConstructRef [TaskConstructRef!]! | The bound domain constructs (≤16, distinct by (type,id) — REF-ONLY per the CsCase @375 law: no doom arms grow; a purged target renders as a tombstone). |
linkedFromTaskId | ID | The COMPLETED task this one REOPENS. IMMUTABLE at birth; the reopen provenance edge. |
returnAt | String | The boomerang instant: while status=postponed the scheduled-due sweep fires postponed→open AT this instant (re-minting the USER/TEAM inbox rows); after the return it stays as honest history (the armed law reads STATUS). Never on the edit face; a re-park restamps it. |
originNoteId | ID | SERVER-stamped, IMMUTABLE, all-three-or-none with the anchor pair; null on hand-created tasks. |
originAnchorType | String | The origin note's annotated construct type (the /comments face's anchor — the come-back link is /comments/<originAnchorType>/<originAnchorId>). |
originAnchorId | ID | The origin note's annotated construct id (the polymorphic arm — the sibling names the type; the ApprovalRequest targetType precedent). |