# 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](/types/#scalars) `ID!` | The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it. |
| `sysId` | [String](/types/#scalars) `String!` | The group-scoped human-facing system id (TK-…). |
| `type` | [String](/types/#scalars) `String!` | The kind of record — always `Task` here. |
| `caption` | [String](/types/#scalars) `String!` | The record’s display name — what people see it called. |
| `status` | [String](/types/#scalars) `String!` | The FSM state: open \| in_progress \| postponed \| completed \| cancelled. |
| `parentId` | [ID](/types/#scalars) `ID!` | The parent org group; for a Task parentId === rootId. |
| `rootId` | [ID](/types/#scalars) `ID!` | The org-group family root. |
| `createdAt` | [String](/types/#scalars) `String!` | When the record was created, as a UTC timestamp. |
| `updatedAt` | [String](/types/#scalars) `String!` | When the record last changed, as a UTC timestamp. |
| `revisionNum` | [Int](/types/#scalars) `Int!` | How many times this record has been edited; the first save is 0. |
| `revision` | [ID](/types/#scalars) `ID!` | The OCC revision token — supply it on every mutation of this record; rotates on every write. |
| `refCaptions` | [RefCaption](/types/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](/types/#scalars) | The task's own brief (≤8192: ≠ the CsCase message-spine ruling; the Note thread is the conversation). Absent = caption-only. |
| `priority` | [String](/types/#scalars) `String!` | low \| normal \| high \| urgent — kit-stamped 'normal' when the caller names none (its OWN registry — the CS shape, deliberately not shared). |
| `createdBy` | [ID](/types/#scalars) | WHO opened the task — SERVER-STAMPED from the acting principal; IMMUTABLE. NULL exactly when systemOrigin is set. |
| `systemOrigin` | [String](/types/#scalars) | 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](/types/#scalars) | WHO the work reports to — an User (in-tenant + ACTIVE at set); the notification lane = the deferral. |
| `assigneeUserIds` | [ID](/types/#scalars) `[ID!]!` | The assigned workers. |
| `teamIds` | [ID](/types/#scalars) `[ID!]!` | The assigned Teams (≤4, distinct; in-tenant + ACTIVE at set; each holds a TASKBOOK#TEAM inbox row while the task lives). |
| `labelIds` | [ID](/types/#scalars) `[ID!]!` | The work labels (≤16, distinct; in-tenant + ACTIVE TaskLabels at set). |
| `dueAt` | [String](/types/#scalars) | The expected-completion instant (ISO-8601) — overdue is COMPUTED at read (dueAt < now ∧ live), never stored. |
| `overdue` | [Boolean](/types/#scalars) `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](/types/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](/types/#scalars) | The COMPLETED task this one REOPENS. IMMUTABLE at birth; the reopen provenance edge. |
| `returnAt` | [String](/types/#scalars) | 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](/types/#scalars) | SERVER-stamped, IMMUTABLE, all-three-or-none with the anchor pair; null on hand-created tasks. |
| `originAnchorType` | [String](/types/#scalars) | The origin note's annotated construct type (the /comments face's anchor — the come-back link is /comments/<originAnchorType>/<originAnchorId>). |
| `originAnchorId` | [ID](/types/#scalars) | The origin note's annotated construct id (the polymorphic arm — the sibling names the type; the ApprovalRequest targetType precedent). |

## Used by

- [createTask](/reference/task/createTask/)
- [postponeTask](/reference/work-and-notes/postponeTask/)
- [task](/reference/task/task/)
- [transitionTask](/reference/task/transitionTask/)
- [updateTask](/reference/task/updateTask/)
