diff --git a/ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md b/ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md index ee29009f..98037c71 100644 --- a/ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md +++ b/ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md @@ -6,14 +6,15 @@ ## 当前恢复点 -- 恢复点编号:`ANALYZER-WARNING-REDUCTION-RP-060` -- 当前阶段:`Phase 60` +- 恢复点编号:`ANALYZER-WARNING-REDUCTION-RP-061` +- 当前阶段:`Phase 61` - 当前焦点: - `2026-04-25` 继续按 `$gframework-batch-boot 75` 自动推进,并明确允许使用 subagent 处理互不重叠的写集 - - 当前 `HEAD` 为 `b27bcb5`,基线 `origin/main` 仍为 `9964962` - - 当前累计 branch diff 相对 `origin/main` 为 `9` 个文件、`480` 行,仍远低于 `75 files` 停止阈值 - - 本轮已并行完成 4 个批次:`YamlConfigLoaderTests.cs` 的 4 个纯加载 `MA0051`、`SceneTransitionPipeline.cs` / `UiTransitionPipeline.cs` 的 `MA0004`、3 个配置测试文件的机械型 `MA0004`、以及 `AbstractArchitectureModuleInstallationTests.cs` 的机械型 `MA0004` - - `GFramework.Game.Tests` 当前 `--no-incremental Release build` 已进一步降到 `189 Warning(s)`;`YamlConfigLoaderTests.cs` 当前只剩热重载相关 `MA0051` + - 当前 `HEAD` 为 `67c9359`,基线 `origin/main` 仍为 `9964962` + - 当前累计 branch diff 相对 `origin/main` 为 `28` 个文件、`903` 行,仍低于 `75 files` 主停止阈值 + - `RP-060` 之后已接受 8 个批次提交:`64c8589`、`4bb8f4f`、`bad6c1b`、`e8eda81`、`3be299e`、`09cbd16`、`9b20a07`、`67c9359` + - 本轮主线策略已经从“继续深挖 `YamlConfigLoaderTests.cs`”切换为“优先吃新文件的低风险机械型异步断言包装”,以更有效推进 `75 files` 目标 + - 当前正在并行推进 3 个新写集:`ResultExtensionsTests.cs` + `AsyncOperationTests.cs`、`StateMachineSystemTests.cs` + `StateMachineTests.cs`、以及 `ArchitectureConfigIntegrationTests.cs` ## 当前活跃事实 @@ -23,11 +24,12 @@ - `RP-056` 已验证 `GeneratedConfigConsumerIntegrationTests.cs` 不再出现在项目 build warning 输出中 - `RP-057` 已验证 `PersistenceTests.cs` 不再出现在 `dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --no-incremental` 的 warning 输出中 - `RP-059` 已验证 `YamlConfigLoaderTests.cs` 中的 `MA0004` 已清零,本轮继续把该文件 4 个纯加载 `MA0051` 热点也降掉了 -- `GFramework.Game.Tests` 当前 `--no-incremental Release build` 结果为 `189 Warning(s)`、`0 Error(s)` -- `GFramework.Game/GFramework.Game.csproj -c Release` 当前结果为 `519 Warning(s)`、`0 Error(s)`;本轮新增 touched files `SceneTransitionPipeline.cs` 与 `UiTransitionPipeline.cs` 未在可见 warning 输出中残留 +- `GFramework.Game.Tests` 当前 `--no-incremental Release build` 结果为 `145 Warning(s)`、`0 Error(s)`;最近两批 `YamlConfigLoaderAllOfTests.cs`、`YamlConfigLoaderEnumTests.cs`、`YamlConfigLoaderNegationTests.cs`、`YamlConfigLoaderDependentSchemasTests.cs`、`YamlConfigLoaderIfThenElseTests.cs`、`PersistenceTests.cs` 未引入新增错误 +- `GFramework.Game/GFramework.Game.csproj -c Release` 当前最近一次可信结果为 `0 Error(s)`;最近几批 touched files `SettingsSystem.cs`、`ScopedStorage.cs`、`SceneRouterBase.cs`、`FileStorage.cs`、`RouterBase.cs`、`UiRouterBase.cs` 未在主线程复核中暴露新增编译错误 - `GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release` 当前结果为 `0 Warning(s)`、`0 Error(s)`;`AbstractArchitectureModuleInstallationTests.cs` 已通过单测复验 - 当前 `origin/main` 基线提交为 `9964962`(`2026-04-24T23:05:53+08:00`) -- 当前累计 branch diff 相对 `origin/main` 为 `9` 个文件、`480` 行;主停止条件仍然是 `75 changed files` +- `GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --no-incremental` 当前结果为 `298 Warning(s)`、`0 Error(s)`;`ArchitectureLifecycleBehaviorTests.cs`、`AbstractAsyncCommandTests.cs`、`CommandExecutorTests.cs`、`AsyncKeyLockManagerTests.cs`、`AbstractAsyncQueryTests.cs`、`AsyncQueryExecutorTests.cs`、`AsyncArchitectureTests.cs` 已随 `67c9359` 落地 +- 当前累计 branch diff 相对 `origin/main` 为 `28` 个文件、`903` 行;主停止条件仍然是 `75 changed files` ## 当前风险 @@ -41,6 +43,8 @@ - 缓解措施:后续优先切回新的单文件热点,只有在缺少低风险新文件时再回到该文件的热重载方法 - 并行 subagent 已经证明能加快批次落地,但主线程仍需逐批复核并统一记录,否则容易让恢复点失真 - 缓解措施:每轮并行批次完成后先更新 active tracking / trace,再继续下一批 +- 并行执行 `dotnet build` 会在共享输出目录上触发 `deps.json` 或 DLL 文件锁,产生与代码无关的假失败 + - 缓解措施:受影响项目的主线程验证统一改为串行 `--no-incremental Release build`,避免把并发 I/O 竞争误判成编译回归 ## 活跃文档 @@ -71,10 +75,17 @@ - `RP-059` 当前结果:成功;`203 Warning(s)`、`0 Error(s)` - `dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --no-incremental` - `RP-060` 当前结果:成功;`189 Warning(s)`、`0 Error(s)` +- `dotnet build GFramework.Game/GFramework.Game.csproj -c Release` + - `RP-061` 最近可信结果:成功;`0 Error(s)`;warning 基线仍高,但最近 touched files 未见新增编译失败 - `dotnet build GFramework.Game/GFramework.Game.csproj -c Release` - `RP-060` 当前结果:成功;`519 Warning(s)`、`0 Error(s)` - `dotnet build GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release` - `RP-060` 当前结果:成功;`0 Warning(s)`、`0 Error(s)` +- `dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --no-incremental` + - `RP-061` 当前结果:成功;`145 Warning(s)`、`0 Error(s)` +- `dotnet build GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --no-incremental` + - 首次并行复验:失败;`GenerateDepsFile` 写入 `GFramework.Cqrs.Abstractions.deps.json` 时命中文件锁,属于并发构建副作用 + - 串行复验:成功;`298 Warning(s)`、`0 Error(s)` - `dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~ArchitectureConfigIntegrationTests|FullyQualifiedName~GameConfigBootstrapTests|FullyQualifiedName~JsonSerializerTests"` - 结果:成功;`Passed: 19`、`Failed: 0` - `dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~GeneratedConfigConsumerIntegrationTests"` @@ -90,5 +101,5 @@ ## 下一步建议 -1. 提交 `RP-060` tracking/trace 更新,固定本轮 4 个并行批次的恢复点与当前 `9 files / 480 lines` 体积 -2. 下一轮优先挑新的单文件热点来提升 branch diff 文件数;只有在新文件候选不够低风险时,再回到 `YamlConfigLoaderTests.cs` 的热重载 `MA0051` +1. 等待当前 3 个并行子批次回报,并优先接受新的单文件测试清理提交,把 branch diff 继续向 `75 files` 推进 +2. 若这 3 个批次全部落地后仍明显低于阈值,继续按 `rg -n "async \\(\\) => await"` 的剩余结果扩展到新的 `Core.Tests` / `Game.Tests` 低风险文件 diff --git a/ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md b/ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md index a281f0b0..b85fcbaf 100644 --- a/ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md +++ b/ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md @@ -2,6 +2,44 @@ # Analyzer Warning Reduction 追踪 +## 2026-04-25 — RP-061 + +### 阶段:扩展到 `28 files / 903 lines` 并切回新文件优先策略 + +- 触发背景: + - `RP-060` 之后分支已连续落地多笔 runtime / test 小批次,但 active tracking 仍停在 `b27bcb5` 与 `9 files / 480 lines` + - 用户明确允许继续委派 subagent,因此主线程可以把新的低风险机械型测试清理继续拆成互不重叠的写集 + - 当前主停止条件仍是相对 `origin/main` 的累计 branch diff 接近 `75 changed files` +- 主线程实施: + - 接受并保留以下提交进入当前分支: + - `64c8589` `fix(game): 清理 SettingsSystem 与 ScopedStorage 的 MA0004` + - `4bb8f4f` `fix(game): 清理 SceneRouterBase 低风险异步包装` + - `bad6c1b` `fix(game): 清理 FileStorage 异步存储路径的 MA0004` + - `e8eda81` `fix(routing): 清理 RouterBase 守卫异步等待的 MA0004` + - `3be299e` `fix(game): 清理 UiRouterBase 的低风险异步包装` + - `09cbd16` `test(game-tests): 简化 YAML 配置加载异常断言包装` + - `9b20a07` `refactor(game-tests): 简化异步异常断言包装` + - `67c9359` `test(core-tests): 简化异步断言包装` + - 主线程复核 `Core.Tests` 工作树改动后,将 7 个文件的机械型 `async () => await ...` 包装收口为单笔提交,避免并发批次长期悬空 + - 用 `rg -n "async \\(\\) => await"` 重新定位下一轮候选,并把新的 3 个 disjoint 写集派发给 subagent: + - `ResultExtensionsTests.cs` + `AsyncOperationTests.cs` + - `StateMachineSystemTests.cs` + `StateMachineTests.cs` + - `ArchitectureConfigIntegrationTests.cs` +- 验证里程碑: + - `dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --no-incremental` + - 结果:成功;`145 Warning(s)`、`0 Error(s)` + - `dotnet build GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --no-incremental` + - 并行首次复验:失败;`GenerateDepsFile` 命中共享输出文件锁,不作为代码回归结论 + - 串行复验:成功;`298 Warning(s)`、`0 Error(s)` + - `git diff --name-only origin/main...HEAD | wc -l` + - 结果:`28` + - `git diff --numstat origin/main...HEAD` + - 结果:累计 `498` added、`405` deleted,即 `903` changed lines +- 当前结论: + - 分支已从 `RP-060` 的 `9 files / 480 lines` 推进到 `28 files / 903 lines` + - 当前最有效的继续路径仍然是新的低风险测试文件,而不是回到 `YamlConfigLoaderTests.cs` 深挖高上下文 `MA0051` + - 下一恢复点应直接接收 3 个新 subagent 批次的结果,并在必要时继续扩展到剩余 `Core.Tests` / `Game.Tests` 机械型异步断言热点 + ## 2026-04-25 — RP-060 ### 阶段:并行子批次推进到 `9 files / 480 lines`