@xulthekl/team-flow 0.54.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.claude/always/phase-guard.md +1 -1
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/.codex-plugin/plugin.json +1 -1
  5. package/.cursor-plugin/marketplace.json +1 -1
  6. package/.cursor-plugin/plugin.json +1 -1
  7. package/.github/plugin/marketplace.json +2 -2
  8. package/AGENTS.md +2 -2
  9. package/CHANGELOG.md +92 -1
  10. package/GEMINI.md +1 -1
  11. package/INSTALL.md +1 -1
  12. package/README.md +1 -1
  13. package/agents/prototype-env-scout.md +4 -4
  14. package/dist/parsing/requirement-blocks.d.ts +26 -0
  15. package/dist/parsing/requirement-blocks.js +33 -5
  16. package/dist/validation/validator.js +8 -1
  17. package/docs/README_en.md +1 -1
  18. package/gemini-extension.json +1 -1
  19. package/hooks/session-start +19 -2
  20. package/llms.txt +1 -1
  21. package/package.json +1 -1
  22. package/plugin.json +1 -1
  23. package/scripts/check-project-config.mjs +84 -0
  24. package/scripts/design-system-clone.mjs +150 -0
  25. package/scripts/design-system-import.mjs +102 -14
  26. package/scripts/gen-primer.mjs +65 -13
  27. package/scripts/guard/checks/tasks-complete.mjs +9 -4
  28. package/scripts/guard/design-token-guard.mjs +136 -117
  29. package/scripts/infer-workflow.mjs +10 -1
  30. package/scripts/lib/arch-merge.mjs +20 -6
  31. package/scripts/lib/arch-parse.mjs +5 -11
  32. package/scripts/lib/ds-inputs.mjs +125 -0
  33. package/scripts/lib/ds-parse.mjs +124 -12
  34. package/scripts/lib/execution-recommendation.mjs +10 -1
  35. package/scripts/lib/glaf4-delegation.mjs +14 -3
  36. package/scripts/lib/hash.mjs +18 -2
  37. package/scripts/lib/md-normalize.mjs +108 -0
  38. package/scripts/lib/prototype-sync.mjs +19 -1
  39. package/scripts/lib/sdd-overlay.mjs +17 -6
  40. package/scripts/lib/slug.mjs +68 -0
  41. package/scripts/lib/solutions-capture.mjs +6 -12
  42. package/scripts/lib/solutions-index-gen.mjs +2 -2
  43. package/scripts/lib/solutions-phases.mjs +32 -0
  44. package/scripts/lib/solutions-promote.mjs +16 -5
  45. package/scripts/lib/spec-merge.mjs +46 -11
  46. package/scripts/lib/state-loader.mjs +4 -1
  47. package/scripts/lib/test-merge.mjs +4 -1
  48. package/scripts/token-extract.mjs +101 -9
  49. package/skills/ce-compound/references/three-tier-index.md +6 -2
  50. package/skills/design-system/SKILL.md +46 -23
  51. package/skills/design-system/references/agents/design-system-architect.md +25 -12
  52. package/skills/design-system/references/creation-flow.md +17 -0
  53. package/skills/design-system/references/creation-modes.md +171 -0
  54. package/skills/design-system/references/showcase-board-b-end.md +50 -36
  55. package/skills/design-system/references/showcase-board-c-end.md +59 -36
  56. package/skills/design-system/references/variant-schema.md +21 -1
  57. package/skills/prototype/SKILL.md +4 -0
  58. package/skills/prototype/references/builder-methodology.md +11 -4
  59. package/skills/prototype/references/layouts.md +10 -0
  60. package/skills/prototype/references/orchestration-flow.md +8 -0
  61. package/skills/workflow-bootstrap/SKILL.md +15 -5
  62. package/src/parsing/requirement-blocks.ts +34 -5
  63. package/src/validation/validator.ts +8 -1
@@ -108,12 +108,29 @@
108
108
  - `components` 组件契约表(≥10 类起步,含类型列)
109
109
  - `principles`(≥3 条)+ `governance`(`contract: v1`)
110
110
  - 头部 a11y 声明行(WCAG 2.2 AA)
111
+ - **端变体 `layout` 段默认写 `页面范式来源:引用内置`(v0.55.0,设计 §8.2.2)**——生成端变体(`b-end.md` / `c-end.md`)时就要写,**不写则从零创建的产物两端一出生就落 ⚠️**(guard L3 声明层缺失,只能等 iterate 补)。绿地默认只写这一行;容器骨架块**可省**——内置 `template.html` 的类全是通用/营销向(`hero` / `topnav` / `pagefoot`),**C 端够用**;但 **target 为 B 端(`b_end` / `both`)时建议一并给**(内置骨架**无** `app-header` / `app-sider` / `app-main` 这类容器类,不给则 builder 每页手写整套后台骨架 CSS,单次派发无法复现)。取值三态见 `variant-schema.md`,缘由详见 `creation-modes.md` §5。
111
112
  - 用 `preview-template.html` 填 token 值 → 自包含 `preview.html`(色板/排版/间距/组件/明暗切换)。
112
113
 
113
114
  ## Step 4.5: Design Showcase 草案(v0.54.0 新增,设计 §4.1.7)
114
115
 
115
116
  > **可选环节**:Step 5 呈现前询问用户是否需要(**产出前明示预估耗时**,S5 实测校准后回填);不需要则跳过。
116
117
 
118
+ **0) 询问前先做原型探测(v0.55.0,设计 §8.2.3 / FB-2a)**:
119
+
120
+ - **探测面**:`prototype/` ∨ config `prototype.entry` 所在目录 ∨ `prototype.versionWorktree`(worktree 内原型)∨ repo_layout 各仓的 `prototype/`——**须覆盖 worktree 与多仓**,否则探测不到 → 提示不出现 → 用户被引导重画已有原型(正是本节要修的形态)。
121
+ - **判据**:探测到 **≥1 个 HTML 页面文件**即提示(**不设行数阈值**——机制不替用户判断"够不够成熟",由用户在知情下决定)。
122
+ - **呈现**(`AskUserQuestion`):
123
+
124
+ > 「检测到项目已有原型产物(`prototype/`:N 个页面 / M 行)。showcase 的目的是在设计系统落盘前预览效果,已有真实原型时可能重复。」
125
+
126
+ | 选项 | 后续动作 |
127
+ |------|---------|
128
+ | **跳过 showcase**(推荐) | Step 5 呈现时**改引用真实原型路径**(不产 showcase 草案) |
129
+ | 仍然产出 | 走下方原流程(brief 场景可调) |
130
+ | 调整场景 | 用户给出场景描述后产出 |
131
+
132
+ > **为什么**:showcase 的定位是"设计系统落盘**前**预览效果";已有真实原型时它是**重复劳动**——不提示就是让用户白画一遍。
133
+
117
134
  1. architect 产出 **primer 草案**(scratch 路径 `/tmp/ds-draft-<slug>/primer-draft.md`,digest 记录**草案 base** 的哈希)
118
135
  2. 主代理派 `prototype-builder`(`mode: showcase`,单次派发):
119
136
  - 输入:showcase-board brief(按 target:`b_end` → b-end brief;`c_end` → c-end brief;`both` → 两个)+ 设计系统草案 + primer 草案
@@ -0,0 +1,171 @@
1
+ # 创建模式详解(v0.55.0)
2
+
3
+ > 本文是 `SKILL.md` Step 0 的**展开说明**。Step 0 按「资产就绪度降序」列出 7 条起点,
4
+ > 其中 6 条的完整流程在此(**iterate** 见 `creation-flow.md`;**从零创建**即 Step 1 起的交互 6 步):
5
+ > §1 移植 clone · §2 模板库 · §3 通用起点 `--profile antd` · §4 文档导入 create-from-docs ·
6
+ > §5 B 端容器骨架为何必须给(贯穿 §1/§3) · §6 代码逆向 create-from-code。
7
+
8
+ ---
9
+
10
+ ## 1. 移植模式(clone)
11
+
12
+ **场景**:**同类后台项目之间复用设计系统**——"以后其他项目是相同的后台"。
13
+
14
+ **入口**:`/team-flow:design-system clone --from <源项目路径 | 源设计系统目录> --to <目标设计系统目录>`
15
+
16
+ 设计系统就是 `.team-flow/design-system/` 下的 markdown,技术上 `cp -r` 即可——但**直接复制会留 4 个坑**,
17
+ `clone` 把它们自动化:
18
+
19
+ | # | 坑 | 处置 |
20
+ |---|-----|------|
21
+ | 1 | **`来源与裁决记录` 失真**(复制后仍写着原项目的导入记录,而目标并未导入过) | **追加**移植记录,**保留**原裁决历史——其裁决依据对理解本系统取值仍有参考价值 |
22
+ | 2 | **`primer.md` digest 失效**(锚定源 base 内容;改一字即 STALE,而 prototype Step 0 对 `contract: v1` 系统 **blocked**) | 强制重生成 + `--check` 校验 |
23
+ | 3 | **业务专属组件残留**(如"协议富文本编辑器 / 内容预览画布") | 输出契约表全量清单 → **逐条问询** |
24
+ | 4 | **授权边界**(源 `references/` 下可能是企业内部资产) | 提示(不自动判定) |
25
+
26
+ **脚本自动完成(确定性)**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/design-system-clone.mjs --from <源> --to <目标>`
27
+ 1. 校验源系统(跑 guard;不合规**只警告不阻断**——源可能是 legacy)
28
+ 2. 复制(**排除** `primer.md` / `pending.md` / `showcase/`)
29
+ 3. 追加移植记录
30
+ 4. 输出契约表清单(供第 5 步问询)
31
+ 5. 重生成 primer + `--check`
32
+ 6. 对结果跑 guard 并输出六层审计
33
+
34
+ **需 LLM 承接(脚本不做的交互部分)**:
35
+ - **业务组件逐条问询**:读第 4 步清单 → `AskUserQuestion` 逐条确认 → 删除不再需要的
36
+ → **提示用户**:组件数跌破档位会改变 L2 标签(<10 FAIL / 10-14 WARN / ≥15 PASS)
37
+ - **品牌适配**:主色/字体不同 → 改 `base.md` 的 `color` 段 → **必须重跑 `gen-primer`**
38
+ - **`contract` 取值**:移植产物继承源系统;若源为 `v1` 而目标尚未达标,可考虑降为 `legacy`
39
+ - **页面范式来源复核(v0.55.0)**:`### 页面范式` 是**原样带过来**的,但目标项目的页面现实可能不同——
40
+ **判据 = 目标项目是否已有成文的页面规范或既有原型页面类型**:
41
+ 源 `引用内置` 而目标是**棕地** → **改为 `项目自有`** + 补容器骨架块 + 页面类型表(否则目标既有的
42
+ 页面规范进不了 builder,本次移植等于只搬了一半);源 `项目自有` 而目标是**绿地**(无既有页面规范)
43
+ → 可改 `引用内置`(否则 builder 会按源项目的页面类型硬套,与目标实际页面不符)。改后**必须重跑 `gen-primer`**。
44
+
45
+ **与 iterate 的分界**:clone 是**新建**(目标无设计系统);目标**已有**设计系统 → 走 iterate(MERGE 不 OVERWRITE)。
46
+
47
+ ---
48
+
49
+ ## 2. 模板库导入
50
+
51
+ **场景**:想参考某个成熟产品的视觉风格(Linear / Stripe / Vercel / Supabase / Sentry / PostHog / Notion / Claude)。
52
+
53
+ **流程**:展示 `${CLAUDE_PLUGIN_ROOT}/templates/design-systems/registry.json` → 用户选定 →
54
+ `node ${CLAUDE_PLUGIN_ROOT}/scripts/design-system-import.mjs <reference.md> --out .team-flow/design-system/base.md`
55
+ → **续跑 Step 5 评审 → Step 6 落盘**(落盘含 primer 生成 + guard 校验)。
56
+
57
+ > **B 类参考**(如 linear-app)为**自动提取配色**,转换器会输出警告 → **须提示用户人工核对**。
58
+ >
59
+ > **风格种子**(`styles.json`,57 个):Step 1 需求收集时作为 mood / 品牌主色的参考依据。
60
+
61
+ ---
62
+
63
+ ## 3. 通用起点(`--profile antd`)
64
+
65
+ **场景**:全新项目、**没有任何规范**,先要一套合规的 token 底座。
66
+
67
+ **入口**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/design-system-import.mjs --profile antd --out .team-flow/design-system/base.md`
68
+ → 续跑 Step 5 → Step 6。
69
+
70
+ **产出规格**(全部来自 Ant Design v5 seed token(MIT)或 team-flow 自有规范):
71
+
72
+ | 规格 | 值 |
73
+ |------|-----|
74
+ | 控件高 | 32px(`controlHeight`) |
75
+ | 圆角阶梯 | 2 / 4 / 6 / 8(`borderRadius`,v5 默认 6) |
76
+ | 字号阶梯 | 12 / 14 / 16 / 20 / 24(`fontSize`) |
77
+ | 间距 | 8 档 4→48px(**team-flow 自定**,参考 AntD size 阶梯) |
78
+ | 组件契约表 | 20 类通用基线(team-flow 自有) |
79
+
80
+ **零 LLM、零外部资产、零授权链风险**。
81
+
82
+ > **定位**:它是**薄起点**——不含**业务**组件(20 类为通用基线,不针对任何业务)、
83
+ > 不含**项目自有**页面范式(`### 页面范式` 声明 `引用内置`,页面类型表只是内置节奏的示意)。
84
+ >
85
+ > **但它含一份通用 B 端容器骨架块**(`app-header` / `app-sider` / `app-main`)。这不是矛盾:
86
+ > 内置 `template.html` 的 15 个类全是**营销向**的(`hero` / `topnav` / `pagefoot` / `cta`),
87
+ > **没有任何 B 端容器类**——不给物料,builder 就得每页手写整套后台骨架 CSS,
88
+ > 单次派发无法复现(详见 §5「B 端容器骨架为何必须给」)。
89
+ >
90
+ > 要复用**厚资产**(如某项目已建好的 30+ 类契约 + 页面规范)请用**移植模式**。
91
+
92
+ ---
93
+
94
+ ## 4. 文档导入模式(create-from-docs)
95
+
96
+ **场景**:手里有**既有的 Markdown 规范树**(非代码、非模板库形态)——如企业的三层规范
97
+ (基础元素层 / 页面模板层 / 模式规范层)。
98
+
99
+ **流程(5 步)**:
100
+
101
+ 1. **提取**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/token-extract.mjs <规范树目录> --docs`
102
+ → `.team-flow/token-extract/source-docs.json` + 报告(**零 LLM**)
103
+ 2. **呈现报告(含冲突项)**:报告器只呈现**证据与冲突**,**不做取值裁决**——
104
+ 同一 token 名多值时显式并列(如 `--color-primary`:`#1890ff`×20 / `#3A94DD`×3),
105
+ 标注"跨期/跨源矛盾,需人工裁决"
106
+ 3. **人工裁决**(多轮 `AskUserQuestion`):**语义角色由人定,不由 LLM 定**
107
+ 4. **落盘**:base + 变体(含 `layout` 段的「容器骨架」块 + `页面范式来源:项目自有`)
108
+ + **`来源与裁决记录` 段(强制)**
109
+ 5. guard 校验
110
+
111
+ **为什么报告器不做裁决**:真实规范树的 token 主形态是 **Markdown 表格行**,且列序不固定
112
+ (实测 3 种,含交错列);按频次排序会选出**错的主色**(现场实测:错值 `#1890ff` ×157
113
+ vs 正确值 `#3A94DD` ×62——两期各自自洽、互未发现)。工具的职责是**把矛盾摊开**,不是选一个。
114
+
115
+ **授权约束**:导入的既有资产**只留在项目内**,**不打包**进插件分发包。
116
+
117
+ ---
118
+
119
+ ## 5. B 端容器骨架为何必须给(v0.55.0)
120
+
121
+ **事实**:内置 `template.html` 的全部 15 个类是
122
+ `brand / btn / btn-primary / btn-secondary / container / eyebrow / hero / hero-center /
123
+ hero-cta / lead / meta / pagefoot / row-between / section / topnav`——
124
+ **清一色营销向**,没有 `app-header` / `app-sider` / `app-main` 这类后台容器类。
125
+
126
+ **后果(不写骨架块时)**:builder 每页都要**从零手写**整套后台骨架 CSS(顶栏 sticky + 侧栏固定宽 +
127
+ 主区弹性),而它是**单次派发**的子代理——没有跨页记忆、无法从既有页面"抄",同一项目不同页面
128
+ 会漂移出不同的骨架实现。
129
+
130
+ **所以**:`--profile antd`(通用起点)与导入类模式**都附一份骨架块**(类名 + 关键 CSS 声明)。
131
+ 这不是"厚资产",是**最小可复现物料**——与"薄起点"定位不冲突。
132
+
133
+ **契约不变**:骨架类**不在** `layouts.md` 的类清单表内,按该表**同一条硬规则**处理——
134
+ **先在页面 `<style>` 里定义,再使用**;绝不允许凭空发明没有 CSS 支撑的全局类。
135
+ 物料来源是 primer 的「容器骨架」块(`gen-primer` 逐端摘录原文)。
136
+
137
+ > **三态下的骨架块**(与 `variant-schema.md` 的 `layout` 段三态表一致):
138
+ > `引用内置` → **可省**(C 端/营销页内置骨架够用),但 **B 端建议给**;
139
+ > `项目自有` → **必须给**(这是棕地项目页面规范能进 builder 的唯一通道);
140
+ > `同 <端>` → 由被指向端保证,本端免写。
141
+
142
+ ---
143
+
144
+ ## 6. 逆向建库模式(create-from-code)
145
+
146
+ **场景**:企业已有**符合规范的原型代码** → 基于它建立设计系统。
147
+
148
+ **定位**:**确定性提取 + 人工策展**。不做自动语义推断——那会产出"垃圾设计系统 + 满分审计"
149
+ (guard 只校验**结构**合规,不校验**语义**正确)。
150
+
151
+ **入口**:`/team-flow:design-system create-from-code <代码目录>`
152
+
153
+ > ⚠️ **单目录**:`token-extract.mjs` 的位置参数只接受一个源路径,传多个会**显式报错 exit 1**
154
+ > (v0.55.0 修正:原实现静默丢弃其余路径,多仓场景下用户以为处理了全部)。
155
+ > 多仓请**分批调用**,或先合并到一个目录。
156
+
157
+ **流程(5 步)**:
158
+
159
+ 1. **提取**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/token-extract.mjs <目录>`
160
+ → `.team-flow/token-extract/source-tokens.json` + 统计报告(频次 + 位置证据,**零 LLM**)
161
+ 2. **呈现报告**:向用户展示提取统计("47 个文件、23 个颜色、8 个间距值,高频 Top10 …")
162
+ 3. **候选稿**:从高频值生成候选 token 表(**标注"候选"**)
163
+ 4. **人工策展**(多轮 `AskUserQuestion`):用户指定 primary / 中性色 / 语义色 / 字体栈
164
+ (每项有频次+位置证据可参考)→ skill 按确定性规则补齐 A1/A2/B-slot + palette 阶梯
165
+ 5. **落盘**:base.md + 变体 + primer + preview(+ 可选 showcase)→ guard 六层审计
166
+
167
+ **关键约束**:绝不静默发明(候选值标注 `sources[]` 证据);**语义角色由人定,不由 LLM 定**;
168
+ 目标已有 base.md 时走 iterate 合并(需用户确认)。
169
+
170
+ > **空目录边界(§4 文档导入同此)**:0 个可扫描文件时脚本只输出"发现文件:0"——
171
+ > 须**提示用户核对目录**,不要拿空报告进第 3 步(会把"没扫到"误当成"候选为空"继续策展)。
@@ -13,48 +13,59 @@
13
13
 
14
14
  ## 区块与组件(自上而下)
15
15
 
16
+ > **组件名不写死(v0.55.0,设计 §8.3)**:下方只给**结构性需求**,具体组件**从当前 `.team-flow/design-system/base.md` 的 `components` 契约表选**——本文件不复制组件清单(避免静态副本 vs 动态契约表漂移)。契约表无但场景必需 → 记 `ds_increment`,或用已有组件组合表达。
17
+
16
18
  ### 1. 顶栏
17
- 组件:**Icon / Avatar / Button**
18
- - 品牌标识「星驰汽车」+ 主导航(线索管理 / 订单 / 库存)
19
- - 右侧:通知 Icon + 用户 Avatar(含姓名"王经理")
19
+ 需要:品牌标识「星驰汽车」+ 主导航(线索管理 / 订单 / 库存)+ 用户区(通知入口 + 用户身份,含姓名"王经理")
20
+ 组件来源:从 `.team-flow/design-system/base.md` 契约表选(标识类 / 导航类 / 用户类)
20
21
 
21
22
  ### 2. 数据概览(3 个 KPI 卡)
22
- 组件:**Card(stat) / Tag**
23
- - 今日新增线索 **47**(Tag: +12%)
24
- - 待跟进 **23**(Tag: 需处理)
25
- - 本月成交 **8**(Tag: 达成 80%)
23
+ 需要:三个指标卡(指标名 + 数值 + 变化标记)
24
+ - 今日新增线索 **47**(变化标记:+12%)
25
+ - 待跟进 **23**(状态标记:需处理)
26
+ - 本月成交 **8**(状态标记:达成 80%)
27
+
28
+ 组件来源:从契约表选(卡片/数据展示类 / 标记类)
26
29
 
27
30
  ### 3. 筛选区
28
- 组件:**FilterBar / Select / Input / Button**
29
- - 线索状态(Select:全部/新建/跟进中/已成交/已流失)
30
- - 来源(Select:官网/车展/转介绍)
31
- - 经销商(Input 搜索:输入经销商名称)
31
+ 需要:多条件筛选 + 操作组
32
+ - 线索状态(候选:全部 / 新建 / 跟进中 / 已成交 / 已流失)
33
+ - 来源(候选:官网 / 车展 / 转介绍)
34
+ - 经销商(文本搜索输入)
32
35
  - 操作:查询 / 重置
33
36
 
37
+ 组件来源:从契约表选(表单控件类 / 按钮类)
38
+
34
39
  ### 4. 数据表格(本板核心)
35
- 组件:**Table / Tag / Tooltip / Pagination**
40
+ 需要:数据表格 + 状态标记 + 悬浮说明 + 分页
36
41
  - 列:客户名 / 意向车型 / 状态 / 销售顾问 / 创建时间 / 操作
37
42
  - **5-8 行真实感数据**(中文姓名、"星驰 S7 / 星驰 X5"车型名、合理时间)
38
- - 状态列用 Tag 变体着色:已成交=success / 跟进中=warning / 新建=info / 已流失=default
39
- - Tooltip:状态 Tag 悬浮显示说明(如"超过 7 天未跟进")
43
+ - 状态列按变体着色:已成交=success / 跟进中=warning / 新建=info / 已流失=default
44
+ - 状态标记悬浮显示说明(如"超过 7 天未跟进")
40
45
  - 底部分页:共 128 条 / 每页 20
41
46
 
47
+ 组件来源:从契约表选(表格类 / 标记类 / 提示类 / 分页类)
48
+
42
49
  ### 5. 表单区(新建订单)
43
- 组件:**Form / Input / Select / Checkbox / Radio / Switch / Button**
44
- - 客户姓名(Input)
45
- - 意向车型(Select)
46
- - 经销商(Select)
47
- - 配置选项(Checkbox 多选:智驾包 / 家用充电桩 / 延长保修)
48
- - 交付方式(Radio:到店自提 / 送车上门)
49
- - 短信通知(Switch,默认开)
50
+ 需要:表单 + 多类输入控件(文本 / 下拉 / 多选 / 单选 / 开关)+ 字段级错误态
51
+ - 客户姓名(文本输入)
52
+ - 意向车型(下拉)
53
+ - 经销商(下拉)
54
+ - 配置选项(多选:智驾包 / 家用充电桩 / 延长保修)
55
+ - 交付方式(单选:到店自提 / 送车上门)
56
+ - 短信通知(开关,默认开)
50
57
  - **含一个字段级错误态**(如"客户姓名"必填未填 → 错误色 + 文案)
51
58
 
59
+ 组件来源:从契约表选(表单控件类 / 按钮类)
60
+
52
61
  ### 6. 状态演示
53
- 组件:**EmptyState / Drawer / Modal / Toast**
54
- - EmptyState:「暂无符合条件的线索」+ 一行解释 + 「清除筛选」行动按钮
55
- - Drawer:触发按钮「查看详情」→ 侧边面板(线索详情:客户信息 + 跟进记录)
56
- - Modal:触发按钮「确认成交」→ 确认弹窗(含取消/确认)
57
- - Toast:触发按钮 → 成功提示(如「订单已创建」)
62
+ 需要:空态 / 侧边面板 / 弹窗 / 轻提示(四类各自可触发)
63
+ - 空态:「暂无符合条件的线索」+ 一行解释 + 「清除筛选」行动按钮
64
+ - 侧边面板:触发按钮「查看详情」→ 线索详情(客户信息 + 跟进记录)
65
+ - 弹窗:触发按钮「确认成交」→ 确认弹窗(含取消/确认)
66
+ - 轻提示:触发按钮 → 成功提示(如「订单已创建」)
67
+
68
+ 组件来源:从契约表选(反馈/浮层类)
58
69
 
59
70
  ## 硬约束(继承 P0 质检)
60
71
 
@@ -66,13 +77,16 @@
66
77
 
67
78
  ## 覆盖清单(验收比对用)
68
79
 
69
- | 组件 | 出现区块 | 组件 | 出现区块 |
70
- |------|---------|------|---------|
71
- | Button | 全局 | Table | 数据表格 |
72
- | Card | 数据概览 | Tooltip | 数据表格 |
73
- | Tag | 概览/表格 | Pagination | 数据表格 |
74
- | FilterBar | 筛选区 | Form | 表单区 |
75
- | Select | 筛选/表单 | Checkbox | 表单区 |
76
- | Input | 筛选/表单 | Radio | 表单区 |
77
- | Icon | 顶栏/操作 | Switch | 表单区 |
78
- | Avatar | 顶栏 | EmptyState / Drawer / Modal / Toast | 状态演示 |
80
+ > **组件清单以当前 `.team-flow/design-system/base.md` 的 `components` 契约表为准**——本文件不复制该清单(避免漂移)。
81
+ > 契约表无但场景必需 → 记 `ds_increment`,或用已有组件组合表达。
82
+
83
+ | 区块 | 结构性必需 | 组件来源 |
84
+ |------|-----------|---------|
85
+ | 顶栏 | 品牌标识 + 主导航 + 用户区 | 从契约表选(标识/导航/用户类) |
86
+ | 数据概览 | 3 个 KPI 卡 + 变化/状态标记 | 从契约表选(卡片/数据展示 + 标记类) |
87
+ | 筛选区 | 3 个筛选条件 + 查询/重置操作 | 从契约表选(表单控件/按钮类) |
88
+ | 数据表格 | 表格(5-8 行)+ 状态着色 + 悬浮说明 + 分页 | 从契约表选(表格/标记/提示/分页类) |
89
+ | 表单区 | 表单 + 文本/下拉/多选/单选/开关 + 字段错误态 | 从契约表选(表单控件/按钮类) |
90
+ | 状态演示 | 空态 + 侧边面板 + 弹窗 + 轻提示 | 从契约表选(反馈/浮层类) |
91
+
92
+ **验收口径(v0.55.0,设计 §8.3)**:**结构性区块齐全 + token 合规 + 零白名单外自造**——不再要求静态清单逐项勾选(原清单是契约表的静态副本,快照时点 19 类 vs 现 31 类,必然漂移)。
@@ -15,58 +15,76 @@
15
15
 
16
16
  ## 板 1:官网车型展示(c-end-website.html,桌面视口)
17
17
 
18
+ > **组件名不写死(v0.55.0,设计 §8.3)**:各区块只给**结构性需求**,具体组件**从当前 `.team-flow/design-system/base.md` 的 `components` 契约表选**——本文件不复制组件清单(避免静态副本 vs 动态契约表漂移)。契约表无但场景必需 → 记 `ds_increment`,或用已有组件组合表达。
19
+
18
20
  ### 区块 1:Hero
19
- 组件:**Button / Icon**
20
- - 品牌主张(一句话,如「星驰 S7 | 智能电动,从容出行」)
21
+ 需要:品牌主张(一句话)+ 主/次 CTA + 视觉标识
22
+ - 品牌主张(如「星驰 S7 | 智能电动,从容出行」)
21
23
  - 主 CTA:「预约试驾」+ 次 CTA:「查看配置」
22
24
 
25
+ 组件来源:从 `.team-flow/design-system/base.md` 契约表选(标识类 / 按钮类)
26
+
23
27
  ### 区块 2:车型卡片网格(3 列)
24
- 组件:**Card / Tag / Button**
25
- - 3 个车型卡:星驰 S7(Tag: 新车)/ 星驰 X5(Tag: 热销)/ 星驰 E3(Tag: 限时权益)
28
+ 需要:3 个车型卡(名称 + 一句话卖点 + 价格区间 + 卡片级 CTA)+ 状态标记 + 图片占位
29
+ - 3 个车型卡:星驰 S7(标记:新车)/ 星驰 X5(标记:热销)/ 星驰 E3(标记:限时权益)
26
30
  - 每卡:车型名 + 一句话卖点 + 价格区间("¥22.98 万起")+ 「了解详情」按钮
27
31
  - 图片位用 `.ph-img` 占位(零外部依赖:不得链外网图)
28
32
 
33
+ 组件来源:从契约表选(卡片类 / 标记类 / 按钮类)
34
+
29
35
  ### 区块 3:参数对比
30
- 组件:**Tabs / Table / Tooltip**
31
- - Tabs:续航 / 性能 / 智能座舱
32
- - Table:参数对比表(车型 × 参数,3 行 × 4 列)
33
- - Tooltip:专业术语悬浮说明(如"CLTC 续航")
36
+ 需要:分组切换 + 对比表格 + 术语悬浮说明
37
+ - 分组:续航 / 性能 / 智能座舱
38
+ - 对比表:车型 × 参数(3 行 × 4 列)
39
+ - 专业术语悬浮说明(如"CLTC 续航")
40
+
41
+ 组件来源:从契约表选(切换/标签类 / 表格类 / 提示类)
34
42
 
35
43
  ### 区块 4:预约试驾表单
36
- 组件:**Form / Input / Select / Radio / Button**
37
- - 姓名(Input)、手机号(Input)、意向车型(Select)、经销商(Select)
38
- - 试驾时间(Radio:本周内 / 周末 / 随时)
44
+ 需要:表单(文本 / 下拉 / 单选)+ 提交按钮 + 提交中态
45
+ - 姓名、手机号(文本输入);意向车型、经销商(下拉)
46
+ - 试驾时间(单选:本周内 / 周末 / 随时)
39
47
  - 提交按钮 + 提交中态示例
40
48
 
41
- **官网覆盖**:Button / Icon / Card / Tag / Tabs / Table / Tooltip / Form / Input / Select / Radio
49
+ 组件来源:从契约表选(表单控件类 / 按钮类)
50
+
51
+ **官网覆盖**:4 个区块(Hero / 车型卡片网格 / 参数对比 / 预约试驾表单)的全部结构性需求——**不含**静态组件名,组件以契约表为准(见文末「覆盖清单」)。
42
52
 
43
53
  ---
44
54
 
45
55
  ## 板 2:车主 APP(c-end-app.html,移动视口 390px)
46
56
 
47
57
  ### 区块 1:我的车辆
48
- 组件:**Card / Tag / Avatar / Icon / Button**
49
- - 车辆卡:车型名「星驰 S7」+ 车牌(如"沪 A·D12345")+ 状态 Tag(已连接)
50
- - 快捷操作:解锁 / 空调 / 充电(Icon + Button)
51
- - 右上角用户 Avatar
58
+ 需要:车辆卡(车型名 + 车牌 + 连接状态标记)+ 快捷操作组 + 用户身份入口
59
+ - 车辆卡:车型名「星驰 S7」+ 车牌(如"沪 A·D12345")+ 状态标记(已连接)
60
+ - 快捷操作:解锁 / 空调 / 充电(图标 + 操作入口)
61
+ - 右上角用户身份
62
+
63
+ 组件来源:从契约表选(卡片类 / 标记类 / 标识类 / 按钮类)
52
64
 
53
65
  ### 区块 2:服务记录
54
- 组件:**Card / Tag / EmptyState**
55
- - 记录列表(2-3 条):保养 / 维修 / 充电订单 + 状态 Tag + 时间
56
- - 空态示例:EmptyState「暂无服务记录」+ 「预约保养」行动
66
+ 需要:记录列表(2-3 条:保养 / 维修 / 充电订单 + 状态标记 + 时间)+ 空态
67
+ - 记录列表:保养 / 维修 / 充电订单 + 状态标记 + 时间
68
+ - 空态示例:「暂无服务记录」+ 「预约保养」行动
69
+
70
+ 组件来源:从契约表选(列表/卡片类 / 标记类 / 空态类)
57
71
 
58
72
  ### 区块 3:设置项
59
- 组件:**Switch / Button**
60
- - 消息通知(Switch 开)、车辆定位共享(Switch 关)
73
+ 需要:两个开关设置项 + 一个次要操作
74
+ - 消息通知(开关开)、车辆定位共享(开关关)
61
75
  - 「退出登录」按钮(次要样式)
62
76
 
77
+ 组件来源:从契约表选(开关类 / 按钮类)
78
+
63
79
  ### 区块 4:交互演示
64
- 组件:**Modal / Tooltip / Toast**
65
- - Modal:触发「预约保养」→ 确认弹窗
66
- - Tooltip:设置项说明
67
- - Toast:操作反馈(如「已解锁」)
80
+ 需要:弹窗 + 悬浮说明 + 轻提示
81
+ - 弹窗:触发「预约保养」→ 确认弹窗
82
+ - 悬浮说明:设置项说明
83
+ - 轻提示:操作反馈(如「已解锁」)
84
+
85
+ 组件来源:从契约表选(浮层类 / 提示类)
68
86
 
69
- **APP 覆盖**:Card / Tag / Avatar / Icon / Button / EmptyState / Switch / Modal / Tooltip / Toast
87
+ **APP 覆盖**:4 个区块(我的车辆 / 服务记录 / 设置项 / 交互演示)的全部结构性需求——**不含**静态组件名,组件以契约表为准(见文末「覆盖清单」)。
70
88
 
71
89
  ---
72
90
 
@@ -80,13 +98,18 @@
80
98
 
81
99
  ## 覆盖清单(验收比对用)
82
100
 
83
- | 组件 | 板 | 组件 | 板 |
84
- |------|----|------|----|
85
- | Button | 官网+APP | Tooltip | 官网+APP |
86
- | Icon | 官网+APP | Form | 官网 |
87
- | Card | 官网+APP | Input | 官网 |
88
- | Tag | 官网+APP | Select | 官网 |
89
- | Tabs | 官网 | Radio | 官网 |
90
- | Table | 官网 | Avatar | APP |
91
- | EmptyState | APP | Switch | APP |
92
- | Modal / Toast | APP | (本板 16 类;Checkbox / Pagination / FilterBar / Drawer 不在本板,由 `showcase-board-b-end.md` 覆盖——**两板合计覆盖 20 类基线全量**) | |
101
+ > **组件清单以当前 `.team-flow/design-system/base.md` 的 `components` 契约表为准**——本文件不复制该清单(避免漂移)。
102
+ > 契约表无但场景必需 → 记 `ds_increment`,或用已有组件组合表达。
103
+
104
+ | 板 | 区块 | 结构性必需 | 组件来源 |
105
+ |----|------|-----------|---------|
106
+ | 官网 | Hero | 品牌主张 + 主/次 CTA | 从契约表选(标识/按钮类) |
107
+ | 官网 | 车型卡片网格 | 3 卡(名称+卖点+价格+CTA)+ 标记 + 图片占位 | 从契约表选(卡片/标记/按钮类) |
108
+ | 官网 | 参数对比 | 分组切换 + 对比表 + 术语提示 | 从契约表选(切换/表格/提示类) |
109
+ | 官网 | 预约试驾表单 | 文本/下拉/单选 + 提交(含提交中态) | 从契约表选(表单控件/按钮类) |
110
+ | APP | 我的车辆 | 车辆卡(车型+车牌+状态标记)+ 快捷操作 + 用户身份 | 从契约表选(卡片/标记/标识/按钮类) |
111
+ | APP | 服务记录 | 记录列表(2-3 条)+ 状态标记 + 空态 | 从契约表选(列表/标记/空态类) |
112
+ | APP | 设置项 | 两个开关项 + 次要操作 | 从契约表选(开关/按钮类) |
113
+ | APP | 交互演示 | 弹窗 + 悬浮说明 + 轻提示 | 从契约表选(浮层/提示类) |
114
+
115
+ **验收口径(v0.55.0,设计 §8.3)**:**结构性区块齐全 + token 合规 + 零白名单外自造**——不再要求静态清单逐项勾选;原「本板 16 类 / 两板合计 20 类」是契约表的静态副本(现 31 类),该断言已删除。
@@ -29,10 +29,13 @@
29
29
  | `components` | **组件契约表(全量真源,v0.54.0)**:`\| 组件 \| 类型 \| variants \| sizes \| states \| 用途 \| 禁止 \|`;类型 ∈ 交互/轻量/豁免(决定 guard 的 states 下限:交互 ≥3 / 轻量 ≥2 / 豁免跳过;**交互/轻量的 variants 亦必填**,guard 会判违规);≥15 类 PASS / 10-14 类 WARN / <10 类 FAIL 标签 | components |
30
30
  | `principles` | **设计原则 ≥3 条(v0.54.0)**:如"一致性优先于局部创意 / 清晰优于装饰 / 可访问性默认开启" | principles |
31
31
  | `governance` | **治理声明(v0.54.0)**:`contract: v1\|legacy`(guard 降级判定依据)+ version + 负责人 + 弃用策略 + changelog 指向 | governance |
32
+ | `来源与裁决记录`(v0.55.0) | **导入类创建条件必填**(`create-from-docs` / `create-from-code` / 转换器产物 / 旧文件迁移):原始来源 + 导入方式 + 「为什么不是直接采纳」+ 主色裁决 + 待清理项。**审计层 advisory,不进 `REQUIRED_SECTIONS`**(存量系统不受影响);待清理项写**段内**,不为 `pending.md` 的单写者规则开例外;导入的既有资产**只留在项目内**,不打包进插件分发包 | —(advisory,无 token) |
32
33
 
33
34
  > **a11y 声明(v0.54.0)**:base.md 文档头部(标题下)增加一行 `> a11y: WCAG 2.2 AA(对比度 4.5:1 / 大字 3:1 / 焦点可见 / 键盘可达)`——从 prototype craft 层**提级**到设计系统层(guard 六层审计的 L0-可访问性依据)。
34
35
  >
35
36
  > **`contract` 标记语义**:`v1` = 新体系(六层审计不达标标 FAIL 标签);`legacy` 或无标记 = 存量(降级 WARN)。升级动作 = 重跑 iterate 补契约表时由 architect 置为 `v1`。guard `--strict` 可让 legacy 按 v1 标签输出(供自查,不改变 exit code)。
37
+ >
38
+ > **新建默认 `v1`;来源 ∈ {`create-from-docs` / `create-from-code` / 转换器产物 / 旧文件迁移}(导入类)时写 `legacy`**(v0.55.0,设计 §8.2.1 D-18)。**为什么**:导入的既有资产天然是存量系统(组件数 / 段完整性未经校准),恒打 `v1` 会让整条模板库 / 导入路径**一落盘即 blocked**(死循环);用户显式裁决"已达标"后经 iterate 升 `v1`。判别机制是**来源**而非产物质量——转换器产物由脚本确定性写 `legacy`,architect 按来源判定。
36
39
 
37
40
  > base 不含排版/间距/布局——这些随端变化,归变体。base 的 A1+A2+B-slot 必须完整可过 guard。
38
41
 
@@ -42,13 +45,30 @@
42
45
  |----|------|-----------|
43
46
  | `typography` | font-display/body/mono 引用 + type scale(`--text-xs~4xl`,1.25 比例)+ weights + line-height(按 density) | A1-structure |
44
47
  | `spacing` | `--space-1~12` 阶梯(基于 density 基准:compact 12 / balanced 16 / spacious 20) | A2-derived |
45
- | `layout` | 栅格 12 列 / 断点 sm/md/lg / 容器 max-width(B 端宽容器、C 端窄容器) | A1-structure |
48
+ | `layout` | **三部分(v0.55.0,设计 §8.2.2)**:① 栅格 12 列 / 断点 sm/md/lg / 容器 max-width(B 端宽容器、C 端窄容器)——**原有,不变** ② **`### 容器骨架` 块**(表格:容器 / 类名 / 关键 CSS 声明)③ **`### 页面范式` 子块**(`**页面范式来源**:引用内置 \| 项目自有 \| 同 <端>` 结构化声明 + 页面类型表) | A1-structure |
46
49
  | `components` | **端特有覆盖说明(v0.54.0 改)**:只写该端对 base.md 契约表的差异(如 C 端 Button 用 pill 圆角)并**引用**契约表;**不再重复定义组件清单**(全量真源在 base.md——消除双份维护) | components(差异) |
47
50
  | `motion` | duration(`--motion-fast/base`,150–300ms)+ `--ease-standard` | A2-derived |
48
51
 
49
52
  > B 端 vs C 端差异示例:B 端 compact + 14px + 宽表格容器;C 端 spacious + 17px + 窄卡片容器。
50
53
  > 两端共享 base 的 color/brand/voice,绝不各自重定义品牌色。
51
54
 
55
+ > **`layout` 段三部分与三态语义(v0.55.0,设计 §8.2.2 / FB-3)**:`layout` 是**必填段**(`REQUIRED_SECTIONS` 内),页面范式**扩展它而不新增段**——这样单文件模式(模板库 / 转换器产物:主体已含全 9 段即不合并变体)也能带上页面范式。
56
+ >
57
+ > | 态 | 写法 | L3(声明层) | L4b(内容层) |
58
+ > |----|------|-------------|--------------|
59
+ > | **`引用内置`**(绿地默认) | 只写 `**页面范式来源**:引用内置` | ✅ | **免检**(14 骨架由内置 `layouts.md` 提供) |
60
+ > | **`项目自有`**(棕地) | 声明 + **容器骨架块** + 页面类型表 | ✅ | 表行数 **≥3** |
61
+ > | **`同 <端>`** | 只写 `**页面范式来源**:同 b-end`(指向另一端) | ✅ | ✅(完整性由被指向端保证) |
62
+ > | 无声明(存量) | — | ⚠️ 显式提示(**不 FAIL**) | ⚠️(与 L3 同向) |
63
+ >
64
+ > **容器骨架块的条件写**:`引用内置` 时**可省**——内置 `template.html` 的全部 15 个类都是通用/营销向的(`hero` / `topnav` / `pagefoot` / `cta`),**C 端页面够用**;但 **B 端后台项目建议给**——内置骨架**无 `app-header` / `app-sider` / `app-main` 这类容器类**,不写则 builder 每页手写整套后台骨架 CSS(单次派发无法复现)。`项目自有` 时**必须写**(棕地项目页面规范进 builder 的唯一通道)。物料与判据详见 `creation-modes.md` §5。
65
+ > **占位符须与值域同名**:写 `<引用内置 | 项目自有 | 同 <端>>`。**解析规则不对称**(`guard` / `ds-parse` 实现):
66
+ > - `引用内置` 是**锚定匹配**(`/^引用内置$/`)——带任何后缀(如 `引用内置(14 骨架)`)即**解析不出** → 恒判 ⚠️;
67
+ > - `项目自有` / `同` 是**前缀匹配**(`/^项目自有/`、`/^同/`)——带后缀的变体会被**静默当成合法值**并进入内容层判据(写 `项目自有规范` 会按 `项目自有` 走"表行数 ≥3"校验),**看似通过实则取值非规范**。
68
+ >
69
+ > 故**照抄值域字面量**,不要自造变体(空白会被剥除:`引用 内置` 等价于 `引用内置`)。
70
+ > **写者与默认取值**:Step 3 生成端变体 + 转换器产物**默认写 `引用内置`**;导入类(`create-from-docs` / `create-from-code` / 旧文件迁移)**必须写 `项目自有`** + 容器骨架块(若也写 `引用内置` → L4b 免检、builder 仍读内置营销向 `layouts.md`,棕地场景的问题原样复发);iterate 可补写(第四类增量,见 `creation-flow.md`)。
71
+
52
72
  ---
53
73
 
54
74
  ## 继承规则(Inheritance)
@@ -51,6 +51,7 @@ description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离
51
51
  - 设计系统渲染:读取项目 `.team-flow/design-system/<variant>.md` + `base.md`(base 品牌层 + 端特有层合并;9 段 schema + 5 方向调色板 + aliases 别名层 + extensions,v0.18.0 token 四层模型),渲染 token 到 `assets/design-tokens.css`。
52
52
  - **种子模板 + 骨架库(v0.18.0)**:builder 从 `references/template.html`(种子)+ `references/layouts.md`(14 个 section 骨架 + 类清单契约)组合,不从零写 CSS。
53
53
  - **组件白名单(v0.54.0)**:builder 从 `.team-flow/design-system/primer.md` 提取可用组件白名单(Step 0 gate 校验 digest;primer 缺失/过期按 `governance.contract` 字段 blocked(v1)/WARN(legacy));白名单外需求记 `ds_increment`,不自造。
54
+ - **页面范式(v0.55.0)**:primer 的「页面范式」段与组件白名单**并列**为 builder 的输入——声明 `项目自有` 时按其页面类型表 + 「容器骨架」块组织页面(骨架类在页面 `<style>` 内定义),内置 `references/layouts.md` 降为**回退默认**。**为什么**:不改消费端则项目既有页面规范进不了原型生成流程(设计 §8.2.2)。
54
55
  - **Showcase 模式(v0.54.0,对外契约)**:`prototype-builder` 支持 `mode: showcase`(供 design-system skill 单次派发产出展示板)——gate 豁免 `confirmed_plan`/`prd_path`,产出 flat 单文件,最小交付契约见 `references/builder-methodology.md`。
55
56
  - **工艺规则层(v0.18.0)**:`references/checklist.md`(P0/P1/P2)+ `references/craft/`(anti-ai-slop / state-coverage / typography-hierarchy / accessibility-baseline / laws-of-ux),品牌无关,B 端导向。
56
57
  - **原型类型方法论(v0.24.0)**:`references/interactive-prototype.md`(交互原型:零依赖状态管理+表单验证+多步导航)+ `references/wireframe.md`(线框图:低保真快速探索+3-5 差异化方案+并排对比),按需加载。
@@ -72,6 +73,8 @@ prototype/
72
73
  首次创建 → 引用 → 增量更新(变更履历)
73
74
  ```
74
75
  - **首次创建**:项目无设计系统时,①环境探查发现缺失 → 主代理调用 `/team-flow:design-system` skill(独立入口,用户主导交互创建),产出 `.team-flow/design-system/`(base.md + 变体 + preview.html)。
76
+ > **起点选择(v0.55.0)**:design-system 的 Step 0 有 **7 条起点**(移植 `clone --from --to` / 模板库 / `--profile antd` / `create-from-docs` / `create-from-code` / 从零创建 / iterate)。**本处只传达事实、不预选起点**——一是"缺设计系统",二是 scout 简报里与起点相关的**资产事实**(如"已有符合规范的原型代码");采用哪条取决于用户的资产状况(是否有可移植的同类项目设计系统、是否有既有规范文档),而 prototype 无从判断,预选会让其余 6 条不可见(**能力存在但用户不知道 = 能力不存在**)。传达清单见 `references/orchestration-flow.md` §①b。
77
+ > **目录已存在但不完整**(env-scout 判 `needs_design_system` 的另一种情形)→ 走 design-system 的 **iterate** 模式(MERGE 不 OVERWRITE),**不走** Step 0。
75
78
  - **引用**:prototype-builder 绘制时强制读 `.team-flow/design-system/<variant>.md`(+ base.md 合并 token)渲染,禁止内联样式漂移。
76
79
  - **增量更新**:prototype-sync 回写时若涉及新组件/token/anti-pattern,调用 `/team-flow:design-system`(iterate 模式)合并进 `.team-flow/design-system/` 并记**变更履历**。
77
80
  - **迁移兼容**:检测旧 `prototype/design-system.md` → 提示迁移到 `.team-flow/design-system/base.md`(一次性)。
@@ -85,6 +88,7 @@ prototype/
85
88
  ## 配置驱动(插件通用 + 项目注入)
86
89
  - 项目 `team-flow.config.json` 注入(插件层扩展字段):`prototype.designSystem`(`.team-flow/design-system/<variant>.md` 路径)、`prototype.designSystemBase`(`.team-flow/design-system/base.md`)、`prototype.entry`(默认 `prototype/index.html`)。
87
90
  - 插件层用 `tf runtime config --get <key>` 自读;插件保持通用,不固化任何公司/产品风格。
91
+ - **配置漂移检查(v0.55.0)**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/check-project-config.mjs [项目根]` —— 检查上述 key 的指向是否存在、config `version` 是否与插件一致。现场实测三类漂移(version 落后 / 指向不存在的文件 / 零消费者键)**全部静默**,只在用到时失效。
88
92
 
89
93
  ## 膨胀防控
90
94
  - `components/` 必须复用 `.team-flow/design-system/` 契约表组件,**禁止页面内联样式漂移**。
@@ -21,7 +21,7 @@
21
21
 
22
22
  Before writing anything, verify:
23
23
 
24
- - `design_system_path` exists and is readable → if missing/unreadable, return `status: blocked` (blocker: 设计系统缺失,需先派 design-system-architect).
24
+ - `design_system_path` exists and is readable → if missing/unreadable, return `status: blocked` (blocker: 设计系统缺失,需先调用 `/team-flow:design-system` skill 创建——v0.19.0 起 architect 只是该 skill 的内部执行引擎,不再由原型侧直接派发).
25
25
  - **primer.md 检查(v0.54.0 新增——组件白名单来源)**:
26
26
  1. **primer 存在且可读** → 提取 `available_components` 白名单(Step 1.5/Step 2 只用这些组件)。
27
27
  - **digest 校验**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/gen-primer.mjs <base.md 路径> --check`
@@ -52,8 +52,13 @@ Do NOT proceed past a failed gate.
52
52
  **不从零写 CSS——从种子模板 + 骨架库组合。**
53
53
 
54
54
  1. 读 `references/template.html`(至少到 `</style>` 结尾)+ 读 `references/layouts.md`(14 个 section 骨架 + 类清单契约 + 页面类型节奏表)。
55
- 2. **先选 section 列表再写文案**:按页面类型查节奏表(管理后台列表页 / 表单页 / 仪表盘 / Landing / 文档索引),为每个页面选定 section 组合。选定后**用一句话向主代理报出 section 列表**(写入 `outstanding_questions`,question = "页面 X 计划用 section 组合:hero → log → stats,此刻改向便宜,而不是 200 行 HTML 之后",default_assumption = 按此组合继续)。
56
- 3. 从 `layouts.md` 粘贴对应骨架到 `<main id="content">`,替换 `[REPLACE]` 槽为 PRD 中的真实、具体文案。
55
+ - **页面范式以 primer 的「页面范式」段为准(v0.55.0,设计 §8.2.2)**:该段是设计系统 `layout` 段的**忠实派生物**。声明 `项目自有` 时按其**页面类型表**组织页面,骨架**类名 + 关键 CSS 声明从同段的「容器骨架」块取**,按类清单契约(`layouts.md:27`)在页面 `<style>` 内定义;内置 `layouts.md` 降为**回退默认**(仅在 `引用内置` 或未声明时使用)。
56
+ - **为什么**:内置 `layouts.md` 是营销向骨架(页面框架只有 `topnav`/`pagefoot`),**不含**项目自有容器类(`header-bar`/`sidebar-container`/`main-content`)——只写设计系统而不改消费端,项目既有页面规范就进不了原型生成流程,段写了也无人消费(静态副本 vs 动态契约表漂移)。
57
+ 2. **先选 section 列表再写文案**:按页面类型查节奏表(管理后台列表页 / 表单页 / 仪表盘 / Landing / 文档索引),为每个页面选定 section 组合。
58
+ - **节奏表来源随页面范式来源而定(v0.55.0)**:`引用内置` 或未声明 → 用内置 `layouts.md` 的两张「页面类型节奏表」;**`项目自有` → 以 primer 的「页面范式」段的页面类型表为准**(内置节奏表降为**回退默认**)。
59
+ **为什么**:与第 1 步同理——项目自有的页面类型(如"工单详情页""对账页")本就不在内置的 5 类里,按内置查会选错 section 组合;这是消费链的最后一环,漏了则前面所有改造失效。
60
+ - 选定后**用一句话向主代理报出 section 列表**(写入 `outstanding_questions`,question = "页面 X 计划用 section 组合:hero → log → stats,此刻改向便宜,而不是 200 行 HTML 之后",default_assumption = 按此组合继续)。
61
+ 3. 从 `layouts.md` 粘贴对应骨架到 `<main id="content">`,替换 `[REPLACE]` 槽为 PRD 中的真实、具体文案(**页面范式为 `项目自有` 时**:§1 已改以 primer 的「页面范式」段为准,骨架组合按该段的页面类型表取,本节只适用于 `引用内置`)。
57
62
  - **"槽位空着说明选错了布局,换一个,不许编文案。"**
58
63
  - 类清单契约:只用 template.html `<style>` 中已定义的类;够不到的类先在页面 `<style>` 定义,绝不凭空发明全局类。
59
64
  4. 纪律约束(来自 layouts.md 各骨架):stats ≤3 个且不编造指标;quote 每页 ≤1 个;accent 每屏 ≤2 处;section 节奏交替(禁止连续同类型)。
@@ -125,11 +130,13 @@ P1 逐项自查(节奏交替 / 标题 ≤14 词 / CTA 说明动作 / hover 态
125
130
  - 写入派发方指定的 scratch 路径(`/tmp/ds-draft-<slug>/showcase/`);**不移正、不落正式路径**(由 design-system skill 在 Step 6 复制)
126
131
 
127
132
  ### 最小交付契约(返回 `done` 的硬前置)
128
- 1. brief 的全部区块已渲染(对照 brief 的"覆盖清单"逐项勾选)
133
+ 1. brief 的全部区块已渲染(**验收口径 = 结构性区块齐全 + token 合规 + 零白名单外自造**;brief 的「覆盖清单」已引用化,**不再**逐项勾选静态清单)
129
134
  2. 无填充文案(grep `lorem|功能[一二三]|示例文本|TODO` = 0)
130
135
  3. **P0 grep 通过**(裸 hex / 靛蓝黑名单 / emoji / 填充文案——机械检查,不依赖 PRD)
131
136
  4. `<style>` 内 token 全部来自 primer 草案(无自造 token)
132
137
 
138
+ > **为什么 #1 改口径(v0.55.0,设计 §8.3)**:brief 原覆盖清单是 primer `components` 契约表的**静态副本**(快照时点 b-end 19 类 / c-end 16 类),契约表演进后副本必然漂移(现 31 类)→ 判据从"清单逐项勾选"改为可判定的三要素,新增组件自动纳入验收,无需改 brief。
139
+
133
140
  > showcase **不跑 prototype-reviewer**(其 D1-D4 依赖 PRD)——P0 grep 是它的最低验证环节。
134
141
 
135
142
  ### Hard Gate 适配
@@ -27,6 +27,9 @@
27
27
  **硬规则**:如果你想用一个不在这张表里的 class,**先在 `<style>` 里把它定义出来**。
28
28
  绝不允许凭空发明一个没有 CSS 支撑的全局类。宁可定义,不可漂移。
29
29
 
30
+ > **项目自有页面范式时(v0.55.0,设计 §8.2.2)**:其骨架类名(如 `header-bar` / `sidebar-container` / `main-content`)**不在本表内**——按**同一条硬规则**在页面 `<style>` 里定义出来;物料(类名 + 关键 CSS 声明)取自 primer 的「容器骨架」块(设计系统 `layout` 段声明 `页面范式来源:项目自有` 时)。规则本身不变:先定义,再使用。
31
+ > **为什么**:本表是**内置骨架**的静态清单,项目自有规范天然在其外——若为此开例外(允许直接用表外类),就退化成"没有 CSS 支撑的全局类"漂移。
32
+
30
33
  ---
31
34
 
32
35
  ## 1. hero(居中)
@@ -377,6 +380,10 @@
377
380
 
378
381
  ## 页面类型节奏表(B 端)
379
382
 
383
+ > **适用范围(v0.55.0)**:本表是**内置回退默认**。设计系统的 `layout` 段声明
384
+ > `**页面范式来源**:项目自有` 时,**以 primer 的「页面范式」段的页面类型表为准**,
385
+ > 本表不适用(项目自有页面类型——如"工单详情页""对账页"——不在下表 5 类内)。
386
+
380
387
  | 页面类型 | section 节奏(自上而下) |
381
388
  |----------|--------------------------|
382
389
  | 管理后台列表页 | `hero-center` → `log`/列表(`ds-table`) → `stats` 汇总 |
@@ -387,6 +394,9 @@
387
394
 
388
395
  ## 页面类型节奏表(C 端,v0.24.0 新增)
389
396
 
397
+ > **适用范围(v0.55.0)**:同 B 端表——**内置回退默认**。声明 `项目自有` 时以 primer 的
398
+ > 「页面范式」段页面类型表为准。
399
+
390
400
  | 页面类型 | section 节奏(自上而下) |
391
401
  |----------|--------------------------|
392
402
  | SaaS 落地页 | `hero-xl` → `marketing-features` → `social-proof` → `pricing-c` → `faq` → `cta-c` |