# 验证说明 目标 Harness 版本:**0.2.0-rc.2**。自动化使用隔离 profile、合成会话和模型流,不读取生产凭据,不调用付费模型。真实页面验收另使用专用合成会话,模型回顾通过该会话已配置的官方路由生成。 ## 复现 需要 Node.js 22.19+,在源码仓库执行: ```sh npm ci --ignore-scripts npm run format:check npm run check npm run test:browser npm pack ``` | 测试 | 验证内容 | | --------------------------------- | -------------------------------------------------------------------------------------------- | | `core.test.ts` | 校验、脱敏、Unicode 截断、投影、压缩事务和素材预算 | | `engine.test.ts` | 可见闲置、手动请求、去重、取消、超时、过期结果、缓存与多标签页、缓存重新展示及队列优先级提升 | | `http.test.ts` | 请求格式与大小、状态返回、配置接口和错误隔离 | | `host.integration.test.ts` | 真实 Harness 命令与投影、慢模型时立即受理、模型路由、卸载、上下文不变及可选注入 | | `auth.integration.test.ts` | 本机 HTTP 认证、来源校验和路由撤销 | | `settings.integration.test.ts` | 隔离配置持久化、实时生效、revision 冲突和并发写入 | | `client-entry.test.ts` | 官方插槽、无重复命令摘要、仅最新命令提示、最新轮次过滤、动态语言标签与注册身份稳定 | | `recap-view.test.tsx` | 缓存资料轮次与展示轮次分离、较早回顾标记、跨会话与错位状态拒绝展示 | | `scripts/test-browser.mjs` | 单一文字、三行预览、展开收起、长度、保存按钮、设置冲突、语言、窄屏与静默失败 | | `scripts/test-settings-slots.mjs` | 使用真实 SDK SlotCore/Renderer 验证语言切换保留设置草稿、正在进行的保存,以及卸载清理 | `check` 包含严格类型检查、测试、双端构建与包入口检查。浏览器测试使用已安装的 Chrome、`CHROME_PATH` 指定的浏览器,或 Playwright Chromium;后者可用 `npx playwright install chromium` 安装。产物写入忽略的 `test-results/`。安装包只包含用户需要的配置文档,设计与验证说明留在源码仓库。 ## 设置交互更新 设置页改为自动保存,移除生成方式选择和顶部上下文说明,复用 Harness 官方模型目录选择独立回顾模型。默认跟随当前会话模型,输出预算为 512 tokens。真实 Web 页面已验证目录加载、选择独立模型不改变主对话、自动保存落盘,以及跟随 GPT-6-Luna 生成短摘要;GPT-5.4 mini 在本次测试中返回不完整响应,未计为成功。输入默认收紧到最近 12 条消息、6000 字符,回顾限制为 160 字符。 新增浏览器回归覆盖自动保存、无效数值不提交、模型路由成对保存与清空、请求期间继续修改(包括改回旧值)、revision 冲突、语言切换和卸载取消。下面保留此前验收记录,其中手动保存按钮描述属于旧版行为。 ## 当前验证 本次修复通过 108 项自动化测试、14 项原有浏览器组件检查和 6 项真实 SDK 插槽浏览器回归;严格类型、全仓格式、构建与包入口检查通过。新增回归覆盖再次闲置展示缓存、轮次窗口复用和到期、旧资料不可注入、手动任务队列提升与取消,以及语言切换期间保留草稿和正在进行的保存。慢模型回归用未结束的合成流验证命令已经返回,再结束模型流验证回顾更新。 本次未重载生产插件,也未运行付费模型。以下为此前真实 Harness 页面使用合成会话的验收记录: - 使用 GPT-6-Luna 生成合成对话回复及模型回顾;当前回顾为无卡片边框的文字,支持展开与收起。 - 连续两次强制刷新及完成后再次执行 `/recap`,页面始终只有一条回顾,没有旧卡片堆积。 - 提交回顾命令后输入立即清空;生成期间新输入的未发送草稿在回顾完成后仍保留。 - 设置标题处仅一个保存按钮,正常状态不显示重新读取;底部保留恢复默认设置。设置保存、冲突恢复及窄屏布局由浏览器组件检查覆盖。 - 新建空白会话没有回顾或加载错误占位;打开已有会话不生成新回顾。 - 当前可见会话闲置后自动展示,继续对话收起。测试临时将阈值缩短为 0.1 分钟并使用事实模式,完成后恢复 3 分钟与模型模式。 此前真实页面还验证过命令 help/status/settings/hide、模型失败降级、中英文、设置冲突与草稿保留、可选上下文注入和插件启停。本轮移除的离开、恢复、压缩及每轮结束触发不计入当前功能覆盖。 针对慢生成阻塞命令、重复展示、旧命令结果堆积、打开即触发、最后可见页面离开后任务仍完成、返回时旧自动结果重现,已增加或调整对应回归。多标签页保留最后可见页面的取消边界、手动加入自动请求的合并行为由调度测试覆盖。手动与自动摘要均为临时展示,继续对话后隐藏;Host 重启后缓存不保留。 自动化通过不等于全部业务场景验收。目标状态、文件行数与历史错误由投影和集成测试覆盖,真实页面未逐项制造。超时、并发与取消未对每个真实服务商做故障注入。全新真实 profile 安装、其他系统和 Node.js 版本、长时间运行、复杂业务对话的摘要质量尚未完整验证。 ## 展示与命令开关修复 调度回归覆盖已完成回顾在失焦与 60 秒租约过期后仍显示、页面关闭和新轮次隐藏;Host 回归覆盖关闭命令后从发现列表注销、重新开启只有一个注册。Client 回归覆盖 Compact 后的 recap 命令承担展示、轮次尾部不重复。完整检查 111 项,浏览器组件与设置插槽检查 23 项通过。自动回顾固定到整个记录底部仍受当前 SDK 无对应插槽的限制。 重启后的真实 Web 验证:关闭 `/recap` 后命令候选移除,重新开启后恢复;手动回顾在 Compact 下方生成。切到空白标签页 50 秒后返回,摘要正文保持不变;刷新页面后摘要清除。命令开关已恢复为开启。 空行间距回归:隐藏 recap 的命令内容后,宿主外层仍为每行保留 6px margin。现在使用插件专属标记,仅折叠空 recap 命令行;浏览器回归验证多条空行不累积间距,非空及其他命令保留原布局。真实页面确认 44 条历史空行被折叠,Compact 与 recap 之间恢复约 6px 间距;相关 8 项 Client 测试、24 项浏览器检查及 typecheck 通过。 ## 产品问题修复后的补充验证 本轮代码包含失败反馈、设置保存队列、设置弹窗、页面独立展示水位、路径选项移除和长度处理。`npm run check` 共 134 项通过;浏览器组件 18 项、真实 SDK SlotCore/Renderer 7 项通过。新增覆盖关窗继续保存、在途新修改串行提交、冲突保留草稿、设置弹窗与 Esc、失败保留旧摘要及重试入口、调度配置保留缓存、内容配置标记过期、刷新不影响后台标签页、不完整响应不发布残句、空白会话命令结果渲染。 以上为隔离环境和合成数据。最新构建还需重启目标 Harness 后验证,尤其是空白会话命令的宿主呈现和双标签页真实网络生命周期。当前未获得本轮重启确认;不将前轮真实页面结果算作新实现的验收。 自动触发时机按用户要求保持不变。SDK 不提供聊天绝对底部插槽,统一到 Compact 下方尚未实现。生成使用的消息可能含路径,删除开关只意味着不再额外收集文件列表,不承诺清除消息中的路径。 `/recap settings` 后续已改为执行后直接弹窗,不显示启动按钮;通过新命令直接打开、历史命令不弹出、同命令重挂载不重复打开的组件验证,浏览器检查合计 27 项。当前 Harness 页面连接超时,本次尚未完成该实例的现场验证。 ## 重启后真实页面验收(2026-10-02) 在用户重启的原 Harness 实例上,使用既有便签合成会话完成以下真实 UI 验证。原标签页自动化连接超时,通过同一实例的新标签页恢复测试,没有另起 Harness 服务。 - 普通会话 `/recap settings` 直接弹出设置,没有“打开会话回顾设置”按钮;空白会话同样可直接弹窗。 - 闲置阈值从 3 改为 4,立即关闭弹窗并刷新页面,再打开读到 4;随后恢复为 3。刷新没有重放历史设置弹窗。 - GPT-6-Luna 实际生成“便签功能需求已完成,实现方案尚未开始,下一步是确定标题长度限制。”,与合成素材一致。 - 两个标签页显示回顾后刷新其中一个:刷新页不显示旧回顾,另一页仍显示;新开页面也没有自动显示旧缓存。 - hide 后执行 status 显示“回顾已隐藏;已有缓存”,未恢复回顾;手动 recap 能恢复。 - 将超时暂设为 2 秒,实际请求超时,页面显示原因与重试按钮,旧摘要仍保留。恢复 20 秒后点击重试成功,错误提示消失。 - 现场发现并修复空白会话没有聊天时间线导致命令反馈不可见:通过官方 input.dock 仅显示空白会话命令反馈。重新构建并刷新后,真实页面显示“当前还没有可展示的回顾。对话后可执行 /recap。”。普通会话不新增输入区摘要。 - 最终读取全部 17 个表单字段,与测试前完全相同;主会话模型保持 GPT-6-Luna。额外测试标签页已关闭,原用户标签页保留。 最新自动化检查为 135 项,浏览器组件与 SDK 检查合计 27 项;类型、构建及包入口检查通过。上述结果补齐前文等待重启的核心验收,不代表所有服务商、长时间运行或全部故障组合均已真实覆盖。自动触发时机保持不变,绝对底部位置仍受 SDK 限制。 ### 打开设置后的回顾位置回归 后续发现执行 settings/status/help 会把最新回顾命令的展示位置覆盖,导致已有摘要回退到助手回复下方、Compact 上方。现在分别查找摘要所在命令和最新反馈命令,辅助命令不再移动已有摘要。新增三项回归先复现失败,修复后完整检查 138 项通过。真实页面执行 recap,再打开并关闭 settings,确认摘要仍只有一份且位于 Compact 下方,两者间距 8px。本次不改变自动回顾的 SDK 插槽限制。 ### 整体审查后的可靠性回归(2026-10-02) 本轮修复五项边界行为:跟随会话时优先使用尚未消费的模型选择;设置冲突后必须显式重试;首次页面 presence 在失败、乱序和重挂载时保持幂等;关闭自动开关保留已合并的手动请求;素材预算不足时保留结构化目标、待办和压缩检查点等非空证据。模型路由说明已同步,不修改主会话的模型选择或上下文。 新增回归先在原实现上复现失败,再验证修复。`npm run check` 通过 192 项测试及严格类型、双端构建、包入口和 ModuleLoader 检查;全仓 Prettier 检查、覆盖率测试及 `npm pack` 通过。原始文档图片已按 Git blob 校验并纳入打包检查,版本保持 0.1.0。 Client 生命周期回归使用实际 effect、API 与 engine 配合最小 React hook 测试环境,覆盖首次请求丢失/乱序、响应丢失后重试、卸载和语言切换。浏览器 fixture 已改为处理真实 presence 参数,并增加冲突后重新读取、关窗、重开、继续编辑及明确重试的交互断言。 本轮浏览器执行仍被运行环境阻止,未计为通过;没有重载真实 Harness、调用付费模型或复测真实服务商。合并前仍需在可启动浏览器的环境运行 `npm run test:browser`,真实 Harness 的双标签页及设置交互也应另行验收。