# M2 第五波状态 日期:2026-07-28 ## 基线 本轮从已推送到私有 Gitea 的 `449515f` 开始,继续保持 Rust 领域类型为契约唯一事实 来源,以及“模型提出 TurnPlan、引擎裁决、SQLite 单次提交、PlayerView 脱敏投影” 的主链。 ## 已完成 ### 可恢复的故事线路 - 新增线路列表、线路摘要、切换与重命名契约、Tauri 命令和 Vue 界面。 - `StoryStore` 同时支持内存与 SQLite 的线路枚举、活动线路 CAS 切换与名称校验。 - 回溯创建的新线路自动成为活动线路;普通回合只允许提交到当前活动线路。 - SQLite schema 升级到 v2,增加 `branch_metadata`、`story_sessions` 与 `app_settings`,并能无损迁移 wave4 的 schema v1。 - 关闭并重启后恢复最后活动线路;原线路与新线路的节点、检定、许诺和物品继续隔离。 ### LAPP 模型设置 - 设置面板只列出 LAPP profile 中已启用且显式声明 `chat`、`tool-call` 能力的模型。 - 选择项只持久化 canonical provider/model ID;API Key 和其他凭据不进入应用数据库、 DTO、日志或 `PlayerView`,仍由 LAPP Vault 在实际生成时即时解析。 - 模型切换会先建立新的 LAPP adjudication provider,成功后再原子保存选择并替换运行 provider;缺 profile、缺能力或初始化失败都会给出明确错误。 - `NANA_STORY_PROVIDER=demo` 继续作为显式、不可在界面内覆盖的确定性模式。 ### “天亮之前”完整纵切 确定性纵切现在可连续完成: 1. 玩家亲自答应天亮前回来,娜娜接受许诺。 2. 可信运行时完成一次隐藏搜索判定。 3. 玩家确认检修门线索并获得“半张旧车票”。 4. 玩家进入封锁隧道,时钟与关系按规则推进。 5. 玩家在天亮前返回,许诺结算为已履行,故事进入不可继续的终局。 终局仍可通过回溯创建另一条线路。纵切总测试覆盖完成故事、关闭并重启、从根节点 分叉、推进另一线路、再次重启,并验证完成线路与替代线路互不污染。 ## 验证结果 - Rust 1.96 `cargo fmt --check` 通过。 - 111 项核心 Rust 测试通过:Domain 5、Engine 21、Runtime 53、Store 32。 - 11 项 Tauri 后端测试通过。 - 核心与 Tauri Clippy `-D warnings` 通过,Tauri 全 target 类型检查通过。 - 24 份契约 Schema、TypeScript DTO 与 Rust 源哈希一致。 - TypeScript 严格检查、18 项 Web 测试和 Vite 生产构建通过。 Tauri 的 Rust 检查和后端测试继续使用空的本机 GUI 链接占位库;它证明应用代码、宏和 后端测试可编译执行,不等同于真实 WebKitGTK 窗口启动。 ## 尚未关闭 - 真实 Linux/Windows 桌面窗口与安装包。 - 使用用户实际 LAPP profile、Vault 凭据和在线模型的端到端冒烟。 - 流式演出、取消生成和面向玩家的重试/诊断细分。 - 正式角色立绘、场景素材与最终应用图标。 ## 下一波 1. 在真实桌面环境完成在线 LAPP 冒烟与错误恢复。 2. 将单次非流式回复升级为可取消的流式演出,但仍保持整轮一次提交。 3. 增加新故事/内容包导入入口,并冻结首个可分发存档兼容版本。 4. 建立 Windows 构建、签名与安装升级 CI。