fix(core): 统一事件签名并清理MA0046告警#267
Conversation
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 53 minutes and 24 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (10)
📝 Walkthrough总体概览Walkthrough此变更将 GFramework 的事件系统从自定义 Changes
预计代码审查工作量🎯 4 (复杂) | ⏱️ ~45 分钟 相关 PR
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Test ResultsDetails
Insights
build-and-test: Run #917
🎉 All tests passed!Slowest Tests
± Comparison with run #916 at c2fed68 | 🎉 No failed tests detected across all runs. | 🍂 No flaky tests detected across all runs. | ⏱️ Measured over 8 runs. Github Test Reporter by CTRF 💚 |
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|
| dotnet-format | yes | 1 | no | 5.4s | ||
| ✅ REPOSITORY | gitleaks | yes | no | no | 6.22s | |
| ✅ REPOSITORY | trufflehog | yes | no | no | 5.9s |
Detailed Issues
⚠️ CSHARP / dotnet-format - 1 error
Welcome to .NET 9.0!
---------------------
SDK Version: 9.0.114
----------------
Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate, run 'dotnet dev-certs https --trust'
Learn about HTTPS: https://aka.ms/dotnet-https
----------------
Write your first app: https://aka.ms/dotnet-hello-world
Find out what's new: https://aka.ms/dotnet-whats-new
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------
Unhandled exception: System.Exception: Restore operation failed.
at Microsoft.CodeAnalysis.Tools.CodeFormatter.OpenMSBuildWorkspaceAsync(String solutionOrProjectPath, WorkspaceType workspaceType, Boolean noRestore, Boolean requiresSemantics, String binaryLogPath, Boolean logWorkspaceWarnings, ILogger logger, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Tools.CodeFormatter.FormatWorkspaceAsync(FormatOptions formatOptions, ILogger logger, CancellationToken cancellationToken, String binaryLogPath)
at Microsoft.CodeAnalysis.Tools.FormatCommandCommon.FormatAsync(FormatOptions formatOptions, ILogger`1 logger, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Tools.Commands.RootFormatCommand.FormatCommandDefaultHandler.InvokeAsync(ParseResult parseResult, CancellationToken cancellationToken)
at System.CommandLine.Invocation.InvocationPipeline.InvokeAsync(ParseResult parseResult, CancellationToken cancellationToken)
See detailed reports in MegaLinter artifacts
Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff

Show us your support by starring ⭐ the repository
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
GFramework.Core/Architectures/ArchitecturePhaseCoordinator.cs (1)
40-58:⚠️ Potential issue | 🟡 Minor同步阶段顺序注释,避免继续声明 coordinator 会触发外部事件。
EnterPhase现在只更新阶段、通知生命周期钩子和容器监听器;外部PhaseChanged已由上层 relay 负责。这里的“→ 外部事件”会误导后续维护者。建议调整注释
- /// 顺序保持为“更新阶段值 → 生命周期钩子 → 容器中的阶段监听器 → 外部事件”, - /// 以兼容既有调用约定。 + /// 顺序保持为“更新阶段值 → 生命周期钩子 → 容器中的阶段监听器”。 + /// 外部阶段事件由 <see cref="ArchitectureLifecycle" /> / <see cref="Architecture" /> + /// 在上层中继,以保证公开事件的 sender 始终是实际发布者。As per coding guidelines, “Comments must explain intent, contract, and usage constraints instead of restating syntax.”
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@GFramework.Core/Architectures/ArchitecturePhaseCoordinator.cs` around lines 40 - 58, Update the XML summary on EnterPhase to not state that entering a phase triggers external events; this method updates CurrentPhase, logs the change, and calls NotifyLifecycleHooks and NotifyPhaseListeners only (external PhaseChanged/relay is handled by the upper layer). Edit the comment for EnterPhase to describe intent/ordering as "update phase → lifecycle hooks → container listeners" and remove or reword the "→ external events" clause so it documents the contract accurately for EnterPhase, NotifyLifecycleHooks and NotifyPhaseListeners.
🧹 Nitpick comments (1)
docs/zh-CN/core/lifecycle.md (1)
137-145: 补一段事件签名迁移说明。这里的新示例已经对齐
EventHandler<ArchitecturePhaseChangedEventArgs>,但这次是公开事件契约变更,建议明确提示旧写法phase => ...需要迁移为(_, args) => ...并通过args.Phase取值,避免用户升级时只看到示例但不知道兼容性影响。As per coding guidelines,docs/zh-CN/**: “When a feature is added, removed, renamed, or substantially refactored, contributors MUST update or create the corresponding user-facing integration documentation ... and migration or compatibility notes when behavior changes.”🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/zh-CN/core/lifecycle.md` around lines 137 - 145, Add a short migration note explaining that the PhaseChanged event signature changed to use EventHandler<ArchitecturePhaseChangedEventArgs>, so callers using the old single-parameter lambda form (e.g., phase => ...) must update to the new handler shape (_, args) => ... and read the phase via args.Phase; reference the PhaseChanged event and ArchitecturePhaseChangedEventArgs in the note so readers know which API changed and how to adapt their code.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md`:
- Around line 129-133: Clarify the baseline used for RP-013's "9 Warning(s)" so
readers don't think warnings regressed from RP-012's "0 Warning(s)"; either
state the baseline explicitly (e.g., "relative to RP-009/RP-011 warnings-only
baseline of 15, reduced to 9 for RP-013") or correct RP-012's recorded result so
the sequence is consistent, and ensure the RP-013 entry (the line with `dotnet
build ... -clp:"Summary;WarningsOnly"`) also records the next recovery point and
verification outcome per the ai-plan/public/*/todos/** tracking convention.
In `@docs/zh-CN/core/architecture.md`:
- Around line 126-128: The docs mention PhaseChanged now follows
EventHandler<ArchitecturePhaseChangedEventArgs> but lack a copy-pastable
subscription example and migration guidance; add a short, ready-to-copy snippet
showing subscribing as (sender, args) => { if (args.Phase ==
ArchitecturePhase.Ready) { /* ... */ } } and include a one-line migration note
that existing single-parameter handlers like phase => ... should be converted to
(_, args) => ... and use args.Phase (reference the PhaseChanged event,
ArchitecturePhaseChangedEventArgs type, args.Phase property, and
ArchitecturePhase.Ready enum value).
In `@GFramework.Core.Tests/Coroutine/CoroutineSchedulerTests.cs`:
- Around line 367-380: The test
Scheduler_Should_Raise_OnCoroutineException_With_EventArgs currently awaits
exceptionSource.Task without a local timeout; add a test-level timeout when
awaiting the TaskCompletionSource triggered by _scheduler.OnCoroutineException
to fail fast if the event never fires. Modify the await of exceptionSource.Task
to use a bounded wait (e.g., Task.WhenAny/Task.WaitAsync or equivalent) and
throw/assert a failure if the timeout elapses, keeping the rest of the test
(subscription to _scheduler.OnCoroutineException, CreateExceptionCoroutine(),
_scheduler.Update(), and the observation handling) unchanged.
In `@GFramework.Core/Architectures/Architecture.cs`:
- Around line 101-104: Update the XML doc for the public event PhaseChanged on
the Architecture class to state the event contract: subscribers should read the
new phase via eventArgs.Phase, the sender parameter will always be the current
Architecture instance (not internal fields like _lifecycle), and note any
thread/ordering constraints or expected usage (e.g., for testing and
extensions). Reference ArchitecturePhaseChangedEventArgs in the summary and
clarify that handlers must not rely on sender being anything other than the
Architecture instance.
In `@GFramework.Core/Coroutine/CoroutineExceptionEventArgs.cs`:
- Around line 14-18: Add XML documentation to the public constructor
CoroutineExceptionEventArgs(CoroutineHandle handle, Exception exception) in
class CoroutineExceptionEventArgs: include a <summary> describing the
constructor purpose, <param name="handle"> and <param name="exception"> entries,
and an <exception cref="System.ArgumentNullException"> entry that documents that
exception is thrown when the exception parameter is null; ensure tags follow
existing project style and placed immediately above the constructor declaration.
In `@GFramework.Core/Logging/Appenders/AsyncLogAppender.cs`:
- Around line 118-121: The explicit interface implementation
ILogAppender.Flush() currently invokes OnFlushCompleted after calling the public
Flush(), causing duplicate completion events because Flush() itself raises
OnFlushCompleted; update ILogAppender.Flush() (the explicit implementation) to
call the public Flush() but not raise OnFlushCompleted again (remove the extra
OnFlushCompleted invocation and AsyncLogFlushCompletedEventArgs creation), and
add a unit test that invokes the appender via the ILogAppender interface and via
the concrete class to assert only one OnFlushCompleted notification is raised
per flush; ensure the same change is applied to the other duplicated block
around the Flush/OnFlushCompleted pair (lines referenced in code: Flush(),
ILogAppender.Flush(), OnFlushCompleted, AsyncLogFlushCompletedEventArgs).
---
Outside diff comments:
In `@GFramework.Core/Architectures/ArchitecturePhaseCoordinator.cs`:
- Around line 40-58: Update the XML summary on EnterPhase to not state that
entering a phase triggers external events; this method updates CurrentPhase,
logs the change, and calls NotifyLifecycleHooks and NotifyPhaseListeners only
(external PhaseChanged/relay is handled by the upper layer). Edit the comment
for EnterPhase to describe intent/ordering as "update phase → lifecycle hooks →
container listeners" and remove or reword the "→ external events" clause so it
documents the contract accurately for EnterPhase, NotifyLifecycleHooks and
NotifyPhaseListeners.
---
Nitpick comments:
In `@docs/zh-CN/core/lifecycle.md`:
- Around line 137-145: Add a short migration note explaining that the
PhaseChanged event signature changed to use
EventHandler<ArchitecturePhaseChangedEventArgs>, so callers using the old
single-parameter lambda form (e.g., phase => ...) must update to the new handler
shape (_, args) => ... and read the phase via args.Phase; reference the
PhaseChanged event and ArchitecturePhaseChangedEventArgs in the note so readers
know which API changed and how to adapt their code.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: a8955d66-b158-4dd7-9cb3-e5c716e545a3
📒 Files selected for processing (18)
GFramework.Core.Abstractions/Architectures/ArchitecturePhaseChangedEventArgs.csGFramework.Core.Abstractions/Logging/AsyncLogFlushCompletedEventArgs.csGFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.csGFramework.Core.Tests/Architectures/TestArchitectureBase.csGFramework.Core.Tests/Coroutine/CoroutineSchedulerTests.csGFramework.Core.Tests/Logging/AsyncLogAppenderTests.csGFramework.Core/Architectures/Architecture.csGFramework.Core/Architectures/ArchitectureLifecycle.csGFramework.Core/Architectures/ArchitecturePhaseCoordinator.csGFramework.Core/Coroutine/CoroutineExceptionEventArgs.csGFramework.Core/Coroutine/CoroutineFinishedEventArgs.csGFramework.Core/Coroutine/CoroutineScheduler.csGFramework.Core/Logging/Appenders/AsyncLogAppender.csGFramework.Godot/Coroutine/Timing.csai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.mdai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.mddocs/zh-CN/core/architecture.mddocs/zh-CN/core/lifecycle.md
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Analyze (C#)
- GitHub Check: Build and Test
- GitHub Check: Code Quality & Security
🧰 Additional context used
📓 Path-based instructions (8)
docs/**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
Documentation should be organized with Chinese content in docs/zh-CN/ and structured to include getting started, module-specific capabilities (Core, Game, Godot, ECS), source generator usage, tutorials, best practices, and troubleshooting
Files:
docs/zh-CN/core/architecture.mddocs/zh-CN/core/lifecycle.md
docs/zh-CN/**
📄 CodeRabbit inference engine (AGENTS.md)
When a feature is added, removed, renamed, or substantially refactored, contributors MUST update or create the corresponding user-facing integration documentation in
docs/zh-CN/in the same change. For integration-oriented features, documentation MUST cover project directory layout, file conventions, required project/package wiring, minimal working usage example, and migration or compatibility notes when behavior changes.
Files:
docs/zh-CN/core/architecture.mddocs/zh-CN/core/lifecycle.md
docs/**
📄 CodeRabbit inference engine (AGENTS.md)
Update the relevant
README.mdordocs/page when behavior, setup steps, architecture guidance, or user-facing examples change. Keep code samples, package names, and command examples aligned with the current repository state. Prefer documenting behavior and design intent, not only API surface.
Files:
docs/zh-CN/core/architecture.mddocs/zh-CN/core/lifecycle.md
**/*.cs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.cs: Apply [Log] attribute for automatic logging field and logging helper method generation
Apply [Priority] attribute for automatic priority comparison implementation generation
Apply [GenerateEnumExtensions] attribute to generate enumeration extension capabilities
Apply [ContextAware] attribute to automatically implement IContextAware boilerplate logic
**/*.cs: All public, protected, and internal types and members MUST include XML documentation comments (///) using<summary>,<param>,<returns>,<exception>, and<remarks>tags where applicable. Comments must explain intent, contract, and usage constraints instead of restating syntax.
Add inline comments for non-trivial logic, concurrency or threading behavior, performance-sensitive paths, workarounds and compatibility constraints, edge cases, registration order, lifecycle sequencing, or generated code assumptions. Avoid obvious comments such as// increment i.
Core framework components such as Architecture, Module, System, Context, Registry, Service Module, and Lifecycle types MUST include high-level explanations of responsibilities, lifecycle, interaction with other components, why the abstraction exists, and when to use it instead of alternatives.
Generated logic and generator pipelines MUST explain what is generated, why it is generated, the semantic assumptions the generator relies on, and any diagnostics or fallback behavior.
Methods with non-trivial logic MUST document the core idea, key decisions, and edge case handling, if any.
Follow repository defaults:ImplicitUsingsdisabled,Nullableenabled,GenerateDocumentationFileenabled for shipped libraries, andLangVersiongenerallypreviewin main libraries and abstractions. Do not rely on implicit imports; declare every requiredusingexplicitly.
Use the namespace patternGFramework.{Module}.{Feature}with PascalCase segments. Follow standard C# naming: Types, methods, properties, events, and constants use PascalCase; int...
Files:
GFramework.Core/Architectures/ArchitecturePhaseCoordinator.csGFramework.Godot/Coroutine/Timing.csGFramework.Core.Tests/Architectures/TestArchitectureBase.csGFramework.Core.Abstractions/Logging/AsyncLogFlushCompletedEventArgs.csGFramework.Core/Architectures/ArchitectureLifecycle.csGFramework.Core.Abstractions/Architectures/ArchitecturePhaseChangedEventArgs.csGFramework.Core.Tests/Logging/AsyncLogAppenderTests.csGFramework.Core.Tests/Coroutine/CoroutineSchedulerTests.csGFramework.Core/Logging/Appenders/AsyncLogAppender.csGFramework.Core/Architectures/Architecture.csGFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.csGFramework.Core/Coroutine/CoroutineFinishedEventArgs.csGFramework.Core/Coroutine/CoroutineExceptionEventArgs.csGFramework.Core/Coroutine/CoroutineScheduler.cs
**/*Abstractions/**/*.cs
📄 CodeRabbit inference engine (CLAUDE.md)
Abstractions projects should only contain interfaces and contract definitions without any runtime implementation logic
Files:
GFramework.Core.Abstractions/Logging/AsyncLogFlushCompletedEventArgs.csGFramework.Core.Abstractions/Architectures/ArchitecturePhaseChangedEventArgs.cs
ai-plan/public/**
📄 CodeRabbit inference engine (AGENTS.md)
Contributors MUST keep committed
ai-plan/public/**content safe to publish in Git history. Never write secrets, tokens, credentials, private keys, machine usernames, home-directory paths, hostnames, IP addresses, proprietary URLs, or other sensitive environment details into anyai-plan/**file. Never record absolute file-system paths; use repository-relative paths, branch names, PR numbers, or stable document identifiers instead.
Files:
ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.mdai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md
ai-plan/public/*/traces/**
📄 CodeRabbit inference engine (AGENTS.md)
Contributors MUST maintain a matching execution trace under
ai-plan/public/<topic>/traces/for complex work. The trace should record the current date, key decisions, validation milestones, and the immediate next step. When a stage is fully complete, move finished artifacts to that topic'sarchive/directory instead of leaving every step in the default boot path.
Files:
ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md
ai-plan/public/*/todos/**
📄 CodeRabbit inference engine (AGENTS.md)
When working from a tracked implementation plan, contributors MUST update the corresponding tracking document under
ai-plan/public/<topic>/todos/in the same change. Tracking updates MUST reflect completed work, newly discovered issues, validation results, and the next recommended recovery point. For any multi-step refactor, migration, or cross-module task, create or adopt a dedicated recovery document. Recovery documents MUST record the current phase, active recovery point identifier, known risks, and the next recommended resume step.
Files:
ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md
🧠 Learnings (7)
📚 Learning: 2026-04-21T04:45:15.341Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-21T04:45:15.341Z
Learning: Applies to docs/zh-CN/** : When a feature is added, removed, renamed, or substantially refactored, contributors MUST update or create the corresponding user-facing integration documentation in `docs/zh-CN/` in the same change. For integration-oriented features, documentation MUST cover project directory layout, file conventions, required project/package wiring, minimal working usage example, and migration or compatibility notes when behavior changes.
Applied to files:
docs/zh-CN/core/architecture.md
📚 Learning: 2026-04-17T11:35:08.762Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-17T11:35:08.762Z
Learning: Lifecycle management in Architecture implementations should handle Init, Ready, and Destroy phases with fine-grained initialization and destruction stages to maintain order consistency across Utility, Model, System, service modules, and hooks
Applied to files:
docs/zh-CN/core/architecture.mdGFramework.Core/Architectures/ArchitecturePhaseCoordinator.csGFramework.Core/Architectures/Architecture.csGFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.cs
📚 Learning: 2026-04-06T12:45:43.921Z
Learnt from: GeWuYou
Repo: GeWuYou/GFramework PR: 190
File: GFramework.Game/Config/GameConfigBootstrap.cs:1-3
Timestamp: 2026-04-06T12:45:43.921Z
Learning: In the GeWuYou/GFramework repository, C# files may omit explicit `using System*` imports because the project-wide `GlobalUsings.cs` (referenced via manual global `using` directives) supplies common namespaces (e.g., `System`, `System.Threading`, `System.Threading.Tasks`). During code review, do not flag missing `using System...` directives in `.cs` files as long as `GlobalUsings.cs` is present/used to provide those namespaces.
Applied to files:
GFramework.Core/Architectures/ArchitecturePhaseCoordinator.csGFramework.Godot/Coroutine/Timing.csGFramework.Core.Tests/Architectures/TestArchitectureBase.csGFramework.Core.Abstractions/Logging/AsyncLogFlushCompletedEventArgs.csGFramework.Core/Architectures/ArchitectureLifecycle.csGFramework.Core.Abstractions/Architectures/ArchitecturePhaseChangedEventArgs.csGFramework.Core.Tests/Logging/AsyncLogAppenderTests.csGFramework.Core.Tests/Coroutine/CoroutineSchedulerTests.csGFramework.Core/Logging/Appenders/AsyncLogAppender.csGFramework.Core/Architectures/Architecture.csGFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.csGFramework.Core/Coroutine/CoroutineFinishedEventArgs.csGFramework.Core/Coroutine/CoroutineExceptionEventArgs.csGFramework.Core/Coroutine/CoroutineScheduler.cs
📚 Learning: 2026-04-21T04:45:15.341Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-21T04:45:15.341Z
Learning: Applies to **/Tests/**/*.cs : Mirror the source structure in test projects whenever practical. Reuse existing architecture test infrastructure when relevant: `ArchitectureTestsBase<T>`, `SyncTestArchitecture`, `AsyncTestArchitecture`. Keep tests focused on observable behavior, not implementation trivia.
Applied to files:
GFramework.Core.Tests/Architectures/TestArchitectureBase.csGFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.cs
📚 Learning: 2026-04-21T04:45:15.341Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-21T04:45:15.341Z
Learning: Applies to **/Tests/**/*.cs : Every non-trivial feature, bug fix, or behavior change MUST include tests or an explicit justification for why a test is not practical. Public API changes must be covered by unit or integration tests. When a public API defines multiple contract branches, tests MUST cover meaningful variants including null, empty, default, and filtered inputs. Regression fixes should include a test that fails before the fix and passes after it.
Applied to files:
GFramework.Core.Tests/Architectures/ArchitectureLifecycleBehaviorTests.cs
📚 Learning: 2026-04-21T04:45:15.341Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-21T04:45:15.341Z
Learning: Applies to ai-plan/public/*/todos/** : When working from a tracked implementation plan, contributors MUST update the corresponding tracking document under `ai-plan/public/<topic>/todos/` in the same change. Tracking updates MUST reflect completed work, newly discovered issues, validation results, and the next recommended recovery point. For any multi-step refactor, migration, or cross-module task, create or adopt a dedicated recovery document. Recovery documents MUST record the current phase, active recovery point identifier, known risks, and the next recommended resume step.
Applied to files:
ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md
📚 Learning: 2026-04-21T04:45:15.341Z
Learnt from: CR
Repo: GeWuYou/GFramework PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-04-21T04:45:15.341Z
Learning: When a stage inside an active topic is fully complete, move the finished artifacts into that topic's `archive/` directory instead of leaving every completed step in the default boot path. When completed and validated stages accumulate, archive their detailed history out of the active `todos/` and `traces/` entry files. Keep only the current recovery point, active facts, active risks, immediate next step, and pointers to relevant archive files.
Applied to files:
ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md
🪛 LanguageTool
ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md
[grammar] ~31-~31: Ensure spelling is correct
Context: ...t 独立编译验证 - 当前结论: - MA0046 已从 active 批次中移除 - 剩余 GFramework.Core net8.0 warni...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
ai-plan/public/analyzer-warning-reduction/todos/analyzer-warning-reduction-tracking.md
[uncategorized] ~15-~15: 您的意思是“"不"跑”?
Context: ...lback package folder 干扰,独立 build 需在修复资产后补跑 - 后续继续按 warning 类型和数量批处理,而不是回退到按单文件切...
(BU)
[uncategorized] ~64-~64: 您的意思是“"不"齐”?
Context: ... - 缓解措施:优先选择不改公共 API 的低风险切法;若必须触达公共契约,先补齐 XML 契约说明与定向测试 - 测试宿主稳定性风险:部分 Godot 失败路...
(BU)
[uncategorized] ~70-~70: 您的意思是“"不"跑”?
Context: ... 侧 restore 资产或 Windows-hosted 构建链刷新该项目,再补跑定向 build - 并行实现风险:批量收敛时若 subagent 写入边界不...
(BU)
[uncategorized] ~145-~145: 您的意思是“"不"跑”?
Context: ...work.Godot,先修复该项目的 Linux 侧 restore 资产,再补跑独立 build 4. 若本主题确认暂缓,可保持当前归档状态,不需要再恢复 ...
(BU)
🔇 Additional comments (4)
GFramework.Core.Abstractions/Architectures/ArchitecturePhaseChangedEventArgs.cs (1)
5-23: 这组事件参数契约看起来没问题。类型保持不可变,只暴露阶段值,并且放在 Abstractions 中作为跨层事件契约使用是合理的。
GFramework.Core/Coroutine/CoroutineFinishedEventArgs.cs (1)
5-41: 完成事件参数契约看起来没问题。不可变 payload 与
CoroutineCompletionStatus/ 可选异常的语义匹配,适合用于新的EventHandler<CoroutineFinishedEventArgs>事件。ai-plan/public/analyzer-warning-reduction/traces/analyzer-warning-reduction-trace.md (1)
3-33: 这条 RP-013 trace 记录完整。日期、决策、验证结果、失败验证的环境原因和下一步都覆盖到了,也没有看到不适合提交到
ai-plan/public/**的敏感信息。GFramework.Core/Coroutine/CoroutineScheduler.cs (1)
87-102: 事件签名和触发 payload 已对齐标准模式。两个事件都按
EventHandler<TEventArgs>暴露,并在触发时使用调度器实例作为sender;完成/异常 payload 也与新增 EventArgs 类型一致。Also applies to: 622-625, 638-646
- 修复 AsyncLogAppender 接口刷新路径重复触发完成事件,并补充单次通知回归测试 - 补充 Architecture、CoroutineExceptionEventArgs 与阶段协调器的事件契约注释 - 更新 PhaseChanged 迁移文档与 analyzer-warning-reduction recovery 记录
Summary
Test ResultsDetails
Insights
Fail Rate
build-and-test: Run #920
❌ Some tests failed!
Slowest Tests
± Comparison with run #917 at 8758269 | 🍂 No flaky tests detected across all runs. | ⏱️ Measured over 9 runs. Github Test Reporter by CTRF 💚 |
- 修复 AsyncLogAppender 在队列已被后台线程提前清空时 Flush 仍可能超时失败的问题 - 新增 AsyncLogAppender 已处理队列场景的稳定回归测试并重新验证 GFramework.Core.Tests - 更新 analyzer-warning-reduction 的 tracking 与 trace 记录 PR267 failed-test follow-up
Summary
Test ResultsDetails
Insights
Fail Rate
build-and-test: Run #921
🎉 All tests passed!Slowest Tests
± Comparison with run #920 at 3bb1b5f | 🍂 No flaky tests detected across all runs. | ⏱️ Measured over 10 runs. Github Test Reporter by CTRF 💚 |
Summary by CodeRabbit
发布说明
新增功能
测试
文档