Estimate: 60m · Depends on: 6.11.4, 6.11.5
Lock the two load-bearing guarantees: (1) triage items are excluded from EVERY normal read, and (2) the actions do exactly what the taxonomy says. On a real Postgres (the standing rule), covering:
- Exclusion at every read — create a triage item, then assert it is ABSENT from: the issue tree, each board read, each list/saved-view read, the ready set, and a 6.1.1 FilterAST search that matches its title; and assert it IS present in the triage-queue read. (A parameterized test over the read set so adding a new read without the exclusion is caught.)
- Intake — the in-app submit creates a triage item attributed to the session member (
submittedByUserId); the shared intake service also attributes a signed-in NON-member (the 6.12 path) to a real submittedByUserId; a logged-out caller is rejected (401) and creates nothing.
- Actions — accept lands it in the backlog at default status; promote sets parent + position via
workItemsService and the item now appears in the tree/search; decline cancels it; mark-duplicate folds comments+attachments into the canonical item and cancels the duplicate; snooze hides it from the queue and new activity returns it. Each respects 6.4 permissions.
Acceptance criteria
- The exclusion is asserted at tree, every board read, every list read, ready set, AND FilterAST search; the queue-only read is asserted; the parameterized read-set test fails if a read omits the exclusion.
- Promote/accept/decline/merge/snooze each assert their post-state (parent/position/status/queue-presence) against a repository read.
- The intake rejects a logged-out caller (no work item created); promote/decline assert 6.4 permission enforcement.
- New service/repository code respects the per-file coverage gate (CLAUDE.md § coverage); tests use the real Postgres helper.
Context refs
- 6.11.3 (exclusion + queue read), 6.11.4 (intake), 6.11.5 (actions).
motir-core/CLAUDE.md § tests-use-real-Postgres + the per-file coverage gate.
tests/helpers/db.ts — the truncate-between-tests harness.