Skip to content

Commit 296cebf

Browse files
committed
docs: add code-derived product spec
1 parent d139e48 commit 296cebf

40 files changed

Lines changed: 4305 additions & 0 deletions

docs/product-spec/README.zh-CN.md

Lines changed: 347 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,347 @@
1+
# Coder Studio Product Spec
2+
3+
本文档定义 Coder Studio 的产品功能规格体系。它不是 PRD,也不是历史设计记录,而是面向开发、测试和后续 AI agent 的功能事实与验收契约。
4+
5+
## 1. 文档目标
6+
7+
Product Spec 只回答四类问题:
8+
9+
- 当前有哪些用户可达或内部可用的功能。
10+
- 每个功能从哪里进入、如何交互、有哪些状态和边界。
11+
- 每个功能依赖哪些前端入口、WebSocket command、server handler、provider 或 core 类型。
12+
- 每个功能如何验收,如何拆成手工或自动化测试用例。
13+
14+
Product Spec 不承担以下职责:
15+
16+
- 不写市场背景、品牌叙事或愿景口号。
17+
- 不复述历史方案、旧 PRD 或过时 specs。
18+
- 不把未接线 UI、实验代码或未来设想写成已实现能力。
19+
- 不替代技术设计文档、实现计划或变更记录。
20+
21+
## 2. 事实来源
22+
23+
新规格以当前代码为准。旧 `docs/PRD*.md``docs/superpowers/specs/*`、wiki、promotion 和历史 issue 只能作为线索,不能作为事实依据。
24+
25+
可信事实来源按优先级排列:
26+
27+
1. 用户可达入口:页面、按钮、菜单、快捷键、移动端 Sheet / Drawer。
28+
2. 前端代码:`packages/web/src/app``packages/web/src/shells``packages/web/src/features`
29+
3. WebSocket 与命令分发:`packages/server/src/ws/dispatch.ts``packages/server/src/commands`
30+
4. 共享合同:`packages/core/src`
31+
5. Provider 能力:`packages/providers/src`
32+
6. 测试证据:`*.test.ts``*.test.tsx``e2e-ui/specs`
33+
34+
如果代码、旧文档和 README 描述冲突,以当前代码为准。
35+
36+
## 3. 目录结构
37+
38+
建议目录如下:
39+
40+
```text
41+
docs/product-spec/
42+
README.zh-CN.md
43+
44+
modules/
45+
app-shell.zh-CN.md
46+
auth.zh-CN.md
47+
welcome.zh-CN.md
48+
workspace.zh-CN.md
49+
workspace-desktop.zh-CN.md
50+
workspace-mobile.zh-CN.md
51+
workspace-tabs-layout.zh-CN.md
52+
agent-sessions.zh-CN.md
53+
agent-panes.zh-CN.md
54+
agent-instructions.zh-CN.md
55+
providers.zh-CN.md
56+
supervisor.zh-CN.md
57+
files.zh-CN.md
58+
editor-preview.zh-CN.md
59+
search-quick-open.zh-CN.md
60+
git.zh-CN.md
61+
worktrees.zh-CN.md
62+
terminal.zh-CN.md
63+
settings.zh-CN.md
64+
diagnostics.zh-CN.md
65+
monitoring.zh-CN.md
66+
work-analysis.zh-CN.md
67+
skills.zh-CN.md
68+
updates.zh-CN.md
69+
notifications.zh-CN.md
70+
command-palette.zh-CN.md
71+
shortcuts.zh-CN.md
72+
ui-components.zh-CN.md
73+
74+
flows/
75+
startup-and-auth.zh-CN.md
76+
open-workspace.zh-CN.md
77+
start-agent-session.zh-CN.md
78+
file-edit-preview.zh-CN.md
79+
git-change-review.zh-CN.md
80+
terminal-recovery.zh-CN.md
81+
provider-configuration.zh-CN.md
82+
83+
acceptance/
84+
smoke.zh-CN.md
85+
desktop.zh-CN.md
86+
mobile.zh-CN.md
87+
server-commands.zh-CN.md
88+
```
89+
90+
目录职责:
91+
92+
- `modules/`:按产品模块记录功能点、状态、边界和验收标准。
93+
- `flows/`:记录跨模块用户流程,用于端到端验收和 e2e 用例设计。
94+
- `acceptance/`:记录全局验收清单,覆盖冒烟、桌面、移动端和 server command 层。
95+
96+
## 4. 模块边界
97+
98+
模块按用户能力和代码边界共同划分。优先保持一个模块内的功能能被同一类用户入口触发,并尽量对应明确的代码目录。
99+
100+
初始模块边界:
101+
102+
| 模块 | 覆盖范围 | 主要代码线索 |
103+
| --- | --- | --- |
104+
| App Shell | 启动、路由壳层、连接态、桌面/移动壳层选择 | `packages/web/src/app``packages/web/src/shells` |
105+
| Auth | 登录、会话门禁、认证状态 | `packages/web/src/features/auth``packages/server/src/auth` |
106+
| Welcome | 欢迎页、打开工作区入口、设置入口 | `packages/web/src/features/welcome` |
107+
| Workspace | 工作区总入口、active workspace、加载/错误/空态 | `packages/web/src/features/workspace``packages/server/src/commands/workspace.ts` |
108+
| Workspace Desktop | 桌面工作区布局、侧栏、主区、底部终端 | `packages/web/src/features/workspace/views/desktop` |
109+
| Workspace Mobile | 移动端 Dock、Sheet、Drawer、移动端工作区状态 | `packages/web/src/features/workspace/views/mobile` |
110+
| Workspace Tabs / Layout | workspace tab、布局持久化、focus/fullscreen、最后查看目标 | `packages/web/src/features/workspace/actions/use-workspace-ui-state-persistence.ts``packages/web/src/features/workspace/actions/use-workspace-layout-actions.ts` |
111+
| Agent Sessions | Agent 会话创建、运行态、历史、metadata | `packages/web/src/features/agent-panes``packages/server/src/commands/session.ts` |
112+
| Agent Panes | Agent pane 布局、pane card、draft launcher、pane navigation | `packages/web/src/features/agent-panes` |
113+
| Agent Instructions | Agent 指令生成、读取、编辑、token 趋势 | `packages/web/src/features/workspace/actions/use-agent-instructions-actions.ts``packages/server/src/agent-instructions` |
114+
| Providers | Provider 配置、切换、运行边界、自定义 provider | `packages/web/src/features/agent-providers``packages/providers/src``packages/server/src/provider-runtime` |
115+
| Supervisor | Supervisor 列表、目标、详情、移动端 Sheet | `packages/web/src/features/supervisor``packages/server/src/supervisor` |
116+
| Files | 文件树、刷新、上下文菜单、上传、打开文件 | `packages/web/src/features/workspace/views/shared/file-tree-panel.tsx``packages/server/src/commands/file.ts` |
117+
| Editor Preview | 文本编辑、图片/Markdown/HTML 预览、Diff viewer | `packages/web/src/features/code-editor``packages/server/src/preview` |
118+
| Search / Quick Open | 搜索、快速打开、搜索预览 | `packages/web/src/features/quick-open``packages/web/src/features/workspace/views/shared/search-panel.tsx` |
119+
| Git | Git 状态、Diff、commit、branch、push/pull | `packages/web/src/features/workspace/actions/use-git-actions.ts``packages/server/src/commands/git.ts` |
120+
| Worktrees | Worktree 列表、详情、管理入口 | `packages/web/src/features/workspace/views/shared/worktree-*``packages/server/src/commands/worktree.ts` |
121+
| Terminal | shell terminal、agent terminal、多终端、恢复、上传 | `packages/web/src/features/terminal-panel``packages/server/src/terminal` |
122+
| Settings | 设置页、provider 设置、外观、快捷键、监控设置、关于 | `packages/web/src/features/settings``packages/server/src/commands/settings.ts` |
123+
| Diagnostics | 系统依赖、诊断页、安装流程 | `packages/web/src/features/diagnostics``packages/server/src/commands/diagnostics.ts` |
124+
| Monitoring | 运行监控、指标展示、监控设置 | `packages/web/src/features/monitoring``packages/server/src/monitoring` |
125+
| Work Analysis | 工作分析、时间范围、归因、趋势、导出 | `packages/web/src/features/work-analysis``packages/server/src/work-analysis` |
126+
| Skills | skills 面板、挂载目录、归因和管理 | `packages/web/src/features/workspace/actions/use-skills-panel.ts``packages/server/src/skills` |
127+
| Updates | 更新检查、更新提示、footer update rail | `packages/web/src/features/updates``packages/server/src/update` |
128+
| Notifications | Toast、系统通知、会话完成通知 | `packages/web/src/features/notifications``packages/web/src/components/ui/toast` |
129+
| Command Palette | 命令面板、命令入口、键盘交互 | `packages/web/src/features/command-palette` |
130+
| Shortcuts | 全局快捷键、工作区导航快捷键、设置页快捷键展示 | `packages/web/src/features/workspace/actions/use-workspace-navigation-shortcuts.ts``packages/web/src/features/settings/components/shortcuts-settings.tsx` |
131+
| UI Components | 可复用 UI 原语和组件库状态 | `packages/web/src/components/ui` |
132+
133+
模块边界不是永久固定的。后续盘点发现某个模块过大时,应拆分为更小的文档,但功能 ID 要保持稳定。
134+
135+
## 5. 功能状态
136+
137+
每个功能点必须标记一个状态:
138+
139+
| 状态 | 定义 |
140+
| --- | --- |
141+
| `Implemented` | 代码已接线,用户可达,可按验收标准验证。 |
142+
| `Partial` | 有部分代码或 UI,但流程、状态、错误处理或验收路径不完整。 |
143+
| `Internal` | 内部能力存在,但没有稳定用户入口,或只被其他功能间接使用。 |
144+
| `Deprecated` | 代码可能仍存在,但产品上不再承诺或不建议使用。 |
145+
| `Planned` | 计划做,但当前代码没有实现。 |
146+
| `Removed` | 曾经存在或曾被文档记录,但当前代码已移除。 |
147+
148+
只有 `Implemented``Partial` 可以写入当前功能规格的主流程。`Planned` 必须明确标注,不得混入已实现能力。
149+
150+
## 6. 功能 ID 规则
151+
152+
功能 ID 用模块前缀加三位数字,稳定后不要随意修改。
153+
154+
建议前缀:
155+
156+
| 前缀 | 模块 |
157+
| --- | --- |
158+
| `APP` | App Shell |
159+
| `AUTH` | Auth |
160+
| `WELCOME` | Welcome |
161+
| `WS` | Workspace |
162+
| `WSD` | Workspace Desktop |
163+
| `WSM` | Workspace Mobile |
164+
| `WSL` | Workspace Tabs / Layout |
165+
| `SESSION` | Agent Sessions |
166+
| `PANE` | Agent Panes |
167+
| `INSTR` | Agent Instructions |
168+
| `PROVIDER` | Providers |
169+
| `SUP` | Supervisor |
170+
| `FILE` | Files |
171+
| `EDITOR` | Editor Preview |
172+
| `SEARCH` | Search / Quick Open |
173+
| `GIT` | Git |
174+
| `WT` | Worktrees |
175+
| `TERM` | Terminal |
176+
| `SETTINGS` | Settings |
177+
| `DIAG` | Diagnostics |
178+
| `MON` | Monitoring |
179+
| `WA` | Work Analysis |
180+
| `SKILL` | Skills |
181+
| `UPDATE` | Updates |
182+
| `NOTIFY` | Notifications |
183+
| `CMD` | Command Palette |
184+
| `SHORTCUT` | Shortcuts |
185+
| `UI` | UI Components |
186+
187+
示例:
188+
189+
```text
190+
### WS-001 打开工作区
191+
### SESSION-004 恢复 Agent 会话
192+
### GIT-006 查看文件 Diff
193+
```
194+
195+
如果功能移动到另一个模块,旧 ID 保留,并在新位置标注迁移说明。
196+
197+
## 7. 模块文档模板
198+
199+
每个 `modules/*.zh-CN.md` 使用以下结构:
200+
201+
```text
202+
# 模块名
203+
204+
## 1. 模块范围
205+
206+
覆盖:
207+
- workspace 列表、打开、关闭。
208+
209+
不覆盖:
210+
- Git、终端和文件编辑细节。
211+
212+
## 2. 用户入口
213+
214+
| 入口 | 端 | 说明 |
215+
| --- | --- | --- |
216+
| Workspace launch modal | Both | 浏览目录并打开 workspace。 |
217+
218+
## 3. 功能点清单
219+
220+
| ID | 功能点 | 状态 | 代码入口 | 验收入口 |
221+
| --- | --- | --- | --- | --- |
222+
| WS-004 | 打开 workspace | Implemented | `packages/server/src/commands/workspace.ts` | `packages/server/src/__tests__/workspace-commands.test.ts` |
223+
224+
## 4. 功能点规格
225+
226+
### WS-004 打开 workspace
227+
228+
状态:`Implemented`
229+
230+
用户行为:
231+
- 用户选择目录并点击打开。
232+
233+
系统响应:
234+
- 前端调用 `workspace.open`,服务端打开目录并返回 workspace。
235+
236+
状态与边界:
237+
- Loading:打开请求处理中。
238+
- Empty:没有可打开 workspace 时展示空态。
239+
- Success:active workspace 切换到打开结果。
240+
- Error:打开失败时展示诊断或错误反馈。
241+
242+
桌面端差异:
243+
- 桌面端在 workspace tab 中显示新 workspace。
244+
245+
移动端差异:
246+
- 移动端进入移动工作区视图。
247+
248+
数据与命令:
249+
- Frontend:`packages/web/src/features/workspace/actions/use-workspace-launch-actions.ts`
250+
- WebSocket command:`workspace.open`
251+
- Server handler:`packages/server/src/commands/workspace.ts`
252+
- Core / provider 类型:`packages/core/src/domain/types.ts`
253+
254+
验收标准:
255+
- Given 启动器中已选择有效路径
256+
- When 用户确认打开
257+
- Then active workspace 切换为打开结果
258+
259+
代码索引:
260+
- `packages/server/src/commands/workspace.ts`
261+
262+
测试线索:
263+
- `packages/server/src/__tests__/workspace-commands.test.ts`
264+
- `packages/web/src/features/workspace/actions/use-workspace-launch-actions.test.tsx`
265+
266+
## 5. 模块级验收清单
267+
268+
- [ ] 能打开一个有效目录作为 workspace。
269+
- [ ] 打开失败时有错误反馈。
270+
271+
## 6. 未确认项
272+
273+
- workspace history 的 UI 排序规则需补充更多代码证据。
274+
```
275+
276+
未确认项必须说明缺少哪类证据。不要用英文占位词代替问题描述。
277+
278+
## 8. 流程文档模板
279+
280+
每个 `flows/*.zh-CN.md` 用于描述跨模块路径:
281+
282+
```text
283+
# 流程名
284+
285+
## 1. 流程目标
286+
287+
## 2. 参与模块
288+
289+
## 3. 前置条件
290+
291+
## 4. 主路径
292+
293+
| 步骤 | 用户行为 | 系统响应 | 关联功能 ID |
294+
| --- | --- | --- | --- |
295+
| 1 | 用户选择目录 | 系统打开 workspace 并进入工作区 | `WS-004` |
296+
297+
## 5. 分支与错误路径
298+
299+
## 6. 验收标准
300+
301+
## 7. 自动化测试建议
302+
```
303+
304+
流程文档不重复模块规格细节,只引用功能 ID。
305+
306+
## 9. 验收写法
307+
308+
验收标准优先使用 Given / When / Then:
309+
310+
```text
311+
验收标准:
312+
- Given 当前没有打开的 workspace
313+
- When 用户从欢迎页选择一个有效目录
314+
- Then 应用进入工作区页
315+
- And 顶部工作区栏显示该 workspace
316+
- And 刷新页面后仍能恢复该 workspace
317+
```
318+
319+
每个功能点至少要有一条可手工验证的验收标准。适合自动化的场景再补充测试建议。
320+
321+
验收标准要避免以下写法:
322+
323+
- “体验正常”
324+
- “逻辑正确”
325+
- “展示合理”
326+
- “和以前一样”
327+
- “参考旧 PRD”
328+
329+
## 10. 盘点顺序
330+
331+
全量盘点按三轮推进:
332+
333+
1. 模块索引轮:为所有模块建立功能 ID、功能名、状态、代码入口和初始验收入口。
334+
2. 功能规格轮:补齐用户行为、系统响应、状态、边界、数据与命令。
335+
3. 验收清单轮:从功能 ID 反向生成模块验收、跨模块流程验收和冒烟清单。
336+
337+
第一轮不要追求完整叙述,重点是覆盖面和代码证据。第二轮再补细节。第三轮再生成测试用例。
338+
339+
## 11. 维护规则
340+
341+
- 修改功能行为时,同步更新对应模块 spec。
342+
- 新增功能时,先分配功能 ID,再补代码索引和验收标准。
343+
- 删除或废弃功能时,不删除 ID,改状态并说明当前代码状态。
344+
- 如果只存在组件代码但没有用户入口,标记为 `Internal``Partial`
345+
- 如果只有旧文档描述但当前代码没有实现,标记为 `Planned``Deprecated``Removed`,不得写成 `Implemented`
346+
- 模块文档中不得大段复制旧 PRD 或旧 specs。
347+
- 验收标准应能被人工执行,也应尽量能转成自动化测试。
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Desktop Acceptance
2+
3+
> 第一轮验收索引。本文只记录桌面端需要覆盖的模块级验收入口。
4+
5+
## 1. 目标
6+
7+
验证宽屏桌面工作台的多区域布局、键盘入口、文件/Git/终端/agent 工作流。
8+
9+
## 2. 验收清单
10+
11+
| ID | 验收项 | 关联功能 ID | 建议方式 |
12+
| --- | --- | --- | --- |
13+
| DESKTOP-001 | 桌面 shell 渲染 | `APP-003` | 组件测试 / e2e |
14+
| DESKTOP-002 | 桌面 workspace 多区域布局 | `WSD-001``WSD-003` | e2e / 截图 |
15+
| DESKTOP-003 | workspace tab 切换 | `WSL-001` | 组件测试 / e2e |
16+
| DESKTOP-004 | session mini map 展示 | `WSL-002` | 组件测试 |
17+
| DESKTOP-005 | activity bar 切换面板 | `WSD-002` | e2e / 手工 |
18+
| DESKTOP-006 | agent panes 渲染和 draft launcher | `PANE-001``PANE-004` | 组件测试 / e2e |
19+
| DESKTOP-007 | Git panel 操作 | `GIT-001``GIT-006` | 单测 / 手工 |
20+
| DESKTOP-008 | Terminal panel 操作 | `TERM-001``TERM-006` | 单测 / e2e |
21+
| DESKTOP-009 | 快捷键和命令面板 | `SHORTCUT-001``CMD-001` | 组件测试 / 手工 |
22+
| DESKTOP-010 | 全屏和布局持久化 | `WSL-003``WSL-005` | 组件测试 / 手工 |
23+
24+
## 3. 未确认项
25+
26+
- 桌面端截图验收标准需在 UI 规格轮补充。

0 commit comments

Comments
 (0)