Files
creator-hub/docs/evidence/native-browser-verification-2026-09-18.md
T

127 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 单节点 native browser 验证记录
- 执行时间:2026-09-18Asia/Shanghai
- 执行者:本 worktree 的开发检查
- worktree`/home/rogee/Workspace/creator-hub-native-browser`
- 分支:`refactor/native-browser-xvfb-impl`
- 基线:`7e3808cf4ce453b3583079680a3b59ca2ed64ad4`
- 远程同步:执行时 `main``origin/main` 均为 `7e3808cf4ce453b3583079680a3b59ca2ed64ad4`;当前 worktree 未改写原工作目录。
## 前置条件
| 项目 | 实际记录 | 状态 |
| --- | --- | --- |
| Linux 用户 | `rogee`UID 1000,非 root | 通过 |
| Xvfb | `/usr/bin/Xvfb` | 通过 |
| systemd | `systemd-run` 可用,`systemctl --user` 可用 | 通过 |
| 浏览器 | fingerprint Chromium `148.0.7778.215`,可执行文件存在且可执行 | 通过 |
| Profile/runtime | 使用专用临时目录;目录权限为 0700 | 通过 |
| 数据库 | PostgreSQL `127.0.0.1:15432`;每次集成检查使用临时 schema | 通过 |
| 真实平台账号/真实代理 | 用户已提供抖音账号并完成只读身份/作品读取;合法代理仍未提供 | 部分通过 |
## 自动检查
| 检查 | 实际结果 | 状态 |
| --- | --- | --- |
| Go PostgreSQL 集成测试 | `go test -p 1 -count=1 ./...`,全部通过 | 通过 |
| Go 覆盖率 | 总覆盖率 `65.01%`creator `65.9%`、hub `65.8%`、phasea `68.1%` | 通过 |
| `go vet ./...` | 通过 | 通过 |
| control-plane 构建 | `go build ./cmd/control-plane`,通过 | 通过 |
| Go race | `go test -race ./...`,全部通过 | 通过 |
| Python gateway | 69 tests 通过;生产文件覆盖率 `67%76%` | 通过 |
| Frontend | 101 tests 通过;覆盖率 `66.31%`Vite build 通过 | 通过 |
| Compose 配置 | PostgreSQL-only Compose 配置检查通过 | 通过 |
| 静态旧路径检查 | production gateway/control-plane 无 Docker socket、container/image/volume/network 生命周期或 Docker fallback | 通过 |
## Real native gateway smoke
### 正常生命周期
- 临时 gateway 以 UID 1000 启动,监听 `127.0.0.1:28183`,稳定 `node_id=native-smoke-node`
- `/healthz` 返回 `204`
- `/v1/info` 返回 `200`,列出浏览器版本 `148.0.7778.215`
- 创建 `smoke-runtime` 返回 `201``state=running``status=ready``ready=true`,返回独立 display、CDP 端口、runtime/network ID 和 `proxy_ready=true`
- stop 返回 `204`delete 返回 `204`;查询结果为 `state=released``cleanup_state=cleaned`
- 清理后 `systemctl --user list-units 'creatorhub-browser-*'` 为 0;临时 smoke 目录已删除。
### gateway 强制重启恢复
- 临时 gateway 监听 `127.0.0.1:28184`,创建一个 ready runtime 后对 gateway 进程执行 `SIGKILL`
- 使用相同 state/profile 根目录和稳定 node ID 重启 gateway;重新查询得到同一 runtime,`state=running``ready=true``node_id=native-restart-node`
- stop/delete 均返回 `204`,清理后受管 systemd unit 数量为 0。
上述 smoke 使用专用临时目录;为避免测试盘空间限制,仅该 smoke 将 `RUNTIME_MIN_FREE_BYTES` 覆盖为 0,不能替代 20 GB 磁盘阈值用例。
## 局域网裸启动 smoke
- 使用临时 PostgreSQL schema 启动 control-plane `LISTEN_ADDR=0.0.0.0:28082``/healthz` 返回 `204`;使用 Vite `--host 0.0.0.0 --port 5175`,首页返回 `200`
- `ss` 确认两个监听分别为 `0.0.0.0:28082``0.0.0.0:5175`;本机 LAN 地址为 `10.1.1.104`Vite 输出该地址。
- smoke 结束后停止临时进程并删除临时 schema/目录;原工作目录中已存在的服务和端口未触碰。
## 33 项单节点记录
| ID | 记录结果 | 证据/阻塞原因 |
| --- | --- | --- |
| A01 | 通过 | 独立 native runtime 新 Profile 通过 VNC 手工登录;control plane 身份核对返回 `logged_in`Profile 未接管用户的 `chrome.service` |
| A02 | 阻塞 | 真实二维码、Profile 登录保持和版本升级未执行 |
| A03 | 阻塞 | 缺少真实竞品账号与采集授权 |
| A04 | 通过 | 独立 native runtime 通过 control plane scheduler 完成真实 Douyin works/comments checkpoint;当前账号无公开作品,保存 0 条,不伪造作品数据;证据见 `native-control-plane-real-douyin-2026-09-18.md` |
| A05 | 阻塞 | 同节点双账号真实采集未执行 |
| A06 | 阻塞 | 同 Profile 并发/人工登录占用未执行 |
| A07 | 阻塞 | 长期监听与采集并行缺少真实账号 |
| A08 | 阻塞 | 长期 holder 借用场景未执行 |
| A09 | 阻塞 | 缺少合法 HTTP/HTTPS/SOCKS4/SOCKS5 代理 |
| A10 | 阻塞 | 真实人工发送授权未提供 |
| B01 | 阻塞 | 真实采集取消未执行;代码取消路径有回归测试 |
| B02 | 阻塞 | 真实超时任务未执行 |
| B03 | 阻塞 | 真实代理失败与无效 browser path 未逐项手工执行 |
| B04 | 阻塞 | 真实浏览器/Xvfb 故障注入未执行 |
| B05 | 阻塞 | 真实目录清理失败未执行 |
| B06 | 阻塞 | 20 GB 阈值/磁盘写满未执行;smoke 覆盖了非阈值生命周期 |
| B07 | 通过 | native stop/delete 重复清理回归测试和 smoke 通过 |
| B08 | 通过 | gateway 强杀后 generation 恢复 smoke 通过 |
| B09 | 阻塞 | 真实长任务续租及旧 lease 迟到未执行;确定性 lease 测试通过 |
| B10 | 阻塞 | 真实结果保存失败/响应丢失未执行 |
| C01 | 通过 | native gateway SIGKILL 后同 runtime/node/ready 恢复 smoke 通过 |
| C02 | 阻塞 | 真实事件、冷却和订阅恢复未执行;事件去重/lease 自动测试通过 |
| C03 | 阻塞 | 真实短任务最长寿命观察未执行 |
| C04 | 阻塞 | control-plane 强杀期间素材处理未执行 |
| C05 | 阻塞 | 真实旧执行与新执行竞争未执行;资源归属测试通过 |
| C06 | 阻塞 | 真实机器重启未执行 |
| C07 | 通过 | 旧 generation/无关资源保护有确定性回归测试;真实目录手工核对未执行 |
| D01 | 未执行 | 多节点后续目标 |
| D02 | 未执行 | 多节点后续目标 |
| D03 | 未执行 | 多节点后续目标 |
| D04 | 未执行 | 多节点后续目标 |
| D05 | 未执行 | 多节点后续目标 |
| D06 | 未执行 | 多节点后续目标 |
## 尚未执行/阻塞的真实验收
- Douyin 独立 native runtime 登录、身份核对、只读采集和空结果 checkpoint 已通过;Xiaohongshu、长期监听、自动响应、写操作仍未执行,分别因范围/授权/真实平台条件标记未执行或阻塞。
- HTTP/HTTPS/SOCKS4/SOCKS5 真实出口及认证失败:缺少合法代理端点,阻塞。
- 另一台设备的 LAN 手工访问与前端完整点击流程:未执行,需联调操作者完成;本机 `0.0.0.0` 裸启动 smoke 已通过。
- 磁盘不足、真实 Profile 占用、清理失败和真实平台写操作:真实破坏性/写入场景未执行;确定性测试、真实 stop/repeat-stop/delete 和 runtime cleanup 已通过,不能把它们替代为全部真机故障证据。
- 多节点、A/B、跨机恢复、性能对比:按目标边界延期,不属于本目标。
本记录没有保存密码、Cookie、token、真实账号标识或平台数据。
## 补充:用户授权的 service-managed Chrome 真实读取
初始记录完成后,用户授权使用当前由 `chrome.service` 管理的 Chrome,仅通过本机 CDP `127.0.0.1:9222` 连接测试交互;没有让 native gateway 接管该 Chrome,也没有改变原有 `:99` Xvfb/VNC 启动方式。详细记录见 [`native-douyin-service-browser-2026-09-18.md`](native-douyin-service-browser-2026-09-18.md)。
- 抖音身份核对:通过,用户提供的账号标识与平台返回 UID 匹配。
- 抖音资料读取:通过,UID 与 `sec_uid` 两种查询均返回 `status_code=0`
- 抖音作品第一页读取:通过,返回 13 条作品并标记存在下一页。
- 独立 native runtime 的 control-plane works/comments checkpoint 已通过;自动响应、人工发送、代理和真实资源故障场景仍未执行,不能用只读读取结果替代。
- 代理阻塞确认:2026-09-18 用户确认不提供合法 HTTP/HTTPS/SOCKS4/SOCKS5 代理端点;相关用例继续标记为“阻塞”,不宣称单节点目标完成。
## 补充:变更后自动检查复跑
- Python gateway69 tests 通过;生产文件覆盖率分别为 `douyin.py 67%``gateway.py 68%``proxy.py 68%``runtime.py 76%`,均达到 65% 要求。
- Go`go test -p 1 -count=1 ./...``go test -race -p 1 -count=1 ./...``go vet ./...``go build ./cmd/control-plane` 通过。
- FrontendVitest 101 tests 通过;coverage statements `66.31%`、lines `68.73%`Vite build 通过。默认 worker 在机器高负载时曾启动超时,改用单 worker threads pool 后通过,未修改测试代码。
- 部署:`git diff --check``docs/deployment_stop_test.sh` 通过。
- 外部显示人工观察:临时 native gateway 复用已运行的 Xvfb `:99`runtime 在 VNC `5900` 可见;停止/删除后恢复用户的 `chrome.service`,原 Profile 未被覆盖。该模式仅用于单节点人工观察,默认仍是每 runtime 独立 Xvfb。
- 独立 native gateway + control plane 的真实抖音闭环记录见 [`native-control-plane-real-douyin-2026-09-18.md`](native-control-plane-real-douyin-2026-09-18.md)runtime 启停、身份核对、works/comments checkpoint 均已通过;当前账号无公开作品,因此保存 0 条作品,不把空结果伪造为有数据。