docs: add E2E and Douyin integration plans
This commit is contained in:
@@ -0,0 +1,268 @@
|
||||
# better-douyin 整合计划
|
||||
|
||||
> 状态:待排期,仅作为 CreatorHub 的独立实现计划,不代表相关功能已经完成。
|
||||
>
|
||||
> 参考项目:<https://github.com/anYuJia/better-douyin>
|
||||
>
|
||||
> 审阅快照:commit `f534c66d61f541a526fa3f5251d32494aad758a8`(2026-08-28)
|
||||
>
|
||||
> 需求基线:[`docs/plan01.md`](./plan01.md)
|
||||
|
||||
## 1. 目标
|
||||
|
||||
从 `better-douyin` 中吸收经过验证的产品组织方式和状态处理思路,补强 CreatorHub 的抖音完整流程:
|
||||
|
||||
- 真实事件监听、断线恢复和事件去重;
|
||||
- 竞品创作者监控、作品发现和素材处理;
|
||||
- 统一的自动响应与人工发送工作台;
|
||||
- 评论线索、通知和私信的可追溯处理;
|
||||
- AI 建议、动作策略和任务结果证据。
|
||||
|
||||
本计划只吸收**功能思想和交互原则**,不复制源代码、界面资源、提示词、品牌内容或私有协议实现。
|
||||
|
||||
## 2. 审阅结论与边界
|
||||
|
||||
### 2.1 参考项目的公开边界
|
||||
|
||||
公开仓库主要包含:
|
||||
|
||||
- React 前端界面;
|
||||
- Tauri mock bridge;
|
||||
- Node mock backend;
|
||||
- 前端契约和模拟数据。
|
||||
|
||||
公开内容不包含真实抖音接口、登录会话、Cookie、签名、下载解析、发布密钥或真实平台验收证据。因此,项目中的功能只能作为产品和代码组织参考,不能作为 CreatorHub 的真实平台能力证明。
|
||||
|
||||
### 2.2 许可证限制
|
||||
|
||||
仓库使用 `Better Douyin Non-Commercial License`。CreatorHub 面向商业使用,不能直接复制或改造其代码、资源和衍生实现;如需复用原代码,必须先取得明确的书面许可。本计划默认全部功能由 CreatorHub 独立实现。
|
||||
|
||||
### 2.3 必须保持的 CreatorHub 原则
|
||||
|
||||
1. 自动动作与人工动作分离:自动动作按策略和 UID 冷却执行,人工发送逐次确认。
|
||||
2. 自有账号的点赞、评论、关注、转发和私信优先使用真实事件监听,不以轮询或 Mock 冒充实际能力。
|
||||
3. 写操作必须核对账号身份,并记录成功、失败或结果不明;不能把异常静默转换为成功。
|
||||
4. 不增加本地 Web UI 或本地 MCP。统一管理继续放在远程 Web 和控制面。
|
||||
5. 抖音真实流程完成并验收前,不提前扩展小红书实现。
|
||||
|
||||
## 3. 可吸收功能清单
|
||||
|
||||
| 优先级 | 参考亮点 | CreatorHub 整合方式 | 参考位置 |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 | 私信实时事件、历史补偿、断线恢复、账号切换保护、静默基线 | 独立重写到真实事件链路,增加我们的结果证据和 `uncertain` 状态 | `frontend/src/components/friends/`、`frontend/src/hooks/use-global-friends-im.ts` |
|
||||
| P0 | 统一自动化工作台 | 集中展示来源、策略、动作、运行状态、日志和失败原因 | `frontend/src/components/automation/automation-view.tsx` |
|
||||
| P0 | 关键词、阈值、延迟、单次动作上限、去重 | 映射到账号策略、UID 冷却、人工确认和自动策略 | `automation-settings-dialog.tsx`、`lib/ai-automation.ts` |
|
||||
| P1 | 创作者监控、基线、新作品发现、周期扫描、批量下载 | 用于竞品创作者采集;按 CreatorHub 的真实分页、采集和限时要求实现 | `lib/contracts.ts`、`automation-view.tsx` |
|
||||
| P1 | 下载任务状态和历史 | 用于素材下载、提音轨、转写;增加结果不明和证据查看 | `components/downloads/`、`hooks/use-downloads.ts` |
|
||||
| P1 | 通知分类、作品跳转、直接回复 | 作为评论线索和私信入口;主触发仍来自真实事件 | `components/notices/notices-view.tsx`、`use-global-notice-monitor.ts` |
|
||||
| P1 | 搜索和链接解析 | 作为竞品 UID、作品和创作者监控的导入入口 | `components/search/`、`components/link/link-view.tsx` |
|
||||
| P2 | AI 供应商、模型、建议回复配置 | 先用于建议和人工确认,再按策略开放自动动作 | `components/settings/settings-ai.tsx` |
|
||||
| 不整合 | 本地 MCP 服务 | 与 CreatorHub 的远程 Web/控制面架构冲突;只保留写授权、确认和审计原则 | `components/settings/settings-mcp.tsx` |
|
||||
|
||||
## 4. 实施阶段
|
||||
|
||||
### 阶段 0:冻结边界和验收口径
|
||||
|
||||
**目标**:避免把 mock 功能误当成真实能力,也避免直接引入不适合 CreatorHub 的架构。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 建立独立的事件、动作、监控任务和素材任务契约;
|
||||
- 统一动作结果为 `success`、`failed`、`uncertain`;
|
||||
- 为每次真实写操作定义最小证据:账号、目标 UID/作品、动作、时间、平台返回或页面证据;
|
||||
- 将自动策略和人工确认建模为两条不同流程;
|
||||
- 标注所有“仅离线可验证”的功能,禁止进入真实能力清单。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 计划、契约和测试都明确区分真实、模拟、失败和结果不明;
|
||||
- 不存在静默回退、隐式重试或将 Mock 结果标记为成功的路径。
|
||||
|
||||
### 阶段 1:真实事件基础和私信恢复
|
||||
|
||||
**目标**:完成 CreatorHub 待办中的真实平台事件监听、去重和断连恢复。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 接收实时事件并核对平台、账号和当前会话代际;
|
||||
- 使用账号和会话维度的事件身份,避免重复处理;
|
||||
- 对历史同步建立静默基线,不把旧消息当成新消息;
|
||||
- 断线后按游标、同步提示或有限历史窗口补偿;
|
||||
- 对未确认身份、过期时间戳、旧账号事件和重复事件拒绝自动写操作;
|
||||
- 保留有限长度的待处理队列,并记录溢出和停止原因;
|
||||
- 将自动化副作用放在事件确认之后。
|
||||
|
||||
**必须覆盖的检查**:
|
||||
|
||||
- 实时新消息;
|
||||
- 重复事件;
|
||||
- 断线重连;
|
||||
- 账号切换期间的旧事件;
|
||||
- 历史消息基线;
|
||||
- 事件身份不可信;
|
||||
- 超时、取消和结果不明。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 在真实测试账号上完成事件接收、恢复和去重证据;
|
||||
- 满足 `plan01` 规定的 5 秒/30 秒时限;
|
||||
- 所有自动动作都能追溯到唯一事件和账号。
|
||||
|
||||
### 阶段 2:统一自动化工作台和动作策略
|
||||
|
||||
**目标**:将推荐流、评论、通知、好友和创作者监控的响应集中到一个工作台。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 按事件来源、账号、策略、动作状态筛选;
|
||||
- 展示候选动作、执行中的动作、成功、失败和结果不明;
|
||||
- 展示动作前的目标、内容、策略命中原因和冷却信息;
|
||||
- 人工发送必须先预览,再逐次确认;
|
||||
- 自动动作必须经过启用状态、关键词/阈值、UID 冷却、单次上限和账号身份校验;
|
||||
- 记录每个动作的尝试次数、实际结果、错误原因和证据链接。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 自动和人工动作在界面和服务层均不可混淆;
|
||||
- 同一 UID 在冷却期间不会重复自动触发;
|
||||
- 失败和结果不明不会被列表隐藏,也不会无条件重试。
|
||||
|
||||
### 阶段 3:创作者监控与竞品采集
|
||||
|
||||
**目标**:把创作者监控变成可审计的竞品采集流程。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 支持通过创作者 UID、主页链接或作品链接创建监控目标;
|
||||
- 首次运行建立基线,历史作品不触发新作品动作;
|
||||
- 后续运行只处理新增作品,并保存游标、最后成功时间和错误原因;
|
||||
- 支持按账号、创作者、作品和采集状态查看结果;
|
||||
- 新作品进入下载任务,不在采集阶段假设下载成功;
|
||||
- 采集失败、分页异常、账号失效和权限变化都保留证据。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 真实创作者目标能够完成基线和新增作品识别;
|
||||
- 重复运行不会重复创建同一作品任务;
|
||||
- 采集证据与后续素材任务可以关联。
|
||||
|
||||
### 阶段 4:素材下载、提音轨和转写
|
||||
|
||||
**目标**:完成 CreatorHub 当前待办中的真实素材处理链路。
|
||||
|
||||
**任务状态**:
|
||||
|
||||
`pending → running → succeeded / failed / uncertain`,并支持明确的 `cancelled`;只有有证据的失败才允许重试。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 下载任务支持进度、暂停、恢复、取消、重试和历史查看;
|
||||
- 每一步保存输入作品、输出文件、尝试次数和实际错误;
|
||||
- 下载完成后再进入提音轨和转写,不用空文件或 Mock 数据继续下游;
|
||||
- 供应商响应超时或写入结果无法确认时标记 `uncertain`,交由人工处理;
|
||||
- 成功证据至少包含输出文件存在性和可读取性,必要时保存校验值。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 真实素材可以从作品进入下载、提音轨和转写;
|
||||
- 失败重试不会重复污染结果;
|
||||
- 结果不明不会被显示为成功。
|
||||
|
||||
### 阶段 5:通知、评论线索和私信动作
|
||||
|
||||
**目标**:将通知和评论转化为可确认、可追踪的业务线索。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 将点赞、评论、关注、@和私信统一成事件列表;
|
||||
- 每条事件显示账号、来源、目标作品、对方 UID、发生时间和处理状态;
|
||||
- 支持从事件直接打开作品、查看评论上下文或进入私信;
|
||||
- 评论回复和私信发送沿用人工确认流程;
|
||||
- 自动回复只处理经过策略授权的真实新事件,不能处理历史基线事件;
|
||||
- 发送成功、失败和结果不明均保存平台证据。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- 从真实通知或私信事件到人工确认发送可以完整追踪;
|
||||
- 事件去重、UID 冷却和账号切换保护有效;
|
||||
- 不因通知轮询或页面刷新产生重复动作。
|
||||
|
||||
### 阶段 6:AI 建议和生产配置
|
||||
|
||||
**目标**:在真实事件和人工确认稳定后,再引入 AI 辅助。
|
||||
|
||||
**工作内容**:
|
||||
|
||||
- 支持供应商、模型、提示词和超时配置;
|
||||
- AI 默认生成建议,不默认代表已发送;
|
||||
- 对建议保存输入事件、上下文、模型配置和最终人工修改;
|
||||
- 供应商失败时直接暴露错误,不静默切换或伪造回复;
|
||||
- 不采用“伪装成人工、否认 AI 身份”等提示词;
|
||||
- 生产配置由控制面管理,凭据不进入前端日志、事件证据或普通租户数据。
|
||||
|
||||
**完成标准**:
|
||||
|
||||
- AI 建议和平台写操作可以分别验收;
|
||||
- AI 失败不会阻断人工处理,也不会被包装成成功;
|
||||
- 配置、权限和审计边界符合 CreatorHub 的控制面设计。
|
||||
|
||||
### 阶段 7:小红书扩展
|
||||
|
||||
抖音真实流程、证据和失败处理完成后,再复用已经验证的事件、动作和任务模型实现小红书。不得因为 `better-douyin` 同时覆盖多个页面,就提前复制未经验证的平台适配层。
|
||||
|
||||
## 5. CreatorHub 与参考项目的差异化要求
|
||||
|
||||
| 参考项目做法 | CreatorHub 要求 |
|
||||
| --- | --- |
|
||||
| 公开 shell 使用 mock bridge | 真实平台能力必须有独立验收证据 |
|
||||
| 通知可通过轮询触发自动化 | 真实事件监听为主,轮询只能用于恢复或健康检查 |
|
||||
| 自动评论、私信、关注统一配置 | 自动策略与人工确认严格分离 |
|
||||
| 下载任务有基础状态 | 增加结果不明、证据、真实输出和下游处理状态 |
|
||||
| 本地 MCP 配置 | 使用远程 Web/控制面,不新增本地 MCP |
|
||||
| AI 可配置自动动作 | 默认先生成建议,写操作需按策略或人工确认 |
|
||||
| 项目许可证允许非商业使用 | CreatorHub 独立实现,不直接复制代码和资源 |
|
||||
|
||||
## 6. 验收与回归要求
|
||||
|
||||
### 6.1 自动检查
|
||||
|
||||
按照受影响服务执行现有仓库门槛:
|
||||
|
||||
- Go 控制面:`go test ./...`、`go vet ./...`、构建目标程序;
|
||||
- 有并发、生命周期或共享状态变化时:`go test -race ./...`;
|
||||
- Python gateway:非交互式单元测试、覆盖率检查、Compose 健康检查;
|
||||
- 前端:使用 lockfile 安装,执行仓库测试和 `npm --prefix web run build`;
|
||||
- 单元测试覆盖率保持 65% 以上。
|
||||
|
||||
### 6.2 真实平台验收
|
||||
|
||||
每个真实写操作至少记录:
|
||||
|
||||
- 测试时间、平台、账号和目标 UID/作品;
|
||||
- 触发事件及其唯一身份;
|
||||
- 发送或操作内容;
|
||||
- 平台页面、响应、状态或其他可复核证据;
|
||||
- 最终分类:成功、失败或结果不明;
|
||||
- 是否发生重试、断线恢复或账号切换。
|
||||
|
||||
离线测试、Mock bridge、截图占位和本地假数据只能证明界面或流程,不得作为真实平台成功证据。
|
||||
|
||||
## 7. 风险与处理
|
||||
|
||||
- **平台协议变化**:适配层失败必须显式暴露,并保留足够日志;不使用静默降级。
|
||||
- **事件重复或延迟**:依靠账号范围、事件身份、时间窗口和基线处理;不靠扩大重试次数掩盖问题。
|
||||
- **写操作结果不确定**:进入人工复核队列,不自动重拨或重复发送。
|
||||
- **账号身份错误**:写操作前再次核对当前账号、窗口和会话代际。
|
||||
- **许可证风险**:只参考公开行为和组织方式,所有实现、文案和资源独立完成。
|
||||
- **公开项目可信度不足**:其 mock 实现和缺失的检查脚本不纳入 CreatorHub 的质量证明。
|
||||
|
||||
## 8. 参考文件
|
||||
|
||||
- [better-douyin README](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/README.md)
|
||||
- [better-douyin LICENSE](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/LICENSE)
|
||||
- [开放边界说明](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/OPEN_SOURCE.md)
|
||||
- [适配器边界说明](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/docs/adapter-boundary.md)
|
||||
- [共享契约](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/frontend/src/lib/contracts.ts)
|
||||
- [自动化工作台](https://github.com/anYuJia/better-douyin/blob/f534c66d61f541a526fa3f5251d32494aad758a8/frontend/src/components/automation/automation-view.tsx)
|
||||
- [私信事件处理](https://github.com/anYuJia/better-douyin/tree/f534c66d61f541a526fa3f5251d32494aad758a8/frontend/src/components/friends)
|
||||
- [下载任务](https://github.com/anYuJia/better-douyin/tree/f534c66d61f541a526fa3f5251d32494aad758a8/frontend/src/components/downloads)
|
||||
@@ -0,0 +1,61 @@
|
||||
# CreatorHub E2E 执行证据(2026-09-14)
|
||||
|
||||
本文件只保存脱敏摘要;Cookie、密码、token、主密钥和原始平台响应未写入仓库。
|
||||
|
||||
## 基线与回归
|
||||
|
||||
- Git:`main` 与远程同步;测试前后未发现源码或 staged 修改,任务提供的 `docs/e2e-test-plan.md` 为唯一既有未跟踪文件。
|
||||
- 回归门禁:`go test ./...`、`go vet ./...`、`go test -race ./...`、control-plane build、Python gateway 56 tests、Web 81 tests/build、`bash docs/deployment_stop_test.sh` 通过。
|
||||
- PostgreSQL Go 集成测试因 `CREATORHUB_POSTGRES_TEST_URL` 未设置而跳过;隔离 Compose 数据库故障测试见下文。
|
||||
- 历史脱敏控制面报告:`/home/rogee/.pi/agent/sessions/--home-rogee-Workspace-creator-hub--/subagent-artifacts/outputs/2cbcddb6-c347-41d0-a6f7-356dccd81a3e/api-e2e.txt`。
|
||||
- 历史回归报告:`/home/rogee/.pi/agent/sessions/--home-rogee-Workspace-creator-hub--/subagent-artifacts/outputs/2cbcddb6-c347-41d0-a6f7-356dccd81a3e/regression.txt`。
|
||||
|
||||
## 本轮补充控制面结果
|
||||
|
||||
- 作品:RUN 记录创建/重复写入/详情和来源筛选完成;重复返回同 ID。当前部署对不存在的 `owned` source 返回 201,故 API-01 判 FAIL;负计数返回 400。
|
||||
- 指标:verified 发布时间作品首次快照 200,重复 200,过期 409,负数/溢出/非法时间/未来时间均 400。完整设置 PUT 将 `metric_age_seconds` 改为 60 后仍保留未来 `next_metric_at` 且无停止原因,API-02 判 FAIL;设置已恢复为 2592000。
|
||||
- 评论:创建 201、重复 200、详情/作品过滤 200;空 author UID 保留正文;非法类型 400,缺失作品 404。API-03 PASS。
|
||||
- 事件:按当前 `InteractionEvent` 合同重新提交 comment baseline:新事件 201、重复 200、display 204、baseline process 200;空 interactor UID 的事件 201 且为 blocked,重复处理 200。此前报告中的 400 是错误/过载 payload,不代表当前合法合同结果。API-04 PASS。
|
||||
- 消息:创建 201、重复 200、会话/消息读取 200;同 peer 不同账号隔离;非法 direction/state/peer/platform 均 400。API-05 PASS。
|
||||
- JSON 边界:未知字段、尾随 JSON、错误类型、空 body 为 400;大于 1 MiB 为 413;不存在资源 404;不支持方法 405。`GET /api/creator/workz` 和 `GET /api/creator/profiles` 返回 200 HTML 而不是 JSON/404,API-06 判 FAIL。
|
||||
- 素材:选择 200;`material/process` 当前部署返回 405;仿写确认/更新在未处理状态返回 409。MAT-01 PASS,MAT-05/MAT-06 FAIL。
|
||||
- 规则:创建、列表、详情、更新、启停均成功;分析返回 503 `AI 分析不可用`;规则 DELETE 返回 405,测试规则已禁用。LEAD-01/02 PASS,LEAD-03 受工作台空白影响,LEAD-05 为 BLOCKED,LEAD-07 PASS。
|
||||
- 操作:缺 target 返回 400;重发 action 创建可成功,但执行结果保持不确定/失败,不自动重试;当前运行时对 confirmed like/repost 返回 `TARGET_MISMATCH`,未产生平台写副作用。OP-07 判 FAIL(未得到明确 `REPOST_TEXT_UNSUPPORTED`)。
|
||||
|
||||
## 隔离 Compose 故障证据
|
||||
|
||||
隔离项目 `creatorhub-e2e-isolated` 使用动态本地端口,未停止共享 Compose 服务;结束时已 `down -v --remove-orphans`,项目容器、卷、控制网络均为 0。
|
||||
|
||||
```text
|
||||
isolated_base=http://127.0.0.1:42681
|
||||
health HTTP=204
|
||||
account_create HTTP=201
|
||||
account_get HTTP=200
|
||||
after_cp_restart HTTP=200
|
||||
db_fault_read HTTP=500 error=phase A operation failed
|
||||
after_db_restore HTTP=200
|
||||
gateway_fault_list HTTP=200 empty list
|
||||
gateway_fault_browser HTTP=200 empty list
|
||||
after_gateway_restore HTTP=200 empty list
|
||||
after_gateway_restore_browsers HTTP=200 empty list
|
||||
cleanup: containers=0 volumes=0 network=0
|
||||
```
|
||||
|
||||
数据库失联响应可观察且未伪装为空成功,但该次未完成带 RUN 规则保存和结构化关联日志核验,因此 SYS-05 不判 PASS。隔离账号因无登录会话无法入队,未伪造 Phase A 任务结果。
|
||||
|
||||
另用无 Docker socket 的 gateway 一次性进程验证:进程非零退出,输出包含 socket/Docker 依赖错误且不包含 token;未创建任何业务资源。
|
||||
|
||||
## 浏览器与 REAL 边界
|
||||
|
||||
- 浏览器录制:`/home/rogee/.config/browser-harness/agent-workspace/recordings/creatorhub-e2e-final/`,覆盖列表、创建、详情、任务、草稿、审计、设置、网关、镜像、网络出口和运行环境路由;事件索引为同目录 `events.jsonl`。
|
||||
- 当前 managed browser 的 gateway identity 曾返回 HTTP 200,UID `99491952055`,昵称 `抖盲求真`;这是真实浏览器身份读取证据,不是平台写入证据。
|
||||
- Douyin 受限读取返回 HTML web shell 或空 detail,而非稳定作品 JSON;confirmed like/repost 返回 `TARGET_MISMATCH`。没有真实评论、私信、点赞、关注、转发写入被计为成功。
|
||||
- 竞品 `美食作家王刚` 登记后同步 503,原因 `resolve account credential`;竞品已暂停。控制面账号状态虽为 authorized/active,仍无可用于 connector 的 credential。
|
||||
- gateway 事件读取曾出现 `CDP message failed during Runtime.evaluate`;无事件、去重、重连、5 秒/30 秒平台证据。
|
||||
- 当前无健康代理/出口,无生产 AI/转写配置;规则分析 503。
|
||||
- browser-harness 对控制面 HTTP Basic challenge 的未登录 fetch 长时间处于“登录中”,错误凭据 UI 未显示明确 401 文案;因此 UI-02 判 FAIL,UI-01 的正向表单登录不判 PASS。
|
||||
|
||||
## 清理
|
||||
|
||||
- 未引用的临时镜像已删除,保留的验收镜像仍为 enabled;测试竞品已 pause,测试规则已 disable,临时账号已 revoke;隔离 Compose 项目已销毁。
|
||||
- API 作品、评论、指标、消息、事件没有公开删除 API;按约束未用 SQL 删除,RUN 数据作为残余记录并在报告中列出。END-02 因不能完全清理判 FAIL。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,253 @@
|
||||
# CreatorHub E2E 功能测试执行报告
|
||||
|
||||
- 计划:`docs/e2e-test-plan.md`
|
||||
- 范围:抖音当前实现;不含小红书、性能压测、RBAC/多租户
|
||||
- 用例:122/122 已登记结果
|
||||
- 执行结论:**不是整体通过**。当前结果为 `PASS 32`、`FAIL 19`、`BLOCKED 71`。
|
||||
- `FAIL`:已观察到与计划预期不一致的实际行为。
|
||||
- `BLOCKED`:需要真实平台、健康代理、生产 AI/转写、账号凭据,或需要停止共享资源;未用伪造数据替代。
|
||||
|
||||
## 证据
|
||||
|
||||
- `[E]` 本轮脱敏补充证据:`docs/e2e-evidence-20260914.md`
|
||||
- `[U]` browser-harness 路由录制:`/home/rogee/.config/browser-harness/agent-workspace/recordings/creatorhub-e2e-final/`,事件索引为 `events.jsonl`
|
||||
- `[A]` 控制面 API/Phase A 脱敏报告:`/home/rogee/.pi/agent/sessions/--home-rogee-Workspace-creator-hub--/subagent-artifacts/outputs/2cbcddb6-c347-41d0-a6f7-356dccd81a3e/api-e2e.txt`
|
||||
- `[R]` 回归门禁报告:`/home/rogee/.pi/agent/sessions/--home-rogee-Workspace-creator-hub--/subagent-artifacts/outputs/2cbcddb6-c347-41d0-a6f7-356dccd81a3e/regression.txt`
|
||||
|
||||
## 逐例结果
|
||||
|
||||
### SYS
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| SYS-01 | PASS | [R][U] healthz/API 入口和主要静态页面可达;healthz 204。 |
|
||||
| SYS-02 | PASS | [R][E] 非法日志级别、密码、主密钥、参数等在副作用前被拒绝;help/构建通过。 |
|
||||
| SYS-03 | PASS | [A][E] 非法 gateway 配置 400;无 Docker socket 的一次性 gateway 非零退出并报告依赖错误。 |
|
||||
| SYS-04 | BLOCKED | [E] 隔离 control-plane 重启后数据可读;共享 gateway/Profile 重启未执行。 |
|
||||
| SYS-05 | BLOCKED | [E] 隔离 PostgreSQL 停止时读取为 500,恢复后 200;RUN 规则保存和结构化日志关联未完成。 |
|
||||
| SYS-06 | BLOCKED | [R][E] 关停模拟和 Docker socket 归属通过;开发模式完整启动/映射未执行。 |
|
||||
|
||||
### UI
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| UI-01 | BLOCKED | [U][E] 空表单禁用、密码遮挡已见;页面自身提交正确 Basic 凭据未能独立证明。 |
|
||||
| UI-02 | FAIL | [E] 错误凭据提交后超过 19 秒仍显示“登录中”,未显示 401 文案或清理状态。 |
|
||||
| UI-03 | BLOCKED | [U] 列表/详情/任务/草稿等路由可达;360px、前进后退完整矩阵未留证。 |
|
||||
| UI-04 | BLOCKED | 未取得键盘下拉、标签去重和全部基础表单的独立证据,不判通过。 |
|
||||
| UI-05 | FAIL | [U][E] 确认弹窗/回收操作多次冻结或超时;忙碌禁用子项通过但整体失败。 |
|
||||
| UI-06 | FAIL | [U] 工作台“规则/线索”页签偶发空白,加载失败与空态不能稳定区分。 |
|
||||
| UI-07 | BLOCKED | 窄屏、键盘焦点、复制和完整可访问性检查未执行。 |
|
||||
|
||||
### GW
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| GW-01 | BLOCKED | [A][U] 现有登记、列表和认证读取通过;新登记、重名、token 展示/复制流程未完整执行。 |
|
||||
| GW-02 | BLOCKED | 未在独立未引用 gateway 上完成改名和错误 token 恢复。 |
|
||||
| GW-03 | BLOCKED | [A] API 非法字段 400;UI 断网保存、表单保留和恢复未完整留证。 |
|
||||
| GW-04 | FAIL | [U][E] 页面删除接线落入当前 provider 限制,未形成预期 gateway DELETE 成功链。 |
|
||||
| GW-05 | PASS | [A] 引用中的 gateway 删除返回冲突并保留引用;未执行资源破坏。 |
|
||||
|
||||
### IMG
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| IMG-01 | PASS | [A][U] 镜像版本创建、字段边界和非法输入验证通过。 |
|
||||
| IMG-02 | PASS | [U][A] 禁用/重新启用镜像并回读候选状态通过。 |
|
||||
| IMG-03 | PASS | [A][U] 未引用镜像删除成功;引用资源保留;取消无删除副作用。 |
|
||||
| IMG-04 | BLOCKED | 不可拉取镜像的独立环境创建与恢复未执行。 |
|
||||
|
||||
### NET
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| NET-01 | BLOCKED | 无健康真实代理端点,未创建带凭据的真实出口。 |
|
||||
| NET-02 | PASS | [A] 空 host、越界端口、未知资源等非法请求被拒绝,无半条记录。 |
|
||||
| NET-03 | BLOCKED | 无健康代理,未执行真实出口检测或身份不符对照。 |
|
||||
| NET-04 | BLOCKED | 无健康代理且禁止直连回退的真实场景未执行。 |
|
||||
| NET-05 | BLOCKED | 无可用出口绑定和故障读取场景,未声称绑定恢复。 |
|
||||
| NET-06 | BLOCKED | 未停用共享出口,也没有专用 P2 与排队任务。 |
|
||||
|
||||
### AC
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| AC-01 | PASS | [A][U] 抖音账号建档、trim/tag 和默认授权/暂停状态通过;未把空 Cookie 当登录。 |
|
||||
| AC-02 | PASS | [A][U] 重复、非法平台/UID 和未知合法标识边界通过;临时账号已撤销。 |
|
||||
| AC-03 | FAIL | [E] 账号记录为 active/authorized,但 creator capability 解析仍因 credential 缺失失败,不能判 ready。 |
|
||||
| AC-04 | PASS | [A][U] 暂停/恢复、版本关联及不自动恢复旧 hold 的控制面流程通过。 |
|
||||
| AC-05 | BLOCKED | [A] 草稿链可建;UI 断网创建、完整失败保留和资源 ready 前置未完整执行。 |
|
||||
| AC-06 | BLOCKED | [E] gateway identity 真实返回 UID `99491952055`;控制面 credential/首次可达性未满足,未伪造 logged_in。 |
|
||||
| AC-07 | PASS | [A] revoke 204,临时账号失去运行资格;未重建授权。 |
|
||||
|
||||
### ENV
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| ENV-01 | BLOCKED | 未创建新的专用直连环境,避免改变共享浏览器/Profile。 |
|
||||
| ENV-02 | BLOCKED | 无健康代理和真实公网 IP 对照,未执行高级指纹环境。 |
|
||||
| ENV-03 | PASS | [A][U] seed/alias 等边界被拒绝;创建环境页面及依赖提示可达。 |
|
||||
| ENV-04 | PASS | [A][U] 列表/详情读取通过;未将页面刷新当主动状态探测。 |
|
||||
| ENV-05 | PASS | [A][U] 已观察共享环境启停/恢复和重复动作边界,最终运行实例恢复。 |
|
||||
| ENV-06 | BLOCKED | 未在共享环境上执行升级/Profile 保留测试。 |
|
||||
| ENV-07 | BLOCKED | 无直连/代理双环境和健康 P2,未执行升级重绑。 |
|
||||
| ENV-08 | BLOCKED | 未对共享运行实例制造并发启动/升级竞态。 |
|
||||
| ENV-09 | BLOCKED | 未停止共享 gateway 或强制移除共享浏览器容器。 |
|
||||
| ENV-10 | PASS | [A] 未知动作、非法版本、无效 alias 等 API 输入明确拒绝。 |
|
||||
|
||||
### GATE
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| GATE-01 | PASS | [A] 无 token/错误 token、非法 body、过大 body、未知路径和正常列表边界已验证。 |
|
||||
| GATE-02 | BLOCKED | 未在独立 gateway 上完整创建、启停、删除真实实验容器。 |
|
||||
| GATE-03 | BLOCKED | 无健康代理和隧道目标,未测试 proxy/代际恢复。 |
|
||||
| GATE-04 | FAIL | [E] identity 读取成功,但受限作品读取得到 HTML web shell/空 detail,不是稳定 JSON;Cookie 注入未完成。 |
|
||||
| GATE-05 | FAIL | [E] 六类 preview 中 follow 请求失败;confirmed like/repost 得到 `TARGET_MISMATCH`,未得到计划要求的明确 repost 拒绝码。无平台写成功被计入。 |
|
||||
| GATE-06 | BLOCKED | [E] 事件读取曾因 CDP `Runtime.evaluate` 失败;未启动真实订阅/取件确认。 |
|
||||
|
||||
### PH
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| PH-01 | FAIL | [A][U] API 版本/确认链通过;UI 勾选核对后确认/入队按钮仍不能稳定启用。 |
|
||||
| PH-02 | FAIL | [A][U] API 同 confirmation 幂等入队通过;对应 UI 入队链受 PH-01 按钮状态故障影响。 |
|
||||
| PH-03 | PASS | [A] 旧 draft version 返回 409,新版本重新确认/入队成功。 |
|
||||
| PH-04 | PASS | [A] succeeded、failed、uncertain→needs_confirmation、policy_hold 和非法 outcome 均有明确 Mock 结果。 |
|
||||
| PH-05 | BLOCKED | 任务状态过滤、空态和全部详情链接未完成独立 UI 留证。 |
|
||||
| PH-06 | PASS | [A] uncertain→verify(not_executed)→resume→单次 Mock execute 通过。 |
|
||||
| PH-07 | PASS | [A] uncertain 任务的 succeeded/failed 核验与 finish 可区分、可审计。 |
|
||||
| PH-08 | BLOCKED | 未暂停共享账号、未停止共享代理/gateway,也未注入未知 hold。 |
|
||||
| PH-09 | PASS | [A] queued/policy_hold cancel 204;终态任务 cancel 明确拒绝。 |
|
||||
| PH-10 | BLOCKED | [A] 两 worker 至多一次领取通过;崩溃/租约过期未因共享资源限制执行。 |
|
||||
|
||||
### AUD
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| AUD-01 | PASS | [A][U] Mock 动作链、task/attempt/runtime 关联和脱敏审计可读。 |
|
||||
| AUD-02 | BLOCKED | 多条件、日期、深链和非法 RFC3339 的完整矩阵未执行。 |
|
||||
| AUD-03 | BLOCKED | 未专门生成超过 25 条审计并验证当前页 CSV。 |
|
||||
| AUD-04 | BLOCKED | 未在共享运行栈阻断 audit GET 后完成恢复核验。 |
|
||||
|
||||
### SET
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| SET-01 | PASS | [A][U] 默认值、白名单设置读取/保存/恢复通过。 |
|
||||
| SET-02 | BLOCKED | 数值全边界、审批不完整、设置未知字段/尾随 JSON 的完整用例未独立执行。 |
|
||||
| SET-03 | BLOCKED | 当前 AI/转写未配置;AI 分析 503 已观察,但真实供应商成功/恢复未验证。 |
|
||||
| SET-04 | FAIL | [E] `metric_age_seconds=60` 保存 200 后,超龄作品仍保留未来 `next_metric_at` 且无停止原因。 |
|
||||
|
||||
### STR
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| STR-01 | BLOCKED | 未在测试账号上执行密码/实名/业务资料完整保存和敏感字段核验。 |
|
||||
| STR-02 | BLOCKED | 未完成双账号切换与迟到保存竞态。 |
|
||||
| STR-03 | BLOCKED | 未在双大号/双小号和跨平台样本上完成关系唯一性流程。 |
|
||||
| STR-04 | BLOCKED | 六动作策略候选配置未完成独立 UI/API 矩阵。 |
|
||||
| STR-05 | BLOCKED | 策略排序、删除、解除关系和恢复链未完成独立 E2E。 |
|
||||
| STR-06 | BLOCKED | 两段保存失败与切换竞态未在 UI 中注入。 |
|
||||
| STR-07 | BLOCKED | 资料枚举/业务限制/登录结果的完整 API/UI 矩阵未完成。 |
|
||||
|
||||
### COL
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| COL-01 | PASS | [A][U][E] 竞品登记、主页链接候选和状态读取通过;临时竞品已暂停。 |
|
||||
| COL-02 | BLOCKED | 无可用真实采集账号,sync 前置无法完成;失败已记录为 503 credential resolution。 |
|
||||
| COL-03 | BLOCKED | 竞品真实目标、分页和一级评论未采集。 |
|
||||
| COL-04 | BLOCKED | 自有账号后台采集未执行。 |
|
||||
| COL-05 | BLOCKED | 回溯、周期、checkpoint 和断点恢复未执行。 |
|
||||
| COL-06 | BLOCKED | 未做登出/错身份/挑战的真实采集实验。 |
|
||||
| COL-07 | FAIL | [U][A] API 作品详情/过滤可读,但工作台规则/线索区域偶发空白,整体页面验收失败。 |
|
||||
| COL-08 | BLOCKED | 未获得真实平台指标和等待窗口。 |
|
||||
| COL-09 | BLOCKED | 未执行真实同步并发、重复来源和读取故障矩阵。 |
|
||||
|
||||
### MAT
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| MAT-01 | PASS | [E] 素材选择接口成功且未自动开始处理。 |
|
||||
| MAT-02 | BLOCKED | 无真实可下载视频、音轨和转写供应商。 |
|
||||
| MAT-03 | BLOCKED | 无真实无音轨/无语音样本。 |
|
||||
| MAT-04 | BLOCKED | 未制造真实媒体、磁盘或供应商失败。 |
|
||||
| MAT-05 | FAIL | [E] 未处理素材的仿写确认/更新返回 409,不能保存要求和人工稿。 |
|
||||
| MAT-06 | FAIL | [E] 当前部署 `material/process` 返回 405,处理/仿写边界无法按计划推进。 |
|
||||
|
||||
### LEAD
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| LEAD-01 | PASS | [E] 规则创建、关键词、列表、详情和非法输入链通过。 |
|
||||
| LEAD-02 | PASS | [E] 规则编辑、启用/停用和错误返回可见;删除不在当前能力内。 |
|
||||
| LEAD-03 | FAIL | [U][E] 工作台规则/线索页签偶发空白,一级评论选择/分析入口不能稳定使用。 |
|
||||
| LEAD-04 | BLOCKED | 未配置真实 AI,未做 owned/competitor 完整线索判定。 |
|
||||
| LEAD-05 | BLOCKED | AI 503 已观察,但重复分析/禁用规则与恢复矩阵未完整执行。 |
|
||||
| LEAD-06 | BLOCKED | 没有真实 UID 线索,未验证人工联系入口。 |
|
||||
| LEAD-07 | PASS | [E] 单评论、单规则、过滤和只读分析结果接口可读;未产生平台写。 |
|
||||
|
||||
### OP
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| OP-01 | BLOCKED | 无可核验真实评论目标和 connector credential,未执行评论回复。 |
|
||||
| OP-02 | BLOCKED | API 会话存储通过,但没有真实入站事件,不能替代平台私信验收。 |
|
||||
| OP-03 | BLOCKED | 未执行真实私信发送和收件方平台核验。 |
|
||||
| OP-04 | BLOCKED | 未具备两个真实会话/评论,未执行完整草稿切换与迟到响应。 |
|
||||
| OP-05 | BLOCKED | 未执行真实 gateway 中断后的未知写结果;不自动重试。 |
|
||||
| OP-06 | BLOCKED | 未执行真实点赞/关注;preview 不作为成功证据。 |
|
||||
| OP-07 | FAIL | [E] 错误/自目标被 `TARGET_MISMATCH` 拒绝,但 confirmed repost 未返回明确 `REPOST_TEXT_UNSUPPORTED`。 |
|
||||
| OP-08 | BLOCKED | 未完成真实 operation 状态、crypto 禁用和完整 UI 边界矩阵。 |
|
||||
|
||||
### EVT
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| EVT-01 | BLOCKED | 未建立真实监听基线,也未产生四类平台通知。 |
|
||||
| EVT-02 | BLOCKED | 无真实事件和页面可见时间戳,未测 5 秒/30 秒。 |
|
||||
| EVT-03 | BLOCKED | 未停止共享 gateway/浏览器执行断连重连。 |
|
||||
| EVT-04 | BLOCKED | 未制造真实 ack/processing 中断和恢复窗口。 |
|
||||
| EVT-05 | BLOCKED | 未建立真实大号/小号策略和四类通知。 |
|
||||
| EVT-06 | BLOCKED | 未产生真实自动动作,未验证共享冷却/候选/人工例外。 |
|
||||
| EVT-07 | BLOCKED | 未配置 AI,也未执行真实写失败/不确定场景。 |
|
||||
| EVT-08 | BLOCKED | 未捕获真实写在途和执行前状态变化。 |
|
||||
|
||||
### API
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| API-01 | FAIL | [E] 当前补测中未知 `owned` source 仍返回 201;去重/合法多来源通过,但未知来源预期应拒绝。 |
|
||||
| API-02 | FAIL | [A][E] 快照、去重、迟到/非法值通过;缩短监测年龄后计划未停止,`next_metric_at`/原因错误。 |
|
||||
| API-03 | PASS | [E] 评论导入、去重、详情、过滤、缺作者保留和关联校验通过。 |
|
||||
| API-04 | PASS | [E] 合法 comment baseline 201/200 去重、process、display 和缺 UID blocked 均通过;此前错误 payload 的 400 不计入。 |
|
||||
| API-05 | PASS | [E] 消息导入/去重、会话读取和同 peer 跨账号隔离通过;非法字段拒绝。 |
|
||||
| API-06 | FAIL | [E] body/大小/资源/方法边界通过,但拼错 API 路径和 `/api/creator/profiles` 返回 200 HTML,不符合公开 JSON 边界。 |
|
||||
|
||||
### END
|
||||
|
||||
| 用例 | 状态 | 结果与证据 |
|
||||
| --- | --- | --- |
|
||||
| END-01 | BLOCKED | [E] 自动策略已停用、临时竞品暂停;没有真实平台写账本可做平台侧清理。 |
|
||||
| END-02 | FAIL | [E] 临时账号/竞品/规则/隔离项目已清理或停用;API 作品、评论、指标、消息、事件无公开删除 API,只能保留 RUN 残余,未满足完全清理。 |
|
||||
|
||||
## 当前缺陷与外部前置
|
||||
|
||||
1. **P1:** UI 错误凭据请求长期停留“登录中”,没有可见 401 错误。
|
||||
2. **P1:** connector credential 解析失败,导致真实竞品/自有采集和平台写操作无法进入。
|
||||
3. **P1:** gateway 受限读取得到 HTML/空 detail;当前真实作品数据不足以完成采集与写目标校验。
|
||||
4. **P1:** 事件读取出现 CDP `Runtime.evaluate` 失败,实时监听、去重、重连和自动响应均无证据。
|
||||
5. **P2:** 指标监测年龄变更没有重排/停止超龄计划。
|
||||
6. **P2:** `material/process` 当前部署为 405,素材处理及仿写依赖链无法进入。
|
||||
7. **P2:** 工作台规则/线索页签偶发空白。
|
||||
8. **P2:** API 未知路径出现 SPA HTML 200;应返回清晰 JSON 404/405。
|
||||
9. **P2:** confirmed repost 未得到明确 `REPOST_TEXT_UNSUPPORTED`,仅得到目标不匹配。
|
||||
|
||||
## 清理与状态
|
||||
|
||||
- 未停止、删除共享 Compose 服务、共享数据卷或共享业务资源。
|
||||
- 未引用的临时镜像已删除,保留的验收镜像仍为 enabled;临时竞品已 pause;测试规则已 disable;临时账号已 revoke;隔离 Compose 已销毁,容器/卷/网络均为 0。
|
||||
- settings 已恢复原值;未输出或归档任何 Cookie、密码、token、主密钥或原始平台响应。
|
||||
- API-only RUN 记录因没有公开删除接口而保留;报告没有把这些记录当作 REAL 验收证据。
|
||||
Reference in New Issue
Block a user