# 开发与验收记录 0.8.3 将底部步骤区改为天蓝色当前步骤面板,完整步骤按需展开并在内部滚动,支持长文字、小窗口、多个实例连续编号及独立资源阶段。构建及146项单元/集成检查通过;真实隔离DSH的100步模拟快照、长文字、状态、折叠和缩放已验证。范围、证据及安装检查见[步骤进度界面验收](步骤进度界面验收.md),操作见[进度显示指南](../user-guide/执行步骤与进度显示.md)。 0.8.2 将环境状态及确认释放入口移到“设置 → 测试插件 → 测试环境”。只有本插件命令失败时才向发起会话提示;没有使用测试功能的普通对话不显示全局隔离。单元与集成 138 项通过,隔离 DSH 的普通页面、按需错误、设置确认、取消、真实浏览器关闭与旧结果保留已验证,详见[设置释放与按需提示验收](设置释放与按需提示验收.md)。 0.8.1 增加新会话也可见的隔离提示、基于清理超时的异常提醒和用户确认后的主动释放。真实隔离 DSH 验收通过提示、取消、原生浏览器关闭、释放审计和旧结果保留,详见[隔离提示与确认释放验收](隔离提示与确认释放验收.md)。不按时间自动解除隔离,不自动重放测试。 0.8.0 增加原生设置页和下一次测试自动接入 MCP/Browscreen,121 项单元/集成检查通过。真实设置保存/刷新、API 无浮窗、直接 `/test` 网页用例的连续画面及结束清理通过;安装包的设置页也已验证。详见[预览设置与自动接入验收](预览设置与自动接入验收.md)和[逐步配置指南](../user-guide/浏览器实时预览一步一步配置.md)。 0.7.0 增加执行进度步骤图、实际耗时和 CDP 与首帧就绪后才打开的 Browscreen 画面浮窗。115 项单元/集成检查通过,真实 DSH API 测试全程无浮窗,无头 UI 测试的步骤、画面更新和结束关闭均已验收;独立 tgz 安装及前端装载通过。具体证据及边界见[执行进度与实时预览验收](执行进度与实时预览验收.md)。下文保留早期阶段记录。 ## 构建与打包恢复 2026-10-04,复现本地构建失败:`node_modules/@deepseek-ai/` 缺失,TypeScript 报宿主模块找不到及连带类型错误。使用已有 `scripts/link-host.mjs` 重新链接已构建的本地 DSH 后,`pnpm typecheck`、`pnpm build` 和 `pnpm pack` 均通过,121 项单元/集成测试全部通过。压缩包的 9 项显式导出均存在,宿主入口、浏览器模块工厂和 CommonJS CDP 初始化导出通过加载检查,三个入口摘要与当前构建一致,未包含本机配置或运行目录。本次恢复开发依赖,不修改运行代码或放宽类型检查;恢复步骤已补充到[安装与运维](../deployment/安装与运维.md#构建报-ts2307找不到-dsh-宿主模块)。本机基线、测试 JSON 和验证包保存在忽略目录 `artifacts/validation/build-repair/`;构建与打包验证不代替新的真实 DSH 用例验收。 ## 后续优化(未实施) 2026-10-04,记录[多对话并行测试优化方案](../design/多对话并行测试优化方案.md):让不同对话分别执行用例,独立持有浏览器、证据、预览和清理资源。方案包含当前全局锁与共享资源的限制、命名 Playwright CLI/独立 MCP 的选型探针、分阶段实施和真实并行验收标准。继续保持仅在当前运行的 CDP 和有效首帧就绪后显示浮窗;API、App 等没有 CDP 的运行不显示空浮窗。此项仅完成文档记录,当前代码仍使用既有串行限制,未确定开发版本和时间。 ## 当前结论 2026-10-03,已交付可安装的 `0.1.0` 开发版本:自然语言/JSON计划、串行实例执行、可信观察、确定性断言、停止与预授权清理、动态必需断言、持久运行记录及离线HTML报告均已有代码与验证。 本记录区分“功能已实现”和“设计阶段全部通过”。设计清单共有56项,其中若干包含多种故障与竞争条件;本轮没有完成F01–F10所有字母子项的三轮完整验收,不能宣称M0–M6已全部退出。已完成检查与剩余范围见下表及[阶段校验清单](../design/阶段校验清单.md)。 ## 环境与复现 执行者:Pegasus-Yang;日期:2026-10-03;本地macOS 26.6.2(25G83),Node.js 22.22.3、pnpm 11.7.0。 - 本地宿主:`/绝对路径/deepseek-harness`,`0.2.1-alpha.1`,提交 `5badb15009ae1756c3afe0ae0cef1faafc290ccc`。公开文档省略本机完整目录;与设计参考版本不同,按实际公开接口接入,没有修改核心源码。 - 模型:沿用本机Harness已配置的 `minimax-cn / MiniMax M3.1-Flash-Preview` 路由;模型响应标识MiniMax-M3。使用DeepSeek Harness不表示本轮使用了DeepSeek模型。 - native工具模式、最大工具并发1;Playwright MCP `0.0.68`,其Playwright依赖 `1.59.0-alpha-1771104257000`。最终测试MCP使用匹配的Chromium `146.0.7680.0 / revision 1212`;最终报告检查脚本使用Playwright `1.58.2`及其匹配Chromium,避免系统Chrome全页窄屏截图的重复拼接现象。 - 开发宿主13379,干净安装验收宿主13380;各自独立home/profile和运行目录。凭据只复制到忽略的0600文件,文档和包中没有密钥。 - 开发入口、安装方式及预算见[安装与运维](../deployment/安装与运维.md)。最终环境、源码提交、包摘要和41项测试结果保存在 `artifacts/validation/final/`。 ## 分步交付 | 提交 | 完成内容及验证 | | --- | --- | | 6b17fe1 | 初始化Git、保存审核后设计基线、排除运行数据及临时文件 | | 83c0b64 | 原生插件工程、宿主独立会话、真实MCP和模型调用探针 | | bd5bf20 | Schema/跨引用合同、确定性断言、持久化及只读重建基础 | | 7bd3fbd | 原生Web审批批准与拒绝,工具体计数分别1/0 | | 3eb4729 | 有界规划、来源校验、追加必需断言及逐实例修订 | | 8c01276 | 原生执行器、串行调度、可信DOM/API采集、离线报告 | | 2554c35 | 浏览器验收、报告检查、自然语言修复、原生bundle打包安装 | | abfa991 | 匹配Chromium解决关闭等待;停止不取消已开始的预授权清理;报告后置警示同步 | 工程采用职责相同的较小实现:命令装配在index.ts,浏览器/API adapter在adapters.ts,HTML模板在report.ts,规划规则随planner.ts发布。没有为尚未使用的扩展单独创建Skill或模板体系。公开安装使用 `dsh.bundle.patch` 注册插件,已通过隔离profile安装,不依赖绝对dist路径装载插件。 ## 实际运行证据 下列目录是本机可复查产物,被Git忽略。每个目录均有events.jsonl、results.json、report.html及evidence附件;失败记录未删除或覆盖。 | 场景 | 运行ID/证据 | 实际结果 | | --- | --- | --- | | M0真实宿主探针 | artifacts/validation/m0/probe.json | 独立Agent、工具调用、提前取消/拒绝/非法参数、真实MCP、模型finish等9项通过;不等同于完整早退矩阵 | | 原生审批 | artifacts/validation/m0/approval-approved.json、approval-rejected.json及PNG | 实际Web点击允许一次/拒绝;工具体计数1/0 | | 登录三行 | artifacts/runs/run-2026-10-03T08-42-33-554Z-7fbb639b | 有效/错误/空凭据3实例均PASS;实际UI结果分别true/false/false,独立上下文并完成清理 | | API负例 | artifacts/runs/run-2026-10-03T08-46-02-089Z-0af058c1 | FAIL符合预期:实际101,独立预期100;报告不被模型改判为PASS | | 自然语言规划和执行 | artifacts/runs/run-2026-10-03T09-00-53-385Z-286c2747 | 本地测试页金额100,生成有效计划并完成真实采集/断言/清理,PASS | | 缺少预期 | artifacts/validation/commands/内对应命令JSON | 询问期望金额与比较方式,不启动业务运行 | | 社区用例早期完整通过 | artifacts/runs/run-2026-10-03T08-40-06-546Z-233f9932 | 3断言PASS,点赞实际1,清理成功 | | 首次安装包验收 | .local/install-runs/run-2026-10-03T08-48-30-953Z-358f1f60 | 3断言PASS,点赞实际1;完整页截图可见点赞数;离线/附件/摘要/重建一致 | | 关闭问题复现 | .local/install-runs/run-2026-10-03T09-03-49-450Z-3a874d42 | 业务3断言PASS,必要清理超时,最终ERROR且隔离;没有掩盖清理失败 | ### 最终用户用例验收 在安装后的发行包、匹配Chromium和相同计划下连续执行三次,三次均PASS,必要清理均SUCCEEDED: | 运行ID(.local/install-runs下) | 搜索词 | 第一条路径 / 打开路径 | 点赞实际值 / 预期 | 结果 | | --- | --- | --- | --- | --- | | run-2026-10-03T09-19-15-279Z-a248ada3 | agent | /t/topic/34778(两者相同) | 1 / 不等于0 | PASS | | run-2026-10-03T09-22-52-770Z-51dc2d27 | agent | /t/topic/34778(两者相同) | 1 / 不等于0 | PASS | | run-2026-10-03T09-25-29-635Z-e9fbbac6 | agent | /t/topic/34778(两者相同) | 1 / 不等于0 | PASS | 正式用例由Harness独立Agent调用Playwright MCP执行;验收脚本只提交命令、处理宿主审批和核对报告,不代替Agent操作社区。第一条为默认搜索浮层第一条,计数采用首帖点赞;未点击点赞或写入网站。 第三次报告的events共154条、证据附件8个;原始响应、观察、预期、断言状态、HTML实际/预期列、附件摘要及只读重建全部一致,离线无外部请求、无脚本错误、窄屏无横向溢出。已人工查看桌面、窄屏和帖子截图,首帖显示点赞1。前两次分别143条事件、8个附件;三次报告均完成离线检查。 便于交付的完整副本保存在本机 `artifacts/acceptance/ceshiren/run-2026-10-03T09-25-29-635Z-e9fbbac6/`,其中包括 `report.html`、`results.json` 和 `report-verification.json`。这些文件被Git忽略,不提供公开仓库链接;克隆后需重新运行生成。三轮摘要在artifacts/validation/final/ceshiren-three-runs.json。 安装包自然语言入口另跑run-2026-10-03T09-26-47-376Z-62dbd36d:真实UI金额100等于预期100,PASS且清理成功;插件从隔离profile的node_modules加载。安装命令有peer依赖提示,实际运行由锁定宿主提供这些peer包,未据此宣称其他宿主版本兼容。 ## 故障修复与核验方法 1. 社区搜索需按Enter触发浮层结果;第一条身份来自实际搜索结果链接。打开后比较帖子标题链接的pathname,避免滚动后的 `/1` 后缀或SPA尚未更新的canonical误判。点赞仅读取首帖 `#post_1 .like-count`,没有点赞写操作;计划只含预期0,没有写入实际值1。 2. 系统Chrome关闭曾超过60秒。独立重放同一组MCP调用,调试日志显示context.close已成功,browser.close等待Chrome及更新器输出管道结束。改用MCP匹配的独立Chromium后重放正常,不延长预算或把超时改判成功。失败环境实际停止并核实进程树无存活后,使用处置证明解除隔离;release审计保留。 3. 自然语言提交中曾出现schema版本类型不明确、模型只回复JSON未调用提交工具;补充字段说明、完整结构例和有界提交提示。缺期望任务仍主动询问。 4. 报告验证由 `scripts/validate-report.mjs <运行目录>` 完成:JSONL序号、附件SHA256、原始MCP/API值与观察/断言实际值、只读重建逐项比对;复制整个目录后离线打开,检查筛选、空结果、清除、附件、桌面/窄屏溢出、外部请求及浏览器错误。另人工查看报告及真实页面截图。 5. `tsc --noEmit`、构建、41项Vitest单元/集成测试通过。集成测试中调度替身明确标注,不能替代真实宿主故障验证;原始输出与JSON结果保存在artifacts/validation/final。 ## 清单覆盖与仍需完成的验收 | 检查 | 状态与依据 | | --- | --- | | C00 | 通过:隔离profile、实际版本/源码差异/锁文件、启动及安装记录 | | C02、C05 | 通过:独立Agent生命周期探针及真实Web审批批准/拒绝 | | C11、C14、C16 | 通过:实例展开测试,事件/快照回读,路径/符号链接拒绝、字段和值脱敏及附件摘要 | | C40 | 通过:真实登录三行数据、实际输出和独立会话/清理 | | C52、C54 | 通过:真实报告三维筛选/空状态/清除,复制后离线展示,无外部请求和脚本错误 | | C21、C60 | 通过:有效JSON集合、损坏JSON明确报错;隔离profile安装后的JSON及自然语言入口均真实运行成功 | | C61、C66 | 通过:类型检查/构建/41项测试;发行包清单及依赖、许可、秘密/附件排除检查 | | C01、C03–C04、C06–C07 | 部分:安装/运行/审批和观察已有实证;完整卸载生命周期、所有早退与PTC拒绝矩阵仍需专项验收 | | C10、C12–C13、C15、C17 | 部分:合同与关键反例已有自动化测试;所有字母分支、写入故障位置与崩溃窗口尚未逐一覆盖 | | C20、C22–C27 | 部分:规划、缺口、动态断言和非法修订已有验证;登录自然语言规划、冲突规则、修订竞争及三轮语义稳定性未全部覆盖 | | C30–C37、C41–C47 | 部分:真实Web/API、负例和多行数据已跑,取消/挂起/hook/隔离有替身测试;共享前提、全部审批/取消竞争、迟到外部效果和重跑关联需补验 | | C50–C51、C53、C55–C57 | 部分:真实成功/失败报告、观察快照/附件、转义、重建与桌面窄屏已有证据;全部状态、trace、跨实例修订和缺附件组合未完整覆盖 | | C63–C65、C67 | 部分:发行包已在隔离profile运行,处置说明已实际操作;完整故障生命周期和最终阶段门槛尚未全部通过 | | C62 | 未完成:F01–F10所有字母子项三轮完整矩阵 | 当前功能边界:支持native和串行批次;HTTP只读GET JSON;运行时新增断言只能引用已冻结的可信规则来源,不自动接纳新知识源。更广泛知识接入、共享前提依赖传播和用户入口的显式前次运行关联仍需补齐或确认范围。当前版本不应被当作完整设计验收已结束的稳定发布。 本轮清单共13项完整通过,其余保持未勾选;不是13/56项功能可用,而是只有这些组合验收条件具备完整证据。验证辅助脚本和报告副本不修改原始运行事实。 ## 报告入口改进(2026-10-03) 根据实际网页使用反馈,补充报告发现与访问:运行结束后右下角自动展开完成提示,显示统计、保存位置、运行ID及可点击链接;提示可收起再展开。复用DSH已认证的Web服务,不新增端口;报告仍为可离线打开的静态HTML。/test-report可省略ID,重启后从输出目录恢复最近报告,运行中不发布未完成报告。 新增3项报告访问回归测试(最近报告恢复/在途不发布、只读路径及符号链接限制、迟到通知不覆盖新批次),全部44项测试、类型检查和构建通过。真实Web验收运行run-2026-10-03T10-19-21-825Z-6f942ed2完整PASS,点赞实际1;发起页面无需跳转业务会话即可收到提示,点击报告及截图附件成功,无ID命令和刷新恢复成功,未登录访问返回401。重启宿主后入口及中文统计恢复,报告HTTP 200。证据:artifacts/validation/report-notice/result.json及同目录桌面/窄屏/重启截图;复现脚本scripts/verify-report-notice.mjs。 实现采用宿主公开index注入与命名路由,不修改宿主核心或聊天页内部DOM。Web相关peer接口为可选依赖;无Web宿主保留本地路径。原有完整故障矩阵的未验收项不因本次入口改进自动通过。 ## 网页命令参数修复(2026-10-03) 用户在3080服务提交 `/test-run 自然语言描述` 未进入插件。核实该profile已通过 `dsh.profile.bundles` 安装并加载插件,页面也存在插件命令执行记录。根因是插件命令注册未声明 `input`:DSH网页只把不带参数的此类命令作为命令处理,带参数时落入普通聊天;菜单选中则立即以空输入调用处理器。此前验收脚本直接调用命令RPC,绕过了输入框分流,因此没有覆盖这一问题。上述历史运行结果仍是运行/报告证据,不能作为网页输入入口已通过的依据。 修复 `/test`、`/test-run`、`/test-report`、`/test-release` 的参数声明及提示;保留 `/test-status`、`/test-stop` 的无参数行为。`/test-run` 仍仅接受JSON文件,空输入、目录或不存在的路径会提示JSON用法和自然语言 `/test` 入口;工作区边界与损坏JSON仍拒绝执行。 类型检查、构建与51项单元/集成测试通过,其中新增7项覆盖参数声明、误用提示与路径/JSON拒绝。另在13379隔离宿主使用Chrome真实输入框验证:粘贴用户的 `/test-run` 命令进入插件并返回纠正提示;输入 `/test ` 显示参数提示,提交缺少网址和预期的任务后进入独立规划并返回补充信息问题;带ID的 `/test-report` 成功重建报告并展示保存位置。截图在 `artifacts/validation/command-input/web-commands.png`,页面文本在同目录 `web-commands.txt`。本次没有重跑社区业务用例,也没有更新或重启用户的3080服务。 修复发行包为 `artifacts/package/dsh-test-plugin-command-input.tgz`。使用不同文件名区分旧包;重新安装后须重启宿主并刷新网页。截图、临时登录入口及发行包均在现有忽略目录下,不提交到Git。 ## 同步执行与对话内进度(2026-10-03) `/test` 和 `/test-run` 现在同步等待执行、在途结算及清理完成,期间命令保持执行中。发起对话直接显示当前步骤、工具状态、实际观察、断言比较和最终报告链接;提供停止按钮及规划、工具审批、清理会话入口。执行仍复用隔离Agent会话,进度展示不额外调用模型。 实现通过原生 `dsh.client` 插件和对话插槽展示;以宿主 `command/run` / `command/done` 定位,脱敏快照原子保存为输出目录下 `conversation/.json`,浏览器每500毫秒读取受认证保护的快照,结束后停止轮询。最初自定义会话事件方案在重启检查中暴露未知事件读取失败,已改为独立快照;没有修改宿主源码或用户3080服务。测试目录内早期实验日志已备份并补充兼容性标记,仅用于恢复本轮测试会话,不属于发行包功能或用户数据迁移。 最终实现的真实Chrome输入框验收: - `run-2026-10-03T12-48-24-928Z-f9bb3ce4`:通过Playwright MCP访问社区,搜索agent,打开第一条 `/t/topic/34778`;8步骤、3断言通过,点赞实际1、预期不等于0,清理完成后命令返回。对话报告链接直接打开静态HTML,步骤与结果一致。 - `run-2026-10-03T12-49-51-354Z-aabee972`:通过对话停止按钮取消;在途导航结算,后续业务及断言跳过,预授权清理成功,最终CANCELLED并显示报告链接。没有将未执行断言显示为通过。 - 工具会话按钮实际跳转成功;需先刷新宿主会话目录,否则刚创建的执行会话尚未被客户端发现。完成宿主重启后,两次运行的步骤、断言和报告链接仍可在原对话回看。 类型检查、构建和58项单元/集成测试通过;新增同步等待、成功/失败实际值一致、取消与清理、显示失败隔离、进度访问边界、原生命令投影和按钮依赖回归。调度替身测试与真实浏览器验收分别记录,未据此扩大历史故障矩阵覆盖声明。 证据位于忽略目录 `artifacts/validation/conversation-progress/`;新发行包为 `artifacts/package/dsh-test-plugin-conversation-progress.tgz`。安装新包后需要重启相应宿主并刷新网页,3080尚未替换。自然语言使用 `/test <任务描述>`,JSON用例使用 `/test-run <文件路径>`。 ## 0.2.0 原生会话改造(2026-10-03) 本节替代前面独立规划/执行/清理 Agent 与客户端进度投影的当前状态描述,历史验收保持原貌。 - `/test`、`/test-run` 使用发起 Agent 的 `followup()`,通过 `systemPrompt.section()`、原生工具注册及事件观察增强正常循环。移除独立 Agent 执行器、客户端自制卡片和全局完成浮层。 - 命令只完成入队确认,让原生输入框立即显示运行与停止控件;实际请求、工具、审批、追问和回复全在同一会话。 - 报告链接使用宿主监听端口形成完整 HTTP 地址,避免相对链接被当成工作区文件;不带 ID 的 `/test-report` 仅恢复本会话报告。 - 自动化验证:类型检查、构建、57 项测试通过。覆盖原生提交、作用域释放、实际值类型、采集定义完整性、追加必需断言、取消排空、同会话清理、持久隔离、重启检测和超时 ERROR。 - 发行包通过公开 `plugin --profile web add` 安装到隔离 profile;在插件管理页确认版本 0.2.0、中文名称、图标及运行中的组件。未修改宿主源码或用户 3080 服务。 ### 最终真实网页验收 2026-10-03 22:29(Asia/Shanghai),使用隔离 Web 服务 13379、当前会话原生模型循环与 Playwright MCP 完成以下验证。浏览器入口全部通过 Chrome 实际输入框与按钮操作,没有直接调用命令 RPC、写入浏览器状态或插入宿主会话数据。 | 项目 | 实测结果 | | --- | --- | | 自然语言完整用例 | `run-2026-10-03T14-24-23-639Z-6ea4ccc2`,输入原始 `/test 访问ceshiren.com,搜索 agent 关键字,并打开第一条搜索结果帖子,断言帖子的点赞数不为0`;计划首次提交成功,9 步完成、3 条断言 PASS | | 真实业务结果 | 搜索 agent 后第一条结果 `/t/topic/34778`,打开后的 pathname 与采集的 first_href 相等;点赞实际 JSON 数字 1,预期 JSON 数字 0,比较器 `neq` 返回 PASS | | JSON 集合完整用例 | `run-2026-10-03T13-59-46-288Z-0bbdebb2`,8 步完成、3 条断言 PASS;搜索词、第一条帖子身份及点赞实际值均有可信证据 | | 原生停止与清理 | 最终版本 `run-2026-10-03T14-27-27-861Z-00f61711`,点击原生停止后在同一会话进入收尾轮次;业务/断言跳过,close SUCCEEDED,最终 CANCELLED,正常回复给出报告链接 | | 会话持久化 | 新会话首条测试即进入工作区侧栏;重启后成功及取消会话的原始输入、回复和报告链接仍在 | | 报告归属 | 重启后在成功会话运行不带 ID 的 `/test-report`,恢复该会话的成功报告,而非更晚的取消报告 | | 残留与后续聊天 | 新建会话为干净欢迎页,没有前次报告浮层;测试后原会话可继续普通聊天,原生界面显示移除 8 个测试工具 | | 报告与证据 | 点击原生最终回复的 HTTP 链接直接打开静态 HTML;目视核对步骤、身份断言和 `1 neq 0` 展示正常。自然语言运行的 10 份证据、JSON 运行的 8 份证据及取消运行的 1 份证据摘要、观察绑定、操作数和账本重建均通过数据校验 | 本次业务执行与清理的 `session_id` 均等于各自的 `manifest.origin_session_id`;未创建独立规划、执行或清理会话。中间文字、工具调用与收尾均由 DSH 原生循环产生。完成后工具记录按照宿主默认行为折叠,可展开查看。 验收中发现并修复了三类真实问题:工具结果中的可选 undefined 字段不满足宿主无损 JSON 合同;自然语言计划错误填写固定版本及来源;URL 模式误用于元素链接、断言输出缺少采集定义。分别补上工具输出规范化、服务端填充和冻结前校验。早期 `run-2026-10-03T14-11-23-854Z-d760d4eb`(ERROR)及 `run-2026-10-03T14-20-06-322Z-545334ae`(缺观察导致未通过)保留原始事实,不能计作成功验收。模型生成计划仍可能被校验拒绝并正常重试;未把一次成功等同于所有自然语言场景保证成功。 证据目录:`artifacts/validation/native-conversation/`(本地忽略),包含原生进度、最终回复、取消结果、报告及断言截图、重启恢复和干净新会话。数据复核使用 `node scripts/validate-report.mjs <运行目录> --data-only`;本轮报告视觉检查通过真实 Chrome 完成。历史全量故障矩阵未覆盖项仍保留原状态。 最终发行包:`artifacts/package/dsh-test-plugin-native-conversation.tgz`。在目标 profile 重新安装后,重启相同 profile 的宿主并刷新页面;不删除历史会话。3080 尚未替换。 ## 0.3.0 纯分析规划与报告重设计(2026-10-03) 本节替代 0.2.0 要求规划前浏览器探索、冻结全部选择器的当前行为;历史事实保留。 - 规划阶段仅允许计划提交、状态查询、待办和用户追问,工具守卫阻止浏览器、API、命令及其他执行工具。用户描述先形成业务目标、输入、输出语义和断言;实际运行时才识别页面并选择操作。 - 自然语言业务步骤默认 `capture_mode: runtime`。运行时通过 `test_capture` 绑定采集定位,可调整失配的选择器并记录原因,只补采缺少输出。原始计划、断言预期、输出类型与已成功观察不被覆盖;JSON 固定 capture 保持兼容。 - 采用用户选定的 Product Design 第 1 张方向:概览、用例导航、搜索筛选、步骤/断言/附件分页、原始响应、截图预览及数据下载。静态 HTML 自包含预览和下载内容,修复宿主隔离策略下附件请求缺少登录态的问题。视觉复核见[测试报告视觉验收](../design/测试报告视觉验收.md)。 - 类型检查、构建和 65 项单元/集成测试通过;新增规划执行拦截、运行时修正定位、部分输出补采、原始计划不变、报告状态、转义和自包含附件回归。 真实运行 `run-2026-10-03T15-17-12-543Z-545d10a6` 在本地 DSH 隔离服务 13379 通过,8 步完成、3 条断言 PASS:搜索词 agent;打开路径与第一条结果 `/t/topic/34778` 一致;点赞 JSON 数字 1 != 0。10 份证据及事件账本重建校验通过。模型先提交计划(前 3 次参数缺 cases,被正常拒绝,第 4 次成功),随后才首次导航;未预跑业务。宿主原生日志的调用顺序保存于 `artifacts/design/report/native-call-order.json`。 运行中第一次采集未取得 first_href,模型查看实际 DOM 后修正 selector,只补采 first_href,随后继续打开和断言。两次采集方式与原因保留在 capture_attempts,完成后 plan.json 与结果中 plan 完全相同。此运行真实覆盖“执行时调整”的反馈场景,不以修改预期换取 PASS。 报告视觉和交互分别通过真实 Chrome 检查;旧三行登录运行只用于报告切换/筛选验证,没有将其计为新版业务重跑。最终展示使用同一真实运行的 report-rebuilt.html,不改写原始账本。截图、设计稿、临时配置和发行包均在忽略目录。 发行包:`artifacts/package/dsh-test-plugin-adaptive-report.tgz`(0.3.0)。用户 3080 服务未改动,需通过公开 profile 插件安装命令更新,然后重启宿主并刷新网页。 ## 0.4.0 计划审核与纯接口测试 2026-10-04 新增 `/test-plan` 原生审核入口及 httpbin 接口示例。具体实现、真实宿主发现的问题和复验结果见[专项验收记录](计划审核与接口测试验收.md)。前文为各历史版本验收事实。 ## 0.5.0 文字规划与中文对话 2026-10-04 将自然语言规划简化为业务动作短句和文字检查点,操作参数与确定性断言留到当前步骤执行时绑定;计划审核及直接执行通报增加原始任务、简短拆分思路,并通过宿主语言偏好约束过程和最终回复。构建及 80 项测试通过,真实接口审核修改、单次请求与三个断言通过。各版本的真实浏览器覆盖、失败修正与最终复验边界见[文字规划与中文对话验收](文字规划与中文对话验收.md)。 解锁后继续真实验收,修复固定清理拒绝空 capture、直接入口偶发跳过完整通报两项问题,分别提交 `48b9370`、`15aecc1`。最终构建及 82 项测试通过;最终包在新会话完成原始 ceshiren 用例,完整中文通报早于首次操作,数字点赞 `1 neq 0` 通过、清理成功、9 份证据和报告数据一致,报告页面与对话链接正常。验收发现的失败和修正均保留在专项记录中;用户 3080 服务未替换。 ## 固定安装包路径与旧依赖恢复(2026-10-04) 用户删除旧 tgz 后安装文档中的 `dsh-test-plugin.tgz`,pnpm 11.7.0 仍读取已删除的 `dsh-test-plugin-plan-review.tgz` 并报 ENOENT。确认用户 web profile 的清单及锁文件仍记录该旧 `file:` 来源,新包存在且内容有效。此前不同验收文件名与安装文档没有说明的来源路径生命周期共同暴露了迁移问题。 复制 profile 的安装清单、锁文件及 hoisted 配置到隔离目录,使用相同 `pnpm dsh` 源码入口复现原错误;官方 `plugin --profile web remove dsh-test-plugin` 后再 `add` 新 tgz 成功。未通过恢复旧文件名、手写锁文件或删除 profile 绕过。 更新安装文档,区分插件目录构建与 Harness 目录安装,统一当前产物名 `dsh-test-plugin.tgz`,说明本地 file 依赖需要保留及旧路径丢失的正式恢复流程。按文档执行 typecheck、build、pack 均成功。 备份用户安装清单后,通过同一官方 remove/add 流程修复用户的 `~/.dsh/profiles/web`。安装为 0.5.0,bundle 列表保持原样;旧引用已清除,安装后的全部 dist 文件与本次构建逐字节一致。备份与验证摘要在忽略目录 `.local/install-recovery/`。此次只更新磁盘上的插件安装,未重启 3080 服务;运行中的服务仍需重启并刷新页面后加载新包。本轮验证安装恢复,不重复声明已在 3080 运行新版业务用例。 ## 0.6.0 文本用例与 CSV 参数化 2026-10-04 按用户要求先提交修改方案和实施方案,再实现 TXT/Markdown 多用例、`/test-plan --file` 和 `/test-data`。CSV 为每条用例展开全部数据行,原生 plan 审核展示参数、数量、原文、展开任务及步骤;通过后同会话串行执行,报告可按源用例与数据行筛选。 构建及 100 项测试通过,独立 DSH 真实验收完成 TXT、Markdown、CSV+文件、CSV+直接模板及浏览器文件审核,五个成功批次共 11 个实例。验收中修正空参数通报和审核前取消计数,并发现同路径同版本包更新可能缓存旧文件,安装文档已改为开发更新 remove/add。具体运行、审批顺序、失败记录和验证边界见[专项验收](文本用例与参数化验收.md)。0.6.0 已打包,用户 3080 profile 未更新。 ## 0.9.2 图文说明与版本交付(2026-10-05) README 与使用说明新增计划审核、当前步骤、完整列表、实时画面及断言报告截图;实时浮窗使用完整 DSH 页面展示,功能介绍侧重执行能力。截图来自同日 0.9.1 的真实社区搜索运行并保留原始版本说明。0.9.2 沿用现有执行和预览行为,安装地址、包版本与运行记录版本同步为 0.9.2。 发布前在临时干净目录按锁文件安装公开 npm 依赖,确认 24 个 DSH SDK 包没有宿主源码链接;类型检查、构建、144 项单元测试及 33 项集成测试通过。首次集成运行有一条双浏览器实例回归触发 Vitest 的 5 秒框架超时;保持源码、断言和默认超时不变,整组复验全部通过,该项用时约 1.35 秒。失败与复验结果保存在本地忽略目录,不把首次失败改写为通过。 本版真实网页展示取自已有 0.9.1 运行;0.9.2 验证覆盖公开依赖构建、行为回归、版本同步和发行产物。标签解析到最终交付提交,原始运行数据不因版本发布而改写。 实际 tgz 安装包为 0.9.2,共 108 个文件;69 个构建文件及 10 张说明截图与交付文件逐字节一致,清单入口完整,使用公开依赖可直接导入包内宿主入口。包内没有本机配置、凭据、依赖目录或调试产物。 ## 命令精简与单预览浮窗(2026-10-05,未发布) 根据用户确认,只保留四个测试命令;报告重建和异常处置移到界面,原生停止和进度展示承担停止、状态入口。修正展开向下、收起向上的箭头;按会话复用预览页,显示与隐藏切换且隐藏后轮询不再自动弹出。 公开 SDK 构建、168 项单元测试与 33 项集成测试通过。独立 npm DSH 及官方 tgz 安装验证命令菜单、真实图片、十次窗口切换、原生关闭、结束关闭、报告重建及设置处置。标题非空冒烟用例 PASS;搜索用例有一条模型比较关系错误造成的 FAIL,保留原始记录并单独说明。证据、失败边界和操作说明见[专项验收](命令精简与单预览浮窗验收.md)。独立验收服务已停止,用户 3080 服务未更新;此次先创建本地提交供审核。 ## 0.12.2 DSH 宿主升级适配(2026-10-15) 公开 SDK 与相关开发依赖升级至 DSH 0.2.1-alpha.3 基线,修复原生审核关闭正常返回 `approved: false` 时仍催促模型的分支。类型与构建通过,29 个测试文件共 363 项回归通过;独立 tgz 安装和真实 Markdown 网页、接口用例均 PASS,审核关闭、反馈后重新批准、同会话清理、报告访问及两条运行的账本完整性通过。同步当前文档版本、包版本、运行 manifest 和本地附注标签 `v0.12.2`。环境及驱动复验、原始证据与历史验收边界见[专项验收](DSH宿主升级适配验收.md);独立验收服务已停止,提交与标签仅保存在本地。 ## 0.12.3 CI 公开依赖修复(2026-10-15) 在项目目录之外的独立副本复现 GitHub 的 7 个套件导入失败,确认未声明的宿主源码链接掩盖了运行时 peer 缺失。显式补齐 5 个 alpha.3 SDK 开发依赖和锁文件,CI 增加宿主入口真实导入,开发排错文档改为先核对公开依赖。独立 Linux x86_64 完成冻结安装、构建及产物一致性、类型、300 项单元与 63 项集成回归、打包和解包检查;取消用例改用受控时钟后完整集成复验通过,生产参数保持原值。同步包版本、运行 manifest、当前中英文文档与本地附注标签 `v0.12.3`,首次失败及验证边界见 [CI 公开依赖安装验收](CI公开依赖安装验收.md)。提交与标签仅保存在本地,远端 CI 须在用户推送后核对。