Files
nana-story/docs/status/2026-07-28-m2-wave5.md
Codex 1f935a3206
verify / verify (push) Has been cancelled
feat(app): complete playable branch sessions
2026-07-28 04:42:40 -04:00

3.3 KiB
Raw Permalink Blame History

M2 第五波状态

日期:2026-07-28

基线

本轮从已推送到私有 Gitea 的 449515f 开始,继续保持 Rust 领域类型为契约唯一事实 来源,以及“模型提出 TurnPlan、引擎裁决、SQLite 单次提交、PlayerView 脱敏投影” 的主链。

已完成

可恢复的故事线路

  • 新增线路列表、线路摘要、切换与重命名契约、Tauri 命令和 Vue 界面。
  • StoryStore 同时支持内存与 SQLite 的线路枚举、活动线路 CAS 切换与名称校验。
  • 回溯创建的新线路自动成为活动线路;普通回合只允许提交到当前活动线路。
  • SQLite schema 升级到 v2,增加 branch_metadatastory_sessionsapp_settings,并能无损迁移 wave4 的 schema v1。
  • 关闭并重启后恢复最后活动线路;原线路与新线路的节点、检定、许诺和物品继续隔离。

LAPP 模型设置

  • 设置面板只列出 LAPP profile 中已启用且显式声明 chattool-call 能力的模型。
  • 选择项只持久化 canonical provider/model IDAPI 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。