mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-14 06:34:30 +08:00
- 更新 analyzer warning reduction 的 active tracking 到 RP-046 并记录 solution 级 891 条 warning 基线 - 补充前台构建与日志采集形态不一致的环境风险和后续恢复建议
8.8 KiB
8.8 KiB
Analyzer Warning Reduction 跟踪
目标
继续以“优先低风险、保持行为兼容”为原则收敛当前仓库的 Meziantou analyzer warnings,并确保 active recovery 入口保持精简、可恢复。
当前恢复点
- 恢复点编号:
ANALYZER-WARNING-REDUCTION-RP-046 - 当前阶段:
Phase 46 - 当前焦点:
- 已按用户更正后的要求执行前台
dotnet build GFramework.sln -c Release,收集当前工作树的 solution 级 warning 基线,并将结果回写 active plan - 当前前台 solution Release build 已能稳定完成,结果为
891 Warning(s)/0 Error(s)/Time Elapsed 00:00:18.57 - 当前 baseline 仍为
origin/main(e692ed3,2026-04-24 09:36:17 +0800);分支仍映射到fix/analyzer-warning-reduction-batch/GFramework-analyzer - 当前直接观察到的热点 warning 规则集中在
MA0051、MA0158、MA0004,并伴随一部分MA0006、MA0002、MA0009 - 当前直接观察到的热点模块集中在
GFramework.Godot.SourceGenerators、GFramework.Godot.SourceGenerators.Tests、GFramework.Core、GFramework.Game、GFramework.Cqrs、GFramework.Godot - 非前台形态的同命令当前不稳定:重定向到文件、
script分配 TTY、以及若干 logger 组合都曾快速返回Build FAILED / 0 Warning(s) / 0 Error(s)或Restore failed
- 已按用户更正后的要求执行前台
当前状态摘要
- 已通过 explorer
Rawls盘点出本轮最适合并行推进的低风险切片:GFramework.Game/Data/UnifiedSettingsFile.cs的MA0016GFramework.Godot/Setting/Data/LocalizationMap.cs的MA0016GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs的MA0051
- 已通过 explorer
Arendt收敛过旧构建根因:当前离线缓存只有Meziantou.Polyfill 1.0.110,缺少项目请求的1.0.116,导致 restore 失败并使 source-generator 相关netstandard2.0项目缺失有效引用图 - worker
Aquinas已独立完成LocalizationMap收口并生成提交a0ce04b(fix(godot): 收紧本地化映射集合暴露) - worker
Boyle已完成UnifiedSettingsFile/UnifiedSettingsDataRepository的最小 API 形状修正,并同步更新 active todo / trace 草稿 - 主线程本轮重新执行前台
dotnet build GFramework.sln -c Release,构建成功并暴露出完整 warning 面,说明当前工作树至少在交互式前台构建路径上已经恢复到可收集 analyzer baseline 的状态 - 从实时输出可直接确认的热点包括:
GFramework.Godot.SourceGenerators/GodotProjectMetadataGenerator.cs、BindNodeSignalGenerator.cs、GetNodeGenerator.cs、Registration/AutoRegisterExportedCollectionsGenerator.csGFramework.Godot.SourceGenerators.Tests/**多个 generator 测试文件GFramework.Cqrs/Internal/WeakKeyCache.csGFramework.Core/**多个锁相关组件,如SamplingFilter.cs、BindableProperty.cs、FileAppender.cs、ResourceHandle.csGFramework.Game/Config/YamlConfigSchemaValidator*.cs、GFramework.Game/UI/UiRouterBase.cs、GFramework.Game/Storage/FileStorage.cs
- 同一轮中,多次尝试把相同命令切换到“重定向日志”“TTY 包裹”或“附加 logger 输出到文件”的形态时,构建又会退化成
Build FAILED / 0 Warning(s) / 0 Error(s)或Restore failed - 这说明当前环境不只是“能否构建”的问题,还存在“前台构建”和“非前台采集”结果不一致的执行形态漂移
当前活跃事实
- 当前主题仍保持 active,因为 analyzer warning reduction 主任务尚未结束,而且本轮新增了可直接消费的 solution warning baseline
CqrsHandlerRegistryGeneratorTests.cs当前已不再保留方法内const string source = """..."""型大型 fixture;后续只需回到真实 warning 热点继续收敛UnifiedSettingsFile.Sections改为IDictionary<string, string>后,CloneFile仍会在底层是Dictionary时保留 comparer,从而避免改变现有 key 比较行为LocalizationMap现在通过私有只读字典与IReadOnlyDictionary<string, string>暴露映射,消费者GodotLocalizationSettings仍只按只读方式使用这些映射- 当前 worktree 的推荐构建入口仍是
bash scripts/dotnet-wsl.sh <dotnet-command> ... - 当前前台
dotnet build GFramework.sln -c Release的结果是891条 warning、0条 error,且已确认不是“0 warning 的假成功” - 当前 warning 规则的已观察集合包括
MA0051、MA0158、MA0004、MA0006、MA0002、MA0009 - 当前“非前台采集”路径仍不可信:把输出重定向到文件、追加 file logger 或经
script分配 TTY 时,都未稳定复现前台结果 - 先前已识别的
--no-restore资产文件漂移、Meziantou.Polyfill 1.0.116缺失、以及NU1301风险仍保留,但本轮用户要求的 warning 基线以成功的前台dotnet build结果为准
当前风险
- warning 采集形态漂移风险:同一个
dotnet build GFramework.sln -c Release在前台可成功输出891warnings,但一旦切到日志重定向、TTY 包裹或特定 logger 组合,就可能在约1秒内快速失败- 缓解措施:短期内把“前台普通构建”作为 warning 基线真值来源;若需要自动化统计,再单独排查 stdout/TTY/logger 相关环境差异
- SDK / workload resolver 环境漂移风险:历史诊断样本里 Linux .NET SDK
10.0.106在 solution restore 图阶段报告过Microsoft.NET.SDK.WorkloadAutoImportPropsLocator缺失- 缓解措施:后续若要恢复脚本化或
--no-restore验证,再重新检查当前 WSLdotnet --info、workload 解析器状态与仓库推荐构建入口是否一致
- 缓解措施:后续若要恢复脚本化或
- 资产文件环境漂移风险:历史样本中的根项目
project.assets.json明显来自 Windows restore,上游记录的 fallback package folder 在当前 WSL 会话不存在- 缓解措施:需要重新启用
--no-restore验证时,先用与 WSL 兼容的 NuGet / restore 配置重建根项目资产文件
- 缓解措施:需要重新启用
- 构建环境可达性风险:
Meziantou.Polyfill 1.0.116缺失与NU1301在旧样本中仍是有效线索- 缓解措施:后续若再次命中 restore 阻塞,优先核查本地缓存版本与 NuGet 可达性
- reviewability 风险:当前分支只提交了
LocalizationMap一个 warning 切片,而工作树仍保留ai-plan等未提交变更- 缓解措施:后续 warning reduction 继续按模块或规则切片提交,不把多个热点混成单个大提交
活跃文档
- 历史跟踪归档:
- 历史 trace 归档:
验证说明
dotnet build GFramework.sln -c Release- 结果:成功;
891 Warning(s)、0 Error(s)、Time Elapsed 00:00:18.57 - 补充:当前 warning 流可直接从前台交互式构建观察到;热点规则以
MA0051、MA0158、MA0004为主
- 结果:成功;
dotnet build GFramework.sln -c Release > /tmp/gframework-build-warnings.log 2>&1- 结果:失败;约
0.78s结束,摘要仅显示Build FAILED / 0 Warning(s) / 0 Error(s)
- 结果:失败;约
dotnet build GFramework.sln -c Release '/flp:logfile=/tmp/gframework-build-warnings.log;verbosity=normal'- 结果:成功;但日志文件只保留构建摘要,没有留下可消费的 warning 行
dotnet build GFramework.sln -c Release '/flp1:logfile=/tmp/gframework-build-warnings-only.log;warningsonly'- 结果:成功;但 warning-only 日志文件为空
script -q -c "dotnet build GFramework.sln -c Release" /tmp/gframework-build-full-typescript.log- 结果:失败;TTY 形态下 restore 于约
0.8s退出
- 结果:失败;TTY 形态下 restore 于约
git --git-dir=/mnt/f/gewuyou/System/Documents/WorkSpace/GameDev/GFramework/.git/worktrees/GFramework-analyzer --work-tree=/mnt/f/gewuyou/System/Documents/WorkSpace/GameDev/GFramework-WorkTree/GFramework-analyzer branch --show-current- 结果:成功;当前分支为
fix/analyzer-warning-reduction-batch
- 结果:成功;当前分支为
下一步建议
- 先以本轮前台
dotnet build GFramework.sln -c Release的891warning baseline 为起点,优先从MA0051/MA0158最密集的模块切分下一批低风险整改 - 并行保留环境核查:检查为什么相同命令在重定向日志、TTY 包裹或 logger 组合下会快速失败,避免后续 warning 统计自动化再次失真
- 在需要重新启用
--no-restore或脚本化验证时,再回到根GFramework.csproj资产文件漂移、SDK workload resolver、以及Meziantou.Polyfill 1.0.116/NU1301这几条环境线索