MOTIR-407Done
6.11.10 Retire the dropped external-submitter intake — ADR amend + schema column drop
Estimate: 45m · Depends on: 6.11.4, 6.11.8
Clean up after the dropped unauthenticated public portal (Yue 2026-06-14 — a work item is created only by a signed-in account). The 6.11.3 schema and the 6.11.2 ADR baked in a captured-external externalSubmitter (name/email, no account) attribution that is now unreachable: every triage item — in-app member OR the 6.12 signed-in non-member — carries a real submittedByUserId. This subtask owns the full retirement:
- Schema (drop the dead columns). Remove the
externalSubmitterembedded fields fromwork_item(keepsubmittedByUserIdas the@relation, keepsnoozedUntil). Author the Prisma migration somigrate devreports no drift afterward (model the change on the schema, never raw-SQL-only — CLAUDE.md FK-as-relation rule); on the shared dev DB hand-author +migrate resolveper the shared-DB drift rule rather than lettingmigrate devpropose a reset. - Consumers. Grep for every
externalSubmitterreference — DTOs, mappers, the queue-read attribution shape, the inbox DTO, any test fixture — and remove/replace it with thesubmittedByUserId-based "member vs public (non-member)" distinction. Typecheck + the touched services’ vitest stay green. - ADR amend. Update
docs/decisions/triage-model.md§3 (submitter attribution) to record the revision: attribution is ALWAYS a realsubmittedByUserId(a workspace member, or a signed-in non-member via the 6.12canSubmitToTriagegrant); the captured-external name/email and the unauthenticated portal are removed. Cite the 2026-06-14 decision; leave the rest of the ADR (triage-state, read-exclusion, promote/decline/merge/snooze) intact.
Acceptance criteria
- The
externalSubmittercolumns are dropped via a clean migration (migrate devreports no difference after);submittedByUserId+snoozedUntilare unchanged. - No
externalSubmitterreference remains in schema, services, mappers, DTOs, or tests; typecheck + the affected vitest are green; the per-file coverage gate holds. docs/decisions/triage-model.md§3 records the signed-in-only attribution revision; the inbox still distinguishes member vs public submitter offsubmittedByUserId+ workspace-membership.
Context refs
- 6.11.2 ADR (
docs/decisions/triage-model.md§3) + 6.11.3 schema — what this retires. - 6.11.4 — the intake that establishes
submittedByUserId-only attribution; Story 6.12 — the signed-in non-member path. motir-core/CLAUDE.md§ migration FK-as-relation + the shared-DB migrate-dev drift rule + the per-file coverage gate.