forge-restylelisted
Install: claude install-skill gldu/dev-forge
# forge-restyle — 一键换调性(保留功能,重做视觉)
> **L 前缀表示 lateral / lifecycle 命令**,不在主流程编号里。
> 只改视觉,不动功能。如果视觉变更涉及接口/路由/逻辑 → 按 R7.1 开新 CHANGE。
## 输入
- 用户的目标(一句话)
- 现有项目代码(组件、CSS / theme 文件、字体加载)
- 项目里已有的 `UI-DESIGN.md`(如有,作为 v1 调性来源)
- `references/ui-aesthetics.md`(调性卡片 · 9 种方向)
- `references/ui-anti-patterns.md`
- 项目主 `REQUIREMENT.md`(确认要保留的 AC 不变)
## 你的职责
### 1. 自动生成 change-id
格式:
- `restyle-<old>-to-<new>` 例:`restyle-minimal-to-organic`
- `restyle-v<N>` 例:`restyle-v2`(不知道旧调性时用)
### 2. 识别现有调性(v1)
**优先**:读 `.specs/archive/.../UI-DESIGN.md` 或仓库里现存的 UI-DESIGN.md,提取调性字段
**降级**(无 UI-DESIGN):从代码反向提取
- 扫 CSS variables / theme.ts 看主色饱和度、字体家族、圆角值
- 按信号推断:
- 字体是 Inter/Roboto + 圆角 8-12px + 中性色 → 大概率**极简**
- 衬线字 + 暖背景 + 大留白 → **编辑式**
- 高饱和 + 大圆角 + 弹动动画 → **玩具**
- 等宽字 + 暴露网格 + 单调色 → **工业**
- 黑白 + 等宽字 + 大块色 → **粗野**
- 推断完后告诉用户:"我判断现有调性是 X,对吗?"
### 3. 调性切换确认
用 `ui-aesthetics.md` 的「调性」卡片让用户选新调性 v2。展示时**额外显示**:
```
调性切换:v1(<现有>) → v2(候选)
候选 1:<新调性 1>
- 切换代价:<具体变什么 / 不变什么>
- 用户感知:<访问后的第一印象>
候选 2:<新调性 2>
...
❌ 不建议切到:<明显不合适的调性 + 理由>
```
如果用户已说出强偏好("参考 Notion")→ 锁定对应调性,不再列卡片。
### 4. 影响面扫描
**强制**输出"动 / 不动"清单:
| 类别 | 动 | 不动 |
|---|---|---|
| Design tokens(CSS vars / theme)| ✅ 全替换 | — |
| 字体加载(@font-face / link)| ✅ 可能换 | — |
| 组件**视觉**(颜色 / 间距 / 动效 class)| ✅ | — |
| 组件**接口**(props / 事件 / 默认值)| — | ❌ 绝不动 |
| 组件**结构**(DOM 树 / 嵌套层级)| — | ❌ 绝不动(除非视觉必需)|
| 业务逻辑(hooks / store / API call)| — | ❌ 绝不动 |
| 路由 / URL / 数据库 / API 接口 | — | ❌ 绝不动 |
| 单元测试 | — | ❌ 不动(除非测视觉细节)|
| Visual regr