Files
UHD_Media_Tool/docs/plan/10-v0.2.1-check.md
T
2026-09-28 22:07:53 +08:00

11 KiB
Raw Blame History

v0.2.1 收尾波独立检查

2026-09-28。对象:C1-A~E、AG-1、AG-2 合入 main 后的状态(基线 cd70a69)。检查者独占工作区。

结论

七路成果在 main 上可用,自动化测试与实机走查都能对上交付项。检查中发现并修复 5 项(其中 1 项是 HEAD 上 deno task lint 本身就不过), 另记录 6 项未修(都不阻塞发布)。修复后 deno task ci 连跑 2 次全绿(协调者要求加速,第 3 次中止),前端冒烟 69/69 通过。文案标点违规数为 0,check:copy 改为 --strict。

提交

提交 内容
410d4ee 工作区遗留的排序改动:api.ts 的 export * from "./mcp.ts" 排序(HEAD 上 biome organizeImports 报错,ci 的 lint 一步不过);types.ts 与 deno task gen:types 输出一致(开发库迁到 0040 后重新生成,逐字相同);deno.json imports 按字母排序。deno.lock 的改动(@peculiar/asn1-* 2.9.5→2.10.0、多出 npm:vite@*)是重新解析产生的,HEAD 的 lock 用 deno install --frozen 验证一致,已丢弃
0fccfe2 设置页左侧锚点补齐:Agent 分区加「MCP 服务端」「能力清单」,账户分区加「Passkey」(SETTINGS_SECTIONS.anchors)
fb84a71 标点:剩余 828 处违规里 602 个字面量由 --fix 自动修正(74 个文件,只动字符串字面量 / JSX 文本),biome 重排 9 个文件;e2 / e6 断言跟随全角汇报文本;check:copy 改 --strict,ci 里有违规即失败
57346d4 Agent 会话:挂起的调用(方案选择 / 审批)恢复重放时 tool_call_start 用同一 toolCallId,foldEvents 重复出卡 → React 重复 key 报错,工具调用计数也多 1(界面 6、列表 5)。改为沿用原卡片,补单测;汇报脚注的 "已提交" 改 「已提交」

CI 与冒烟

本机串行,HEAD c1c8dc8(代码同 57346d4,其后只有文档提交):

次 结果 耗时
1 全绿 448 秒
2 全绿 453 秒
3 未跑完(按协调者要求中止) —

用例数(两次相同):server 69 文件 / 419、adapters 310(跳过 3)、agent 38、contracts 858、db 13、domain 582、mapping 22、tasks 17、testkit 4、web 99。 检查过程中的试跑:改标点后第一次 ci 因 biome 行宽与 3 个 e2e 断言(半角汇报文本)失败,已在 fb84a71 修掉。

前端冒烟:后端 PORT=4412(开发库 55433)+ web dev --port 5202,deno task test:web:smoke 69/69 通过,跳过 7 条详情页(库里无站点 / 作品)。

逐路核验

路 交付项 证据 结论
C1-A 私有规则组、画质字段(MP 分辨率 / 来源 / 特效)、保存路径 / 下载器、关键词搜索、重置、日历 test/subscriptions/subscriptions-c1a.test.ts(12)、subscriptions-c1a-sources.test.ts(2);走查:订阅总览 / 列表 / 日历视图、新建表单、详情页「订阅操作 → 重置」确认框与执行 通过
C1-B agent.await / agent.spawn{await} 挂起不占槽 e11-subagents(await_wake、run_started resumed) 通过
C1-B TOTP 二维码 + 恢复码 auth-settings/account-security.test.ts、login.test.ts;走查:begin → enable(返回 8 个恢复码)→ 新会话密码登录出现 TOTP 步骤 → 输码登录 → disable 通过
C1-B Passkey 同上(soft-authenticator.ts);走查:CDP 虚拟认证器在设置页登记 → 登出 → 登录页出现「用 Passkey 登录」→ 登录成功 → 删除 通过。登录页只在已登记 Passkey 时显示入口(设计如此)
C1-B 主密钥轮换 auth-settings/rotate-master-key.test.ts;runbook auth.md「主密钥轮换」 通过
C1-C 契约 G6–G8、identify S-7 字段 file-manager/g678.test.ts、identify-organize.test.ts、contracts schemas.test.ts 通过
C1-C DataTable groupBy web/components/console/data-table.test.ts 通过
C1-C U6 悬浮按钮滚动让位 走查截图未见遮挡(未专门录滚动过程) 通过
C1-C 标点全站执行 本轮修完剩余 828 处,0 违规,已切 strict 已修
C1-D media-servers 并行 inventory/media-servers.test.ts(并行、慢实例超时、partial) 通过
C1-D identify 远端查询入队 + SSE identify-organize.test.ts「缺省入队远端查询…发 identify.completed」 通过
C1-D 清理脚本 dry-run 实跑 scripts/dev-db-clean.ts:dry-run 列出走查留下的 qa-chk 订阅 3 / 站点 1 且不改动;--yes 删除 174 个残留 schema 与这 4 行 通过
C1-E camofox BrowserProvider、会话 / 租约 adapters browser/browser.test.ts、interact.test.ts;server browser/__tests__/browser-api.test.ts(9)、browser-e2e.test.ts 通过
C1-E 原站视图 走查(mock camofox 19377):打开会话 → 画面 → 接管 → 地址栏跳转(被重定向到登录页,符合 mock 站点)→ 交还;「画面与输入未对真实实例核验」标记显示 通过,见问题 #3
C1-E 下载走 acquisition-plans routes.ts 下载转调 POST /acquisition-plans(同一鉴权 / 去重 / 授权);browser-e2e.test.ts 通过
C1-E 能力 25 C1-E 时为 25;AG-2 加 agent.plan / agent.propose_options 后 GET /capabilities/tools 为 27,MCP 可见 read 9 / organize.execute 18 / admin 23,与 mcp.md 一致 通过
AG-1 MCP 端点鉴权与 scope、会话绑定、停用 / 允许列表、无授权拒绝 test/mcp/mcp.test.ts(官方 SDK client 实连) 通过
AG-1 stats / tools 端点 同上;走查 GET /capabilities/stats 200、/capabilities/tools 27 项、/mcp/status 200 通过
AG-1 设置 → Agent → 工具与 MCP、IO 抽屉 走查设置 Agent 分区:MCP 服务端(开关、端点、接入配置)、能力清单表格 28 行(API 27 项) 通过;左侧锚点已补(0fccfe2)
AG-2 mode 移除与兼容 e12-interaction「旧 mode=plan_only 按先看方案处理」 通过
AG-2 plan / propose_options 事件与 UI e12-interaction、contracts agent-events.test.ts;走查:fake 脚本 → 步骤 1/3 实时勾选 → 方案卡(REMUX / WEB-DL / 都不要)→ 选定后续跑到 3/3、已完成 通过;修了重复 key(57346d4)
AG-2 内联审批 e12-interaction(管理员会话批准后重放、审批 consumed;拒绝写待处理);UI 用 /console/agent?mock=1 看审批卡 通过。开发库没有版本目标 / 资源,未在实库上走真实审批
AG-2 E12 apps/server/test/e2e/e12-interaction.test.ts 每次 ci 通过 通过

实机走查

脚本 apps/web/test/screenshots/chk-v021/_walk.mjs(Playwright,chromium headless,1440×900),截图与 report.json 在 apps/web/test/screenshots/chk-v021/(不进 git,共 58 张 + 冒烟 smoke/)。

走过:登录页 / 密码登录 / TOTP 步骤 / Passkey 登录;设置 9 区 + Agent 的 MCP 与能力清单锚点;站点列表、添加向导、站点详情(概览 / 账号 / 资源 / 快照)、原站视图; 来源健康;订阅(空态、新建表单、总览、列表、日历、详情、重置);规则页 5 个页签;文件管理(真实目录、演示数据、整理向导与推荐名、回收站); 任务页(全部、计划 Tab、详情);Agent 会话(fake 步骤 + 方案选择、?mock=1、列表);运行状态;⌘K 命令面板;搜索结果页。

  • 控制台错误:修复前 Agent 会话选定方案后 4–6 条 React 重复 key;修复后 0。
  • 失败请求:原站视图交还后 1 次 409 GET /browser/sessions/{id}/screenshot(问题 #3)。其余 0。
  • 横向溢出:0。
  • 走查临时数据(站点、订阅、浏览器服务行、Passkey、TOTP、agent.fakeScript)已清理或还原。

安全快查

端点 scope / auth 结论
/browser/providers、/browser/sessions/**(建 / 关 / 导航 / 点击 / 输入 / 滚动 / 选择 / 快照 / 截图 / 接管 / 交还) admin 输入类另需调用者持有自己的人工租约
POST /browser/sessions/{id}/download organize.execute 带 target 需人工租约;提交转调 /acquisition-plans,授权与去重同 REST。比其它浏览器端点低一级,见问题 #5
/api/v1/mcp API Key(cookie 会话 403) 调用走 capabilities.invoke(source="mcp"),execute 类要持续授权或有效审批;GET /mcp/status、PATCH /mcp/config admin
POST /subscriptions/{id}/reset、/feed-sources/{id}/reset admin —
/auth/totp*、/auth/passkeys*(管理) admin + session API Key 一律 403
/auth/passkeys/login/* public 与 PUBLIC_AUTH_PATHS 一致(api-registry 测试断言)
GET /files/download admin + session —
POST/PATCH /approvals admin + session 会话内审批卡走 PATCH /approvals/{id};能力注册表里没有任何审批类能力,Agent 与 MCP 都不能给自己开审批
GET /capabilities/stats、/capabilities/tools read 只有描述符与计数
  • 浏览器模块只写 DATA_DIR/tmp/browser-downloads(0700 目录 / 0600 文件,24 小时清理),没有媒体库或库根写入;凭证由服务端按 credential 注入,请求体不带明文。
  • 本波新增 logger 调用 16 处逐条看过:只有 id、计数、错误 message、路径,没有凭证 / token / 明文;mcp tool call failed 记 err 对象,依赖 logger 的全局遮盖。

问题清单

# 问题 状态
1 HEAD 上 api.ts 导出未排序,deno task lint 失败 已修 410d4ee
2 设置页左侧缺 MCP 服务端 / 能力清单 / Passkey 锚点 已修 0fccfe2
3 原站视图交还后第一轮截图轮询 409,状态徽标瞬时显示红色「连接中断」;一次失败就标红偏敏感 未修:需要决定是否对单次失败做容忍 / 交还期间暂停轮询
4 能力清单里 agent.propose_options 失败率 50%:挂起那次调用在审计里记为失败,重放成功又记一次,统计把正常的挂起算成失败(agent.spawn{await} 同理) 未修:需要定统计口径(挂起单独计或不计)
5 POST /browser/sessions/{id}/download 是 organize.execute,其余浏览器端点 admin。组合下需要先有 admin 建的会话,且带 target 要人工租约,风险有限 未修:记录,scope 取舍留给 C1-E 负责人
6 仓库根 .env 在 01:35 被换成了 docker compose 用的内容(没有 DATABASE_URL、SECRET_MASTER_KEY),deno task gen:types / db:migrate / dev:server 直接失败;本轮用环境变量覆盖运行,未改该文件(umt 栈可能在用) 未修:建议把部署 env 放部署目录,根 .env 恢复为 .env.example 的开发内容
7 开发库缺 3 个迁移,本轮补迁到 0040(0037_agent_await_passkey、0039_capability_stats、0040_agent_interaction) 已处理
8 Agent 会话详情里步骤卡片 sticky,滚动时盖住方案卡上半部分(截图 49) 未修:视觉取舍
9 自动修正不处理嵌套括号,如 调查超出预算(工具调用次数超出预算(1)) 仍是半角外括号;检查脚本也不报 未修:脚本规则限制
10 会话详情工具调用计数与列表不一致(6 vs 5) 已修 57346d4(同重复 key 根因)