Files
FlowScope/docs/reviews/p2-phase2-package-preview-report.md
2026-06-08 16:48:02 +08:00

200 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FlowScope P2 第二阶段 Package Preview 记录
日期2026-06-04
## 本轮范围
本轮承接 P2 第一阶段后的 package 试迁移工作,重点不是改 Runtime API而是把 FlowScope Git package 从“仓库内结构存在”推进到“真实消费方可用”的 preview 状态。
## 已完成事项
1. FlowScope package preview tag
- tag`v0.2.0-preview.1`
- 提交:`31641b2c35d1d6c4f056772f144562007f0d0782`
- 远端:`ssh://git@git.zz.com:2222/Developer/FlowScope.git`
2. 消费方 Git package 接入
- 消费项目:`C:\Users\13999\Documents\FishingFrenzy\FishingFrenzy`
- package URL`ssh://git@git.zz.com:2222/Developer/FlowScope.git?path=/Packages/com.flowscope.gamecore#v0.2.0-preview.1`
- R3 依赖:同时保留 `com.cysharp.r3``org.nuget.r3`
- Unity NuGet registry`https://unitynuget-registry.openupm.com`scope 为 `org.nuget`
3. 最小消费方验证脚本
- 文件:`FishingFrenzy/Assets/Scripts/FlowScopePackageSmokeProbe.cs`
- 覆盖:编译期引用 `FlowScope.Container.Container``FlowScope.Flow.GameFlow``FlowScope.Addressables.AddressablesResourceBackend``FlowScope.Resources.IResourceService`
- 运行方式:挂到临时 GameObject 后,通过组件右键菜单 `FlowScope/Validate Package References` 手动执行。
- 设计边界:不自动挂场景、不自动启动、不加载真实业务资源,只证明消费方工程能引用 package API。
4. 消费方验证结果
- UnitySkills `debug_check_compilation``isCompiling = false``isUpdating = false`
- UnitySkills `debug_get_errors``count = 0`
- UnitySkills `console_get_stats``errors = 0`
- UnitySkills `package_list`:可见 `com.flowscope.gamecore`,版本为 `0.2.0-preview.1`
5. 安装文档同步
- `Packages/com.flowscope.gamecore/README.md`
- `Packages/com.flowscope.gamecore/Documentation~/installation.md`
- 已改为正式 SSH URL、preview tag、Unity NuGet registry 和 `org.nuget.r3` 说明。
## 本轮踩坑记录
1. FlowScope remote 曾残留旧仓库地址
- 本地 `origin` 一度指向旧的 `BombGameFramework` 地址。
- 已改为 `ssh://git@git.zz.com:2222/Developer/FlowScope.git` 后再推送 tag。
2. R3 Git package 不等于完整 R3 依赖
- `com.cysharp.r3` 提供 Unity 适配层。
- `R3.dll` 与 BCL DLL 需要由 `org.nuget.r3` 及其 NuGet 传递依赖提供。
3. Git package 必须保留 Unity `.meta`
- preview tag 基于已补齐 package 顶层 `.meta` 的提交。
- 缺少 `.meta` 时,消费方会出现 immutable package 相关导入错误。
## 剩余 P2 第二阶段事项
1. 当前 preview tag 已可被消费方解析,但 tag 内 package 文档仍是打 tag 当时的快照。后续如果要让 package 内文档也随 tag 发布,应在文档修正后创建下一个 preview tag。
2. 已在后续切片镜像 `Samples~/MainMenuP0`,但尚未在消费方导入 package sample 做人工验收。
3. 已在后续切片建立 package `Tests~/EditMode` 第一刀 smoke 测试,但尚未迁移完整 Runtime/EditMode/PlayMode 测试。
4. Addressables 测试资源已统一到主项目测试目录的 `Resources/Fixtures/Addressables`,后续迁移 Tests 前需要决定是否镜像到 package `Tests~`
5. 仍需在一个真正空白 Unity 项目中重复 Git package 接入FishingFrenzy 是真实消费方,但不是空白项目。
## 2026-06-06 验证补充
本轮按 P2 收尾顺序补做以下检查:
1. Addressables 测试资源 entry
- `Default Local Group.asset` 曾出现本地未提交改动,内容为清空 `FlowScope.Tests.Addressables.Text` 对应 entry。
- 已确认该改动不是预期变更,并恢复到干净工作树;当前 `git status` 无该文件 diff。
2. 静态与生成 csproj 编译验证
- `Packages/com.flowscope.gamecore/package.json` 可被 `ConvertFrom-Json` 解析。
- `Packages/com.flowscope.gamecore/Tests~/EditMode/FlowScope.PackageTests.EditMode.asmdef` 可被 `ConvertFrom-Json` 解析。
- `FlowScope.Runtime.csproj``FlowScope.Addressables.csproj``FlowScope.Tests.EditMode.csproj``FlowScope.Tests.PlayMode.csproj` 均可 `dotnet build --no-restore` 成功。
- 编译仍有 Unity 生成 csproj 常见的 `MSB3277` 引用版本冲突 warning但无错误。
3. Unity Test Runner
- UnitySkills `http://127.0.0.1:8090/health` 当前不可连接。
- 去掉 `-quit` 后重跑 Unity batchmode EditMode Test Runner已生成 `C:\tmp\flowscope-p2-editmode-retry3-results.xml`
- 结果:`testcasecount=56``result=Passed``passed=56``failed=0``skipped=0`
- 注意Unity 在保存结果后未自动退出,已手动停止残留 batchmode 进程;这不影响本次 XML 结果判定。
4. 空白 Unity 项目 Git URL 复验
- 使用 `C:\tmp\flowscope-upm-probe-p2` 手工创建最小 probe 并写入 Git package manifest 后Unity batchmode 能启动,但 UPM 在更新 manifest 时失败:`The "path" argument must be of type string. Received undefined`,未生成 `packages-lock.json`
- 该 probe 不是由 Unity Hub/template 正式创建的完整项目,因此本轮结果不能判定为 FlowScope package 安装失败,只能记录为“手工最小 probe 不足以完成空白项目 gate”。
- 后续仍需使用一个真正由 Unity 创建的空白项目复验 Git URL 安装。
## 2026-06-06 空白项目复验补充
用户已在仓库内创建完整 Unity 空白项目 `TestFlowScopePackage`,本轮将该目录加入根 `.gitignore`,避免误提交验证工程。
验证步骤与结果:
1.`TestFlowScopePackage/Packages/manifest.json` 写入 FlowScope Git package、R3 Git package、Unity NuGet scoped registry 和 `org.nuget.r3`
2. Unity batchmode 打开项目时 UPM 失败:`The "path" argument must be of type string. Received undefined`,未生成可用的 FlowScope package lock。
3. 为定位原因,分别移除 FlowScope、R3 Git package、`org.nuget.r3`、scoped registry 做隔离验证。
4. 清理 `Library``Temp``Packages/packages-lock.json` 后,使用不含 FlowScope/R3/NuGet 的原始 manifest 重跑,仍出现同一个 UPM resolve 错误。
当前判断:该错误不是 FlowScope Git package 本身触发;`TestFlowScopePackage` 在原始 manifest 下也无法完成 UPM resolve。空白项目 gate 需要先在 Unity GUI 中确认该项目自身 Package Manager 可正常打开且不报错,再继续验证 FlowScope Git package。
## 2026-06-06 空白项目复验通过
用户使用 Unity GUI 打开并关闭 `TestFlowScopePackage` 后,项目自身 UPM 状态恢复正常;随后继续复验 FlowScope Git package。
验证结果:
1. `Packages/packages-lock.json` 已解析出:
- `com.flowscope.gamecore`
- source`git`
- version`ssh://git@git.zz.com:2222/Developer/FlowScope.git?path=/Packages/com.flowscope.gamecore#v0.2.0-preview.1`
- hash`31641b2c35d1d6c4f056772f144562007f0d0782`
- `com.cysharp.r3`
- source`git`
- hash`329ca7915713417f2e0837b0e0a80b4da074db4a`
- `org.nuget.r3`
- source`registry`
- version`1.3.0`
2. Unity batchmode 导入验证通过:
- log`C:\tmp\flowscope-testpackage-import-aftergui.log`
- exit code`0`
- 日志可见 `com.flowscope.gamecore@...#v0.2.0-preview.1` 被注册到 `Library/PackageCache/com.flowscope.gamecore@31641b2c35`
3. 空白消费方 smoke probe 编译验证通过:
- 文件:`TestFlowScopePackage/Assets/FlowScopePackageSmokeProbe.cs`
- log`C:\tmp\flowscope-testpackage-smoke-compile2.log`
- exit code`0`
- probe 覆盖 `FlowScope.Container.Container``FlowScope.Resources.ResourceService``FlowScope.Resources.IResourceService``FlowScope.Addressables.AddressablesResourceBackend`
非阻塞注意事项:
- batchmode 日志提示 `Packages/com.flowscope.gamecore/Documentation~` 对应 `.meta` 存在但目录缺失Unity 自动创建了该空目录。下一个 preview tag 前建议补齐 `Documentation~` 实际内容或移除空目录 `.meta`,避免消费方导入时出现该提示。
## 2026-06-06 当前提交导入与 sample 验收尝试
为验证下一个 preview tag 是否能消除 `Documentation~` 空目录提示,临时将忽略工程 `TestFlowScopePackage` 的 manifest 指向当前提交:
- `ssh://git@git.zz.com:2222/Developer/FlowScope.git?path=/Packages/com.flowscope.gamecore#e6d1f00e235a6d7cd81d84cbe9a1f8be2d27b89e`
验证观察:
1. Unity 默认 `Editor.log` 可见 `Packages/com.flowscope.gamecore/Documentation~` 被正常导入,未再出现 `Documentation~.meta` 存在但目录缺失的提示。
2. Unity 默认 `Editor.log` 可见 `Packages/com.flowscope.gamecore/Runtime``Addressables``Editor``README.md``CHANGELOG.md``package.json` 等内容被导入。
3. 未发现 `error CS``Compilation failed``Scripts have compiler errors` 等编译错误日志。
未完成项:
- 尝试通过 `FlowScopeSampleImportVerifier.ImportMainMenuP0` 自动导入 `Samples~/MainMenuP0`,但 `TestFlowScopePackage` 的 batchmode 没有稳定生成验证脚本对应的 Editor 程序集,也没有执行到 sample import 日志。
- 因此本轮只能确认“当前提交已补齐 `Documentation~` 导入内容”,不能宣称 `Samples~/MainMenuP0` 消费方导入验收通过。
后续处理:
1. 下一个 preview tag 可以覆盖 `Documentation~` 空目录 warning。
2. `Samples~/MainMenuP0` 仍需要在 Unity GUI 的 Package Manager 中人工导入,或在验证工程稳定生成 Editor 程序集后再跑自动导入脚本。
## 2026-06-08 MainMenuP0 手动导入与验证脚本修正
用户已在 `TestFlowScopePackage` 通过 Unity GUI 手动导入 `Samples~/MainMenuP0`,本地可见导入目录:
- `TestFlowScopePackage/Assets/Samples/FlowScope Game Core/0.2.0-preview.1/MainMenuP0`
导入后曾出现两个编译错误,来源均为忽略工程中的临时验证脚本 `Assets/Editor/FlowScopeSampleImportVerifier.cs`,不是 FlowScope package 本体:
1. `CS0104: 'PackageInfo' is an ambiguous reference between 'UnityEditor.PackageManager.PackageInfo' and 'UnityEditor.PackageInfo'`
- 修正:使用完整类型名 `UnityEditor.PackageManager.PackageInfo.FindForAssetPath(...)`
2. `CS0019: Operator '==' cannot be applied to operands of type 'Sample' and '<null>'`
- 修正:`UnityEditor.PackageManager.UI.Sample` 不能按 `null` 判断;改用 `string.IsNullOrEmpty(sample.displayName)` 判断是否找到 sample。
当前状态:
- `MainMenuP0` sample 已完成手动导入。
- 临时验证脚本已在 `TestFlowScopePackage` 内修正。
- Unity batchmode 在当前机器状态下仍未稳定生成指定 log 并退出,因此还不能把自动 batchmode sample 验收记为通过。
## 2026-06-08 MainMenuP0 手动导入验收通过
用户重新打开 `TestFlowScopePackage` 后确认:
- Unity Console 已无 `FlowScopeSampleImportVerifier.cs``CS0104` / `CS0019` 编译错误。
- `Samples~/MainMenuP0` 已通过 Unity GUI 手动导入。
本轮判定:
- `Samples~/MainMenuP0` 消费方手动导入验收通过。
- 自动 batchmode sample import 仍不作为通过项记录,因为当前机器状态下 batchmode 未稳定生成指定 log 并退出。
- P2 package preview 可以进入 `0.2.0-preview.2` 版本收口;该版本覆盖空白项目 Git URL 安装、smoke probe 编译、`Documentation~` 内容补齐、`Tests~/EditMode` 第一刀和 `MainMenuP0` 手动导入验收。
## 2026-06-08 preview.2 消费方刷新确认
用户在 `TestFlowScopePackage` 中将 FlowScope package 刷新到 `v0.2.0-preview.2` 后确认:
- Package Manager 显示版本已从 `0.2.0-preview.1` 更新到 `0.2.0-preview.2`
- 本轮刷新过程中未报告新的 Unity Console 编译错误。
问题原因记录:
- 之前未更新到 preview.2 的原因是 `TestFlowScopePackage/Packages/manifest.json` 仍指向临时验证提交 `e6d1f00e235a6d7cd81d84cbe9a1f8be2d27b89e`,该提交内 package 版本仍为 `0.2.0-preview.1`
- 已将该忽略工程的 manifest 改为正式 tag`ssh://git@git.zz.com:2222/Developer/FlowScope.git?path=/Packages/com.flowscope.gamecore#v0.2.0-preview.2`,并清理旧 `packages-lock.json` 与旧 `Library/PackageCache` 后完成刷新。
本轮判定:
- `v0.2.0-preview.2` 已完成空白消费方刷新确认。
- P2 package/editor 的 package preview 收口 gate 已满足;后续可以转回框架功能开发。