11 KiB
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 根因) |