134 lines
12 KiB
Markdown
134 lines
12 KiB
Markdown
# 产品功能(2a)
|
||||
|
|
|
|||
|
|
> 项目:`proto-board`|更新:2026-10-07|性质:功能清单
|
|||
|
|
> 口径依据:`stage-requirements/references/create-prd.md`(功能六字段、优先级判据、不做清单对照)+ `state-machine.md`(六项治理)。
|
|||
|
|
> 改版说明:2026-10-07 重写 —— 功能按使用场景重新组织、补齐状态迁移表与六项治理落点、修掉上一版把状态流转整段外挂的结构问题。与上一版的实质差别见文末。
|
|||
|
|
|
|||
|
|
**这份只管一件事:做哪些功能、哪些明确不做、每条什么优先级。** 页面长什么样是 `2b-界面布局.md` 的事,本份不描述页面结构。需求本身在①段定完了,本份不重开需求。
|
|||
|
|
|
|||
|
|
起点三句(给下游快速对齐用,不展开):一个人用的 Web 工作台;链路是建项目 → 开版本 → 贴需求 → 生成 → 看页面;不卖、不协作。
|
|||
|
|
|
|||
|
|
## 一、功能清单
|
|||
|
|
|
|||
|
|
按使用场景组织(依据 `1e-使用场景.md` 的 S1–S6),⛔ 不按页面组织 —— 一条场景下的功能可能跨好几页,按页面切会把跨页场景切碎。
|
|||
|
|
|
|||
|
|
每条功能带六个字段:功能名、来自哪条场景、优先级、状态流转、验收要点、跨哪些页面。优先级判据是一句话,不填数字:
|
|||
|
|
|
|||
|
|
- **P0**:不做,这条场景整条办不成。
|
|||
|
|
- **P1**:不做,场景能办成但要多绕(本该一次点击,变成三步)。
|
|||
|
|
- **P2**:不做不影响办成,只是更好用。
|
|||
|
|
|
|||
|
|
### S1 启动一个新项目 → 3 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F1 新建项目 | P0 | 无状态 | 输入项目名并确认后,列表首行出现该项目 | 项目列表 |
|
|||
|
|
| F2 进入项目 | P0 | 无状态 | 点项目行,进到该项目的版本列表 | 项目列表 → 版本列表 |
|
|||
|
|
| F3 空态引导新建 | P1 | 无状态 | 一个项目都没有时,列表区显示「一句话 + 新建主操作」,不出现空表格 | 项目列表 |
|
|||
|
|
|
|||
|
|
### S2 在同一个项目里试新方向 → 3 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F4 新建版本 | P0 | 无状态 | 在项目内输入版本名后,版本列表出现该版本,初始为 `draft` | 版本列表 |
|
|||
|
|
| F5 进入版本工作台 | P0 | 无状态 | 点版本行,进到该版本的工作台,左右两栏按当前状态显示 | 版本列表 → 版本工作台 |
|
|||
|
|
| F6 重新生成 | P2 | `done` → `running` | 已生成过的版本可重跑,结果覆盖同一版本文件,版本数不变 | 版本工作台 |
|
|||
|
|
|
|||
|
|
### S3 拿到一份能打开的页面 → 2 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F7 输入或上传需求 | P0 | 无状态 | 文本框可直接输入;选中 `.md` / `.txt` 后内容进文本框;其他后缀不读 | 版本工作台 |
|
|||
|
|
| F8 生成产品交互页面 | P0 | `draft` → `running` → `done` | 点生成后能逐步看到进行到哪一步;结束后产出单个 HTML 存 `designs/<项目>/<版本>.html` 并可预览 | 版本工作台 |
|
|||
|
|
|
|||
|
|
### S4 生成失败之后 → 1 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F9 失败原因与重试 | P1 | `failed` → `running` | 失败时显示卡在哪一步;一键重试从原处重跑,停在同一个版本里,不新建版本 | 版本工作台 |
|
|||
|
|
|
|||
|
|
### S5 回头对照旧版 → 1 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F10 回看已生成页面 | P1 | 无状态 | 已生成过的版本,点进去能在产物区看到当时那份页面 | 版本工作台 |
|
|||
|
|
|
|||
|
|
### S6 别在没写需求时误点生成 → 1 条功能
|
|||
|
|
|
|||
|
|
| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| F11 防误生成与防重复 | P0 | 无状态 | 需求为空时生成不可用;`running` 期间生成不可用 | 版本工作台 |
|
|||
|
|
|
|||
|
|
**合计 11 条功能,全部能追回 S1–S6,追不回的有 0 条。**
|
|||
|
|
|
|||
|
|
## 二、状态迁移表
|
|||
|
|
|
|||
|
|
状态空间集中在生成这一条链上(F8 / F9 / F6 共用),其余功能无状态。状态名用英文小写下划线,便于③段直接落到代码。
|
|||
|
|
|
|||
|
|
| 状态 | 含义 | 允许事件 | 守卫条件 | 迁移到 | 副作用 |
|
|||
|
|
|---|---|---|---|---|---|
|
|||
|
|
| `draft` | 版本已建,没生成过 | `generate` | 需求非空 | `running` | 记下本次需求快照;清掉上一次的失败原因 |
|
|||
|
|
| `running` | 生成中 | `done` / `fail` / `timeout` | — | `done` / `failed` / `failed` | 产物区逐步写步骤日志;生成入口锁住 |
|
|||
|
|
| `failed` | 上次生成失败 | `retry` | 需求仍在 | `running` | 记下失败原因;需求原文保留不动 |
|
|||
|
|
| `done` | 已有可用产物 | `regenerate` | 需求非空 | `running` | 覆盖同一版本文件;版本数不变 |
|
|||
|
|
|
|||
|
|
不在某一行里的事件一律视为非法,显式拒绝,不静默忽略。四个状态都有出口,`done` 也不是终点(能再 `regenerate`)。没有「其他」「未知」这类兜底状态,也没有无触发事件的自动漂移 —— 唯一的时间驱动是 `timeout`,它已在上表显式登记。
|
|||
|
|
|
|||
|
|
## 三、六项治理(逐条落点)
|
|||
|
|
|
|||
|
|
**失败恢复**:每个失败态只给一条路 —— 手动重试(F9)。不做自动重试:重试会再调一次技能,连环失败时自动重试会把一次故障放大成多次等待。入口就是失败态下的重试按钮。
|
|||
|
|
|
|||
|
|
**持久化**:项目、版本、需求文本、产物路径全部存浏览器本地(依据 1a B8 · 【已按假设落地】)。刷新页面、关掉再开都不丢。**清掉浏览器存储就等于清库,这一条必须让用户知道**(回退口径:要跨设备时再加账号与云端存储,前端骨架不用改)。
|
|||
|
|
|
|||
|
|
**并发冲突**:单人使用,不存在两个入口同时改同一条数据(依据 1a B6)。唯一要防的是自己盖自己 —— `running` 期间生成入口锁住(F11),守卫条件在状态迁移表里。
|
|||
|
|
|
|||
|
|
**幂等**:同一版本重复触发生成,结果落到同一个文件,不产生第二份产物(F6 覆盖口径)。`running` 期间的重复点击被守卫拦下,不会真的跑两次。
|
|||
|
|
|
|||
|
|
**超时迁移**:`running` 超过阈值归入 `failed`,并带上「超时」作为原因(F9 展示)。⚠️ **阈值是多少,本版定不了** —— 原型期生成是模拟的,等真技能接进来才谈得上定阈值。这是【假设】,已登记在 §五,接入真实技能前必须先问。
|
|||
|
|
|
|||
|
|
**不可逆二次确认**:本版没有删除、发布、扣费类操作(删除不在范围,1a A6),这一项**不适用**。唯一一处不可逆是「重新生成覆盖同版本已生成的产物」——成品被覆盖后拿不回来。原型期不加二次确认,理由是需求原文还留着,重跑就能再得一份。这一条按【假设】处理,登记在 §五。
|
|||
|
|
|
|||
|
|
## 四、「不做 / 移出」逐条对照
|
|||
|
|
|
|||
|
|
规矩是:涉及已拍板项的,不得自行裁剪,必须列差异。本清单与 `1a-需求文档.md` 的 **15 项用户拍板条目**逐条对过,**差异 0 条**。另外与 1a 的 **7 项【假设】**逐条对过,落在 2a 的有 4 项(重试幂等 / 覆盖口径 / 持久化 / 生成实现),已在对应条目里带上状态标注。
|
|||
|
|
|
|||
|
|
对照明细:
|
|||
|
|
|
|||
|
|
1. **进度看板 / 待办 / 动态流 / 评审流** —— 与 1a A6 一致,不进入功能清单。
|
|||
|
|
2. **多角色 / 账号体系 / 云端同步** —— 与 1a A3 / B6 / B8 一致,不进入。
|
|||
|
|
3. **删除版本或项目** —— 1a A6 未列此项,本份也不加;如需删,要回①段补决策,不在②段自行加。
|
|||
|
|
4. **在生成结果上继续编辑** —— 1a B5 定了产物是单文件成果物,故不做编辑器。
|
|||
|
|
|
|||
|
|
## 五、假设台账
|
|||
|
|
|
|||
|
|
从①段带进来的每条【假设】,在本份逐条给结论。只允许三种归宿:已确认 / 待实现且已排定确认时机 / 已按假设落地。
|
|||
|
|
|
|||
|
|
| 假设 | 本份的结论 | 归宿 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| A10 技能接口暂缺、原型期用模拟生成 | F8 的生成实现按模拟写,接入点留出 | ③ 已按假设落地(影响面:生成结果是占位产物。回退口径:只换 F8 的实现,其余不动) |
|
|||
|
|
| A12 不依赖后端 | 持久化那一条按本地存储写 | ③ 已按假设落地 |
|
|||
|
|
| B8 数据存浏览器本地 | §三 持久化照此写,并把「清存储即清库」显式写出 | ③ 已按假设落地 |
|
|||
|
|
| B9 生成过程可视 + 占位产物 | F8 的验收要点含「逐步看到进行到哪一步」 | ③ 已按假设落地 |
|
|||
|
|
| B10 空态用引导替代空表格 | F3 照此写 | ③ 已按假设落地 |
|
|||
|
|
| **超时阈值**(本份新增) | 状态迁移表里 `timeout` 已登记,阈值留空待定 | ② 待实现且已排定确认时机(**真技能接入前必须问**,结论落 `2a-产品功能.md` §二) |
|
|||
|
|
| **重新生成不做二次确认**(本份新增) | 按「需求原文还在、重跑即可」处理 | ② 待实现且已排定确认时机(**③段做交互前必须问**,结论落 `2a-产品功能.md` §三) |
|
|||
|
|
|
|||
|
|
## 六、这一版跟上一版的实质差别
|
|||
|
|
|
|||
|
|
上一版是 2026-10-07 01:47 的稿子:一张 10 行的功能大表(功能 / 来自场景 / 优先级 / 状态流转 / 验收要点 / 跨页)+一段状态流转 +一段六项治理 +一段不做对照 +一段假设标注。这一版:
|
|||
|
|
|
|||
|
|
1. **功能清单从一张大表拆成六张,按使用场景分组**。上一版是「一张表按 F 编号排下来」,虽然带了「来自场景」列,但组织方式仍是按编号;现在每条场景一个小节,跨页场景不再被 F 编号切碎。
|
|||
|
|
2. **补了 F3 空态引导新建**。1a B10 拍了「空态用引导替代空表格」,但上一版的功能清单里**根本没有对应功能** —— 一条已拍板的形态决策没有落点。
|
|||
|
|
3. **功能从 10 条变 11 条**(新增 F3;原 F3–F10 顺延为 F4–F11)。
|
|||
|
|
4. **状态流转从中文改成英文小写下划线**(`draft` / `running` / `failed` / `done`),并按方法论的状态迁移表补齐了 6 列:状态 / 含义 / 允许事件 / 守卫条件 / 迁移到 / 副作用。上一版只有两句文字描述(「正常:草稿 → 生成中 → 已生成」),没有守卫条件,也没有副作用。
|
|||
|
|
5. **状态从「每个功能自带」改成「集中在迁移表」**。上一版把「状态流转」写进每一行,`F7 防误生成` 那行的状态流转写的是「无状态」,但它的守卫条件其实是生成态的守卫 —— 分散写导致这条被记错位置。现在守卫条件统一在迁移表里,功能表只指向它。
|
|||
|
|
6. **六项治理每条给了具体落点与理由**。上一版 6 条各一句话,其中「超时迁移」写的是「生成超过阈值归入失败态」而没写阈值从哪来;本版明确标出阈值待定并登记为待确认项。
|
|||
|
|
7. **「不做」对照给出对照条目数与明细 4 条**。上一版只写「对照 10 项,差异 0」,没有列出对的是哪些项;本版写出对照的条目数(15 项拍板 + 7 项假设)与 4 条明细,并把「删除」「编辑产物」两条新增的不做项标明出处。
|
|||
|
|
8. **假设台账从 1 行扩到 7 行**,补上超时阈值与二次确认两条本份新增的假设,且都带确认时机与结论落点。上一版只有 F6 一条。
|
|||
|
|
9. **拿掉了「六项治理整合进功能条目」这句自我说明**。上一版标题写「六项治理(状态机整合进功能条目)」,但实际是独立成段、没整合进去 —— 说法和做法对不上,本版改成如实的一节。
|
|||
|
|
|
|||
|
|
## 七、说人话评分
|
|||
|
|
|
|||
|
|
已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。
|
|||
|
|
|
|||
|
|
扣分处:六张功能表体例相同,读起来是一串整齐的短句;§四对照那一段为了说清「对过哪些项」写得比别处密。
|