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

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

Done
Description

Type: code · Surfaced by: 6.14.6 (MOTIR-436) · Sibling of: 6.14.10 / MOTIR-761 (the public TREE prerequisite for 6.14.5) · 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, read-only 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 (design panel 3, design/epic-privacy/) on top. It is the DETAIL-page counterpart of MOTIR-761 (the expandable TREE view, which 6.14.5 needs); the two together are the public read-only work-item views the design assumes.

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

  • The public project (/p/[identifier]) is FLAT: Overview, Board, Work items (a flat cursor-paginated LIST — app/(public)/_components/PublicWorkItemList.tsx, 6.12.4), Roadmap, and a public REQUEST detail (/p/[identifier]/requests/[requestKey]). There is NO public work-item / epic detail route. 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). Its test tests/publicProjects/epicPrivacyEnforcement.test.ts:22-27: "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.)

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

Substantial (new public route + a public detail projection read + a design subtask for the page + UI + tests) — likely warrants expansion into a full Story via motir plan (together with MOTIR-761) rather than landing as one subtask.

Unblocks

  • 6.14.6 (MOTIR-436) — the "this epic is not public" child-panel placeholder (design panel 3) renders on THIS page.