fix: complete Douyin release remediation
This commit is contained in:
+42
-4
@@ -1,6 +1,6 @@
|
||||
# CreatorHub 部署
|
||||
|
||||
本文档按 `feat/python-gateway-douyin` 当前代码说明单台 Linux 主机 Docker Compose 部署及离线检查,不证明新产品功能已实现。[plan01](plan01.md) 是业务范围与验收依据;离线结果不能替代抖音/小红书最终真机验收。
|
||||
本文档按当前发布提交说明单台 Linux 主机 Docker Compose 部署及离线检查,不证明新产品功能已实现。[plan01](plan01.md) 是业务范围与验收依据;离线结果不能替代抖音/小红书最终真机验收。
|
||||
|
||||
当前控制面仍使用单用户 HTTP Basic Auth(除 `/healthz` 外,包括静态页面),不提供 RBAC 或多租户隔离。开发目标不新增认证/访问限制,但本轮未删除现有代码或配置;以下变量仍须填写,不新增认证 profile。
|
||||
|
||||
@@ -86,7 +86,11 @@ curl --fail --silent --show-error \
|
||||
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 14;' \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 32;' \
|
||||
| grep -qx 1
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 33;' \
|
||||
| grep -qx 1
|
||||
|
||||
docker compose ps
|
||||
@@ -340,6 +344,32 @@ docker compose exec -T postgres pg_restore --list \
|
||||
< "$BACKUP_FILE" >/dev/null
|
||||
```
|
||||
|
||||
PostgreSQL dump 之外,发布备份必须同时包含 credentials、materials 和动态 Profile 卷;这些归档存放在部署侧受限目录,不放进仓库或共享聊天。示例(`BACKUP_DIR` 使用独立磁盘或 Secret Manager 的受控挂载目录):
|
||||
|
||||
```bash
|
||||
set -Eeuo pipefail
|
||||
umask 077
|
||||
BACKUP_DIR=/srv/creatorhub-backups/$(date +%Y%m%d-%H%M%S)
|
||||
mkdir -p "$BACKUP_DIR/profiles"
|
||||
# PostgreSQL dump
|
||||
pg_dump_file="$BACKUP_DIR/creatorhub.dump"
|
||||
docker compose exec -T postgres pg_dump -U creatorhub -d creatorhub --format=custom > "$pg_dump_file"
|
||||
test -s "$pg_dump_file"
|
||||
# Credential and material volumes
|
||||
for volume in creatorhub_credentials creatorhub_materials; do
|
||||
docker run --rm -v "$volume:/data:ro" -v "$BACKUP_DIR:/backup" alpine:3.22 \
|
||||
tar czf "/backup/${volume}.tar.gz" -C /data .
|
||||
done
|
||||
# Dynamic browser Profile volumes; absence is an explicit empty set.
|
||||
for volume in $(docker volume ls -q --filter name='^creatorhub-profile-'); do
|
||||
docker run --rm -v "$volume:/data:ro" -v "$BACKUP_DIR/profiles:/backup" alpine:3.22 \
|
||||
tar czf "/backup/${volume}.tar.gz" -C /data .
|
||||
done
|
||||
find "$BACKUP_DIR" -type f -exec sha256sum {} + > "$BACKUP_DIR/SHA256SUMS"
|
||||
```
|
||||
|
||||
`CREATORHUB_CREDENTIAL_MASTER_KEY` 不写入上述归档;部署管理员必须在独立的 Secret Manager/OS Keyring 保留一份受访问控制的密钥托管记录,并确认恢复主机能注入同一值。恢复前核对 `SHA256SUMS`、主密钥记录和备份目录权限;恢复后在隔离 Compose 项目中还原四类卷,检查账号凭据可解密、材料文件可读、Profile 可挂载,再切换服务。任何一类缺失都判定为恢复失败,不把应用健康检查当作数据恢复证据。
|
||||
|
||||
拉取已审核版本后,重新执行部署和验证:
|
||||
|
||||
```bash
|
||||
@@ -379,7 +409,11 @@ docker compose up --detach --build
|
||||
< "$BACKUP_FILE"
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub_restore_check -v ON_ERROR_STOP=1 -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 12;' \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 32;' \
|
||||
| grep -qx 1
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub_restore_check -v ON_ERROR_STOP=1 -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 33;' \
|
||||
| grep -qx 1
|
||||
docker compose exec -T postgres \
|
||||
dropdb --force -U creatorhub creatorhub_restore_check
|
||||
@@ -426,7 +460,11 @@ docker compose up --detach --build
|
||||
< "$BACKUP_FILE"
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub -v ON_ERROR_STOP=1 -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 12;' \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 32;' \
|
||||
| grep -qx 1
|
||||
docker compose exec -T postgres \
|
||||
psql -U creatorhub -d creatorhub -v ON_ERROR_STOP=1 -tAc \
|
||||
'SELECT 1 FROM schema_migration WHERE version = 33;' \
|
||||
| grep -qx 1
|
||||
|
||||
git switch --detach "$RESTORE_REV"
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
# 抖音发布修复开发验收记录(工作区)
|
||||
|
||||
- 日期:2026-09-16(Asia/Shanghai)
|
||||
- 分支:`fix/douyin-release-remediation`
|
||||
- 提交:当前分支 `HEAD`(`fix: complete Douyin release remediation`)
|
||||
- PR:`#48`;远程 CI 已触发,受 runner 队列阻塞
|
||||
- 基线:`main@977e541`
|
||||
- 工作区:提交后保持干净;本记录不代表已发布镜像
|
||||
- 发布结论:**阻塞,不满足抖音完整生产发布条件**
|
||||
|
||||
## 1. 本地质量门禁
|
||||
|
||||
| 项目 | 结果 | 证据/限制 |
|
||||
| --- | --- | --- |
|
||||
| Go 全量测试 | 通过 | `go test -p 1 -parallel 1 -count=1 ./...` |
|
||||
| Go race | 通过 | `go test -race -p 1 -parallel 1 -count=1 ./...` |
|
||||
| Go 静态检查 | 通过 | `go vet ./...` |
|
||||
| Go 构建 | 通过 | `go build ./cmd/control-plane` |
|
||||
| Go 覆盖率 | 通过本地门槛 | `go tool cover` 总语句覆盖 **65.4%**;PostgreSQL JSONL 记录 457 个测试事件、0 跳过、0 失败 |
|
||||
| Python gateway | 通过 | 73 项 unittest 通过;生产代码覆盖 **65.38%**;按 `covered_lines * 100 >= num_statements * 65` 原始计数复核 |
|
||||
| 前端 | 通过本地门槛 | `npm ci`、93 项测试、构建通过;statements **65.05%**、lines **67.18%**、branches **55.87%**、functions **57.14%** |
|
||||
| Compose 配置 | 通过 | `docker compose config --quiet` 及合并开发配置通过 |
|
||||
| Compose 镜像 | 通过本地检查 | 当前工作区镜像构建成功;服务 healthy;`/readyz` 成功;容器内 `ffmpeg`、`ffprobe` 可执行 |
|
||||
| CI 工作流 | 已补门禁 | PostgreSQL 测试、跳过测试拒绝、原始 Python 覆盖率、前端覆盖产物、Compose 清理和 evidence artifact 已写入 `.gitea/workflows/douyin-release-gate.yaml`;尚未运行远程 CI |
|
||||
|
||||
Compose 检查使用临时本地测试凭据,仅用于本地验证;没有部署生产或写入生产配置。
|
||||
|
||||
## 2. A01–A16 平台与监听
|
||||
|
||||
| 编号 | 状态 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| A01 | 阻塞 | 代码已增加事件身份、边界和时间记录;四类入站互动、入站私信、5 秒/30 秒及断连恢复没有当前标准 Docker 浏览器真实证据 |
|
||||
| A02 | 阻塞 | `repost` 仍明确返回 `ACTION_UNAVAILABLE`;没有范围变更批准,不能放行 |
|
||||
| A03 | 本地通过/真机待验收 | 事件目标解析和本地对象缺失处理已修复并有回归测试;真实平台目标关联未验收 |
|
||||
| A04 | 本地通过/真机待验收 | 非正常账号的策略停用、恢复不自动启用已有本地测试;真实账号状态转换未验收 |
|
||||
| A05 | 本地通过/真机待验收 | 监听代际、session token 和新边界已持久化;真实停启及迟到事件未验收 |
|
||||
| A06 | 本地通过/真机待验收 | 解析/详情/连接失败恢复有本地测试;真实断连、缺口和新基线未验收 |
|
||||
| A07 | 本地通过/真机待验收 | 自动动作冷却和执行锁有 PostgreSQL/race 回归;批准 AI 调用和真实中断恢复未验收 |
|
||||
| A08 | 本地通过/真机待验收 | 已接收未领取事件的恢复结论有本地回归;真实进程退出/重启证据缺失 |
|
||||
| A09 | 本地通过/真机待验收 | PostgreSQL advisory lock 与排队恢复已测试;真实人工/自动竞争未验收 |
|
||||
| A10 | 本地通过/真机待验收 | 在途 marker 和旧浏览器代际保护已实现;真实 SDK/CDP 超时未验收 |
|
||||
| A11 | 本地通过/真机待验收 | 平台消息身份、历史消息和操作关联有回归;真实发送→事件→历史未验收 |
|
||||
| A12 | 本地通过/真机待验收 | 平台/接收/处理/写入时间字段已分离;真实五秒时限未验收 |
|
||||
| A13 | 未完成 | 核验记录入口已保留本地路径;真实成功、未发送、不明和另发关联未验收 |
|
||||
| A14 | 未完成 | 历史游标和分页代码已增加;真实空库会话发现、超过上限继续读取未验收 |
|
||||
| A15 | 本地通过/真机待验收 | 策略检查顺序和跳过原因可持久化;真实多策略选择证据缺失 |
|
||||
| A16 | 本地通过/真机待验收 | 当前连接状态和持久历史缺口已分开;真实重启后缺口展示未验收 |
|
||||
|
||||
## 3. B01–B19 业务、素材、页面与环境
|
||||
|
||||
| 编号 | 状态 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| B01 | 本地通过/镜像样本待验收 | WAV 输出格式和临时文件流程已修复;当前镜像仅完成 `ffmpeg`/`ffprobe` 可执行检查,未完成真实平台媒体样本 |
|
||||
| B02 | 阻塞 | 正文与文件引用已分离;Whisper/faster-whisper 入口、供应商、模型、参数和费用尚未批准并纳入标准镜像 |
|
||||
| B03 | 本地通过/真机待验收 | 素材领取 token/CAS 和不明结果不自动重试已测试;真实双击、并发、收费调用未验收 |
|
||||
| B04 | 本地通过/真机待验收 | 指标计划按发布时间和设置 checkpoint 有 PostgreSQL 回归;真实零值、下降、UTC/DST 和边界未验收 |
|
||||
| B05 | 本地通过/真机待验收 | 来源启停、年龄和人工阻断在本地路径已覆盖;真实平台调用为零及解除后采样未验收 |
|
||||
| B06 | 本地通过/真机待验收 | 发现与指标采样职责已分离;真实发现/采样时间序列未验收 |
|
||||
| B07 | 本地通过/真机待验收 | 计划点、实际采样和保存 checkpoint 已修复;真实恢复与设置修改未验收 |
|
||||
| B08 | 本地通过/真机待验收 | 普通账号只读采集资格与禁言处理有回归;真实多账号选择未验收 |
|
||||
| B09 | 本地通过/真机待验收 | 未来/无效时间标记为待核验;真实平台样本和补时间流程未验收 |
|
||||
| B10 | 本地通过/真机待验收 | SSE CRLF、拆包、多帧和断连测试通过;标准 Docker 浏览器页面展示未验收 |
|
||||
| B11 | 未完成 | 线索联系表单代码已调整;真实评论作者私信、取消和逐次确认未验收 |
|
||||
| B12 | 本地通过/真机待验收 | 素材步骤失败原因和不假成功路径有回归;真实磁盘/配额/无语音样本未验收 |
|
||||
| B13 | 本地通过/真机待验收 | 运行中代理禁用保护和路由已有本地测试;真实运行环境引用未验收 |
|
||||
| B14 | 未完成 | Douyin 目标预览 API 已增加;真实主页/分享/短链解析未验收 |
|
||||
| B15 | 未完成 | 详情、筛选和素材预览代码有变更;完整页面矩阵及真实媒体/转写未验收 |
|
||||
| B16 | 本地通过/真机待验收 | 规则快照、分析结果和失败状态持久化路径有回归;真实多规则与刷新后证据未验收 |
|
||||
| B17 | 本地通过/真机待验收 | fingerprint seed 唯一约束、网络出口管理和运行保护有本地回归;真实 Profile、代理协议和出口未验收 |
|
||||
| B18 | 本地通过/真机待验收 | 空白语义和前后端 trim 有回归;真实页面组合输入未验收 |
|
||||
| B19 | 本地通过/真机待验收 | 页面编辑保护、取消和保存失败路径有前端回归;真实页签/路由离开未验收 |
|
||||
|
||||
## 4. R01–R07 发布与恢复
|
||||
|
||||
| 编号 | 状态 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| R01 | 本地通过/镜像样本待验收 | 关联 B01;本地 FFmpeg 和镜像工具检查通过,真实素材样本缺失 |
|
||||
| R02 | 阻塞 | 标准镜像没有已批准且可执行的 Whisper/faster-whisper 转写入口;不能以环境变量代替供应商和参数批准 |
|
||||
| R03 | 本地通过/CI 待验收 | Go 65.4%、Python 65.38%、前端门槛通过;远程 CI artifact 和实际 runner 执行尚未取得 |
|
||||
| R04 | 未完成 | 未执行停写下的数据库、credentials、materials、Profile、主密钥完整备份 |
|
||||
| R05 | 未完成 | 未固定当前发布提交对应的远程镜像 digest;外部 CDP 历史记录不能替代当前 Compose 全链路 |
|
||||
| R06 | 本地通过/CI 待验收 | 最小 CI 门禁已补齐;尚未注入失败并运行远程工作流验证失败结论 |
|
||||
| R07 | 本地通过/发布待验收 | 部署文档和 schema 版本已更新;尚未生成实际发布 digest 并按该 digest 复核 |
|
||||
|
||||
## 5. T01–T14 真实矩阵
|
||||
|
||||
T01 身份与登录、T02 竞品与分页、T03 指标计划、T04 素材与 AI、T05 线索与人工联系、T06 四类互动、T07 六种写操作、T08 策略冷却、T09 边界恢复、T10 同账号协调、T11 时限页面、T12 私信、T13 环境代理、T14 页面完整性:均为**未执行/阻塞**。
|
||||
|
||||
原因:真实操作必须通过 CreatorHub 系统执行;当前没有完成标准 Docker gateway 下的真实账号、目标、第二互动账号、批准的 AI/转写供应商样本、时间窗口、费用边界及隔离恢复环境登记。此前直接在抖音页面发生的两个点赞和一条测试评论已撤销,不计为验收证据。
|
||||
|
||||
## 6. 发布决策
|
||||
|
||||
当前不能调用“完整流程可生产发布”或 `goal_complete`。必须补齐:
|
||||
|
||||
1. `repost` 的实现结果或正式范围裁决;
|
||||
2. 批准的转写供应商、模型、参数、费用和标准镜像样本;
|
||||
3. CreatorHub 系统驱动的真实平台逐项矩阵及第二互动账号;
|
||||
4. 停写完整备份、隔离同版本恢复、正常退出和最终镜像 digest;
|
||||
5. 远程 CI 成功 artifact,并确认所有数据库测试未跳过。
|
||||
@@ -0,0 +1,280 @@
|
||||
# 抖音先行发布:修复计划与验收标准
|
||||
|
||||
> 日期:2026-09-15
|
||||
> 状态:计划范围已由使用者确认;本轮本地修复、回归测试和 Compose 检查已执行,真实平台全矩阵、AI/转写批准样本、备份恢复和部署发布仍未完成。
|
||||
> 评审基线:`main@977e541fef1871b14825cbccedea50543d03caa5`,评审前已同步远程。
|
||||
> 发布判断:当前不满足抖音完整生产发布条件。本文不代表修复完成、部署完成或平台能力已通过。
|
||||
> 需求依据:[需求细化与验收标准](../plan01.md)、[仓库规范](../../AGENTS.md)。冲突时以使用者最新确认和需求依据为准。
|
||||
|
||||
## 1. 范围与完成定义
|
||||
|
||||
本轮只修复并验收**抖音先行发布**,涵盖账号与环境、竞品采集、素材与 AI、评论线索、人工发送、事件监听、自动响应、私信及发布恢复。小红书不计本轮发布阻碍,但修改共用代码不能破坏其现有行为;两平台最终交付仍按原需求执行。
|
||||
|
||||
- 不新增认证、访问限制、网络隔离等本期排除的安全策略,也不删除现有保护。凭据不泄露、身份不串号和发送前核验仍为必须条件。
|
||||
- 不自动登录、不以轮询或 Mock 替代平台事件、不自动补发历史或结果不明的动作,不增加群发、自动聊天、视频生成等需求。
|
||||
- 不擅自选择付费供应商、上传用户数据、部署、执行真实互动或删除数据。本文确认仅授权编写计划;后续测试环境、账号、目标、动作、次数与费用须有适用授权。
|
||||
- 不重写系统。优先复用现有 Go 控制面、Python gateway、PostgreSQL、React 与现有任务/记录;修复真实根因,不引入通用工作流引擎、额外 MQ、Redis 或隐藏回退。
|
||||
- 开发阶段不增加数据迁移兼容、回填或双写;需要破坏性重建时必须说明影响并取得授权。发布恢复验证使用**同版本**数据与产物,不借此引入兼容框架。
|
||||
|
||||
### 1.1 发布通过条件
|
||||
|
||||
同时满足以下条件才可称为“抖音完整流程可生产发布”:
|
||||
|
||||
1. 本文所有修复条目完成并有可重复回归证据;未完成项不得用低优先级或“暂不影响演示”自动豁免。
|
||||
2. `plan01.md` 第 8 节全部抖音适用 AC 均有实际结果和证据,包括本次评审未发现问题的既有能力。
|
||||
3. 真实平台能力矩阵逐分项完成;缺支持、条件支持及恢复缺口经使用者裁决。任何范围变更必须独立记录批准,不能修改测试预期使其假通过。
|
||||
4. 测试、覆盖率、当前发布镜像、健康检查、正常退出和完整备份恢复全部通过。
|
||||
5. 修复提交、测试所用提交与发布镜像可关联;工作区差异必须记录,不能以旧版本成功证明新版本。
|
||||
|
||||
不以功能数量计算完成百分比,也不在平台与 AI 前置条件未确认前承诺发布日期。
|
||||
|
||||
## 2. 评审基线与证据边界
|
||||
|
||||
### 2.1 来源与编号
|
||||
|
||||
本文自包含修复目标和验收要求,不依赖会话临时文件才能执行。原始评审来自工作流 `9113a807-a828-4693-8d9a-dc68ba57bdc5`:
|
||||
|
||||
| 评审 | 子任务 | 原报告 | 本文编号 |
|
||||
| --- | --- | --- | --- |
|
||||
| 平台监听、动作、消息 | `515c6fc1-50ff-4df3-a793-5634feaa11ea` | `reviews/platform.md` | A01–A16 |
|
||||
| 采集、素材、页面、账号与代理 | `db705b2c-92cf-4ed3-ab9c-36b46cc93b14` | `reviews/business.md` | B01–B19 |
|
||||
| 测试、镜像与恢复 | `19edc2c3-049d-4788-acc2-2c67e98523af` | `reviews/release.md` | R01–R07 |
|
||||
|
||||
编号只用于跟踪,不改变原 AC。原报告的重要性等级口径不完全一致,本文统一为:
|
||||
|
||||
- **P0:执行安全与平台前置阻碍**。必须优先处理;相应真实自动动作不得先行验收。
|
||||
- **P1:完整发布必修/必验**。可按依赖并行推进,但未完成不能完整发布。
|
||||
- **P2:记录、交互和交付完整性**。后置处理,不代表自动豁免。
|
||||
|
||||
类型分为“确定缺陷”“未完成能力”“缺验收证据”。确定缺陷主要来自静态调用链审查;仅提音错误在本轮另有本地实际复现。实施前须针对当前提交复核定位,行号是评审基线位置,不是后续修改约束。
|
||||
|
||||
### 2.2 已有真实证据
|
||||
|
||||
[2026-09-14 抖音真实记录](../evidence/douyin-live-20260914.md)仅证明所列样本:自身身份、目标资料、一个会话的六条历史消息(含非文本)、一次人工出站文本私信、一次视频下载、reload 后取得新监听基线。
|
||||
|
||||
该记录使用外部 CDP,不证明当前 Compose 全链路、四类互动监听、入站私信、无遗漏恢复、全部写动作、自动冷却或媒体/AI 全流程通过。文件纳入当前提交不等于当前提交的镜像已复验。旧报告中的失败也必须重新核对,不能直接当作当前缺陷。
|
||||
|
||||
### 2.3 本轮实际检查
|
||||
|
||||
| 项目 | 实际结果 | 限制 |
|
||||
| --- | --- | --- |
|
||||
| Go test / vet / race / 构建 | PostgreSQL 环境下全量测试、vet、race 和构建通过;Go JSONL 记录 457 个测试事件全部通过、0 跳过 | 仅证明本地同版本工作区,不证明真实平台或生产部署 |
|
||||
| Go 覆盖率 | `go tool cover` 总语句覆盖 65.4% | 仅是本地覆盖门禁;不能替代 A/B/R 逐项验收 |
|
||||
| Python | 73 项通过;生产代码覆盖率 65.38%,并按 JSON 原始计数复核 | 仅证明 gateway 本地测试;未证明真实浏览器平台动作 |
|
||||
| 前端 | lockfile 全新安装、93 项测试和构建通过;statements 65.05%、lines 67.18%、branches 55.87%、functions 57.14% | 仍有大量页面分支未覆盖,未证明真实浏览器页面矩阵 |
|
||||
| Compose | 两套配置解析、当前镜像构建、启动 healthy、`/readyz`、容器内 `ffmpeg`/`ffprobe` 通过 | 使用临时本地测试凭据;未发布、未固定远程镜像 digest、未完成备份恢复 |
|
||||
| 提音复现 | 原参数输出 `.wav.tmp` 失败,显式 WAV 格式对照成功 | 本地合成样本,不是平台媒体端到端验收 |
|
||||
| 工作区 | 保留 `cmd/docker_gateway/test_gateway.py` 既有修改 | 评审确认修改前后 Python AST 相同;不得覆盖他人修改 |
|
||||
|
||||
原始测试日志目录:`/tmp/creatorhub-release-977e541-diS2rF`。这是定位线索,不是长期发布证据;正式验收须将脱敏日志摘要和必要产物登记到仓库证据目录。
|
||||
|
||||
## 3. 阶段与依赖
|
||||
|
||||
| 阶段 | 工作内容 | 依赖 | 阶段退出条件 |
|
||||
| --- | --- | --- | --- |
|
||||
| S0 前置确认与证据冻结 | A01、A02 能力调查;R02 AI/转写配置与样本;专用数据库、平台测试账号、部署/恢复环境授权 | 使用者批准;复用 `plan01.md` G0 | 记录允许的账号/动作/次数/费用、逐类能力及未知项;未获批准项明确阻塞,不启动相应真实测试 |
|
||||
| S1 发送与监听可靠性 | A03–A13、A15–A16;B10 页面推送 | 本地确定性修复可立即开展;真实验证依赖 S0 | 状态变化、排队、超时、进程退出、重复事件、冷却和基线回归通过;不明仅核验、旧事件不补发 |
|
||||
| S2 账号环境与只读采集 | A04;B04–B09、B13–B14、B17 | 身份及采集边界明确 | 同环境登录/身份、稳定指纹、代理约束、真实身份导入、分页与固定计划通过;只读资格不混同自动动作资格 |
|
||||
| S3 素材与线索 | B01–B03、B12、B15–B16、B18;R01–R02 | S2 可靠作品来源;AI/转写相关实现前完成 S0 配置和样本批准 | 两次确认、真实素材正文、防重复、分步失败、预览、线索判断和历史依据完整 |
|
||||
| S4 人工联系与私信 | A09、A11、A13–A14;B11、B19 | S1 同账号写协调;S2 身份;S3 线索数据 | 评论/线索联系、历史会话发现/分页、跨账号隔离、非文本、不明核验及新发送关联通过 |
|
||||
| S5 完整发布验收 | A01–A02 真机验收;R03–R07;所有 AC | S1–S4 及所需授权完成 | 第 7–9 节全部通过,证据对应同一发布版本;不支持项已有正式裁决 |
|
||||
|
||||
执行顺序是依赖关系,不是全面推倒重做。S1、S2 中职责独立的修复可并行;同一文件/工作区保持单一写入者。每个非平凡改动先写失败回归,修正后复测;大规模重构或实验必须先建分支。平台可行性调查应在 S0 尽早暴露限制,不应拖到最后才发现某类动作无法支持。
|
||||
|
||||
## 4. 平台、自动响应与消息修复清单
|
||||
|
||||
所有条目初始状态为**待修复/待验收**;完成时填写第 10 节记录,不直接将现有基础标为完成。
|
||||
|
||||
| ID / 优先级 / 类型 | 评审定位与问题 | 修复目标 | 最小回归与通过标准 | 原需求 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| A01 / P0 / 缺验收证据 | `douyin.py:1175–1318,1569–1604`;四类互动及入站私信缺真实身份、边界和时限证据 | 逐类核实 ID、接收账号、互动 UID、目标、时间及恢复能力;缺可靠身份的自动能力保持不可启用 | 按第 8 节逐类取证;重复/重启稳定,历史及不明边界不触发;不能用内容哈希猜唯一 | A6;AC-A5/A12/A13、M2、B1/B3 |
|
||||
| A02 / P0 / 未完成能力 | `gateway.py:885–886`、`douyin.py:1709`;转发直接不可用 | 实现可核验转发,或提交真实限制并取得明确范围变更 | 目标、执行账号、需要的文案及平台结果一致;成功/拒绝/不明分别记录;未经批准仍属发布阻碍 | AC-A7 |
|
||||
| A03 / P1 / 确定缺陷 | `creator.go:1040–1061`、`creator_events.go:427–454`;事件动作依赖本地作品/评论已采集 | 区分平台目标与内部对象,只解析该动作必需的目标;不以定时采集完成为先决条件 | 事件具有可靠平台目标但本地无对应资料时仍可执行适用动作;关注/私信不因无关评论查找失败;缺必要目标明确跳过 | A3;AC-A5/A6/A7 |
|
||||
| A04 / P0 / 确定缺陷 | `accounts.go:179–184`;小号恢复正常后原策略可自行恢复 | 非正常状态下停用所有受影响策略;恢复账号不恢复策略 | 正常→禁言/封禁/注销→正常,各执行号策略仍停用;人工重新启用前调用次数为零;已有数据可查 | AC-A3/A14 |
|
||||
| A05 / P0 / 确定缺陷 | `actions.go:183–230`、`creator_events.go:195–322`;重新启用沿用旧边界 | 保存与启用对应的已验证新边界;保留去重与冷却 | 停用期间事件在重新启用后迟到也不发送;新边界未确认前不发送;确认后的新事件才按策略处理 | A6;AC-A12、B1 |
|
||||
| A06 / P1 / 确定缺陷 | `douyin.py:822–833,867–912`、`creator_events.go:305–322`;一次解析/详情失败可能长期冻结响应 | 连续性受损进入显式恢复及新边界确认流程;失败与缺口可见 | 注入详情错误、解析错误、队列溢出;旧/重试事件仅记历史,新基线后新事件恢复处理;无静默永久停摆,也不假称无遗漏 | AC-A12、B1/B3 |
|
||||
| A07 / P0 / 确定缺陷 | `actions.go:454–544`;AI 调用结束前冷却未提交 | 外部调用前原子持久化已选策略、冷却和执行记录 | 在 AI 开始后阻断/退出进程并恢复;该 UID 原冷却仍有效,旧事件不再执行,失败不转下一个小号;无匹配不占名额 | AC-A8/A9/A10 |
|
||||
| A08 / P1 / 确定缺陷 | `creator_events.go:427–454`、`actions.go:615–666`;已入库并确认接收但未领取事件缺恢复结论 | 给旧代际未领取事件记录明确恢复结论;不自动重放 | 在入库并确认接收后、处理前退出;恢复后事件不永久停在“收到”,有待核验/不补发原因及永久去重 | A6;AC-B1 |
|
||||
| A09 / P0 / 确定缺陷 | `actions.go:532–553,615–656,882–935`;排队操作变不明后仍可开始发送 | 区分等待与实际在途;取得账号执行权后原子重查操作状态及业务条件 | 用可控阻塞让排队跨过两分钟恢复窗口;被终结/标不明的操作不开始发送;人工与自动同账号不重叠 | AC-A14、W5、B2 |
|
||||
| A10 / P0 / 确定缺陷 | `douyin.py:1714`、`gateway.py:891–943`;私信超时未取消底层发送却释放占用 | 对仍可能在途的发送保留账号执行占用,直至确认终结或原浏览器代际结束 | SDK 超过十秒后延迟返回时,后续写入不重叠;不明不重发;新代际前验证旧执行已结束,不以应用超时当作取消成功 | AC-W5、M3、B2 |
|
||||
| A11 / P1 / 确定缺陷 | `actions.go:869–879,1018–1028`、`creator_events.go:442`、`creator.go:899–910`;发送/监听/历史消息键不同 | 用平台消息身份关联同一逻辑消息,保留本地操作关联 | 人工发送→监听→历史,以及监听→历史、重复分页均只展示一条;不明记录获得确切证据后更新原关联,不按正文猜匹配 | AC-M1/M2/M3、W5 |
|
||||
| A12 / P1 / 确定缺陷 | `douyin.py:867–914,1024–1033`、`actions.go:504,549–553`;接收与开始处理时间记晚 | 分开平台时间、推送接收、领取处理、实际写入与结束时间;跳过和失败也有结论 | 注入慢详情、慢 AI 和排队;时间如实暴露延迟。超过五秒记失败,不能靠更换计时点通过;页面时间另验 | AC-A13、B3 |
|
||||
| A13 / P1 / 未完成能力 | `creator.go:684–720`、`models.go:370–406`;不明缺人工核验及另发关联 | 提供仅记录核验的入口;新发送另确认并关联原操作和原因 | 核验成功/未发送/仍不明均不触发写入;另发有新标识、新确认、原操作及原因;旧标识永不重发 | W3;AC-W5/M3、B2 |
|
||||
| A14 / P1 / 未完成能力 | `creator.go:722–803`、`douyin.py:1712`;仅已知会话有限历史,无继续位置 | 按平台可提供范围发现会话并分页读取历史,准确表示截断与更多消息 | 本地空库可列出平台可见既有会话;超过当前上限可继续读取,页间去重;不可见历史说明限制;不能截断后写“无更多” | AC-M1、U5 |
|
||||
| A15 / P2 / 确定缺陷 | `actions.go:398–437,538–540`;前序策略跳过原因丢失 | 保存实际检查过的策略与跳过理由,不新增通用审计框架 | 第一策略不可用、第二策略选中后,两者顺序与原因均可查;不保存无关私信全文或凭据 | A3;AC-A6 |
|
||||
| A16 / P2 / 确定缺陷 | `creator_events.go:247,295–310`、`listener.go:43–49`;新基线覆盖历史缺口 | 当前连接状态与持久历史缺口分开显示 | 断连→新基线 ready 后仍可查旧至新边界间未知范围;重启不抹除缺口,不把连接恢复表述为无遗漏 | A6;AC-A12、B1 |
|
||||
|
||||
## 5. 采集、素材、页面与环境修复清单
|
||||
|
||||
| ID / 优先级 / 类型 | 评审定位与问题 | 修复目标 | 最小回归与通过标准 | 原需求 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| B01 / P1 / 确定缺陷 | `creator_material.go:180–196`;`.wav.tmp` 无显式输出格式 | 提音产出有效 WAV,完成后原子发布,失败清理临时产物 | 本地合成短音视频调用真实 FFmpeg;旧命令失败、新命令成功,音频可读取;失败不标完成 | AC-C8/C10、B6 |
|
||||
| B02 / P1 / 确定缺陷 | `creator_material.go:152–156`、`content.go:562,626–628`;把文件路径作为转写正文 | 区分正文与产物引用,生成时取得真实语音文字 | 测试生成器收到预期正文且不是路径;文件缺失/不可读明确失败,无隐藏描述替代;真实样本另外核对 | C4;AC-C8/C9 |
|
||||
| B03 / P1 / 确定缺陷 | `creator.go:435–460`、`content.go:533–638`;素材/生成缺服务端领取和防重复 | 一次选取/确认仅启动一次任务;仅显式重试失败步骤 | 两页面并发、双击、网络重试、重开/进程恢复不重复调用下载/转写/生成;成功产物复用,无共享临时文件互相覆盖;在途不明不盲目重启收费调用 | AC-C7/C8/C9、U2 |
|
||||
| B04 / P1 / 确定缺陷 | `metrics.go:68–78,170–215`、`settings.go:91–99`;旧作品后续间隔错误 | 后续指标计划始终按发布时间和当前时刻计算一致的未来点 | 第四小时首次发现立即采样→第七小时→第十五小时,而非第九小时;设置修改后也符合新参数的未来累计点 | AC-C4/C5、B4 |
|
||||
| B05 / P1 / 确定缺陷 | `metrics.go:15,155–166`、`creator.go:1438–1522`;派发绕过暂停/年龄/阻断 | 在平台读取前检查来源启停、年龄和人工阻断条件 | 暂停来源、已满监测年龄、需人工登录/验证时平台调用为零;解除后最多采一次当前值,不回放历史计划;多来源按实际有效来源处理 | AC-C3/C5、B4 |
|
||||
| B06 / P1 / 确定缺陷 | `collection.go:417–429`、`content.go:274–276`;发现路径改写已有作品指标 | 新作品发现与指标采样职责分开,数值和采样时间一致 | 第 1 小时指标采样后,第 1.5 小时发现检查不覆盖已有指标;首次作品可保存当前指标;到期采样同时更新数值/时间 | AC-C4/C5/C6 |
|
||||
| B07 / P1 / 确定缺陷 | `creator.go:1357–1361,1572–1576`、`collection.go:174–192`、`settings.go:52–108`;计划点冒充采样时间,设置起点不全 | 分离计划点、实际采样时间与固定分页窗口;保存时重设账号/评论未来起点 | 10:00 计划、12:00 恢复只能记真实采样时刻;自有采集不记未来时间;修改间隔后以保存时刻起算,指标仍按发布时间,不回填历史 | AC-C5、U6、B4 |
|
||||
| B08 / P1 / 确定缺陷 | `collection.go:348`、`creator.go:1423–1430,1580–1598`;仅大号采集,自动选错不可用账号 | 自有一级评论补采不依赖大号模式;区分只读与发送资格;选择真正可用采集账号 | 普通自有账号参与;禁言不因此禁止合法只读,封禁/注销排除;首账号不可用而后续可用时选择后者;全不可用明确阻断 | A1、W1;AC-W1 |
|
||||
| B09 / P1 / 确定缺陷 | `creator_collector.go:104–122`、`collection.go:410–411`;未来时间作品被丢弃 | 保留未来/无效/缺可靠时间资料为待核验,与已确认范围分开 | 未来、缺时区、无效时间均可查且范围不完整;不安排年龄计划;补可靠时间后按当前范围与未来计划处理,不猜日期 | C2;AC-B4 |
|
||||
| B10 / P1 / 确定缺陷 | `creator.go:97,108,112`、`dataProvider.js:262–290`;推送换行与拆帧错误 | 两端统一真实 SSE 格式,可靠解析拆包和连续帧,断连可见 | 用真实服务端字节经客户端解析验证更新回调;覆盖逐字节拆包、多帧、心跳和关闭;相关页面更新,不以 reader 创建代表展示成功 | AC-A13、B3 |
|
||||
| B11 / P1 / 确定缺陷及未完成能力 | `CreatorWorkbenchPage.jsx:497–548,646–712,823–826`;线索联系表单不可达,缺评论作者私信 | 从所选完整评论对象打开共用回复/私信表单,不依赖其他页签当前分页 | 在线索页直接选择同平台账号、目标和文本,确认后操作;跨页评论可用;取消不发送;无 UID 禁止私信;自动冷却不阻止人工发送 | AC-W4、U4 |
|
||||
| B12 / P1 / 确定缺陷 | `creator_material.go:238–243`、`CreatorCompetitorsPage.jsx:278–284`;失败仍提示完成 | 按全部步骤汇总真实状态,展示具体服务端原因 | 下载/提音/转写分别失败时无成功提示、不能仿写;供应商配置错误与其他失败分开;无音轨/无语音不假装失败 | AC-C10、U2 |
|
||||
| B13 / P1 / 确定缺陷 | `hub.go:846–861`、`environment.go:285–313`;停用代理主动回收运行环境 | 使用中的代理必须先显式停环境,停用请求不得代替停止/回收 | 运行引用存在时拒绝且列出环境,不改变代理/运行状态;显式停止后可停用;与启动并发也不出现不一致 | E2;AC-E4 |
|
||||
| B14 / P1 / 未完成能力 | `CreatorCompetitorsPage.jsx:110–137`、`creator.go:253–265`、`content.go:25–42`;链接末段冒充账号身份 | 真实解析主页/可支持分享/短链接,预览规范身份后确认保存 | 同账号不同链接只建一条;作品链接正确解析作者或明确拒绝;无效/身份不明不创建;昵称/稳定 ID/主页/可得头像来自实际结果 | AC-C1 |
|
||||
| B15 / P1 / 未完成能力 | `CreatorCompetitorsPage.jsx:524–784`、`main.jsx:59–65`;作品详情/筛选/素材预览不全 | 显示标题/正文、账号与时间筛选、目标账号详情,按需读取真实媒体和转写 | 详情不显示全局无关作品;筛选组合正确,返回保留页码;视频/音频/转写可核对;缺产物明确失败,不塞进通用 JSON | C1/C3/C4;AC-U1/U2、B6 |
|
||||
| B16 / P1 / 未完成能力 | `rules.go:105–125,230–287`、`CreatorWorkbenchPage.jsx:168–180,425–443,835`;分析结果与依据不可持续查看 | 展示已有持久分析状态、规则快照、命中词/理由和必要筛选 | 刷新后区分未分析/非线索/线索/失败;规则改后旧依据不变;按来源、平台、账号、规则、时间过滤;多规则仍一条线索 | AC-W3、U4 |
|
||||
| B17 / P1 / 未完成能力 | `BrowsersPage.jsx:65–74`、`hub.go:1161–1183,431–434`、`NetworkExitsPage.jsx:60–82`;固定 seed、地区未确认、代理管理不全 | 首次生成并持久化不同 seed;明确地区匹配,否则人工确认;补代理编辑/删除/启用 | 双账号真实浏览器指纹/Profile 隔离且重启/普通升级稳定;未知/多时区地区不猜测;运行修改先停、引用禁止删除、停用不可新启动、重新启用可用 | AC-E1/E2/E4 |
|
||||
| B18 / P2 / 确定缺陷 | `CreatorWorkbenchPage.jsx:29–33,456–457`、`logic.go:105`;前端 trim 改变关键词语义 | 前后端仅清除词边缘普通空格、Tab、CR/LF | NBSP、全角空格保留;大小写、内部空白、全半角、组合字符保持原文语义;空词拒绝;前端保存与直接 API 一致 | AC-B5 |
|
||||
| B19 / P2 / 确定缺陷 | `CreatorCompetitorsPage.jsx:237–244`、`CreatorAccountsPage.jsx:174–187`、`CreatorWorkbenchPage.jsx:258–267`;跨路由离开丢输入 | 所有有编辑内容的相关表单在路由/页签/目标切换和浏览器离开时保护输入 | 可取消离开继续编辑或明确放弃;保存失败不离开且保留输入;草稿不跨账号/目标,不把保存草稿当作发送确认;键盘和焦点可用 | AC-U2/U3/U4/U5/U6 |
|
||||
|
||||
## 6. 测试、部署与恢复修复清单
|
||||
|
||||
| ID / 优先级 / 类型 | 评审定位与问题 | 修复目标 | 最小回归与通过标准 | 依据 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| R01 / P1 / 确定缺陷 | 与 B01 相同:提音命令实际失败 | 合并在 B01 修复,不重复建任务或重复计完成量 | 引用 B01 同一测试及证据,再完成标准镜像真实素材验证 | AC-C8/C10 |
|
||||
| R02 / P1 / 未完成能力 | `Dockerfile:18–23`、`requirements-gateway.lock:1`、`compose.yaml:13–19`、`creator_material.go:215–233`;标准镜像无可用转写入口 | 先确认现有配置/批准供应商能力,再将可执行入口及锁定依赖纳入部署,不只填写环境变量 | 在最终镜像内用批准样本完成转写;核对所选工具真实参数与输出格式,不能未经验证将 stdout 当正文;无语音/失败分别正确;服务商、模型、参数及费用有批准记录 | C4;G0、AC-C8/C10 |
|
||||
| R03 / P1 / 缺验收证据及门槛缺陷 | Python 舍入放行;29 个数据库测试跳过 | 生产覆盖率按原始计数验收,专用数据库测试实际执行,门禁拒绝假完整通过 | 第 7 节全部执行;生产代码覆盖不低于 65%;记录 executed/skipped,目标数据库测试零跳过;缺库明确阻塞,不以 exit 0 通过 | AGENTS;plan01 第 9 节 |
|
||||
| R04 / P1 / 未完成能力与缺验收证据 | `deployment.md:328–444`、`compose.yaml:18–19`;备份仅数据库 | 明确数据库、credentials、materials、独立 Profile、原主密钥及版本的完整恢复清单 | 获准隔离环境做同版本停写一致备份与恢复;账号凭据可解密、素材可读、Profile 不串号、去重/冷却保留,恢复不补发;日志不含秘密 | 发布恢复要求;AC-A9、B1/B2/B6 |
|
||||
| R05 / P1 / 缺验收证据 | 真实记录使用外部 CDP;缺当前镜像和全业务证据 | 固定发布提交/镜像摘要,完成第 8–9 节真实验证 | 当前 Compose 镜像健康/正常退出、真实环境与账号、逐项 AC、恢复均有证据;旧样本不能代替新入口验证 | plan01 G0/G1;全部抖音适用 AC |
|
||||
| R06 / P2 / 未完成交付能力 | 仓库内未见 CI 工作流或统一门禁;构建不运行测试 | 复用现有命令形成最小可重复门禁,确认是否已有仓库外 CI,不另建平台 | 注入测试失败、缺数据库、低覆盖率,门禁均失败;成功记录提交、工具版本、执行/跳过计数和镜像;构建成功不等于验收通过 | AGENTS;第 7、9 节 |
|
||||
| R07 / P2 / 确定文档缺陷 | `docker/browser-wrapper/README.md:8` 使用 digest 作构建 tag;`deployment.md:89,382,429` 旧 schema 检查 | 构建用合法 tag,发布后记录真实 digest;按发布版本列实际 schema 和恢复检查 | 对照最终发布版本复核全部命令;构建/发布后摘要可读取;schema 与该版本迁移一致,不能只检查旧的 12/14,也不永远写死当前 31 | 部署说明及发布版本一致性 |
|
||||
|
||||
### 6.1 原评审覆盖映射
|
||||
|
||||
- 平台报告:原 P0-1→A01,P0-2→A02;P1-1 至 P1-12 依次→A03 至 A14;P2-1→A15,P2-2→A16。
|
||||
- 业务报告:发现 1 至 19 依次→B01 至 B19。
|
||||
- 发布报告:R1 至 R7 依次→R01 至 R07;其中 R01 与 B01 合并执行。
|
||||
- 来源报告中的“已有基础”仅作为复用依据,不作为新增修复条目,也不免除原 AC 回归。仅缺真实证据的采集、指标、媒体、AI、环境及人工动作纳入第 8 节。
|
||||
|
||||
## 7. 本地回归与质量门禁
|
||||
|
||||
### 7.1 每项修复的基本要求
|
||||
|
||||
1. 针对触发条件写最小回归,保留旧实现失败、新实现通过的证据;不能只新增固定成功 Mock 或改变原需求相反的测试预期。
|
||||
2. 状态/时间/并发测试用可控时钟和阻塞点复现,不靠长时间 sleep 赌竞争。数据库约束与跨进程恢复须在专用 PostgreSQL 实际验证。
|
||||
3. 涉及平台的测试替身仅用于确定性成功、校验、失败和不明路径;不能冒充平台能力证据。禁止真实测试发送给无关用户。
|
||||
4. 关键记录能关联账号、事件/操作、目标、策略/规则、冷却、阶段、原因及必要时间;保留排查链,不把密码、身份证、Cookie、代理凭据或无关完整私信写入日志。
|
||||
5. 复用既有依赖前核对文档和类型;新增依赖必须说明现有能力不足并锁定。页面遵循现有布局与 RemixIcon,保证加载、空、失败、禁用、确认/取消及键盘交互。
|
||||
|
||||
### 7.2 命令与验收口径
|
||||
|
||||
以下是**待执行标准**,不是本次文档编写已通过的记录。专用数据库必须先获准;不得借用现有业务库或静默新建/清空库。
|
||||
|
||||
| 范围 | 必须执行 | 通过标准 |
|
||||
| --- | --- | --- |
|
||||
| Go | `go test ./...`;`go vet ./...`;`go build ./cmd/control-plane`;并发/生命周期/共享状态变更运行 `go test -race ./...` | 全部退出成功;发布回归运行 race 全量;数据库目标测试实际执行,不以 skip 通过 |
|
||||
| Go 覆盖 | 配置获准 `CREATORHUB_POSTGRES_TEST_URL` 后,`go test -count=1 -json -coverprofile=<证据目录>/go.cover ./...`;`go tool cover -func=<证据目录>/go.cover` | 保留每包分子/分母、执行/跳过项,整体生产语句覆盖至少 65%;不因涉及小红书就临时剔除共用测试以提高数字 |
|
||||
| Python | `python3 -m unittest discover -s cmd -p 'test_*.py'`;同次 `python3 -m coverage run --source=cmd/docker_gateway --omit='cmd/docker_gateway/test_*.py' -m unittest discover -s cmd -p 'test_*.py'` | 全部通过;测试代码不计生产覆盖 |
|
||||
| Python 覆盖 | `python3 -m coverage report --precision=2 --fail-under=65`;`python3 -m coverage json -o <证据目录>/python-coverage.json` | report 通过且从 JSON 原始计数检查 `covered_lines * 100 >= num_statements * 65`;不能仅靠显示值或 report 舍入放行 |
|
||||
| 前端 | `npm --prefix web ci`;`npm --prefix web test`;`npm --prefix web run test:coverage`;`npm --prefix web run build` | lockfile 全新安装、测试与构建通过;沿用现有 lines 门槛至少 65%,同时披露 statements/branches/functions 及文件范围,不声称未纳入入口已覆盖 |
|
||||
| Docker/Compose | `docker compose config --quiet`;使用开发覆盖文件时也验证合并配置;获准环境完成实际构建与健康检查 | 配置解析、镜像构建、服务 ready/healthy 分别通过;配置检查不代替容器验证 |
|
||||
| 变更检查 | `git diff --check`;适用源码诊断及仓库已有静态检查 | 无新增错误;命令失败或覆盖缺口明确处理,不吞掉错误 |
|
||||
|
||||
命令中的 `<证据目录>` 必须替换为明确路径。覆盖数据先清理独立输出文件再执行,避免拼接旧结果;保存运行时版本、命令、配置名称及脱敏结果,不保存秘密值。数据库未配置、依赖未安装或环境未授权属于**阻塞/未执行**,不是通过,也不是业务服务故障。
|
||||
|
||||
不新增“每文件、每分支均 65%”的未经确认门槛;但核心缺陷必须有对应回归,不能仅靠无关测试拉高总数。Go 总覆盖率通过也不能替代逐项数据库测试实际执行。
|
||||
|
||||
## 8. 真实平台与页面验收矩阵
|
||||
|
||||
### 8.1 输入与授权包
|
||||
|
||||
真实验收前登记:一个大号、两个小号、可控互动账号、同平台目标关系;只读竞品样本、超过一页作品与一级评论;允许的写动作、目标、内容与次数;测试环境与时间窗口。凭据留在批准的秘密配置,不写入文档。
|
||||
|
||||
AI/转写须先批准供应商、模型/版本、参数、提示要求、费用边界及脱敏样本。样本逐条标注主题/非主题、包含/排除、线索/非线索和可接受误差;转写包括清晰语音、背景音乐、无语音,仿写核对标题/口播、用户要求和来源。不得自行编造准确率或误差率阈值。
|
||||
|
||||
### 8.2 逐项必验
|
||||
|
||||
下列每个子项均须单独记录,不能以复合行中的一次成功代表全部。
|
||||
|
||||
| 验收组 | 必测子项 | 必须观察到的结果 | 关联 |
|
||||
| --- | --- | --- | --- |
|
||||
| T01 身份与登录 | 有效会话、失效会话、人工登录失败/挑战、实际身份冲突;资料新增编辑与密码空白 | 同环境人工处理;不自动注入登录;UID 不符阻止写;业务/登录/实名状态分开;读取/日志不回显凭据 | AC-A1/A2、U3 |
|
||||
| T02 竞品与分页 | 主页、分享、短链接、重复/无效身份;多页作品和一级评论、中断恢复、双来源 | 真实目标预览;范围内平台可提供数据无漏页/重复,只采一级评论;不可取得说明限制;不把首屏或前 N 条当完成 | AC-C1/C2/C3、W1、B6 |
|
||||
| T03 指标与计划 | 真实零/缺失/下降;阈值等值与多条件;UTC/夏令时、窗口/年龄边界、旧作品、停用/恢复/设置保存 | 数值真实、计划独立;1/3/7/15/31/55 小时序列及封顶、停止优先;不造历史采样,未来时间待核验 | AC-C4/C5/C6、B4 |
|
||||
| T04 素材与 AI | 未选取、选取未确认生成、两次确认、下载/提音/转写/生成;无音轨/无语音、失败、磁盘/配额不足、重复点击 | 未确认不提前执行;真实产物和正文可预览;成功步骤复用;失败不允许仿写、不假成功;无音轨/无语音如实展示可继续;不自动发布/删素材 | AC-C7/C8/C9/C10、U2、B6 |
|
||||
| T05 线索与人工联系 | 主题→关键词→评论 AI;禁用/修改/显式重分析、多规则、失败;评论/线索回复与作者私信 | 判断顺序和历史依据正确;失败不是非线索;同评论一条线索;人工逐次确认且不受自动冷却限制 | AC-W2/W3/W4、U4、B5 |
|
||||
| T06 四类互动 | **评论、点赞、转发、关注**分别触发;大号主动动作对照;缺 ID/UID/目标 | 记录稳定事件身份、接收账号、互动者和目标;不把主动行为当收到互动;缺可靠必需字段阻止自动执行并说明 | AC-A5、B1 |
|
||||
| T07 六种写操作 | **私信、回复评论、点赞评论、点赞作品、关注用户、转发作品**分别测试成功/拒绝/不明;不相容事件目标 | 逐项实际账号、目标、文本与结果可核验;不猜目标;不明不重试、不返回假成功;平台限制明确留证 | AC-A7、W5、M3、B2 |
|
||||
| T08 策略与冷却 | 首条不可用/后条可用;选中后失败;候选与 AI;同 UID 跨事件/小号/动作并发、不同 UID/大号、到期、修改时长 | 一次只选一个小号一个动作;选中失败不切换;冷却正确且重启/失败/不明保留原到期;到期仅新事件可触发 | AC-A4/A6/A8/A9/A10/A11 |
|
||||
| T09 边界与恢复 | 首次历史、停用再启用、解析失败、断网、登录失效、进程退出/恢复、重复/迟到事件 | 无可靠边界不发;旧事件永不重放;迟到默认只展示;缺口持久可见;恢复新边界后仅可靠新事件可执行 | AC-A12、B1 |
|
||||
| T10 同账号写协调 | 人工与自动竞争、排队中停用/改关系/换身份、超过恢复窗口、发送后确认丢失、SDK 超时 | 全部写操作不重叠;执行前重核;不明后不新开始原操作;核验不发送;另发新确认并关联原操作 | AC-A14、W5、M3、B2 |
|
||||
| T11 时限与页面 | 四类互动及新私信;页面关闭、正常打开、独立断连、重开、慢详情/AI | 后台接收后五秒内开始处理;正常已开页面三十秒内可见;关页不停止监听;重开读持久结果;慢 AI 不冒充未接收 | AC-A13、B3 |
|
||||
| T12 私信 | 两账号会话发现、超过单次上限历史、收发方向、非文本、发送→事件→历史、旧请求迟返、草稿切换 | 会话/草稿不串号;平台可得历史可继续且范围准确;一条真实消息一条展示;非文本有类型;无自动聊天 | AC-M1/M2/M3、U5 |
|
||||
| T13 环境与代理 | 双账号首次 seed、真实参数、重启/升级、Profile;明确/未知/多时区地区;HTTP/HTTPS/SOCKS4/SOCKS5、合法认证/失败;编辑停启删除引用 | 参数真实稳定且隔离;地区不猜;实际出口符合选择;失败不直连/换代理;运行引用先停,删除先解除;列表不主动检测/轮询 | AC-E1/E2/E3/E4/E5 |
|
||||
| T14 页面完整性 | 全部列表/详情/任务跳转、筛选分页返回、加载/空/失败/禁用、取消/保存失败/离开、键盘/焦点;设置校验 | 各路径可操作;失败保留数据输入、未保存可取消离开;账号/目标明确;未批准 AI 不调用;关键结果可追溯至任务 | AC-U1/U2/U3/U4/U5/U6 |
|
||||
|
||||
### 8.3 时限和不明结果的记录规则
|
||||
|
||||
- 分别记录平台事件时间(若提供)、系统实际接收推送、开始处理、页面实际展示、写操作开始和结束。缺平台时间写“不可测”,不得填零。
|
||||
- 五秒从系统接收事件计起,不从详情拉取完或 AI 完成才起算;三十秒只对正常连接的已打开相关页面测量。超过就记录未通过,不能通过调整字段含义消除延迟。
|
||||
- SDK/CDP 超时不等于平台拒绝或发送取消;截图、服务端消息/动作标识与平台结果按实际证据关联,无法确认保持不明。
|
||||
- 错误/断连注入必须有范围和恢复授权;不能为测试随意重发真实写操作。能用本地阻塞点验证的竞争先本地验证,真机再验证必要平台行为。
|
||||
- 平台能力状态为“待验证/支持/条件支持/不支持”,验收状态单独为“未执行/阻塞/未通过/通过”。支持不等于 AC 通过,不支持不等于需求已删除。
|
||||
|
||||
## 9. 发布与恢复检查表
|
||||
|
||||
以下全部默认为未完成。发布前逐项附证据,不使用本次离线评审结果自动勾选。
|
||||
|
||||
- [ ] **L01 版本固定**:修复提交、依赖锁文件、构建工具版本、控制面/gateway/浏览器镜像摘要均记录;测试版本与发布版本对应,无未说明工作区差异。
|
||||
- [ ] **L02 回归通过**:第 7 节命令实际通过;专用数据库测试没有目标项跳过;覆盖率按同次原始计数达标,关键缺陷回归齐全。
|
||||
- [ ] **L03 真机全项通过**:第 8 节及原需求所有抖音适用 AC 有证据;转发和全部入站事件不遗漏;批准样本的 AI/转写质量逐项通过。
|
||||
- [ ] **L04 镜像可部署**:从锁定依赖构建当前镜像,包含实际转写运行能力;Compose 解析、构建、启动、依赖连接及 ready/healthy 逐项成功。
|
||||
- [ ] **L05 浏览器环境**:标准 Docker gateway 而非仅外部 CDP 验证身份、Profile、指纹、代理、读取/写入路径;声明外部模式证据不能替代的部分。
|
||||
- [ ] **L06 停止与恢复**:正常退出保留事件、操作、冷却及素材状态;进程重启/浏览器重建不补发历史,不把在途结果改为成功或可重试。
|
||||
- [ ] **L07 完整备份**:获准停写后一致保存数据库、credentials、materials、全部独立 Profile;原主密钥独立安全保管,记录配置与镜像版本,不把秘密提交仓库。
|
||||
- [ ] **L08 隔离恢复演练**:在批准的独立目标恢复同版本数据和卷;验证凭据解密、素材读取、Profile 身份、历史记录及冷却/去重。恢复实例不得与原实例同时消费同一真实账号并产生发送。
|
||||
- [ ] **L09 失败处理**:预先记录如何停止新自动动作、保留在途证据、定位失败和恢复同版本;不擅自跨 schema 回滚、不自动删除数据或重放写任务。
|
||||
- [ ] **L10 文档与决定一致**:部署命令有效、schema 对应该版本、构建 tag 与发布 digest 用法正确;能力限制、恢复缺口、范围变更及剩余风险经使用者确认。
|
||||
|
||||
**发布决策:** 任一必须项未通过或未获批准则阻塞完整发布。若使用者另行批准受限试用,必须新写明确可用范围、禁用能力、账号/数据边界和退出条件;本计划不默认授权降级发布。
|
||||
|
||||
## 10. 修复与验收记录模板
|
||||
|
||||
### 10.1 单项修复记录
|
||||
|
||||
每个 A/B/R 编号保留以下字段;R01 可直接关联 B01,但不得缺少镜像验收。
|
||||
|
||||
| 字段 | 填写内容 |
|
||||
| --- | --- |
|
||||
| 编号 / 原 AC | 例如 A09 / AC-B2 |
|
||||
| 状态 | 待修复、修复中、待验收、阻塞、验收未通过、验收通过 |
|
||||
| 根因与实际改动 | 当前代码复核结果、修改文件,不只写症状消失 |
|
||||
| 修复提交 | 完整提交标识;相关工作区差异 |
|
||||
| 回归 | 旧实现失败、新实现通过的命令/测试及日志 |
|
||||
| 成功/校验/失败/不明/恢复 | 适用场景结果;不适用必须解释 |
|
||||
| 真实证据 | 若适用,关联第 10.2 节;没有证据写待验收 |
|
||||
| 复核 | 独立复核人/任务、日期、发现与解决记录 |
|
||||
| 剩余限制与批准 | 范围调整须有使用者明确批准引用,否则保持阻塞 |
|
||||
|
||||
### 10.2 单次验收证据
|
||||
|
||||
正式证据建议保存为 `docs/evidence/douyin-release-<日期>-<提交短号>.md`,附件按需保存脱敏内容;不要求新建证据服务。
|
||||
|
||||
```text
|
||||
验收编号:Txx / AC-xxx / 修复编号
|
||||
测试日期与时区:
|
||||
代码提交 / 工作区差异:
|
||||
镜像摘要 / 客户端版本 / 工具版本:
|
||||
环境与授权引用:
|
||||
脱敏账号角色 / 目标 / 输入样本:
|
||||
前置状态与边界(策略、冷却、监听、登录等):
|
||||
执行步骤(真实写次数、内容确认):
|
||||
预期结果:
|
||||
实际结果:
|
||||
时间证据(平台、接收、处理、页面、写入、结束):
|
||||
平台结果及脱敏证据路径:
|
||||
能力状态:待验证 / 支持 / 条件支持 / 不支持
|
||||
验收状态:未执行 / 阻塞 / 未通过 / 通过
|
||||
失败原因 / 恢复过程 / 数据缺口:
|
||||
范围或恢复行为变更批准:无 / 明确引用
|
||||
```
|
||||
|
||||
### 10.3 当前计划状态
|
||||
|
||||
- 本轮已实施本地代码修复、迁移、回归测试、覆盖率门禁、Compose 构建/健康检查和 CI 工作流;未部署生产。
|
||||
- A03–A16、B01、B04、B07、B08、B10、B12、B13、B17、B18 具有本地代码/回归证据,但仍不能替代真实平台验收;A02 仍保留 `ACTION_UNAVAILABLE`。
|
||||
- A01、A02、B02、B03、B05、B06、B09、B11、B14–B16、B19 以及 T01–T14 的真实平台/页面矩阵未完成;R02、R04–R07 未完成,R03 的本地门禁已通过但 CI/发布产物尚未验收。
|
||||
- 真实平台操作必须经 CreatorHub 系统执行。此前误做的直接抖音点赞/评论已撤销,不计入证据;本轮未通过 CreatorHub 执行真实写矩阵。
|
||||
- 使用者仍须批准供应商、模型、参数、费用、停写备份/隔离恢复环境及发布部署;没有这些前置条件不得宣称完整发布。
|
||||
- 后续若关键技术栈或产品方向改变,同步更新 `AGENTS.md`;本计划维持现有方向与技术栈。
|
||||
Reference in New Issue
Block a user