MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-800

2.8.9 Work-item ⋯ actions menu + Archive action (detail/list/board) — route + UI + page-state

Cancelled
Description

Estimate: 80m · Type: code · Depends on: 2.8.8, 2.8.1

The shared host surface the 2.8.4 Delete row slots into — assumed by the 2.8.1 design ("the shipped Popover actions menu … identical on detail/list/board") but ABSENT: the detail header has only an Edit link, board cards are drag-only, issues-list rows have no ⋯ menu, and Archive is surfaced NOWHERE (archiveWorkItem service has zero route/UI callers; archive reaches the web app only via the in-flight MCP tool 7.8.14 / MOTIR-790).

Build the shared work-item ⋯ actions menu (Popover: Edit details → existing edit route · Copy link → clipboard · — · Archive) and mount it on the detail header, the issues-list row, and the board card. Surface Archive: add a thin POST /api/work-items/[id]/archive route over workItemsService.archiveWorkItem (canEdit-gated, typed errors → 403/404), wire the 2.8.8 Archive flow + archived-item state, and handle page-state-after-mutation on all three surfaces (server refresh vs client-island tick — the board watches CreateIssueProvider.issuesChangedAt). Thread the permission flag to each surface (getManageCapabilities / getCapabilities). Delete is NOT added here — 2.8.4 adds the Delete row + confirm dialog to this menu.

Acceptance criteria

  • A shared ⋯ actions menu renders on detail/list/board with Edit details · Copy link · Archive, matching 2.8.8; non-permitted users see the gated/collapsed menu.
  • Archive route over archiveWorkItem (canEdit; typed errors → 403/404); archiving updates detail/list/board correctly (server vs client-island rule); --el-*/shape tokens.
  • "How to test" click-path in the PR body (UI subtask).

Context refs

  • design 2.8.8 (+ 2.8.1 menu); app/(authed)/issues/[key]/page.tsx (detail header — Edit link to fold in), app/(authed)/issues/_components/* (list rows), app/(authed)/boards/_components/BoardCard.tsx; workItemsService.archiveWorkItem; projectAccessService.getManageCapabilities; CreateIssueProvider.issuesChangedAt; CLAUDE.md "Page state after a mutation". Blocks 2.8.4.