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-762

6.12.13 Public work-item detail page — read-only public view (with child / sub-issue panel) at /p/[identifier]/items/[key]

Cancelled
Description

Type: code · Surfaced by: 6.14.6 (MOTIR-436) · Deferred by: 6.12 (the public surface shipped flat) · Discovered in: 6.14, 2026-06-15

The gap

6.14.6 ("Detail child-panel UI — a private epic's detail page shows the 'not public' statement instead of its children, for a public/non-member viewer") is premised on a PUBLIC work-item detail page with a child / sub-issue panel. That surface does not exist. This subtask builds it; 6.14.6 then renders its placeholder on top.

Rung-2 evidence (shipped reality — verified 2026-06-15)

  • The public surface (Story 6.12) is FLAT: Overview, Board, Items list, Roadmap, and a public REQUEST detail (/p/[identifier]/requests/[requestKey]). There is NO public work-item / epic detail route. app/(public)/_components/PublicWorkItemList.tsx:32 says verbatim: "6.12.4 has no public work-item DETAIL route (that's a later card), and a public viewer must never be bounced into the authed /issues/[key] surface." The list rows are deliberately non-links.
  • 6.14.4 (done) put the childrenHidden privacy marker ONLY on the flat public projection (PublicWorkItemListItemDto — board / items / roadmap). Its test tests/publicProjects/epicPrivacyEnforcement.test.ts:22-27 documents: "the ONLY surface a non-member can reach on a public project is publicProjectsService… the internal workItemsService tree / detail reads are workspace-scoped — a cross-org non-member 404s there and a member bypasses." So getIssueDetail carries no marker and strips nothing.
  • The authed detail page app/(authed)/issues/[key]/page.tsx requires a session + the project as the actor's ACTIVE project; an external / cross-org public viewer can never reach it. (6.14.7's admin control shipped there, on the authed page.)

What to build

A read-only PUBLIC work-item detail view at /p/[identifier]/items/[key], composed only from shipped components/ui/* + --el-* / [data-display-style] tokens:

  • header (IssueTypeIcon + identifier + title + status Pill);
  • a public-safe body (the 6.12.4 public projection — NO assignee / estimate / story points; internal comments excluded);
  • a CHILD / sub-issue panel listing the item's public-safe children.
  • The read MUST honor the 6.14.4 epic-privacy predicate: for a non-member, a private epic excludes its children and carries the childrenHidden marker (extend the 6.12.4 projection to a per-item detail read; do NOT route public viewers through getIssueDetail).
  • Link the public Items-list rows + board cards to this view (today non-links — PublicWorkItemList.tsx:36).

Note on scope

This is substantial (new public route + a public detail projection read + a design subtask for the page + UI + tests) and likely warrants expansion into a full Story via motir plan rather than landing as one subtask.

Unblocks

  • 6.14.6 (MOTIR-436) — the "this epic is not public" child-panel placeholder (design panel 3, design/epic-privacy/) renders on THIS page.
  • The tree-expand half of 6.14.5 (MOTIR-435) faces the same absence — the public Items view is a flat list, not a tree; its row-badge half (panel 1) does have a home on the existing list/board.