将 Clover 从上层产品包旧仓库中独立出来,建立专属版本控制。 当前状态=纵切片端到端已打通(登录→选品→出文出图→审核→下载包), M1文案质量去套路化已验收。此提交作为后续按核销清单逐条修复的基线。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 KiB
Clover 通关路线图(think 全流程产出)
产出日期:2026-06-09 方法:/think-router 复杂度评估 + 第一性原理倒推 + 坑点深挖(2个Explore agent审真实代码)+ 多视角校准 唯一标尺:
验收清单.md——勾上某项才算完成(G2);端到端一条龙跑通是闸门(G1) 状态图例:✅已勾(真验证) / 🔧进行中 / ⬜未开始 / 🔴致命坑 / 🟡阻塞坑 / 🟢风险
一、复杂度判断(Cynefin)
这是一件 两段性质不同 的事,不能用一个方法论盖全程:
| 段 | 性质 | 方法 | 对应验收 |
|---|---|---|---|
| 第一段 生产链跑通 | Complicated(繁但确定) | 纵切片、逐接缝亲手验 | 第一道线 1A/1B/安全 |
| 第二段 过北哥抽检 | Complex(真探索) | 做真东西→北哥看→喂飞轮→迭代逼近 | 第二道线 |
五维:因果确定性🟡分裂(链清晰/质量探索) · 利益方🟢单(北哥) · 信息🟡中(质量标准缺) · 先例🟢高(产品包) · 约束🔴高(12红线)
二、方向收敛(项目真实方向)
- 我之前的根本错误:把"两段"当"一段",用 Complicated 打法(修零件报完成)对待最终要 Complex 迭代的目标,所以越修越漂。
- 不可逾越的闸门:第二段(北哥抽检)无法启动,除非北哥能真的从登录走到下载、拿到真素材包。"端到端一条龙跑通"=从 Complicated 跨进 Complex 的唯一闸门。它之前,质量/多轨/飞轮/美化全是空中楼阁——这是 G1 的深层原因。
- 飞轮(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→前端 |
🔴 | 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个判断点)
- 方向收敛(两段论/闸门/飞轮发动机)校准了吗?
- 节奏:M0通了先停给你验,还是M0+M1一口气撞到闸门?
- 谁干: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加深再用团队并行。