mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 修复 SceneBehaviorBase 中暂停、恢复、卸载方法的缩进,消除 PR review 指向的格式问题 - 更新 analyzer-warning-reduction 的 tracking 与 trace,记录 PR #286 latest-head review 跟进和验证结果 - 补充 GFramework.Godot 的 Release build 与 dotnet format verify 结论,保留后续 warning reduction 恢复点
21 KiB
21 KiB
Analyzer Warning Reduction 追踪
Analyzer Warning Reduction 追踪
2026-04-24 — RP-058
阶段:PR #286 latest-head review 格式跟进
- 触发背景:
- 用户要求执行
$gframework-pr-review,需要以当前分支 PR 页面而不是本地记忆为准,重新核对 CodeRabbit、MegaLinter 和测试状态 - 抓取脚本当前解析到的 PR 是
#286,最新 reviewed commit 为2b707343577193fc9904517e6078149653e95698 - 最新 head 上真正未解决的代码线程只剩
GFramework.Godot/Scene/SceneBehaviorBase.cs:148的缩进问题;其余 nitpick 为可选建议或已留待后续批次
- 用户要求执行
- 主线程实施:
- 运行
python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/current-pr-review.json,确认 PROPEN、测试2156/2156通过、MegaLinter 仅剩dotnet-format警告 - 复核
SceneBehaviorBase.cs后确认OnPauseAsync的方法签名与方法体缩进异常仍存在于本地源码;同段的OnResumeAsync、OnUnloadAsync也有同类偏差 - 在不改变行为的前提下统一修正三个方法的缩进,保持现有 XML 注释、
ConfigureAwait(true)语义与 Godot 主线程说明不变 - 更新 active tracking / trace,记录当前 PR review follow-up 已完成,本地剩余外部信号只剩 PR 标题检查
- 运行
- 验证里程碑:
dotnet build GFramework.Godot/GFramework.Godot.csproj -c Release- 结果:成功;
565 Warning(s)、0 Error(s) - 结论:当前格式修复未引入编译错误;模块既有 warning 基线仍存在,但不属于本次 PR review 跟进范围
- 结果:成功;
dotnet format GFramework.Godot/GFramework.Godot.csproj --verify-no-changes --no-restore --include GFramework.Godot/Scene/SceneBehaviorBase.cs- 首次运行:失败;sandbox 环境下在 build host / pipe 建立阶段报错,未进入真实格式比较
- 提权复验:成功;仅提示 workspace load warning,无格式差异
- 当前结论:
- PR #286 当前 latest-head 上唯一未解决的实质代码 review thread 已在本地修复
- MegaLinter 暴露的
dotnet-format问题已被本地verify-no-changes复验覆盖 Title check: Inconclusive仍然存在,但属于 GitHub PR 标题元数据问题,不能通过本地代码提交直接消除
2026-04-24 — RP-057
阶段:清理 PersistenceTests.cs 残余 MA0004
- 触发背景:
RP-056提交后重新做非增量热点排序时,GFramework.Game.Tests的剩余测试项目 warning 已明显收敛,只剩PersistenceTests.cs少量MA0004与YamlConfigLoaderTests.cs大量 warning- 为避免在同一轮直接进入
YamlConfigLoaderTests.cs的大文件高上下文批次,先吃掉PersistenceTests.cs这个独立小切片
- 主线程实施:
- 在
PersistenceTests.cs中为统一设置仓库失败缓存一致性相关测试补齐剩余.ConfigureAwait(false) - 覆盖保存失败与删除失败两个测试场景中的缓存读取、存在性检查、后续保存和最终验证读取
- 更新 active tracking / trace,明确下一批若继续推进应单独进入
YamlConfigLoaderTests.cs
- 在
- 验证里程碑:
dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --no-incremental- 热点重排前:成功;
253 Warning(s)、0 Error(s) - 修复后:成功;
249 Warning(s)、0 Error(s) - 结论:
PersistenceTests.cs不再出现在 warning 输出中
- 热点重排前:成功;
dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~UnifiedSettingsDataRepository_SaveAsync_When_Persist_Fails_Should_Keep_Cache_Consistent|FullyQualifiedName~UnifiedSettingsDataRepository_DeleteAsync_When_Persist_Fails_Should_Keep_Cache_Consistent"- 结果:成功;
Passed: 2、Failed: 0
- 结果:成功;
- 当前结论:
PersistenceTests.cs的残余 warning 已清零,GFramework.Game.Tests剩余热点几乎全部压缩到了YamlConfigLoaderTests.cs- 当前工作树投影下,分支体积为
27个文件、991行,仍低于$gframework-batch-boot 75 - 按 batch skill 的低风险边界,这一轮应在提交后收口;下一轮再把
YamlConfigLoaderTests.cs作为单独批次处理
2026-04-24 — RP-056
阶段:修复 GeneratedConfigConsumerIntegrationTests 编译错误并清零该文件 warning
- 触发背景:
RP-055继续推进时,GeneratedConfigConsumerIntegrationTests.cs在 raw stringinvalidYaml段落附近出现CS8999,导致GFramework.Game.Tests暂时无法编译- 该文件同时仍是项目内少数残留 warning 热点之一,因此适合作为同一批次中的单文件收尾
- 主线程实施:
- 修复
GeneratedConfigConsumerIntegrationTests.cs中损坏的CreateMonsterFilesraw string 与方法边界,恢复文件可编译状态 - 保留并整理上一轮已开始的
.ConfigureAwait(false)与断言 helper 抽取 - 继续将
AssertGeneratedBindingsLoadResults再拆分为 catalog / monster / item 三个辅助方法,清除该文件剩余MA0051 - 更新 active tracking / trace,沿用
merge-base(origin/main, HEAD)作为$gframework-batch-boot 75的唯一 stop-condition 口径
- 修复
- 验证里程碑:
dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release- 结果:成功;
59 Warning(s)、0 Error(s) - 结论:
GeneratedConfigConsumerIntegrationTests.cs不再出现在 warning 输出中
- 结果:成功;
dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~GeneratedConfigConsumerIntegrationTests"- 结果:成功;
Passed: 4、Failed: 0
- 结果:成功;
- 当前结论:
GFramework.Game.Tests已从RP-055收尾时的63 warning(s)进一步收敛到59 warning(s)- 当前工作树投影下,分支体积为
27个文件、943行,仍低于$gframework-batch-boot 75 - 后续若继续自动推进,最自然的下一批将进入
YamlConfigLoaderTests.cs这类高上下文大文件
2026-04-24 — RP-055
阶段:修正 stop-condition 口径并继续 GFramework.Game.Tests 小热点
- 触发背景:
RP-054之后复核 batch stop-condition 时,发现之前一度把工作树 diff 错当成了 skill 要求的 branch diff- 按正确口径
merge-base(origin/main, HEAD)计算,RP-054提交后的真实分支体积是23个文件、603行,因此仍可继续下一批 - 当前剩余 warning 里,
ArchitectureConfigIntegrationTests、GameConfigBootstrapTests、JsonSerializerTests属于独立且低风险的小切片
- 主线程实施:
- 在
ArchitectureConfigIntegrationTests.cs中补齐异步架构初始化 / 销毁和异常断言的.ConfigureAwait(false) - 在
GameConfigBootstrapTests.cs中补齐启动流程、并发初始化断言与WaitForTaskWithinAsync的.ConfigureAwait(false) - 在
JsonSerializerTests.cs中将坐标解析改为CultureInfo.InvariantCulture - 顺手清理
YamlConfigLoaderAllOfTests.cs与PersistenceTests.cs中上一批遗漏的字段态状态检查和异步等待 warning - 纠正 active tracking:明确 stop-condition 必须使用
origin/main...HEAD的 merge-base 分支 diff,而不是工作树 diff
- 在
- 验证里程碑:
dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release- 并行误用 build/test 时:出现
MSB3026/CS2012文件占用噪声,不计入代码结论 - 串行复验:成功;
63 Warning(s)、0 Error(s)
- 并行误用 build/test 时:出现
dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~ArchitectureConfigIntegrationTests|FullyQualifiedName~GameConfigBootstrapTests|FullyQualifiedName~JsonSerializerTests"- 结果:成功;
Passed: 19、Failed: 0
- 结果:成功;
- 当前结论:
GFramework.Game.Tests已从上一批收尾时的71 warning(s)进一步降到63 warning(s)- 这次提交后的分支体积投影为
26个文件、691行,仍低于$gframework-batch-boot 75 - 剩余热点越来越集中到
YamlConfigLoaderTests.cs与GeneratedConfigConsumerIntegrationTests.cs,后续继续时应把它们视为高上下文批次
2026-04-24 — RP-054
阶段:GFramework.Game.Tests 低风险测试 warning 批次(触发文件数停止阈值)
- 触发背景:
- 用户要求“直接进入下一批”,继续沿
$gframework-batch-boot 75自动推进 warning reduction - 以
origin/main为基线时,上一批提交后分支累计 diff 仍只有8个文件,足够再落一个独立批次 - 重新执行
dotnet clean GFramework.sln -c Release仍停在ValidateSolutionConfiguration,因此继续以直接dotnet build GFramework.sln -c Release的输出挑选低风险热点
- 用户要求“直接进入下一批”,继续沿
- 主线程实施:
- 从整仓
Release build的116 warning(s)入口观测值中,选择GFramework.Game.Tests的小型测试文件和PersistenceTestUtilities.cs作为当前批次,刻意避开YamlConfigLoaderTests.cs这类高上下文大文件 - 在
YamlConfigLoaderIfThenElseTests.cs、YamlConfigLoaderDependentSchemasTests.cs、YamlConfigLoaderDependentRequiredTests.cs、YamlConfigLoaderNegationTests.cs、YamlConfigLoaderAllOfTests.cs、YamlConfigLoaderEnumTests.cs、YamlConfigTextValidatorTests.cs、PersistenceTests.cs中补齐.ConfigureAwait(false),并把字段态_rootPath的ThrowIfNull改为显式InvalidOperationException - 将
PersistenceTestUtilities.cs拆分为TestDataLocation.cs、TestSaveData.cs、TestVersionedSaveData.cs、TestSimpleData.cs、TestNamedData.cs,消除MA0048并对齐仓库的一文件一主类型风格 - 在
YamlConfigSchemaValidatorTests.cs中把字段态_rootPath的校验改成显式状态异常,避免继续触发MA0015
- 从整仓
- 验证里程碑:
dotnet clean GFramework.sln -c Release- 结果:失败;停在
ValidateSolutionConfiguration,0 Warning(s)、0 Error(s)
- 结果:失败;停在
dotnet build GFramework.sln -c Release- 结果:成功;
116 Warning(s)、0 Error(s)
- 结果:成功;
dotnet clean GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release- 结果:失败;clean 阶段提前结束,
0 Warning(s)、0 Error(s)
- 结果:失败;clean 阶段提前结束,
dotnet build GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release- 第一轮批次后:成功;
80 Warning(s)、0 Error(s) - 收尾修正后:成功;
71 Warning(s)、0 Error(s)
- 第一轮批次后:成功;
dotnet test GFramework.Game.Tests/GFramework.Game.Tests.csproj -c Release --filter "FullyQualifiedName~YamlConfigLoaderIfThenElseTests|FullyQualifiedName~YamlConfigLoaderDependentSchemasTests|FullyQualifiedName~YamlConfigLoaderDependentRequiredTests|FullyQualifiedName~YamlConfigLoaderNegationTests|FullyQualifiedName~YamlConfigLoaderAllOfTests|FullyQualifiedName~YamlConfigLoaderEnumTests|FullyQualifiedName~YamlConfigTextValidatorTests|FullyQualifiedName~YamlConfigSchemaValidatorTests|FullyQualifiedName~PersistenceTests"- 结果:成功;
Passed: 63、Failed: 0
- 结果:成功;
- 当前结论:
GFramework.Game.Tests本轮入口热点已从116 warning(s)收敛到71 warning(s),且本轮 touched files 不再出现在 warning 输出中- 当前工作树相对
origin/main的累计 diff 已达到76个文件、986行,超过$gframework-batch-boot 75的主停止阈值 - 按批处理技能规则,本轮必须在提交当前批次后停止;剩余候选应在新一轮里单独评估,尤其是
YamlConfigLoaderTests.cs
2026-04-24 — RP-053
阶段:GFramework.Godot / GFramework.Godot.Tests 小批次 warning 清理
- 触发背景:
- 用户以
$gframework-batch-boot 75要求继续按批次推进 analyzer warning reduction,并以origin/main作为累计分支 diff 基线 - 当前 worktree
fix/analyzer-warning-reduction-batch相对origin/main的已提交分支 diff 为0个文件,具备继续落一个低风险 warning batch 的空间 - solution-level
dotnet clean GFramework.sln -c Release仍在ValidateSolutionConfiguration阶段失败,因此本轮继续用直接dotnet build GFramework.sln -c Release建立热点观察值
- 用户以
- 主线程实施:
- 运行
dotnet build GFramework.sln -c Release,确认当前整仓观测值为1122 warning(s),并从输出中挑选GFramework.Godot的小范围热点作为本轮批次 - 在
GodotYamlConfigEnvironment.cs中按“普通文件系统 / Godot 路径”拆分目录枚举 helper,消除MA0051 - 在
AbstractArchitecture.cs与SceneBehaviorBase.cs中将必须保留 Godot 主线程上下文的 await 显式改为.ConfigureAwait(true),清理MA0004并把线程意图写入注释 - 在
GFramework.Godot.Tests中补齐异步断言的.ConfigureAwait(false),并让RichTextMarkupTests的测试字典显式指定StringComparer.Ordinal
- 运行
- 验证里程碑:
dotnet clean GFramework.sln -c Release- 结果:失败;停在
ValidateSolutionConfiguration,0 Warning(s)、0 Error(s)
- 结果:失败;停在
dotnet build GFramework.sln -c Release- 结果:成功;
1122 Warning(s)、0 Error(s)
- 结果:成功;
dotnet build GFramework.Godot/GFramework.Godot.csproj -c Release- 第一轮修复后:成功;
12 Warning(s)、0 Error(s),仅剩MA0004 - 第二轮修复后:成功;
0 Warning(s)、0 Error(s)
- 第一轮修复后:成功;
dotnet test GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release --filter "FullyQualifiedName~AbstractArchitectureModuleInstallationTests|FullyQualifiedName~GodotYamlConfigLoaderTests|FullyQualifiedName~RichTextMarkupTests"- 结果:成功;
Passed: 15、Failed: 0
- 结果:成功;
dotnet build GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release- 并行验证时:成功;
1 Warning(s)、0 Error(s);MSB3026为与并行dotnet test竞争输出 DLL 的文件占用 - 串行复验:成功;
0 Warning(s)、0 Error(s)
- 并行验证时:成功;
- 当前结论:
GFramework.Godot与GFramework.Godot.Tests本轮直接涉及的 warning 已全部清零- 当前待提交代码批次相对
origin/main的源码 diff 为6个文件、107行,距离$gframework-batch-boot 75主停止阈值仍有充足余量 - 继续推进的下一批候选将主要落在
GFramework.Game等高 warning 基线模块,已不再属于当前同等级低风险切片,因此本轮在这里收口并进入提交
2026-04-24 — RP-052
阶段:PR review follow-up(comparer 契约 + ConfigureAwait(false) 收尾)
- 触发背景:
- 当前分支 PR #283 的最新 review 中,
greptile-apps[bot]仍有一个未解决线程,指出UnifiedSettingsDataRepository.CloneFilefallback 会静默丢失原 comparer - CodeRabbit 另指出
AutoRegisterExportedCollectionsGeneratorTests.cs中还残留 5 处await test.RunAsync();,与同项目其他测试文件的.ConfigureAwait(false)风格不一致
- 当前分支 PR #283 的最新 review 中,
- 主线程实施:
- 复核 PR review JSON、
UnifiedSettingsDataRepository.cs、UnifiedSettingsFile.cs与AutoRegisterExportedCollectionsGeneratorTests.cs的当前代码,确认只有 comparer 契约线程仍属最新 head 上的实质问题 - 将
UnifiedSettingsFile.Sections的 XML 注释补充为显式 comparer 契约,并把默认字典初始化改为StringComparer.Ordinal - 将
CloneFilefallback 从隐式默认 comparer 改为显式StringComparer.Ordinal,并同步修正文档注释,避免继续暗含“保留原语义”的错误表述 - 把
AutoRegisterExportedCollectionsGeneratorTests中剩余的 5 处await test.RunAsync();统一为.ConfigureAwait(false),同时让VerifyDiagnosticsAsync内部也消费ConfigureAwait(false)
- 复核 PR review JSON、
- 验证里程碑:
dotnet build GFramework.Game/GFramework.Game.csproj -c Release- 结果:成功;
533 Warning(s)、0 Error(s);GFramework.Game仍有既有 warning 基线,本轮 follow-up 仅处理 PR review 指向的 comparer 契约与测试异步等待一致性
- 结果:成功;
dotnet build GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj -c Release- 结果:成功;
0 Warning(s)、0 Error(s)
- 结果:成功;
dotnet test GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj -c Release --no-build- 首次并行复验:失败;
FileNotFoundException,原因是--no-build测试在 Release DLL 落盘前启动 - 串行复验:成功;
Passed: 48、Failed: 0
- 首次并行复验:失败;
- 当前结论:
- PR #283 当前仍打开的 comparer review thread 已在本地代码与 XML 注释层面得到对应修复
AutoRegisterExportedCollectionsGeneratorTests的异步等待风格已与同项目其他测试保持一致- 当前改动已通过直接受影响测试项目的 Release build 与串行 Release test 复验,可进入提交阶段
2026-04-24 — RP-051
阶段:GFramework.Godot.SourceGenerators.Tests warning 清零
- 触发背景:
- 用户要求直接运行
dotnet clean,不再添加额外 shell 包装;solution-leveldotnet clean仍然在ValidateSolutionConfiguration阶段失败 - 直接执行仓库根目录
dotnet build成功,并输出1184 warning(s),说明当前真实热点已从GFramework.Godot.SourceGenerators转移到对应测试项目
- 用户要求直接运行
- 主线程实施:
- 以
GFramework.Godot.SourceGenerators.Tests为独立批次,先确认该项目本地基线为24 warning(s) - 在
BindNodeSignalGeneratorTests.cs、AutoSceneGeneratorTests.cs、AutoUiPageGeneratorTests.cs、GetNodeGeneratorTests.cs、AutoRegisterExportedCollectionsGeneratorTests.cs、GodotProjectMetadataGeneratorTests.cs中抽取共享 source / diagnostic helper,压缩重复长方法 - 在
Core/GeneratorTest.cs中补充ConfigureAwait(false),清除项目内唯一MA0004 - 把
GFramework.Godot.SourceGenerators.Tests项目 warning 从24降到0
- 以
- 验证里程碑:
dotnet build- 结果:成功;
1184 Warning(s)、0 Error(s)
- 结果:成功;
dotnet build GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj- 初始结果:成功;
24 Warning(s)、0 Error(s) - 第一批(
BindNodeSignal+GeneratorTest)后:16 Warning(s) - 第二批(
AutoScene/AutoUiPage/GetNode)后:8 Warning(s) - 第三批(
Registration/Project)后:1 Warning(s) - 收尾修复后:成功;
0 Warning(s)、0 Error(s)
- 初始结果:成功;
dotnet build GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj -c Release- 结果:成功;
0 Warning(s)、0 Error(s)
- 结果:成功;
dotnet test GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj -c Release --no-build- 结果:成功;
Passed: 48、Failed: 0
- 结果:成功;
- 当前结论:
GFramework.Godot.SourceGenerators.Tests已在Debug/Release构建下达到0 warning(s)- 按
origin/mainmerge-base 计算并只纳入当前暂存批次时,累计分支 diff 为23个文件,低于$gframework-batch-boot 75的主停止阈值 - 仓库根目录
dotnet clean仍无法稳定产出新的 clean 基线,需要在下一轮单独排查 - 当前 worktree 已有与本批次无关的既有改动;提交时必须只暂存 analyzer warning reduction 相关文件
2026-04-24 — RP-050
阶段:clean-build 基线修正与 GFramework.Godot.SourceGenerators 切片清零
- 触发背景:
- 用户确认之前的
0 Warning(s)来自增量构建假阴性;只有先dotnet clean再dotnet build,warning 才会重新出现 - 用户给出 clean solution build 的真实结果:
Build succeeded with 1193 warning(s)
- 用户确认之前的
- 主线程实施:
- 纠正当前 topic 的 active todo / trace,把 clean build 作为新的 warning 检查真值
- 在
BindNodeSignalGenerator.cs、GetNodeGenerator.cs、GodotProjectMetadataGenerator.cs中完成分阶段方法抽取与字符串比较修正 - 在
Registration/AutoRegisterExportedCollectionsGenerator.cs中拆分TryCreateRegistration,清除最后一个MA0051 - 更新
AGENTS.md,明确 warning 检查必须先dotnet clean再dotnet build
- 验证里程碑:
dotnet clean GFramework.Godot.SourceGenerators/GFramework.Godot.SourceGenerators.csproj -c Release- 结果:成功;
0 Warning(s)、0 Error(s)
- 结果:成功;
dotnet build GFramework.Godot.SourceGenerators/GFramework.Godot.SourceGenerators.csproj -c Release- 首次验证:成功;
1 Warning(s),剩余Registration/AutoRegisterExportedCollectionsGenerator.cs(182,25)MA0051 - 修复后复验:成功;
0 Warning(s)、0 Error(s)
- 首次验证:成功;
- 当前结论:
GFramework.Godot.SourceGenerators已在 cleanReleasebuild 下从 9 个 warning 降到 0 个 warning- 整仓库 warning 基线仍以用户确认的 clean solution build
1193 warning(s)为准 - 下一轮应继续从 clean solution build 输出中选择新的低风险热点
Archive Context
- 当前轮次归档:
- 历史跟踪归档:
- 历史 trace 归档: