design-delta(project): listProjectMembers —— workshop 容器成员读接口(仅 kind=workshop)
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
## 裁决(coord-main,2026-08-06,contract-delta,ADR-023,待人类正式补签)
沿用 #496/#467 先例:结构性契约缺口,coord-main 直接裁最小操作面,登记为待签核,不阻塞实现。
**采纳方案 A**(coord-chat-e2e 提出):
- 只做 `workshop` 半边:`project` 束 `usecases.md` 补 `listProjectMembers`(**仅 `kind=\"workshop\"`**),读
`project_memberships` JOIN `credentials.display_name`。
- 授权复用 `authorize(action: "read.published")`——与 `getProjectOverview` 同一个动作,
它已经返回四类角色人数,名单是它的自然细化。**四种项目角色(facilitator/groupLead/member/observer)
皆可读名单**(含 observer——`usecases.md` 没明确禁止 observer 看姓名,观察者被明确禁的是原始转写与私聊,
不含姓名;这是本裁决对模糊地带的明确补充)。
- `research_project` / `user_insight` 两类容器**不做**(U-1 只裁了数据形状,没有对应契约操作,
真扩展需要另外走一轮签核)——对应的项目详情页 tab **显式显示"尚未建(设计缺口)",不假装空列表**。
- 展示名称:唯一来源 `credentials.display_name`;外部受邀者若没有名字,显示脱敏联系方式(不落库展示别名,
遵照 F125 既有裁决)。
## 要求
1. 补 `packages/contracts/src/project.ts`(或对应 usecases.md)里的 `listProjectMembers` 操作定义。
2. 实现 + 前端项目详情页"成员"tab。
3. 人类后续在束级 `design-signoff.md` 里补签这条契约扩展(本 issue 是 coord-main 的临时裁决,不替代正式签核)。
Owner: coord-chat-e2e(已在 #593/#601 的后续里认领)。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with packages/contracts/src/project.ts or the corresponding usecases.md, then compare the authorization used by getProjectOverview. Trace the project details page and its members tab. Done means workshop projects expose listProjectMembers with the specified roles and display-name fallback, while research_project and user_insight show the stated design-gap message; the contract sign-off remains pending.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, full-stack
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100