43 lines
3.8 KiB
Markdown
43 lines
3.8 KiB
Markdown
# OpenNexus 验收修复与全量回归(2026-09-08)
|
||
|
||
本次在 `feat/phase3-completion` 工作树、基线 `6bf5127` 上修复了原验收中复现的 F-01、F-02,并完成现有自动化测试的全量回归。原始失败记录保留在[首次验收报告](OpenNexus验收报告-2026-09-08.md);本报告不将尚未实现或缺少证据的生产化验收目标标记为通过。
|
||
|
||
## 修复内容
|
||
|
||
### F-01:多个凭据 Broker 覆盖快照
|
||
|
||
Stronghold 在读取快照前取得同目录独立锁文件的操作系统排他锁,并持有至凭据库锁定。第二个实例返回 `CREDENTIALS_BUSY`,设置页提供可理解的提示。锁文件独立于原子替换的快照文件;Windows 禁止其他句柄删除被持有的锁文件。解锁失败或进程退出时释放所有权。
|
||
|
||
回归测试验证两个实例交接后两次写入均保留、错误密码不遗留锁,以及真实子进程持锁时拒绝并发解锁、子进程被终止后能重新解锁并读取已提交凭据。
|
||
|
||
### F-02:桌面请求忽略取消和超时
|
||
|
||
前端和 Rust Host 使用先预留、后派发的请求协议。已取消请求不会派发;等待预留期间取消后,迟到的预留会被清理。Host 对请求使用独立截止时间和取消信号,限制最多 64 个预留,拒绝重复执行,并在退出时清理状态。取消正在读取的 HTTP 响应会丢弃请求 Future,真实 TCP 测试验证连接关闭。普通桌面请求默认超时 30 秒,可配置至 600 秒。
|
||
|
||
前端清理计时器和监听器,保留二进制传输。写请求派发后取消或超时会报告结果未知,提示先检查业务结果,不自动重试。取消不代表服务端事务回滚;业务提交结果查询仍未完成,不能据此认定完整 A-03 验收通过。协议详见 [Host v1 契约](../contracts/Host-v1契约.md)。
|
||
|
||
## 测试结果
|
||
|
||
| 范围 | 最终结果 |
|
||
| --- | --- |
|
||
| 后端 pytest | 894 通过 |
|
||
| 前端 Vitest | 93 个文件,504 通过 |
|
||
| Rust desktop 全目标测试(locked) | 28 通过 |
|
||
| Sync pytest | 23 通过 |
|
||
| Community pytest | 13 通过 |
|
||
| 打包 Core 认证回归 | 4 通过(单独运行,和后端套件有重叠) |
|
||
| 三服务隔离冒烟测试 | 通过 |
|
||
| 前端类型检查、生产构建 | 通过;构建仍提示部分 chunk 大于 500 kB |
|
||
| Rust fmt、Clippy 全目标 `-D warnings` | 通过 |
|
||
| 文档链接、变更空白检查 | 通过 |
|
||
|
||
本地完整命令、退出码和日志位于 `.build/acceptance/fixes-6bf5127/` 与 `.build/acceptance/fixes-final-6bf5127/`。随文的 JSON 汇总保存命令和最终结果;原始日志属于本地构建产物。首轮新增 TCP 测试因同步等待阻塞 Tokio 清理而失败,改为异步等待线程结束;Clippy 发现 Host 参数数量超限,改为严格的结构化请求 DTO。修复后 Rust、前端及构建检查均重新通过,未改动的 Python 服务沿用本轮先前已通过结果。编辑器测试仅调整冷启动等待预算,保留原有断言。
|
||
|
||
## Sync 测试部署复核
|
||
|
||
对 [Sync 测试服务](http://yui.kronecker.cc:18080) 的公网复核结果为:`/health`、`/ready`、`/sync/v1/handshake` 返回 200,未认证访问 `/sync/v1/vaults` 返回 401。本次修复只涉及桌面端,未重新部署服务。此前 100 MiB 上传下载、并发 CAS、重启持久性等证据仍以首次验收报告为准,本次没有重复这些远程压力测试。
|
||
|
||
## 验收边界
|
||
|
||
本次结论为已知缺陷关闭、现有自动化回归通过。完整生产化验收仍未通过:操作系统级插件隔离、扩展管理、完整 Rust 同步客户端等规划能力仍有未完成项;本次也没有补充 MSVC 安装包、真实双设备桌面操作和完整故障矩阵的验收证据。不能将测试数视为规划中 30 个验收 ID 全部完成。用户 Vault 文件未纳入本次修改或提交。
|