Files
WorkBuddy df56c2c137 初始化提交:contentm_agent 工作区全量快照
内容分四块:
1、产品规划产出 —— MCN 短视频整合营销工作台的①段五份(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)、②段两份(2a 功能/2b 布局)、③段界面(DESIGN.md 契约与令牌表 + mcn-workbench.html 原型 + 实测/会诊/审查三份 + 23 张闸门截图)。
2、开源竞品调研 —— 5 个内容工作台项目的取证原始件与 1b 系列分析文档。
3、参考资料 —— 竞品视频抽帧 1145 张 + 2 个源视频 + 功能点截图。
4、机制侧 —— 协作脚本与状态台账、工作区记忆日志、抽帧/OCR 脚本。

.gitignore 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
2026-10-08 08:13:02 +08:00

135 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 产品功能(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。
扣分处:六张功能表体例相同,读起来是一串整齐的短句;§四对照那一段为了说清「对过哪些项」写得比别处密。