5.0 KiB
5.0 KiB
M2 第六波状态
日期:2026-07-28
基线
本轮从已推送的 integration/v1@1f935a3 开始,目标是把真实模型回合从“能调用”
收敛为“可停止、可超时、失败不产生半轮、玩家能安全恢复”,并准备一套可在真实
Windows 开发机重复执行的桌面冒烟流程。
已完成
可取消的原子回合
- 新增一次性
TurnControl,取消、90 秒截止时间与 SQLite 提交竞争同一个原子边界。 - Tauri 在调度后台回合前同步登记
actionId,消除“提交后立刻停止”找不到回合的窗口。 - 停止命令不等待故事操作锁;提交已经赢得边界时,原提交结果仍是唯一权威,界面会明确 告知完整回合已安全写入。
- LAPP 请求运行在隔离的原生请求线程;同步 Vault 解析卡住时,取消或超时仍能及时返回, reducer 与 SQLite 不会收到半轮结果。
- 中断后的 LAPP executor 会先发布退休状态,Tauri 在向界面返回前重建 provider;同一
TurnRequest与actionId可进行一次安全重试。 - 故事回合与连接测试共享原生调用单飞闸门。旧 Vault/HTTP 调用真正退出前不会再启动 新的原生模型调用,避免连续取消累积后台线程。
错误恢复与连接测试
- 后端只根据 LAPP 稳定错误码和 HTTP 状态分类配置错误、凭据不可用、限流、供应商拒绝、
网络不可用、超时与无效响应;供应商正文不会进入
TurnFailure或玩家界面。 - 界面只对后端标记为可重试的失败显示一次“重试本轮”,并复用原请求和动作 ID。
- 新增“测试当前连接”。Tauri 命令不接受 provider/model 参数,只读取当前已应用设置, 因而不能被前端用于探测任意模型。
- 连接测试在独立线程执行,受 35 秒外层超时与单飞保护;返回值只包含 provider/model 标识、成功状态和稳定诊断码,不包含凭据或供应商响应正文。
- 连接成功只证明最小聊天请求可用;隐藏判定工具调用仍需在真实故事回合中验证。
Windows 开发机冒烟
- 新增
scripts/windows-smoke.ps1,检查干净且已跟踪远端的integration/v1、Rust 1.96 MSVC host、Node 24、精确 pnpm、锁文件一致性,以及相邻lapp-rs的来源、 固定提交与干净工作树。 - 脚本依次执行全量
pnpm verify和pnpm tauri build --no-bundle;只有全部通过后 才可选启动桌面窗口。 -Launch强制使用 Windows 临时目录下的显式隔离存档路径。应用会 canonicalize 路径并拒绝相对路径、临时目录根和链接逃逸;脚本不会删除该目录,便于重启恢复验证。-Demo先验证窗口、SQLite 恢复、终局与双线路隔离;默认 LAPP 模式再验证 profile、 Vault、最小连接和一轮真实工具调用。
完整操作见 docs/windows-developer-smoke.md。
验证结果
- Rust 1.96
cargo fmt --check通过。 - 119 项核心 Rust 测试通过:Domain 5、Engine 21、Runtime 61、Store 32。
- Tauri 后端 18 项测试通过,包括取消前置竞态、provider 退休后同动作重试、 连接单飞、隔离存档路径和既有文件数据库纵切。
- 核心与 Tauri Clippy
-D warnings通过,Tauri 全 target 类型检查通过。 - 25 份契约 Schema、TypeScript DTO 与 Rust 源哈希一致,Schema 清单本身也受检查。
- TypeScript 严格检查、29 项 Web 测试和 Vite 生产构建通过。
Tauri 检查和后端测试在当前 Linux Work 环境继续使用空的 GUI 链接占位库;它们证明 Rust/Tauri 代码、宏和测试能够编译执行,不等同于真实 WebView2 窗口或 Windows 二进制。 PowerShell 脚本也尚未在本环境解析执行。
明确限制
- 固定版
lapp-rs@5ba3c659…的流事件只有文本增量、结束与用量,不包含工具调用片段, 且流式 API 不返回最终ChatResponse。因此本轮实现的是可取消的非流式可信回合; 在 LAPP 增加可验证的工具调用流与最终响应前,不能安全地把隐藏检定/TurnPlan 改成 真正流式提交。 - Rust 无法强杀正在执行的 Windows 原生 Vault 调用。单飞闸门会阻止新的调用,应用与 SQLite 仍能及时结束本轮;若原生调用永久不返回,后续模型调用需等待或重启应用。
- 某些供应商可能已在取消生效前接收请求,因此“未写入故事”不等于绝对不会产生一次
供应商计费。消除这一点需要
lapp-rs提供可取消、分阶段的凭据解析与请求 API。
尚待真实 PC 关闭
- 在 Windows 上实际执行脚本,确认完整验证与
tauri build --no-bundle。 - 使用隔离存档启动 Demo 窗口,完成两次重启、终局与双线路隔离。
- 使用真实 LAPP profile/Vault 运行最小连接测试及至少一轮隐藏判定工具调用。
- 记录 Windows 版本、架构、被测提交和首个失败点;不得回传凭据、profile、数据库或 完整供应商响应。