@@ -2620,3 +2620,106 @@ ssh -i $pem $srv "cd /opt/testpilot/app/web && npm run build && sudo cp -r dist/
26202620- ** 现象** :SCP上传后 ` npm run build ` 报 JSX 语法错误(Unexpected token)
26212621- ** 根因** :文件末尾有重复的旧代码段(完整的 ` </form> ` 到第二个 ` } ` 都重复了一次)
26222622- ** 修复** :用 ` replace_string_in_file ` 删除重复尾部,重新上传重建成功
2623+
2624+ ---
2625+
2626+ ## 17. 版本回归与未提交修复丢失(2026-03-17)
2627+
2628+ ### 17.1 版本对比结论
2629+
2630+ #### 问题描述
2631+ 用户反映:3月15日下午4点上传的版本运行正常,但3月17日上传v13.2后感觉"插件不如之前好了",小程序测试时似乎卡住不停止。
2632+
2633+ #### Git历史对比
2634+
2635+ | 版本 | 提交 | 时间 | 说明 |
2636+ | ------| ------| ------| ------|
2637+ | ** 稳定版** | ` dff0933 ` | 3/15 16:45 | chore: switch domain to testpilot.xinzaoai.com |
2638+ | ** v13.2** | ` 8ee17d9 ` | 3/17 13:32 | HTTPS上线+下载页+导航优化+扩展按钮状态修复+经验库fallback |
2639+
2640+ #### 关键发现
2641+ 1 . ** 核心测试引擎代码(src/testing/, src/api/, src/core/)在两个版本之间完全没有改动**
2642+ 2 . v13.2的改动仅限于:
2643+ - ` extension/src/sidebarProvider.ts ` — 插件UI优化(启动/断开按钮合并、经验库fallback远程服务器)
2644+ - ` web/ ` — 官网页面(下载页、导航、国际化)
2645+ - ` src/auth/ ` — 认证服务
2646+ - ` deploy/ ` — Nginx配置
2647+ - 文档(备忘录、规划)
2648+ 3 . ** 测试执行流程(runTest/stopTest/testComplete/progress)在diff中完全没有出现**
2649+
2650+ #### 结论
2651+ v13.2的提交本身** 不应导致测试卡住** 。可能的原因:
2652+ - ** 环境差异** :单位电脑和家里电脑的环境(Python版本、依赖、微信开发者工具版本)不同
2653+ - ** 小程序测试长脚本** :蓝本步骤多时AI调用耗时长,看起来像"卡住"但实际还在跑
2654+ - ** 网络波动** :AI API偶发超时(30秒timeout),多个超时叠加可能导致看起来很久不动
2655+
2656+ ### 17.2 ⚠️ 3月14日未提交的修复已丢失
2657+
2658+ 以下修改在3月14日会话中做了但** 未提交到Git** ,被v13.2覆盖:
2659+
2660+ | 修改 | 文件 | 作用 | 状态 |
2661+ | ------| ------| ------| ------|
2662+ | OCR prompt改英文 | ` desktop_blueprint_runner.py ` | 解决OCR只返回标题"Todo App"的问题 | ❌ 丢失 |
2663+ | 弹窗按钮跳过预分析缓存 | ` desktop_blueprint_runner.py ` | 解决OK/Yes等弹窗按钮用旧坐标点不到 | ❌ 丢失 |
2664+ | 弹窗必须关闭规范 | ` .windsurf/workflows/blueprint.md ` | 蓝本规范新增弹窗铁律 | ❌ 丢失 |
2665+ | TodoApp蓝本弹窗关闭步骤 | ` todo-demo/testpilot.json ` | 蓝本在弹窗后加OK/Yes关闭步骤 | ❌ 丢失 |
2666+
2667+ ** 铁律:做完修改必须立即git commit,不能只改不提交。跨会话/跨设备同步全靠Git。**
2668+
2669+ ### 17.3 需要重新实施的修复清单
2670+
2671+ 以下修复需要在下次会话中重新做:
2672+
2673+ 1 . ** OCR prompt改英文** (` desktop_blueprint_runner.py ` ` _get_text ` 方法)
2674+ - 原prompt: ` "请识别这张截图中所有可见的文字内容,逐行列出。只输出文字内容本身,不要加任何解释或格式。" `
2675+ - 新prompt: ` "List ALL visible text in this screenshot, line by line. Include every button label, list item, input placeholder, status bar text, and title. Output ONLY the raw text, no explanation." `
2676+ - 同时 ` reasoning_effort ` 从 ` "minimal" ` 改为 ` "low" ` ,` timeout ` 从 20 改为 30
2677+
2678+ 2 . ** 弹窗按钮跳过预分析缓存** (` desktop_blueprint_runner.py ` ` _smart_tap ` 方法)
2679+ - 新增类变量 ` _DIALOG_BUTTONS = {"name:OK", "name:Ok", "name:Yes", "name:No", "name:Cancel", "name:Close", "name:确定", "name:取消", "name:是", "name:否", "name:关闭"} `
2680+ - ` _smart_tap ` 开头判断:如果target是弹窗按钮,跳过预分析缓存,直接走UIA→AI视觉实时定位
2681+
2682+ 3 . ** 蓝本规范更新** (` .windsurf/workflows/blueprint.md ` )
2683+ - desktop专用注意事项新增:弹窗触发后必须加click步骤关闭弹窗
2684+
2685+ 4 . ** 蓝本弹窗步骤修复** (` todo-demo/testpilot.json ` )
2686+ - "重复添加检测"场景截图后加 click name: OK + wait 300
2687+ - "空输入验证"场景截图后加 click name: OK + wait 300
2688+
2689+ ### 17.4 纠正:4项修复并未丢失
2690+
2691+ 经检查当前v13.2代码,备忘录17.2中列出的4项"丢失修复"实际** 已存在于当前版本** :
2692+ - OCR prompt英文版 ✅(` _get_text ` 中已是英文prompt + ` reasoning_effort="low" ` + ` timeout=30 ` )
2693+ - 弹窗按钮跳过预分析缓存 ✅(通过AIHub的` DIALOG_BUTTON_KEYWORDS ` 统一管理)
2694+ - 蓝本规范弹窗铁律 ✅(` .windsurf/workflows/blueprint.md ` 已有)
2695+ - 蓝本弹窗关闭步骤 ✅(` todo-demo/testpilot.json ` 已有` name:OK ` 步骤)
2696+
2697+ 这些修复在v12.x-v13.x的开发过程中已被合并。
2698+
2699+ ### 17.5 小程序测试"卡住"分析
2700+
2701+ #### 用户反馈
2702+ 3月15日安装的插件运行小程序测试顺畅,3月17日v13.2插件运行时感觉卡住不停止。
2703+
2704+ #### 对比结果
2705+ 稳定版可能是` 5f08b64 ` (3/13 v11.0-C),按钮文字为"断开引擎"(红色)。v13.2改为"一键连接/断开"单按钮。
2706+
2707+ 从` 5f08b64 ` 到` 8ee17d9 ` (v13.2),` miniprogram_runner.js ` 的主要改动是加了` withTimeout ` 超时包装(来自` 1eaf274 ` iOS真机测试提交):
2708+ - ` mp.currentPage() ` → 8秒超时,超时返回null
2709+ - ` mp.evaluate() ` → 8-10秒超时
2710+ - ` mp.screenshot() ` → 8秒超时
2711+ - ` page.callMethod() ` → 8秒超时
2712+
2713+ ** 潜在风险** :` currentPage() ` 超时后page=null,后续` page.$(...) ` 会报错。但这不一定是卡住的根因,也可能是环境差异或偶发网络问题。
2714+
2715+ #### 结论
2716+ 暂不修改,直接安装最新插件运行,有错改错。如果再次出现卡住,重点排查:
2717+ 1 . ` withTimeout ` 超时后page=null导致的空指针
2718+ 2 . Node进程异常退出但Python端未检测到
2719+ 3 . 微信开发者工具automator连接不稳定
2720+
2721+ ### 17.6 弹窗自愈机制(三层防御)—— 待实现
2722+
2723+ 详见13.21节的设计。优先级:
2724+ - ** 第2层(检测+自愈)** 最重要:步骤失败时截图分析是否有弹窗,自动关闭后重试
2725+ - ** 第3层(场景跳过)** 兜底:连续失败N步时跳到下一场景
0 commit comments