---
title: "feat: GEO Platform Monetization Closed Loop"
type: feat
status: completed
date: "2026-05-31"
origin: docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md
secondary-origin: docs/brainstorms/2026-05-31-geo-platform-monetization-closed-loop-requirements.md
---

## Summary

修复 GEO 诊断系统（当前空输入=0 分）、建设免费 GEO 健康分获客入口、接入真实支付与功能限制、添加 AI 内容生成能力、打通内容分发与效果归因闭环，实现从获客到续费的完整商业变现链路。同时用 API 契约测试驱动核心功能修复，辅以少量 E2E 烟雾测试验证关键用户路径。

## Problem Frame

GEO 平台已具备 8 个 Agent、6 维度诊断框架、内容 Pipeline、知识库 RAG 等模块，但三个致命问题阻断了变现闭环：(1) 诊断系统使用空输入调用，永远返回 0 分，产品核心价值为零；(2) 内容 Pipeline 只做格式化不生成内容，核心付费功能缺失；(3) 支付是模拟的，没有功能限制，用户无付费动力。此外，Onboarding 缺少付费墙触发点、分发没有实际发布集成、监控没有归因逻辑、邮件服务未接入业务系统——各模块存在但互不连通。

## Requirements

Origin: `docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md`

- R1. 修复诊断系统：实现自动数据采集，让诊断产出非零有差异的评分 → U1
- R2. 添加 AI 内容生成阶段：在 ContentPipeline 前端添加 Stage 0 → U5
- R3. 接入真实支付：微信支付+支付宝+功能限制中间件 → U4
- R4. 建设免费 GEO 健康分公开页面 → U2
- R5. 重设计 Onboarding 流程，嵌入付费墙触发点 → U3
- R6. 执行闭环：内容分发集成微信/知乎/头条 → U5
- R7. 效果归因系统 → U6
- R8. 为诊断 API 编写契约测试 → U1
- R9. 为公开健康分 API 编写契约测试 → U2
- R10. 为内容生成 API 编写契约测试 → U5
- R11. 为支付 API 编写契约测试 → U4
- R12. 编写跨步骤集成测试 → U8
- R13. 编写获客路径 E2E 烟雾测试 → U9
- R14. 编写核心流程 E2E 烟雾测试 → U9
- R15. 完成后端测试目录统一验证 → U8
- R16. 建立共享 fixture 体系 → U8

## Key Technical Decisions

KTD-1. **诊断自动数据采集采用"AI 平台查询+CitationRecord 分析"双通道方案（V1 跳过网站爬取）。** 通过调用现有 AI 平台适配器查询品牌关键词分析引用情况，通过分析已有 CitationRecord 数据聚合引用指标。网站爬取通道留待 V2 迭代，降低首版复杂度。AI 平台查询填充"引用就绪度"维度，CitationRecord 分析填充"E-E-A-T/主题权威"维度，品牌官网 URL 解析填充"内容可提取性/Schema 标记"维度（基于简单 HTTP GET + HTML 解析，非完整爬取）。

KTD-2. **免费 GEO 健康分页面为独立公开页面，不依赖现有 Dashboard。** 新建 `/health-score` 路由，无需认证即可访问。结果缓存 24 小时（按品牌名+竞品哈希），避免重复查询消耗 API 额度。

KTD-3. **支付集成采用微信支付+支付宝双通道。** 使用官方 SDK，后端实现支付回调 Webhook 处理订阅状态更新。

KTD-4. **AI 内容生成集成到现有 ContentPipeline 前端。** 在 Stage 1(RuleValidator) 之前添加 Stage 0(AI Generator)，基于诊断结果+RAG 知识库+LLM 生成初稿，后续阶段不变。

KTD-5. **效果归因采用"内容发布时间窗口+引用变化关联"方案。** 发布内容时记录时间戳和基线引用数据，2-4 周内定期检查引用变化。

KTD-6. **微信公众号采用半自动模式。** 生成内容+格式化+一键复制，用户手动粘贴到公众号编辑器。知乎和头条利用 API 实现自动发布。

KTD-7. **API 契约测试驱动修复，E2E 仅做烟雾测试。** 每个核心 API 先写契约测试定义期望行为，再修复实现。E2E 只覆盖 2 个最关键路径（获客+核心流程），不追求全面覆盖。

## High-Level Technical Design

```mermaid
flowchart TB
    subgraph Phase1["Phase 1: 核心价值修复 + 契约测试"]
        A[品牌名输入] --> B[自动数据采集]
        B --> B1[AI平台查询]
        B --> B2[CitationRecord分析]
        B1 & B2 --> C[GEO诊断引擎]
        C --> D[6维度评分]
        D --> T1[诊断API契约测试]
    end

    subgraph Phase2["Phase 2: 获客入口 + 契约测试"]
        D --> E[免费健康分页面]
        E --> F{查看详细建议?}
        F -->|免费概要| G[注册]
        F -->|完整分析| G
        G --> H{执行优化?}
        H -->|升级付费| I[订阅支付]
        E --> T2[健康分API契约测试]
    end

    subgraph Phase3["Phase 3: 执行闭环 + 契约测试"]
        I --> J[AI内容生成]
        J --> K[人工审核]
        K --> L[发布到平台]
        L --> M[效果归因追踪]
        M --> N[ROI报告]
        N --> O[续费/升级]
        J --> T3[内容生成API契约测试]
        I --> T4[支付API契约测试]
    end

    subgraph Phase4["Phase 4: 集成验证"]
        T1 & T2 & T3 & T4 --> T5[跨步骤集成测试]
        T5 --> T6[E2E烟雾测试]
    end
```

## Implementation Units

### U1. GEO 诊断自动数据采集与修复

**Goal:** 修复当前诊断系统（空输入=0 分），实现自动数据采集填充 GEODiagnosisInput，让诊断产出真实有价值的分数。

**Requirements:** R1, R8

**Dependencies:** 无

**Files:**
- `backend/app/services/diagnosis/geo_diagnosis.py` — 修改诊断服务，添加自动数据采集
- `backend/app/services/diagnosis/data_collector.py` — 新建自动数据采集服务
- `backend/app/api/diagnosis.py` — 修改 API 端点，支持自动采集+异步诊断
- `backend/app/schemas/diagnosis.py` — 新建诊断请求/响应 schema
- `backend/app/models/diagnosis_record.py` — 新建诊断历史记录模型
- `backend/tests/test_api/test_diagnosis_contract.py` — 新建诊断 API 契约测试
- `backend/tests/test_services/test_data_collector.py` — 新建数据采集服务测试

**Approach:**
1. 新建 `DataCollectorService`，两个采集通道（V1）：
   - AI 平台查询通道：复用现有 `ai_engine` 适配器，查询品牌相关关键词，分析引用情况填充"引用就绪度"维度
   - 历史数据通道：从 CitationRecord 聚合已有引用数据，填充"E-E-A-T/主题权威"维度
   - 品牌官网解析：简单 HTTP GET + HTML 解析（检查 Schema 标记、标题层级等），填充"内容可提取性/Schema 标记"维度
2. 修改 `GEODiagnosisService.diagnose()` 接受 `DataCollectorOutput` 作为输入
3. 修改诊断 API 端点：`POST /api/v1/diagnosis/geo/{brand_id}` 触发异步诊断，`GET /api/v1/diagnosis/geo/{brand_id}/result` 轮询结果
4. 诊断结果持久化到 `diagnosis_records` 表，支持历史对比
5. 免费版返回综合分+3 核心维度，付费版返回全部 6 维度
6. **先写契约测试**：定义诊断 API 的期望行为（非零评分、维度结构、免费/付费差异），再修复实现

**Execution note:** 先写诊断 API 契约测试（红色），再实现 DataCollectorService 和修改诊断服务（绿色）。

**Patterns to follow:**
- 复用 `backend/app/services/ai_engine/` 下的平台适配器
- 复用 `backend/app/workers/citation_engine.py` 的查询执行模式
- 异步任务模式参考 `backend/app/services/detection/detection_scheduler.py`
- 契约测试参考 `backend/tests/conftest.py` 中的 async_client fixture

**Test scenarios:**
- 输入有效品牌名，自动采集数据并返回非零诊断分数
- 输入不存在的品牌名，返回低分但非零（基于 AI 平台查询结果）
- 免费用户请求诊断，只返回 3 个核心维度
- 付费用户请求诊断，返回全部 6 维度
- 同一品牌 24 小时内重复请求，返回缓存结果
- 诊断结果持久化，第二次诊断可展示历史对比
- 契约测试：POST /api/v1/diagnosis/geo/{brand_id} 返回 202 + task_id
- 契约测试：GET /api/v1/diagnosis/geo/{brand_id}/result 返回非零 overall_score

**Verification:** 调用 `POST /api/v1/diagnosis/geo/{brand_id}` 返回真实非零评分，且不同品牌评分有差异。契约测试全部通过。

---

### U2. 免费 GEO 健康分公开页面

**Goal:** 建设无需注册即可访问的 GEO 健康分页面，作为获客和市场教育的核心入口。

**Requirements:** R4, R9

**Dependencies:** U1

**Files:**
- `frontend/app/(public)/health-score/page.tsx` — 新建公开健康分页面
- `frontend/app/(public)/health-score/components/ScoreCard.tsx` — 评分卡片组件
- `frontend/app/(public)/health-score/components/CompetitorComparison.tsx` — 竞品对比组件
- `frontend/app/(public)/health-score/components/ShareButton.tsx` — 分享按钮组件
- `frontend/lib/api/health-score.ts` — 健康分 API 客户端
- `backend/app/api/health_score.py` — 新建公开健康分 API（无需认证）
- `backend/app/schemas/health_score.py` — 健康分响应 schema
- `backend/tests/test_api/test_health_score_contract.py` — 新建健康分 API 契约测试

**Approach:**
1. 新建公开路由 `/health-score`，无需登录即可访问
2. 页面核心交互：输入品牌名 → 30 秒内展示 GEO 健康分报告
3. 报告内容：综合评分（大数字+健康等级色标）、3 核心维度雷达图、3 竞品对比柱状图、最严重 3 个问题概要
4. "查看详细修复建议"按钮 → 触发注册弹窗
5. 注册后自动关联本次诊断结果到用户账户
6. 支持生成可分享链接（含品牌名参数）和 PDF 下载
7. 后端：`GET /api/v1/public/health-score?brand=XXX` 无需认证，返回免费版诊断结果
8. 结果缓存 24 小时（Redis），避免重复查询

**Patterns to follow:**
- 前端页面参考 `frontend/app/(dashboard)/onboarding/Step4HealthReport.tsx` 的报告展示模式
- API 参考 `backend/app/api/diagnosis.py` 但无需认证
- 分享功能参考 `backend/app/api/reports.py` 的 PDF 生成

**Test scenarios:**
- 未登录用户输入品牌名，30 秒内看到健康分报告
- 报告包含综合评分、3 维度、3 竞品对比
- 点击"查看详细建议"弹出注册弹窗
- 注册后诊断结果自动关联到账户
- 生成可分享链接，他人打开看到相同报告
- 24 小时内重复查询同一品牌返回缓存结果
- 契约测试：GET /api/v1/public/health-score?brand=XXX 返回 200 + 非零评分
- 契约测试：无品牌名参数返回 422

**Verification:** 未登录状态下访问 `/health-score`，输入品牌名后看到完整报告且可分享。契约测试通过。

---

### U3. Onboarding 重设计与转化层

**Goal:** 重设计 Onboarding 流程以"查看 GEO 健康分"为第一步，嵌入付费墙触发点。

**Requirements:** R5

**Dependencies:** U1, U2

**Files:**
- `frontend/app/(dashboard)/onboarding/page.tsx` — 重写 Onboarding 主页面
- `frontend/app/(dashboard)/onboarding/Step0HealthScore.tsx` — 新建第一步：健康分
- `frontend/app/(dashboard)/onboarding/Step1BrandName.tsx` — 修改为简化版
- `frontend/app/(dashboard)/onboarding/Step4HealthReport.tsx` — 修改为含升级提示
- `frontend/app/(dashboard)/onboarding/Step5ActionSuggestions.tsx` — 修改为含执行按钮+付费墙
- `frontend/components/subscription/UpgradePrompt.tsx` — 新建升级提示组件

**Approach:**
1. 新流程：Step0(输入品牌名看健康分) → Step1(注册/登录) → Step2(补充竞品信息) → Step3(查看详细报告+升级提示) → Step4(行动建议+执行按钮)
2. Step0 直接复用 U2 的健康分页面组件，嵌入 Onboarding 流程
3. 在以下场景嵌入升级提示：
   - 查看详细 6 维度分析时 → "升级 Pro 版查看完整分析"
   - 点击执行优化建议时 → "升级 Starter 版开始优化"
   - 查看效果归因报告时 → "升级 Pro 版追踪优化效果"
4. 升级提示组件 `UpgradePrompt` 统一管理，显示当前套餐限制和升级收益

**Patterns to follow:**
- 现有 Onboarding 步骤组件模式（Step1-5 的 props 接口）
- `useOnboardingData` hook 的数据管理模式

**Test scenarios:**
- 新用户进入 Onboarding，第一步看到健康分输入框
- 输入品牌名后看到免费健康分报告
- 注册后继续 Onboarding，看到详细报告含升级提示
- 免费用户点击"执行优化"时看到升级弹窗
- 已完成 Onboarding 的用户不再看到引导

**Verification:** 新用户从健康分开始 Onboarding，在关键节点看到升级提示。

---

### U4. 真实支付集成与功能限制

**Goal:** 接入微信支付+支付宝，实现功能限制中间件，让付费真正生效。

**Requirements:** R3, R11

**Dependencies:** U3

**Files:**
- `backend/app/services/payment/wechat_pay.py` — 新建微信支付服务
- `backend/app/services/payment/alipay.py` — 新建支付宝服务
- `backend/app/services/payment/base.py` — 新建支付基类
- `backend/app/api/payments.py` — 新建支付 API 端点
- `backend/app/middleware/subscription_enforcement.py` — 新建功能限制中间件
- `backend/app/services/subscription.py` — 修改添加真实支付逻辑
- `backend/app/api/subscriptions.py` — 修改添加支付 Webhook
- `backend/app/models/subscription.py` — 修改添加支付相关字段
- `backend/tests/test_api/test_payment_contract.py` — 新建支付 API 契约测试
- `backend/tests/test_services/test_payment.py` — 新建支付服务测试

**Approach:**
1. 支付基类定义统一接口：`create_order`, `verify_callback`, `refund`
2. 微信支付：使用官方 SDK，实现 JSAPI 支付（H5 页面）和 Native 支付（扫码）
3. 支付宝：使用官方 SDK，实现手机网站支付
4. 支付 Webhook：`POST /api/v1/payments/callback/wechat` 和 `/alipay`，验证签名后更新订阅状态
5. 功能限制中间件：在 API 路由层检查用户套餐，超限返回 403+升级提示
6. 限制维度：查询数/品牌数/诊断频率/内容生成数/知识库数/数据保留期
7. **先写契约测试**：定义支付 API 的期望行为（创建订单、回调处理、功能限制）

**Execution note:** 先写支付 API 契约测试（红色），再实现支付服务（绿色）。

**Patterns to follow:**
- 支付回调参考 `backend/app/api/auth.py` 的 Webhook 处理模式
- 功能限制参考 `backend/app/middleware/rate_limit.py` 的中间件模式
- 订阅逻辑复用 `backend/app/services/subscription.py` 的 PLANS 配置

**Test scenarios:**
- 创建支付订单，返回支付链接/二维码
- 支付成功回调，订阅状态更新为 active
- 免费用户超出查询限制，返回 403+升级提示
- Pro 用户在限制内正常使用
- 支付失败回调，订阅状态不变
- 订阅到期，自动降级为免费版
- 契约测试：POST /api/v1/payments/orders 返回 201 + order_id + pay_url
- 契约测试：POST /api/v1/payments/callback/wechat 验证签名后更新订阅

**Verification:** 完整支付流程：创建订单→支付→回调→订阅激活→功能解锁。契约测试通过。

---

### U5. AI 内容生成与分发集成

**Goal:** 在 ContentPipeline 前端添加 AI 生成阶段，集成知乎/头条 API 发布和微信半自动发布。

**Requirements:** R2, R6, R10

**Dependencies:** U1, U4

**Files:**
- `backend/app/services/content/ai_generator.py` — 新建 AI 内容生成服务
- `backend/app/services/content/content_pipeline.py` — 修改添加 Stage 0
- `backend/app/services/distribution/publishers/zhihu_publisher.py` — 新建知乎发布器
- `backend/app/services/distribution/publishers/toutiao_publisher.py` — 新建头条发布器
- `backend/app/services/distribution/publishers/wechat_publisher.py` — 新建微信半自动发布器
- `backend/app/services/distribution/publish_engine.py` — 新建发布引擎
- `backend/app/api/distribution.py` — 修改添加发布 API
- `backend/tests/test_api/test_content_contract.py` — 新建内容生成 API 契约测试
- `backend/tests/test_services/test_ai_generator.py` — 新建 AI 生成测试
- `backend/tests/test_services/test_publishers.py` — 新建发布器测试

**Approach:**
1. AI 内容生成服务：
   - 输入：诊断结果（问题维度）+ RAG 知识库上下文 + 目标关键词 + 目标平台
   - 调用 LLM 生成初稿，基于诊断结果针对性优化
   - 输出传入现有 Pipeline（RuleValidator → SensitiveFilter → SEOOptimizer → HTMLGenerator）
2. 发布引擎：
   - 知乎：通过知乎创作中心 API 发布文章（需 OAuth 授权）
   - 头条：通过头条号 API 发布文章（需 API Key）
   - 微信：生成格式化内容+复制引导，不直接调用 API
3. 发布流程：AI 生成 → 人工预览/编辑 → 确认发布 → 调用对应 Publisher → 记录发布状态
4. 发布记录关联到 Content 模型，用于后续归因

**Patterns to follow:**
- AI 生成参考 `backend/app/services/content/content_generation_service.py` 的 LLM 调用模式
- RAG 集成参考 `backend/app/services/knowledge/rag_service.py`
- 平台规则复用 `backend/app/services/distribution/platform_rules.py`
- Publisher 模式参考 `backend/app/services/ai_engine/` 的适配器模式

**Test scenarios:**
- 基于诊断结果+知识库上下文生成针对性优化内容
- 生成内容通过 Pipeline 校验（RuleValidator + SensitiveFilter）
- 知乎 API 发布成功，返回文章 URL
- 头条 API 发布成功，返回文章 URL
- 微信半自动模式生成格式化内容+复制引导
- 发布记录保存到 Content 模型，状态为 published
- 契约测试：POST /api/v1/content/generate 返回 201 + content_id + 生成内容

**Verification:** 从诊断建议到内容生成到发布的完整流程可走通。契约测试通过。

---

### U6. 效果归因系统与 ROI 报告

**Goal:** 建设效果归因系统，追踪已发布内容的 AI 引用变化，生成 ROI 报告证明付费价值。

**Requirements:** R7

**Dependencies:** U5

**Files:**
- `backend/app/services/attribution/attribution_engine.py` — 新建归因引擎
- `backend/app/services/attribution/roi_calculator.py` — 新建 ROI 计算器
- `backend/app/api/attribution.py` — 新建归因 API
- `backend/app/models/attribution_record.py` — 新建归因记录模型
- `backend/app/services/monitoring/monitor_service.py` — 修改集成归因
- `frontend/app/(dashboard)/dashboard/roi/page.tsx` — 新建 ROI 报告页面
- `frontend/lib/api/attribution.ts` — 新建归因 API 客户端
- `backend/tests/test_services/test_attribution.py` — 新建归因测试

**Approach:**
1. 归因引擎核心逻辑：
   - 内容发布时记录：发布时间、目标关键词、发布前基线引用数据
   - 定期（每 3 天）检查目标关键词的引用变化
   - 归因判定：引用率上升 + 新引用内容与已发布内容语义相关 → 归因为该内容贡献
   - 归因窗口：2-4 周，窗口内持续追踪
2. ROI 计算器：输入订阅费用+归因引用提升+行业平均引用价值，输出 GEO ROI 百分比
3. A/B 对比报告：优化前诊断分数 vs 当前诊断分数，按维度对比
4. 效果保障：如果 2-4 周内无任何引用提升，提供额外优化建议或延长服务

**Patterns to follow:**
- 监控模式参考 `backend/app/services/monitoring/monitor_service.py`
- 定期任务参考 `backend/app/services/detection/detection_scheduler.py`
- 报告生成参考 `backend/app/api/reports.py`

**Test scenarios:**
- 发布内容后自动创建归因追踪记录
- 3 天后检查引用变化，记录 delta
- 引用率上升且语义相关，归因为该内容贡献
- 归因窗口结束后生成 ROI 报告
- 优化前后 A/B 对比报告展示各维度变化
- 无引用提升时提供额外优化建议

**Verification:** 发布内容→2-4 周后→归因报告展示引用提升和 ROI。

---

### U7. 邮件集成与 Dashboard 变现 UI

**Goal:** 将 EmailService 接入业务系统（周报、续费提醒），Dashboard 添加订阅状态、用量进度、ROI 面板。

**Requirements:** R7 (邮件部分)

**Dependencies:** U4, U6

**Files:**
- `backend/app/services/email_service.py` — 修改添加新模板
- `backend/app/services/email/email_scheduler.py` — 新建邮件调度器
- `backend/app/templates/geo_weekly_report.html` — 新建周报模板
- `backend/app/templates/renewal_reminder.html` — 新建续费提醒模板
- `backend/app/templates/trial_expiring.html` — 新建试用期到期模板
- `frontend/app/(dashboard)/dashboard/page.tsx` — 修改添加变现 UI
- `frontend/components/subscription/SubscriptionStatus.tsx` — 新建订阅状态组件
- `frontend/components/subscription/UsageProgress.tsx` — 新建用量进度组件
- `frontend/components/dashboard/ROICard.tsx` — 新建 ROI 卡片组件

**Approach:**
1. 邮件模板新增：GEO 变化周报、续费提醒（到期前 7 天/3 天/1 天）、试用期到期提醒、欢迎邮件
2. 邮件调度器：APScheduler 定时任务，每周一发送周报，每日检查续费提醒
3. Dashboard 变现 UI：顶部订阅状态栏、用量进度条、ROI 卡片、功能锁定 UI
4. 配置真实 SMTP（支持 SendGrid/阿里云邮件推送）

**Patterns to follow:**
- 邮件模板参考 `backend/app/services/email_service.py` 现有模板格式
- Dashboard 组件参考 `frontend/app/(dashboard)/dashboard/page.tsx` 的 KPI 卡片模式
- 订阅状态参考 `backend/app/services/subscription.py` 的 PLANS 配置

**Test scenarios:**
- 每周一自动发送 GEO 变化周报给注册用户
- 订阅到期前 7 天发送续费提醒
- 试用期到期前 3 天发送提醒
- Dashboard 显示当前套餐和用量进度
- 超出用量时显示升级提示
- ROI 卡片展示引用率提升和归因内容

**Verification:** 注册用户收到周报邮件，Dashboard 显示订阅状态和 ROI 数据。

---

### U8. API 契约集成测试与测试基础设施

**Goal:** 编写跨步骤集成测试验证完整链路，完成后端测试基础设施统一。

**Requirements:** R12, R15, R16

**Dependencies:** U1, U2, U4, U5

**Files:**
- `backend/tests/test_integration/test_monetization_flow.py` — 新建变现闭环集成测试
- `backend/tests/conftest.py` — 增强 fixture 体系
- `backend/tests/fixtures/auth.py` — 新建认证 fixture 模块
- `backend/tests/fixtures/database.py` — 新建数据库 fixture 模块
- `backend/tests/fixtures/client.py` — 新建 httpx 客户端 fixture 模块
- `backend/tests/fixtures/brands.py` — 新建品牌测试数据 fixture 模块

**Approach:**
1. 编写跨步骤集成测试：品牌创建→诊断→方案→内容生成→效果追踪的完整链路
2. 验证 U1-U5 的 API 契约测试在集成场景下仍然通过
3. 完成后端测试目录统一验证（原 QA 计划 U1）
4. 建立共享 fixture 体系：按领域拆分到 `backend/tests/fixtures/` 下
   - auth.py：override_get_current_user、auth_token、auth_headers
   - database.py：async_engine、async_session（含自动 rollback）
   - client.py：async_client（httpx AsyncClient with app）
   - brands.py：预创建的测试品牌和竞品数据
5. conftest.py 通过 pytest plugin 机制自动加载 fixtures/ 下所有模块

**Patterns to follow:**
- `backend/tests/conftest.py` 现有 fixture 模式
- `backend/tests/test_integration/test_business_flow.py` 现有集成测试模式

**Test scenarios:**
- 品牌创建→诊断→方案→内容生成→效果追踪全链路通过
- 数据在步骤间正确传递（品牌 ID、诊断结果 ID、内容 ID）
- 共享 fixture 可被其他测试复用
- 数据库 fixture 在测试结束后自动 rollback
- 多个测试并行运行时 fixture 互不干扰

**Verification:** `cd backend && pytest tests/test_integration/test_monetization_flow.py --tb=short` 通过。`cd backend && pytest tests/ -q` 全部测试被发现且无新增失败。

---

### U9. E2E 烟雾测试

**Goal:** 编写 2 个关键路径的 Playwright E2E 烟雾测试，验证最核心的用户路径端到端可用。

**Requirements:** R13, R14

**Dependencies:** U2, U3

**Files:**
- `frontend/e2e/tests/health-score-smoke.spec.ts` — 新建获客路径烟雾测试
- `frontend/e2e/tests/core-flow-smoke.spec.ts` — 新建核心流程烟雾测试

**Approach:**
1. 获客路径烟雾测试：访问健康分页面→输入品牌名→看到报告→点击注册
2. 核心流程烟雾测试：登录→创建品牌→触发诊断→查看诊断结果
3. 使用独立 setup（直接调用 API 创建测试数据），不依赖共享 fixture
4. 确保截图和视频录制配置正确（screenshot:on-failure, video:retain-on-failure）

**Patterns to follow:**
- `frontend/e2e/tests/login.spec.ts` 现有 E2E 测试模式
- `frontend/e2e/pages/login.page.ts` Page Object 模式

**Test scenarios:**
- 获客路径：未登录→访问 /health-score→输入品牌名→30 秒内看到报告→点击注册→注册弹窗出现
- 核心流程：登录→创建品牌→品牌出现在 Dashboard→触发诊断→诊断结果非零
- 测试失败时自动截图保存

**Verification:** `cd frontend && npx playwright test health-score-smoke core-flow-smoke` 通过。

## Scope Boundaries

**Deferred for later:**

- 网站爬取通道（诊断数据采集 V2）
- 全面 E2E 测试覆盖（原 QA 计划 U3/U4/U5 → 上线后逐步扩展）
- 性能基线测试（原 QA 计划 U7 → 上线后有真实负载后建立）
- CI 安全扫描（原 QA 计划 U8 → 上线后集成）
- Alembic 迁移验证（原 QA 计划 U8 → 上线后添加）
- 前端组件测试（原 QA 计划 U10 → 上线后扩展）
- 行业 GEO 基准数据积累
- API 市场开放和第三方集成
- 白标报告和专属客户成功经理
- 多语言和国际 AI 平台支持
- 知识库自动构建（从品牌官网自动提取 GEO 相关信息结构）
- 批量内容生成（一次生成多平台内容）
- 内容日历和排期执行系统

**Outside this product's identity:**

- 传统 SEO 工具功能（关键词排名、外链分析等）
- 广告投放和营销自动化
- 社交媒体管理
- 基础设施级别的渗透测试

**Deferred to follow-up work:**

- E2E 测试迁移到共享 fixture（U9 完成后，将独立 setup 替换为 U8 的共享 fixture）
- 性能基线设定阈值和告警（上线后根据数据设定合理阈值）
- 跨浏览器 E2E 扩展（稳定 Chromium 后再扩展）
- 知乎/头条 API OAuth 授权完整流程
- 批量内容生成

## Open Questions

- 微信公众号 OAuth 授权流程的具体实现方案需在 U5 实施时确认
- 知乎和头条 API 的申请和审核周期可能影响 U5 的交付时间
- 诊断自动数据采集的品牌官网解析可能遇到反爬机制，需准备降级方案
- 真实 SMTP 配置需要用户提供邮件服务商账号信息
- 效果归因的具体技术实现方案（基于引用检测还是基于评分变化）
- 付费版定价是否需要调整（当前 ¥199/599/1999 是否匹配价值感知）

## Risks & Dependencies

| Risk | Impact | Mitigation |
|------|--------|------------|
| 诊断数据采集不准确 | 用户不信任健康分，获客失效 | 先用 AI 平台查询数据（已有适配器），品牌官网解析作为增强 |
| 微信/知乎/头条 API 审核不通过 | 分发集成延期 | 微信降级为半自动，知乎/头条备选手动发布 |
| 支付 SDK 集成复杂度超预期 | 付费闭环延期 | 先实现支付宝（文档更友好），微信支付后续迭代 |
| GEO 效果归因窗口内无可见提升 | 用户认为产品无效 | 提供效果保障机制，延长归因窗口或提供额外优化 |
| 免费诊断 API 调用成本过高 | 运营成本失控 | 24 小时缓存+频率限制+深度限制 |
| LLM API Key 不可用影响内容生成 | 核心付费功能不可用 | 支持多 LLM Provider 降级，至少保证一个可用 |

## Sources & Research

- Origin requirements: `docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md`
- Secondary origin: `docs/brainstorms/2026-05-31-geo-platform-monetization-closed-loop-requirements.md`
- QA plan (downscoped): `docs/plans/2026-05-31-002-test-quality-assurance-system-plan.md`
- Existing diagnosis system: `backend/app/services/diagnosis/geo_diagnosis.py`
- Diagnosis API root cause: `backend/app/api/diagnosis.py` line 75 (`GEODiagnosisInput()`)
- Existing content pipeline: `backend/app/services/content/content_pipeline.py`
- Existing distribution rules: `backend/app/services/distribution/platform_rules.py`
- Existing monitoring: `backend/app/services/monitoring/monitor_service.py`
- Existing subscription: `backend/app/services/subscription.py`
- Existing email: `backend/app/services/email_service.py`
- Existing E2E tests: `frontend/e2e/tests/`
