# Clover 通关路线图（think 全流程产出）

> 产出日期：2026-06-09
> 方法：/think-router 复杂度评估 + 第一性原理倒推 + 坑点深挖（2个Explore agent审真实代码）+ 多视角校准
> 唯一标尺：`验收清单.md`——勾上某项才算完成（G2）；端到端一条龙跑通是闸门（G1）
> 状态图例：✅已勾(真验证) / 🔧进行中 / ⬜未开始 / 🔴致命坑 / 🟡阻塞坑 / 🟢风险

---

## 一、复杂度判断（Cynefin）

这是一件 **两段性质不同** 的事，不能用一个方法论盖全程：

| 段 | 性质 | 方法 | 对应验收 |
|----|------|------|---------|
| 第一段 生产链跑通 | **Complicated**（繁但确定） | 纵切片、逐接缝亲手验 | 第一道线 1A/1B/安全 |
| 第二段 过北哥抽检 | **Complex**（真探索） | 做真东西→北哥看→喂飞轮→迭代逼近 | 第二道线 |

五维：因果确定性🟡分裂(链清晰/质量探索) · 利益方🟢单(北哥) · 信息🟡中(质量标准缺) · 先例🟢高(产品包) · 约束🔴高(12红线)

## 二、方向收敛（项目真实方向）

1. **我之前的根本错误**：把"两段"当"一段"，用 Complicated 打法(修零件报完成)对待最终要 Complex 迭代的目标，所以越修越漂。
2. **不可逾越的闸门**：第二段(北哥抽检)无法启动，除非北哥能真的从登录走到下载、拿到真素材包。**"端到端一条龙跑通"=从 Complicated 跨进 Complex 的唯一闸门**。它之前，质量/多轨/飞轮/美化全是空中楼阁——这是 G1 的深层原因。
3. **飞轮(1B)不是收尾装饰，是第二段的发动机**：闸门撞开→北哥看真东西→飞轮喂料→逼近"过抽检、完整可用"。

## 三、残酷真相（坑点深挖结论）

"零件齐全"是假象。真串起来，从地基到下载 **连环死 9 处**（详见第四节）。这恰恰印证 G1：横向铺满零件，纵向接缝一次没对过。

---

## 四、全部坑点（基于真实代码深挖，按死亡顺序）

### A. 地基坑（服务起不来，整条龙=0）
| # | 坑 | 严重 | 位置 |
|---|----|------|------|
| D1 | backend/.env 不存在；根.env缺 JWT_SECRET/DATABASE_URL/MONGO_URI/REDIS_URL，FERNET_KEY是占位符 | 🔴 | config.py:15-19 |
| D2 | docker-compose 路径错位：nginx.conf 引用路径不存在，nginx必崩；compose只能从Clover根跑 | 🔴 | docker-compose.yml:94 |
| D3 | alembic迁移不自动跑，起来是空库，首请求即500；003/004 downgrade有PG语法(MySQL炸) | 🔴 | Dockerfile/main.py |
| D4 | 无种子脚本：无账号(登录必败)、无预置素颜霜(无可选)、无违禁词 | 🔴 | scripts/ 空 |

### B. 生成棒接缝坑（worker真跑必死）
| # | 坑 | 严重 | 位置 |
|---|----|------|------|
| G1坑 | text_variants 调 client.chat.completions.create，但AIClients无此方法→AttributeError，LLM文案永远出不来,只能退化本地草稿 | 🔴 | text_variants.py:20-33 |
| G2坑 | Gemini fallback 无key(gemini_key=None)→主通道挂必炸,图全失败 | 🔴 | pipeline_steps.py:49 |
| G3坑 | SSE error事件 workspace_id写死0→被前端过滤丢弃,失败时前端永久loading | 🔴 | tasks.py:138 |
| G4坑 | 图存相对路径,但main.py没挂StaticFiles→前端<img>全404 | 🔴 | pipeline_io.py:120 |
| G5坑 | storyboard角色名(pain_scene等)与ImageRole枚举(pain等)对不上→7/8角色fallback成MAIN,信息全丢 | 🔴 | constants.py:39 vs enums.py:89 |
| G6坑 | provider不匹配:预检查不验provider,worker硬查"openai",存"apiports"则白跑 | 🟡 | task_service.py:18 |
| G7坑 | Celery retry重复写候选(最多4倍脏数据) | 🟡 | tasks.py:81 |
| G8坑 | httpx.AsyncClient不close,每任务泄露连接 | 🟡 | gemini_factory.py:106 |

### C. 交付端坑
| # | 坑 | 严重 | 位置 |
|---|----|------|------|
| C1 | download-file带auth,但前端window.open无法附带token→401,下不了 | 🔴 | delivery.py:95 / components.tsx:36 |
| C2 | 打包硬判 url.startswith("uploads/"),改绝对路径则zip图为空 | 🟡 | packaging_task.py:55 |
| C3 | 前端缺postcss.config.js→样式全失效(已修✅) | 已修 | 已补 |
| C4 | 去水印Pillow未装则静默退化(不炸但功能失效) | 🟢 | image_postprocessor.py:39 |

**致命坑合计：D1-D4 + G1-G5坑 + C1 = 10个🔴**（撞闸门前必须全清）

---

## 五、策略（怎么打）

**核心策略：纵切片撞闸门，一次只通一棒，撞死就地修，禁止往下铺。**

- 打法不是"按坑点列表逐个修"（那是横向思维回潮），而是**沿一条龙从头走，走到哪棒死就修哪棒,修通立刻往下走**。坑点表是"预警地图",不是"施工顺序"。
- 每修通一棒 → 按 G2 报"勾上1A第X项,证据=可验证事实"。
- 同一接缝连续2次修不通 → 按§3撞墙规则 Pivot,报你介入。
- **最小一条龙的"最丑"标准**：1产品·1条文案·1张图·1次审核·1个包。多轨/8图/美化/飞轮全部押后。

## 六、全方位行动方案（三层）

### 目标层（O）
北哥1名熟手,浏览器里独立走完[登录→选素颜霜→传图→生成→选稿→组长审→下载素材包],不靠开发,产出过北哥抽检。

### 阶段层（里程碑 = 验收线）
```
M0 地基通  → 服务起来+有账号+有素颜霜     → 勾 1A-1
M1 一条龙通→ 最丑端到端跑通(撞开闸门)      → 勾 1A-2/3/7/8/9/10/11/12/13 (9项)
   ━━━━━━━━━ 闸门:北哥能看真东西了 ━━━━━━━━━
M2 飞轮通  → 1B四点+第一道线补全(多轨/违禁词/N图) → 勾完1A剩余+1B四点+安全
M3 抽检通  → 北哥真看真喂料,质量迭代逼近    → 第二道线(Complex,迭代非规划)
M4 上线    → 飞轮启动+独立AI审核            → 第三道线
```

### 执行层（M0+M1 = 撞闸门,当前唯一战场,逐棒）
| 棒 | 动作 | 清掉的坑 | 勾上 |
|----|------|---------|------|
| 0a | 修docker-compose路径+补backend/.env全变量 | D1 D2 | — |
| 0b | 写种子脚本(3账号+素颜霜+5违禁词)+迁移自动跑 | D3 D4 | — |
| 0c | docker起全栈,熟手登录看到素颜霜 | — | **1A-1** |
| 1 | 选素颜霜+传图+建任务,抓包验无明文key | — | **1A-2,1A-3** |
| 2a | 修文案鸭子类型(G1坑)→真出1条文案 | G1坑 | 1A-5(部分) |
| 2b | 修生图provider/fallback(G2,G6坑)→真出1张图 | G2 G6坑 | **1A-7** |
| 2c | 修图片StaticFiles(G4坑)+角色枚举(G5坑) | G4 G5坑 | — |
| 2d | 修SSE error事件(G3坑)→进度+失败可见 | G3坑 | **1A-8** |
| 2e | 验去水印过流水线(C4) | C4 | **1A-11** |
| 3 | 挑这条文案+这张图 | — | **1A-9** |
| 4 | 组长登录看队列→通过 | — | **1A-10** |
| 5a | 修下载401(C1坑)→fetch+blob下载 | C1坑 | — |
| 5b | 打包→熟手下载→打开zip确认能用 | C2 | **1A-12,1A-13** |

**撞闸门验收**：M1走完,1A 13项勾上9项(1A-1/2/3/7/8/9/10/11/12/13),北哥能看真东西→闸门开。
剩4项(1A-4标杆8特征/1A-5文案双轨/1A-6违禁词三级/部分)归M2加深。

---

## 七、多视角校准（自检盲点）

**视角1·北哥实用主义**："我要的是能用,不是你内部跑通。"
- ⚠️盲点:M1用我(开发)跑通≠北哥熟手能跑通。M1验收必须**北哥本人或我模拟纯小白点**,不能我用脚本验通就算。→ 修正:M1验收标准加一条"非开发视角点完全程"。
- ⚠️真出图烧北哥key额度。→ M2前每次真跑都提前报你,你授权再跑。

**视角2·QA挑刺**："你怎么保证这次不又是假跑通?"
- ⚠️盲点:坑点是静态读码挖的,真跑可能冒新坑(尤其异步/Celery/Redis时序)。→ 修正:M1每棒"真点真看真下载",不接受单元测试代替;冒新坑就地加入坑表。
- ⚠️10个🔴是"已知致命",可能有"未知致命"。→ 接受,纵切片的意义就是用真跑把未知逼出来。

**视角3·倩倩姐战略**："方向对不对,节奏谁定?"
- ✅两段论+闸门+飞轮发动机=方向收敛清晰。
- ⚠️节奏判断权在你:M0→M1是否一口气推?还是M0先给你验一次再推M1?→ 待你拍。
- ⚠️Lead这次还用不用?它之前空转。→ 建议M0/M1我亲自逐棒干(链路串通需要全局视野,不适合派),M2加深再用团队并行。待你拍。

## 八、待你拍板（3个判断点）
1. **方向收敛**(两段论/闸门/飞轮发动机)校准了吗?
2. **节奏**:M0通了先停给你验,还是M0+M1一口气撞到闸门?
3. **谁干**:M0/M1我亲自逐棒(推荐),还是仍走Lead团队?

闸门撞开前,这份图就是唯一作战地图。每勾一项我按G2报证据。

---

## 九、【归一·补漏】质量内核坑（之前漏挖,北哥方法论只落地25-30%）

> 教训:我把"已回填的质量标准"误判成"以后迭代的质量探索",整段漏挖。北哥最值钱的方法论(北哥回填解读与落点.md §3/§4)现在就该在代码里。
> 铁律A守住了✅:无硬编码"倍分子"/89元/玻尿酸,方法层数据层隔离干净。

| # | 北哥要的(方法层,全品类共用) | 现状 | 性质 |
|---|------------------------------|------|------|
| Q1 | 随机变量池ABC:身份场景×起因情绪×小缺点 各随机抽1,N条不撞,池可扩展 | **0行** | 🔴反同质化命脉 |
| Q2 | 5步框架:Hook暴击低价→痛点共鸣→救星登场→卖点罗列(✅小标题)→逼单 | 旧7步SOP,逻辑全错 | 🔴 |
| Q3 | 正文四段(痛点→实测→种草→引导)+350-400字+3-5段空行 | 180-260字,无四段 | 🔴 |
| Q4 | 佛系反推销人设("东西放这了买不买跟我没关系")+70%场景30%产品 | **0行** | 🔴 |
| Q5 | 违禁词:negative类(神器/福音/救急单品/遮羞布/日常维稳/精简底妆/不仅而且/焕发/守护/尽享)**prompt负向约束不准写进正文**,非auto_fix事后替换;遮羞布漏收 | 走auto_fix替换+漏遮羞布 | 🟡机制错 |
| Q6 | 6图顺序:封面痛点大字→单品特写+品牌词→成分→质地→上脸对比→促单;品牌词2/6张·转化句6·对比5 | 顺序3/6不匹配 | 🟡 |
| Q7 | 反AI味+防人群重叠+防场景重复(北哥最大痛点) | 仅相似度去重,无源头prompt约束 | 🟡 |
| Q8 | 标题公式(肤质/价格/功效/夸张/标题党各5词例) | 笼统一句 | 🟢 |

## 十、撞闸门新定义(工程+质量合一)

**闸门 = 跑通 AND 产出合格。** 只通工程→跑通但AI味垃圾,北哥毙;只改质量→跑不起来,等于没改。M1每棒"修工程接缝 + 落北哥方法论"一次到位:

| 棒 | 工程(清坑) | 质量(落方法论) | 勾验收 |
|----|-----------|---------------|--------|
| 2a 出文案 | 修鸭子类型G1坑 | 落Q1变量池+Q2 5步+Q3四段350字+Q4佛系人设+Q7反AI味+Q8标题 | 1A-5 |
| 2b 出图 | 修provider/fallback G2/G6坑 | 落Q6 6图顺序对齐 | 1A-7 |
| 2c 图可见 | 修StaticFiles G4+角色枚举G5坑 | Q6角色名统一 | — |
| 2d 进度 | 修SSE G3坑 | — | 1A-8 |
| 2e 去水印 | 验C4 | — | 1A-11 |
| (违禁词) | — | 落Q5 negative改prompt负向约束+补遮羞布 | 1A-6部分 |

**M1验收(双标准)**:①北哥/纯小白视角点完全程能下载 ②产出3条文案"像素人不同质化",北哥认可。机器测试过不算过。

## 十一、节奏(按推荐)
M0通了先停给倩倩姐验一次(看到登录+素颜霜)→再推M1。M0/M1我亲自逐棒(链路串通+方法论落地需全局视野),M2加深再用团队并行。
