# 北哥/倩倩姐验收反馈 + 功能差距盘点

> 记录时间：2026-06-12
> 触发：倩倩姐用 qianqian 账号实跑前端，发现大量问题。要求：①先记录全部问题 ②原始需求 vs 现状做完整对比，代码层验证，交叉2-3轮，列出未实现项。

---

## 一、倩倩姐本次实跑提出的问题（原话拆解，一条不漏）

### A. 产品管理
- A1. 选品/建任务时**不能填写其他产品**，库里只有一个"素颜霜预置样本"。
- A2. **没有产品上传入口**——产品参考图没地方上传。

### B. 文案（选择文案页，截图1）
- B1. 前两个文案卡片（83分、66分）的**评分明细进度条全是0**（标题0/情绪0/买点0/关键词0/合规0），但总分却有83/66——评分明细丢失或没渲染。后三个（75/59/76）有明细。
- B2. **80分以下的文案为什么还放出来**了（66/59/76 都<80）——评分门槛/过滤逻辑存疑（需确认原始需求是过滤还是全展示）。
- B3. **文案到底用的什么文案方法论**——质疑文案套路（佛系人设 vs 源头小红书7步SOP，此前 deferred 未决）。

### C. 图片（选择图片页，截图2/3/4）
- C1. **产品不一致**——生成图里的产品包装和参考图对不上（参考图是64字节占位图导致）。
- C2. **图片没办法自动缩放**——窗口变化时图片不自适应。
- C3. **第一张(hook)字体是错的**——大标题"5符种岜门/熿韵遾愳/扶妢/絹琝诙妢"全是乱码错字（gpt-image-2 中文渲染翻车，连大标题都错）。
- C4. **只生成1套6张图，应该最少3套不同的供选择**。
- C5. **没有一张图能放大**——点击图片无法查看大图。
- C6. **窗口最小化后内容被截断**（响应式布局缺失）。
- C7. **生成的更像电商详情图，跟小红书压根不匹配**——风格定位错误。

### D. 路由/页面
- D1. **任务列表等页面 404**（截图4：/tasks/40/images 切到任务列表报 404 This page could not be found）。

### E. 功能缺失
- E1. **没有看到"爆款裂变"功能**——飞轮/裂变板块缺失或没入口。

### F. 流程/进度
- F1. 文案页"前面两个进度条没展示"（同 B1，进度/评分条渲染问题）。

---

## 二、原始确认的功能板块（已从 PRD/验收清单/API契约/通关路线图/北哥回填提取）

> 来源：PRD-0总纲 §5 全流程5环节 / PRD-前端 / PRD-后端 / 验收清单1A+1B / API契约 / 北哥回填解读

### 一期(1A 生产链)必做的5大环节（PRD-0 §5）
1. **产品配置**（管理员录）：卖点/品牌词/违禁词三级/标签/风格调性/可调prompt/**参考图上传**
2. **生成文案（双轨）**：轨A一次出N角度 / 轨B导入外部文案；五维评分(标题25/情绪25/买点25/关键词20/合规5)，**总分<90不进候选池**
3. **生成图（分镜）**：gpt-image-2主+edits带产品参考图+禁纯文生图；storyboard N张(1-8)各担角色；6图对齐北哥标准序；provider主备+重试退避
4. **爆款裂变（1爆款→N笔记包）**：每包完整(标题+正文+标签+分镜)；卖点/标签/人群锁定；参考度低30/中/高85可调  ← **一期范围**
5. **存档打包交付**：达人素材包(按笔记分文件夹+01/02命名+文案.txt+发布清单+合规说明)；去水印(重编码去C2PA+削像素水印)

### 飞轮四点(1B，基石E)
- events写入(选文案+3/选图+3/通过+5/打回-3/重生成-1) / aggregator返片段 / 下次prompt含片段 / UI显"本次已注入"

### 前端页面(PRD-前端)
- 登录 / 工作台 / 开新任务(选品+主题+数量+双轨入口+右侧配置预览3参考图+本次已注入横幅) / 选择文案(N卡+五维分条) / 选择图片(N批+SSE谁好谁先冒+套版预览) / 确认预览 / 组长审核台(/review) / 历史归档(任务列表+导出包) / 配置台(/config, 产品CRUD+参考图上传+标杆+成员+key只录不显余额+违禁词CRUD)
- 角色守卫：/review限组长+管理员, /config限管理员
- SSE：先换60s短票再建连, 禁token直传; 5次重连退避; event_seq去重

### 关键细节点(逐条可核)
- D-1 产品参考图上传入口(配置台屏1明确要)
- D-2 文案五维评分展示+总分
- D-3 文案90分门槛后端过滤(<90不进池)
- D-4 图片放大: **PRD未明确要求**(但属基础体验)
- D-5 图片响应式缩放: **PRD未明确**(PC最小1280px)
- D-6 一次生成: 1套N张(N=image_count) ←PRD设计; **倩倩姐要3套选=超出原PRD,待确认**
- D-7 爆款裂变页: 一期范围, 当前**疑似缺失**
- D-8 任务列表页: /history 应有
- D-9 小红书风格(非电商): 无独立定义, 靠 style_tone 字段 + prompt
- D-10 SSE实时进度(谁好谁先冒/单批失败重试/能离开)
- D-11 第1张图中文乱码: gpt-image-2渲染硬伤(记忆已记, 未解)

### 【补全】上一轮盘点遗漏的原始需求（来自北哥回填/洞1-7/扒包萃取/豆包prompt）

> 倩倩姐指出"讨论方案时远比这多"。重新通读 北哥回填解读 / test洞1-7 / 官网V1萃取 / 产品包扒包 / banana扒包 后补全，这些是之前漏掉的硬需求：

**北哥文案方法论（豆包prompt原话，最高优先级）**
- N-文1 佛系反推销人设"东西放这了买不买跟我没关系"
- N-文2 随机变量池ABC：身份场景5×起因情绪3×小缺点3，每条随机抽不撞（反同质化命脉）
- N-文3 5步框架：Hook暴击低价→痛点共鸣→救星登场→卖点罗列(带✅小标题)→逼单（**不是旧7步SOP**）
- N-文4 正文四段：痛点→实测→种草→引导；350-400字；3-5段空行
- N-文5 70%场景 30%产品 比例
- N-文6 标题5公式：肤质/价格/功效/夸张/标题党，每条不同类型
- N-文7 反AI味负向词禁入正文（神器/福音/遮羞布/日常维稳/精简底妆/不仅而且/焕发/守护）——是prompt负向约束**不是事后auto_fix替换**
- N-文8 品牌词必植入文案正文（北哥"种品牌词引导天猫搜"核心诉求）

**北哥生图规则（豆包prompt+回填原话）**
- N-图1 6张固定套路序：①封面痛点大字②单品特写+品牌词③成分④质地⑤上脸对比⑥促单
- N-图2 品牌词出现在第2/6张，转化句在第6张，对比在第5张
- N-图3 好图标准：高清+构图居中+字粗大+图文匹配
- N-图4 效果对比图AI优先(实拍备)，静物图实拍优先(AI备)
- N-图5 排版并入生图(AI直接把字排图上出成品)，不做独立排版环
- N-图6 成组视觉统一(buildVisualSystem)：一套N张共享主色/字体/贴纸
- N-图7 素材路由：产品图=商品锚点不可改 / 实拍图=肤感场景 / 爆款图=只学版式不用内容

**标杆/爆款分析（北哥13环+扒包split.js）**
- N-标1 标杆分析出**8特征**(SSE analyze_done带features:[8特征])——提取标题句式/开篇痛点/评论刚需
- N-标2 爆款参考度三档：低30(只学结构)/中(学节奏局部替换)/高85(学标题节奏换表达防抄袭)
- N-标3 裂变维度标注：换了哪个维度/目标人群/场景/痛点点位
- N-标4 裂变必须改全文+重拍图，不变卖点/标签/人群（N-19北哥死命令）
- N-标5 裂变笔记综合评分(scoreCompleteNote=文案五维+图文完整度15分)

**违禁词三级（洞5拍板）**
- N-违1 三级：🟢auto_fix视觉类自动改(前后对比→质地说明) /🟡soft_warn功效词标黄给建议(美白→提亮?) /🔴hard_block高危词必改(医用/药妆)
- N-违2 词库可配置+可批量导入(北哥词远超预置5条)+北哥可调分级
- N-违3 "遮羞布"等AI味词要单独分类入库(北哥最大痛点)
- N-违4 双保险：生成时prompt规避 + 发布前检查两道关

**去水印（洞3拍板）**
- N-水1 出图后**必经工序**：重编码去C2PA元数据 + 转JPG/轻重采样削SynthID像素水印 + 压缩
- N-水2 诚实边界：C2PA 100%可去，像素水印只能削弱
- N-水3 去水印严守3:4比例不变形

**交付/数据归属（洞6+洞7拍板）**
- N-交1 素材包结构：发布清单.txt(自解释发几条/配图序/文案/标签) + 笔记N_角色/文件夹(01/02/03命名) + 文案.txt(标题+正文+标签) + 合规说明.txt
- N-交2 数据归属分层：客户输入物+产出物归客户可导出 / 飞轮偏好归平台不随客户走
- N-交3 **数据可导出一期就做**(洞7)，全表加workspace_id隔离
- N-交4 下载必须fetch+blob(window.open无法带token会401)

**标杆采集（洞1拍板）**
- N-采1 一期对外标配=截图上传+手填亮点(零平台风险)，系统不碰小红书服务器
- N-采2 登录态采集插件=二期北哥内部自用opt-in，不进对外标配

**工程底座（架构方案+banana扒包）**
- N-工1 ai_call_logs：每次AI调用记谁/用多少token，失败归因到个人key（**一期必做**）
- N-工2 健康检查 GET /health
- N-工3 同用户并发生成任务上限2(可配)
- N-工4 上传安全：magic number校验+扩展名白名单+路径穿越防护
- N-工5 三层兜底文案：Claude→Gemini→本地模板(buildLocalDrafts永不空手)
- N-工6 去重系统：标题相似度≥0.82判重 / 正文开头签名去重
- N-工7 角度槽位机制(每条强制不同角度)做成可迁移数据
- N-工8 product.js产品图视觉分析→visualIdentity(主色/字体/包装风格)供生图用

**前端工程（PRD-前端）**
- N-前1 errorCodeMap错误码映射表(9类错误码→文案+处理动作)
- N-前2 骨架屏(文案卡/图卡/审核队列loading)
- N-前3 无key时按钮置灰+首登强制引导配key页
- N-前4 4个Store(authStore/taskStore/generationStore/preferenceStore)
- N-前5 token刷新(JWT失效自动刷新,失败跳登录)
- N-前6 套版预览(选中图+文案→拼成笔记长相)

---

## 三、现状 vs 需求 差距清单（代码层 3 轮交叉验证）

> 验证方式：4 个 Explore agent 并行扫码（前端/后端接口/生图文案/DB飞轮），关键质疑项倩倩姐亲自复核读码 2 轮。每条附 `文件:行号` 证据。
> 图例：✅已实现 / 🟡半实现 / ❌未实现 / 🐛有bug

### 3.1 倩倩姐质疑项 — 逐条结论

| 编号 | 问题 | 结论 | 代码证据 | 根因 |
|---|---|---|---|---|
| A1 | 不能填别的产品 | 🟡 能建产品但入口只在配置台 | products CRUD全在 `api/v1/products.py:64-131`；新建表单只挂 `/config`，`NewTaskForm.tsx:47` 任务页只能选不能建 | 任务页缺"快捷新建产品"按钮（设计取舍，非bug） |
| A2 | 没有产品上传入口 | ✅ 入口存在 | 后端 `products.py:150` `POST /products/{id}/upload-image` 写 image_path；前端 `ProductSubComponents.tsx:73` file input | 入口在配置台产品卡内，倩倩姐没找到≈可见性问题 |
| B1 | 评分明细进度条全是0 | 🐛 SSE推送时五维占位0靠异步补 | `useSse.ts:83` 推送时填 `{title:0,emotion:0...total:X}`，88-93行再异步GET补全 | SSE只推总分(`useSse.ts:77` score是number)，五维详情靠后续接口补，慢/缺字段就长期显示0 |
| B2 | 80分以下文案为何放出来 | 🐛 **90分门槛形同虚设** | `text_variants.py:136` 返回含passed=False全部候选；`pipeline_io.py:96-106` 无差别写库无`if not passed:continue` | 门槛只算分标记`passed`，存库时根本不按它过滤。低分全进池 |
| B3 | 文案用什么方法论 | ✅ 佛系人设+5步+变量池ABC+反AI味 | `_text_prompt.py:12`(佛系人设)/`:66`(5步框架)/`:19`(变量池ABC)/`:94`(反AI味) | 方法论已落地，是否对北哥胃口=产品决策 |
| C1 | 产品不一致 | 🟡 测试时参考图是64字节占位 | `pipeline_io.py:150` 无参考图硬失败逻辑正确；本次是测试数据问题 | 上真实产品图即可解，非代码缺陷 |
| C2/C6 | 图片不缩放/窗口截断 | ✅ 响应式CSS已有 | `images/page.tsx:55` `grid-cols-3 xl:grid-cols-5`；`:65` `w-full aspect-square object-cover` | agent判定不会截断；需倩倩姐复现确认是否别处 |
| C3 | 第一张字体乱码错字 | 🐛 **纯靠模型画中文字，无叠字兜底** | `image_gen.py:145` prompt只描述文字让模型自画；全`ai_engine/`无PIL叠字 | gpt-image-2中文渲染弱是已知模型局限，缺服务端Pillow叠字方案 |
| C4 | 只1套6张，要≥3套 | 🐛 **架构只产1套N张** | `image_gen.py:121-173` 单个storyboard逐张生成返回扁平list；调用链只跑一次 | 无"套"概念，需加外层循环生N套 |
| C5 | 图片不能放大 | ❌ 无lightbox | 全局搜lightbox/放大/zoom = 0结果；`images/page.tsx:60` onClick只做选中 | 功能未做 |
| C7 | 像电商图不像小红书 | 🟡 风格词有但防御弱 | `constants.py:58` 有"小红书种草风"；但仅closer角色禁电商风(`storyboard_templates.py:53`)，其他角色无负向词 | 缺强负向约束"禁白底产品图/禁电商详情图" |
| D1 | 任务列表404 | 🐛 **导航指向不存在的路由** | `Sidebar.tsx:22-26` `/images`、`/tasks/build`、`/tasks/list` 三个href均无对应page.tsx | 导航错配 |
| E | 没看到爆款裂变 | ❌ **全栈零实现** | 前后端+DB+worker全局搜裂变/split/fission = 0业务代码 | PRD一期范围，完全没建 |

### 3.2 原始需求模块 — 整体实现度

**后端接口（API契约）**：核心链路基本齐
- ✅ 认证/工作区切换、API Key(只显后4位)、产品CRUD+图上传、违禁词三级、SSE一次性ticket、审核台approve/reject、打包下载、飞轮三信号+context — 全部有码
- 🐛 90分过滤失效（见B2）
- 🟡 轨B导入文案`task_actions.py:76` 只存库**不评分不查违禁词**（worker版`text_variants.py:139`才完整）
- ❌ 标杆"出8特征"分析：`BenchmarkNote`只存手填highlights，无AI结构化分析
- ❌ 爆款裂变接口

**生图/文案核心**：
- ✅ 6图角色对齐北哥序(`storyboard.py:75`)、provider主备+退避(`image_gen.py:34-117`)、禁纯文生图硬拦(`pipeline_io.py:150`)、去水印(`image_postprocessor.py`)、文案双轨+方法论、五维评分逻辑(`_scoring_dims.py`)
- 🐛 生图只1套(C4)、中文叠字乱码(C3)、90分不硬拦(B2)
- 🟡 品牌词：注入逻辑在(`storyboard.py:133`)但**products表无brand_keyword列**(`models/product.py:20-54`确认无)，运行时永远空，第2/6张品牌词静默失效
- 🟡 电商风负向约束弱(C7)

**数据库**：15张表齐全有迁移(001-007)。唯一缺口：products表缺`brand_keyword`列。eval_score正确留NULL未接假评分。多租户`workspace_id`双层过滤到位。

**飞轮四点**：✅ 全通——写入(`task_actions.py:49`选文案/`review.py:113`通过/`:139`打回)、聚合(`flywheel_service.py:71`)、注入(`pipeline_steps.py:71`+`pipeline_io.py:69`)、UI已注入事件(`tasks.py:94`)、前端横幅(`FlywheelBanner.tsx`挂3页)。

**前端页面**：9个核心页在(login/dashboard/tasks.new/text/images/confirm/review/history/config)。缺：`/tasks/list`、`/tasks/build`、`/images`、爆款裂变页。

### 3.3 必须修的清单（按优先级）

**P0 阻断验收**
1. 🐛 90分门槛过滤 — `pipeline_io.py:96` 加 `if not c.get("passed"): continue`（B2）
2. 🐛 导航404 — `Sidebar.tsx:22-26` 删/改三个坏链接（D1）
3. 🐛 生图≥3套 — `image_gen.py` 加外层循环 / 新增 image_sets_count（C4）
4. 🐛 中文乱码 — `image_postprocessor` 后加 Pillow 中文字体叠标题（C3）

**P1 核心缺口**
5. 🟡 brand_keyword字段 — ORM加列+迁移008+`build_product_dict`映射+DTO（品牌词）
6. ❌ 图片放大 lightbox（C5）
7. 🟡 电商风负向prompt强化（C7）
8. 🐛 五维分条全0 — SSE直接推score对象 / 前端补全兜底（B1）

**P2 功能立项**
9. ❌ 爆款裂变（1爆款→N笔记）— PRD一期范围，需从0设计表+worker+前端页（E）
10. ❌ 标杆8特征分析
11. 🟡 轨B导入补评分+违禁词检测

**产品决策待倩倩姐/北哥拍板**
- 文案方法论：代码已落地北哥5步框架(非旧7步)，是否对北哥胃口需北哥真看（B3）
- 3套的"套间差异"策略（不同角度/不同风格/不同封面？）
- brand_keyword 录入在产品级还是任务级

---

## 四、补全需求的代码层验证（本轮新增，对应第二章【补全】项）

> 倩倩姐指出上一轮漏了大量讨论过的需求。这一节对补全项逐条给代码结论。**重大发现：北哥文案方法论此前项目文档标记"只落地25-30%"(BUG-14)，本轮亲自读 `_text_prompt.py` 全文确认——已全部落地，那条诊断是过时记录。**

### 4.1 北哥文案方法论 — ✅ 已全部落地（推翻旧诊断）

亲自读 `_text_prompt.py` 逐行确认：

| 需求 | 结论 | 证据 |
|---|---|---|
| N-文1 佛系人设 | ✅ | `_text_prompt.py:12-15` `_PERSONA`原话"东西放这了…" |
| N-文2 变量池ABC | ✅ | `:19-46` 三池+`_pick_combo`每条随机抽；`:140` 按count抽N组 |
| N-文3 5步框架 | ✅ | `:67-73` Hook→痛点→救星→卖点✅→逼单，**确是5步非7步** |
| N-文4 四段350-400字 | ✅ | `:75-82` 四段结构+`:81`字数+空行 |
| N-文5 70/30比例 | ✅ | `:15` "70%场景30%产品绝不颠倒" |
| N-文6 标题5公式 | ✅ | `:85-92` 肤质/价格/功效/夸张/标题党各带词例 |
| N-文7 反AI味负向词 | ✅ | `:50-54`+`:94-101` 负向词prompt约束(非事后替换，机制正确) |
| N-文8 品牌词植入文案 | 🟡 | `:147` 注入逻辑在，但读`product.get("brand_keyword")`，**products表无此列→永远空→静默失效**(同生图品牌词根因) |

### 4.2 其余补全项 — 代码结论

| 需求 | 结论 | 证据/缺口 |
|---|---|---|
| N-标1 标杆出8特征 | ❌ | `BenchmarkNote`只存手填highlights，无AI分析；SSE虽定义analyze_done但无8特征产出 |
| N-标2~5 爆款裂变全套 | ❌ | 全栈零实现(参考度/维度/裂变评分都没有) |
| N-违1 违禁词三级 | ✅ | `banned_word_checker.py:71-112` 三级auto_fix/soft_warn/hard_block |
| N-违2 词库可配置 | ✅ | banned_words表+CRUD接口；批量导入未见独立接口(可逐条POST) |
| N-违3 遮羞布入库 | ✅ | `_text_prompt.py:51` 负向词含"遮羞布/日常维稳/精简底妆" |
| N-水1 去水印必经工序 | ✅ | `image_postprocessor.py` 重编码去C2PA+转JPG+重采样；`pipeline_io.py:174`已集成 |
| N-水3 严守3:4比例 | 🟡 | 后处理按原尺寸重采样，未见强制3:4校验(生图prompt要1080×1440) |
| N-交1 素材包结构 | ✅ | `package_exporter.py` 笔记夹+01/02命名+文案.txt+发布清单+合规说明 |
| N-交3 数据可导出 | 🟡 | 打包下载=产出物导出有；**输入物(产品/标杆)整体导出未见**专门接口 |
| N-交4 下载fetch+blob | ❓ | 需查前端下载实现是否用window.open(待验证) |
| N-采1 截图手填标杆 | ✅ | `benchmarks.py` 截图url+highlights手填 |
| N-工1 ai_call_logs | ✅ | `models/flywheel.py:63` 表在；`pipeline_io.py:80` 有写入 |
| N-工2 GET /health | ❓ | 待确认路由是否注册 |
| N-工3 并发上限2 | ❓ | 环境变量IMAGE_CONCURRENCY=2是生图并发，任务级并发限制待确认 |
| N-工4 上传安全 | ❓ | products上传是否做magic number校验待查 |
| N-工5 三层兜底文案 | 🟡 | 本地兜底`build_local_drafts`在；Claude→Gemini双层兜底待确认是否接 |
| N-工6 去重系统 | ✅ | `dedupe_copies`(text_variants.py:136调用) |
| N-工7 角度槽位 | ✅ | text_angles产品档案字段+`build_prompt:146`注入 |
| N-工8 产品图视觉分析 | ❌ | 无product.js等价的visualIdentity分析(主色/字体提取) |
| N-前1 errorCodeMap | ❓ | 前端错误码映射表待查 |
| N-前2 骨架屏 | ❓ | 待查 |
| N-前3 无key置灰引导 | ❓ | 待查 |
| N-前6 套版预览 | 🟡 | confirm页有预览，"封面+内页拼笔记长相"完整度待查 |

### 4.3 本轮新增的"未实现/待查"清单（补进第三章P级）

**新确认 ❌ 未实现（之前漏列）**
- 标杆8特征分析（N-标1）
- 爆款裂变全套（N-标2~5，与E同）
- 产品图视觉分析visualIdentity（N-工8）
- 输入物整体导出（N-交3部分）

**🟡 半实现/隐患（之前漏列）**
- 文案品牌词植入静默失效（N-文8，与生图品牌词同根因：products表缺brand_keyword列）
- 去水印3:4比例无强制校验（N-水3）

**❓ 需补一轮验证（本轮时间未及，诚实标注未确认）**
- 下载是否fetch+blob还是window.open（N-交4，影响401）
- GET /health、任务并发上限2、上传magic number校验、Claude→Gemini文案兜底
- 前端：errorCodeMap、骨架屏、无key置灰引导、套版预览完整度

> ❓项我没有当场全部读码确认，不糊弄、如实标注。倩倩姐若要，我下一轮把❓全部读码坐实。
