# 核销表 · P0 卖点三套来源（通用化根基）

> 90分级验收（孙总方法论·硬门禁）。倩倩姐2026-06-15拍板：先打 P0。
> **标绿门槛=北哥真实数据端到端跑通**（倍分子素颜霜膏霜罐真图 + 文案3.txt真卖点），占位数据自测只能标🟡。
> **绝不信AI第一遍自评，必独立交叉核对。**

## 模块目标（倩倩姐纠偏后的正确方向）

系统是**通用**的，产品靠**上传才有**，不内置写死任何产品。卖点支持**三套来源**（产品包本来就有，Clover重写时漏了套1、套2字段缺口）：
- **套1 从产品图片提取**（Gemini Vision 读图→卖点/人群/成分/视觉系统）——❌ Clover完全缺失，本轮补
- **套2 用户上传填写**（北哥文案3.txt就是这套真实输入）——⚠️ brand_keyword/人群字段没暴露在API，本轮补
- **套3 产品库内置**（fallback模板）——⚠️ 留口即可，本轮不重点做

## 🔴 已确认的现状（调研+亲读源码，不是猜）

| 项 | 现状 | 文件:行 |
|---|------|---------|
| 主流程是否写死素颜霜 | **没有**，文案/生图prompt都从products表动态读 | `_text_prompt.py:126` / `pipeline_steps.py:58` |
| brand_keyword 字段 | model有，**API全链路没暴露**(DTO/fmt/create/update都没有) | `product.py:41` vs `products.py:24-128` |
| target_audience 人群 | **字段不存在**，但storyboard在读(`product.get("target_audience")`恒空) | `storyboard.py:52` |
| 套1图片提取 | **完全没有**，gemini_factory只有生图无vision读图 | `gemini_factory.py` 全文 |
| 标题公式 | **已做**(肤质/价格/功效/夸张/标题党5型) | `_text_prompt.py:84-93` |

## 验收清单（做完一个勾一个，先全列再做）

> 状态图例：⬜未开始 / 🟡占位数据自测通过 / ✅北哥真实数据端到端通过

### 套2 字段暴露（改API，model已有brand_keyword无需迁移；人群需迁移）
- ✅ **AC1**〔auto〕迁移012:products表加 `target_audience VARCHAR(128)`。**team-lead独立核对容器DB:SHOW COLUMNS确认brand_keyword varchar64/target_audience varchar128，alembic current=012(head)**
- ✅ **AC2**〔auto〕ProductCreate DTO 暴露 `brand_keyword` + `target_audience`；POST/PUT 写入；`_fmt_product` 返回。**实证INSERT/UPDATE语句含两列**
- ✅ **AC3**〔auto〕`build_product_dict` 透传 `target_audience`(pipeline_steps.py:68)。**实证dict透传人群='黄黑皮想素颜的女生'品牌='倍分子'非空**
- ✅ **AC4**〔auto〕建产品→回读三字段都在。**team-lead独立跑通PASS(非采信coder自评)**

> 🔴 交叉验证发现:coder自评"测试产品已清理无残留"是**假的**,DB残留id=3,team-lead已删。印证「绝不信第一遍自评」。
> 附带:已修复product_id=1(真实素颜霜)真实数据:5条真实卖点+人群(黄黑皮想素颜的女生)+品牌(倍分子)，为AC9铺路。

### 套1 图片提取（新增vision，对齐产品包callGeminiVision）
- ✅ **AC5**〔auto〕gemini_factory 新增 vision 读图方法(传产品图bytes→返回结构化分析)，模型走最强档不降级。**team-lead独立交叉核验：签名正确，model默认claude-opus-4-8无硬编码sonnet，import无报错**
- ✅ **AC6**〔auto〕新增 analyze-product 接口:上传产品图 → 返回 {productName,sellingPoints,targetAudience,category,...}。**team-lead独立真跑核验(非采信coder)：IMG_9454真图跑通，source=vision，4条sellingPoints非空，结构完整，key链路走用户key，finally有aclose，fallback存在。⚠️更正coder虚标:coder报conf=0.85，实测conf=0.4、productName空——vision诚实承认包装无字未瞎编(prompt'不沿用历史/不默认护肤品'生效,系统通用化方向对)。**
- ⬜ **AC7**〔human〕真实膏霜罐图(IMG_9439)提取:跑analyze → 卖点/人群合理(非乱编)，倩倩姐认可。

### 标题公式核对（已做，核对措辞贴北哥）
- ⬜ **AC8**〔human〕核对`_TITLE_FORMULA`5型措辞，对齐北哥例"黄皮素颜霜天花板！伪素颜焊在脸上"风格。

### 端到端真绿门槛（最高优先）
- ✅ **AC9**〔human·最小闭环已过〕真实数据全链路真跑通(task61,team-lead亲眼核对非采信状态码)：真膏霜罐图(IMG_9454)+真卖点(烟酰胺/水解珍珠/角鲨烷)+真人群(黄黑皮)+品牌(倍分子) → 出1文1图。**逐项核对**：①链路打通登录态→选品→文案→配图→pending_selection ✅ ②产品形态对(白磨砂罐非透明瓶)✅ ③背景无笔记本串味(新加负向约束⑤生效)✅ ④卖点真实(奶油质地/烟酰胺改善暗沉)✅ ⑤文案"倍分子"植入正确+banned_word=pass ✅ ⑥去AI化排版到位(中文标题清晰+emoji+卡点)✅。**认知纠正**：瓶身只印"素颜霜"=正确(瓶身=产品本身忠于参考图,品牌词进文案+图片文字层不P瓶身,倩倩姐2026-06-15拍板)。品牌词进生图特写图(第2/6张)需扩多图才能验,最小闭环只跑hook封面属正常。北哥最终认可待扩3套后整体过目。

## 待倩倩姐批次确认（攒批集中问，不一条条点）
- ✅合格线 80（倩倩姐2026-06-15二次拍板，coder擅改85已驳回改回80，落盘CLAUDE.md）
- ✅vision 走 GPT 现有通道最强档，不补 GEMINI_KEY
- ✅成分不单列字段，并入 selling_points

## 🔴 AC9 端到端真绿素材（北哥真实数据，已确认产品形态）
真身=**透明玻璃膏霜罐+白色磨砂拉丝盖+金边**，印"倍分子焕颜沁透水润/素颜霜/SKIN CREAM"。**与之前占位透明长瓶+木盖完全不同，task58/60产品形态全错**。
- **生图参考图首选**：`客户资料-北哥/素颜霜素材图/原图/IMG_9454.JPG`（单手持单罐，正面文字最清晰，形态完整）
- 质地近景实拍：`原图/IMG_9444.JPG`（手臂白色膏体涂抹，对应北哥"质地近景/涂抹过程"）
- 双罐展示：IMG_9439/9441
- 套2真实输入(来自文案3.txt)：品牌词=倍分子；产品名=素颜霜；卖点(并入selling_points)=烟酰胺改善暗沉提亮/水解珍珠锁水匀肤/角鲨烷裸妆奶油肌不卡纹/伪素颜不假白/洗面奶可卸；人群target_audience=黄黑皮；合规红线=禁美白祛斑速效，用提亮/自然/伪素颜
