# AI Studio 一键组合——测试问题记录 ## 测试范围 - 功能入口:`AI Studio 一键组合` - 处理对象:账号列表中已选中的 Google 账号 - 执行方式:同一账号的所有步骤共用一个比特浏览器窗口 - 执行顺序:登录 → 查看国家 → 更改语言 → 改密码 → 更改 2FA → 获取凭证/16 位应用密码 → 处理 AI Studio API Key - 失败规则:任一步失败即停止该账号后续流程,并记录失败步骤和详情 - 成功规则:所有步骤均成功后,流程结果才记为成功 ## API Key 正常流程基线 ### 场景 A:账号已有 API Key 1. 进入 `https://aistudio.google.com/api-keys`。 2. 检测已有 Key;逐个打开行末三点菜单并选择删除。 3. 在删除确认框中确认,等待对应 Key 行消失。 4. 重复删除,直到页面中不存在旧 Key。 5. 点击 `Create API key`。 6. 使用已有项目(项目下拉框正常选中已有项目)。 7. Key 名称使用 `Gemini API Key`,创建一枚新 Key。 8. 从详情弹窗读取 API Key、名称、项目名称、项目编号并保存。 9. 最终线上仅保留一枚新 Key,账号列表和 JSON 查看窗口显示新值。 ### 场景 B:账号没有 API Key,但已有项目 1. 点击 `Create API key`。 2. 选择已有项目。 3. 使用名称 `Gemini API Key` 创建 Key。 4. 读取详情并保存。 ### 场景 C:账号没有 API Key,也没有项目 1. 点击 `Create API key`。 2. 项目下拉显示 `No Cloud Projects Available` 时,展开下拉。 3. 选择 `Create project`。 4. 使用默认项目名 `Gemini Project` 创建项目。 5. 等待新项目出现在创建 Key 对话框中并被选中。 6. 创建 Key,读取详情并保存。 ### 首次使用场景 - 若出现 AI Studio 服务条款/欢迎弹窗,应自动勾选必要选项并继续。 - 处理完成后才能进入正常的 API Keys 页面流程。 ## 测试问题 ### AS-001:删除线上旧 Key 后发生意外异常,数据库可能残留失效 Key - 发现时间:2026-09-22 - 测试账号:不涉及(代码检查发现) - 严重程度:严重 - 所属步骤:AI Studio Key / 数据保存 - 前置条件:数据库已有旧 Key,AI Studio 页面中的旧 Key 已被成功删除。 - 复现步骤:在线上旧 Key 删除完成后、创建或读取新 Key 期间触发未预料异常。 - 实际结果:异常兜底返回没有携带 `deletedExisting`,上层可能无法判断旧 Key 已失效,数据库因而保留旧 Key。 - 预期结果:只要线上旧 Key 已经删除,后续任何失败都必须通知上层同步清除数据库旧记录。 - 稳定复现:未确认 - 相关日志:无 - 截图或录像:无 - 初步定位:`processAistudioApiKey` 原先在 `try` 内声明删除状态,`catch` 无法访问和返回该状态。 - 当前状态:已关闭(2026-09-22 11:27 批量复测,4/4 账号日志无动态验证码且无敏感 checkpoint 截图) - 修复说明:将 `deletedExisting` 提升到函数级作用域,并在异常返回中始终携带该字段。 - 复测重点:线上删除成功后,分别模拟普通创建失败和意外异常;确认数据库、账号列表中的旧 Key 均被清空,流程日志记为失败。 ### AS-002:改密码提交无响应后整套流程重复执行,5 个账号全部中断 - 发现时间:2026-09-22 10:40–10:41 - 测试账号:5 个(`viu***`、`viv***`、`vjt***`、`vkc***`) - 严重程度:阻塞 - 所属步骤:改密码 - 前置条件:同时对 5 个账号执行 `AI Studio 一键组合`。 - 复现步骤:完成登录、国家、语言和改密身份验证;填写两次新密码并点击 `Change password`。 - 实际结果:提交后按钮短暂禁用,随后表单恢复为可操作状态且两个密码框仍保留内容;程序等待 20 秒后重新生成另一组密码并整套重跑,最终 5 个账号均报“无法确认修改结果”,后续步骤未执行。 - 预期结果:提交未完成时应复用同一候选密码并采用备用提交方式;进入不确定状态后不得生成第二个候选密码。 - 稳定复现:是(5/5) - 相关日志:`data/logs/app-2026-09-22.log`,10:40:15–10:41:58 - 截图或录像:`data/screenshots/<脱敏邮箱>/changePassword_20260922_1041xx.png` - 初步定位:改密提交仅使用一次 `force` 点击;无响应后缺少同表单提交兜底,并错误地重新执行整个改密流程。 - 当前状态:已关闭(2026-09-22 10:47 复测确认只重试同一候选密码,不再整套重跑) - 修复说明:首次改为非强制正常点击;表单恢复时依次使用回车和 DOM 按钮点击重试同一密码;提交后超时直接停止,不再重新生成第二个密码;提交后出现“密码已修改”提示按成功处理。曾使用的 `requestSubmit` 已因 AS-005 撤销。 - 复测重点:先用 1 个账号验证改密与后续步骤,再验证 5 个账号并发;确认日志不会出现“重新执行修改流程”,数据库保存的密码与实际生效密码一致。 ### AS-003:将表单清空和 URL 变化误判为改密成功状态 - 发现时间:2026-09-22 10:47–10:48 - 测试账号:5 个(脱敏) - 严重程度:阻塞 - 所属步骤:改密码 - 前置条件:第三种备用提交方式使用原生 `form.requestSubmit`。 - 复现步骤:运行 `AI Studio 一键组合`,等待第三种改密提交方式执行。 - 实际结果:第一次复测时观察到表单清空和 URL 参数变化,曾误认为这是 Google 新版改密成功状态。 - 预期结果:只有明确成功文案、页面跳转或密码框消失等可靠信号才能判定成功;不得根据表单清空和 URL 参数变化推断密码已生效。 - 稳定复现:是(5/5) - 相关日志:`data/logs/app-2026-09-22.log`,10:47:35–10:48:34 - 截图或录像:`data/screenshots/<脱敏邮箱>/changePassword_20260922_1048xx.png` - 初步定位:第二次复测确认该现象不是成功状态,而是 `requestSubmit` 绕过 Google 页面脚本、按 GET 导航产生的副作用,具体根因和安全影响归入 AS-005。 - 当前状态:已关闭(原结论撤回,未把该状态作为成功判据) - 修复说明:删除“表单清空 + URL 参数变化即成功”的判定设想;继续只接受可靠成功信号。 - 复测重点:后续不得将仅有的表单清空或查询参数变化记录为改密成功。 ### AS-004:两栏新密码表单被误识别为当前密码验证页 - 发现时间:2026-09-22 10:47 - 测试账号:5 个(脱敏) - 严重程度:一般 - 所属步骤:改密码 - 前置条件:账号已有有效 `rapt` 状态,打开 Password 页面后直接显示新密码和确认密码两栏。 - 实际结果:通用身份验证把第一栏当成当前密码输入框,填入旧密码并触发一次无效提交。 - 预期结果:识别到 Password 设置页存在两个可见密码框时,跳过旧密码验证,直接进入新密码填写步骤。 - 稳定复现:是(5/5) - 当前状态:已关闭(2026-09-22 10:51 第二次复测,5/5 均正确跳过旧密码输入) - 修复说明:在通用身份验证中增加 Password 设置页双输入框识别。 ### AS-005:`requestSubmit` 绕过页面脚本,将候选密码写入 URL 和诊断日志 - 发现时间:2026-09-22 10:51–10:53 - 测试账号:5 个(脱敏) - 严重程度:阻塞 / 严重安全风险 - 所属步骤:改密码 / 诊断日志 - 前置条件:正常点击和回车未完成提交,程序执行第三种 `form.requestSubmit` 兜底。 - 复现步骤:运行 `AI Studio 一键组合`,等待改密流程执行第三次备用提交。 - 实际结果:原生表单按 GET 导航,把 `password` 与 `confirmation_password` 作为查询参数写入地址栏;诊断事件又将完整 URL 写入账号 JSONL。该导航不是改密成功证据,5 个账号最终均未确认改密成功。 - 预期结果:所有提交方式都必须触发 Google 按钮自身的页面事件,不得直接提交原生表单;任何诊断字段中的敏感查询参数必须统一脱敏。 - 稳定复现:是(5/5) - 相关日志:`data/logs/errors/<脱敏邮箱>/2026-09-22.jsonl`(历史敏感值已就地替换为 `***`) - 截图或录像:`data/screenshots/<脱敏邮箱>/changePassword_20260922_1052xx.png` - 初步定位:`form.requestSubmit(button)` 绕过 Google 前端监听器;诊断底层此前没有统一处理密码类查询参数。 - 当前状态:已关闭(2026-09-22 10:58 第三次复测,5/5 均未再出现密码查询参数或明文 URL) - 修复说明:第三种提交改为 DOM `button.click()`;发现 URL 出现密码字段时立即安全停止;诊断事件写盘前递归脱敏 `password`、`confirmation_password`、`new_password`、`passwd` 和 `pwd`;清理本次测试生成的历史诊断记录。 - 复测重点:确认地址栏、应用日志和账号 JSONL 均不出现候选密码;只有收到明确成功信号才保存密码并进入后续步骤。 ### AS-006:改密成功消息和诊断截图泄露新密码 - 发现时间:2026-09-22 10:59 - 测试账号:1 个(脱敏) - 严重程度:严重安全风险 - 所属步骤:改密码 / 前端展示 / 诊断日志 - 前置条件:程序把改密结果判定为成功并保存候选密码。 - 复现步骤:执行单账号改密码,观察应用日志、账号备注和成功 checkpoint 截图。 - 实际结果:成功消息直接输出完整新密码;当页面将密码框切换成明文显示时,checkpoint 截图也保存了完整值。 - 预期结果:日志和账号备注只说明“新密码已安全保存”;所有截图无论输入框当前类型如何都必须遮盖密码控件。 - 稳定复现:是 - 相关日志:`data/logs/app-2026-09-22.log` 及账号日志(历史值已替换为 `[已脱敏]`) - 截图或录像:含明文的单张截图已移出公开截图目录并隔离。 - 初步定位:`change_password` 流水线把 `newPassword` 拼入成功消息;截图工具没有统一 mask 密码控件。 - 当前状态:已关闭(2026-09-22 11:08 第四次复测,成功消息无密码,密码截图已显示黑色遮罩) - 修复说明:成功消息不再包含密码;截图工具统一遮盖按 `type`、`name`、`autocomplete`、`aria-label` 识别的密码输入框;清理历史日志和数据库备注。 - 复测重点:改密成功后检查应用日志、账号日志、账号备注和所有 checkpoint 截图均无明文密码。 ### AS-007:确认弹窗点错按钮,密码框切换类型后又被误判为成功 - 发现时间:2026-09-22 10:58–10:59 - 测试账号:全套 5 个;追加单账号验证 1 个 - 严重程度:阻塞 - 所属步骤:改密码 / 数据保存 - 前置条件:点击表单主按钮后出现“保持登录设备”确认弹窗。 - 复现步骤:执行第三次全套复测;随后对其中一个账号单独运行改密码。 - 实际结果:确认逻辑使用页面级第一个 `Change password` 按钮,可能点到弹窗背后的表单按钮,5/5 均无法完成;单账号测试中密码框由 `type=password` 切换成其他类型后,旧判据认为输入框已消失并误报成功,实际截图仍显示完整表单。 - 预期结果:只点击确认弹窗作用域内的按钮;无论密码框是否切换为明文类型都能识别;控件必须连续稳定消失后才可作为成功信号。 - 稳定复现:是(全套 5/5 卡住;单账号 1/1 触发误判) - 相关日志:`data/logs/app-2026-09-22.log`,10:58:10–10:59:44 - 截图或录像:`data/screenshots/<脱敏邮箱>/changePassword_20260922_105857.png` - 初步定位:弹窗确认按钮没有限定在 `dialog` 内;成功检测只使用 `input[type="password"]`。 - 当前状态:已关闭(2026-09-22 11:08 第四次复测,确认弹窗被正确点击并跳转安全检查页) - 修复说明:从可见 `dialog/alertdialog/aria-modal` 内倒序选择确认按钮,不再强制点击页面级第一个按钮;备用提交后也立即处理弹窗;密码控件按多种属性识别,并要求连续两轮稳定消失。误判账号的 `password_changed` 标记已撤回,状态改为“改密待复核”,避免下轮错误跳过。 - 复测重点:先单账号确认日志出现“已确认更改密码弹窗”和可靠成功信号,再进行 5 账号全套测试。 ### AS-008:2FA 动态验证码及新密钥被写入日志和诊断截图 - 发现时间:2026-09-22 11:09 - 测试账号:1 个(脱敏) - 严重程度:严重安全风险 - 所属步骤:更改 2FA / 诊断日志 - 前置条件:成功进入 Authenticator 手动密钥和验证码验证页面。 - 复现步骤:执行单账号 `AI Studio 一键组合`,观察 2FA 步骤日志及 checkpoint 截图。 - 实际结果:6 位动态验证码被完整写入应用日志和账号日志;手动设置页截图包含完整新 2FA 密钥,验证页截图包含验证码。 - 预期结果:日志只说明验证码已生成/填入,不保存具体值;含新密钥或验证码的页面不得保存截图。 - 稳定复现:是 - 相关日志:`data/logs/app-2026-09-22.log` 及账号日志(历史验证码已替换为 `[已脱敏]`) - 截图或录像:相关敏感 checkpoint 截图已移出公开截图目录并隔离。 - 初步定位:2FA 服务的调试日志直接插入 `code`;checkpoint 对敏感页面没有禁拍规则。 - 当前状态:已关闭(2026-09-22 11:27 批量复测,新增诊断文件无完整 API Key,历史与新增残留均为 0) - 修复说明:验证码日志改为无内容提示;`change2fa_clicked_cantscan`、`change2fa_key_extracted`、`change2fa_before_verify` 只记事件不保存截图;通用截图工具额外遮盖动态验证码输入框和 Authenticator 设置弹窗;历史 5 个日志文件已脱敏,9 张敏感截图已隔离。 - 复测重点:后续 2FA 流程中日志、账号备注和公开截图目录均不得出现密钥或动态验证码。 ### AS-009:AI Studio 第二层附加条款弹窗未处理,创建 Key 点击落在遮罩后方 - 发现时间:2026-09-22 11:09 - 测试账号:1 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key - 前置条件:首次使用 AI Studio,完成第一层带复选框的服务条款后出现第二层附加条款说明。 - 复现步骤:执行单账号 `AI Studio 一键组合` 并进入 API Keys 页面。 - 实际结果:程序处理第一层条款后,没有识别不带复选框、只有 `Continue` 的 Google AI plans / Gemini API 附加条款弹窗;随后 OS 鼠标校准和创建 Key 均点击遮罩后的页面,最终报“未找到项目选择控件”。 - 预期结果:条款处理应循环识别并关闭所有层级;确认不存在阻塞弹窗后才能校准鼠标、删除旧 Key 或创建新 Key。 - 稳定复现:是 - 相关日志:`data/logs/app-2026-09-22.log`,11:09:20–11:09:57 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_110957.png` - 初步定位:`dismissWelcomeConsent` 仅把“包含复选框”作为条款弹窗结构特征。 - 当前状态:已修复待复测(14:45 批量测试发现时序回归:第一层关闭后短暂无弹窗,函数提前退出,第二层随后才出现) - 修复说明:增加附加条款文字特征和严格的 `Continue/Continuar/继续/同意` 按钮识别;条款循环现在同时覆盖带复选框首层和无复选框第二层,并排除创建 Key 对话框。14:45 再修复为第一层处理后保留 3.5 秒安静观察窗口,第二层延迟出现时继续处理;新增真实 Chromium 顺序弹窗回归测试。 - 复测重点:确认日志进入真正的 Key 创建对话框;若无项目则创建 `Gemini Project`,最终读取并保存新 Key。 ### AS-010:项目已选中但残留 `data-disabled` 导致创建 Key 被提前拦截 - 发现时间:2026-09-22 11:16–11:17 - 测试账号:1 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key - 前置条件:账号没有 Cloud 项目,流程成功新建并选中 `Gemini Project`。 - 复现步骤:执行第五次单账号复测,等待项目创建完成并回到 `Create a new key` 对话框。 - 实际结果:截图确认 Key 名称为 `Gemini API Key`、项目为 `Gemini Project`、`Create key` 按钮正常显示,但页面残留 `data-disabled="true"`;项目辅助函数等待 45 秒后错误返回“新建项目后创建按钮仍不可点”,没有执行实际创建点击。 - 预期结果:真实项目已出现在下拉框时应继续点击 `Create key`;最终以是否出现完整 Key 详情作为成功判据,不能被残留 DOM 属性提前拦截。 - 稳定复现:是 - 相关日志:`data/logs/app-2026-09-22.log`,11:16:25–11:17:38 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_111738.png` - 初步定位:后半段已有“项目确认后直接创建”的容错设计,但 `selectProjectInNewUi` / `waitCreateReadyAfterProject` 在到达该逻辑前仍强制等待 `isCreateKeyDisabled=false`。 - 当前状态:已关闭(2026-09-22 11:20 第六次复测,项目选中后已实际创建并读取 Key) - 修复说明:项目文本被可靠识别为真实项目时立即放行;按钮属性只作为无法识别项目时的兜底;实际点击后继续由 Key 详情严格验证创建结果。 - 复测重点:确认日志出现“新建项目已确认选中,继续创建 Key”,随后点击 `Create key` 并读取、保存完整 Key。 ### AS-011:历史网络诊断 URL 保存了完整 Google API Key 参数 - 发现时间:2026-09-22 11:22(第六次复测后的安全扫描) - 测试账号:不涉及本轮生成的 Key;命中 10 个 2026-09-14~15 历史诊断文件 - 严重程度:一般安全风险 - 所属步骤:诊断日志 - 前置条件:Google 页面内部请求失败,URL 带 `AIza...` 或 `AQ....` 格式的 `key` 参数。 - 复现步骤:扫描 `data/logs/**/*.jsonl` 中的完整 API Key 格式。 - 实际结果:10 个历史 `requestfailed/response` 诊断文件保留了 Google 内部接口 URL 的完整 Key 参数;第六次测试新生成的 Gemini Key 未进入日志。 - 预期结果:任何来源、任何字段中的 API Key 格式都应在诊断写盘前统一脱敏。 - 稳定复现:是(历史文件) - 相关日志:`data/logs/errors/<脱敏邮箱>/2026-09-14.jsonl`、`2026-09-15.jsonl` - 截图或录像:无 - 初步定位:诊断底层已递归处理对象,但 `redactText` 只覆盖密码查询参数、Base32 和代理凭证,没有覆盖 `AIza` / `AQ.` Key 格式。 - 当前状态:已修复待复测 - 修复说明:诊断统一把完整 `AIza...` 替换为 `AIza***`、`AQ....` 替换为 `AQ.***`;AI Studio DOM 调试输出也显式经过同一脱敏;10 个历史文件已清理,复扫残留为 0。 - 复测重点:制造带 `key=` 的失败请求后,确认 JSONL 与应用日志只保留脱敏形式。 ### AS-012:并发 4 时系统真实鼠标跨窗口竞争,创建对话框无法稳定打开 - 发现时间:2026-09-22 11:44 - 测试账号:20 个测试账号(本文不记录完整账号) - 严重程度:阻塞 - 所属步骤:AI Studio Key - 前置条件:任务并发设置为 4,多个浏览器同时进入 AI Studio,并使用系统真实鼠标点击关键按钮。 - 复现步骤:20 个账号以并发 4 执行 AI Studio 一键组合。 - 实际结果:首批 4/4、整批共 10 个账号在点击 `Create API key` 后未出现正确创建表单,最终报“处理项目失败:未找到项目选择控件”。 - 预期结果:并发任务可以同时执行网页流程,但系统唯一的真实鼠标在任意时刻只能服务一个浏览器窗口,点击不能落到其它窗口。 - 稳定复现:是(本轮 10 次) - 相关日志:`data/logs/app-2026-09-22.log` 11:44:19–11:51:57 - 截图或录像:各账号已有 checkpoint;无敏感值写入本文。 - 初步定位:多个任务的 `page.bringToFront()`、坐标计算和 `SetCursorPos + mouse_event` 之间可以异步交错;后一个任务把自己的窗口切到前台后,前一个任务仍按原窗口坐标点击,导致对话框状态错乱。 - 当前状态:已关闭 - 修复说明:为系统鼠标增加进程级 FIFO 互斥锁,将“切换前台 → 计算坐标 → 真实点击”作为不可交错的临界区;登录、改密、2FA 和页面加载仍保持并发。新增并发锁测试,4 个任务最大同时进入临界区数量为 1。 - 复测结果:18 账号并发 4 时已出现鼠标排队日志,“未找到项目选择控件”从上一轮 10 次降为 0。 - 复测重点:继续使用并发 4,确认日志出现“等待其它窗口完成真实鼠标点击”,且不再出现批量“未找到项目选择控件”。 ### AS-013:并发 4 的项目/Key RPC 集中 403,失败后仍固定空等并重复使用坏对话框 - 发现时间:2026-09-22 11:56 - 测试账号:18 个复测账号(本文不记录完整账号) - 严重程度:严重 - 所属步骤:AI Studio Key - 前置条件:系统鼠标互斥锁已生效,多个账号继续并发执行 AI Studio 项目与 Key 创建。 - 复现步骤:18 个账号以并发 4 复测,观察项目 RPC、Key 创建及自动重试。 - 实际结果:项目控件跨窗口丢失降为 0,但出现 11 次 suspicious 重试、5 次项目列表/项目状态失败;服务端 403 已出现后,代码仍等待 Key 生成满 20 秒,再进入下一次重试。 - 预期结果:AI Studio 高风险 RPC 不应同时冲击 4 个账号;明确 403/toast 出现后应立即重试;项目状态异常应刷新页面恢复,而不是继续复用坏对话框。 - 稳定复现:是 - 相关日志:`data/logs/app-2026-09-22.log` 11:56:20–12:03:50 - 初步定位:系统鼠标锁只保护物理点击,没有限制项目/Key 网络请求并发;`waitKeyGenerated` 没有提前识别失败 toast;鼠标校准框被关闭后又重新打开,重复请求项目列表。 - 当前状态:已修复待复测 - 修复说明:AI Studio 高风险区限制为最多 2 个账号并行;403/toast 出现立即结束 20 秒等待;校准打开的创建框直接复用;新建项目后取消固定 4 秒等待;项目列表/选中状态异常时刷新页面重试;已同意账号的首次弹窗观察窗由 5 秒降至 3.5 秒。 - 第二次复测补充:失败请求已精确定位为 `MakerSuiteService/CreateCloudProject` HTTP 403;连续 4 次重试均未恢复,说明此类失败不应继续长时间重试。现已直接监听项目/Key RPC 状态,项目 403 仅刷新重试一次,Key 403 立即重试且最多保留两次重试。 - 手动排查确认:同一失败账号在 AI Studio 显示“Unable to create API key,无法创建 API key 和 Google Cloud project”;按提示前往 `https://console.cloud.google.com/projectcreate`,完成首次 Cloud 条款确认、创建默认项目并返回 AI Studio 导入后,Key 创建成功。说明账号并非不能创建项目,而是 AI Studio 内部代建 RPC 被拒绝。 - 第三次修复:`CreateCloudProject` 4xx/5xx 或明确引导弹窗出现时,不再刷新同一失败 RPC;自动进入 Cloud Console,处理首次条款,保留网页默认项目名创建项目,读取项目 ID,带该 ID 返回 AI Studio 并从 Import projects 精确导入,然后继续创建 Key。 - 第四次定位:14:42 批量实测确认 Cloud Console 可成功创建项目,最初按 `No matching projects found` 推断为搜索缓存;15:11 用户现场截图进一步证实真正流程不需要搜索,抽屉已自动推荐并勾选可用项目,必须点击右侧 `Import` 主按钮。最终修复见 AS-018。 - 复测重点:并发 4 时确认出现高风险区排队日志,suspicious 次数和项目失败显著下降,并统计有效成功吞吐。 ### AS-014:Hindi 语言页确认按钮无法识别,每次固定等待 12 秒后失败 - 发现时间:2026-09-22 11:49,12:01 再次复现 - 测试账号:单个 Hindi 页面账号(脱敏) - 严重程度:一般 - 所属步骤:更改语言 - 前置条件:Google 账号当前语言为 हिन्दी(भारत)。 - 复现步骤:选择 English → United States,等待程序查找保存按钮。 - 实际结果:页面已完成地区选择,但程序不认识 Hindi 的 `चुनें` 确认按钮和 `रद्द करें` 取消按钮,等待满 12 秒后报“未找到可点击的保存按钮”。 - 预期结果:立即识别 Hindi 确认/取消按钮并完成语言修改。 - 稳定复现:是(连续两轮) - 相关日志:`data/logs/accounts/<脱敏账号>/2026-09-22.log` - 当前状态:已关闭 - 修复说明:补充 Hindi 的保存、选择、应用、确认及取消/返回语义,并新增按钮识别测试。 - 复测结果:Hindi 账号已成功更改为 English (United States),不再等待 12 秒后失败。 ### AS-015:人工创建的 Key 未回写数据库,API Keys 只能从顶部查看全部账号 - 发现时间:2026-09-22 14:30 - 测试账号:Cloud Console 兜底后人工创建 Key 的账号(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 前端展示 / 数据保存 - 前置条件:自动任务已经结束,用户在该账号的比特浏览器内手工创建了 API Key。 - 实际结果:人工 Key 已在线上存在,但程序没有运行中的任务负责读回,数据库仍无该 Key,AI Studio 日志仍显示历史失败;前端只有顶部“查看API Keys(JSON)”总入口,不能按邮箱查看。 - 预期结果(用户 16:16 澄清):点击页面的“浏览器”打开该邮箱比特浏览器后,用户手工进入 AI Studio 并创建 Key;创建成功时程序应后台自动读取、写入该邮箱数据库、将 AI Studio 日志标记为成功并实时显示“已保存”;不应再要求点击第二个“同步人工 Key”按钮。 - 初步定位:原流程只有自动创建成功分支会调用 `upsertAistudioApiKey`;任务结束后的人工操作没有回收入口。查看接口固定返回 `getAllAistudioApiKeys()`。 - 修复说明:新增只读任务 `aistudio_sync_key`,打开该账号 AI Studio 列表后优先读取 Key 详情,必要时使用页面自带复制按钮读取完整值;全过程不删除、不新建。成功后写入 `aistudio_api_keys` 并追加 `success / 人工创建的 AI Studio API Key 已同步` 日志。 - 前端修复:移除顶部总查看按钮;每个账号的“AI Studio Key”单元格显示“已保存/未保存”和“查看”,查看接口强制携带邮箱且只返回单条记录。已移除多余的“同步人工Key”按钮。 - 16:16 最终修复:“浏览器”按钮改为打开比特窗口同时启动最长 30 分钟的只读监听;捕获人工创建成功的 Key 详情后自动 `upsertAistudioApiKey` 并写入 success 流程日志,通过 SSE 实时更新该邮箱行;监听完成后仅终止监听 Worker,不关闭用户的比特浏览器。 - 一致性边界:监听到 `DeleteCloudApiKey` 真实成功但未检测到新 Key 时,自动清理数据库失效旧值;新 Key 成功则直接覆盖。 - 自动验证:真实 Chromium DOM 覆盖人工 Key 读取;全量 85 项测试全部通过。 - 实际复测:14:38 对当前人工创建 Key 的账号执行只读同步,登录正常,14:38:39 成功读取并写库;任务结果成功 1、失败 0。数据库确认 Key 已保存且邮箱匹配,账号列表最新 AI Studio 日志为 `success`,详情为“人工创建的 AI Studio API Key 已同步”。 - 当前状态:已修复待服务重启复测 ### AS-016:新建项目弹窗仍在转圈时被误判成功,右上角关闭按钮被当成 Create key - 发现时间:2026-09-22 14:43 - 测试账号:2 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key - 前置条件:账号无可用项目,在创建 Key 对话框里选择 `Create project`。 - 实际结果:提交项目后 6 秒内没有捕获到明确 RPC 响应,代码直接返回成功;此时 `Create a new project` 弹窗仍在转圈,通用“最后一个按钮”定位命中 32×32 关闭按钮,尺寸护栏拒绝点击并报“未能点击 Create key”。 - 预期结果:必须等项目 RPC 成功或项目弹窗真正关闭后才进入 Key 创建;持续转圈应进入 Cloud Console 兜底,绝不能点击关闭图标。 - 稳定复现:是(同批 2 个账号) - 相关日志:`data/logs/app-2026-09-22.log`,14:42:48–14:44:00 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_144340.png`、`..._144358.png` - 初步定位:`createProject` 超时后无条件返回成功;`isCreateKeyDisabled` 与最终点击使用通用最后一个 dialog/按钮。 - 修复说明:项目提交后最长 15 秒等待明确响应或项目弹窗消失;持续加载直接触发 Cloud Console 兜底;创建 Key 的状态判断和点击仅限 `ms-api-key-creation-dialog`,并显式阻止被项目子弹窗遮挡时操作。 - 自动验证:真实 Chromium 复现“底层 Create key + 顶层项目转圈弹窗”,确认不会点击 32×32 关闭按钮,转圈超时不会误报成功。 - 当前状态:已修复待真实账号复测 ### AS-017:API Key 列表数据晚到,已有旧 Key 的账号被误走新建流程 - 发现时间:2026-09-22 14:46 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 数据一致性 - 前置条件:账号线上已有 Key,但 API Keys 表格晚于顶部 Create API key 按钮渲染。 - 实际结果:首次行数检查为 0,程序打开创建框;失败截图时旧 Key 行已经显示,但流程仍报“未找到项目选择控件”,没有进入“先删除旧 Key”路径。 - 预期结果:创建框打开后若旧 Key 行晚到,应立即退出创建框,先删除旧 Key,再创建并保存新 Key。 - 稳定复现:本轮 1 次,历史页面加载慢场景可能重复出现 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_144622.png` - 初步定位:旧 Key 判定只在打开创建框前执行;新版末列更多按钮为无文字 SVG 时,原计数器可能识别不到。 - 修复说明:新增真实数据行结构兜底识别;创建表单等待期间及最终提交前再次检查旧 Key,发现晚到行后切回列表删除;删除菜单新增“Key 数据行最后一个操作按钮”安全兜底。 - 自动验证:真实 Chromium 覆盖无 `more_vert`/`aria-haspopup` 的新版数据行,并验证表单等待立即返回 `late_existing`。 - 当前状态:已修复待真实账号复测 ### AS-018:Import projects 中把“已勾选”误判成“已导入”,没有点击 Import 主按钮 - 发现时间:2026-09-22 15:11 - 测试账号:Cloud Console 兜底账号(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key / Cloud 项目导入 - 前置条件:Cloud Console 已创建项目,返回 AI Studio 并打开 Import projects 侧栏。 - 实际结果:侧栏已经显示 `Projects you may want to import`、`1 project selected` 和可点击的 `Import` 主按钮;程序把复选框 checked 当成 Imported,只点击/检查复选框,没有点击 Import 按钮,并多余地在搜索框输入 URL 项目 ID。 - 预期结果:无需搜索;若建议项目已经勾选,直接点击 `Import`,等待侧栏关闭/显示 Imported,再回创建 Key 对话框选择任一已导入项目并创建 Key。 - 稳定复现:是;日志 15:09:26 记录“已点击导入项目”,但现场截图仍停留在 `1 project selected` 和 Import 按钮页面。 - 截图或录像:用户提供 `codex-clipboard-2ed4ffb9-9bb4-41af-a99b-d260e78093f3.png` - 初步定位:`importCloudProjectFromDrawer` 使用 `checked || /Imported/` 作为成功条件,并把项目复选框点击误记为导入完成。 - 修复说明:移除项目 ID 搜索;明确区分 selected 与 imported;有预选项目时精确点击 `Import/导入/Importar` 主按钮,未预选时先选择建议项目;只有侧栏关闭或明确 Imported 且无待提交按钮时才判成功;导入后返回普通 API Keys 页面使用任一真实项目。 - 附加修复:Key 行计数器现在要求 `more_vert` 位于真实表格数据行,工具栏菜单不再误报“旧 Key 晚到”。 - 自动验证:真实 Chromium 测试确认搜索框 0 次输入、Import 主按钮恰好点击 1 次;工具栏 `more_vert` 不计为 Key 行。 - 当前状态:已修复待真实账号复测 ### AS-019:旧 Key 删除后列表残影触发 lateExisting,刷新为 0 时没有重新创建 - 发现时间:2026-09-22 15:36 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 旧 Key 删除后重建 - 实际结果:旧 Key 已删除成功,创建表单又短暂读到旧行并进入 `lateExisting`;刷新后行数已经是 0,但程序只在行数大于 0 时调用重建,最终直接失败并清除数据库旧 Key。 - 预期结果:刷新后若旧行仍在则补删;无论刷新后行数是否为 0,都必须重新执行创建。 - 修复说明:把 `createKey` 移到 `lateCount` 条件外;补充回归断言,保证两种分支都会重建。 - 当前状态:已修复待真实账号复测 ### AS-020:延迟 Additional Terms 被误判成创建框点击无响应 - 发现时间:2026-09-22 15:36 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 服务条款 - 实际结果:首次 2.5 秒观察窗口内没有条款,点击 Create API key 后 Additional Terms 才出现并遮挡页面;程序只等待创建框,最终报“创建对话框未出现”。失败截图明确停留在附加条款 `Continue`。 - 预期结果:等待创建框期间同时侦测条款;条款一出现立即处理并重新打开创建框,不应继续等满创建框超时。 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_153650.png` - 修复说明:新增“创建框或条款”联合轮询;OS 鼠标校准和合成点击路径都能即时处理延迟条款;普通创建框两次等待由 15+10 秒收敛为 7+5 秒。 - 当前状态:已修复待真实账号复测 ### AS-021:Import 显示成功但创建框仍为 No Cloud Projects Available - 发现时间:2026-09-22 15:38 - 测试账号:1 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key / Cloud 项目导入同步 - 实际结果:Cloud Console 项目创建成功,Import 抽屉显示 `Imported`;创建对话框仍显示 `No Cloud Projects Available`。旧逻辑在旧项目列表和整页重试中累计等待约 90 秒后失败。 - 预期结果:正常账号优先复用当前创建框;项目未及时出现时只精确刷新一次,并验证 Imported 状态属于本次 Cloud 项目,仍未同步则快速给出准确错误。 - 截图或录像:`data/screenshots/<脱敏邮箱>/aistudio_api_key_20260922_153834.png` - 修复说明:Imported 后短等 8 秒;未出现则携带项目 ID 精确刷新一次并等待最多 20 秒;Imported 状态须匹配指定项目 ID;禁止外层再重复一轮导入空等。 - 当前状态:已修复待真实账号复测 ### AS-022:Cloud Console 提交项目后网络超时,后台实际已创建却被误判为失败 - 发现时间:2026-09-22 15:51;15:54 人工流程确认根因 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / Cloud 项目创建与导入 - 实际结果:程序已在 Cloud Console 点击 Create,但页面连续出现 `ERR_CONNECTION_RESET`,90 秒后报“项目创建超时”。数分钟后人工打开 AI Studio,Import projects 已直接列出该账号的现有 Cloud 项目,证明后台创建实际成功。 - 风险:若把导航/通知超时当成创建失败,下次又会创建新项目,造成重复项目和配额浪费。 - 预期结果:Create 已提交且已取得 project ID 时,超时应视为“结果待确认”;立即回 AI Studio 打开 Import projects,导入已有项目,不得再创建第二个项目。 - 人工成功路径:Create API key → 项目下拉无可选项目 → Import projects → 页面已自动列出并勾选现有项目 → 直接点 Import(无需搜索)→ 导入后项目可选 → Create key 成功。 - 录屏证据:`data/manual_recordings/manual_aistudio_20260922_155452/`(约 1 FPS 窗口连续帧;含 Key 页面,仅用于本地排查) - 性能观察:人工从显示待导入项目到 Key 详情完成约 15 秒;Import 后创建框约 1 秒刷出项目,Key 创建约 7–8 秒。 - 修复说明:Cloud Console 超时分支保留已提交的 project ID,返回 AI Studio 检查并导入;与“已有项目优先 Import,明确无候选才 Create”结合,阻止重复建项目。 - 自动验证:3 项针对回归通过;全量 87/87 通过。 - 当前状态:已修复待服务重启复测 ### AS-023:同步人工 Key 时比特浏览器被关闭/重开,导致成功 Key 未写入数据库 - 发现时间:2026-09-22 16:00 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 人工 Key 同步与数据保存 - 实际结果:点击账号行内“同步人工 Key”后,任务在登录跳转阶段连续报 `Target page, context or browser has been closed`,未进入 Key 读取,也未写库。 - 前置状态:同一账号的比特浏览器正在人工操作,窗口可能在同步刚启动时被关闭或重开。 - 预期结果:同步是只读任务;若 CDP page/context/browser 在启动瞬间关闭,应自动重开一次,读取线上 Key,写入当前邮箱的数据库记录,并把 AI Studio 流程日志标记为 success。 - 修复说明:仅对 `aistudio_sync_key` 增加一次浏览器重连;仅匹配 page/context/browser closed 错误,其它错误不重试,并设置 1 次上限防止循环。 - 需求更正:用户不应手工触发第二次同步。前端“同步人工Key”已移除,该重连逻辑仅作为旧接口兼容保留;新主流程见 AS-015,由“浏览器”按钮自动监听并保存。 - 自动验证:人工 Key 只读同步、数据库/成功日志写入、浏览器恢复边界和项目导入回归测试通过。 - 当前状态:已修复待服务重启复测 ### AS-024:Import projects 有候选项目但未勾选,误判为已导入 - 发现时间:2026-09-22 16:53 - 测试账号:2 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key / Cloud 项目导入 - 实际结果:Import projects 抽屉已经列出可导入项目,但项目复选框保持未选中,程序却记录“Cloud 项目已显示为 Imported”,没有点击项目复选框和 Import 主按钮;随后创建项目列表持续为空并失败。 - 预期结果:必须先勾选具体项目,确认该项目进入选中状态,再点击可用的 Import 主按钮;未执行提交前,页面中任何 `Imported` 文案都不能作为本次导入成功依据。 - 稳定复现:是;截图与 16:53:32 日志可以一一对应。 - 初步定位:导入抽屉根节点范围过大,把背景或辅助区域的 `Imported` 文案当成当前项目状态;同时 Angular 隐藏原生 checkbox 到可见控件的映射不稳定,并可能把 `Select all` 当成项目项。 - 修复说明:以 `Import projects` 标题及其搜索框、复选框、按钮共同定位最小抽屉;过滤 `Select all`;将隐藏 input 映射到可见 checkbox/label;优先按 project ID 选项目,否则选择第一个真实未选项目;最多重试勾选 3 次;只有实际提交 Import 后才允许接受 `Imported` 状态。 - 同步处理:从候选项目行提取 project ID,导入后若 Google 尚未同步到创建列表,沿用该 ID 进入 2 分钟非阻塞挂起,不重复创建项目,也不占用其它账号队列。 - 自动验证:新增与截图一致的回归场景(未勾选项目 + 页面存在无关 `Imported` 文案),确认只勾选具体项目、不点击 Select all、点击 Import;全量 88/88 通过。 - 录屏监控:下一轮复测已开启 AI Studio / Google Cloud 窗口级录屏,约 1 FPS,最长 30 分钟,保存在 `data/manual_recordings/aistudio_retest_20260922_170141/`。 - 真实复测:17:12 `vinht…` 的日志完整出现“已点击待导入项目复选框 → 已点击 Import 主按钮 → Cloud 项目导入完成 → 新建项目已确认选中”,随后 Key 创建、读取、写库及成功日志全部完成;`visoot…` 同轮也成功创建并写库。 - 当前状态:已关闭 ### AS-025:项目同步“挂起2分钟”被外层立即当成失败 - 发现时间:2026-09-22 17:06 - 测试账号:本轮多个账号(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key / Cloud 项目同步调度 - 实际结果:日志先输出“Cloud 项目尚未同步到导入列表,挂起 2 分钟后重试”,紧接着却输出“创建失败”,写入 failed 流程日志并结束该账号;没有真正进入延迟队列。 - 预期结果:第一次遇到 Cloud 项目同步延迟时,应立即关闭该账号浏览器并释放鼠标、高风险并发槽和批量线程;2 分钟后只重新执行项目导入与 Key 创建步骤。 - 稳定复现:是;本轮 17:06–17:08 多个新建 Cloud 项目的账号均复现。 - 根因:新版项目选择函数已经返回 `projectSyncPending/retryAfterMs/preferredProjectId`,但 `ensureProjectSelected` 只向上传递 `ok/created/msg`,三个调度字段被丢失,外层只能按普通失败处理。 - 修复说明:新版项目选择结果改为原样返回,完整保留延迟调度元数据;新增回归断言,禁止以后再次裁掉这些字段。 - 自动验证:项目同步延迟、并发延迟队列、Cloud 项目兜底针对测试均通过;全量 88/88 通过。 - 部署状态:全量 88/88 通过;旧批次结束后已于 17:14 重启服务,新进程 PID 61836。 - 真实复测:17:17 `vbs…` 首次进入同步等待后,浏览器、AI Studio 高风险槽和批量工位均释放,下一账号立即开始;约 2 分钟后日志明确显示“重新入队,本轮只重试项目导入和创建 Key”。`vcobj…`、`vekw…`、`vergela…` 同样按该机制运行。 - 当前状态:已关闭;第二次入队后的候选渲染竞态另记 AS-026 ### AS-026:Import 抽屉短暂显示空列表,候选项目晚到却被提前判空 - 发现时间:2026-09-22 17:20 - 测试账号:4 个(脱敏) - 严重程度:阻塞 - 所属步骤:AI Studio Key / Cloud 项目导入 - 实际结果:账号完成 2 分钟非阻塞等待并重新入队,但 Import projects 初始短暂显示 `No projects`,程序立即返回失败;错误截图保存时,指定项目已经出现在候选列表且未勾选。 - 证据:`vbs…`、`vcobj…`、`vekw…`、`vergela…` 四张失败截图均显示本轮 project ID 已作为可导入候选出现。 - 预期结果:携带明确 project ID 的同步重试必须在整个等待窗口持续轮询;候选晚到后立即勾选具体项目并点击 Import。普通首次检查也不能用瞬时空列表直接下结论。 - 根因:`importCloudProjectFromDrawer` 检测到 `noProjects` 后立即返回,未给 Angular 异步候选列表渲染留出稳定窗口。 - 修复说明:指定 project ID 时忽略瞬时空状态并用完整超时持续轮询;普通首次检查要求空状态连续稳定 2.5 秒才回退创建项目;候选出现即清除空状态计时。 - 自动验证:新增真实 Chromium 回归场景,先显示 `No projects found`,900ms 后插入候选,确认程序继续勾选并点击 Import;全量 88/88 通过。 - 真实复测:17:27 批次中 `vbs…`、`vcobj…`、`vekw…`、`vergela…` 均等待到候选出现,正确勾选并点击 Import,随后成功创建 Key、写库及记录 success。 - 当前状态:已关闭 ### AS-027:待同步 project ID 仅保存在内存,跨批次会重复创建 Cloud 项目 - 发现时间:2026-09-22 17:18 - 测试账号:至少 3 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / 数据持久化 - 实际结果:上一批已经创建项目并进入同步等待,下一批启动后 project ID 丢失;当 Import 候选尚未出现时,程序再次进入 Cloud Console 新建项目。同一账号两轮 project ID 明确不同。 - 示例:`vcobj…` 从 `poetic-analog…` 变为 `coherent-graph…`;`vekw…` 从 `tough-flames…` 变为 `third-upgrade…`;`vergela…` 从 `festive-freedom…` 变为 `pristine-cairn…`。 - 预期结果:待同步 project ID 必须跨 Worker、跨批次和服务重启保存;再次测试时只等待/导入该项目,不得重复创建。 - 修复说明:进入同步等待前按邮箱持久化 project ID 与时间;步骤启动时恢复并明确禁止重复创建;Key 成功后清除;记录保留24小时,过期后允许恢复,避免错误 ID 永久卡住账号。 - 自动验证:覆盖邮箱隔离、保存/恢复、24小时过期和调度链路;全量 88/88 通过。 - 真实复测:上述4个成功账号均在日志中先恢复原 project ID,并导入同一 ID;未进入 Create project/Cloud Console,成功后对应待同步记录已清除。 - 当前状态:已关闭 ### AS-028:推荐列表为空时项目搜索与失效项目恢复不完整 - 发现时间:2026-09-22 17:29 - 测试账号:1 个(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / Cloud 项目导入 - 实际结果:第一版程序恢复了 `clear-apogee…` project ID,但推荐列表持续显示 `No projects found`,未使用搜索框;加入精确搜索后真实复测确认该旧 ID 本身也无搜索结果,流程仍无法转为创建新项目。 - 预期结果:可见候选直接勾选、绝不多余搜索;持有确切 project ID 且推荐为空时输入该 ID 精确搜索;历史 ID 等满同步窗口仍无搜索结果时判失效并创建新项目;本轮刚创建的新项目搜索暂空时只挂起等待,禁止重复创建。 - 修复说明:空状态稳定2.5秒后执行 project ID 精确搜索;搜索命中后沿用勾选/Import/成功确认逻辑。待同步记录保留最初保存时间,满2分钟后仍搜索不到才允许解除旧 ID 限制并创建新项目。Cloud Console 本轮新建的 ID 会被标记为新项目,搜索暂空时非阻塞挂起2分钟,不会被误判失效。 - 真实人工验证:17:42–17:44 为 `veldag…` 创建新 Cloud 项目;返回 AI Studio 时推荐列表仍为空,使用新 project ID 搜索后立即找到并导入,创建 Key 成功。17:44:48 后台记录“人工创建的 AI Studio API Key 已自动保存”,数据库确认 Key、Key 名称、项目名称均存在。 - 自动验证:真实 Chromium 覆盖“推荐为空 → 输入 project ID → 搜索结果出现 → 勾选 → Import”和“精确搜索仍为空 → 显式标记旧 ID”;同时覆盖新项目不足2分钟时只挂起、持久化时间不被重置,以及候选已显示时搜索次数为0;全量88/88通过。 - 当前状态:已修复,待自动流程真实复测 ### AS-029:人工 Key 保存成功后遗留旧 project ID - 发现时间:2026-09-22 17:51 - 测试账号:1 个(脱敏) - 严重程度:一般 - 所属步骤:AI Studio Key / 数据保存 - 实际结果:人工创建的 Key 已被监听器成功写库并记录 success,但该邮箱上一轮自动流程保存的待同步旧 project ID 仍存在;下次自动处理可能先恢复无效旧 ID。 - 预期结果:人工创建或人工同步 Key 成功代表项目导入链路已经完成,应同时清除该邮箱的待同步项目状态。 - 修复说明:`open_manual_aistudio` 自动监听和独立人工同步步骤在 Key 写库成功后,均按规范化邮箱清空 `aistudio_pending_project:*`;失败或仅删除旧 Key 时不误清理其它状态。 - 数据修复:现场检查确认本账号确有遗留记录,已清空;再次读取确认记录为空,已保存的 Key 不受影响。 - 自动验证:人工同步回归用例增加两个入口的清理断言并通过。 - 当前状态:已修复 ### AS-030:Cloud 项目创建后仍用 project ID 搜索导入 - 发现时间:2026-09-22 18:08 - 测试账号:本轮多个账号(脱敏) - 严重程度:严重 - 所属步骤:AI Studio Key / Cloud 项目导入 - 实际结果:Cloud Console 已创建项目,返回 Import projects 后使用自动生成的 project ID 搜索;个别账号当时无结果,继而进入长时间挂起。 - 预期结果:程序应保留 Cloud Console 表单上的项目名称,返回 AI Studio 后优先使用项目名称搜索、勾选并导入;project ID 仅作为项目身份校验和兼容旧状态。 - 修复说明:创建成功时同时返回 `projectName` 和 `projectId`,并跨挂起队列、数据库待同步记录完整传递;导入搜索框优先填项目名称。 - 自动验证:真实 Chromium DOM 用例已改为“只有输入项目名称才出现结果”,成功勾选并点击 Import。 - 真实复测:18:29:56 `various…` 创建 Cloud 项目后明确按项目名称 `My Project 7839` 搜索,随后成功导入并创建 Key。 - 当前状态:已关闭 ### AS-031:项目同步挂起 2 分钟过长,且恢复时缺少原始时间 - 发现时间:2026-09-22 18:09 - 测试账号:本轮多个账号(脱敏) - 严重程度:一般 - 所属步骤:AI Studio Key / 延迟调度 - 实际结果:搜索暂无结果时挂起 120 秒,用户确认等待过长;同时 Worker 回队仅传递 project ID,没有完整传递最初保存时间,会影响旧项目恢复判定。 - 预期结果:挂起 30 秒后重新入队,等待期间继续释放浏览器、鼠标锁、AI Studio 高风险并发槽和批量工位。 - 修复说明:服务、步骤和 Worker 统一改为 30 秒;回队时完整传递 project ID、project name 和最初 `savedAt`,保持非阻塞调度。 - 自动验证:延迟队列用例确认 `delayMs=30000`,同时验证三个项目字段传递完整。 - 真实复测:18:30:19 挂起并释放队列,18:30:49 准时回队,仅重试项目导入和 Key 创建,最终成功。 - 当前状态:已关闭 ### AS-032:创建流程中新 Key 列表晚到被当成旧 Key 删除 - 发现时间:2026-09-22 18:07 - 测试账号:`vanquy…` - 严重程度:严重 - 所属步骤:AI Studio Key / 新旧 Key 判定 - 实际结果:18:07:16 创建流程中列表出现 1 枚 Key,18:07:18 被误判为“旧 Key 列表晚到”,18:07:27 删除;直到 18:08:19 才再次创建并读取成功,多耗时约 63 秒,且存在删除刚创建 Key 后二次创建失败的数据风险。 - 根因:稳定性检查只看到“行数从 0 变 1”,没有区分该 Key 是任务入口就存在,还是已进入创建流程后才出现。 - 修复说明:仅任务入口首次检查就存在的 Key 允许按旧 Key 替换流程处理;进入创建流程后才出现的 Key 直接读取、写库并标记成功,禁止再删除重建。若当时无法安全读取,则明确失败但仍不删除。 - 自动验证:回归用例确认 late-key 分支必须调用读取同步,且分支内不允许出现 `deleteAllKeys`。 - 当前状态:已修复,待真实流程复测 ### AS-033:AI Studio 访问受限页被误报为“未找到创建按钮” - 发现时间:2026-09-22 18:28 - 测试账号:`vapor…` - 严重程度:一般(外部账号限制,但错误诊断不准确) - 所属步骤:AI Studio Key / 页面状态识别 - 实际结果:账号打开 API Keys 后被 Google 重定向到 `Available regions for Google AI Studio and Gemini API`,程序仍尝试校准、创建和重试,最后误报“未找到 Create API key 按钮”。 - 截图证据:页面明确列出 `Regional restrictions`、`Age requirements` 和 `Account verification` 三类外部限制原因。 - 预期结果:立即停止 Key 创建流程,明确记录“Google AI Studio 访问受限(地区、年龄或账号验证条件不满足)”,不再无效重载或点击。 - 修复说明:按 Available regions URL 和页面标题/三项特征文字快速识别,返回 `AI_STUDIO_ACCESS_RESTRICTED` 及外部阻塞标记。 - 首次复测:18:39 仍误报“未找到 Create API key”。进一步定位到受限文档顶部的 `Dismiss` 使用了通用 `mdc-button--unelevated` 样式,在读取页面正文前被宽泛选择器误当成创建按钮。 - 二次修复:将 Available regions 正文检测提前到任何按钮和列表检测之前,并增加“受限检测必须早于通用按钮匹配”的回归约束。 - 部署状态:二次修复针对性及全量88/88测试通过,18:43 服务重启到 PID 36044。 - 当前状态:已修复,待同类受限账号复测 ### AS-034:30秒回队间隔被误用为项目失效判定阈值 - 发现时间:2026-09-22 18:53 - 测试账号:`vanducl…`、`vankie…`、`vanlo…` - 严重程度:严重 - 所属步骤:AI Studio Key / Cloud 项目同步 - 实际结果:Cloud Console 项目提交后进入30秒非阻塞挂起;首次回队搜索暂无结果时,因“已超过30秒”立即被判为旧项目不存在,转入新建项目。 - 根因:将用户要求的“每次回队间隔30秒”和“允许把项目判为失效的保护时间”同时从2分钟改成30秒。 - 修复说明:拆分两个阈值:回队间隔仍为30秒,项目失效保护期恢复为2分钟;保护期内允许最多4轮30秒非阻塞检查,不在首次回队时新建项目。 - 部署状态:针对性用例及全量88/88测试通过,19:05 服务重启到 PID 48216;HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 当前状态:已修复并部署,待真实复测 ### AS-035:项目新建成功后创建框再次转圈,过早点击 Create key - 发现时间:2026-09-22 18:56 - 测试账号:`vanlo…` - 严重程度:严重 - 所属步骤:AI Studio Key / Key 创建表单 - 实际结果:页面已显示 `New project created!`,但 `Create a new key` 对话框正在二次转圈重渲染;程序直接寻找并点击按钮,误报“未能点击 Create key”。 - 修复说明:导入或新建项目成功后,提交 Key 前再次调用表单就绪检查,必须确认 spinner 消失且名称/项目控件恢复;超时时刷新重试,不在加载框上误点。 - 部署状态:针对性用例及全量88/88测试通过,19:05 服务重启到 PID 48216;HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 当前状态:已修复并部署,待真实复测 ### AS-036:IPP 身份确认页假离开导致重试超过3次 - 发现时间:2026-09-22 18:51 - 测试账号:`vanlawes…` - 严重程度:一般 - 所属步骤:登录 / 额外身份验证 - 实际结果:点击“其它验证方式”后 DOM 短暂变化,被误判为已离开 IPP,但 URL 仍未变;日志出现 `4/3`至`8/3`,多等待约20秒。 - 修复说明:点击后除了 DOM 状态还必须复核 URL/挑战类型;仍停留同一 IPP 时严格在第3次停止,不再进入第4次。 - 部署状态:针对性用例及全量88/88测试通过,19:05 服务重启到 PID 48216;HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 当前状态:已修复并部署,待真实复测 ### AS-037:小窗口下新版 Google Cloud 首次条款弹窗未识别,误点底层 Create - 发现时间:2026-09-22 19:15 - 测试账号:`vahidtam…` - 严重程度:严重 - 所属步骤:AI Studio Key / Google Cloud Console 项目创建 - 实际结果:页面停在 Welcome / Terms of Service 弹窗,复选框未勾选;程序20秒后把它误当成“无条款弹窗”,继续点击被遮挡的底层 Create,并仅凭页面预生成的 Project ID 误记为已提交,随后无效等待90秒。 - 根因:新版条款容器没有旧选择器依赖的 `role=dialog` / `cfc-dialog`,复选框是自定义 MDC 节点;720px 高窗口让控件靠近弹窗底部,但分辨率不是根因。 - 修复说明:补充 mat-mdc/mdc/cfc/通用 modal 容器识别;可从 `Agree and continue` 按钮反向定位含条款与复选框的祖先;支持自定义 checkbox,点击前自动滚入视口;必须确认弹窗消失才能操作项目表单,已识别弹窗超时则明确失败,禁止继续误点底层 Create。 - 部署状态:720px 高度新版自定义弹窗回归用例及全量88/88通过;19:24服务重启到 PID 72636,HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 首次真实复测:`valorant01…` 已能识别条款弹窗并禁止误点底层 Create,但真实复选框封装节点仍无法直接查询/点击;20秒后明确失败,没有再无效等待90秒。 - 二次修复:从 `I agree to the...` 可见文字 Range 计算首行位置,向左18像素定位视觉复选框中心;普通 checkbox 点击后确认按钮仍禁用时,使用页面鼠标坐标兜底,并再次验证按钮启用和弹窗消失。 - 二次部署:针对性用例和全量88/88通过;20:03服务重启到 PID 32840,HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 当前状态:二次修复已部署,待真实复测。 ### AS-038:普通无项目账号不应先走 Import,应在当前创建框直接建项目 - 发现时间:2026-09-22 20:05 - 严重程度:一般 - 所属步骤:AI Studio Key / 项目选择与创建 - 人工验证:项目下拉已有真实项目时直接选中即可;没有可选项目时直接点 `Create project`。项目创建可能不发生 URL 跳转,但完成后会在原创建框中出现并可直接选中,不需要 Import。 - 旧逻辑:没有真实项目时优先打开 Import projects,只有导入列表为空才回退创建,增加无效页面操作和等待时间。 - 修复说明:普通路径改为“真实项目 → 直接选择;无真实项目 → 当前创建框直接创建并选中”;不再以 URL 是否跳转判断创建结果。只有数据库保存了明确 Cloud project ID、用于恢复已提交项目时才走 Import,避免重复创建。 - 部署状态:语法检查、三项针对性测试及全量88/88通过;20:07服务重启到 PID 54008,HTTP 200、任务接口0个活动任务、标准错误输出为空。 - 当前状态:已被用户2026-09-23完整流程文档纠正;详见 AS-039。 ### AS-039:无已导入项目时跳过 Import,可能重复创建 Cloud 项目 - 发现时间:2026-09-23 11:21 - 严重程度:严重 - 所属步骤:AI Studio Key / 项目导入与创建 - 依据:用户提供的19页《AI studio key 流程》及39张流程截图。 - 正确决策顺序:创建 Key 对话框已有真实项目则直接使用;显示 `No Cloud Projects Available` 时先进入 `Import project`;有候选就勾选并点击 Import;明确 `No projects found` 才返回下拉选择 `Create project`。 - 创建分支:AI Studio 内创建成功且项目已在当前框选中时直接创建 Key,不要求 URL 跳转,也无需再次 Import。 - Cloud Console 兜底:AI Studio 显示 `Unable to create API key` 时去 Cloud Console 创建;返回后依次 Close 失败提示、Cancel 残留创建项目弹窗,再使用 Cloud Console 页面记录的项目名称搜索、勾选并 Import,最后创建 Key。 - 项目名:AI Studio 新建项目弹窗出现非英文或不符合 Google 规则的默认名时,替换为稳定英文名 `Gemini Project`。 - 根因:AS-038 根据一次人工快速路径把“创建后可直接选择”错误扩展为“所有无已导入项目都跳过 Import”,会遗漏已有但尚未导入的 Cloud 项目。 - 修复说明:恢复并强化“真实项目 → Import 检查 → 明确为空才 Create”的状态机;关闭空导入抽屉后重新展开并重新读取下拉 DOM;Cloud Console 返回补充幂等的 Close/Cancel 清理;继续保留内联创建成功后直接使用项目的快速路径与30秒非阻塞同步等待。 - 自动验证:AI Studio 10项回归全部通过;新增状态机测试已覆盖“候选项目优先导入”和“空导入抽屉关闭后重新打开下拉创建”两条完整分支;全量88/88通过。 - 部署状态:2026-09-23 11:44 服务已重启到 PID 29020;3001端口监听、HTTP 200、活动任务0、标准错误输出为空。 - 当前状态:已修复并部署,待真实复测。 ### AS-040:Import 实际成功但初始超时耗尽,程序误报导入失败 - 发现时间:2026-09-23 11:50 - 测试账号:`william…` - 严重程度:严重 - 所属步骤:AI Studio Key / 项目导入完成确认 - 现场时序:11:50:05 勾选项目;11:50:25 点击 Import;11:50:26 程序记录“Import projects 中未能完成项目导入”;11:50:29失败截图已显示 `Projects imported successfully!`,创建框也已选中 `My Project 13167`。 - 实际结果:项目已经成功导入,但流程在点击 `Create key` 前结束;该邮箱数据库没有写入 API Key。 - 根因:导入函数从打开抽屉起共用一个总超时。页面勾选和渲染较慢,真正点击 Import 时初始时间已耗尽;代码固定等待1秒后没有下一轮完成状态检查,直接返回通用失败。 - 修复说明:搜索、勾选等有效进度均续期;点击 Import 后开启独立12秒确认窗口;以成功 toast、抽屉关闭或导入状态为成功依据,不受初始超时影响。 - 自动验证:新增“初始超时500毫秒、Import点击后1.8秒才成功”的真实时序回归,确认跨过初始超时后仍能识别成功;针对性测试及全量88/88通过。 - 部署状态:2026-09-23 12:04 服务已重启到 PID 27848;3001端口监听、HTTP 200、活动任务0、标准错误输出为空。 - 当前状态:已修复并部署,待该账号真实复测。 ## 测试批次记录 ### 2026-09-22 10:40 全套测试 - 账号数量:5 - 并发数量:5 - 结果:成功 0,失败 5,跳过 0 - 已通过:登录、Pro 检测、国家检测、语言修改 - 阻塞步骤:改密码 - 未执行:更改 2FA、获取凭证/应用密码、AI Studio API Key - 关联问题:AS-002 ### 2026-09-22 10:47 第一次复测 - 账号数量:5 - 并发数量:5 - 结果:成功 0,失败 5,跳过 0 - 已确认修复:AS-002 不再生成第二个候选密码,三次提交均复用同一密码 - 新发现:第三次提交后 Google 清空表单并退出 `rapt`,程序未识别成功状态 - 阻塞步骤:改密码 - 未执行:更改 2FA、获取凭证/应用密码、AI Studio API Key - 关联问题:AS-003、AS-004 ### 2026-09-22 10:51 第二次复测 - 账号数量:5 - 并发数量:5 - 结果:成功 0,失败 5,跳过 0 - 已确认修复:AS-004,5 个账号均正确识别新密码/确认密码双输入框,没有再填入旧密码 - 结论修正:第一次复测观察到的“表单清空 + URL 变化”不是改密成功,而是原生 GET 提交副作用 - 新发现:候选密码进入 URL,并被诊断 JSONL 原样记录 - 阻塞步骤:改密码 - 未执行:更改 2FA、获取凭证/应用密码、AI Studio API Key - 关联问题:AS-003(结论修正)、AS-005 ### 2026-09-22 10:58 第三次复测 - 账号数量:全套 5 个;追加单账号改密码 1 个 - 并发数量:全套 5;单账号 1 - 全套结果:成功 0,失败 5,跳过 0 - 已确认修复:AS-005,地址栏和新增诊断记录未再出现密码查询参数 - 全套阻塞步骤:改密码,确认弹窗没有被可靠提交 - 单账号结果:程序曾记录成功,但成功截图仍存在密码表单,确认属于误判;数据库完成标记已撤回 - 未执行:更改 2FA、获取凭证/应用密码、AI Studio API Key - 新发现:成功消息和截图泄露候选密码;密码框切换类型导致错误成功判定 - 关联问题:AS-006、AS-007 ### 2026-09-22 11:08 第四次复测 - 账号数量:1 - 并发数量:1 - 结果:成功 0,失败 1,跳过 0 - 已通过:登录、语言、改密码、改 2FA - 已确认修复:AS-006、AS-007;改密确认弹窗正确点击,跳转安全检查页后才判成功,成功消息和截图无明文密码 - 凭证步骤:检测到已有 refresh token,按设计跳过重复获取 - 阻塞步骤:AI Studio API Key - 实际页面:第一层条款处理后仍有第二层 Google AI plans / Gemini API 附加条款 `Continue` 弹窗 - 数据影响:本轮没有执行线上旧 Key 删除,数据库旧 Key 不受影响 - 新发现:2FA 验证码/密钥诊断泄露;AI Studio 第二层条款未处理 - 关联问题:AS-008、AS-009 ### 2026-09-22 11:15 第五次复测 - 账号数量:1 - 并发数量:1 - 结果:成功 0,失败 1,跳过 0 - 正确跳过:已完成的改密码、改 2FA、已有凭证均未重复执行 - 已确认修复:AS-009,附加条款不再阻挡页面,流程进入真实 Key 创建对话框 - 已通过:成功新建并选中 `Gemini Project`,Key 名称为 `Gemini API Key` - 阻塞步骤:点击 `Create key` 前的按钮状态判断 - 数据影响:新增了预期的 `Gemini Project`;没有创建 Key,也没有删除线上旧 Key - 新发现:项目已选中后仍被残留 `data-disabled` 属性拦截 - 关联问题:AS-010 ### 2026-09-22 11:20 第六次复测 - 账号数量:1 - 并发数量:1 - 结果:成功 1,失败 0,跳过 0 - 正确跳过:已完成的改密码、改 2FA、已有凭证均未重复执行 - 已确认修复:AS-010,项目选中后实际点击 `Create key`,不再被残留 `data-disabled` 拦截 - AI Studio 结果:Key 创建成功、详情读取成功、流程日志成功 - 数据库核对:API Key、Key 名称、项目名称、项目编号、原始 JSON 均已保存;密码、2FA、凭证完成状态保持正确 - 安全核对:本轮生成的 Gemini Key 未进入日志;密码和 TOTP 明文残留均为 0 - 新发现:历史网络诊断 URL 中存在 Google 内部 API Key 参数,已按 AS-011 处理 - 关联问题:AS-010(关闭)、AS-011 ### 2026-09-22 11:27 四账号并发批量复测 - 账号数量:4 - 并发数量:2 - 结果:成功 4,失败 0,跳过 0 - 整批耗时:11:27:17–11:31:30,共 4 分 13 秒(253 秒) - 单账号实际处理耗时:2 分 14 秒、1 分 44 秒、1 分 34 秒、1 分 58 秒 - 平均单账号实际处理耗时:112.5 秒,约 1 分 53 秒 - 并发后的有效吞吐耗时:253 ÷ 4 = 63.25 秒/账号,约每 1 分 03 秒完成一个 - 关键结果:4 个账号均完成改密码、改 2FA、凭证检查、AI Studio 项目创建、Key 创建与详情读取 - 自动恢复:其中 1 个账号首次创建被判 suspicious,自动退避重试 1 次后成功 - 数据库核对:4/4 均已完整保存密码/2FA完成标记、refresh token、API Key、Key 名称、项目名称、项目编号和原始 JSON;最新流程日志均为成功 - 安全核对:API Key、密码、TOTP 明文日志残留均为 0;公开截图目录中的敏感 2FA checkpoint 为 0 - 已确认修复:AS-008、AS-011 - 尚未覆盖:这 4 个账号原先没有 AI Studio Key,本批次没有触发“删除已有 Key 后重建”场景 ### 2026-09-22 11:40 性能优化(待实测) - 基准:上一批 4 账号、并发 2,平均实际处理 112.5 秒/账号,有效吞吐 63.25 秒/账号 - 优化 1:已进入 Authenticator 设置页时直接判定无需密码验证,不再等待 `networkidle` 和密码框超时 - 优化 2:替换已有 Authenticator 成功后跳过重复的“两步验证是否开启”页面检查;首次添加时仍保留完整检查 - 优化 3:AI Studio 页面已就绪但没有同意弹窗时,观察窗口由 12 秒缩短为 5 秒;首次条款及第二层条款处理逻辑保持不变 - 保留项:AI Studio 风控预热、suspicious 自动退避重试、真实鼠标点击均未缩短 - 并发建议:继续使用 2;关键按钮依赖系统级真实鼠标,并发更高可能发生跨窗口抢鼠标 - 预估收益:全新账号约节省 10–12 秒/账号;已同意过 AI Studio 的账号再额外节省约 7 秒 - 自动验证:本次相关测试全部通过;全量测试中另有 2 条既有前端按钮顺序断言失败,与本次改动无关 - 当前状态:代码已完成,等待下一批真实账号复测耗时 ### 2026-09-22 11:44 二十账号并发 4 压测 - 账号数量:20 - 并发数量:4 - 整批耗时:11:44:19–11:51:57,共 7 分 38 秒(458 秒) - 结果:成功 2,失败 18,跳过 0;成功率 10% - 尝试吞吐:458 ÷ 20 = 22.9 秒/账号(因大量快速失败,不能代表有效产能) - 有效成功吞吐:458 ÷ 2 = 229 秒/成功账号,约每 3 分 49 秒产出 1 个成功账号 - 两个成功账号实际耗时:98 秒、149 秒;平均 123.5 秒,约 2 分 04 秒/账号 - AI Studio 并发故障:10 个账号报“未找到项目选择控件” - 账号/Google 环境失败:4 个要求手机号验证、1 个旧密码失效、1 个登录被拒绝、1 个语言保存失败、1 个原 2FA 密钥错误,共 8 个 - 自动恢复:其中 1 个成功账号首次创建被判 suspicious,自动退避重试后成功 - 结论:本轮不能用于外推大批量耗时;并发 4 的系统鼠标竞争使有效吞吐低于并发 2 - 关联问题:AS-012 ### 2026-09-22 11:56 十八账号并发 4 复测 - 账号数量:18(上一轮 2 个成功账号未进入本轮) - 并发数量:4 - 整批耗时:11:56:20–12:03:50,共 7 分 30 秒(450 秒) - 结果:成功 6,失败 12,跳过 0;成功率 33.3% - 尝试吞吐:450 ÷ 18 = 25 秒/账号(包含快速失败,不能单独代表有效产能) - 有效成功吞吐:450 ÷ 6 = 75 秒/成功账号,约每 1 分 15 秒产出 1 个成功账号 - 成功账号实际耗时:93、134、99、63、49、96 秒;平均 89 秒,约 1 分 29 秒/账号 - AS-012 复测结果:系统鼠标出现排队日志,“未找到项目选择控件”由上一轮 10 次降为 0,互斥锁修复有效 - AI Studio 剩余失败:5 个项目列表/项目状态失败;Key 创建触发 suspicious 重试共 11 次 - 其它程序问题:1 个 Hindi 语言页确认按钮无法识别 - 账号/Google 环境失败:4 个无法登录/需要手机或设备验证、1 个旧密码失效、1 个需切换 IP,共 6 个 - 结论:并发鼠标问题已解决,但高风险 RPC 仍需局部限流、失败快速识别与项目刷新重试 - 关联问题:AS-012(关闭)、AS-013、AS-014 ### 2026-09-22 12:05 第二轮性能优化(待实测) - AI Studio 项目/Key 高风险区最多并行 2 个账号;其余步骤继续保持任务并发 4 - 失败 toast 出现后立即进入重试,不再继续空等最多 20 秒 - 复用鼠标校准已经打开的创建框,减少一次打开/关闭和一次项目列表加载 - 新建项目提交后改用状态轮询,移除固定 4 秒等待 - 项目列表/项目选中状态异常改为刷新 API Keys 页面后重试 - 无同意弹窗的观察窗口由 5 秒降至 3.5 秒 - Hindi 确认按钮修复后,避免每轮固定等待 12 秒再失败 - 自动验证:AI Studio 并发限制、快速拒绝、鼠标锁、项目状态、同意弹窗、旧 Key 传播及语言服务测试全部通过 - 当前状态:代码已完成,等待真实账号复测成功率与吞吐 ### 2026-09-22 13:52 十二账号并发 4 复测 - 账号数量:12 - 并发数量:4;AI Studio 高风险区最多并行 2 - 整批耗时:13:52:24–13:58:08,共 5 分 44 秒(344 秒) - 结果:成功 1,失败 11,跳过 0;成功率 8.3% - 尝试吞吐:344 ÷ 12 = 28.7 秒/账号(大量账号快速失败,不能代表有效产能) - 有效成功吞吐:344 秒/成功账号,即 5 分 44 秒产出 1 个成功账号 - 成功账号实际耗时:51 秒 - AI Studio 失败:5 个;其中项目/Key 创建触发重试 11 次,高风险区排队 3 次 - 账号/Google 环境失败:4 个手机验证、1 个设备身份确认、1 个旧密码失效,共 6 个 - AS-014 复测结果:Hindi 账号成功改为 English (United States),语言按钮修复有效 - 关键定位:失败账号的 `CreateCloudProject` RPC 明确返回 HTTP 403;连续 4 次重试均未恢复,继续等待只会占用队列 - 结论:本批剩余账号本身已处于持续项目创建风控状态,不能用于正常吞吐外推;需快速失败并提示切换 IP/浏览器环境 - 关联问题:AS-013、AS-014(关闭) ### 2026-09-22 14:00 第三轮性能优化(待实测) - 业务流程直接监听 `CreateCloudProject` 与 `GenerateCloudApiKey` RPC 状态,不再只依赖诊断日志和 UI toast - `CreateCloudProject` 403 出现后立即停止项目就绪/Key 生成等待,只刷新页面重试一次 - `GenerateCloudApiKey` 403 出现后立即进入重试,不再空等 20 秒 - Key 创建总尝试由 4 次收敛为最多 3 次(首次 + 2 次重试);保留此前所有成功所需的最大重试次数 - 项目失败与 suspicious 失败使用不同的准确提示,不再把项目列表 403 误写为“已重试 4 次可疑请求” - 预期收益:持续项目 403 的账号从约 2–3 分钟失败缩短到约 20–45 秒;正常账号不受影响 - 自动验证:语法检查及 AI Studio 快速拒绝、局部并发、同意弹窗、项目状态、旧 Key、鼠标锁、语言服务测试全部通过 - 当前状态:代码已完成,等待复测 ### 2026-09-22 14:05 手动排查记录 - 14:05:02 开始出现登录阶段 HTTP 401 与请求中止,尚未进入 AI Studio 创建项目/Key 流程 - 14:05:56 页面、浏览器上下文被关闭;14:05:57 登录任务结束,结果为成功 0、失败 1 - 用户手动确认:该账号密码确实已被修改 - 归因:已确认的账号外部状态问题,不属于 AI Studio 功能缺陷,也不计入 AI Studio 失败率 - 当前状态:本次账号未进入 AI Studio;继续等待下一次手动尝试 - 用户随后检查 13:55:22 的一个历史失败账号;旧结果页显示“点击创建后未生成新 key……已重试 4 次仍被判为可疑请求” - 日志复核:13:54:19 首次提交创建项目后立即 HTTP 403,13:55:03 再次提交后仍 HTTP 403;失败发生在项目创建阶段,尚未进入 Key 生成阶段 - 该结果生成于 14:00 优化前;“可疑请求/重试 4 次”属于旧版误归类文案。新版应明确报告 `CreateCloudProject` 403,并仅刷新重试一次后快速结束 ### 2026-09-22 14:10 Cloud Console 手动兜底成功与自动化修复 - AI Studio 实际提示:`Unable to create API key`,说明无法自动创建 API key 和 Google Cloud project,并提供 Google Cloud Console 链接 - 手动成功步骤:打开 `https://console.cloud.google.com/projectcreate` → 首次使用弹窗选择/保留 United States → 勾选 Google Cloud 条款 → `Agree and continue` - 项目创建步骤:保留页面自动生成的项目名和项目 ID,父资源为 `No organization`,点击 `Create` - 成功标志:进入 Cloud Dashboard,通知区显示项目刚刚创建成功 - 返回 AI Studio:打开 Import projects,按项目 ID 找到新项目;项目显示 `Imported` 后继续创建 Key - 最终结果:该历史失败账号成功创建 Key,证明 Cloud Console 兜底路径有效 - 代码修复:自动识别 AI Studio 代建项目失败,执行上述 Cloud Console 首次条款、创建、按 ID 返回与导入流程;旧 403 状态在返回后清空,避免污染新一轮创建 - 自动验证:新增真实 Chromium DOM 测试覆盖条款确认、默认项目名保留、项目 ID 提取、Import projects 按 ID 导入;全量 84 项中 82 项通过,2 项为既有前端按钮顺序断言失败,与本次修改无关 - 当前状态:已修复,等待真实账号自动复测 ### 2026-09-22 14:42 十二账号并发 4 复测 - 前置单账号同步:14:41:24 启动 `aistudio_sync_key`,浏览器在跳转登录页时被关闭,14:41:31 报 `Target page, context or browser has been closed`;未进入 Key 读取和写库。本轮未再次复现,暂按浏览器被人工/外部关闭记录,重复出现再升级为程序缺陷。 - 账号数量:12 - 并发数量:4;AI Studio 高风险区最多并行 2 - 整批耗时:14:42:12–14:46:39,共 4 分 27 秒(267 秒) - 结果:成功 2,失败 10,跳过 0;成功率 16.7% - 尝试吞吐:267 ÷ 12 = 22.25 秒/账号(包含账号验证快速失败,不能代表正常产能) - 有效成功吞吐:267 ÷ 2 = 133.5 秒/成功账号,约每 2 分 14 秒产出 1 个成功账号 - 成功核对:2/2 均生成并读取完整 Key,数据库记录存在、Key 名称存在,最新 AI Studio 流程日志为成功;日志未输出 Key 明文 - 账号外部问题:1 个密码已修改、2 个需要手机号验证 - AI Studio 页面/流程失败:2 个项目创建弹窗持续转圈后误判按钮;1 个延迟附加条款阻挡;1 个 Cloud 项目创建成功但导入列表缓存无结果;1 个已有 Key 列表晚到;其余为项目表单/列表加载失败 - Cloud Console 兜底实测:内部代建返回 403 后,已完成首次 Cloud 条款和项目创建,证明前半段自动化有效;后半段失败点收敛为 AI Studio 导入列表同步延迟/缓存 - 性能观察:高风险区排队仅出现短时等待;主要无效等待来自项目弹窗误判后的 15–45 秒、创建表单固定等待 15 秒,以及导入抽屉固定空等 60 秒 - 本轮修复:精确区分创建 Key/新建项目/条款弹窗;项目持续转圈转 Cloud Console;延迟第二层条款继续处理;晚到旧 Key 切回删除;导入搜索每 6 秒刷新、25 秒后整页重试 - 自动验证:新增 2 个真实 Chromium 回归测试;全量 87 项全部通过 - 关联问题:AS-009、AS-013、AS-016、AS-017 ### 2026-09-22 15:07 八账号并发 4 复测 - 账号数量:8 - 并发数量:4;AI Studio 高风险区最多并行 2 - 整批耗时:15:07:47–15:13:14,共 5 分 27 秒(327 秒) - 结果:成功 3,失败 5,跳过 0;成功率 37.5% - 成功核对:3/3 的 Key 均已写入数据库,最新流程日志均为成功 - 账号外部问题:1 个需要手机号验证 - Cloud Console 失败:2 个项目创建超时;1 个项目导入后未确认选中;1 个被误报为“旧 Key 列表晚到” - 已验证修复:此前附加条款阻挡的账号本轮成功;两个已有旧 Key 的账号均正确检测、删除旧 Key并重建成功,AS-009 与 AS-017 的主路径有效 - 用户现场定位:Import projects 已自动显示并勾选建议项目,程序不应搜索项目 ID;`1 project selected` 不是 Imported,必须点击右侧 Import 主按钮 - 本轮新增问题:AS-018;同时确认工具栏 `more_vert` 可能造成 AS-017 的假阳性 - 修复后自动验证:Cloud 导入真实 DOM 测试确认不搜索且实际点击 Import;相关回归测试通过 ### 2026-09-22 15:23 单账号成功复测与第四轮性能优化 - 单账号总耗时:15:23:28–15:24:39,共 71 秒;其中 AI Studio 阶段约 53 秒 - 结果:创建、读取并保存 Key 成功;AS-018 的“不搜索、点击 Import 主按钮”真实页面复测通过 - 最大无效等待:账号本来已有一个未导入的 Cloud 项目,但程序先调用 AI Studio 内部创建项目,遇到 HTTP 403 后又去 Cloud Console 新建项目,约浪费 18 秒并产生重复项目 - 次要无效等待:Import 完成后整页重载 API Keys,约浪费 5 秒;已同意账号仍固定观察条款弹窗 3.5 秒 - 优化一:项目下拉无真实项目时,先打开 Import projects;存在推荐项目就直接导入,明确无候选项目才新建 - 优化二:导入成功后关闭侧栏并复用当前创建框,不再整页重载;重开创建框固定等待由 2.5 秒降至 1.2 秒 - 优化三:已同意账号的首次条款观察窗口由 3.5 秒降至 2.5 秒;创建表单阶段保留延迟条款二次检测 - 稳定性边界:BotGuard 行为预热与 Key 生成结果等待未缩短,避免用成功率换速度 - 预期收益:同类“已有未导入 Cloud 项目”账号可减少约 20–25 秒;实际耗时以服务重启后的下一轮复测为准 - 自动验证:针对性回归与全量 87 项测试全部通过 ### 2026-09-22 15:35 三账号并发复测 - 账号数量:3;任务线程数 4,AI Studio 高风险操作上限 2 - 整批耗时:15:35:25–15:38:35,共 3 分 10 秒(190 秒) - 结果:成功 0,失败 3,跳过 0 - 排队观察:第三个账号在高风险区等待约 21 秒,限制按预期生效 - 账号 A:旧 Key 删除成功后发生列表残影;刷新时旧行已消失,但遗漏重新创建,关联 AS-019 - 账号 B:延迟 Additional Terms 挡住创建按钮,被误报为“创建对话框未出现”,关联 AS-020 - 账号 C:Import 显示 Imported,但创建框持续显示 `No Cloud Projects Available`;内部创建 403、Cloud Console 建项目及返回导入均成功,最终失败在项目同步,关联 AS-021 - 性能结论:优先 Import 路径已真实执行;有候选时不再重复建项目。确实没有候选的账号约 3 秒确认后转新建。主要剩余空等来自延迟条款误判和 Imported 后重复等待。 - 修复后策略:延迟条款即时处理;lateExisting 刷新后无条件重建;Imported 短等 8 秒后最多精确刷新一次,仍无项目则准确快速失败 - 自动验证:新增/更新回归测试后,全量 87 项全部通过 - 当前状态:代码已修复,等待服务重启后的真实复测 ### 2026-09-22 15:54 比特浏览器人工全流程录屏 - 监控方式:只录制标题匹配 Google AI Studio / Google Cloud 的比特浏览器窗口,约 1 FPS;不录制其它桌面窗口。 - 场景 1:创建框内没有已导入项目,Import projects 已列出并预选账号的现有 Cloud 项目;人工直接点 Import,约 1 秒后创建框自动选中项目,再创建 Key 成功。 - 场景 2:用户确认线上已有 Key;正确路径为删除旧 Key 后重新创建。若旧 Key 删除后新建失败,数据库必须清除已失效的旧值。 - 场景 3:新比特浏览器 16:02:48 进入 AI Studio,同样先导入已有 Cloud 项目;16:03:07 已显示导入成功且创建框选中项目,16:03:30 进入 Key 详情。 - 耗时:场景 1 从 Import 候选可见到 Key 详情约 15 秒;场景 3 从新窗口加载到详情约 42 秒,其中从 Import 成功到详情约 23 秒(包含人工停留)。 - 确认决策顺序:创建框有真实项目就直接用;否则先 Import projects;Import 有候选就导入;Import 明确无候选才创建新项目。 - 隐私:问题记录不写入 Key 明文;本地连续帧含 Key 详情,仅用于本轮排查。 - 代码结果:同步修复 AS-022 与列表 0→1 抖动恢复;针对回归和全量 87/87 测试通过。 ### 2026-09-22 17:04 十二账号并发复测 - 账号数量:12;并发数量:4。 - 整批耗时:17:04:08–17:13:16,共 9 分 08 秒(548 秒)。 - 结果:成功 3,失败 9,跳过 0;成功率 25%。 - 成功核对:3/3 均完成 Key 创建、读取、按邮箱写库并记录 AI Studio success;其中 `vinht…`、`visoot…` 为上一轮重点复测账号。 - AS-024 真实验证:候选项目未选中时,程序正确点击具体项目复选框、点击 Import 主按钮、确认导入和项目选中,最终成功创建 Key;问题关闭。 - 账号外部问题:2 个需要手机号验证(其中 1 个先完成人机验证后进入手机号验证)。 - 程序问题:7 个功能失败中,多数账号均在新建 Cloud 项目后命中“应挂起2分钟却立即失败”;定位为延迟调度字段在 `ensureProjectSelected` 被裁掉,记录为 AS-025。 - 性能说明:本批 548 秒受完整改密/2FA、Cloud Console 项目创建及旧进程错误重试影响,不代表修复后 Key 流程吞吐;成功产出吞吐为约 183 秒/成功账号。 - 修复部署:AS-025 修复后全量 88/88 通过;17:14 重启到 PID 61836,下一轮验证真正非阻塞挂起与2分钟后单步重试。 ### 2026-09-22 17:16 八账号并发复测 - 账号数量:8;并发数量:4。 - 整批耗时:17:16:33–17:23:23,共 6 分 50 秒(410 秒)。 - 结果:成功 2,失败 6,跳过 0;成功率 25%。 - 成功核对:`vdat…`、`vdin…` 均完成 Key 创建、读取、按邮箱写库及 success 流程日志。 - 账号外部问题:1 个完成人机验证后仍要求手机号验证。 - AS-025 真实验证:4 个账号先释放队列并挂起约120秒,再只运行 AI Studio Key 步骤;调度、并发释放及单步恢复全部正常,问题关闭。 - 新问题:4 个同步账号失败时截图中的项目候选已经出现,定位为短暂空列表被提前判定,记录 AS-026;另确认至少3个账号因跨批次丢失 project ID 而重复建项目,记录 AS-027。 - 性能:410 秒包含每个同步账号的120秒非阻塞等待;等待期间其它账号正常运行,没有占用并发工位。尝试吞吐约51.3秒/账号;成功产出吞吐205秒/成功账号,暂不用于最终性能结论。 - 修复验证:AS-026、AS-027 补丁完成,全量 88/88 通过,待重启后下一轮真实复测。 ### 2026-09-22 17:27 六账号复测 - 账号数量:6;并发数量:4。 - 整批耗时:17:27:46–17:29:57,共 2 分 11 秒(131 秒)。 - 结果:成功 4,失败 2;总成功率66.7%,排除账号手机号验证后的功能成功率为80%。 - 成功核对:4/4 均恢复上轮 project ID、勾选并导入同一项目、创建及读取 Key、按邮箱写库并记录 success;无重复项目。 - 账号外部问题:1 个完成人机验证和2FA后仍被 Google 要求手机号验证。 - 唯一程序问题:`veldag…` 的指定项目不在推荐列表,页面持续 `No projects found`,程序未利用搜索框,记录为 AS-028。 - 性能:尝试吞吐131÷6≈21.8秒/账号;成功产出吞吐131÷4≈32.8秒/成功账号。成功账号大多约35–81秒完成,未再发生2分钟挂起。 - 修复验证:AS-026、AS-027 真实关闭;AS-028 修复完成,全量88/88通过,待单账号复测。 ### 2026-09-22 17:42 单账号人工流程监控 - 测试账号:`veldag…`;监控方式为比特浏览器窗口连续截图,并同步核对后台流程日志。 - 总时间:17:42:10 打开 AI Studio,17:44:48 人工 Key 被监听并写库,共约2分38秒;包含人工讲解、切换标签及截图停留,不作为自动吞吐基准。 - 真实路径:Import 推荐列表无项目 → AI Studio 内部 Create project 提示无法代建 → 打开 Google Cloud Console → 首次条款确认 → 创建默认项目 → Cloud Dashboard 确认成功 → 返回 AI Studio。 - 关键结论:新项目未出现在推荐列表时,不必固定等待2分钟;使用 Cloud Console 页面生成的 project ID 精确搜索即可立即找到,随后勾选项目、点击 Import、在创建框确认项目已选中并创建 Key。 - 数据核对:AI Studio 流程日志状态为 success;按该邮箱查询数据库,记录存在,Key、Key 名称和项目名称字段均非空;未在问题记录或日志输出 Key 明文。 - 修复结果:历史旧 ID 满2分钟且精确搜索仍为空时允许创建新项目;本轮刚创建的项目先立即精确搜索,搜索暂空才进入非阻塞2分钟等待,避免重复项目。 - 自动验证:针对性用例通过,全量88/88通过;待服务重启后进行自动单账号复测。 ### 2026-09-22 18:00 九账号并发复测 - 账号数量:9;并发数量:4。 - 整批结果:成功 3,失败 6,跳过 0。 - 本轮新问题:Cloud Console 创建后使用 project ID 而非项目名称搜索(AS-030);120 秒挂起过长且回队状态传递不完整(AS-031);创建流程中新出现的 Key 被误删并重建(AS-032)。 - AS-032 现场时序:`vanquy…` 18:07:16 列表出现 Key,18:07:27 被删除,18:08:19 才二次创建成功,增加约63秒和二次创建风险。 - AS-030 现场证据:18:08:54 和 18:08:59 两个账号均明确记录“按 project ID 精确搜索”,随后未立即导入。 - 修复后自动验证:项目名搜索、30秒非阻塞挂起、late-key 直接读取三组针对用例通过;全量88/88通过。 - 部署状态:18:25 服务已重启到 PID 53196,3001 端口监听与 HTTP 200 检查正常。 - 当前状态:修复已部署,待真实批量复测。 ### 2026-09-22 18:26 六账号并发复测 - 账号数量:6;整批时间:18:26:47–18:31:45,约4分58秒。 - 结果:成功 3,失败 3,跳过 0。 - AS-030 真实验证:`various…` 18:29:47 创建 Cloud 项目,18:29:56 明确按项目名称 `My Project 7839` 搜索,不再用 project ID。 - AS-031 真实验证:18:30:19 挂起 30 秒并释放队列,18:30:49 准时重新入队,本轮只执行项目导入和 Key 创建;18:31:19 导入,18:31:45 成功生成、读取和写库。 - AS-032 旁证:`vanth…` 在任务入口就存在旧 Key,正确删除并于18:28:20重建成功,未二次删除;本轮未触发“创建中 Key 晚到”场景,该分支仍待直接真实复测。 - 失败分类:1 个密码未被 Google 接受;1 个要求手机号验证;1 个被导向 Available regions 访问受限页,新增 AS-033 改善错误识别。 - 本轮后部署:AS-033 修复后全量88/88通过;18:37 重启到 PID 60748,HTTP 200,标准错误输出为空。 ### 2026-09-22 18:38 三账号访问限制复测 - 账号数量:3;整批时间:18:38:42–18:39:52,约70秒。 - 结果:成功 0,失败 3,跳过 0。 - 账号侧阻塞:`vanpho…` 密码验证页重复出现,Google 未接受当前密码或需要额外验证;`vansc…` 完成人机验证和 TOTP 后被要求手机号验证。 - AS-033 首次修复未通过真实复测:`vapor…` 仍误报“未找到 Create API key”;根因为顶部 Dismiss 按钮在正文检测前被误识别。 - 修复与部署:受限页识别已前置,全量88/88通过;18:43 重启到 PID 36044,HTTP 200,标准错误输出为空。 ### 2026-09-22 18:46 六账号并发复测 - 账号数量:6;实际线程数:2;整批时间:18:46:14–18:56:43,共10分29秒(629秒)。 - 结果:成功 3,失败 3,跳过 0;成功产出吞吐约209.7秒/成功账号,总尝试吞吐约104.8秒/账号。 - 成功:`vanducl…`、`vaniselvam…`、`vankie…` 均完成 Key 生成、读取和写库。 - 账号侧失败:`vanessa…` 完成人机验证和 TOTP 后要求手机号验证;`vanlawes…` 卡在 IPP 手机号/设备身份确认。 - 功能失败:`vanlo…` 新建项目后创建框仍在 spinner 状态,最终误报未能点击 Create key,记为 AS-035。 - 本轮验证:多个账号正确按 Cloud 项目名称搜索;30秒挂起期间释放线程,后续账号持续运行。 - 新发现:回队间隔与项目失效阈值混用(AS-034);项目创建后二次转圈(AS-035);IPP 重试上限失效(AS-036)。 - 修复与部署:三组针对用例和全量88/88通过;19:05 服务重启到 PID 48216,HTTP 200、任务接口0个活动任务、标准错误输出为空,待下一轮真实复测。 ### 2026-09-22 19:11 八账号串行复测(人工中止) - 账号数量:选择8个;实际并发:1;运行时间:19:11:48–19:18:07,共6分18秒。 - 正式完成2个:`uzayermiyad…` 登录阶段要求手机号验证,约69秒结束;`vacanc.ies…` 全流程成功并完成 Key 入库,约88秒。 - 第3个 `vahidtam…` 已完成登录、改密和2FA,进入 Cloud Console 创建项目时触发 AS-037;19:18:01进入30秒非阻塞挂起,没有产生最终成功/失败记录。 - 其余5个账号尚未开始;19:18:07任务收到手动停止,因此本轮不能作为8账号完整吞吐样本。 - 性能观察:两个正式结果加一个未完成账号共占用378秒;由于中途人工停止且第3个账号包含90秒无效等待,不计算最终每账号吞吐。 - 修复与部署:AS-037针对性测试和全量88/88通过;19:24服务重启到 PID 72636,HTTP 200、任务接口0个活动任务、标准错误输出为空,待重新跑完整批次。 ### 2026-09-22 19:52 六账号串行复测 - 账号数量:6;实际并发:1;整批时间:19:52:14–19:58:51,共6分36秒(约396秒)。 - 结果:成功1、失败5、跳过0;总尝试吞吐约66.1秒/账号、约54.5账号/小时;成功账号完整流程约68秒。 - 成功:`vahidtam…` 恢复并清除上轮无效项目记录后,创建项目、生成Key、读取和写库全部成功。 - 账号侧失败:`valentinericky…`、`valorant.crooshair…`、`valterbarbu…` 均在人机验证和TOTP后要求手机号验证;`valentinhoward…` 被 Google 明确返回旧2FA验证码错误。 - 功能失败:`valorant01…` 进入新版 Cloud Console 首次条款弹窗;第一版 AS-037 修复已阻止误点底层 Create 和90秒无效等待,但真实封装复选框未点中,20秒后明确失败。 - 单账号结束耗时约为:68秒、69秒、32秒、58秒、104秒、58秒;第五个包含20秒条款失败等待。 - 二次修复与部署:新增“DOM无可查询checkbox、仅有视觉复选框”坐标回归场景,针对性测试和全量88/88通过;20:03服务重启到 PID 32840,HTTP 200、任务接口0个活动任务、标准错误输出为空。 ## 单条问题记录格式 ### AS-XXX:问题标题 - 发现时间: - 测试账号:仅记录脱敏标识 - 严重程度:阻塞 / 严重 / 一般 / 轻微 - 所属步骤:登录 / 查看国家 / 更改语言 / 改密码 / 更改 2FA / 获取凭证 / AI Studio Key / 前端展示 / 数据保存 - 前置条件: - 复现步骤: - 实际结果: - 预期结果: - 稳定复现:是 / 否 / 未确认 - 相关日志: - 截图或录像: - 初步定位: - 当前状态:待确认 / 待修复 / 已修复待复测 / 已关闭 - 备注: ## 记录约定 - 邮箱、密码、2FA Secret、应用密码和 API Key 默认脱敏,不在本文中保存完整值。 - 用户描述不完整时,先按原始现象记录,再补充复现条件与日志。 - 同一根因引发的重复现象追加到原问题,不重复编号。 - 修复后保留原始现象,并追加修复说明与复测结果。