# Consumer Product Template Kit

TVU 设计系统消费产品的项目骨架模板。被 `setup-tvu-consumer` skill 在新接入项目里 scaffold。

## 包含什么

```
consumer-product/
├── .githooks/                     ← 零依赖 mockup handoff conformance gate（F62-b）
│   ├── pre-commit                 ← 纯 sh；扫 staged docs/handoffs/*.md
│   ├── audit-mockup-handoff-evidence.mjs  ← 校验逻辑（node 内置模块，无 npm 依赖）
│   └── README.md                  ← 启用说明（core.hooksPath / husky 追加）+ 降级行为
├── docs/                          ← 标准 docs/ 5 子目录骨架
│   ├── README.md                  ← docs 索引模板（含 {{placeholders}}）
│   ├── retrospects/               ← AI 协作复盘
│   │   ├── README.md              ← Marp 用法说明（投屏 / PDF / HTML 导出）
│   │   └── _template.slides.md    ← Marp 17-slide 骨架 + TVU 绿主题
│   ├── handoffs/                  ← session 交接 / 下次 pickup
│   ├── audits/                    ← F1 走查 / walkthrough
│   ├── specs/                     ← 设计 spec / Figma prompt
│   └── decisions/                 ← ADR 决策记录
└── gitignore.fragment             ← 追加到 consumer .gitignore（含 Marp dist/）
```

## 为什么沉淀到 TVU 真源

- **Reuse**：MicroApps + 未来所有消费产品共用同一份骨架
- **演进集中**：Marp 主题改 / docs 分类变更 → 改一处真源，未来 setup 的项目自动用新版
- **配套规则**：复盘格式（`feedback_ux_task_retrospect`）+ wrap-up commit 流程（`feedback_wrap_up_git_push`）在 user-level memory，跟 file 骨架配套

## 不包含

- ❌ Vite singlefile 配置 — 由 `setup-tvu-consumer` SKILL.md Step 4 检查 + 提示，不复制文件（vite.config 常含项目自定义逻辑，覆写易出错）
- ❌ `package.json` / deps — 消费项目自管，不强加
- ❌ marp-cli — 全局工具（`npm i -g @marp-team/marp-cli`），不入项目 deps

## 怎么 scaffold

`setup-tvu-consumer` skill 跑到 docs 骨架步骤时：
1. 遍历 `docs/{retrospects,handoffs,audits,specs,decisions}/` 缺哪个建哪个（不覆盖既存）
2. 复制 README + `_template.slides.md`（仅当目标不存在）
3. 把 `gitignore.fragment` 内容追加到 consumer `.gitignore`（若已含则跳过）

完全 idempotent — 重复跑不破坏既有内容。

## 模板里的 `{{placeholders}}`

`docs/README.md` 含 `{{PRODUCT_NAME}}` 这类占位符。scaffold 时由 setup skill 用 cwd basename 替换；用户后续可手改。

`_template.slides.md` 不含动态占位符——它是写新复盘时的"复制改名起手"骨架，不是 scaffold 时一次性渲染的产物。
