# M2 第七波本地开工状态 日期:2026-07-28 ## 本地基线 - 从私有 Gitea 安全恢复 `integration/v1@23672e857b`,并通过 `git fsck` 检查对象完整性。 - 下载时使用的临时仓库只读 Token 已在 Gitea 撤销;临时配置、bundle 与内存中的凭据均 已清理。 - `origin` 已恢复为 Gitea SSH 地址,分支仍跟踪 `origin/integration/v1`。当前执行环境的 网络代理会关闭 SSH 2222 端口,因此本轮只提交到本地,不把“已配置公钥”误报为“已成功 推送”。 - 相邻 `lapp-rs` 已固定在 `5ba3c659e1536ec4bee16340faca603940a5cb17`,未修改其源码。 - 本地基线提交为 `37b3397 chore: establish wave 7 local baseline`。 ## 已完成 ### Windows 可重复基线 - 新增 `.gitattributes`,固定文本 LF 与图片、音频二进制属性。 - Node 与 Rust 契约源码哈希在计算前统一 LF,避免 Windows CRLF checkout 产生假漂移。 - 增加 LF / CRLF 哈希等价测试。 - 安装并锁定 Node 24、pnpm 10.29.2、Rust 1.96.0、rustfmt 与 clippy。 - 使用锁文件安装 JavaScript 依赖。 ### 当前分支连续上下文 - Store 新增按 `(story_id, node_id)` 和 `parent_id` 读取根到当前节点祖先链的接口。 - Memory 与 SQLite 后端均检测缺失父节点和父链循环;读取不依赖 `branch_id`,允许分叉 复用共享祖先,同时不会遍历兄弟分支。 - Runtime 在生成本轮前自动投影当前祖先链,并把已提交的玩家输入、演出节拍、场景和角色 视觉状态传给 Provider;未选择的行动建议不会被误当成历史事实。 - LAPP 普通回合与隐藏判定回合共用同一套缓存友好上下文协议: `stable_prefix → branch_history → dynamic_tail`。 - 动态状态只包含可用于角色扮演的安全投影,包括关系阶段与玩家可见持有物的归属、取得 方式;精确关系数值、隐藏骰点、NPC 私物、未触发世界书和状态 delta 仍不能进入提示。 - Tauri 的线路恢复复用 Store 祖先链接口,不再保留旧的 200 节点读取上限。 ## 验证 - `node scripts/verify-contracts.mjs`:25 份契约无漂移。 - `pnpm verify:web`:TypeScript 检查、5 个测试文件 / 29 项测试及生产构建通过。 - `cargo metadata --no-deps`:通过,相邻 `lapp-rs` 路径依赖可解析。 - `cargo fmt --all -- --check`:通过。 - `git diff --check`:通过。 完整 Rust 测试、Clippy、Tauri 后端测试和 Windows 桌面编译尚未关闭,原因不是项目依赖 解析,而是本机缺少 Microsoft C++ Build Tools 与 Windows SDK,`rustc` 当前找不到 `link.exe`。 ## 下一步 1. 安装 Microsoft C++ Build Tools 与 Windows SDK 后立即运行 `pnpm verify:rust` 和 `pnpm tauri build --no-bundle`。 2. 为长分支实现非权威上下文检查点、来源哈希和 SQLite v3 迁移;历史不得静默截断。 3. 在连续上下文门禁关闭后,实现“风险预检 → 玩家确认 → 隐藏判定失败 → 推骰 / 重新 生成”纵向切片。 4. 最后在隔离存档上启动 Demo 窗口,验证重启恢复、终局、回溯和双线路隔离,再运行真实 LAPP 最小连接与隐藏判定工具调用。