Files
nana-story/docs/windows-developer-smoke.md

6.6 KiB
Raw Permalink Blame History

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(含 rustfmtclippy)、Node.js 24+,以及 package.json 指定版本的 pnpm。脚本会通过 vswhere 自动载入 x64 C++ 开发环境并 检查 cl.exelink.exerc.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

脚本依次执行:

  1. 检查 Git、Rust 1.96.0 MSVC host、rustfmtclippy、Node.js 24+ 和精确 pnpm 版本;
  2. origin 获取最新 integration/v1,检查本地分支干净、正确跟踪该远端且与 最新远端提交一致,并打印被测提交;Git 认证或网络失败会直接停止;
  3. 检查相邻 lapp-rs 的 origin、提交和工作树都与 lapp-rs.lock 固定来源一致;
  4. 检查现有 node_modules 的 pnpm 版本及内置锁文件与仓库 pnpm-lock.yaml 一致;
  5. 执行非交互式 pnpm verify
  6. 执行 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

  • 至少一个已启用模型同时声明 chattool-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 内容、请求头或供应商原始响应。

在线模式还需验证一次取消恢复:

  1. 提交一条会触发模型生成、但尚未改变故事节点的行动;
  2. 在生成完成前点击“停止生成”,确认界面显示本轮未写入、节点与存档状态不变;
  3. 点击唯一一次“重试本轮”,确认同一行动能完整完成;
  4. 若停止请求输给了提交边界,界面应明确显示完整回合已安全写入,不能同时显示“未写入”;
  5. 再提交一条会触发隐藏判定的行动,确认工具调用结束后只产生一个新故事节点。

若 Windows Vault 自身永久卡住,应用会结束当前回合并阻止新的原生模型调用;此时关闭 应用、修复 Vault 后再启动。Rust 无法强杀已进入系统原生凭据调用的线程。

4. SQLite 与重启冒烟

确定性模式中按界面建议完成以下检查:

  1. 接受“天亮前回来”的许诺,继续调查并取得半张旧车票;
  2. 关闭窗口,再次使用同一个 $smokeData 执行 -Launch -Demo -SmokeDataPath $smokeData
  3. 确认场景、时钟、许诺、物品和当前线路恢复到关闭前状态;
  4. 完成进入隧道和天亮前归来的终局;
  5. 从历史节点创建新线路,重命名并切换到新线路;
  6. 再次关闭和启动,确认活动线路仍是新线路;
  7. 切回原线路,确认终局、许诺、物品和节点没有被新线路污染。

冒烟数据库文件名是 nana-story.sqlite3,位于本轮显式传入的 $smokeData,正常的 $env:APPDATA\dev.nanastory.app\ 不会被读写。不要编辑或上传数据库;本轮只确认文件 存在、重启可恢复且线路互相隔离。

5. 回传结果

请回传以下信息:

  • Windows 版本与 CPU 架构;
  • 脚本的全部 [ok]/[run] 结果及最终退出码;
  • pnpm verifypnpm tauri build --no-bundle 是通过还是首个失败阶段;
  • 窗口是否启动,关闭后命令是否正常退出;
  • Demo 的两次重启恢复、终局与双线路隔离是否通过;
  • 在线 LAPP 的 profile 就绪状态、所选 provider/model 标识,以及一轮工具调用是否成功;
  • 在线回合的停止、节点不变、一次重试和取消/提交竞态提示是否符合上述语义;
  • 若失败,附首个错误的文本或截图和复现步骤。

发送前删除用户名、绝对路径和其他个人信息。不要发送 API Key、Token、密码、Git 凭据、LAPP profile/Vault 文件、数据库文件、完整供应商响应或完整环境变量列表。