AlmondTill/G3N API

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

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

Used by