mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 修复 CoroutineScheduler 在零初始容量下的扩容边界并补充回归测试 - 修复 Store dispatch 快照阶段的异常回滚逻辑并补充异常安全测试 - 更新 analyzer-warning-reduction 的 tracking 与 trace 以记录 RP-010 验证结果
10 KiB
10 KiB
Analyzer Warning Reduction 跟踪
目标
继续以“优先低风险、保持行为兼容”为原则收敛当前仓库的 Meziantou analyzer warnings,并在首轮大规模清理完成后, 判断剩余结构性 warning 是否值得在下一轮继续推进。
当前恢复点
- 恢复点编号:
ANALYZER-WARNING-REDUCTION-RP-010 - 当前阶段:
Phase 10 - 当前焦点:
- 当前 PR #265 的 follow-up 已收口;下一轮恢复到
MA0046主批次 - 后续继续按 warning 类型和数量批处理,而不是回退到按单文件切片推进
- 当某一轮主类型数量不足时,允许顺手合并其他低冲突 warning 类型,
MA0015与MA0077只是当前最明显的低数量示例,不构成限定 - 单次
boot的工作树改动上限控制在约100个文件以内,避免 recovery context 与 review 面同时失控 - 若任务边界互不冲突,允许使用不同模型的 subagent 并行处理不同 warning 类型或不同目录,但必须遵守显式 ownership
- 当前 PR #265 的 follow-up 已收口;下一轮恢复到
当前状态摘要
- 已完成
GFramework.Core、GFramework.Cqrs、GFramework.Godot与部分 source generator 的低风险 warning 清理 - 已完成多轮 CodeRabbit follow-up 修复,并用定向测试与项目/解决方案构建验证了关键回归风险
- 已完成当前 PR #265 review follow-up:修复
CoroutineScheduler的零容量扩容边界,并补上Storedispatch 作用域的异常安全回滚 - 当前
PauseStackManager、Store、CoroutineScheduler与GFramework.Core的MA0048文件/类型命名冲突已从 active 入口移除;主题内剩余 warning 主要集中在MA0046delegate 形状、MA0016集合抽象接口、MA0002comparer 重载,以及MA0015/MA0077两个低数量尾项
当前活跃事实
- 当前主题仍是 active topic,因为剩余结构性 warning 是否继续推进尚未决策
RP-001的详细实现历史、测试记录和 warning 热点清单已归档到主题内archive/RP-002已在不改公共契约的前提下完成CqrsHandlerRegistrar结构拆分,并通过定向 build/test 验证RP-003已在不改生命周期契约的前提下完成ArchitectureLifecycle初始化主流程拆分,并通过定向 build/test 验证RP-004已完成当前 PR review follow-up:修复TryCreateGeneratedRegistry的可空out契约并清理 trace 文档重复标题RP-005已在不改公共 API 的前提下完成PauseStackManager两个MA0051的结构拆分,并补充销毁通知回归测试RP-006已在不改公共 API 的前提下完成Store两个MA0051的结构拆分,并通过定向 build/test 验证 dispatch、 多态 reducer 匹配与历史语义未回归RP-007已在不改公共 API 的前提下完成CoroutineScheduler两个MA0051的结构拆分,并通过定向 build/test 验证 调度、取消与完成状态语义未回归RP-008将后续策略从“单文件 warning 切片”切换为“按类型批处理 + 文件数上限控制”,并允许在非冲突前提下使用 不同模型的 subagent 并行处理RP-009在不改公共 API 的前提下,将同名泛型家族收拢到与类型名一致的单文件中,清空当前GFramework.Corenet8.0基线中的MA0048,并通过定向 build/test 验证Command、Query、Event路径未回归RP-010使用gframework-pr-review复核当前分支 PR #265 后,修复了仍在本地成立的两个 follow-up 风险:CoroutineScheduler的initialCapacity: 0扩容越界,以及Store在 dispatch 快照阶段抛异常时可能残留_isDispatching = true的锁死问题- 当前工作树分支
fix/analyzer-warning-reduction-batch已在ai-plan/public/README.md建立 topic 映射
当前风险
- 公共契约兼容风险:剩余
MA0046/MA0016若直接改公开委托或集合类型,可能波及用户代码- 缓解措施:优先选择不改公共 API 的低风险切法;若必须触达公共契约,先补齐 XML 契约说明与定向测试
- 测试宿主稳定性风险:部分 Godot 失败路径在当前 .NET 测试宿主下仍不稳定
- 缓解措施:继续优先使用稳定的 targeted test、项目构建和相邻 smoke test 组合验证
- 多目标框架 warning 解释风险:同一源位置会在多个 target framework 下重复计数
- 缓解措施:继续以唯一源位置和 warning 家族为主要决策依据,而不是只看原始 warning 总数
- 并行实现风险:批量收敛时若 subagent 写入边界不清晰,容易引入命名冲突或重复重构
- 缓解措施:只在 warning 类型或目录边界清晰时并行;每个 subagent 必须有独占文件 ownership,主代理负责合并验证
活跃文档
- 历史跟踪归档:analyzer-warning-reduction-history-rp001.md
- 历史 trace 归档:analyzer-warning-reduction-history-rp001.md
验证说明
RP-001的详细 warning 清理、回归修复与定向验证命令均已迁入主题内历史归档RP-002的定向验证结果:dotnet build GFramework.Cqrs/GFramework.Cqrs.csproj -c Release --no-restore -p:TargetFramework=net8.0 -p:UseSharedCompilation=false -p:RestoreFallbackFolders=dotnet test GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release --filter FullyQualifiedName~CqrsHandlerRegistrarTests -p:RestoreFallbackFolders=
RP-003的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release -t:Rebuild --no-restore -p:UseSharedCompilation=false -p:TargetFramework=net8.0 -p:RestoreFallbackFolders= -nologo -clp:Summary;WarningsOnlydotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter FullyQualifiedName~ArchitectureLifecycleBehaviorTests -p:RestoreFallbackFolders=
RP-004的定向验证结果:dotnet build GFramework.Cqrs/GFramework.Cqrs.csproj -c Release --no-restore -p:TargetFramework=net8.0 -p:UseSharedCompilation=false -p:RestoreFallbackFolders=- 结果:
0 Warning(s),0 Error(s)
- 结果:
RP-005的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release -t:Rebuild --no-restore -p:UseSharedCompilation=false -p:TargetFramework=net8.0 -p:RestoreFallbackFolders= -nologo -clp:"Summary;WarningsOnly"- 结果:
27 Warning(s),0 Error(s);PauseStackManager.cs已不再出现在MA0051列表中
- 结果:
dotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter FullyQualifiedName~PauseStackManagerTests -p:RestoreFallbackFolders=- 结果:
25 Passed,0 Failed
- 结果:
RP-006的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release -t:Rebuild --no-restore -p:UseSharedCompilation=false -p:TargetFramework=net8.0 -p:RestoreFallbackFolders="" -p:RestorePackagesPath=<linux-nuget-cache> -nologo -clp:"Summary;WarningsOnly"- 结果:
25 Warning(s),0 Error(s);Store.cs已不再出现在MA0051列表中
- 结果:
dotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter FullyQualifiedName~StoreTests -p:RestoreFallbackFolders="" -p:RestorePackagesPath=<linux-nuget-cache> -nologo- 结果:
30 Passed,0 Failed
- 结果:
RP-007的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release -t:Rebuild --no-restore -p:UseSharedCompilation=false -p:TargetFramework=net8.0 -p:RestoreFallbackFolders="" -p:RestorePackagesPath=<linux-nuget-cache> -nologo -clp:"Summary;WarningsOnly"- 结果:
23 Warning(s),0 Error(s);CoroutineScheduler.cs已不再出现在MA0051列表中
- 结果:
dotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter FullyQualifiedName~CoroutineScheduler -p:RestoreFallbackFolders="" -p:RestorePackagesPath=<linux-nuget-cache> -nologo- 结果:
34 Passed,0 Failed
- 结果:
RP-008的策略基线:- 当前
GFramework.Core剩余 warning 分布:MA0048=8、MA0046=6、MA0016=5、MA0002=2、MA0015=1、MA0077=1 - 后续批处理规则:优先按类型推进;若当轮主类型数量不足,可顺手吸收其他低冲突类型,不限定于
MA0015与MA0077
- 当前
RP-009的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release -t:Rebuild --no-restore -p:UseSharedCompilation=false -p:TargetFramework=net8.0 -p:RestoreFallbackFolders="" -nologo -clp:"Summary;WarningsOnly"- 结果:
15 Warning(s),0 Error(s);当前GFramework.Corenet8.0warnings-only 输出中已不再出现MA0048
- 结果:
dotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter "FullyQualifiedName~CommandExecutorTests|FullyQualifiedName~AbstractAsyncCommandTests|FullyQualifiedName~QueryExecutorTests|FullyQualifiedName~AbstractAsyncQueryTests|FullyQualifiedName~EventTests" -m:1 -p:RestoreFallbackFolders="" -nologo- 结果:
83 Passed,0 Failed
- 结果:
RP-010的定向验证结果:dotnet build GFramework.Core/GFramework.Core.csproj -c Release --no-restore -p:TargetFramework=net8.0 -p:RestoreFallbackFolders="" -nologo- 结果:
15 Warning(s),0 Error(s);新增修复未引入新的GFramework.Corenet8.0构建错误
- 结果:
dotnet test GFramework.Core.Tests/GFramework.Core.Tests.csproj -c Release --filter "FullyQualifiedName~CoroutineSchedulerTests.Run_Should_Grow_From_Zero_Initial_Capacity|FullyQualifiedName~StoreTests.Dispatch_Should_Reset_Dispatching_Flag_When_Snapshot_Creation_Throws" -m:1 -p:RestoreFallbackFolders="" -nologo- 结果:
2 Passed,0 Failed
- 结果:
- active 跟踪文件只保留当前恢复点、活跃事实、风险与下一步,不再重复保存已完成阶段的长篇历史
下一步
- 若要继续该主题,先读 active tracking,再按需展开历史归档中的 warning 热点与验证记录
- 下一轮优先以
MA0046为主批次启动,先从Architecture*与CoroutineScheduler的低风险 delegate 形状修正中选一个切入点 - 若
MA0046的文件 ownership 可以清晰切分,允许使用不同模型的 subagent 并行处理互不冲突的目录或类型簇 - 若本主题确认暂缓,可保持当前归档状态,不需要再恢复
local-plan/