FNOS-009 测试用例
| 字段 | 内容 |
|---|---|
| 需求编号 | FNOS-009 |
| 关联需求 | FNOS-009 DSH 0.2.0-rc.2 插件适配 |
| 关联计划 | PLAN-FNOS-009 DSH 0.2.0-rc.2 插件适配 |
| 测试状态 | 通过 |
测试范围与需求分析
覆盖 功能列表 中 FNOS-009-01 至 FNOS-009-14 全部功能:
- 版本重锚定后四插件在 DSH
0.2.0-rc.2的加载(FNOS-009-01)与各插件功能保持(02、03、04、05、07)。 - 用户数据兼容(FNOS-009-06)与文档基线(FNOS-009-08)。
- 授权目录列表持久化与权限校验剔除(FNOS-009-09、FNOS-009-10)。
- 「插入 NAS 文件或目录」选择树父子勾选解耦(FNOS-009-11)。
- 插件安装不受新发布阻断(FNOS-009-12)。
关键风险点:受控 value 与 Semi TreeSelect 内部状态的同步边界;fnOS SDK 授权接口在不同宿主(iframe/独立浏览器/扩展桥)上的行为差异。
❓ 待确认:@trimjs/web-app 授权接口在真实 NAS Flutter 壳上的返回形态(FNOS-009-10 执行前确认)。
测试环境
目标环境按 需求的验收环境范围 划分;执行方式遵循测试环境执行方式:fnOS 插件走真实 NAS,其他插件统一在 pnpm run start -- --web 启动的本地 DSH Web(DSH_HOME 指向仓库 .dsh)中执行。
| 功能 | 目标环境 | 执行方式 |
|---|---|---|
| 01、03、04、05、07 | DSH Web、DSH Desktop | Web:pnpm run start -- --web(DSH_HOME=<repo>/.dsh);Desktop:客户端内加载插件走查;两者均需覆盖 |
| 02、06(fnOS 部分)、09、10 | DSH Web + 真实 fnOS NAS | Web 部分:pnpm run start -- --web;fnOS 桥接部分:真实 NAS 部署执行 |
| 06(其他)、08 | DSH Web/Desktop、文档站构建环境 | Web 走查 + pnpm run build -- --docs |
| 11 | 真实 fnOS NAS | 选择树依赖 fnOS 宿主桥接的目录树,属 fnOS 插件功能,只记 NAS 结果 |
| 12 | 真实 fnOS NAS(安装回调链路);本地 shell 分支断言 | NAS 部署执行;分支断言走 packages/fnos-gateway 本地测试 |
测试用例
FNOS-009-11 插入 NAS 引用的父子选择解耦
实现与核实背景见 PLAN-FNOS-009 阶段六。
根因(已在 DSH 源码核实):原实现用 inputActions.setDraft() 删除引用,而 @deepseek-ai/dsh-client-ui-conversation 的 setDraft() 会执行 root.clear() 后按纯文本重建 整个编辑器文档——所有引用 chip 都会被销毁,因此取消父目录会连带清掉子项的引用。 修复改为 inputActions.insertText('', span) 只替换目标 chip 自身的原子跨度,其余 chip 的节点与 occurrenceId 保持不变。跨度换算(剪贴板投影 → detect 投影)由纯函数 fnosOccurrenceDetectSpan() 承担,删除计划由 planFnosOccurrenceRemovals() 生成, 两者都可独立测试。
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-001 | FNOS-009-11 | 取消父目录保留已选子项 | AC-01 | 输入框无引用 | 1.打开「插入 NAS 文件或目录」选择树 2.展开一个授权目录 3.勾选父目录与其下一个子项 4.确认子项引用已插入 5.取消父目录勾选 | 父目录引用被移除,子项引用保留且子项仍处于选中状态 | P0 |
| TC-002 | FNOS-009-11 | 先选子项后取消父目录 | AC-02 | 输入框无引用 | 1.打开选择树 2.先只勾选子项 3.再勾选父目录 4.取消父目录 | 子项引用保留、选中状态不变,仅父目录引用移除 | P1 |
| TC-003 | FNOS-009-11 | 取消子项不影响父目录 | AC-03 | 父目录与子项均已选中 | 1.打开选择树 2.取消子项勾选 | 子项引用移除,父目录引用与选中状态保持 | P1 |
| TC-004 | FNOS-009-11 | 解耦后重复勾选一致 | AC-01 | TC-001 执行完成 | 1.重新勾选已取消的父目录 2.再次取消 | 每次操作只影响父目录自身,子项始终保留 | P2 |
| TC-005 | FNOS-009-11 | 深层父子链解耦 | AC-01 | 存在三层目录 | 1.勾选第一层与第三层 2.取消第一层 | 第三层引用保留,仅第一层移除 | P2 |
FNOS-009-12 插件安装不受新发布阻断
实现与验证见 PLAN-FNOS-009 阶段七。
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-006 | FNOS-009-12 | 自有插件新版首次安装放行 | AC-01 | 自有插件未安装 | 1.在 NAS 上安装应用 2.观察插件安装阶段日志 | 自有插件按清单版本安装成功,不出现发布日期拒绝导致的失败消息 | P0 |
| TC-007 | FNOS-009-12 | 自有插件从旧版升级放行 | AC-01 | 已安装旧版自有插件 | 1.升级应用到含新插件版本的 FPK 2.观察插件安装阶段日志 | 旧版收敛到清单版本且安装成功,不因新版发布日期过近中断 | P0 |
| TC-008 | FNOS-009-12 | 历史同包名残留场景 | AC-01 | profile 内存在同名旧版本的历史放行记录 | 1.安装应用并触发多插件依次安装 2.观察是否出现列表条目校验失败 | 多个插件连续安装全部成功,无「lockfile 校验失败」类报错 | P0 |
| TC-009 | FNOS-009-12 | 失败原因可诊断 | AC-02 | 可构造插件安装失败的场景 | 1.令某插件安装失败 2.查看安装回调日志与向导提示 | 失败以非零退出并给出具体原因,不提示用户手动解除发布日期限制或清理缓存 | P1 |
| TC-010 | FNOS-009-12 | 手动安装默认策略不变 | AC-03 | 应用已安装 | 1.在插件市场或 DSH 插件管理中手动安装一个刚发布的插件 | 手动安装入口的默认安全策略未被放宽,行为与应用安装回调内的处理相互独立 | P1 |
| TC-011 | FNOS-009-12 | 归档替换路径不回归 | AC-01 | 存在 FPK 内置插件归档 | 1.以含 bundled-dsh-plugins 归档的 FPK 安装/升级 | 归档替换仍走先移除后添加,与清单版本收敛一致,无新增失败 | P1 |
| TC-012 | FNOS-009-12 | 同版本重复安装幂等 | AC-01 | 自有插件版本已与清单一致 | 1.再次安装同版本 FPK 2.观察插件阶段日志 | 版本一致时跳过安装且不报错,不产生重复安装副作用 | P2 |
| TC-013 | FNOS-009-12 | 三方插件放行不回归 | AC-01 | 三方插件未安装或版本不一致 | 1.安装/升级应用 2.观察三方插件安装日志 | 三方插件安装与版本收敛保持既有放行行为,未被本次改动破坏 | P2 |
FNOS-009-13 node-pty 免编译安装与跨平台构建
实现与验证见 PLAN-FNOS-009 阶段八。
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-035 | FNOS-009-10 | 刷新列表不弹授权框 | AC-05 | 已授权若干目录 | 1.反复进入详情页与点「刷新」 2.观察是否出现「申请访问以下文件」弹框 | 全程无授权确认弹框;客户端可执行代码不含 authorizeSharedFile/authorizeUserFile | P0 |
| TC-036 | FNOS-009-10 | 明确失效才剔除 | AC-06 | 一组目录分别为有效/明确失效/无法判定 | 1.加载列表 | 仅 valid === false 的被剔除并回写持久化;undefined 的保留并提示降级 | P0 |
| TC-024 | FNOS-009-13 | 无 g++ 环境安装成功 | AC-01 | NAS 上不存在 g++/gcc | 1.在 NAS 上安装 FPK 2.查看安装日志 | 安装成功,日志不出现编译器缺失导致的失败;node-pty 走包内预编译产物 | P0 |
| TC-025 | FNOS-009-13 | 侧边栏终端可用 | AC-01 | 应用已按上一用例安装 | 1.打开应用侧边栏终端 2.执行一条命令 | PTY 正常创建,命令输出可见,无原生模块加载错误 | P0 |
| TC-026 | FNOS-009-13 | 预编译缺失时报可诊断错误 | AC-01 | node-pty 包内缺少当前平台预编译目录 | 1.执行安装回调的 node-pty 准备 | 以非零退出并指出缺失的平台目录,不尝试静默编译 | P1 |
| TC-027 | FNOS-009-13 | 上游移除依赖时跳过 | AC-02 | 依赖树中不存在 node-pty | 1.执行安装回调的 node-pty 准备 | 记录「上游不再依赖 node-pty」并正常结束,不报错 | P1 |
| TC-028 | FNOS-009-13 | macOS 可构建可用 FPK | AC-03 | macOS 构建机,无 Linux 容器 | 1.执行 build --fpk --app fn-deepseek-harness --skip-bundle-dsh-plugins | 构建成功,无平台限制报错;FPK 内不含 node-pty 原生产物与版本文件 | P0 |
| TC-029 | FNOS-009-13 | 安装沿用 .npmrc 镜像源 | AC-04 | 向导中配置了自定义 npm 镜像源 | 1.安装应用 2.检查安装回调的 npm 调用 | 使用 .npmrc 中的源;命令中无 --registry,也未新增额外包下载 | P1 |
| TC-030 | FNOS-009-13 | 其他依赖脚本仍执行 | AC-05 | 依赖树含多个带 install 脚本的包 | 1.安装应用 2.检查 node-pty 与其他包的脚本执行情况 | node-pty 的 install 脚本被临时替换且执行后恢复原清单;其他依赖的 install 脚本正常执行 | P1 |
FNOS-009-14 三方插件版本随 DSH 基线同步
实现与验证见 PLAN-FNOS-009 阶段九。
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-031 | FNOS-009-14 | 三方插件版本覆盖新基线 | AC-01 | 清单内三方插件版本已随 DSH 基线更新 | 1.查询该版本的 peerDependencies 2.核对是否含当前 DSH 版本 | peer 范围覆盖当前基线,不需要精确版本豁免 | P0 |
| TC-032 | FNOS-009-14 | 真机安装最后一步通过 | AC-01 | 无 g++ 的 NAS | 1.安装 FPK 2.观察三方插件安装阶段 | 三方插件安装成功,安装日志无 installation rejected 与兼容门禁报错 | P0 |
| TC-033 | FNOS-009-14 | 不默认放宽门禁 | AC-02 | 存在被门禁拒绝的插件版本 | 1.安装该版本 2.观察处理方式 | 被明确拒绝并给出解法;未默认授予精确版本豁免 | P1 |
| TC-034 | FNOS-009-14 | 规范含核对步骤 | AC-03 | 无 | 1.查阅 docs/build/versioning.md | 包含查询命令、选择准则、真机验证要求与豁免例外条件 | P2 |
FNOS-009-09 授权目录列表持久化
实现与核实背景见 PLAN-FNOS-009 阶段五。
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-014 | FNOS-009-09 | 老用户升级后字段缺省安全 | AC-01 | settings 中无 authorizedDirectories | 1.以空 settings 构造 schema 2.读取该字段 | 校验通过且解引用为空数组,不抛错 | P0 |
| TC-015 | FNOS-009-09 | 持久化写入去重保序 | AC-01 | 传入含重复项的路径列表 | 1.调用写入 2.读取返回值 | 重复项合并、首次出现顺序保留,写入指定命名空间 | P1 |
| TC-016 | FNOS-009-09 | 持久化列表优先展示 | AC-02 | 持久化有目录、实时查询为空 | 1.以空实时列表加载 | 持久化目录仍出现在展示列表中 | P0 |
| TC-017 | FNOS-009-09 | 写入失败不影响当前会话 | AC-03 | 写入接口返回错误 | 1.触发持久化写入失败 2.观察页面 | 只记日志、页面不报错,既有数据不被清空 | P1 |
FNOS-009-10 持久化目录权限校验与剔除
| 用例ID | 功能点 | 测试标题 | 关联验收 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|---|
| TC-018 | FNOS-009-10 | 共享接口通过即保留 | AC-01 | 持久化含一个共享目录 | 1.查询接口返回包含该路径 2.加载列表 | 该项保留;全程无授权确认弹框 | P0 |
| TC-019 | FNOS-009-10 | 用户目录经用户查询接口保留 | AC-01 | 用户授权目录不在共享集合中 | 1.共享集合不含该路径、用户集合含该路径 2.加载列表 | 该项判定为有效并保留(两个集合取并集) | P1 |
| TC-020 | FNOS-009-10 | 两个接口都拒绝则剔除 | AC-02 | 两个接口都返回 ok=false | 1.执行校验 2.观察剔除清单 | 该项进入剔除清单并从展示移除,同步回写持久化 | P0 |
| TC-021 | FNOS-009-10 | 查询接口不可用时不剔除 | AC-04 | 查询接口抛错 | 1.加载列表 2.观察展示 | 每条目录的 valid 为 undefined;全部保留并提示「已按保存的记录展示目录;当前无法校验权限」 | P0 |
| TC-022 | FNOS-009-10 | 恢复授权后可重新持久化 | AC-03 | 目录曾被剔除 | 1.在 fnOS 侧重新授权 2.经「添加/刷新」操作目录 | 目录重新进入列表并被持久化 | P1 |
FNOS-009-01~08 版本适配与功能保持(规划中,随阶段一~三回填)
用例随 阶段一~三任务 完成后回填,覆盖插件加载、四插件功能回归、升级数据兼容与文档基线。
测试执行结果
执行后回填;不修改上方用例定义。非 fnOS 插件功能按测试环境执行方式要求 DSH Web 与 DSH Desktop 各执行一次、按客户端分列;仅 Web 或仅 Desktop 的结果不构成该用例的完成结论。
| 用例ID | 功能点 | 执行环境 | 结果 | 执行日期 | 备注 |
|---|---|---|---|---|---|
| TC-006 | FNOS-009-12 | 本地 shell 分支断言 | 通过 | 2026-09-30 | 自有插件首次安装走放行调用,bundled-plugin-install.spec.ts 断言 |
| TC-007 | FNOS-009-12 | 本地 shell 分支断言 | 通过 | 2026-09-30 | 自有插件版本收敛走放行调用 |
| TC-008 | FNOS-009-12 | 本地 pnpm 11.7.0 端到端 | 通过 | 2026-09-30 | 复刻「历史同包名残留 + 新发布版本」:旧逻辑第 2 个包报 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION(与 NAS 日志逐字一致),新逻辑三个包全部装成功 |
| TC-012 | FNOS-009-12 | 本地 shell 分支断言 | 通过 | 2026-09-30 | 同版本保持不重复安装 |
| — | FNOS-009-01 | 本机 DSH Web 0.2.0-rc.2 | 通过(DSH Web) | 2026-09-30 | 证据见 本地 Web 验证记录 |
| — | FNOS-009-01 | DSH Desktop 自带运行时 0.2.0-rc.2 | 通过(Desktop 运行时) | 2026-09-30 | 三插件无「异常」、详情页正常、控制台无错;证据见 Desktop 运行时验证记录;真实 NAS 待补。该次使用隔离探针 profile,不满足项目 profile 约束,已被下一行的结论取代 |
| — | FNOS-009-01 | DSH Desktop(真实 Electron 壳 + 项目 profile) | 通过(DSH Desktop) | 2026-10-06 | 环境版本:Desktop 0.2.0-rc.2(Electron 44)/ 内置运行时 0.2.0-rc.2 / 插件 0.2.0-rc.2.0;DSH_HOME=<repo>/.dsh、profile 为 .dsh/profiles/desktop;已安装 3 个插件,「异常」「不兼容」均 0 次;CDP 取证,证据见 Desktop 验证记录;收尾:已退出项目 profile 的 Desktop 并以缺省 DSH_HOME 重启,交还全局 profile(未产生测试账号,无需清理) |
| — | FNOS-009-04 | DSH Desktop(真实 Electron 壳 + 项目 profile) | 部分通过 | 2026-10-06 | 版本徽章 v0.2.0-rc.2.0、「共 1 个 · 1 运行中」;账号管理区渲染正常(6 个账号、额度 1468/1609、已签到)。当时待复验的登录与用量,已由 2026-10-08 真实 NAS 的全新授权回流结果取代(见下) |
| — | FNOS-009-03 | 本机 DSH Web 0.2.0-rc.2 | 部分通过 | 2026-09-30 | AC-02 模型目录与分组弹层正常。当时待复验的登录与用量,已由 2026-10-08 用户手动验证结果取代(见下) |
| — | FNOS-009-05 | 本机 DSH Web 与 Desktop 运行时 | 通过 | 2026-09-30 | 两处运行时上展示页与组件分组均正常渲染;证据见本地 Web 与 Desktop 运行时验证记录 |
| — | FNOS-009-05 | DSH Desktop(真实 Electron 壳 + 项目 profile) | 通过 | 2026-10-06 | 插件通过兼容门禁并正常加载,插件页与详情页无异常;逐组件渲染结论见 本地 Web 验证记录 |
| — | FNOS-009-01 | DSH Desktop 暗色主题 | 通过 | 2026-10-07 | color-scheme 由 light 切到 dark,设置浮层背景 rgb(255,255,255)→rgb(44,44,46);暗色下插件页「异常」0 次、三插件均在;无残留样式;证据见 Desktop 补充验证记录 |
| — | FNOS-009-04 | DSH Desktop 暗色主题 | 部分通过 | 2026-10-07 | 暗色下账号管理区正常渲染(6 个账号、剩余额度、已签到标记),可读性满足 WCAG AA(对比度 17.45)。登录流程与用量已由 2026-10-08 真实 NAS 的全新授权回流结果取代(见下) |
| — | FNOS-009-04 | 真实 fnOS NAS(存储空间1,Web 网关) | 通过 | 2026-10-08 | AC-02:账号管理 6 个账号全部加载并渲染;点「刷新」后额度重新拉取成功。AC-01:移开凭据文件后界面归 0,走完整 OAuth 登录回流后账号变为 1(新 id fc10e370-…,磁盘生成新文件),恢复备份后 6 账号完好——证明授权链路可用而非渲染既有凭据。详见 fnos 插件真机验收记录 |
| — | FNOS-009-01 | DSH Desktop 宿主差异点 | 部分通过 | 2026-10-07 | 外部链接交系统默认浏览器打开(前台由 DeepSeek Harness 切到 Google Chrome,应用内无新 target)通过;设置页呈现(5 个分组 + 通用设置 10 项)通过。「OAuth 授权回流未走查」为当时的记录,该链路已由 FNOS-009-03/04 的后续验证覆盖 |
| TC-014–TC-017 | FNOS-009-09 | 单测(schema/宿主持久化) | 通过 | 2026-09-30 | 字段缺省、去重保序、持久化优先、写入失败保留 |
| TC-001–TC-005 | FNOS-009-11 | 单测(删除计划与跨度换算) | 通过 | 2026-09-30 | 取消父目录只移除父项跨度;反向、取消子项、重复勾选、三层链均覆盖;浏览器走查待补 |
| TC-018–TC-022 | FNOS-009-10 | 单测(SDK 校验服务) | 通过 | 2026-09-30 | 逐项通过/剔除、桥接不可用降级;真实 NAS 桥接待复验 |
| TC-023 | FNOS-009-10 | 单测(卡片级剔除编排) | 通过 | 2026-09-30 | 只读项不参与校验、桥接不可用不剔除、剔除后保持展示顺序、无可校验项不构造 SDK |
| TC-028 | FNOS-009-13 | macOS 构建机(无 g++ 参与) | 通过 | 2026-10-07 | 移除 Linux 构建机限制后直接 build --fpk 成功;FPK 内确认无 native/、dsh-version、node-pty-versions,install_callback 不含旧变量 |
| TC-027 | FNOS-009-13 | 单测(依赖树判定) | 通过 | 2026-10-07 | 依赖树无 node-pty 时记录并正常返回,不报错 |
| TC-026 | FNOS-009-13 | 单测(预编译缺失) | 通过 | 2026-10-07 | 缺少当前平台预编译目录时以非零退出并指出目录名 |
| TC-029 | FNOS-009-13 | 代码核对(npm 调用参数) | 通过 | 2026-10-07 | npm rebuild 调用未含 --registry;安装回调未新增任何包下载 |
| TC-035 | FNOS-009-10 | 真机(NAS 存储空间1,5.5.5) | 通过 | 2026-10-08 | 反复进入详情页与点「刷新」均无「申请访问以下文件」弹框;修复链:5.5.3 改用无交互查询接口、5.5.4 补必填 uid、5.5.5 客户端保留 valid 字段 |
| TC-036 | FNOS-009-10 | 单测 + 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 单测覆盖有效/明确失效/无法判定三类;真机后端返回 valid: true,界面无降级提示且目录保留,刷新幂等 |
| TC-022 | FNOS-009-10 | 真机(NAS 存储空间1) | 失败→已修复 | 2026-10-08 | 先暴露 BUG-05:刚授权允许的 /vol2/1000/fnos-fpk 被判为无权限、从列表移除并回写 authorizedDirectories: [];修复后同一路径保留在列表(5 行)且可「取消授权」 |
| TC-021 | FNOS-009-10 | 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 早期版本(5.5.3/5.5.4)实测降级路径:查询接口不可用时提示「已按保存的记录展示目录;当前无法校验权限」且不剔除任何目录;5.5.5 起查询可用,降级提示消失 |
| TC-018 | FNOS-009-10 | 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 应用共享目录(removable: false)不参与校验,4 项始终保留 |
| TC-023 | FNOS-009-11 | 真机浏览器走查(NAS) | 通过 | 2026-10-08 | TreeSelect 实际展开出父子结构后逐步验证:勾选父目录时子项不动;再勾选子项可父子同时选中;取消父目录后子项 fn-deepseek-harness.fpk 仍保持勾选 |
| — | FNOS-009-02 | 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 会话日志导出走通两条路径(导出到 NAS 实际落盘 10957 字节 ZIP,session.v4.jsonl 20 行且含本次会话内容;导出到电脑提示已开始下载);「在文件管理打开」调起 fnOS 文件管理器并定位到会话工作区目录 |
| TC-016 | FNOS-009-09 | 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 授权后写入 cordis.patch.yml 的 authorizedDirectories: [/vol2/1000/fnos-fpk];刷新列表后仍从持久化展示该目录 |
| TC-017 | FNOS-009-09 | 真机(NAS 存储空间1) | 通过 | 2026-10-08 | 持久化写入失败只记日志:evict-persist-failed / persist-failed 分支不改变页面状态 |
| TC-024 | FNOS-009-13 | 真机安装(NAS 无 g++) | 通过 | 2026-10-08 | npm rebuild 1 秒完成无编译输出;预编译解析为 prebuilds/linux-x64;证据见 真机验收记录 |
| TC-025 | FNOS-009-13 | 侧边栏终端可用 | 通过 | 2026-10-08 | 终端执行 tty 返回 /dev/pts/2,echo PTY_REAL_OK 输出正确,TERM=xterm-256color;build/Release 不存在 |
| TC-030 | FNOS-009-13 | 其他依赖脚本仍执行 | 通过 | 2026-10-08 | 日志显示仅 node-pty 的 install 脚本被临时替换,npm rebuild 仍执行且 1 秒完成 |
| TC-032 | FNOS-009-14 | 真机安装最后一步通过 | 通过 | 2026-10-08 | dshmarket@1.66.11 安装成功(+ dshmarket 1.66.11),插件页「已安装 4」、异常 0、不兼容 0 |
| TC-031 | FNOS-009-14 | 版本元数据核对 | 通过 | 2026-10-08 | dshmarket@1.66.11 的 peerDependencies 含 || ^0.2.0-rc.1,覆盖当前基线 0.2.0-rc.2 |
| TC-033 | FNOS-009-14 | 真机安装(NAS,无 g++) | 通过 | 2026-10-08 | 1.66.3 被门禁明确拒绝并给出解法,未静默放行;这是缺陷暴露路径 |
| — | FNOS-009-01 | 真实 fnOS NAS(存储空间1,5.5.5) | 通过 | 2026-10-08 | 插件页「已安装 4」,「异常」与「不兼容」均为 0;与既有 DSH Web、Desktop 真实壳、Desktop 暗色主题结果合并构成双环境覆盖 |
| — | FNOS-009-05 | 本机 DSH Web 与 Desktop 运行时 | 通过 | 2026-09-30 | 展示页与组件分组在两处运行时均正常渲染;补记:本项证据在早期已齐,状态徽标未同步更新,已于 2026-10-08 修正 |
| — | FNOS-009-06 | 真实 fnOS NAS(连续 5 次升级) | 通过 | 2026-10-08 | 5.5.0→5.5.2→5.5.3→5.5.4→5.5.5 升级后:CodeBuddy 6 个账号、授权目录、systemTheme、默认模型配置、1 个工作区与 2 个会话全部保留;已记录升级前基线快照(sha256)供后续比对 |
| — | FNOS-009-12 | 真实 fnOS NAS(安装回调链路) | 通过 | 2026-10-08 | 日志统计 68 次带 release-age 放行的插件调用、65 次 ✓ Lockfile passes supply-chain policies、ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION 0 次;自有(36)与三方(2)均走放行 |
| — | FNOS-009-07 | 源码逐项核对(两 tag 对比) | 通过 | 2026-10-08 | 四插件消费的全部接缝无破坏性变更:plugins.detail.section 调用形参一致、ui-slots/ui-input-trigger 仅版本号变化、submit 的 source 可选、displayTitle 类型未变、fork 未使用、MenuGroup 纯新增;字号 12–17→10–22 属宽松化,插件用固定 px |
| — | FNOS-009-03 | 本机 DSH Web 与 DSH Desktop 0.2.0-rc.2 | 通过 | 2026-10-08 | AC-01:完成浏览器授权登录,授权页打开与授权码流程正常;AC-02:登录后模型目录同步、模型选择与全局模型设置可用;AC-03:对话区用量显示剩余额度与重置时间。两个客户端均已执行(满足非 fnOS 插件的双客户端要求) |
Bug 记录
| Bug ID | 关联用例 | 标题 | 严重级别 | 状态 | 修复说明 |
|---|---|---|---|---|---|
| BUG-01 | TC-008 | 自有插件的新发布版本被 pnpm 发布日期限制阻断应用安装(fnOS NAS 实测) | P0 | 已修复 | 由 FNOS-009-12 实现:安装回调内自有与三方插件统一使用受控 release-age 例外;真实 NAS 复验待补 |
| BUG-02 | — | 上游已移除 dsh-agent-presets、dsh-code-runtime,0.2.0-rc.2 下无对应版本 | P2 | 已修复 | 从 pnpm-workspace.yaml 的 minimumReleaseAgeExclude 剔除这两个条目;二者已无依赖方 |
| BUG-03 | TC-032 | 三方插件 dshmarket@1.66.3 的 peer 声明未覆盖 DSH 0.2.0-rc.2,被兼容门禁拒绝,导致 FPK 安装最后一步失败 | P0 | 已修复 | 更新为 1.66.11(peer 新增 || ^0.2.0-rc.1);规范补充「更新 DSH 基线时同步三方插件版本」;真机复验待补 |
| BUG-04 | TC-022 | 授权目录列表永久停留「正在加载授权目录」,0 行渲染;后端返回 200 且控制台有 refresh-success,但无任何 validate-* 日志(真机 NAS 实测) | P0 | 已修复 | authorizeUserFile 未在 config/resource 声明 trim.file.userAccess,且 SDK 桥接调用没有超时,任一环节不响应即永久挂起。已补 scope,并为 sdk.ready() 与每次授权调用加超时兜底,超时按「校验不可用」降级 |
| BUG-05 | TC-020 | 刚授权成功的用户目录被判为无权限:从列表移除并回写持久化记录,实测 authorizedDirectories: [](真机 NAS 实测) | P0 | 已修复 | 校验按 { ok: boolean } 读取 SDK 应答,而真实结构是 AppBridgeResponse(code: 0 为成功),ok 恒为 undefined,因此每个可移除目录都必然落到 return 'invalid'。改用 code === 0 判定;单测替身原先用同一错误契约,因此与实现一起错,现已改用真实结构并新增「调用永不 settle」用例 |
测试结论
通过。 执行用例 51 条:通过 51、部分通过 0、失败 0(BUG-04/05 均已修复并复验)。
按功能项的最终状态
| 功能项 | 状态 | 关键证据 |
|---|---|---|
| FNOS-009-01 插件加载 | 通过 | DSH Web、Desktop 真实 Electron 壳、真实 NAS 三处:插件页「已安装 4」,异常与不兼容均为 0 |
| FNOS-009-02 fnOS 插件功能 | 通过 | 真机走查详情页结构、主题跟随、应用共享目录只读、三方插件 proxy |
| FNOS-009-03 Codex Auth | 通过 | AC-01/02/03 全部成立(登录、模型目录、对话区用量);DSH Web 与 DSH Desktop 均已执行 |
| FNOS-009-04 CodeBuddy | 通过 | 真实 NAS 完成全新授权回流(账号 0→1,生成新 id),恢复后 6 账号完好;账号管理、额度、签到可用 |
| FNOS-009-05 Showcase | 通过 | DSH Web 与 Desktop 两处运行时,展示页与组件分组正常渲染 |
| FNOS-009-06 用户数据兼容 | 通过 | 连续 5 次升级(5.5.0→5.5.5)凭据、授权目录、偏好、模型配置、工作区与会话全部保留;已记录升级前 sha256 基线 |
| FNOS-009-07 上游增量 | 通过 | 两个 tag 逐项核对四插件消费的接缝,未发现破坏性变更 |
| FNOS-009-08 文档基线 | 通过 | 插件文档与总览版本号、安装命令、兼容基线指向 0.2.0-rc.2;文档站构建通过 |
| FNOS-009-09 授权目录持久化 | 通过 | 真机:authorizedDirectories 落盘,重启与刷新后保持 |
| FNOS-009-10 权限校验与剔除 | 通过 | 真机:后端 valid: true,界面无弹框、无降级提示,目录保留且刷新幂等 |
| FNOS-009-11 父子勾选解耦 | 通过 | 真机:取消父目录勾选不影响已选子项 |
| FNOS-009-12 安装不受新发布阻断 | 通过 | 安装日志 68 次放行、65 次 lockfile 策略通过、ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION 0 次 |
| FNOS-009-13 node-pty 免编译 | 通过 | NAS 无 g++ 安装成功;prebuilds/linux-x64/pty.node 可用,终端 tty 正常;macOS 亦可构建 |
| FNOS-009-14 三方插件版本同步 | 通过 | 真机安装最后一步通过,dshmarket@1.66.11 不再被兼容门禁拒绝 |
已完成的关键验证
- 四插件版本重锚定与全量单测 1451 项全部通过(含 fnOS 插件 237 项,本轮由 232 增加)。
- FNOS-009-10 的真机修复链:应答契约(按
code而非ok判定)→ 改用无交互查询接口 (原实现误用「申请授权」接口,导致每次刷新弹确认框)→ 补必填uid→ 客户端保留 Host 标注的valid。四层逐层在真机复验,最终后端返回valid: true、 界面无弹框无降级提示。 - FNOS-009-04 的全新授权回流:从零开始(移开凭据文件 → 界面归 0 → 走登录 → 账号 1), 证明授权链路可用而非靠既有凭据渲染。
- FNOS-009-12 的本地端到端复验:复刻 NAS 失败现场,旧逻辑报
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,新逻辑三个包全部装成功。 - FNOS-009-13 的跨平台构建:删除 Linux 构建机限制后 macOS 直接构建 FPK 成功且包内无原生产物。
未完成
- 「网页链接默认打开方式」的对话内路径:需在真实对话内点击链接才能覆盖「应用内侧边栏」取值, 属既有待办,与 FNOS-009 的功能项无直接关联。
已补齐(原列在未完成项)
以下各项在本轮及 2026-10-07 的补充验证中完成,证据见对应验收记录:
- Desktop 暗色主题:亮暗两主题各执行一遍,
color-scheme light→dark,无残留样式,可读性满足 WCAG AA。 - fnOS 插件真机功能与数据兼容(FNOS-009-02、06 的 fnOS 部分、09/10 的 SDK 桥接)。
- FNOS-009-11 的浏览器实机走查:真机验证父子勾选解耦(规范要求的实机证据)。
- FNOS-009-07 的上游增量逐项核对:按两 tag 逐项确认无破坏性变更。
- FNOS-009-03 的登录与用量:在 DSH Web 与 DSH Desktop 各执行一次,三项 AC 全部成立。
变更记录
| 日期 | 变更 | 说明 |
|---|---|---|
| 2026-09-30 | 初始登记 | 建立 FNOS-009 测试用例文档;先登记 FNOS-009-11 父子解耦用例(对应计划任务已完成实现部分),其余章节随阶段任务回填。 |
| 2026-09-30 | 上下文关联改造 | 功能点、验收条件、计划任务的纯文本表达改为指向需求/计划文档锚点的 markdown 链接。 |
| 2026-09-30 | 登记 FNOS-009-12 用例 | 新增 TC-006–TC-013,覆盖自有与三方插件安装放行、历史残留场景、失败可诊断、手动安装策略不变与归档替换不回归;测试范围与环境同步到 FNOS-009-12。用例先登记,执行结果待阶段七完成后回填。 |
| 2026-09-30 | 回填首轮执行结果 | 回填 FNOS-009-01/03/05 的 DSH Web 实测与 FNOS-009-12 分支级结果;登记 BUG-01(自有插件被发布日期阻断)与 BUG-02(上游包移除)。结论更新为「部分通过」,未完成项与目标环境证据缺口列在结论中。 |
| 2026-10-06 | 回填 Desktop 真实壳执行结果 | 按DSH Desktop 测试的项目 profile 约束,在真实 Electron 壳内用 CDP 取证,新增 FNOS-009-01/04/05 的 DSH Desktop 执行结果;2026-09-30 那次隔离探针结论因不满足 profile 约束被标注为已被取代。未完成项补充 Desktop 暗色主题与宿主差异点。证据见 Desktop 验证记录。 |
| 2026-10-07 | 补齐 Desktop 暗色主题与宿主差异点 | 按 UI 测试规范在亮暗两主题各执行一遍,实测主题切换、可读性(WCAG AA)、毛玻璃与间距/BFC;宿主差异点覆盖「外部链接交系统默认浏览器打开」与「设置页呈现」。OAuth 授权回流与「网页链接默认打开方式」的对话内路径列为遗留。证据见 Desktop 补充验证记录。 |
| 2026-10-07 | 登记并回填 FNOS-009-13 | 新增 TC-024–TC-030,覆盖无编译器安装、终端可用、预编译缺失可诊断、上游移除依赖、macOS 构建、registry 沿用与其他依赖脚本执行;回填 macOS 构建与单测结果。 |
| 2026-10-08 | 登记 FNOS-009-14 并回填真机结果 | 真机安装暴露 BUG-03:三方插件 dshmarket@1.66.3 被 DSH 0.2.0-rc.2 兼容门禁拒绝;新增 TC-031–TC-034 与 FNOS-009-14。同一次真机安装确认 FNOS-009-13 的核心路径通过:淘宝源生效、DSH 0.2.0-rc.2 安装验证通过、三个自有插件安装成功且无 g++。 |
| 2026-10-08 | 登记 BUG-04/05 并回填 fnos 插件真机结果 | 真机走查暴露并修复两个 P0:授权目录列表永久加载中(SDK 桥接无超时 + 缺 trim.file.userAccess)、合法授权目录被误剔除并清空持久化({ ok } 与 AppBridgeResponse 契约不符)。回填 TC-016/017/018/021/022 与 fnos 插件其余功能结果;新增验收记录。 |
| 2026-10-08 | FNOS-009-10 校验改用无交互查询接口 | 真机暴露原实现把「申请授权」接口当校验用:每次刷新列表都弹出「申请访问以下文件」确认框,且返回值只表示这次申请的结果。新增 TC-035/036 与 AC-05/06;TC-018/019/021 的预期结果按集合比对改写;删除逐项授权探测模块与对应单测。 |
| 2026-10-08 | FNOS-009-10 真机验证通过 | 回填 TC-035/036,TC-021 补记降级路径的实测版本;FNOS-009-10 由「降级已验证」转「真机已验证」。结论更新为 44 条全通过。 |
| 2026-10-08 | 回填 01/05/06/12 结果并登记 03 结论 | 补齐 01(NAS 插件页无异常)、05(早期证据已齐,徽标未同步)、06(连续 5 次升级数据保留 + 基线快照)、12(68 次放行 0 违规)的执行结果;03 按用户决定标为「部分验证」并登记原因。结论更新为 48 条:通过 47、部分通过 1。 |
| 2026-10-08 | FNOS-009-07 上游增量核对完成 | 依据两 tag 对四插件消费的接缝逐项核实,未发现破坏性变更(5 项可选增量或未引用、1 项纯新增导出、字号范围属宽松化)。07 转「已完成」;结论更新为 49 条:通过 48、部分通过 1。 |
| 2026-10-08 | FNOS-009 验收收尾 | 回填 FNOS-009-04 的真实 NAS 全新授权回流结果(AC-01 + AC-02 均成立),该功能项由「待完成」转「真机已验证」;重写测试结论段——原结论把 5 项已完成内容列为「未完成」,现按功能项给出最终状态表。用例数更新为 51 条:通过 50、部分通过 1。 |
| 2026-10-08 | FNOS-009-03 登录与用量验证通过 | 由用户手动验证:AC-01(浏览器授权登录、授权页与授权码流程)、AC-02(模型目录同步、模型选择、全局模型设置)、AC-03(对话区用量显示剩余额度与重置时间)全部成立,DSH Web 与 DSH Desktop 均已执行,满足非 fnOS 插件的双客户端要求。该功能项由「部分验证」转「通过」。用例数更新为 51 条全部通过,无部分通过项。 |