6.6 KiB
Windows 开发机冒烟
这份流程用于在真实 Windows 桌面环境关闭三道门:仓库全量验证、Tauri 桌面编译,以及
窗口/SQLite/LAPP 的人工冒烟。scripts/windows-smoke.ps1 不负责克隆、Git 认证、
工具链安装或 LAPP 凭据配置;它没有 API Key、Token 或密码参数,也不会读取、打印或
保存这些值。
1. 在脚本之外准备仓库
先用 SSH Key 或 Git Credential Manager 完成 Gitea 认证,再在单独的终端克隆仓库。 不要把 Token 或密码写进 Git URL、命令参数、脚本、仓库文件或回传日志。
目录必须保持相邻:
workspace\
├─ lapp-rs\
└─ nana-story\
示例命令中的地址不含凭据:
git clone --branch integration/v1 https://git.klarkxy.xyz/klarkxy/nana-story.git
git clone https://github.com/openlapp/lapp-rs.git
git -C .\lapp-rs checkout 5ba3c659e1536ec4bee16340faca603940a5cb17
还需预先安装 Windows 的 Tauri 2 原生开发依赖、Microsoft C++ Build Tools、WebView2、
Git、rustup、Rust 1.96.0 MSVC host(含 rustfmt 和 clippy)、Node.js 24+,以及
package.json 指定版本的 pnpm。脚本会通过 vswhere 自动载入 x64 C++ 开发环境并
检查 cl.exe、link.exe 与 rc.exe,但不会自动安装或升级工具链。下文使用 PowerShell
7 的 pwsh;脚本也只使用 Windows PowerShell 5.1 支持的语法,可将 pwsh 换成
powershell.exe。
2. 跑机械门禁
第一次安装 JavaScript 依赖时,必须显式给出开关:
pwsh -NoProfile -File .\scripts\windows-smoke.ps1 -InstallDependencies
后续运行不会修改依赖:
pwsh -NoProfile -File .\scripts\windows-smoke.ps1
脚本依次执行:
- 检查 Git、Rust 1.96.0 MSVC host、
rustfmt、clippy、Node.js 24+ 和精确 pnpm 版本; - 从
origin获取最新integration/v1,检查本地分支干净、正确跟踪该远端且与 最新远端提交一致,并打印被测提交;Git 认证或网络失败会直接停止; - 检查相邻
lapp-rs的 origin、提交和工作树都与lapp-rs.lock固定来源一致; - 检查现有
node_modules的 pnpm 版本及内置锁文件与仓库pnpm-lock.yaml一致; - 执行非交互式
pnpm verify; - 执行
pnpm tauri build --no-bundle,验证真实 Windows 桌面目标。
任一步失败都会停止,且不会继续启动应用。
3. 启动桌面窗口
先用不需要 LAPP 的确定性模式验证窗口和存档:
$smokeData = Join-Path ([System.IO.Path]::GetTempPath()) "nana-story-wave6-demo"
pwsh -NoProfile -File .\scripts\windows-smoke.ps1 -Launch -Demo -SmokeDataPath $smokeData
-Launch 只会在所有机械门禁通过后执行 pnpm tauri dev。关闭窗口会结束命令。
-Demo 只影响这次进程,不会写入系统配置。-SmokeDataPath 必须指向 Windows 临时
目录的子目录;应用只在这里创建冒烟数据库,不会碰正常的开发存档。复用同一路径用于
重启恢复测试;想从全新数据库开始时换一个新的目录名,脚本本身不会删除任何目录。
脚本在创建前后都会拒绝路径链中的 junction、符号链接和其他 reparse point,应用还会
再次 canonicalize 并验证最终路径。
在线冒烟前,应在系统 LAPP 中另行准备默认 profile:
- 至少一个已启用模型同时声明
chat与tool-call能力; - 供应商凭据能由系统 Vault 解析;
- 凭据不进入
nana-story设置、仓库、命令行或回传材料。
准备好后,不带 -Demo 启动:
$lappSmokeData = Join-Path ([System.IO.Path]::GetTempPath()) "nana-story-wave6-lapp"
pwsh -NoProfile -File .\scripts\windows-smoke.ps1 -Launch -SmokeDataPath $lappSmokeData
打开设置页,确认显示“LAPP 已就绪”并能选择预期模型。“测试当前连接”只验证最小聊天 请求;通过后仍需提交一轮包含隐藏判定的行动,才能验证真实工具调用。只记录成功/失败 和界面错误码;不要复制 profile、Vault 内容、请求头或供应商原始响应。
在线模式还需验证一次取消恢复:
- 提交一条会触发模型生成、但尚未改变故事节点的行动;
- 在生成完成前点击“停止生成”,确认界面显示本轮未写入、节点与存档状态不变;
- 点击唯一一次“重试本轮”,确认同一行动能完整完成;
- 若停止请求输给了提交边界,界面应明确显示完整回合已安全写入,不能同时显示“未写入”;
- 再提交一条会触发隐藏判定的行动,确认工具调用结束后只产生一个新故事节点。
若 Windows Vault 自身永久卡住,应用会结束当前回合并阻止新的原生模型调用;此时关闭 应用、修复 Vault 后再启动。Rust 无法强杀已进入系统原生凭据调用的线程。
4. SQLite 与重启冒烟
确定性模式中按界面建议完成以下检查:
- 接受“天亮前回来”的许诺,继续调查并取得半张旧车票;
- 关闭窗口,再次使用同一个
$smokeData执行-Launch -Demo -SmokeDataPath $smokeData; - 确认场景、时钟、许诺、物品和当前线路恢复到关闭前状态;
- 完成进入隧道和天亮前归来的终局;
- 从历史节点创建新线路,重命名并切换到新线路;
- 再次关闭和启动,确认活动线路仍是新线路;
- 切回原线路,确认终局、许诺、物品和节点没有被新线路污染。
冒烟数据库文件名是 nana-story.sqlite3,位于本轮显式传入的 $smokeData,正常的
$env:APPDATA\dev.nanastory.app\ 不会被读写。不要编辑或上传数据库;本轮只确认文件
存在、重启可恢复且线路互相隔离。
5. 回传结果
请回传以下信息:
- Windows 版本与 CPU 架构;
- 脚本的全部
[ok]/[run]结果及最终退出码; pnpm verify与pnpm tauri build --no-bundle是通过还是首个失败阶段;- 窗口是否启动,关闭后命令是否正常退出;
- Demo 的两次重启恢复、终局与双线路隔离是否通过;
- 在线 LAPP 的 profile 就绪状态、所选 provider/model 标识,以及一轮工具调用是否成功;
- 在线回合的停止、节点不变、一次重试和取消/提交竞态提示是否符合上述语义;
- 若失败,附首个错误的文本或截图和复现步骤。
发送前删除用户名、绝对路径和其他个人信息。不要发送 API Key、Token、密码、Git 凭据、LAPP profile/Vault 文件、数据库文件、完整供应商响应或完整环境变量列表。