From b1f406ad99383b02d4e4c4f14ceb1437d30ccc98 Mon Sep 17 00:00:00 2001 From: gewuyou <95328647+GeWuYou@users.noreply.github.com> Date: Mon, 4 May 2026 19:17:48 +0800 Subject: [PATCH] =?UTF-8?q?test(cqrs):=20=E8=A1=A5=E9=BD=90=20request=20ha?= =?UTF-8?q?ndler=20gate=20=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增缺少 IRequestHandler 合同时的 generator 静默跳过覆盖 - 更新 CQRS 恢复文档与本轮验证记录 --- .../Cqrs/CqrsHandlerRegistryGeneratorTests.cs | 3 ++ .../todos/cqrs-rewrite-migration-tracking.md | 16 ++++++++--- .../traces/cqrs-rewrite-migration-trace.md | 28 +++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs b/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs index 5e1c67d5..545577f2 100644 --- a/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs +++ b/GFramework.SourceGenerators.Tests/Cqrs/CqrsHandlerRegistryGeneratorTests.cs @@ -2344,6 +2344,9 @@ public class CqrsHandlerRegistryGeneratorTests [TestCase( "public interface INotificationHandler", "public interface IStreamRequestHandler")] + [TestCase( + "public interface IRequestHandler", + "rename:MissingIRequestHandler")] [TestCase( "public interface IStreamRequestHandler", "rename:MissingIStreamRequestHandler")] diff --git a/ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md b/ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md index d5d2665c..5853218b 100644 --- a/ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md +++ b/ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md @@ -7,7 +7,7 @@ CQRS 迁移与收敛。 ## 当前恢复点 -- 恢复点编号:`CQRS-REWRITE-RP-081` +- 恢复点编号:`CQRS-REWRITE-RP-082` - 当前阶段:`Phase 8` - 当前 PR 锚点:`PR #307` - 当前结论: @@ -16,8 +16,9 @@ CQRS 迁移与收敛。 - `RP-078` 已补齐 mixed fallback metadata 在 runtime 不允许多个 fallback attribute 实例时的单字符串 attribute 回退回归 - `RP-079` 已补齐 runtime 缺少 generated handler registry interface 时的 generator 静默跳过回归 - `RP-080` 已将基础 generation gate 回归扩展到 notification handler interface、stream handler interface 与 registry attribute 缺失分支 - - 当前 `RP-081` 已继续补齐基础 generation gate 的 logging 与 DI runtime contract 缺失分支 - - `ai-plan` active 入口现以 `PR #307` 和 `RP-081` 为唯一权威恢复锚点;更早 PR 与阶段细节均以下方归档为准 + - `RP-081` 已继续补齐基础 generation gate 的 logging 与 DI runtime contract 缺失分支 + - 当前 `RP-082` 已补齐基础 generation gate 的 request handler runtime contract 缺失分支 + - `ai-plan` active 入口现以 `PR #307` 和 `RP-082` 为唯一权威恢复锚点;更早 PR 与阶段细节均以下方归档为准 ## 当前活跃事实 @@ -76,11 +77,18 @@ CQRS 迁移与收敛。 - 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行 - `git diff --check` - 结果:通过 +- `dotnet test GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj -c Release --filter "FullyQualifiedName~CqrsHandlerRegistryGeneratorTests.Does_Not_Generate_Registry_When_Runtime_Lacks_Required_Generation_Contract"` + - 结果:通过,`7/7` passed +- `python3 scripts/license-header.py --check` + - 结果:通过 + - 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行 +- `git diff --check` + - 结果:通过 ## 下一推荐步骤 1. 继续处理 `PR #307` 的剩余 review 收尾,优先保持 `ai-plan` active 入口与 trace 的单一锚点一致 -2. 若继续推进代码切片,优先复核基础 generation gate 中 request handler contract 与 handler registry attribute 以外是否还有可安全构造的缺失分支 +2. 若继续推进代码切片,优先复核基础 generation gate 之外的 runtime contract 或 fallback selection 分支;基础 gate 的可安全构造缺失分支已覆盖 3. 在进入下一批 runtime / generator 收敛前,保持最小 Release build 或 targeted test 作为权威验证 ## 活跃文档 diff --git a/ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md b/ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md index 276d815f..58669018 100644 --- a/ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md +++ b/ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md @@ -157,3 +157,31 @@ 1. 继续复算 branch diff vs `origin/main`,若仍低于 `25` 个文件可继续下一批 2. 下一批优先复核基础 generation gate 中 request handler contract 与 handler registry attribute 以外是否还有可安全构造的缺失分支 + +### 阶段:基础 generated registry request handler gate 回归(CQRS-REWRITE-RP-082) + +- 延续 `RP-081` 的基础 generation gate 参数化测试,补齐 `IRequestHandler` 缺失分支 +- 该变体同样通过类型重命名构造 runtime metadata miss,保持输入源码可编译 +- 至此基础 generation gate 中可安全构造的缺失分支已覆盖: + - request handler interface + - notification handler interface + - stream handler interface + - handler registry interface + - handler registry attribute + - logging interface + - DI service collection interface + +### 验证(RP-082) + +- `dotnet test GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj -c Release --filter "FullyQualifiedName~CqrsHandlerRegistryGeneratorTests.Does_Not_Generate_Registry_When_Runtime_Lacks_Required_Generation_Contract"` + - 结果:通过,`7/7` passed +- `python3 scripts/license-header.py --check` + - 结果:通过 + - 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行 +- `git diff --check` + - 结果:通过 + +### 当前下一步(RP-082) + +1. 继续复算 branch diff vs `origin/main`,若仍低于 `25` 个文件可继续下一批 +2. 下一批优先复核基础 generation gate 之外的 runtime contract 或 fallback selection 分支;基础 gate 的可安全构造缺失分支已覆盖