功能开发与测试流程
配置到实际请求的检查见 路由链路审计。
本文规定开发一个功能时需要检查什么。 测试结果仍按候选和环境分别记录。 功能编号来自 功能清单。 实际命令归属见 脚本入口映射。 Trace 的状态转换见 状态矩阵。
开发前定义结果
先阅读 公开版验收 和 产品要求。 用一组具体操作描述功能。 每组操作都写初始状态、用户动作和最终结果。 最终结果包含界面、文件、运行时和记录。
例如“切换服务后继续对话”需要定义以下结果。
- 界面保留最后选择的服务和模型。
- 已开始的回答使用原服务快照。
- 后续请求使用用户选择的目标。
- 原线程的正文和工具结果可续接。
- Trace 保留原生身份与实际路由。
- 失败后提供对应重试,不自动换服务。
先确定状态,再选脚本。 不能从一个已有脚本反推功能已经完整覆盖。 新增功能沿用稳定编号,必要时新增子场景。 已有历史证据保留,不改成当前候选通过。
实现时保持的约束
后端使用 Rust/Tauri。 前端使用 React、TypeScript、Tailwind CSS 和 Base UI/COSS。 复用现有桥接、文件所有权与样式变量。 新增依赖先核对现有能力和包体积。
异步操作以用户最后一次选择为准。 保存、客户端写入、运行时生效和真实生成分别反馈。 目录和额度查询失败不能撤销本地选择。 切页、取消和迟到结果不得覆盖新状态。 普通切换保留已开始的回答。 失败保留草稿,并提供明确的下一步。
记录按实际请求保存。 客户端原请求与转换后的上游请求分开。 不能补造历史、未知用量、额度或完成事件。 已经输出内容或执行工具的请求不能盲目重放。 日志和验收附件不得包含 Key、令牌或私人正文。
检查资料的实际消费
外部资料字段变化时,沿来源、缓存、配置和客户端检查。 页面关闭和服务目录失败也必须覆盖。 旧值保留时,验证明确配置或兼容策略的依据。 检查方式见 资料消费审计。
按模块选择检查
下表说明脚本的相关断言和验收边界。 完整路径见 自动化映射。 “已有断言”不表示所有列出的子场景都已验收。
| 模块 | 开发时必须明确 | 已有自动化检查 | 最终补充与缺口 |
|---|---|---|---|
| TR 捕获与归类 | 原生线程、尝试、主辅、父子和完成状态 | native-sessions 检查身份与流;navigation 检查归组摘要;portability 检查原请求与上游分离 | 实际多轮、resume、compact、侧边聊天和 Desktop;HTTP 与 WS 分列 |
| CO 用量与费用 | 字段来源、已知零值、未知值、冻结费率 | cache-usage 检查缺项和缓存;billing 检查冻结与复算;Viewer 检查零值、小额和重复事件 | 当前包实际 usage 与账单分别核对;失败缺项不增金额,不显示星号 |
| MO 模型与协议 | 真实目录、能力优先级、精确 ID 和协议 | catalog/protocol 检查目录与转换;models 组件检查乱序、迟到和选择 | 正式授权目录与真实生成分别验;图片、工具、音频不能靠文字通过代验 |
| CL 客户端与续接 | 文件写入范围、旧绑定、模型角色和账号 | config-merge 检查外部字段;portability 检查多协议续接和活动回答;desktop-routing 检查路由 | 当前 CLI 与 Desktop 各验;原线程 A→B→A、同进程和重开分列 |
| SE 设置与存储 | 原子保存、容量、目录和在途数据 | settings-write 检查冲突;writer 检查落盘;usage-only 检查 0 GB;index-repair 检查备份与原文 | 实际设置页确认、取消和目录选择;大记录、占用文件及重启分别验 |
| AC 账号与凭据 | 来源绑定、隔离、失效和额度窗口 | private-files 检查权限与损坏保留;routing/usage 检查账号亲和和迟到读数 | 实际授权、第二账号、系统凭据和额度;正式服务与真实账号分别验收 |
| HI 历史管理 | 分类恢复、正文完整、外部修改 | 分类账本和恢复确认有相关脚本;其他子场景待补 | 用实际测试线程 resume;有无备份、勾选和取消分别操作 |
| UI 共用界面 | 草稿、焦点、滚动、反馈和叠层 | renderer 检查慢响应、切页和通知;layout 检查单行和窄屏 | 原生 WebView、鼠标悬停、键盘、系统缩放与减少动效 |
| LF 生命周期 | 忙碌停止、强停、退出和重开 | stop-admission/tool-wait 检查不打断与工具等待;desktop/reset 检查进程和恢复 | 真实停止后直连;托盘、全屏、多屏和异常结束分列 |
| RE 交付与更新 | 来源、版本、哈希、平台和数据保留 | fingerprint/size 检查来源;update 检查下载与故障;portable/mac-update 检查对应夹具 | 本版未来原生更新与系统安装分别验;不承担旧发行版本兼容 |
| SW 自动切换 | 开关、账号耗尽依据和备用顺序 | switching/pool 检查全部耗尽、普通错误和已有输出;choices 检查保存 | 真实自然耗尽与同一 CLI 续接待验;不人为换服务凑通过 |
| DG 诊断与修复 | 脱敏、受管字段、外部代理和继续入口 | diagnostics 检查错误链;repair 检查所有权和冲突 | 同条件有限直连对照;实际修复后监听关闭与直连生成 |
| WE 官网 | 下载产品、平台、未配置与预览身份 | site-browser 检查尺寸、按钮、下载分支和 iframe | 实际下载文件版本、架构与哈希;构建和推送不代表部署 |
自动化分四步执行
检查目录与源码
npm run check:docs
npm run check:test-plan
node tools/checks/report-test-coverage.mjs --check
npm run check:runtime-boundary这些命令检查文档、入口和运行架构。 它们不执行真实模型请求。 修改目录或命令后,重新生成入口映射。 新增脚本必须说明属于默认门禁、条件入口还是专题。
执行受影响的回归
先编译对应候选,核对源码指纹和二进制哈希。 通过 XWX_NATIVE_TEST_BINARY 指定该二进制。 按编号执行相关脚本,并记录实际断言。 后端套件保持串行,避免端口和配置相互干扰。 每组测试使用独立根和本地故障服务。
组件测试适合慢保存、乱序、切页、取消和重试。 协议测试适合断流、工具配对与明确不可重放。 存储测试适合字节、索引、冻结费用与在途清理。 这三类检查互相补充。 局部开关脚本只检查控件状态与恢复操作。 业务目标是否保留,仍需调用页面的断言。
执行完整工程门禁
npm run check:quality该入口执行编译、共享合同、Rust 单测与后端清单。 它不包含所有专题脚本。 原生界面、窗口、真实授权和付费请求需单独执行。 平台跳过必须在报告中保留。
验证最终候选
在同一个包上执行原生 WebView 和 Viewer。 界面点击后核对文件、运行时与记录。 再按 Trace 状态矩阵 执行实际链路。 安装和发布遵守当次授权范围。 只构建本地候选时,不替换正常应用。
页面体验能覆盖到哪里
| 方式 | 可以检查 | 不能据此推断 |
|---|---|---|
| 实际 React 组件与合成桥接 | 表单、草稿、焦点、迟到结果、错误入口、通知队列 | 系统窗口、真实凭据、实际客户端读取 |
| 浏览器与实际布局 | 点击命中、滚动、溢出、菜单避让、单行与长文字 | 原生 WebKit 差异、系统拖放、真实授权 |
| 候选原生 WebView | 包内桥接、主题、保存回读、持久偏好和实际叠层 | 实际上游计费、Desktop 缓存、多屏物理体验 |
| 真实应用与客户端操作 | 实际重载、续聊、配置恢复、托盘和系统对话框 | 尚未产生的请求类型与其他平台 |
Toast 测试需先打开配置卡片和嵌套菜单。 检查通知可见、点击可用、退出动画和队列恢复。 只检查样式变量不算实际叠层通过。 列表测试需滚到历史中间,再加入新请求。 检查位置、选中项和分页连续性。 仅截取首屏不能证明阅读过程稳定。
用户任意操作的可重复场景
无法通过有限测试证明所有操作组合。 按状态和风险拆出可重复序列。 每组记录固定顺序;随机探索额外记录种子。 发现新失败后,将原序列转为稳定回归。
| 操作组合 | 需要保留的结果 | 现有入口与缺口 |
|---|---|---|
| A→B→A,旧请求晚返回 | 最后选择与草稿;旧结果不污染新连接 | models、bridge、settings-write;跨模块组合继续补测 |
| 保存→切页→关闭卡片→返回 | 草稿和操作归属;不弹过期错误 | provider-dialog、bridge、configuration-state |
| 回答中切服务或改设置 | 原回答完成;下一轮使用新快照 | portability;实际 CLI/Desktop 另验 |
| 回答中停止→继续等待→结束 | Gateway 保持可用;结束后安全停止 | stop-admission、tool-wait;实际页面入口另验 |
| 工具等待→切服务→提交结果 | call ID 与上下文配对;不重复工具 | tool-wait、portability;真实工具轮次另验 |
| 读历史→加载邻页→新请求→刷新 | 不跳到最新;选择、顺序与位置恢复 | session-reading、Viewer、dashboard-api |
| 改容量→在途结束→重启 | 0 GB 不留完成正文;统计不重复回填 | usage-only、writer;实际设置页另验 |
| 外部改配置→停止或修复 | 保留外部字段;提供冲突处理 | merge、repair、desktop-lifecycle;真实直连另验 |
| 下载→取消→旧下载返回 | 不安装取消的包;可重新检查 | update、portable-update;实际平台更新另验 |
当前没有跨全应用的随机操作探索器。 脚本对局部状态有确定性覆盖。 长时间连续操作与跨页组合仍是独立验收任务。
完成一个功能的条件
- 当前要求与稳定编号一致。
- 正常路径和受影响的异常路径有断言。
- 对应界面可以继续操作,最后选择保留。
- 当前候选的源码与二进制来源明确。
- 实际链路完成对应 R/U 验收。
- 未验场景、首次失败和复测分别记录。
- 双版共同修复按公开边界吸收。
P 表示程序或合成检查。 R 表示真实授权与正式上游。 U 表示实际应用界面操作。 H 表示用户完成的授权步骤。 真实 CLI 可以由脚本驱动,仍属于 R。 合成原生界面使用 U+P。
报告使用 执行模板。 断言写明预期和实际结果。 同时记录配置恢复、监听关闭和临时目录清理。 不能用测试数量代替功能覆盖率。
公开范围
共同修复覆盖路由、Trace、统计、配置和界面。 公开版保持独立历史、身份和更新渠道。 工具、配置同步与内部能力不进入公开版。 本版没有旧发行版本兼容需求。 不增加内部旧目录、凭据或更新源迁移。 正常重启保留本版数据,未来原生更新按平台验收。