Estimate: 45m
The design asset the project-permissions UI builds against. New surfaces unspecified in design/projects/: (a) the project Access control (Open / Limited / Private, with a one-line explanation of each, mirroring Jira team-managed); (b) the project Members panel — a list of members with their per-project role (admin / member / viewer), an add-member combobox (workspace members not yet on the project), remove, and role-change; (c) the no-access state a non-member hits on direct navigation to a private project’s board/issues (an EmptyState/ErrorState-family panel, "You don’t have access to this project," not a crash); (d) how role-gated affordances read (a viewer sees create/edit controls disabled with a tooltip, not absent-and-confusing). Output: extend design/projects/ with a mockup (*.mock.html from components/ui/* + --el-*/shape tokens) + PNG + a "Roles & permissions (Story 6.4)" section in design/projects/design-notes.md.
components/ui/* + --el-*/element-shape tokens (no Tier-0 --color-*, no raw shape utilities), AA-safe, passes the render checklist.design-notes.md names the composing primitives (Combobox for add-member + role, Pill for role, the EmptyState/ErrorState family for no-access, Tooltip) and states the migration default (existing projects = open) + that workspace owner/admin always have access.design/projects/ + design-notes.md (Story 1.3) — the project surface this extends; design/workspaces/ (members list precedent)components/ui/* (Combobox, Pill, EmptyState, ErrorState, Tooltip); Jira team-managed Access (open/limited/private) + project roles as the mirror (rung 1)