技能包存档+整包回退收口:把 1d7d31a 的「说人话」改写另存为档案,product-planning 已回到 44d42b0(技能仓 8fc9a92,闸门 2060/0/27)
This commit is contained in:
1 parent
1545aba3ae
commit
5409f605f9
11 files changed
+4590
-1
No files matched your search
@@ -0,0 +1,384 @@
|
||||
---
|
||||
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 构建 |
|
||||
|
||||
`open-design`(上面那张表的可选来源)给三处,都在 `assets/open-design/` 下:
|
||||
|
||||
1、`design-systems/<选定一套>/`:`DESIGN.md` 定调性 + `tokens.css` 给全套数值(圆角与阴影在这里)+ `components.html` 给组件形态。
|
||||
|
||||
2、`craft/`:字号刻度 / 配色配额 / 状态齐备 / 动效纪律 / 反 AI 味 / 无障碍。
|
||||
|
||||
3、`design-templates/web-prototype/`:种子 `assets/template.html` + 8 个版式骨架 + 自查清单。
|
||||
|
||||
⭐ 选了自带的 `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` |
|
||||
|
||||
> ⚠️ 路径怎么找:自带件一律按**段内相对路径**引用(`assets/open-design/...`、`assets/design-systems/...`),⛔ 不按绝对路径爬、⛔ 不写死 `../` 层数;`oil-ui-pro` 按技能名引用(宿主按名加载,与物理位置无关)。
|
||||
> 🔴 定调来源唯一:每次设计只选一套,默认与可选**不混用**(混用 = 没有调性)。套名与选择理由写进 `DESIGN.md`。
|
||||
> ⛔ 判据正文仍只在本段(`references/execution-runbook.md` 与 `references/layouts-tooling.md`)。⚠️ 供给是分层的,分层定义见 §供给:`oil-ui-pro` 是**基础层**,本段自有判据是**叠加层**;同一条判据两处都有且口径不同时,⛔ 本段不许放宽基础层,只许更严、更具体,并在 runbook §3.4 标注「本项目追加」。
|
||||
> ⛔ 不许把 `oil-ui-pro` 的评分循环当成 D 阶段的替代:它是评审方法,Gate-1/2/3 该过还得过。
|
||||
> ⛔ 不动用可选来源时,⛔ 不许凭感觉编一套顶上(那正是本项目反复踩的坑);craft 独有的那几项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)明说「本次无供给来源」。
|
||||
> ⚠️ `oil-ui-pro` 自带联网版本检查与自动更新(每次使用会连 `ui.oiloil.org`,发现新版用 `npx` 覆盖自身目录)。这是本项目收录时用户明确要求全量搬入的例外项,与「依赖外部服务一律不收」的既有纪律冲突,记录在案,不扩散到其他技能。想关掉设环境变量 `OIL_NO_UPDATE_CHECK=1`。
|
||||
> 供给件都不依赖付费云 / MCP / API Key 才能用于设计:`open-design` 去掉那些之后剩下的全是静态 md / css / html(其 daemon、云模型服务、`packages/components` 的 tsx 未收录);`oil-ui-pro` 的设计方法宿主中立、离线可用(联网仅用于版本检查)。
|
||||
> 冲突处以 §供给·方法主线(基础层)为准;本段自有判据与 `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
|
||||
(内联 CSS,不要外链任何资源),作为我们的参考版本。
|
||||
|
||||
需求:<②段的功能清单 + 界面布局>
|
||||
设计风格:<DESIGN.md 的定调 + 令牌表:主色/底色/字体/间距刻度/圆角/字阶/密度>
|
||||
|
||||
要求:这是工具型页面(数据 + 操作,不是营销落地页);把主要页面的形态都做出来;
|
||||
状态(空 / 加载 / 错误 / 禁用)要落地;页面要能在浏览器里真实打开。
|
||||
|
||||
请在代码之前先用三句话说明:你把主视觉放在哪、为什么这么排、和你见过的同类产品有什么不同。
|
||||
```
|
||||
|
||||
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` 本项目从未建立,属存量缺口。
|
||||
+423
@@ -0,0 +1,423 @@
|
||||
# ③段执行手册(固化流程)
|
||||
|
||||
`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 份全读必然互相稀释。
|
||||
|
||||
> 下文凡出现 `open-design/...` 的路径,一律指本段**随段携带的自带件** `assets/open-design/...`(独立技能、可选择使用);不选它就按默认主线走(`oil-ui-pro` 方法 + 自带样式库定调 + 本段自家 `execution-runbook.md` 与 `layouts-tooling.md` 判据),craft 独有的那几项明说「本次无供给来源」。
|
||||
|
||||
| 阶段 | 读什么 | 为什么 |
|
||||
|---|---|---|
|
||||
| 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 用户定案):骨架归②段,本段做皮肉。
|
||||
> 两侧完整对照只在②段 `SKILL.md` 的 §②—③ 交接口 定义一次(本手册不重复那张表,理由与用户原话见那一节)。
|
||||
> ②段《界面布局》里的页面清单、每页板块、板块排列、跨页关系就是骨架定稿。本段不许增删移动板块,要改回②段改。本段在给定骨架内决定视觉与交互实现。
|
||||
> 理由(用户原话):「页面关系和布局必须在第二步确认清楚,不然第三步没有方向 一会一个样子」。
|
||||
> ⛔ 仍归本段的:配色 / 字体 / 间距 / 组件样式 / 动效 / 板块内的排版与交互行为 / 响应式。
|
||||
|
||||
读②段时取四样:骨架(页面清单 + 每页板块 + 排列 + 跨页关系)、必须在界面上发生什么、红线、禁用条件与状态流转。
|
||||
骨架是冻结输入,其余三样是功能约束。
|
||||
|
||||
按本节清单产出设计契约,十二个字段:页面职责(「让<谁>在<多久>内<完成什么>」)、主用户、主操作(全页唯一,写了两个就该拆页)、必要内容(核对面)、重复项的信息量(行式列表 / 卡片网格时逐条列出:每个重复项除「主标识 + 动作」外必须带 ≥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 定调 → 令牌表
|
||||
|
||||
> 🔴 **D1 读什么(2026-10-08 补 · 本节的硬前置)** —— 定调要取**三样**,⛔ 只取数值不算取用选定套:
|
||||
>
|
||||
> 1. **数值**:选定套的 `tokens.css`(色值/圆角/间距/按钮/卡片/输入框)。
|
||||
> 2. **版式结构**:选定套里记「外壳怎么分(侧栏/顶栏/主区)」「内容区用列表还是卡片网格」的那份。
|
||||
> 3. **组件族**:选定套里列组件族与样张的那份。
|
||||
>
|
||||
> ⛔ **文件名随档而异,按该套目录里实际有的读**:本包默认档那套(`assets/design-systems/design-system-tiaoyue/`)
|
||||
> 给组件的是 `references/components.md`(组件族)+ `references/design-system.html`(样张),
|
||||
> 它**没有** `components.html` —— 那是**可选档 153 套**的命名。
|
||||
> 🔴 2026-10-08 实测事故:D1 步骤原写 `components.html` ⇒ 在默认档里**按名字找不到** ⇒ 那一次只取到了
|
||||
> 色值与圆角,**版式结构与组件族整层漏掉** ⇒ 做出的界面「用了它的样式、没有它的排版」。
|
||||
> ⇒ 判据:`DESIGN.md` §2.5 组件规格**每一行都要写出处**(取自哪个族/哪个结构),⛔ 只写数值不写出处即判**未取用**。
|
||||
|
||||
从 `assets/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` 未涉及)
|
||||
|
||||
- 🔴 与 §供给·方法主线(**基础层**)的口径:本项目只许在它之上**收严 / 具体化**,⛔ 不许放宽或推翻(2026-10-08 用户定案「oil 是基础,在这个基础上可以叠加其他设计规范」)。当前收严项登记如下 ——
|
||||
1、强调色占屏面积:本项目比基础层更严。
|
||||
⚠️ 反过来:想把本项目的某项**放宽**到基础层之上(例如允许更多字号档、更多同屏动效),那不算叠加 —— ⛔ 不行,得先回基础层改。
|
||||
- 重大改版必须复制副本再改(`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 交付门(硬闸,任何挡位不可跳)
|
||||
|
||||
真实渲染后(浏览器打开,非只看代码)肉眼过八项:裁切 / 重叠 / 失真 / 失效控件 / 缺状态 / 响应式破损 / 控制台报错 / 字体回退异常。
|
||||
|
||||
> 🔴 **2026-10-08 追加两条硬要求 —— 起因是本项目实测事故:五道闸门全绿,界面仍然难看。**
|
||||
>
|
||||
> **① 「看过」必须有落盘记录。** `oil-ui-pro` 的评分闭环(截图 → 评审 → 修改;10 分制、目标 9 分、默认最多三轮)
|
||||
> 的结果要写进 `3d-审查报告.md`。⛔ **不许用「自检脚本 N 项全绿」顶替「看过并满意」** ——
|
||||
> 脚本量的是一致性与完整性(结构漂没漂、控件死没死、语法炸没炸、行数退没退化),**没有一条量「像不像给人用的」**。
|
||||
> 上述那八项肉眼项也全是「有没有坏」,「丑」不在其中。
|
||||
>
|
||||
> **② 人工项必须给机检实现,否则不许打勾。** 凡挂在本门或 §7 完成标准里的判据,要么给出可跑的取值
|
||||
> (脚本 / DOM 取值命令),要么在该条后面写死「**本条无机检**」。
|
||||
> 🔴 **⛔ 不许在没有取值手段的条目上打 ✅** —— 本项目实测:收口清单里「§5.5 五条逐条过完 ✅ 自检机核」
|
||||
> 这一格是**假的**(那五条当时零覆盖),而它正是「全绿却难看」的开关。
|
||||
无头截图已代劳其中的溢出与响应式破损,其余仍需人眼(截图查不出「点了没反应」,那靠 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 均已通过(书面结论,非口头)
|
||||
- [ ] 重大改版:旧版文件仍在磁盘上,且收尾给出新旧差异(改了什么 / 为什么 / 代价)
|
||||
- [ ] 偏离单已附,且无静默偏离
|
||||
+484
@@ -0,0 +1,484 @@
|
||||
# 工具型版式库(工具型数据密集界面 · 本项目追加)
|
||||
|
||||
> ⛔ 本文件是 `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 主从侧区 |
|
||||
| 矩阵型 | 记录有两个维度要同时看(如账号 × 日期),看的是**交叉格的状态** | §4.5 矩阵型 |
|
||||
| 对照型 | 同一母体的多个版本要并排比(一稿多版、多方对账) | §4.6 对照型 |
|
||||
| 流水线型 | 一条对象要按固定环节往前走,且能回退(多环节轨道 + 当前环节工作区) | §4.7 流水线型 |
|
||||
| 时间线型 | 记录只追加不覆盖,看的是**先后顺序与沉淀**(记忆、留痕、版本史) | §4.8 时间线型 |
|
||||
| 导航型(外壳) | **每个页面都有它**,不是"某一页的形态" | §4.9 导航栏 |
|
||||
|
||||
⭐ **外壳不参与上面的形态判定**:导航栏 / 顶栏 / 页头每个页面都在,判"是哪一档"没有意义 ⇒ 单独走 §4.9(2026-10-08 追加)。
|
||||
⭐ 判不出来怎么办:页面上能数出"并列的同类记录"就是列表型;数不出就是详情型。
|
||||
⭐ 列表型里若"并列"发生在**两个维度上**(行是一个维度、列是另一个),判矩阵型 ⛔ 不是列表型。
|
||||
矩阵是表格式清单的**轴转置排布**,属同一形态族,⛔ 不需要为它新增板块 —— 那是②段块级的事。
|
||||
⛔ 不许拿落地页骨架顶替 —— 那是"没有形态判定"的默认行为,等于退回 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 说明行高或内衬过肥 ⇒ 工具型页面一屏放不下东西。
|
||||
🔴 **适用范围与优先级(2026-10-08 补充 · 因本项目把它当成了全局铁律,反过来否决了参照物形态)**:
|
||||
① **只管 §1 行式列表 / §2 表格式清单 这两档里的主数据块**,⛔ 不管卡片区、统计条、导航栏、页头、页脚;
|
||||
② 判定口径是「**容量**」:`cap = floor((视口高 − 首行顶) / 行距)`,**与页面里有几条示意数据无关** ——
|
||||
示意数据不足 6 条时,报告写「容量 N 行(数据用尽)」,⛔ 不许因为数据少就判红;
|
||||
③ **⛔ 不许拿它否决参照物形态**:为了凑行数把参照物的三段纵向卡压成两段、把面板内衬从 24 砍到 12、
|
||||
或删掉区块小标 —— 这三件都是「判据反过来否决设计」。正确做法是**从别处还**(本项目第七轮实测:
|
||||
删掉与参照物不一致的小标 + 收统计条与块标题的边距 = 39px),而且**还完要再跑一遍全视口表**;
|
||||
④ **只量一档视口不算过**:至少跑「契约视口 + 断点两侧各一个」;
|
||||
本项目教训 —— 改完只量 1440,会让 640 / 768 掉到 3 行而看不见(**同一个毛病犯过两次**);
|
||||
⑤ 它是**行式列表的四条判定要点之一**,不是跨全站的第一原则。与「像不像参照物」冲突时,
|
||||
先问「这条页面的主操作是扫行吗」—— 不是,就不适用。
|
||||
- 每行必须带主标识(`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` 才是分族键 —— 两者不能混进同一个分组键。
|
||||
- 右区必须与左区当前项对应,⛔ 不许左区选中变了右区不动。
|
||||
|
||||
---
|
||||
|
||||
## 4.5 矩阵型(两维度交叉 · 2026-10-08 追加)
|
||||
|
||||
适用:记录有两个维度要同时看(典型=账号 × 日期),人要看的是**交叉格的状态**(有没有、什么状态、好不好),不是逐条改字段。
|
||||
结构:`纵轴(维度 A,行标签常驻左)| 横轴(维度 B,列头可横向滚动)| 格子(状态 + 一个关键值)`
|
||||
|
||||
判定要点:
|
||||
|
||||
- 格子里只放**两样**:状态(用色/形,⛔ 不用长文字)与一个关键值。⛔ 不许把一条记录的十几个字段塞进格子。
|
||||
- 行列标签都要**常驻**(行标签左固定、列头吸顶),滚动时⛔ 不许失去坐标 —— 没坐标的矩阵等于没有矩阵。
|
||||
- 颜色只承担**异常与缺口**的语义,⛔ 正常状态不上色(与「颜色只用于涨跌」同口径)。
|
||||
- 维度 A 数量超出一屏时(如账号 50 个)⇒ 分页或按组折叠,⛔ 不许靠无限滚动撑。
|
||||
- 空态:格子空着要能一眼看出是"缺"还是"还没到",⛔ 不许空白与"已发"长得一样。
|
||||
|
||||
⛔ 常见错:把矩阵画成"每行一条记录的列表,只是多贴了几个列" —— 那是列表型冒充矩阵,看不出交叉关系。
|
||||
|
||||
---
|
||||
|
||||
## 4.6 对照型(同母体多版本并排 · 2026-10-08 追加)
|
||||
|
||||
适用:同一母体的多个版本/多方来源要并排比(一稿多平台版本、内容 vs 发布记录 vs 收支的对账)。
|
||||
结构:`基准列(母体)| 对照列 × N(并排,同一行对齐同一处)`
|
||||
|
||||
判定要点:
|
||||
|
||||
- 对照项必须**逐处对齐**:同一行=同一处内容,⛔ 不许各列自己排序、自己滚动。
|
||||
- 差异要**可跳**:点一处差异能跳到出问题的那一处并高亮,⛔ 不许只给一句"有 3 处不同"。
|
||||
- 硬性阻断与提醒要**分层**(阻断置顶、提醒次之),⛔ 不许混成一条清单 —— 那会让人自己判断哪个必须先改。
|
||||
- 列数 >3 时改成"基准 + 一次对照一个"的切换,⛔ 不许把列压到看不清。
|
||||
|
||||
---
|
||||
|
||||
## 4.7 流水线型(环节轨道 + 当前环节工作区 · 2026-10-08 追加)
|
||||
|
||||
适用:一条对象要按固定环节往前走,且允许回退(创作流水线、审批流)。
|
||||
结构:`环节轨道(常驻,横/竖,显示当前与可回退)| 当前环节工作区(主视觉)| 侧区(常驻资源/检查)`
|
||||
|
||||
判定要点:
|
||||
|
||||
- 轨道**常驻且全程可见**,⛔ 不许做成"点进去才知道下一步"的向导 —— 工具型页面要让人随时知道自己在哪、能回哪。
|
||||
- 已完成的环节可回退,回退要**保留该环节已产出的内容**,⛔ 不许清空重来。
|
||||
- 当前环节工作区是**主视觉**,占最大面积;轨道与侧区⛔ 不许抢它的面积。
|
||||
- 🔴 **AI 产出环节必须有独立的产出区**(生成中 / 已生成 / 失败重试 + 采纳·驳回·改后再用三个动作):
|
||||
- 生成中要有**进度与可中断**,⛔ 不许只转圈不给出口。
|
||||
- 产出与人的编辑**分区**,⛔ 不许混在同一块里 —— 混了就说不清哪句是 AI 写的、哪句是人改的。
|
||||
- 采纳/驳回是**显式动作**,⛔ 不许"直接用"默认等于采纳(那样留痕与回写就没有依据)。
|
||||
- 幂等:重复触发同一步要生成**新版本而不覆盖**旧产出。
|
||||
|
||||
---
|
||||
|
||||
## 4.8 时间线型(只追加的流水 · 2026-10-08 追加)
|
||||
|
||||
适用:记录只追加、不覆盖,看的是**先后顺序与沉淀**(账号记忆、发布留痕、版本史)。
|
||||
结构:`时间轴(竖向,最新在上或在下二选一,全站一致)| 条目(时间 + 谁 + 做了什么 + 可回溯)`
|
||||
|
||||
判定要点:
|
||||
|
||||
- 只能**追加**,⛔ 不许有"编辑历史条目"的入口 —— 那会把它变成列表型,沉淀就废了。
|
||||
- 每条要能回溯到**当时依据**(哪条内容、哪个版本、谁的确认),⛔ 不许只剩一句结论。
|
||||
- 排序方向**全站一致**(要么都最新在上、要么都最新在下),⛔ 不许不同页相反。
|
||||
- 条目很长时按**时间分段**(按天/按月给分隔),⛔ 不许一拉到底。
|
||||
|
||||
---
|
||||
|
||||
## 4.9 导航栏(工具型外壳 · 2026-10-08 追加)
|
||||
|
||||
适用:**所有**工具型页面。它是外壳、不属于任何内容档 —— 单列一档是因为前面八档一个都没管它,
|
||||
而它是用户第一眼看到的东西。本项目实测代价:导航形态猜错 ⇒ 第一轮验收就被推翻,返工三轮。
|
||||
⚠️ 本节管**几何与形态**;"名字可不可读"那条判据在 §5.5.2,⛔ 不在两处展开同一批数值。
|
||||
|
||||
结构:`栏(容器)| 项 × N(图标 + 名字)| 当前项标记 | 窄屏替代形态`
|
||||
|
||||
判定要点(数值来自源站实测,照抄即合规):
|
||||
|
||||
- **只有两套合规形态,⛔ 不许自创第三套**:
|
||||
- **窄栏档|64px 药丸栏**:栏宽 `64px`、内衬 `3px`、圆角 `100px`、底色 `color-mix(in srgb, 当前墨色 5%, transparent)`、
|
||||
描边 `1px color-mix(in srgb, 当前墨色 12%, transparent)`;⛔ **没有右边线**(分界靠药丸自己的底与描边,⛔ 不靠一条通栏发丝线)。
|
||||
项 `56 × 78`(圆角 `54px`、内衬 `16px`、段间距 `6px`、纵向居中),**图标 `24px` 在上 + 名字 `12px/500/行高 16px` 在下,两者都常驻**。
|
||||
`78 = 内衬 32 + 图标 24 + 段间距 6 + 名字行高 16` —— **四个数动一个就破**。
|
||||
- **宽栏档|240–280px**:栏宽 `240–280px`,项一行(图标 `20px` + 名字 `14px` 同行),名字写全。
|
||||
⛔ 不许在这一档里再叠悬停提示(名字已经全在)。
|
||||
- **项与项之间**:要么**无 gap**(药丸紧贴,本项目与源站如此),要么 `gap ≥ 4px`。⛔ 不许 1–2px —— 那个间距"看起来是脏的"。
|
||||
- **当前项只改颜色,不改位置**:填充 `color-mix(in srgb, 当前墨色 6%, transparent)` + 满墨字;
|
||||
非当前项字色用**淡字档**(本项目 `--ink-faint`,实测对比度 ≈3.4:1,过"淡字 ≥3:1")。
|
||||
⛔ 不用品牌强调色做当前项底、⛔ 不加位移、⛔ 不加阴影;过渡只 `transition-colors`(实测源站 `0.15s`)。
|
||||
- **窄屏(≤640)整段换形态**:药丸那一套(圆角/描边/淡底/垂直居中/固定项高 78)**全部还原成通栏横条**,
|
||||
项横排、高 `36px`、内衬 `0/12`、图标降到 `16px`。⛔ 不许把药丸拉横了继续用(会得到一条上下留白的怪东西)。
|
||||
- **横滚条 ⛔ 不许画滚动轨**:标签条溢出时 `scrollbar-width:none` + `::-webkit-scrollbar{ height:0; width:0 }`。
|
||||
实测(560px 宽):16px 高的横向滚动条压进 52px 高的条子里 = **三成高度是灰杠**,还白吃 16px 主区高度。
|
||||
⭐ 滚动能力与画不画轨是两件事 —— 藏轨不是删滚动。
|
||||
- **图标必须一处出口**:全站图标由一个函数产出(`svgIcon(name,size)` 这类),尺寸档位固定(如 24 / 22 / 16),
|
||||
⛔ 不许各处手写 `<svg width=…>`;⛔ 不许在同一层级混用描边与填充两套字形。
|
||||
- **悬停提示的内容是"这一项是干什么的",⛔ 不是名字的重播**(名字已常驻,再念一遍等于没说)。
|
||||
源站实测:提示行文案是说明(「发现灵感与精选内容」)。
|
||||
- ⛔ **不许把"收起侧栏"这类装饰开关放进顶栏** —— 窄栏本来就是收起形态,再给一个收起按钮是自相矛盾的承诺
|
||||
(本项目实测:顶栏因此堆到 7 项杂物)。
|
||||
- ⛔ **不许照组件清单的"计数"反推形态**:`nav-item`×81 / `nav-tip`×81 这类数字只说"每页有 9 项、每项有图标和提示",
|
||||
**说不了栏多宽、项多高、名字在不在**。本项目实测事故:照计数猜出"纯图标栏、名字只走提示",与源站**正好相反**。
|
||||
⇒ 拿不到几何就**回源站量**,⛔ 不许猜。
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
## 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**」—— 只图标是折叠态,不是默认态。
|
||||
|
||||
实证(原文引用保留):「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**」—— 只图标是折叠态,不是默认态。
|
||||
|
||||
判据(判**名字能不能常驻读到**):
|
||||
- **主导航每一项的名字必须常驻可见** —— 不靠悬停、不靠 tooltip、不靠"点开才知道"。名字常驻 = 过;名字只在悬停里 = 判不过。
|
||||
- **名字字号 ≥ 12px 且不截断。** 栏窄就短名、栏宽就全名,两种都对。**64px 窄栏的名字上限是 2 个汉字**(项宽 56 − 内衬 16×2 = 24px 内容宽)。
|
||||
- **图标单独出现只在两种情形成立**:① 有明确的可展开入口且**默认展开**;② 该栏是**次级**工具条(不是主导航)。主导航 ⛔ 不许只有图标。
|
||||
- **项数 < 4 时** ⛔ 不许用竖向栏 —— 三个图标撑一条竖栏、剩下全是空白。改用页头横向导航或面包屑。
|
||||
- **窄栏(≤96px)必须同页另有一处完整名字**(页头 `h1` 写全名,或至少 `title`/`aria-label` 带全名),⛔ 不许里外都只剩两个汉字。
|
||||
- ⛔ **栏宽不是判据**:240–280px(带全名)与 64px(带短名)都合规;⛔ 不许拿"每项 ≥240px ÷ 项数"这类算式反推栏宽。
|
||||
- 🔴 **形态细则(几何、状态、窄屏替代、滚动轨、图标出口)走 §4.9 导航栏** —— 本节只管"名字可不可读"这一件事,⛔ 不在两处展开同一批数值。
|
||||
|
||||
### 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*` 元素集合,与契约交互清单的元素列做双向差集 —— 有差即判不过。
|
||||
|
||||
---
|
||||
|
||||
### 5.6 两条元规则(2026-10-08 追加 · 治「判据反过来否决设计」)
|
||||
|
||||
> 这两条不是版式判据,是**防判据自己被误用**的元规则。加进来的原因:本项目实测中,
|
||||
> 「令牌刻度」「参照物笔记」这两样**都不是判据**的东西,被当成了判据,各自造成一次返工。
|
||||
|
||||
**5.6.1 参照物原值与本项目令牌刻度冲突时,⛔ 不许默默"就近落位"**
|
||||
|
||||
- 现象(实测):参照物的圆角 12px、网格 gap 14px、内衬 `16px 18px`、标题 17px、描述 14px 陆续被
|
||||
「不在我方刻度」为由改成 16 / 16 / `12px 16px` / 16 / 12 —— **每一条都写了理由,累积起来就是"不像"**。
|
||||
- 规矩:冲突时走三步,⛔ 少一步都不算"参考过参照物":
|
||||
① **量到数值**(回源站或读源文件,⛔ 不靠组件清单的计数、⛔ 不靠印象);
|
||||
② **把差异列成表**(项 / 参照物值 / 我方值 / 差多少);
|
||||
③ **逐条写明「学 / 不学」+ 理由 + 代价**,写进 `3d-审查报告.md` 的参照物对照节。
|
||||
- ⛔ **「刻意不学」不得用于掩盖规则违反**:写「不学」之前先回查 §5.5 那五条与本节各档 ——
|
||||
如果差异撞的是某条判据的反例(如「每一格都套圆角描边卡」),那是**违反**,不是取舍。
|
||||
实测:统计条「参照物无框靠竖分隔线 vs 我方白底描边卡」就被写成了"品牌层不串",实际撞的是 §5.5.4。
|
||||
|
||||
**5.6.2 本项目自造的物料 ⛔ 不得作为判据来源**
|
||||
|
||||
- 现象(实测):`布局排版参考-<参照物>.md` 是执行时自己写的笔记,里面有两条**技能里根本没有**的要求
|
||||
(顶栏「收起侧栏」、面包屑),却被当成依据写进了 D0 契约交互清单的证据栏(原文「来源是本项目参照物笔记」),
|
||||
结果顶栏堆到 7 项杂物。
|
||||
- 规矩:自造物料(参照物笔记、临时对照表、调研摘录)**只能指向证据,不能充当判据**。
|
||||
写进契约的证据栏时必须是这三个之一:**① 技能原文的「文件:小节」;② 源站/源文件的实测读数(带出处);③ 用户原话**。
|
||||
⛔ 不许出现「来源是本项目某笔记」这种没有上级出处的引用。
|
||||
|
||||
---
|
||||
|
||||
## 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,161 @@
|
||||
---
|
||||
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 用户定案)
|
||||
|
||||
口径:②段钉骨架,③段做皮肉。
|
||||
|
||||
| 归②段(必须在本段确认) | 归③段(⛔ 不许②段写) |
|
||||
|---|---|
|
||||
| 有哪几页 | 配色 |
|
||||
| 每页几个板块 | 字体 |
|
||||
| 板块怎么排 | 间距 |
|
||||
| 跨页关系(怎么跳转) | 组件样式 |
|
||||
| 每页的主操作是什么 | 动效 |
|
||||
| 每条信息在哪一档承载(主屏常驻 / 可点入) | 具体的视觉实现 |
|
||||
|
||||
> ⭐ 骨架是判断基准,必须在②段定死。旧口径把「有哪几页」留在③段,结果就是③段做一版一个样,②段无从判断改得对不对。
|
||||
> ⛔ 交给③段时骨架是冻结的:③段不许新增 / 移动 / 删除板块,缺板块要回②段改(见 `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` 机器判。
|
||||
+133
@@ -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 加一句可复述的判据
|
||||
- [ ] 「不做」清单与①段已拍板项逐条对照,并给出对照过的条目数
|
||||
- [ ] 界面布局五样给全(页面清单 / 页面流转 / 每页板块清单与排列 / 每页主操作 / 信息分档)
|
||||
- [ ] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效)
|
||||
Reference in new issue
Block a user