# 学员作业 checklist · 业务助手智能体

> **用法**:把这份文件复制一份到你自己项目的 `outputs/` 下,改名 `checklist-<产品名>.md`,边做边勾。
> 每一项的"判定标准"是红绿灯,打不上勾就回去重做,不要跳。
> 做完后,这份 checklist 就是你交付的"过程文档",可作为培训考核依据。

---

## 0. 基本信息

| 项 | 填写 |
| --- | --- |
| 学员姓名 |  |
| 培训批次 |  |
| 业务领域(HR / 销售 / 运营 / 客服 / 其他) |  |
| 产品名(2-6 个字) |  |
| 开始日期 |  |
| 结束日期 |  |
| 总耗时(小时) |  |

---

## 1. 阶段一:需求发现(目标 30 分钟以内)

**判定标准:3 轮对话搞清楚业务场景、用户角色、核心功能,没有一次问 10 个问题把用户淹没。**

### 1.1 第 1 轮:角色 + 痛点

- [ ] 主动告诉用户"接下来会发生什么"
- [ ] 问到了「这个工具给谁用」
- [ ] 问到了「解决什么具体痛点」
- [ ] 问到了「大致使用频率」
- [ ] 没有一次问超过 3 个问题

我的第 1 轮问题(复制你实际问的):
```
1.
2.
3.
```

### 1.2 第 2 轮:核心功能 + 字段

- [ ] 问到了「主要想记录哪些信息」
- [ ] 问到了「关键操作」(新建 / 编辑 / 删除 / 搜索 / 导出)
- [ ] 问到了「有没有流程性要求」
- [ ] 给用户提了字段建议,让他加 / 删

我的第 2 轮问题:
```
1.
2.
3.
```

### 1.3 第 3 轮:风格 + 参考

- [ ] 问到了「风格偏好」
- [ ] 问到了「有没有参考的网站/产品」
- [ ] 主动预告"接下来要写产品文档"

我学到的关键点(用一句话写):
```

```

### 1.4 反模式自检

- [ ] 我没有一次问超过 3 个问题
- [ ] 我没有替用户做业务决策
- [ ] 我没有急着进 PRD

**阶段一用时(分钟)**:____
**阶段一通过**:□ 是 □ 否

---

## 2. 阶段二:PRD 自动生成(目标 60 分钟以内)

**判定标准:PRD 写到文件(不是对话),包含所有必要章节,用户审阅后确认。**

### 2.1 写出 PRD

- [ ] PRD 写到 `outputs/prd-<产品名>-v0.1.md`
- [ ] PRD 包含「产品定位」
- [ ] PRD 包含「目标用户」
- [ ] PRD 包含「使用场景」
- [ ] PRD 包含「核心功能列表」(带优先级 P0/P1/P2)
- [ ] PRD 包含「页面结构」(主导航 + 子视图)
- [ ] PRD 包含「字段定义」(每张表/模块)
- [ ] PRD 包含「交互细节」
- [ ] PRD 包含「视觉风格」
- [ ] PRD 顶部有「产品名 / 版本 / 最后更新」字段

我的 PRD 路径:
```
outputs/prd-<产品名>-v0.1.md
```

PRD 字节数:____  KB
PRD 章节数:____ 个

### 2.2 主动告知用户

- [ ] 告诉用户 PRD 文件路径
- [ ] 告诉用户请逐项审阅
- [ ] 告诉用户有问题说"修改 XX 部分"
- [ ] 告诉用户没问题说"OK"

### 2.3 用户审阅与修改

- [ ] 用户审阅了 PRD
- [ ] 用户给了反馈(我做了 N 处修改):N = ____
- [ ] 用户最终确认 "OK / 开始生成 Demo"

我做的修改:
```
1.
2.
3.
```

### 2.4 反模式自检

- [ ] PRD 写到文件(不写到对话)
- [ ] 我没有闷头生成 Demo,等用户确认了
- [ ] 我没有省略字段定义

**阶段二用时(分钟)**:____
**阶段二通过**:□ 是 □ 否

---

## 3. 阶段三:网页应用生成(目标 30 分钟以内)

**判定标准:单文件 HTML Demo,所有 CRUD 真的能用,左右导航,双主题。**

### 3.1 生成 Demo

- [ ] Demo 写到 `outputs/<产品名>/index.html`
- [ ] 是单文件 HTML(没拆多文件)
- [ ] 双击能在浏览器打开

我的 Demo 路径:
```
outputs/<产品名>/index.html
```

Demo 字节数:____  KB
Demo 视图数:____ 个

### 3.2 硬性自检(对照 SKILL.md 第 5 节)

- [ ] 主导航在**左侧**(`lg:pl-60`)
- [ ] 顶部 16px 固定栏
- [ ] 浅色 + 深色双主题(自动 + 手动切换)
- [ ] 5 种状态色(绿/黄/红/蓝/灰)
- [ ] Tailwind safelist 包含动态状态色类
- [ ] lucide 图标(零 emoji)
- [ ] 每个图标按钮带 aria-label
- [ ] Modal 含 ESC 关闭
- [ ] Modal 含 click.outside 关闭
- [ ] localStorage 持久化(关闭浏览器再开数据还在)
- [ ] 移动端 375px 适配(用手机/开发者工具看)

### 3.3 CRUD 实地测试(对照 crud-pattern.md)

- [ ] 新建一条数据,保存后出现在列表里
- [ ] 刷新页面,数据还在
- [ ] 编辑一条数据,保存后内容更新
- [ ] 删除一条数据,有确认弹窗 + 删除后从列表消失
- [ ] 搜索/筛选能用(如果有)

我测过的新建/编辑/删除次数:____

### 3.4 主动告知用户

- [ ] 告诉用户 Demo 路径
- [ ] 告诉用户怎么用(双击打开、刷新不丢)
- [ ] 告诉用户怎么改(在对话里继续提建议)

**阶段三用时(分钟)**:____
**阶段三通过**:□ 是 □ 否

---

## 4. 场景 A:加一个字段(目标 15 分钟以内)

**判定标准:PRD 改、代码改、CHANGELOG 改,老数据不丢。**

### 4.1 设计要加的字段

字段名:`____`(中英文都可以)
类型:□ 文本 □ 数字 □ 日期 □ 枚举 □ 关联 □ 布尔
必填:□ 是 □ 否
说明:
```

```

### 4.2 30 秒判断:这是不是场景 A?

- [ ] 这次改动是「字段调整」(不是流程推翻、不是视觉微调)
- [ ] 影响范围 < 30% 代码
- [ ] → 是场景 A

### 4.3 改前告诉用户要做什么

- [ ] 给用户看了"准备改 N 处"清单
- [ ] 说明了数据兼容方案(老字段怎么兜底)
- [ ] 用户确认了

### 4.4 实际改动

- [ ] PRD 字段表加了这一行,版本号 v0.x → v0.x+1
- [ ] Demo 代码加了字段处理(default + 保存 + 展示)
- [ ] CHANGELOG.md 顶部加了一段记录
- [ ] 老数据兼容:`?? defaultValue` 或 `?? null`

### 4.5 改完告诉用户

- [ ] 告诉用户改了什么(枚举 1-3 条)
- [ ] 告诉用户数据是否兼容
- [ ] 告诉用户怎么验证(打开哪个视图,点哪个按钮)

### 4.6 实地验证

- [ ] 打开 Demo,看到新字段
- [ ] 新建一条带新字段的数据,保存后展示正确
- [ ] 老数据(改前建的)还能看到,新字段显示为默认值

**场景 A 用时(分钟)**:____
**场景 A 通过**:□ 是 □ 否

---

## 5. 场景 B:把对话内容合并到 PRD(目标 20 分钟以内)

**判定标准:从对话里抽出事实,去重,定位到对应章节,用户确认后才写文件。**

### 5.1 触发

- [ ] 用户明确说"把刚才聊的也写到 PRD" / 类似的话
  → 或者:
- [ ] 我推断出有 2 轮以上对话在补充业务细节,主动问用户"要不要合并"

### 5.2 抽对话事实

我从对话里挑出 N 条事实陈述(过滤掉寒暄、确认、疑问):N = ____

我挑出的事实:
```
1.
2.
3.
4.
```

### 5.3 去重 + 定位

- [ ] 和当前 PRD 比对了,标了哪些是新的、哪些是重复的
- [ ] 每条新信息路由到对应章节(产品定位/字段/功能/业务规则)

### 5.4 草案给用户看

- [ ] 在对话里展示了"准备合并 N 条"的清单(没直接打文件)
- [ ] 标了每条是「新增」还是「补全」
- [ ] 用户可以微调措辞

### 5.5 用户确认后写入

- [ ] 用户说 OK(或微调后 OK)
- [ ] PRD 真的写了文件,版本号 +1
- [ ] CHANGELOG.md 写了这段变更

### 5.6 主动询问重生成

- [ ] 改完问用户"PRD 改完了,要重新生成应用吗"
- [ ] 用户给了答复:□ 现在重生成 □ 之后再改 □ 这版规则不用落代码

**场景 B 用时(分钟)**:____
**场景 B 通过**:□ 是 □ 否

---

## 6. 场景 C:重大改动重生成(目标 60 分钟以内)

**判定标准:冻结老版本、主版本 +1、写迁移函数、Breaking 标注、回滚方法齐全。**

### 6.1 30 秒判断:这是不是场景 C?

- [ ] 改动影响 > 30% 代码,或 3 个以上模块
- [ ] 改了核心流程,或改了数据结构
- [ ] → 是场景 C

### 6.2 冻结老版本

- [ ] `outputs/<产品名>/` 复制到 `outputs/<产品名>-v<X.Y>-snapshot-YYYYMMDD/`
- [ ] 老 PRD 复制到 `outputs/_archive/prd-<产品名>-v<X.Y>.md`
- [ ] 用户确认了冻结方案

冻结后文件结构:
```
outputs/
├── <产品名>-v0.X-snapshot-YYYYMMDD/    ← 冻结的老版
├── _archive/
│   └── prd-<产品名>-v0.X.md            ← 冻结的 PRD
└── <产品名>/                            ← 即将写新版
```

### 6.3 主版本号 +1

- [ ] PRD 顶部版本从 v0.X → v1.0
- [ ] PRD 顶部标注「基于 v0.X 重大重构」
- [ ] 新文件 `outputs/prd-<产品名>-v1.0.md`

### 6.4 整页重写(不继承老代码)

- [ ] 我是从 PRD 重新生成的,不是基于老 HTML 改
- [ ] 重写时新代码结构更清晰(不是把老逻辑搬过来)

### 6.5 数据迁移函数

- [ ] 写了 `migrateData_vX_vY(oldData)` 函数
- [ ] 启动时检测版本,自动调用迁移
- [ ] 迁移失败的数据备份到 `localStorage[<产品名>__backup_vX]`
- [ ] 老数据完整保留(不丢字段)

我的迁移函数关键代码:
```javascript
function migrateData_v0_v1(oldData) {
  //
}
```

### 6.6 CHANGELOG 大事记

- [ ] CHANGELOG.md 顶部加了一段大事记
- [ ] 标了 ⚠️ Breaking
- [ ] 列了业务/技术/数据三个维度的变化
- [ ] 给了回滚方法(把 snapshot 复制回来)

### 6.7 改完告诉用户

- [ ] 改了哪 N 处(枚举 1-3 条)
- [ ] 数据怎么兼容的
- [ ] 怎么验证(刷新触发迁移、看备份、控制台命令)
- [ ] 怎么回滚(出问题时把 snapshot 复制回来)

### 6.8 实地验证

- [ ] 刷新一次 Demo,触发迁移
- [ ] 老数据还在,字段没丢
- [ ] 控制台跑 `localStorage.getItem("<产品名>__backup_vX")` 能看到备份
- [ ] 新流程生效(新数据走新路径)

**场景 C 用时(分钟)**:____
**场景 C 通过**:□ 是 □ 否

---

## 7. 场景 D:小改直接动代码(目标 10 分钟以内)

**判定标准:纯视觉/文案,不改业务,PRD 不动,CHANGELOG 加 patch 记录。**

### 7.1 30 秒判断:这是不是场景 D?

- [ ] 是纯视觉/文案/微调
- [ ] 不改字段、不改流程、不改视图结构
- [ ] → 是场景 D

### 7.2 改前确认(不必须)

场景 D 可以直接动,但建议先告诉用户改什么:
- [ ] 简短告诉用户"我准备改 X,Y"
  → 或者:
- [ ] 直接动手(改动很小,改完再说)

### 7.3 实际改动

- [ ] 改了 CSS class / 内联样式 / 文案
- [ ] 没动业务逻辑
- [ ] 没动 PRD
- [ ] CHANGELOG.md 顶部加了 patch 记录(不升版本号)

我改了:
```
-
-
```

### 7.4 改完告诉用户

- [ ] 改了什么(1-2 条)
- [ ] 提示「刷新浏览器」

### 7.5 实地验证

- [ ] 刷新浏览器,看到改动
- [ ] 深色模式下也看着正常(如果改了颜色)

**场景 D 用时(分钟)**:____
**场景 D 通过**:□ 是 □ 否

---

## 8. 最终交付清单

**判定标准:PRD / 代码 / CHANGELOG 三件套齐,过程文档完整,数据能导出。**

### 8.1 必备文件

- [ ] `outputs/prd-<产品名>-v<最终版>.md`
- [ ] `outputs/<产品名>/index.html`
- [ ] `outputs/<产品名>/CHANGELOG.md`
- [ ] `outputs/<产品名>/README.md`(用户手册,告诉别人怎么用)
- [ ] `checklist-<产品名>.md`(本文件,作为过程文档)

### 8.2 归档(如果做过场景 C)

- [ ] `outputs/_archive/prd-<产品名>-v0.X.md`
- [ ] `outputs/<产品名>-v0.X-snapshot-YYYYMMDD/index.html`

### 8.3 数据

- [ ] Demo 在浏览器里跑起来,数据有(打开看仪表盘,有没有 KPI)
- [ ] 数据导出按钮能用(如果有)
- [ ] 至少 3 条真实业务数据(不是空架子)

我的 Demo 数据:
- 招聘需求:____ 条
- 候选人:____ 条
- 面试评价:____ 条
*(改成你自己的实体和数据)*

### 8.4 业务自检

找一个没用过这个产品的同事,让他:
- [ ] 看 README 后能上手(给 5 分钟)
- [ ] 能完成至少 1 个核心场景(比如新建一条记录)
- [ ] 没问"这个按钮是干嘛的"

同事反馈(记录他说的 1-2 句):
```

```

---

## 9. 自评打分

### 9.1 完成度(每项 10 分,满分 70)

| 项目 | 完成情况 | 自评 |
| --- | --- | --- |
| 阶段一 需求发现 | □ 通过 □ 部分 □ 未做 |  / 10 |
| 阶段二 PRD | □ 通过 □ 部分 □ 未做 |  / 10 |
| 阶段三 Demo | □ 通过 □ 部分 □ 未做 |  / 10 |
| 场景 A 改字段 | □ 通过 □ 部分 □ 未做 |  / 10 |
| 场景 B 合并对话 | □ 通过 □ 部分 □ 未做 |  / 10 |
| 场景 C 重大改动 | □ 通过 □ 部分 □ 未做 |  / 10 |
| 场景 D 视觉微调 | □ 通过 □ 部分 □ 未做 |  / 10 |
| **小计** |  | **/ 70** |

### 9.2 质量分(每项 6 分,满分 30)

| 项目 | 自评 |
| --- | --- |
| PRD/代码/CHANGELOG 三件套始终一致 |  / 6 |
| 所有改动前都先问用户确认(场景 A/B/C) |  / 6 |
| 数据兼容做得好(老数据没丢) |  / 6 |
| 视觉达到 Vercel / shadcn 风格 |  / 6 |
| CRUD 真的能用,不是空架子 |  / 6 |
| 同事能独立上手(README 够用) |  / 6 |
| **小计** | **/ 36** |

*(实际满分 30,这里写 36 是因为可以奖励 6 分给特别出色的项)*

### 9.3 总分

完成度( / 70)+ 质量分( / 30)= **总分 / 100**

等级:
- 90+:优秀,直接可交付生产
- 75-89:良好,需要少量打磨
- 60-74:合格,需要中等打磨
- < 60:不合格,需要返工

**我的总分**:____
**我的等级**:____

### 9.4 自我反思(3 句话)

我做得最好的:
```

```

我做得最差的:
```

```

下次我会在哪方面改进:
```

```

---

## 10. 提交给培训讲师

学员在课程结束前,把以下文件打包发邮件/上传到共享目录:

```
提交物/
├── outputs/
│   ├── prd-<产品名>-v<最终版>.md
│   ├── <产品名>/
│   │   ├── index.html
│   │   ├── CHANGELOG.md
│   │   └── README.md
│   ├── _archive/(如果有)
│   └── <产品名>-v0.X-snapshot-YYYYMMDD/(如果有)
├── checklist-<产品名>.md   ← 本文件,带勾选结果
└── 演示视频(可选,3-5 分钟录屏)
```

- [ ] 提交物目录完整
- [ ] checklist 全部打勾(或明确标注"未做"的原因)
- [ ] 演示视频录了(可选)
- [ ] 邮件/共享链接发给讲师

提交日期:____
讲师确认:□ 已收 □ 待确认 □ 退回修改

---

## 附录:常见挂科项

**最容易挂的 10 项**(讲师评分时重点看):

1. PRD 写到对话里(必须写文件)
2. PRD 写完闷头生成 Demo(没等用户确认)
3. CRUD 是空架子(按钮在,提交没反应)
4. 改了字段没写 CHANGELOG
5. 改了字段没升 PRD 版本号
6. 改了字段没做数据兼容(老数据崩了)
7. 场景 C 没冻结老版本,出问题回不去
8. 场景 C 没写迁移函数,数据丢了
9. 主导航放右侧(用户已经明确要求左侧)
10. 视觉用了 emoji 当图标(用 lucide)

每挂一项扣 5-10 分,直到扣完为止。
