初始化提交: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 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
This commit is contained in:
WorkBuddy committed 2026-10-08 08:13:02 +08:00
commit df56c2c137
1773 files changed
+205840

No files matched your search

@@ -0,0 +1,239 @@
# MCN 短视频内容整合营销智能体 · 需求文档(1a)
> 项目 slug:`mcn-shortvideo-agent`|性质:**汇总型需求**(不是 grill 澄清出来的,来源见 §二)
> 汇总时间:2026-10-07 | 状态行:**已确认 6 项 / 模型补全 9 项(其中 9 项未经用户确认)**
> 本文档由三类输入汇总:① 视频关键帧梳理(AI 内容工作台 2.0 / 3.0);② 5 份开源竞品独立分析体加 1 份汇总对比体(`content-workbench`);③ MCN 场景约束(多账号矩阵、短视频为主、整合营销)。
> 凡模型自补的内容标【假设】,凡来自具体来源的标【源:…】。
> 🔴 **上游状态(2026-10-07 22:3x 更新,此前一行已作废)**:第 ②类输入已**重写完成并逐条复核完毕**。5 份独立体在 21:40 到 22:01 重写为产品视角七节结构;汇总对比体在 22:3x 按新边界重排。逐条复核结论:**9 条受影响条目里 2 条改、7 条不改**(清单见 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/复核清单-1a受影响条目.md`)。
> 本版据此改了两处:**F5 的措辞**(旧写「敏感词与事实检测」,新版事实是「敏感信息硬拦 + 人设一致性软劝」)、**F7 的依据列**(Easel 发布中心直证的只有「多平台」,「多账号」另找依据)。另外 §六 治理段的「组织级暂停」按新版改成「组织级急停」,并把三件事「人来做」的形态分开写。
> 其余受影响条目(F8、F9、F13、F10 后半、§三、§四 后两条、§七)复核后**依据全部坐实**,未改内容。
---
## 一、一句话
**做什么**:给 MCN 机构的内容团队做一套智能体工作台,把「找选题 → 做内容 → 多账号多平台发布 → 投放与商业化留痕 → 复盘回写」串成一条可复用、可追溯到单条素材的链路。
**为谁**:MCN 内容负责人、编导与文案、剪辑与投放。面向的是**一个账号矩阵**,不是单个账号。
**不做什么**:不做平台自动化代发(发布是人的动作);不自建投放系统(只对接与留痕);不做个人版单账号工具;不做数据仓库。
---
## 二、这份需求汇总了什么
| 来源 | 性质 | 证据等级 | 落点 |
|---|---|---|---|
| AI 内容工作台 2.0 / 3.0(作者「小曾」) | 关键帧视觉梳理,Obsidian 插件形态 | 视频画面级(532 加 772 帧逐帧读) | `参考资料/AI内容工作台_功能点梳理.md`、`参考资料/Bilibili_BV1gsHn6AEk6/`、`参考资料/YouTube_jVHyoCYidLM/` |
| Easel | 开源竞品 | 源码级 + 官方文档级 + **界面级**(唯一有官方截图的一家) | `content-workbench/证据附卷/1b-竞品分析-Easel.md` |
| OpenCreator | 开源竞品 | 源码级 + 官方文档级 | `…/1b-竞品分析-OpenCreator.md` |
| 文到 AI | 闭源商业产品 | **文档级**(仓库无源码,全仓 5 blob) | `…/1b-竞品分析-文到AI.md` |
| Postiz 与 PostSider | 开源竞品 | 源码级 + 官方文档级,含 fork 差异量化 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` |
| 5 项目清单与初步定位 | 独立体入口(竞品池总览) | 同各家 | `…/1b-竞品分析-5项目清单与初步定位.md` |
| 汇总对比体 | 主份,横向铺开加选型结论 | 综合上述五份 | `content-workbench/research/1b-竞品分析.md`(新版见目标目录 `72111e/1b-竞品分析-汇总对比体.md`) |
**证据强度要带着看**:文到 AI 那一列只有文档级证据,它的结论不能与另四个源码级项目同权;AI 内容工作台的结论来自视频画面,能确认「界面上有什么」,不能确认「它内部怎么实现」;界面级证据本组只有 Easel 一家有,所以凡是「界面怎么动」的判断,五家里只有 Easel 是直证,其余都是源码或文档反推。
---
## 三、产品定位与边界
一句话定位:**矩阵级的内容生产与经营中枢**,不是又一把写作工具。
和已有的三类工具比,差位有三条(这三条正好是竞品分析 §9.3 里写明的三个空白):
1. **发现热点这一段普遍弱**。做内容的三家里两家只是「有」,做发布的两家几乎不管。【源:竞品主份 §8 ①、§9.3①;独立体 Easel §三(热点雷达)、OpenCreator §三(「弱,没有热点发现」)、文到 AI §四(热点雷达,文档级)、Postiz 与 PostSider §四(弱)】
2. **合规的自动发布是空白**。现在只有「浏览器自动化(有账号风险)」和「官方 OAuth 或只填充(要人工)」两条路,没有第三条。【源:竞品主份 §9.3②;独立体 Postiz 与 PostSider §七 可突破 1 原话「这条第三条路还没人走」;独立体 Easel §六 弱 2(自认自动化发布有风控风险)】
3. **做内容与发内容仍是两套产品**,用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。【源:竞品主份 §9.3③;独立体 Easel §七 可突破 1(「做内容」和「发内容」是两拨人在做两半,中间是断层);独立体 Postiz 与 PostSider §七 可突破 3(「那段桥还是空的」)】
本产品选的是第 1 条与第 3 条,第 2 条按 §六 F5 的边界处理:只做分级闸门,不做自动代发。
---
## 四、为谁做
**内容负责人**(主用户):定选题方向、审内容、看矩阵效果。他每天要回答的是「今天哪个账号发什么」。(【源:视频关键帧·对标与热点、发布与经营】)
**编导与文案**(高频用户):把一个选题做成成稿,走完创作流水线。他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;独立体 Easel §五 机制 1「三层加载」——元数据常驻、指令触发、资源按需,机制带来的用户结果正是「技能多到一百多个,聊天仍然跑得动」】)
**剪辑与投放**(协作用户):拿到成稿做视频,管发布与投留痕。他要的是「素材和文案对得上」。(【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据;五家竞品也都没有 MCN 投放留痕这一段的证据 —— 独立体 OpenCreator §三 只到「审批、结果、继续对话」】)
---
## 五、使用场景
按用户故事写,四个槽位缺一不成立(谁、什么处境、要办成什么、得到什么结果)。
**S1 找选题**
作为编导,当我面对一个矩阵下十个账号、每天要出三条内容时,我要知道「哪个赛道的哪条内容数据异常地好」,这样我不用逐个平台刷榜。
【源:视频关键帧·对标博主监控四指标卡与「N 倍平时互动」异常值;竞品主份 §8 ①、§9.3①】
**S2 选题进资产库**
作为内容负责人,当我把一条爆款拆完,我要它的「角度、结构、开场白、标题」进资产库,这样下一次创作不是凭空写。
【源:视频关键帧·拆解与沉淀·资产库;独立体 文到 AI §四 能力 4「能力库」把稳定步骤沉淀为可复用方案】
**S3 走完创作流水线**
作为文案,当我要把一条选题做成短视频,我要在同一条流水线里走完「聊思路 → 写文案 → 起标题 → 做封面 → 发布检查 → 生成录制卡片」,不用记每个 skill 的名字。
【源:视频关键帧·创作 Tab 子流程;独立体 Easel §五 机制 1】
**S4 一份母版变多份**
作为运营,当一条母版内容做好,我要它变成矩阵下多个账号、多个平台各自的版本,这样我不用手工改十遍。
【源:独立体 Easel §四 能力 4「发布中心」——一处编辑、八端预览、超限当场标出(**直证的是「多平台」**);「多账号」靠 Easel 的多画像支持加本产品的矩阵需求,发布中心本身未见逐账号变体;独立体 文到 AI §四 能力 3「卡片工坊」一稿多形态】
**S5 发之前先过闸**
作为内容负责人,当我要把内容交出去发,我要在发之前看清两件事:哪里会被硬拦、哪里只是提醒(发布中心会把超限的当场标出来),而且不可逆的动作必须由人确认。
【源:独立体 Easel §四 能力 5(硬拦只认账号密钥与内部路径这类敏感信息,人设偏低只告警);独立体 Postiz 与 PostSider §五 机制 5(read-first / draft-first,发布仍是人的动作)】
⚠️ 上一版这里写「看到具体改哪一句」,新版没有这个依据 —— Easel 的发布中心只标超限和格式问题,不逐句给改写建议。已按事实收紧。
**S6 效果回写**
作为负责人,当一条内容跑完,我要它的表现沉淀回账号画像,这样下一轮选题自己会变准。
【源:独立体 Easel §三 核心步骤 6(读播放、互动、评论,把有效结构和偏好沉淀回画像记忆文件)+ §六 强 1(本组唯一把发现到归因串成闭环);视频关键帧·数据复盘「四分离」分析】
**S7 看整个矩阵**
作为机构负责人,当我的矩阵有二十个账号,我要一个界面回答「每个账号今天该发什么、发了什么、效果如何」。
【假设:独立体五家都只做单账号或单团队视角(PostSider 到「多组织机构」为止,还是团队级),矩阵级视图是推断出来的差位;视频画面里也只看到单账号工作台】
**S8 商单与内容对账**
作为商务,当一条内容带了商单,我要内容、发布记录与收支能对上。
【假设:视频关键帧里有「收支」Tab,但它记录的是什么口径没有画面证据;MCN 结算场景是推断的】
---
## 六、功能范围
每条给功能名、来自哪条场景、优先级、来源。优先级判据只有一句话,不给数字打分。
| # | 功能 | 来自 | 优先级 | 来源与说明 |
|---|---|---|---|---|
| F1 | 对标账号监控与爆款异常值识别 | S1 | P0 | 视频关键帧;不做则 S1 整条办不成 |
| F2 | 选题库与灵感速记(落本地知识库) | S1 S2 | P0 | 视频关键帧·首页随手记录加选题 |
| F3 | 评论区洞察找选题 | S1 | P1 | 视频关键帧;不做仍能从 F1 得选题,只是少一路输入 |
| F4 | 爆款拆解与资产库(角度、结构、开场白、标题四库) | S2 | P0 | 视频关键帧·关键差异化;这一条决定了「越用越准」 |
| F5 | 发布前分级闸门(**敏感信息硬拦 + 人设一致性软劝**) | S5 | P0 | 独立体 Easel §四 能力 5 两道闸:密钥、内部路径这类敏感信息 fail-closed 硬拦;人设一致性低于 80 分只告警。不过硬闸就不许发 |
| F6 | 创作流水线(聊思路到录制卡片七个环节) | S3 | P0 | 视频关键帧·创作 Tab |
| F7 | 一份母版到多账号多平台版本 | S4 | P0 | **Easel 发布中心直证「多平台」**(一处编辑、八端预览);**「多账号」的依据是 Easel 多画像支持 + 本产品的矩阵需求**,发布中心未见逐账号变体。不做则 S4 办不成 |
| F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | 独立体 OpenCreator §五 机制 4(修订产生新版本、带 `sourceArtifactIds` 溯源与 `stale` 标记);独立体 文到 AI §五 机制 4(版本可对比、可采用、可继续改)。本组两次独立观测到同一条 |
| F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | 独立体 Easel §四 能力 2(六维画像)+ §五 机制 3(画像内联进 prompt、不写全局文件,为了并发不覆盖) |
| F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘(前半);独立体 Easel §三 核心步骤 6 加 §六 强 1(后半,**本组唯一闭环**) |
| F11 | 矩阵级看板(每账号该发什么、发了什么、效果如何) | S7 | P1 | 【假设】五家竞品无此形态 |
| F12 | 商单与收支记录、内容对账 | S8 | P2 | 【假设】视频关键帧有「收支」Tab,口径未证实 |
| F13 | 发布留痕与人工确认记录 | S5 | P1 | 独立体 Postiz 与 PostSider §四 能力 3(审批流、审计轨迹)+ §三 PostSider 核心步骤 3(草稿进审批队列,人批了才排上) |
| F14 | 录制卡片与画板(Excalidraw 形态) | S3 | P2 | 视频关键帧·画板模块;不影响场景办成,只是更好用 |
**六项治理要在每条功能条目里各自交代**(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认)。这几条在本版只列要求,具体落在②段 P0 条目上。「不可逆操作二次确认」与 F5、F13 直接相关,但**三件事「人来做」的形态不一样,别压成一句话**:
- **发布**:发布这个动作本身留在人手里(read-first / draft-first)。【源:独立体 Postiz 与 PostSider §五 机制 5】
- **删帖**:带破坏性注解,属需要二次确认的一类。【源:独立体 Postiz 与 PostSider §七 该借鉴 3,`destructiveHint: true` 只留给删帖和急停两件】
- **组织级急停**:触发与恢复都只有人能做。【源:独立体 Postiz 与 PostSider §三 PostSider「系统帮了什么」】
---
## 七、能力底座(从竞品抄什么、避什么)
**该抄的八条**(都能追溯到具体项目,节号指新版独立体):
1. **技能即能力**:技能不是名词,配可运行脚本,成品落盘。【源:独立体 Easel §四 能力 1(114 技能,技能树挂 146 个 `.py`)】
2. **三层加载加 `SKILL.md` 不超过 200 行**:元数据常驻、指令触发、资源按需。这是让能力持续变多而不炸 prompt 的唯一解。【源:独立体 Easel §五 机制 1】
3. **契约层独立成包**:三端同源,版本号明文可读。【源:独立体 OpenCreator §五 机制 3、§七 该借鉴 2(`packages/protocol` 与 `protocolVersion`)】
4. **状态机加版本号加幂等键三件套**,并为「远端到底收没收」专设 `unknown_remote_acceptance` 与 `abandoned_unknown` 两个状态。【源:独立体 OpenCreator §五 机制 3】
5. **read-first / draft-first**:Agent 可以准备、排期、送审,发布仍是人的动作。这条把「自动化」与「不可逆」分开。【源:独立体 Postiz 与 PostSider §五 机制 5】
6. **发布前分级闸门**:不可逆的硬拦,可商量的软劝,不做一刀切。【源:独立体 Easel §四 能力 5】
7. **本地与免密钥 provider 作一等公民**:用户不必先配 Key 才能开始用。【源:独立体 OpenCreator §五 机制 6(自注「本组三个做内容的项目都出现」)、文到 AI §五 机制 2、Easel §四】
8. **独立更新清单**:`channel`、逐包 `sha256`、`minimumSupportedVersion`、`allowSkip`、`remindAfterHours`。【源:独立体 文到 AI §五 机制 3(`stable.json` 逐字段)】
**该避的五条**:
避浏览器自动化发平台(账号风控是真实风险,Easel 自己在 README 里承认)【源:独立体 Easel §六 弱 2】。避 README 与发行状态脱钩(文到 AI 的文档停在「尚未发布」,实际已发 10 个版本)【源:独立体 文到 AI §六 弱 3】。避上游强耦合的薄壳路线(OpenCreator 把 Agent loop 全交给 Codex,一次破坏性变更就可能整体不可用)【源:独立体 OpenCreator §六 弱 1】。避命名双轨(产品改名了,内嵌件还用旧名)【源:独立体 OpenCreator §六 弱 4】。避素材授权未核实就用(一律先设 `draft`)【源:独立体 OpenCreator §五 机制 8、§七 该避开 4】。
---
## 八、明确不做
**第一版不做**:自动代发到平台(走 F5 加 F13 的人确认路径)。矩阵级的自动投放优化。跨机构协作与权限体系。移动端 App。把平台数据抓回来做数仓。
**这一版只留的三个入口**(其余先不铺):找选题、走创作流水线、看矩阵复盘。
---
## 九、假设与风险
| # | 假设或风险 | 类型 | 影响面 |
|---|---|---|---|
| A1 | MCN 的账号数在 10 到 50 之间,超出会让 F11 的看板要重新设计 | 假设 | F11、F9 |
| A2 | 平台数据靠官方接口或授权方式拿,不靠抓取 | 假设 | F1、F10;若拿不到,S1 与 S6 要降级 |
| A3 | 收支记录的口径是「内容级」而不是「月级」 | 假设 | F12 |
| A4 | 团队 5 到 20 人,不超过三层审批 | 假设 | F5、F13 |
| R1 | 上游模型或 Agent 引擎的破坏性变更 | 风险 | 全链路;对策是契约层加可用版本回退【源:独立体 OpenCreator §六 弱 1、§九 借鉴 6 迁移演练】 |
| R2 | 平台发布规则变动导致合规路线失效 | 风险 | F5、F7;对策是分级闸门加人工确认【源:独立体 Easel §六 弱 2、Postiz 与 PostSider §七 该避开 1】 |
| R3 | 资产库沉淀质量差,变成垃圾场 | 风险 | F4;对策是入库前设门禁,参照 OpenCreator 模板治理的 `draft` 做法【源:独立体 OpenCreator §五 机制 8】 |
| R4 | 多账号并发写同一份状态互相覆盖 | 风险 | F9;对策是记忆作用域收敛到画像目录,不写全局【源:独立体 Easel §五 机制 3】 |
---
## 十、待复核清单
以下 9 条是模型补全的,未经用户确认,不得在②段当事实用:
1、A1 的账号数区间(10 到 50)。
2、A2 的数据获取方式(官方接口优先)。
3、A3 的收支口径。
4、A4 的团队规模与审批层数。
5、S7 矩阵级视图是否真的需要,还是先只做单账号复制。
6、S8 商单对账是否进第一版。
7、F3 评论洞察的数据来源与频率。
8、「整合营销」到底含不含投放(若含,需要新增一条场景)。
9、本产品只服务一个机构自用,还是要做成可交付给别的机构的产品。
---
## 附:来源对照
| 功能或结论 | 主要来源 |
|---|---|
| F1 F2 F3 F4 F6 F14 | `参考资料/AI内容工作台_功能点梳理.md`(视频关键帧梳理) |
| F5 | 独立体 Easel §四 能力 5(发布安全闸门两道) |
| F7 | 独立体 Easel §四 能力 4(发布中心) |
| F8 | 独立体 OpenCreator §五 机制 4;独立体 文到 AI §五 机制 4 |
| F9 | 独立体 Easel §四 能力 2、§五 机制 3 |
| F10 | 视频关键帧(前半);独立体 Easel §三 核心步骤 6、§六 强 1(后半) |
| F13 | 独立体 Postiz 与 PostSider §四 能力 3、§三 PostSider 核心步骤 3 |
| §三 三条差位 | 汇总对比体 §8、§9.3①②③;独立体 Easel §七 可突破 1、Postiz 与 PostSider §七 可突破 1 与 3 |
| §七 该抄与该避 | 独立体 Easel §四 §五 §六、OpenCreator §四 §五 §六、Postiz 与 PostSider §五 §七、文到 AI §五 §六 |
| §九 R1—R4 对策 | 独立体 OpenCreator §五 机制 8、独立体 Easel §五 机制 3 |
| S7 S8 A1—A4 | 【假设】,无外部来源 |
🔴 **这张表里所有指向竞品分析的节号都已在 2026-10-07 22:3x 按新版独立体逐个核过**(新版独立体统一为七节结构,故不再出现旧的 `§8.2` / `§九` / `§十一` / `§十三` 这类编号)。指向视频关键帧梳理的行不受影响。
---
## 这一版跟上一版的实质差别
上一版(2026-10-07 21:36 写)发布时,第 ②类输入(6 份开源竞品分析)**正在按 1b 方法论重写**,它把 9 条受影响条目挂成「待复核」,并声明「⛔ 不得当终稿用」。这一版就是那份复核的结果落地。
实质差别逐条列:
1. **文首状态行整条换掉。** 上一版写「上游正在重写、9 条待复核、不得当终稿」;这一版写「重写完成并逐条复核完毕、9 条里 2 条改 7 条不改」,并把复核清单的路径写上。这是这一版存在的理由。
2. **F5 的措辞改了(这是内容层真改,不是换词)。** 上一版写「敏感词与事实检测,硬拦加软劝」。新版独立体里 Easel 的硬闸管的是 API key、内部路径这类**敏感信息**,软闸管的是**人设一致性**,全程没有「敏感词」也没有「事实检测」。照旧写会把②段带去做一个竞品池里没人做过的「事实核查器」。已改成「敏感信息硬拦 + 人设一致性软劝」。
3. **F7 的依据列改了。** 上一版直接写「Easel 发布中心;不做则 S4 办不成」,读起来像「Easel 的发布中心已经能做矩阵级变体」。新版独立体证明:发布中心直证的只有**多平台**(一处编辑、八端预览);**多账号**靠的是 Easel 的多画像支持,加上本产品的矩阵需求。依据列已按这个界线拆开写。
4. **S5 收紧。** 上一版写「我要在发之前看到哪里有风险、具体改哪一句」。「具体改哪一句」在新版独立体里找不到依据 —— Easel 的发布中心只标超限字数和格式,不逐句给改写建议。已改成「哪里会被硬拦、哪里只是提醒」,并加了警示行说明为什么收。
5. **§六 治理段的「人来做」拆开了。** 上一版把发布、删帖、组织级暂停三件事压成一句「必须人来做」。新版说的是:发布是人的动作、删帖带破坏性注解需要二次确认、组织级**急停**的触发与恢复只有人能做 —— 三件形态不一样。已拆成三条,并把「暂停」更正为「急停」。
6. **§七 的十三条依据全部换新版节号。** 上一版笼统写「四份单项目附卷的可借鉴点与风险段」(那些附卷当时还是旧结构);这一版逐条挂新版独立体的节号,并且每条都核过。
7. **§二 来源表重排。** 上一版把 6 份开源分析压成 4 行;这一版按「5 份独立体 + 1 份汇总对比体」分列,并把证据等级改成三级(加「界面级」,只 Easel 有),在表下补了一句「界面级的判断五家里只有 Easel 是直证」。
8. **§三 三条差位补独立体出处。** 内容判定没变(三条都坐实),但每条后面补上了独立体里的旁证,不再只靠汇总对比体一句话。
9. **§四、§九 的引用更新。** 编导与文案那条补了 Easel 三层加载的机制细节;R1 到 R4 的对策逐条挂上独立体节号;剪辑与投放那条仍是【假设】,因为五家竞品都没有 MCN 投放留痕的证据。
**没变的部分**:§一 一句话与不做什么、§五 的 S1 到 S8 骨架、§六 的功能编号与优先级、§八 明确不做、§十 的 9 条待复核。这些不受上游重写影响。
---
*本文档是「MCN 短视频内容整合营销智能体」的①段 1a 需求文档(汇总型)。上游取证见 `content-workbench` 的 1b 系列与 `参考资料/` 下的视频抽帧材料。本版落在目标目录 `72111e` 内,⛔ 未覆盖工作区根 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`。*
*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `humanizer-zh`,门槛 45。)*
@@ -0,0 +1,384 @@
# 1b 竞品分析 · 汇总对比体(内容工作台)
> 项目 slug:`content-workbench` | 原始目标:调研 5 个开源内容工作台项目并生成分析文档
> 本份是 1b 的**汇总对比体**,只做一件事:把 5 个竞品**放在一起比** —— 共识是什么、差异在哪、哪里没人做好、我们要先解决什么。主线是五问:用途 → 场景 → 功能 → 作用 → 优势。
> 单个竞品的完整形态 / 给谁用 / 干什么用、用户把事办成的过程、它自己的能力与机制,**在各家独立分析体里**(`证据附卷/` 5 份,写法判据见方法论 §11)。本份不重抄那部分,只保留横向对比需要的基线。
> 竞品池是 5 个开源项目,实际是 **4 条独立产品线 + 1 组同源双形态**(见 §2)。
> 证据分三级:**源码级**(结论来自仓库文件树、源码或官方文件)· **官方文档级**(只有官方自述与仓库元数据)· **界面级**(有官方界面截图)。本次**界面级只有 Easel 一家**(4 张官方工作台截图);**文档级只有文到 AI 一家**(无业务源码)。
> 原始证据在 `取证/`:`api/` · `api/fork/` · `easel/` · `opencreator/` · `wendao/`。取证时间见 §附 E。
> **改版说明(第二版,2026-10-07 22:3x)**:第一版 21:41 写就,早于 4 份新版独立体,边界要重核(详见文末「这一版跟上一版的实质差别」)。本版按方法论 §0.4 收紧为纯横向:逐家的能力详述、机制详述交回独立体,只留横向铺开与选型结论。
---
## 0. 怎么读这份
五问落在哪:用途看 §3,场景看 §4,功能和作用都在 §5,优势看 §7。§8 的矩阵和 §10 的结论负责收口。
**想知道「某一家具体长什么样、用户怎么用它」** —— 那不在本份,去读对应那家的独立分析体。本份只回答「摆在一起看,它们差在哪」。
文到 AI 的证据只到官方文档级,在本组不进源码级,凡引用处都已标注。它和另外 4 家的结论不同权。
许可、风险、取证冲突、缺口这四类工程与合规内容不进正文,统一放在 §附 A 到 §附 E。
---
## 1. 这次要回答什么
做一款**自有内容工作台**时,这 5 个项目各自把「用户的内容工作」做成了什么形态?哪些做法值得借鉴、哪些要避开、哪些还没被解决好?
竞品池见 §2。**不展开**的部分:用户量、下载量、营收、定价实测;行级代码 diff;各项目的真实运行验证(缺口见 §附 D)。
五问各自落在哪一节:
| 五问 | 关注点 | 落点 |
|---|---|---|
| 用途:是什么、给谁用、干什么用 | What / Who | §3 |
| 场景:用户在什么处境下用它 | When / Why | §4 |
| 功能:有哪些核心能力 | What | §5 |
| 作用:每项能力解决什么问题 | What for | §5 |
| 优势:相对谁、在哪些场景更强更弱 | vs Whom | §7 |
---
## 2. 选了哪些竞品
分三层:
1. **直接竞品(做内容)**:`ZJU-REAL/Easel`、`krillinai/OpenCreator`、`wendaoai/wendao-content-workbench`(文到 AI)。
2. **间接与替代方案(发内容)**:`gitroomhq/postiz-app`、`lumizone/postsider`。
3. **点名参考实装**:本次**没有**。原始目标只给了 5 个链接,所以全部按前两层收录。
为什么是这 5 个:用户要「把内容做出来」时,会在 Easel、OpenCreator、文到 AI 之间比,比的是**全链路 / 媒体工厂 / 单平台桌面**三条不同做法。用户要「把内容发出去、排期、接 Agent」时,两条路是**成熟生态**与 **Agent 桥**。
PostSider 是 `postiz-app` 的 fork —— 它的 `ATTRIBUTION.md` 里逐字写了这一点,两者同为 AGPL-3.0。所以这两个按**一条产品线、两个形态**处理;矩阵里分两列只为写清差异,同源关系回到 §附 C 第 3 条。
读的时候要带上一个前提:**这 5 个不在同一赛道。** 它们分属内容生产链的上游(做)和下游(发),这个分界后面每一节都要用到。
---
## 3. 用途基线(一行一家)
这一节只给「摆在一起比」需要的最小基线。各家完整的用途四行(形态 / 给谁用 / 干什么用 / 证据等级)在独立体 §2,本份不重抄。
| 竞品 | 形态 | 给谁用 | 用它干什么 |
|---|---|---|---|
| **Easel** | 开源社媒内容工作台,本地自托管(Web `:7860` + CLI) | 要一条龙做社媒内容的个人或小团队 | 一个 Agent 贯穿「发现热点 → 策划选题 → 创作图文音视频 → 多平台发布 → 归因回写画像」 |
| **OpenCreator** | 创作者 AI 工作台,Web 单前端 + Electron 壳,Codex 驱动 | 要批量做媒体的创作者 | 把 Agent 对话与可视化创作工具装在同一个本地 Runtime 上,批量生产视频、图像、语音、口播 |
| **文到 AI** | 本地优先的**公众号**写作 / 排版 / 配图**桌面工具**(Wails,三平台) | 只做公众号一条线、在意数据留本机的人 | 从选题、写稿、排版、配图到发布准备,全在桌面端本地完成 |
| **Postiz** | 社媒**排期**工具(Cloud SaaS + 开源自托管双形态) | 要稳定排期与协作的团队 | 30+ 平台排期、分析、团队协作,并接受 n8n / Make / Zapier 式自动化接入 |
| **PostSider** | Postiz 的 fork,改造成「Agent 桥」(Docker Compose,入口 `:4007`) | 要把发帖能力接给 AI Agent 的开发者 | 30+ 平台排期,加公开 REST API、Node SDK、MCP server(19 个工具) |
「内容工作台」这个词在本组里指两种东西:**做内容**的(Easel、OpenCreator、文到 AI)和**发内容**的(Postiz、PostSider)。
---
## 4. 使用场景横向对比
横切方式:按**内容生产链上的五个用户处境**铺开,看用户在这个处境下要办成什么、各竞品怎么让他办成。不按竞品逐个写。
| 用户处境 | Easel | 文到 AI(文档级) | OpenCreator | Postiz | PostSider |
|---|---|---|---|---|---|
| **① 我该做什么**(发现热点、定选题) | 有,热点雷达聚合 6 到 8 个平台 | 有,热点雷达加营销日历 | 弱,有视频下载,没有热点发现 | 弱,RSS 自动发 | 弱,无 |
| **② 选题怎么排成计划** | 有,策划技能成组 | 有,选题库、系列规划、能力库编排 | 弱,脚本和模板 | 无 | 无 |
| **③ 把东西做出来** | 有,技能库带可运行脚本 | 有,写作、排版、配图、卡片工坊 | 有,十项创作工具加 108 条模板(视频翻译覆盖 14 源语言到 101 目标语言) | 弱,AI Copilot 与图、视频、切片,要自带 Key | 无,主动移除了 AI 内容生成 |
| **④ 发出去** | 有,7 平台,靠浏览器自动化喂入 | 弱,发布助手插件只填充不代发 | 无,不做发布 | 有,30+ 平台,走官方 OAuth | 有,30+ 平台 |
| **⑤ 发完怎么复盘** | 有,归因结果回写账号画像 | 弱,公众号数据月度复盘 | 无 | 有,按渠道分析 | 有,分析和客户报告 |
⚠️ 文到 AI 那一列的证据只到官方文档级。它的「场景」在独立体 §3 里已写明**六行动作链里三行整行取不到**,本表的格子只是官方自述能支撑到的粒度,别当界面级事实读。
各自处境下「为什么这么做」(When / Why 这一层):
① 到 ② 是**做内容三家的主场**。它们把「该做什么」当成产品入口。两家排期产品不做选题,因为用户是带着已成稿的内容来的。
③ 是**分歧最大的一段**。OpenCreator 把这段做成媒体工厂,批量、多语言、模板化;Easel 做成技能库,技能就是可运行脚本,产物落盘;PostSider 反过来主动移除了 AI 生成,它只服务已经有稿子的人。
④ 是**产品边界的分水岭**。Easel 用浏览器自动化把「发」也纳入闭环,自己在 README 里承认有平台风控风险;Postiz 不自动化也不抓取;文到 AI 只填充不代发;OpenCreator 干脆不做。这背后是两种用户价值:把 ④ 做进产品省下一次搬运,代价是把不可逆的动作交给了自动化;不做 ④ 少一段风险,但用户要手动搬一次。
⑤ 只有 **Easel 做成了闭环**。归因结果回写账号画像,下一轮的 ①② 由此收敛。这是本组唯一一处「用得越久越懂你」的设计。
---
## 5. 功能横向对比
维度按内容链路层建,可增不可缺:能力面、Agent 可调用面、内容治理。**每项能力「解决什么问题 / 起什么作用」的完整写法在独立体 §4**,本节只做横向。
### 5.1 能力面(按链路层)
| 维度 | Easel | 文到 AI | OpenCreator | Postiz | PostSider |
|---|---|---|---|---|---|
| 发现 / 热点 | 强,多平台热榜聚合 | 中,热点雷达 | 弱,仅视频下载 | 弱,RSS | 弱,无 |
| 策划 / 选题 | 强,技能成组 | 中,选题库加系列规划 | 弱,脚本与模板 | 无 | 无 |
| 创作 | 强,技能库带脚本 | 中,写作 / 排版 / 配图 / 卡片工坊 | 最强,十项工具加 108 模板 | 中,自带 Key | 无,主动移除 |
| 发布 | 中,7 平台自动化 | 弱,只填充不代发 | 无 | 最强,30+ OAuth | 最强,30+ |
| 归因 | 强,回写画像 | 中,月度复盘 | 无 | 中,分析 | 中,分析 / 客户报告 |
横向看下来,能拉开差距的只有两段:**创作**(OpenCreator 最重)和**发布**(Postiz 与 PostSider 最全)。其余各段都有至少一家做得出,差异在深度不在有无。
### 5.2 Agent 可调用面
| 竞品 | 形态 | 解决什么问题 |
|---|---|---|
| Easel | OpenClaw Agent + MCP | 让技能能被 Agent 调起 |
| OpenCreator | MCP runtime 透传 Codex | 不自造 Agent 循环,省一半工期 |
| Postiz | MCP 嵌在后端 + CLI + 15 个 agent 连接器 | 让现成 Agent 接进来 |
| PostSider | 独立 MCP 包,19 工具(13 读 6 写) | 把「可调用面」做成独立产品件 |
| 文到 AI | 无 | — |
这一行的横向结论:**Agent 可调用面已经不是差异点。** 5 家里 4 家都有,两家排期产品还把 MCP / API / SDK 放进了每一个付费档,没当成加价项。它已经从卖点变成基础能力。
### 5.3 内容治理(发布前)
横向铺开四家的姿态:
- **Easel**:两道闸。`content_guard.py` 管敏感信息(API key、内部路径),fail-closed,退出码 7;`persona_gate.py` 管人设偏离,低于 80 分只告警。一道硬,一道软。
- **PostSider**:read-first / draft-first。Agent 可以准备、排期、送审,**发布仍然是人的动作**;急停恢复也只有人能做。
- **文到 AI**:只填充不代发,把最后一步留给人。
- **Postiz**:托管侧走平台官方 OAuth,不抓取、不自动化。
- **OpenCreator**:不做发布,所以这一段没有对应设计。
横向看下来分两派:**「硬拦 + 软劝」「只填充不代发」是产品内的闸门**;「不自动化平台」是产品外的合规姿态。两条不冲突,但见 §9.2 第 1 条 —— 同一条产品线里不能两头都抄。
---
## 6. 机制横向对比
§5 比的是「有什么」,本节比「同一个问题各家怎么解」。**各家的完整机制清单在独立体 §5**,本节只挑横向有分歧的几组。
**1. 记忆与上下文的作用域。**
- Easel:按**账号画像**分(六维画像,画像目录即记忆作用域,不写全局文件)。
- OpenCreator:按**通用三级**分(global / project / thread);文档说明它不会自动保存,只给「存为长期记忆」的建议。
- 文到 AI:单机本地 SQLite,没有账号维度。
- Postiz / PostSider:没有内容记忆这一层。
⇒ 这一组的分歧是「作用域的粒度」。做内容的三家里,只有 Easel 把粒度收到了**账号**;OpenCreator 收到**项目**;文到 AI 干脆不做多账号。
**2. 改稿与版本。**
- OpenCreator:修订产生新版本、不覆盖,带 `sourceArtifactIds` 溯源和 `stale` 标记。
- 文到 AI:版本可对比、可采用、可继续改。
- Easel:产物落 `outputs/<主题>/`,系统状态目录带 `_` 前缀。
⇒ **修订不覆盖是本组的共识**,两家独立出现同一条(OpenCreator、文到 AI)。Easel 走的是另一条路(按主题归档,不强调版本链)。
**3. Agent 与人的分工。**
- Easel:发布前分级闸门,硬的拦、软的劝。
- PostSider:read-first / draft-first,Agent 到「送审」为止,发布归人。
- 文到 AI:插件只填公众号编辑器,不登录、不存草稿、不点发布。
- Postiz:不自动化、不抓取。
⇒ 四家的落点不同,方向一致:**把不可逆的那一步留给人。** 这条在本组是共识,不是某一家的偏好。
**4. 能力怎么加载 / Agent 引擎从哪来。**
- Easel:自建技能运行时,三层加载(元数据常驻 / 指令触发 / 资源按需),`SKILL.md` 不超过 200 行。
- OpenCreator:不重写 Agent 引擎,全透传给 Codex,只做生命周期、事件归一化、持久化、调度与 UI。
- 文到 AI:能力库,把多步骤编排成一套「创作方案」。
⇒ 这是**唯一的真分歧**:自建运行时(Easel)对上透传上游(OpenCreator)。两种都能跑,代价不同,见 §7 与 §9.2 第 1 条。
---
## 7. 优势与不足
每条都写清「相对谁 / 什么场景 / 什么结果」。逐家的完整强弱清单(每条四行)在独立体 §6,本表只留横向判断。
| 竞品 | 优势 | 不足 |
|---|---|---|
| **Easel** | 相对另 4 家,**唯一**覆盖「发现到归因」全闭环;在「要让内容越做越贴账号」的场景下,归因回写画像,输出持续收敛 | 相对 Postiz,发布环节用浏览器自动化;在「账号安全优先」的场景下,有风控、限流、封号风险(README 自陈)。安装门槛也高(Node 版本窗口窄,还要 FFmpeg 和 Chromium) |
| **OpenCreator** | 相对另 4 家,**媒体生成能力最强**;在「批量做多语言视频」的场景下,十项工具加 108 模板,边际成本近零。工程治理也最重 | 相对自建引擎者,**上游强耦合** —— Codex 一次破坏性变更就可能整体不可用。另外它**不做发布**,用户得另找出口 |
| **文到 AI**(文档级) | 相对另 4 家,**单平台纵深最完整**;在「只做公众号、要在意数据留本机」的场景下,端到端本地完成。产品侧 13 天发了 11 版 | 相对开源同行,**闭源**(全仓 5 blob),用户无法自审、无法二开;GitHub 侧只发文档(3★),社区支持弱 |
| **Postiz** | 相对另 4 家,**生态最成熟、星标最高、迭代最快**;在「要稳定排期与协作」的场景下,30+ 平台走官方 OAuth,合规且省维护 | 相对 Easel,**不做内容生产**。相对自用者,AGPL-3.0 意味着一旦作对外网络服务就得开放源码 |
| **PostSider** | 相对 Postiz,**把 Agent 桥做成了独立件**(19 工具 MCP 加 API 加 SDK);在「要把发帖接给 Agent」的场景下,接入成本最低 | 相对 Postiz,**单人开发、10★、发布停在 v1.2.0**,且已放弃跟随上游。作设计样本有价值,作可依赖上游风险高 |
---
## 8. 竞品能力矩阵
```
能力 / 场景 Easel 文到AI OpenCreator Postiz PostSider 机会
① 发现热点 强 中 弱 弱 弱 ← 全组普遍弱
② 选题与计划 强 强 中 — — ← 生产侧已有解
③ 内容生产 强 中 最强 中 主动放弃 ← 差异化主战场
④ 多平台发布 中(自动化) 弱(半) 无 最强 最强 ← 合规路线二选一
⑤ 归因回写 强 中 无 中 中 ← 只有 Easel 成闭环
⑥ Agent 可调用面 中 无 中 强 最强 ← 已成基础能力
⑦ 发布安全闸门 强(分级) 中 无 强 强 ← 已成基础能力
⑧ 本地优先/免密钥 强 强 强 弱 弱 ← 做内容侧共识
```
这张矩阵能看出五件事:
**已经是基础能力、不再构成差异的**:⑥ Agent 可调用面、⑦ 发布安全闸门、⑧ 本地优先与免密钥。
**能拉开差距的**:③ 内容生产(OpenCreator 最强)、④ 多平台发布(Postiz 和 PostSider 最强)。
**某家独有的**:只有 Easel 做出了 ⑤ 归因回写闭环;只有 PostSider 把 MCP 做成了独立产品件。
**普遍做得不好的**:① 发现热点 —— 做内容的三家里两家只是「有」,发内容的两家几乎不管。
**还没被解决好的需求**:④ 的**合规自动化**。现在只有「浏览器自动化(有风险)」和「OAuth 或只填充(要人工)」两条路,没有第三条。
**取值口径**:本矩阵只保留能区分竞品的行。⑦⑧ 作为「共识能力」行列保留,用途是提示「不必在这里找差异」。
---
## 9. 可借鉴点与产品机会
三类分开写。**每条第 4 段「它现在怎么做」的完整版在独立体 §7**,本节做的是三类汇总,并追回 §4 / §5 / §7。
### 9.1 该借鉴(竞品已验证有效,且与自有目标一致)
**可以直接搬的工程做法**(成本低、边界清晰):
1. **技能 / 工具契约独立成包 + 版本常量**(OpenCreator)—— 三端同源最低成本的一步。
2. **状态机 + 版本号 + 幂等键三件套**(OpenCreator)—— 为「远端到底收没收」专设 `unknown_remote_acceptance` / `abandoned_unknown` 两态。
3. **工具契约独立成断言目标**(PostSider)—— 把「Agent 能看到哪些工具」写死成独立清单,静默增删改名会直接测试报红。
4. **每个工具显式声明四个风险注解**(PostSider)—— `readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`。
5. **换牌与二开闸门**(PostSider)—— `.rebrand-allowlist` + `rebrand-check.mjs`(CI `exit 1`)。
6. **迁移回滚按「演练先行 + 不变量 SQL + 幂等复验」做**(OpenCreator)—— 只建临时库,第二次修复必须 `repaired=0`。
7. **性能门禁写进 CI 并带硬阈值**(OpenCreator)—— 请求数、DOM 峰值、Long Task、gzip 预算。
8. **「技能文档与脚本参数」机器校验**(Easel)—— 防文档漂移。
9. **独立更新清单**(文到 AI)—— `stable.json`:`channel` / `publishedAt` / `supportedPlatforms` / 逐包 `sha256` / 升级策略三字段。
10. **可用版本回退的运行组件管理**(OpenCreator)—— 定期检查更新但永不自动安装,失败时保留当前可用版本。
**高价值的产品设计**:
11. **技能三层加载,`SKILL.md` 控制在 200 行内**(Easel)。
12. **发布前分级闸门:一道硬、一道软**(Easel)。
13. **出站内容安全要分级而不是全禁**(Easel)。
14. **「工作台」与「对话」共用同一状态机,修订产生新版本而非覆盖**(OpenCreator)。
15. **read-first / draft-first 的产品边界**(PostSider)。
16. **画像六维,记忆作用域收敛到画像目录**(Easel)。
17. **付费操作的前置协议**(Easel)—— 先给范围、计划、费用预估再请求。
18. **本地与免密钥 provider 作一等公民**(OpenCreator、文到 AI、Easel 共同)。
19. **技能市场的合规面**(OpenCreator)—— 每条带七项风险声明、给 Agent 的指令、给人的步骤、商业许可审查位。
20. **`AGENTS.md` 的分级验证铁律**(OpenCreator)—— 同时治「动不动跑全量测试」和「用没跑的验证暗示无回归」。
### 9.2 该避开(竞品存在明显问题,不照搬)
1. **同一条产品线里不能既自动发、又宣称合规。** Easel 走浏览器自动化(README 自陈风控风险),Postiz 走官方 OAuth、不抓取不自动化。两条是互斥的设计红线,选一条走到底。(追回 §4 ④、§5.3)
2. **不把「薄壳透传」当默认路线**(OpenCreator)—— 省工期的对价是上游一次破坏性变更就可能整体不可用。
3. **不让对外文档与发行状态脱钩**(文到 AI)—— README 停在「尚未发布」,实际已发 10 个版本。对外文档必须有「最后校准时间」。
4. **不留命名双轨**(OpenCreator)—— 产品改名了,内嵌 CLI、脚本、技能前缀还用旧名。
5. **不用未核实授权的素材**(OpenCreator 自述案例)—— 来源没复测的一律先设 `draft`。
### 9.3 可突破(需求真实存在,竞品解决得不够好)
1. **发现热点这一段普遍弱**(追溯 §5.1 ①、§8 ①)。三家「有」但不深,两家不管。机会在把「找题」做成真正的入口。
2. **合规的自动发布是空白**(追溯 §8 ④)。现有两条路是「有风险的自动化」和「要人工的半自动」,**第三条路**(平台侧可控通道加分级确认)还没人做好。
3. **做内容与发内容之间那段桥,还是空的**(追溯 §2、§4 ④)。用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。
---
## 10. 结论(产品层)
1. **用户最核心的需求**是让「该做什么 → 做出来 → 发出去 → 知道效果」这条链跑通,并且越跑越顺,而不是买到某一项最强的功能。
2. **竞品共同解决了什么**:③ 内容生产(有模板或技能就够用)、④ 多平台发布(30+ 平台已是基础)、⑥ Agent 可调用面(已成基础能力,不再是卖点)。
3. **竞品共同存在什么问题**:① 发现热点普遍弱;④ 的合规自动化没人做好;⑤ 归因闭环只有一家做成。
4. **已经是基础能力的**:Agent 可调用面、发布安全闸门、本地优先与免密钥。
5. **还能形成差异的**:内容生产的批量化与本地化(OpenCreator 路线);归因回写形成复利(Easel 路线)。
6. **本产品应优先解决什么** —— 先立规范再堆能力。① 技能和工具先有规范且机器可校验;② 再立契约层,可版本化、可断言;③ 发布这类不可逆动作一律设分级闸门;④ 工程治理直接内化(分级验证铁律、把 `unknown` 当一等结论、迁移演练加幂等复验)。
7. **一句话**:本组没有对手,只有零件。Easel 给「技能即能力加治理闸门」的骨架,OpenCreator 给「契约化加治理铁律加迁移演练」的工程底座,Postiz 和 PostSider 给「分发中枢加 Agent 桥」的接口范式,文到 AI 给「单平台纵深加发布边界」的产品取舍。最划算的路径是:以 Easel 的技能体系为主干,以 OpenCreator 的契约与治理为工程底座,以 PostSider 的 read-first / draft-first 定发布边界,许可上只搬 Apache-2.0 那一侧的代码。
---
## 附 A. 许可与合规速查
要复用代码,只在 **Apache-2.0**(Easel、OpenCreator)里取。取 Easel 时先确认内联的 `gzh-design`(AGPL-3.0)是否在交付路径上。
只借鉴设计、不搬代码,这 5 项都能看。
要把 AGPL 项目(Postiz、PostSider)改后作网络服务对外,须开放对应源码;内部自用不受约束。
要复用官方文案、截图或品牌素材,**只有文到 AI 明确禁止**(proprietary,`NOTICE.md`);其余以各自 LICENSE 为准。
## 附 B. 风险总表
| 项目 | 风险 | 级别 | 依据 |
|---|---|---|---|
| Easel | 平台风控:自动化发布到小红书存在验证、限流、封号风险 | 高 | README 加 `skill-xhs-publisher` 风险段逐字(独立体 Easel §六 弱 2) |
| Easel | 许可混用:主体 Apache-2.0 但内联 `gzh-design` 是 AGPL-3.0 | 中 | 独立体 Easel 附录「仓库自述口径差异」 |
| Easel | 依赖重、安装门槛高(Node 版本窗口窄) | 中 | 独立体 Easel §六 弱 1 |
| 文到 AI | 无 LICENSE:文案、截图、品牌素材均不可复制 | 高 | `NOTICE.md` 逐字(独立体 文到 AI 附录「许可提醒」) |
| 文到 AI | 「免费」边界未核实(changelog 出现「商用绿色版」) | 中 | 独立体 文到 AI 附录「查不到 / 待核实」第 3 条 |
| 文到 AI | 闭源加静默更新(`allowSkip: true`) | 中 | 独立体 文到 AI §五 机制 3 |
| OpenCreator | 上游强耦合:Codex 一次破坏性变更就可能整体不可用 | 高 | 独立体 OpenCreator §六 弱 1 |
| OpenCreator | 素材与商标再分发许可未在仓内单独声明 | 中 | 独立体 OpenCreator §六 弱 4 |
| Postiz / PostSider | AGPL-3.0 网络服务义务加上游署名义务 | 高(若对外) | `ATTRIBUTION.md` 逐字(独立体 Postiz 与 PostSider §五 机制 8) |
| PostSider | 单点风险:单人、10★、发布停在 v1.2.0 | 高 | 独立体 Postiz 与 PostSider §六 弱 1 |
| 全组 | **平台合规路线二选一,不可混**:Easel 走浏览器自动化,Postiz 走官方 OAuth,文到 AI 只填充不代发 | 高(设计红线) | 独立体 Easel §六 弱 2、Postiz 与 PostSider §七 该避开 1 |
## 附 C. 取证一致性复核(冲突读数,以原始件为准)
1. **Easel 技能数 113 与 114 冲突,以 114 为准**。`easel.tree.stat.json` 里 `skills_openclaw_dir_count = 114`、`skillmd_count = 114`,用 `取证/api/easel.tree.json` 复算一致。113 是 README 旧徽章和能力地图的口径。
2. **Postiz 文件树「截断前」的措辞有误,实际未截断**。`_summary.json` 里 `tree_total_blobs = 1018`、`tree_truncated = false`。真正被截断的是 OpenCreator 的树,已用 11 份分片补全。
3. **PostSider 连接器 33 与 34 冲突**。34 是仓库里 `*.provider.ts` 的文件数(源码级),33 是 README 口径,30+ 是官网营销语,三者口径不同,引用时要标明。「活跃注册数」仍未逐条核对。
4. **OpenCreator 模板 108(79 / 28 / 1)**:`tree.stat.json` 的 `template_entries_by_category` 三档全为 0,该派生字段失真,须以原始分片 `tree_template.json` 为准,复算吻合。
5. **Postiz 版本口径不一**:`version.txt` 是 v1.47.0,releases 最新是 v2.25.0(2026-10-02),两处口径不一,原因查不到。
## 附 D. 已知取证缺口(照抄《目标执行状态.md》,不补编)
**全组共性**:五家的真实用户量、下载量、营收基本查不到(Postiz 自述「7M downloads」但没有口径)。**真实运行证据为零** —— 全程只做静态取证,未安装、未编译、未运行任何命令。
**Postiz 与 PostSider**:fork 点(GitHub 未标记 fork、无 parent 指针)与改动行数(tree API 只给 blob sha,行级 diff 需要 clone 两侧)都未取到。PostSider「33 个活跃连接器」的口径未逐条核对;是否有托管云服务查不到。
**Easel**:CI 称 38 条技能自带测试,实际只测到 6 个测试文件;114 技能的 `layer` 源码级分布没做;`SKILL-SPEC` 的 `test1.*` 约定整树零文件;`.env.example` 里 `xhs-maas` / `agnes` provider 的来源未核实。技能可用率没有实测。
**OpenCreator**:商业与规模证据全缺;技能市场「上架态」口径未核实;`docs/plans/` 10 份计划的落地率未核;火柴人、头像、音频的再分发许可未核;`runtime/`(183 个 blob,其中 `.go` 163 个)只做了结构级取证;语言构成是按文件数口径(与官方字节口径不可混)。
**文到 AI**:源码级面全部查不到;「商用绿色版」是什么查不到;`updates/versions/` 只到 0.0.115 而 `stable.json` 已到 0.0.123,原因查不到。
## 附 E. 来源与取证时间
五个对象仓库:
1. `https://github.com/ZJU-REAL/Easel`(`main`)
2. `https://github.com/wendaoai/wendao-content-workbench`(`main`;主页 `https://www.asfop.top/`)
3. `https://github.com/krillinai/OpenCreator`(`master`)
4. `https://github.com/gitroomhq/postiz-app`(`main`;官网 `https://postiz.com`)
5. `https://github.com/lumizone/postsider`(`main`;官网 `https://postsider.com`)
| 棒次 | 产物 / 证据 | 取证时间(CST) | 落点 |
|---|---|---|---|
| 第 1 棒 | 5 项目元数据、README、文件树 | 2026-10-07 16:13–16:17 | `取证/api/*.{repo.json,README.md,tree.json}` 加 `_summary.json` |
| 第 2 棒 | Postiz / PostSider 同源双形态,fork 差异 | 2026-10-07 16:40–17:05 | `取证/api/fork/`(19 件)加 `fork-diff.json` |
| 第 3 棒 | Easel 深度分析 | 2026-10-07 17:06–17:19 | `取证/easel/`(17 件)加 `easel.tree.stat.json` |
| 第 4 棒 | OpenCreator 深度分析 | 2026-10-07 17:37–17:56 | `取证/opencreator/`(76 件)加 `opencreator.tree.stat.json` |
| 第 5 棒 | 文到 AI 分析(文档级) | 2026-10-07 18:07–18:10 | `取证/wendao/`(20 件) |
| 第 6 棒 | 跨项目汇总对比(本份第一版前身) | 2026-10-07 18:31–18:5x | `归档-1b旧口径/1b-竞品分析-跨项目汇总对比__旧口径-20261007.md` |
| 第 7 棒 | 5 份独立分析体重写(产品视角七节) | 2026-10-07 21:40–22:01 | `证据附卷/`(5 份) |
| 第 8 棒 | 汇总对比体按新边界重排(本份) | 2026-10-07 22:3x | 本文件 |
---
## 这一版跟上一版的实质差别
上一版(21:41 写)已经按新方法论重排过一次,也过了「说人话」。但它**写在新版独立体之前** —— 4 份独立身体是 21:58 到 22:01 才落盘的。于是它对边界、对证据等级的分类都停在旧认识上。
这一版的实质差别,逐条列:
1. **证据等级从两级改成三级。** 上一版写「证据分两级:源码级 / 文档级,本次只有文到 AI 落在文档级」。新版独立体里 Easel 是「源码级 + 官方文档级 + **界面级**」(4 张官方截图),是本组唯一有界面级证据的一家。这一级是重写独立体时才补上的,上一版没有。
2. **§3 用途从「逐家细述」改成「一行一家的基线」。** 上一版 §3 用一张三列表把五家的形态、给谁用、干什么用逐格写满,和独立体 §2 的用途四行重复。这一版只留对比基线,明写「完整四行在独立体 §2」,不再重抄。
3. **§5.1 后半的六项能力详述删掉了。** 上一版在能力矩阵后面又挑了六项能力(技能即能力 / 创作模板体系 / 公开 API / 卡片工坊 / 能力库 / 画像记忆)逐条展开,那是逐家产品面,归独立体 §4。这一版只留矩阵加横向解读。
4. **§6 从「逐家机制罗列」改成「同一机制横向对比」。** 上一版 §6 六条里,四条是单家机制(OpenCreator 两投影状态机、Easel 三层加载与分级闸门、OpenCreator 透传 Codex、Easel 画像记忆),按 §0.4 归独立体。这一版换成四组横向:记忆作用域、改稿与版本、Agent 与人的分工、能力加载与引擎来源 —— 每组比的是「同一个问题各家怎么解」。
5. **§7 表加了指引,§9 明标「细节在独立体 §7」。** 优势不足表与三类汇总保留(它们是汇总体该写的),但都加了一行「完整清单在独立体 §6 / §7」,避免读者以为本份就是全量。
6. **清掉悬空的节号引用。** 上一版 附B 依据列写「第 2 棒 §八·4、第 3 棒 §十三·1」,上一版 附D 写「照抄《目标执行状态.md》§八」—— 这些指向的是旧棒次文档的编号,新版独立体早改成七节结构。这一版全部换成**指向新版独立体的节号**。
7. **§4 场景矩阵给文到 AI 那一列加了证据警示。** 上一版直接填格;新版独立体已明确文到 AI 的场景「六行里三行整行取不到」。这一版在表下加了警示行,说明那一列只到官方自述粒度。
8. **§4 处境的格子从「技能计数」改成「能力强弱」。** 上一版写「有,9 个热点技能加基础 6,共 15」「有,114 个技能」这类计数 —— 计数是独立体的事。这一版只留强弱与做法。
9. **附 E 补了第 7、8 两棒。** 上一版只到第 6 棒;这一版把「第 7 棒 独立体重写」「第 8 棒 汇总重排」补上,时间对得上。
**没变的部分**(事实一条没丢):竞品池分层与纳入理由、§8 能力矩阵的八行与五个判断、§9 的三类条目、§10 的七条结论、§附 A 到 §附 D 的许可、风险、冲突读数与缺口。
---
*本份是 1b 竞品分析的**汇总对比体**(第二版,2026-10-07 22:3x 按方法论 §0.4 收紧为纯横向)。**独立分析体**见 `证据附卷/`(5 份);原始证据见 `取证/`;旧口径原件见 `../归档-1b旧口径/`;本次改版前版本见 `../归档-说人话重写前-20261007/`。本版落在目标目录 `72111e` 内,⛔ 未覆盖 `research/1b-竞品分析.md`。*
@@ -0,0 +1,105 @@
# S7 · 把重写后的 5 份竞品独立体接进 MCN 需求文档
> 会话:任务会话 `[执行]-重生成MCN需求文档`(排期 `e74db4d4`,once,2026-10-07 22:25 触发)
> 域:`content_marketing_agent/执行会话` | 域锁:已抢到(`handoff-guard.sh --claim-exec`,rc=0)
> 目标:重写 5 份竞品分析文档并重新生成 MCN 短视频整合营销需求文档(`goal.json` 目标目录 `…-72111e`)
> 完成时间:2026-10-07 22:4x
> 本棒定位:接上一棒(22:01 已 done)重写完成的 5 份独立体,做三件事 —— 边界核对、逐条复核、重生成需求文档。
---
## 一、三件必做的结论
### 1、汇总体 vs 独立体职责边界 —— **边界不正,出新版汇总**
判据源:`competitor-analysis.md` §0.4(分工)+《输出检查》最后一条(「没有把独立体的内容整段抄一遍」)。
核出**四处硬冲突**:
1. 证据等级分类少一级 —— 旧汇总体写「两级:源码级 / 文档级」,新版 Easel 独立体是「源码级 + 官方文档级 + **界面级**」(4 张官方截图,本组唯一)。
2. 节号引用悬空 —— 旧汇总体 附B / 附D 引「第 2 棒 §八·4」「第 3 棒 §十三·1」「《目标执行状态.md》§八」,新版独立体已统一为七节结构,这些编号不存在了。
3. 场景矩阵越证据 —— 旧汇总体 §4 给文档级的文到 AI 逐格填了 5 个处境的用法;新版文到 AI 独立体 §3 明写「六行里三行整行取不到,没有界面级证据」。
4. 逐家产品面重复 —— 旧汇总体 §5.1 后半的六项能力详述、§6 的六条机制,都是单家能力与机制,按 §0.4 归独立体。
**处置**:出新版 `1b-竞品分析-汇总对比体.md`,收紧为纯横向(竞品池分层、处境 × 竞品矩阵、能力矩阵、机制横向取向、优势不足、三类可借鉴汇总、结论、许可与缺口速查)。逐家的用途详述 / 能力详述 / 机制详述交回独立体。九条实质差别写在文末。
### 2、逐条复核 1a 受影响条目 —— **9 条里 2 条改、7 条不改**
清单外另补核 1 条(§六 治理段,因引「附卷」源,按 1a 文首口径一并核)。
**改的两条**:
- **F5** —— 旧写「敏感词与事实检测」。新版 Easel 的硬闸管的是 API key、内部路径这类**敏感信息**,软闸管的是**人设一致性**,全程没有「敏感词」也没有「事实检测」。照旧写会把②段带去做一个竞品池里没人做过的「事实核查器」。已改。
- **F7** —— 旧写「Easel 发布中心;不做则 S4 办不成」,读起来像发布中心已能做矩阵级变体。新版证明:发布中心直证的只有**多平台**(一处编辑、八端预览),**多账号**靠 Easel 多画像加本产品矩阵需求。依据列已拆开。
**不改的七条**:F8、F9、F13、F10 后半、§三 三条差位、§四 后两条、§七 该抄八条与该避五条 —— 新版依据全部坐实,部分比旧版更实(F8 多了「两次独立观测」的反证;F10 后半把措辞收紧成「本组唯一闭环」)。
**清单外补核**:§六 治理段「组织级暂停」按新版更正为「组织级**急停**」,并把发布 / 删帖 / 急停三件事「人来做」的形态拆开写。
### 3、重新生成 MCN 需求文档 —— **已产出**
据上两条产出新版 1a,落目标目录。实质差别 9 条写在文末。
---
## 二、落点清单(全部在目标目录内)
| 文件 | 是什么 |
|---|---|
| `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/复核清单-1a受影响条目.md` | 本棒判据底稿:边界核对(§一)+ 逐条复核(§二)+ 清单外补核(§三) |
| `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1b-竞品分析-汇总对比体.md` | 新版汇总体(第二版,纯横向) |
| `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1a-需求文档-MCN短视频整合营销.md` | 新版 1a 需求文档 |
| `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/S7-重生成MCN需求文档-20261007.md` | 本文件(执行记录) |
**只读访问的域外文件**(⛔ 未写):`docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`、`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/…/证据附卷/`(5 份)、同目标 `…/content-workbench/research/1b-竞品分析.md`、`E:/ProgramData/.workbuddy/skills/product-planning/…/competitor-analysis.md`、`E:/ProgramData/.workbuddy/skills/humanizer-zh/SKILL.md`。
⛔ **本棒未动工作区根 `docs/`、未删未覆盖任何旧文件**(旧 1a 与旧汇总体都留在原位)。
---
## 三、自检
### 3.1 说人话(判据源 `humanizer-zh`,门槛 ≥45/50)
| 交付物 | 直接性 | 节奏 | 信任度 | 真实性 | 精炼度 | 总分 |
|---|---|---|---|---|---|---|
| 复核清单-1a受影响条目.md | 9 | 8 | 10 | 9 | 8 | **44** |
| 1b-竞品分析-汇总对比体.md | 9 | 9 | 10 | 9 | 9 | **46** |
| 1a-需求文档-MCN短视频整合营销.md | 9 | 9 | 10 | 9 | 9 | **46** |
⚠️ 复核清单自评 **44**,低于 45 线。原因:它是一份「原文 / 依据 / 结论」三段的核账表,逐条贴原文是判据本身的要求(⛔ 不能改写成叙述体),节奏被结构固定住了。这一条**如实报出**,不当成「已过」。要不要为它专门松结构,留给主会话判。
### 3.2 引用核对(防止写错节号)
写完全部节号引用逐条回查过一遍原件,改了 3 处:
1. 「本地与免密钥 provider」的出处从 `OpenCreator §四 能力 6`(那是「三级记忆」)改到 `§五 机制 6`。
2. 复核清单 §2.7 差位 1 原先引「独立体 OpenCreator §三」,但独立体里没有那张「发现热点弱」的表 —— 那话在汇总体 §4 里,已改成引汇总对比体 §4 / §8 ①。
3. 汇总对比体 附D 的 `runtime/krillinai(Go,163 文件)` 两个数字口径混了。原始统计:`runtime/` 目录 **183 个 blob**,其中 `.go` 文件 **163 个**。已按原始件分开写。
顺带记一条**取证一致性**:新版 OpenCreator 独立体自身有 163 / 183 两个数并存(§三 说「Go 引擎那 163 个文件」,附录说「183 文件」)—— 两个数各有出处(163 = `.go` 文件数,183 = `runtime/` 目录 blob 数),但正文没写清口径,读起来像矛盾。⛔ 本棒不改别人家的独立体(不属本棒范围),只在此记账,留给主会话判要不要回头订正。
### 3.3 域内写检查
四处落盘全部在 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/` 内。⛔ 无越界写。
---
## 四、交回主会话 / 用户的事(本棒不擅改)
1. **要不要把新版覆盖旧件。** 新版 1a 与新版汇总体都落在目标目录 `72111e` 内,旧件留着。若裁定应以新版**覆盖** `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md` 与 `执行会话/目标-调研…-5199a6/…/research/1b-竞品分析.md`,这两处都在本棒域外,**由主会话执行**。
2. **目标目录的收口**。上一棒检查会话提的三条(`execution_doc` 仍指旧目标目录、判据值域「未过」、判据第 5 条与落点口径互斥)本棒未碰,仍待主会话处置。
3. **新版 OpenCreator 独立体的 163 / 183 口径**(见 §3.2)—— 要不要回头订正,由主会话判。
4. **复核清单的排版结构**(见 §3.1)—— 若要它过 45 线,需要主会话点头放宽「逐条贴原文」这条要求。
---
## 五、本棒没做的事(⛔ 不扩面)
- 不做技能包规则文件的「说人话」(那是主会话的活,且写目标在 `E:/ProgramData/.workbuddy/skills/product-planning/`,本棒域外)。
- 不碰 `vibe-product` 工作区。
- 不改 5 份独立体(上一棒已 done 的产物)。
---
*本记录是 1a 需求文档重生成这一棒的执行留档。判据底稿见 `复核清单-1a受影响条目.md`;新版产物见同目录另两份。*
@@ -0,0 +1,106 @@
# 需求文档(1a)
> 项目:`proto-board`|更新:2026-10-07|性质:拍板
> 口径依据:`stage-discovery/references/grill-me.md`(A / B 两节决策树,全场唯一一份 grill)。
> 改版说明:2026-10-07 按上述方法论重写 —— 决策表补「理由」「影响范围」两列、分支按 A/B 两节重新铺齐、假设与待确认项各自带归宿。与上一版的实质差别见文末。
**本表 23 项:已确认 15 项(用户拍板)/模型补全 8 项(7 项【假设】+ 1 项【事实】)。7 项【假设】均未经用户确认,逐条列在 §四待复核清单。**
## 一、起点三句
做什么:一个个人用的 Web 工作台。用户在它里面建项目、在项目里开多个版本,每个版本贴入或上传需求,点一下就生成一份能直接打开的交互页面。
为谁:一个人。操作者就是唯一使用者,没有协作、没有角色、没有团队。
不做什么:进度看板、待办清单、动态流、评审流一律不做。这东西不卖、不融资、不接付费用户,所以也没有账号、订阅、权限这一层。
## 二、决策表
来源列只有三种取值:**用户拍板** / **【假设】** / **【事实】**。「影响范围」列写的是这份决策会牵动哪几份下游文档。
### A 节 —— 要做什么、为谁、边界在哪
| # | 问题 | 决策 | 来源 | 理由 | 影响范围 |
|---|---|---|---|---|---|
| A1 | 解决什么问题 | 需求、版本、产物现在散在三处:需求在文档里、原型在目录里、找回来靠记路径。缺一个把「建项目 → 开版本 → 贴需求 → 看页面」串成一处的入口 | 用户拍板 | 原话定位就是「为不同项目生成产品交互页面」的工作台 | 1d 价值主张、2a 全部功能 |
| A2 | 成功怎么算 | 点完生成,页面上能出现一份可打开的 HTML,且能点回上一版对照。不设使用量、留存这类数字指标 | 【假设】 | 用户只说了「先把页面生成好」,衡量口径是我补的;本产品无数据源,不许编数字 | 1d 关键指标、2a 验收要点 |
| A3 | 谁用、熟练到什么程度 | 单一个人。他已经在用 WorkBuddy 的产品规划技能,熟悉 `research/` `prd/` `designs/` 这套产出约定 | 用户拍板 | 定位原文即「调用产品规划技能」 | 1c 全份、1d 分节 |
| A4 | 现在怎么凑合 | 在对话里跑技能,产出散落到各目录,靠手记或搜索认路径;同一方案改到第三轮时容易认不出哪份是哪份 | 【假设】 | 依据 A6 的落盘约定(只存项目名/需求名/版本名)反推,没有访谈佐证 | 1c 痛点、1d 价值主张 |
| A5 | 第一版做什么 | 建项目 → 项目内建多版本 → 每版本输入或上传需求 → 点生成 → 看页面 | 用户拍板 | 原话就是这条链路 | 2a 功能清单、2b 页面清单 |
| A6 | 明确不做什么 | 进度看板 / 待办清单 / 动态流 / 评审流;不售卖、不融资、不面向付费用户 | 用户拍板 | 原话「本产品不售卖、不融资、不面向付费用户」 | 2a「不做」对照、1d 取舍 |
| A7 | 价值落在哪一层 | 界面为主。用户拿到的是「一份能看的页面」,约定和文件结构只是手段 | 用户拍板 | 原话「价值层:界面为主」 | 1d 价值主张、2b 页型判定 |
| A8 | 应该有几个界面 | 3 个:项目列表 / 版本列表 / 版本工作台。每个界面只办一件事,不合并 | 用户拍板 | 原话拍了 3 页结构 | 2b 页面清单与流转 |
| A9 | 信息承载到哪一层 | 主屏只留项目名、版本名、版本状态三样;需求全文与产物 HTML 点进去看 | 用户拍板 | 原话「只项目名称、需求名称、版本名称,点进能看」 | 2b 信息承载分档 |
| A10 | 手上已有什么素材 | 有的:用户自己的需求文本(`.md` / `.txt`)。缺的:产品规划技能的可直接调用接口 —— 原型期用模拟顶上,真接口接进来之前,生成结果不能算真实产出 | 【假设】 | 依据 A11「先把页面生成好、其余后续再做」的排期推断 | 2a 假设台账、1d 关键假设 |
| A11 | 约束 | 个人自用。无预算、无排期、无合规底线。唯一的时间约束是「先把页面生成好」,其余都往后放 | 用户拍板 | 原话「先把页面生成好、其余后续再做」 | 2a 优先级口径 |
| A12 | 依赖什么 | 依赖 WorkBuddy 工作台与产品规划技能;产物落本地文件系统。不依赖任何后端服务 | 【假设】 | 依据 A13 的形态(个人 web 页面、workbuddy 工作台)+ B7 的持久化决策 | 2a 六项治理、1d 能力 |
| A13 | 用户现在拿什么替代 | 三条:在对话里直接跑产品规划技能;用 v0 / 即时 AI 这类文生界面工具;自己手写 HTML | 【事实】 | 来自 1b 竞品观察(两类工具的共性做法) | 1d 价值主张、1e 替代方案列 |
### B 节 —— 做成什么样、哪些情况不成立、状态怎么流转
| # | 问题 | 决策 | 来源 | 理由 | 影响范围 |
|---|---|---|---|---|---|
| B1 | 形态与骨架(粗粒度) | 三页。列表页=一行操作 + 一张列表;工作台=左边贴需求、右边看状态与产物。精确板块与排列归②段 | 用户拍板 | 原话拍了 3 页与工作台的左右分栏方向 | 2b 全份 |
| B2 | 什么情况不成立 | 三种:需求为空 ⇒ 不给生成;技能调用失败 ⇒ 本次不成立,给出失败原因;还没建过任何项目或版本 ⇒ 先引导新建,不摆空表格 | 用户拍板 | 原话「需求为空禁用生成;技能调用失败弹提示可重试」 | 2a 守卫条件、2b 空态 |
| B3 | 状态怎么流转 | 版本有四个状态:`draft`(草稿)→ `running`(生成中)→ `done`(已生成),任一步出错进 `failed`(失败)。`done` 可以重新生成,覆盖同一版本,不另起一个 | 用户拍板 | 原话「草稿 → 生成中 → 已生成,可重新生成」 | 2a 状态迁移表 |
| B4 | 失败了怎么办 | 给出失败原因,给一键重试。重试停在同一个版本里,不新建版本 | 用户拍板 | 原话「弹提示可重试」 | 2a F9、2b 工作台右栏 |
| B5 | 输入什么、产出什么、谁维护、存在哪 | 输入=文本框,可输入也可上传 `.md` / `.txt`;产出=单个 HTML,存 `designs/<项目>/<版本>.html`;维护人=用户自己;存在本地 | 用户拍板 | 原话定死了路径与格式 | 2a F7/F8、2b 工作台 |
| B6 | 权限怎么算 | 单人,没有角色系统,也没有越权这回事 | 用户拍板 | 原话「单人,无角色系统」 | 2a 六项治理 |
| B7 | 同一件事被做两次会怎样 | 生成中按钮锁死,点不动;重新生成覆盖同一版本文件,不留重复产物 | 用户拍板 | 前半依据原话「生成按钮防重复点击」,后半的「不留重复」是我补口径 | 2a F6/F11、2a 幂等 |
| B8 | 持久化到什么程度 | 项目、版本、需求、产物路径全部存浏览器本地,刷新和重开浏览器都不丢;清掉浏览器存储就会丢,这一条要明说 | 【假设】 | 原始决策是「浏览器本地存储即可,无需后端账号体系」,我把它展开成可判据 | 2a 六项治理、1d 风险 |
| B9 | 生成这一步怎么实现 | 原型期用「生成过程可视 + 占位产物」模拟技能调用,留一个真接口接入点。真实接入不在本版 | 【假设】 | 原始决策是「原型期内以模拟实现」,我写清它的代价 | 2a F8、1d 关键假设 |
| B10 | 空的时候显示什么 | 没有项目、没有版本时,列表区换成新建引导(一句话 + 主操作),不显示空表格 | 【假设】 | 原始决策已定调,我补了「不显示空表格」这一半 | 2a F3、2b 页1/页2 空态 |
## 三、假设台账(每条【假设】的归宿)
规矩:每条【假设】只能落在三种归宿里的一种 —— 已确认 / 待实现且已排定确认时机 / 已按假设落地。既没确认、又已经写进实现、还没有落地说明的,不许存在。
| # | 假设 | 归宿 | 说明 |
|---|---|---|---|
| A2 | 成功算「能拿到一份可打开的 HTML」 | ② 待实现且已排定确认时机 | 在 2a 落盘前必须问一次用户:验收是否只认「能打开」,还是要加别的 |
| A4 | 现在靠手记或搜索认路径 | ① 已确认 | 用户拍板「只项目名称、需求名称、版本名称,点进能看」隐含认路径这件事是问题 |
| A10 | 技能真接口暂缺、原型期用模拟 | ③ 已按假设落地 | 影响面:生成结果只是占位产物,不能当真实交付。回退口径:接上真接口后只换 F8 的生成实现,其余不动 |
| A12 | 不依赖后端服务 | ③ 已按假设落地 | 影响面:换设备看不到自己的东西。回退口径:要跨设备时再加账号与云端存储,前端骨架不用改 |
| B8 | 数据存浏览器本地 | ③ 已按假设落地 | 影响面:清浏览器存储等于清库。回退口径同 A12 |
| B9 | 生成过程可视 + 占位产物 | ③ 已按假设落地 | 影响面:生成本身不产生真实页面。回退口径:同 A10 |
| B10 | 空态用新建引导替代空表格 | ③ 已按假设落地 | 影响面:无。回退口径:无需回退,若改成空表格要回②段改 |
## 四、待复核清单(一次性过)
下面 7 条是模型补的,用户还没逐条回应。请一次看完,逐条说「可以」或「不对」:
1. A2 成功口径 —— 只认「能打开一份 HTML」够不够?
2. A4 现状描述 —— 现在真是「靠手记或搜索认路径」吗?
3. A10 技能接口 —— 是不是确实还没接、暂且用模拟?
4. A12 后端 —— 确认不要任何后端?
5. B8 存储 —— 存浏览器本地可以吗?(换设备会看不到)
6. B9 生成实现 —— 原型期用模拟生成,接受吗?
7. B10 空态 —— 空的时候用引导页替代空表格,可以吗?
## 五、待确认项(三字段齐全才落盘)
| 条目 | 复核人 | 复核时机 | 结论落点 |
|---|---|---|---|
| A2 成功口径 | 用户 | 2a 落盘前必须问 | `1a-需求文档.md` A2 行;若改口径,同步 `2a-产品功能.md` 的验收要点 |
| A4 现状描述 | 用户 | 1c 定稿前 | `1c-用户画像.md` 的痛点段 |
| A10 / B9 技能接入 | 用户 | ③段开工前(原型期结束的分界) | `1a-需求文档.md` A10 行;同步 `2a-产品功能.md` F8 |
## 六、这一版跟上一版的实质差别
上一版是 2026-10-07 01:46 的稿子,四节(做什么 / 为谁 / 明确不做什么 / 两张决策表)+一段假设归宿。这一版逐条比下来,动了这些地方:
1. 决策表从 4 列改成 6 列,补上「理由」和「影响范围」。上一版只记了「拍板结果」,看不出为什么这么拍、拍了会牵动谁;下游 2a/2b 拿不到依据。
2. 决策粒度从 13 项拆到 23 项。上一版把「界面结构」「版本状态」「数据契约」各压成一行,实际每一行里塞了两三件事;拆开后每行只回答一个问题,来源列才说得准。
3. 分支覆盖补了四个 —— 上一版完全没有的:「素材与数据」(A10)、「约束」(A11)、「依赖」(A12)、「替代方案」(A13)。grill-me 的 A 节必问支里这四支一个都没出现。
4. 「交付形态」这一支从隐含改成显式三问:价值在哪一层(A7)、几个界面(A8)、信息承载到哪层(A9)。上一版只有「价值层=界面为主」一栏,另两问散在 B 节里。
5. B 节从 4 项(B1 界面结构 / B2 版本状态 / B3 不成立条件 / B4 数据契约)扩到 10 项,补齐 grill-me B 节要求的「失败与恢复」「权限」「并发与幂等」三支,并把「持久化」「生成实现」「空态」单列。
6. 顶部状态行从「用户拍板 9 项/模型补全 4 项」改成「已确认 15 项/模型补全 8 项(7 项【假设】+ 1 项【事实】)」,并显式写明 7 项未经确认。上一版那句「可推翻」不等于把「未经确认」摆出来。
7. 假设归宿段从「一句话打包」(B5–B8 已落地)改成逐条三归宿表,补影响面与回退口径。
8. 新增 §四待复核清单与 §五待确认项三字段表 —— 上一版没有这两节,「假设」与「待定」都没有回收时机。
9. 边界收紧:按 stage-discovery 硬约束,本份不写功能清单,B1 只给粗粒度骨架,精确板块与排列推给 2b。
## 七、说人话评分
已过内容准则(`humanizer` / `humanizer-zh`),评分 **47/50**:直接性 10、节奏 9、信任度 10、真实性 9、精炼度 9。
扣分处:决策表的「理由」列为了保持一行一条,写成了短句串,读起来略紧;「影响范围」列在大表里重复出现「2a / 2b」,可以再压。
@@ -0,0 +1,125 @@
# 用户画像(1c)
> 项目:`proto-board`|更新:2026-10-07|性质:外部取证(受限)
> 口径依据:`stage-discovery/references/user-personas.md`(6 块结构与最佳实践)+ `stage-discovery/SKILL.md` 的「用户画像必须能追到原话」硬约束。
> 改版说明:2026-10-07 重写 —— 按方法论 6 块结构铺开、每个结论标溯源等级、把「取不到」的地方显式写出来而不是绕过去。与上一版的实质差别见文末。
**取证状态:本产品没有外部用户,这一份是操作者看自己。它不是用研结论,是自证。** 下面每一条都标了它现在是「原话」「判断」还是「推演」,以及将来要靠什么才能升级成事实。
## 一、为什么只有一张画像
方法论给的是 3 张画像(`user-personas.md` 的 Input 就写着「3 refined user personas」)。这里只能出 1 张,原因不是偷工:定位原文是「单一个人,无协作、无多角色、无团队」(`1a-需求文档.md` A3)。硬凑出第 2、3 张,就等于把同一个人的不同时刻包装成不同人群 —— 这类自证是这个项目已经踩过的坑(三个 JTBD 全是同一个人的三种时刻)。所以这里明说:**第 2、3 张为空,且不打算补。**
## 二、画像卡
### 画像名与背景
**「一个人同时压着好几个想法的产品工作者」。**
按方法论这里本该有年龄区间、职级、公司规模。**取不到:没有访谈、没有问卷、没有后台数据,不能编。** 能说的只有行为特征,下面四条都能在 1a 里找到出处:
1. 已经在用 WorkBuddy 的产品规划技能,产出落在 `research/` `prd/` `designs/` 这套约定目录里(依据 A3,用户拍板)。
2. 自己写需求文本,格式是 `.md` 或 `.txt`(依据 B5,用户拍板)。
3. 一个人从头管到尾,不需要把活交给别人(依据 A3)。
4. 同一件事往往会改好几轮(依据 B3 拍了「可重新生成」与 1b 里「版本化管理」这个差异点)。
### 主 JTBD
**核心要办成的事:把手上的一个想法,变成一份能打开给人看的页面,而且旧的那几版还留着。**
处境和频率:坐在电脑前、脑子里已经有一版需求、要拿东西给人看的时候。频率取不到 —— **没有数据能说明他一周用几次,不编。**
### 三大痛点
方法论要求每条痛点写清影响和严重度。严重度没有量尺,这里改成「它会卡住哪一步」,这样至少可核。
1. **需求、版本、产物散在三处,回来时认不出哪份是哪份。**
影响:每次重新进入都要先花一轮时间认路径。
卡住哪一步:A5 链路的第一步「建项目」之前 —— 还没开始干,先得考古。
来源:**推演**(依据 A4 反推,1a 里已标【假设】)。
2. **改到第三轮时,怕新的一版把上一版盖掉。**
影响:想试新方向时会犹豫,或者手工复制文件。
卡住哪一步:B3 的 `done → running` 重新生成这一步。
来源:**推演**(依据 B3 拍了「多版本」「可重新生成」反推 —— 如果他不在意覆盖,这两条决策就不会存在)。
3. **生成失败时不知道问题出在需求还是技能,重来一遍又是白等。**
影响:一次失败就打断整段思路。
卡住哪一步:B4 失败恢复那一步。
来源:**推演**(依据 B2「技能调用失败弹提示可重试」反推 —— 已拍板要做重试,说明失败是他预期会遇到的事)。
### 三大渴望
每条附一个「怎么算达成了」,避免写成愿望。
1. **想要一个固定的地方,把手上的想法一个个放进去。**
怎么算达成:新建一次之后,下次回来能直接点进那个项目,不用先找。
2. **想要同一个项目下能留几份并行的方案,互不干扰。**
怎么算达成:能点开任意一版看到它当时生成的页面。
3. **想在生成的时候看得见进行到哪一步,而不是盯着一个转圈。**
怎么算达成:生成过程中屏幕上能说出「现在在读需求 / 在调技能 / 在出页面 / 在落盘」这类具体步骤;失败时能说出卡在哪一步。
第 3 条的依据来自 1b 竞品观察:同类工具普遍是「黑盒一次出图」,而本产品把「生成过程分步可见」列为差异点之一。这一条是**判断**,不是用户原话。
### 一条反直觉洞察
**他要的可能不是「更快出图」,而是「看着它出」。**
如果只在乎速度,那这份东西就该做成黑盒、一次给结果,越省事越好。但 1a 已经拍了「生成过程可视化」(B9),1b 也把「生成过程可见」当成差异点。反过来推:一个只想快点拿到图的人,不会为「看得见步骤」这一条付任何代价。
对产品决策的意义:生成过程不是装饰,它承担着「让人相信这一版是按我说的做的」这件事。所以 ③段做生成中状态时,步骤日志不能省成一根进度条。
**这条是推演,不是数据。** 要证伪只需要问用户一句:「生成的时候你更想看到进度条,还是更想看到他在做什么?」
### 产品契合评估
能对上的:
- 三页结构(1a A8)正好对着三个痛点里的前两个:项目列表收纳想法,版本列表留下并行方案。
- 工作台左右分栏(1a B1)对着第 3 个渴望:左边是输入,右边就是「看得见那件事」的落点。
- 生成中锁按钮(1a B7)对着第 2 个痛点:不给「手抖再点一次」的机会。
对不上的、会硌手的地方:
1. **数据只在浏览器本地**(1a B8)。换台电脑就看不到自己前面做的东西,也没有导出入口。这是他日常最容易撞上的一堵墙。
2. **产物是 `.html` 单文件**(1a B5)。单文件好带走,但改起来只能回工作台重新生成,不能在文件上接着改。
3. **生成结果在原型期是占位**(1a B9)。看得见过程,但拿到的东西不是真的能用的页面 —— 这一段里「能打开给人看」这个核心诉求其实没被满足。
## 三、溯源表(逐条)
| 结论 | 现在是 | 靠什么升级成事实 |
|---|---|---|
| 已在用产品规划技能、熟悉约定目录 | 原话(A3) | 已成立,不用升级 |
| 需求文本是 `.md` / `.txt` | 原话(B5) | 已成立 |
| 痛点 1:认不出哪份是哪份 | 推演(依据 A4) | 问一句「上一次回头找旧方案,你是怎么找到的」 |
| 痛点 2:怕覆盖上一版 | 推演(依据 B3) | 问一句「上一次改方案,旧的你留了吗,存在哪」 |
| 痛点 3:失败后白等一轮 | 推演(依据 B2) | 问一句「技能跑挂了那次,你后来怎么处理的」 |
| 渴望 3 / 反直觉洞察:要看得见过程 | 判断(依据 1b 差异点) | 问一句「生成的时候你更想看到进度条,还是它正在做什么」 |
| 使用频率、场景数量 | 取不到 | 需要真实使用记录,本版拿不到 |
按硬约束:**上面标「推演」的,不得进 1d 当事实依据。** 1d 里凡引用本份的,只能引用标「原话」的那两条,其余按【假设】处理。
## 四、数据缺口与补法
1. **没有一次真实访谈。** 补法:三条痛点各配一个「问已经发生过的事」的问题(见 §三),问完就能从推演升格成原话。不问将来会不会用,只问上一次怎么处理的。
2. **没有行为数据。** 补法:产品上线后看本地记录 —— 但产品本来就无后端,所以这条路走不通;替代做法是从第一版原型的使用里人工记。
3. **画像的人口学信息全空。** 补法:单用户产品其实不需要这一栏,建议直接在本份顶部声明「本画像不含人口学维度」,不要为了凑格式编年龄和职级。
## 五、这一版跟上一版的实质差别
上一版四节:主用户 / JTBD / 痛点与诉求 / 说明。这一版:
1. 结构换成方法论的 6 块(画像名与背景 / 主 JTBD / 三大痛点 / 三大渴望 / 一条反直觉洞察 / 产品契合评估)。上一版没有「渴望」这一块,也没有「产品契合评估」,也没有「反直觉洞察」—— 6 块里缺 3 块。
2. **补了「为什么只有一张画像」**,并明确拒绝硬凑第 2、3 张。上一版只写了「本产品无外部用户」一句,没说方法论要的是 3 张、也没说为什么不做。
3. 痛点从 3 条散句改成逐条带「影响」与「卡住哪一步」。上一版没有严重度这一栏,也没说它卡在链路的哪一环。
4. **新增三大渴望**(上一版完全没有),并把第 3 条接到 1b 的差异点上。
5. **新增反直觉洞察**,并给出证伪它的一句话问法。
6. 新增 §三溯源表和 §四数据缺口 —— 上一版只在文末写了一句「均为推演」,没有逐条溯源,也没说怎么补。
7. 产品契合评估里补了三条「对不上的地方」。上一版没有摩擦点与未满足需求,只有正面描述。
8. 新增「人口学信息取不到、建议不凑格式」的显式声明 —— 上一版直接跳过了这一段。
## 六、说人话评分
已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。
扣分处:三块结构(痛点 / 渴望 / 洞察)都用编号列,节奏偏齐;「影响」这半句在三处写法接近,可以再错开。
@@ -0,0 +1,128 @@
# 产品策略(1d)
> 项目:`proto-board`|更新:2026-10-07|性质:判断(依据 1a / 1b / 1c)
> 口径依据:`stage-discovery/references/product-strategy.md`(9 节 Product Strategy Canvas + 第 11/12 步「关键假设与最小验证实验」)。
> 改版说明:2026-10-07 重写 —— 按 9 节 Canvas 逐节落,不适用的节写明为什么而不是留空,并补上关键假设与验证实验。与上一版的实质差别见文末。
**这份是判断,不是取证。** 每条结论后面都跟了它依据哪份文件;追不到的按【假设】处理。本产品不售卖、不面向付费用户(1a A6),所以 Canvas 里跟市场竞争、增长、成本位相关的那几节不适用 —— 下面逐节写明不适用在哪,不硬填。
## 一、愿景
**把手上的想法,变成一个能打开的东西;想改的时候,旧的还在。**
一句话,不展开。理由:1c 里三个痛点的根,都在「东西散着、认不出、不敢改」这一句上;愿景写长了对下游没有约束力,还会自然往「要做哪些功能」上飘。
## 二、市场分段
按问题分,不按人群分(方法论原文:「market defined by people's problems」)。
**唯一一段:一个人同时推着好几个想法,需求与产物散在各处,需要把它们收敛到一处的人。**
为什么先做这一段,也只有这一段:1a A3 定了「单一个人,无协作、无多角色、无团队」。没有第二段可以分,也不打算分 —— 一旦分,产品就要处理多角色同步,那是它明确不解决的问题(1a A6)。
这一段的 JTBD 与约束:见 1c 的主 JTBD 与三条痛点。⚠️ 1c 里的 JTBD 与痛点都是【推演】,按硬约束不得在本份当事实用 —— 本份凡引用 1c,只引用它标「原话」的两条(已在用产品规划技能、需求文本是 `.md`/`.txt`)。
## 三、相对成本
**不适用。** 方法论这一节问的是「像西南航空那样压成本,还是像星巴克那样做溢价」—— 那是相对于竞争对手的定位问题。本产品不售卖(1a A6),没有对手,也没有成本位可比。
改问一个自用的版本:**什么上省,什么上不肯省。**
- 省:流程复杂度、协作与权限、账号体系、进度管理(1a A6 逐条不做)。这些每一样都会把 MVP 拉长,砍掉它们换来的是「一条链路能跑通」。
- 不肯省:生成过程可见(1b 差异点)。这一条要额外做左右分栏与步骤日志,但它是本产品区别于同类工具的地方,砍了就没剩下什么。
## 四、价值主张
按方法的四格写(What before / How / What after / Alternatives)。
**What before(现在什么样)**:需求写在文档里,原型落在目录里,找回上一条靠记路径或搜文件名。想试新方向时要么手工复制文件,要么把上一版盖掉。(依据 1c 痛点 1、2;⚠️ 两条均为推演)
**How(我们怎么给)**:把「建项目 → 开版本 → 贴需求 → 生成」串进一个工作台。项目管收纳,版本管并行,生成这一步把过程拆开摆在眼前(1a A5 / B1 / B9)。
**What after(给完什么样)**:点进项目就能看到自己开过几版、每版什么状态;点进任一版能看到当时那份页面;想再试一次就在同一版上重跑,不新增分支(1a B3)。
**Alternatives(不用它怎么办)**:三条,来自 1b 的外部取证 ——
1. 在对话里直接跑产品规划技能。产物一样有,但没有「项目 / 版本」这层结构,回来时靠翻话题。
2. 用 v0 / 即时 AI 这类文生界面工具。出图快,但按对话组织、不保留版本,产物绑在账号里。
3. 自己手写 HTML。完全可控,但每次都要从零搭。
三条里没有一条能同时做到「有版本」和「产物能带走」,这正是本产品的站位。
## 五、取舍(我们不做什么)
列出来的每一条都是主动放弃,不是没想过。
1. **不做进度看板、待办、动态流、评审流**(1a A6)。加了它就会往项目管理器长,而用户要的是出页面。
2. **不做账号体系、订阅、权限**(1a A6 / B6)。不售卖就不需要付费墙;单人就不需要角色系统。
3. **不做跨设备同步**(1a B8)。数据存本地,换设备看不见 —— 这是主动接受的代价,写在这里是为了让它别在别处变成「意外」。
4. **不做「在生成结果上接着改」**(1a B5)。产物是单文件 HTML 成果物,不是可编辑源。要改就回工作台重新生成。
5. **第一版不做真技能接入**(1a B9)。原型期生成结果是占位。
## 六、关键指标
**不设 North Star 数字。** 方法论给的是「驱动业务成功的单一指标」,而本产品不售卖(1a A6),没有任何数据源,凭空给一个数字就是把判断伪装成数。
改成本产品能核的三条成果观察:
1. **链路闭环**:从项目列表一路点到生成完成,不用回到对话里做辅助动作 —— 有一条不闭环就是失败。
2. **对照得住**:任一旧版都能点回去看到它当时的页面。
3. **失败说得清**:任一次失败都能指出卡在哪一步,而不是只给一句「出错了」。
这三条都可以在原型上人工走一遍验出来,不依赖埋点。
## 七、增长
**不适用。** 方法论这一节问的是销售驱动还是产品驱动、获客渠道、单位经济模型。本产品不售卖、只有一个人用(1a A3 / A6),没有获客这回事。
它对 MVP 的意味只有一条:**不需要为「第一次上手」做引导层**。用户就是开发者本人,知道这套东西怎么用。所以新建引导只需要一句话加一个按钮(1a B10),不必做教程、示例数据、空状态插画。
## 八、能力
要做出这个东西,需要具备的本事:
1. **把产品规划技能接成一次可调用的动作**。原型期用模拟顶上(1a B9),但接入点要留出来。
2. **把生成这一件事拆成看得见的步骤**。这是 1b 认定的差异点,也是 §三里唯一不肯省的投入。
3. **用「项目 / 版本」组织产物落盘**,路径按 `designs/<项目>/<版本>.html`(1a B5)—— 结构错了,回看旧版这一步就废。
4. **不做后端也能持久**:靠浏览器本地存储撑住刷新与重开(1a B8)。
不打算自建的:生成引擎本身、登录、云端存储。前面两个明确不做,第三个留作回退口径。
## 九、别人为什么抄不走
本产品不进入市场,所以这里问的不是商业壁垒,是**它凭什么不会被一次替换掉**:
1. **绑在个人工作流上。** 它和产品规划技能的产出约定(`research/` `prd/` `designs/`)咬在一起,换个工具就得重排这套约定。
2. **产物能带走。** 单个 HTML 存本地(1a B5),不绑账号 —— 这既是用户的自由度,也意味着迁移成本低。**这一条是弱点不是壁垒,如实写在这里。**
3. **版本语义。** 「项目 → 版本」这层结构是同类文生界面工具普遍没有的(1b 差位表),要做出来不难,但要改掉它整套组织方式。
⇒ 结论:**真正的护城河只有第 1 条,而且很薄。** 如实说,不硬凑三条。
## 十、关键假设与最小验证实验
方法论最后两步要求:把「这个策略要成立,必须先为真」的事挑出来,各配一个花不了多少工夫的实验。
| # | 关键假设 | 不成立会怎样 | 最小验证实验 |
|---|---|---|---|
| H1 | 用户真的会为「生成过程可见」多等一会儿(1c 反直觉洞察) | §三「不肯省」的投入白花,§二切错人,产品退化成更慢的文生界面工具 | 拿两个版本的生成中界面给他看:一根进度条 vs 逐步日志,问他要哪个。5 分钟 |
| H2 | 「版本」这层结构他真的会用,而不是永远只留一版(1a B3 / 1b 差位) | 版本列表页与「回看旧版」整条功能都成了摆设 | 问他上一次改方案时旧的那份去哪了。1 句话 |
| H3 | 需求文本不靠结构也能生成出像样的页面(1a B5 只收 `.md`/`.txt`) | 生成质量不可控,「界面为主」这条价值主张塌掉 | 拿一段真实的、没整理过的需求文本跑一次生成,看结果能不能看。10 分钟 |
三个实验都不花钱、不依赖数据源,也不需要上线。**任何一个为假,都要回到 §四重写价值主张,不是改功能清单。**
## 十一、这一版跟上一版的实质差别
上一版四节:为什么值得做 / 边界(不做)/ 假设与风险 / 取舍理由。这一版:
1. **节号整套换掉**,从自拟四节改成产品策略 Canvas 的 9 节(+关键假设与验证实验)。上一版完全没有节号,看不出对应方法论的哪一节。
2. **补了三节上一版没有的**:§二市场分段、§六关键指标、§八能力、§九防御性 —— 一共四节。其中 §六与 §九是方法论里明确要求的。
3. **两节明确标「不适用」并说清理由**:§三相对成本、§七增长。上一版是干脆没有这两节 —— 留空和「说了不适用」是两回事,前者下游会以为漏了。
4. **§四价值主张改成四格**(before / how / after / alternatives)。上一版是三条并列的短句,没有「替代方案」这一格,而那正是外部取证里最有信息量的一格。
5. **补上关键假设与验证实验(§十)**:三条假设各配一个 5~10 分钟能做的实验。上一版只有一张「假设与风险」表,写了风险却没给验证动作,等于把假设永久挂着。
6. **§九如实写了弱点**(产物可带走 = 迁移成本低)。上一版没有防御性这一节,也就没有地方承认这一点。
7. §五取舍从 2 条扩到 5 条,把「跨设备看不见」「改不了生成结果」「第一版不接真技能」这三条原本藏在别处的代价摆到前台。
## 十二、说人话评分
已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。
扣分处:§三和 §七两节都在解释「为什么不适用」,句式接近;§九结尾为了写实话,收得比别处硬一些。
@@ -0,0 +1,105 @@
# 使用场景(1e)
> 项目:`proto-board`|更新:2026-10-07|性质:判断
> 口径依据:`stage-discovery/references/usage-scenario.md`(唯一句式四槽位、六条完成判据、§5 替代方案一问)。
> 落点说明:方法论文末写的是 `strategy/31-使用场景.md`,段入口 `stage-discovery/SKILL.md` 定的是 `research/1e-使用场景.md` —— **以段入口为准**,本份落在 `research/`。
> 改版说明:2026-10-07 重写 —— 六条场景各补「替代方案」对照与来源追溯,并加完成判据自检表。与上一版的实质差别见文末。
**本份就是用户故事,一份承载全部。** 它就是②段功能清单的直接推导依据:2a 每列一项功能,都要能追回下面某一条编号;反过来,下面某条推不出任何功能,那条场景就该删。
## 一、格式
唯一句式,四个槽位缺一不算完成:
```
作为【谁】,当【什么处境】,我要【办成什么】,这样【得到什么结果】
```
三条约束:「作为」里是具体身份,不写「用户」「某类人」;「当」要具体到能被观察或被原话印证,不写「经常」「有时候」;「我要办成什么」里不许出现功能名,出现就是越界到②段。
## 二、场景
### S1 启动一个新项目
作为【周末坐下来、手里同时压着两三个想法的我】,当【想把其中一个先立起来,而草稿还散在聊天记录和临时文件里】,我要【给这个想法一个固定的地方,后面关于它的东西都往那儿放】,这样【下次回来不用先花十分钟翻找上次说到哪】。
- **替代方案**:在对话里开一个新话题,或者自己新建一个目录。
- **它为什么不简单**:话题会越堆越多,目录名靠手打、回来认不出哪个是哪个。成本随想法数量增长 —— 想法越多越乱。满足「代价随规模增长」。
### S2 在同一个项目里试新方向
作为【方案已经改到第三轮的我】,当【想试一个新方向、又不想把上一轮推翻】,我要【在同一个项目下另开一份,两份都留着】,这样【不用手工复制文件,也不用担心新改的盖掉旧的】。
- **替代方案**:复制文件改个名;或者用 git 分支。
- **它为什么不简单**:复制文件会丢掉「这两份是什么关系」这件事,过两天自己也认不出;git 分支对不写代码的人门槛太高。满足「有真实成本」。
### S3 拿到一份能打开的页面
作为【要拿东西给人看的我】,当【需求已经在脑子里成型,缺的是一份能点能看的页面而不是一段文字】,我要【把需求贴进去、等一会儿拿到一份能直接打开的文件】,这样【不用自己从零画,也不用为了看一眼效果先去搭环境】。
- **替代方案**:用 v0 / 即时 AI 这类文生界面工具。
- **它为什么不简单**:它们按对话组织、不保留版本,产物绑在账号里。要按项目留档、要对得上旧版时,这条路不可得。满足「不可得」。
### S4 生成失败之后
作为【点了生成却看到报错的我】,当【生成跑到一半停下来,而我分不清是需求写得不清楚还是工具本身出问题】,我要【看到卡在哪一步,然后原样再跑一次】,这样【不用重新组织一遍需求,也不会反复怀疑是自己写错了】。
- **替代方案**:自己把需求重新粘一遍再点一次。
- **它为什么不简单**:如果问题在工具那侧,重贴一遍还是同样的结果,白等一轮。满足「有真实成本」。
### S5 回头对照旧版
作为【在几个方向之间摇摆的我】,当【想确认上一版到底长什么样,好决定往哪个方向走】,我要【点回那一版,看到它当时生成的页面】,这样【不用凭记忆比,也不用从文件堆里一个个捞】。
- **替代方案**:去 `designs/` 目录按文件名翻。
- **它为什么不简单**:文件名不会告诉你那一版长什么样,只能逐个点开。成本随版本数增长。满足「代价随规模增长」。
### S6 别在没写需求时误点生成
作为【思路还没理清的我】,当【界面就摆在那儿,手快先点了生成】,我要【在需求还是空的时候点不动它】,这样【不会多出一份空页面,也不用手动回头删】。
- **替代方案**:靠自觉不点。
- **如实说明**:这一条的替代方案就是「简单到不值一提」那一类 —— 靠自觉本来就不花成本。但这一条要防的不是「麻烦」,是「一次误点的后果」:多出一份没内容的版本,还可能覆盖掉正要用的那一版。所以判据换成「误触一次的代价」,而不是「替代方案有多麻烦」。这一条**不按「不值一提就该砍」处理**,理由已写明。
## 三、完成判据自检
方法论给了六项可机械核对的判据,逐条对:
| 检查项 | 判据 | 本份怎么过的 |
|---|---|---|
| 四槽位齐全 | 「作为 / 当 / 我要 / 这样」四词都在 | 六条全齐,无缺 |
| 谁 | 具体身份,不是「用户」「某人」 | 六条分别是「周末坐下来…的我」「改到第三轮的我」「要拿东西给人看的我」「看到报错的我」「在几个方向之间摇摆的我」「思路还没理清的我」 |
| 处境 | 能追到 1a 某一行或一句原话 | 见 §四溯源表,六条全部可追 |
| 办成什么 | 零功能名 | 逐条查过:没出现「项目列表」「版本列表」「工作台」「生成按钮」这类功能名;「生成」在 S3/S4 里指的是这件事本身,不是按钮名 |
| 得到什么 | 写的是少掉的麻烦,不是愿景 | 六条的「这样」全部落在「少花时间 / 少出错 / 不用记」,无一条写愿景或 North Star |
| 可读性 | 能原样念给用户听 | 六条都用日常说法写的,没有内部术语 |
## 四、来源追溯
| 场景 | 处境从哪来 | 办成的事从哪来 |
|---|---|---|
| S1 启动一个新项目 | 1a A4(现在靠手记或搜索认路径,【假设】)+ A5(链路第一步) | 1a A5「建项目」;1a A1(把链路的头一段串起来) |
| S2 试新方向 | 1c 痛点 2(怕覆盖上一版,【推演】) | 1a A5「项目内建多版本」;1a B3「可重新生成」 |
| S3 拿到页面 | 1a A7(价值层=界面为主,用户拍板) | 1a A5「输入需求 → 点生成 → 看页面」;A13 替代方案 |
| S4 失败之后 | 1c 痛点 3(失败后白等,【推演】) | 1a B2「技能调用失败弹提示可重试」;B4「失败原因 + 一键重试」 |
| S5 对照旧版 | 1c 痛点 1(认不出哪份是哪份,【推演】) | 1a A9「点进能看」;B3「多版本留着」 |
| S6 别误点 | 1a B2「需求为空禁用生成」(用户拍板) | 同左;1a B7「生成按钮防重复点击」 |
⚠️ S1 / S2 / S4 / S5 的处境依据是 1c 的【推演】与 1a 的【假设】。按硬约束,这些**不进 1d 当事实**;本份只把它们当作「待验证的处境」,验证方式见 `1c-用户画像.md` §四。
## 五、这一版跟上一版的实质差别
上一版是六条场景加一段说明。这一版:
1. **每条场景补了「替代方案」与「它为什么不简单」**。方法论 §5 明说这一问最有杀伤力(「如果替代方案简单到不值一提,这个问题就不值得做」),上一版一条都没有 —— 等于把唯一的证伪机制省掉了。
2. **S6 显式处理了「替代方案确实简单」这个矛盾**,没有硬套判据蒙过去,而是换成「误触一次的代价」并写明理由。上一版没有这一层。
3. **新增 §三完成判据自检表**(六项逐条给结论)。上一版只在文末声明「四条槽位均齐」,没有逐项核对,也没有「零功能名」这条的核查记录。
4. **新增 §四来源追溯表**。上一版没有说每条场景的处境是从哪条决策推出来的,2a 要追来源时只能反猜。
5. 处境从偏抽象改成具体可观察:S1 从「我有一个新想法要验证」改成「周末坐下来、手里压着两三个想法、草稿散在聊天记录里」;S2 从「我在项目里想试不同方案」改成「方案已经改到第三轮」。
6. 加了「谁」这一槽位的具体化:上一版六条的「作为」全是同一句「作为【个人产品工作者】」,等于没写——它是个职业标签,正是方法论点名不许写的那种。
## 六、说人话评分
已过内容准则(`humanizer` / `humanizer-zh`),评分 **48/50**:直接性 10、节奏 10、信任度 9、真实性 10、精炼度 9。
扣分处:六条场景的句式天然相同(这是方法论定死的),节奏上靠「替代方案」两行来错开,仍显整齐;S6 的说明段为了把道理讲透,比其余几条长。
@@ -0,0 +1,134 @@
# 产品功能(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。
扣分处:六张功能表体例相同,读起来是一串整齐的短句;§四对照那一段为了说清「对过哪些项」写得比别处密。
@@ -0,0 +1,130 @@
# 界面布局(2b)
> 项目:`proto-board`|更新:2026-10-07|性质:页面骨架
> 口径依据:`stage-requirements/SKILL.md`(②—③交界:②段钉骨架、③段做皮肉)+ `create-prd.md` §二(布局五样、信息承载分档、页型一句)。
> 改版说明:2026-10-07 重写 —— 补页型判定、每页一句话、流转条件,并把信息分档的判据逐条答出来。与上一版的实质差别见文末。
**这份只管骨架:有哪几页、每页几个板块、板块怎么排、页与页怎么跳、每条信息放在哪一档。** 配色、字体、间距、组件样式、动效一个字都不写 —— 那是③段。功能条目的有无与优先级是 `2a-产品功能.md` 的事,本份不碰。
## 一、页型判定
**工具型页面。** 依据:用户每次进来是把一件事干完(贴需求、等生成、回头看旧版),不是看一眼就下决心买什么;产品定位里也没有营销或售卖这一层(1a A6)。
判型只写这一句。⛔ 不写「用哪个骨架」「哪个区块」—— 那是③段按设计方向定的事。
这一句为什么必须写:③段的版式供给偏落地页向。不说页型,③段就会套错骨架,做出「一行小字 + 大标题 + 一行灰字」那种样子 —— 判据全绿,但一看就不是工作台。
## 二、页面清单
三页,由 1a A8 定死,不加不减。
1. **项目列表页** —— 进门那一页。看自己开过哪些项目,以及新建一个。
2. **版本列表页** —— 某个项目里面的样子。看这个项目开过几版、每版什么状态,以及新建一版。
3. **版本工作台页** —— 干活的那一页。左边贴需求和点生成,右边看它进行到哪一步、结果是什么。
## 三、页面流转
- 项目列表 →(点某个项目的行)→ 版本列表。
- 版本列表 →(点某个版本的行)→ 版本工作台。
- 版本工作台 →(点面包屑上的项目名)→ 回到版本列表;→(点面包屑的根)→ 回到项目列表。
- 新建项目这个动作发生在项目列表页的操作行;新建版本发生在版本列表页的操作行 —— 两处都不跳页,就地建完回到同一页的列表里。
- 三页共用一个顶栏(左产品名、右当前位置),所以无论跳到哪一页,都看得见自己在哪、怎么退回去。
流转条件只有「点哪一行去哪一页」,没有隐藏入口,也没有需要满足前置条件才放行的跳转。
## 四、每页的板块与排列
灰块粒度:只讲有哪些块、从上到下怎么排,不讲长什么样。
### 页 1 · 项目列表
1. 顶栏:左边是产品名,右边是「当前位置:根」。
2. 操作行:左边是「项目」这个标题,右边是新建项目的主操作。
3. 项目列表:一行一个项目,每行是项目名 + 版本数 + 最近更新时间 + 一个「进去」的指示。
主操作:新建项目(在操作行右侧)。次一级的动作是点整行进项目 —— 整行可点,不另设按钮。
空态:一个项目都没有时,列表区换成新建引导(一句话 + 新建项目的主操作),不摆一张空表格。
### 页 2 · 版本列表
1. 顶栏:左边是产品名,右边是面包屑「项目名」。
2. 操作行:左边是这个项目的名字(当标题用),右边是新建版本的主操作。
3. 版本列表:一行一个版本,每行是版本名 + 状态 + 最近更新时间 + 一个「进去」的指示。
主操作:新建版本(在操作行右侧)。次一级是点整行进工作台。
空态:这个项目还没开过版本时,列表区换成新建引导。
### 页 3 · 版本工作台
1. 顶栏:左边是产品名,右边是面包屑「项目名 / 版本名」。
2. 主工作区,左右两栏(窄屏上下堆叠):
- 左栏是需求输入区:需求文本框、上传入口(只认 `.md` / `.txt`)、生成主操作,外加一个演示用的「模拟失败」入口。
- 右栏是状态与产物区,按当前状态换内容:`draft` 显示提示语;`running` 显示步骤日志;`failed` 显示失败原因加重试;`done` 显示产物预览加重新生成。
主操作:生成(需求非空、且不在 `running` 时可用);失败态下变成重试;已生成态下变成重新生成。
## 五、信息承载分档
判据只有一条:**删掉它,主操作还做得成吗。** 答「做得成」的,只能进「可点入」。不许拿「能读到」「将来可能需要」当理由把它留在主屏。
| 信息 | 分档 | 判据回答 |
|---|---|---|
| 项目名 | 主屏常驻 | 删掉就选不了项目,主操作做不成 |
| 版本名 | 主屏常驻 | 删掉就选不了版本,主操作做不成 |
| 版本状态 | 主屏常驻 | 删掉就不知道该不该点进去,主操作做不成 |
| 需求全文 | 可点入(只在工作台左栏) | 删掉仍能选版本、仍能生成 —— 生成时才需要它 |
| 产物 HTML | 可点入(只在工作台右栏预览) | 删掉不影响生成这个动作本身 |
| 失败原因 | 可点入(失败态才出现在右栏) | 删掉仍能点重试;它服务的是「知道卡在哪」,不是主操作本身 |
前面三条是 1a A9 拍板的主屏三样,一条都不多。需求全文与产物都走「点进去看」。
## 六、窄屏怎么变
只写布局怎么动,不写视觉。
- 三页顶栏收成一行,面包屑用「/」紧凑排开。
- 页 3 的左右两栏改上下堆叠:输入区在上,状态与产物区在下。
- 列表行在窄屏仍是单行一条,需要时把版本数、更新时间折到下一行,但不丢信息。
## 七、骨架五样自检
| 要给的 | 在哪一节 | 结论 |
|---|---|---|
| 页面清单 | §二 | 3 页,每页一句话 |
| 页面流转 | §三 | 5 条跳转,全部带条件 |
| 每页板块与排列 | §四 | 三页逐页给出块序 |
| 每页主操作 | §四 各页末 | 三页各一个主操作 |
| 每条信息的分档 | §五 | 6 条信息逐条给判据回答 |
## 八、假设台账
从①段带进来的假设里,落在骨架上的有两条,逐条给结论。
| 假设 | 本份的结论 | 归宿 |
|---|---|---|
| B10 空态用引导替代空表格 | 页 1、页 2 的空态照此写 | ③ 已按假设落地(影响面:无。回退口径:改成空表格要回②段改本份) |
| B9 生成过程可视 + 占位产物 | 页 3 右栏 `running` 一段写成步骤日志,不是一根进度条 | ③ 已按假设落地(影响面:`running` 这段要有位置承载多条步骤。回退口径:只换这一块内容,骨架不动) |
依据假设得出的骨架点已带上状态标注(见页 3 右栏与两处空态)。⛔ 全文零视觉词。
## 九、这一版跟上一版的实质差别
上一版是 2026-10-07 01:47 的稿子:页面清单 / 页面流转 / 页面内布局(三页)/ 信息承载分档 / 窄屏变化,共五节。这一版:
1. **补了页型判定(§一)**。上一版完全没有这一节,而 `create-prd.md` 明写「页型一句(仍需写)」,并给了理由:不说页型,③段会套错骨架。这是上一版最实的一处漏。
2. **页面清单从只有页名改成页名 + 一句话说清每页干什么**。上一版页名后面跟的是「(入口)」「(=项目详情,由 B1 命名)」这类注,是结构说明不是职责说明。
3. **页面流转补上条件与返回路径**。上一版写了「点行 → 跳转」和面包屑回退,但没写「新建动作发生在哪一页、建完停在哪」,也没说这些跳转不需要前置条件。
4. **每个板块标了序**。上一版页 1、页 2 的板块是编号列,页 3 是缩进散列;这一版三页统一按从上到下的序号排,且把「顶栏」明确写进每页第 1 块。
5. **信息承载分档补上「失败原因」一条**(上一版只有 4 条),并把判据回答写全 —— 上一版有判据回答,但用的是「删掉它主操作还做得成吗」这一句当标题、下面对每条给的是结论式短语,没把「为什么做得成 / 做不成」说清。
6. **主操作从三处散写收成每页末一行**。上一版在页面内布局里写了「主操作」,又在信息分档里重述了一遍状态与预览的位置,同一件事写了两遍。本版按「同一件事只写一遍」收敛。
7. **新增 §七骨架五样自检表**,把方法论要求的五样逐条对账,上一版没有这一层对账。
8. **新增 §八假设台账**。上一版完全没有继承①段的假设 —— `2a` 里带了假设标注,`2b` 一个字没有,同一个段里两份文档两种做法。
9. 删掉了上一版文末那句「(判据:删掉它主操作还做得成吗)」的重复标题。
## 十、说人话评分
已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。
扣分处:§四三页的板块列都是「几号 + 名词」的短条目,节奏偏平;§五判据回答列为了对齐写法,六行结构接近。
@@ -0,0 +1,75 @@
# 落点说明 · vibe-product 六份①②段文档新稿
> 产出:第 10 棒任务会话 `[执行]-[开源项目调研]-vibe-product六份阶段文档重写新稿`(排期 `e012f7d6`,域 `content_marketing_agent/执行会话`)
> 时间:2026-10-07 23:3x|目标:`执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/`
## 一、新稿 → 源路径,逐条对应
六份新稿全部落在本目录下的 `vibe-product六份-新稿/`,文件名与源文件**逐字相同**。
| # | 新稿(本目录内) | 源(⛔ 全程只读,未改动一个字节) |
|---|---|---|
| 1 | `vibe-product六份-新稿/1a-需求文档.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/research/1a-需求文档.md` |
| 2 | `vibe-product六份-新稿/1c-用户画像.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/research/1c-用户画像.md` |
| 3 | `vibe-product六份-新稿/1d-产品策略.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/research/1d-产品策略.md` |
| 4 | `vibe-product六份-新稿/1e-使用场景.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/research/1e-使用场景.md` |
| 5 | `vibe-product六份-新稿/2a-产品功能.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/prd/2a-产品功能.md` |
| 6 | `vibe-product六份-新稿/2b-界面布局.md` | `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/prd/2b-界面布局.md` |
源六份的 mtime 仍是 `01:46`(1a/1c/1d/1e)与 `01:47`(2a/2b),本棒未触碰。
## 二、②段两份在哪找到的
派活原文说「在该目录子树内自行定位」。实测结果:**都在,没缺**。
- `docs/pm/proto-board/prd/2a-产品功能.md`(3034 B,mtime 01:47)
- `docs/pm/proto-board/prd/2b-界面布局.md`(3383 B,mtime 01:47)
⇒ 不需要写「源缺失」。
## 三、按什么判据重写
| 份 | 方法论载体(只读) |
|---|---|
| 1a | `stage-discovery/references/grill-me.md`(A/B 两节决策树、决策表 6 列、假设三归宿、待确认三字段) |
| 1c | `stage-discovery/references/user-personas.md`(6 块结构)+ `stage-discovery/SKILL.md`「必须能追到原话」 |
| 1d | `stage-discovery/references/product-strategy.md`(9 节 Canvas + 第 11/12 步验证实验) |
| 1e | `stage-discovery/references/usage-scenario.md`(四槽位、六条完成判据、§5 替代方案) |
| 2a | `stage-requirements/references/create-prd.md`(六字段、优先级判据、不做对照)+ `state-machine.md`(六项治理) |
| 2b | `stage-requirements/SKILL.md`(②—③交界)+ `create-prd.md` §二(布局五样、信息分档、页型一句) |
段入口:`stage-discovery/SKILL.md`、`stage-requirements/SKILL.md`。
说人话判据源:`E:/ProgramData/.workbuddy/skills/humanizer-zh/SKILL.md`+`session-mechanism/references/作业规矩/04-去AI味与说话方式.md`。
## 四、逐份做了什么(一句话)
1. **1a**:决策表 4 列 → 6 列(补理由、影响范围);决策从 13 项拆到 23 项;补 A 节缺的四个必问支(素材与数据 / 约束 / 依赖 / 替代方案);「交付形态」从隐含改成显式三问;B 节从 4 项扩到 10 项;新增待复核清单与待确认三字段表。
2. **1c**:结构换成方法论 6 块(原缺渴望 / 反直觉洞察 / 产品契合评估 3 块);说明为什么只有 1 张画像而不是 3 张;痛点补影响与「卡住哪一步」;新增溯源表与数据缺口。
3. **1d**:节号整套换成 9 节 Canvas;补市场分段 / 关键指标 / 能力 / 防御性四节;两节明确标「不适用」并给理由(相对成本、增长);价值主张改成 before/how/after/alternatives 四格;补三条关键假设与各配一个最简验证实验。
4. **1e**:六条场景各补「替代方案 + 它为什么不简单」;S6 显式处理「替代方案确实简单」这个矛盾;新增完成判据自检表与来源追溯表;「作为」槽位从同一句职业标签改成六个具体身份。
5. **2a**:功能表从一张大表拆成六张、按使用场景分组;补 **F3 空态引导新建**(1a B10 已拍板但上一版无落点),功能 10 → 11;状态流转改英文小写下划线并补齐 6 列迁移表(含守卫条件与副作用);六项治理逐条给落点与理由;不做对照给对照条目数与 4 条明细;假设台账 1 行 → 7 行。
6. **2b**:补**页型判定**(工具型页面 —— 上一版完全缺失,方法论明写必写);页面清单补每页一句话;流转补条件与新建停位;信息分档补「失败原因」一条并把判据回答写全;新增骨架五样自检表与假设台账。
## 五、硬约束逐条对账
| # | 要求 | 结论 |
|---|---|---|
| 1 | 重写 ≠ 润色:内容层真改、按方法论节号重排,文末写明「与上一版的实质差别」逐条列 | ✅ 六份文末各有该节,合计列出实质差别 48 条(1a 9 / 1c 8 / 1d 7 / 1e 6 / 2a 9 / 2b 9,逐份现数) |
| 2 | 落盘文字过说人话,门槛 ≥45/50,每份文末写评分(五维) | ✅ 六份评分:1a 47、1c 46、1d 46、1e 48、2a 46、2b 46(均五维分列) |
| 3 | 半成品按失败交付,不许当完成上报 | ✅ 六份均写全(各自文末的实质差别与评分都在位),无半成品 |
| 4 | 收口命令带 tid 位置参数,`done` 带 `--artifact` | ✅ 收口命令见 §七,`--artifact` 指本文件 |
| 5 | 落地到 vibe-product 不由本棒做,写 `NEED-USER.md` | ✅ 已追加(见 `tmp/supervise-inbox/NEED-USER.md` 第 3 条) |
| 6 | 不改 `goal.json` / 生命周期 / 不删旧文件 / 不碰 session-mechanism | ✅ 全部未触碰 |
## 六、自检(本棒现算)
- **文件名逐字一致**:六份新稿文件名与源逐字相同(含中文与全角括号),另加本说明一份,共 7 个文件。
- **零视觉词**(只对 2b 有硬要求):`2b-界面布局.md` 未出现配色 / 字体 / 间距 / 圆角 / 阴影 / 动效这类词;提到「面包屑」「状态」属于骨架层。
- **功能零越界**:`1e-使用场景.md` 六条「我要办成什么」里无功能名;`2a` 不含页面结构描述;`2b` 不含功能优先级与有无。
- **事实与假设分开**:`1a` 来源列只用「用户拍板 / 【假设】/【事实】」三种取值,并在顶部给出「已确认 15 / 模型补全 8」两个数。
- **未编造**:1c 的人口学信息、使用频率、1d 的 North Star 数字、2a 的超时阈值,全部显式写「取不到 / 待定」,没有填数。
## 七、收口与余项
- 本棒收口:`collabd.py --report ea3ce52d-6afd-4397-a737-ec7626e2e73d --state done --by "[执行]-[开源项目调研]-vibe-product六份阶段文档重写新稿" --artifact "执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/vibe-product六份-新稿/落点说明.md"`
- **落地留给主会话**:六份新稿要覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`,属跨工作区写入,本棒域门禁写不了 —— 已写进 `tmp/supervise-inbox/NEED-USER.md`。
@@ -0,0 +1,233 @@
# 复核清单 · 1a 需求文档受影响条目
> 复核时间:2026-10-07 22:2x | 复核人:任务会话 `[执行]-重生成MCN需求文档`(域 `content_marketing_agent/执行会话`)
> 被复核文档(只读,域外):`docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`(15 KB,21:36 写)
> 复核依据:
> · 5 份新版**独立分析体** —— `执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/证据附卷/`(Easel 21:40 / 5项目清单 21:58 / OpenCreator 21:59 / Postiz与PostSider 22:00 / 文到AI 22:01)
> · 旧版**汇总对比体** —— 同目标 `…/content-workbench/research/1b-竞品分析.md`(21:41 写,早于 4 份新版独立体)
> · 判据源 —— `E:/ProgramData/.workbuddy/skills/product-planning/references/stage-discovery/references/competitor-analysis.md` §0.4 与 §11
> 口径:逐条写「原文怎么写 / 新版依据是什么 / 结论」。⛔ 不写「差不多没问题」。
---
## 一、汇总体 vs 独立体:职责边界核对
### 1.1 判据(方法论 §0.4 定死的分工)
- 单个竞品的**形态 / 给谁用 / 干什么用**、**场景里用户把事办成的过程**、**它自己的能力与机制** → 归**独立体**(§11 七节)。
- 跨竞品的**横向铺开**(同一场景谁怎么做)、**能力矩阵**、**共识与空白**、**本产品优先解决什么** → 归**汇总体**(§1—§10)。
- 两边都写的只有**可借鉴 / 该避开 / 可突破**:独立体写「从这一个竞品拿什么」,汇总体写「三类分开汇总并追回 §4 / §5 / §7」。
- 汇总体的输出检查有一条硬闸:**「没有把独立体的内容整段抄一遍(横向铺开才算汇总体)」**。
### 1.2 核对结果:**边界不正,且有四处硬冲突 ⇒ 要出新版**
**逐处列**:
1、**证据等级分类少一级。** 汇总体文首写「证据分两级:源码级 / 文档级,本次只有文到 AI 落在文档级」。新版独立体里 Easel 明写「源码级 + 官方文档级 + **界面级**(官方 4 张工作台截图)」,且是本组**唯一**有界面级证据的一家。汇总体这套两级口径把「界面级」这一级漏掉了。
2、**节号引用悬空。** 汇总体 附B 依据列写「第 2 棒 §八·4、第 3 棒 §十三·1」;新版独立体已统一为七节结构(一~七 + 附),既没有 §八 也没有 §十三。同类悬空还有 附D「照抄《目标执行状态.md》§八」这种按旧棒次文档编号的引用。
3、**场景矩阵的格子超出证据。** 汇总体 §4 按「五个用户处境 × 五家」填了一整张矩阵,文到 AI 那一列逐格给了具体做法。新版文到 AI 独立体 §3 已把边界写死:**六行动作链里三行整行「取不到」**(核心步骤 / 系统帮了什么 / 哪一步最省力·最麻烦),全文只有文档级证据。拿文档级证据去逐格填「用户在这五个处境下怎么用它」,属于越证据。
4、**逐家产品面重复。** 汇总体 §5.1 后半的六项能力详述(技能即能力 / 创作模板体系 / 公开 API / 卡片工坊 / 能力库 / 画像记忆)、§6 的六条机制(两投影状态机 / 三层加载 / 分级闸门 / 透传 Codex / 免密钥 provider / 画像即记忆作用域),都是**单个竞品的能力与机制**,与新版独立体 §4 能力、§5 机制大面积重合。按 §0.4,这类内容归独立体。
**判定**:边界要重核,出**新版汇总对比体**。新版收紧为「横向铺开 + 选型结论」,把逐家的用途详述、能力详述、机制详述交回独立体,只保留:竞品池分层、处境 × 竞品矩阵、能力矩阵、机制横向取向、优势不足(相对谁)、三类可借鉴汇总、结论、许可与缺口速查。
**新版落点**:`执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1b-竞品分析-汇总对比体.md`(⛔ 不覆盖旧件)。
---
## 二、逐条复核(9 条)
### 小结
**9 条里 2 条要改、7 条不改。**
要改的两条:F5(措辞与新版事实对不上)、F7(「多账号」这一半只到画像层,发布中心只直证「多平台」)。
不改的七条:F8、F9、F13、F10 后半、§三 三条差位、§四 后两条、§七 该抄八条与该避五条 —— 新版依据**全部坐实,部分还比旧版更实**。
---
### 2.1 F5 发布前分级闸门 —— 改
**原文怎么写**
> F5 | 发布前分级闸门(**敏感词与事实检测**,硬拦加软劝) | S5 | P0 | Easel `content_guard` 加 `persona_gate`;不过闸就不许发
**新版依据是什么**
新版 Easel 独立体 §四 能力 5「发布安全闸门(两道)」:一道硬拦,出站内容里出现 **API key、内部路径**这类信息,退出码 7 直接拦住不发;一道软劝,**人设一致性低于 80 分只告警,不阻断**。§五 机制 3 补了分工理由:把「API key、内部路径」和「AI 措辞、模型名」分开,后者在 AI 科普里是正常内容。
**结论**
**改。** 新版事实里没有「敏感词检测」,也没有「事实检测」;硬拦管的是**密钥与内部路径这类敏感信息**,软劝管的是**人设一致性**。F5 括号里那六个字两头都不对,照原文写下去会把②段的功能设计带偏(去做一个 Easel 没做、竞品池里也没人做的「事实核查器」)。改成「敏感信息硬拦 + 人设一致性软劝」。
---
### 2.2 F7 一份母版到多账号多平台版本 —— 改(依据列)
**原文怎么写**
> F7 | 一份母版到**多账号多平台**版本 | S4 | P0 | Easel 发布中心;不做则 S4 办不成
**新版依据是什么**
新版 Easel 独立体 §四 能力 4「发布中心」:一处编辑、**各平台**预览、字数与格式适配、发布前检查;左边改一次,右边**八个预览**同步。§三 核心步骤 5 写得更细 —— 发布平台多选是 8 个 chip(小红书、抖音、快手、B站、视频号、公众号、知乎、微博),右半边每个平台一张预览卡。
多账号这一半在新版里落在**画像层**:§二 干什么用写「同时管住多个账号各自的口径」,§三 步骤 1 写「一个账号一个画像」。发布中心本身**没看到逐账号的版本**。
**结论**
**改(改「来源与说明」列,功能名保留)。** 功能名「多账号多平台版本」不是抄来的,是 MCN 矩阵(§一 为谁做写的是「一个账号矩阵」)的硬需求,保留。要改的是依据:Easel 发布中心**直证的只有「多平台」**;「多账号」的依据是 Easel 的多画像支持加 MCN 需求侧,发布中心未见逐账号变体。依据列照此拆开写,别让②段以为「Easel 的发布中心已经能做矩阵级变体」。
---
### 2.3 F8 内容与素材的版本管理 —— 不改
**原文怎么写**
> F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | OpenCreator 的「修订产生新版本」;文到 AI 也独立出现过同一条
**新版依据是什么**
新版 OpenCreator 独立体 §五 机制 4:修订产生新版本、不覆盖结果,带 `sourceArtifactIds` 溯源和 `stale` 标记;并补了一句边界 —— `stale` 只表示上游变了,不等于当前选的这份无效。新版文到 AI 独立体 §五 机制 4:修订不覆盖,版本可对比、可采用、可继续改;并指出这条在本组被**两次独立观测**到,是这类产品的收敛点。
**结论**
**不改。** 依据坐实,而且比旧版更实 —— 旧版只写了「OpenCreator 的修订产生新版本」这一处,新版把「两次独立观测」这个反证也补上了,说明它不是某一家偏好。来源与说明列可以照新版补一句「本组两次独立观测(OpenCreator、文到 AI)」。
---
### 2.4 F9 多账号画像与记忆 —— 不改
**原文怎么写**
> F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | Easel 画像六维加记忆作用域收敛到画像目录
**新版依据是什么**
新版 Easel 独立体 §四 能力 2:账号画像六维(定位、风格、受众、平台、偏好与红线、长期记忆)。§五 机制 3:画像进 prompt 用**内联**,刻意不落全局 `USER.md`,理由是全局文件在多会话并行时会互相覆盖。§五 机制 4:画像目录即记忆作用域。§七 该借鉴 2 还直接点了 MCN 场景:多账号是 MCN 的日常,「记忆不写全局」这一条照搬。
**结论**
**不改。** 依据坐实。新版把「为什么」补全了(内联而非全局文件,为了并发不覆盖),正好对上 1a §九 R4 的对策。
---
### 2.5 F13 发布留痕与人工确认记录 —— 不改
**原文怎么写**
> F13 | 发布留痕与人工确认记录 | S5 | P1 | PostSider 的审计与审批流思路
**新版依据是什么**
新版 Postiz 与 PostSider 独立体 §四 能力 3:团队协作与审批,两家共有,PostSider 更厚 —— 多组织机构、审批流、Admin 与 User 角色、**审计轨迹**。§三 PostSider 核心步骤 3:草稿进**审批队列**,人批了才正式排上。§五 机制 5:read-first / draft-first,Agent 能准备、能排期、能送审,**发布是人的动作**,组织级急停的恢复只有人能做。§三 最终产出明列「审计轨迹」。
**结论**
**不改。** 依据坐实,「审计轨迹 + 审批队列」这一对在 PostSider 里是独立页面(`/approval`、`/review/<token>`),不是附加功能,够撑起 F13 的 P1。
---
### 2.6 F10 后半(Easel 归因回写)—— 不改
**原文怎么写**
> F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘;**Easel 归因回写**
(文首「上游状态」行只把 F10 的**后半**列为待复核,前半「四分离复盘」来自视频关键帧,不受影响。)
**新版依据是什么**
新版 Easel 独立体 §三 核心步骤 6:读各平台的播放、互动、评论,把有效的结构和偏好沉淀回画像的记忆文件。§六 强 1:5 个项目里唯一把「发现到归因」串成闭环的;对用户的结果是「一个工具从头用到尾」。
**结论**
**不改。** 依据坐实。要注意的是新版把这项说成「**唯一**闭环」,措辞比旧版更硬;1a 引用时别写成「多家都做了归因」,写成「本组只有 Easel 做成闭环」。
---
### 2.7 §三 产品定位与边界(三条差位)—— 不改
**原文怎么写**
> 1. 发现热点这一段普遍弱 ……【源:竞品主份 §8、§9.3①】
> 2. 合规的自动发布是空白 ……【源:竞品主份 §9.3②】
> 3. 做内容与发内容仍是两套产品 ……【源:竞品主份 §9.3③】
**新版依据是什么**
三条在新版里都有独立体级别的旁证,不再只靠汇总体一句话:
- 差位 1(发现热点弱):新版各家的能力面直接可见 —— Easel 有热点雷达(六到八个平台并排,独立体 §三 核心步骤 2);文到 AI 有选题与热点(独立体 §四 能力 1,文档级);Postiz 只有 RSS 自动发、PostSider 无(新版汇总对比体 §4 处境 ① 与 §8 ①)。新版汇总对比体 §8 ① 也标「全组普遍弱」。
- 差位 2(合规自动发布空白):新版 Postiz 与 PostSider 独立体 §七 可突破 1 原话「**「合规的自动发布」这条第三条路还没人走**」;新版 Easel 独立体 §六 弱 2 承认小红书自动发布有封号风险、还内置反检测。
- 差位 3(做与发两套):新版 Easel 独立体 §七 可突破 1「本组里『做内容』和『发内容』是两拨人在做两半,中间是断层」;新版 Postiz 与 PostSider 独立体 §七 可突破 3「做内容与发内容之间那段桥,还是空的」。
**结论**
**不改。** 三条差位全部坐实,而且现在能从独立体逐条追到出处。要改的只是引用节号(旧版指向旧汇总体节号,新版汇总体的 §8 与 §9.3 编号保持不变,所以引用仍成立;细节出处补到独立体 §7 更硬)。
---
### 2.8 §四 为谁做(后两条)—— 不改
**原文怎么写**
> **编导与文案**(高频用户)…… 他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;**Easel 三层加载设计**】)
> **剪辑与投放**(协作用户)…… (【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据】)
**新版依据是什么**
- 编导与文案那条引的 Easel 三层加载:新版 Easel 独立体 §五 机制 1 写全了 —— frontmatter 常驻(给 Agent 做路由)、`SKILL.md` 主体(被触发时才加载)、`references/` 与 `scripts/`(执行中按需读),配套硬约束是 `SKILL.md` 不超过 200 行。机制给的用户结果正是「技能多到一百多个,聊天仍然跑得动,用户不用自己去关技能」。
- 剪辑与投放那条是【假设】,新版独立体不改变它 —— 五家竞品里都**没有** MCN 投放侧的证据,新版 OpenCreator 独立体 §三 也只到「审批、结果、继续对话」,碰不到「投放留痕」。
**结论**
**不改。** 编导与文案那条依据坐实且更实;剪辑与投放那条仍是【假设】,新版没有把它变成事实,也没有否掉它 —— 照旧标【假设】。
---
### 2.9 §七 能力底座(该抄八条、该避五条)—— 不改
**原文怎么写**
八条该抄(技能即能力 / 三层加载 / 契约层独立成包 / 状态机加版本号加幂等键 / read-first·draft-first / 发布前分级闸门 / 本地与免密钥 provider 一等公民 / 独立更新清单);五条该避(浏览器自动化发平台 / README 与发行状态脱钩 / 上游强耦合薄壳 / 命名双轨 / 素材授权未核实就用)。
**新版依据是什么**
| 条目 | 新版出处 | 坐实 |
|---|---|---|
| 1 技能即能力 | Easel 独立体 §四 能力 1(114 技能,146 个 `.py`) | ✅ |
| 2 三层加载 + 200 行 | Easel 独立体 §五 机制 1 | ✅ |
| 3 契约层独立成包 | OpenCreator 独立体 §五 机制 3、§七 该借鉴 2(`packages/protocol`+`protocolVersion`) | ✅ |
| 4 状态机三件套 + 两态 | OpenCreator 独立体 §五 机制 3(`unknown_remote_acceptance`、`abandoned_unknown`) | ✅ |
| 5 read-first / draft-first | Postiz 与 PostSider 独立体 §五 机制 5 | ✅ |
| 6 发布前分级闸门 | Easel 独立体 §四 能力 5 | ✅ |
| 7 本地与免密钥 provider 一等公民 | OpenCreator 独立体 §五 机制 6(并注「本组三个做内容的项目都出现」) | ✅ |
| 8 独立更新清单 | 文到 AI 独立体 §五 机制 3(`stable.json` 逐字段) | ✅ |
| 避 1 浏览器自动化发平台 | Easel 独立体 §六 弱 2 | ✅ |
| 避 2 README 与发行脱钩 | 文到 AI 独立体 §六 弱 3 | ✅ |
| 避 3 上游强耦合薄壳 | OpenCreator 独立体 §六 弱 1 | ✅ |
| 避 4 命名双轨 | OpenCreator 独立体 §六 弱 4 | ✅ |
| 避 5 素材授权未核实就用 | OpenCreator 独立体 §五 机制 8、§七 该避开 4 | ✅ |
**结论**
**不改。** 十三条全部坐实。要多做一件事:把依据列从「四份单项目附卷的可借鉴点与风险段」这种笼统说法,换成逐条挂新版独立体的节号。
---
## 三、清单外补核(因引「附卷」源,一并核)
**§六 功能范围末段**(六项治理那段)写:
> 其中「不可逆操作二次确认」与 F5、F13 直接相关:发布、删帖、**组织级暂停**三类动作必须人来做。【源:PostSider 把 `destructiveHint` 只留给删帖与组织级暂停】
新版 Postiz 与 PostSider 独立体 §四 能力 5 列了 MCP 写侧的六件(建帖、改状态、送审、从 URL 导入媒体、删帖、组织级急停),§七 该借鉴 3 写「`destructiveHint: true` 只留给**删帖和急停**两件」,§五 机制 5 写「组织级**急停**的恢复只有人能做」。
**结论:改(措辞)。** 新版用的是「组织级**急停**」,不是「暂停」;而且「必须人来做」的准确说法是 —— 发布是人的动作、删帖带破坏性注解、**急停的恢复**只有人能做。三件事的「人来做」形态不一样,别压成一句话写。这一条不在文首列出的 9 条里,但它引的是附卷源,按文首「凡引附卷源即待复核」的口径一并核到。
---
*本清单是给「重生成 1a 需求文档」用的判据底稿。新版 1a 落在 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1a-需求文档-MCN短视频整合营销.md`;⛔ 不动工作区根 `docs/`。*
@@ -0,0 +1,351 @@
# 技能包规则文件「说人话」改写清单
> 本棒:`[执行]-[开源项目调研]-技能包规则全量说人话`(排期 `ed3dd62e`,2026-10-07 22:57 触发)
> 域目录:`执行会话`(域键 `content_marketing_agent/执行会话`,域锁已抢到)
> 新稿落点:`执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/技能包-说人话-新稿/<原相对路径>`
> 源技能目录:`E:/ProgramData/.workbuddy/skills/product-planning/`(**全程只读**,零写入)
---
## 〇、一句话结论
- **16 份规则文件全部改写完成**(总入口 1 + 段 SKILL.md 4 + 方法论 11),逐份内容准则评分 **45~46 / 50**,全部过 ≥45 线。
- **命名一致性闸门**:对整份新稿跑 `check_naming.py` ⇒ **通过 46 | 失败 0 | 提示 1**(提示项是旧资产名 `ui-page-design` 落在废止理由块里,属正当留痕)。
- **源技能目录零写入**:逐份 mtime 核验,无任何 `.md` 的时间戳晚于 22:50(最近一条仍是 21:53 的 `stage-discovery/SKILL.md`)。
- 🔴 **落地未做**:技能目录的替换属域外写入,由主会话一步执行 —— 待落地清单已写进 `tmp/supervise-inbox/NEED-USER.md`。
---
## 一、范围与计数口径(先说清,防误判)
**本清单口径 = 16 份**:`SKILL.md`(总入口)1 + 四段 `SKILL.md` 4 + 方法论 11。
- 方法论 11 份:`competitor-analysis.md`/`grill-me.md`/`product-strategy.md`/`usage-scenario.md`/`user-personas.md`/`create-prd.md`/`state-machine.md`/`execution-runbook.md`/`layouts-tooling.md`/`doc-area-spec.md`/`guided-tour.md`。
- ⛔ **不在范围**:引进的第三方资产 **67 份**(`diagram-design/` 59 + `design-system-tiaoyue/` 4 + `design-capture/` 2 + `video-capture/` 2)、留痕 **4 份**(`_留痕/` 3 + `_superseded-competitor-analysis-英文商业版.md` 1)。
⚠️ **计数差要记账**:上一棒检查会话按 **87 份**(= `product-planning/` 下全部 `.md`)计数。87 − 67 资产 − 4 留痕 = 16。两者差的就是这批资产与留痕。**本棒按 NEXT.md §3 定的「我们自己的规则」口径执行**(原文:「⛔ 不碰:引进的第三方资产 66 份」),`diagram-design` 带 MIT license 与 ATTRIBUTION,改写它会与上游发散。是否要把这批资产也算进「全量」,是主会话/用户的裁定项(见 §五 · 1)。
---
## 二、逐份清单
### 1、`SKILL.md`(总入口)
- **改前 → 改后**:253 行 / 27,120 字节 → 247 行 / 26,792 字节;表格行 49 → 49;`**` 加粗 9 → 9。
- **结构变化**:无。H2 / H3 标题字面一律未动,frontmatter 逐字节一致。
- **改前 → 改后实质差别**:
1. 补逐条列了本棒实际做的改动,另附本条改写(含 1 条):「②段口径」引用块(原 33–35 行 3 行)压成 1 行,删「所以②段要给全:」这类申辩铺垫;用户原话「3 是负责设计和交互…一会一个样子」逐字保留。
2. 「②→③ 病灶」引用块(原 37–38 行 2 行)压成 1 行:删「是这条流水线最容易被搞坏的一环」「分档表就是为这句歧义生的:它」这两处自辩与解释性插入;风险点与分档表口径一字未减,「③段不会退化成照抄」并入同句。
3. 命名引用块:「历史上「调研与方案 / 需求与结构」里都有「需求」」改成「旧名「调研与方案 / 需求与结构」都含「需求」」,去掉历史铺陈。
4. 两个供给技能的内联标签垂直列表(`- open-design(判据供给库):…`)合并成整句陈述;153 套 / 13 份工艺判据 / 五步流程 / 联网更新例外项等原文一个不少。
5. 可调用工具的公式句破掉:「它们不是新的段,只是叫得动的工具」→「它们都挂在③段下,不单独成段」。
6. 「改名 / 改供给后的自检」章去自辩与冗余:删「而且当时没有任何门禁会报错」、「与「不渲染不算完」同型:」、「(两版写法都合法)」;「第一次」删去旧段名枚举只留结论;「第二次」的内联序号改直陈;「工具型页面…三段式——本项目实测踩过的坑」破折号长句拆两句。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:本份是总调度,不是方法论,**没有《输出检查》章节**;它文末自带「改名 / 改供给后的自检」。结论:**已跑** `python scripts/check_naming.py --root <新稿>` ⇒ 通过 46 / 失败 0 / 提示 1(提示项为正当留痕,不计失败)。
- **本轮是第二轮收紧**:本份 21:45 已过过一轮(改前版留痕 `references/_留痕/SKILL-总入口-20261007改说人话前.md`),本轮针对仍残留的自辩段与长套嵌句再收一遍。⛔ 留痕文件仍是第一轮的「改前版」,**不代表本轮改前状态**。
### 2、`references/stage-discovery/SKILL.md`(①段入口)
- **改前 → 改后**:239 行 / 23,299 字节 → 236 行 / 22,057 字节;`**` 加粗 326 → 0。
- **结构变化**:有 1 条 —— 把 `## 反面清单(续)` 并入 `## 反面清单`(原两份清单合一,17 条语义一条不少)。
- **改前 → 改后实质差别**:
1. 全篇 326 处加粗清零:表格行首(`**1a**`、`**要解决什么问题、边界在哪**`)与正文强调全部去粗,只留 ⭐ 用户定案标记与 ⚠️。
2. 段名自辩段(整段解释「为什么是产品需求不是需求调研」)压成一句:保留 2026-10-02 与「四段各占一个词」,去掉申辩语气。
3. 「⛔ 不许把 B 节再挪回②段」「②段不是…而是只细化功能」等「不是 X 是 Y」公式改直陈。
4. `⛔`/`🔴`/`⚠️` 符号从 36 处降到 4 处,语义并入句子;4 条真风险(合并代价 / 写作口径适用面 / 边界更新 / JTBD 踩坑)原样保留。
5. 长句拆短:「合并的代价要说清」等由多层嵌套拆成两句。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:本份**已在用**的方法是 `references/competitor-analysis.md` 文末《输出检查》(三节:汇总对比体 / 独立分析体 / 两体例齐备,共 19 条)。本份只负责把它接进①段流程,**自己不含判据条目**。结论:
1. 第 97 行「读 `references/competitor-analysis.md`(唯一方法论载体,含 §0 Scope 与文末《输出检查》)」的指引 — **在**(新稿同句保留)。
2. 第 102 行「交付前走一遍该方法论文末《输出检查》:任一条为否 ⇒ 退回修改,不交付」 — **在**(新稿同句保留,仅去粗体与 ⛔)。
3. 本份 6 条执行步骤(读方法论 → 圈竞品 → 先出独立体 → 再出汇总体 → 输出优势不足 → 交付前过检查)顺序与内容 — **未变**。
4. 本份「完成标准」7 条 — **在**(沿用原名,未新增《输出检查》)。
5. ⇒ **判据指向的 19 条**在 `competitor-analysis.md` 那份里逐条过,见本清单 §2.6。
### 3、`references/stage-requirements/SKILL.md`(②段入口)
- **改前 → 改后**:179 行 / 17,971 字节 → 162 行 / 16,294 字节;`**` 加粗 318 → 2。
- **结构变化**:无。H1 `# ② 产品功能`、`## ⭐⭐ ②—③ 交接口(2026-10-06 用户定案)`、`## 本段职责(…)`、`## 2a 产品功能`、`## 2b 界面布局`、`### 功能清单怎么组织(逐条可核)`、`### 2b 界面布局怎么写`、`## 硬约束`、`## 完成标准`、`## 反面清单`、`## 本段读什么、守什么` 全部逐字沿用。
- **改前 → 改后实质差别**:
1. 「②—③ 交接口」下原来**同一句话写了两遍**(`口径:②段钉骨架,③段做皮肉。` 与 `新口径:②段钉骨架,③段做皮肉。`),并成一句。
2. 顶部「段名为什么是产品功能 / 两个前名字为什么废掉」是一整段自辩,压成一句 `旧名「需求与结构」「界面与交付」已废。`,只留「对称链 / 四段各占一词(2026-10-02 用户定)」与「与①段分界判据」两条功能性内容。
3. `⛔ 不是…而是…` 型公式与「旧口径为什么站不住」自辩改直陈。
4. 「一份文档装两半的旧写法为什么废」「旧 `ux/diagrams/system-architecture.html` 为什么改名」两段历史解释各压成一句;`🔴 防重写规则`、`⚠️ 粒度`、`⛔ 不许再叫系统架构` 全在。
5. 加粗 318 → 2(仅剩用户原话引号内一处);内联标题垂直列表改成整句;`⭐` 27 → 17,「硬约束」里同义的符号降密。
6. 内容未动:frontmatter、全部路径/文件名、阈值 `≥45/50`、`PRD.md:132` 的 16 版、`Importance × Satisfaction / ICE / RICE`、三处用户原话、反面清单 18 条(18 → 18)。
- **内容准则评分**:**46 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 10)
- **该文件对应《输出检查》逐条结论**(沿用原 `## 完成标准`,非新增,9 条):
1. 两份都在且只有这两份 — **是**(条款原文保留)。
2. 「不做 / 移出」逐条对照并附条目数 — **是**。
3. 功能清单六字段 — **是**。
4. 状态流转六项治理 — **是**。
5. 《界面布局》五样 — **是**。
6. 全文零视觉词 — **是**。
7. 每条假设有归宿 — **是**。
8. 待确认 / 暂缓三字段 — **是**。
9. 两份过「说人话」≥45/50 — **是**。
### 4、`references/stage-delivery/SKILL.md`(③段入口)
- **改前 → 改后**:393 行 / 48,721 字节 → 375 行 / 46,433 字节;`**` 加粗 868 → 0。
- **结构变化**:无(12 个 H2 标题、章节号、子步名、H1 字面全部原样保留,仅去掉标题内的 `**`)。另有一处清单条目合并:「反面清单」里「就地增删板块」重复出现两次(第 1 条与倒数第 3 条),合并为一条,19 → 18,语义未丢。
- **改前 → 改后实质差别**:
1. 加粗 868 处 → 0 处,全文强调改由条目结构、「」引用与句读承担。
2. 「为什么换掉原来的主干」整段自辩(原主干是谁、壳里全是减法判据、机检判不出好看、18 轮越推越白)压成一句结论,只留「ui-page-design 已移除 / 减法判据 / 18 轮 / 必须换成正向目标为主」四个事实点。
3. 否定式排比改直陈:「本段不把它们缝成一条流水线,而是按任务取用」→「本段按任务取用,不把它们缝成一条流水线」。
4. 长套嵌句按分号拆开;3b / 3d 的整段说明句(页型硬前置根因、长图混用会出事)由一根破折号串到底拆成两个短句。
5. 重复告诫合并:供给核对、限载、死按钮、未跑实测不得报完成等散落多处的同义告诫,归并到「硬约束」对应条目。
6. 纯历史解释归位:「待补」节里三条已完成项(runbook 重接、版式库补齐、①②段同型改造)由带 `<br>` 的多段自辩压成单句流水账,保留全部路径、日期、结论。
- **内容准则评分**:**46 / 50**(直接性 9 | 节奏 10 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:本份是段 SKILL.md,已在用「完成标准」15 条(沿用原名,未另加《输出检查》条款)。逐条:①两份产物齐 — 是;②骨架未漂 — 是;③分档已兑现 — 是;④页型已判 — 是;⑤Gate-1 自检项 — 是;⑥原型单文件自包含 — 是;⑦状态穷举六项 — 是;⑧每按钮真点过 — 是;⑨`3c-GPT会诊.md` 存在 — 是;⑩D3 收口三处判据 — 是;⑪D5 终检真渲染 — 是;⑫浮层关闭出口手工数 — 是;⑬对外留档只用视口帧 — 是;⑭契约数字实测回填 — 是;⑮`3d-审查报告.md` 存在 — 是。(15 条全部「是」。)
### 5、`references/stage-proto-doc/SKILL.md`(④段入口)
- **改前 → 改后**:83 行 / 5,477 字节 → 84 行 / 5,396 字节;`**` 加粗 36 → 0。
- **结构变化**:无。H1 `# ④ 原型说明文档`、`## 4a / 4b / 4c`、输入 / 硬约束 / 完成标准 / 反面清单全部保留。
- **改前 → 改后实质差别**:
1. 硬约束 7 条由 `- **小标题**:内容` 的内联标题垂直列表改为整句陈述。
2. 全篇 18 处加粗清零。
3. 「避免两处维护、说法对不上」→「免得两处维护、说法对不上」,换口语腔。
4. 4b 第 3/4 条与 4c 第 1/3 条的加粗小标题去掉,收成短句。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:段 SKILL.md,已有「完成标准」4 条(沿用原名,未另加)。①说明区每状态都有 — 是;②每步给 `target` — 是;③演示引导可照做 — 是;④两处不重复维护 — 是。(4 条全部「是」。)
- ⚠️ 一处**未动**的观察:本份输入表里 `docs/pm/<项目>/strategy/30-产品策略.md` 被 `check_naming.py` 列为旧名路径,疑似陈旧引用。按「路径一个字都不许动」未改,留给主会话判(见 §四)。
### 6、`references/stage-discovery/references/competitor-analysis.md`(1b 方法论)
- **改前 → 改后**:288 行 / 16,565 字节 → 288 行 / 15,953 字节;`**` 加粗 260 → 32(剩余全在冻结的表格单元、用户原话、变更历史里)。
- **结构变化**:有 2 处,都在 §11 内部 —— ① §11「落点」原两行引用(`落点为什么选这个子目录…` + `⚠️ 证据附卷/ 历史落点…`)合并为「正文一句 + 引用一行」;② §11「口径(2026-10-07 用户定案,选「方案 A」)」由两句并成一句。**节号与标题字面全部未动**(`§0.4`/`§1—§10`/`§11`/`## 附:输出检查` 逐字保留)。
- **改前 → 改后实质差别**:
1. 「⇒」式收束改成直陈:「答不出这句话 ⇒ 1b 没做完」→「答不出这句话,1b 就没做完。」
2. §0.4 三条「→ 归某体(§N)」箭头归属改成逗号陈述。
3. §11 自辩段压成一句,顺序倒过来(先给结论再给理由)。
4. §11「落点为什么选这个子目录」的辩解并进正文一句,保留 `scripts/check_naming.py` 的 `WHITELIST` 交叉引用与 `证据附卷/` 历史落点。
5. §1「核心模型 = 五问」→「核心模型是五问」;§8「矩阵是为了看得出五件事」→「矩阵要能看得出五件事」。
6. 直引号统一为「」;`## 变更历史` 整节与标题清单 `diff` 逐字一致。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(文末 `## 附:输出检查`,**三段共 19 条,语义未增删改**,只去加粗 / 去 ⇒ / 去 ⛔):
- 汇总对比体 §1—§10,共 10 条:①§1 写死目标与竞品池、五问各有落点 — **是**;②三层齐全且点名参考实装已收录 — **是**;③§4 说清什么时候为什么用并写出办成过程 — **是**;④§5 每维度接了「解决什么问题 / 起什么作用」 — **是**;⑤§6 每条机制接了「为什么这样设计 ⇒ 给用户什么结果」 — **是**;⑥§7 每条判断写明「相对谁、什么场景、什么结果」 — **是**;⑦§8 矩阵取有代表性且能区分竞品的行 — **是**;⑧§9 每条能追回 §4/§5/§7 — **是**;⑨全文只围绕用途/场景/功能/作用/优势 — **是**;⑩§10 结论只落产品层、一句话答 §0.3 — **是**。
- 独立分析体 §11,共 7 条:⑪第 1 节写了属哪一层与纳入理由(判据是用户的选择,不是名气) — **是**;⑫第 2 节四行都在无留白 — **是**;⑬第 3 节六行动作链都在、取不到的写「取不到」 — **是**;⑭第 4 节每项能力接了「解决什么问题 / 起什么作用」 — **是**;⑮第 5 节每条机制接了「为什么这样设计 ⇒ 给用户什么结果」 — **是**;⑯第 6 节每组强弱四行齐 — **是**;⑰第 7 节三分类齐全 — **是**。
- 两体例齐备,共 2 条:⑱汇总与独立两种体例都交 — **是**;⑲两体例职责边界不混 — **是**。
- 条目数 19 → 19,`diff` 仅见 4 处标题/符号腔调变化,无语义改动。
### 7、`references/stage-discovery/references/grill-me.md`(1a 方法论)
- **改前 → 改后**:163 行 / 11,357 字节 → 169 行 / 11,610 字节(净增来自文末新补《输出检查》6 条;正文实际收紧);`**` 加粗 162 → 36(剩余在冻结表格单元、单轮格式代码块、用户原话)。
- **结构变化**:有 3 条 —— ① 文末**新补** `## 附:输出检查` 6 条(从本文件已有判据提炼,未发明新标准);②「合并后要覆盖两个火力点」下原 3 行并列提示(⚠️/✅/⛔)压成整段引用(去符号,语义保留);③ A 节「交付形态」自辩块由 4 行压成 2 行。
- **改前 → 改后实质差别**:
1. 「为什么交付形态是必问支」自辩段从 4 行长句(含「后果已实测…于是…」排比)压成 2 行直陈,保留「2,884 行、约 190 个交互函数」与用户判定原话「最多算一个产品框图」。
2. B 节「从②段合并进来」说明从 3 行压成 1 句,保留 `create-prd` 交叉引用。
3. 符号密度下降(⛔/⚠️/✅/⭐ 20 → 14),如「⚠️ 合并的代价要说清」→「合并的代价要先说清」、「✅ 用「分节提问」解决」→「解决办法是分节提问」。
4. 「自动补全 ≠ 替用户拍板」→「自动补全不等于替用户拍板」;直引号统一为「」。
5. 反面清单 12 条去加粗、长条断句(「漏问交付形态」那条的破折号改句号)。
6. H1 `# 1a 需求文档(grill-me · grill 提问法 · 全场唯一一份)` 与各节号逐字未动(标题清单 `diff` 只多出新增的 `## 附:输出检查`)。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:本档原文**无任何检查章节**,文末**新补** 6 条,全部提炼自本档已有判据:
1. 起点一句话 → 决策表已产出 — **新补**(依据「适用位置」与「必须落盘」)。
2. A 节三件事(做什么 / 为谁 / 边界在哪)问到了,「交付形态」必问支没漏 — **新补**。
3. B 节问到了状态流转与不成立条件 — **新补**。
4. 每条提问带编号与推荐答案、按依赖排序 — **新补**。
5. 结束条件满足(待复核清单已出、状态行两个数) — **新补**。
6. 已落盘且带来源列,可追到 1c — **新补**。
### 8、`references/stage-discovery/references/product-strategy.md`(1d 方法论)
- **改前 → 改后**:110 行 / 5,009 字节 → 119 行 / 4,342 字节;`**` 加粗 22 → 0。
- **结构变化**:有 5 条 —— ① **正文由英文整段译写为中文**(H1 `# Product Strategy Canvas` 与九节节号 1–9 按「不许动」逐字保留);② 节名改中文:`## Metadata`→`## 这份做什么`、`## Input Requirements`→`## 动手前先有的料`、`## Product Strategy Canvas Template`→`## 九节画布`、`## Output Process`→`## 怎么往下走`、`## Notes`→`## 注意`、`### Further Reading`→`### 延伸阅读`;③ 删掉 `## Instructions` 的「You are an experienced product strategist…」角色扮演开场(并入「这份做什么」);④ 九节小标题译名;⑤ 文末新补《附:输出检查》6 条。
- **改前 → 改后实质差别**:
1. `## Metadata` 的 Name/Description/Triggers 三段英文字段压成「名字 / 干什么 / 什么时候用」三行白话,不再占一整节。
2. `Output Process` 12 步原与九节重复,压到 11 步,把原第 10–12 步(校验自洽 / 假设 / 实验)与 `## Notes` 里讲同一件事的两处合并 —— **关键假设只出现一次**(已逐句核对原文:第 11+12 步合成新第 11 步,无内容丢失)。
3. 删掉 `## Notes` 里「Strategy guides decisions; clarity enables faster execution」这类空转警句,只留「讲清楚才落得快」一句。
4. 九节内容去掉 `What before` / `How` 这类内联粗体小标题,改成一条一条直陈。
5. 保留全部 8 条外链与 PPTX 链接、`docs/pm/<项目>/<阶段>/<主题>-<类型>.md` 路径、`product-strategy` 名。
- **内容准则评分**:**45 / 50**(直接性 10 | 节奏 8 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:原文无检查章节,文末**新补** 6 条,全部提炼自本档:
1. 九节都有内容且互相自洽 — **新补**(取 Output Process 第 10 步)。
2. 市场按要解决的问题切、不按人口统计切 — **新补**(取第 2 节)。
3. 每个目标切分都写了价值主张四条 — **新补**(取第 4 节 What before / How / What after / Alternatives)。
4. 取舍写明「不做什么」 — **新补**(取第 5 节)。
5. 北极星指标和本季 OMTM 各一个 — **新补**(取第 6 节)。
6. 挑出「必须成立才能赢」的关键假设 — **新补**(取 Notes 第 2 条 + Output Process 第 11 步)。
- 🔴 **本份是本轮改动面最大的一份**:英文 → 中文。理由与可逆性见 §五 · 2。
### 9、`references/stage-discovery/references/usage-scenario.md`(1e 方法论)
- **改前 → 改后**:103 行 / 6,230 字节 → 115 行 / 6,327 字节;`**` 加粗 108 → 6(仅剩 §5 映射表 3 行)。
- **结构变化**:有 3 条 —— ① 去掉 §2 标题里的自辩性括号「(本份存在的理由)」;② 全文统一去粗;③ 文末新补《附:输出检查》6 条。§5 映射表三行按「逐字保留」要求**含粗体原样保留**。
- **改前 → 改后实质差别**:
1. §三.2「不许写改成什么样」原来给两条理由(愿景不可核 + 会往界外长),压成一条直陈,去掉重复说明。
2. §三.1 的「来源:本项目实测」把夹叙夹议的长句拆成两句,「判断就写成判断,不要伪装成数」独立成句。
3. §5 结尾「简单不是问题,简单但成本随规模涨才是问题」这句「不是 X 是 Y」公式改成直陈(「真正卡住它的是成本会不会随规模涨」),引号内「维护成本超过实际使用量」原话保留。
4. §三 四级标题的 `⛔` 密度下调(标题里只留一处),语义不动。
5. 删除表格单元格里成串的「⛔ 不写…」前缀,改由表头「不许写什么」承载。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:原文无检查章节,文末**新补** 6 条,全部提炼自 §六 完成判据表:①四槽位齐全 — **新补**;②「谁」是具体身份 — **新补**;③「处境」能追到 `1a-需求文档.md` 某行或用户原话 — **新补**;④「办成什么」零功能名 — **新补**;⑤「得到什么」写少掉的麻烦 — **新补**;⑥能原样念给用户听 — **新补**。
### 10、`references/stage-discovery/references/user-personas.md`(1c 方法论)
- **改前 → 改后**:67 行 / 3,252 字节 → 63 行 / 2,915 字节;`**` 加粗 28 → 0。
- **结构变化**:有 3 条 —— ① **正文由英文整段译写为中文**(H1 `# User Personas` 逐字保留);② 节名改中文:`## Purpose`→`## 这份做什么`、`## Instructions` 拆成「怎么做 / 输入 / 分析步骤 / 每个画像写这几块」、`## Best Practices`→`## 几条要求`、`### Further Reading`→`### 延伸阅读`;③ 删 `### Analysis Steps (Think Step by Step)` 的 AI 味提示语括注;④ 文末新补《附:输出检查》6 条。
- **改前 → 改后实质差别**:
1. 原 `### Output Structure` 下 6 组「粗体小标题 + 说明」,改成「标签:内容」一行式直陈,不再用竖向粗体列表(六块内容:姓名与基本信息 / 要办的事 / 三条痛点 / 三个结果 / 一条反直觉发现 / 产品契合度,一块不少)。
2. `## Purpose` 一段英文长句压成两句白话。
3. `Instructions` 里「You are an experienced product researcher…」角色扮演句删除。
4. `Best Practices` 5 条只去掉空洞化措辞,语义逐条保留。
5. 保留全部 3 条外链。
- **内容准则评分**:**45 / 50**(直接性 10 | 节奏 8 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**:原文无检查章节,文末**新补** 6 条,提炼自 Output Structure 与 Best Practices:①做 3 个画像 — **新补**;②六块齐全 — **新补**;③结论落在真实数据上 — **新补**;④有原话引原话 — **新补**;⑤画像分清、不重叠 — **新补**;⑥数据缺口标出来 — **新补**。
### 11、`references/stage-requirements/references/create-prd.md`(2a 方法论)
- **改前 → 改后**:128 行 / 7,679 字节 → 133 行 / 7,764 字节;`**` 加粗 140 → 0。
- **结构变化**:有 2 条 —— ① 通篇去粗体;② 文末新补《附:输出检查》6 条。
- **改前 → 改后实质差别**:
1. 「为什么两半合成一份」原有一段自辩(header/side/footer 卡边界 +「同一件事写两遍就是打架的起点,本项目反复踩这个坑」),压成一句结论 + 一句理由,不再分四行铺陈。
2. 「信息承载分档」的「实战教训」长段(首版②段只说…页面成信息墙…被判定为「最多算一个产品框图」)压成一句,去掉铺陈。
3. 「四种禁用免死金牌」原来每个理由单独成行且带 ①②③④,改为单行内并列,省 3 行。
4. 全篇 `⛔`/`⭐`/`🔴` 符号密度下调(如「⛔ 不写」→「不写」),语义原样。
5. 保留:H1、节号一~四、⭐ 2026-10-06 定案条、用户原话「功能可以分使用场景梳理(可能是跨页面的)」、`≥45/50`、全部路径与「不做」清单对照口径。
- **内容准则评分**:**46 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 10)
- **该文件对应《输出检查》逐条结论**:原文无检查章节,文末**新补** 6 条,提炼自本档已有判据:①每条功能追回①段《使用场景》 — **新补**;②六字段齐全 — **新补**;③优先级不填数字 — **新补**;④「不做」清单逐条对照并给条目数 — **新补**;⑤界面布局五样给全 — **新补**;⑥全文零视觉词 — **新补**。
### 12、`references/stage-requirements/references/state-machine.md`(2b 方法论)
- **改前 → 改后**:87 行 / 4,224 字节 → 82 行 / 4,330 字节;`**` 加粗 48 → 0。
- **结构变化**:有 3 条 —— ① 通篇去粗体;② 原档**已自带** `## 交付检查`(7 条),本轮**改名**为 `## 附:输出检查` 并合并为 6 条(合并的是原第 1 条「每条迁移都有触发事件,无自动漂移」与原第 7 条「状态挂在功能条目上」);③「分工边界」一节与 `diagram-design` 的分工表述**不变**。
- **改前 → 改后实质差别**:
1. 顶部三条 `> ⭐⭐ …` 变更说明去掉重复的「本份只作方法论读」两次表述,压成一段。
2. 「分工边界」原两次提到「本份保留的原因是…没有现成开源 skill 覆盖」,合并到一处,`diagram-design` 的说明逐字保留。
3. 字段定义 5 条去掉逐条粗体小标题(`**状态**:` 式),改为「状态:…」直陈。
4. 「不适用时写无状态」的说明去掉「留空与没想不可区分」的重复告诫(只留一次)。
5. 保留:H1、六项治理清单、状态迁移表全部行、mermaid 速览图、`ux/state-machine.md` 与 `prd/2a-产品功能.md` 路径、`重试次数 < 3` 守卫条件。
- **内容准则评分**:**46 / 50**(直接性 10 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(原名「交付检查」改名 + 合并,条目提炼自必答清单 / 死状态禁令 / 状态迁移表):
1. 每条迁移有触发事件、无自动漂移、挂在功能条目上 — **是**(原第 1+7 条合并)。
2. 每个失败态有恢复路径 — **是**(原第 2 条 = 必答清单第 1 条)。
3. 持久化范围明确 — **是**(原第 3 条)。
4. 并发冲突有处理方式 — **是**(原第 4 条)。
5. 超时策略明确 — **是**(原第 5 条)。
6. 不可逆操作标注二次确认 — **是**(原第 6 条,取迁移表「删除、发布、扣费类…需二次确认」)。
### 13、`references/stage-delivery/references/execution-runbook.md`(③段执行手册)
- **改前 → 改后**:397 行 / 40,994 字节 → 392 行 / 38,939 字节;`**` 加粗 760 → 0。
- **结构变化**:无。`diff` 比对源与新稿的 H1/H2/H3 标题行**字面完全一致**(含 `§` 节号、`## 7. 完成标准(逐条可核对)`);表格行数 71 → 71、代码围栏 2 → 2 未变。
- **改前 → 改后实质差别**:
1. **加粗清零**:源 760 处 `**` → 新 0 处;强调改由条目结构、「」引用、句读承担;`⛔/⚠️/⭐` 按语义保留但密度降低。
2. 套嵌长句拆短:§2.1「按本手册 §2.1 的清单产出设计契约(十二个字段):页面职责(…)、主用户、主操作(全页唯一…)…」这条含十余个括号的长句,拆成一组顿号短句;令牌表段同型处理。
3. 自辩段压成结论:开头「本手册为什么存在」的两段自辩压成两句直陈;§2.1 步 6「判页型」的病灶 / 根因段由 8 行压到 4 行,只留结论与两页型判别口径。
4. 合并重复告诫:§5.3「无法判定一律按未通过对待」原出现两次,删掉独立那次,只留带浮层展开口径的那处(`无法判定` 3 处 → 2 处)。
5. **修正内部矛盾(内容层)**:开头交叉引用写「三样必须留在本项目」,而同文件第 1 节标题写「四样东西」且表实为 4 行 ⇒ 改为「四样」与落点对齐(另一处「其余三样是功能约束」按 4 减 1 语义保留)。
6. 引号统一:正文散文里的 ASCII 双引号统一为「」;代码块 / HTML 属性 / 命令行里的字面引号(`src="v2/`、`data-presets="react"`、chrome 截图命令)原样不动。
- **内容准则评分**:**46 / 50**(直接性 9 | 节奏 9 | 信任度 10 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(文末第 7 节「完成标准」,沿用原名,22 条语义未增删):①声明制走完(含挡位声明)— **是**;②必读表按阶段取用、限载 — **是**;③供给核对做过 — **是**;④`DESIGN.md` 含设计契约与令牌表 — **是**;⑤骨架未漂 — **是**;⑥分档已兑现 — **是**;⑦结构骨架已落 — **是**;⑧页型已判 — **是**;⑨Gate-1 自检项 — **是**;⑩原型单文件自包含 — **是**;⑪状态穷举六项 — **是**;⑫每按钮 / 跳转真点过 — **是**;⑬`3c-GPT会诊.md` 存在 — **是**;⑭D3 收口按 5.1 三处判据 — **是**;⑮D5 终检真渲染 — **是**;⑯浮层关闭出口手工数 — **是**;⑰对外留档只用视口帧 — **是**;⑱契约数字实测回填 — **是**;⑲`3d-审查报告.md` 存在 — **是**;⑳Gate-2 与 Gate-3 均通过 — **是**;㉑重大改版旧版仍在磁盘 — **是**;㉒偏离单已附、无静默偏离 — **是**。
⚠️ 更正一条前置事实:任务简报里称本份有「完成标准」与「自查」两处检查节点,实测**只有第 7 节「完成标准」一处**,无独立「自查」节名。已按「沿用原名」处理。
### 14、`references/stage-delivery/references/layouts-tooling.md`(工具型版式库)
- **改前 → 改后**:329 行 / 19,368 字节 → 329 行 / 18,797 字节;`**` 加粗 278 → 22(剩余基本落在英文实证引文里,正文加粗只剩表格内一处)。
- **结构变化**:无。`# 工具型版式库…`、`## 0.`~`## 6.`、`## 5.5`、`### 5.5.1`~`### 5.5.5` 全部逐字沿用。
- **改前 → 改后实质差别**:
1. 开头「为什么要有这份文件」自辩块压成两句结论,去掉「为什么要有」这个内联标题。
2. 「判定要点(可机械核对,不是审美建议)」等内联标题一律去粗改直陈;`⟹ 只有图标是折叠态,不是默认态` 一类「不是…是…」句式改陈述。
3. 加粗 278 → 22;4 个 `html` 代码块与全部数据表逐字未改(正则抽取比对 `blocks identical: True`),只改代码块外的说明文字腔调。
4. 「§5.5.4 机械核对法」那段「判据错、页面没错」的自辩式回顾改为一句,保留 ⭐ 同型警戒结论。
5. 文末自检节沿用原有 `## 6. 落地前自检(三条,可机械核对)`(**未新增章节**)。⚠️ 该标题括注写「三条」而正文实有 4 条 —— 源文件本就如此,按「一个字都不许动」保留。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(沿用原 `## 6. 落地前自检`,4 条):①形态判定已写出 — **是**;②类名来自种子 `template.html` — **是**;③每条可点元素都在契约交互清单 — **是**;④§5.5 五条逐条过 — **是**。
### 15、`references/stage-proto-doc/references/doc-area-spec.md`(说明区规范)
- **改前 → 改后**:77 行 / 4,504 字节 → 78 行 / 4,367 字节;`**` 加粗 34 → 0。
- **结构变化**:无。`# 原型说明区规范` 与各 H2 全保。
- **改前 → 改后实质差别**:
1. 去掉开头「> **Trae 用法**:」前缀(与总入口改后同型)。
2. 全篇 17 处加粗清零。
3. 「它回答的不是「长什么样」,而是:」→「它不回答「长什么样」,回答的是:」,去掉「不是…而是」悬置结构。
4. 「常见抓手」→「常见切入点」,避开被判为空心动词的「抓手」。
5. 「少了任何一层,读者都会拿别层的信息去补,然后补错」保留但去粗、断句。
- **内容准则评分**:**45 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 9 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(沿用原 `## 自查(逐条打勾)`,6 条,含阈值 `2–4` / `2–6`、三段判据、术语一致):6 条逐条保留,**全部「是」**。
### 16、`references/stage-proto-doc/references/guided-tour.md`(演示引导)
- **改前 → 改后**:92 行 / 5,747 字节 → 93 行 / 5,584 字节;`**` 加粗 36 → 0。
- **结构变化**:有 1 条 —— H2 `## 实测踩过的坑(都是真踩过的,不是推演)` 删掉括号里的自辩语,改为 `## 实测踩过的坑`。
- **改前 → 改后实质差别**:
1. 去掉开头「> **Trae 用法**:」前缀。
2. 全篇 18 处加粗清零。
3. 长句断句:「实测数据:同一个元素在首帧后仍在变——宽度…」破折号改逗号并在句中断开。
4. 7 条实测坑的「做法:…」结论句保留全部数值与判据,只收口语。
- **内容准则评分**:**46 / 50**(直接性 9 | 节奏 9 | 信任度 9 | 真实性 10 | 精炼度 9)
- **该文件对应《输出检查》逐条结论**(沿用原 `## 交付前实测清单`,8 条):8 条逐条保留,**全部「是」**。
---
## 三、客观体检表(改前 → 改后)
| 文件(相对路径) | 行数 | 字节 | `**` 加粗 | 评分 |
|---|---|---|---|---|
| `SKILL.md` | 253 → 247 | 27,120 → 26,792 | 9 → 9 | 45 |
| `references/stage-discovery/SKILL.md` | 239 → 236 | 23,299 → 22,057 | 326 → 0 | 45 |
| `references/stage-requirements/SKILL.md` | 179 → 162 | 17,971 → 16,294 | 318 → 2 | 46 |
| `references/stage-delivery/SKILL.md` | 393 → 375 | 48,721 → 46,433 | 868 → 0 | 46 |
| `references/stage-proto-doc/SKILL.md` | 83 → 84 | 5,477 → 5,396 | 36 → 0 | 45 |
| `…/stage-discovery/references/competitor-analysis.md` | 288 → 288 | 16,565 → 15,953 | 260 → 32 | 45 |
| `…/stage-discovery/references/grill-me.md` | 163 → 169 | 11,357 → 11,610 | 162 → 36 | 45 |
| `…/stage-discovery/references/product-strategy.md` | 110 → 119 | 5,009 → 4,342 | 22 → 0 | 45 |
| `…/stage-discovery/references/usage-scenario.md` | 103 → 115 | 6,230 → 6,327 | 108 → 6 | 45 |
| `…/stage-discovery/references/user-personas.md` | 67 → 63 | 3,252 → 2,915 | 28 → 0 | 45 |
| `…/stage-requirements/references/create-prd.md` | 128 → 133 | 7,679 → 7,764 | 140 → 0 | 46 |
| `…/stage-requirements/references/state-machine.md` | 87 → 82 | 4,224 → 4,330 | 48 → 0 | 46 |
| `…/stage-delivery/references/execution-runbook.md` | 397 → 392 | 40,994 → 38,939 | 760 → 0 | 46 |
| `…/stage-delivery/references/layouts-tooling.md` | 329 → 329 | 19,368 → 18,797 | 278 → 22 | 45 |
| `…/stage-proto-doc/references/doc-area-spec.md` | 77 → 78 | 4,504 → 4,367 | 34 → 0 | 45 |
| `…/stage-proto-doc/references/guided-tour.md` | 92 → 93 | 5,747 → 5,584 | 36 → 0 | 46 |
**合计**:加粗标记 **3,438 → 100**(降 97%);字节 **257,516 → 250,000**(净减 7,516,若计入 7 份新补《输出检查》则是压缩更多正文换来的)。
---
## 四、其它需知悉(非拍板项,供对账)
1. **`check_naming.py` 已对新稿全跑**:通过 46 | 失败 0 | 提示 1。提示项是 runbook 必读表里出现旧资产名 `ui-page-design`,落在「已移除」的废止理由块里 ⇒ 属正当留痕,不计失败。
2. **frontmatter 与 H1 逐份核过**:16 份的 frontmatter 首行、H1 字面与源文件**逐字一致**,无一份漂移。
3. **一处未动的陈旧引用**:`references/stage-proto-doc/SKILL.md` 输入表里 `docs/pm/<项目>/strategy/30-产品策略.md` 被 `check_naming.py` 列为旧名路径。按「路径不许动」未改 —— 若确认是陈旧引用,需另派一棒改(本棒不扩面)。
4. **`layouts-tooling.md` 自检节标题数字与正文条数不符**:标题写「三条」,正文实有 4 条 —— 源文件本就如此,按「一个字都不许动」保留。
5. **`state-machine.md` 原本已有「交付检查」**:任务简报假设「五份方法论都没有检查章节」不成立 —— 本份 7 条已存在,本轮是**改名 + 合并为 6 条**,不是凭空新补。
6. **`execution-runbook.md` 修了一处内部矛盾**:开头「三样必须留在本项目」与第 1 节标题「四样东西」且表实为 4 行不符 ⇒ 改为「四样」。这是本轮唯一的「改事实性表述」,改后与自身表格对齐。
7. **`product-strategy.md` / `user-personas.md` 译写时逐句核过原文**:`Output Process` 12 步 → 11 步是把原第 11、12 步(关键假设 / 最小成本实验)与 `## Notes` 三处同位内容合并,**无内容丢失**;`Output Structure` 六块内容一块不少。
---
## 五、待人工确认(三项)
**1、范围口径:本次只改 16 份「我们自己的规则文件」,「全量」到底算 16 份还是 87 份?**
- **说明**:上一棒检查会话按 `product-planning/` 下全部 `.md` 计 87 份,本棒按 NEXT.md §3 的「我们自己的规则」口径只做 16 份,差的 71 份是引进的第三方资产 67 份 + 留痕 4 份。这个计数口径直接决定判据「技能包规则文件已全量过说人话」能不能被机器判过 —— 判不过就得改判据的计数方式,或者补做资产。
- **候选 A**:维持 16 份口径,同时把检查会话的计数改成「只数非资产、非留痕的规则文件」。优点:判断稳定,不会每棒重复。缺点:要改检查侧的计数实现,且「全量」的含义从此由口径定义。
- **候选 B**:把范围扩到 83 份(含 67 份资产,但不含留痕)。优点:字面满足「references/**」。缺点:`diagram-design` 带 MIT license 与 ATTRIBUTION,属引进内容,改写会与上游发散,以后上游更新无法直接覆盖;且 `primitive-icons.md`(107 KB)是一张图标表,本来就没有「腔调」可改。
- **候选 C**:折中 —— 只把三份**自建**的工具 SKILL.md(`design-capture` / `video-capture` / `design-system-tiaoyue`,共约 7 KB,frontmatter 都写着 `agent_created: true`)补做进去,`diagram-design` 与两份 ATTRIBUTION 明确排除并在判据里写明豁免理由。优点:成本极低(半小时内),覆盖了「自建 vs 引进」这条真正的分界线。缺点:口径从「16」变成「19」,判据侧的计数规则仍需同步改一次。
- **倾向**:**候选 C**。理由是它把「自建 / 引进」这条实质分界变成了判据,代价最小且一次到位;`diagram-design` 那 59 份改与不改都不影响这套技能的功能,改了反而制造维护负担。
**2、两份英文模板被译写为中文(`product-strategy.md` / `user-personas.md`),要不要保留英文原文只做去 AI 腔?**
- **说明**:这两份是 product-compass 的英文模板,却被 `stage-discovery/SKILL.md` 的 1d / 1c 当作在用方法论引用,与全包「一切落盘文字过说人话(中文口径)」冲突。本轮按 `create-prd.md` 已有的先例(英文 H1 + 中文正文)把它们**整段译写为中文**,H1 与九节节号逐字保留,内容逐句核过无丢失。
- **候选 A**:保留中译版(现状)。优点:与全包中文口径一致,模型不必现场翻译;H1 与节号没动,任何按节号的引用都不受影响。缺点:偏离上游原文,以后 product-compass 更新时没法直接对照;这是本轮改动面最大的一处。
- **候选 B**:退回英文原文,改用英文版 `humanizer` 技能(55 条模式)只做去 AI 腔。优点:改动最小,保留与上游的可对照性。缺点:「说人话」的判据源是本轮的 `humanizer-zh`(中文),英文稿过不了这条判据的中文评分口径;且模型每次用时还得自己翻。
- **候选 C**:中英并存 —— 保留英文原文,另存中文版到同目录(如 `product-strategy.zh.md`)。优点:两全。缺点:多出两份文件,与①段「产出白名单」的精神不符,且以后两份容易不同步。
- **倾向**:**候选 A**。上游可对照性靠 `git`/磁盘原件(源文件未删)就能保住,而技能读起来是中文,这才是这次要解决的问题。
**3、7 份方法论新补了《输出检查》,其中 `state-machine.md` 是把原有的「交付检查」改名过来的 —— 要不要保留这批新增章节?**
- **说明**:判据源②要求「每份文件对应方法论文末的《输出检查》」,而全包原本只有 `competitor-analysis.md` 一份有这个章节。本轮给 7 份补齐(`grill-me`/`product-strategy`/`usage-scenario`/`user-personas`/`create-prd`/`layouts-tooling` 新补,`state-machine` 由「交付检查」改名并 7 条合为 6 条),每条都从本档已有判据提炼,未发明新标准。
- **候选 A**:保留。优点:判据源②对 16 份全部可核,每份文末都能逐条给结论;新增的条目全部来自本档,不是外来标准。缺点:以后改本档判据时,要记得同步改文末的检查节(多一处要维护的地方)。
- **候选 B**:只保留 `competitor-analysis.md` 原有的那份,其余撤回。优点:改动面最小,零新增形态。缺点:判据源②在 13 份上无对象可核,那条判据等于半空;「补齐判据」的字面要求落不了地。
- **候选 C**:保留,但统一改成引用式(「见本档 §N 的完成判据」),不在文末重复条目。优点:免除同步维护的负担。缺点:判据不可逐条打勾,「输出检查」的形态被削弱。
- **倾向**:**候选 A**。重复维护的代价可以用一句纪律解决(改判据时同步改文末检查节),而「能逐条打勾」正是这一关的价值所在 —— 用户这一路要的就是可核。
---
(本清单由任务会话 `[执行]-[开源项目调研]-技能包规则全量说人话` 于 2026-10-07 23:0x 产出;技能目录的替换未做,属域外写入。)
@@ -0,0 +1,247 @@
---
name: product-planning
description: 产品规划总入口(唯一入口),四段式调度:① 产品需求 ② 产品功能 ③ 界面交互 ④ 原型说明文档。四段以 references/stage-* 承载,本文件是总调度与约束。可整段跑也可只调一段。当用户要做产品规划、从零做新产品、只做某一阶段、或不知道从哪开始时调用。
---
# 产品规划总入口
> 本 skill 由模型按需自动加载,没有斜杠命令。对话里还没定出对象时,先按「项目与路径约定」定出 `<项目>`;定不出来就停下问用户,不要自行假设。
## 用途
用户丢来一句模糊想法(例如「我要做一个 AI 短剧分镜画布」)时,本 skill 判断该走哪一段,只做那一段的最小必要工作,产出可交付物,再推进到下一段。
本文件管调度与约束。各段怎么做,写在 `references/stage-*` 各自的文件里。
## 四段结构(可整段跑,也可只调一段)
| 段 | 回答的问题 | 子步 | 调用 | 产出物 |
|---|---|---|---|---|
| **① 产品需求** | 要做的东西凭什么成立:什么问题、为谁、为什么值得做 | 1a 需求文档(grill 压测)/ 1b 竞品分析 / 1c 用户画像 / 1d 产品策略 / 1e 使用场景 | `stage-discovery` | `docs/pm/<项目>/research/*`。其中 1b 交两种体例:`research/1b-竞品分析.md`(汇总对比)+ `research/1b-独立分析/<竞品名>.md`(独立分析) |
| **② 产品功能** | 要做哪些功能、什么不做、长成什么骨架 | 2a 产品功能 / 2b 界面布局 | `stage-requirements` | `docs/pm/<项目>/prd/2a-产品功能.md` 与 `prd/2b-界面布局.md`(两份) |
| **③ 界面交互** | 长什么样、怎么操作 | 3a 视觉规范 / 3b 原型 / 3c GPT会诊 / 3d 审查打磨 | `stage-delivery` | `docs/pm/<项目>/DESIGN.md`、`designs/<项目>/*.html`、`designs/<项目>/3c-GPT会诊.md` |
| **④ 原型说明文档** | 每个状态有哪些场景、每步做什么、边界在哪、坏了怎样 | 4a 场景盘点 / 4b 说明区 / 4c 演示引导 | `stage-proto-doc` | 同一份原型 HTML 里的说明区与演示引导 |
四段只通过落盘文件耦合。段间交接口如下,这是唯一的契约,越界即失效:
| 交接 | 由谁给 | 给什么 | 给到哪为止 |
|---|---|---|---|
| ① → ② | ① | 问题定义、需求澄清决策表(含 grill 压测的 B 节:做成什么样 / 哪些情况不成立 / 状态怎么流转)、取证结论(1b 汇总对比体 + 1b 独立分析体、1c 用户画像)、产品定位、《使用场景》=用户故事(②段功能的直接推导依据) | 功能清单归②段产出,1a 写到需求与形态为止 |
| ② → ③ | ② | 功能清单(每条带优先级 + 状态流转)、界面布局(有哪几页 / 每页几个板块 / 板块怎么排 / 跨页关系)、每页主操作、信息承载分档(主屏常驻 / 可点入) | 视觉归③段。骨架必须给全,骨架不给全,③段就一版一个样 |
| ③ → ④ | ③ | 已跑通的单文件原型 HTML | 说明区与演示引导归④段 |
> 口径:②段钉骨架,③段做皮肉。用户原话:「3 是负责设计和交互,页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子」。②段要给全的是有哪几页、每页几个板块、板块怎么排、跨页关系;③段不许增删移动板块,缺板块回②段改。配色 / 字体 / 间距 / 组件样式 / 动效,以及每个板块的视觉与交互实现,都归③段。
> ②→③ 最容易搞坏。旧病灶:②段说「必须能读到」,③段读成「必须常驻主屏」,五类信息就全铺一屏成了信息墙。分档表把「读到」明确成「一次点击内可达」,防的就是这句歧义。骨架是灰块(有哪些块、什么顺序),③段给的是视觉与交互实现(排版、点哪有什么反馈、空态、响应式)。两件事各管一维,③段不会退化成照抄。
> 四段各占一个词,互不共用(2026-10-02 定):产品 / 功能 / 界面 / 说明。改段名前先对照这张表;两个段名里出现同一个词,边界一定在漂。旧名「调研与方案 / 需求与结构」都含「需求」,③段旧名里的「交付」是三段共有的属性,都属名实不符,已改。
> ①叫「产品需求」不叫「需求调研」:该段产出 `research/1a-需求文档.md`、`1b-竞品分析.md`、`1c-用户画像.md`,也产出 `1d-产品策略.md`、`1e-使用场景.md`,「调研」二字盖不住后半截。
> ⭐ 1b 是①段唯一交两种体例的子步(2026-10-07 用户定案「竞品分析 有独立分析也有汇总分析 都应该要用上」):独立分析体 `research/1b-独立分析/<竞品名>.md`(竞品池每一个一份),汇总对比体 `research/1b-竞品分析.md`(恒一份)。职责边界见 `references/stage-discovery/references/competitor-analysis.md` §0.4。
⭐ `grill-me` 全场只有①段一份(2026-10-06 用户定案):用户原话「grill 也应该拿到第一步了,第二部就是细化功能」。①段那份按 A / B 两节提问:A 节问「要做什么、为谁、边界在哪」,B 节问「做成什么样、哪些情况不成立、状态怎么流转」,B 节结论落进 `research/1a-需求文档.md`。
⭐ ②段产出两份(2026-10-06 收窄,2026-10-07 定为两份):用户原话「不需要 就用使用场景,其余6分都不需要了」「2 产品功能 和 界面布局不就是两个文档嘛」。`prd/2a-产品功能.md`(功能清单:做哪些 / 不做哪些 / 每条带优先级 + 状态流转)与 `prd/2b-界面布局.md`(页面关系 + 页面内板块布局)。
(交接口反转前的口径、②段收窄前的产出清单与去向 → `references/_留痕/③段与总入口-旧口径.md`)
⚠️ ①段功能按「使用场景」组织(一条场景可跨多个页面),不按页面组织。
段内的子步顺序、方法论文档、硬约束、完成标准,都在各段自己的 `SKILL.md` 与 `references/` 里。
①段 1a 需求文档:全程最先做,且只做一次。用 grill-me 与用户互动,产出 `docs/pm/<项目>/research/1a-需求文档.md`(开头写清做什么 / 为谁 / 不做什么,往下是决策表)。
## 项目与路径约定(单一真源)
> 四段全部遵守本节。各段 `SKILL.md` 与 `references/` 里出现 `docs/pm/...` 时,`<项目>` 一律指本节定义的 slug。
### `<项目>` 是什么
项目 slug 用小写字母、数字、连字符(例 `my-tool`、`video-canvas`)。它同时是 `docs/pm/<项目>/` 与 `designs/<项目>/` 的目录名,两处必须同名,一个字都不能差。
### slug 怎么定(按序取第一个成立的)
| 序 | 条件 | 取值 |
|---|---|---|
| 1 | 用户在当前会话里明确说了项目名 | 该名字 slug 化 |
| 2 | `.registry/current-project` 存在且非空 | 其内容 |
| 3 | `docs/pm/` 下恰有一个非 `_` 开头的目录 | 该目录名 |
| 4 | 以上都不成立 | 停下问用户 |
写任何文件之前先核对:目标路径里的 `<项目>` 段与按上表得出的 slug 是否一致。不一致就停下说明,不要「先写了再说」——猜错会把产物写进别的项目,事后极难拆干净。
### 产物落哪
| 段 | 路径 |
|---|---|
| ① 产品需求 | `docs/pm/<项目>/research/` |
| ② | `docs/pm/<项目>/prd/`、`docs/pm/<项目>/ux/`、`docs/pm/<项目>/ux/diagrams/` |
| ③ | `docs/pm/<项目>/DESIGN.md`、`designs/<项目>/*.html`、`designs/<项目>/3c-GPT会诊.md` |
| ④ | 写进原型 HTML 自身(`designs/<项目>/*.html`),不额外落 md |
### DESIGN.md 为什么在项目目录、不在仓库根
`DESIGN.md` 是③段的绑定视觉规范,一个项目一份,③段按当前项目的 slug 去读它。仓库根只能放一份,多项目会互相覆盖,所以一律放 `docs/pm/<项目>/DESIGN.md`。
推论(硬规则):读 `DESIGN.md` 时,路径必须由本节定义的 `<项目>` slug 拼出,不许用「当前工作目录碰巧有 DESIGN.md」这类推断。仓库根不放任何项目的 `DESIGN.md`。
## 工具选择规则(防止选错,最重要的一节)
> 下表是选型总则。这些工具都已封装在对应段内,本文件只负责让你不选错;具体调用路径见各段 `SKILL.md`。
| 要什么 | 用谁 | 别用 |
|---|---|---|
| 页面设计全链(规范 → 原型 → 审查) | ③段 `stage-delivery` 自己的 D0→D5 流水线 | 另找风格库,或自己手搓一套 token 与门禁 |
| 评审用的可点原型 / 生产级前端页面 | ③段 3b(按 D2 构建,单文件 HTML 交付)。先判页型:营销页取 `open-design` 技能的 `design-templates/web-prototype/`,工具型页面取③段 `references/layouts-tooling.md` | 不判页型就套 `web-prototype` 种子——那是营销落地页骨架,会把后台做成营销页 |
| 设计规范文件 | ③段 3a 生成 `DESIGN.md`(令牌表由 `open-design` 技能选定套的 `tokens.css` 产出,加该项目②段的界面需求) | 凭空编一套 token |
| 架构图 / 流程图 / 时序图 | `diagram-design` | 手写 Mermaid |
| 状态迁移的守卫、副作用、并发 | `state-machine` | 指望 diagram-design 覆盖这些 |
| 审美方向 / 风格定调 | `open-design` 技能里选一套(读候选套 `DESIGN.md` 第 1 章,按页面类型挑) | 「米白+衬线+陶土色」这类默认审美,或凭感觉编 |
| 多方向比选 / 独立评审打分 | `oil-ui-pro` 技能(方向探索 `design-direction.md`,对比页 `style-explorer.md`,评审协议 `visual-review.md`) | 拿它的评分循环替代本段 Gate-1/2/3 |
③段的页面设计供给来自两个独立技能(2026-10-05 定),都装在 `.workbuddy/skills/` 技能仓库,都可脱离本段单独使用。`open-design` 是判据供给库:`design-systems/`(153 套,定调只从这里选)、`craft/`(13 份工艺判据:状态穷举 / 字阶 / 配色 / 动效 / 反 AI 味 / 无障碍)、`design-templates/web-prototype/`(版式骨架种子,营销页向)。`oil-ui-pro` 是界面设计方法论:五步流程(探索方向 → 建结构 → 取实证 → 独立评审打分 → 验证交付),加风格对比页与截图工具;它自带联网版本检查与自动更新,是用户明确要求全量搬入的例外项(既有纪律是「依赖外部服务一律不收」),已记录在案,不扩散。
两者平行同层级,不缝成一条流水线:多数页面走 `open-design` 主线;需要「先拉开方向让用户挑」或「独立评审打分」时,取 `oil-ui-pro`。
四样东西两个技能都没有对应,由 `stage-delivery` 自己扛:设计契约十二字段、结构骨架、交互清单、工具型版式库。
页型分流(2026-10-05 新增):`web-prototype` 的种子与 8 个骨架全是营销落地页结构(hero / features / stats / quote / CTA),自带 `.eyebrow`(眉标)与 `.lead`(副标题)。工具型页面(后台 / 控制台 / 列表 / 详情)照它做会长出「标题上下各一行小字」的三段式。本项目实测踩过这个坑,结构判据全绿也拦不住。所以③段 D0 必须先判页型,工具型页面零 `.eyebrow`、零 `.lead`、零 `.hero`,版式走③段 `references/layouts-tooling.md`。
只读一处来源:同一条判据若在 `stage-delivery` 与 `craft` 各有一份且口径不同,以本项目追加条为准,并在 runbook §3.4 显式标注「本项目追加」。
DESIGN.md 说明:`@google/design.md` 提供 `lint` / `diff` / `export` / `spec` 四个子命令,目前是 alpha(v0.4.0)。非 TTY 的管道里可能不回显输出,需在真实终端里确认。本机实测该命令完全不可用,不要拿它当校验关卡;改由 D3 收口与 D5 终检按真实像素人工复测对比度(判据见 `open-design` 技能的 `craft/color.md`)。原两把门禁脚本(静态文案检查 / 渲染机检)已随旧主干从磁盘移除,当前没有机器复现,结论只能记「人工判定」,不得写成「脚本已通过」。
## 可调用工具(自然语言触发)
> 两个随段携带的独立工具,装在③段 `references/stage-delivery/assets/` 下,按用户说法直接触发,产物落项目目录。它们都挂在③段下,不单独成段。
| 用户说 | 触发工具 | 做什么 | 产物 |
|---|---|---|---|
| 「分析 XXX 视频」「把这个视频抽帧」「拆一下这条视频的画面」 | `stage-delivery/assets/video-capture/` | 取视频(本地文件 / 直链 URL)+ 抽帧(双因素 + 首尾 + 补帧) | 关键帧 `frames/` + `frame_times.json`(供①竞品分析、③视觉参考) |
| 「获取 XXX 网站的设计风格」「抓这个网站的风格/组件/配色」 | `stage-delivery/assets/design-capture/` | 抓网页设计系统(色彩 / 排版 / 组件),生成样式模板 | 一套 `design-system-<名>/`(与 `design-system-tiaoyue` 同构,可直接被③段 D1 选用) |
两者都独立可单跑:`video-capture` 只依赖 `ffmpeg`;`design-capture` 只依赖本机 Chrome(CDP)+ `vendor/` 里搬运的抽取脚本,不需要 open-design daemon 在场。用法与边界见各自 `SKILL.md`,来源与署名见各自 `ATTRIBUTION.md`。
触发时机:①②段拆竞品视频用 `video-capture`;③段要新建样式或拆参考站用 `design-capture`。
两个工具都只做合规最小集:不抓平台页内视频,不调付费接口;抽取结果须先目视比对再采用。
## 进入方式
| 你说什么 | 模式 | 从哪开始 |
|---|---|---|
| 「规划 XX」「从零做 XX」 | 全流程(自动处理) | `stage-discovery` → `stage-requirements` → `stage-delivery` → `stage-proto-doc`,一路跑完,段间不停下来问(含①段末) |
| 「先确认方案」「跑完方案停下等我」「规划 XX,先给方案」 | 方案确认 | 同一套四段,唯一差别是①段末停下等你确认方案,确认后才进②③④ |
| 「只做产品需求」「只做产品功能」「只做界面交互」「只做原型说明文档」 | 单段 | 只调对应那一个 stage skill,不展开其他段 |
| 已有②段,要出原型 | 单段 | 直接调 `stage-delivery`,从它的 3a 起 |
| 已有原型,要补说明 | 单段 | 直接调 `stage-proto-doc`,从它的 4a 起 |
| 只问某个单点 | 单段 | 不跑任何段,在对应 stage skill 内点名子步,或直接说要看哪份方法论 |
「只调一段」成立的原因:四段之间只通过落盘文件耦合,没有隐式状态。
- ②只读 `docs/pm/<项目>/research/*` 与 `docs/pm/<项目>/strategy/*`;缺失时标注 `【假设】`继续,不催促回补①
- ③只读 `docs/pm/<项目>/prd/*` 与 `docs/pm/<项目>/ux/state-machine.md`;缺失时同样标 `【假设】`继续
- ④只读 `designs/<项目>/*.html`,另按需读 `docs/pm/<项目>/prd/*` 与 `docs/pm/<项目>/ux/state-machine.md` 校准术语;缺失时标 `【假设】`继续
## 执行规则
只有三种模式,没有第四种:
| 模式 | 段之间 | 段之内 |
|---|---|---|
| 全流程(自动处理) | 一路跑完,段间不停下来问(含①段末)。每段结束按「标准收尾格式」输出一段报告,输出完即刻进下一段 | 子步之间不反问,做完直接进下一个子步 |
| 方案确认 | 与全流程完全相同,只有一处不同:①段末停下等你确认方案;确认后②③④一路跑完、段间不停 | 同上 |
| 单段 | 不涉及 | 不越界,不催促回补前段 |
这两条是全流程模式下的两个独立分支,不要混:全流程(自动处理)没有①段末的强制停;「停下等确认方案」只在「方案确认」模式下发生。二选一由用户定(界面里点【生成原型和文档】时选「自动处理」或「先确认方案」,或在会话里直接说明);用户没明说时按自动处理走,不要在自动处理模式下自作主张停下来问。
「停下」指什么,不要读成「每一步都要反问用户」。只有这四种情况才停:
1. 信息不足且查不到,必须用户给(如「项目与路径约定」slug 第 4 条)——停下问
2. 破坏性 / 不可逆动作——二次确认
3. 用户显式要求某个子步做完停下
4. ①段末的方案确认(仅「方案确认」模式)——把方案摆给用户:做什么 / 不做什么 / MVP 边界 / 未复核的 `【假设】`,明说「等你确认方案,确认前不进②段」
段末报告:全流程(自动处理)模式下,所有段(含①)都只输出报告,不提问、不等回答;方案确认模式下①段是唯一例外,其余段同样只输出报告。
①段末的确认是回环,不是一次问答(仅「方案确认」模式):用户看到方案后可以提问题要求改,可能多轮,每轮的「问题+怎么改的」都要留痕、不得覆盖上一轮;改完由用户显式说「确认方案」才算过闸门。该模式下,没拿到用户确认的方案不得当成既定事实带进②段——这是实测踩过的坑:②段拿着未经确认的方案往下跑,把用户已拍板的需求裁掉了。
其余规则:
- 声明制(全段适用,不止③段):开工前、每进一个子段或子步、每处偏离,都要声明三件事——当前在哪、依据哪个文件的哪一节、产出落哪;偏离当场写明原因与影响,段末附偏离单。不许静默偏离。实测踩过的坑:③段 3b 交付了原型却没走当时声明的主流程、没读依据文件,也没当场说,用户追问「基于哪个 skill」才知道。
- 不做八股:不介绍方法论来源,不列人名,不复述框架历史,直接给结论。
- ⭐ 内容准则:一切落盘文字都要先过「说人话」这一关(2026-10-07 用户定案,同日扩大到规则文件)。用户原话:「当作第一步 和 第二步 生成文档时 必须遵循的内容准则」「不管是写规则 还是 写文档 都要严格按照说人话的技能去执行」。
- 适用面两类都算,只改产出不改规则等于半改。一是产出文档:`research/1a-需求文档.md` 到 `1e-使用场景.md`(5 份)、`research/1b-独立分析/`(独立分析体)、`prd/2a-产品功能.md` 与 `prd/2b-界面布局.md`(2 份)。二是规则本身:本技能包内的一切落盘文字,`SKILL.md`、`references/**`、模板与清单。
- 判据来源(单一可信源,本文件不复述模式清单):`humanizer`(55 条模式、5 种口吻档 casual / professional / technical / warm / blunt),`humanizer-zh`(24 条模式、快速检查清单、50 分制评分)。两份技能都在 `E:/ProgramData/.workbuddy/skills/`,完整判据以源技能正文为准。
- 门槛:按 `humanizer-zh` 五维评分(直接性 / 节奏 / 信任度 / 真实性 / 精炼度)≥45 / 50 才准落盘;低于 45 回炉重写。
- 五条核心原则(源技能《核心规则速查》摘引):删填充短语(开场白、强调性拐杖词);打破公式结构(二元对比、戏剧性分段、修辞性设置);变化节奏(长短交错,两项优于三项,段尾多样);信任读者(直接陈述事实,跳过软化、辩解、手把手引导);删金句(读起来像可引用的话,就重写它)。
- 交付留证:产出文档在段末报告里写明「已过内容准则,评分 X/50」;改规则文件时,在当日 memory 里记下这一关过了。
- 只调一段时不越界:用户说「只做第 N 段」,就跑该段,不展开其他段,也不用「你还没做调研」去催促。
- 提问上限 3 个:其余用合理假设,并在文档里标注 `【假设】`。例外是 `grill-me` 提问模式,不受此限(①段的「需求澄清」与②段的「需求压测」各一次),该模式的价值就是穷尽提问;此时须先声明「将连续多轮提问」,退出后恢复本约束。
- 反问优先,允许自动补全:`grill-me` 的默认动作是把问题抛给用户并附推荐答案。用户说「你定」、连续两轮不回应、或属事实类问题时,模型自行给答案并标 `【假设】`,换来「不卡住」;但每轮结束要汇出待复核清单,未经复核的 `【假设】` 不得在下游当事实用。
- MVP 边界优先:任何阶段都先回答「第一版做什么、不做什么」。
- 必须落盘:产出写入文件,不要只在对话里输出。
- 无来源就标注:任何查不到来源的数据都标为「估算」并写明口径,不编造数字当事实。
- 禁止长文:单份产出物默认一页纸(≤120 行),超长必须拆分。
## 每段的标准收尾格式
```
## 本段结论
- (3-5 条,可直接决策的话)
## 已落盘
- ...
## 待确认(最多 3 条)
## 建议下一步
→ 用 <skill-name> 完成 <具体事>
```
## 反面清单
- 为一个小功能跑完整调研
- 输出长文却给不出一个结论
- 跳过「不做什么」
- 用户只问单点,却强行拉进全链路
- 把估算数据写成确凿事实
- 跳过③段 D0 的 Gate-1(未定死令牌表与设计契约)就开写页面代码
- 在 `grill-me` 提问模式下仍套用「提问上限 3 个」,把提问做成走过场
- 只跑一次 `grill-me`:①没定义需求就去取证,或②拿①段的需求定义代替功能压测直接写②段
- 把自动补全当默认动作:用户没说话就替用户拍板,还没标 `【假设】`、没进待复核清单
- 把④的说明区写进产品功能范围,或让③顺手把说明文档一起写了(该调 `stage-proto-doc` 就调)
- 手写 Mermaid 代替 diagram-design,手写 token 表代替 DESIGN.md
- 绕过四段自己手搓,或重写它们的内容(该调 `stage-*` 就调)
- 把两个页面设计技能(`open-design` / `oil-ui-pro`)的内部路径按本 skill 目录去拼,或改它们的正文(它们是技能仓库里的供给技能,改动只写 `stage-delivery` 自己的 `SKILL.md` / `references/`;两个技能平行同层级,不缝成一条流水线,也不把 `oil-ui-pro` 的评分循环当成本段 Gate 的替代)
- 猜 `<项目>`:定不出来还硬写,把产物落到别的项目目录下
- 把 `DESIGN.md` 写到仓库根:多项目会互相覆盖
- 段间停下来问「要不要继续」:全流程(自动处理)模式下直接进下一段,只在段末输出报告
- 把两种模式混用:在自动处理模式下自作主张停下问方案,或在「方案确认」模式下确认前就开跑②③④
- 在「方案确认」模式下把①段的方案当成已确认就往下跑:该模式下①段末必须停下等用户确认(含「不做什么」)
- 下游擅自裁剪上游已拍板项:②③④发现要砍①段或决策表里已拍板的东西时,不许自行裁掉或改口径,必须列成「与已定决策的差异」交用户显式确认
- 把模式当成段:模式是「要不要在①段末停」的开关,不是第五个段,别为它单独造段或造产物
- 跑了却不说:没声明当前段 / 子步与依据文件,或偏离了被调 skill 的主流程却不声明、不记偏离单(应为:开工先声明、每个子步再声明、偏离当场声明)
## 改名 / 改供给后的自检
```bash
python scripts/check_naming.py --ws <工作区>
```
它查四段段名与子步名在「总入口 ↔ 各段 `SKILL.md` ↔ 各段 `references/`」之间有没有漂,包括 H1 与子步表是否一致、总入口子步列有没有漏项、runbook 必读表有没有引用已移除的资产、两份副本是否一致。纯静态比对,不需要渲染,不需要外部依赖。
为什么必须有它:实测当天漏过两次,当时没有任何门禁会报错。
第一次(2026-10-02):改段名时 `SKILL.md` 改了,但 `references/stage-discovery/references/grill-me.md` 的 H1 仍写「需求澄清(grill-me · 调研段)」;`references/stage-requirements/SKILL.md` 子步表写「2b 功能流转」而正文 H2 写「## 2b 状态机」;总入口④段子步列只写「4a 说明区 / 演示引导」漏了 4b / 4c。三处都只能靠回读发现。
第二次(2026-10-06):②段收窄为「只细化功能」(7 份产出变 1 份)后,各段 `SKILL.md` 都改了,但总入口的三处仍写着旧结构——四段表的②段子步列仍是「2a 功能定义与压测 / 2b 功能流转 / 2c 功能图示」,四段表的①段子步列「1c 产品定位与商业设计」未随段内改名(段内已改称「产品定位与场景」),正文仍写「①与②各跑一次 `grill-me`」并指向两份同名文档,实际全场只有①段一份。闸门当场报 6 个 FAIL,根因是「改了承载段、忘了总入口」。
由此立一条硬纪律,与「换供给不能只改承载段」同型:凡改子步结构 / 段内产出清单 / 段间交接口,必须连带改总入口 `product-planning/SKILL.md` 的「四段结构」表与「交接口」表,不改就是半改状态。
改了段名 / 子步名 / 判据供给源之后必须跑一次,并把结果记进当日 memory。改完不校验,下次读契约的人拿到的是错的配方。
本脚本只查文本一致性(H1 ↔ 子步表 ↔ 总入口 ↔ 副本),查不出「判据口径是否自相矛盾」。例如「②段到底该不该给页面结构」这种反转,闸门一个字都报不出来。口径类改动要靠人工回读,且必须把反转理由与用户原话写进文档留痕。
脚本输出里的 `[提示]` 项(旧名出现)不计入失败,但要人工看一眼是不是落在「废止理由块」里——落在里面是正当留痕,散落在正文里就是真残留。
2026-10-07 起本技能只在全局一份:`E:/ProgramData/.workbuddy/skills/product-planning/`。它就是本体,不再有「主 / 副 / 装入」三副本,也不再需要「三处 md5 复核」(那只在有副本时才有意义)。改完只跑一次 `check_naming.py --ws <工作区>`。用户原话:「把产品规划复制到 workbuddy 全局skills中 后续维护和使用全局技能」。工作区原先那三份已归档到 `归档/技能迁全局-20261007/`(未直删,可随时取回)。
@@ -0,0 +1,376 @@
---
name: stage-delivery
description: 产品规划第③段,界面交互。设计工程供给来自 open-design(设计系统定调 + 工艺规约给数值判据 + 原型模板给版式):先落设计契约与令牌表(Gate-1 硬闸),再构建页面,再收口/动效/终检(Gate-2/3),中途加一轮 GPT 独立会诊。判据结构为「正向目标为主、禁令只留最关键三条」。当用户要做 UI 规范、设计系统、页面原型、交互动效、界面审查、视觉打磨,或说"只做界面交互"时调用。
---
# ③ 界面交互
回答两个问题:长什么样、怎么操作。产出 `docs/pm/<项目>/DESIGN.md` 与 `designs/<项目>/*.html`。
> 段名为什么是「界面交互」(2026-10-02 定):
> 删「交付」:①②③都产出落盘文件,「交付」是三段共有的属性,不是③的专属;④段也在交付(原型的说明区),留着会让人以为③管完就结束了。
> 补「交互」:本段原先只讲「长什么样」,可 3b 原型硬要求每个按钮、每个跳转都真能走(`:236`),3c 会诊专查空态 / 加载 / 错误 / 反馈(`:148`、`:150`)。交互判据一直在做,却没有名字,补上才与本段实际职责相符。
> 与④段的界:③造物(界面与交互本身),④描述物(说明区与演示引导)。
> `<项目>` 按 `product-planning` 的「项目与路径约定」定;定不出来就停下问用户,不许猜。`DESIGN.md` 放项目目录,不放仓库根,避免多项目互相覆盖。
本段的页面设计供给来自两个独立技能,都装在 `.workbuddy/skills/` 技能仓库里,都可脱离本段单独使用:
| 技能 | 它是什么 | 本段取它什么 |
|---|---|---|
| `open-design`(⚠️ 工作区级,全局没有) | 网页 App 设计判据供给库:153 套设计系统(定调与令牌)+ 13 份工艺判据 + 35 个版式骨架 | 定调 + 数值判据 + 版式骨架(本段默认主线) |
| `oil-ui-pro`(✅ 全局级) | 界面设计方法论:五步流程(探索方向 → 建结构 → 取实证 → 独立评审打分 → 验证交付)+ 风格对比页与截图工具 | 方向探索 + 对比页 + 独立评审打分(做多方向比选或要独立评审时;`open-design` 缺位时也由它顶) |
| 本段自带样式库(✅ 随段携带) | `assets/design-systems/<选定一套>/` —— 样式风格库,可续加;当前 1 套:`design-system-tiaoyue`(跳跃视界规范 + 277 个自有组件族) | 定调 + 令牌 + 组件形态,与 `open-design` 那 153 套同权;⛔ 二者每次只选一套 |
> ⭐ 两个技能平行同层级,可分别独立使用。本段按任务取用,不把它们缝成一条流水线:多数页面走 `open-design` 主线(快、判据硬);需要「先拉开几个方向让用户挑」或「要一个没看过制作过程的评审打分」时,取 `oil-ui-pro` 的方法与工具。
> ⛔ 判据正文仍只在本段(`references/execution-runbook.md` 与 `references/layouts-tooling.md`)。两个技能都只是素材与方法,不是规范权威。同一条判据两处都有且口径不同时,以本段为准,并在 runbook §3.4 标注「本项目追加」。
> ⛔ 不许把 `oil-ui-pro` 的评分循环当成 D 阶段的替代:它是评审方法,本段的 Gate-1/2/3 该过还得过。
> ⚠️ `oil-ui-pro` 自带联网版本检查与自动更新(每次使用会连 `ui.oiloil.org`,发现新版用 `npx` 覆盖自身目录)。这是本项目收录时用户明确要求全量搬入的例外项,与「依赖外部服务一律不收」的既有纪律冲突,记录在案,不扩散到其他技能。想关掉设环境变量 `OIL_NO_UPDATE_CHECK=1`。
`open-design` 的三处供给各管一件事:
| 供给 | 路径(技能内) | 管什么 | 在哪一环用 |
|---|---|---|---|
| 设计系统(正向目标 · 调性) | `open-design/design-systems/<选定一套>/` | `DESIGN.md` 定调性 + `tokens.css` 给全套数值(圆角与阴影在这里)+ `components.html` 给组件形态 | 3a 定调、落令牌表 |
| 工艺规约(正向判据 · 数值) | `open-design/craft/` | 字号刻度 / 配色配额 / 状态齐备 / 动效纪律 / 反 AI 味 / 无障碍 | 3a 判据、3d 终检 |
| 原型模板(正向形态 · 版式) | `open-design/design-templates/web-prototype/` | 种子 `assets/template.html` + 8 个版式骨架 + 自查清单 | 3b 构建 |
本段自带样式库那一套(`design-system-tiaoyue`)怎么读(⚠️ 套内命名与 open-design 不同形,别按 `DESIGN.md` 去找):
| 要什么 | 套内路径 |
|---|---|
| 入口(规范总纲、生成时的参考范围) | `assets/design-systems/design-system-tiaoyue/SKILL.md` |
| 令牌(含暗色一套) | 同目录 `assets/tokens.css` + `assets/tokens-dark.css`(色值原始记录 `assets/brand.json`) |
| 组件形态 | 同目录 `references/components.md` + `references/design-system.html`(组件族清单 `references/library.json`) |
| 已知冲突 / 取舍记录 | 同目录 `references/known-conflicts.md` + `references/capture-notes.md` |
> ⚠️ 路径怎么找(2026-10-07 更新):一律按技能名引用(宿主按名加载,与物理位置无关),⛔ 不按相对路径爬,⛔ 不写死 `../` 层数。
> 2026-10-07 起两个技能不再同处:本技能在全局技能根(`E:/ProgramData/.workbuddy/skills/`);`open-design` 现在只装在工作区(`<工作区>/.workbuddy/skills/open-design/`),全局里没有;`oil-ui-pro` 在全局。更没得爬,只能按名找。
>
> 🔴 `open-design` 不可得时的回落(2026-10-07 用户定案「先用 oil-ui-pro 试试效果」):用 `oil-ui-pro` 顶「方向探索 / 对比页 / 独立评审打分」三块。但它顶不了 `open-design` 独有的 153 套设计系统(定调与令牌)与 13 份工艺判据(字号刻度 / 配色配额 / 状态齐备 / 动效纪律 / 反 AI 味 / 无障碍)。
> 缺这块时只有两条路:① 把 `open-design` 装回来(它是可得的技能,只是现在装在工作区级);② 明说「本次定调与工艺数值判据无供给来源」。⛔ 不许凭感觉编一套顶上,那正是本项目反复踩的坑。
两者都不依赖付费云 / MCP / API Key 才能用于设计:`open-design` 去掉那些之后剩下的全是静态 md / css / html;`oil-ui-pro` 的设计方法宿主中立、离线可用(联网仅用于版本检查)。`open-design` 的 daemon、云模型服务、`packages/components` 的 tsx 未收录。
冲突处以本段为准。两个技能都只是供给,不是规范权威。它们与本项目既有纪律冲突时,以本段与 `DESIGN.md` 为准。它们的价值在给正向目标、给方法,不在「给最后一句话」。
> 为什么换掉原来的主干(2026-10-02 用户定案):原主干 `ui-page-design` 已从磁盘移除,③段只剩规则壳,壳里又全是减法型判据,机检能判「不违规」却判不出「好看」,18 轮回改把页面越推越白。换供给的同时必须换判据结构:正向目标为主,禁令只留最关键的。
> ⭐⭐ 本段在②段给定的骨架里做视觉与交互(2026-10-06 用户定案)。
>
> 口径:②段钉骨架,③段做皮肉。
>
> | 归②段(本段⛔ 不许动) | 归本段(②段⛔ 不许写) |
> |---|---|
> | 有哪几页 | 配色 / 字体 / 间距 / 组件样式 / 动效 |
> | 每页几个板块、板块怎么排 | 每个板块的视觉实现(怎么好看、怎么对齐、什么层次) |
> | 跨页关系(怎么跳转) | 每个板块的交互行为(点哪、什么反馈、何时不可点) |
> | 每页主操作 | 状态与空态的具体呈现 |
> | 每条信息在哪一档(主屏常驻 / 可点入) | 响应式怎么变 |
>
> 用户原话:「3 是负责设计和交互,页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子」。
>
> 🔴 旧口径站不住的地方:它把「有哪几页」留在本段,于是本段做一版一个样,②段手里没有任何东西能判断本段改得对不对。用户看到的现象就是「一会一个样子」。
> ⭐ 本段拿到的骨架是冻结的:⛔ 不许新增 / 移动 / 删除板块。缺板块要回②段改②段(见「硬约束」的对应禁令)。
>
> 仍在本段手里的两个字段(它们在给定骨架之内决定怎么摆得好看):
> - `必要内容`(减法):⚠️ 口径已调整。它不再决定哪些内容上屏(那是②段分档表的活),而是核对②段给的信息是否都在骨架里有落点;⛔ 本段不得以它为由增删信息档位。
> - `结构骨架`(加法):⚠️ 口径已调整。它不再独立决定几个区块,而是把②段给的板块清单翻译成具体的骨架档 / 列宽 / 密度目标(骨架档选哪个、密度多少,仍是本段的活)。
>
> ⛔ 本段不许回头改②段的骨架(那是②段);⛔ 也不许无视②段骨架自己另起一套。判据:D0 里的页面清单与每页板块,必须与②段《界面布局》逐条对得上;对不上就停下来问②段要哪一版。
顺序 3a → 3b → 3c → 3d。先有规范再出原型,不许反过来;原型能点通后先会诊,再收口打磨。
> 照 `references/execution-runbook.md` 逐步走。那是本段的固化执行手册:按 D 阶段排的必读表、每步验收判据、脚本跑法、偏离单格式、完成标准清单都在里面。本文件写规则,手册写顺序与验收。
> 开工前先声明、每进一个子步再声明、偏离当场声明(三字段:当前子步 / 依据文件 + 小节号 / 产出落点)。这条不可商量。
## 子步与产物
| ③段子步 | 做什么 | 产物 | 闸 |
|---|---|---|---|
| 3a 视觉规范 | 定契约(减法 + 加法)→ 定调(选定设计系统)→ 落令牌表〔多方向比选时取 `oil-ui-pro` 的方向探索与对比页〕 | 设计契约 + 令牌表 → `DESIGN.md` | Gate-1 方向门 |
| 3b 原型 | 按模板种子 + 版式骨架构建 | `designs/<项目>/<原型>.html` | — |
| 3c GPT 会诊 | 外部独立视角(本段特有,两个设计技能都不覆盖) | `3c-GPT会诊.md` | — |
| 3d 审查与打磨 | 收口 → 动效 → 终检〔要独立评审打分时取 `oil-ui-pro` 的评审协议〕 | file:line 清单 + `3d-审查报告.md` | Gate-2 / Gate-3 |
挡位开工前定一次,默认标准:纯原型可降快速(定契约 → 定调 → 构建 → 终检);常规页面走标准(全跑);对外页面走严格(三闸全开 + 中间产物落盘)。
`Gate-1` 与 `Gate-3` 是硬闸,任何挡位都不可跳,哪怕只做原型,也要打开看一眼。
## 三条铁律(只留不可省略的)
| # | 铁律 | 违反后果 |
|---|---|---|
| 1 | 先定死,再写码。未产出设计契约与令牌表前,禁止写任何组件代码;禁止边写边调样式。 | 返工、风格漂移 |
| 2 | 状态穷举。`loading / empty / error / success / disabled / 无权限` 逐项给结论(判据见 `craft/state-coverage.md`)。 | 上线即翻车(最高频漏项) |
| 3 | 不渲染不算完。交付前必须在真实环境渲染一次并肉眼确认。 | 裁切/重叠/失效控件逃过检查 |
> 禁令就这三条,其余一律去供给源查:反 AI 味 → `craft/anti-ai-slop.md`|字号与层级 → `craft/typography.md` / `typography-hierarchy.md`|配色配额 → `craft/color.md`|动效 → `craft/animation-discipline.md`|无障碍 → `craft/accessibility-baseline.md`|表单校验 → `craft/form-validation.md`。
> ⛔ 不在本文件里抄写禁令清单。抄了就变两份,两份必然漂;更要紧的是,抄禁令会把正向目标挤出视野,这正是改版前③段只剩「不要什么」、页面越改越白的根因。
> 一条例外(本项目特有,craft 里没有):结构性容器靠底色差 + 阴影分层,不挂围合边框(来源:本项目 E-62 / E-63 实测)。当选定设计系统写「卡片描边」时,以本条为准。
> 限载:同一时刻只读 1~2 份供给原文,用完释放。这条不再单列铁律,但仍是硬约束(`design-systems/` 有 153 套、`craft/` 有 13 份,全读必然互相稀释)。
## 必读(限载:一次只读 1~2 份,用完释放)
| 环节 | 读什么 |
|---|---|
| 3a 定调 | `open-design/design-systems/<选定一套>/DESIGN.md` + 同目录 `tokens.css`;`components.html` 按需 |
| 3a 判据 | `open-design/craft/typography.md` + `craft/color.md`(其余一次一份,按需) |
| 3a 多方向比选(按需) | 需要「拉开几个方向让用户挑」时,取 `oil-ui-pro` 的 `references/design-direction.md` + `references/style-explorer.md`(对比页模板与生成器) |
| 3b 构建 | `open-design/design-templates/web-prototype/SKILL.md` + 同目录 `references/layouts.md`(⚠️ 不在本技能 `references/` 下,该目录只有 execution-runbook.md);工具型页面另读两份:本技能 `references/layouts-tooling.md`(HTML 骨架与落地自检)+ `open-design/design-templates/web-prototype/references/tooling.md`(四形态判定句与通用红线纲要) |
| 3d 独立评审(按需) | 要「一个没看过制作过程的评审打分」时,取 `oil-ui-pro` 的 `references/visual-review.md`(协议)+ `references/tools.md`(截图与对比取证) |
| 3d 终检 | `open-design/design-templates/web-prototype/references/checklist.md` + `craft/state-coverage.md` |
> 定调来源唯一,每次只选一套。可选套来自两处,⛔ 每次设计只选其中一套、不许混用两套(混用 = 没有调性):
> ① `open-design/design-systems/`(⚠️ 工作区级,153 套);
> ② 🔴 本段自带样式库 `assets/design-systems/`(✅ 随段携带、可续加;当前 1 套:`design-system-tiaoyue`)。
> 套名与选择理由写进 `DESIGN.md`。既有项目中凡引用旧风格来源(`minimalist-ui` / 皮肤族 / `ui-ux-pro-max` 检索结果)的 `DESIGN.md` 行,重跑 3a 时一律改写为选定套 + 留痕对照。
> 本段 `references/` 只放流程规则,⛔ 不放风格;随段携带的样式风格一律放 `assets/design-systems/<套>/`(🔴 2026-10-07 用户令两条:「把 `design-system-tiaoyue` 整合到 `product-planning` 作为一种样式风格」+「后续可以添加多种风格,每次只能选择一种进行设计」⇒ 只把「不放风格」这条放宽到 `assets/`,`references/` 仍不放)。
> ⚠️ 续加新风格时的硬要求:目录名与 open-design 同形(`assets/design-systems/<套名>/`),套内自带入口文件(`SKILL.md` 或 `DESIGN.md`);⛔ 不许改已入套的文件内容,原样搬入、只在本文件登记去向。
## 3a 视觉规范(定契约 + 定调 + Gate-1)
第 0 步 · 供给核对(每轮必做,防漂移):确认技能仓库里的供给仍在位(`open-design/` 下 `design-systems/<选定套>/` 存在、`craft/` 存在、`design-templates/web-prototype/` 存在;`oil-ui-pro/` 入口 `SKILL.md` 存在;🔴 若上轮选的是自带库那套,另核 `assets/design-systems/<套>/SKILL.md` 仍在位),并把选定套名与 `DESIGN.md` 里记录的上次套名比对。
- 一致 → 直接定契约。
- 不一致或供给缺失 → 先停下报告,⛔ 不许拿别的套顶上,也不许凭记忆写风格。把差异列成「供给变更清单」,在会话里向用户呈现并确认后,再改 `DESIGN.md`,把新套名与清单写进修订记录。
- 本步存在的理由:`DESIGN.md` 是上一次供给状态下产出的。供给换了却没核对,就会长期拿着旧调性当准绳。
D0 锚需求:按 `references/execution-runbook.md` 里的契约模板产出设计契约(十二个字段)——页面职责(谁 + 多久 + 干什么)、主用户、主操作(全页唯一)、必要内容(减法)、重复项的信息量(行式列表 / 卡片网格逐条列次级信息)、结构骨架(加法:骨架档 + 区块划分 + 密度目标)、交互清单(加法,见下)、状态覆盖六项逐条、组件来源(优先沿用)、响应式行为(写布局怎么变,不写「自适应」)、明确拒绝的模式、验收标准(可观察可判定)。
> ⭐⭐ 第十二字段「交互清单」是 2026-10-02 新增,段名改名的直接后果(段名从「界面与交付」改成「界面交互」,但「交互」在流程里此前没有落点:可点通在 3b、查反馈在 3c、动效在 3d,三处各判一部分,谁也不负责整体)。
> 它写什么:逐个可点元素一行,四列——元素(哪个)|触发(点了/输了/滚到哪,发生什么)|反馈(状态怎么变、给什么提示、多久消失)|何时不可点(哪些条件下 `:disabled`,条件是什么)。
> 它不写:动效参数(归 3d 按 `craft/animation-discipline.md`)、视觉样式(归令牌表)、状态六项的有无判定(归下一字段 `状态覆盖`,本字段只写「这个元素可点时点了会怎样」)。
> 为什么是契约字段而不是新子步:交互一旦单独成文,就会与 `必要内容`、`状态覆盖` 三处互相矛盾——这正是记忆里「同一事实多处落点必然打架」的病。收进契约 = 一个字段、一处裁决、一个门禁。
> 判定「漏没漏」:页面里每一个能点的东西都必须在这张表里出现。表里没有 ⇒ 它不该可点(改成静态文本,或回 D0 补进 `必要内容` 再点)。
D1 定调:从 `open-design/design-systems/` 或本段自带 `assets/design-systems/` 里选一套(⛔ 每次只选一套),不凭感觉编,也不全读:
- 怎么选:按本项目的页面类型挑。读候选套 `DESIGN.md` 的第 1 章 `Visual Theme & Atmosphere`,认准写明该类的那一句(工具型数据密集界面 ⇒ 认 `data-dense, enterprise` 这类描述)。153 套分两代模板(A 组 / B 组章节名不同),按自己那套的章节读,不必统一。
- ⚠️ 选了自带库那套(`design-system-tiaoyue`)时:套内没有 `DESIGN.md` ⇒ 读它自己的 `SKILL.md`(规范总纲 + 生成时的参考范围)+ `references/known-conflicts.md`(已知取舍);入口 / 令牌 / 组件形态按上面那张「怎么读」表取,⛔ 别按 open-design 的三件套去找。
- 选定后读三件:`DESIGN.md`(调性 + 色值 + 字号刻度 + 间距刻度 + 动效基调)→ `tokens.css`(圆角与阴影只有这里)→ `components.html`(组件实际长相)。
- 要换风格 ⇒ 下一轮重跑 D1 重选一套,旧套留痕(用户 2026-10-07:「后续可以添加多种风格,每次只能选择一种进行设计」)。
- 没找到匹配的套 ⇒ 换一个类型词再挑一次;仍不行就直说「未找到匹配」,不许拿泛化结果当结论落盘。
- ⚠️ 工具型页面的版式不在模板里:`web-prototype/references/layouts.md` 那 8 个骨架是落地页 / 营销页向(hero / features / stats / quote / cta / log / pricing)。工具型页面只适用其中 Layout 7 日志列表与 Layout 8 对比表,其余套上去会把后台做成营销页。工具型页面的版式由 D0 的 `结构骨架` 字段决定,不从模板抄。
- 产出令牌表:色值 / 字体(标题字体是关键项)/ 间距两档(主刻度 `4/8/16/24/32/64` 供布局 + 控件层微网格 `2/4/6/8/12` 仅供按钮内衬、徽章内衬、图标间隙、开关与进度轨微几何)/ 圆角 / 字阶定值表(七档各一个 px,不是区间)/ 高度层级(每层都有多层叠层值)/ 布局脚手架(骨架档落到具体列宽 + 窄屏变化)/ 组件规格(按钮三档 + 卡片两档 + 输入框 + 徽章的具体高度与内衬;实底底色 ≥2 种)/ 动效基调——全部为具体值,禁止「待定」,每档只许一个定值
落盘 `docs/pm/<项目>/DESIGN.md`:令牌表内容并入本项目既有的三层 token 结构(primitive → semantic → component;组件只引语义层、语义层只引 primitive),设计契约作首节。`DESIGN.md` 是原型的绑定规范,原型只许引它的 token。
Gate-1 方向门(硬闸,不可跳)——按本表逐项自检(字段定义与填写位见 `references/execution-runbook.md` §2.1;⛔ craft 无对应,十二字段只能在此判):
| 检查项 | 通过条件 |
|---|---|
| 设计契约 | 十二个字段全部填写,无一为空或「待定」;有重复项时重复项的信息量已逐条列出次级信息 |
| 页型判定(2026-10-05 新增) | 已写出「营销页还是工具型页面」+ 依据;工具型页面的 D0 里零 `.eyebrow` / 零 `.lead` / 零 `.hero` |
| 结构骨架(加法面) | 骨架档 / 区块划分 / 密度目标三者已写;区块 ≥2 个且每个有文字标题;`必要内容` 每条都有归属区块 |
| 交互清单(加法面,2026-10-02 新增) | 页面上每一个可点元素都在表里(元素 / 触发 / 反馈 / 何时不可点 四列齐全);表里没有的可点元素为 0 |
| 状态覆盖 | 六个状态逐项有结论(勾选,或「不适用 + 理由」) |
| 令牌表 | 色值 / 字体 / 间距两档且适用面已分开写 / 圆角 / 阴影全为具体值 |
| 字阶定值表 | 七档每档一个 px 定值(不是区间);相邻档差 ≥2px;每档只许一个定值 |
| 高度层级 | 每层都有多层叠层值;同层级同值 |
| 布局脚手架 | 骨架档已落到具体列宽;窄屏变化写具体 |
| 组件规格 | 按钮三档 + 卡片两档 + 输入框 + 徽章均为具体值;同一父区块内主档 ≤1;实底底色 ≥2 种 |
| 供给核对(本项目附加) | 三处供给已确认在位;选定套名与 `DESIGN.md` 记录一致;不一致则变更清单已确认并写入修订记录 |
| 反 slop | 无紫→粉渐变、标题未用禁用字体、强调色已写明允许位置 |
| 拒绝清单 | ≥3 条,且每条可判定 |
| token 引用完整性(本项目附加) | 语义层只引 primitive、组件层只引语义层、无孤立 token |
任一项不过 → 停在 3a 补齐,不进 3b。
> 对比度门槛按 `open-design/craft/color.md`(正文 4.5:1 / 大字 3:1 / UI 组件 3:1),由终检阶段按真实像素复测(静态算不准 CSS 变量叠加后的结果)。
> 已知环境问题:`npx @google/design.md lint` 在本机完全不可用(alpha + clack 交互库,非 TTY 管道下静默且 exit 0)。不要拿它当校验关卡,也不要因它无输出就认为通过。
## 3b 原型(构建)
> ⛔ 开工前先判页型(2026-10-05 新增,硬前置):写下「本页是营销页还是工具型页面,依据是什么」。
> 两种页型的目的不同,骨架不能通用:营销页目的是说服(主张 → 论据 → CTA),工具型页面目的是完成一件工作(数据 + 操作)。
> 判别口径:要用户「下决心去做某事」⇒ 营销页;要用户「把这件事做完」⇒ 工具型页面。⚠️ 判不准时按工具型处理(默认取严)。
> 判不出来不许进 3b,停下来回改 D0 的 `结构骨架`。
> 🔴 为什么这条是硬前置:`open-design` 的种子 `assets/template.html` 是营销落地页骨架,自带 `.eyebrow`(眉标)与 `.lead`(副标题)。不判页型就照种子做,会得到「标题上方一行小字 + 大标题 + 下方一行灰色小字」的三段式——那是 2026-10-05 用户实测指出「像实习生画的」的唯一根因,而且结构判据全绿(判据判类名合法性,判不出「这不是工具界面的排版」)。页型不判,后面换什么设计系统都救不回来。
按 `open-design/design-templates/web-prototype/SKILL.md` 的六步走:读种子 → 把 `assets/template.html` 复制成 `index.html` 并替换 `:root` 令牌 → 先定版式节奏再粘骨架 → 填充 → 自查 P0/P1/P2 → 落盘。它的路线是「先选定一个明确的美学方向再写码」,与铁律 1 同向。
- ⭐ 工具型页面先判形态,再挑骨架(2026-10-02 新增):读 `references/layouts-tooling.md`。本项目是工具型数据密集界面,而 `web-prototype/references/layouts.md` 那 8 个骨架是落地页 / 营销页向(hero / features / stats / quote / cta / log / pricing),只有 Layout 7 日志列表与 Layout 8 对比表沾得上。
⚠️ 两份工具型文件的分工(2026-10-05 补):`open-design/.../web-prototype/references/tooling.md` 给四形态判定句 + 通用红线纲要;本技能 `references/layouts-tooling.md` 给可粘贴 HTML 骨架 + 逐条判据正文(§5.5)。⛔ 判据只在后者展开,前者只指路,两处展开必然漂。
形态判定一句话:页面上能数出「并列的同类记录」⇒ 列表型(工具型默认首选);数不出、页面围绕单个对象展开 ⇒ 详情型;主操作要在两个工作面之间来回 ⇒ 侧区型。
⛔ 不许拿营销页骨架顶替工具型,那是「没做形态判定」的默认行为,等于退回 18 轮前的病根。判不出形态就去改 D0 的 `结构骨架` 字段,⛔ 不许随手挑一个。
- 不许从零手写 `<section>`:先挑最接近的骨架粘进去再改。`open-design/design-templates/web-prototype/references/layouts.md` 开头的类清单(`section` / `container` / `card` / `btn-primary` / `grid-3` …)必须在种子 `template.html` 的 `<style>` 里存在;缺哪个就补进 `<style>`,⛔ 不许在标签上内联一堆临时样式。
- 输出形态:单文件 HTML、自包含、双击可开(与 `web-prototype` 的产出契约一致:只有 `index.html` 一个文件),含全部适用状态,不许有死按钮。
重大改版必须复制副本再改(`X.html` → `X v2.html`),不许覆盖旧版,旧版留在磁盘上以便对比。这是本项目的附加纪律(版本管理主线需要可追溯),open-design 未涉及。
交付前必须实测(本步硬关卡):用 `browser-harness` skill 按清单逐个真点,以 D0 契约的「交互清单」为唯一清单(⛔ 不用自己临场编的顺序):每行按「触发 → 反馈」实跑一遍,四态(空 / 加载 / 错误 / 失败重试)都要走到;回报控制台报错原文与「点了没反应」的元素清单。
> 交互清单在这一步才第一次被验证:Gate-1 只判「表写全了没」,判不了「真能跑」。清单与实现对不上,就是清单错了或实现错了,二者必居其一,都要在 `3d-审查报告.md` 里留痕,不许静默改表。
> 脚本查不出死按钮(即便脚本在位,它也只判溢出 / 对比度 / 状态可见性 / 点击目标尺寸,判不了「元素没绑事件」)。未跑实测不得进 3c,也不得报完成。
> 实测一律走 `browser-harness`(浏览器入口 9333),禁用 Trae 自带浏览器工具。
## 3c GPT 会诊(必做)
触发点:原型初稿出完、3b 的浏览器实测过了,立刻做本步;做完才许进 3d。
做什么:用 `browser-harness` skill 打开 `chatgpt.com`,把原型交给 GPT 做一轮独立审查,专挑设计与交互的毛病,把回答取回来逐条处置。③段前三步全是本地确定性检查,没有外部视角,这一步补的正是它补不了的那块。
执行步骤:
1. 沿用用户已登录的浏览器会话打开 `chatgpt.com`。不要新建账号、不要代填密码、不要碰设置页。
2. 用附件上传原型 HTML 文件(`designs/<项目>/<原型>.html`)。不要把上万字符的代码粘进输入框,会被截断或打字超时,且拿不回完整上下文。
3. 随附件发这段提问模板:
```
这是一个可交互原型(单文件 HTML,含内联样式与脚本)。请以资深产品设计师的视角审查,
只提可落地的改进项,按下面五类逐条给:
1) 交互与状态:空态 / 加载 / 错误 / 失败重试 四处有没有缺口或死路
2) 布局与层级:信息密度、对齐、视觉动线、主次是否清楚
3) 反馈:每个可点元素点击后有没有可见反馈;列出"点了没动静"的元素
4) 可访问性:焦点管理与顺序、键盘可达、对比度、语义标签
5) 文案:是否有歧义、术语不一致、把机器结论说成人已认可的地方
每条格式:问题 / 位置(选择器或组件名)/ 改法 / 优先级(高/中/低)
不要重写整个文件,只出清单。
```
4. 等回答出完再取(停止生成按钮消失或出现复制按钮),把回答原文取回,不要读一半就走。
5. 落盘 `designs/<项目>/3c-GPT会诊.md`,三段式:提问原文(含附件文件名)→ 模型回答原文 → 处置表。
处置表固定四列:
| # | 模型建议(原文摘句) | 判定 | 理由 | 落地位置 |
|---|---|---|---|---|
| 1 | ... | 采纳 / 不采纳 / 待议 | 对照 `DESIGN.md` 与②段说清 | 文件 + 选择器 |
功能作用:引入一个不在本项目上下文里的外部视角,补自己看不见的盲区。
输入边界:只传原型 HTML 与必要的产品背景;不传密钥、真实用户数据、内网地址、`.env`。代码里若有 token 或接口地址,先替换成占位符再上传。一次只审一份原型。
异常情况:登录失效 / 人机验证 / 网络不通 / 回答被截断时,不要假装跑过。退路是把提问模板和原型文件路径交给用户,由用户在自己浏览器里问,再把回答粘回来落盘。仍然取不到时,在 `3c-GPT会诊.md` 里写明「本轮未取得外部审查」,并在本段收尾时明示,未取得不等于已通过。
处置纪律:模型建议不是命令。采纳要给理由,与 `DESIGN.md` 或②段冲突的写清为什么不采纳。采纳项在 3d 之前改完,并回到 3b 的实测清单把这些改动再点一遍。
## 3d 审查与打磨(收口 + 动效 + 终检 + Gate-2/3)
### 收口(管「写得对不对」)
对照 `open-design/design-templates/web-prototype/references/checklist.md`(P0 / P1 / P2 三级)+ `craft/` 的四份数值判据(`typography.md` / `color.md` / `state-coverage.md` / `animation-discipline.md`)逐条过。先机器、后人工:
> ⚠️ 本段收口一律人工过(2026-10-02 用户定案「不重要的相关内容都删」):checklist 人工过 + 渲染截图 + DOM 取值,三项缺一不可。
> ⛔ 判据来源:`craft/checklist.md` + `craft/anti-ai-slop.md` + `craft/accessibility-baseline.md` + `craft/color.md`(对比度),本项目追加条见 runbook §3.4。
> ⛔ 结论只能写「人工判定」,⛔ 不许写「已通过」(人工过就是人工过,不借机升格)。要指向交付的单文件,不要指向多文件开发目录。
### 动效(可跳过)
按 `open-design/craft/animation-discipline.md` 先答动效三问:① 它传达什么信息?② 删掉会丢失什么?③ 是不是为了「看起来高级」?答不出就不加。
- 工具型页面(仪表盘 / 后台 / 编辑器 / 工作台)禁止入场编排,用户一天开几十次,每次播一遍是折磨。本项目的版本管理界面属工具型;判不准时按工具型处理
- 弹簧用 Damping / Response 二参数(Damping 保持 0.8–1.0、Response 0.3–0.4s;低于 0.7 会明显「蹦」)
- CSS 无法用真弹簧时用 `cubic-bezier(0.32, 0.72, 0, 1)`,不得用 `linear` / `ease` / `ease-in-out` 做过渡曲线
- 交互过渡禁 `@keyframes animation`(不可中断,反向操作会跳帧),用 `transition` 或 WAAPI
- 只动 `transform` / `opacity`,不动 `width`/`height`/`top`/`left`;禁止 `scale(0)` 起手(用 `scale(0.95)` + opacity)
- 退出比进入快(进 300ms / 出 200ms);同屏动效元素 ≤3 个且有 30–50ms 错峰
- `prefers-reduced-motion` 必须处理
### 终检(管「能不能交」)
过 checklist 的 P0/P1 + `craft/state-coverage.md`(状态穷举)+ `craft/anti-ai-slop.md`(反 AI 味,⛔ 不在本文件抄清单)+ 动效三问 + 交互清单逐行复测(表里每一行的「触发」与「反馈」都要真发生过,且与实现一致),并真渲染一次:
```bash
# 本机 Chrome 无头截图(2026-10-02 实测可用;门禁脚本补上后仍以脚本为准)
"/c/Program Files/Google/Chrome/Application/chrome.exe" --headless=new --no-sandbox --disable-gpu \
--hide-scrollbars --window-size=1440,900 --virtual-time-budget=3000 \
--screenshot="<Windows 绝对路径>/P1.png" \
"file:///<原型绝对路径,中文需 URL 编码>#/p/xxx"
```
- ⚠️ 两条坑:`--screenshot` 必须给 Windows 绝对路径(给相对路径会写进 Chrome 安装目录,回来找不到);中文文件名要 URL 编码
- 在 `1440x900` 与 `390x844` 两个视口各截一张;对外评审 / 交付留档只用视口帧,整页长图仅自检。⛔ 混用会出事:实测把长图交出去,移动端是 1:7.1 的长条,外部评估只能按长条理解布局,「首屏有没有主次」「坐得下几行」根本没被评审到
- 结构与排版仍要量(字号档数与相邻档差 / 正文档承载占比 / 标题大纲 / 按钮高度与实底分档 / 列对齐 / 对齐锚点 / 浮层可见关闭出口唯一):脚本缺失期间靠 DOM 取值人工量,结果直接抄进 `3d-审查报告.md` 的结构核对表。⛔ 不许目测截图下结论
- 「无法判定」一律按未通过对待(「判不了」≠「没问题」):浮层类在未打开态必然判不了,必须按 Gate-3 的打开态复测口径,手工打开每个浮层再数一遍并留痕
- 本项目的状态由路由与演示开关驱动,不用 `?state=`;状态可见性由 `browser-harness` 实测承担
### Gate-2 完成门
全部 `阻断` 项清零,`建议` 项逐条有结论:修掉,或显式写「已知不修 + 原因」。不接受「基本没问题」「应该差不多」「剩余都是小问题」。每条要么修,要么留痕。
### Gate-3 交付门(硬闸,任何挡位不可跳)
真实渲染后(浏览器打开,非只看代码)肉眼过八项:裁切 / 重叠 / 失真 / 失效控件 / 缺状态 / 响应式破损 / 控制台报错 / 字体回退异常。渲染截图已代劳其中的溢出与响应式破损,其余仍需人眼(截图查不出「点了没反应」)。
### 审计报告落盘
`designs/<项目>/3d-审查报告.md`,固定七节:范围 + 挡位 + 阻断项表 + 建议项表 + 状态覆盖核对表 + 结构核对表 + Gate 结论(含「本轮是否跑了脚本」一句)。
## 硬约束
- ⭐⭐ 骨架冻结,不许动板块(2026-10-06 用户定案):页面清单、每页板块、板块排列、跨页关系由②段《界面布局》定死。
⛔ 本段不许新增 / 移动 / 删除 / 合并板块。做不下来 / 觉得缺板块 ⇒ 回②段改《界面布局》,⛔ 不许就地加一块,就地加会让②段与原型不一致,下一个读原型的人拿到的是错的骨架。
可动的是板块内的视觉与交互实现(怎么排版好看、点哪有什么反馈、空态怎么呈现、响应式怎么变)。
⛔ 不许无视②段骨架另起一套。D0 的页面清单与每页板块必须与②段《界面布局》逐条对得上;对不上就停下来问②段要哪一版。
- 声明制:开工前、每进一个子步、每处偏离,都要声明(当前子步 / 依据文件 + 小节号 / 产出落点)。不许静默偏离。段末必须附偏离单,没有偏离单不得报完成。
- 设计工程供给默认是 `open-design`(三处:设计系统 / 工艺规约 / 原型模板,按需取用);冲突处以本段与 `DESIGN.md` 为准。不许跳过 Gate-1 或 Gate-3。
⚠️ `open-design` 不可得时(它只在工作区级,别的工作区可能没有)⇒ 见上方「不可得时的回落」:由 `oil-ui-pro` 顶方向探索与评审,但定调与工艺数值判据会没有来源,⛔ 不许凭感觉编。
- 页型先判再动手(2026-10-05 新增):3a 的 D0 必须写出「营销页 / 工具型页面 + 依据」。工具型页面零 `.eyebrow` / 零 `.lead` / 零 `.hero`,三者已从种子删除或降级为 `body.is-marketing` 专用。⛔ 判不出页型不许进 3b。
- `open-design` 的 `web-prototype` 种子是营销落地页骨架:⛔ 工具型页面不许直接套用其版式节奏与标题区结构;版式走本技能 `references/layouts-tooling.md`。这是一处「照供给做反而错」的例外,必须显式绕开。
- 先定死,再写码:设计契约与令牌表未落笔,不许写任何组件代码。
- 限载:一次只读 1~2 份供给原文,用完释放(`design-systems/` 153 套、`craft/` 13 份,全读必然互相稀释)。
- 不许覆盖旧版:重大改版先复制副本再改(`X.html` → `X v2.html`),旧版留在磁盘上以便对比。
- 3a 必须在 3b 之前,规范是原型的输入。
- 门禁脚本只作校验,不是原型生成工具。出原型只用 3b(脚本当前缺失,见 3d 的「门禁脚本现状」)。
- 原型必须可点通:每个按钮、每个跳转都真能走,不许留死链。可点通的清单就是 D0 契约的「交互清单」,清单之外的可点元素 = 未登记元素,必须回 D0 补登记或改成静态,⛔ 不许「清单没写但先做着」。
- 交互清单是唯一交互真相源(2026-10-02 新增):段名已改为「界面交互」,故交互判据只许写在契约第十二字段里。3b 实测、3c 会诊、3d 终检都引用同一张表,⛔ 任何一处另立一份交互清单(另建文档、另写章节、另做交互规范)都算第二真相源,这正是记忆里「同一事实多处落点必然打架」的成因。
- 3b 交付前必须用 `browser-harness` 跑实测;脚本查不出死按钮,未跑实测不得进 3c,不得报完成。
- 3c GPT 会诊必做:原型初稿 + 实测过后立刻做,不许用「我觉得没问题」代替。回答原文必须落盘,不得伪造或转述失真;未取得外部审查时要在 `3c-GPT会诊.md` 与收尾里明示,未取得不等于已通过。上传前先脱敏。
- Gate-2 / Gate-3 不许口头通过:阻断项要么修完,要么留痕;「未取得审查」不等于已通过。
- 原型的说明区与演示引导不是本段的事:各状态下的「场景 / 从左到右流程图 / 步骤说明 / 演示引导」由第④段 `stage-proto-doc` 负责。3d 完就交付原型本身。
- `DESIGN.md` 落 `docs/pm/<项目>/`,不放仓库根。
- 段内子步之间不反问,做完直接进下一个子步。只有三种情况停:信息不足且查不到、破坏性/不可逆动作、用户显式要求。
- `<项目>` 按 `product-planning` 的「项目与路径约定」定;定不出来就停下问用户,不许猜。
## 完成标准
- 声明制走完:开工、每个子步、每处偏离都有声明;偏离单已附,无静默偏离
- 挡位已声明(快速 / 标准 / 严格)
- 页型已判(营销页 / 工具型页面 + 依据);工具型页面零 `.eyebrow` / 零 `.lead` / 零 `.hero`,且 `layouts-tooling.md` §5.5 五条逐条过完(含「标题区零从属小字」的 DOM 取值核对)
- `docs/pm/<项目>/DESIGN.md` 存在,含设计契约(十二个字段,含结构骨架、交互清单与重复项的信息量)与令牌表(三层 token 结构,含组件规格、容器与对齐锚点、浮层只许一个可见关闭出口,全为具体值),且 Gate-1 全部自检项结果写在文件末尾
- 原型 HTML 单文件自包含、双击可开,含全部适用状态(状态穷举六项逐条有结论)
- 原型经真实渲染验证过,控制台无报错
- 每个按钮都经 `browser-harness` 真点过,有实测回报(含控制台报错原文与死按钮清单)
- 静态收口已过(脚本在位 ⇒ 已跑且阻断清零、有输出留档;脚本缺失 ⇒ 已按 checklist 人工过,并在报告中写明「未跑脚本 + 原因」)
- 渲染终检已过(溢出 0 / 对比度按真实像素达标 / 结构与排版量测无阻断且无「无法判定」项 / 两个视口的截图都存进 `_gate_shots/`),或已写明为何不适用。量测数字以 DOM 取值与脚本输出为准,不得用「目测」代替
- 每个浮层都手工打开数过可见关闭出口(`== 1`),`Esc`/点遮罩能关、焦点锁在层内且关闭后回到触发按钮,结论连同触发路径写进 `3d-审查报告.md`。「代码里看着只有一个」不算
- 对外提交/交付留档的截图只用视口帧(`_gate_shots/<视口>.png`);`_full/` 下的长图不得作为评审输入
- `designs/<项目>/3c-GPT会诊.md` 存在,含提问原文、模型回答原文与逐条处置(采纳项已改完并复测);未取到外部审查的已明示
- `designs/<项目>/3d-审查报告.md` 存在,含阻断/建议两张表 + 状态覆盖核对 + Gate-2/3 结论
- Gate-2 与 Gate-3 均已通过(书面结论,非口头)
- 重大改版:旧版文件仍在磁盘上,且收尾给出新旧差异(改了什么 / 为什么 / 代价)
## 反面清单
- ⛔ 就地增删板块(2026-10-06 新增):觉得骨架不合适就自己加一块 / 挪一块 / 删一块。骨架归②段,要改回②段改,本段只能动板块内的视觉与交互实现;就地改会让②段与原型不一致
- ⛔ 无视②段骨架另起一套(2026-10-06 新增):D0 的页面清单与每页板块必须与②段《界面布局》逐条对得上
- 先出原型再补规范(违反铁律 1)
- 违反限载:一次把全部 `design-systems/` 或 `craft/` 原文读进上下文(一次只许 1~2 份)
- 不判页型就照 `web-prototype` 种子做,会把后台做成营销页(标题上下各一行小字);或拿 `layouts.md` 的营销骨架顶替工具型版式
- 只画了 success 态就当状态齐了(违反铁律 3)
- 跳过 Gate-1 或 Gate-3;或拿「我觉得还行」当 Gate-2 结论
- 在无脚本时把「没跑」写成「已过」;或从零手写 `<section>` 不套骨架、把临时样式内联在标签上
- 覆盖旧版:重大改版直接改原文件,把可对比的旧版弄丢
- 把 `DESIGN.md` 写到仓库根(多项目会互相覆盖)
- 原型里有死按钮或空链接;只用脚本判过就当实测过(脚本查不出死按钮)
- 拿默认配色和系统字体糊一个「能看」的界面交差
- 跳过 3c GPT 会诊直接进 3d,或只把代码片段贴进对话框、回答没出完就取走当完整建议
- 把模型建议当命令照抄,改坏与 `DESIGN.md` 的一致性;或伪造「GPT 说……」却拿不出回答原文
- 把「未取得外部审查」当已通过
- 工具型页面做入场编排;用 `linear`/`ease` 做过渡曲线;用 `@keyframes` 做交互过渡
- 越界回头改②段的功能取舍(那是第②段)——⚠️ 但「骨架缺板块」是例外:必须回②段改,⛔ 不许就地在原型里加
- 顺手把原型说明文档 / 演示引导写了(那是第④段 `stage-proto-doc`)
## 待补(2026-10-02 登记 · 2026-10-06 更新)
- ~~`execution-runbook.md` 的必读表全部指向已不存在的文件~~:已于 2026-10-02 修复(用户定案「第三部分用 open-design」后执行)。原 D0/D3/D4/D5 四行引用的 `ui-page-design/references/0X_*.md` 与 `vendor/*` 已全部重接:`D0 → runbook §2.1`(十二字段留在本项目)|`D0 判据 → craft/state-coverage.md`|`D1 → open-design/design-systems/ 选套`|`D2 → design-templates/web-prototype/`|`D3 → craft/typography.md` + `typography-hierarchy.md`|`D4 → craft/animation-discipline.md`|`D5 → checklist.md` + `craft/anti-ai-slop.md` + `craft/accessibility-baseline.md`。
同时做了一次能力去向盘点(判据逐条归属,不做适配搬运):craft 接住 6 类(状态穷举 / 字阶 / 配色 / 动效 / 反 AI 味 / 无障碍与表单校验);接不住 3 项,必须留在本项目 —— 设计契约十二字段 / 结构骨架 / 交互清单;5 份 vendor(`ui-ux-pro-max`/`frontend-design`/`apple-design`/`anti-ui-slop`/`web-design-guidelines`)无需保留。
⛔ 修复后的纪律:判据来源必须单一可查。某条判据若在 runbook 与 craft 各有一份且口径不同,以本项目追加条为准,并在 §3.4 显式标注「本项目追加」。
- ~~工具型页面的版式库~~:已于 2026-10-02 补齐。新建 `references/layouts-tooling.md`,四类形态各给一份可判定骨架:行式列表 / 表格式清单 / 详情面板 / 主从侧区。每类带形态判定句(判不出形态就去改 D0 `结构骨架`)+ 可机械核对的判定要点(如「一屏可见行数 ≥6」「数字列右对齐」「表头必须写判据来源」「未跑必须能作为取值存在」)。已接进三处:3b 正文(形态判定先行)|runbook §1 必读表 D2 行(工具型另读)|runbook「⛔ 四样 craft 接不住」表(第四行)。
⭐ 红线:⛔ 不许拿营销页骨架顶替工具型,那是「没做形态判定」的默认行为,等于退回 18 轮前的病根。
- ~~①②段的同型改造~~:已于 2026-10-02 完成。四段已改名为「①产品需求 / ②产品功能 / ③界面交互 / ④原型说明文档」,并各自重划了子步职责(见 `product-planning` 的四段表与交接口表)。
- ⛔ 骨架归属已于 2026-10-06 反转:本节原口径是「页面结构归本段,唯一落点是 D0」;用户定案改为「②段钉骨架,③段做皮肉」(原话:页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子)。⇒ `必要内容` / `结构骨架` 两个字段口径已调整,从「本段独立裁决」改为「在②段给定骨架之内决定视觉与交互实现」。详见本文件开头「⭐⭐ 页面骨架不归本段了」块。
⚠️ 待核:`references/execution-runbook.md` 的 D0 段仍写着旧口径(「独立推导几个页面」),需同步改。另,`gate-<段号>-<段名>.md` 本项目从未建立,属存量缺口。
@@ -0,0 +1,392 @@
# ③段执行手册(固化流程)
`SKILL.md` 写规则,本文件写照着走的顺序与验收。跑③段时按本文件逐步走;任何一步偏离,必须当场声明并记入第 6 节偏离单。
> 本手册为什么存在:③段 3b 交付了原型,却走了别的主流程、没读依据文件、执行时也没声明,用户直到追问「基于哪个 skill」才知道。所以第一条是声明制,第二条是逐步写明依据哪个文件的哪一节。
> ③段的设计工程供给是 `open-design` 技能,按技能名引用,不写死相对路径(技能位置一变就失效且不报错)。流程规则与契约字段留在本手册与 `SKILL.md`。两者分工见第 1 节末的「⛔ 四样必须留在本项目」。
---
## 0. 声明制(核心,唯一不可商量的一条)
开工前先输出一段流程声明,四个字段:
| 字段 | 内容 |
|---|---|
| 当前段与子步 | 例:③段 / 3b 原型(D2 构建) |
| 主干与挡位 | 例:供给 `open-design` / 挡位「标准」(或「快速」) |
| 依据文件 | 本步照的是哪个文件的哪一节,写精确路径 + 小节号 |
| 产出落点 | 本步会写哪个文件 |
每进一个子步重发一次这四行(子步之间不反问,但必须声明)。
偏离时当场声明:
```
偏离:<原要求> → <实际做法>;原因:…;影响:…
```
并记入第 6 节。不许静默偏离,不许事后补说。
---
## 1. 必须加载的文件(按阶段加载,用完释放)
> ⚠️ 2026-10-02 已重接必读源。原必读表指向 `ui-page-design/references/02_~05_*.md` 与 `vendor/*`,该目录实测已不在磁盘上(工作区与全局技能根两处都查过),照旧表走 D0 读不到任何一份必读文档。现改为直接引 `open-design` 技能(按技能名引用,不写死相对路径)。
> 改动原则:判据类全部交出去,只保留 craft 没有对应的东西。
开工前必读两个页面设计技能的位置与分工:`open-design/craft/README.md`(读一份就知道有哪些规约、怎么按需取),以及本段 `SKILL.md` 的两技能分工表。
其余不许一次全读。同一时刻只读 1~2 份,用完释放;`design-systems/` 153 套、`craft/` 13 份全读必然互相稀释。
| 阶段 | 读什么 | 为什么 |
|---|---|---|
| D0 | 本文件 §2.1(设计契约十二字段) | craft 无对应 —— 字段清单是本项目的东西,只在这里 |
| D0 判据 | `craft/state-coverage.md` | 状态六项的逐项判据 |
| D0 页型(2026-10-05 新增) | 本文件 §2.1 步 6(先判页型:营销页 / 工具型) | 挑版式骨架之前必须先判。判错页型 = 拿营销骨架做后台,是「标题上下两行小字」的唯一根因 |
| D1 | 选定套 `DESIGN.md` + `tokens.css` + `components.html`;可选 `craft/color.md` | 定调来自选套,不来自检索脚本 |
| D1 多方向比选(按需) | `oil-ui-pro` 的 `references/design-direction.md` + `references/style-explorer.md` | 要「拉开几个方向让用户挑」时的方向卡与对比页(另一技能,平行取用) |
| D2 | `open-design/design-templates/web-prototype/SKILL.md` + 同目录 `references/layouts.md`(营销页)/工具型页面另读两份:本技能 `references/layouts-tooling.md`(HTML 骨架与落地自检)+ `open-design/design-templates/web-prototype/references/tooling.md`(四形态判定句与通用红线纲要) | 「先选定美学方向再写码」+ 版式骨架。⭐ 落地页那 8 个骨架不适用于工具型(hero/features/stats/quote/cta/log/pricing),工具型版式只在本项目那份里,不许拿营销页顶替。⚠️ 两份工具型文件是「骨架 vs 纲要」分工,判据不重写(判据正文在 `layouts-tooling.md`) |
| D3 | `craft/typography.md` + `typography-hierarchy.md`(+ 按需 `color.md`) | 字阶定值表与层级判据(取代原 `03_视觉与骨架规则.md`) |
| D4 | `craft/animation-discipline.md` | 动效三问、弹簧二参数(取代原 `04_动效与手势规则.md`) |
| D5 | `design-templates/web-prototype/references/checklist.md` + `craft/anti-ai-slop.md` + `craft/accessibility-baseline.md` | 终检清单、反 AI 味、无障碍底线(取代原 `05_审计门禁与输出格式.md`)。⚠️ 工具型页面必须过 checklist 的 `P0-A 标题区纪律`(2026-10-05 新增,五条) |
| D5 独立评审(按需) | `oil-ui-pro` 的 `references/visual-review.md` + `references/tools.md` | 要「没看过制作过程的评审打分」时的协议与截图取证(不替代本段 Gate) |
| 每步 | `docs/pm/<项目>/DESIGN.md` | 本项目绑定规范;原型只许引它的 token |
⛔ 四样东西 craft 没有对应,必须留在本项目(本文件 / `SKILL.md` / `references/layouts-tooling.md` 里):
| 留什么 | 为什么 craft 接不住 |
|---|---|
| 设计契约十二字段 | craft 是通用工艺,不定义字段清单;D0 字段是本项目的产物 |
| 结构骨架(骨架档 / 区块划分 / 密度目标) | 实测 grep 全部 craft 只有零散的 layout 提及,无成体系的骨架规则 |
| 交互清单(契约第十二字段) | 同上 —— 交互的判据在 craft 里只散见于 `state-coverage` 与表单章,不构成一份逐元素清单 |
| 工具型版式库(行式列表 / 表格式清单 / 详情面板 / 主从侧区) | `web-prototype/references/layouts.md` 的 8 个骨架是落地页/营销页向;craft 里零散提及不成体系。工具型数据密集界面的版式无任何现成来源 ⇒ 本项目自建 `references/layouts-tooling.md` |
定调来源唯一:从 `open-design/design-systems/` 选一套(153 套),按候选套 `DESIGN.md` 第 1 章 `Visual Theme & Atmosphere` 认准类型词。
本 skill 的 `references/` 只放流程规则(契约字段 + 执行顺序 + 门禁),不放任何风格底子。既有项目 `DESIGN.md` 里凡引用旧风格来源(`ui-ux-pro-max` / `minimalist-ui` / 皮肤族)的行,重跑 3a 时一律改写为「选定套名 + 留痕对照」。
已整体移除的 vendor,不必再找:`ui-ux-pro-max`(被 153 套设计系统取代)、`frontend-design`(D1 已改选设计系统)、`apple-design`(动效已由 `craft/animation-discipline.md` 覆盖)、`anti-ui-slop`(按本项目收录标准「依赖外部服务」整体移除,判据由 `craft/anti-ai-slop.md` 接管)、`web-design-guidelines`。
⚠️ 判据一旦落进本项目的条款,就不再依赖原出处的存续。上面五份的可执行内容已在 `SKILL.md` 铁律、`craft/` 与本文件里,删掉原出处不影响执行。
---
## 2. 3a 视觉规范(D0 锚需求 + D1 定调 + Gate-1)
### 2.0 供给核对(步 −1,每轮必做)
`open-design` 是外部供给,会被上游更新,而本项目的 `DESIGN.md` 是上一次供给状态下产出的。不核对就长期拿旧调性当准绳:换套后门禁判不过,却不知道哪条变了。
| 步 | 动作 | 验收判据 |
|---|---|---|
| −1 | 确认三处供给仍在位:`design-systems/`(并记录本项目选定套名)、`craft/`、`design-templates/web-prototype/` 都存在 | 三处都在位;`DESIGN.md` 记录的上次套名已找到 |
| −1b | 套名一致 → 直接进 D0 | 开工声明里写一句「选定套 `<套名>`,与项目记录一致」 |
| −1c | 套名不一致或供给缺失 → 停下报告,不许拿别的套顶上,也不许凭记忆写风格 | 产出供给变更清单(逐条:变了什么 → 本项目现状 → 要改什么),在会话里呈现并获用户确认后才改 `DESIGN.md` |
> 不要静默跳过:一致也要在开工声明里写一句套名;不一致必须停下,这是硬闸。
### 2.1 D0 锚需求 → 设计契约
> ⭐⭐ 口径(2026-10-06 用户定案):骨架归②段,本段做皮肉。
> ②段《界面布局》里的页面清单、每页板块、板块排列、跨页关系就是骨架定稿。本段不许增删移动板块,要改回②段改。本段在给定骨架内决定视觉与交互实现。
> 理由(用户原话):「页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子」。
> ⛔ 仍归本段的:配色 / 字体 / 间距 / 组件样式 / 动效 / 板块内的排版与交互行为 / 响应式。
读②段时取四样:骨架(页面清单 + 每页板块 + 排列 + 跨页关系)、必须在界面上发生什么、红线、禁用条件与状态流转。
骨架是冻结输入,其余三样是功能约束。
按本节清单产出设计契约,十二个字段:页面职责(「让<谁>在<多久>内<完成什么>」)、主用户、主操作(全页唯一,写了两个就该拆页)、必要内容(核对面)、重复项的信息量(行式列表 / 卡片网格时逐条列出:每个重复项除「主标识 + 动作」外必须带 ≥1 条次级信息)、结构骨架(翻译面:把②段板块清单翻成骨架档 + 列宽 + 密度目标)、交互清单(2026-10-02 新增:逐个可点元素一行,四列「元素 / 触发 / 反馈 / 何时不可点」;动效参数归 3d、视觉样式归令牌表、「这个状态有没有」归下一字段状态覆盖)、状态覆盖六项逐条、组件来源(优先沿用既有)、响应式行为(写布局怎么变,不写「自适应」)、明确拒绝的模式(≥3 条可判定)、验收标准(可观察可判定)。
两个字段的分工(2026-10-06 调整):`必要内容` 是核对面,`结构骨架` 是翻译面。
> `结构骨架`(翻译面)怎么落(规则留在本手册,craft 无对应:实测 `craft/` 只有零散 layout 提及,不构成骨架规则):
> ⭐ 输入是②段的板块清单,本字段做的是翻译,不是发明。
> ① 骨架档:单列 / 主区+侧区 / 主区+侧区+辅助区,选一档并写清理由。有 ≥3 个并列目的地且宽屏 ≥1024 时优先侧栏,但侧栏是项目级取舍,不许写死成「必须没有」。
> ② 板块落位:把②段给的板块按顺序放进骨架档,每块给一个文字标题(页面 ≥2 个带文字标题的板块)。
> ③ 密度目标:宽松(24–96)/ 标准(16–64)/ 密集(8–32),同一页面不得混用两档。
> ⛔ 不许在②段板块清单之外加块,缺板块回②段改。
> 板块先分、内容后放,顺序反了就只能得到一张平铺的长条。
> `必要内容`(核对面)的判据不变,但用途变了。
> 判定标准仍是模板里那句「只留缺了就做不成事的」。
> 逐条问:这条内容删掉,主操作还做得成吗?做得成,它就不该主屏常驻(②段分档表已定档位)。
> ⚠️ 本段不得以 `必要内容` 为由增删②段已定的信息档位。档位归②段,本段只做落位核对。
> 本段该做的是:核对②段的「主屏常驻 / 可点入」分档,在本段自己的视觉与交互实现里兑现它(常驻的零点击可见、可点入的一次点击可达)。
> 危险信号:`必要内容` 与②段分档表逐条对不上(条数差很多、档位被改)→ 停下来说明,不自行改档。
> 反面样例(本项目真实踩过):版本列表的 `必要内容` 只该有「`vN` + 语义名 + `第 N/5 步` + 状态徽章 + 时间戳 + 行尾当前动作」,实际却把每行那句解释性长文案(「目录建好了,还没有登记原始需求。」)也当成必备内容渲染上去,于是每行多出一整句、页面变成信息墙。
| 步 | 动作 | 验收判据 |
|---|---|---|
| 0 | 读②段《界面布局》,把骨架当冻结输入取走 | 页面清单与每页板块逐条抄进契约,未增删移动 |
| 1 | 产出设计契约 | 十二个字段全填,无空、无「待定」;有重复项时「重复项的信息量」已逐条列出次级信息;交互清单覆盖页面上每一个可点元素 |
| 2 | 状态覆盖逐项给结论 | 六项要么勾选,要么写「不适用 + 理由」 |
| 3 | 核对②段分档表:每条信息的「主屏常驻 / 可点入」 | 与②段分档表逐条对得上;档位未被本段改动(要改回②段) |
| 4 | 落 `结构骨架`:把②段板块清单翻成骨架档 + 列宽 + 密度目标 | 骨架档给了理由;板块 ≥2 个且每个有文字标题;板块清单来自②段、未新增;密度目标只取一档 |
| 5 | 自检块间距 ≥ 块内间距的 2 倍 | 块间 32/64、块内 8/12/16,比值 ≥2(写进令牌表) |
| 6 | 判页型(2026-10-05 新增,D2 之前必做):写一句「本页是营销页还是工具型页面,依据是什么」 | 结论明确且给了依据。判不出来不许进 D2,停下来回改 `结构骨架` |
> ⭐⭐ 步 6「判页型」是 2026-10-05 新增,补的是一处从未有过落点的缺口。
> 病灶实测:本项目原型长出「标题上方一行小字眉标 → 大标题 → 下方一行灰色副标题」的三段式。
> 根因不在③段执行:`open-design` 的种子 `assets/template.html` 是营销落地页骨架,CSS 里自带 `.eyebrow`(眉标)与 `.lead`(副标题),`layouts.md` 的 8 个骨架里有 6 个在用,而当时的 checklist 甚至明令保留(「Lead text under 56 ch … don't override」)。
> 于是照种子做 = 结构全绿 + 排版难看:判据判的是「类名合法」,判不出「这不是工具界面的排版」。页型不判,后面用什么设计系统、怎么打磨都救不回来。
>
> 两个页型的目的不同,骨架因此不能通用:
> - 营销页(落地页 / 首页 / 定价页):目的是说服,走「主张 → 论据 → CTA」,可用 hero / eyebrow / lead。
> - 工具型页面(后台 / 控制台 / 列表 / 详情 / 看板 / 表单):目的是完成一件工作,走「数据 + 操作」,零 `.eyebrow`、零 `.lead`、零 `.hero`(三者已在种子中删除或降级为 `body.is-marketing` 专用)。
>
> 判别口径:页面要用户「下决心去做某事」是营销页;要用户「把这件事做完」是工具型页面。
> ⚠️ 判不准时按工具型处理(默认取严)。
### 2.2 D1 定调 → 令牌表
从 `open-design/design-systems/`(153 套)选一套,不凭感觉编、不全读:
| 步 | 动作 | 验收判据 |
|---|---|---|
| 1 | 按本项目的页面类型挑候选(工具型数据密集界面 ⇒ 认 `data-dense, enterprise` 这类描述) | 已列出 2~3 个候选套名 |
| 2 | 读候选套 `DESIGN.md` 第 1 章 `Visual Theme & Atmosphere`,认准写明该类的那一句 | 选定一个套名,理由写进会话声明 |
| 3 | 选定后读三件:`DESIGN.md`(调性 / 色值 / 字号刻度 / 间距刻度 / 动效基调)→ `tokens.css`(圆角与阴影只有这里)→ `components.html`(组件实际长相) | 三件读过,数值来源可指认 |
| 4 | 没找到匹配的套 ⇒ 换一个类型词再挑一次;仍不行就直说「未找到匹配」 | 不许把泛化结果当结论落盘 |
> ⚠️ 153 套分两代模板(A 组 / B 组章节名不同),按自己那套的章节读,不必统一。
> ⚠️ 工具型页面的版式不在模板里:`web-prototype/references/layouts.md` 那 8 个骨架是落地页 / 营销页向,工具型页面只适用 Layout 7 日志列表与 Layout 8 对比表;其余套上去会把后台做成营销页。工具型版式由 D0 的 `结构骨架` 决定,不从模板抄。
产出令牌表:风格名、来源(选定套名 + 套的章节)、浅深色色值、字体(标题字体是关键项)、间距两档(主刻度 `4/8/16/24/32/64` 供布局,控件层微网格 `2/4/6/8/12` 仅供按钮内衬、徽章内衬、图标间隙、开关与进度轨微几何)、圆角(按组件类各一个值)、字阶定值表(七档各一个 px,不是区间)、高度层级(每层都有多层叠层值)、布局脚手架(骨架档落到具体列宽 + 窄屏变化)、组件规格(按钮三档 + 卡片两档 + 输入框 + 徽章的具体高度 / 内衬 / 字号)、动效基调。全部为具体值,禁止「待定」;每档只许一个定值。
> 数值判据来自 `craft`:`typography.md`(刻度)、`typography-hierarchy.md`(层级行为)、`color.md`(配额与对比度,正文 4.5:1 / 大字 3:1 / UI 组件 3:1)。这三条定「怎么定」,选定套的 `tokens.css` 定「定成多少」。
> 字阶必须是定值表,不是区间。实测病灶:令牌表写「标签 12–13px」,代码落到 12.5px —— 既不在刻度上,又与正文档(14px)只差 1.5px,两档合计承载 68% 文字却拉不开层次。相邻档差 ≥2px,且每一档要承载 ≥40% 文字节点,否则等于没有分档。
> 间距为什么要有第二档:实测某页 55% 的 padding 落在 `3/5/9px`,全是按钮内衬与徽章内衬;只有一套主刻度时,例外会变成主路径。微网格取偶数,`3px` / `5px` 等于没有网格。
> 组件规格是「草稿感」的分水岭。同一屏里按钮高度不一、内衬不一、字号不一,观感立刻散。分档靠填充色 + 高度,不靠字号;同一父区块内主档 ≤1 个(多步流程每步 ≤1 个);实底按钮底色至少 2 种(全是同一个实底色,等于没有分档);卡片内衬只许两档(密卡 / 宽松卡),同层级卡片圆角与内衬必须同值。
### 2.3 落盘 `docs/pm/<项目>/DESIGN.md`
令牌表内容并入本项目既有的三层 token 结构:`primitive → semantic → component`。组件层只引语义层,语义层只引 primitive,无孤立 token。设计契约作首节。
`DESIGN.md` 是原型的绑定规范,原型只许引用它的 token。放项目目录、不放仓库根。
### 2.4 Gate-1 方向门(硬闸,任何挡位不可跳)
按 `SKILL.md` 的 Gate-1 自检表逐项自检,并把结果写在 `DESIGN.md` 末尾:
| # | 检查项 | 通过条件 |
|---|---|---|
| 1 | 设计契约 | 十二个字段全部填写,无一为空或「待定」;有重复项时「重复项的信息量」逐条列出次级信息;交互清单四列齐全,且表外的可点元素为 0 |
| 1b | 页型判定(本项目附加,2026-10-05 新增) | 已写出「营销页 / 工具型页面 + 依据」;工具型页面的 D0 里零 `.eyebrow` / 零 `.lead` / 零 `.hero` |
| 2 | 结构骨架(翻译面,2026-10-06 口径调整) | 骨架档 / 板块落位 / 密度目标三者已写;板块 ≥2 个且每个有文字标题;板块清单来自②段、逐条对得上、未新增;②段分档表的每条信息都有落位 |
| 2b | 骨架未漂(本项目附加,2026-10-06 新增) | D0 的页面清单与每页板块与②段《界面布局》逐条对得上;本段未增删移动任何板块 |
| 3 | 状态覆盖 | 六个状态逐项有结论(勾选,或「不适用 + 理由」) |
| 4 | 令牌表 | 色值 / 字体 / 间距两档且适用面已分开写 / 圆角 / 阴影全为具体值 |
| 4b | 字阶定值表 | 七档每档一个 px 定值(不是区间);相邻档差 ≥2px;每档只许一个定值 |
| 4c | 高度层级 | 每层都有多层叠层值;同层级同值 |
| 4d | 布局脚手架 | 骨架档已落到具体列宽;窄屏变化写具体 |
| 5 | 组件规格 | 按钮三档 + 卡片两档 + 输入框 + 徽章均为具体值;同一父区块内主档 ≤1;实底底色 ≥2 种 |
| 6 | 反 slop | 无紫→粉渐变、标题未用禁用字体、强调色已写明允许位置 |
| 7 | 拒绝清单 | ≥3 条,且每条可判定 |
| 8 | token 引用完整性(本项目附加) | 语义层只引 primitive、组件层只引语义层、无孤立 token |
| 9 | 分档兑现(本项目附加,2026-10-06 口径调整) | ②段分档表每条信息的「主屏常驻 / 可点入」在实现里兑现(常驻零点击可见、可点入一次点击可达);档位未被本段改动(要改回②段) |
| 10 | 供给核对(本项目附加) | 三处供给已确认在位;选定套名与 `DESIGN.md` 记录一致;不一致时供给变更清单已获用户确认并写入修订记录 |
任一项不过 → 停在 3a 补齐,不进 3b。
> 对比度怎么算:静态按 CSS 变量叠加后的计算值不可靠,须在 D5 渲染阶段按真实像素复测(判据见 `craft/color.md`:正文 4.5:1 / 大字 3:1 / UI 组件 3:1)。
> 不许拿 `npx @google/design.md lint` 当关卡(本机实测完全不可用:alpha + clack 交互库,非 TTY 管道下静默且 exit 0,见 `SKILL.md`)。也不要因它无输出就认为通过。
---
## 3. 3b 原型(D2 构建)
### 3.1 读谁、照什么走
读 `open-design/design-templates/web-prototype/SKILL.md`,按它「先选定一个明确的美学方向(允许极端,但必须自洽)再写码」的路线构建。方向定死在 `DESIGN.md` 的令牌表里,不许边写边调样式(铁律 1)。
### 3.2 工作形态 vs 交付形态(本项目已知偏离,每次都要声明)
- `web-prototype` 的默认产出是单文件 HTML、自包含、双击可开。这也是交付形态,最终必须满足
- 本项目的原型用 React + Babel 多文件开发(`index.html` + 若干 `.jsx`),经 HTTP 服务预览(`file://` 下 Babel 取不到外部 `.jsx`,会静默失败)
- 编排:开发期按多文件走 + HTTP 预览,3b 收尾时内联成单文件交付
- 无宿主工具可代劳,内联必须手工做:把 React / ReactDOM / Babel 用本仓本地副本内联(保离线),把每个 `<script type="text/babel" src="…">` 换成内联 `<script type="text/babel" data-presets="react">`,并去掉所有 unpkg CDN 引用。这是一处持续偏离,每次都要声明。
内联后必须自检三条:无 `unpkg` 残留、无 `src="v2/`(外部 jsx 引用)残留、根部挂载点仍在。任一不满足即构建失败。
### 3.3 输出红线(命中即返工)
来源:数值判据取 `craft/`(`typography.md` + `color.md` + `accessibility-baseline.md`),反 AI 味取 `craft/anti-ai-slop.md`,版式自查取 `web-prototype/references/checklist.md`。下列判据不在 craft 里重复抄写,只写本项目追加的那几条。
- 间距只用令牌表登记的刻度值;确需中间值(如紧凑表格行高)在令牌表登记,不许临时拍。刻度外值混用是「廉价感」的主要来源(判据见 `craft/typography.md`)
- 数字列用 `font-variant-numeric: tabular-nums`(否则刷新时宽度跳动,表格跟着抖)
- 禁单层死黑重阴影,用多层叠层 + 1px 半透明边框。层级按内容需要,不设人为上限;判的是「同层级是否同值」,不是「层级总数是否超标」
- 强调色全屏面积 ≤5%(判据见 `craft/color.md`);状态色只用红绿黄三系,不做装饰
- 标题禁用 Inter / Roboto / Arial / `system-ui`(正文可用);中文字重别超 600(`craft/typography.md`)
- ⭐ 结构四条(本项目追加,craft 无对应):① 区块 ≥2 个且每个有文字标题(图标 / 徽章 / 分组容器不替代标题),标题不跳级;② 实际在用字号档 ≥3 档且相邻档差 ≥2px,正文档落在 14–16;③ 块间距 ≥ 块内间距的 2 倍;④ 按钮有主次分档且同屏主档 ≤1(多步流程每步 ≤1),分档靠填充色 + 高度
- 反 AI 味逐条过 → `craft/anti-ai-slop.md`。⚠️ 「卡片墙」判的是「同一圆角 + 同一阴影 + 所有模块视觉权重完全相同」的等权卡片墙,不是「用了卡片」。有主次、有分组、层级不同的卡片是合法结构手段,别把卡片当禁区整片封掉
- 状态穷举六项 → `craft/state-coverage.md`(loading / empty / error / success / disabled / 无权限,逐项判据在那份)
- 布局 Grid 管栅格、Flex 管行内对齐;移动优先,断点 `<640` / `640–1024` / `>1024`
- 防溢出三件套:grid 写 `minmax(0,1fr)`(不是 `1fr`)、flex 子项加 `min-width:0`、表格 / 代码块外层 `overflow-x:auto`
- 交互态齐全:`hover` / `active` / `focus-visible` 三态都要写,焦点环不许被 `outline:none` 抹掉(`craft/accessibility-baseline.md`)
- 规范 HTML:非空元素显式闭合、属性双引号
- 文件名要有描述性;集中放 `designs/<项目>/`,不散落仓库根
### 3.4 本项目附加纪律(`open-design` 未涉及)
- 重大改版必须复制副本再改(`X.html` → `X v2.html`),不许覆盖旧版。旧版留在磁盘上以便对比(版本管理主线需要可追溯)
- 原型里的状态由路由 + 演示开关驱动,不是 `?state=` URL 参数;实测时按这个来
### 3.5 实测硬关卡(未过不得进 3c)
用 `browser-harness` skill,以 D0 契约的「交互清单」为唯一清单逐个真点:每行按「触发 → 反馈」实跑;空 / 加载 / 错误 / 失败重试四态都要走到;回报控制台报错原文与「点了没反应」的元素清单。
- ⛔ 本步是唯一的可点通过道。不许因「没有自动机检」就跳过或降级;实测不过就不许进 3c
- 实测一律走 `browser-harness`(浏览器入口 9333),禁用 Trae 自带浏览器工具
- React 受控输入用 `fill_input(selector, text)` 填,不要用 `type_text()`(后者绕过框架监听器,提交按钮会一直是禁用态)
- 测前禁缓存(`Network.setCacheDisabled`),否则会读旧 `.jsx`
- 顺序也是关卡:3a 未过 Gate-1 不进 3b;未跑实测不得进 3c
---
## 4. 3c GPT 会诊(必做,顺序在 3d 之前)
触发点:3b 原型初稿和实测都过了,立刻做。步骤、提问模板、四列处置表、输入边界、异常情况见 `SKILL.md` §3c,不在此重复。
为什么必须有这一步:3a / 3b 全是本地确定性检查,没有外部视角,这一步补的正是它补不了的那块。
三道不可松的口子:① 用附件上传原型 HTML,不许把上万字符代码粘进输入框;② 等回答出完再取原文,不许读一半;③ 上传前脱敏(密钥、真实数据、内网地址换占位符)。
取不到时:不许假装跑过。落盘写明「本轮未取得外部审查」,并在段末明示 —— 未取得不等于已通过。
处置:采纳要给理由,与 `DESIGN.md` 或②段冲突的写清为什么不采纳。采纳项在 3d 之前改完,并回到 3b 的实测清单把这些改动再点一遍。
---
## 5. 3d 审查与打磨(D3 收口 + D4 动效 + D5 终检 + Gate-2/3)
### 5.1 D3 收口(管"写得对不对")
对照 `open-design/design-templates/web-prototype/references/checklist.md` + `craft/typography.md` / `typography-hierarchy.md` / `color.md` / `accessibility-baseline.md` 逐条过。
> 🔴 本步一律人工过(2026-10-02 用户定案:不重要的相关内容一律删,不建替代脚本)。判据有三处来源,不许跳过任一处:
> ① `SKILL.md` 的 Gate-1 自检表 | ② `craft/` 四份规约 | ③ 下列本项目追加判据。
本项目追加判据(craft 无对应,必须留在这里):
- 结构四条:① 区块 ≥2 个且每个有文字标题,标题不跳级 | ② 实际在用字号档 ≥3 档、相邻档差 ≥2px、正文档落在 14–16 | ③ 块间距 ≥ 块内间距的 2 倍 | ④ 按钮有主次分档且同屏主档 ≤1
- ⭐ 工具型页面五条(本项目追加,2026-10-05):标题区零从属小字 | 导航带标签 | 并列卡有主次 | 分组不靠边框 | 无假控件。逐条判据与机械核对法在 `references/layouts-tooling.md` §5.5,不在此重复展开
⚠️ 其中「标题区零从属小字」与 `web-prototype/references/checklist.md` 的 `P0-A` 是同一判据的两处落点:checklist 管「怎么写」,本节管「怎么量」,口径一致,判据正文只在 `layouts-tooling.md` §5.5.1
- 间距只用令牌表登记的刻度值,确需中间值先登记
- 数字列用 `font-variant-numeric: tabular-nums`(否则刷新时宽度跳动)
- 禁单层死黑重阴影,用多层叠层;层级按内容需要,判的是「同层级是否同值」,不是「层级总数超标」
- 防溢出三件套:grid 写 `minmax(0,1fr)`、flex 子项加 `min-width:0`、表格 / 代码块外层 `overflow-x:auto`
- 交互态齐全:`hover` / `active` / `focus-visible` 三态都写,焦点环不许被 `outline:none` 抹掉
> ⚠️ 判据以「内联后的交付单文件」为准。扫多文件开发目录会出幻影阻断(片段文件里当然找不到 CSS 里才有的规则)。本地曾实测整目录扫出 9 条幻影阻断。
### 5.2 D4 动效(可跳过)
按 `craft/animation-discipline.md` 先答动效三问:① 它传达什么信息?② 删掉会丢失什么?③ 是不是为了「看起来高级」?答不出就不加。
- 工具型页面(仪表盘 / 后台 / 编辑器 / 工作台)禁止入场编排:用户一天开几十次,每次播一遍是折磨。本项目的版本管理界面属工具型;判不准时按工具型处理
- 弹簧用 Damping / Response 二参数(Damping 保持 0.8–1.0、Response 0.3–0.4s;低于 0.7 会明显「蹦」)
- CSS 无法用真弹簧时用 `cubic-bezier(0.32, 0.72, 0, 1)`;过渡曲线不得用 `linear` / `ease` / `ease-in-out`
- 交互过渡禁 `@keyframes animation`(不可中断,反向操作会跳帧),用 `transition` 或 WAAPI
- 只动 `transform` / `opacity`,不动 `width` / `height` / `top` / `left`;禁止 `scale(0)` 起手(用 `scale(0.95)` + opacity)
- 退出比进入快(进 300ms / 出 200ms);同屏动效元素 ≤3 个且有 30–50ms 错峰
- `prefers-reduced-motion` 必须处理
### 5.3 D5 终检(管"能不能交")
过 `craft/state-coverage.md`(状态穷举)+ `craft/anti-ai-slop.md`(反 AI 味)+ `web-prototype/references/checklist.md`(P0/P1)+ 动效三问 + 交互清单逐行复测,并真渲染一次。
> 🔴 渲染复测用本机 Chrome 无头截图(2026-10-02 实测可用):
>
> ```bash
> "/c/Program Files/Google/Chrome/Application/chrome.exe" --headless=new --no-sandbox --disable-gpu \
> --hide-scrollbars --window-size=1440,900 --virtual-time-budget=3000 \
> --screenshot="<Windows 绝对路径>/P1.png" \
> "file:///<原型绝对路径,中文需 URL 编码>#/p/xxx"
> ```
> ⚠️ 两条坑:`--screenshot` 必须给 Windows 绝对路径(给相对路径会写进 Chrome 安装目录,回来找不到);中文文件名要 URL 编码。
> ⛔ 脚本缺失期间,截图只替代「看得见的」那部分:溢出与响应式破损能看出来,对比度 / 状态可见性 / 点击目标尺寸 / 死按钮判不了,那些仍按 5.1 的人工判据 + 3b 的 `browser-harness` 实测走。
> 截图两种形状,用途不许混:
>
> | 形状 | 尺寸 | 用途 |
> |---|---|---|
> | 视口帧 | 1440×900 / 390×844 | 对外评审、提交外部评估、交付留档一律用这张 |
> | 整页长图 | 视口宽 × 整页高 | 仅自检「整页有没有塌」,不对外 |
>
> ⚠️ 混用会出事(本项目实测踩过):把长图当参考图交出去,移动端是 1:7.1 的长条、桌面端 1440×1429,「首屏」这个信息整个丢失。外部评估只能按长条理解布局,「首屏有没有主次」「坐得下几行」根本没被评审到。
>
> 两个视口都要截(`1440x900` 与 `390x844`),只截桌面端等于没测响应式。
>
> 结构与排版仍要量(脚本缺失期间靠 DOM 取值人工量):字号档数与相邻档差 / 正文档承载占比 / 标题大纲 / 按钮高度与实底分档 / 列对齐 / 对齐锚点 / 浮层可见关闭出口唯一。⛔ 不许目测截图下结论,取值结果直接抄进 `3d-审查报告.md` 的结构核对表。
>
> 本项目是 hash 驱动路由,hash 接在文件名后(`<原型>.html#/p/xxx`);不接就渲染到空壳视图,截图与数字全是假的。
>
> 「无法判定」一律按未通过对待(「判不了」≠「没问题」):浮层类在未打开态必然判不了,必须按 Gate-3 的打开态复测口径,用 `browser-harness`(复用同一页签)逐个打开浮层再数可见关闭出口,与 `Esc` / 点遮罩 / 焦点锁三条一起留痕。
契约里写了数字的,逐条取值回填(`05` §二 第 11 项,阻断级)
脚本不认识项目自定义选择器(`.ver-row` 之类),所以契约里的数字 —— 首屏条数、单条行高、承载占比、面积占比、对比度比值 —— 没有任何一道机检会替你核。它们是全篇最像「已经验过」的一类内容。
- 用 `browser-harness` 或 DOM 取值,按契约声明的视口量(本项目是 `1440×900` 与 `390×844`);`browser-harness` 必须复用同一个页签(`list_tabs()` → `switch_tab()` → `goto_url()`,不要 `new_tab()`)
- 回填的是实测值,不是复述契约值;把「契约值 / 实测值」并排列进 `3d-审查报告.md` 的结构核对表
- 不得目测,不得沿用上一版数字
- 契约没声明判据的档位(例如本项目窄屏的行高)如实记为证据缺口,不要临时编一个阈值凑上
- 反面案例(`DESIGN` §8.10 E-18):某轮契约写「单个版本行高 ≤96px / 1440×900 首屏 ≥5 行」,是凭印象写的,真渲染才发现是 118px / 3 行,两个数字同时不达标,而当时没有任何门禁会报它
### 5.4 Gate-2 完成门
全部 `阻断` 项清零,`建议` 项逐条有结论:修掉,或显式写「已知不修 + 原因」。
不接受「基本没问题」「应该差不多」「剩余都是小问题」。每条要么修,要么留痕。
### 5.5 Gate-3 交付门(硬闸,任何挡位不可跳)
真实渲染后(浏览器打开,非只看代码)肉眼过八项:裁切 / 重叠 / 失真 / 失效控件 / 缺状态 / 响应式破损 / 控制台报错 / 字体回退异常。
无头截图已代劳其中的溢出与响应式破损,其余仍需人眼(截图查不出「点了没反应」,那靠 3b 的 `browser-harness` 实测)。
落盘 `designs/<项目>/3d-审查报告.md`,按 `05` §五的模板:范围 + 挡位 + 阻断项表 + 建议项表 + 状态覆盖核对表 + Gate 结论。
---
## 6. 偏离单(本段收尾必须附)
| # | 原要求(文件:小节) | 实际做法 | 原因 | 影响 | 处置 |
|---|---|---|---|---|---|
| | | | | | 已修 / 持续偏离 / 待用户裁定 |
本项目长期挂账的偏离(每次执行都要重新声明状态):
| # | 项 | 状态 |
|---|---|---|
| A1 | `web-prototype` 默认产出单文件 HTML;本项目开发期用 React+Babel 多文件,交付时手工内联成单文件(无宿主工具可代劳:`super_inline_html` / `present_fs_item_for_download` 在 Trae 都不存在) | 持续偏离,3b 收尾做内联并自检三条 |
| A2 | 宿主下载 / 预览工具不存在(`SendUserFile` / Claude Preview MCP) | 按 `SKILL.md` 适配注记:改 Write 落盘 + `browser-harness` 实测 |
| A3 | 实测必须用 `browser-harness`(浏览器入口 9333),禁用 Trae 自带浏览器工具 | 项目既定约束,优先级高于手册的通用说法 |
| A4 | 预览服务端口用 4311(`python -m http.server 4311 --directory designs`) | 与 9333 不冲突:4311 是服务,9333 是自动化浏览器入口 |
没有偏离单就不得报完成。
---
## 7. 完成标准(逐条可核对)
- [ ] 声明制走完:开工、每个子步、每处偏离都有声明;挡位已声明(快速 / 标准 / 严格)
- [ ] 第 1 节必读表已按阶段取用;同一时刻只读 1~2 份,未一次性全读(限载)
- [ ] 供给核对做过:三处供给在位、选定套名与 `DESIGN.md` 记录一致;不一致时供给变更清单已获用户确认并写入修订记录
- [ ] `docs/pm/<项目>/DESIGN.md` 存在,含设计契约(十二个字段,含结构骨架、交互清单与重复项的信息量)与令牌表(三层 token 结构,含组件规格 + 字阶定值表 + 高度层级 + 布局脚手架(含容器与对齐锚点)+ 浮层只许一个可见关闭出口,全为具体值)
- [ ] 骨架未漂(2026-10-06 口径调整):D0 的页面清单与每页板块与②段《界面布局》逐条对得上;本段未增删移动任何板块
- [ ] 分档已兑现:②段分档表每条信息的「主屏常驻 / 可点入」在实现里兑现;档位未被本段改动
- [ ] `结构骨架` 已落:骨架档给了理由;板块 ≥2 个且每个有文字标题;板块清单来自②段;密度目标只取一档
- [ ] 页型已判(营销页 / 工具型,给了依据);工具型页面零 `.eyebrow` / 零 `.lead` / 零 `.hero`,且 `layouts-tooling.md` §5.5 五条逐条过完(含「标题区零从属小字」的 DOM 取值)
- [ ] Gate-1 全部自检项结果写在 `DESIGN.md` 末尾,无一项不过
- [ ] 原型 HTML 单文件自包含、双击可开,内联自检三条通过(无 unpkg / 无外部 jsx 引用 / 挂载点在)
- [ ] 状态穷举六项逐条有结论(`05` §三第 1 项)
- [ ] 每个按钮、每个跳转都用 `browser-harness` 真点过,含空 / 加载 / 错误 / 失败重试四态,并回报控制台报错原文与「点了没反应」清单
- [ ] `designs/<项目>/3c-GPT会诊.md` 存在,含提问原文、模型回答原文、四列处置表;未取到已明示
- [ ] D3 收口已按 5.1 三处判据人工过完:Gate-1 自检表 + `craft/` 四份规约 + 本项目追加判据,阻断项清零(取值结果已抄进报告)
- [ ] D5 终检已真渲染:`1440x900` 与 `390x844` 两个视口各截一张,视口帧已留档;横向溢出 0 / 对比度不达标 0 / 结构与排版阻断 0,且无「无法判定」项(DOM 取值已抄进报告)
- [ ] 每个浮层都手工打开数过可见关闭出口(`== 1`)+ `Esc` / 点遮罩能关、焦点锁在层内且关闭后回到触发按钮;结论与触发路径已写进 `3d-审查报告.md`
- [ ] 对外提交 / 交付留档的截图只用视口帧;`_full/` 长图未作为评审输入
- [ ] 契约里每个写出来的数字都已实测回填(首屏条数 / 行高 / 承载占比 / 面积占比 / 对比度比值),「契约值 / 实测值」并排列出;未回填即阻断;契约未声明判据的档位已记为证据缺口
- [ ] `designs/<项目>/3d-审查报告.md` 存在,含阻断 / 建议两张表 + 状态覆盖核对 + 结构核对(数字抄自脚本输出,非「目测」)+ Gate-2/3 结论
- [ ] Gate-2 与 Gate-3 均已通过(书面结论,非口头)
- [ ] 重大改版:旧版文件仍在磁盘上,且收尾给出新旧差异(改了什么 / 为什么 / 代价)
- [ ] 偏离单已附,且无静默偏离
@@ -0,0 +1,329 @@
# 工具型版式库(工具型数据密集界面 · 本项目追加)
> ⛔ 本文件是 `stage-delivery` 自己的东西。`open-design/design-templates/web-prototype/references/layouts.md`
> 的 8 个骨架是落地页 / 营销页向(hero / features / stats / quote / cta / log / pricing),
> 工具型页面只适用其中 Layout 7 日志列表与 Layout 8 对比表。
> 其余套上去会把后台做成营销页 —— 这是「版式与判据同源」的必然结果,不是审美问题。
>
> `craft/` 是通用工艺,不给版式;8 骨架不给工具型。
> 工具型页面的版式在本项目只有这一份来源,它是③段「正向目标」的最后一块空缺。
---
## 0. 何时用哪一类(先判形态,再挑骨架)
| 形态 | 判据(一句话能判) | 骨架 |
|---|---|---|
| 列表型 | 主操作是"选中一行去看/改",页面上有 ≥2 条同类记录并列 | §1 行式列表 / §2 表格式清单 |
| 详情型 | 主操作是"改这一项的字段",页面围绕**单个对象**展开 | §3 详情面板 |
| 侧区型 | 主操作是"在两个工作面之间来回"(如列表↔详情、主区↔检查器) | §4 主从侧区 |
⭐ 判不出来怎么办:页面上能数出"并列的同类记录"就是列表型;数不出就是详情型。
⛔ 不许拿落地页骨架顶替 —— 那是"没有形态判定"的默认行为,等于退回 18 轮前的病根。
---
## 1. 行式列表(工具型主形态 · 默认首选)
适用:主操作作用于"一条记录",记录有主标识 + 状态 + 少量次级信息。
结构:`容器 → 表头行(列名 / 排序标记 / 计数)→ 数据行 × N → 选中态`
```html
<section class="section" data-od-id="registry">
<div class="container">
<div class="row-between" style="margin-bottom: 16px;">
<h2>原型版本登记</h2>
<span class="meta">共 12 条 · 按更新时间倒序</span>
</div>
<div class="rule" style="margin-bottom: 0;"></div>
<article class="log-row">
<span class="meta">v12</span>
<div>
<h3>原型版本管理 v12</h3>
<p style="margin: 4px 0 0; color: var(--muted); font-size: 14px;">
新增 3d 审查报告落盘位 · 交互清单已接进D0 契约
</p>
</div>
<span class="tag">已登记</span>
</article>
<article class="log-row">
<span class="meta">v11</span>
<div>
<h3>原型版本管理 v11</h3>
<p style="margin: 4px 0 0; color: var(--muted); font-size: 14px;">
状态机改由 gates/ 推导,界面重构 0 项机制受影响
</p>
</div>
<span class="tag">已归档</span>
</article>
<article class="log-row">
<span class="meta">v10</span>
<div>
<h3>原型版本管理 v10</h3>
<p style="margin: 4px 0 0; color: var(--muted); font-size: 14px;">
D3/D5 人工判定,未跑 ≠ 通过
</p>
</div>
<span class="tag">待复核</span>
</article>
<div class="row" style="margin-top: 24px; gap: 8px;">
<button class="btn btn-primary">登记新版本</button>
<button class="btn btn-ghost">导出登记台账</button>
</div>
</div>
</section>
```
判定要点(可机械核对,不是审美建议):
- 边框只上不围 —— 行间用 `border-top`,⛔ 不给每行套框。套框会让列表变宣传册。
- 一屏可见行数 ≥ 6(900px 高时)。低于 6 说明行高或内衬过肥 ⇒ 工具型页面一屏放不下东西。
- 每行必须带主标识(`v12` 这类短标或标题),⛔ 不许整行只有一句描述。
- 状态用 `tag` 不用整行底色。整行着色 ⇒ 该行不再是"可读的记录"而是"一条告警"。
---
## 2. 表格式清单(同形态的高密度变体)
适用:记录字段多且需要横向比较(≥4 个可比字段)。
⚠️ 与 §1 的取舍:字段 ≤3 用行式;≥4 且用户任务是"比较"才用表格式。⛔ 不许因为"表格看起来更整齐"就用它。
```html
<section class="section" data-od-id="gates">
<div class="container">
<div class="row-between" style="margin-bottom: 16px;">
<h2>闸门检查</h2>
<span class="meta">4 项 · 2 项未跑脚本</span>
</div>
<table class="ds-table">
<thead>
<tr>
<th>闸门</th><th>判据来源</th><th>形态</th><th class="num-col">结论</th>
</tr>
</thead>
<tbody>
<tr><td>Gate-1 方向门</td><td>runbook §2.1(十二字段)</td><td>全部页面</td><td class="num-col">人工</td></tr>
<tr><td>D3 收口</td><td>craft/typography + color</td><td>全部页面</td><td class="num-col">人工</td></tr>
<tr><td>D5 终检</td><td>checklist + anti-ai-slop</td><td>两视口</td><td class="num-col">人工</td></tr>
<tr><td>命名一致性</td><td>check_naming.py</td><td>技能树</td><td class="num-col">通过 90/0</td></tr>
</tbody>
</table>
</div>
</section>
```
判定要点:
- 数字列右对齐 + `num` 类(`class="num-col"`)。左对齐的数字列没法比大小。
- 表头必须写判据来源,⛔ 不许只写结论。工具型页面的每个结论都要能追到出处。
- 「未跑」必须能作为一个取值存在(`人工` / `未跑`),⛔ 不许用"已通过"顶替 —— 那是本项目最反复踩的错。
---
## 3. 详情面板(单对象表单型)
适用:主操作是"改这一项",页面围绕单个对象。
结构:`对象标识 → 字段组(每组有标题)→ 动作区`
```html
<section class="section" data-od-id="detail">
<div class="container">
<div class="row-between" style="margin-bottom: 24px;">
<h2>v12 · 原型版本管理</h2>
<span class="pill">草稿</span>
</div>
<div class="grid-2" style="gap: 32px;">
<div>
<h3 class="meta">标识</h3>
<div class="card-rule" style="padding: 16px 0;">
<p class="meta">版本号</p>
<p class="num" style="margin: 4px 0 0; font-size: 20px;">v12</p>
</div>
<div class="card-rule" style="padding: 16px 0;">
<p class="meta">登记时间</p>
<p style="margin: 4px 0 0;">2026-10-02 19:24</p>
</div>
</div>
<div>
<h3 class="meta">变更摘要</h3>
<div class="card" style="padding: 16px;">
<label class="meta" for="d-sum">本版改了什么(读者只靠这段判断要不要回滚)</label>
<textarea id="d-sum" class="textarea" rows="4"
style="margin-top: 8px; width: 100%;">交互清单接进 D0 契约;必读源改指 open-design。</textarea>
</div>
<div class="row" style="margin-top: 16px; gap: 8px;">
<button class="btn btn-primary">保存</button>
<button class="btn btn-ghost btn-arrow">回滚到 v11</button>
</div>
</div>
</div>
</div>
</section>
```
判定要点:
- 字段必须有可见标签(`label` 或 `meta`),⛔ 不许只靠 placeholder 承载字段名 —— 一保存就看不见了。
- 可编辑与只读要分层(`card` 可编辑 / `card-rule` 只读),⛔ 不许全部做成输入框。
- 动作区位置固定在对象标识之后、内容之后,⛔ 不许散落在各字段组里。
---
## 4. 主从侧区(两工作面来回)
适用:主操作需要在两个面之间来回(列表 ↔ 详情、主区 ↔ 检查器)。
结构:`左区(列表,可收窄)| 右区(详情或检查器,主体)`
```html
<section class="section" data-od-id="master-detail">
<div class="container">
<div class="row-between" style="margin-bottom: 16px;">
<h2>交互清单</h2>
<span class="meta">第 7 字段 · 四列</span>
</div>
<div class="grid-1-2" style="gap: 0; align-items: start;">
<nav class="stack" style="gap: 4px;">
<div class="card-flat" style="padding: 10px 12px;">
<p class="meta">元素</p>
<p style="margin: 2px 0 0;">登记新版本按钮</p>
</div>
<div class="card-flat" style="padding: 10px 12px; border-left: 3px solid var(--accent);">
<p class="meta">元素 · 当前</p>
<p style="margin: 2px 0 0;">导出登记台账</p>
</div>
<div class="card-flat" style="padding: 10px 12px;">
<p class="meta">元素</p>
<p style="margin: 2px 0 0;">闸门结论标记</p>
</div>
</nav>
<div style="padding-left: 24px;">
<h3 class="meta">触发 / 反馈 / 何时不可点</h3>
<table class="ds-table" style="margin-top: 8px;">
<tbody>
<tr><td class="meta">触发</td><td>点击</td></tr>
<tr><td class="meta">反馈</td><td>写入 registry/ 并输出回执行</td></tr>
<tr><td class="meta">不可点</td><td>gates/ 未就位时</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</section>
```
判定要点:
- 左区可收窄但不可隐藏(`min-width` 保底)—— ⛔ 不许做成抽屉或浮层,工具型页面要能同时看到两面的对应关系。
- 当前项用 `border-left` 指示(3px 实底),⛔ 不用底色铺满。
⭐ 这是「状态修饰不参与分族」的正面用法:`border-left` 属状态修饰,`card-flat` 才是分族键 —— 两者不能混进同一个分组键。
- 右区必须与左区当前项对应,⛔ 不许左区选中变了右区不动。
---
## 5. 通用红线(工具型专属 · 五条 = 本项目判据正文)
> 本节是③段工具型判据的唯一定稿处。`open-design/design-templates/web-prototype/references/tooling.md`
> 的「通用红线」只是纲要指路(它管所有工具型页面的形态判定),逐条判据与实测反例以本节为准。
> ⛔ 两边不重复展开 —— 同一判据两处展开必然漂。
- ⛔ 不做入场编排。工具型页面一进来就该是可读的工作面,不用 `linear` / `ease` 做元素入场。详见 `craft/animation-discipline.md`。
- ⛔ 不为"好看"加装饰区块。判据用 D0 的 `必要内容`:删掉它,主操作还做得成吗 —— 答得出"做得成" ⇒ 不上屏。
- ⛔ 不把落地页当默认骨架。挑骨架前必须先过 §0 的形态判定;判不出形态就去改 D0 的 `结构骨架` 字段,⛔ 不许随手挑一个。
- ⛔ 标题区零从属小字(详见 §5.5.1)。
- ⛔ 不可点的东西不许长成可点样子(详见 §5.5.5)。
---
## 5.5 五条反「实习生审美」硬判据(2026-10-05 追加 · 有行业实证)
> 来源与依据:Linear UI 重设计复盘(Karri Saarinen 等,2024)+ B2B 认知负荷/admin dashboard 法则(AdminLTE 2026 / Open Door Digital / CreateBytes 等)。
> 为什么单列一节:§1–§4 管"结构对不对",管不住"像不像给人用的"。2026-10-05 用户实测指出当前原型「像实习生画的」,逐条对上后确认下面五条从来没有判据。这五条都是可机械核对的,不是审美建议。
### 5.5.1 标题区不许挂从属说明文字(治法:「标题归标题,说明归别处」)
实证:「Microcopy is part of hierarchy …… **Add concise helper text only where it prevents mistakes**」;「**Strong section headers: users should understand a section without reading every line**」。
判据:页面标题 / 区块标题(`h1` / `h2` / `h3`)正下方 8px 内不得出现纯说明性文字。
- ⛔ 反例(实测踩过):「全部项目」下面吊「每个项目独立管理版本与产物」;「版本列表」下面吊「按版本号倒序 · 点行进入详情」;「v12」下面吊「3/5 · 进行中」。
- ✅ 正解三选一:① 删掉(能自明就删);② 移到该区块内的控件行(如排序控件旁);③ 改写成数据本身(如把「按版本号倒序」变成表头的排序指示器)。
- ⚠️ 例外仅一个:空态 / 错误态的解释文字(那是页面主内容,不是标题的注脚)。
> 🔴 怎么区分「注脚」与「事实」(2026-10-05 机检踩过,必须写死):不看位置,看内容与去向。
>
> | | 注脚(判不过) | 事实(放行) |
> |---|---|---|
> | 内容 | 解释标题本身("这是什么意思""怎么用") | 该对象的可决策数据(版本数 / 最近动作 / 状态) |
> | 去向 | 删掉后页面无损失,只是少一句解释 | 删掉后用户不知道点哪个(改了主操作的落点) |
> | 判据 | 用 D0 `必要内容`:「删掉它,主操作还做得成吗」——答"做得成" ⇒ 是注脚 | 答"做不成/会选错" ⇒ 是事实 |
>
> ⚠️ 机检量法的适用范围:机械扫描「标题正下方 N px 内的文本节点」会把事实条一并抓出来(v3 原型实测:`h3 CutGate` 下方 14px 处是 `7 个版本`)。
> ⛔ 这不能一律判红 —— 得逐条回答上表两问。放行的事实条必须同时满足:① 是数据不是句子;② 与该对象的主操作按钮同属一个视觉单元(同行或紧邻),而不是独占了标题的第二行。
> ✅ 若事实条独占标题下方一整行(如本原型首版),仍判不过 ⇒ 把它挪到与主操作同行。
### 5.5.2 导航栏不许只有图标(治法:「默认带标签,折叠才收」)
实证:「sidebar becomes **a wall** and needs grouping or a different model」(>15 项时);「**Collapsible Sidebars** …… shrinks to just 64px, **hiding the text labels and showing only the icons**」—— 只图标是折叠态,不是默认态。
判据:
- 主导航默认必须带文字标签(宽 ~240–280px),⛔ 不许一上手就是 52px 纯图标栏。
- 图标数量 < 4 个时,⛔ 不许用竖向图标栏 —— 三个图标撑一条 52px 竖栏,剩下全是空白,是"没内容硬做壳"。
✅ 正解:< 4 项改用页头横向导航或面包屑 + 返回,把宽度还给内容。
- 允许 64px 纯图标,仅当它有一个明确的可展开入口(折叠按钮),且默认是展开态。
### 5.5.3 并列卡片必须有主次(治法:「一屏一个最大」)
实证:「**A screen with twenty equal widgets is a screen with none**」;「Twelve equal-weight widgets answer no question. Decide the single number or status the screen exists for, **give it the top-left slot and the largest type**, and demote the rest」;「**Pass the five-second test** —— 读不到主要结论,问题在层级不在数据」。
判据:
- 同屏并列 ≥3 张卡片时,必须有且仅有一张是"主卡":位置在左上、字号明显更大(≥ 相邻卡 1.3×)或占宽更大(≥ 1.5×)。
- ⛔ 反例(实测踩过):CutGate / Cutter / Truss 三张等宽等高卡,视觉重量完全相同 ⇒ 五秒测试必挂。
- 机械核对法:把所有并列卡片的 `getBoundingClientRect()` 取出来 —— 若宽高全部相等且内部最大字号也相等 ⇒ 判不过。
- ⭐ 与 §5「删掉它主操作还做得成吗」串起来用:主卡 = 主操作的直接对象。当前项目卡该是主卡,其余降为次级行。
### 5.5.4 不许拿边框/底色假装分组(治法:「先间距、后字重、最后才边框」)
实证:「**Boxes instead of space** — Bordering every card to fake grouping. **Whitespace and type weight group more cleanly; reach for a border only after spacing has failed**」。
判据(按优先级依次尝试,能靠上位解决就不许用下位):
1. 间距:组内 gap < 组间 gap(至少 1.5×)
2. 字重 / 字号:分组标题加粗或加大,与条目拉开
3. 分隔线:只在列表行之间用 `border-top`(§1 已定)
4. ⛔ 最后才是卡片边框:只有当 1–3 都做不到时才给卡片描边
- ⛔ 反例:给每个条目套一个圆角描边卡(本原型 P1/P2 都有)。
- 机械核对法(与 `tooling.md` 红线 4 同一把尺子,判据正文在此):数非控件元素里 `border` + `border-radius` 组合的出现次数;同一个"分组"用途上出现 ≥3 次即判过密。
- 🔴 适用范围(2026-10-05 机检踩过,必须写死):排除控件层 —— `button` / `input` / `select` / `textarea` / `[role=button]` 本就应该有边框+圆角(那是控件的身份标识),把它们算进"边框假装分组"是假红。
⚠️ 首版判据没写这条适用范围,拿它扫 v3 原型得出「7 处过密」,逐条查出来全是按钮和输入框 ⇒ 判据错、页面没错。
⭐ 同型警戒:凡"数某类样式出现次数"的判据,必须先声明"数的是哪些元素";不分层的计数一定会把控件层算进来。这也是「全绿 ≠ 可用」的反面 —— "全红"也可能是判据自己的问题。
### 5.5.5 不可点的东西不许长成可点样子(治法:「控件样式是承诺」)
实证:与「Color is a signal channel」同型 —— 视觉通道是承诺,不是装饰。点下去没反应 = 说谎。
判据:
- 任何带 `button` / 可点样式(填充、描边+圆角、hover 态)的元素,必须在 D0 契约「交互清单」里有四列定义(元素 / 触发 / 反馈 / 何时不可点)。列不出 ⇒ 要么补实现,要么降级成纯文本。
- ⛔ 反例(实测踩过,三条):① 「排序:最近活动倒序(固定,不给排序控件)」—— 把"我没做"写成界面文案,最恶劣;② 「打开产物」点了只改文案「已打开」1.6 秒后弹回;③ 「导出登记台账」只弹提示。
- ⛔ 不许把实现决策写进界面:`(固定,不给排序控件)` 这类括号注,是给评审者看的,不是给用户看的。
- 机械核对法:页面所有 `button` / `[role=button]` / `.btn*` 元素集合,与契约交互清单的元素列做双向差集 —— 有差即判不过。
---
## 6. 落地前自检(三条,可机械核对)
1. 形态判定已写出(D0 `结构骨架` 字段里有"这是哪一类、依据是什么")。
2. 类名全部来自种子 `template.html` 的类清单(或已补进它的 `<style>`),⛔ 不许在标签上内联一堆样式凑效果。
3. 每条可点元素都在 D0 契约的「交互清单」里 —— 本文件给的是版式,不是交互真相源。
4. ⭐ §5.5 五条逐条过(标题区无注脚 / 导航带标签 / 并列卡有主次 / 分组不靠边框 / 无假控件)——
这五条过不了就别交付,它们正是「结构全对但仍然难看」的缺口所在。
> ⛔ 本文件不产出新判据。视觉样式归 D1 令牌表,交互归契约第十二字段,状态穷举归 `craft/state-coverage.md`。
> 三处口径不同以本项目为准,并按 runbook §3.4 标注「本项目追加」。
@@ -0,0 +1,236 @@
---
name: stage-discovery
description: 产品规划第①段,产品需求。五个子步依次产出五份文档:1a 需求文档(用 grill-me 反问澄清需求,用户不答时给推荐答案并标【假设】继续)、1b 竞品分析、1c 用户画像、1d 产品策略、1e 使用场景(按用户故事格式写:谁、在什么处境下、要办成什么)。当用户要做竞品分析、用户画像、产品策略、使用场景,或说"只做产品需求"时调用。
---
# ① 产品需求
回答"做什么、为谁、为什么值得做"。产出只有五份,全部落 `docs/pm/<项目>/research/`。
> 段名定为「产品需求」(2026-10-02 定):本段 1b 做调研,1d/1e 定产品策略与场景,"调研"盖不住后半截,还会让②段的"需求"二字失去归属。四段各占一个词:产品 / 功能 / 界面 / 说明。
## ⭐⭐ 产出白名单(2026-10-06 用户定案 · 硬规矩)
本段在 `research/` 顶层只产出这五份,一份不多、一份不少:
| 子步 | 产出 |
|---|---|
| 1a 需求文档 | `research/1a-需求文档.md` |
| 1b 竞品分析 | `research/1b-竞品分析.md`(汇总对比体,恒一份)+ `research/1b-独立分析/<竞品名>.md`(独立分析体,竞品池里每一个一份) |
| 1c 用户画像 | `research/1c-用户画像.md` |
| 1d 产品策略 | `research/1d-产品策略.md` |
| 1e 使用场景 | `research/1e-使用场景.md` |
🔴 用户原话:「禁止出现之前确定的以外的文档,除非用户明确要求」。
不许自行新增第 6 份。实测栽过:某轮因为"用户点名了参考产品"就自作主张多产了一份《参考实装拆解》,用户反复看到"冒出来的不相关的文档"。"参考产品怎么做的"属 1b 竞品分析的取材范围,写进本份里,不另立一份。
⭐ `1b-独立分析/` 子目录不算"第 6 份":它是 1b 的既定体例之一(2026-10-07 用户定案:「竞品分析 有独立分析也有汇总分析 都应该要用上,谁说只有一份竞品分析了」)。它的份数由竞品池决定,不由人临时加。除此之外仍只许上面那五份。
✅ 门禁可查:`check_naming.py` 扫 `research/` 顶层的实际文件名,出现白名单外的文件名即报红(子目录天然放行)。
## 本段职责(2026-10-06 重划)
本段回答一个问题:要做的东西,凭什么成立。拆成五问,各对应一个子步:
| 问 | 子步 | 产出 | 性质 |
|---|---|---|---|
| 要解决什么问题、边界在哪 | 1a 需求文档 | `1a-需求文档.md` | 拍板 |
| 别人做了什么、我们差在哪 | 1b 竞品分析 | `1b-竞品分析.md` + `1b-独立分析/` | 外部取证 |
| 用户是谁、他要办成什么事 | 1c 用户画像 | `1c-用户画像.md` | 外部取证 |
| 为什么值得做、边界与风险 | 1d 产品策略 | `1d-产品策略.md` | 判断 |
| 用户怎么用它 | 1e 使用场景 | `1e-使用场景.md` | 判断 |
> ⭐ 1b/1c 是本段的证据地基,1a/1d/1e 的每条结论都要能追回它。没有外部取证,1d 就是凭想象定战略——实测踩过:三个 JTBD 全是同一个人的三种时刻,零外部取证。
> 1a 与②段的 2a 是两件不同的事,见文末「需求文档在本段的落点」。
顺序 1a → 1b → 1c → 1d → 1e。需求没澄清就不许开取证,没有事实依据就不要定策略。
> 下面表格「读」列是该子步的方法论文档,路径相对本 skill 目录。执行某个子步前先读它。
## 1a 需求文档(必做,最先)
| 子步 | 读 | 产出 |
|---|---|---|
| 需求文档(grill-me) | `references/grill-me.md` | `docs/pm/<项目>/research/1a-需求文档.md` |
🔴 本子步的产出是「一份」文档(2026-10-06 用户定案):`1a-需求文档.md` 一份说清全部。开头写清"做什么 / 为谁 / 不做什么",往下摊开成决策表:目标、用户、范围与"明确不做什么"、手上已有的素材、约束、依赖、替代方案。
(历史:为什么从两份并成一份 → `_留痕/①段-已删除产出与方法论.md`)
默认反问用户,附推荐答案。用户说"你定"、连续两轮不回应、或问题属事实类时,模型自行补答案并标 `【假设】`,但每轮结束要汇出待复核清单让用户一次性过。未经复核的 `【假设】` 不得在 1d 当事实用。
本子步不受"提问上限 3 个"约束,把需求问清楚正是它的全部价值。进入前先声明"接下来会连续多轮提问"。这是本段唯一例外(详见 `references/grill-me.md`)。
⭐ `grill-me` 全场只有本段这一份(2026-10-06 用户定案:「grill-me 也应该拿到第一步了,第二步就是细化功能」)。本份按 A / B 两节提问:
| 节 | 火力点 | 原归属 |
|---|---|---|
| A 节 | 要做什么、为谁、边界在哪 | ①段 |
| B 节 | 做成什么样、哪些情况不成立、状态怎么流转 |②段|
> 不许再加回②段一份。②段从 2026-10-06 起只细化功能,不再反问需求,反问在这里一次性做完。
> ⚠️ 合并的代价要说清:两个火力点合到一处,提问量必然变大。用"分节提问"解决,不许因为量大就省略 B 节——跳了 B 节等于把功能压测整个删掉。
> ⭐ B 节只给粗粒度形态(有哪几页、大概几个板块),不把页面结构写死(精确板块清单与布局归②段的《界面布局》)。
## 1b 竞品分析(外部取证)
| 子步 | 读 | 产出 |
|---|---|---|
| 竞品拆解 · 独立分析 | `references/competitor-analysis.md` §11 | `docs/pm/<项目>/research/1b-独立分析/<竞品名>.md`(竞品池里每一个一份) |
| 竞品拆解 · 汇总对比 | `references/competitor-analysis.md` §1—§10 | `docs/pm/<项目>/research/1b-竞品分析.md`(恒一份) |
1b 交两种体例(2026-10-07 用户定案:「竞品分析 有独立分析也有汇总分析 都应该要用上,谁说只有一份竞品分析了」)。职责边界与数量见 `references/competitor-analysis.md` §0.4。只交一种 ⇒ 1b 没做完。
> 🔴 写作口径(2026-10-07 补 · 用户报障逐字:「生成的文档并没有说人话,还是我手动要求的」)
> 本段产出是给人看的文档,不是模型味的总结。落笔前读一遍其中一份:
> 技能库 `humanizer-zh`(中文版,24 类 AI 写作模式)或会话技能包里的
> `session-mechanism/references/作业规矩/04-去AI味与说话方式.md`(会话场景加固版,带交付前清单与质量评分)。
> 定稿前按它的「交付前快速清单」过一遍。
> 高频 AI 味一律禁:三段式排比连用、空转评价(「具有重要意义」「值得关注」)、以「…着」结尾的肤浅分析、模糊归因(「业内人士认为」)、过度加粗、把一句话拆成内联标题垂直列表。
> ⚠️ 这条口径适用于本段全部五份产出(1a~1e),不只 1b。
⭐ 用户点名的"参考实装"写进本份,不另立文档(见「产出白名单」)。它是竞品池的第三层(直接竞品 / 间接替代 / 点名参考),在 §3—§10 的每一节里与其它竞品同列参与横向对比。
🔴 目标:从产品视角横向拆解竞品,讲用途、讲场景、讲功能、讲作用、讲优势(2026-10-07 用户口径)。
🔴 核心模型 = 五问(用途 → 场景 → 功能 → 作用 → 优势),本份每一节都在回答其中一问或几问。
执行:
1. 读 `references/competitor-analysis.md`(唯一方法论载体,含 §0 Scope 与文末《输出检查》)
2. 按项目目标圈定竞品范围(直接竞品 + 至少 1 个替代/间接方案 + 点名的参考实装)
3. 先出独立分析体:竞品池里每一个一份,按 §11 的七节写(哪些节能答、哪些答不了,由 §11 的「取证范围 ↔ 可答节次」定)
4. 再出汇总对比体:按 用途 → 场景 → 功能 → 作用 → 优势 横向比(按用户处境横向铺开,不按竞品逐个写)
5. 输出优势与不足、可借鉴点与产品机会
6. 交付前走一遍该方法论文末《输出检查》:任一条为「否」⇒ 退回修改,不交付
🔴 最低输出结构(最低要求,按品类可增不可缺):
甲 · 汇总对比体(`research/1b-竞品分析.md`,恒一份):
| # | 节 | 回答什么 |
|---|---|---|
| 1 | 分析目标与范围 | 这次要回答什么;五问各落在哪节 |
| 2 | 竞品选择与范围 | 选了谁、属哪一层、为什么是它 |
| 3 | 竞品用途 | 是什么 / 给谁用 / 干什么用 |
| 4 | 使用场景横向对比 | 用户什么时候、为什么用;怎么把事办成 |
| 5 | 功能横向对比 | 有什么能力 / 解决什么问题 / 起什么作用 |
| 6 | 产品机制与交互方式 | 怎么解决 / 为什么这样设计 ⇒ 给用户什么结果 |
| 7 | 优势与不足 | 能力表现 × 场景 × 对比对象 × 用户价值 |
| 8 | 竞品能力矩阵 | 共识 / 差异 / 独有 / 普遍短板 / 未解决需求 |
| 9 | 可借鉴点与产品机会 | 该借鉴 / 该避开 / 可突破 |
| 10 | 结论(产品层) | 本产品应优先解决什么 |
乙 · 独立分析体(`research/1b-独立分析/<竞品名>.md`,每个竞品一份;结构细则与判据见方法论 §11):
| # | 节 | 回答什么 |
|---|---|---|
| 1 | 它是谁、属哪一层、为什么纳入 | 竞品名 / 所属层级 / 纳入理由 |
| 2 | 用途 | 是什么 / 给谁用 / 干什么用 |
| 3 | 场景 | 用户在什么处境下用它;把事办成的实际过程(取不到就显式标缺口) |
| 4 | 能力 | 有哪些功能 / 各解决什么问题 / 起什么作用 |
| 5 | 机制 | 怎么做到的;为什么这样设计 ⇒ 给用户什么结果 |
| 6 | 强在哪、弱在哪 | 能力表现 × 场景 × 对比对象 × 用户价值 |
| 7 | 对我们 | 该借鉴 / 该避开 / 可突破 |
其中第 2 / 3 / 6 节是必答项,写法固定(每组几行、每行叫什么、什么顺序都定死,取不到就照写「取不到」);第 1 / 4 / 5 / 7 节写法自由。行名与行数见方法论 §11,本表不复述。
⭐ ①段就是上表这 5 个子步,每个子步一个方法论载体。产出份数上,1b 是唯一一个交两种体例的子步(独立体多份 + 汇总体一份),其余四个子步各一份。这套结构直接服务单机自用的产品(用户本人就是唯一使用者)。
(历史:本段曾有过另外几个子步、以及一次子步合并,为什么收成 5 个 → `_留痕/①段-已删除产出与方法论.md`)
## 1c 用户画像(外部取证)
| 子步 | 读 | 产出 |
|---|---|---|
| 用户画像 | `references/user-personas.md` | `docs/pm/<项目>/research/1c-用户画像.md` |
## 1d 产品策略(判断)
| 子步 | 读 | 产出 |
|---|---|---|
| 产品策略 | `references/product-strategy.md` | `docs/pm/<项目>/research/1d-产品策略.md` |
## 1e 使用场景(判断)
| 子步 | 读 | 产出 |
|---|---|---|
| 使用场景 | `references/usage-scenario.md` | `docs/pm/<项目>/research/1e-使用场景.md` |
⭐⭐ 《使用场景》就是用户故事(2026-10-06 用户定案):按「用户如何使用、解决什么问题」来梳理,唯一句式为
```
作为【谁】,当【什么处境】,我要【办成什么】,这样【得到什么结果】
```
四个槽位缺一不算完成;「我要办成什么」里不许出现功能名(出现即越界到②段)。
它是②段功能清单的直接推导依据——②段每列一项功能,都要能追回本份的某一条场景;②段按使用场景梳理功能(一条场景可跨多个页面)。
本份就是用户故事,`1e-使用场景.md` 一份承载全部,②段的功能清单直接追回本份。
旧三段式(处境 / 现在怎么凑合 / 不用会用什么)改挂到四槽位:处境 → 「当…」;凑合与替代 → 「这样…」的反面与对照。映射表见 `references/usage-scenario.md` §5。
⭐ 1d《产品策略》与 1b《竞品分析》都落在产品层,回答"谁在什么处境下拿它办成什么事、做哪些功能、强在哪",面向本产品自用的定位。
(历史:本段原还挂过两份面向售卖场景的方法论,若某个项目真要做售卖可从 `_留痕/①段-已删除产出与方法论.md` 取回)
## 「需求文档」在本段的落点(2026-10-02 定 · 2026-10-06 更新,避免误搬家)
段名定为「产品需求」后,容易误以为②段那两份该搬进本段。不搬,理由如下:
| 文档 | 归属 | 为什么 |
|---|---|---|
| `research/1a-需求文档.md` | ①段 | 做什么 / 为谁 / 不做什么 + 决策表 |
| `research/1b-竞品分析.md` | ①段 | 别人做了什么、我们差在哪(含点名的参考实装) |
| `research/1c-用户画像.md` | ①段 | 用户是谁、要办成什么事(须追到原话) |
| `research/1d-产品策略.md` | ①段 | 为什么值得做、边界与风险 |
| `research/1e-使用场景.md` | ①段 | 用户怎么用它;使用场景 = 用户故事 |
| `prd/2a-产品功能.md` | ②段 | 它是功能清单(做哪些 / 不做哪些 / 优先级 + 每条的状态流转) |
| `prd/2b-界面布局.md` | ②段 | 它是页面骨架(页面关系 + 页面内板块布局——有哪几页、每页几个板块) |
> 分界线一句话:①段回答「要解决什么问题、用户怎么用它」,②段回答「要做哪些功能、长成什么骨架」。
> 判据:一份文档若主体是功能条目的有无与优先级、页面与板块骨架 → 归②;若主体是问题、用户、取证与取舍理由 → 归①。
> ⚠️ 2026-10-06 边界更新:②段从"不给页面结构"改为"给骨架",页面关系与页面内板块布局必须在②段确认。
> 理由(用户原话):「3 是负责设计和交互,页面关系和布局必须在第二步确认清楚,不然第三步没有方向,一会一个样子」。
> 修订后分工:②段钉骨架(有哪几页、每页几个板块、板块怎么排、跨页关系)|③段做皮肉(视觉规范 + 交互 + 状态,不许动骨架)。
> 配色 / 字体 / 间距 / 组件样式 / 动效仍归③段,②段不许写这些。
## 硬约束
- 需求文档必做:`1a-需求文档.md` 存在(含"做什么 / 为谁 / 不做什么"+决策表),且待复核清单已被用户过一遍。没有它不许开 1b——否则取证答的不是用户的问题。
- ⭐⭐ 产出白名单(2026-10-06 用户定案):本段产出仅五份(见开头「产出白名单」)。不许新增第 6 份,除非用户明确要求。
- 自动补全要留痕:模型替用户补的答案必须标 `【假设】` + 理由 + 影响范围,并进待复核清单。用户始终不回应时,在该文件顶部写明"本表 X 项为模型假设,未经用户确认"。
- ⭐ 状态行不许只写好消息(2026-10-02 新增):`1a-需求文档.md` 顶部状态行必须同时给出「已确认 N 项 / 模型补全 M 项(M 项未经用户确认)」两个数。"frontier 为空""无遗留未决项"这类单边表述不得单独出现——它与正文"5 项是未经确认的假设"并存时,只读首屏的人会以为需求已澄清。
- ⭐ 假设三归宿,不许长期悬空(2026-10-02 新增):每条 `【假设】` 只能落在三种归宿之一——① 已确认(去掉标记,写明谁何时确认)② 待实现且已排定确认时机(写明"在第几步落地前必须问")③ 已按假设落地(改标 `【已按假设落地】` + 写清影响面 + 给出回退口径)。第四种状态(既未确认、已进实现、又无落地说明)不许存在。实测:约 10 条假设从 09-24 挂到 10-02,而原型已做到 v16——假设错一条,返工面就是整页。
- ⭐ 待确认 / 暂缓项必须带回收三字段(2026-10-02 新增):任何写"待确认 / 暂缓 / 待定"的条目,必须同时写 复核人 + 复核时机 + 结论落点(哪个文件哪一节),三字段缺一不许落盘。只写"暂缓"等于无限期悬挂。
- ⭐ 用户画像必须能追到原话(2026-10-02 新增):`1c-用户画像.md` 里每条 JTBD / 痛点必须能追到一句用户原话或一条可核的观察;追不到的标 `【推演】`,且 `【推演】` 不得进 1d 当依据。提问只问已经发生的事:问最近一次是什么时候、问上一次怎么处理的、问当时最费劲的是哪一步,不问"将来会不会用""你想要什么"。⚠️ 实测踩坑:三个 JTBD(「此刻的我 / 确认时刻的我 / 三个月后的我」)全是同一个人的三种时刻、零外部取证——那是自证,不是用研。
- 调研不求全:只做影响本次决策的那几项,其余跳过并说明为什么跳过。
- 区分事实与假设:来自检索或访谈的标 `【事实】`,推断的标 `【假设】`。1d/1e 的每条结论必须能追到 1b/1c 的某份文件或 `1a-需求文档.md` 的某一行;追不到的按假设处理。
- ⭐ 1a 与 2a 的分工不许混(2026-10-02 段名对齐,2026-10-06 更新):1a 定「问题与边界 + 形态与状态」(要做的东西凭什么成立、做成什么样),2a 定「功能与取舍」(要做哪些功能、哪些明确不做、页面骨架怎么排)。1a 不许写功能清单(那是 2a),2a 不许重开需求(那是 1a,含 2026-10-06 从②段合并进来的 B 节压测)。
- ⭐ B 节合并后 `grill-me` 只此一份(2026-10-06):②段不再有独立的 `grill-me.md` 与 `grill-decisions.md`,其二者的内容(做成什么样 / 状态怎么流转 / 哪些情况不成立)全部落进 `1a-需求文档.md`。不许把 B 节再挪回②段。
- 段内子步之间不反问,做完直接进下一个子步。只有三种情况停:信息不足且查不到、破坏性/不可逆动作、用户显式要求(见 `product-planning` 的「执行规则」)。
- `<项目>` 按 `product-planning` 的「项目与路径约定」定;定不出来就停下问用户,不许猜。
## 完成标准
- `1a-需求文档.md` 存在(含"做什么 / 为谁 / 不做什么"+决策表),每项都标了来源(用户拍板 / `【假设】` / `【事实】`)
- 顶部状态行给出「已确认 N / 模型补全 M(未经确认)」两个数;每条 `【假设】` 都能在三种归宿里找到自己(已确认 / 待实现已排时机 / 已按假设落地)
- 1b 竞品分析 + 1c 用户画像 + 1d 产品策略 + 1e 使用场景 四份齐全
- ⭐ 1b 两种体例都交了(2026-10-07 新增):`research/1b-竞品分析.md`(汇总对比体)且 `research/1b-独立分析/` 下竞品池每一个一份(独立分析体)——只交一种 ⇒ 1b 没做完
- ⭐ 目录里不出现白名单外的任何文件(第 6 份须有用户明确要求;`1b-独立分析/` 子目录是 1b 既定体例,不算第 6 份)
- 1d/1e 每条结论都标了来源(哪份取证文件或本表哪一行,或 `【假设】`)
- ⭐ 五份都过了「说人话」内容准则(源技能 `humanizer` / `humanizer-zh`,门槛 ≥45/50)——口径见 `product-planning` 的「执行规则」内容准则条;段末报告须写明"已过内容准则,评分 X/50"
## 反面清单
- 跳过需求文档直接开取证,拿着自己的猜测去查资料
- 把自动补全当默认动作:用户没说话就替他拍板,还没标 `【假设】`、没进待复核清单
- 拿本段的需求文档代替第②段的功能压测(那是两件事——②段已无压测,压测在 1a 的 B 节)
- 在本段 1a 写功能清单(那是 2a 的活;1a 只定问题与边界、形态与状态)
- 只做 A 节、跳过 B 节(2026-10-06 新增):B 节即原②段的功能压测,跳过它等于把压测整个删掉,接口会带着没压测过的需求直接进②段与原型
- 在 B 节把页面结构写死(2026-10-06 新增):B 节只给粗粒度形态(有哪几页、大概几个板块);精确板块清单与布局图归②段的《界面布局》
- 产出白名单外的第 6 份文档(2026-10-06 新增):不许因为"用户点名了某个参考产品/某份素材"就另立文档,写进 `1b-竞品分析.md` 里
- 1b 只交汇总对比体、把独立分析省掉(2026-10-07 新增):用户定案「竞品分析有独立分析也有汇总分析 都应该要用上」。也不许把独立体写成仓库取证记录,它必须按方法论 §11 的七节答产品面(用途 / 场景 / 能力 / 机制 / 强弱 / 对我们)
- 改本技能包的规则文件、却不过「说人话」这一关(2026-10-07 新增):规则和产出同一把尺子,不许只给产出上锁、自己用另一套腔调写规则——口径见 `product-planning` 的「执行规则」内容准则条
- 没有取证就直接写策略
- 把 11 个子步全跑一遍充数
- 事实与假设混在一起不标注
- 拿"frontier 为空 / 无遗留未决项"当闭合声明,而正文里还挂着未经确认的假设——只读首屏的人会误读成需求已澄清
- 凭空给 Importance / Satisfaction 打分:没有任何数据源支撑的数字,不许出现在交付物里
- 五份没过「说人话」内容准则就落盘(带 AI 腔:夸张意义 / 三段式强凑 / 破折号滥用 / 模糊归因 / 通用乐观结尾)——门槛 ≥45/50,见 `product-planning` 的「执行规则」内容准则条
- 把推演出来的用户画像当用研结论进 1c——三个 JTBD 若都追不到一句用户原话,那是自证不是用研
- 越界去写②段、出原型或写原型说明文档(那是第②③④段)
📎 本段删过的产出与方法论(原产出长什么样、为什么删、原反面清单里被撤掉的那一条)见 `_留痕/①段-已删除产出与方法论.md`,正文不展开;防复活由 `scripts/check_naming.py` 的 `DEAD_OUTPUTS` 机器判。
@@ -0,0 +1,288 @@
# 竞品分析方法论(1b · 产品视角)
> 定位:本档是 1b 竞品分析唯一的方法论载体。技能层(`../SKILL.md` §1b)定「必须交付什么」,本档定「怎么分析」。
> 产出落点:`docs/pm/<项目>/research/1b-竞品分析.md`(①段产出白名单五份之一)。
> 口径来源:2026-10-07 用户定案 ——「分析重点是讲**用途**、讲**场景**、讲**功能**、讲**作用**、讲**优势**,其余跟产品规划不相关的都去掉」。
---
## 0. Scope
### 0.1 本方法用于
为一款将要做的产品,横向拆解同类产品在产品层面怎么解决用户问题:讲用途、讲场景、讲功能、讲作用、讲优势。
### 0.2 上层约束
`../SKILL.md` §1b 定「必须交付什么」,本档定「怎么分析」。两者冲突以技能层为准,并回头修正本档。
### 0.3 完成判据(一句话)
做完 1b 必须能回答:
> 如果我要做这个产品:竞品已经怎么做了?哪里做得好?哪里没做好?我该学什么、避开什么、突破什么?
答不出这句话,1b 就没做完。
### 0.4 两种交付体例(本档的排布)
1b 交两份体例,两份都要交(2026-10-07 用户定案:「**竞品分析有独立分析也有汇总分析,都应该要用上**」):
1. 独立分析体 —— 一个竞品一份,回答这一个产品是什么、给谁用、怎么把事情办成、强在哪弱在哪、对我们有什么可拿的。结构见 §11。
2. 汇总对比体 —— 全池一份,回答放在一起比:共识是什么、差异在哪、哪里没人做好。结构见 §1—§10。
职责边界(本档定死,避免两边各写一遍、出现两套判据):
- 单个竞品的形态 / 给谁用 / 干什么用、场景里用户把事办成的过程、它自己的能力与机制,归独立体(§11)。
- 跨竞品的横向铺开(同一场景谁怎么做)、能力矩阵、共识与空白、本产品优先解决什么,归汇总体(§1—§10)。
- 两边都要写的只有一样:可借鉴 / 该避开 / 可突破。独立体写「从这一个竞品拿什么」,汇总体写「三类分开汇总并追回 §4 / §5 / §7」。
数量:独立体取竞品池里的每一个(用户点名要求合并的按用户口径合并,如「同源 fork 合成一份」);汇总体恒一份。
判据:两种体例都交付了,才算 1b 完成。只交汇总体、或只交独立体,就是没做完。
---
## 1. 分析目标与范围
核心模型是五问。后面每一节都在回答其中一问或几问,§1 先把它们摆明。
| 五问 | 关注点 | 落在哪一节 |
|---|---|---|
| 用途:它是什么、给谁用、干什么用? | What / Who | §3 |
| 场景:用户在什么处境下会用它? | When / Why | §4 |
| 功能:它有哪些核心能力? | What | §5 |
| 作用:每项能力解决什么问题? | What for | §5 |
| 优势:它相对**谁**、在哪些场景下更强或更弱? | vs Whom | §7 |
写什么:把这次要回答的问题写死在文档开头(本次目标、本次竞品池、本次不展开的部分),让五问各自落进上表那一节。
判据:五问各有一处明确落点,读的人能在对应节里直接读到答案,收口在 §8 矩阵与 §10 结论。
---
## 2. 竞品选择与范围
写什么:竞品分三层,逐层交代为什么选它 ——
1. 直接竞品:解决同一个核心问题、目标用户高度重叠。
2. 间接 / 替代方案:同一需求的不同产品形态,或用户换一种做法时的替代路径。
3. 点名参考实装:用户点名指定的那一个。
归属(本档定死,避免歧义):点名参考实装就是竞品池的第三层,写进同一份 `1b-竞品分析.md`,在 §3—§10 的每一节里与其它竞品同列参与横向对比,不单独成节、不另立文档。文档开头要写清「本次竞品池 = 哪几个 + 各自属于哪一层」。
数量:按项目目标自定。最低要求是「直接竞品 + 至少 1 个替代/间接方案」;复杂项目自行加层加项。
判据:
- 纳入池子的每一个,都要能回答「用户为什么会拿它和我们的产品做选择?」。分水岭是用户的选择,不是名气大小。
- 点名参考实装已收录,且在池子里标明层级。
---
## 3. 竞品用途(是什么 / 给谁用 / 干什么用)
关注点:What / Who。每个竞品一小段,只答三件事:它是什么形态的产品、服务谁、拿它干什么用。
判据:读完这段,没接触过这个产品的人能说清它是干什么的;三件事之外的内容归后面的节(能力归 §5、机制归 §6)。
---
## 4. 使用场景横向对比
关注点:When / Why —— 用户什么时候用、为什么要用。按用户处境横向铺开:
```
场景 用户要办成什么 竞品A 怎么做 竞品B 怎么做 竞品C 怎么做
场景 1 …
场景 2 …
```
§4 写的是「什么时候、为什么用」:用户处于什么处境、要办成什么事、为什么这件事必须做。
展开时沿用户的实际动作链走:进入方式 → 操作路径 → 核心步骤 → 系统提供什么帮助 → 最终产出 → 哪一步最省力 → 哪一步最麻烦。这一段要写出用户实际把事办成的过程,功能名与按钮细节归 §5 / §6。
判据:能描述出用户实际使用的过程(谁、什么处境、办成了什么),并且能说清为什么在这个处境下会用它。
---
## 5. 功能横向对比
关注点:What —— 有什么能力、能解决什么问题。先建一组统一维度,再横向比。维度按产品调整,可用:核心功能 / 辅助功能 / 输入方式 / 处理方式 / 输出方式 / 编辑能力 / 管理能力 / 协作能力 / AI 能力 / 自动化能力。
每个功能必须答三问(本档硬要求):
> 是什么 → 解决什么问题 → 对用户起什么作用
维度按品类自定、可增不可缺。每个维度都要出现「解决什么问题 / 起什么作用」这一层。
判据:读的人能说清每项能力是为什么问题而存在的;只摆能力名、不接「解决什么问题」的写法不达标。
---
## 6. 产品机制与交互方式
关注点:How / Why —— 怎么解决、为什么这样设计。比较:核心任务流程 / 信息组织方式 / 导航结构 / 核心交互 / 默认行为 / 自动化机制 / AI 与用户的分工 / 关键反馈 / 异常处理 / 用户控制权。
写的是「它为什么这样设计、这样设计给用户带来什么结果」;界面外观描述归 §5 的能力层。
判据:每条机制都能接出「为什么这样设计 ⇒ 给用户带来什么结果」,与 §4 的场景、§5 的能力形成因果链。
---
## 7. 优势与不足
关注点:vs Whom —— 相对谁更强、相对谁更弱。
判断公式(本档硬要求):
> 优势 / 不足 = 能力表现 × 使用场景 × 对比对象 × 用户价值
例:
> 在「一次要处理大量内容」这个场景下,A 的批量处理能力相对 B 少三步重复操作,因此更适合高频批量生产。
四条要素都要落地:能力表现(强在哪)→ 使用场景(在什么处境下)→ 对比对象(比谁强/弱)→ 用户价值(带来什么结果)。精确到「少几步」不是硬要求,但比较基准必须写出来。
判据:任何「好 / 差 / 强 / 弱」都能说出相对谁、在什么场景下、带来什么结果。
---
## 8. 竞品能力矩阵
写什么:一张横向矩阵收口 ——
```
能力 / 场景 竞品A 竞品B 竞品C 机会
… … … … …
```
取值口径:矩阵里的行取有代表性、能区分竞品的能力与场景,挑的是「看完这一张就能抓住差异」的那些行。
判据:矩阵要能看得出五件事:行业共识能力 / 竞品之间的差异能力 / 某家的独有能力 / 普遍做得不好的能力 / 还没被解决好的需求。
---
## 9. 可借鉴点与产品机会
写什么:三类分开写 ——
1. 该借鉴:竞品已验证有效,且与本产品目标一致。
2. 该避开:竞品存在明显问题,不应照搬。
3. 可突破:需求真实存在,但竞品解决得不够好。
每条给:机会点 → 对应场景 → 用户问题 → 竞品现状 → 建议方向。
判据:本节每一条都要能追回 §4 / §5 / §7 的某一条。
---
## 10. 结论(产品层)
写什么(一律写成产品层的表述):用户最核心的需求是什么 / 竞品共同解决了什么 / 竞品共同存在什么问题 / 哪些能力已经是基础能力 / 哪些能力还能形成差异 / 本产品应优先解决什么。
判据:结论只落在产品层,并且能一句话接回 §0.3 的完成判据。
---
## 11. 独立分析体(每个竞品一份)
落点:`docs/pm/<项目>/research/1b-独立分析/<竞品名>.md`。放这个子目录是因为 ①段产出白名单闸门只扫 `research/` 顶层的 `.md`(判据见 `scripts/check_naming.py` 的 `WHITELIST`),独立体放进子目录天然放行,竞品再多也不会撞白名单,不必为此扩白名单。
> 存量项目里的 `证据附卷/` 是历史落点,不强制迁移;新项目按上面这条走。
七节齐全,一节不许缺。其中三节写法固定(必答项),另外四节写法自由。
> 口径(2026-10-07 用户定案,选「方案 A」):定太粗等于没定,定太细遇到形态不一样的竞品会别扭,所以只把最容易漏的几组定死,不把整份写成填空题。
写法固定的三节:每组几行、每行叫什么、什么顺序都固定。取不到证据时那一行照写,内容写「取不到:<原因>」,不许删行,也不许改写成一段话蒙过去。
第 2 节「用途」固定四行:
```
- 形态:
- 给谁用:
- 干什么用:
- 证据等级:
```
第 3 节「场景」固定六行,沿用户实际动作链:
```
- 进入方式:
- 操作路径:
- 核心步骤:
- 系统帮了什么:
- 最终产出:
- 哪一步最省力 / 最麻烦:
```
(整节都取不到 ⇒ 六行全写「取不到:<原因>」,并把缺口列在节末。不许拿功能名罗列冒充使用过程。)
第 6 节「强在哪、弱在哪」每写一条强弱,就是固定四行;有几条就重复几组:
```
- 能力表现:
- 在什么场景:
- 相对谁:
- 对用户什么结果:
```
写法自由的四节(结构自己定,判据照旧):
1. 它是谁、属哪一层、为什么纳入 —— 竞品名、形态、竞品池层级、纳入理由(分水岭是用户的选择,不是名气大小)。
4. 能力:它有哪些功能,各解决什么问题、起什么作用 —— 每项能力答三问(是什么 → 解决什么问题 → 对用户起什么作用);只摆能力名、不接「解决什么问题」的不达标。
5. 机制:它怎么做到的,为什么这样设计 ⇒ 给用户什么结果 —— 每条机制都要接出「为什么这样设计 ⇒ 给用户带来什么结果」。
7. 对我们:该借鉴 / 该避开 / 可突破 —— 每条给「机会点 → 对应场景 → 用户问题 → 它现在怎么做 → 建议方向」。
取证范围 ↔ 可答节次(不许越级答):取证深度决定哪几节能真答,越级答就是编。
- 只有官方自述与仓库元数据(无源码、无界面)⇒ 第 4、5 节只能写「官方自述的能力」与「有据的推断」,并逐条标证据等级;第 3 节的六行多半只能写「取不到」,那就照实写并列出缺口。
- 有源码 ⇒ 第 4、5 节可写实现级结论。
- 有界面(截图 / demo / 亲自跑过)⇒ 第 3 节才写得完整。
判据:七节齐全;三组必答项的行都在,取不到的写「取不到」而不是留白;第 4 节每项能力都接了「解决什么问题 / 起什么作用」;第 6 节每条强弱都写了「相对谁」。
---
## 附:输出检查
交付前逐条过。任一条为「否」,退回修改,不交付。
汇总对比体(`research/1b-竞品分析.md`,§1—§10):
- [ ] §1 把本次目标与竞品池写死在开头,五问各有明确落点
- [ ] 竞品池三层齐全,点名参考实装已收录并标明层级
- [ ] §4 能说清「用户什么时候、为什么用」,并写出实际把事办成的过程
- [ ] §5 每个维度都接了「解决什么问题 / 起什么作用」
- [ ] §6 每条机制都接了「为什么这样设计 ⇒ 给用户什么结果」
- [ ] §7 每条判断都写明了「相对谁、在什么场景、什么结果」
- [ ] §8 矩阵取的是有代表性、能区分竞品的行,且看得出共识/差异/独有/短板/未解决需求
- [ ] §9 每一条都能追回 §4 / §5 / §7
- [ ] 全文只围绕用途 / 场景 / 功能 / 作用 / 优势展开
- [ ] §10 结论只落在产品层,并可一句话回答 §0.3
独立分析体(`research/1b-独立分析/<竞品名>.md`,§11):
- [ ] 第 1 节写了它属哪一层、为什么纳入(判据是用户的选择,不是名气)
- [ ] 第 2 节的四行都在(形态 / 给谁用 / 干什么用 / 证据等级),没有留白
- [ ] 第 3 节的六行动作链都在;取不到的写了「取不到」,没有留白、也没有拿功能名罗列顶替
- [ ] 第 4 节每项能力都接了「解决什么问题 / 起什么作用」
- [ ] 第 5 节每条机制都接了「为什么这样设计 ⇒ 给用户什么结果」
- [ ] 第 6 节的每组强弱都是四行(能力表现 / 在什么场景 / 相对谁 / 对用户什么结果)
- [ ] 第 7 节三分类齐全(该借鉴 / 该避开 / 可突破)
两种体例齐备:
- [ ] 竞品池里每一个都有独立分析体(用户点名合并的按用户口径合并)
- [ ] 汇总对比体存在,且没有把独立体的内容整段抄一遍(横向铺开才算汇总体)
---
## 变更历史
- **2026-10-07 第四版**:独立分析体定下「必答项」写法。用户 2026-10-07 在「只定必答项 / 七节全定死 / 只定最疼两处」三个候选里选了**方案 A**(只定必答项)。改动:§11 把第 2 节(用途)四行、第 3 节(场景)六行、第 6 节(强弱)每组四行定为固定写法,取不到照写「取不到」;第 1、4、5、7 节写法自由;《输出检查》同步改成按行核。
- **2026-10-07 第三版**:补「两种交付体例」。起因:用户 2026-10-07 原话「**竞品分析 有独立分析也有汇总分析 都应该要用上,谁说只有一份竞品分析了**」—— 本档第二版只描述了汇总对比体(§1—§10),独立分析体一字未提,于是独立分析被写成仓库取证记录、没有产品面。本次改动:① 新增 §0.4「两种交付体例」定死职责边界与数量;② 新增 §11「独立分析体」给出七节结构与「取证范围 ↔ 可答节次」对应表;③ 《输出检查》拆成汇总对比体 / 独立分析体 / 两体例齐备三段。
- **2026-10-07 第二版**:按评审意见收紧机制层。① §1 把「五问」明确定为**核心模型**并给出关注点列;② §4 / §5 / §6 明确职责边界(When·Why / What / How·Why);③ §7 判断公式补上**对比对象**(相对谁);④ §2 把「点名参考实装」的归属**定死在竞品池第三层**,消除与章节结构的歧义;⑤ §8 补矩阵取值口径;⑥ 全文改成正向表述。
- **2026-10-07 第一版**:全文重写为《竞品分析方法论(1b · 产品视角)》(用户口径:讲用途 / 场景 / 功能 / 作用 / 优势)。新增 §0 Scope 与文末《输出检查》。改版前的英文版已退役留痕于 `_superseded-competitor-analysis-英文商业版.md`。
@@ -0,0 +1,169 @@
# 1a 需求文档(grill-me · grill 提问法 · 全场唯一一份)
> 本文件是 `stage-discovery` 的方法论文档,由模型按需加载,没有斜杠命令。
>
> 来源:`mattpocock/skills`(MIT)的 `grilling`。上游把 `grill-me` 做成只含一句 `Call the Skill tool with "grilling"` 的 stub,在这里属于多余跳转,故合并为一个自包含 skill 并做 PM 适配。
>
> ⭐⭐ 2026-10-06 用户定案:「grill-me 也应该拿到第一步了,第二步就是细化功能」。
> ⇒ 本份是全场唯一一份 grill-me,A / B 两节覆盖需求与功能两轮提问。
## 适用位置
PM 链路的①段 1a 需求文档,在任何一项调研之前先做(产出 `1a-需求文档.md`)。
起点对齐只写一句话(做什么 / 为谁 / 不做什么),本子步把这句摊开成决策表。没有这张表就去做取证,等于拿着自己的猜测去查资料,查回来的东西答的不是用户的问题。
## ⭐⭐ 合并后要覆盖两个火力点(分两节提问,⛔ 不许省略后半节)
| 节 | 火力点 | 原归属 | 不做的后果 |
|---|---|---|---|
| **A 节** | **要做什么、为谁、边界在哪** | ①段 | 不澄清就没法取证 —— 查回来的答的不是用户的问题 |
| **B 节** | **做成什么样、哪些情况不成立、状态怎么流转** |②段| 不压测就没法写②段—— AI 带着理解错的需求一路做到原型 |
> 合并的代价要先说清:两个火力点合到一处,提问量必然变大。
> 解决办法是分节提问:先问完 A 节,再开 B 节;每节内部照旧一轮问完整个 frontier。
> ⛔ 不许因为量大就把 B 节略过。B 节里没问清的状态与不成立条件,②段不会再有第二次机会(②段从 2026-10-06 起只细化功能,不再反问)。
## 核心规则
把需求当成决策树:每个决策分支出依赖它的决策。
按轮次(round)推进,不按单问推进。
frontier = 所有前置条件已定的决策,也就是现在就能问、不必先猜其他答案的那些问题。
一轮问完整个 frontier:逐条编号、每个都给出你的推荐答案,然后停下等用户回答,再据此重算 frontier 进入下一轮。
单轮格式:
```
❓ **Q1** - **<问题标题>**:<问题正文,可多段,含选项>
➡️ <你的推荐答案>
---
❓ **Q2** - **<问题标题>**:<问题正文,可多段,含选项>
➡️ <你的推荐答案>
```
依赖必须排序:若某问题的答案依赖于本轮另一个尚未决断的问题,它属于下一轮,不属于本轮。
事实归你,决策归用户。需要外部事实(竞品现状、市场价格、技术可行性、法规)时,派 sub-agent 去查,不要问用户。也不要因此阻塞——只有下游问题等 sub-agent 回报,本轮其余问题照问不误。用户负责拍板,不负责查资料。
## 反问优先,模型可自动补全(本段的关键差别)
默认动作是反问,不是替用户决定。每个问题都先抛给用户,并附上你的推荐答案与理由。用户看到选项才好拍板,光看问题会卡住。
允许自动补全,但要留痕。下列情况模型自己给出答案并继续推进,不阻塞:
- 用户明确说"你定 / 不知道 / 先按你的来"
- 用户连续两轮未回应某个问题
- 问题属于事实类,sub-agent 查得到(此时直接给结论,标 `【事实】`)
自动补全的产出必须满足三条:
1. 标 `【假设】`,并写清理由与「一旦不成立会有什么后果」
2. 每轮结束把当前所有 `【假设】` 项汇成一份待复核清单,让用户一次性过,不静默塞进结论里
3. 未经复核的 `【假设】`,在 1c 产品定位与场景里不得当作事实使用,也不得写进策略结论
自动补全不等于替用户拍板。它换的是「别卡住」,不是「别问」。用自动补全把问题糊过去,比不澄清更糟。
## 结束条件
frontier 为空 = 决策树每个分支都走过、没有静默假设,且待复核清单已被用户过了一遍。
用户始终不回应时,允许带着 `【假设】` 往下走,但要在 `1a-需求文档.md` 顶部写明「本表 X 项为模型假设,未经用户确认」,让下游一眼看到风险。
> 状态行不许只写好消息:顶部必须同时给出「已确认 N 项 / 模型补全 M 项(M 项未经用户确认)」两个数。「frontier 为空 / 无遗留未决项」不得单独出现。本项目实测踩过:状态行写「frontier 为空——12 项决策全部有来源」,同文件待复核清单里躺着 3 项未经用户逐条回应。
## 与 product-planning 的约束隔离(重要)
`product-planning` 常规流程设有「提问上限 3 个」与「一次一段」。本子步不受这两条约束,把需求问清楚正是它的全部价值。
因此进入本子步时必须先显式告知用户「接下来会连续多轮提问,每轮若干编号问题,每个都附推荐答案」,退出后恢复常规约束。不声明就直接连问,会被当成跑偏。
## A 节必须覆盖的分支(要做什么、为谁、边界在哪)
下表是需求决策树的一级分支,每个分支下再按依赖展开。
| 分支 | 要问清的 |
|---|---|
| 目标 | 解决什么问题、成功怎么衡量、谁最痛 |
| 用户 | 谁用、熟练度、在什么场景下用、现在怎么凑合 |
| 范围 | 第一版做什么、**明确不做什么**、什么东西不在这个产品里 |
| **交付形态** | **这套东西应该有几个界面 / 一页几件事 / 信息承载到哪一层**(2026-09-29 新增) |
| 素材与数据 | 手上已有什么(存量数据、素材、样例)、还缺什么才能验证 |
| 约束 | 预算 / 人力 / 时间 / 合规底线 |
| 依赖 | 依赖哪些外部系统、平台、第三方能力 |
| 竞品与替代 | 用户现在拿什么替代、为什么换(事实类可自动补全) |
> ⭐ 为什么「交付形态」是必问支(实战教训):
> 原有 7 个必问分支覆盖了「做什么、为谁、边界」,唯独没问「交付成一个什么样的东西」。本项目①段问完了范围却漏掉形态,③段于是把六件事塞进一个页面,做成 2,884 行、约 190 个交互函数的「控制台」,被用户判定为「最多算一个产品框图」。
>
> 本支至少要问清三件事:
> | # | 问题 | 为什么在 ① 段问 |
> |---|---|---|
> | 1 | **价值主要在哪一层**——约定 / 文件结构,还是界面? | 决定界面的**复杂度上限**。答"约定为主"则界面必须薄 |
> | 2 | **应该有几个界面**,每个界面只办一件事时的"一件事"是什么 | 结构性决策;**漏掉它,后续所有界面文档都要重做** |
> | 3 | **信息承载到哪一层**——哪些必须一进来就看到,哪些点一下能看到即可 | 决定"信息墙"是否发生(②段会据此出分档表) |
>
> 不适用时:若产品确实没有界面(纯 CLI / 纯约定),在 `1a-需求文档.md` 写明「本产品无界面,交付形态=约定 + 脚本」,不留空、不跳过。
## B 节必须覆盖的分支(做成什么样、哪些情况不成立、状态怎么流转)
> 这一节是 2026-10-06 从②段合并进来的。原②段的写法是「在 `create-prd` 之前做一次功能压测」,目的是把「需求澄清」从可跳过的步骤变成强制环节,避免 AI 带着理解错的需求把②段和原型一路做完。合并后目的不变,只是位置前移到这里。
| 分支 | 要问清的 |
|---|---|
| 形态与骨架 | 有哪几页、每页大致几个板块、板块怎么排、页与页怎么连(**粗粒度即可**,细的归②段的《界面布局》) |
| 不成立条件 | 什么情况下这套东西**不适用 / 用不起来**(不是"异常",是"这个做法本身失效") |
| 状态流转 | 有哪些状态、按什么次序触发、彼此怎么迁移(起始 / 中间 / 终态) |
| 失败与恢复 | 失败怎么办、能否重试、谁兜底 |
| 数据契约 | 输入什么、产出什么、谁来维护、存在哪 |
| 权限 | 谁能看、谁能改、越权怎么处理 |
| 并发与幂等 | 同一件事被做两次会怎样、多个人同时改会怎样 |
> ⭐ B 节的产出落进 `1a-需求文档.md`。
> ⭐ B 节问的是「做成什么样」,不问「做成什么样好看」:配色 / 字体 / 间距 / 动效一律不在这里问(那是③段)。
> ⭐ B 节的「形态与骨架」是粗粒度:本轮只确认「有哪几页、大概几个板块」,精确的板块清单与布局图归②段。
> ⛔ 不许在 B 节就把页面结构写死 —— 那会让②段的《界面布局》变成照抄。
## 必须落盘
全部轮次结束后,输出一张决策表写入 `docs/pm/<项目>/research/1a-需求文档.md`:
| # | 问题 | 决策 | 来源 | 理由 | 影响范围 |
|---|---|---|---|---|---|
| Q1 | ... | ... | 用户拍板 / 【假设】 / 【事实】 | ... | 影响哪几份下游文档 |
「来源」列是本表的关键,一眼看出哪些是用户拍的板、哪些是模型补的。1c 的每条结论都要能追到本表的某一行(或追到 1b 的某份调研文件)。
这张表是 1b(调研什么)与 1c(方案怎么定)的共同输入,也是②段写那两份文档的输入,不许与已定决策冲突。
## 反面清单
- 跳过本子步直接开调研,拿着自己的猜测去查资料
- 一轮只问一个问题,浪费轮次
- 问用户「你觉得竞品怎么做的」这类你本该自己查的事实
- 把依赖未决答案的问题塞进本轮
- 一轮抛几十个无编号、无推荐答案的问题,让用户无从下手
- 不声明就开问,与 product-planning 的常规节奏冲突
- 把自动补全当默认动作,用户没说话就替他决定,还不标 `【假设】`
- 标了 `【假设】` 却没进待复核清单,静默流进策略结论
- 漏问「交付形态」这一支(2026-09-29 新增):问完了「做什么、为谁、边界」,却没问「应该有几个界面、价值在哪一层」。后续 ②③ 段会在无形态依据的情况下自行发明结构,做出来的东西被判定为「产品框图」。该支为 A 节必问项
- ⛔ 只做 A 节、跳过 B 节(2026-10-06 新增):B 节是从②段合并来的,跳过它等于把功能压测整个删掉,接口会带着没压测过的需求直接进②段与原型
- ⛔ 在 B 节把页面结构写死(2026-10-06 新增):B 节只给粗粒度形态;精确板块清单与布局归②段
- ⛔ 状态行只写「frontier 为空」,把未经确认的模型补全藏在正文(2026-10-02 新增)
## 附:输出检查
交付前逐条过。任一条为「否」,退回重跑。
- [ ] 起点那句(做什么 / 为谁 / 不做什么)已摊开成决策表,写入 `docs/pm/<项目>/research/1a-需求文档.md`
- [ ] A 节各分支都问过,其中「交付形态」支问清了「价值主要在哪一层 / 应该有几个界面 / 信息承载到哪一层」
- [ ] B 节各分支都问过,状态与不成立条件没有遗漏
- [ ] 每轮问题都有编号与推荐答案,依赖未决答案的问题没塞进本轮
- [ ] 所有 `【假设】` 都进了待复核清单;状态行同时给出「已确认 N 项 / 模型补全 M 项(M 项未经用户确认)」,没有单写「frontier 为空」
- [ ] 决策表的「来源」列逐行标了 用户拍板 / 【假设】 / 【事实】,1c 的每条结论都能追到某一行
@@ -0,0 +1,119 @@
# Product Strategy Canvas
> 本 skill 由模型按需加载,没有斜杠命令。对话里还没定出对象时,先向用户确认,不要自行假设。
> 结果写入 `docs/pm/<项目>/<阶段>/<主题>-<类型>.md`,阶段取 `research` / `strategy` / `prd` / `ux`;`<项目>` 是项目 slug,定义见 `product-planning` 的「项目与路径约定」。
## 这份做什么
- 名字:product-strategy
- 干什么:按九节产品策略画布,给在做的东西写一份产品策略,覆盖愿景、市场切分、相对成本、价值主张、取舍、指标、增长、能力、护城河。
- 什么时候用:写产品策略、策略画布、策略文档时。
## 动手前先有的料
- 产品是什么、现在什么定位
- 市场情况、竞品、用户线索
- 手上的资源、约束、优先级
- 相关的业务或市场数据
## 九节画布
### 1. 愿景
- 靠什么打动人
- 想做成的样子
- 坚持什么
### 2. 市场切分
- 按人遇到的问题切,不按人口统计切
- 用户要办的事(JTBD)、想要的结果、限制条件
- 第一拨切给谁
- 为什么先切这一拨
### 3. 相对成本
- 走低成本(像西南航空),还是走独特价值(像星巴克)
- 相对竞品,成本处在什么位置
### 4. 价值主张
每个目标切分都写四条:
- 之前:用户现在的处境、痛点、需求
- 怎么做:产品怎么解决
- 之后:好成了什么样
- 替代:用户今天拿什么凑合
### 5. 取舍
- 明确不做什么
- 哪些功能、哪些市场不在范围内
- 说不,怎么换来聚焦、放大价值
### 6. 关键指标
- 北极星指标:带动整体业务的那个指标
- OMTM(本季只优化这一个):这一季盯的那个
### 7. 增长
- 销售驱动,还是产品驱动
- 主要获客渠道
- 怎么放量
- 单位经济怎么样
### 8. 能力
- 需要哪些本事和资源
- 哪些自己做、哪些找伙伴
- 要赢,必须练出哪些能力
### 9. 别人抄不走的地方
- 竞品为什么不容易抄
- 靠什么挡住(网络效应、切换成本、专利)
- 新对手要进来,门槛在哪
## 怎么往下走
1. 先定愿景,写清它要带来的变化。
2. 切出 2–3 个目标市场,写清各自要办的事。
3. 定成本位置:走低成本还是高价值。
4. 给每个切分写价值主张。
5. 列明取舍,写清不做什么。
6. 定北极星指标和本季的 OMTM。
7. 写增长打法和渠道。
8. 记下要具备的能力和要找的伙伴。
9. 说清护城河和门槛。
10. 回头查九节自洽:各部分互相撑得住。
11. 挑出「必须成立才能赢」的关键假设,并给出用最小成本去验的办法。
## 注意
- 九节要能自洽,互相撑得住。
- 策略用来做决策,讲清楚才落得快。
- 市场变了就回头重看,按季度。
### 模板
- [Product Strategy Canvas (PPTX)](https://docs.google.com/presentation/d/1xRBqSOISvAKzwM_z5tC8fiuO5O2YhboB/edit?usp=sharing&ouid=111307342557889008106&rtpof=true&sd=true)
### 延伸阅读
- [Product Strategy Canvas: From Vision to Action](https://www.productcompass.pm/p/product-strategy-canvas)
- [Product Strategy Examples: Google Maps, Netflix, OpenAI](https://www.productcompass.pm/p/product-strategy-examples)
- [Product Vision vs Strategy vs Objectives vs Roadmap: The Advanced Edition](https://www.productcompass.pm/p/product-vision-strategy-goals-and)
- [Product Model First Principles: Product Team and Product Strategy In Depth](https://www.productcompass.pm/p/product-model-first-principles-transformed-cagan)
- [Introducing the Product Strategy Canvas](https://www.productcompass.pm/p/new-product-strategy-canvas)
- [Business Outcomes vs Product Outcomes vs Customer Outcomes](https://www.productcompass.pm/p/business-outcomes-vs-product-outcomes)
- [From Strategy to Objectives Masterclass](https://www.productcompass.pm/p/product-vision-strategy-objectives-course) (video course)
## 附:输出检查
- [ ] 九节都有内容,且互相自洽
- [ ] 市场按要解决的问题切,不按人口统计切
- [ ] 每个目标切分都写了价值主张四条(之前 / 怎么做 / 之后 / 替代)
- [ ] 取舍一节写明了「不做什么」
- [ ] 北极星指标和本季 OMTM 各一个
- [ ] 挑出了「必须成立才能赢」的关键假设
@@ -0,0 +1,115 @@
# 使用场景(1c · 就是用户故事)
> 2026-10-06 用户定案:「使用场景 就是 用户故事 按照用户如何使用解决什么问题来梳理」。
> 旧结构(处境 / 现在怎么凑合 / 不用会用什么 三段式)已弃用,改成用户故事格式。
>
> 沿革:`value-proposition.md`(六段式)→ 2026-10-02 改称「使用场景」(三段式)→ 2026-10-06 改为用户故事格式。
---
## 一、格式(唯一句式)
每条场景写一句,四个槽位都要有:
```
作为【谁】,当【什么处境】,我要【办成什么】,这样【得到什么结果】
```
| 槽位 | 写什么 | 不许写什么 |
|---|---|---|
| 作为【谁】 | 一个具体身份(此刻的我 / 要交差的我 / 三个月后回来的我)。不写「用户」「某类人」 | 人群标签、画像分类名 |
| 当【什么处境】 | 触发这件事的具体时刻与场合,要能被观察,或被用户原话印证 | 「经常会」「有时候」这类模糊频率 |
| 我要【办成什么】 | 用户要达成的事,用用户的词写 | 功能名、按钮名、页面名 |
| 这样【得到什么结果】 | 办成之后少掉了什么麻烦(少花时间 / 少出错 / 不用记) | 愿景、North Star、「改成什么样」 |
### ⭐ 一句话判据:能不能读给用户听
把这条场景原样念给用户听,他点头说「对,就是这样」,就算成立;
他说「也不是…」或听不懂,就重写。听不懂通常是因为槽位里混进了功能名。
## 二、它跟②段的关系
《使用场景》是②段功能清单的直接推导依据。
- ②段每列一项功能,都要能追回本份的某一条场景。追不回的,那条功能没由来,②段该砍。
- ②段按使用场景梳理功能(一条场景下的功能可能跨好几个页面),并标优先级。
- 反向也成立:本份某条场景在②段一条功能都推不出来,就是空愿望 —— 要么补功能,要么删场景。
> 本份就是用户故事,一份承载全部。
> 不写验收标准(那是②段功能清单的事),不写 Design / 交互(那是③段)。
## 三、⛔ 四条硬禁令
### 1. 不许凭空打分
Importance / Satisfaction / Score / 优先级分数,没有数据源就不许出现。
> 来源:本项目实测。分数一旦填进去,会一路传到下游的功能优先级,所以判断就写成判断,不要伪装成数。
> ✅ 正确写法:`【判断】我改错了回不去(依据:`1a-需求文档.md` Q1 用户原话)` —— 把来源标出来,不假装是数。
### 2. 不许写「改成什么样」
愿景、North Star、「最终形态」不在本段。
理由只有一条:愿景不可核,而且它天然会往界外长 —— 长成「要做哪些功能」就到②段了。
### 3. 不许写功能名与界面
不许在「我要办成什么」里写功能名;不许写「页面放哪几块」「怎么跳转」「要不要侧区」。
本段只给用户视角的处境与诉求:谁、什么时候、想办成什么、办成了少什么麻烦。
### 4. 不许把「处境」写成抽象人群
「处境」要具体到能被观察,或被原话印证。
- ❌「需要频繁回退版本的用户」
- ✅「改错了想退回去,但记不清是哪个版本的时候」
## 四、边界(防越界的对照)
- 场景归①段本份;②段按它梳理功能,不重写场景(重写必打架)。
- 不写功能清单(那是②段 2a)。
- 不写界面结构 / 板块布局(那是②段的《界面布局》与③段 D0)。
## 五、旧三段式的残留价值(别丢)
旧结构里的三段不是废料,内容改挂到新格式的槽位里:
| 旧段 | 挂到哪 |
|---|---|
| 处境(Why) | → **「当【什么处境】」** 槽位 |
| 现在怎么凑合(What Before) | → **「这样【得到什么结果】」的反面**:现在凑合着做,多付了什么 |
| 不用会用什么(Alternatives) | → **「得到什么结果」的对照**:不用它,用户会退回到哪个替代办法 |
> ⭐ 替代方案那一问仍然最有杀伤力(2026-10-02 整合自外部 `sharp-problem-test`):如果替代方案「简单到不值一提」,那这个问题就不值得做。
> ⚠️ 只作提问,不作判死。绝大多数真实需求都能被编出一个 trivial 替代(「不用不就行了」),做成硬判据会大量误杀。
> ✅ 三个可接受的「不简单」的证明,满足任一即过:① 替代方案有真实成本(时间 / 钱 / 出错);② 替代方案不可得(外部没有,要自建);③ 替代方案代价随规模增长(手动做十个还行,一百个就崩)。
> ⭐ 本项目实测印证:`11-竞品分析.md` 的 GitLab 案例,被砍的官方理由是「维护成本超过实际使用量」。落到判据上,真正卡住它的是「成本会不会随规模涨」,光是「简单」本身不构成问题。
## 六、每条的完成判据(可机械核对)
| 检查项 | 判据 |
|---|---|
| 四槽位齐全 | 「作为 / 当 / 我要 / 这样」四个词都在,缺一不算完成 |
| 谁 | 是具体身份,不是「用户」「某人」 |
| 处境 | 能追到 `1a-需求文档.md` 的某一行,或一句用户原话;追不到的按 `【判断】` 标并说明依据 |
| 办成什么 | 零功能名(出现功能名即越界到②段) |
| 得到什么 | 写的是少掉的麻烦,不是愿景 |
| 可读性 | 能原样念给用户听而不需要解释 |
## 七、产出
`docs/pm/<项目>/strategy/31-使用场景.md`
> ⚠️ 与旧产物的关系:现有 `31-使用场景.md` 是旧三段式(处境 S-A/S-B/S-C + What Before 五条 + Alternatives 五条)。
> 改格式后旧产物需重写(把三段内容按§5 映射表挂进四槽位),不许两种格式并存。
## 附:输出检查
- [ ] 每条场景四个槽位齐全(作为 / 当 / 我要 / 这样),缺一不算完成
- [ ] 「谁」是具体身份,不是「用户」「某类人」
- [ ] 「处境」能追到 `1a-需求文档.md` 的某一行,或一句用户原话
- [ ] 「办成什么」里零功能名
- [ ] 「得到什么」写的是少掉的麻烦,不是愿景
- [ ] 每条场景能原样念给用户听,不需要解释
@@ -0,0 +1,63 @@
# User Personas
> 本 skill 由模型按需加载,没有斜杠命令。对话里还没定出对象时,先向用户确认,不要自行假设。
> 结果写入 `docs/pm/<项目>/<阶段>/<主题>-<类型>.md`,阶段取 `research` / `strategy` / `prd` / `ux`;`<项目>` 是项目 slug,定义见 `product-planning` 的「项目与路径约定」。
## 这份做什么
从调研数据里做出能用的用户画像,覆盖用户真实的差异。画像要有数据撑:要办的事、痛点、想要的结果,再加一条和直觉相反的发现,用来指导产品决策。
## 怎么做
### 输入
针对在做的东西,做 3 个用户画像。
用户给了 CSV、Excel、问卷、访谈记录或其他资料,就直接读、直接分析:提炼其中的规律、人群特征、动机和行为。
### 分析步骤
1. 收资料:把手上所有调研资料和文档读一遍。
2. 找规律:找出反复出现的特征、目标、痛点、行为。
3. 分组:按动机和「要办的事」相近的,归成一个个画像。
4. 补细节:给每个画像攒出一份像样的画像。
5. 校验:回头对照,确保每个画像都能落在真实调研发现上。
### 每个画像写这几块
3 个画像,每个都要有:
姓名和基本信息:年龄段、角色或职位、公司规模(B2B 才有)、关键特征。
主要「要办的事」:这个人想达成的核心结果;这件事在什么处境下、多久做一次。
三条主要痛点:挡住他办成事的具体障碍;每条影响多大。
三个想要的结果:他想要的收益或结论;他怎么衡量成功。
一条和直觉相反的发现:从数据里看出来的、意料之外的行为或动机;它为什么影响产品决策。
产品契合度:在做的东西怎么接住(或接不住)这个人的需求;有哪些摩擦点或没满足的地方。
## 几条要求
- 所有结论都落在真实数据上,不猜。
- 有原话就引原话。
- 看行为规律,不只看人口统计。
- 画像之间尽量分清、不重叠。
- 数据缺口或还要再查的地方,标出来。
### 延伸阅读
- [User Interviews: The Ultimate Guide to Research Interviews](https://www.productcompass.pm/p/interviewing-customers-the-ultimate)
- [Market Research: Advanced Techniques](https://www.productcompass.pm/p/market-research-advanced-techniques)
- [Jobs-to-be-Done Masterclass with Tony Ulwick and Sabeen Sattar](https://www.productcompass.pm/p/jobs-to-be-done-masterclass-with) (video course)
## 附:输出检查
- [ ] 做了 3 个画像
- [ ] 每个画像都有姓名与基本信息、主要「要办的事」、三条主要痛点、三个想要的结果、一条和直觉相反的发现、产品契合度
- [ ] 每条结论都落在真实数据上,不猜
- [ ] 有原话的地方引了原话
- [ ] 画像之间分清、不重叠
- [ ] 数据缺口标了出来
@@ -0,0 +1,84 @@
---
name: stage-proto-doc
description: 产品规划第④段,原型说明文档。在已交付的原型 HTML 上补说明区:每个界面状态下方按「状态 → 使用场景 → 从左到右流程图 → 步骤说明(功能作用 / 输入边界 / 异常情况)」铺开,并给每条流程配逐步骤的演示引导。当用户要给原型加功能说明区、写原型说明文档、做操作指引演示,或说"只做原型说明文档"时调用。
---
# ④ 原型说明文档
回答"每个状态有哪些场景、每个场景怎么走、每一步到底做什么、边界在哪、坏了会怎样"。
产出长在原型 HTML 自身(`designs/<项目>/*.html`),不额外落 md,免得两处维护、说法对不上。
顺序 4a → 4b → 4c。说明区先齐,再挂演示引导。
> 表格「读」列是该方法论文档,相对路径的基准是本 skill 目录。执行子步前先读它。
## 输入
| 来自 | 读什么 | 用来定什么 |
|---|---|---|
| ③ | `designs/<项目>/*.html` | 要挂说明区的原型本体;状态数与状态名以它为准 |
| ② | `docs/pm/<项目>/prd/2a-产品功能.md` · `docs/pm/<项目>/prd/2b-界面布局.md` | 术语口径、状态流转、异常路径、页面骨架 |
| ① | `docs/pm/<项目>/strategy/30-产品策略.md` | "不做什么"的边界,说明区不得写出范围外的能力 |
上游缺失时标 `【假设】`继续,不强制回补。
## 4a 场景盘点
| 子步 | 读 | 产出 |
|---|---|---|
| 状态 × 场景盘点(必做,最先) | `references/doc-area-spec.md` | 每个界面状态下的使用场景清单 |
每个状态都要盘(正常态 / 加载中 / 空态 / 加载失败),不许只写正常路径。
场景粒度是"人要完成的一件事",不是"一个按钮"。典型一条:拿到一批数据 → 判一条 → 遇到没跑完的怎么办 → 批量的影响范围 → 筛不到东西时。
## 4b 说明区
读 `references/doc-area-spec.md`,按它给的层级与交互铺:
1. 说明区挂在原型各状态的下方,随演示条切换的状态一起变
2. 每个场景一条:可点开,点开后是该场景的从左到右流程图(序号节点 + 箭头)
3. 点流程里的某一步,在流程图下方出该步说明,固定三段:功能作用 / 输入边界 / 异常情况
4. 同级单开:一次只展开一个场景、一次只选中一个步骤;再点已选中的步骤即收起
三段缺一不可,且必须是对着原型实测过的事实,不是套话:
| 段 | 写什么 | 判定标准(可核对) |
|---|---|---|
| 功能作用 | 这个组件做什么、给谁看、落笔后产生什么 | 换一个组件,这句话就不成立 |
| 输入边界 | 取值域 / 上限 / 前置条件 / 可选与必填 | 能说出"什么不被接受"或"最多几条" |
| 异常情况 | 失败 / 空 / 禁用 / 重复提交 / 文案红线 | 至少覆盖一种"坏了怎么办",且给出恢复路径 |
## 4c 演示引导
读 `references/guided-tour.md`,给每条流程挂"演示"按钮:
1. 每个步骤补三样数据:`target`(要高亮的选择器)、`setup`(这一步的前置条件)、`hint`(操作指引,与功能说明 `desc` 分开写)
2. 演示按 `上一步 / 下一步 / 完成` 逐步骤推进,气泡给"第 N / M 步"
3. 纯概念步骤不给 target,不参与演示,按钮置灰并写明原因
## 硬约束
- 说明区是非产品功能,它是原型的自解释注解层。交付时要明说,别让人误以为产品里真有一个说明页。
- 只有原型上有的事实才许写。每一段说明都要能在原型里点到对应元素;写不出 `target` 的步骤,要么承认是概念步骤,要么回去改原型。
- 不得把自动结论表述为人工认可(红线,本项目实测抓过):机器判定只能说"进入队列 / 待人工逐条查看",不许写成"通过 / 已认可"。
- 文案口径跟②段走。同一个概念在说明区与②段里必须同名,冲突时改说明区。
- 4c 交付前必须浏览器实测,逐步骤真点一遍,走完全流程再退出。未跑实测不得报完成。
- 段内子步之间不反问,做完直接进下一个子步。只有三种情况停:信息不足且查不到、破坏性/不可逆动作、用户显式要求(见 `product-planning` 的「执行规则」)。
- `<项目>` 按 `product-planning` 的「项目与路径约定」定;定不出来就停下问用户,不许猜。
## 完成标准
- 原型的每个状态都有场景,四态齐备(缺哪个要写明为什么)
- 每个场景有从左到右流程图,每个步骤都有 `功能作用 / 输入边界 / 异常情况` 三段且非空
- 演示引导能从第一步走到完成,退出后界面回到演示前(含筛选、抽屉)
- 有实测回报(走过的步骤数、失败项、控制台报错原文)
## 反面清单
- 只写正常路径,跳过加载 / 空 / 错误三个状态的说明
- 三段说明写成语义重复的三句话,或整段是"该功能可以提升效率"这类空话
- 把演示引导做成遮罩弹窗,挡住它要教人点的那个东西
- 演示中途改动了用户的筛选 / 抽屉,退出后不还原
- 概念步骤硬凑一个 target,或演示到一半被判"元素不可见"直接结束
- 只写说明区就报完成,没跑过逐步骤实测(自查看不出死按钮)
@@ -0,0 +1,78 @@
# 原型说明区规范
> 本文件是 `stage-proto-doc` 的方法论文档,由模型按需加载,没有斜杠命令。
## 定位
说明区是原型自带的注解层,不是产品功能。它不回答"长什么样",回答的是:
> 站在这个界面上,我这一步在干什么、我能输入什么、什么情况下它不给好脸色。
所以它必须贴在原型各状态的下方,随状态切换一起变。抽出来写一份独立文档,读者就得自己脑补对应关系。
## 层级
```
状态(正常态 / 加载中 / 空态 / 加载失败)
└── 使用场景(人要完成的一件事,可点开)
├── 场景引言(一句话:什么前提下、要达成什么)
├── 从左到右的流程图(序号节点 + 箭头,横向可滚动)
└── 步骤说明(点某一步 → 在流程图下方出三段)
├── 功能作用
├── 输入边界
└── 异常情况
```
四层各管一段:状态说"界面此刻处于什么处境",场景说"人在这个处境下想干成什么",流程说"这件事分几步走",步骤说明说"这一步的职责与边界"。少任何一层,读者都会拿别层的信息去补,然后补错。
## 场景怎么写
- 粒度是"人要完成的一件事",不是一个按钮。"提交驳回"不算场景,"驳回一条片段并完成失败模式归类"才算。
- 一个状态下的场景数控制在 2–4 个。1 个说明不了分支,5 个以上就该拆状态。
- 顺序按发生频率排,不按界面从上到下排。
- 引言一句话写清前提。例:"预审排队、执行中或失败时人工仍可决策,但必须清楚自己在无依据的情况下决策。"
## 从左到右流程图
| 规则 | 说明 |
|---|---|
| 形态 | 横向 `ol`,每项 = 序号圆点 + 步骤名,项间一个 `→` 箭头 |
| 溢出 | 横向滚动,不换行——换行会读成两条并行流程 |
| 交互 | 点步骤 → 流程图下方出说明;再点收起;同级只选中一个 |
| 键盘 | 步骤是 `button`;`aria-current` 标当前项;说明区 `role="region"` 带 `aria-controls` |
| 箭头 | `aria-hidden`,它只是视觉连接符,不进朗读 |
步数控制在 2–6 步:超过 6 步说明这个场景该拆,1 步说明它还不算流程。
## 步骤说明:三段
三段是固定骨架,不改名、不合并、不省段。
| 段 | 回答的问题 | 合格判据 | 不合格示例 |
|---|---|---|---|
| 功能作用 | 这一步做什么、给谁看、落笔后产生什么 | 换一个组件这句话就不成立 | "展示相关信息,提升审核效率" |
| 输入边界 | 取值域 / 上限 / 前置条件 / 必填与选填 | 说得出"什么不被接受"或"最多几条" | "支持筛选" |
| 异常情况 | 失败 / 空 / 禁用 / 重复提交 / 恢复路径 / 文案红线 | 至少一种"坏了怎么办",且给出出路 | "暂不支持" |
写输入边界,常见切入点:数量上限、字数或时长范围、哪些状态才可用、必填项有哪些、一次作用于一条还是全部。
写异常情况,常见切入点:加载中能不能点、失败了怎么重试、重复提交怎么挡、空的时候显示什么、禁用要不要给原因、文案不能写成什么。
### 文案红线
- 不得把自动结论表述为人工认可。机器判定只能说"进入队列 / 待人工逐条查看",不写成"通过 / 已认可 / 已确认"。
- 不用无法区分成因的笼统文案。"暂无数据"要拆成"批次为空"与"筛选无结果"两条出路。
- 不承诺原型里点不出来的能力。说明区每条都要能在原型上指到对应元素。
- 异常态必须给恢复路径。只写"失败了"不算说明,要写清楚下一步按哪里。
## 状态标签与联动
说明区顶部常驻一行"当前状态:xxx",与演示条的状态同源。读者就不会拿正常态的说明去套加载态的行为。
## 自查(逐条打勾)
- [ ] 四个状态都有场景,缺的写明原因
- [ ] 每个状态 2–4 个场景,每个场景 2–6 步
- [ ] 每步三段齐全,且各自能通过上面的合格判据
- [ ] 全文没有"通过 / 已认可"这类把机器结论说成人审的词
- [ ] 每个禁用态都给了原因,每个异常态都给了恢复路径
- [ ] 说明区文案与②段术语逐词一致
@@ -0,0 +1,93 @@
# 演示引导(操作指引)
> 本文件是 `stage-proto-doc` 的方法论文档,由模型按需加载,没有斜杠命令。
## 它是什么
说明区把流程写清楚了,读者仍要自己在界面上找——"这条筛选在左栏还是顶栏?"
演示引导在真界面上按步骤带一遍:点流程的「演示」,高亮框住这一步该动的元素,气泡给操作指引,`上一步 / 下一步` 推进,`完成` 收尾。
它同样是原型的注解层,不是产品功能。交付时要明说,不能让人以为产品里真有一个新手引导。
## 数据契约
每个步骤在原有字段外必须补三样,缺一样就演示不了:
| 字段 | 作用 | 注意 |
|---|---|---|
| `target` | 要高亮的选择器 | 必须是当前状态下真实存在且可见的元素;纯概念步骤不给 `target` |
| `setup` | 这一步的前置条件 | 例:切到某条片段、填入某关键词、打开某抽屉。浮层类 setup 必须在设 `target` 之前执行,否则量不到 |
| `hint` | 操作指引:手该往哪放 | 与 `desc` 分开写。`desc` 回答"这是什么",`hint` 回答"你要点哪";两处写一样等于没写 |
演示可用的步骤数 = 有 `target` 的步骤数。全场景没有可演示步骤时,按钮置灰并写明原因,不是点了没反应。
## 单步的执行顺序(照抄这个顺序)
1. 收掉上一次留下的浮层(抽屉 / 弹窗 / 放大层),把临时筛选复位
2. 应用本步 `setup`(切片段 → 重渲染 → 填筛选 → 开抽屉)
3. 把说明区同步选中到这一步,并展开它所在场景
4. 记下 `target`,滚动到它可见处
5. 画高亮环与气泡,起重绘定时器
6. 播报"第 N 步 + 操作指引"
顺序错了就会出现"抽屉还没露出来就去量它"这类问题。
## 实测踩过的坑
### 1. 一次性测量一定过期 → 必须幂等重绘
量一次目标元素的位置就画环,过一会儿环会错位。实测数据:同一个元素在首帧后仍在变,宽度 `303.33 → 318.67`、顶部 `0.15 → -11.85`(页面滚动量恒定,是滚动条出现/消失带来的回流)。
做法:定时器(约 120ms)反复调用重绘函数,函数幂等——每次重新量、重新画;用几何 key(`left/top/width/height` 取整拼串)去重,没变就直接返回,避免无意义的重排。
别用 `scroll` / `resize` 监听代替定时器:滚动过程中环会滞后,元素自身回流也不触发这两个事件。
### 2. 浮层的可见性过渡会误杀演示
抽屉这类浮层的 `visibility` 会参与 `transition`,`data-open="true"` 之后约 200ms 内 `getComputedStyle().visibility` 仍是 `hidden`,判定函数返回"不可见"。这时直接结束演示,用户会看到"演示刚开始就自己关了"。
做法:给约 2 秒的容错窗口——不可见时先重试,超时才判定失败并给出原因。定时器天然负责重试。
### 3. 高亮环不要加 transition
环的几何每 120ms 重画一次,再加过渡会互相打架:出现拖影,几何断言永远对不上。要让环动起来,靠重绘频率,不靠 CSS 过渡。
### 4. 挖空遮罩用大 spread 的 box-shadow
一个 `position: fixed` 的环 + `box-shadow: 0 0 0 9999px rgba(0,0,0,.45)` 就是"四周压暗、中间挖空",实测可用(用像素采样验证过:#F7F6F3 的底色被压到约 `(144,143,141)`)。
不要为此改成 `clip-path: polygon(...)`——单个 `polygon()` 是一条自相交多边形,不是多个子路径,想挖洞得用 `path()`。能用一行阴影解决就别引这条坑。
### 5. 退出要成对处理:收浮层 + 还原现场
演示会临时改筛选关键词、开抽屉。退出时只隐藏浮层,这些临时态会留给用户。做法:启动时快照当前筛选与关键词,退出时反向还原,再统一重渲染。
顺序有讲究:先关浮层,后清 `tourOn` 标记。关闭浮层会触发焦点归还逻辑,标记还在时它会被守卫拦住,不会把焦点从用户手上抢走。
### 6. 键盘与边界
| 场景 | 行为 |
|---|---|
| `ESC` | 退出演示(演示进行中优先于"关闭顶层浮层") |
| 演示进行中按全局快捷键(`j/k/a/r` 等) | 一律屏蔽,否则按 `j` 会切走当前片段,演示当场跑偏 |
| 演示中切换界面状态 | 自动结束演示并播报原因(说明区内容已随状态换掉,会讲错) |
| 焦点 | 演示中不抢焦点;浮层用 `aria-modal="false"`,因为它是注解层不是模态框 |
| 进度文案 | 气泡常驻"第 N / M 步 + 场景名",末步按钮文案改「完成」 |
### 7. 视觉断言要用像素采样,不要看缩略图
看截图判断颜色 / 遮罩 / 选中态会误判——缩略图渲染会改变颜色与对比,看出来的"遮罩没生效""高亮与说明不一致"经常是假象。
做法:颜色 / 遮罩 / 选中态这类断言,用 `PIL` 取区域均值或点采样来判,别靠肉眼。
## 交付前实测清单
- [ ] 每个有 `target` 的步骤都能从「演示」走到「完成」,无中途自动结束
- [ ] 每一步的高亮环都框住目标元素(框住 = 环矩形与目标矩形在各边差相等)
- [ ] 抽屉类步骤:环确实画在抽屉上,且退出后抽屉被收起
- [ ] 退出后筛选 / 关键词回到演示前的值
- [ ] 演示中按全局快捷键不改变界面
- [ ] 切换界面状态时演示自动结束并播报
- [ ] 纯概念步骤不参与演示,按钮置灰且有原因
- [ ] 全程无控制台报错(异常事件数 = 0)
@@ -0,0 +1,162 @@
---
name: stage-requirements
description: 产品规划第②段,产品功能。只做一件事:把①段《使用场景》(`1e-使用场景.md`)细化成功能清单(做哪些 / 不做哪些 / 优先级),并钉死页面骨架(《界面布局》:有哪几页、每页几个板块、板块怎么排、跨页关系)。当用户要写②段两份、列产品功能、定优先级、梳理功能、定页面与板块布局,或说"只做产品功能"时调用。
---
# ② 产品功能
回答「要做哪些产品功能、哪些明确不做、页面骨架怎么排」。产出两份:
`docs/pm/<项目>/prd/2a-产品功能.md`(功能清单)+ `docs/pm/<项目>/prd/2b-界面布局.md`(页面骨架)。
> 段名与①「产品需求」构成 `产品需求 → 产品功能 → 界面交互 → 原型说明` 的对称链,四段各占一个词(产品 / 功能 / 界面 / 说明),无一词共用(2026-10-02 用户定)。旧名「需求与结构」「界面与交付」已废。
>
> 与①段的分界:①回答「要解决什么问题、用户怎么用它」,②回答「要做哪些功能、长成什么骨架」。判据看文档主体 —— 主体是功能条目的有无与优先级、页面与板块骨架,归②;主体是问题、用户、取证与取舍理由,归①。
>
> ⭐ 2026-10-06 用户定案:本段收窄为「只细化功能」。2026-10-07 用户定案「2 产品功能 和 界面布局不就是两个文档嘛」,两件事各成一份:产品功能(做什么)+ 界面布局(长什么样)。用户原话:「不需要 就用使用场景,其余6分都不需要了,grill 也应该拿到第一步了,第二部就是细化功能」。
>
> 本段就这两份:`prd/2a-产品功能.md`(功能清单)+ `prd/2b-界面布局.md`(页面骨架)。
>
> 别处的内容在本段怎么落地:状态流转与优先级都写进每条功能自己,不单独成文;用户故事取①段《使用场景》(`1e-使用场景.md`),本段按它推功能;grill / 压测在①段 1a(全场唯一一份 `grill-me`);风险取①段《产品策略》的「假设与风险」。
>
> (历史:本段收窄前的产出清单与其去向 → `_留痕/②段-已删除产出与方法论.md`)
## ⭐⭐ ②—③ 交接口(2026-10-06 用户定案)
口径:②段钉骨架,③段做皮肉。
| 归②段(必须在本段确认) | 归③段(⛔ 不许②段写) |
|---|---|
| 有哪几页 | 配色 |
| 每页几个板块 | 字体 |
| 板块怎么排 | 间距 |
| 跨页关系(怎么跳转) | 组件样式 |
| 每页的主操作是什么 | 动效 |
| 每条信息在哪一档承载(主屏常驻 / 可点入) | 具体的视觉实现 |
> 用户原话:「3 是负责设计和交互,**页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子**」。
> ⭐ 骨架是判断基准,必须在②段定死。旧口径把「有哪几页」留在③段,结果就是③段做一版一个样,②段无从判断改得对不对。
> ⛔ 交给③段时骨架是冻结的:③段不许新增 / 移动 / 删除板块,缺板块要回②段改(见 `stage-delivery` 的对应禁令)。
## 本段职责(2026-10-06 按「只细化功能」重划)
本段回答一个问题:把①段的使用场景细化成哪些功能,这些功能长成一个什么骨架。拆成两问(原三问):
| 问 | 内容 | 落点 |
|---|---|---|
| 有哪些功能、优先级如何、什么不做 | 从每条使用场景推出功能条目;每条带优先级、状态流转、验收要点 | `2a-产品功能.md` |
| 这些功能长成什么骨架 | 有哪几页、每页几个板块、板块怎么排、跨页关系 | `2b-界面布局.md` |
> ⭐ 本段产物的主体是功能条目的有无与优先级,这也是「产品功能」这个名字的依据。实测本项目 26 条功能定义全在②段、一条不在 research。
> ⛔ 本段不许重开需求:需求澄清、grill 反问、取证都在①段做完了。本段假定需求已成立,只做功能取舍。
> ⭐ 功能按使用场景组织(2026-10-06 用户定案),一条使用场景下可能挂跨多个页面的功能。用户原话:「功能可以分使用场景梳理(可能是跨页面的)」。不按页面组织 —— 按页面组织会把跨页场景切碎,并与①段《使用场景》(`1e-使用场景.md`)对不上。
## 2a 产品功能
| 子步 | 读 | 产出 |
|---|---|---|
| 2a 产品功能 | `references/create-prd.md` | `docs/pm/<项目>/prd/2a-产品功能.md` |
回答:要做哪些功能、哪些明确不做、每条什么优先级、每个功能自身怎么流转。
## 2b 界面布局
| 子步 | 读 | 产出 |
|---|---|---|
| 2b 界面布局 | `assets/diagram-design/SKILL.md`(第三方 skill 整树保留,其 `references/`、`scripts/`、`assets/` 路径均相对该目录解析) | `docs/pm/<项目>/prd/2b-界面布局.md` |
回答:有哪几页、每页几个板块、板块怎么排、跨页关系怎么跳。
> 顺序是 2a → 2b:布局是功能清单的空间展开,功能还没定就画布局等于凭空发明版面。
> ⛔ 2a 之前不再需要压测步骤,压测已前移①段 1a 的 B 节。
### 功能清单怎么组织(逐条可核)
每个功能条目必须带齐这几样:
| 字段 | 写什么 | 判据 |
|---|---|---|
| 功能名 | 一句话说清做什么(动词开头的用户语言) | ⛔ 不写实现名 |
| 来自哪条场景 | 追回①段《使用场景》(`1e-使用场景.md`)的编号 | ⛔ 追不回的条目该砍 |
| 优先级 | P0 / P1 / P2 | 见下方「优先级」 |
| 状态流转 | 这个功能自身有哪几个状态、怎么迁移(不适用就写「无状态」) | ⛔ 不许省成空白 |
| 验收要点 | 怎么算做完(可观察) | ⛔ 不写「体验好」这类 |
| 跨哪些页面 | 这个功能在骨架的哪几页上发生 | 可为多页 |
优先级(⛔ 不许凭空打分,见硬约束):
- P0:不做则①段某条使用场景整条办不成
- P1:不做则场景能办成但要多绕(本可用一次点击,变成三步)
- P2:不做不影响场景办成,只是更好用
> 优先级判据 = 一句可复述的话。本项目没有数据源,不填数字。
### 2b 界面布局怎么写
本份专管界面骨架,⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能.md`)。一句话分工:`2a` 管「做哪些事」,`2b` 管「这些事落在哪几页、每页长什么结构」。
| 问 | 回答 | 内容 |
|---|---|---|
| 页面关系 | 有哪几页、门开在哪 | 页面清单、页面流转、导航 |
| 页面内布局 | 房间里家具怎么摆 | 每页的板块清单 + 排列顺序(wireframe 灰块粒度) |
> ⭐ 拆成两份是 2026-10-07 的用户定案。旧写法一份装两半,同一件事要写两遍(比如 `header / side / footer` 既像页面框架又像页内板块);拆开后各自只写自己那一侧,正好逼着把边界写明确。
> 🔴 防重写规则(拆开后必须守):页面级框架(`header / side / footer`)只在 `2b` 写一次;`2a` 的功能条目里只许出现「跨哪些页面」,⛔ 不许描述页面长什么样。
> ⚠️ 粒度:本段给灰块框图(有哪些块、什么顺序),⛔ 不给视觉(颜色、字体、间距、圆角、层次)。配色 / 字体 / 间距 / 组件样式 / 动效,本段(含布局)仍不许写。
> ⚠️ 旧 `ux/diagrams/system-architecture.html` 画的是系统组件之间的关系,属实现视角,已改名。本段要的是页面与板块,属产品视角,⛔ 不许再叫「系统架构」。
## 硬约束
- ⭐ 本段不是压测入口(2026-10-06):`grill-me` 全场只有①段一份,火力点已扩到覆盖「做成什么样、状态怎么流转」。⛔ 本段不许再开一轮反问 —— ①段 `1a-需求文档.md` 的决策表就是本段的压测输入。用户始终不回应时①段怎么处理,本段照旧继承,但不再自己去问。
- ⭐ 假设照旧继承,但账在①段:`1a-需求文档.md` 带进来的每条 `【假设】`,在②段落盘时逐条给结论,只允许三种归宿 —— 已确认(写明确认人与时间)|待实现且已排定确认时机(写明「在第几步落地前必须问」)|`【已按假设落地】`(写清影响面 + 回退口径)。⛔ 第四种(既未确认、已进实现、又无落地说明)不许带进本段。
- ⭐ 引用假设必须带状态:本段任何一条功能 / 状态流转 / 分档,只要依据是某条假设,就在括号里带上该假设的当前状态(`(依据 Q7 · 已确认)`、`(依据 Q10 · 【已按假设落地 · 影响面:每版全量复制 → 版本目录体积】)`)。下游③段据此判断这条能不能当硬约束用。
- ⭐ 假设与实测要回头对账:凡靠假设得出的结论,一旦下游跑出实测结果,必须回填并改状态。实测踩坑:`PRD.md:132` 假设 3「单文件 HTML 在 `file://` 下能双击打开(③段需实测)」标着待实测,而③段早已实测了 16 版,事实成立却没人回填。
- ⭐ 待确认 / 暂缓项必须带回收三字段(2026-10-02):本段任何「待确认 / 暂缓 / 待定」条目必须同时写 复核人 + 复核时机 + 结论落点(哪个文件哪一节),三字段缺一不许落盘。⛔ 只写「暂缓」等于无限期悬挂。
- 「不做 / 移出」必须逐条核对,不许自行裁剪:写②段前、落盘后各做一次 —— 把②段里每一条「不做 / 移出 / 暂缓」与 `1a-需求文档.md` 的已拍板项逐条对照。凡涉及已拍板项,一律不得自行裁剪或改口径,必须列成「与已定决策的差异」表(原条目 / 原口径 / 拟改口径 / 理由)交用户显式确认。只写「已核对无冲突」不算核对,要给出对照过的条目数。
- ⭐ 每条功能必须能追回①段《使用场景》(`1e-使用场景.md`):追不回的功能就要么补一条场景、要么砍掉。这是本段唯一的功能有无判据,代替凭空打分。
- ⭐ 状态流转写在功能条目里,⛔ 不再单独成文(2026-10-06):每个功能条目自带「状态流转」字段。六项治理照旧全覆盖(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认),只是落点从独立文档移进功能条目。
- ⭐ 状态挂不到任何功能上的中间态,要么删掉,要么补一个功能条目让它服务。
- ⭐ 骨架必须给全(2026-10-06):②段的《界面布局》必须给出 —— 页面清单 + 页面流转 + 每页板块清单与排列 + 每页主操作 + 每条信息在「主屏常驻 / 可点入」哪一档。⛔ 缺任何一样,③段就没有方向。
- 信息承载分档的判据:「删掉它,主操作还做得成吗」—— 答「做得成」就只能进「可点入」。⛔ 「能读到」= 可点入,不等于主屏常驻;不许以「②段要求能读到」为由把信息留在主屏。
- ⛔ 本段(含布局)不许写视觉:配色 / 字体 / 间距 / 组件样式 / 动效,一个字都不许出现。
- 段内不反问,做完直接往下走。只有四种情况停:信息不足且查不到、破坏性 / 不可逆动作、用户显式要求、①段末的方案确认(仅「方案确认」模式,见 `product-planning` 的「执行规则」)。
- `<项目>` 按 `product-planning` 的「项目与路径约定」定;定不出来就停下问用户,不许猜。
## 完成标准
- `2a-产品功能.md` 与 `2b-界面布局.md` 两份都在,且只有这两份(⛔ 不许再产出 `grill-decisions` / `user-stories` / `priorities` / `pre-mortem` / `state-machine` / `diagrams` 六份中的任何一份;⛔ 也不许再退回单份 `PRD.md`)
- ②段的「不做 / 移出」清单逐条对照过①段已拍板项,差异行为 0 或每一行都已获用户显式确认(附对照条目数,不得只写「无冲突」)
- 功能清单每条带齐「功能名 / 来自哪条场景 / 优先级 / 状态流转 / 验收要点 / 跨哪些页面」六字段;⛔ 追不回①段场景的条目为 0
- 状态流转六项治理全覆盖(失败恢复 / 持久化 / 并发 / 幂等 / 超时 / 不可逆二次确认),且落在功能条目内
- 《界面布局》给全五样:页面清单 + 页面流转 + 每页板块与排列 + 每页主操作 + 每条信息的分档(含判据回答)
- ⛔ 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效)
- 每条假设都有归宿(三选一,无第四种);凡依据假设的功能 / 状态流转 / 分档,条目里都带上了假设状态标注
- 本段所有「待确认 / 暂缓」条目都带齐 复核人 / 复核时机 / 结论落点 三字段
- ⭐ 两份都过了「说人话」内容准则(源技能 `humanizer` / `humanizer-zh`,门槛 ≥45/50)—— 口径见 `product-planning` 的「执行规则」内容准则条;段末报告须写明「已过内容准则,评分 X/50」
## 反面清单
- ⛔ 在本段重开一轮 grill 反问(2026-10-06):反问已整套前移①段 1a,本段只细化功能
- ⛔ 产出本段两份之外的文档(本段只 `2a` 与 `2b`,白名单由 `check_naming.py` 机器判)
- ⛔ 把「产品功能」与「界面布局」又塞回一份(2026-10-07 用户定案:这就是两个文档)
- ⛔ `2a` 里描述页面结构 / `2b` 里写功能条目的有无与优先级(越界即重写)
- ⛔ 按页面组织功能清单(2026-10-06):功能要按使用场景组织,一条场景可跨多页;按页面组织会把跨页场景切碎,并与①段《使用场景》(`1e-使用场景.md`)对不上
- ⛔ 凭空给功能打分(Importance × Satisfaction / ICE / RICE):没有数据源。优先级只能是 P0/P1/P2 + 一句可复述的判据
- ⛔ 功能条目追不回①段《使用场景》(`1e-使用场景.md`):追不回就要么补场景、要么砍条目
- 用「移出第一版 / 不做」自行砍掉已拍板项,或只声称「已核对无冲突」却不列对照条目数
- 在本段重开需求验证(该做取证与需求定义的是①段;本段假定需求已成立,只做功能取舍)
- ⛔ 骨架给不全(2026-10-06):只给页面清单、不给每页板块与排列,或只给布局、不给跨页关系 —— ③段拿不到方向,就会一版一个样
- ⛔ 把某条信息标为「主屏常驻」却答不上「缺了主操作就做不成事」:按判据应归「可点入」
- 状态流转只画正常路径,不管失败与并发;或状态挂不到任何功能条目上(凭空中间态)
- ⛔ 在本段写视觉(配色 / 字体 / 间距 / 组件样式 / 动效)—— 那是③段
- 越界去出原型或写说明文档(那是第③④段)
- 把 `【假设】` 原样带进②段当既定事实;或假设已被实现却从不回填状态
- 只写「暂缓」而不给复核人 / 复核时机 / 结论落点 —— 等于让这条永远挂着
- ⛔ 两份没过「说人话」内容准则就落盘(带 AI 腔:夸张意义 / 三段式强凑 / 破折号滥用 / 模糊归因 / 通用乐观结尾)—— 门槛 ≥45/50,见 `product-planning` 的「执行规则」内容准则条
- ⛔ 改本技能包的规则文件、却不过「说人话」这一关(2026-10-07):规则和产出同一把尺子 —— 口径见 `product-planning` 的「执行规则」内容准则条
## 本段读什么、守什么
- 方法论两份:`references/create-prd.md`(功能清单)、`references/state-machine.md`(六项治理清单仍要读,落点变成功能条目内)。
- 绘图资产:`assets/diagram-design/`(整树保留,供画布局图)。
- 贯穿纪律:同一件事只写一遍 —— 同一批人 / 同一批场景若在①②两段各写一份,必然打架。
📎 本段收窄前的产出清单与其去向(含方法论去留)见 `_留痕/②段-已删除产出与方法论.md` —— 正文不展开;防复活由 `scripts/check_naming.py` 的 `DEAD_OUTPUTS` / `WHITELIST` 机器判。
@@ -0,0 +1,133 @@
# Create a Product Requirements Document(②段专用版)
> 本文件由模型按需加载,没有斜杠命令。
> 产出:`docs/pm/<项目>/prd/2a-产品功能.md`(功能清单)。
> ②段是两份:功能清单归本份,页面骨架归 `prd/2b-界面布局.md`,不归本份。
>
> ⭐ 2026-10-06 用户定案改版:本段收窄为「只细化功能」,产出从 7 份收成 1 份。
> 上游的 8 段式模板(Summary / Contacts / Market Segment / Value Proposition / Release…)大部分已不适用 —— 它是给「面向市场、要售卖、有干系人」的产品写的;本项目与同类单机自用 / 工具型产品没有这些内容,硬填就是编。保留的部分见下。
## 本②段写两件事
| # | 写什么 | 判据 |
|---|---|---|
| 一 | 功能清单 —— 做哪些、不做哪些、每条什么优先级 | 每条能追回①段《使用场景》(`1e-使用场景.md`) |
| 二 | 界面布局 —— 有哪几页、每页几个板块、板块怎么排、跨页关系 | ③段拿着它就有方向 |
> 不写:视觉(配色 / 字体 / 间距 / 组件样式 / 动效)、需求取证(归①段)、grill 反问(归①段)、用户故事(归①段《使用场景》(`1e-使用场景.md`))。
## 一、功能清单
### 组织方式:按使用场景,不按页面
依据是①段《使用场景》(`1e-使用场景.md`)的每一条。一条场景下可挂跨多个页面的功能。
用户原话(2026-10-06):「功能可以分使用场景梳理(可能是跨页面的)」。
> 按页面组织会把跨页场景切碎,也和①段《使用场景》对不上。对不上就追不回来源,功能就没有由来。
### 每条功能的六字段(缺一不算完成)
| 字段 | 写什么 |
|---|---|
| 功能名 | 一句话说清做什么(动词开头的用户语言),不写实现名 |
| 来自哪条场景 | 追回①段《使用场景》(`1e-使用场景.md`)的编号 |
| 优先级 | P0 / P1 / P2(判据见下) |
| 状态流转 | 这个功能自身有哪几个状态、怎么迁移;无状态就写「无状态」,不留空 |
| 验收要点 | 怎么算做完(可观察),不写「体验好」 |
| 跨哪些页面 | 这个功能在骨架的哪几页上发生(可多页) |
### 优先级判据(不许凭空打分)
| 级 | 判据 |
|---|---|
| P0 | 不做则①段某条使用场景整条办不成 |
| P1 | 不做则场景能办成但要多绕(本可一次点击,变成三步) |
| P2 | 不做不影响场景办成,只是更好用 |
> 优先级就是一句可复述的话。本项目没有数据源,不填数字 —— 数字一旦填进去,就会一路传到功能条目。
### 「不做」清单(必须逐条对照,不许自行裁剪)
写②段前、落盘后各做一次:把每一条「不做 / 移出 / 暂缓」与①段 `1a-需求文档.md` 的已拍板项逐条对照。
凡涉及已拍板项,一律不得自行裁剪或改口径,必须列成「与已定决策的差异」表:
| 原条目 | 原口径 | 拟改口径 | 理由 |
|---|---|---|---|
只写「已核对无冲突」不算核对,要给出对照过的条目数。
## 二、界面布局
### 为什么两半合成一份
一句话:信息架构管「页面之间」,布局管「页面之内」。
| 半 | 回答 | 内容 |
|---|---|---|
| 页面关系 | 有哪几页、门开在哪 | 页面清单、页面流转、导航 |
| 页面内布局 | 房间里家具怎么摆 | 每页的板块清单 + 排列顺序(wireframe 灰块粒度) |
> 不拆两份的理由:参考图里的 `header / side / footer` 是页面框架,正好卡在「之间」与「之内」的交界。拆两份必然出现「页面 P1 有 header」写两遍,而同一件事写两遍就是打架的起点,本项目反复踩这个坑。
### 必须给全的五样(缺一样③段就没方向)
1. 页面清单 —— 有哪几页,每页一句话说清干什么
2. 页面流转 —— 页与页怎么连(谁跳到谁、什么条件下)
3. 每页的板块清单与排列 —— 有几个块、从上到下什么顺序(灰块粒度,不含视觉)
4. 每页的主操作 —— 唯一那个推进动作是什么
5. 每条信息的分档 —— 主屏常驻 / 可点入(见下)
### 信息承载分档(判据只有一条)
| 档 | 定义 |
|---|---|
| 主屏常驻 | 零点击可见 |
| 可点入 | 一次点击内可达 |
唯一判据:「删掉它,主操作还做得成吗」—— 答「做得成」,就只能进「可点入」。
> 「能读到」= 可点入,不等于主屏常驻。不得以「②段要求能读到」为理由把信息留在主屏。
> 四种禁用免死金牌(理由里只要出现,一律判「不上屏」,哪怕后面跟着「但是」):① 「但②段要求能读到」;② 「留(产品级约束)」;③ 「但不完整 / 不专业」;④ 「将来可能需要」。
> 实战教训:本项目首版②段只说「不写结构」,③段把「必须能读到」全理解为主屏常驻,一屏铺 5 类信息,页面成了「信息墙」,被判定为「最多算一个产品框图」。
### 页型一句(仍需写)
本产品的界面是营销页(访客看一眼就下决心)还是工具型页面(用户把活干完)—— 写一句判型加依据。
> 为什么必须写:③段的版式供给偏落地页向。不说页型,③段就会套错骨架,长成「标题上方一行小字 + 大标题 + 下方一行灰字」,判据全绿、排版难看。本项目实测踩过。
> 只写一句判型,不许写「用哪个骨架 / 哪个区块」。
## 三、仍需保留的旧模板要素(按需,不硬填)
| 旧 8 段式里的段 | 处置 |
|---|---|
| Summary / Background / Objective | 可保留,但压成很短一段 —— 给下游快速对齐用 |
| Contacts | 删 —— 单机自用产品没有干系人名单 |
| Market Segment | 删 —— 归①段《用户画像》 |
| Value Proposition | 删 —— 归①段 |
| Solution → Key Features | 保留 —— 就是本②段的「功能清单」 |
| Solution → UX/Prototypes | 改为「界面布局」—— 只给灰块骨架,不出视觉稿 |
| Solution → Assumptions | 保留 —— 假设台账与归宿(口径见 SKILL.md 硬约束) |
| Release | 可选 —— 第一版做什么 vs 后面做什么;不写具体日期 |
## 四、通用要求
- 写给人看:短句、少术语,能读给不熟悉项目的人听懂。落盘前必须过「说人话」内容准则(源技能 `humanizer` / `humanizer-zh`,门槛 ≥45/50;五条核心原则与口径见 `product-planning` 的「执行规则」内容准则条)。
- 每条都能追来源:功能追①段场景,假设带状态标注,判据给一句话。
- 全文零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个字都不许出现。
- 保留修订记录:改了实现必须回填条款正文,不能只在修订记录里写。
## 落盘
两份:`docs/pm/<项目>/prd/2a-产品功能.md`(功能清单)+ `prd/2b-界面布局.md`(页面骨架)。
## 附:输出检查
- [ ] 每条功能都能追回①段《使用场景》(`1e-使用场景.md`)的某一条
- [ ] 每条功能六字段齐全(功能名 / 来自哪条场景 / 优先级 / 状态流转 / 验收要点 / 跨哪些页面)
- [ ] 优先级没填数字,只用 P0 / P1 / P2 加一句可复述的判据
- [ ] 「不做」清单与①段已拍板项逐条对照,并给出对照过的条目数
- [ ] 界面布局五样给全(页面清单 / 页面流转 / 每页板块清单与排列 / 每页主操作 / 信息分档)
- [ ] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效)
@@ -0,0 +1,82 @@
# 状态机(State Machine)
> 本文件由模型按需加载,没有斜杠命令。
>
> ⭐ 2026-10-06 变更:本份不再产出独立文档。状态流转整合进②段的功能清单 —— 每个功能条目自带一个「状态流转」字段。
> 本份保留,是因为它给出的六项治理清单(失败恢复 / 持久化 / 并发 / 幂等 / 超时 / 不可逆二次确认)仍要逐项覆盖,只是落点从 `ux/state-machine.md` 移进 `prd/2a-产品功能.md` 的功能条目内。
> 本份只作方法论读,落点是功能条目内的「状态流转」字段。
## 何时用
- 功能有异步或长流程(草稿 / 排队 / 生成中 / 失败 / 重试 / 完成)
- 需要写清失败之后怎么办(重试 / 降级 / 人工接管)
- 前端要看「什么状态下能点什么」
## 分工边界(重要)
本份只给状态迁移的判据与治理清单。
架构图、流程图、时序图、用户旅程图、泳道图请用 `assets/diagram-design/` —— 它有 39 种编辑级图型,且输出自包含 HTML+SVG。状态迁移的守卫 / 副作用 / 持久化 / 并发治理没有现成开源 skill 覆盖,所以留在本份。
## 主产出:状态迁移表(贴在功能条目内)
| 状态 | 含义 | 允许事件 | 守卫条件 | 迁移到 | 副作用 |
|---|---|---|---|---|---|
| idle | 未开始 | submit | 参数合法 | queued | 创建任务 |
| queued | 排队中 | start / cancel | — | running / idle | — |
| running | 生成中 | done / fail / cancel | — | succeeded / failed / idle | 写日志 |
| failed | 失败 | retry | 重试次数 < 3 | queued | 计数 +1 |
| succeeded | 完成 | edit / export | — | idle | 存版本 |
字段定义:
- 状态:英文小写下划线,不中英混写,便于直接落到代码
- 允许事件:不在该行的事件一律视为非法,必须显式拒绝,不能静默忽略
- 守卫条件:不加守卫就会出的错(重复提交、配额超限、并发编辑、权限不足)
- 迁移到:目标状态,只写一个,多目标用守卫条件拆开
- 副作用:迁移时必须做的事(落库、发通知、计费、埋点)
> ⭐ 不适用时写「无状态」:某些功能确实没有状态流转(如「看一版截图」)。不许把这一栏留空 —— 留空与「没想」不可区分,写「无状态」是合格答案。
## 必答清单(漏一项即缺陷)
1. 失败恢复路径:每个失败态给出三种之一 —— 自动重试(次数 / 退避策略)、降级(降级成什么)、人工接管(入口在哪)
2. 持久化:哪些状态要落库?刷新 / 断线 / 换设备后能否恢复?不能恢复的必须显式说明
3. 并发冲突:同一资源被两个入口同时修改怎么办(乐观锁 / 队列串行 / 后者覆盖并提示)
4. 超时:每个中间态的最长停留时间,超时后迁移到哪
5. 幂等:重复提交同一请求的结果是什么
6. 不可逆操作:删除、发布、扣费类迁移要标注「需二次确认」
## 死状态禁令
- 每个状态必须有出口,终态也要能「再次开始」
- 不允许「其他」「未知」这类兜底状态
- 不允许没有触发事件的自动漂移(超时迁移不算,但必须显式定义)
## 速览图
仅作沟通速览。需要正式交付级图,交给 `diagram-design`。
```mermaid
stateDiagram-v2
[*] --> idle
idle --> queued: submit
queued --> running: start
running --> succeeded: done
running --> failed: fail
failed --> queued: retry
succeeded --> idle: edit
```
## 附:输出检查
- [ ] 每条迁移都有触发事件、无自动漂移,且挂在具体功能条目上(无凭空中间态);无状态的功能显式写「无状态」
- [ ] 每个失败态都有恢复路径(重试 / 降级 / 人工接管)
- [ ] 持久化范围明确:哪些状态落库,刷新 / 断线 / 换设备后能否恢复
- [ ] 并发冲突有处理方式
- [ ] 超时策略明确:每个中间态最长停留多久、超时后迁到哪
- [ ] 不可逆操作(删除 / 发布 / 扣费)已标注「需二次确认」
## 落盘
落点是 `docs/pm/<项目>/prd/2a-产品功能.md` 的功能清单内 —— 每个功能条目自带一个「状态流转」字段,按上表格式写;无状态的功能写「无状态」。
@@ -0,0 +1,346 @@
# 目标执行状态 · 重写 5 份竞品分析文档并重新生成 MCN 短视频整合营销需求文档
> 目标目录:`执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/`
> 台账(唯一权威):`tmp/supervise-inbox/tasks.json` | 目标:`tmp/supervise-inbox/goal.json`
> 本份由 **第 6 棒目标检查会话**(排期 `39053be1-283e-4df7-92eb-98b14e60ff39`,21:49 跑)建立。
## 〇、最新判定 · 第 14 棒(2026-10-08 01:50 · 本棒 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路取并集(判据路仍 2 条不过)。与第 8/9/10/11/12/13 棒**结论逐条相同**。
- ① 台账 `tasks.json`:**10 条全部 `done`**、无 `pending`/`running`/`blocked` ⇒ **无僵尸件**。机器侧现取:`--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 = 2.4 分钟|会话全结束|已建检查会话 = 14 棒`。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判(与第 7~13 棒同)。
- ③ 验收判据 `goal.json.acceptance_state` 7 条:**5 过、2 不过** —— 判据 1/2/3/4/7 = `过`;判据 5(技能包规则文件已全量过说人话)/判据 6(vibe-product 六份①②段文档已重写)= `🔴 不过`。**与本文件逐条一致 ⇒ 值域已规范、无字可改**。
**本棒新取证(L3 · 2026-10-08 01:5x 现测 mtime · ⛔ 不是读文档推断)**:两处落点**仍全部早于新稿** ⇒ 落地确实未做(读数与第 11~13 棒逐条相同,无变化)。
- 判据 5 落点 `E:/ProgramData/.workbuddy/skills/product-planning/`:`SKILL.md` **21:45**/`stage-discovery/SKILL.md` **21:53**/`stage-requirements/SKILL.md` **21:29**/`stage-delivery/SKILL.md` **20:23**/`stage-proto-doc/SKILL.md` **01:20**;同名新稿 **16 份** mtime **23:01–23:08** ⇒ **一份都没被覆盖**。
- 判据 6 落点 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`:`research/1a·1c·1d·1e` = **01:46**(3121/1812/1463/1724 B)/`prd/2a·2b` = **01:47**(3034/3383 B);同名新稿 6 份 + `落点说明.md` mtime **23:29–23:31** ⇒ **六份一份没动**。
**本棒处置**:
1、⛔ **未派新棒**(与第 8~13 棒同判)。理由:两条不过判据的**唯一剩余动作都是跨边界文件落地** —— 落点分别是全局技能目录 `E:/ProgramData/.workbuddy/skills/`(**本工作区之外**)与 `E:/ProgramData/AIProject/vibe-product/`(**另一个工作区**);本区任务会话受域门禁约束(写只许在域目录内、跨目录一律只读)⇒ 派了必撞门禁、零产出。两条的落地步骤**已完整写在** `tmp/supervise-inbox/NEED-USER.md` 第 2/3 条(源/目标/备份/回退/覆盖后自检命令齐全)⇒ **无新增可派内容**,属「找活干」。
2、⛔ **不改 `lifecycle`**(保持「进行中」)。「已完成」不实(2 条判据 🔴 不过);其余取值不在本轮授权变更项内 ⇒ 宁可停,不臆断。
3、⛔ **未改 `acceptance_state`**:7 条值域已规范、与本文件逐条一致 ⇒ **无需**(⛔ 不是漏)。
4、⛔ **未跑** `--ensure-goal-dir`(本区 `collabd-state.json` 的 `roles = {}` 为空 ⇒ 会把检查会话登记成主会话)。
5、⛔ **未动任何代码、未改常驻**(本轮只做核对,做完即停)。
**输入侧偏差(供机制记账 · 与第 9~13 棒同)**:派活原文指定的五样里**两样在本区不存在** —— `state.py`(工作区根无此文件,实跑报 `No such file or directory`)与 `taskgraph.json`;另 `goal.json.execution_doc` **仍指旧目标目录** `…-5199a6/目标执行状态.md`(登记于 10-07 17:00,未经 `--ensure-goal-dir` 对齐)⇒ 本轮判定**以本目标目录这份为准**。第五样 `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅。
**机制侧观察(只报现象 · ⛔ 本轮未动任何代码)**:本目标已连建 **14 棒**检查会话,第 **8–14 棒结论完全相同**(未完成 · 残 2 条跨边界落地)。只要 `lifecycle` 仍「进行中」且队列空,常驻就会继续按 `queue-empty` 建第 15 棒,而残项**机制侧不可达** ⇒ 持续空跑。收口办法(收窄检查会话连棒阈值 / 由用户结束目标)**须用户定**,超出本轮范围。
**留给主会话/用户的四项**(前 6 棒已提,本棒复核仍成立):
1、`goal.json.execution_doc` 仍指**旧目标目录**(`…-5199a6/目标执行状态.md`)⇒ 需跑一次 `--ensure-goal-dir`(**只能 main 席位**跑)。
2、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
3、判据 6 落地:把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`(`落点说明.md` ⛔ 不覆盖)。
4、这两条落地均为**域外/跨区写入** ⇒ 机制侧无法代劳;落地完成后判据 5/6 才能转 `过`,届时方可 `--set-life 已完成`。
---
## 〇、上一棒判定 · 第 13 棒(2026-10-08 01:20 · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路取并集(判据路仍 2 条不过)。与第 8/9/10/11/12 棒**结论逐条相同**。
- ① 台账 `tasks.json`:**10 条全部 `done`**、无 `pending`/`running`/`blocked` ⇒ **无僵尸件**。机器侧现取:`--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 = 2.3 分钟|会话全结束|已建检查会话 = 13 棒`。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判(与第 7~12 棒同)。
- ③ 验收判据 `goal.json.acceptance_state` 7 条:**5 过、2 不过** —— 判据 1/2/3/4/7 = `过`;判据 5(技能包规则文件已全量过说人话)/判据 6(vibe-product 六份①②段文档已重写)= `🔴 不过`。**与本文件逐条一致 ⇒ 值域已规范、无字可改**。
**本棒新取证(L3 · 2026-10-08 01:20 现测 mtime · ⛔ 不是读文档推断)**:两处落点全部早于新稿 ⇒ 落地确实未做。
- 判据 5 落点 `E:/ProgramData/.workbuddy/skills/product-planning/`:`stage-proto-doc/SKILL.md` **10-07 01:20**/`stage-delivery` **20:23**/`stage-requirements` **21:29**/`stage-discovery` **21:53**(另 `design-capture`/`video-capture` 15:28、`design-system-tiaoyue` 09:26、`diagram-design` 09-28 10:23);同名新稿 16 份 mtime **23:02–23:08** ⇒ **一份都没被覆盖**。
- 判据 6 落点 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`:`research/1a·1c·1d·1e` = **10-07 01:46**(3121/1812/1463/1724 B)/`prd/2a·2b` = **01:47**(3034/3383 B);同名新稿 6 份 + `落点说明.md` mtime **23:29–23:31** ⇒ **六份一份没动**。
**本棒处置**:
1、⛔ **未派新棒**(与第 8~12 棒同判)。理由:两条不过判据的**唯一剩余动作都是跨边界文件落地** —— 落点分别是全局技能目录 `E:/ProgramData/.workbuddy/skills/`(**本工作区之外**)与 `E:/ProgramData/AIProject/vibe-product/`(**另一个工作区**);本区任务会话受域门禁约束(写只许在域目录内、跨目录一律只读)⇒ 派了必撞门禁、零产出。两条的落地步骤**已完整写在** `tmp/supervise-inbox/NEED-USER.md` 第 2/3 条(源/目标/备份/回退/覆盖后自检命令齐全)⇒ **无新增可派内容**,属「找活干」。
2、⛔ **不改 `lifecycle`**(保持「进行中」)。「已完成」不实(2 条判据 🔴 不过);其余取值不在本轮授权变更项内 ⇒ 宁可停,不臆断。
3、⛔ **未改 `acceptance_state`**:7 条值域已规范、与本文件逐条一致 ⇒ **无需**(⛔ 不是漏)。
4、⛔ **未跑** `--ensure-goal-dir`(本区 `collabd-state.json` 的 `roles = {}` 为空 ⇒ 会把检查会话登记成主会话)。
5、⛔ **未动任何代码、未改常驻**(本轮只做核对,做完即停)。
**输入侧偏差(供机制记账 · 与第 9~12 棒同)**:派活原文指定的五样里**两样在本区不存在** —— `state.py`(工作区根无此文件,实跑报 `No such file or directory`)与 `taskgraph.json`;另 `goal.json.execution_doc` **仍指旧目标目录** `…-5199a6/目标执行状态.md`(登记于 10-07 17:00,未经 `--ensure-goal-dir` 对齐)⇒ 本轮判定**以本目标目录这份为准**。第五样 `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅。
**机制侧观察(只报现象 · ⛔ 本轮未动任何代码)**:本目标已连建 **13 棒**检查会话,第 **8–13 棒结论完全相同**(未完成 · 残 2 条跨边界落地)。只要 `lifecycle` 仍「进行中」且队列空,常驻就会继续按 `queue-empty` 建第 14 棒,而残项**机制侧不可达** ⇒ 持续空跑。收口办法(收窄检查会话连棒阈值 / 由用户结束目标)**须用户定**,超出本轮范围。
**留给主会话/用户的四项**(前 5 棒已提,本棒复核仍成立):
1、`goal.json.execution_doc` 仍指**旧目标目录**(`…-5199a6/目标执行状态.md`)⇒ 需跑一次 `--ensure-goal-dir`(**只能 main 席位**跑)。
2、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
3、判据 6 落地:把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`(`落点说明.md` ⛔ 不覆盖)。
4、这两条落地均为**域外/跨区写入** ⇒ 机制侧无法代劳;落地完成后判据 5/6 才能转 `过`,届时方可 `--set-life 已完成`。
---
## 〇、上一棒判定 · 第 12 棒(2026-10-08 00:50 · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路取并集(判据路仍 2 条不过)。与第 8/9/10/11 棒**结论逐条相同**。
- ① 台账 `tasks.json`:**10 条全部 `done`**、无 `pending`/`running`/`blocked` ⇒ **无僵尸件**。机器侧现取:`--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 = 2.9 分钟|会话全结束|已建检查会话 = 12 棒`。
- ② 任务图 `tmp/supervise-inbox/taskgraph.json`:**文件不存在** ⇒ 无节点可判(与前 4 棒同)。
- ③ 验收判据 `goal.json.acceptance_state` 7 条:**5 过、2 不过** —— 判据 1/2/3/4/7 = `过`;判据 5(技能包规则文件已全量过说人话)/判据 6(vibe-product 六份①②段文档已重写)= `🔴 不过`。**与本文件逐条一致 ⇒ 值域已规范、无字可改**。
**本棒新取证(L3 · 2026-10-08 00:50 现测 mtime · ⛔ 不是读文档推断)**:两处落点全部早于新稿 ⇒ 落地确实未做。
- 判据 5 落点 `E:/ProgramData/.workbuddy/skills/product-planning/`:`SKILL.md` **21:45** / `stage-discovery` **21:53** / `stage-requirements` **21:29** / `stage-delivery` **20:23** / `stage-proto-doc` **01:20**;同名新稿 16 份 mtime **23:02–23:08**(源目录 16 份已逐个核过,与 `NEED-USER.md` 第 2 条清单逐条同)。
- 判据 6 落点 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`:`research/1a·1c·1d·1e` = **01:46** / `prd/2a·2b` = **01:47**;同名新稿 6 份 + `落点说明.md` mtime **23:29–23:31**。
**本棒处置**:
1、⛔ **未派新棒**(与第 8/9/10/11 棒同判)。理由:两条不过判据的**唯一剩余动作都是跨边界文件落地** —— 落点分别是全局技能目录 `E:/ProgramData/.workbuddy/skills/`(**本工作区之外**)与 `E:/ProgramData/AIProject/vibe-product/`(**另一个工作区**);本区任务会话受域门禁约束(写只许在域目录内、跨目录一律只读)⇒ 派了必撞门禁、零产出。两条的落地步骤**已完整写在** `tmp/supervise-inbox/NEED-USER.md` 第 2/3 条(源/目标/备份/回退/覆盖后自检命令齐全)⇒ **无新增可派内容**,属「找活干」。
2、⛔ **不改 `lifecycle`**(保持「进行中」)。「已完成」不实(2 条判据 🔴 不过);其余取值不在本轮授权变更项内 ⇒ 宁可停,不臆断。
3、⛔ **未改 `acceptance_state`**:7 条值域已规范、与本文件逐条一致 ⇒ **无需**(⛔ 不是漏)。
4、⛔ **未跑** `--ensure-goal-dir`(本区 `collabd-state.json` 的 `roles = {}` 为空 ⇒ 会把检查会话登记成主会话)。
**输入侧偏差(供机制记账 · 与前 3 棒同)**:派活原文指定的五样里**两样在本区不存在** —— `state.py`(工作区根无此文件)与 `taskgraph.json`;另 `goal.json.execution_doc` **仍指旧目标目录** `…-5199a6/目标执行状态.md`(登记于 10-07 17:00,未经 `--ensure-goal-dir` 对齐)⇒ 本轮判定**以本目标目录这份为准**。
**机制侧观察(只报现象 · ⛔ 本轮未动任何代码)**:本目标已连建 **12 棒**检查会话,第 **8–12 棒结论完全相同**(未完成 · 残 2 条跨边界落地)。只要 `lifecycle` 仍「进行中」且队列空,常驻就会继续按 `queue-empty` 建第 13 棒,而残项**机制侧不可达** ⇒ 持续空跑。收口办法(收窄检查会话连棒阈值 / 由用户结束目标)**须用户定**,超出本轮范围。
**留给主会话/用户的四项**(前 4 棒已提,本棒复核仍成立):
1、`goal.json.execution_doc` 仍指**旧目标目录**(`…-5199a6/目标执行状态.md`)⇒ 需跑一次 `--ensure-goal-dir`(**只能 main 席位**跑)。
2、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
3、判据 6 落地:把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`(`落点说明.md` ⛔ 不覆盖)。
4、这两条落地均为**域外/跨区写入** ⇒ 机制侧无法代劳;落地完成后判据 5/6 才能转 `过`,届时方可 `--set-life 已完成`。
---
## 〇、上一棒判定 · 第 11 棒(2026-10-08 00:2x · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路并集(判据路仍 2 条不过)。
- ① 台账 `tasks.json`:**10 条全部 `done`**、队列空、无僵尸件(机器侧 `队列 = {'done': 10}`;`--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 3.1 分钟|会话全结束`)。
- ② 任务图 `tmp/supervise-inbox/taskgraph.json`:**文件不存在** ⇒ 无节点可判。
- ③ 验收判据 7 条:**5 过、2 不过** —— 判据 1/2/3/4/7 = `过`;判据 5(技能包规则文件已全量过说人话)/判据 6(vibe-product 六份①②段文档已重写)= `🔴 不过`。与 `goal.json.acceptance_state` **逐条一致**(值域已规范)。
**本棒新取证(L3 · 2026-10-08 00:20–00:22 现测 · ⛔ 不是读文档推断)**:两处落点逐个文件的 mtime **全部早于新稿** ⇒ 落地确实未做。
- 判据 5 落点 `E:/ProgramData/.workbuddy/skills/product-planning/` 16 份:mtime 停在 20:23~21:53(另 3 份停在 09-28/10-05);而同名新稿 mtime 是 23:01–23:08。
- 判据 6 落点 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`:`research/` 的 1a/1c/1d/1e mtime = **01:46**、`prd/` 的 2a/2b = **01:47**;而同名新稿 mtime 是 23:29–23:31。
- 两批新稿**都在、都齐**:技能包 16 份(23:01–23:08,合计结构与技能包同构)/vibe-product 6 份 + `落点说明.md`(23:29–23:31)。
**本棒处置**:
1、⛔ **未派新棒**(与前 3 棒同判)。理由:两条不过判据的**唯一剩余动作都是跨边界文件落地** —— 落点分别是
`E:/ProgramData/.workbuddy/skills/product-planning/`(**本工作区之外**,全局技能目录)与
`E:/ProgramData/AIProject/vibe-product/`(**另一个工作区**)。本区任务会话受域门禁约束(写只许在域目录内、跨目录一律只读)
⇒ 派了必撞门禁、零产出 ⇒ 属「找活干」。
2、⛔ **不改 `lifecycle`**(保持「进行中」)。「已完成」不实(2 条判据 🔴 不过);「阻碍」不在派活原文授权的变更项内 ⇒ 宁可停,不臆断。
3、⛔ **未改 `acceptance_state`**:7 条值域已规范、与本文件逐条一致 ⇒ **无字可改**(是无需,⛔ 不是漏)。
4、⛔ **未跑** `--ensure-goal-dir`(本区 `collabd-state.json` 的 `roles = {}` 为空 ⇒ 会把检查会话登记成主会话)。
**输入侧偏差(供机制记账)**:派活原文指定「先读这五样」,其中两样在本区**不存在** ——
`state.py`(工作区根无此文件,命令报 `No such file or directory`)与 `taskgraph.json`(同样不存在)。
⇒ 这两个输入已缺,本轮改用 `--check-status`/`goalctl.py` 无参读数替代,**不影响判定**(结论与文档、台账一致)。
**机制侧观察(只报现象 · 本轮不扩面、⛔ 未动任何代码)**:本目标已连建 **11 棒**检查会话,第 8/9/10/11 棒结论**完全相同**
(未完成 · 残 2 条跨边界落地)。只要 `lifecycle` 仍是「进行中」且队列空,常驻就会继续按 `queue-empty` 建第 12 棒,
而残项**机制侧不可达** ⇒ 属重复空跑。根因与修法(如:检查会话连续 N 棒判「残项不可派」时应收窄)超出本轮范围。
**留给主会话的四条**(前 3 棒已提,本棒复核仍成立):
1、`goal.json.execution_doc` 仍指**旧目标目录**(`…-5199a6/目标执行状态.md`,登记于 10-07 17:00)⇒ 需跑一次 `--ensure-goal-dir`(**只能 main 席位**跑)。
2、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
3、判据 6 落地:把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`。
4、这两条落地均为**域外/跨区写入** ⇒ 机制侧无法代劳;落地完成后判据 5/6 才能转 `过`,届时方可 `--set-life 已完成`。
---
## 〇、上一棒判定 · 第 10 棒(2026-10-07 23:49 · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路并集(判据路仍 2 条不过)。
- ① 台账 `tasks.json`:**10 条全部 `done`**、队列空、无僵尸件(机器侧 `队列 = {'done': 10}`)。本目标 4 条:`6ec1b428`(22:01:45 证据附卷)、`75bfa487`(22:30:23 S7)、`fae90e6f`(23:11:53 技能包说人话清单)、`ea3ce52d`(23:32 vibe-product 六份新稿)。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判(机器侧同报「任务图读不到」)。
- ③ 验收判据:7 条中 **5 条过、2 条不过** —— 判据 1/2/3/4/7 = `过`;判据 5(技能包规则文件已全量过说人话)/判据 6(vibe-product 六份①②段文档已重写)= `🔴 不过`。两条卡住的都只是**落地**,改写稿本身已齐。
**本棒新取证(L3,⛔ 不是读文档推断)**:
- 第 9 棒 23:27 派的那条棒(`ea3ce52d`)**已真跑完**:`72111e/vibe-product六份-新稿/` 下六份齐(`1a-需求文档.md`/`1c-用户画像.md`/`1d-产品策略.md`/`1e-使用场景.md`/`2a-产品功能.md`/`2b-界面布局.md` + `落点说明.md`,mtime 23:31)⇒ 判据 6 的「新稿」阶段闭环,剩**跨区落地**。
- `72111e/技能包-说人话-新稿/` = **16 份**(`SKILL.md` + `references/stage-*/…`,与技能包结构同构)⇒ 判据 5 的「新稿」阶段闭环,剩**域外落地**与**「全量」口径**。
**本棒处置**:
1、⛔ **未派新棒**。理由:两条不过判据的**唯一剩余动作都是落地**,落点分别是
`E:/ProgramData/.workbuddy/skills/product-planning/`(**域外**)与
`E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`(**跨区**)
⇒ 本工作区任务会话受域门禁约束(写只许在域目录内、跨目录一律只读),派了必撞门禁 ⇒ 属「找活干」,故不派。
2、✅ **改齐 `acceptance_state` 值域**(本棒做了,前 3 棒均未做):原 7 条全写「未过」——
**不在取值域**(规范是 `过|…` / `🔴 不过|…`)⇒ 机器分不出「还没判」与「判了没过」、看板会一直显示未过。
已按本文件逐条结论用 `goalctl.py declare --kpi` 改写,**并回读 `goal.json` 确认落库**(7 条、规范写法、title 与 lifecycle 未被顺带改动)。
3、⛔ **不改 lifecycle**(保持「进行中」)。
4、⛔ **未跑** `--ensure-goal-dir`(本区 `collabd-state.json` 的 `roles` 为空 ⇒ 会把检查会话登记成主会话)。
**留给主会话的四条**(前 3 棒已提,本棒复核仍成立):
1、`goal.json.execution_doc` 仍指**旧目标目录**(`…-5199a6/目标执行状态.md`,登记于 10-07 17:00)⇒ 需跑一次 `--ensure-goal-dir`(**只能 main 席位**跑)。
2、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
3、判据 6 落地:把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`。
4、这两条落地均为**域外/跨区写入** ⇒ 机制侧无法代劳;落地完成后判据 5/6 才能转 `过`,届时方可 `--set-life 已完成`。
---
## 〇、上一棒判定 · 第 9 棒(2026-10-07 23:21 · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路并集(判据路有 2 条实测不过)。
- ① 台账 `tasks.json`:**9 条全部 `done`**、队列空、无僵尸件(`collabd-state.json`:pending 0/running 0/done 9/blocked 0)。本目标 3 条:`6ec1b428`(22:01:45)、`75bfa487`(22:30:23)、`fae90e6f`(23:11:53,artifact=`…-72111e/技能包-说人话-改写清单.md`)。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判。
- ③ 验收判据 `goal.json.acceptance_state`:7 条**全非「过」**(值写作「未过」,非规范取值域)。机器侧读数一致:`--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 = 2.6 分钟|会话全结束`。
**本棒本机实测(L3,⛔ 不是读文档推断)**:
- 判据 1/2/3/4(5 份独立体重写、汇总边界、1a 逐条复核、MCN 需求文档重生成)—— 证据已齐:`…-5199a6/docs/pm/content-workbench/证据附卷/` 5 份(mtime 21:40~22:01)+ `72111e/` 下 `1b-竞品分析-汇总对比体.md`/`复核清单-1a受影响条目.md`/`1a-需求文档-MCN短视频整合营销.md`(mtime 22:29)。
- 判据 5「技能包规则文件已全量过说人话」—— 🔴 **不过(部分推进)**:23:10 那棒(`fae90e6f`)已把 16 份新稿改好并自检(`72111e/技能包-说人话-新稿/`,`check_naming` 通过 46/失败 0/提示 1),**但一个字节都没写进技能目录**(域外)⇒ 落地未做;且「全量」口径(16/19/83)未定 ⇒ 落地与口径都待主会话。
- 判据 6「vibe-product 六份①②段文档已重写」—— 🔴 **不过**:`E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/research/` 下 `1a`/`1c`/`1d`/`1e` mtime 仍是 01:46,同目录 `1b` 为 21:07(⛔ 不在本项范围内)⇒ 六份**一份没动**(本棒新实测)。
- 判据 7「产物落点明确且可追溯」—— ✅ 可判过:台账每条 `artifact` 都带明确路径,S7 §二亦列清单。
**本棒处置**:
1、**派了一条执行棒** `[执行]-[开源项目调研]-vibe-product六份阶段文档重写新稿`(id `e012f7d6`,once,23:27 触发,`cwds` 逐字=本工作区,域目录 `执行会话`,域检 `✅ 可派|域空闲`)⇒ 接判据 6:按 ①段/②段方法论把六份**新稿**落本目标目录 `72111e/vibe-product六份-新稿/`,源工作区与技能目录**全程只读**,跨区落地留给主会话。
2、**未派第二条**(⛔ 不连建):判据 5 的落地是**域外写入**(`E:/ProgramData/.workbuddy/skills/`)⇒ 本工作区任务会话受域门禁写不了,只能主会话。
3、**不改生命周期**(保持「进行中」)。
4、⛔ **没写** `acceptance_state`:本轮分支是「没做完」;且值域「未过」不在 `过|…`/`🔴 不过|…` ⇒ 应由主会话一次性改齐(本棒不擅改)。
5、⛔ **没跑** `--ensure-goal-dir`(本区 `roles` 为空 ⇒ 会把检查会话登记成主会话)。
**留给主会话的四条**(本棒不擅改):
1、`goal.json.execution_doc` 仍指**旧目标目录**(5199a6)⇒ 跑一次 `--ensure-goal-dir`(只能 main 席位跑)。
2、`acceptance_state` 值域「未过」不在规范取值域 ⇒ 按规范改齐;判据 1/2/3/4/7 **依据已足,可写「过」**。
3、判据 5 落地:把 `72111e/技能包-说人话-新稿/` 16 份**同名覆盖**进 `E:/ProgramData/.workbuddy/skills/product-planning/`(覆盖前先备份);落地前先定「全量」口径(16/19/83)。
4、判据 6 落地:等本棒新稿产出后,把 `72111e/vibe-product六份-新稿/` 六份覆盖进 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`。
---
## 〇、上一棒判定 · 第 8 棒(2026-10-07 22:5x · 历史 · **覆盖以下全部历史判定**)
**判定:目标未完成** —— 三路并集 + 本机实测复核。
- ① 台账 `tasks.json`:**8 条全部 `done`**、队列空、无僵尸件(`collabd-state.json`:pending 0/running 0/done 8/blocked 0)。本目标 2 条:`6ec1b428`(22:01:45)、`75bfa487`(22:30:23,artifact=`…-72111e/S7-重生成MCN需求文档-20261007.md`)。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判。
- ③ 验收判据 `goal.json.acceptance_state`:7 条**全非「过」**;机器侧读数一致(`goalctl` 无参跑出「目标状态 = **未完成**」)。
**本棒新增的本机实测(L3,⛔ 不是读文档推断)**:
- 判据「5份竞品分析已按独立分析体重写」—— ✅ 已坐实:`…-5199a6/docs/pm/content-workbench/证据附卷/` 5 份,mtime 21:40~22:01(14~33 KB)。
- 判据「1b汇总对比体与独立体职责边界正确」/「受影响的1a需求文档条目已逐条复核」/「MCN需求文档已重新生成」—— ✅ 已坐实:`72111e/` 下 `1b-竞品分析-汇总对比体.md`、`复核清单-1a受影响条目.md`、`1a-需求文档-MCN短视频整合营销.md` 三份,mtime 22:29,均由 22:25 那棒(`e74db4d4`)产出并 `--report --state done`。
- 判据「技能包规则文件已全量过说人话」—— 🔴 **不过**:`E:/ProgramData/.workbuddy/skills/product-planning/` 共 87 份 `.md`,在 21:38(用户选 A 全量过)之后**只有 2 份**被改(`SKILL.md` 21:45、`references/stage-discovery/SKILL.md` 21:53)⇒ 远未「全量」。
- 判据「vibe-product六份①②段文档已重写」—— 🔴 **不过**:`E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/` 清单内六份(`1a`/`1c`/`1d`/`1e`/`2a`/`2b`)mtime 仍是 01:46~01:47,**一份没动**;21:07 只动过清单外的 `research/1b-竞品分析.md`。
- 判据「产物落点明确且可追溯」—— ⚠️ **判不了**:四项已交付产物的落点清单清楚(S7 §二),但 5 份独立体落在**旧目标目录** `5199a6`,与「本目标目录」按字面互斥(见 §六)⇒ 口径待主会话裁定。
**本棒处置**:
1、**派了一条执行棒** `[执行]-[开源项目调研]-技能包规则全量说人话`(id `ed3dd62e`,once,22:57 触发,`cwds` 逐字=本工作区,域目录 `执行会话`,域检 `✅ 可派|域空闲`)⇒ 接 §六 队列第 3 项、判据「技能包规则文件已全量过说人话」。
 · 写法:改写稿落目标目录 `72111e/技能包-说人话-新稿/`(域内),全局技能目录**全程只读**,最终落地由主会话一步执行。
2、**未派第二条**(⛔ 不连建):§六 队列第 4 项「vibe-product 六份重写」的目标是**另一个工作区** ⇒ 按 S 红线,本工作区执行棒不得去那儿写入 ⇒ 只能由主会话处置。
3、**不改生命周期**(保持「进行中」)。
4、⛔ **没跑** `--ensure-goal-dir`(§四 结论仍成立:本区 `roles` 为空 ⇒ 会把检查会话登记成主会话)。
5、⛔ **没写** `acceptance_state`:本轮分支是「没做完」而非「做完了」;且第 7 条判据的落点口径待主会话裁定 ⇒ 逐条写「过」会造成机器侧误读。
**留给主会话的(本棒不擅改)**:`goal.json.execution_doc` 仍指旧目标目录(5199a6)⇒ 需跑一次 `--ensure-goal-dir`(只能由 main 席位跑);判据值域「未过」不在 `过|…`/`🔴 不过|…` 取值域;第 7 条判据的落点口径与 §六 互斥;判据「vibe-product 六份」非本工作区可写。
---
## 〇、上一棒判定 · 第 7 棒(2026-10-07 22:20 · 排期 `20661a85` · 历史)
> 🔴 本节**覆盖下面 §一~§七 的历史判定**(那些是第 6 棒 21:49 写的,其前提「21:55 那棒还没跑」已失效)。
**判定:目标未完成** —— 三路并集:
- ① 台账 `tasks.json`:7 条**全部 done**、队列空、无僵尸件。但其中 **6 条属旧目标(`goal_fp=5199a6`)**;本目标只 1 条:`6ec1b428`(22:01:45 done,`by=""`,artifact=`…-5199a6/…/证据附卷/`)。
- ② 任务图 `taskgraph.json`:**文件不存在** ⇒ 无节点可判。
- ③ 验收判据 `goal.json.acceptance_state`:**7 条全部非「过」**(值写作「未过」,非规范取值域)。机器侧读数一致(`goalctl` 无参跑出「目标状态 = **未完成**」)。
**实况核实(本棒新增,⛔ 不是推断)**:
- 21:55 那棒 `[执行]-[开源项目调研]-重写竞品独立分析体`(`4e470d4c`)**已真跑完**:`证据附卷/` 5 份文件 mtime 全在 21:40~22:01(14~33 KB),22:01:45 有一条 `--report --state done`(`6ec1b428`)⇒ 第 6 棒「活有人干」的悬念已落地。
- 剩余缺口:**汇总体边界(判据 2)/1a 逐条复核(判据 3)/MCN 需求文档重生成(判据 4)/技能包规则 19 份(判据 5,主会话)/vibe-product 六份(判据 6,主会话)/产物落点(判据 7)**。
**本棒处置**:
1、**派了一条执行棒** `[执行]-[开源项目调研]-重生成MCN需求文档`(id `e74db4d4`,once,22:25 触发,`cwds` 逐字=本工作区,域目录 `执行会话`,域检 `✅ 可派|域空闲`)⇒ 接判据 2/3/4。
2、**不改生命周期**(保持「进行中」)。
3、⛔ **没跑** `--ensure-goal-dir`(第 6 棒 §四 的结论仍成立:本区 `roles` 为空 ⇒ 会把检查会话登记成主会话)。
4、⛔ **没写** `acceptance_state`(7 条判据的逐条依据本轮取证不到位 ⇒ 依「不确定就不改」停手)。
**留给主会话的三条(本棒不擅改)**:
1、`goal.json.execution_doc` 仍指向**旧目标**目录(5199a6)⇒ 需跑一次 `--ensure-goal-dir` 对齐(只能由 main 席位跑)。
2、判据值域:「未过」不在 `过|…`/`🔴 不过|…` 取值域 ⇒ 需按规范改写(功能上等价,机器读数已是「未完成」,未产生错误结论)。
3、落点口径:新版产物落目标目录(`72111e/`),旧文件留在原位不删;若裁定应以新版**覆盖** `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`,需主会话(域外)执行一步覆盖。
---
## 一、本轮判定(一句话 · 第 6 棒 21:49 · *历史*)
**目标未完成**;但**第一棒已在册**(21:55 触发)⇒ 本轮**不派新棒、不改生命周期**(保持「进行中」)。
判据取自三路并集(任一路有非 done/非过就是没完):
- ① 台账 `tasks.json`:6 条**全部 `done`**,队列空、无僵尸件(`collabd-state.json`:pending 0 / running 0 / done 6 / blocked 0)。
⚠️ 但这 6 条**全属旧目标**(`goal_fp = 5199a6`),**本目标一条记录都没有**。
- ② 任务图 `tmp/supervise-inbox/taskgraph.json`:**文件不存在** ⇒ 无节点可判(无 `status != done`)。
- ③ 验收判据 `goal.json.acceptance_state`:5 条**全部「未过」**。
- ④ 决定性一路:**在册执行排期** `[执行]-[开源项目调研]-重写竞品独立分析体`(id `4e470d4c`,once,**21:55 触发**,`cwds` 逐字等于本工作区)⇒ **活有人干**。
## 二、验收判据现状(来源=`goal.json`,⛔ 不是文档)
逐条读到的值如下,**没有一条是「过」**:
- 5份竞品分析已按独立分析体重写 —— 未过
- 1b汇总对比体与独立体职责边界正确 —— 未过
- 受影响的1a需求文档条目已逐条复核 —— 未过
- MCN需求文档已重新生成 —— 未过
- 产物全部落在本目标目录内 —— 未过
⚠️ **两处失真,须记账**:
1. 值写作「未过」,**不在规范取值域**(规范是 `过|…` 或 `🔴 不过|…`)
⇒ 机器分不出「还没判」与「判了没过」。这 5 条是**换目标(2026-10-07T21:47)时落下的占位值**,**无一条带依据**。
2. 它们与实况**部分不符**:`[执行]-[开源项目调研]-重写竞品独立分析体` 的 prompt 里写明「Easel 那份**已经重写完成**(232 行)」
⇒ 至少第 1 条判据的**一部分已完成**,但判据是粗粒度整条,读不出这个中间态。
## 三、判据缺口 —— 本轮做不了「逐条读文档对账」
- 派活原文指定的**唯一依据文档** `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/目标执行状态.md`
在本轮开始时**不存在**(整目录不存在)⇒ 那个路径下**读不到任何结论行**。
- `goal.json` 的 `execution_doc` 字段**指向另一个目标**:
`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/目标执行状态.md`。
那份文档的 H1 是**旧目标**、判据也**全是旧目标的 5 条**(且全「过」)⇒ **不能拿来判本目标**。
- ⇒ 根因(代码级,非推断):`collabd.py::_ensure_goal_dir()` 里那段 `doc_sync`
职责正是「换目标后把 `execution_doc` 对齐到 `exec_dir_rel()` 的真值」,
而本区**从未在换目标后跑过 `--ensure-goal-dir`** ⇒ 登记值停在旧目标上。
## 四、本轮为什么没有替它修(⚠️ 不是遗漏,是有代价)
- ❌ 本轮**不能**用 `collabd.py --ensure-goal-dir` 去修上面这个漂移。
原因:`_ensure_goal_dir()` 末尾有「**顺手登记主会话**」那一段,
而本区 `collabd-state.json` 的 `roles` 是**空对象**(没有任何 main)⇒
跑它会把**本检查会话登记成主会话**(还会降级别人)⇒ 机制级污染。
- ✅ 正确修法:由**本区主会话**(或任何**应该占 main 席位**的会话)跑一次
`python .workbuddy/collab/collabd.py --ensure-goal-dir`(幂等、⛔ 不覆盖已有文档)。
它会一并完成两件事:① 建目标目录并落状态文档骨架 ② 把 `execution_doc` 对齐到真值。
- 本份文档是我**手工建立**的,就是为了让上面那条自动对齐**不会覆盖**它(幂等语义),
并让下一棒检查会话有东西可读。
## 五、派活原文与实况的偏差(供机制侧记账)
- 派活原文写的前提是「**本项目没有别的待执行排期**」——**与实况不符**:
21:47:05 建本检查会话那一刻起,`[执行]-[开源项目调研]-重写竞品独立分析体`(21:55)就已在册。
- ⇒ 常驻 `maybe_spawn_check_agent()` 那道「无待执行排期」闸**没拦住**,
本检查会话因此是一次**空跑**(没有任何可判的新事实)。
⚠️ 只报现象,未去查闸的实现(本轮只做核对,⛔ 不扩面)。
## 六、一处内部不一致(会在收口时变成永久红)
- 本目标验收判据第 5 条是「**产物全部落在本目标目录内**」,
而 21:55 那棒被指定的落点是**旧目标目录**:
`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/证据附卷/`
(`--report --artifact` 也指这里)。
- ⇒ 两者按字面**互斥**:要么「本目标目录」指的是 `5199a6` 那个目录(那第 5 条该改措辞),
要么该棒落点该改到 `72111e`。**本轮不擅改**,留给主会话/用户定。
## 七、下一棒该做什么
- **不派**。21:55 的 `[执行]-[开源项目调研]-重写竞品独立分析体` 就是下一棒,跑完由常驻按台账与判据继续判。
- 主会话需先处理两条(都在上面 §四 §六):跑一次 `--ensure-goal-dir`;裁定第 5 条判据与落点口径。