@xulthekl/team-flow 0.53.0 → 0.55.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.
- package/.claude/always/phase-guard.md +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/marketplace.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.github/plugin/marketplace.json +2 -2
- package/CHANGELOG.md +133 -0
- package/GEMINI.md +1 -1
- package/INSTALL.md +1 -1
- package/README.md +1 -1
- package/agents/prototype-builder.md +6 -5
- package/agents/prototype-env-scout.md +7 -7
- package/agents/release-archivist.md +1 -0
- package/dist/parsing/requirement-blocks.d.ts +26 -0
- package/dist/parsing/requirement-blocks.js +33 -5
- package/dist/validation/validator.js +8 -1
- package/docs/README_en.md +1 -1
- package/gemini-extension.json +1 -1
- package/hooks/session-start +19 -2
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/plugin.json +2 -2
- package/scripts/check-project-config.mjs +84 -0
- package/scripts/design-system-clone.mjs +150 -0
- package/scripts/design-system-import.mjs +326 -0
- package/scripts/gen-primer.mjs +195 -0
- package/scripts/guard/checks/tasks-complete.mjs +9 -4
- package/scripts/guard/design-token-guard.mjs +317 -77
- package/scripts/infer-workflow.mjs +10 -1
- package/scripts/lib/arch-merge.mjs +20 -6
- package/scripts/lib/arch-parse.mjs +5 -11
- package/scripts/lib/ds-inputs.mjs +125 -0
- package/scripts/lib/ds-parse.mjs +236 -0
- package/scripts/lib/execution-recommendation.mjs +10 -1
- package/scripts/lib/glaf4-delegation.mjs +14 -3
- package/scripts/lib/hash.mjs +18 -2
- package/scripts/lib/md-normalize.mjs +108 -0
- package/scripts/lib/prototype-sync.mjs +19 -1
- package/scripts/lib/sdd-overlay.mjs +15 -3
- package/scripts/lib/solutions-promote.mjs +11 -4
- package/scripts/lib/spec-merge.mjs +46 -11
- package/scripts/lib/state-loader.mjs +4 -1
- package/scripts/token-extract.mjs +349 -0
- package/skills/design-system/SKILL.md +78 -9
- package/skills/design-system/references/agents/design-system-architect.md +67 -17
- package/skills/design-system/references/creation-flow.md +56 -5
- package/skills/design-system/references/creation-modes.md +171 -0
- package/skills/design-system/references/showcase-board-b-end.md +92 -0
- package/skills/design-system/references/showcase-board-c-end.md +115 -0
- package/skills/design-system/references/token-derivation.md +34 -9
- package/skills/design-system/references/variant-schema.md +35 -4
- package/skills/prototype/SKILL.md +18 -8
- package/skills/prototype/references/builder-methodology.md +72 -8
- package/skills/prototype/references/craft/anti-ai-slop.md +1 -1
- package/skills/prototype/references/craft/state-coverage.md +8 -2
- package/skills/prototype/references/layouts.md +10 -0
- package/skills/prototype/references/orchestration-flow.md +20 -3
- package/skills/prototype/references/prototype-scaffold/assets/design-tokens.css +2 -2
- package/skills/prototype/references/template.html +10 -10
- package/skills/release-archivist/SKILL.md +10 -3
- package/skills/release-archivist/references/closing-procedures.md +10 -0
- package/skills/workflow-bootstrap/SKILL.md +24 -2
- package/src/parsing/requirement-blocks.ts +34 -5
- package/src/validation/validator.ts +8 -1
- package/templates/design-systems/references/claude.md +315 -0
- package/templates/design-systems/references/linear-app.md +370 -0
- package/templates/design-systems/references/notion.md +312 -0
- package/templates/design-systems/references/posthog.md +259 -0
- package/templates/design-systems/references/sentry.md +265 -0
- package/templates/design-systems/references/stripe.md +325 -0
- package/templates/design-systems/references/supabase.md +258 -0
- package/templates/design-systems/references/vercel.md +313 -0
- package/templates/design-systems/registry.json +75 -0
- package/templates/design-systems/styles.json +576 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Showcase Board Brief — C 端「官网 + 车主 APP」
|
|
2
|
+
|
|
3
|
+
> **用途**:设计系统创建/迭代的**草案阶段**,由 `prototype-builder`(showcase 模式)产出展示板,
|
|
4
|
+
> 供用户判断"这套设计系统在 C 端语境的产出效果"(设计 §4.1.7)。
|
|
5
|
+
> **场景**:虚构车企「星驰汽车」的官网车型展示 + 车主 APP 服务。
|
|
6
|
+
> **视口**:官网 = 桌面(1440px);APP = 移动(390px)。
|
|
7
|
+
|
|
8
|
+
## 产出规格
|
|
9
|
+
|
|
10
|
+
- **两个**单文件自包含 HTML:`c-end-website.html`(桌面)+ `c-end-app.html`(移动)
|
|
11
|
+
- `<style>` 内联 token,**零外部依赖**
|
|
12
|
+
- **只使用** primer 白名单内的组件与 token;白名单外需求记 `ds_increment`,不自造
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 板 1:官网车型展示(c-end-website.html,桌面视口)
|
|
17
|
+
|
|
18
|
+
> **组件名不写死(v0.55.0,设计 §8.3)**:各区块只给**结构性需求**,具体组件**从当前 `.team-flow/design-system/base.md` 的 `components` 契约表选**——本文件不复制组件清单(避免静态副本 vs 动态契约表漂移)。契约表无但场景必需 → 记 `ds_increment`,或用已有组件组合表达。
|
|
19
|
+
|
|
20
|
+
### 区块 1:Hero
|
|
21
|
+
需要:品牌主张(一句话)+ 主/次 CTA + 视觉标识
|
|
22
|
+
- 品牌主张(如「星驰 S7 | 智能电动,从容出行」)
|
|
23
|
+
- 主 CTA:「预约试驾」+ 次 CTA:「查看配置」
|
|
24
|
+
|
|
25
|
+
组件来源:从 `.team-flow/design-system/base.md` 契约表选(标识类 / 按钮类)
|
|
26
|
+
|
|
27
|
+
### 区块 2:车型卡片网格(3 列)
|
|
28
|
+
需要:3 个车型卡(名称 + 一句话卖点 + 价格区间 + 卡片级 CTA)+ 状态标记 + 图片占位
|
|
29
|
+
- 3 个车型卡:星驰 S7(标记:新车)/ 星驰 X5(标记:热销)/ 星驰 E3(标记:限时权益)
|
|
30
|
+
- 每卡:车型名 + 一句话卖点 + 价格区间("¥22.98 万起")+ 「了解详情」按钮
|
|
31
|
+
- 图片位用 `.ph-img` 占位(零外部依赖:不得链外网图)
|
|
32
|
+
|
|
33
|
+
组件来源:从契约表选(卡片类 / 标记类 / 按钮类)
|
|
34
|
+
|
|
35
|
+
### 区块 3:参数对比
|
|
36
|
+
需要:分组切换 + 对比表格 + 术语悬浮说明
|
|
37
|
+
- 分组:续航 / 性能 / 智能座舱
|
|
38
|
+
- 对比表:车型 × 参数(3 行 × 4 列)
|
|
39
|
+
- 专业术语悬浮说明(如"CLTC 续航")
|
|
40
|
+
|
|
41
|
+
组件来源:从契约表选(切换/标签类 / 表格类 / 提示类)
|
|
42
|
+
|
|
43
|
+
### 区块 4:预约试驾表单
|
|
44
|
+
需要:表单(文本 / 下拉 / 单选)+ 提交按钮 + 提交中态
|
|
45
|
+
- 姓名、手机号(文本输入);意向车型、经销商(下拉)
|
|
46
|
+
- 试驾时间(单选:本周内 / 周末 / 随时)
|
|
47
|
+
- 提交按钮 + 提交中态示例
|
|
48
|
+
|
|
49
|
+
组件来源:从契约表选(表单控件类 / 按钮类)
|
|
50
|
+
|
|
51
|
+
**官网覆盖**:4 个区块(Hero / 车型卡片网格 / 参数对比 / 预约试驾表单)的全部结构性需求——**不含**静态组件名,组件以契约表为准(见文末「覆盖清单」)。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 板 2:车主 APP(c-end-app.html,移动视口 390px)
|
|
56
|
+
|
|
57
|
+
### 区块 1:我的车辆
|
|
58
|
+
需要:车辆卡(车型名 + 车牌 + 连接状态标记)+ 快捷操作组 + 用户身份入口
|
|
59
|
+
- 车辆卡:车型名「星驰 S7」+ 车牌(如"沪 A·D12345")+ 状态标记(已连接)
|
|
60
|
+
- 快捷操作:解锁 / 空调 / 充电(图标 + 操作入口)
|
|
61
|
+
- 右上角用户身份
|
|
62
|
+
|
|
63
|
+
组件来源:从契约表选(卡片类 / 标记类 / 标识类 / 按钮类)
|
|
64
|
+
|
|
65
|
+
### 区块 2:服务记录
|
|
66
|
+
需要:记录列表(2-3 条:保养 / 维修 / 充电订单 + 状态标记 + 时间)+ 空态
|
|
67
|
+
- 记录列表:保养 / 维修 / 充电订单 + 状态标记 + 时间
|
|
68
|
+
- 空态示例:「暂无服务记录」+ 「预约保养」行动
|
|
69
|
+
|
|
70
|
+
组件来源:从契约表选(列表/卡片类 / 标记类 / 空态类)
|
|
71
|
+
|
|
72
|
+
### 区块 3:设置项
|
|
73
|
+
需要:两个开关设置项 + 一个次要操作
|
|
74
|
+
- 消息通知(开关开)、车辆定位共享(开关关)
|
|
75
|
+
- 「退出登录」按钮(次要样式)
|
|
76
|
+
|
|
77
|
+
组件来源:从契约表选(开关类 / 按钮类)
|
|
78
|
+
|
|
79
|
+
### 区块 4:交互演示
|
|
80
|
+
需要:弹窗 + 悬浮说明 + 轻提示
|
|
81
|
+
- 弹窗:触发「预约保养」→ 确认弹窗
|
|
82
|
+
- 悬浮说明:设置项说明
|
|
83
|
+
- 轻提示:操作反馈(如「已解锁」)
|
|
84
|
+
|
|
85
|
+
组件来源:从契约表选(浮层类 / 提示类)
|
|
86
|
+
|
|
87
|
+
**APP 覆盖**:4 个区块(我的车辆 / 服务记录 / 设置项 / 交互演示)的全部结构性需求——**不含**静态组件名,组件以契约表为准(见文末「覆盖清单」)。
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 硬约束(继承 P0 质检)
|
|
92
|
+
|
|
93
|
+
- 全部文案为**真实感中文**(禁止 lorem / 功能一/二/三 / 示例文本)
|
|
94
|
+
- 颜色/间距/字号一律走 token;图片用占位样式(`.ph-img`),**图片占位不链外网**
|
|
95
|
+
- APP 板为移动视口:单列布局、触控目标 ≥44px,无横向滚动
|
|
96
|
+
- 数据展示区块覆盖五状态(至少 Empty 与 Error 可见)
|
|
97
|
+
- accent 每屏 ≤2 处;emoji 不作图标
|
|
98
|
+
|
|
99
|
+
## 覆盖清单(验收比对用)
|
|
100
|
+
|
|
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 类),该断言已删除。
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
# 确定性 Token 派生规则(v0.
|
|
1
|
+
# 确定性 Token 派生规则(v0.54.0)
|
|
2
|
+
|
|
3
|
+
> **本文件是设计系统全部具体数值的单一真相源**(色值 / 间距 / 字阶 / 字体栈 / density 倍率 / dark 派生);其它文件(`creation-flow.md` 等)出现分歧时以本文件为准。v0.54.0 新增:density 倍率语义 + 确定性 dark 派生规则。
|
|
2
4
|
|
|
3
5
|
> **原则**: 同输入 = 同输出。不即兴发挥。每个 token 值由映射表确定性决定。
|
|
4
6
|
|
|
@@ -14,8 +16,8 @@
|
|
|
14
16
|
| `--muted` | fg lightened 40% | `#6B6964` |
|
|
15
17
|
| `--border` | fg lightened 80% | `#E8E5DF` |
|
|
16
18
|
| `--accent` | mood→accent mapping (or user hex) | `#3B82F6` |
|
|
17
|
-
| `--font-display` | font preference→stack | `Georgia, serif` (serif_display) |
|
|
18
|
-
| `--font-body` | always system sans | `-apple-system, system-ui, sans-serif` |
|
|
19
|
+
| `--font-display` | font preference→stack | `'Iowan Old Style', Charter, Georgia, serif` (serif_display;sans_display 见 creation-flow 维度 3) |
|
|
20
|
+
| `--font-body` | always system sans | `-apple-system, 'Segoe UI', system-ui, sans-serif` |
|
|
19
21
|
|
|
20
22
|
---
|
|
21
23
|
|
|
@@ -106,10 +108,33 @@
|
|
|
106
108
|
|
|
107
109
|
## Density → 间距/排版修正
|
|
108
110
|
|
|
109
|
-
| Density | base font | space
|
|
110
|
-
|
|
111
|
-
| compact | 14px |
|
|
112
|
-
| balanced | 16px |
|
|
113
|
-
| spacious | 18px |
|
|
111
|
+
| Density | 倍率 | base font | `--space-4` | container |
|
|
112
|
+
|---------|------|-----------|-------------|-----------|
|
|
113
|
+
| compact | ×0.75 | 14px | 12px | 1280px |
|
|
114
|
+
| balanced | ×1.0 | 16px | 16px | 1120px |
|
|
115
|
+
| spacious | ×1.25 | 18px | 20px | 960px |
|
|
116
|
+
|
|
117
|
+
**倍率语义(确定性)**:`--space-N` = 下方 4px 基准阶梯(4/8/12/16/20/24/32/40/48/64/80/96)× density 倍率,取整到整数 px;`--radius-*` 与字阶同倍率。density **不改变** token 名称或色彩。
|
|
118
|
+
|
|
119
|
+
> **单一真相源**:本表是 density 数值的权威;`creation-flow.md` 维度 4 表必须与本表逐值一致。
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Dark 主题派生规则(v0.54.0)
|
|
124
|
+
|
|
125
|
+
`theme` 维度取 `dark` 或 `both` 时启用。**确定性派生**(同输入同结果),产出 `variants/dark.md`——只写差异 token,继承 base 其余部分。
|
|
126
|
+
|
|
127
|
+
| Token | 派生规则 |
|
|
128
|
+
|-------|---------|
|
|
129
|
+
| `--bg` | 近黑画布:按 mood 从 fg 转极暗(professional_minimal → `#0A0A0B`;warm_approachable → `#141210`;technical_dense → `#0B1220`;editorial → `#0A0A0B`;brutalist → `#000000`) |
|
|
130
|
+
| `--surface` | bg 提亮一阶(如 `#141517`) |
|
|
131
|
+
| `--fg` | 从原 `--bg` 转亮(如 `#EDEDEC`) |
|
|
132
|
+
| `--muted` | fg 降 40% 明度 |
|
|
133
|
+
| `--border` | `rgba(255,255,255,0.08)` 半透明体系(不透明描边在暗底上过重) |
|
|
134
|
+
| `--accent` | 保持色相;按对比度**有界确定性**提亮:计算 `contrast(accent, dark --bg)`,若 <4.5:1 则按 10% 步长提亮(`color-mix(in oklab, var(--accent), white N×10%)`,N=1..3)取首个达标值;**N=3 仍不足 → 记入 `extensions`(C-token 名单)留人工裁定,不静默继续** |
|
|
135
|
+
|
|
136
|
+
**对比度校验**:正文 ≥4.5:1、大字 ≥3:1(WCAG AA)——派生后逐对校验 fg/bg 与 accent/bg。
|
|
137
|
+
|
|
138
|
+
**A2/B-slot 不重复派生**:`--accent-hover` 等 A2 公式与 B-slot 别名随 `--accent`/`--fg` 自动生效(color-mix 引用变量),dark 变体只需覆写上表 6 个基色。
|
|
114
139
|
|
|
115
|
-
|
|
140
|
+
**验证**:guard 六层审计的 L1-双主题维度——检测到 `variants/dark.md` 或 CSS 中的 `[data-theme="dark"]` 覆盖即达标。
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
```
|
|
7
7
|
.team-flow/design-system/
|
|
8
|
-
├── base.md # 品牌共享层(color/brand/voice/anti-patterns/extensions
|
|
8
|
+
├── base.md # 品牌共享层(color/brand/voice/anti-patterns/extensions + components 契约表全量真源)
|
|
9
|
+
├── primer.md # AI 约束入口(gen-primer 生成:组件白名单 + Token 速查 + digest)
|
|
10
|
+
├── pending.md # 增量待办(单写者 = design-system skill)
|
|
11
|
+
├── showcase/ # 展示板(草案阶段产出,供用户判断效果)
|
|
12
|
+
├── variants/ # 主题变体(dark.md——确定性派生规则见 token-derivation.md)
|
|
9
13
|
├── b-end.md # B 端变体(typography/spacing/layout/components/motion)
|
|
10
14
|
├── c-end.md # C 端变体(同结构,按 C 端密度/字号覆写)
|
|
11
15
|
└── preview.html
|
|
@@ -22,6 +26,16 @@
|
|
|
22
26
|
| `voice` | 文案语气(专业/简洁/温度等级),跨端统一 | voice |
|
|
23
27
|
| `anti-patterns` | 禁止内联样式漂移 / 禁止非 token 颜色 / 禁止跨端私改品牌色(**必含前两条**) | anti-patterns |
|
|
24
28
|
| `extensions` | C-token 名单制清单:品牌专有 token + 提升路径标注(C→B→A2) | C-extension |
|
|
29
|
+
| `components` | **组件契约表(全量真源,v0.54.0)**:`\| 组件 \| 类型 \| variants \| sizes \| states \| 用途 \| 禁止 \|`;类型 ∈ 交互/轻量/豁免(决定 guard 的 states 下限:交互 ≥3 / 轻量 ≥2 / 豁免跳过;**交互/轻量的 variants 亦必填**,guard 会判违规);≥15 类 PASS / 10-14 类 WARN / <10 类 FAIL 标签 | components |
|
|
30
|
+
| `principles` | **设计原则 ≥3 条(v0.54.0)**:如"一致性优先于局部创意 / 清晰优于装饰 / 可访问性默认开启" | principles |
|
|
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) |
|
|
33
|
+
|
|
34
|
+
> **a11y 声明(v0.54.0)**:base.md 文档头部(标题下)增加一行 `> a11y: WCAG 2.2 AA(对比度 4.5:1 / 大字 3:1 / 焦点可见 / 键盘可达)`——从 prototype craft 层**提级**到设计系统层(guard 六层审计的 L0-可访问性依据)。
|
|
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 按来源判定。
|
|
25
39
|
|
|
26
40
|
> base 不含排版/间距/布局——这些随端变化,归变体。base 的 A1+A2+B-slot 必须完整可过 guard。
|
|
27
41
|
|
|
@@ -31,13 +45,30 @@
|
|
|
31
45
|
|----|------|-----------|
|
|
32
46
|
| `typography` | font-display/body/mono 引用 + type scale(`--text-xs~4xl`,1.25 比例)+ weights + line-height(按 density) | A1-structure |
|
|
33
47
|
| `spacing` | `--space-1~12` 阶梯(基于 density 基准:compact 12 / balanced 16 / spacious 20) | A2-derived |
|
|
34
|
-
| `layout` | 栅格 12 列 / 断点 sm/md/lg / 容器 max-width(B 端宽容器、C
|
|
35
|
-
| `components` |
|
|
48
|
+
| `layout` | **三部分(v0.55.0,设计 §8.2.2)**:① 栅格 12 列 / 断点 sm/md/lg / 容器 max-width(B 端宽容器、C 端窄容器)——**原有,不变** ② **`### 容器骨架` 块**(表格:容器 / 类名 / 关键 CSS 声明)③ **`### 页面范式` 子块**(`**页面范式来源**:引用内置 \| 项目自有 \| 同 <端>` 结构化声明 + 页面类型表) | A1-structure |
|
|
49
|
+
| `components` | **端特有覆盖说明(v0.54.0 改)**:只写该端对 base.md 契约表的差异(如 C 端 Button 用 pill 圆角)并**引用**契约表;**不再重复定义组件清单**(全量真源在 base.md——消除双份维护) | components(差异) |
|
|
36
50
|
| `motion` | duration(`--motion-fast/base`,150–300ms)+ `--ease-standard` | A2-derived |
|
|
37
51
|
|
|
38
52
|
> B 端 vs C 端差异示例:B 端 compact + 14px + 宽表格容器;C 端 spacious + 17px + 窄卡片容器。
|
|
39
53
|
> 两端共享 base 的 color/brand/voice,绝不各自重定义品牌色。
|
|
40
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
|
+
|
|
41
72
|
---
|
|
42
73
|
|
|
43
74
|
## 继承规则(Inheritance)
|
|
@@ -57,4 +88,4 @@
|
|
|
57
88
|
- 渲染某端时:把 base `:root` + 该端变体 `:root` 合并进**单个 `<style>`**(无全局级联)。
|
|
58
89
|
- 缺任何一个 A1/A2/B-slot token → 规则悄悄失效 → `design-token-guard.mjs` 失败。
|
|
59
90
|
- 同 token 名 base 与变体冲突时:**变体优先**(仅限排版/间距/布局/动效类);颜色/品牌类冲突 = 错误,guard 报错。
|
|
60
|
-
- 迭代(iterate)走 MERGE 不 OVERWRITE
|
|
91
|
+
- 迭代(iterate)走 MERGE 不 OVERWRITE:**新组件进 base `components` 契约表**(全量真源,见 §base.md 段落与 :42),端特有点(如圆角/密度差异)写变体 `components` 的覆盖说明;新共享色进 base `color`,并记变更履历。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prototype
|
|
3
|
-
description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离线)。产品级需求的原型环节由 workflow-orchestrator S2 内部调用(含 PRD 一致性自动评审循环);直接调用仅限:独立原型迭代、change 完成回写(prototype-sync
|
|
3
|
+
description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离线)。产品级需求的原型环节由 workflow-orchestrator S2 内部调用(含 PRD 一致性自动评审循环);直接调用仅限:独立原型迭代、change 完成回写(prototype-sync)、design-system skill 的 Showcase 展示板模式(mode=showcase)。当用户需要基于项目设计系统产出/迭代全局 prototype/(多页面+组件+导航的自包含 HTML 原型系统)时使用。不适用于:依赖 GUI 设计软件(Claude Design / Open Design 桌面应用 / Trae)、需要高保真交互动效、非 HTML 原型场景。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Prototype(本地 HTML 原型 skill)
|
|
@@ -8,14 +8,14 @@ description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离
|
|
|
8
8
|
基于 team-flow v0.3 第十五章 + v0.15.0 内部编排重构。全局一份 `prototype/`(与 PRD 同级,git 分支隔离),由本 skill 产出维护,**零外部依赖、可离线**。
|
|
9
9
|
|
|
10
10
|
## 何时使用
|
|
11
|
-
- 新项目初始化:基于 PRD(v1) + 项目
|
|
11
|
+
- 新项目初始化:基于 PRD(v1) + 项目 `.team-flow/design-system/`(base.md + 端变体)生成 `prototype/`(设计系统缺失时先创建设计系统)。
|
|
12
12
|
- 需求迭代:PRD 升版(v1→v2)时,在对应 git 分支演进 `prototype/`。
|
|
13
13
|
- change 实施:各 change 引用全局 `prototype/` 作 UI 契约(进 `execution-contract.md`)。
|
|
14
|
-
- change 完成:UX 增量经 `prototype-sync` 回写全局 `prototype/` +
|
|
14
|
+
- change 完成:UX 增量经 `prototype-sync` 回写全局 `prototype/` + `.team-flow/design-system/`。
|
|
15
15
|
|
|
16
16
|
## 内部编排模型(v0.15.0 核心,主代理只编排不实施)
|
|
17
17
|
|
|
18
|
-
> **硬原则**:本 skill 加载进主上下文后,**主代理只做编排**(环境探查派发、评审组织、循环控制、人工评审、路由决策),**严禁主代理直接 Write/Edit 原型 HTML 或 design-system
|
|
18
|
+
> **硬原则**:本 skill 加载进主上下文后,**主代理只做编排**(环境探查派发、评审组织、循环控制、人工评审、路由决策),**严禁主代理直接 Write/Edit 原型 HTML 或 `.team-flow/design-system/` 下任何文件**。所有探查/绘制/设计系统产出经子代理(§18.1 交接协议)。人工评审/路由因需 AskUserQuestion 必须由主代理执行(subagent 不能阻塞提问)。
|
|
19
19
|
>
|
|
20
20
|
> **后台子代理等待范式(v0.20.0)**:③绘制 / ④评审是长任务(实测 25-50 分钟)。派发后台子代理后**依赖完成通知(`<task-notification>`)再行动**,**禁止反复 `TaskOutput(block=true)` 阻塞轮询**——其对长任务超时返回会倾泻完整子代理 transcript(含 thinking/tool_use/tool_result,单次数万 token),连续轮询会撑爆主上下文。长任务派发后可先处理可并行工作或结束本轮等待通知,**不空转死等**;确需中途观察用 `block=false` 轻量查询(仍返转录,尽量不用)。(设计 §22.2)
|
|
21
21
|
|
|
@@ -29,6 +29,9 @@ description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离
|
|
|
29
29
|
- PRD 有问题 → 回 orchestrator S2 修订 PRD(vN 内修订,非升版)→ 再更新原型
|
|
30
30
|
- 原型需调整 → 回 ③ 派 prototype-builder 实施
|
|
31
31
|
- 通过 → 冻结
|
|
32
|
+
- 设计系统增量确认(v0.54.0):handoff 含 ds_increment 时并入呈现
|
|
33
|
+
[全部确认|逐项确认|暂不处理];确认项调 design-system iterate
|
|
34
|
+
(延迟到 builder 终态后);不处理记入 pending.md(design-system skill 写)
|
|
32
35
|
```
|
|
33
36
|
|
|
34
37
|
详细步骤、子代理派发提示词、收敛检测、设计系统生命周期见 `references/orchestration-flow.md`。
|
|
@@ -45,8 +48,11 @@ description: 本地 HTML 原型设计与维护 skill(零外部依赖、可离
|
|
|
45
48
|
## 内核(零外部依赖)
|
|
46
49
|
- 自包含 HTML:CSS 进 `<style>`、JS 进 `<script>`,页面内 `<div id="tweaks">` 控件替代云端工具栏。
|
|
47
50
|
- **avoid remote dependencies**:无 CDN、无外部字体/脚本,可完全离线。
|
|
48
|
-
- 设计系统渲染:读取项目
|
|
49
|
-
- **种子模板 + 骨架库(v0.18.0)**:builder 从 `references/template.html`(种子)+ `references/layouts.md`(
|
|
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
|
+
- **种子模板 + 骨架库(v0.18.0)**:builder 从 `references/template.html`(种子)+ `references/layouts.md`(14 个 section 骨架 + 类清单契约)组合,不从零写 CSS。
|
|
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)。
|
|
55
|
+
- **Showcase 模式(v0.54.0,对外契约)**:`prototype-builder` 支持 `mode: showcase`(供 design-system skill 单次派发产出展示板)——gate 豁免 `confirmed_plan`/`prd_path`,产出 flat 单文件,最小交付契约见 `references/builder-methodology.md`。
|
|
50
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 端导向。
|
|
51
57
|
- **原型类型方法论(v0.24.0)**:`references/interactive-prototype.md`(交互原型:零依赖状态管理+表单验证+多步导航)+ `references/wireframe.md`(线框图:低保真快速探索+3-5 差异化方案+并排对比),按需加载。
|
|
52
58
|
|
|
@@ -57,15 +63,18 @@ prototype/
|
|
|
57
63
|
├── pages/ # 多页面
|
|
58
64
|
├── components/ # 可复用组件(统一设计系统)
|
|
59
65
|
├── assets/ # design-tokens.css / design-tokens.js
|
|
60
|
-
├── design-system.md # 本项目设计系统(config 注入,9 段 schema)
|
|
61
66
|
└── flow.md # 页面跳转 / 用户流
|
|
62
67
|
```
|
|
63
68
|
|
|
69
|
+
> 设计系统**不在此目录**——存于 `.team-flow/design-system/`(v0.19.0 起;base.md + 端变体 + primer.md)。
|
|
70
|
+
|
|
64
71
|
## 设计系统生命周期(v0.15.0 新增,v0.19.0 独立化)
|
|
65
72
|
```
|
|
66
73
|
首次创建 → 引用 → 增量更新(变更履历)
|
|
67
74
|
```
|
|
68
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。
|
|
69
78
|
- **引用**:prototype-builder 绘制时强制读 `.team-flow/design-system/<variant>.md`(+ base.md 合并 token)渲染,禁止内联样式漂移。
|
|
70
79
|
- **增量更新**:prototype-sync 回写时若涉及新组件/token/anti-pattern,调用 `/team-flow:design-system`(iterate 模式)合并进 `.team-flow/design-system/` 并记**变更履历**。
|
|
71
80
|
- **迁移兼容**:检测旧 `prototype/design-system.md` → 提示迁移到 `.team-flow/design-system/base.md`(一次性)。
|
|
@@ -79,9 +88,10 @@ prototype/
|
|
|
79
88
|
## 配置驱动(插件通用 + 项目注入)
|
|
80
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`)。
|
|
81
90
|
- 插件层用 `tf runtime config --get <key>` 自读;插件保持通用,不固化任何公司/产品风格。
|
|
91
|
+
- **配置漂移检查(v0.55.0)**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/check-project-config.mjs [项目根]` —— 检查上述 key 的指向是否存在、config `version` 是否与插件一致。现场实测三类漂移(version 落后 / 指向不存在的文件 / 零消费者键)**全部静默**,只在用到时失效。
|
|
82
92
|
|
|
83
93
|
## 膨胀防控
|
|
84
|
-
- `components/` 必须复用
|
|
94
|
+
- `components/` 必须复用 `.team-flow/design-system/` 契约表组件,**禁止页面内联样式漂移**。
|
|
85
95
|
- 新增组件先沉淀进 `design-system` 再引用。
|
|
86
96
|
|
|
87
97
|
## 分支约定
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
- CSS 一律进 `<style>`,JS 一律进 `<script>`,页面内 `<div id="tweaks">` 控件替代云端工具栏。
|
|
11
11
|
- 资源仅来自 `prototype/assets/`(本地)。
|
|
12
12
|
2. **复用设计系统 token,禁止内联样式漂移**:
|
|
13
|
-
- 渲染
|
|
13
|
+
- 渲染 `.team-flow/design-system/` 的 token(base 品牌层 + 端变体合并)到 `assets/design-tokens.css`(CSS 变量),所有页面/组件通过 `var(--token)` 引用。
|
|
14
14
|
- 颜色/间距/字号/圆角等一律走 token,**禁止**在页面里写死 `#hex` / `padding: 13px` 之类非 token 值。
|
|
15
|
-
- 复用 `components/`
|
|
15
|
+
- 复用 `components/` 已有组件;**新增组件必须来自 primer 白名单**(v0.54.0)——白名单外的组件需求记入 `ds_increment`(不擅自新建漂移组件);新增组件先沉淀进 design-system 再引用。
|
|
16
16
|
3. **遵循 confirmed_plan**:页面清单、组件清单、导航流以确认方案为准,不自行增删页面。
|
|
17
17
|
|
|
18
18
|
## Build Process
|
|
@@ -20,28 +20,51 @@
|
|
|
20
20
|
### Step 0: Precondition Gate(阻断检查)
|
|
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: 设计系统缺失,需先调用 `/team-flow:design-system` skill 创建——v0.19.0 起 architect 只是该 skill 的内部执行引擎,不再由原型侧直接派发).
|
|
25
|
+
- **primer.md 检查(v0.54.0 新增——组件白名单来源)**:
|
|
26
|
+
1. **primer 存在且可读** → 提取 `available_components` 白名单(Step 1.5/Step 2 只用这些组件)。
|
|
27
|
+
- **digest 校验**:`node ${CLAUDE_PLUGIN_ROOT}/scripts/gen-primer.mjs <base.md 路径> --check`
|
|
28
|
+
- exit 0(一致)→ 继续
|
|
29
|
+
- exit 2(过期:base.md 已变更)→ 读 base.md 的 `governance.contract`:
|
|
30
|
+
- `contract: v1` → `status: blocked`(blocker: primer 过期,请跑 design-system iterate 重新生成)
|
|
31
|
+
- `contract: legacy` 或无标记 → WARN + 提示,按现有 primer 继续
|
|
32
|
+
2. **primer 缺失** → 读 base.md 的 `governance.contract`:
|
|
33
|
+
- `contract: v1` → `status: blocked`(blocker: 设计系统缺少 primer,请跑 design-system iterate 生成)
|
|
34
|
+
- `contract: legacy` 或无标记 → **WARN + 降级继续**:
|
|
35
|
+
- 降级路径:读设计系统目录内任意 `components` 段(**优先变体文件** b-end.md/c-end.md——存量系统的 components 在变体文件,base.md 可能没有该段)
|
|
36
|
+
- 绘制结束在 handoff 中**强制提示**:"请跑 design-system iterate 补契约表并升级 contract: v1"
|
|
24
37
|
- `confirmed_plan` is present and marked confirmed → if absent or explicitly unconfirmed, return `status: blocked` (blocker: 原型方案未确认,需主代理先完成方案评审 + 人工确认).
|
|
25
38
|
- `prd_path` readable → if missing, `status: blocked` (blocker: PRD 缺失).
|
|
26
39
|
|
|
40
|
+
> **判定口径(v0.54.0 定案)**:blocked/WARN 的判定**只看 `governance.contract` 字段**——`v1` = 新体系(缺失/过期均 blocked);`legacy` 或无标记 = 存量(WARN + 降级)。
|
|
41
|
+
|
|
27
42
|
Do NOT proceed past a failed gate.
|
|
28
43
|
|
|
29
44
|
### Step 1: Render Design Tokens
|
|
30
45
|
|
|
31
46
|
1. Read `.team-flow/design-system/<variant>.md` + `base.md`(合并 base 品牌层 + 变体端特有层:9 段 schema + palette 5 方向调色板 + aliases 别名层 + extensions 待提升清单).
|
|
32
47
|
2. Generate/refresh `assets/design-tokens.css` with CSS custom properties for every token (colors incl. palette 50–900 steps, spacing scale, font scale, radii, shadows, durations, A2 派生状态色, B-slot 别名).
|
|
33
|
-
3. **完整性约束**:design-tokens.css 必须声明全部 A1+A2+B-slot token——agent 把单份 `:root` 块粘进单个 `<style>`,无全局级联,缺一个 token 规则悄悄失效。可运行 `node scripts/guard/design-token-guard.mjs
|
|
48
|
+
3. **完整性约束**:design-tokens.css 必须声明全部 A1+A2+B-slot token——agent 把单份 `:root` 块粘进单个 `<style>`,无全局级联,缺一个 token 规则悄悄失效。可运行 `node ${CLAUDE_PLUGIN_ROOT}/scripts/guard/design-token-guard.mjs <设计系统目录> <design-tokens.css>` 自检。
|
|
34
49
|
|
|
35
50
|
### Step 1.5: Seed Composition(种子优先,v0.18.0)
|
|
36
51
|
|
|
37
52
|
**不从零写 CSS——从种子模板 + 骨架库组合。**
|
|
38
53
|
|
|
39
|
-
1. 读 `references/template.html`(至少到 `</style>` 结尾)+ 读 `references/layouts.md`(
|
|
40
|
-
|
|
41
|
-
|
|
54
|
+
1. 读 `references/template.html`(至少到 `</style>` 结尾)+ 读 `references/layouts.md`(14 个 section 骨架 + 类清单契约 + 页面类型节奏表)。
|
|
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 的「页面范式」段为准,骨架组合按该段的页面类型表取,本节只适用于 `引用内置`)。
|
|
42
62
|
- **"槽位空着说明选错了布局,换一个,不许编文案。"**
|
|
43
63
|
- 类清单契约:只用 template.html `<style>` 中已定义的类;够不到的类先在页面 `<style>` 定义,绝不凭空发明全局类。
|
|
44
64
|
4. 纪律约束(来自 layouts.md 各骨架):stats ≤3 个且不编造指标;quote 每页 ≤1 个;accent 每屏 ≤2 处;section 节奏交替(禁止连续同类型)。
|
|
65
|
+
5. **组件白名单约束(v0.54.0)**:只用 Step 0 从 primer 提取的 `available_components` 白名单组件。
|
|
66
|
+
- 需要白名单外组件时 → **记入 `design_system_increments`**(见下方 Structured Handoff 的 `ds_increment` 字段),用可行 workaround 继续(**判据**:能用 ≥2 个白名单组件组合等价表达 → workaround;否则走 stop-and-resume 由主代理裁决)
|
|
67
|
+
- **自造组件 = 违反 Hard Constraints**(与"禁止内联样式漂移"同级)
|
|
45
68
|
|
|
46
69
|
### Step 2: Build Structure
|
|
47
70
|
|
|
@@ -92,6 +115,39 @@ P1 逐项自查(节奏交替 / 标题 ≤14 词 / CTA 说明动作 / hover 态
|
|
|
92
115
|
- Keep token reuse; do not introduce new inline drift while fixing.
|
|
93
116
|
- Do not touch unrelated pages.
|
|
94
117
|
|
|
118
|
+
## Showcase 模式(v0.54.0,对外契约)
|
|
119
|
+
|
|
120
|
+
> **触发**:design-system skill 在创建/迭代的**草案阶段**做单次派发(`mode: showcase`),产出设计系统展示板。
|
|
121
|
+
> **对外契约声明**:本模式是 prototype skill 的正式对外接口(供 design-system skill 调用)——gate 差异与交付契约见下。
|
|
122
|
+
|
|
123
|
+
### Gate 差异
|
|
124
|
+
- **豁免** `confirmed_plan` / `prd_path`(showcase 无 PRD)
|
|
125
|
+
- **要求**:showcase-board brief 可读(`skills/design-system/references/showcase-board-{b,c}-end.md`——由派发方传入路径)
|
|
126
|
+
- **要求**:设计系统草案路径可读(含 primer 草案;用草案 base 的 digest 校验,正式 base.md 此时尚不存在)
|
|
127
|
+
|
|
128
|
+
### 产出差异
|
|
129
|
+
- **flat 单文件**:`b-end.html` / `c-end-website.html` / `c-end-app.html`(不建 `pages/` 目录树、不写 `flow.md`)
|
|
130
|
+
- 写入派发方指定的 scratch 路径(`/tmp/ds-draft-<slug>/showcase/`);**不移正、不落正式路径**(由 design-system skill 在 Step 6 复制)
|
|
131
|
+
|
|
132
|
+
### 最小交付契约(返回 `done` 的硬前置)
|
|
133
|
+
1. brief 的全部区块已渲染(**验收口径 = 结构性区块齐全 + token 合规 + 零白名单外自造**;brief 的「覆盖清单」已引用化,**不再**逐项勾选静态清单)
|
|
134
|
+
2. 无填充文案(grep `lorem|功能[一二三]|示例文本|TODO` = 0)
|
|
135
|
+
3. **P0 grep 通过**(裸 hex / 靛蓝黑名单 / emoji / 填充文案——机械检查,不依赖 PRD)
|
|
136
|
+
4. `<style>` 内 token 全部来自 primer 草案(无自造 token)
|
|
137
|
+
|
|
138
|
+
> **为什么 #1 改口径(v0.55.0,设计 §8.3)**:brief 原覆盖清单是 primer `components` 契约表的**静态副本**(快照时点 b-end 19 类 / c-end 16 类),契约表演进后副本必然漂移(现 31 类)→ 判据从"清单逐项勾选"改为可判定的三要素,新增组件自动纳入验收,无需改 brief。
|
|
139
|
+
|
|
140
|
+
> showcase **不跑 prototype-reviewer**(其 D1-D4 依赖 PRD)——P0 grep 是它的最低验证环节。
|
|
141
|
+
|
|
142
|
+
### Hard Gate 适配
|
|
143
|
+
Deliverable Hard Gate 同样适用,但"核心产物"改为**brief 要求的全部 Board 文件**(如 C 端要 2 个文件则 2 个都要落盘非空);沿用同样的自检命令:
|
|
144
|
+
```bash
|
|
145
|
+
test -f <scratch>/showcase/b-end.html && test -s <scratch>/showcase/b-end.html && echo OK
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Handoff
|
|
149
|
+
沿用 Structured Handoff 结构;`deliverable` = scratch 内 Board 文件绝对路径清单;组件缺口记入 `outstanding_questions`(`ds_increment`,`increment_kind: missing_component`)——供 Step 5 用户评审时一并裁决(这正是"组件契约可用性验证"的产出)。
|
|
150
|
+
|
|
95
151
|
## data-testid Discipline(可选,config 驱动)
|
|
96
152
|
|
|
97
153
|
When the project enables E2E (`prototype.e2e: true` or stated in the plan):
|
|
@@ -107,7 +163,15 @@ When not enabled, do not over-tag.
|
|
|
107
163
|
status: "done" | "done_with_questions" | "blocked",
|
|
108
164
|
deliverable: <prototype 入口绝对路径 + 页面/组件清单>,
|
|
109
165
|
blockers: [ { question, why_blocking, options[] } ], # 阻断项:无法继续、必须主代理裁决
|
|
110
|
-
outstanding_questions: [
|
|
166
|
+
outstanding_questions: [
|
|
167
|
+
{ question, default_assumption }, # 普通非阻断疑问
|
|
168
|
+
{ type: "ds_increment", # 设计系统增量(v0.54.0)
|
|
169
|
+
increment_kind: "missing_component" | "outdated_token" | "new_variant",
|
|
170
|
+
target: <组件名或 token 名>,
|
|
171
|
+
reason: <为什么需要>,
|
|
172
|
+
workaround: <临时替代方案>,
|
|
173
|
+
evidence: <页面:行号> }
|
|
174
|
+
],
|
|
111
175
|
summary: <3-5 行 gist>
|
|
112
176
|
}
|
|
113
177
|
```
|
|
@@ -15,7 +15,7 @@ AI 产物中最常见的颜色。黑名单 hex:
|
|
|
15
15
|
grep -nE '#(6366f1|4f46e5|4338ca|3730a3|8b5cf6|7c3aed|a855f7)' *.html *.css
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
accent
|
|
18
|
+
accent 必须来自项目设计系统(`.team-flow/design-system/`);无设计系统时须选有品牌理由的颜色。
|
|
19
19
|
|
|
20
20
|
### ② 信任渐变
|
|
21
21
|
紫→蓝、蓝→青的线性渐变是 AI 落地页的招牌。无 purple/violet 的 linear-gradient;
|
|
@@ -57,13 +57,19 @@
|
|
|
57
57
|
| 1s+ | 骨架 + spinner,或转入明确加载态 |
|
|
58
58
|
| 60s+ | 停止等待,转错误态并提供重试 |
|
|
59
59
|
|
|
60
|
-
##
|
|
60
|
+
## 测试矩阵模板(v0.54.0 收敛版)
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
每页交付前逐格填写,作为原型验收项。
|
|
63
|
+
|
|
64
|
+
**粒度规则(收敛)**:
|
|
65
|
+
- 默认**页面粒度**(一行一页)
|
|
66
|
+
- 仅当「**数据承载组件且页面内多实例**」时,为该组件**加子行**——避免全组件展开导致的记账膨胀(6 页 × 5 组件 × 5 状态 = 150 格,超出 builder 输出预算)
|
|
67
|
+
- 数据承载组件 = Table / List / Card 列表 / Form / EmptyState
|
|
63
68
|
|
|
64
69
|
| 页面/组件 | Loading | Empty | Error | Populated | Edge |
|
|
65
70
|
|----------|---------|-------|-------|-----------|------|
|
|
66
71
|
| 订单列表 | ☐ 骨架屏 | ☐ 插画+创建入口 | ☐ 重试+错误ID | ☐ 47 条 | ☐ 标题 50 字 |
|
|
72
|
+
| — 其中 Table(3 处实例) | ☐ 骨架 | ☐ | ☐ 重试 | ☐ 47条 | ☐ 超长标题 |
|
|
67
73
|
| KPI 仪表盘 | ☐ | ☐ | ☐ | ☐ | ☐ 数字过亿 |
|
|
68
74
|
| 新建表单 | — | — | ☐ 字段级+摘要 | ☐ | ☐ 备注 500 字 |
|
|
69
75
|
|
|
@@ -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` |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
派发插件 agent `prototype-env-scout`(只读,tools 硬限 Read/Bash/Grep/Glob),传入:PRD 路径、config 的 `prototype.designSystem`/`prototype.entry`、当前 git 分支。简报写在 response,主代理按需落盘。
|
|
21
21
|
|
|
22
22
|
子代理探查并产出环境简报:
|
|
23
|
-
-
|
|
23
|
+
- **设计系统现状**:`.team-flow/design-system/` 是否存在(base.md + 端变体)?**合并后** 9 段 schema 完整度?`primer.md` 是否存在且 digest 未过期?契约表组件数分档(<10 / 10-14 / ≥15)?
|
|
24
24
|
- **原型仓库分支**:当前分支、是否已有 `prototype/`、与 PRD 版本分支是否对齐
|
|
25
25
|
- **PRD 版本**:`iteration_version`、冻结状态、UI 功能点清单(§4/§7)
|
|
26
26
|
- **已有页面**:现有 prototype/ 页面/组件清单(迭代时)
|
|
@@ -33,6 +33,14 @@
|
|
|
33
33
|
|
|
34
34
|
环境简报显示设计系统缺失/不完整时:
|
|
35
35
|
1. 主代理调用 `/team-flow:design-system` skill(独立入口,用户主导交互创建)。
|
|
36
|
+
> **传达范围(v0.55.0)**:只传 **① 环境简报里与"起点"相关的资产事实**,**不预选起点**——
|
|
37
|
+
> design-system 的 Step 0 会**无条件展示全部 7 条**(移植 / 模板库 / `--profile antd` / 文档导入 / 代码逆向 / 从零 / iterate)。
|
|
38
|
+
> 本侧无从判断用户手上有什么资产,**预选会让其余 6 条不可见**(能力存在但用户不知道 = 能力不存在)。
|
|
39
|
+
>
|
|
40
|
+
> 可传达的资产事实(由 scout 简报得出,**仅作提示、不代替用户选择**):
|
|
41
|
+
> 简报含"已有符合规范的原型代码"→ 提示 `create-from-code` 可用;
|
|
42
|
+
> 需求方提到"有既有 UI 规范文档/规范树"→ 提示 `create-from-docs` 可用;
|
|
43
|
+
> 需求方提到"公司另一个后台项目已建过设计系统"→ 提示 clone 可用。
|
|
36
44
|
2. design-system skill 内部执行:需求收集(≤5 个预填推荐问题)→ 确定性 token 派生 → 草稿生成(base.md + 变体)→ 预览生成(preview.html)→ 用户评审确认 → 落盘 `.team-flow/design-system/` + guard 校验。
|
|
37
45
|
3. 创建完成后回 ① 补齐环境简报。
|
|
38
46
|
|
|
@@ -50,7 +58,7 @@ LT 确认后进入 ③。**confirmed_plan 序列化**:将 scout 简报的选
|
|
|
50
58
|
|
|
51
59
|
## 步骤 ③ 原型绘制(子代理)
|
|
52
60
|
|
|
53
|
-
派发插件 agent `prototype-builder`(有 Write),传入:已确认的原型方案(含选定方向)、`design-system.md
|
|
61
|
+
派发插件 agent `prototype-builder`(有 Write),传入:已确认的原型方案(含选定方向)、`design_system_path`(`.team-flow/design-system/<variant>.md`,与 base.md 合并渲染)、`variant`、`prototype_root`、目标分支/版本、`prd_path`、`mode: default`(showcase 模式见 builder-methodology「Showcase 模式」——该模式豁免 `confirmed_plan`/`prd_path`)。
|
|
54
62
|
|
|
55
63
|
**⛔ 子代理 ID 记录(v0.29.1,必须执行)**:dispatch 后**立即记录**子代理 ID,后续 ⑤ 循环修正和 ⑥ 人工评审调整**必须通过此 ID 恢复子代理**,不得启动新子代理:
|
|
56
64
|
```
|
|
@@ -58,7 +66,7 @@ builder_agent_id = <agentId> # ③ dispatch 返回
|
|
|
58
66
|
reviewer_agent_id = <agentId> # ④ dispatch 返回
|
|
59
67
|
```
|
|
60
68
|
|
|
61
|
-
**prompt 组装顺序契约(v0.18.0, v0.24.0
|
|
69
|
+
**prompt 组装顺序契约(v0.18.0, v0.24.0 扩展)**:`.team-flow/design-system/`(base + 变体)→ references/template.html → references/layouts.md → references/checklist.md → references/craft/(按页面类型选择注入)→ references/interactive-prototype.md(按需)→ references/wireframe.md(按需)→ PRD`。
|
|
62
70
|
|
|
63
71
|
craft 注入策略:仪表盘→laws-of-ux+state-coverage;表单→state-coverage+accessibility-baseline;列表→typography-hierarchy;通用→anti-ai-slop(始终注入)。
|
|
64
72
|
|
|
@@ -107,6 +115,15 @@ agent 直接写审查报告到 `requirement/vN/prototype-auto-review.md`。
|
|
|
107
115
|
- **PRD 有问题** → 回 orchestrator S2 修订 PRD(**vN 内修订 + 变更履历,非升版**;见 feedback-loops 设计)→ PRD 更新后再回 ① 更新原型。**独立调用 fallback**(非 orchestrator 触发时):无 S2 可回,直接提示 LT 修订 `requirement/vN/prd.md` 后重入本 skill。
|
|
108
116
|
- **原型需调整**(美观/体验/品牌/信息密度等自动评审查不到的维度)→ **⛔ 必须通过 SendMessage 恢复原 prototype-builder 实施调整**(`SendMessage(to: builder_agent_id, message: "用户评审反馈:{调整意见}。请修改原型。")`),修改后 SendMessage 恢复原 prototype-reviewer 重新评审。**禁止启动新子代理**(唯一例外:SendMessage 恢复失败时的 fallback)
|
|
109
117
|
- **通过** → 冻结:PRD frontmatter `frozen: true`(frozen_downstream),prototype 定版
|
|
118
|
+
- **设计系统增量确认(v0.54.0,新增分支)**:若 builder handoff 的 `outstanding_questions` 含 `ds_increment` 条目(`missing_component` / `outdated_token` / `new_variant`),在本次 AskUserQuestion 中**并入**呈现:
|
|
119
|
+
|
|
120
|
+
> 「原型绘制中发现 N 项设计系统增量:① {描述}({workaround}) ② … — [全部确认 | 逐项确认 | 暂不处理]」
|
|
121
|
+
|
|
122
|
+
- **全部确认 / 逐项确认** → 主代理调 `/team-flow:design-system`(iterate 模式)传入确认项。
|
|
123
|
+
- **时序约束**:iterate 一律**延迟到 builder 任务终态交接后**执行(避免绘制中途 primer 变更导致产出与白名单版本不一致)
|
|
124
|
+
- **并发提示**:iterate 前检查活跃 change(`${CLAUDE_PLUGIN_ROOT}/scripts/lib/state-loader.mjs`)→ 提示"本次设计系统变更会影响进行中的 change: X/Y"
|
|
125
|
+
- **暂不处理** → 由 **design-system skill**(唯一写者)追加到 `.team-flow/design-system/pending.md`;条目格式 `{描述} | 来源: <change-id 或 s2-prototype> | 时间: <ISO>`
|
|
126
|
+
- **不追溯重构**:已冻结原型不自动重绘——workaround 保留至该页下次进入绘制时替换
|
|
110
127
|
|
|
111
128
|
## 子代理阻断处理(§18.1)
|
|
112
129
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
:root{
|
|
2
|
-
/* A1-identity:由 design-system
|
|
2
|
+
/* A1-identity:由 .team-flow/design-system/ 渲染覆盖,此处为骨架占位 */
|
|
3
3
|
--color-primary: #c96442; /* 占位,渲染时替换为品牌主色 */
|
|
4
4
|
--color-neutral-900: #1a1916;
|
|
5
5
|
--bg: #fafaf7; --surface: #ffffff; --fg: #1a1916; --muted: #6b6964; --border: #e8e5df;
|
|
@@ -15,5 +15,5 @@
|
|
|
15
15
|
--space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
|
|
16
16
|
--radius-1: 4px; --radius-2: 8px;
|
|
17
17
|
--font-base: 16px;
|
|
18
|
-
/* 由 design-system
|
|
18
|
+
/* 由 .team-flow/design-system/ 渲染;修改走 design-system,不在此硬编码新值 */
|
|
19
19
|
}
|