Estimate: 45m
⚠️ Partially superseded (Yue, 2026-06-14). §3 below — submitter attribution "member OR external (captured name/email)" — is revised: a work item is created only by a signed-in account, so EVERY triage item carries a real submittedByUserId (a workspace member, or a signed-in non-member via 6.12’s canSubmitToTriage); the captured-external externalSubmitter and the unauthenticated portal are dropped. 6.11.10 amends triage-model.md §3 + retires the schema. The rest of this ADR (triage-state, read-exclusion, promote/decline/merge/snooze) stands. Kept as the record of the original decision.
Type: decision (the keystone ADR the schema + service cards build against; no app behavior ships, but the shapes it fixes are load-bearing). Write motir-core/docs/decisions/triage-model.md. It MUST fix:
triage state (Yue). Not a separate submissions table. A submission is born a work_item (kind bug for a bug report, task for a feature request — the request grammar) with NO parent and a triage marker. Decide the marker shape: a dedicated boolean/triagedAt column vs. a reserved workflow_status — choose the one that makes the read-exclusion a cheap, indexable predicate AND survives the item later taking a normal status on promote (a column is the durable choice; justify).where fragment threaded through every list query — NOT N independent filters). This mirrors Linear: "we exclude triage issues from all views since triage is considered to be outside the normal workflow."submittedByUserId + an externalSubmitter JSON/embedded fields) and that external submitters get no tenant access.workItemsService (never raw). Accept = promote to the backlog at the default status with an optional comment. The kind-parent matrix still governs (a bug can parent to epic/story/task; a task similarly) — promotion must respect it.snoozedUntil storage + the return-on-activity trigger).triage-marker column over a reserved status, and for the central exclusion predicate over per-read filters.workItemsService (write authority unchanged) and respect 6.4 permissions + the kind-parent matrix.motir-core/lib/services/workItemsService.ts — the write authority promote/decline commit through.prisma/sql/work_item_triggers.sql — the kind-parent matrix promotion must satisfy.