Compare commits

...

1849 Commits

Author SHA1 Message Date
gewuyou
4837aa2a23
Merge pull request #350 from GeWuYou/feat/cqrs-optimization
Feat/Add Mediator support to benchmark suites and update documentation
2026-05-12 20:37:56 +08:00
gewuyou
2dd9435cea fix(cqrs-benchmarks): 修正Mediator基准运行时配置
- 修正 BenchmarkHostFactory 的 Mediator 宿主接线,统一使用 Singleton 编译期 lifetime

- 更新 RequestLifetimeBenchmarks 与 README,撤回当前不可运行的 Mediator 生命周期矩阵并同步覆盖边界

- 补充 cqrs-rewrite 跟踪,记录 PR #350 评审真值、故障根因与 smoke run 验证结果
2026-05-12 16:41:14 +08:00
gewuyou
e3532fc2c8 feat(cqrs-benchmarks): 补齐request生命周期的Mediator对照
- 新增 RequestLifetimeBenchmarks 的 Mediator lifetime parity,并按编译期常量分支生成 Singleton、Scoped、Transient 宿主

- 更新 benchmark README 的 request lifetime coverage 与当前缺口说明,使其反映最新对照矩阵

- 修复 RequestBenchmarks 与 NotificationBenchmarks 的 XML 文档漂移,并同步 ai-plan 恢复点与验证结论
2026-05-12 15:44:54 +08:00
gewuyou
092946e91a docs(cqrs-benchmarks): 同步startup基准文档边界
- 更新 README 中 stream/request/notification startup benchmark 的覆盖矩阵与适用边界

- 补充 cqrs-rewrite public tracking 与 trace,记录本轮误报剔除、docs-only 收尾与停止判断
2026-05-12 14:18:18 +08:00
gewuyou
c32a1ec4ae docs(cqrs-benchmarks): 补齐stream与notification基准返回值文档
- 补充 stream 与 notification benchmark 公开方法缺失的 XML returns 契约

- 更新 request startup benchmark 的返回值文档说明

- 同步 cqrs-rewrite 的批处理恢复点与停点决策
2026-05-12 13:36:54 +08:00
gewuyou
555c7c07ac docs(cqrs-benchmarks): 补齐 request benchmark 返回值文档
- 补充 RequestBenchmarks 公开 benchmark 方法的 XML returns 契约

- 补充 RequestPipelineBenchmarks 公开 benchmark 方法的 XML returns 契约
2026-05-12 13:34:12 +08:00
gewuyou
ab422b05db docs(cqrs-benchmarks): 补齐 request benchmark 返回值注释
- 补充 RequestInvokerBenchmarks 公开 benchmark 方法缺失的 XML returns 契约

- 补充 RequestLifetimeBenchmarks 公开 benchmark 方法缺失的 XML returns 契约
2026-05-12 13:33:50 +08:00
gewuyou
a016e3d4a4 docs(cqrs-benchmarks): 同步 stream benchmark 恢复信息
- 更新 StreamingBenchmarks 的 XML 返回值注释并收口 README 中的 stream startup/gap 描述。

- 补充 cqrs-rewrite tracking 与 trace,记录 PR #349 合并后的新基线、startup parity 进展与下一恢复点。
2026-05-12 13:21:46 +08:00
gewuyou
f346110a8a feat(cqrs-benchmarks): 补齐 stream startup 的 Mediator 对照路径
- 新增 StreamStartupBenchmarks 的 Mediator 初始化与 cold-start benchmark。

- 更新 stream request 与 handler 契约以接入 NuGet Mediator source-generated concrete path。
2026-05-12 13:17:52 +08:00
gewuyou
2b2bec6532
Merge pull request #349 from GeWuYou/feat/cqrs-optimization
Feat/Add stream pipeline benchmarks and test coverage
2026-05-12 11:49:39 +08:00
gewuyou
e746fede7e chore(cqrs-rewrite): 修复PR349评审遗留问题
- 更新 stream benchmark 的 XML 返回值契约

- 修复通知发布器缓存回归测试的误导性安全网

- 同步 ai-plan 中的当前 PR 锚点与验证结果
2026-05-12 11:15:13 +08:00
gewuyou
d85b85c614 chore(cqrs-rewrite): 对齐最终批处理指标
- 更新 cqrs-rewrite 的 active tracking 与 trace,确保停止时的 branch diff 指标与当前分支状态一致
2026-05-12 10:32:12 +08:00
gewuyou
d7e142f03f chore(cqrs-rewrite): 校正恢复指标
- 更新 cqrs-rewrite 的 active tracking 与 trace 指标,确保 branch diff 与下一步建议反映当前提交后状态
2026-05-12 10:32:12 +08:00
gewuyou
370ea20de8 chore(cqrs-rewrite): 更新批处理恢复点
- 更新 cqrs-rewrite 的 active tracking 与 trace,回填本轮多波 batch 的基线、验证与停点结论

- 修复 StreamPipelineBenchmarks 的 trailing whitespace,确保 git diff --check 通过
2026-05-12 10:32:12 +08:00
gewuyou
40efb4f763 test(cqrs-benchmarks): 补齐 stream steady-state Mediator 对照
- 新增 StreamingBenchmarks 中的 Mediator steady-state stream 对照与对应 handler 契约。

- 更新 benchmark README 的 stream coverage 与 gap 描述,使其与当前实现一致。
2026-05-12 10:32:12 +08:00
gewuyou
4cc7060fcf test(cqrs): 补充通知回退回归覆盖
- 新增默认 notification publisher fallback 与缓存行为的回归测试

- 验证容器无 publisher 时继续使用顺序发布语义且不重复查容器
2026-05-12 10:32:11 +08:00
gewuyou
ee8d65279e test(cqrs-benchmarks): 新增 stream pipeline benchmark 覆盖
- 新增 StreamPipelineBenchmarks,覆盖 0/1/4 个 stream pipeline 行为与 FirstItem/DrainAll 观测矩阵

- 内联 GeneratedStreamPipelineBenchmarkRegistry,保持默认 generated-provider benchmark 宿主接线口径

- 更新 benchmark README,补齐 stream pipeline coverage、运行示例与缺口说明
2026-05-12 10:32:11 +08:00
gewuyou
5e9b903d0f test(cqrs): 补充 registrar 激活失败分支测试
- 补充 generated registry 为抽象类型时的回退与抛错覆盖
- 补充 generated registry 缺少无参构造器时的回退与抛错覆盖
2026-05-12 10:32:11 +08:00
gewuyou
75e7785592 test(cqrs): 补充注册服务边界测试
- 补充空程序集输入时不触发 registrar 的回归测试
- 验证忽略空项后按稳定程序集键排序并去重的注册顺序
- 验证跨调用跳过已注册程序集键时仍继续处理剩余新程序集
2026-05-12 10:32:11 +08:00
gewuyou
ef4d3d5ddf
Merge pull request #348 from GeWuYou/feat/cqrs-optimization
Feat/Enhance CQRS benchmarks coverage and generated invoker descriptor validation
2026-05-11 17:33:43 +08:00
gewuyou
4e98b63e9c fix(cqrs): 收口 PR review 剩余问题
- 修复 NotificationLifetimeBenchmarks 的 scoped 容器释放与公开 XML 契约缺口

- 修复 generated descriptor 预热阶段先去重后校验导致的有效后继条目丢失问题

- 更新 generated descriptor 的 MethodInfo 比较方式并补充 request/stream 回归测试

- 同步 cqrs-rewrite active tracking 与 trace 的当前 PR 锚点到 PR #348
2026-05-11 14:52:39 +08:00
gewuyou
babd132e81 docs(cqrs): 收口批处理剩余文档与追踪
- 新增 NotificationLifetime 基准并补充验证结果

- 更新 CQRS README 与 legacy Command/Query 迁移说明

- 补充 registration fallback 回归测试并同步 ai-plan 恢复点
2026-05-11 13:02:01 +08:00
gewuyou
f650bc5776 test(cqrs-benchmarks): 新增 notification startup 基准
- 新增 NotificationStartupBenchmarks,补齐 notification 的 Initialization 与 ColdStart 对称矩阵

- 复用最小宿主搭建路径,对齐 GFramework.CQRS、Mediator 与 MediatR 的单处理器首击发布对照

- 修复 cold-start 方法的资源释放时序,确保 benchmark 构建零警告通过
2026-05-11 12:49:28 +08:00
gewuyou
683034579e test(cqrs-benchmarks): 新增 stream startup 基准场景
- 新增 StreamStartupBenchmarks,补齐 stream 的 initialization 与 cold-start first-hit 对照
- 内嵌 generated registry 与最小宿主搭建,保持 benchmark 场景在单文件内自管理
2026-05-11 12:47:45 +08:00
gewuyou
e156b5f000 docs(cqrs-benchmarks): 收敛 Benchmark README 现状说明
- 更新当前 HEAD 已覆盖的 request、stream、notification benchmark 矩阵

- 补充 --artifacts-suffix 的并发运行隔离约束与使用边界

- 明确 short-job smoke 的结论边界,并将未覆盖维度改写为当前缺口
2026-05-11 12:47:19 +08:00
gewuyou
af4e988a5b docs(cqrs-rewrite): 精简 archive 恢复材料导航
- 更新 archive todo 顶部导航,补充截止恢复点、阶段索引与跳转约定

- 更新 archive trace 顶部索引,突出验证锚点与阶段回看入口
2026-05-11 12:42:19 +08:00
gewuyou
7fa9d5ff17 fix(cqrs): 硬化 generated invoker descriptor 契约
- 修复 generated request/stream invoker descriptor 枚举阶段对异常、重复 pair 与不一致元数据的防守行为

- 补充 generated invoker provider descriptor 边界回归测试,锁定回退与首条生效语义
2026-05-11 12:41:34 +08:00
gewuyou
8990749d91 test(cqrs-benchmarks): 补齐 RequestStartup 的 Mediator 对照
- 新增 RequestStartupBenchmarks 的 Mediator 初始化与冷启动 benchmark 路径

- 更新 request 与 handler 契约以复用单文件内的 Mediator concrete host 对照
2026-05-11 12:39:37 +08:00
gewuyou
337ffbd580 test(cqrs): 补齐通知发布器解析缓存回归测试
- 新增 notification publisher 多实例冲突时抛错的回归测试

- 补充首次解析后复用同一 publisher 且不重复查容器的缓存测试

- 更新测试发布器计数以验证缓存命中的发布调用次数
2026-05-11 12:37:55 +08:00
gewuyou
d9e47abdb6 docs(cqrs): 收紧生成器与通知策略说明
- 更新 CQRS 栏目中的 generated invoker、fallback 分层与 notification publisher 选择边界说明

- 对齐生成器专题页与当前 runtime 注册和分发实现的实际行为
2026-05-11 12:37:39 +08:00
gewuyou
3b2e6899d5
Merge pull request #347 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-11 12:25:00 +08:00
gewuyou
cacf238911
Merge pull request #346 from GeWuYou/feat/input-system-godot-integration
feat(input): 新增统一输入抽象与Godot集成
2026-05-11 11:18:20 +08:00
gewuyou
1420bd4340 fix(cqrs): 修复 benchmark scoped 宿主与 PR 恢复入口
- 修复 benchmark 入口的 artifacts 隔离判断与嵌套宿主目录保护,避免并发运行时宿主目录递归膨胀

- 优化 request 与 stream 生命周期 benchmark 的 scoped 宿主模型,复用单个 runtime 并仅在每次调用时创建真实 DI scope

- 补充 ScopedBenchmarkContainer 的 XML 合同说明,并收敛 README 与 ai-plan active 入口到当前 PR 恢复点
2026-05-11 10:50:50 +08:00
GeWuYou
158f98a465 fix(input): 修复输入绑定重置与审查遗留问题
- 修复 InputBindingStore 的线程安全使用说明并消除 GodotInputBindingCodec 的重复键码计算\n- 修复 GodotInputMapBackend 在全量重置时未移除运行时新增动作的语义偏差并补回归测试\n- 更新 input-system-godot-integration 的 tracking 与 trace,补录 PR review follow-up 验证结果
2026-05-11 10:33:52 +08:00
gewuyou
0baa662ae4 test(cqrs-benchmarks): 隔离并发 benchmark 运行工件
- 新增 benchmark 入口 artifacts suffix 解析与独立 host 工作目录重启逻辑

- 更新 benchmark README 并发运行约定,补充隔离命令示例

- 更新 cqrs-rewrite 恢复文档,记录并发验证结果与后续恢复点
2026-05-11 08:58:18 +08:00
gewuyou
5f9589ed3c fix(input): 修复输入绑定快照与导入语义
- 修复 InputBindingStore 只读查询会污染导出快照的问题

- 修复 Godot 输入绑定导入时未清理残留动作绑定的问题

- 补充输入运行时与 Godot backend 的 XML 契约说明和 README 入口

- 更新 ai-plan 跟踪并补充针对 PR #346 的回归测试
2026-05-11 08:53:14 +08:00
gewuyou
594798dcb9 test(cqrs-benchmarks): 补齐 stream scoped 生命周期矩阵
- 新增真实 scoped stream benchmark helper,确保作用域覆盖完整枚举周期

- 扩展 StreamLifetimeBenchmarks 到 Singleton、Scoped、Transient 全矩阵并记录 scoped 结果

- 更新 benchmark README 与 cqrs-rewrite 恢复文档,收口当前验证结论与下一批方向
2026-05-11 08:43:02 +08:00
gewuyou
11a6b6abe4 test(cqrs-benchmarks): 扩展流式基准观测并补齐 scoped 生命周期矩阵
- 新增 StreamInvokerBenchmarks 的 FirstItem 与 DrainAll 双观测口径,并补齐相关 XML 注释。

- 引入 ScopedBenchmarkContainer 与 scoped request helper,为 RequestLifetimeBenchmarks 建立真实作用域边界下的 Scoped 生命周期矩阵。

- 更新 cqrs-rewrite 的 active tracking 与 trace,记录 RP-129 的多 worker 波次、串行化 smoke 验证与新的恢复入口。
2026-05-11 08:03:07 +08:00
gewuyou
79ae5f0b5a test(cqrs-benchmarks): 拆分 streaming benchmark 观测口径
- 新增 FirstItem 与 DrainAll 两种 stream 观测模式,补齐 steady-state StreamingBenchmarks 的参数矩阵。

- 重构 stream 消费路径为共享 helper,分别覆盖首元素观测与完整枚举基线。
2026-05-11 07:50:04 +08:00
gewuyou
ebbef321ad feat(input): 新增统一输入抽象与Godot集成
- 新增输入绑定 DTO、设备上下文和 UI 语义桥接契约。

- 实现 Game 默认输入绑定存储、动作映射和 UI 分发桥接。

- 落地 Godot InputMap 适配、测试覆盖与配套文档。

- 更新 ai-plan 恢复点、worktree 映射与采用入口。
2026-05-10 22:29:26 +08:00
gewuyou
699d0b4896
Merge pull request #345 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-09 18:39:38 +08:00
gewuyou
6d5d4be20b docs(cqrs): 收口PR345评审反馈
- 更新 AGENTS 多智能体预算术语说明,明确 worker 波次停止边界

- 修复 StreamLifetimeBenchmarks 的取消传播、观测维度注释与枚举器特性写法

- 调整 benchmark README 与 CQRS ai-plan 恢复文档,移除过期 PR 锚点和旧 diff 统计
2026-05-09 17:10:54 +08:00
gewuyou
9ffe3ba237 test(cqrs-benchmarks): 补充stream lifetime双观测口径
- 新增 StreamLifetimeBenchmarks 的 FirstItem 与 DrainAll 观测模式,用于拆分建流瞬时成本与完整枚举成本

- 更新 cqrs-rewrite 恢复文档与 benchmark README,同步 RP-127 的验证结果、branch diff 与下一恢复点
2026-05-09 16:19:14 +08:00
gewuyou
b7fa3eee29 perf(cqrs): 优化 stream 建流常量成本
- 优化 generated stream dispatch binding 为按响应类型缓存强类型 invoker 与 pipeline executor,压缩 CreateStream 热路径桥接开销

- 保持 stream 异常契约与行为缓存语义不变,并补齐相关 XML 注释与必要内联说明

- 补充 generated stream binding 与 pipeline executor 复用回归,覆盖 generated invoker 与 stream pipeline 组合场景
2026-05-09 16:14:16 +08:00
gewuyou
228e954d2d docs(ai-workflow): 补充多agent协作治理入口
- 新增 gframework-multi-agent-batch skill 及其公开入口说明

- 更新 AGENTS.md 中主 Agent 协调多 worker 的职责与停机约束

- 补充 ai-plan-governance 主题的 public recovery 入口与验证记录
2026-05-09 15:56:15 +08:00
gewuyou
d4735aec25 docs(cqrs-benchmarks): 更新基准工程说明
- 更新 RequestLifetimeBenchmarks 的 generated-provider 宿主说明

- 更新 StreamLifetimeBenchmarks 的 reflection/generated/MediatR 对照口径说明

- 补充 benchmark 工程的最小构建与过滤运行示例
2026-05-09 14:53:30 +08:00
gewuyou
a07d1c4076 docs(cqrs-rewrite): 同步 benchmark 恢复文档入口
- 更新 active tracking 的恢复点、branch diff 与 benchmark 口径。

- 补充 request lifetime 与 stream lifetime 的最新权威验证结果。

- 推进 trace 到 RP-125 与 RP-126,并记录下一推荐步骤。
2026-05-09 14:49:32 +08:00
gewuyou
9107e23268 test(cqrs-benchmarks): 补齐 stream lifetime 三方对照口径
- 拆分 GFramework stream lifetime benchmark 的 reflection、generated 与 MediatR 独立请求和 handler 类型

- 调整 generated stream registry 仅绑定 generated 口径,避免静态 dispatcher 缓存污染对照结果

- 验证 StreamLifetimeBenchmarks 在 Singleton 与 Transient 下均产出完整四方对照结果
2026-05-09 12:56:27 +08:00
gewuyou
f9c9561f40 fix(cqrs-benchmarks): 对齐 request lifetime 宿主路径
- 新增 request lifetime benchmark 的 generated registry,提供最小 generated request descriptor。

- 更新 RequestLifetimeBenchmarks 使用 generated-provider 宿主,并保留 Singleton/Transient 生命周期矩阵控制。

- 补充 dispatcher 缓存清理,避免生命周期矩阵之间互相污染 benchmark 结果。
2026-05-09 12:54:19 +08:00
gewuyou
f9dd105bcc perf(cqrs): 缓存 stream pipeline 存在性判定
- 优化 CqrsDispatcher 的 CreateStream 热路径,按 dispatcher 实例缓存 stream pipeline behavior 的服务可见性

- 新增 stream presence cache 回归与最小测试桩,锁住同容器共享、跨容器隔离的缓存语义

- 更新 cqrs-rewrite 恢复文档并补充本轮 stream benchmark 验证结果
2026-05-09 12:42:03 +08:00
gewuyou
d85828c533
Merge pull request #344 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-09 12:25:41 +08:00
gewuyou
17e7f64e71 fix(cqrs): 收口PR344通知发布评审问题
- 修复 CqrsDispatcher 默认通知发布器热路径的重复解析与默认实例重复分配

- 补充 strict IIocContainer 测试装配与通知发布器唯一注册断言

- 重构 CqrsDispatcherCacheTests 共享容器装配并更新 cqrs-rewrite 恢复文档
2026-05-09 11:14:32 +08:00
gewuyou
56dc4fd343 fix(cqrs): 缓存零管道请求的行为判定
- 新增 dispatcher 实例级 request behavior presence cache,减少零管道请求 steady-state 的容器查询开销

- 补充 dispatcher cache 回归并更新 cqrs-rewrite active tracking 与 trace,记录 request benchmark 和 lifetime benchmark 结果
2026-05-09 09:25:08 +08:00
gewuyou
3fbc563d59
Merge pull request #343 from GeWuYou/feat/ai-first-config
Feat/添加数组形状关键字的验证与拒绝机制
2026-05-09 09:17:55 +08:00
gewuyou
4ccc36aac9 fix(cqrs): 补齐架构启动的 notification publisher 回归
- 新增标准 Architecture 启动路径下自定义 notification publisher 的集成回归,验证 Configurator 注册的策略会被真实 publish 路径复用

- 更新 cqrs-rewrite active tracking 与 trace,推进恢复点到 RP-121 并记录当前验证结果与下一步边界
2026-05-09 08:54:14 +08:00
gewuyou
a36b5978c4 fix(ai-first-config): 补齐PR审查遗漏的文档与追踪记录
- 补充两个参数化测试方法缺失的 XML param 注释
- 修复 trace 中触发 MD024 的重复三级标题
- 更新 ai-plan 跟踪与 PR #343 follow-up 验证记录
2026-05-09 08:51:51 +08:00
gewuyou
000c3e4c45 fix(cqrs): 修复 notification publisher 默认接线
- 修复默认 CQRS runtime 在工厂层过早固化顺序 publisher 的问题

- 更新 dispatcher 与基础设施接线,确保组合根注册的 publisher 能在标准 publish 路径生效

- 补充 notification publisher 回归并更新 cqrs-rewrite 的 RP-120 恢复点
2026-05-09 08:41:44 +08:00
gewuyou
6af600d7b9 test(cqrs): 补齐 notification publisher 泛型注册回归
- 补充 UseNotificationPublisher<TPublisher>() 的单例解析与重复注册回归覆盖

- 更新 notification publisher 组合根文档,说明实例重载与泛型重载的生命周期边界

- 更新 cqrs-rewrite 跟踪与追踪文档,记录 RP-119 的验证结果与下一恢复点
2026-05-09 08:26:43 +08:00
gewuyou
d389eb36c1
Merge pull request #342 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-08 20:08:33 +08:00
gewuyou
59ceb06f2d fix(cqrs): 收口 PR342 审查遗留问题
- 修复 NotificationFanOutBenchmarks 中 MediatR handler 绕过 HandleCore 的对照偏差

- 更新 README 与中文文档中的 notification publisher 示例和表格格式

- 同步 cqrs-rewrite tracking 与 trace 到 PR #342 审查恢复点和最新验证结果
2026-05-08 19:29:45 +08:00
gewuyou
4121e12909 docs(cqrs): 收口 notification publisher 采用说明
- 更新 notification publisher 的策略选择矩阵,明确顺序、并行与自定义 publisher 的适用边界

- 补充 CQRS 重写 tracking 与 trace,记录已撤回的无收益 request 热路径实验和当前恢复点
2026-05-08 18:56:37 +08:00
gewuyou
59ec255878 feat(cqrs): 公开顺序 notification publisher 策略
- 新增公开 SequentialNotificationPublisher,并让默认 runtime 回退复用该策略

- 增加顺序 notification publisher 组合根注册入口,并更新测试文档与恢复点
2026-05-08 17:57:57 +08:00
gewuyou
310791db5a feat(cqrs): 收口 notification publisher 配置入口
- 新增 notification publisher 组合根注册扩展,提供 TaskWhenAll 与自定义策略入口

- 补充通知发布策略配置回归测试,并更新 CQRS 文档与恢复点记录
2026-05-08 17:53:27 +08:00
gewuyou
b0102b5206 test(cqrs): 补充 notification publisher fan-out 基准对照
- 新增默认顺序发布器与 TaskWhenAllNotificationPublisher 的 fixed 4 handler fan-out benchmark 对照

- 更新 benchmark README 与 cqrs-rewrite 恢复文档,记录 RP-114 的性能结论与下一步
2026-05-08 17:42:48 +08:00
gewuyou
7ff4b628a1 feat(cqrs): 新增并行通知发布策略
- 新增 TaskWhenAllNotificationPublisher 内置并行通知发布器并保留默认顺序语义

- 补充通知发布策略回归测试与采用边界文档

- 更新 cqrs-rewrite 跟踪与执行追踪恢复点
2026-05-08 17:25:42 +08:00
gewuyou
c7af175f2e fix(cqrs): 补充通知扇出基准
- 新增 NotificationFanOutBenchmarks,量化固定四处理器 notification publish 对照

- 更新 benchmark README,补充 notification fan-out 场景说明

- 更新 cqrs-rewrite active tracking 与 trace,记录 RP-112 的基线、验证结果与下一恢复建议
2026-05-08 17:09:08 +08:00
gewuyou
98c5b14bd5 fix(cqrs): 补齐通知基准对照
- 新增 NotificationBenchmarks 的 Mediator concrete runtime 对照与对应通知合同实现

- 更新 benchmark README,明确 notification publish 已扩成三方对照

- 更新 cqrs-rewrite active tracking 与 trace,记录 RP-111 的基线、验证结果与下一恢复建议
2026-05-08 16:27:26 +08:00
gewuyou
7ca21af92d
Merge pull request #341 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-08 16:12:20 +08:00
gewuyou
769d036434 fix(cqrs): 收口PR341剩余review尾项
- 修复 request faulted ValueTask 回归测试对 pipeline 探测顺序的隐式依赖,补齐 HasRegistration 与 GetAll 的防御性 mock

- 更新 cqrs-rewrite tracking 与 trace,记录 PR #341 latest-head review 的 stale thread 复核结论与本轮验证结果
2026-05-08 15:06:24 +08:00
gewuyou
9bd8c34693 fix(cqrs): 收口PR审查遗留问题
- 修复 benchmark 宿主误激活同程序集其他 generated registry 的接线路径,收窄服务索引与 descriptor 基线

- 恢复 CqrsDispatcher.SendAsync 的 faulted ValueTask 失败语义,并补充相关回归测试

- 补充 legacy runtime alias 的防守式类型检查、stream lifetime 注释与 cqrs-rewrite 恢复文档验证记录
2026-05-08 14:10:06 +08:00
gewuyou
39ac61c095 fix(cqrs): 补齐流式生命周期基准矩阵
- 新增 stream handler 的 Singleton 和 Transient 生命周期 benchmark,并沿用 generated-provider 宿主接线

- 更新 CQRS benchmark README 与 active ai-plan 恢复点,记录 RP-108 的验证结果和下一步建议
2026-05-08 13:03:00 +08:00
gewuyou
24462b0035 perf(cqrs): 收口默认流式基准宿主
- 新增默认 stream benchmark 的 handwritten generated registry,并通过真实程序集注册路径接上 generated stream invoker provider

- 更新 StreamingBenchmarks 宿主接线、README 与 RP-107 recovery 文档,统一 request、pipeline、stream 默认宿主口径

- 更新 gframework-boot 与 gframework-batch-boot 技能,改为以上下文预算接近约 80% 为默认优先停止信号
2026-05-08 12:47:24 +08:00
gewuyou
c82e981b7e perf(cqrs): 收口请求管线基准宿主
- 新增 request pipeline benchmark 的 handwritten generated request registry,并通过真实程序集注册路径接上 generated invoker provider

- 更新 RequestPipelineBenchmarks 宿主接线与 benchmark README,统一默认 request 与 pipeline 场景的 generated-provider 口径

- 更新 CQRS 迁移 tracking 与 trace,记录 RP-106 的基线、验证结果与下一恢复点
2026-05-08 12:38:18 +08:00
gewuyou
d9547dae4b perf(cqrs): 收口默认请求基准宿主
- 新增 handwritten generated request registry,并让默认 RequestBenchmarks 通过真实程序集注册路径接上 generated invoker provider

- 补齐 benchmark 最小宿主所需的 CQRS runtime、registrar 与 registration service 基础设施接线

- 更新 CQRS 迁移 tracking 与 trace,记录 RP-105 的 benchmark 结论和当前恢复点
2026-05-08 12:23:05 +08:00
gewuyou
120a1487f5 perf(cqrs): 收口请求热路径常量开销
- 优化 CqrsDispatcher.SendAsync 的 direct-return ValueTask 路径,移除 dispatcher 自身的异步状态机开销

- 引入 MicrosoftDiContainer 冻结后服务键索引,收敛 HasRegistration(Type) 的重复描述符扫描

- 更新 cqrs-rewrite active tracking 与 trace,记录 RP-104 的基线、验证结果与下一批建议
2026-05-08 11:38:27 +08:00
gewuyou
4d6dbba6a0
Merge pull request #340 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-08 11:13:33 +08:00
gewuyou
32eeb41f29 fix(cqrs): 修复 HasRegistration 评审回归
- 修复 HasRegistration(Type) 的服务键判定,避免将仅按具体类型注册的行为误判为接口已注册

- 补充 strict mock 场景与 HasRegistration 回归测试,并修复 PR #340 暴露的 stream context validation 失败

- 更新 IoC 与 benchmark 文档注释,同步 cqrs-rewrite tracking/trace 到 PR #340 / RP-103
2026-05-08 10:54:37 +08:00
gewuyou
5da4a5893b perf(cqrs): 收紧性能回归门槛并忽略基准产物
- 更新 BenchmarkDotNet 生成目录忽略规则,避免本地基准产物污染工作树

- 补充 CQRS benchmark 回归要求与性能目标,要求相关改动后复跑 request 基准

- 更新 cqrs-rewrite 跟踪文档并记录最新 request 基准结果
2026-05-08 10:30:24 +08:00
gewuyou
18018966f9 perf(cqrs): 优化请求分发热路径并补充 Mediator 对照基准
- 优化 dispatcher 在零 pipeline 场景下跳过空行为解析,减少请求热路径分配

- 修复 MicrosoftDiContainer 热路径的无效 debug 字符串构造,并新增非激活注册检测回归测试

- 新增基于 NuGet 的 Mediator 对照基准并更新 CQRS 重写跟踪文档
2026-05-08 09:41:27 +08:00
gewuyou
6a582d0b0b fix(game-config): 收紧数组形状关键字边界
- 修复 Runtime、Generator 与 Tooling 对 prefixItems、additionalItems、unevaluatedItems 的静默接受边界

- 补充 GFramework.Game 与 SourceGenerators 的数组形状关键字回归测试和诊断契约

- 更新 reader-facing 文档与 ai-plan 恢复点,记录新的数组 schema 支持边界
2026-05-08 09:40:14 +08:00
gewuyou
5dc2dd25b9
Merge pull request #339 from GeWuYou/feat/cqrs-optimization
feat(cqrs): 补齐流式管道行为接缝
2026-05-08 09:08:37 +08:00
gewuyou
e44c56fb46 fix(cqrs): 收口 PR339 流式管道评审问题
- 修复 MicrosoftDiContainer 中 request 与 stream 行为注册逻辑的重复实现并统一校验路径

- 补充流式管道注册入口与 continuation 缓存的 XML 契约说明,明确并发与冻结前调用约束

- 更新 cqrs-rewrite 跟踪文档并修正 ICqrsRequestInvokerProvider 的 XML 缩进格式问题
2026-05-08 08:49:19 +08:00
gewuyou
aebf1e974d feat(cqrs): 补齐流式管道行为接缝
- 新增 stream pipeline 契约、dispatcher executor 缓存与 generated invoker 兼容路径

- 补充 Architecture 与 IOC 的流式管道注册入口及对应回归测试

- 更新 CQRS 文档和 cqrs-rewrite 的 active tracking/trace
2026-05-08 08:20:48 +08:00
gewuyou
3e1ce089af docs(config-tool): 对齐对象数组嵌套编辑说明
- 更新 VS Code 配置工具 README,收紧 raw YAML 回退条件并同步实际对象数组编辑边界

- 修复中文配置工具文档对嵌套对象数组能力的过时描述,明确仅在超出共享子集时回退

- 补充 ai-plan tracking 与 trace,记录本轮文档对齐、验证结果与批处理停止条件
2026-05-08 07:37:03 +08:00
gewuyou
02a60df718
Merge pull request #335 from GeWuYou/dependabot/nuget/Meziantou.Analyzer-3.0.72
Bump Meziantou.Analyzer from 3.0.60 to 3.0.72
2026-05-07 22:00:58 +08:00
gewuyou
77820da820
Merge pull request #336 from GeWuYou/dependabot/nuget/Meziantou.Polyfill-1.0.123
Bump Meziantou.Polyfill from 1.0.121 to 1.0.123
2026-05-07 22:00:48 +08:00
gewuyou
55639c559c
Merge pull request #337 from GeWuYou/dependabot/nuget/GFramework.Cqrs.Benchmarks/Microsoft.Extensions.Logging-10.0.7
Bump Microsoft.Extensions.Logging from 10.0.0 to 10.0.7
2026-05-07 22:00:35 +08:00
gewuyou
042b74473f
Merge pull request #338 from GeWuYou/dependabot/nuget/GFramework.Core.Tests/multi-6f1e76e95e
Bump NUnit from 4.5.1 to 4.6.0
2026-05-07 21:59:59 +08:00
dependabot[bot]
55c2a1ae69
Bump NUnit from 4.5.1 to 4.6.0
---
updated-dependencies:
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:14:14 +00:00
dependabot[bot]
debc9f27ac
Bump Microsoft.Extensions.Logging from 10.0.0 to 10.0.7
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.Logging
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:10:38 +00:00
dependabot[bot]
8f6e6e121e
Bump Meziantou.Polyfill from 1.0.121 to 1.0.123
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.123
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:09:51 +00:00
dependabot[bot]
d010026448
Bump Meziantou.Analyzer from 3.0.60 to 3.0.72
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.72
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:08:44 +00:00
gewuyou
54b79d99d3
Merge pull request #334 from GeWuYou/feat/cqrs-optimization
Feat/Implement CQRS runtime integration for legacy compatibility
2026-05-07 20:47:08 +08:00
gewuyou
ffb0a8aff5 fix(core): 收窄 legacy bridge 上下文回退异常边界
- 修复 LegacyCqrsDispatchHelper 仅在上下文缺失时回退,避免吞掉真实 InvalidOperationException

- 补充 CommandExecutor 与 QueryExecutor 相关回归测试,覆盖 fallback 与异常冒泡语义

- 更新 cqrs-rewrite 跟踪与追踪文档,记录 PR #334 本轮复核与验证结果
2026-05-07 20:35:47 +08:00
gewuyou
44d1a89a0b test(core): 补强 legacy bridge 上下文断言
- 补充 AsyncQueryExecutor 与 CommandExecutor bridge 测试的上下文保留断言

- 优化 RecordingCqrsRuntime 的 bridge 执行模拟与响应类型诊断

- 更新 cqrs-rewrite active tracking 与 trace 的 RP-097 验证记录
2026-05-07 20:17:46 +08:00
gewuyou
cca413042f chore(cqrs-rewrite): 同步PR334评审复核状态
- 更新 active tracking 与 trace 到 RP-096,记录 latest-head review 的最新权威结论

- 补充 PR #334 当前 stale open thread、CI 测试与 MegaLinter 噪音的本地复核结果
2026-05-07 19:52:14 +08:00
gewuyou
dc3bd3744e fix(core): 收口 legacy bridge 同步评审问题
- 修复 legacy 同步 bridge 的 runtime 等待方式,统一通过共享 helper 隔离同步上下文并收口重复 dispatch-context 解析逻辑

- 补充 legacy async command bridge 的取消可见性,并更新 ICqrsRuntime 与相关入口的契约说明

- 新增 bridge 回归测试并更新 cqrs-rewrite active tracking,覆盖同步上下文隔离、测试容器释放与取消语义
2026-05-07 19:00:49 +08:00
gewuyou
6056159866 fix(core): 收口 legacy cqrs bridge 评审问题
- 修复 legacy bridge 测试装配与清理流程,改用 InternalsVisibleTo 和显式 handler 注册,补齐共享计数器重置与生命周期说明

- 优化 CommandExecutor、QueryExecutor 与相关模块的 runtime 契约,补充 XML 文档、nullable 注解和显式依赖解析

- 更新 legacy 异步 bridge 的取消语义、兼容文档回退边界以及 cqrs-rewrite active tracking/trace
2026-05-07 17:54:05 +08:00
gewuyou
d7293aa475 refactor(core): 统一旧版命令查询到Cqrs运行时
- 重构 Core 兼容命令查询入口,使 legacy SendCommand/SendQuery 通过内部 bridge request 复用统一 CQRS runtime

- 新增 legacy bridge handler 与真实启动路径回归测试,验证默认架构初始化会自动接入统一 pipeline

- 更新 Core 与 CQRS 文档及 cqrs-rewrite 跟踪,记录 Mediator 尚未吸收的能力差距与后续收口方向
2026-05-07 17:20:14 +08:00
gewuyou
017e689abd feat(cqrs): 补齐请求生命周期基准矩阵
- 新增 request handler Singleton 与 Transient 生命周期 benchmark,并说明 Scoped 对照的宿主前置条件

- 更新 benchmark README,补充当前覆盖范围与后续扩展方向

- 更新 cqrs-rewrite active tracking 与 trace,记录 RP-092 验证结果和沙箱外 benchmark 权威结论
2026-05-07 14:20:50 +08:00
gewuyou
2c58d8b69e
Merge pull request #333 from GeWuYou/refactor/single-context-priority
docs(ai-plan): 归档 single-context-priority 主题
2026-05-07 13:24:46 +08:00
GeWuYou
14cd1fc9a0 chore(benchmark): 删除错误的任务 2026-05-07 13:08:55 +08:00
GeWuYou
577c89fdf3 chore(benchmark): 归档已完成任务,删除错误的任务 2026-05-07 12:44:57 +08:00
gewuyou
a692190a77 docs(ai-plan): 归档 single-context-priority 主题
- 更新 public index,只保留仍处于活跃状态的 topic 与分支映射

- 归档 single-context-priority 主题目录到 public archive

- 补充 ai-plan-governance 跟踪与 trace,记录本次归档校正与验证结果
2026-05-07 12:23:18 +08:00
gewuyou
c3df2b2c96
Merge pull request #332 from GeWuYou/refactor/single-context-priority
Refactor/single context priority
2026-05-07 11:34:50 +08:00
gewuyou
ee8b6a4deb fix(core): 修复上下文销毁解绑与并发一致性
- 修复 GameContext 的别名字典与当前活动上下文同步边界,避免解绑与读取路径出现状态漂移
- 修复 Architecture.Destroy() 缺少全局解绑的问题,并补充相关生命周期 XML 文档
- 更新回归测试、CQRS 注册断言与 single-context-priority 跟踪记录
2026-05-07 10:43:07 +08:00
gewuyou
ff04a4fbad fix(core): 补齐架构销毁后的上下文解绑
- 修复 Architecture 销毁后 GameContext 仍保留活动上下文的问题

- 补充生命周期回归测试并验证失败初始化后的解绑路径

- 收口生成器文档中的多架构表述并更新 ai-plan 追踪
2026-05-07 10:03:16 +08:00
gewuyou
e3fa0db992 refactor(core): 收敛单活动上下文与预冻结查询
- 收敛 GameContext 为单活动上下文模型并保留类型别名兼容查找

- 统一 MicrosoftDiContainer 预冻结实例读取路径并补充 CQRS 注册阶段提示

- 更新 Core 测试、上下文文档与 ai-plan 追踪记录
2026-05-07 08:58:09 +08:00
gewuyou
c2d22285ed
Merge pull request #331 from GeWuYou/fix/package-validation-guard
fix(release): 前移发布包清单校验
2026-05-06 21:34:59 +08:00
gewuyou
e3d6aa5111 fix(release): 修复发布校验链路的审查遗留问题
- 修复 PR workflow 中 dotnet pack 重复构建整个 solution 的问题

- 优化 packed modules 校验脚本的 find 实现以兼容 BSD 环境

- 更新 cqrs-rewrite 活跃跟踪与追踪文档中的当前 PR 锚点和审查结论
2026-05-06 21:27:21 +08:00
gewuyou
30ddb841a9 fix(release): 前移发布包清单校验
- 修复 benchmark 项目误入发布面的风险,明确 GFramework.Cqrs.Benchmarks 保持不可打包。

- 新增共享 packed modules 校验脚本,并让 publish 与 CI 工作流复用同一份发布包名单规则。

- 更新 CQRS active tracking 与 trace,记录本轮发布校验前移的恢复点与验证结果。
2026-05-06 21:12:42 +08:00
gewuyou
c65c131d6a
Merge pull request #330 from GeWuYou/fix/microsoft-di-container-disposal
fix(core): 修复容器释放与基准资源泄漏
2026-05-06 20:47:32 +08:00
gewuyou
f0a2978882 fix(core): 修复容器并发释放重复销毁锁
- 修复 MicrosoftDiContainer 在并发 Dispose 场景下可能重复执行底层读写锁销毁的问题

- 补充 IocContainerLifetimeTests 回归用例以覆盖并发释放时的单次锁销毁约束

- 更新 microsoft-di-container-disposal 追踪文档记录剩余 PR review 处理结果
2026-05-06 20:39:38 +08:00
gewuyou
3233151207 fix(ioc): 修复容器释放竞态与清理路径
- 修复 MicrosoftDiContainer 在等待线程与并发 Dispose 场景下泄露底层锁异常的问题
- 更新 IIocContainer 释放契约文档并移除 Clear 中不可达的 provider 释放逻辑
- 新增 benchmark cleanup helper、并发释放回归测试与 ai-plan 恢复入口
2026-05-06 20:23:16 +08:00
gewuyou
0ec8aa076b fix(core): 修复容器释放与基准资源泄漏
- 修复 MicrosoftDiContainer 的 IDisposable 释放逻辑、根 ServiceProvider 清理与释放后访问保护
- 更新 CQRS benchmarks 的容器 cleanup,并补齐 RequestStartupBenchmarks 的冷启动容器释放路径
- 补充 Core 容器生命周期回归测试并归档 issue 327 的 ai-plan topic
2026-05-06 19:08:48 +08:00
gewuyou
588800bb7b
Merge pull request #329 from GeWuYou/chore/archive-completed-ai-plan-topics
chore(ai-plan): 归档已完成专题
2026-05-06 17:22:16 +08:00
gewuyou
ee41206965 chore(ai-plan): 归档已完成专题
- 更新 ai-plan 公共索引,移除 semantic-release-versioning、runtime-generator-boundary 和 github-issue-review-skill 的活跃入口与分支映射
- 归档 三个已完成 topic 的 tracking 与 trace 文档到 ai-plan/public/archive/ 下
2026-05-06 16:59:35 +08:00
gewuyou
db89918333
Merge pull request #328 from GeWuYou/feat/github-issue-review-skill
feat(skills): 新增 GitHub issue 分诊 skill
2026-05-06 16:51:02 +08:00
gewuyou
f25ccccad2 fix(skills): 修复 issue review skill 评审问题
- 修复 issue-review 脚本的代理回退、GitHub Token 认证与 JSON 输出契约

- 调整非 bug issue 的澄清判定并补充 docs、feature 分诊回归测试

- 更新 skill 示例占位符与 ai-plan 跟踪记录,收敛 PR #328 follow-up
2026-05-06 16:25:29 +08:00
gewuyou
ab9829044f feat(skills): 新增 GitHub issue 分诊 skill
- 新增 gframework-issue-review skill,支持抓取 issue 元数据、评论、timeline 与分诊摘要。

- 补充 JSON 输出、唯一 open issue 自动解析与 WSL Linux git 绑定兼容处理。

- 更新 ai-plan 恢复入口并增加脚本级测试与验证记录。
2026-05-06 15:40:48 +08:00
gewuyou
109bce6e9e
Merge pull request #326 from GeWuYou/feat/cqrs-optimization
Test/Add comprehensive CQRS benchmarking suite with reflection and generated invoker paths
2026-05-06 14:29:06 +08:00
gewuyou
6d619b9a1f fix(cqrs): 收敛 benchmark review 收尾问题
- 修复 benchmark workflow 过滤器输入的 shell 注入风险

- 统一 request 与 stream invoker 基准中 MediatR handler 的生命周期基线

- 更新 request pipeline benchmark 的缓存清理与空行为类型声明

- 压缩 cqrs-rewrite active 跟踪与 trace,记录本轮 PR review 收尾结论
2026-05-06 12:57:56 +08:00
gewuyou
2cb6216d05 fix(cqrs): 修复 benchmark 对照宿主与冷启动基线
- 新增 BenchmarkHostFactory 统一 benchmark 最小宿主构建,并限制 MediatR 扫描到当前场景所需类型

- 修复 GFramework benchmark 容器未冻结导致的首次 handler 解析缺口,恢复 RequestStartupBenchmarks 冷启动结果

- 优化 request、pipeline、notification、stream 与 invoker benchmark 的生命周期对齐,减少无关程序集扫描噪音

- 更新 cqrs-rewrite 跟踪与追踪文档,记录 PR #326 benchmark review 收敛、根因和验证结果
2026-05-06 12:09:20 +08:00
gewuyou
f71791ae98 ci(cqrs): 新增手动 benchmark 工作流
- 新增仅支持 workflow_dispatch 的 Benchmark workflow,默认只验证 benchmark 项目 Release build
- 补充可选 benchmark_filter 输入与 BenchmarkDotNet 工件上传,支持按场景手动执行基准测试
- 更新 cqrs-rewrite 跟踪与 trace,记录手动 benchmark workflow 的用途与当前 startup benchmark 残留风险
2026-05-06 11:48:15 +08:00
gewuyou
2ac02c1a6f fix(cqrs): 收敛 benchmark review 修复
- 修复 RequestStartupBenchmarks 的 baseline 分组、初始化阶段对齐与 MediatR 重复注册问题
- 新增共享 dispatcher cache helper,并统一 benchmark 宿主的 MediatR logging/license 过滤配置
- 更新 cqrs-rewrite 跟踪与 trace,记录 PR #326 锚点、验证去重和 startup benchmark 的残留运行风险
2026-05-06 11:07:33 +08:00
gewuyou
449eeb9606 feat(cqrs): 补齐 stream invoker 基准对照
- 新增 stream generated invoker benchmark 与手写 registry,对照 reflection runtime、generated runtime 和 MediatR 的完整枚举开销

- 更新 benchmark README,补充 generated stream invoker provider 的场景说明与后续扩展方向

- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-089 的基线、验证结果和下一批建议
2026-05-06 09:46:52 +08:00
gewuyou
c01abac06e
Merge pull request #325 from GeWuYou/feat/ai-first-config
fix(game-config): 收紧开放对象关键字边界
2026-05-06 09:40:08 +08:00
gewuyou
6e1eaf8f5c test(cqrs): 补充请求调用器生成路径基准
- 新增 request reflection 与 generated invoker provider 的 steady-state 对照基准

- 引入 handwritten generated registry/provider 以走通真实 registrar 与 dispatcher 预热链路

- 更新 benchmark README 与 cqrs-rewrite RP-088 跟踪记录
2026-05-06 09:36:48 +08:00
gewuyou
e0bbf13d88 test(cqrs): 补充请求启动阶段基准
- 新增 request initialization 与 cold-start 基准并对齐当前 runtime 启动口径

- 通过清理 dispatcher 静态缓存隔离 GFramework.Cqrs 首次分发测量结果

- 更新 benchmark README 与 cqrs-rewrite RP-087 跟踪记录
2026-05-06 09:30:17 +08:00
gewuyou
f776d09f68 fix(ai-first-config): 收口开放对象评审跟进
- 修复 Runtime、Generator 与 Tooling 中开放对象关键字校验的不可达 additionalProperties 分支

- 补充 Tooling 对 additionalProperties false 的正向回归测试

- 更新游戏配置接入文档与 ai-plan 跟踪,记录 PR #325 的核验结论和验证结果
2026-05-06 09:25:59 +08:00
gewuyou
a8f98e467d test(cqrs): 补充请求管道数量矩阵基准
- 新增 request pipeline 0/1/4 数量矩阵基准并保持 GFramework.Cqrs 与 MediatR 对照

- 更新 benchmark README 说明当前场景覆盖与后续扩展方向

- 补充 cqrs-rewrite 跟踪与 trace 的 RP-086 恢复点和验证记录
2026-05-06 09:23:07 +08:00
gewuyou
e6f98cb4af test(cqrs): 补充流式请求基准场景
- 新增 StreamingBenchmarks 并对齐 baseline、GFramework.Cqrs 与 MediatR 的完整枚举对照

- 更新 benchmark README 与 CQRS ai-plan 恢复点,记录 stream 场景落地
2026-05-06 09:14:33 +08:00
gewuyou
96729ddcf1 test(cqrs): 补充基准与生成器回归基础设施
- 新增独立的 GFramework.Cqrs.Benchmarks 项目并引入 request、notification 对比场景

- 补充 request 与 stream invoker provider 的 mixed direct/reflected 顺序回归测试

- 更新 solution、meta-package 排除规则与 CQRS ai-plan 恢复点
2026-05-06 08:57:59 +08:00
gewuyou
cb6dd8a510 fix(game-config): 收紧开放对象关键字边界
- 修复 Runtime、Generator 与 Tooling 对 patternProperties、propertyNames、unevaluatedProperties 的静默接受风险

- 补充三端对称回归测试与 reader-facing 文档边界说明

- 更新 ai-plan 恢复点、验证记录与下一步指针
2026-05-06 08:47:42 +08:00
gewuyou
a8c6c11e9e
Merge pull request #324 from GeWuYou/fix/runtime-generator-boundary
fix(game): 剥离运行时模块对生成器依赖
2026-05-05 13:14:24 +08:00
gewuyou
d9ceb83c2c fix(runtime-generator-boundary): 修复边界校验回归问题
- 修复 runtime-generator 边界校验对独立与带参数 attribute 的漏报问题,并过滤注释示例误报

- 新增 Python 回归测试覆盖独立、限定名、多 attribute 与文档示例场景

- 更新贡献文档与 ai-plan 记录,移除面向用户文档中的内部治理段落并补充验证结果
2026-05-05 13:06:18 +08:00
gewuyou
7288114e33 fix(game): 剥离运行时模块对生成器依赖
- 修复 GFramework.Game 对 SourceGenerators.Abstractions 的项目引用并移除未使用的枚举生成 attribute

- 新增 runtime-generator 边界校验脚本并接入 CI 与发布打包校验

- 更新 AGENTS、贡献文档与 ai-plan 跟踪,明确运行时模块禁止依赖生成器能力
2026-05-05 12:39:10 +08:00
gewuyou
c69942d66e
Merge pull request #323 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-05-04 21:03:25 +08:00
gewuyou
212d5b1cce docs(cqrs): 同步 PR 恢复锚点
- 更新 CQRS active tracking 的当前 PR 锚点为 PR #323
- 补充 PR review 收敛 trace 与最新验证结果
2026-05-04 20:56:19 +08:00
gewuyou
b1f406ad99 test(cqrs): 补齐 request handler gate 回归
- 新增缺少 IRequestHandler 合同时的 generator 静默跳过覆盖

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 19:17:48 +08:00
gewuyou
61cc1be1e5 test(cqrs): 补齐外部 contract gate 回归
- 新增缺少 ILogger 合同时的 generator 静默跳过覆盖

- 新增缺少 IServiceCollection 合同时的 generator 静默跳过覆盖

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 19:15:32 +08:00
gewuyou
915d93d06d test(cqrs): 扩展 registry gate 回归
- 新增缺少 notification handler 合同时的 generator 静默跳过覆盖

- 新增缺少 stream handler 合同时的 generator 静默跳过覆盖

- 新增缺少 registry attribute 合同时的 generator 静默跳过覆盖

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 19:12:49 +08:00
gewuyou
e17fa15a01 test(cqrs): 补齐 registry gate 回归
- 新增缺少 ICqrsHandlerRegistry 时的 generator 静默跳过覆盖

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 19:01:47 +08:00
gewuyou
857ce08edb test(cqrs): 补齐 fallback 元数据回归
- 新增 mixed fallback 禁用多实例 attribute 时的字符串回退覆盖

- 补充 runtime AttributeUsage 变体测试辅助方法

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 18:55:04 +08:00
gewuyou
0ac53a4cee test(cqrs): 补齐 request invoker 合同回归
- 新增 request invoker descriptor 缺失时的 generator 回归覆盖

- 新增 request invoker descriptor entry 缺失时的 generator 回归覆盖

- 更新 CQRS 恢复文档与本轮验证记录
2026-05-04 18:49:26 +08:00
gewuyou
ac95202f9c
Merge pull request #322 from GeWuYou/fix/release-notes-pr-links 2026-05-04 16:05:33 +08:00
gewuyou
478072acc3 fix(release): 修复 git-cliff PR 元数据令牌
- 修复 auto-tag 中 git-cliff 使用 PAT_TOKEN 导致 PR 读取权限不受 job permissions 约束的问题

- 修复 semantic-release trace 中重复日期标题触发 MD024 的问题

- 更新 SEMREL-RP-007 跟踪记录,说明发布说明生成的 token 分工与后续恢复点
2026-05-04 14:19:40 +08:00
gewuyou
53870c1f92 fix(release): 修复发布说明 PR 链接缺失
- 修复 release notes 生成 job 缺少 PR 读取权限的问题

- 更新 semantic-release 主题恢复点与验证记录

- 补充当前修复分支到 ai-plan 启动映射
2026-05-04 10:19:58 +08:00
dependabot[bot]
64c5ecb3ca chore(deps): bump peter-evans/create-pull-request from 7 to 8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 09:59:20 +08:00
dependabot[bot]
2ccacb8102 Bump Meziantou.Analyzer from 3.0.58 to 3.0.60
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.60
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 09:59:03 +08:00
dependabot[bot]
ee998503b3 Bump Meziantou.Polyfill from 1.0.120 to 1.0.121
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.121
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 09:58:51 +08:00
gewuyou
69ea92c149
Merge pull request #319 from GeWuYou/build/semantic-release-rules
build(release): 支持依赖与安全提交触发补丁发布
2026-05-04 09:58:33 +08:00
gewuyou
c5ca161cb5 build(release): 修复发布说明类型映射
- 修复 release-notes-generator 的 Conventional Commits 类型映射

- 补充 SEMREL-RP-006 的验证结果与 PR review 恢复点
2026-05-04 08:14:41 +08:00
gewuyou
53f8baf2ef build(release): 支持依赖与安全提交触发补丁发布
- 更新 semantic-release 规则,将 deps 与 security 提交映射为 patch 发布

- 补充 AGENTS 与贡献文档中的提交类型语义

- 记录 SEMREL-RP-005 验证结果与分支恢复入口
2026-05-03 23:00:33 +08:00
gewuyou
fe1a875785
Merge pull request #317 from GeWuYou/chore/license-headers
Chore/license headers
2026-05-03 22:59:31 +08:00
gewuyou
4153ea59b8 docs(agents): 补充文件头治理规则
- 补充 AGENTS.md 中的许可证文件头规则

- 修复新增治理文件自身缺失的文件头
2026-05-03 21:00:03 +08:00
gewuyou
ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00
gewuyou
a0591afa18
Merge pull request #316 from GeWuYou/docs/godot-logging-composition-archive
docs(godot): 归档 Godot logging 主题
2026-05-03 19:23:43 +08:00
gewuyou
d5d34a626c docs(godot): 修复日志组合文档示例
- 修复组合 logger 示例重复创建文件 appender 的生命周期问题

- 更新 Core logging 文档中的平台无关路径示例

- 补充 Godot 日志页面的路径解析指引承接
2026-05-03 19:07:20 +08:00
gewuyou
230cd0e5d1 docs(godot): 归档 Godot logging 主题
- 补充 GodotLogAppender 与 Core appender 组合示例

- 更新 Godot logging 文档中的文件输出接入说明

- 归档 godot-logging-core-sink 恢复材料并清理 boot 索引
2026-05-03 18:54:33 +08:00
gewuyou
6fa1c20d75
Merge pull request #315 from GeWuYou/feat/godot-logging-core-sink
Feat/godot logging core sink
2026-05-03 15:14:33 +08:00
gewuyou
64e5d8d11d test(godot): 补强日志反射断言
- 补充 GodotLogger 结构化属性反射目标的显式断言

- 优化 反射返回类型不匹配时的测试失败定位

- 更新 godot logging core sink 跟踪与执行 trace
2026-05-03 14:04:59 +08:00
gewuyou
3ced56be8b chore(godot): 处理 Godot 日志 PR 反馈
- 修复 GodotLogAppender 测试对结构化属性顺序的依赖

- 移除 GodotLogger 未使用的私有格式化包装方法

- 更新 ai-plan 默认索引和 trace 恢复记录,避免归档主题与重复标题干扰 boot
2026-05-03 13:24:24 +08:00
gewuyou
1009fee4a4 feat(godot): 新增 Godot 日志 Appender
新增 GodotLogAppender 作为 Core ILogAppender 的 Godot 控制台落点

重构 GodotLogger 输出路径以复用 appender 管线并保持现有 ILogger 入口

补充 Godot appender 渲染测试、文档说明与 active topic 恢复记录
2026-05-03 11:03:58 +08:00
gewuyou
40cce565e6 docs(ai-plan): 启动 Godot logging Core sink 主题
- 归档 Godot logging 合规收尾主题并保留验证结果

- 新增 Godot logging Core sink active topic 恢复入口

- 更新 public boot 索引和当前分支映射
2026-05-03 10:51:16 +08:00
gewuyou
918a61f3b2
Merge pull request #314 from GeWuYou/feat/godot-logging-compliance-polish
Feat/godot logging compliance polish
2026-05-03 10:07:03 +08:00
gewuyou
c967b4df3d fix(godot): 修复日志 review 反馈
- 修复 DeferredLogger 格式化重载提前 string.Format 的热路径问题

- 修复 GodotLogger 默认 options 分配与结构化属性无效 key 处理

- 补充 Godot logging XML 文档、回归测试和 appsettings 接入示例

- 更新 Godot logging PR review 跟踪与验证记录
2026-05-03 09:00:41 +08:00
gewuyou
b4b3538b21 fix(godot): 收敛日志配置评审问题
- 修复 GodotLog 配置源生命周期、Shutdown 释放与延迟 logger 并发发布问题

- 修复 Godot logger 配置归一化、无效数字级别校验和未知级别颜色回退

- 优化 Godot 日志模板缓存边界、内部文档和 update-namespaces 脚本失败传播

- 补充 Godot logging 回归测试、用户文档与 active ai-plan 恢复记录
2026-05-02 22:43:07 +08:00
gewuyou
a52f3c6fec feat(godot): 补齐 GodotLogger 接入文件
- 新增 GodotLogger 的配置加载、延迟入口和宿主输出适配实现。
- 复制 ai-libs/GodotLogger 的 MIT 许可证到 third-party-licenses/GodotLogger/LICENSE。
- 补充 active tracking 与 trace,保留下一阶段对齐点。
2026-05-02 21:39:26 +08:00
gewuyou
748bb714fb feat(godot): 收敛 GodotLogger 宿主能力
- 新增 GodotLog、DeferredLogger 和配置自动发现、热重载接线。
- 修复已缓存 logger 的级别判定与输出路径,使动态配置生效。
- 更新文档与追踪记录,明确当前收敛边界和恢复点。
2026-05-02 21:33:28 +08:00
GeWuYou
36e1ae5f32 feat(godot): add configurable logger templates 2026-05-02 19:33:00 +08:00
gewuyou
6aa741114f ci: include third-party licenses in compliance bundle 2026-05-02 19:10:44 +08:00
gewuyou
5306c98470 chore(ai-plan): archive release summary notes recovery point 2026-05-02 19:10:18 +08:00
gewuyou
35a62e6bfb
Merge pull request #313 from GeWuYou/feat/release-summary-notes
fix(release): 修复发布说明变更汇总标题
2026-05-01 23:36:13 +08:00
gewuyou
43094fba83 fix(release): 修复发布说明变更汇总标题
- 修复 git-cliff 模板的 What's Changed 归属,让分类变更列表承担完整变更清单语义

- 保留 每条变更末尾的作者与 PR 链接,避免新增独立 PR 索引造成重复展示

- 更新 semantic-release-versioning 恢复文档与当前分支映射
2026-05-01 23:29:04 +08:00
gewuyou
a1b3576b09
Merge pull request #308 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-05-01 21:58:22 +08:00
gewuyou
e391833615
Merge pull request #312 from GeWuYou/feat/release-summary-notes 2026-05-01 21:02:22 +08:00
gewuyou
a870ea28a8 fix(ci): 修复发布说明输出
- 修复 git-cliff 模板重复输出提交的问题

- 更新 GitHub Release 使用 release notes 文件作为正文

- 补充 PR review 修复记录与验证结果
2026-05-01 20:40:01 +08:00
gewuyou
3cb0177936 feat(ci): add cliff-based release summaries 2026-05-01 20:22:08 +08:00
gewuyou
6983b7ee84 docs(source-generators): 收口最新 PR 审查跟进
- 更新 schema-config-generator 文案并同步 PR review 最新建议

- 修复 documentation-full-coverage-governance active tracking 的 RP-055 验证引用与审查事实

- 更新 active trace 的 latest reviewed commit、线程结论与验证摘要
2026-05-01 19:08:39 +08:00
gewuyou
00ecf6fb10 docs(source-generators): 收口 PR 审查文档跟进
- 更新 source-generators 文档中的 fallback 条件说明与自包含运行时示例

- 压缩 documentation-full-coverage-governance active tracking 的验证摘要并同步最新 PR 审查事实

- 补充 active trace 的显式风险记录与本轮验证结论
2026-05-01 17:02:25 +08:00
dependabot[bot]
52b96ed36f Bump Meziantou.Analyzer from 3.0.52 to 3.0.58
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.58
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 16:52:02 +08:00
dependabot[bot]
85a8b35154 Bump Meziantou.Polyfill from 1.0.116 to 1.0.120
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.120
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 16:51:51 +08:00
dependabot[bot]
9581682231 Bump Microsoft.NET.Test.Sdk from 18.4.0 to 18.5.1
---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 16:51:35 +08:00
gewuyou
896e3efaa9 docs(source-generators): 收口 PR 审查中的文档入口表述
- 更新 source-generators 文档中的测试入口表述,使用语义化链接标签替代源码路径

- 校正 documentation-full-coverage-governance active ai-plan 的 PR 审查事实、验证结果与下一步恢复点
2026-05-01 15:37:26 +08:00
gewuyou
4fdb1e7398 docs(ai-plan): 收口 PR 审查遗留文档问题
- 修复 documentation-full-coverage-governance 归档中的 Markdown 行内代码闭合错误

- 更新 active tracking 与 trace,使其反映 PR #308 review 的本地核验结论

- 补充本轮文档构建验证结果与后续恢复步骤
2026-05-01 13:29:52 +08:00
gewuyou
241c9ffeb3 docs(source-generators): 补充迁移兼容说明并归档恢复历史
- 补充 Schema 配置生成器专题的迁移步骤、兼容边界与回退建议

- 更新 active tracking 与 active trace,只保留当前恢复事实、验证结果与归档指针

- 新增 RP-049 到 RP-052 的状态、验证与时间线归档文件
2026-05-01 13:22:14 +08:00
gewuyou
7e77fee0a5 docs(ai-plan): 更新文档覆盖恢复点
- 更新 committed diff 基线,记录本轮提交后的 8 files / 337 lines 状态

- 补充 documentation-full-coverage-governance 的下一步建议,避免后续按过时工作树峰值恢复
2026-05-01 13:22:13 +08:00
gewuyou
103b961e6f docs(source-generators): 补充生成器专题覆盖并更新进度
- 新增 Schema 配置生成器专题页,补充输入契约、生成物与诊断边界

- 更新 source-generators、API 参考与 CQRS 文档,说明共享支撑层阅读路线与 fallback 分层

- 更新 documentation-full-coverage-governance 的 tracking 和 trace,记录批次指标与验证结果
2026-05-01 13:22:12 +08:00
gewuyou
1c21df1414
Merge pull request #307 from GeWuYou/feat/cqrs-optimization
Feat/Add stream invoker provider support to CQRS handler registry generator
2026-05-01 09:31:00 +08:00
gewuyou
26314dba5e docs(cqrs-rewrite): 收敛恢复入口文档
- 更新 active tracking,仅保留 RP-076、PR #307、活跃风险、权威验证与下一推荐步骤

- 重构 active trace,仅保留当前阶段决策、验证结果与后续恢复方向

- 补充 RP-062 至 RP-076 的 trace 归档,承接迁出的历史阶段上下文
2026-04-30 18:47:55 +08:00
gewuyou
9296def108 test(cqrs): 补齐 stream invoker gate 回归
- 补充 stream invoker descriptor 与 descriptor entry 缺失时整体跳过 provider 元数据的生成器回归

- 优化测试辅助重命名逻辑,精确模拟 metadata name 缺失而不破坏其余合同编译

- 更新 cqrs-rewrite 跟踪与追踪,记录 PR #307 follow-up 的恢复点和验证结果
2026-04-30 17:50:30 +08:00
gewuyou
83528742bb fix(cqrs): 收敛生成调用描述符与PR评审回归
- 修复 request 与 stream generated invoker 描述符的静态方法与空值防御,提前拒绝非法元数据

- 补充 provider 空描述符枚举与非静态 invoker 回退回归,更新相关 XML 注释与中文文档语义

- 更新 cqrs-rewrite 活跃跟踪、执行 trace 与验证归档,记录 PR #307 的当前验证结论
2026-04-30 16:25:59 +08:00
gewuyou
36db7d0929
Merge pull request #306 from GeWuYou/feat/ai-first-config
Feat/ai first config
2026-04-30 16:09:43 +08:00
gewuyou
e671646a74 fix(ai-first-config): 收口 PR 306 审查遗留项
- 新增 Generator 与 Tooling 的 anyOf 和坏形状回归覆盖,补齐组合关键字与未知 type 拒绝

- 修复 VS Code 配置工具的 object-array 直属项收集与 contains 文案一致性问题

- 更新 README、Game 文档与工具说明,明确 additionalProperties 显式 false 边界与最小接入路径

- 补充 ai-plan 跟踪与 trace,记录 PR 306 open threads 收口结果和验证摘要
2026-04-30 15:22:04 +08:00
gewuyou
8b36626266 test(cqrs): 补充 provider fallback 回归
- 新增 non-enumerating request 与 stream provider 回归,锁定 dispatcher 会继续回退到反射路径

- 更新 CQRS 重写恢复点到 RP-074,并记录定向验证结果
2026-04-30 15:04:10 +08:00
gewuyou
040bcb99e4 fix(ai-first-config): 收口当前 PR 审查遗留项
- 新增 anyOf 对称运行时回归测试,覆盖组合关键字拒绝分支

- 更新 Game Abstractions README 的配置系统链接显示名,避免暴露原始路径

- 精简 active tracking 的批次级验证细节并补充恢复指针

- 清理 trace 中重复日期标题,消除 MD024 风险
2026-04-30 15:03:47 +08:00
gewuyou
1091594224 fix(cqrs): 收敛 generated invoker 异常语义
- 修复 request 与 stream generated invoker 签名不兼容时冒出 ArgumentException 的行为,统一包装为 InvalidOperationException

- 补充对应 runtime 回归测试并更新 CQRS 重写恢复点到 RP-073
2026-04-30 14:59:19 +08:00
gewuyou
502f65239c test(cqrs): 补充 provider gate 合同回归
- 新增 request 与 stream gate 回归,锁定 runtime 合同不完整时不会发射 invoker provider 元数据

- 更新 CQRS 重写恢复点到 RP-072,并记录定向验证与 helper 收敛
2026-04-30 14:53:05 +08:00
gewuyou
dc21188c79 test(cqrs): 锁定 precise reflected provider 边界
- 新增 request 与 stream generator 回归,明确 precise reflected 注册不会发射 invoker provider 元数据

- 更新 CQRS 重写恢复点到 RP-071,并记录本轮验证与边界结论
2026-04-30 14:44:51 +08:00
gewuyou
6b5c5d9e2d docs(cqrs): 更新生成式 invoker 恢复点
- 更新 CQRS 重写跟踪到 RP-070,补充 hidden-implementation generated invoker runtime 回归说明

- 补充本轮定向验证结果与当前相对 origin/main 的 branch diff 指标
2026-04-30 14:37:12 +08:00
gewuyou
5a77e2fb33 test(cqrs-tests): 补充 hidden implementation generated invoker 回归
- 新增 hidden implementation request provider runtime 集成回归,验证 registrar 与 dispatcher 会继续消费 generated metadata

- 新增 hidden implementation stream provider runtime 集成回归,覆盖可见 handler interface 下的流式 dispatch 路径

- 补充对应测试替身 registry 与隐藏 handler 容器,保持现有 generated invoker 测试风格
2026-04-30 14:13:09 +08:00
gewuyou
eb30388267 feat(cqrs): 扩大生成式 invoker 发射范围
- 扩大 request 与 stream invoker 发射范围到 reflected-implementation 注册场景

- 补充 hidden implementation 回归测试并更新 CQRS ai-plan 恢复点
2026-04-30 14:07:05 +08:00
gewuyou
172c08176c test(cqrs): 补充 hidden implementation provider 元数据断言
- 新增 hidden implementation 但 visible handler interface 的 request provider 生成断言

- 新增 hidden implementation 但 visible handler interface 的 stream provider 生成断言
2026-04-30 13:34:08 +08:00
gewuyou
ea0b937705 feat(cqrs): 补充生成式 stream invoker 接缝
- 新增 stream invoker provider、descriptor 与 dispatcher/registrar 接线

- 更新 source generator 与回归测试,覆盖 generated stream invoker 发射和消费语义

- 更新 CQRS 文档与 ai-plan 恢复点,补充 stream invoker 的接入与验证记录
2026-04-30 13:26:54 +08:00
gewuyou
85f7c1707e docs(game): 同步场景与宿主入口配置边界
- 补充 Scene 与 UI 入口对配置系统正式边界页的指引

- 明确 oneOf、anyOf 与非 false additionalProperties 不属于默认采用路径

- 更新 Godot storage 入口对 VS Code 工具辅助层与 raw YAML 回退路径的说明
2026-04-30 13:25:29 +08:00
gewuyou
01f1e5fd72 docs(game): 同步数据与设置入口配置边界
- 补充 data 与 setting 入口对 AI-First 配置系统共享 schema 子集的 reader-facing 提示

- 说明 DataRepository、UnifiedSettingsDataRepository 与 SettingsModel 负责持久化和应用而不放宽配置契约

- 更新复杂 schema shape 回到 config-system 与 raw YAML 处理的采用指引
2026-04-30 13:25:29 +08:00
gewuyou
e8203bc76e docs(game): 同步生成器与持久化入口配置边界
- 补充 Game.SourceGenerators 对共享 schema 子集的 reader-facing 采用边界说明

- 更新 serialization 与 storage 页面中的复杂 schema 回退路径提示

- 明确 oneOf、anyOf 与非 false additionalProperties 不属于默认采用路径
2026-04-30 13:25:29 +08:00
gewuyou
7e62313b24 docs(game): 同步总览入口配置采用边界
- 补充首页、入门页与 API 导航对 AI-First 配置工作流正式契约的高层说明

- 更新入口提示以说明 additionalProperties: false 与 oneOf/anyOf 的默认采用边界

- 强调超出共享 schema 子集的复杂 shape 应回到 raw YAML 与 schema 设计处理
2026-04-30 13:25:26 +08:00
gewuyou
74f853bffe docs(game): 同步生成器与抽象层配置边界
- 更新 source-generators 入口,说明 Game.SourceGenerators 面向与 Runtime 对齐的共享 schema 子集

- 补充 abstractions 文档与 README,明确配置契约实现边界仍需回到 GFramework.Game 与 config-system 文档

- 强调 oneOf、anyOf 与非 false 的 additionalProperties 不属于当前 reader-facing 采用路径
2026-04-30 13:23:19 +08:00
gewuyou
56a96b50fd docs(game): 同步配置入口采用边界
- 更新 Game 入口页的静态 YAML 配置接入提示,明确 Runtime 与 Source Generator 的共享契约优先级

- 补充安装入口对 additionalProperties: false 与 oneOf / anyOf 拒绝边界的 reader-facing 提示

- 优化入口页采用建议,说明复杂 shape 应回退到 raw YAML 与 schema 设计本体
2026-04-30 13:23:19 +08:00
gewuyou
0721cafd03 docs(game): 同步配置工作流入口边界
- 更新仓库根 README 的 AI-First 配置接入提示与共享子集边界说明

- 补充 GFramework.Game README 中的配置系统采用约束与 raw YAML 回退路径
2026-04-30 13:23:19 +08:00
gewuyou
fdcb11c92c fix(config-tool): 收紧坏形状 schema 解析边界
- 修复 Tooling 侧 additionalProperties 仅接受 false 的共享边界校验

- 补充数组 items 与 contains 子 schema 必须显式声明 type 的拒绝逻辑

- 更新 ai-plan 恢复摘要与 JS 回归测试验证记录
2026-04-30 13:23:19 +08:00
gewuyou
e8cceac7ae docs(game): 补齐配置工具能力边界说明
- 更新 config system 与 config tool 的 reader-facing 边界说明

- 补充 additionalProperties:false、oneOf/anyOf rejection 与 raw YAML 回退路径

- 记录本批次 Tooling/Docs 收口验证与下一步
2026-04-30 13:23:19 +08:00
gewuyou
7f98cafbfa fix(config-tool): 统一 contains 与本地化提示文案
- 修复 dependentRequired 校验消息键缺失导致的隐式 undefined 文案映射

- 统一 contains 与 dependent schema 相关中文提示措辞并补齐 maxContains hint 输出

- 补充本地化与 contains 摘要测试覆盖新增文案与回归场景
2026-04-30 13:23:19 +08:00
gewuyou
3f335f19d6 docs(game): 收口配置工具说明入口
- 更新 config-tool 文档,承接 VS Code 工具能力、边界与适用场景说明

- 优化 config-system 文档,移除重复工具细节并保留系统级入口说明
2026-04-30 13:23:19 +08:00
gewuyou
13b77eb3fe fix(game-config): 显式声明闭合对象字段边界
- 修复 Runtime 与 Source Generator 对 additionalProperties 的隐式闭合对象语义,统一接受 additionalProperties:false 并拒绝其它开放对象形状

- 补充 Release 回归测试,覆盖生成器诊断与运行时 additionalProperties 边界

- 更新配置工具元数据与 README 说明,使命令、设置和当前能力描述保持一致
2026-04-30 13:23:19 +08:00
gewuyou
eddce21383 docs(ai-first-config-system): 补充 tooling lane 收口验证记录
- 更新 tracking 中的 Tooling lane 收口验证结果,补齐实际的 Release build 结论
2026-04-30 13:23:19 +08:00
gewuyou
fad391e8cf feat(config-tool): 支持对象数组内嵌对象数组编辑
- 新增对象数组编辑器对数组项内嵌对象数组的递归渲染与保存能力

- 补充嵌套对象数组表单模型与 YAML 写回回归测试

- 更新配置系统文档中的 raw YAML 回退边界说明
2026-04-30 13:23:19 +08:00
gewuyou
d6a154726c fix(game-config): 显式拒绝 oneOf 与 anyOf 组合关键字
- 修复 Runtime、Source Generator 与 Tooling 对 oneOf/anyOf 的静默接受,统一改为显式报错

- 补充 JS 与 Release 测试回归,覆盖生成器诊断和运行时拒绝路径

- 更新 ai-plan 跟踪与中文文档,明确后续默认跳过会改变生成类型形状的组合关键字
2026-04-30 13:23:19 +08:00
gewuyou
f17f9f3da6 test(cqrs): 补充 stream invoker provider 生成断言
- 新增 stream invoker provider runtime fixture,复用 request provider 测试风格锁定 descriptor 和静态 invoker 形状

- 补充 Phase 8 stream invoker provider 回归测试骨架,并暂时以 Ignore 挂起等待主线程生成实现落地
2026-04-30 13:14:29 +08:00
gewuyou
98477068d6 docs(cqrs): 补充生成式 stream invoker 文档语义
- 更新 CQRS runtime 与生成器文档,补充 generated stream invoker provider / descriptor 的并列表述。

- 说明 runtime 优先消费 generated request / stream invoker 元数据,未命中时回退到既有反射 binding。

- 调整 request-only 措辞,使 reader-facing 文案与现有 generated request invoker 语义保持一致。
2026-04-30 13:14:11 +08:00
gewuyou
8d6fc74b3d
Merge pull request #305 from GeWuYou/feat/cqrs-optimization
Feat/Add notification publisher seam and request invoker provider for CQRS runtime
2026-04-30 13:05:41 +08:00
gewuyou
0f1e91a499 fix(cqrs): 收口PR审查遗留问题
- 修复并发 CQRS 解析测试的失败路径释放逻辑,并收敛重复 orchestration 以消除新增 analyzer warning

- 更新 generated request invoker provider 相关测试、XML 文档与 generator 注释,明确默认 runtime 的描述符预热契约

- 调整 legacy runtime alias 注册与 generated provider 注册顺序,并同步 cqrs-rewrite 跟踪文档中的 PR #305 triage 结果
2026-04-30 12:58:05 +08:00
gewuyou
0c65cd8e38 feat(cqrs): 前移请求调用器生成注册
- 新增 generated request invoker provider seam,并让 registrar 与 dispatcher 复用编译期请求调用元数据

- 扩展 CQRS source generator 发射 request invoker provider 成员与最小 request invoker 方法

- 补充 runtime 与 source-generator 回归测试,并更新 cqrs-rewrite 追踪到 RP-067
2026-04-30 12:10:25 +08:00
gewuyou
7209fdc32d docs(cqrs): 收口旧版运行时别名说明
- 更新 LegacyICqrsRuntime 兼容层说明,明确旧命名空间别名与正式 CQRS runtime seam 的边界

- 补充容器基础设施回填 legacy alias 的回归测试,并收敛相关 helper 注释

- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-066 的批处理结果和验证
2026-04-30 11:38:52 +08:00
gewuyou
c1dfee3c71 test(core): 补充架构上下文CQRS懒解析回归
- 新增 PublishAsync 与 CreateStream 并发首次访问只解析一次 ICqrsRuntime 的回归测试

- 更新 cqrs-rewrite 跟踪与 trace,记录三份 Mediator 测试命名收口已完成
2026-04-30 11:28:37 +08:00
gewuyou
b015a91e57 test(cqrs): 收口 ArchitectureContext 综合测试命名
- 重命名综合测试类、命名空间与文件路径,使其与 CQRS 和 ArchitectureContext 语义一致

- 更新中文注释与局部变量命名,移除残留的 Mediator 表述且不改变测试行为

- 收窄文件内测试辅助类型可见性,避免额外暴露旧语义类型并保持项目编译通过
2026-04-30 11:26:18 +08:00
gewuyou
f44629deb3 test(cqrs): 统一架构上下文集成测试命名
- 重命名 CQRS 架构上下文集成测试文件、命名空间与测试类以移除 Mediator 语义残留

- 更新嵌套测试类型、局部变量与中文注释为 CQRS 和 ArchitectureContext 一致命名

- 补充公开测试类型与成员的 XML 文档说明而不改变测试断言行为
2026-04-30 11:25:16 +08:00
gewuyou
e1af8ac833 test(cqrs): 收口高级特性测试的CQRS命名
- 重命名高级特性测试类、命名空间与文件路径,统一到 CQRS 与 ArchitectureContext 语义

- 更新测试方法名、中文注释与日志器名称,移除残留的 Mediator 命名

- 补充当前测试文件内辅助类型的 XML 文档,保持测试行为不变
2026-04-30 11:24:22 +08:00
gewuyou
22f608eb4d feat(cqrs): 新增通知发布策略接缝
- 新增 notification publisher seam 与默认顺序发布器,保持零处理器静默完成与首错即停语义

- 调整 dispatcher、runtime factory 与测试基础设施,支持复用容器中预注册的通知发布策略

- 补充 publisher 回归测试并更新 CQRS 文档与 ai-plan 恢复点
2026-04-30 11:07:24 +08:00
gewuyou
a3fe2974f7 docs(cqrs): 归档CQRS与Mediator评估结论
- 新增 CQRS 与 Mediator 的结构化评估归档,明确生产替代完成度与设计吸收差距

- 更新 cqrs-rewrite active tracking 与 trace,提升恢复点到 RP-063 并重排后续优先级

- 补充本轮最小 Release 构建验证结果,保持 ai-plan 恢复入口与实际状态一致
2026-04-30 10:16:35 +08:00
gewuyou
5eea12b5ba
Merge pull request #304 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-04-30 09:43:53 +08:00
gewuyou
72ce0f1199 test(cqrs): 收敛剩余 PR304 review 跟进
- 修复 fallback failure 测试夹具的并行执行与 stream state 文档命名问题

- 归档 cqrs-rewrite 历史 trace 与验证记录并压缩 active 恢复入口

- 更新当前验证结果与下一步,保持 PR304 review follow-up 可恢复
2026-04-30 09:23:01 +08:00
gewuyou
98021f59e7 test(cqrs): 补齐 PR304 测试 XML 注释
- 补齐上下文校验 handler 的 Handle 参数与返回 XML 注释

- 更新带 DispatchId 的测试请求与通知 XML 参数注释

- 记录 cqrs-rewrite 主题的本轮 PR review 跟进
2026-04-30 09:00:24 +08:00
gewuyou
255a6a152e fix(cqrs): 收敛 PR 304 review 跟进
- 修复 CqrsDispatcher 的 pipeline invoker 重复创建,并补齐缓存线程模型文档

- 优化 CQRS 与 generator 回归测试的并发保护和稳定语义断言

- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-062 的 PR review follow-up 验证结果
2026-04-30 07:43:42 +08:00
gewuyou
bc365197e8 docs(cqrs): 刷新批处理恢复点记录
- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-061 的 registrar fallback 失败分支批次

- 同步当前 gframework-batch-boot 50 的分支规模与下一步恢复入口
2026-04-29 23:03:22 +08:00
gewuyou
a445807b83 test(cqrs): 新增 registrar fallback 失败分支测试
- 新增独立测试文件覆盖 fallback 名称无法解析时的 warning 与跳过行为

- 新增 fallback 名称解析抛异常时的 warning 回归断言

- 补充 direct fallback 跨程序集条目被跳过并记录 warning 的验证
2026-04-29 23:03:22 +08:00
gewuyou
52b9ddd4a7 test(cqrs): 补充上下文前置条件失败回归
- 新增 dispatcher 上下文校验测试,锁定非 IArchitectureContext 上下文的 request、notification 与 stream 失败语义

- 通过公开 runtime 工厂与最小容器 mock 覆盖调用前校验路径,不改 runtime 实现

- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-060 的验证结论
2026-04-29 23:03:21 +08:00
gewuyou
57d848546f test(cqrs): 补充非请求分发上下文回归
- 新增 notification 与 stream dispatch binding 上下文刷新回归,锁定缓存复用时仍按当次分发重新注入上下文

- 补充测试替身记录 handler 实例身份与 ArchitectureContext,覆盖重复分发场景

- 更新 cqrs-rewrite 跟踪与 trace,记录 RP-058 和 RP-059 的验证结论
2026-04-29 23:03:21 +08:00
gewuyou
226c0b3b49 test(cqrs): 补充注册服务程序集去重测试
- 新增 DefaultCqrsRegistrationService 的独立测试文件,覆盖同次调用内的重复程序集键去重行为

- 验证跨两次调用重复程序集键时会跳过注册并写入 debug 日志
2026-04-29 23:03:21 +08:00
gewuyou
36596210ff test(cqrs): 新增 ReflectionFallbackAttribute 合同测试
- 新增 CqrsReflectionFallbackAttribute 的叶子级合同测试,覆盖旧版 marker 语义

- 补充字符串与 Type 输入的过滤、去重、排序归一化断言

- 验证空参数数组保护,固定 runtime 可依赖的 attribute 元数据边界
2026-04-29 23:03:21 +08:00
gewuyou
16cd96b94b test(cqrs): 补充 dispatcher 缓存上下文回归
- 新增 cached request pipeline executor 的上下文刷新回归测试与专用测试替身

- 记录 singleton behavior 生命周期语义下的上下文重新注入结论

- 更新 cqrs-rewrite 跟踪与 trace 恢复点到 RP-057
2026-04-29 23:03:21 +08:00
gewuyou
5365f9aec2 refactor(cqrs): 删除 pointer 运行时重建残留
- 重构 CqrsHandlerRegistryGenerator 的运行时类型引用模型,移除不可达的 pointer 子结构

- 删除 SourceEmission 中已失效的 MakePointerType 发射分支,保持 pointer 拒绝语义不变

- 更新 cqrs-rewrite 跟踪与 trace,记录本轮清理和定向验证结果
2026-04-29 23:03:21 +08:00
gewuyou
e51b64f8d5 test(cqrs): 补齐外部隐藏泛型精确注册回归
- 新增外部程序集隐藏泛型定义与可见类型实参的 precise registration 回归

- 更新 CQRS 重写跟踪与 trace,记录本轮覆盖范围和验证结果
2026-04-29 23:03:21 +08:00
gewuyou
7b5efde3bd test(cqrs): 补强数组类型生成回归
- 新增多维数组、交错数组与外部程序集隐藏元素类型的 precise runtime type lookup 回归

- 更新 cqrs-rewrite 跟踪与追踪,记录 RP-053 到 RP-054 的并行批次收口与验证结果
2026-04-29 23:03:21 +08:00
gewuyou
e81a43680d fix(cqrs): 缓存请求管道执行形状
- 优化 CqrsDispatcher 的 request pipeline 路径,按请求类型与行为数量缓存 typed executor 形状并在单次分发中绑定当前 handler 与 behaviors

- 补充 dispatcher 缓存回归测试,覆盖 pipeline executor 的首次创建、后续复用与行为顺序稳定
2026-04-29 23:03:21 +08:00
gewuyou
3b4eb3e40a docs(cqrs): 更新入口与回退语义说明
- 更新 CQRS 入口文档,明确 generated registry 优先与 targeted fallback 的注册顺序

- 修正 README 对 CqrsReflectionFallbackAttribute 的过时描述,补充多实例与 Type 或字符串双合同语义

- 优化 API 参考中的 CQRS 阅读关注点,突出 generated registry 与 targeted fallback contract
2026-04-29 23:03:21 +08:00
gewuyou
79f9cb3706
Merge pull request #303 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-29 22:59:12 +08:00
gewuyou
ddaabd8104
Merge pull request #302 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-04-29 16:32:45 +08:00
gewuyou
8d8b94f608 fix(cqrs): 收敛 fallback 审查跟进
- 修复 generator preamble 的多实例 fallback 特性排版并移除死参数

- 补强 mixed/direct fallback 生成回归断言并拒绝空 marker

- 更新 CQRS 审查跟踪记录与 XML 文档
2026-04-29 16:20:15 +08:00
gewuyou
76fcdb8233 perf(cqrs): 拆分混合 fallback 元数据
- 优化 CqrsReflectionFallbackAttribute 与生成器发射策略,在 mixed 场景下拆分 Type 与字符串 fallback 元数据
- 补充 CQRS runtime 与 SourceGenerators 回归测试,锁定多实例 fallback 特性和定向类型回查行为
- 更新 CQRS 生成器文档与 ai-plan 恢复记录,沉淀 RP-052 的验证结果与下一步
2026-04-29 13:37:05 +08:00
gewuyou
1d5404e206 docs(documentation-governance): 收口数据与 UI 文档措辞
- 更新 Game 数据与存储页面、Godot UI 页面中的 reader-facing 说明,移除内部证据口吻、外部项目指代和生硬导流

- 更新 CQRS 抽象层与 SourceGenerators.Common README 的标签表述,避免暴露源文件路径列表和实现级打包术语

- 补充 documentation-full-coverage-governance 的 RP-050 恢复点、验证结果与 origin/main stop-condition 计量
2026-04-29 13:36:07 +08:00
gewuyou
5fd71f3620 perf(cqrs): 收敛生成器 fallback 元数据发射
- 优化 CqrsHandlerRegistryGenerator 的 fallback 合同探测与元数据发射策略,在可直接引用 handlers 时优先输出 Type 元数据
- 补充 SourceGenerators 回归测试,覆盖字符串合同兼容路径与直接 Type 元数据优先级
- 更新 CQRS 生成器说明与 ai-plan 恢复文档,记录 RP-051 的验证结果与后续方向
2026-04-29 13:25:20 +08:00
gewuyou
e18512f043 docs(documentation-governance): 收口 Game 与 Godot 文档措辞
- 更新 Game / Godot 细页的交叉链接与边界描述,移除内部路径、旧文档对比和命令式跳转

- 更新 GFramework.Godot 与配置工具 README 的公开标签,避免暴露测试路径和原始文档路径

- 补充 documentation-full-coverage-governance 的 RP-049 恢复点、验证结果与 origin/main stop-condition 计量
2026-04-29 13:23:26 +08:00
gewuyou
4557dde631
Merge pull request #301 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-29 11:14:56 +08:00
gewuyou
0ad2ed1761 fix(game): 修复空对象配置比较键并归档 warning reduction 主题
- 修复 YamlConfigAllowedValue 与 YamlConfigConstantValue 对空对象 const 或 enum 比较键的误判,同时继续拒绝非空纯空白输入
- 补充 YamlConfigModelContractTests 对空比较键与纯空白比较键的回归覆盖,并验证空对象 const 场景
- 更新 ai-plan 公共索引并归档 analyzer-warning-reduction 主题,保留最终 PR review 结论与验证记录
2026-04-29 10:27:01 +08:00
GeWuYou
590f2cb516 fix(enum):补充枚举注解 2026-04-29 10:17:02 +08:00
gewuyou
f5f2c251e5 fix(pr-review): 修复当前评审中仍然成立的问题
- 修复 Mediator 集成测试中的阻塞等待、缓存竞态与共享状态原子性问题

- 补充 YamlConfig 运行时模型的构造期约束与 exception XML 文档

- 新增 模型契约回归测试并更新 analyzer warning reduction 恢复文档
2026-04-29 09:19:24 +08:00
gewuyou
7da985947c fix(game): 清理剩余配置 schema warning
- 重构 YamlConfigSchemaValidator 的长方法为语义化 helper,清理剩余 MA0051 warning
- 修复 条件分支 helper 的字符串比较方式,避免新增 MA0006 warning
- 更新 analyzer warning reduction 跟踪与 trace,记录仓库根 clean build 已归零
2026-04-29 08:55:03 +08:00
gewuyou
104ac25dc3 refactor(game): 拆分 schema 校验模型类型
- 拆分 schema model 类型到独立同名文件

- 清理 schema 校验模型的文件命名 analyzer 告警

- 更新 warning reduction 批处理收口状态
2026-04-29 08:38:23 +08:00
gewuyou
1395b84439 refactor(game): 拆分对象 schema 关键字校验方法
- 重构 dependentRequired 与 dependentSchemas 的单项解析流程

- 重构 allOf 与条件 schema 的分支解析流程

- 优化 object-focused 内联 schema 的 properties 与 required 校验拆分
2026-04-29 08:32:04 +08:00
gewuyou
e1c1eb1123 fix(game): 收紧 schema 正则校验边界
- 修复 schema 正则校验缺少超时边界导致的 analyzer 风险

- 更新字符串等值比较为 ordinal 语义

- 补充 warning reduction 批处理恢复状态与验证结果
2026-04-29 08:26:19 +08:00
gewuyou
9109eecea9 test(cqrs): 减少 Mediator 综合测试告警
- 优化测试 helper 类型作用域以消除文件名匹配告警

- 补充异步等待 ConfigureAwait(false) 以满足 analyzer 约束

- 调整集合抽象、字符串比较器和异常参数名用法
2026-04-29 08:19:16 +08:00
gewuyou
121df440c3 test(cqrs): 清理 Mediator 高级测试告警
- 修复 Mediator 高级测试中的异步等待告警

- 修复 验证请求异常参数名告警

- 优化 测试辅助类型区域的文件名告警处理
2026-04-29 08:18:16 +08:00
gewuyou
ed269d4a34 test(cqrs): 清理 Mediator 架构集成测试警告
- 优化 Mediator 架构集成测试的 helper 类型作用域,消除文件名与类型名警告

- 补充异步测试路径的 ConfigureAwait(false),满足 analyzer 要求

- 更新测试集合暴露类型为只读或抽象集合,保留行为不变
2026-04-29 08:16:05 +08:00
gewuyou
0e32dab4a2
Merge pull request #299 from GeWuYou/docs/sdk-update-documentation
Documentation: migrate from ai-libs examples to generic guidance
2026-04-28 17:15:47 +08:00
gewuyou
18115f8807
Merge pull request #300 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-28 16:04:24 +08:00
gewuyou
5c4f2df15b docs(analyzer-warning-reduction): 同步PR审查恢复记录
- 更新 tracking 文档中的变更文件计数与验证口径,使其与当前 PR head 和 trace 记录一致。

- 补充 RP-092 trace,记录当前 open threads 复核结论、定向测试结果与后续恢复步骤。
2026-04-28 15:49:26 +08:00
gewuyou
f33a176570 refactor(core-tests): 提取共享架构上下文测试基类
- 重构 TestArchitectureContext 与 TestArchitectureContextV3 的共享 IArchitectureContext 测试实现到 TestArchitectureContextBase
- 更新 gframework-pr-review 技能规则,要求对已验证成立的 nitpick 进行显式 triage
- 补充 analyzer-warning-reduction 的恢复点与验证记录
2026-04-28 13:23:40 +08:00
gewuyou
a1bfd82945 test(core-tests): 补齐事件上下文回归覆盖
- 补齐 TestArchitectureContext 与 TestArchitectureContextV3 的事件注销与空参数契约回归测试
- 整理 TestResourceLoader 的命名空间缩进以收口局部格式噪音
- 更新 analyzer-warning-reduction 的恢复点与验证记录
2026-04-28 13:00:16 +08:00
gewuyou
9888f80945 docs(ai-plan): 收口PR299剩余追踪归档问题
- 更新 active tracking 与 latest validation,改为记录 PR #299 当前仅剩的 ai-plan review 项。

- 归档 RP-041 到 RP-048 的 trace 时间线,并把 active trace 收敛为恢复点、验证摘要与下一步。

- 补充 PR review 抓取与 docs 站点构建结果,保持本轮收口具备可追溯验证记录。
2026-04-28 11:05:44 +08:00
gewuyou
1635a03a99 fix(tests): 收敛PR300审查遗留问题
- 修复 TestArchitectureContextV3 的共享事件总线语义并补充对应回归测试

- 优化 CapturingLoggerFactoryProvider 的最小级别同步策略并补充验证

- 更新 RegistryInitializationHookBase 异常文档与 analyzer warning reduction 的恢复文档归档
2026-04-28 10:11:05 +08:00
gewuyou
5693ab7e6f fix(test-helpers): 收敛PR300评审问题
- 修复测试架构上下文、生命周期钩子与注册表初始化钩子的评审问题,避免静默成功或错误共享状态

- 补充 TestResourceLoader、TestLogger、CapturingLoggerFactoryProvider 与 CQRS 测试辅助类型的契约文档和并发语义

- 新增测试覆盖并更新 analyzer-warning-reduction 活跃跟踪,记录 PR #300 跟进验证与现存 Cqrs warning blocker
2026-04-28 09:26:20 +08:00
gewuyou
121479835a docs(governance): 收口 PR 审查遗留文档问题
- 修复抽象层入口页与生命周期文档中的语义化导航和初始化入口说明
- 更新教程与排障文档中过时的架构级 Init() 示例,区分 OnInitialize()、InstallModules() 与 OnInit()
- 归档 active tracking 的详细验证历史并补充 RP-048 trace
2026-04-28 08:52:07 +08:00
gewuyou
ba4ace8d40 test(analyzer): 收敛 Core.Tests 与 Cqrs.Tests 警告批次
- 拆分 GameContextTests、ArchitectureServicesTests、RegistryInitializationHookBaseTests 与 Cqrs 测试辅助类型,消除批次内 MA0048 热点
- 修复 Core.Tests 零散可空性、集合抽象和测试辅助 warning,使受影响 Release 构建清零
- 更新 analyzer-warning-reduction 跟踪与 trace,记录 236 条仓库根 warning 基线和 45/50 停止点
2026-04-28 08:32:00 +08:00
gewuyou
98afcbffb3 fix(cqrs-tests): 拆分处理器注册测试辅助类型
- 拆分 CqrsHandlerRegistrarTests 尾部的测试辅助类型到同目录同名文件

- 保持 CQRS handler registrar 测试行为与 XML 文档不变并消除该切片的 MA0048 warning
2026-04-28 07:56:38 +08:00
gewuyou
54530d31d9 test(architectures): 拆分 RegistryInitializationHookBaseTests 辅助类型
- 拆分 RegistryInitializationHookBaseTests 末尾的测试辅助类型到同目录独立文件以消除 MA0048

- 更新 TestRegistry 的公开集合暴露方式为只读接口以规避 MA0016

- 补充新测试辅助类型的 XML 文档并保持原有测试行为不变
2026-04-28 07:50:36 +08:00
gewuyou
a7be41367a fix(core-tests): 消除 GameContextTests 警告
- 拆分 TestArchitecture 与 TestArchitectureContext 到独立测试文件以消除 MA0048
- 修复 TestArchitectureContext 的可空签名以匹配 IArchitectureContext 契约
- 补充测试桩公开成员的 XML 文档并保持 GameContextTests 行为不变
2026-04-28 07:48:55 +08:00
gewuyou
9098490fbb fix(cqrs-tests): 拆分 dispatcher cache 测试辅助类型
- 拆分 CqrsDispatcherCacheTests 末尾的 request、handler 与 behavior 辅助类型到同目录独立文件

- 修复 dispatcher cache 测试中的 ConfigureAwait warning,保持现有断言与分发语义不变
2026-04-28 07:47:28 +08:00
gewuyou
289f12f309 docs(batch-boot): 收口旧入口对比文案
- 更新 Core、Game、Godot 与 source-generators 多个页面的 reader-facing 契约说明

- 将旧文档和旧入口对比句式改成直接陈述当前默认入口、约束与推荐做法

- 补充 documentation full coverage active topic 的 RP-047 跟踪与验证记录
2026-04-28 07:37:20 +08:00
gewuyou
3c0ac1858a docs(batch-boot): 收口公开文档中的内部参考路径
- 更新 Game、Godot 与 source-generators 多个专题页的 reader-facing 示例口吻

- 移除 ai-libs CoreGrid 路径在公开页面中的直接暴露,保留项目侧常见实现说明

- 补充 documentation full coverage active topic 的 RP-046 跟踪与验证记录
2026-04-28 07:37:19 +08:00
gewuyou
0722ba6dbd docs(batch-boot): 收口公开入口页文案
- 更新 source-generators、game、api-reference 与 abstractions 入口页的 reader-facing 标题和导航口吻

- 优化 godot setting 页的继续阅读标题,移除文件名式与指挥式表述

- 补充 documentation full coverage active topic 的 RP-045 跟踪与验证记录
2026-04-28 07:37:19 +08:00
gewuyou
6cc87a9f6c
Merge pull request #298 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-27 20:28:50 +08:00
gewuyou
fbf8f9f0a2 fix(core-tests): 收敛PR298的nitpick问题
- 修复测试辅助类型的只读暴露、空安全和线程安全问题

- 更新异步查询结果命名与init属性XML文档,保持语义一致

- 同步ai-plan恢复点与验证真值,记录PR298 nitpick跟进
2026-04-27 20:18:58 +08:00
gewuyou
f0a36de07c test(core-tests): 批量拆分测试辅助类型以消减警告
- 拆分 GFramework.Core.Tests 中多组测试辅助类型到独立文件以消减 MA0048 warning

- 更新 analyzer-warning-reduction 的 tracking 与 trace 以记录批处理基线和下一恢复点

- 验证 GFramework.Core.Tests Release 构建清零并将仓库根权威 warning 基线压降到 288
2026-04-27 19:44:07 +08:00
gewuyou
26ba3d62f6 test(extensions): 拆分 UnRegisterListExtensionTests 注销列表辅助类型
- 拆分 TestUnRegisterList 到独立文件以消除 MA0048

- 保留测试行为并补充测试替身的 XML 文档说明
2026-04-27 19:12:27 +08:00
gewuyou
843b024718 test(events): 拆分 EventBusTests 事件测试辅助类型
- 拆分 EventBusTestsEvent 到独立文件以消除 EventBusTests.cs 的 MA0048 警告

- 补充提取事件类型的 XML 文档并保持 EventBusTests 行为不变
2026-04-27 19:11:29 +08:00
gewuyou
88c439c2ef test(environment): 拆分 EnvironmentTests 测试环境类型
- 拆分 TestEnvironment 到独立文件以消除 EnvironmentTests 的 MA0048 警告

- 补充 TestEnvironment 的 XML 文档并保留原有测试行为
2026-04-27 19:11:23 +08:00
gewuyou
7b432c60c7 test(coroutine): 拆分 QueryCoroutineExtensionsTests 查询辅助类型
- 拆分 QueryCoroutineExtensionsTests 末尾的 IntQuery、ComplexQuery 与 ComplexResult 到同目录独立文件

- 补充 提取类型的 XML 文档并保持查询测试行为不变
2026-04-27 19:08:07 +08:00
gewuyou
3843e5c1dd test(pool): 拆分 ObjectPoolTests 池化辅助类型
- 拆分 TestObjectPool 与 TestPoolableObject 到 Pool 同目录独立文件

- 保留并补充对象池测试辅助类型的 XML 文档与命名空间一致性

- 验证 GFramework.Core.Tests Release 构建通过且当前切片无新增 warning
2026-04-27 19:07:30 +08:00
gewuyou
0b96f01769 test(cqrs): 拆分容器注册夹具通知类型
- 拆分 DeterministicOrderNotification 与处理器到同目录独立文件以消除 MA0048

- 保留容器注册测试夹具行为与 XML 文档说明
2026-04-27 19:06:58 +08:00
gewuyou
ada0d3acbf test(state): 拆分 StateMachineTests 状态测试辅助类型
- 拆分 StateMachineTests 中的状态测试辅助类型到独立文件

- 补充提取后类型与扩展方法的 XML 文档说明

- 保持状态机测试行为不变并完成定向项目构建验证
2026-04-27 18:47:34 +08:00
gewuyou
7cfdd2cf21
Merge pull request #297 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-27 16:59:57 +08:00
gewuyou
1753778cae fix(game): 修复同步加载阶段的取消透传
- 修复 YAML 同步反序列化与构表阶段的取消处理,避免已取消会话被包装为配置加载失败
- 补充私有同步路径的回归测试,覆盖反序列化与构表阶段的 OperationCanceledException 透传语义
2026-04-27 16:50:44 +08:00
gewuyou
953a03b937 fix(game-tests): 修复取消读取测试的异步警告
- 修复取消读取回归测试的外层 async Task 签名,消除没有 await 的编译警告
- 优化异步异常断言,继续验证取消流程会保留 OperationCanceledException 语义
2026-04-27 16:06:51 +08:00
gewuyou
686647c06b fix(game): 修复 YAML 热重载取消语义
- 修复 ReadYamlAsync 在取消时错误包装异常的问题,并对齐 IntegerTryParseDelegate 的可空性签名

- 更新 Ioc 与 Query 测试辅助类型的 XML 文档,并让 IPrioritizedService 复用 IMixedService 的 Name 契约

- 补充 YamlConfigLoader 取消语义回归测试并同步 analyzer warning reduction 跟踪
2026-04-27 14:26:30 +08:00
gewuyou
99ccc28697
Merge pull request #296 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-27 13:22:54 +08:00
gewuyou
4a5e1e74a6 docs(pr-review): 收口当前文档审查意见
- 更新 Game 与 SourceGenerators README 的公开入口命名和重复链接

- 优化 Godot 教程与扩展页的 reader-facing 措辞

- 补充 PR #296 的治理跟踪与验证记录
2026-04-27 12:49:34 +08:00
gewuyou
a9904a35be fix(warning-reduction): 清理配置与测试切片告警
- 修复 YamlConfigLoader 的超长方法、依赖比较与热重载同步原语告警

- 拆分 MicrosoftDiContainerTests 与 AbstractAsyncQueryTests 的辅助类型文件以消除 MA0048

- 更新 analyzer warning reduction 跟踪文档并记录 non-incremental 构建基线变化
2026-04-27 11:57:49 +08:00
gewuyou
86cfaa7122 test(architectures): 拆分优先级测试辅助类型文件
- 拆分 PriorityServiceTests 末尾的测试接口与辅助类型到独立文件
- 保留原有命名空间、可见性与优先级测试语义
- 补充新文件的 XML 注释并清理原测试文件的无关 using
2026-04-27 11:17:19 +08:00
gewuyou
b6a9fefda9
Merge pull request #295 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-27 10:53:34 +08:00
gewuyou
067d72fada fix(tooling): 收口PR评审遗留nitpick
- 修复 PR review 脚本对 failed-test 额外列表格的解析容错

- 清理 AsyncExtensionsTests 中多余的等待并保留参数名断言

- 补充脚本回归测试并同步 analyzer-warning-reduction 恢复点
2026-04-27 10:22:45 +08:00
gewuyou
1c87272f6b fix(tooling): 补全PR测试报告解析并修复并发测试
- 更新 gframework-pr-review 脚本以提取 CTRF 测试摘要和失败用例详情

- 修复 SettingsModelTests 在 NET9+ 下错误使用 Monitor 持锁的并发测试语义

- 同步 analyzer-warning-reduction 的 active todo 与 trace 真值
2026-04-27 09:53:12 +08:00
gewuyou
1f560635a8 fix(analyzer): 收口PR评审遗留问题
- 修复 AsyncExtensionsTests 中 ArgumentException 的 ParamName 传递与断言契约

- 更新 analyzer warning reduction 的 active todo 与 trace 真值

- 归档 RP073-RP078 的历史恢复文档以收紧当前入口
2026-04-27 09:19:13 +08:00
gewuyou
5778782df0 docs(godot): 收口旧文档口吻与采用说明
- 更新 Godot 与教程细页的 reader-facing 采用说明

- 修复旧文档、ai-libs 与内部术语在公开页面中的暴露

- 更新文档治理恢复点并记录接近阈值的停止状态
2026-04-27 09:02:48 +08:00
gewuyou
979db3b5a5 docs(reader-facing): 统一站内入口与公开术语
- 更新入口页的 reader-facing 骨架,统一起步路线、阅读顺序与站内导航
- 收口公开 README 与 Godot 页面中的内部口吻、文件名式表述和术语噪音
- 移除 docs/zh-CN 中残留的 GitHub README 外链,并同步刷新文档治理恢复状态
2026-04-27 08:55:18 +08:00
gewuyou
72ebd266d3 docs(analyzer): 同步第三轮警告清理恢复点
- 更新 analyzer-warning-reduction 跟踪文档的第三轮结果与最新 stop-condition 指标

- 记录 Core.Tests 批次验证结果与默认收口建议
2026-04-27 08:15:36 +08:00
gewuyou
e19e60ea1a fix(core-tests): 修复 AsyncKeyLockManagerTests 的 MA0004 warning
- 修复 Task.Run 内 await using 的异步释放上下文捕获 warning
- 保持 AsyncKeyLockManager 并发测试语义与可读性不变
2026-04-27 08:09:35 +08:00
gewuyou
650618b5ab fix(core-tests): 修复 PauseStackManagerTests 锁分析器警告
- 修复 PauseStackManagerTests 并发测试中的锁声明,针对 net9 以上使用专用 Lock。

- 保持 net8.0 回退到 object 锁,确保多目标兼容且测试行为不变。
2026-04-27 08:09:26 +08:00
gewuyou
946cdbb9d2 fix(analyzer): 收口第二轮游戏侧警告清理
- 修复 SettingsModel 与 GameConfigBootstrap 的残留 MA0158 专用锁警告

- 更新 analyzer-warning-reduction 恢复点与第二轮构建验证结果
2026-04-27 08:06:27 +08:00
gewuyou
9ce634ed1c refactor(game): 拆分配置热重载启动流程
- 重构 GameConfigBootstrap 的热重载启动流程,提取状态准备、结果提交与失败回滚辅助方法

- 保持现有锁保护、异常路径与监听句柄释放语义不变,消除 StartHotReload 的 MA0051 warning
2026-04-27 08:00:17 +08:00
gewuyou
9deafac234 fix(game): 清理路由与 UI 交互配置的 analyzer warning
- 修复 RouterBase 中路由键比较的 MA0006,显式使用 Ordinal 字符串比较

- 修复 UiInteractionProfiles 中位掩码判定的 MA0099,改为与显式枚举值比较
2026-04-27 07:59:27 +08:00
gewuyou
c106e53a74 fix(game): 修复 SettingsModel 的 MA0004 警告
- 修复 SettingsModel 中异步仓储加载与保存流程缺少 ConfigureAwait(false) 的 analyzer 警告

- 保持设置模型初始化、保存、应用阶段的生命周期与事件触发语义不变
2026-04-27 07:58:22 +08:00
gewuyou
fb0a55f435 fix(analyzer): 收口首轮并行警告清理
- 修复 Core 与 Cqrs 中资源、日志、配置缓存的 MA0158 专用锁警告

- 修复 SaveRepository 与 SceneRouterBase 的残留分析器警告

- 更新 analyzer-warning-reduction 跟踪文档与最新构建验证结果
2026-04-27 07:54:43 +08:00
gewuyou
5befaf707b docs(ai-plan): 更新文档治理恢复状态
- 更新文档治理 tracking 的 branch diff 指标与当前工作树状态
- 补充本轮提交后的下一步恢复建议
2026-04-27 07:44:10 +08:00
gewuyou
8f2d95910e fix(core): 迁移 MA0158 专用锁实现
- 迁移 Events、Property、State 与 Coroutine 中 7 个类型的监视器字段到 NET9_0_OR_GREATER 专用 Lock 模式
- 保持 net8.0 的 object 回退路径以兼容多目标构建
- 更新 BindableProperty 的同步注释以匹配新的多目标同步原语
2026-04-27 07:42:20 +08:00
gewuyou
1454c81a5b docs(adoption): 收口安装入口与公开文案
- 更新安装页的选包矩阵、推荐组合与 Godot 基线说明
- 收口公开 README 的 XML 阅读入口表述,移除治理式计数与日期字段
- 调整配置系统与基础教程入口的 reader-facing 文案,并同步更新恢复文档
2026-04-27 07:42:10 +08:00
gewuyou
e3eec5452c fix(game): 修复数据仓库与场景路由分析器警告
- 修复数据仓库异步存储调用的 ConfigureAwait(false) 使用,消除目标 MA0004 警告

- 更新 UnifiedSettingsDataRepository 的字符串键字典 comparer 为 StringComparer.Ordinal,消除目标 MA0002 警告

- 保留场景切换流程在当前上下文继续执行,并显式使用 ConfigureAwait(true) 说明上下文约束
2026-04-27 07:41:10 +08:00
gewuyou
7e13752bb1 fix(game): 修复 UiRouterBase 分析器警告
- 修复 UiRouterBase 中缺少参数名的 ArgumentException 调用

- 更新 UI 键比较与层级字典为 Ordinal 语义,消除字符串与比较器相关警告
2026-04-27 07:40:46 +08:00
gewuyou
617e0bffd2
Merge pull request #294 from GeWuYou/feat/semantic-release-versioning
ci(release): 修复 semantic-release 预览鉴权
2026-04-26 12:17:15 +08:00
gewuyou
f777cdebd7 ci(release): 收敛 PAT 校验并归档迁移跟踪
- 新增复用的 PAT 校验 composite action,并统一 preview 与 release 的鉴权入口

- 修复 read-only PAT 会误过 API 探活的问题,提前校验 push 权限并清理临时文件

- 归档 semantic-release 迁移历史完成项,精简 active tracking 与 trace 恢复点
2026-04-26 11:59:06 +08:00
gewuyou
195658a217 ci(release): 修复 semantic-release 预览鉴权
- 修复 preview job 在 dry-run 中改用 PAT_TOKEN 并提前校验仓库访问权限
- 补充 preview summary 对远端 push 权限探测行为的说明
- 更新 semantic-release versioning 的 tracking 与 trace 恢复点和验证记录
2026-04-26 11:27:41 +08:00
gewuyou
524d54d3de
Merge pull request #293 from GeWuYou/feat/semantic-release-versioning
Feat/semantic release versioning
2026-04-26 11:15:23 +08:00
gewuyou
9f04c0b5f8 fix(release): 修复语义化发版审查问题
- 修复 semantic-release 配置,切换到 conventionalcommits preset 并显式声明 breaking、revert、patch 语义

- 更新 auto-tag workflow,补充 preview 成功守卫、PAT 存活性校验、snapshot 说明与 release notes summary 输出

- 更新 AGENTS 与 semantic-release topic 的 tracking/trace,记录当前发版规则、验证结果与恢复点
2026-04-26 10:36:27 +08:00
gewuyou
3ca095e987 chore(pr-review): 支持 Gemini reviewer 审查
- 新增 gemini-code-assist reviewer 到 PR review 抓取脚本的受支持列表并输出汇总信息

- 更新 gframework-pr-review skill 文档,补充 Gemini reviewer 的工作流、输出预期和触发示例
2026-04-26 10:26:09 +08:00
gewuyou
16e04cc541 build(release): 调整为同次运行预览后审批发版
- 重构 semantic-release workflow 为 preview 预览后经 environment 审批继续 release

- 绑定同一 SHA 的 preview 与 release 结果并在 summary 中展示版本信息

- 更新 semantic-release 迁移跟踪文档记录新的审批式发版链路
2026-04-26 10:10:53 +08:00
gewuyou
d7ddff9f53 build(release): 收紧手动发版入口与提交语义约束
- 重构 semantic-release workflow 为 preview 与 release 两种手动触发模式

- 更新 AGENTS 中的 Conventional Commit 规则并禁止 feat(docs) 这类文档提交类型

- 补充 semantic-release 迁移跟踪与二次验证记录
2026-04-26 09:49:14 +08:00
gewuyou
b194238385 build(release): 迁移语义化版本打标流程
- 新增 semantic-release 配置并固定 release rules 与 v 前缀 tag 格式

- 重构 auto-tag workflow 为 main 上的真实打标与 workflow_dispatch dry-run 双入口

- 保留现有 publish workflow 并补充 ai-plan 跟踪与验证记录
2026-04-26 09:42:18 +08:00
gewuyou
3446896118
Merge pull request #292 from GeWuYou/docs/sdk-update-documentation
docs: clarify meta-package scope, source generator contracts, and add Game config tool documentation
2026-04-26 09:41:36 +08:00
gewuyou
0c7552e629
Merge pull request #291 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-26 09:01:04 +08:00
gewuyou
65d3634181 docs(config-tool): 补充配置工具最小接入路径
- 补充 config tool README 的 Quick Start 最小接入步骤并统一 schema subset 术语
- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录 PR #292 最新 review 结论和验证结果
- 补充工具模块的测试与 VSIX 打包验证结果,作为本轮 review 收口的最小验证证据
2026-04-26 08:55:48 +08:00
gewuyou
3a3359b495 docs(ai-plan): 脱敏 analyzer warning 跟踪路径记录
- 更新 analyzer-warning-reduction active todo/trace 的 PR review 真值与恢复点
- 脱敏 archive trace 中的临时输出路径与 Windows fallback package folder 记录
- 补充 dotnet build 验证结果并保持 639 Warning(s) 基线说明
2026-04-26 08:27:24 +08:00
gewuyou
c39cb5c9dc docs(ai-plan): 收口 PR291 剩余文档 review
- 归档 RP-062 至 RP-071 的 active trace 详细记录并缩短默认恢复入口

- 更新 analyzer warning tracking 文档的验证真值维护位置并同步最新 PR review 状态
2026-04-25 22:07:12 +08:00
gewuyou
d3d62cf454 docs(review): 收口 PR 文档评审意见
- 优化源码生成器总览页的共享支撑模块说明句式

- 更新 config tool README,补充中文接入文档入口

- 记录 PR #292 最新 review 状态与验证结果
2026-04-25 20:14:03 +08:00
gewuyou
1b199e9f17 fix(ai-plan): 同步 PR291 活跃恢复文档
- 更新 active todo 到 RP-071 并同步 .codex / .gitignore 当前真值\n- 补充 PR #291 latest-head review 复核结果与本轮完成校验记录\n- 保留 non-blocking nitpick 作为后续独立文档收口项
2026-04-25 20:01:07 +08:00
GeWuYou
67675a02f7 chore(git): 添加 .codex 到 git 忽略列表
- 在 .gitignore 文件中添加 .codex 条目
- 防止 .codex 目录被意外提交到版本控制系统
2026-04-25 17:24:24 +08:00
gewuyou
a75194337e fix(pr-review): 收口当前 PR 仍有效的 review 建议
- 修复 AGENTS 中 latest-head review thread 指向的英文标点一致性问题

- 删除 MediatorAdvancedFeaturesTests 中未使用的 TestLoggingBehavior 测试基础设施

- 重构 VersionedMigrationRunner 的迁移执行上下文传递并补充对应 XML 文档

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录 PR #291 复核结果和 639 条根构建基线
2026-04-25 17:18:01 +08:00
gewuyou
b96565ffa3 docs(documentation): 扩展项目功能文档覆盖
- 更新 meta-package 与安装入口,明确聚合范围、当前运行时基线和首页选包路径
- 补充 Game 配置工具文档与导航,把 VS Code config workflow 纳入 reader-facing 采用链路
- 修正文档与实现不一致的 source-generator 与 CQRS 契约说明,补充 support module 边界
- 记录 RP-038 批处理恢复点、委派结论和本轮验证结果
2026-04-25 17:10:37 +08:00
gewuyou
10daba3add docs(documentation): 收口贡献指南代码块警告
- 修复 contributing 文档中的 Mermaid 示例围栏写法,消除剩余代码块语言警告
- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录 RP-037、基线和验证结果
2026-04-25 16:33:34 +08:00
gewuyou
79934f79b0
Merge pull request #290 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-25 16:15:55 +08:00
gewuyou
074002254e docs(pr-review): 收口文档审查反馈
- 更新 source-generators 侧栏标签并移除 API 参考侧栏中的跨栏目重复入口

- 优化 Core、Ecs.Arch、Game README 的 XML 阅读入口表述,删除覆盖基线式字段

- 补充 documentation-full-coverage-governance 跟踪与验证记录,记录 PR #290 审查收口状态
2026-04-25 16:08:23 +08:00
gewuyou
4edfe53cd9 test(cqrs-tests): 收敛测试日志与行为集合抽象 warning
- 修复 TestLogger 与 MediatorAdvancedFeaturesTests 的集合抽象暴露问题,保持测试语义不变

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录新的 640 条根构建基线和委派范围
2026-04-25 15:54:27 +08:00
gewuyou
58ba6c011e test(cqrs-tests): 收敛处理器注册缓存测试 warning
- 重构 CqrsHandlerRegistrarTests 的缓存元数据用例,拆分装配、断言与 verify helper

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录并行 subagent 批次和 645 条根构建基线
2026-04-25 15:39:32 +08:00
gewuyou
9f6204d6e2 fix(core-tests): 收口 LoggerTests 日志集合抽象
- 修复 TestLogger.Logs 暴露 List<LogEntry> 实现类型导致的 MA0016 warning
- 保持测试桩内部写入顺序和现有测试访问方式不变
2026-04-25 15:30:09 +08:00
gewuyou
a7fa70e4fe fix(core-tests): 清理 LogContextTests 异步等待 warning
- 修复异步测试中的 await 链 MA0004 warning

- 保持 LogContext 在线程隔离场景下的断言行为不变
2026-04-25 15:29:26 +08:00
gewuyou
1b85b53292 refactor(game): 收敛版本化迁移运行器长方法 warning
- 重构 VersionedMigrationRunner 的迁移主循环,拆分版本校验、迁移解析与结果校验 helper

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录新的 649 条根构建基线
2026-04-25 15:25:57 +08:00
gewuyou
be26640b58 test(game-tests): 收敛热重载长方法 warning
- 重构 YamlConfigLoaderTests 的热重载夹具与回调接线,消化 4 个 MA0051 长方法警告
- 更新 analyzer-warning-reduction active todo 与 trace,记录 652 条根构建 warning 的新基线
- 保持 GFramework.Game.Tests 的 Release build 为 0 Warning 和 0 Error
2026-04-25 15:13:22 +08:00
gewuyou
54b8e5770a docs(documentation): 收口文档批处理治理
- 优化根 README、模块 README 与抽象层页面的 reader-facing 文案和语义化链接标签

- 补充 tutorials、troubleshooting、best-practices、contributing、godot/resource 的代码块语言标记

- 更新 documentation-full-coverage-governance 的恢复点、验证结果与批处理停止条件
2026-04-25 15:12:08 +08:00
gewuyou
6a704f3aa7 fix(analyzer): 固化沙箱外验证并清理测试噪音
- 更新 AGENTS.md,要求沙箱内 .NET 验证异常时必须申请沙箱外重跑同一命令并以其结果为准
- 修复 4 个测试文件中的冗余 DoesNotThrow 包装,收敛低风险 warning 噪音
- 刷新 analyzer-warning-reduction active todo 与 trace,清理把沙箱噪音当成环境阻塞的恢复信息
2026-04-25 14:58:06 +08:00
gewuyou
094e29ed8b docs(docs): 统一中文文档导航与语义化链接文案
- 更新 docs 站点中 abstractions、source-generators、api-reference 的导航文案,使其与 landing page 入口一致

- 补充遗漏的源码生成器 sidebar 条目,并本地化抽象层与 API 参考的侧边栏标签

- 修复 ECS、Game、Godot 文档中的路径式可见链接标签,改为读者可理解的语义化名称
2026-04-25 14:56:59 +08:00
gewuyou
4ad880c1e3
Merge pull request #288 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-25 14:35:38 +08:00
gewuyou
0161852618
Merge pull request #289 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-25 14:27:03 +08:00
gewuyou
a7a3eca40d fix(pr-review): 收敛PR建议并修复构建验证
- 修复 PR #288 中经本地复核后仍成立的 Core、Game 与测试建议

- 更新 WSL 标准 dotnet build 验证路径并确认 Release 构建可通过

- 补充 analyzer-warning-reduction 跟踪文档记录本轮结论与恢复点
2026-04-25 14:26:49 +08:00
GeWuYou
70c42b579f fix(scene): 修复场景替换核心异步执行的配置问题
- 将 ConfigureAwait 参数从 false 修改为 true
- 确保异步操作在正确的上下文中继续执行
- 避免潜在的死锁或性能问题
2026-04-25 13:11:45 +08:00
gewuyou
4740d30fb7 fix(core): 修复 PR 评审指出的编译与样式问题
- 修复 AsyncExtensionsTests 中错误返回 ConfiguredTaskAwaitable 导致的测试编译失败

- 收敛多处测试中的冗余 async/await 与 ValueTask 断言包装,减少 PR review 指出的告警

- 更新 StoreSelection 的 net9+ 锁实现与 analyzer-warning-reduction 跟踪文档,记录 PR #288 与当前 MSB4018 环境阻塞
2026-04-25 13:03:17 +08:00
gewuyou
c95545db92 docs(ai-plan): 同步文档治理恢复点
- 更新 tracking 与 trace 的 branch diff 实际值和后续恢复建议

- 记录本轮 README 与代码块标记批次已经提交完成
2026-04-25 11:47:52 +08:00
gewuyou
9dfee7538d docs(documentation): 补齐文档代码块标记
- 补齐 Core 热点页与基础教程页的 fenced code block 语言标记

- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录 RP-034 和 50 文件阈值
2026-04-25 11:46:17 +08:00
gewuyou
bd5cdb561f docs(readme): 优化链接标签
- 更新 5 个模块 README 的 reader-facing 链接标签,去掉裸路径和文件名式文案

- 保持原有链接目标、章节结构与正文语义不变
2026-04-25 11:35:25 +08:00
gewuyou
984fb21b94
Merge pull request #287 from GeWuYou/docs/sdk-update-documentation
docs(documentation): 收口公开文档口吻约束
2026-04-25 11:11:56 +08:00
gewuyou
18bf9f6730 docs(api-reference): 统一文档入口标签写法
- 修复 API 参考页站内入口标签风格不一致的 PR review 问题
- 更新 active tracking 与 trace,记录 PR #287 抓取结果和验证状态
- 补充 docs 构建验证结论,保持当前恢复点与后续动作同步
2026-04-25 10:50:38 +08:00
gewuyou
be336b2088 docs(ai-plan): 修正 analyzer warning reduction 指标
- 更新 active tracking 与 trace 中的当前 branch line 统计

- 将恢复点表述改为代码 stop commit 以避免后续 docs 提交导致失真
2026-04-25 10:48:13 +08:00
gewuyou
e9cd41da86 docs(ai-plan): 更新 analyzer warning reduction 恢复点
- 更新 active tracking 与 trace 到 RP-062 并收口到当前真值

- 记录本轮已达到 75 files 阈值的停止结论与最新 branch 指标

- 补充 Core build 通过结果与 Core.Tests 的 MSB4276 环境阻塞说明
2026-04-25 10:45:00 +08:00
gewuyou
9ce1fa630c refactor(core): 收敛 Core 扩展与测试的机械 warning
- 更新 ContextAware、Store 与通用扩展中的参数空校验写法以满足 analyzer 约束

- 简化 coroutine、pause、log 与 async 测试中的等待和断言包装并保持测试语义不变

- 调整测试替身异常类型与 Result 系列断言样例以减少低风险 warning 噪音
2026-04-25 10:38:48 +08:00
gewuyou
03c73a8ee5 test(core-tests): 收敛测试桩与辅助类型 warning
- 更新 ArchitectureContext、ArchitectureServices、GameContext 与环境测试桩的异常类型以满足 analyzer 约束

- 补齐 AsyncTestModel 与 AsyncTestSystem 的异步等待配置并保持测试语义不变

- 调整 ResultTests 的异类异常断言样例以避免新增编译与 analyzer 噪音
2026-04-25 10:18:40 +08:00
gewuyou
b45e551fa8 test(core-tests): 收敛选项与扩展测试的基础 warning
- 更新 OptionTests 中的 culture-sensitive 转换与 TryParse 写法
- 修正 AsyncExtensionsTests 与 CollectionExtensionsTests 的低风险异步和字符串比较写法
2026-04-25 10:12:35 +08:00
gewuyou
b7560fcc08 test(core-tests): 收敛函数式与状态测试的低风险 warning
- 补齐 WaitForTask、ResourceManager、State 与 StateMachine 测试中的低风险 ConfigureAwait(false)
- 更新 AsyncKeyLock、ResultExtensions、ResultT 与 Pipe 测试中的 culture 和异步等待写法
2026-04-25 10:08:59 +08:00
gewuyou
737d0b5037 test(core-tests): 显式指定日志测试字符串比较器
- 为 LogEntryTests 与格式化器测试中的字符串字典补充 StringComparer.Ordinal
- 保持日志相关测试断言与行为路径不变
2026-04-25 10:03:26 +08:00
gewuyou
6188876570 test(core-tests): 规范字符串比较断言写法
- 优化 ContextAwareServiceExtensionsTests 中的字符串相等断言,显式使用 Ordinal 比较
- 优化 RollingFileAppenderTests 中的 StartsWith、EndsWith、排序比较与文件名判等写法,补充 Ordinal 比较并保持测试语义不变
2026-04-25 10:01:26 +08:00
gewuyou
f67b2cedb2 refactor(core-tests): 显式指定字符串字典比较器
- 补充 LocalizationTableTests 中 string key Dictionary 的 Ordinal comparer

- 补充 QueryCoroutineExtensionsTests 中 Metadata 字典的 Ordinal comparer 并保持测试语义不变
2026-04-25 10:01:05 +08:00
gewuyou
2a9e9f26c7 test(game-tests): 简化架构配置集成测试异步断言
- 简化 ArchitectureConfigIntegrationTests 中的异步异常断言包装
- 保持重复初始化场景的测试语义与验证路径不变
2026-04-25 09:56:32 +08:00
gewuyou
65cd23ff3e test(core-tests): 简化结果与协程异步断言包装
- 简化 ResultExtensionsTests 中的异步异常断言包装
- 更新 AsyncOperationTests 的 Task 断言写法以消除低风险 analyzer 噪音
2026-04-25 09:55:10 +08:00
gewuyou
ffd62bb475 docs(ai-plan): 更新 analyzer-warning-reduction 恢复点
- 更新 analyzer-warning-reduction 跟踪文档到 RP-061 并记录当前 HEAD 与 branch diff 真值
- 补充最近批次的验证结论与当前 subagent 恢复入口
2026-04-25 09:51:37 +08:00
gewuyou
0d8f854dd2 refactor(core-tests): 简化状态机异步断言包装
- 简化 StateMachineSystemTests 中的 Task 异常断言包装

- 简化 StateMachineTests 中的异步异常断言包装并保持测试语义不变
2026-04-25 09:49:20 +08:00
gewuyou
67c9359fd2 test(core-tests): 简化异步断言包装
- 简化 Architecture、Command、Query 与 AsyncArchitecture 测试中的机械型 async/await 异步断言包装
- 更新 AsyncKeyLockManagerTests 中的 Task 断言写法以消除低风险 analyzer 噪音
2026-04-25 09:46:44 +08:00
gewuyou
9b20a07c0a refactor(game-tests): 简化异步异常断言包装
- 简化 YAML 配置加载测试中的 Assert.ThrowsAsync Task 包装

- 简化持久化测试中的异步异常断言包装并保持原有断言语义
2026-04-25 09:43:32 +08:00
gewuyou
09cbd16d3a test(game-tests): 简化 YAML 配置加载异常断言包装
- 优化 allOf、enum、not 测试中的 Assert.ThrowsAsync 委托写法,移除冗余 async/await 包装
- 保持 schema 用例语义、断言内容和异常路径不变
2026-04-25 09:43:10 +08:00
gewuyou
3be299e6f1 fix(game): 清理 UiRouterBase 的低风险异步包装
- 调整 UiRouterBase 的异步过渡调用以显式保留同步上下文

- 清理 Push Pop Replace Clear 流程中的低风险 MA0004

- 保持 UI 生命周期顺序与过渡阶段语义不变
2026-04-25 09:38:09 +08:00
gewuyou
e8eda8170c fix(routing): 清理 RouterBase 守卫异步等待的 MA0004
- 修复 RouterBase 进入守卫异步调用缺少 ConfigureAwait(false) 的机械型 MA0004
- 修复 RouterBase 离开守卫异步调用缺少 ConfigureAwait(false) 的机械型 MA0004
2026-04-25 09:35:33 +08:00
gewuyou
bad6c1b108 fix(game): 清理 FileStorage 异步存储路径的 MA0004
- 修复 FileStorage 在锁获取与异步释放路径上的 ConfigureAwait(false) 缺失
- 保持文件锁、临时文件写入和原子替换流程不变
2026-04-25 09:34:19 +08:00
gewuyou
4bb8f4f429 fix(game): 清理 SceneRouterBase 低风险异步包装
- 重构 Replace、Push、Pop、Clear 的 around pipeline 核心委托,移除匿名 async 包装

- 补充 BeforeChange 与 AfterChange 的 ConfigureAwait(false),收敛明显低风险 MA0004

- 保留场景生命周期与栈操作相关 await 的默认上下文行为,并在代码中说明原因
2026-04-25 09:32:54 +08:00
gewuyou
64c8589489 fix(game): 清理 SettingsSystem 与 ScopedStorage 的 MA0004
- 修复 SettingsSystem 中不依赖上下文的 await,补充 ConfigureAwait(false)
- 修复 ScopedStorage.DeleteAsync 的 await,保持作用域前缀语义不变
2026-04-25 09:29:01 +08:00
gewuyou
8209d7a29f docs(documentation): 收口公开文档口吻约束
- 修复公开 README 与 docs 页面中的反问式标题、维护者口吻和裸文件名链接标签
- 补充 AGENTS.md 与 gframework-doc-refresh 的 reader-facing 文档输出约束
- 更新 documentation-full-coverage-governance 的恢复点与验证记录
2026-04-25 09:27:06 +08:00
gewuyou
425c22d98f docs(ai-plan): 更新 analyzer-warning-reduction 恢复点
- 更新 analyzer-warning-reduction 的 RP-060 跟踪与 trace

- 记录并行 warning-reduction 批次的验证结果与当前分支体积

- 补充下一轮继续朝 75 文件阈值推进的恢复建议
2026-04-25 09:24:44 +08:00
gewuyou
b27bcb5832 refactor(game-tests): 清理指定加载测试的 MA0051
- 重构四个纯加载测试的固定布置为文件内私有 helper,缩短方法体长度而不改变断言语义

- 保持 schema 内容、异常路径与 item/monster 注册顺序不变,并避免触碰热重载测试
2026-04-25 09:20:29 +08:00
gewuyou
27f5a2f58e fix(game): 清理切换管道中的低风险 MA0004
- 修复 Scene 与 UI 过渡管道中间件链的多余 async 包装

- 更新低风险 await 调用以显式使用 ConfigureAwait(false)
2026-04-25 09:20:00 +08:00
gewuyou
1dae0b11a0 test(game-tests): 清理配置测试中的机械型 MA0004 包装
- 修复三个配置测试文件中 Assert.ThrowsAsync 与 Assert.DoesNotThrowAsync 的冗余 async/await 包装
- 调整文本校验异步异常测试签名以匹配去包装后的同步断言写法
2026-04-25 09:19:11 +08:00
gewuyou
877d1f38a6 fix(godot-tests): 清理模块安装测试异步断言包装
- 修复 Assert.ThrowsAsync 中机械型 async 包装\n- 保持锚点缺失场景的异常与未安装断言语义不变
2026-04-25 09:17:22 +08:00
gewuyou
b56e08adae fix(analyzer): 清理 YamlConfigLoaderTests 的异步等待 warning
- 修复 YamlConfigLoaderTests 中 Assert.ThrowsAsync 的冗余 async/await 写法

- 补充 WaitForTaskWithinAsync 的 ConfigureAwait(false) 以消除剩余 MA0004

- 更新 analyzer-warning-reduction 的 RP-059 跟踪与验证记录
2026-04-25 08:27:32 +08:00
gewuyou
9964962416
Merge pull request #286 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-24 23:05:53 +08:00
gewuyou
1e5ca14620 fix(godot): 修复场景行为格式问题
- 修复 SceneBehaviorBase 中暂停、恢复、卸载方法的缩进,消除 PR review 指向的格式问题
- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录 PR #286 latest-head review 跟进和验证结果
- 补充 GFramework.Godot 的 Release build 与 dotnet format verify 结论,保留后续 warning reduction 恢复点
2026-04-24 22:18:23 +08:00
gewuyou
608e639c0f
Merge pull request #285 from GeWuYou/docs/sdk-update-documentation
docs(documentation): 优化文档入口标题与导航标签
2026-04-24 20:36:57 +08:00
gewuyou
2b70734357 fix(game-tests): 清理持久化测试残余告警
- 修复 PersistenceTests 中统一设置仓库失败场景测试的剩余 ConfigureAwait 告警\n- 验证 PersistenceTests 不再出现在非增量 GFramework.Game.Tests 构建告警输出中\n- 更新 analyzer warning reduction 的 tracking 与 trace,记录 RP-057 验证结果和当前分支体积
2026-04-24 20:05:14 +08:00
gewuyou
56ed66976b fix(game-tests): 清理生成配置消费者测试告警
- 修复 GeneratedConfigConsumerIntegrationTests 的 raw string 缩进和方法边界,恢复编译通过\n- 重构生成配置消费者集成测试的断言辅助方法,清理该文件剩余 warning\n- 更新 analyzer warning reduction 的 tracking 与 trace,记录 RP-056 验证结果和当前分支体积
2026-04-24 19:31:37 +08:00
gewuyou
5aefd77ad0 fix(game-tests): 收敛配置与序列化测试告警
- 修复架构配置、启动流程与序列化测试中的异步等待和 invariant 解析告警

- 补充 AllOf 与 persistence 测试的残余状态校验与 ConfigureAwait 修正,继续压低 Game.Tests warning

- 更新 analyzer-warning-reduction 跟踪与 trace,纠正 RP-054 的 stop-condition 口径并记录 RP-055 指标
2026-04-24 18:29:17 +08:00
gewuyou
36507bbc52 fix(game-tests): 收敛 Game.Tests 测试告警
- 修复多组 YAML 与 persistence 测试中的 ConfigureAwait 使用与状态校验,清理低风险 analyzer 告警

- 重构 PersistenceTestUtilities 为单类型文件,消除测试辅助模型的文件命名告警

- 更新 analyzer-warning-reduction 跟踪与 trace,记录 RP-054 批次结果与 75 文件阈值停止点
2026-04-24 18:17:21 +08:00
gewuyou
0db50107f7 docs(documentation): 优化文档入口标题与导航标签
- 更新根 README 的内部支撑模块入口标签,避免继续暴露路径式链接名

- 优化 docs/zh-CN 多个 landing 与 core 页面标题,提升中文读者的导航可读性

- 同步 documentation-full-coverage-governance 的 tracking 与 trace,记录最新 baseline 和验证结果
2026-04-24 18:07:07 +08:00
gewuyou
4c2994ee52
Merge pull request #284 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-24 17:57:23 +08:00
gewuyou
6ff07ad3d9 fix(godot): 清理 Godot 模块与测试项目告警
- 优化 GodotYamlConfigEnvironment 目录枚举逻辑,拆分 helper 以消除 MA0051

- 修复 Godot 生命周期 await 的上下文声明,显式保留主线程同步上下文

- 更新 Godot.Tests 异步断言与字符串 comparer,用例项目构建收敛到 0 warning(s)

- 补充 analyzer-warning-reduction 跟踪与 trace,记录 RP-053 的批次结果与验证
2026-04-24 17:04:53 +08:00
gewuyou
63f563cd49
Merge pull request #283 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-24 16:51:03 +08:00
gewuyou
546e6c7b11 docs(pr-review): 收口评审遗留文档措辞
- 更新 Core 与 Core.Abstractions README 的 reader-facing 文案,移除公开入口中的 inventory 表述
- 修复仓库根 README 的贡献指引范围,明确同步受影响的中文文档页面
- 补充 active tracking 与 trace 的 PR #284 follow-up 恢复点和验证结果
2026-04-24 16:45:48 +08:00
gewuyou
2187f179c3 fix(pr-review): 修复设置快照比较器契约
- 修复 UnifiedSettingsFile 与 UnifiedSettingsDataRepository 的 comparer 契约,在无法恢复原比较器时显式回退到 StringComparer.Ordinal
- 统一 AutoRegisterExportedCollectionsGeneratorTests 中剩余的 RunAsync 异步等待写法,并补齐 ConfigureAwait(false)
- 更新 analyzer-warning-reduction 跟踪文档,记录 PR follow-up 的验证结果与恢复点
2026-04-24 16:39:25 +08:00
gewuyou
7e45197698 test(godot-source-generators): 清理源生成器测试项目警告
- 重构 GFramework.Godot.SourceGenerators.Tests 的测试模板与诊断辅助,清除项目内全部 analyzer warning
- 更新 GeneratorTest 异步等待与 analyzer-warning-reduction 跟踪文档,记录批次验证结果与恢复点
2026-04-24 14:06:41 +08:00
gewuyou
a439fb8f4e refactor(godot-source-generators): 清理生成器告警与构建基线
- 重构 Godot source generator 的长方法与字符串比较逻辑,清理 GFramework.Godot.SourceGenerators 的 MA0051 和 MA0006 告警

- 更新 AutoRegisterExportedCollectionsGenerator 的注册解析阶段拆分,消除剩余的长方法告警

- 更新 AGENTS 与 analyzer-warning-reduction 跟踪文档,明确 warning 检查必须先 clean 再 build
2026-04-24 13:25:42 +08:00
gewuyou
77540c07f0 docs(readme): 对齐文档入口标签与落地页元数据
- 更新模块 README、仓库根 README 与中文落地页的 reader-facing 文档入口标签
- 补充 docs 语言落地页 metadata 并校正文档治理 topic 的恢复点与阈值指标
2026-04-24 13:23:15 +08:00
gewuyou
64385196d5 docs(zh-cn): 统一站内链接显式扩展名
- 更新教程、最佳实践、Core 与 Godot 页面中的站内 Markdown 链接写法
- 补充文档治理 topic 的恢复点、验证结果与分支阈值指标
2026-04-24 13:10:41 +08:00
GeWuYou
25d33d0bf9 chore(build): 更新项目配置以启用代码分析并修改许可证
- 移除测试项目的警告级别设置
- 将包许可证从 MIT 更改为 Apache-2.0
- 为 GFramework 项目启用 .NET 代码分析器
- 保持目标框架 net8.0、net9.0 和 net10.0 的支持
2026-04-24 13:08:11 +08:00
gewuyou
b710f31b86 docs(workflow): 更新构建告警检查约定
- 更新 AGENTS.md,明确使用 plain dotnet build 作为默认构建告警检查入口
- 归档 analyzer warning reduction 在 RP-042 至 RP-048 的晚期 active 文档细节
- 压缩 active todo 与 trace,只保留当前分支目标所需的恢复真值
2026-04-24 13:05:10 +08:00
gewuyou
bf37104c68 docs(zh-cn): 补齐首页与基础教程元数据
- 补充 zh-CN 首页与基础教程章节页的 frontmatter title 与 description
- 更新文档治理 topic 的恢复点、批次指标与下一步
2026-04-24 13:00:09 +08:00
gewuyou
a98d1cb8d0 docs(ai-plan): 更新告警批处理恢复点
- 更新 analyzer warning reduction 的 active todo 为 RP-048 当前真值
- 补充 plain dotnet build 成功与最新 origin/main baseline
- 记录当前批处理已到自然停点并收敛下一步建议
2026-04-24 12:59:03 +08:00
gewuyou
a8447a68a4
Merge pull request #282 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-24 12:53:39 +08:00
gewuyou
77e332fd44 fix(analyzer): 收口当前批次警告切片
- 修复 UnifiedSettingsFile 与 LocalizationMap 的集合暴露形状,减少可变集合泄漏风险
- 优化 CqrsHandlerRegistryGeneratorTests 的大型 fixture 组织方式,降低 MA0051 噪音
- 更新 analyzer warning reduction 的 active todo 与 trace,回写 0 warning solution 基线
2026-04-24 12:37:47 +08:00
gewuyou
091b872c86 docs(ai-plan): 更新告警基线追踪
- 更新 analyzer warning reduction 的 active tracking 到 RP-046 并记录 solution 级 891 条 warning 基线
- 补充前台构建与日志采集形态不一致的环境风险和后续恢复建议
2026-04-24 11:57:49 +08:00
gewuyou
5b9c879320 docs(pr-review): 收口文档评审遗留问题
- 更新 active tracking / trace 为当前恢复入口,并归档 RP-023 到 RP-025 的阶段细节
- 修复 zh-CN context 页面标题本地化与 troubleshooting 绝对链接后缀不一致问题
- 补充 PR #282 follow-up 的验证记录并确认 docs 站点构建通过
2026-04-24 11:44:22 +08:00
gewuyou
a0ce04b185 fix(godot): 收紧本地化映射集合暴露
- 修复 LocalizationMap 对可变 Dictionary 的直接公共暴露,降低 MA0016 集合暴露风险

- 新增复制输入映射的构造函数,并保留默认映射初始化行为以维持现有消费者兼容性

- 更新 XML 注释,明确只读访问语义和内部状态隔离原因
2026-04-24 10:46:17 +08:00
gewuyou
e692ed3e43
Merge pull request #280 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-24 09:36:17 +08:00
gewuyou
982249151e docs(zh-cn): 补齐文档元数据缺口
- 补齐 docs/zh-CN 多个栏目页面的 title 与 description frontmatter,清空完全缺 frontmatter 的历史页面
- 修复 multiplayer、source-generators 与 troubleshooting 触达页面暴露的 Markdown 结构和站内链接问题
- 更新 documentation-full-coverage-governance 的恢复点、验证结果与下一批 metadata 热点
2026-04-24 09:19:36 +08:00
gewuyou
136b139312 fix(ai-plan): 修复PR评审涉及的归档跟踪文档问题
- 修复 analyzer warning reduction 归档 todo 中指向 RP-001 的相对链接

- 清理 rp002-rp041 trace 中误混入的 RP-001 历史段落

- 更新 active tracking 与 trace 的恢复点描述和验证结论
2026-04-24 08:41:31 +08:00
gewuyou
5b7c555472 docs(core): 补齐 Core 文档 frontmatter
- 补充 docs/zh-CN/core 目录 21 个专题页的 frontmatter 与 description

- 修复 core/ioc.md 的 ReaderWriterLockSlim 坏链和 core/state-management.md 的站内链接

- 更新 documentation-full-coverage-governance tracking 与 trace,记录本轮批处理指标、验证结果和停止点
2026-04-24 08:38:51 +08:00
gewuyou
66395739dc docs(governance): 收口公开文档治理口径
- 更新 AGENTS.md、DOCUMENTATION_STANDARDS.md 与 gframework-doc-refresh 规则,禁止在公开文档中暴露 inventory、覆盖基线与恢复点

- 修复 Core、Game、Ecs.Arch 与 abstractions 栏目中的 XML 覆盖表述,改为面向使用者的源码阅读入口

- 补充 contributor 页面 frontmatter,并统一 landing page、验证基线等内部术语为读者导向表达

- 更新 documentation-full-coverage-governance tracking 与 trace,记录 -batch-boot 75 基线、验证结果和下一步
2026-04-24 08:31:23 +08:00
gewuyou
833a95f7f3 fix(analyzer-warning-reduction): 收口PR280评审并压缩恢复入口
- 修复 SchemaConfigGeneratorTests 中冗余的 global:: 返回类型声明
- 归档 analyzer-warning-reduction 主题的 RP-002 至 RP-041 详细 tracking 与 trace 历史
- 更新 RP-042 的 active 跟踪与验证记录以反映 PR #280 follow-up 结论
2026-04-24 07:42:19 +08:00
gewuyou
2de57f5fde
Merge pull request #281 from GeWuYou/docs/sdk-update-documentation 2026-04-23 23:03:40 +08:00
GeWuYou
a3501c9b91 docs(skills): 更新 README 中关于文件变更停止条件的说明
- 移除了关于分支相对基线的旧说明
- 明确单个数字表示当前分支全部提交相对远程 origin/main 的文件变更数
- 详细说明两个数字表示文件数或变更行数的固定顺序
- 添加关于避免使用 | 符号的建议并说明其 OR 语义
2026-04-23 23:02:02 +08:00
dependabot[bot]
fdccfc4448 Bump Microsoft.Extensions.DependencyInjection.Abstractions from 10.0.6 to 10.0.7
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection.Abstractions
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 22:55:51 +08:00
dependabot[bot]
fa2488c108 Bump Microsoft.Extensions.DependencyInjection from 10.0.6 to 10.0.7
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection
  dependency-version: 10.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 22:55:34 +08:00
dependabot[bot]
06f8db2efd Bump Meziantou.Polyfill from 1.0.110 to 1.0.116
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.116
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 22:54:52 +08:00
dependabot[bot]
a7bd213044 Bump Meziantou.Analyzer from 3.0.48 to 3.0.52
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.52
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 22:54:36 +08:00
dependabot[bot]
c578910b40 build(deps): bump trufflesecurity/trufflehog from 3.94.3 to 3.95.2
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.94.3 to 3.95.2.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.94.3...v3.95.2)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.95.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 22:54:07 +08:00
gewuyou
45b25f429f docs(documentation): 更新批处理恢复点指标
- 更新 documentation-full-coverage-governance 跟踪中的当前分支阈值状态
- 补充 trace 对 24 个文件与 264 行变更的 stop-condition 记录
- 说明剩余热点已转为正文语义性提及,适合后续逐页复核
2026-04-23 21:04:02 +08:00
gewuyou
8a117201d4 docs(documentation): 收口专题页README导航入口
- 更新专题页推荐阅读中的 README 入口为可点击 GitHub 链接
- 修复 source-generators 与 Game/ECS/CQRS 页面中的裸路径导航
- 更新 documentation-full-coverage-governance 跟踪与轨迹以记录第二批治理结果
2026-04-23 21:01:28 +08:00
gewuyou
a4bb041b0d docs(documentation): 补充文档站仓库入口链接
- 更新 docs/zh-CN landing page 与 API 导航页中的 README 入口为可点击 GitHub 链接
- 修复 VitePress 对 docs 外相对链接的 dead link 构建失败
- 更新 documentation-full-coverage-governance 跟踪与轨迹以记录本轮批处理结论
2026-04-23 20:53:41 +08:00
gewuyou
1a9e8f64bd refactor(sourcegenerators-tests): 收敛 Cqrs 隐藏泛型定义测试长方法
- 重构 HiddenGenericEnvelopeResponse 场景的共享 source fixture,清理当前 MA0051 位点

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录第五个有效 subagent 写集和基线降至 10 条
2026-04-23 20:38:58 +08:00
gewuyou
b1c8dccf9a refactor(sourcegenerators-tests): 收敛 Cqrs 隐藏数组响应测试长方法
- 重构 HiddenArrayResponseFallback 场景的共享 source fixture,清理当前 MA0051 位点

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录第四个有效 subagent 写集和基线降至 11 条
2026-04-23 20:30:46 +08:00
gewuyou
2da38a85a5 refactor(sourcegenerators-tests): 收敛 Cqrs 直接接口注册测试长方法
- 重构 HiddenImplementationDirectInterfaceRegistration 场景的共享 source fixture,清理当前 MA0051 位点

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录第三个有效 subagent 写集和基线降至 12 条
2026-04-23 20:21:18 +08:00
gewuyou
099a541475 refactor(sourcegenerators-tests): 收敛 Cqrs 隐藏处理器测试长方法
- 重构 HiddenNestedHandlerSelfRegistration 场景的共享 source fixture,清理当前 MA0051 位点

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录第二个有效 subagent 写集和基线降至 13 条
2026-04-23 20:12:58 +08:00
gewuyou
8975ef1a20 refactor(sourcegenerators-tests): 收敛 Cqrs 注册测试首个长方法
- 重构 CqrsHandlerRegistryGeneratorTests 首个程序集级注册场景的共享 fixture,清理当前 MA0051 位点

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录 subagent 循环首个有效写集和基线降至 14 条
2026-04-23 20:03:31 +08:00
gewuyou
148cfe14b0 docs(skills): 明确批处理阈值速记语义
- 更新 gframework-batch-boot skill,明确纯数字速记默认按当前分支相对远程 origin/main 的累计 diff 计算
- 补充文件数与代码行数双阈值的 OR 语义,并将无管道的 75 2000 作为推荐写法
- 同步更新 skills README 与 documentation governance tracking/trace,记录本轮规则收口与恢复点
2026-04-23 19:22:45 +08:00
gewuyou
2915624e60 refactor(sourcegenerators-tests): 收敛 SchemaConfigGeneratorTests 结构性警告
- 重构 SchemaConfigGeneratorTests 的共享 runtime fixture 与 generated-source helper,清理当前 MA0051 长方法

- 补充 project-level registration catalog 的专用契约断言,保持生成输出验证语义不变

- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录基线降至 15 条并切换下一步恢复点
2026-04-23 19:15:13 +08:00
gewuyou
59fe63bba6 fix(docs): 修正文档中的泛型内联代码渲染
- 修复 Core 与函数式教程页面中的泛型 inline code 写法,避免 VitePress 将 HTML entity 按字面量展示
- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录本轮批处理基线、验证和恢复点
2026-04-23 18:06:52 +08:00
gewuyou
aa879d2c9a
Merge pull request #273 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-23 17:51:41 +08:00
gewuyou
fdf7382717 fix(sourcegenerators): 收口PR审查遗留问题
- 修复 PR review 指出的 XML 文档位置、快照路径防御与换行归一化细节

- 更新 monster schema snapshot 场景,覆盖 dependentRequired、dependentSchemas、allOf 与 if/then/else 约束文档

- 补充 SchemaConfigGenerator 条件与组合校验 helper 的 XML 文档,并同步 ai-plan 恢复点与验证记录
2026-04-23 17:38:35 +08:00
gewuyou
efc0518996
Merge pull request #272 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-23 15:04:33 +08:00
gewuyou
2263cf296b fix(docs): 修正 Godot 文档泛型内联代码写法
- 修正 Godot setting 与 storage 文档中 inline code 使用 HTML entity 导致泛型按字面量渲染的问题

- 更新 documentation-full-coverage-governance 的 active tracking 与 trace,记录 PR #272 review follow-up 和 RP-019 恢复点
2026-04-23 13:40:39 +08:00
gewuyou
564b45bde1 feat(skills): 新增批量任务启动skill
- 新增 gframework-batch-boot skill,约束批量任务的 baseline 选择、stop condition 与循环委派流程

- 更新 skills README,补充批量任务 skill 的公开入口与调用示例
2026-04-23 13:34:47 +08:00
gewuyou
c3085f7c6a docs(godot): 修正 README 示例命名空间
- 修正 GFramework.Godot.SourceGenerators README 中错误的 SourceGenerators 特性命名空间示例
- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录 PR #272 的 Greptile follow-up 和验证结果
2026-04-23 13:24:03 +08:00
gewuyou
8cd492506d refactor(source-generators-tests): 收口 ContextGetGeneratorTests 的 MA0051
- 重构 ContextGetGeneratorTests 的长测试方法为场景常量与验证 helper,保持生成输入和断言语义不变

- 补充测试类与 helper 的 XML 文档,并统一生成源码与诊断断言的复用路径

- 验证 GFramework.SourceGenerators.Tests Release build 与 ContextGetGeneratorTests 过滤测试通过
2026-04-23 13:17:07 +08:00
gewuyou
18c595a72f refactor(source-generators-tests): 拆分 ContextRegistrationAnalyzerTests 结构
- 重构 ContextRegistrationAnalyzerTests 的场景源码常量,保持 analyzer 输入与 markup span 不变

- 补充测试方法与辅助 helper 文档,并统一诊断断言路径以收口 MA0051
2026-04-23 13:13:40 +08:00
gewuyou
a6b87c23e4 docs(governance): 收敛恢复入口并补充评审示例
- 更新 documentation governance 的 active tracking 与 trace,只保留当前恢复点、风险、验证结果与归档指针

- 归档 RP-001 到 RP-016 的状态与时间线摘要,降低 boot 恢复时的噪音

- 补充 UnifiedSettingsDataRepository 的统一文件布局示例,并补齐 Godot SourceGenerators 的生命周期接法代码片段
2026-04-23 13:11:42 +08:00
gewuyou
cebdbdbe9b refactor(source-generators-tests): 拆分 GeneratorSnapshotTest 快照流程
- 重构 RunAsync 的编译、诊断校验与快照断言阶段,收口 GeneratorSnapshotTest 的 MA0051

- 补充快照读取与缺失快照写入 helper 的 XML 文档,保持快照路径校验和失败语义不变
2026-04-23 13:11:25 +08:00
gewuyou
3203239726 fix(source-generators-tests): 收敛 schema 快照测试超长方法
- 重构 SchemaConfigGeneratorSnapshotTests 的 monster 场景输入与快照辅助逻辑,消除单个超长测试方法

- 更新 analyzer warning reduction 的 tracking 与 trace,记录 RP-033 基线和验证结果
2026-04-23 13:01:06 +08:00
gewuyou
4b5a760643 docs(game): 收口 Game 持久化文档波次
- 重写 Game 数据、存储、序列化与设置专题页,统一为当前运行时采用路径说明

- 补充 DataRepository、SaveRepository、FileStorage、JsonSerializer 与 SettingsModel 的职责边界和最小接入路径

- 更新 documentation-full-coverage-governance 的 RP-016 恢复点与验证结果
2026-04-23 11:54:58 +08:00
gewuyou
9d251ab1f8 refactor(source-generators-tests): 收敛自动注册模块测试告警
- 重构 AutoRegisterModuleGeneratorTests 的内联测试源码与快照常量,降低 MA0051 方法长度并保持生成断言不变
- 更新 analyzer warning reduction 的 tracking 与 trace,记录 RP-032 的验证结果和下一步恢复点
2026-04-23 11:48:14 +08:00
gewuyou
31ae1460a9 refactor(source-generators-tests): 收敛 Logger 快照测试告警
- 重构 LoggerGeneratorSnapshotTests 的重复场景源码构造,收口单文件 MA0051 告警
- 补充 LoggerGeneratorSnapshotTests 的 XML 文档并保持快照场景语义不变
- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录 RP-031 验证结果和下一步恢复点
2026-04-23 11:37:49 +08:00
gewuyou
d0e86933cf fix(sourcegenerators-tests): 清理低风险 warning 基线
- 修复 GFramework.SourceGenerators.Tests 中低风险的 MA0004 与 MA0048,统一改为直接返回 Task 或在文件 I/O 上显式使用 ConfigureAwait(false)

- 更新 AnalyzerTestDriver 文件名与类型名对齐,避免测试基础设施继续产生文件命名 warning

- 更新 analyzer-warning-reduction 的 active tracking 与 trace,记录 RP-030 的 61 到 49 warnings-only 基线变化和验证结果
2026-04-23 11:22:59 +08:00
gewuyou
2fa19f89b6 docs(ai-plan): 更新文档治理恢复点
- 更新 documentation-full-coverage-governance tracking 到 RP-015 并记录 boot 后的 Godot 巡检结果

- 补充 trace 中的 validation-only 结论与最新验证记录
2026-04-23 11:06:21 +08:00
gewuyou
1a62f337a6 docs(godot): 刷新存储与设置专题页
- 更新 Godot 存储与设置专题页到当前运行时与 applicator 接线路径

- 补充 Godot 子页巡检结论、验证结果与 RP-014 恢复点记录
2026-04-23 10:45:29 +08:00
gewuyou
71f36c7c20 docs(ai-plan): 更新Godot文档巡检恢复点
- 更新 documentation-full-coverage-governance 的恢复点与 Godot 页面集合

- 记录 validation-only 巡检结论、定向校验结果与后续恢复方向
2026-04-23 10:38:12 +08:00
gewuyou
cdc6d7e028 docs(documentation): 更新Godot生成器入口描述
- 修正根 README 中 Godot.SourceGenerators 的模块职责摘要
- 补充 source-generators 总览页的 Godot 选包说明与 frontmatter
- 更新 documentation-full-coverage-governance 的恢复点与验证记录
2026-04-23 10:38:12 +08:00
gewuyou
9295480866 docs(godot): 刷新 Godot 文档入口
- 更新 GFramework.Godot README,使包定位、相邻包关系与最小接入路径与当前源码和测试一致
- 重写 GFramework.Godot.SourceGenerators README,补齐 project.godot、节点注入、行为包装与批量注册入口
- 补充 API 参考与 ai-plan 恢复点,确保 Godot 相关入口能直接落到专题页
2026-04-23 10:38:12 +08:00
gewuyou
7d6ff77ff4 docs(ai-plan): 回填Godot治理恢复摘要
- 更新 documentation-full-coverage-governance 的恢复点到 RP-010 并回填 Godot family 最小恢复摘要
- 补充 active topic 对 Godot 页面范围、generator owner、Scene/UI 边界与 archive 指针的记录
- 调整后续恢复步骤,改为继续巡检 cross-link 漂移而非重复评估 archive 迁回
2026-04-23 10:38:12 +08:00
gewuyou
5b7105d5be docs(ai-plan): 推进文档治理恢复点到 RP-009
- 更新 documentation-full-coverage-governance 的 active tracking,记录 closed PR 上陈旧 review thread 已本地核销
- 补充 RP-009 trace,将下一步切回 Godot inventory 与 cross-link 巡检 backlog
- 记录最新 PR review 抓取与 docs build 验证结果
2026-04-23 10:38:12 +08:00
gewuyou
dc8c5766dc refactor(analyzer-warning): 收口 SchemaConfigGenerator 剩余告警
- 拆分 SchemaConfigGenerator 的 schema 校验与代码发射 helper,清零 GFramework.Game.SourceGenerators 的剩余 MA0051
- 更新 analyzer-warning-reduction 的 tracking 与 trace,记录 RP-029 的验证结果与后续恢复点
2026-04-23 10:37:34 +08:00
gewuyou
9656393fbb
Merge pull request #269 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-23 10:09:52 +08:00
gewuyou
b8c2ad42a9 fix(cqrs-source-generators): 化解注册生成器文件级冲突
- 合并 main 在线上单文件版本新增的模型 XML 文档,并迁移到当前 partial 拆分后的 Models 文件

- 保留 CqrsHandlerRegistryGenerator 主文件的现有生成管线拆分,不回退已完成的结构调整

- 更新 analyzer-warning-reduction 跟踪与 trace,记录本轮冲突确认、合并策略与构建验证结果
2026-04-23 09:58:35 +08:00
gewuyou
ba3a4d4a37 fix(core-source-generators): 修复ContextAware继承成员命名冲突
- 修复 ContextAwareGenerator 的保留名收集逻辑,使 _gFrameworkContextAware* 字段分配覆盖完整基类链

- 新增 inherited collision 快照回归测试与快照文件,锁定基类占用字段名时的后缀回退行为

- 更新 analyzer-warning-reduction 跟踪与 trace,记录本轮 Greptile follow-up 与验证结果
2026-04-23 09:58:34 +08:00
gewuyou
2fc8442bd4 fix(source-generators-tests): 修复PR269引用元数据唯一性回归测试
- 修正 SchemaConfigGeneratorTests 的 reference metadata 唯一性用例,改用合法 schema 路径碰撞覆盖后缀分配逻辑

- 更新 analyzer-warning-reduction 跟踪与 trace,记录 PR #269 failed-test follow-up 和定向验证结果
2026-04-23 09:58:34 +08:00
gewuyou
050f4321c6 fix(source-generators): 收口PR269剩余review与构建规范
- 修复 SchemaConfigGenerator 的归一化字段名冲突诊断,并补充对应 generator 回归测试

- 修复 CqrsHandlerRegistryGenerator 对 dynamic 的运行时类型引用,避免生成非法 typeof(dynamic)

- 更新 AGENTS 与 analyzer-warning-reduction 跟踪,明确受影响模块必须独立 build 并处理或显式报告 warning
2026-04-23 09:58:33 +08:00
GeWuYou
4ef9406ee9 fix(source-generators): 收口PR269剩余review问题
- 修复 Cqrs handler registry 对 Roslyn error type 的直接引用,改走安全的运行时类型查找

- 补充 SchemaConfigGenerator 根 type 非字符串诊断回归与 Cqrs 未解析类型回归测试

- 更新 analyzer-warning-reduction 的 RP-024 跟踪与验证记录
2026-04-23 09:58:33 +08:00
GeWuYou
df68cdfd82 fix(pr269): 收口剩余评审修复
- 修复 SchemaConfigGenerator 的根类型标识符校验与 comparer XML 文档转义\n- 补强 LoggingConfiguration 与 CollectionExtensions 的公共 API 兼容断言\n- 重构 Cqrs 运行时类型反射查找 helper,并更新 analyzer-warning-reduction 跟踪与验证记录
2026-04-23 09:58:32 +08:00
GeWuYou
12f15961af fix(pr269): 收口评审兼容性与生成器修复
- 恢复 EasyEvents、CollectionExtensions 与 logging 配置模型的公共 API 兼容形状

- 修复 ContextAwareGenerator 字段命名冲突、锁内读取路径与相关快照回归测试

- 更新 Cqrs 与 schema generator 的 null/cancellation 契约,并同步 ai-plan 跟踪与验证记录
2026-04-23 09:58:32 +08:00
gewuyou
6d4f9f2f94 fix(source-generators): 收口PR269生成器评审修复
- 重构 CqrsHandlerRegistryGenerator 为按职责拆分的 partial 生成器文件,保留现有注册输出与 fallback 契约
- 修复 ContextAwareGenerator 生成字段命名冲突并为 SetContextProvider 补充运行时 null 校验与异常文档
- 补充 Option<T> 的 XML remarks 契约说明与 ContextAwareGenerator 字段冲突快照测试
- 更新 analyzer-warning-reduction 跟踪与 trace,记录 PR #269 review follow-up 与验证结果
2026-04-23 09:58:30 +08:00
GeWuYou
0f8bf077e4 refactor(source-generators): 拆分配置生成器警告热点
- 重构 SchemaConfigGenerator 的 schema 解析、属性解析与遍历阶段

- 拆分数组属性、约束文档和生成代码发射 helper 以降低 MA0051 基线

- 更新 analyzer warning reduction 恢复文档和验证记录
2026-04-23 09:56:08 +08:00
gewuyou
78a23bf53a fix(game-source-generators): 清理 SchemaConfigGenerator 字符串比较
- 修复 SchemaConfigGenerator 中 schema 关键字比较缺少 StringComparison 的 analyzer warning

- 新增 schema 类型比较 helper 以统一 ordinal 比较语义

- 更新 analyzer warning reduction 的 RP-019 恢复记录与验证结果
2026-04-23 09:56:07 +08:00
gewuyou
de782ae179 refactor(cqrs): 拆分处理器注册生成器
- 重构 CQRS handler registry 生成器的候选分析、运行时类型引用和源码发射阶段

- 补充 analyzer warning reduction 的 RP-018 跟踪和验证记录
2026-04-23 09:56:06 +08:00
gewuyou
7ec2185ae0 refactor(source-generators): 拆分上下文感知生成逻辑
- 重构 ContextAwareGenerator 的上下文属性生成流程,降低 MA0051 复杂度
- 补充 analyzer warning reduction 的 RP-017 恢复记录与验证结果
- 更新 下一步 MA0158 多目标兼容性评估方向
2026-04-23 09:49:21 +08:00
GeWuYou
97573be2e1 fix(core): 清零低风险分析器警告
- 更新 Core 配置与集合扩展的集合抽象契约

- 修复 CoroutineScheduler 字符串字典 comparer 与 EasyEvents 重复注册异常类型

- 补充 Option<T> 相等性接口并更新 analyzer recovery 记录
2026-04-23 09:49:21 +08:00
gewuyou
3f95843d59
Merge pull request #271 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-23 09:22:23 +08:00
gewuyou
df91d3706b fix(docs): 修复 PR 评审遗留与 Git 抓取
- 修复 gframework-pr-review 在 WSL worktree 中优先使用显式 Linux Git 绑定

- 更新 CQRS 与 ECS 文档以及 skill 文案,消化 PR #271 中仍成立的 review 意见

- 归档 documentation-full-coverage-governance 历史验证记录,并补写 trace 验证结果态
2026-04-23 08:49:41 +08:00
gewuyou
737dd5d91d docs(ai-plan): 更新文档治理恢复点
- 更新 documentation-full-coverage-governance 恢复点到 RP-007
- 记录 Game family 巡检通过且未发现回漂
- 补充 docs build 验证结果与后续恢复建议
2026-04-23 07:41:54 +08:00
gewuyou
819f91a7ad docs(governance): 更新 WSL Git 回退优先级
- 更新 AGENTS.md,优先使用显式 --git-dir 与 --work-tree 绑定操作 worktree Git

- 补充 git.exe 在当前会话不可执行时的 fallback 规则,避免重复命中 Exec format error

- 更新 documentation-full-coverage-governance 的 tracking 与 trace,记录已验证的 Git 使用方式
2026-04-23 07:36:32 +08:00
gewuyou
007c33f772 docs(game): 刷新 Game 模块文档基线
- 更新 Game family README、landing 与 abstractions 页面,补齐声明级 XML inventory 入口

- 修复 Game.Abstractions 页面与当前源码不一致的旧接口摘录,改写为真实契约边界与最小接入路径

- 补充 ai-plan 跟踪与 trace,推进恢复点到 RP-005 并记录验证结果
2026-04-23 07:30:03 +08:00
gewuyou
a1dbed3c8d docs(cqrs): 刷新 Cqrs 文档入口
- 更新 Cqrs family landing、API 参考与 source-generators 导航

- 新增 CQRS handler registry 专题页并补充 XML inventory

- 补充 runtime 与 generator 内部类型 XML 注释

- 记录 RP-004 验证结果与后续恢复点
2026-04-22 18:51:05 +08:00
GeWuYou
da0ae700a3 docs(ecs): 重写 Ecs.Arch 文档入口
- 重写 Ecs.Arch README 与 ecs 栏目页面,使采用路径对齐当前源码和集成测试

- 补充 Ecs.Arch.Abstractions 的 XML inventory 与抽象页阅读链路

- 更新 documentation-full-coverage-governance 的恢复点、验证结果和下一波次计划
2026-04-22 17:19:33 +08:00
GeWuYou
af21f16c09 docs(core): 补齐 Core XML 覆盖基线清单
- 补充 Core 与 Core.Abstractions README 的类型族级 XML 覆盖基线入口

- 更新 Core 与 Core.Abstractions landing page 的 XML inventory、代表类型和阅读重点

- 同步刷新 documentation-full-coverage-governance 的 tracking 与 trace 恢复点
2026-04-22 16:06:44 +08:00
gewuyou
704fdaa2c8 docs(core): 对齐 Core 模块文档入口
- 更新 Core 与 Core.Abstractions README 的目录映射和 XML 阅读入口

- 重写 Core Abstractions 页面,改为契约边界与最小接入路径说明

- 补充 Core landing page、API 参考入口和 ai-plan 跟踪记录
2026-04-22 15:32:22 +08:00
GeWuYou
cc49b8638f docs(governance): 建立长期文档治理入口
- 新增 documentation-full-coverage-governance active topic 与首轮 inventory、trace 入口
- 补充 GFramework.Ecs.Arch.Abstractions README、抽象接口页面与导航映射
- 更新 API 参考页与根 README,明确内部支撑模块 owner 和阅读链路
2026-04-22 15:07:15 +08:00
gewuyou
45a87c6988 docs(ai-plan): 归档文档治理主题
- 迁移 documentation-governance-and-refresh 主题到 public archive 目录

- 更新 public README 的 active topic 与 worktree 映射

- 收口归档内 tracking 和 trace 的完成状态与恢复说明
2026-04-22 14:31:29 +08:00
gewuyou
310aeafa57 docs(ai-plan): 收口文档治理恢复入口
- 归档 documentation-governance-and-refresh 截至 2026-04-22 的跟踪与 trace 历史

- 更新 active tracking 与 trace,只保留恢复点、风险、验证结果和下一步

- 补充 Godot 栏目稳定性复核后的归档决策与 PR #268 follow-up 入口
2026-04-22 14:23:15 +08:00
gewuyou
b2a5555c75
Merge pull request #270 from GeWuYou/docs/sdk-update-documentation
Docs/sdk update documentation
2026-04-22 14:14:54 +08:00
GeWuYou
76e7f68544 docs(godot): 收口日志系统文档
- 重写 docs/zh-CN/godot/logging.md,按当前 provider、控制台输出语义与 [Log] 边界整理采用路径

- 更新 documentation-governance-and-refresh 的 tracking 与 trace,推进恢复点到 RP-017 并记录验证结果
2026-04-22 13:33:35 +08:00
GeWuYou
3ba1e3f202 docs(godot): 收口 signal 与 extensions 文档
- 更新 godot signal 页面,明确 Signal(...)、SignalBuilder 与 [BindNodeSignal] 的分工

- 更新 godot extensions 页面,收敛到当前存在的扩展成员与生命周期边界

- 补充 documentation-governance-and-refresh 跟踪与 trace,记录 RP-016 和验证结果
2026-04-22 13:20:18 +08:00
gewuyou
03ecbe5989 docs(godot): 重写场景与UI接入文档
- 更新 Godot 场景文档,按当前 factory、registry、root、provider 与 AutoScene 接线收口采用路径
- 更新 Godot UI 文档,明确 layer 语义、provider 要求、root 接线与 AutoUiPage 用法
- 同步 documentation-governance-and-refresh 跟踪与 trace 到 RP-015,并把下一步切到 signal/extensions
2026-04-22 13:03:14 +08:00
gewuyou
5d436694f8 docs(godot): 收口 Godot 入口与架构文档
- 更新 Godot landing page,使包关系、最小接入路径与运行时边界回到源码与测试契约

- 重写 Godot architecture 页面,明确锚点生命周期、模块挂接顺序与 IGodotModule 契约边界

- 更新 documentation-governance topic 的 RP-014 跟踪与验证记录,标记下一轮收口目标
2026-04-22 12:50:05 +08:00
GeWuYou
a77f79b3e2 docs(tutorials): 重写 Godot 集成教程
- 重写 Godot 集成教程,按当前源码与 CoreGrid 采用路径收口 project.godot、GetNode 与 BindNodeSignal 的接线说明

- 更新 tutorials 入口摘要与 documentation-governance-and-refresh 跟踪,记录 RP-013、验证结果和下一恢复点
2026-04-22 12:33:53 +08:00
gewuyou
aec1931c74 docs(source-generators): 收口 AutoRegister 文档语义
- 更新 auto-register-exported-collections 专题页,补齐 frontmatter 并按当前源码与测试收口成员形状、匹配规则、null-skip 行为与诊断边界

- 补充 documentation-governance-and-refresh 的 RP-012 恢复点,记录 godot-integration tutorial 仍残留旧 API 的跟进风险
2026-04-22 11:39:35 +08:00
gewuyou
214f52b6c2 docs(source-generators): 刷新 Godot 生成器文档
- 更新 Godot 项目元数据、GetNode 与 BindNodeSignal 专题页,按当前源码与测试收口最小接入路径、生成语义与诊断边界

- 补充 documentation-governance-and-refresh 的 RP-011 恢复点、验证结果与下一步建议
2026-04-22 11:25:49 +08:00
gewuyou
3425b299f0
Merge pull request #268 from GeWuYou/docs/sdk-update-documentation
docs(game): 收口场景与UI专题文档
2026-04-22 11:15:34 +08:00
GeWuYou
fe4fd1aa5e fix(pr-review): 补齐多AI评审覆盖并收口文档层级
- 新增 gframework-pr-review 对 greptile-apps 的 reviewer 摘要、thread 计数与 skill 描述

- 修复 fetch_current_pr_review.py 的 reviewer 聚合输出与函数 docstring 覆盖

- 修复 Scene/UI 文档的最小接入路径标题层级问题

- 修复 validate-code-blocks.sh 的 code fence 判断与 module-config 的 README 映射
2026-04-22 11:05:27 +08:00
gewuyou
ce6bab2301 docs(review): 收口PR反馈与技能描述
- 修复 gframework-doc-refresh skill 描述中的 YAML 解析问题

- 补充 Game Scene 与 UI 接入目录和文件约定

- 归档文档治理已闭环 trace 并更新当前恢复点
2026-04-22 09:57:58 +08:00
gewuyou
1239fb4651 refactor(skills): 统一文档刷新技能入口
- 新增 gframework-doc-refresh 统一技能入口,并补齐模块扫描、证据顺序、模板与校验脚本

- 更新共享文档规范与模块映射,收口源码模块到 README、docs 和 ai-libs 的固定关联

- 删除旧 vitepress-* 公开技能定义,避免继续以文档类型拆分入口

- 同步 documentation-governance-and-refresh 的恢复点、风险和下一步
2026-04-22 09:13:22 +08:00
gewuyou
a980a042ae
Merge pull request #267 from GeWuYou/fix/analyzer-warning-reduction-batch
fix(core): 统一事件签名并清理MA0046告警
2026-04-21 18:21:38 +08:00
GeWuYou
a9f86348ff fix(core): 修复 AsyncLogAppender 刷新竞态
- 修复 AsyncLogAppender 在队列已被后台线程提前清空时 Flush 仍可能超时失败的问题
- 新增 AsyncLogAppender 已处理队列场景的稳定回归测试并重新验证 GFramework.Core.Tests
- 更新 analyzer-warning-reduction 的 tracking 与 trace 记录 PR267 failed-test follow-up
2026-04-21 17:32:50 +08:00
GeWuYou
685897f2de fix(core): 收口 PR267 事件契约遗留问题
- 修复 AsyncLogAppender 接口刷新路径重复触发完成事件,并补充单次通知回归测试
- 补充 Architecture、CoroutineExceptionEventArgs 与阶段协调器的事件契约注释
- 更新 PhaseChanged 迁移文档与 analyzer-warning-reduction recovery 记录
2026-04-21 16:50:56 +08:00
GeWuYou
d836ec8027 docs(agents): 修复提交正文换行约束
- 补充 Git 提交规则,禁止使用 Bash $"..." 传递多行 commit body

- 规定多行正文应改用多个 -m 或 ANSI-C $... 引号,避免字面量 \n 被写入提交信息

- 验证 docs 站点构建通过
2026-04-21 16:46:25 +08:00
GeWuYou
48e45787f3 docs(source-generators): 收口上下文与优先级生成器文档
- 重写 ContextAware 与 Priority 专题页,按当前生成成员、priority-aware API 和兼容边界说明使用方式\n- 更新 documentation-governance-and-refresh 的 tracking 与 trace,记录 RP-007 与后续 Godot 生成器核对重点\n- 验证 docs 站点构建通过
2026-04-21 16:26:13 +08:00
GeWuYou
8831cb42a8 fix(core): 统一事件签名并清理MA0046告警
hBc
2026-04-21 16:15:36 +08:00
GeWuYou
da707c7b4f docs(game): 收口场景与UI专题文档
- 重写 game/scene 与 game/ui 专题页,按当前 router、factory、root、输入与暂停语义说明接入方式\n- 更新 documentation-governance-and-refresh 的 tracking 与 trace,记录 RP-006 与后续 source-generators 核对重点\n- 验证 docs 站点构建通过
2026-04-21 16:08:05 +08:00
gewuyou
9ccfed3ad9
Merge pull request #265 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-21 15:08:56 +08:00
gewuyou
4d306498b9
Merge pull request #266 from GeWuYou/docs/sdk-update-documentation
docs(core): 收口 Core 事件属性与日志专题页
2026-04-21 14:09:11 +08:00
GeWuYou
4a779ac794 fix(tooling): 优化 PR review 输出收窄流程
- 新增 gframework-pr-review 脚本的 JSON 落盘、section 过滤与 path 过滤能力
- 更新文本输出截断与 skill 用法说明以减少超长 review JSON 漏看风险
- 更新 analyzer-warning-reduction 的 tracking 与 trace 以记录 RP-012 验证结果
2026-04-21 14:04:12 +08:00
GeWuYou
a5a35ce6ed docs(core): 收口 Core 事件属性与日志专题页
- 更新 Core events、property 与 logging 专题页,改回当前公开入口、边界与迁移建议
- 记录 state-management 与 coroutine 的复核结论,明确本轮无需继续机械改写
- 推进 documentation-governance-and-refresh 到 RP-005,并更新下一恢复点到 game 与 source-generators 栏目
2026-04-21 13:07:38 +08:00
GeWuYou
240fc761ed fix(events): 修复事件监听器计数偏差
- 修复 Event 泛型事件默认 no-op 委托导致的 GetListenerCount off-by-one
- 补充 Event 单参数与双参数监听器计数回归测试
- 更新 analyzer-warning-reduction 的 tracking 与 trace 以记录 RP-011 验证结果
2026-04-21 13:01:05 +08:00
GeWuYou
aa78dfbf51 fix(core): 修复 PR review 回归问题
- 修复 CoroutineScheduler 在零初始容量下的扩容边界并补充回归测试
- 修复 Store dispatch 快照阶段的异常回滚逻辑并补充异常安全测试
- 更新 analyzer-warning-reduction 的 tracking 与 trace 以记录 RP-010 验证结果
2026-04-21 12:56:28 +08:00
gewuyou
c61ee140a1
Merge branch 'main' into fix/analyzer-warning-reduction-batch 2026-04-21 12:44:28 +08:00
gewuyou
2c678cbdda
Merge pull request #264 from GeWuYou/docs/sdk-update-documentation
docs: Realign Core/Game documentation with current APIs and ai-libs reference implementations
2026-04-21 12:44:01 +08:00
GeWuYou
233195df91 docs(core): 补齐导航链接并收口追踪告警
- 更新 core landing page 的 Godot 与 Source Generators 导航入口为可点击链接
- 修复 documentation-governance-and-refresh active trace 的重复标题并消除 MD024 告警
- 补充 tracking 与 trace 的恢复点、验证记录和 PR review 跟进结论
2026-04-21 12:34:37 +08:00
GeWuYou
33c435bad5 refactor(core): 收拢泛型家族文件以清理MA0048
- 重构 Command 与 Query 抽象基类文件布局,合并同名泛型家族到基名文件
- 迁移泛型 Event 类型到 Event.cs,保持公共 API 与行为不变
- 更新 analyzer warning reduction 的 RP-009 跟踪与验证结果
2026-04-21 12:31:24 +08:00
GeWuYou
26d5d84d26 fix(pr-review): 修复 CodeRabbit 非空评审解析
- 修复最新 head commit 上空 APPROVED review 覆盖非空 COMMENTED review 的选择逻辑
- 保持最新 review 元数据输出不变,并新增用于结构化解析的非空 CodeRabbit review 选择
- 验证当前分支 PR 可重新提取 Nitpick comments
2026-04-21 12:30:53 +08:00
GeWuYou
035c7db18e docs(ai-plan): 更新 warning 批处理策略
- 更新 analyzer warning reduction 的恢复策略,明确按类型优先批处理
- 补充单次 boot 的文件改动上限与非冲突 subagent 并行规则
- 修正文档措辞,明确低数量时可顺手吸收其他低冲突类型而非特指 MA0015 和 MA0077
2026-04-21 11:40:32 +08:00
GeWuYou
f044aeb770 fix(analyzer): 收敛 CoroutineScheduler 长方法 warning
- 重构 CoroutineScheduler 的启动与完成清理阶段,降低 MA0051 并保持取消与完成语义
- 补充辅助方法注释,保留标签分组、统计和等待者唤醒顺序
- 更新 analyzer warning reduction 的恢复点与验证记录
2026-04-21 11:17:47 +08:00
GeWuYou
ec0c9a7bc8 fix(analyzer): 收敛 Store 长方法 warning
- 重构 Store 的 dispatch 进入提交退出阶段,降低 MA0051 并保持锁与通知语义
- 重构 reducer 快照创建流程,保留多态匹配的稳定排序规则
- 更新 analyzer warning reduction 的恢复点与验证记录
2026-04-21 10:30:20 +08:00
gewuyou
b553d7cbc6
Merge pull request #263 from GeWuYou/fix/analyzer-warning-reduction-batch
Fix/analyzer warning reduction batch
2026-04-21 09:31:32 +08:00
GeWuYou
ff1996e81b refactor(pause): 收口 PauseStackManager 长方法告警
- 重构 PauseStackManager 的销毁与 Pop 流程,拆分锁内状态迁移与锁外通知阶段
- 新增 PauseStackManager 销毁恢复通知回归测试,覆盖多暂停组销毁补发行为
- 更新 analyzer warning reduction 主题的 active tracking 与 trace,记录 RP-005 验证结果和下一恢复点
2026-04-21 09:18:20 +08:00
GeWuYou
60faf8eaff docs(core): 重写核心专题页文档
- 更新 architecture、context、lifecycle、command、query 与 cqrs 页面,使其对齐当前公开 API 与初始化语义
- 移除 Init、属性式总线、旧输入赋值示例和已移除的 Mediator 兼容入口等过时说明
- 补充 documentation-governance-and-refresh 主题的恢复点、验证结果与下一步专题页计划
2026-04-21 09:14:06 +08:00
GeWuYou
358b1e9cca fix(cqrs): 修复 PR 审查遗留问题
- 修复 CqrsHandlerRegistrar generated registry 激活路径的可空 out 契约并移除 null! 抑制
- 更新 analyzer warning reduction 跟踪与 trace,记录 PR #263 review follow-up 和编译验证结果
2026-04-21 08:42:13 +08:00
GeWuYou
dfeb40ba15 docs(documentation): 更新 ai-libs 参考引用
- 更新 AGENTS、Game README 与游戏栏目入口中的参考表述,统一改为 ai-libs 下的只读参考实现
- 移除活跃文档入口中的旧外部项目命名,避免继续暴露特定参考仓库线索
- 补充 documentation-governance-and-refresh 主题的 tracking 与 trace,记录本轮引用迁移和后续约束
2026-04-21 08:27:14 +08:00
GeWuYou
462a71ba3c fix(core): 拆分架构生命周期初始化流程
- 优化 ArchitectureLifecycle 的初始化批次与阶段执行拆分

- 保持阶段顺序、日志语义与 late registration 行为不变

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录 RP-003 验证结果
2026-04-21 08:27:11 +08:00
GeWuYou
5c7870ca3e fix(cqrs): 拆分处理器注册长方法
- 优化 CqrsHandlerRegistrar 的 generated registry 激活与 fallback 解析拆分

- 保持原有日志文本、缓存策略与 reflection fallback 语义不变

- 更新 analyzer warning reduction 的 active tracking 与 trace,记录 RP-002 验证结果
2026-04-21 07:46:00 +08:00
GeWuYou
7531762d3e docs(documentation): 收口栏目入口页导航
- 更新 Core、Game 与 Source Generators 栏目 landing page,使其对齐当前模块定位、包关系与最小接入路径
- 修复 VitePress 对 docs 目录外 README 相对链接的 dead-link 校验问题,改为纯文本入口提示
- 补充 documentation-governance-and-refresh 主题的恢复点、验证结果与下一步专题页修订计划
2026-04-21 07:45:39 +08:00
gewuyou
5175f00178
Merge pull request #261 from GeWuYou/feat/cqrs-optimization
Feat/cqrs optimization
2026-04-20 20:00:13 +08:00
GeWuYou
13d52a8a94 docs(cqrs-rewrite): 同步PR评审追踪状态
- 更新 cqrs-rewrite migration trace,标记 RP-047 已被 RP-050 覆盖并禁止恢复 MakePointerType precise registration
- 同步 migration tracking 中 PR #261 的 open thread、CTRF 测试结果与 MegaLinter 状态
2026-04-20 19:48:31 +08:00
GeWuYou
c1f9fa8b9a fix(cqrs): 修复指针合同生成回归
- 修复 CqrsHandlerRegistryGenerator 对 pointer 与 function pointer 的精确注册建模
- 补充生成器测试对输入源 CS0306 与 fallback 诊断的断言
- 更新 cqrs-rewrite 跟踪文档记录 PR #261 review follow-up
2026-04-20 19:42:06 +08:00
gewuyou
db65249315 refactor(cqrs): 收敛处理器重复映射判定
- 优化 CqrsHandlerRegistrar 使用本地映射索引替代重复线性扫描
- 补充 重复 handler 类型输入仍只注册一份映射的回归测试
- 更新 cqrs-rewrite 跟踪与 trace 到 RP-049
2026-04-20 19:42:06 +08:00
gewuyou
110666d06b refactor(cqrs): 缓存处理器接口反射元数据
- 优化 CqrsHandlerRegistrar 复用 supported handler interface 缓存
- 补充 registrar 静态缓存隔离与接口缓存复用回归测试
- 更新 cqrs-rewrite 跟踪与 trace 到 RP-048
2026-04-20 19:42:06 +08:00
gewuyou
5f3964d4c0 refactor(cqrs): 扩展指针类型注册生成覆盖
- 优化 CqrsHandlerRegistryGenerator 对 pointer 类型的 runtime type 递归重建与发射逻辑
- 修复 function pointer 签名默认直出导致隐藏类型漏回退的判定边界
- 补充 pointer precise registration 与 function pointer fallback 回归测试
- 更新 cqrs-rewrite 跟踪与 trace 到 RP-047
2026-04-20 19:42:06 +08:00
gewuyou
7cf0a75568 refactor(cqrs): 收敛生成注册器激活反射路径
- 优化 generated registry 激活流程,使用缓存工厂委托优先替代 ConstructorInfo.Invoke\n- 补充私有无参构造 registry 的回归测试,保持生成器产物兼容性\n- 更新 CQRS ai-plan 恢复点与验证记录,指向新的 Phase 8 下一步
2026-04-20 19:42:06 +08:00
gewuyou
a926748def docs(ai-plan): 同步CQRS恢复点复核结果
- 更新 CQRS 重写跟踪中的恢复点与活跃事实,记录 PR #253 已关闭且剩余 thread 为 stale review\n- 调整 CQRS 重写 trace 的下一步,恢复 Phase 8 主线优先级
2026-04-20 19:42:06 +08:00
gewuyou
3fabf44387
Merge pull request #262 from GeWuYou/feat/ai-first-config
feat(config): 支持对象约束型条件 schema
2026-04-20 19:41:17 +08:00
GeWuYou
ed53f9c68c fix(ai-first-config): 收口PR评审解析与Tooling校验
- 修复 gframework-pr-review 对 outside-diff 评论与 Python nitpick 卡片的解析,并补充结构化输出
- 优化 review section 解析边界,避免 latest review body 区块串读并消化 marker 查找 nitpick
- 收紧 config tool 对条件分支 schema 坏形状的拒绝规则,并新增 JS 回归测试
- 更新 ai-plan 跟踪与 trace,记录本轮 PR #262 follow-up 验证结果
2026-04-20 19:20:47 +08:00
GeWuYou
5f2442dbcd fix(ai-first-config): 收口条件分支评审跟进
- 修复 Runtime 条件分支 schema 坏形状的诊断路径,改为指向具体 if/then/else 分支
- 新增 else 缺失 if 的运行时回归测试,保持与 Generator 覆盖对称
- 更新 ai-plan 跟踪与 trace,记录 PR #262 follow-up 验证并消除重复标题
2026-04-20 18:07:23 +08:00
GeWuYou
8a39f0a932 fix(ai-first-config): 修复 PR review nitpick 解析与跟进收口
- 修复 gframework-pr-review 对 latest review body folded nitpick comments 的解析遗漏,并输出 declared / parsed 数量
- 优化 config tool 的条件提示与共享校验 helper
- 补充 generator/runtime/tooling 回归测试并更新 ai-plan 跟踪
2026-04-20 17:02:08 +08:00
GeWuYou
0da15f6ffd fix(config): 修复条件分支诊断与文档摘要
- 修复 then/else 非 object 分支诊断定位到具体条件路径
- 优化 if/then/else 文档摘要,补充 properties 内约束说明
- 补充生成器回归测试,覆盖分支路径与文档输出
2026-04-20 17:02:08 +08:00
GeWuYou
68d653623a feat(config): 支持对象约束型条件 schema
- 新增 Runtime、Source Generator 与 VS Code Tooling 对 object-focused if/then/else 的一致支持
- 补充运行时、生成器与工具链回归测试覆盖
- 更新配置系统文档与 ai-plan 恢复入口
2026-04-20 17:02:08 +08:00
gewuyou
f99736f95f
Merge pull request #260 from GeWuYou/feat/data-repository-persistence
Refactor migration chain execution with unified VersionedMigrationRunner
2026-04-20 15:55:31 +08:00
GeWuYou
5353d5bd45 fix(game): 修复设置迁移缓存并发一致性
- 修复 SettingsModel 迁移注册与缓存重建的并发竞争

- 新增 SettingsModel 并发回归测试并更新 ai-plan 跟踪
2026-04-20 13:02:49 +08:00
GeWuYou
a0cc418e05 docs(ai-plan): 修正 PR 评审后的恢复文档状态
- 更新 tracking 文档中的 PR #260 review follow-up 状态描述

- 修复 trace 文档重复的三级标题,避免 Markdown 锚点冲突
2026-04-20 12:46:08 +08:00
gewuyou
702dec6ed1
Merge pull request #259 from GeWuYou/feat/coroutine-optimization
test(coroutine): 补齐 Godot 协程宿主回归测试
2026-04-20 11:49:57 +08:00
GeWuYou
ec3de5bbb0 fix(game): 修复 PR 评审遗留的迁移与文档问题
- 修复 SaveRepository 迁移链并发读取,改为单次快照执行

- 补充 VersionedMigrationRunner 与 SettingsModel 的 XML 文档契约

- 更新 PersistenceTests、接入文档与 ai-plan 跟踪记录
2026-04-20 11:44:27 +08:00
GeWuYou
90b9e2a4c9 fix(ci): 修复 MegaLinter 工作区歧义
- 修复 MegaLinter 的 dotnet format workspace 指向,避免 solution 与 csproj 歧义导致 CI warning
- 更新 gframework-pr-review skill 与抓取脚本,提取 GitHub Actions 发布的 MegaLinter detailed issues
- 补充 coroutine optimization 跟踪与 trace,记录本次 PR 页面 warning 的收口与验证结果
2026-04-20 11:20:14 +08:00
GeWuYou
d369118351 fix(coroutine): 收口 Timing 测试宿主清理
- 修复 Timing 共享单例仅在当前实例持有引用时才清理,避免测试宿主误伤其他实例
- 新增 TimingTests 的 NonParallelizable 约束,避免静态实例槽位并发污染
- 更新 coroutine optimization 跟踪与 trace,记录 PR #259 review 收口与验证结果
2026-04-20 10:19:11 +08:00
gewuyou
88de1235ae refactor(game): 收敛版本迁移链执行器
- 新增 internal 迁移执行器,统一 settings 与 save 的链式版本校验

- 修复 SettingsModel 重复注册、缺链回填与目标版本判定的迁移约束

- 补充 Persistence 与 SettingsModel 定向测试,并更新迁移文档和 ai-plan 跟踪
2026-04-20 09:52:37 +08:00
gewuyou
9576e0f8bd test(coroutine): 补齐 Godot 协程宿主回归测试
- 新增 Timing 纯托管测试宿主入口,支持在 dotnet test 下验证 Godot 协程阶段推进
- 补充 TimingTests,覆盖暂停、segment 路由和阶段等待回归
- 更新 coroutine ai-plan 跟踪与 trace,记录 RP-002 验证结果与后续缺口
2026-04-20 09:40:46 +08:00
gewuyou
31ca8cc963 docs(game): 澄清 JsonSerializer 配置与并发契约
- 补充 JsonSerializer 对 settings 与 converters 生命周期的 XML 注释

- 更新序列化文档与 README,修正线程安全和组合根配置说明

- 新增 JsonSerializer 配置实例暴露契约测试,并回写 data-repository-persistence 跟踪
2026-04-20 09:36:11 +08:00
gewuyou
374db438ea
Merge pull request #258 from GeWuYou/feat/data-repository-persistence
docs(ai-plan): 迁移数据仓库持久化计划
2026-04-19 22:58:15 +08:00
GeWuYou
254d354c8d docs(ai-plan): 迁移数据仓库持久化计划
hBc
2026-04-19 22:30:26 +08:00
gewuyou
58f325317e
Merge pull request #257 from GeWuYou/feat/coroutine-optimization
docs(ai-plan): 迁移 coroutine 早期计划
2026-04-19 21:59:12 +08:00
GeWuYou
2381e72572 docs(sdk): 更新 SDK 文档并移除已归档的协程优化分支信息
- 移除了关于协程优化分支的文档条目
- 清理了已归档主题的相关工作树提示信息
- 更新了 SDK 使用说明以反映当前状态
2026-04-19 21:57:10 +08:00
GeWuYou
da7d03d89d feat(docs): 更新分支文档以反映协程优化工作
- 添加协程优化分支信息到文档
- 更新工作树提示为 GFramework 协程优化
- 添加协程优化优先级标记
2026-04-19 21:47:26 +08:00
coderabbitai[bot]
c3614b5b5d
fix: apply CodeRabbit auto-fixes
Fixed 1 file(s) based on 1 unresolved review comment.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-19 13:05:36 +00:00
gewuyou
e1e32b2b04 docs(ai-plan): 迁移 coroutine 早期计划
- 新增 coroutine-optimization 主题并整合 legacy local-plan todo,补写缺失 trace 的恢复边界\n- 更新 ai-plan 公共索引与治理跟踪,建立 feat/coroutine-optimization 的 topic 映射\n- 删除 worktree 根目录 legacy local-plan 入口,统一从 ai-plan/public 恢复
2026-04-19 20:51:44 +08:00
gewuyou
84b40a2d23
Merge pull request #256 from GeWuYou/docs/sdk-update-documentation
docs: migrate documentation recovery plan into ai-plan
2026-04-19 18:00:08 +08:00
GeWuYou
88b4dfed12 docs: migrate documentation recovery plan into ai-plan 2026-04-19 17:06:26 +08:00
gewuyou
bac0b0151e
Merge pull request #255 from GeWuYou/fix/analyzer-warning-reduction-batch
docs(ai-plan): 迁移 analyzer 恢复文档到 ai-plan
2026-04-19 16:20:43 +08:00
GeWuYou
a67aa8c305 docs(ai-plan): 迁移 analyzer 恢复文档到 ai-plan
- 新增 analyzer-warning-reduction topic 的 active 与 archive 恢复入口
- 归档 local-plan 中的 RP-001 tracking 和 trace 历史并移除旧目录
- 更新公共索引与 ai-plan-governance 记录并补充迁移验证
2026-04-19 16:12:32 +08:00
gewuyou
011cba3ce3
Merge pull request #254 from GeWuYou/feat/ai-first-config
Feat/ai first config
2026-04-19 15:57:15 +08:00
GeWuYou
235aa8e116 docs(cqrs-rewrite): 更新文档归档说明
- 将文档标识为历史归档快照,用于回溯 CQRS-REWRITE-RP-043 及之前阶段
- 添加说明指导后续在 active todos/ 与 traces/ 维护当前恢复点
- 明确完成阶段需继续归档到历史记录中
2026-04-19 15:38:31 +08:00
coderabbitai[bot]
bc3d50f07e
fix: apply CodeRabbit auto-fixes
Fixed 6 file(s) based on 6 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-19 07:29:01 +00:00
GeWuYou
9b904709d6 docs(ai-plan): 收口主题内归档与恢复入口
- 新增 活跃主题的 archive 目录并归档已完成且已验证的历史 tracking 与 trace\n- 更新 ai-plan 治理规则、README 与 boot skill,明确 active todo 和 trace 必须保持精简\n- 收短 ai-plan-governance、ai-first-config-system 与 cqrs-rewrite 的默认恢复入口并补充归档索引
2026-04-19 15:11:50 +08:00
GeWuYou
406e6f1926 docs(ai-plan): 迁移当前工作树恢复文档到 ai-plan
- 迁移 feat/ai-first-config 工作树的 tracking、next 与 trace 文档到 ai-plan/public/ai-first-config-system\n- 更新 ai-plan 公共索引与治理跟踪,登记当前分支的活跃主题映射\n- 清理 旧本地恢复入口并补充迁移后的结构校验与最小构建验证
2026-04-19 13:00:53 +08:00
gewuyou
f5b3cfd6b1
Merge pull request #253 from GeWuYou/feat/cqrs-optimization
feat: CQRS cache hardening、ai-plan governance
2026-04-19 12:12:48 +08:00
GeWuYou
acd638e807 fix(cqrs): 修正恢复主线与评审提示
- 修复 cqrs-rewrite 跟踪文档的下次恢复建议,使当前主线阶段与 Phase 8 保持一致
- 补充 cqrs-rewrite trace,记录本次 PR review 复核结论与恢复点更新
- 优化 gframework-pr-review 输出,明确 open thread 中的 Addressed in commit 文案仍需本地验证
2026-04-19 11:39:21 +08:00
GeWuYou
c44b0667b5 docs(ai-plan): 修复治理追踪锚点冲突
- 修复 ai-plan 治理 trace 中重复的 Markdown 标题并追加恢复点后缀,消除 MD024 锚点冲突
- 更新 ai-plan 治理 tracking,记录本次 PR review 修正和文本校验结果
2026-04-19 11:35:26 +08:00
gewuyou
c82518aa0d docs(ai-plan): 收口公共计划主题索引
- 重构 ai-plan public 结构为按主题分组并引入归档层级
- 新增 public README worktree 映射并同步 boot 启动入口
- 更新治理 tracking trace 与仓库文档中的 ai-plan 路径约定
2026-04-19 10:46:27 +08:00
GeWuYou
ce5a9d5c06 fix(ai-plan): 修正文档命令示例的 Markdown 歧义
- 修复 ai-plan 跟踪文档中命令示例的嵌套反引号问题
- 优化 rg 匹配串的 Markdown 渲染稳定性,避免 markdownlint 告警
- 保持原有验证语义不变,仅调整展示层面的文档写法
2026-04-19 10:13:28 +08:00
GeWuYou
97b619c0b2 fix(codex): 优化 FPR 的 API 优先审查流程
- 修复 FPR 脚本的 Git 解析、--pr 控制流与 branch 到 PR 的 API 解析路径
- 优化 CodeRabbit summary、CTRF 测试结果与 latest head review threads 的 API-first 提取逻辑
- 更新 skill 文档、agent prompt 与 ai-plan 记录,明确最新提交后 review threads 的优先级
2026-04-19 09:59:36 +08:00
gewuyou
5db27fc80a docs(skill): 补充 PR review 技能触发词
- 补充 `fix pr review` 与 `Use FPR` 作为 `gframework-pr-review` 的快捷触发示例
- 更新 skill 示例列表,降低 PR 审查场景下的调用门槛
2026-04-19 03:27:46 +08:00
GeWuYou
815d91713b chore(license): 添加 Mediator 库的 MIT 许可证文件
- 在 third-party-licenses/Mediator 目录下创建 LICENSE 文件
- 包含完整的 MIT 许可证文本内容
- 添加版权持有者 Martin Othamar 的声明
- 确保许可证条款符合开源项目合规性要求
2026-04-19 03:19:48 +08:00
gewuyou
6ab32032bc refactor(repo): 重构ai-plan目录语义
- 重命名 local-plan 为 ai-plan,并收口 public 与 private 的目录语义
- 更新 AGENTS、README 与 boot skill 的恢复文档路径和安全约束
- 迁移共享 tracking 与 trace 文件到 ai-plan/public,并补充治理说明文档
2026-04-19 03:18:46 +08:00
gewuyou
ce10c1f462 feat(codex): 新增PR评审技能并修复评审问题
- 新增项目级 `-pr-review` 技能与 PR 页面抓取脚本,提取 CodeRabbit 评论、检查结果和测试状态
- 修复 gframework-boot 与 AGENTS 规则文案,使 resume/recovery 与 tracking 条件保持一致
- 更新 Godot 模板与 IController 文档注释中的旧 SourceGenerators Rule 命名空间引用
- 补充 CQRS 迁移 tracking 与 trace 的 RP-042 恢复点、验证结果和后续动作
2026-04-19 03:03:34 +08:00
gewuyou
4eca2f1060 docs(cqrs): 收口 source generator 文档命名空间
- 更新 docs/zh-CN 中 source generator 示例的命名空间到当前公开 API
- 修正文档叙述与 API 参考中的旧聚合模块表述
- 对齐 source generator 家族文档与教程示例的当前模块划分
2026-04-18 23:30:33 +08:00
GeWuYou
d54d770c2f feat(project): 添加GFramework项目配置文件
- 配置包的基本信息包括ID、作者、描述和许可证
- 设置多目标框架支持net8.0、net9.0和net10.0
- 定义包发布相关属性如仓库URL和自动生成包
- 排除多个子目录和测试项目避免参与编译打包
- 聚合核心模块GFramework.Core和GFramework.Game作为项目引用
- 配置README.md文件包含到包中并设置符号包含选项
2026-04-18 23:13:28 +08:00
gewuyou
66b848c6d8 feat(codex): 新增项目级 boot skill
- 新增项目级 .codex/skills/gframework-boot 启动 skill,统一读取 AGENTS.md、环境清单与 local-plan 恢复信息
- 补充任务复杂度分级与 subagent/model 选择规则,约束 boot 阶段的委派流程
- 更新 AGENTS.md 中的 boot 入口约定,明确 skill 与仓库规则的优先级关系
2026-04-18 23:03:46 +08:00
gewuyou
914eb3b26e docs(agents): 新增 ai-libs 只读参考规则
- 新增 ai-libs 目录作为第三方源码只读参考区的仓库约束
- 更新第三方参考说明并要求在计划与 trace 中记录本地参考路径
- 排除 ai-libs 目录
2026-04-18 22:23:03 +08:00
gewuyou
c0ef3b5c00
Merge pull request #252 from GeWuYou/fix/analyzer-warning-reduction-batch-1
fix(analyzers): 降低 Core、Cqrs、Godot 与生成器的构建警告
2026-04-18 21:59:07 +08:00
GeWuYou
adc38cc4f0 docs(logging): 更新日志工厂方法文档
- 为 ConfigurableLoggerFactory.GetLogger 方法添加 ArgumentNullException 异常说明
- 补充了当 name 参数为 null 时的异常抛出情况
- 完善了方法的 XML 注释文档
2026-04-18 21:39:19 +08:00
GeWuYou
5046c9752b fix(review-followup): 修复日志配置空项校验与文档示例
- 修复 ConfigurableLoggerFactory 对 null Appender 配置项的显式校验与 XML 契约
- 补充日志工厂针对 appenders 空项输入的回归测试
- 更新 Godot setting 文档中的 async 示例签名以匹配 ApplyAsync 用法
- 修正 AbstractArchitecture 中 ObserveDestroyCoreAsync 方法里调用await DestroyAsync() 未配置ConfigureAwait(false)的问题
2026-04-18 21:11:26 +08:00
GeWuYou
2c2df5de29 fix(review-followup): 修复失败路径清理与日志契约
- 修复 Godot 模块在附加流程失败时的登记时机,确保后续销毁仍可感知半安装模块
- 更新 ConfigurableLoggerFactory 的 name 空值校验与 minLevel XML 契约,并用可观察行为替换脆弱的反射测试
- 补充 WeakTypePairCache 热路径注释,并新增 Godot 模块安装顺序回归测试
2026-04-18 20:45:37 +08:00
GeWuYou
05de6d1e15 fix(review-followup): 修复Godot安装顺序与日志工厂防御
- 修复 AbstractArchitecture 在锚点未初始化时先执行模块安装的顺序问题,并收紧 GodotYamlConfigEnvironment 的目录枚举异常处理
- 修复 ConfigurableLoggerFactory 对 null 集合、调用方 minLevel 与 AsyncLogAppender 释放路径的处理
- 补充 WeakTypePairCache 与 GodotLocalizationSettingsTests 的 XML 文档,并新增日志工厂回归测试
2026-04-18 20:07:07 +08:00
GeWuYou
e3652db030 fix/review-followups: 修复审查反馈并补充提交流程规则
- 修复 Core、Cqrs、Godot 与 Game 模块中的异常契约、空值校验和线程亲和性问题
- 更新 Settings API 为 ApplyAsync 并同步实现、调用点、测试与中文文档
- 补充 AGENTS.md 中的构建校验、自动提交与分支创建规则
- 整理 Logging、WeakCache 与 Resource 相关实现的行为与文档一致性
2026-04-18 19:37:25 +08:00
GeWuYou
3f25ea5624 feat(core): 添加函数式编程扩展和依赖注入容器实现
- 实现 ResultExtensions 扩展类,提供 Combine、Map、Bind 等函数式操作
- 添加 MicrosoftDiContainer 依赖注入容器,支持单例、瞬态、作用域服务注册
- 实现 CQRS 管道行为和处理器注册功能
- 添加本地化字符串实现和相关工具方法
- 提供线程安全的多读单写锁保护机制
- 实现服务实例的优先级排序和批量获取功能
2026-04-18 16:57:49 +08:00
GeWuYou
23489570bf fix(analyzers): 降低 Core、Cqrs、Godot 与生成器的构建警告
- 清理 GFramework.Core 与 GFramework.Cqrs 中的大量低风险 Meziantou 警告

- 修复 GFramework.Godot 运行时中的 ConfigureAwait、StringComparison 与参数校验告警

- 调整 Core SourceGenerators 中的字符串比较、文件命名与局部长方法问题

- 拆分部分配置与缓存辅助类型文件以消除 file/type mismatch 告警

- 更新 warning reduction 跟踪与执行记录,保留下一批结构性告警的恢复点
2026-04-18 16:47:44 +08:00
gewuyou
22f271e709
Merge pull request #251 from GeWuYou/feat/rich-text-effects-and-color-markers
feat(text): 添加富文本效果系统和颜色标记功能
2026-04-18 15:53:34 +08:00
GeWuYou
11515ff791 feat(godot): 添加富文本标签效果系统支持
- 新增 GfRichTextLabel 组件作为富文本标签宿主
- 实现 IRichTextEffectHost 接口用于效果控制器驱动
- 创建 RichTextEffectsController 处理效果装配逻辑
- 添加 RichTextProfile 配置资源类型
- 引入 RichTextEffectPlan 和 RichTextEffectPlanEntry 类型
- 在 CI 工作流中添加 GFramework.Godot.Tests 项目
- 优化 Godot 测试诊断条件判断逻辑
- 添加富文本效果控制器相关单元测试
2026-04-18 15:47:08 +08:00
GeWuYou
1145f455f3 feat(ci): 添加CI/CD工作流配置文件
- 配置pull request触发的构建和测试流程
- 集成代码质量检查和安全扫描功能
- 设置.NET多版本SDK环境支持
- 配置NuGet包和dotnet工具缓存优化
- 实现Node.js和Bun运行时环境搭建
- 添加配置工具依赖安装和测试执行
- 配置项目构建和单元测试执行流程
- 集成测试报告生成和发布功能
- 实现失败测试项目的错误处理机制
2026-04-18 15:18:37 +08:00
GeWuYou
5cb5a2270b fix(ci): 修复测试项目失败时的输出处理逻辑
- 使用here document格式正确输出失败项目列表到GITHUB_OUTPUT
- 添加EOF分隔符确保多行内容正确传递
- 在失败步骤中读取并显示具体的失败项目名称
- 保持原有的退出码设置确保工作流正确失败
2026-04-18 15:08:53 +08:00
GeWuYou
1665e72115 fix(ci): 修复PR报告权限配置问题
- 添加pull-requests写入权限以支持PR评论功能
- 修改pull-request-report条件避免跨仓库触发错误
2026-04-18 15:05:09 +08:00
GeWuYou
f3d50c6361 refactor(tests): 更新测试代码中的命名空间引用
- 将 RichTextEffectsControllerTests 中的 GFramework.Godot.Text 引用替换为 Godot 相关命名空间
- 使用 Godot.Collections.Array 替代系统数组类型
- 在 GlobalUsings 中添加 GFramework.Godot.Text 的全局引用
- 修复返回类型以使用新的 Array<RichTextEffect> 结构
2026-04-18 14:59:21 +08:00
GeWuYou
1c2a813a52 feat(ci): 添加CI/CD工作流配置和Godot文本效果控制器测试
- 配置GitHub Actions工作流用于PR构建和测试
- 实现代码质量检查和安全扫描功能
- 添加.NET多版本SDK支持和依赖缓存
- 集成MegaLinter和TruffleHog安全工具
- 创建RichTextEffectsController的单元测试覆盖各种场景
- 实现测试报告生成和发布功能
2026-04-18 14:55:31 +08:00
GeWuYou
22882f68c4 feat(text): 添加富文本效果系统和抖动效果实现
- 创建 RichTextEffectBase 基类提供统一的标签命名和环境参数读取逻辑
- 实现 RichTextJitterEffect 抖动效果类,支持振幅和速度参数调节
- 添加 DefaultRichTextEffectRegistry 默认效果注册表管理内置效果映射
- 创建 GfRichTextLabel 组合式富文本标签宿主,集成效果装配逻辑
- 定义 IRichTextEffectRegistry 接口实现效果注册表抽象
- 开发 RichTextEffectsController 装配控制器负责效果集合管理
- 实现 RichTextMarkup 工具类提供语义化富文本标签构建辅助方法
- 添加相关单元测试验证效果控制器和标记工具的功能正确性
2026-04-18 14:17:09 +08:00
GeWuYou
e5ad29314e feat(text): 添加富文本效果系统和颜色标记功能
- 实现 RichTextEffectBase 基类提供统一的标签命名和参数读取逻辑
- 添加 RichTextBlueEffect、RichTextGoldEffect、RichTextGreenEffect 和 RichTextRedEffect 颜色标记效果
- 添加 RichTextFadeInEffect、RichTextFlyInEffect、RichTextJitterEffect 和 RichTextSineEffect 动画效果
- 实现 DefaultRichTextEffectRegistry 默认效果注册表
- 创建 GfRichTextLabel 富文本标签宿主组件
- 添加 IRichTextEffectRegistry 效果注册表接口
- 实现 RichTextEffectEntry、RichTextEffectsController 和 RichTextProfile 配置管理类
- 添加 RichTextMarkup 语义化标签构建辅助方法
- 创建 RichTextMarkupTests 和 RichTextProfileTests 单元测试
2026-04-18 11:58:40 +08:00
gewuyou
2f4fccabf2
Merge pull request #250 from GeWuYou/docs/sdk-update-documentation
docs(sdk): 更新文档规范并添加VitePress配置
2026-04-18 10:28:21 +08:00
coderabbitai[bot]
8ddf1b6eef
fix: apply CodeRabbit auto-fixes
Fixed 1 file(s) based on 1 unresolved review comment.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-18 02:22:15 +00:00
GeWuYou
ebdc231c07 docs(sdk): 更新文档规范并添加VitePress配置
- 调整文档真实性原则,以源码和测试为首要证据源
- 新增模块README要求,规定所有用户包必须有说明文档
- 更新仓库文档规范,要求根README与文档站点分类一致
- 添加VitePress配置文件,支持中文搜索和泛型转义
- 创建入门指南文档,说明GFramework模块组成和接入路径
- 添加快速开始教程,演示Core模块最小使用示例
- 为Core模块添加详细README文档
- 为Core.Abstractions添加契约层说明文档
- 为Core.SourceGenerators添加源码生成器文档
- 为Game模块添加运行时层详细说明文档
2026-04-18 10:08:05 +08:00
gewuyou
b4459bf600
Merge pull request #249 from GeWuYou/feat/ui-router-base 2026-04-17 23:27:22 +08:00
GeWuYou
f7117254f8 fix(tests): 修复UI路由交互测试中的文档注释和代码块问题
- 为PopAsync测试方法添加了缺失的返回值XML文档注释
- 在Godot页面行为恢复逻辑中添加了正确的代码块括号
- 确保当ResumeFromShow为true时OnResume方法调用的条件判断正确
2026-04-17 23:16:04 +08:00
GeWuYou
ef8530a379 test(UiRouterInteractionTests): 更新UI路由交互测试断言
- 修改modal验证逻辑为验证topmost元素的输入动作掩码、指针输入阻塞和操作输入阻塞属性
- 为_instanceCounter字段查找添加更详细的错误消息以提高调试可读性
- 验证_instanceCounter字段类型是否仍为int类型以确保测试稳定性
- 移除对field变量的null合并操作符调用以简化代码逻辑
2026-04-17 23:08:53 +08:00
GeWuYou
eec8dc8412 test(ui): 添加 UI 路由器交互语义回归测试
- 验证模态层和顶层共享同一套阻塞型默认交互配置
- 验证页面捕获动作后路由分发返回成功的语义
- 验证层级页面排序使用实例自增序号而非字符串顺序
- 验证恢复挂起页面时避免重复调用 OnResume 的问题
- 验证弹出栈顶页面后恢复下层页面的重复触发问题
- 创建测试用路由器、根节点和可配置页面类
- 实现实例计数器设置功能以覆盖边界条件测试
2026-04-17 22:58:29 +08:00
GeWuYou
f011f3158f refactor(global): 统一项目全局命名空间引用
- 在GFramework.Game项目中添加暂停抽象接口的全局引用
- 在GFramework.Game项目中添加日志抽象接口的全局引用
- 从测试项目的UI路由交互测试文件中移除不必要的using声明
- 将测试项目的全局using声明统一到GlobalUsings.cs文件中
- 在GFramework.Godot项目中添加扩展方法的全局引用
- 优化全局命名空间引用的组织结构
2026-04-17 22:51:34 +08:00
GeWuYou
053fd4a371 feat(ui): 添加UI路由基类和接口定义
- 实现UiRouterBase基类,提供页面栈管理和层级UI管理功能
- 定义IUiRouter接口,规范UI界面导航和切换操作
- 添加UI过渡管道机制,支持UI切换处理器注册和执行
- 实现页面栈操作方法,包括Push、Pop、Replace、Clear等
- 添加层级UI管理功能,支持Overlay、Modal、Toast等浮层显示
- 集成暂停管理功能,实现页面可见性驱动的暂停令牌管理
- 提供UI动作分发机制,支持语义动作捕获和分发
- 实现UI交互配置文件UiInteractionProfile,定义页面交互契约
2026-04-17 22:42:37 +08:00
GeWuYou
2e7fd1fc87 feat(ui): 添加UI路由基类和相关接口定义
- 实现UiRouterBase基类,提供页面栈管理和层级UI管理功能
- 定义IUiPageBehavior接口,规范UI页面生命周期方法和状态管理
- 定义IUiRouter接口,统一UI界面导航和切换操作规范
- 实现页面栈操作功能,包括Push、Pop、Replace、Clear等方法
- 实现层级UI管理功能,支持Overlay、Modal、Toast等浮层显示
- 集成UI过渡管道,支持UI切换动画和逻辑处理
- 添加暂停令牌管理,实现页面可见性驱动的暂停控制
- 实现UI动作捕获和分发机制,支持语义动作处理
2026-04-17 22:00:33 +08:00
GeWuYou
665b3e8396 feat(build): 修改项目构建配置和依赖管理
- 添加 Directory.Build.props 统一构建属性配置
- 配置 netstandard2.0 和 netstandard2.1 目标框架
- 集成 Meziantou.Polyfill 提供新特性支持
- 设置 Nullable 启用可空类型检查
- 配置文档文件生成和包标识设置
- 添加 Microsoft.CodeAnalysis 相关包引用
- 配置项目引用和命名空间引入规则
2026-04-17 21:11:56 +08:00
GeWuYou
6b4631edc7 fix(ci): 修复测试失败状态传递问题
- 为测试步骤添加id标识以便后续引用
- 将测试失败状态通过GITHUB_OUTPUT传递给后续步骤
- 添加失败检查步骤确保测试失败时工作流正确终止
- 优化了错误状态的传递机制
2026-04-17 20:13:21 +08:00
GeWuYou
6933d2799a ci(build): 添加CI/CD工作流并修复包依赖配置
- 配置CI工作流支持PR时执行代码质量检查、构建和测试
- 设置发布工作流支持标签推送时自动打包发布到NuGet和GitHub Packages
- 修复源代码生成器项目的包依赖配置,统一使用GFramework.SourceGenerators.Common命名
- 配置多版本.NET SDK支持及相应的缓存策略
- 实现并行测试执行和统一的测试报告生成机制
- 添加安全扫描和代码质量检查集成
2026-04-17 20:13:21 +08:00
dependabot[bot]
c721c5aed1 chore(deps): bump softprops/action-gh-release from 2 to 3
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:36:35 +08:00
dependabot[bot]
086fbb8b98 chore(deps): bump actions/configure-pages from 5 to 6
Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 5 to 6.
- [Release notes](https://github.com/actions/configure-pages/releases)
- [Commits](https://github.com/actions/configure-pages/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/configure-pages
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:36:25 +08:00
dependabot[bot]
3466e84f53 chore(deps): bump actions/upload-pages-artifact from 4 to 5
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:36:15 +08:00
dependabot[bot]
eb30d52f00 Bump Meziantou.Polyfill from 1.0.109 to 1.0.110
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.110
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.110
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:36:01 +08:00
dependabot[bot]
6181d8a2d8 Bump Microsoft.Extensions.DependencyInjection from 10.0.5 to 10.0.6
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection
  dependency-version: 10.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:35:47 +08:00
dependabot[bot]
790a024858 Bump Microsoft.Extensions.DependencyInjection.Abstractions from 10.0.5 to 10.0.6
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection.Abstractions
  dependency-version: 10.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 19:35:33 +08:00
gewuyou
df0071d506
Merge pull request #246 from GeWuYou/refactor/cqrs-dispatcher-cache
Refactor/cqrs dispatcher cache
2026-04-17 19:34:36 +08:00
gewuyou
68a42eff54
Merge branch 'main' into refactor/cqrs-dispatcher-cache 2026-04-17 19:19:50 +08:00
GeWuYou
0104537615 refactor(config): 优化架构配置集成测试中的警告处理
- 在初始化方法中添加了针对GF_ContextRegistration_003警告的禁用指令
- 通过#pragma warning disable和#pragma warning restore临时禁用了特定警告
- 保持了原有的配置注册表获取和怪物表格数据读取逻辑
- 确保了测试代码的编译清洁性同时维持功能完整性
2026-04-17 19:19:25 +08:00
GeWuYou
3be34156cf docs(cache): 更新 WeakKeyCache 异常文档
- 为 GetOrAdd 方法添加 valueFactory 返回 null 时的异常说明
- 在 GlobalUsings 中添加 System.Runtime.CompilerServices 引用
2026-04-17 19:17:46 +08:00
GeWuYou
45ab38519b feat(cqrs): 添加CQRS运行时实现和中文文档
- 实现了完整的CQRS分发器,支持命令、查询、通知和流式处理
- 添加了弱键缓存机制确保程序集卸载安全
- 实现了管道行为支持,可添加日志、验证等横切关注点
- 提供了类型安全的请求分发和处理器注册功能
- 编写了详细的CQRS中文文档,涵盖基本用法和最佳实践
- 支持编译期生成处理器注册表优化启动性能
2026-04-17 18:12:18 +08:00
gewuyou
e3c23b5aa5
Merge pull request #245 from GeWuYou/feat/config-schema-diagnostics
Feat/config schema diagnostics
2026-04-17 17:57:42 +08:00
GeWuYou
04123d2a71 docs: 添加 CQRS 架构模式与源码生成器完整文档
- 新增 CQRS 核心概念、命令查询处理器实现指南
- 添加安装配置文档,包含各模块包说明与环境要求
- 实现源码生成器全面文档,涵盖 Log、Config Schema、CQRS Handler Registry 等特性
- 提供详细用法示例与最佳实践指导
- 包含常见问题解答与故障排查方案
- 添加 Godot 项目集成与性能优化相关内容
2026-04-17 17:41:38 +08:00
GeWuYou
3aca959fcb docs(tests): 为配置加载器测试添加方法文档注释
- 为 BuildMonsterConfigYaml 方法添加 XML 文档注释
- 为 BuildMonsterSchema 方法添加 XML 文档注释
- 为 IndentLines 方法添加 XML 文档注释
- 补充参数和返回值说明信息
2026-04-17 17:06:55 +08:00
GeWuYou
cfd4ae97d3 fix(tests): 解决测试清理期间的目录删除异常
- 在YamlConfigLoaderAllOfTests的清理方法中添加try-catch块
- 忽略测试拆解期间的目录删除失败异常
- 防止测试因权限或文件锁定问题而意外失败
2026-04-17 16:55:49 +08:00
GeWuYou
389f97b949 feat(generator): 添加JSON schema配置生成器
- 实现了基于JSON schema自动生成配置类型和配置表包装的功能
- 支持嵌套对象、对象数组、标量数组的数据结构生成
- 添加了default/enum/const/ref-table元数据的支持
- 实现了查找索引的自动生成和验证机制
- 集成了字符串格式验证包括date、datetime、email等格式
- 添加了dependentRequired和dependentSchemas的验证支持
- 实现了allOf组合约束的处理和验证
- 生成了配置目录类用于统一管理所有配置表
- 提供了完整的错误诊断和报告机制
2026-04-17 16:43:59 +08:00
GeWuYou
38f98ea7ea docs: 添加 CQRS 架构模式和源代码生成器完整文档
- 新增 CQRS 核心概念、命令查询处理器实现指南
- 添加请求分发器、通知发布和管道行为使用说明
- 提供流式处理、验证行为等高级特性文档
- 完善源代码生成器模块介绍和配置说明
- 包含 Log、ContextAware、EnumExtensions 等生成器详细用法
- 添加 Godot 专用生成器如 GetNode、AutoUiPage 等使用指南
- 整理诊断信息、最佳实践和常见问题解答
2026-04-17 16:33:29 +08:00
GeWuYou
c7516800e7 feat(cqrs): 添加 CQRS 处理器自动注册功能
- 实现 CqrsHandlerRegistrar 类,支持扫描并注册 CQRS 请求/通知/流式处理器
- 添加程序集级源码生成注册器支持,减少冷启动反射开销
- 实现反射回退机制,在生成注册器不可用时进行类型扫描
- 添加进程级缓存机制,避免重复分析程序集元数据和类型加载
- 支持确定性的处理器注册顺序,按名称排序保证稳定性
- 实现类型加载容错机制,部分类型失败时保留其他处理器注册
- 添加完整的单元测试覆盖,验证各种注册场景和错误处理
- 实现日志记录功能,提供详细的注册过程诊断信息
2026-04-17 16:19:35 +08:00
GeWuYou
faa0143799 feat(generator): 添加JSON schema配置生成器
- 实现了基于JSON schema自动生成配置类型和配置表包装的功能
- 支持嵌套对象、对象数组、标量数组的数据结构生成
- 添加了default/enum/const/ref-table元数据映射功能
- 实现了查找索引生成功能,支持唯一键快速检索
- 集成了诊断报告系统,提供详细的错误提示信息
- 生成配置类、表类和绑定类三种类型的源代码
- 支持日期、时间、邮箱等字符串格式验证功能
- 实现了依赖关系验证,确保schema间的引用正确性
2026-04-17 16:18:14 +08:00
GeWuYou
66e1f06f2f docs(config): 添加游戏内容配置系统详细文档
- 新增 YAML 配置源文件支持说明
- 添加 JSON Schema 结构描述功能介绍
- 提供一对象一文件目录组织方式
- 说明运行时只读查询机制
- 详细介绍 Source Generator 生成配置类型功能
- 添加 VS Code 插件配置浏览功能说明
- 提供推荐目录结构和 Schema 示例
- 说明 Godot 文本配置桥接方式
- 添加运行时读取模板和热重载模板
- 说明跨表引用和校验行为
- 提供开发期热重载功能说明
- 添加生成器接入约定说明
- 详细介绍 VS Code 工具功能特性
2026-04-17 15:01:17 +08:00
GeWuYou
3f1a1957b2 feat(config): 添加配置验证模块
- 实现配置架构解析功能,支持对象、数组和标量类型的递归解析
- 添加YAML文件解析和注释提取功能
- 实现配置值的类型验证,包括整数、数字、布尔值和字符串格式验证
- 添加对日期、时间、持续时间、邮箱、URI和UUID等特殊格式的支持
- 实现表单更新应用功能,支持标量值和数组的批量编辑
- 添加配置架构枚举和常量值的处理逻辑
- 实现多语言本地化支持的验证消息系统
- 添加精确十进制计算功能,用于数值倍数约束验证
- 实现YAML标量格式化和反引用功能
- 添加配置架构模式规范化处理,包括正则表达式和格式验证
2026-04-17 15:01:04 +08:00
GeWuYou
be59dc7f27 refactor(cqrs): 优化调度器缓存结构提升性能
- 将通知、请求和流式处理的缓存从多个独立字典合并为统一的分发绑定结构
- 减少热路径上的重复字典查询操作,提升分发性能
- 重构请求分发绑定缓存,按响应类型分层避免值类型装箱开销
- 添加完整的调度绑定单元测试验证缓存行为正确性
- 简化通知和流式处理的缓存查找逻辑,统一调用模式
2026-04-17 14:21:56 +08:00
GeWuYou
160842d093 docs(config): 添加配置系统详细文档和分析器规则清单
- 新增 AnalyzerReleases.Unshipped.md 包含 12 条配置模式分析器规则
- 添加游戏配置系统完整文档,涵盖 YAML 配置源文件和 JSON Schema 结构描述
- 提供推荐目录结构和 Schema 示例,支持一对象一文件的目录组织
- 介绍 Source Generator 生成配置类型、表包装和注册访问辅助功能
- 包含 VS Code 插件配置浏览、校验和表单编辑入口说明
- 提供 Godot 文本配置桥接和热重载模板示例
- 详细说明运行时校验行为和跨表引用机制
- 添加开发期热重载和生成器接入约定说明
- 包含 VS Code 工具能力和当前限制说明
2026-04-17 14:19:11 +08:00
GeWuYou
6ed4d8da1a feat(config): 添加配置 schema 诊断和验证功能
- 新增 ConfigSchemaDiagnostics 类提供配置 schema 代码生成相关诊断
- 添加 JSON 解析错误、根对象检查、ID字段要求等12种诊断规则
- 实现配置验证逻辑,支持整数、数字、布尔值、邮箱等格式校验
- 添加日期时间、持续时间、URI、UUID 等字符串格式验证
- 实现 YAML 解析和注释提取功能
- 提供配置样本生成和批量编辑更新功能
- 添加模式匹配和格式验证的正则表达式支持
2026-04-17 14:17:12 +08:00
gewuyou
59dfb68add
Merge pull request #244 from GeWuYou/refactor/cqrs-and-config-system
Refactor/重构CQRS处理程序注册生成器以支持反射回退属性
2026-04-17 13:15:24 +08:00
GeWuYou
b7a476456a feat(cqrs): 为CQRS处理器注册生成器添加详细文档注释并改进测试验证
添加了完整的XML文档注释到Execute方法,详细说明了CQRS处理器注册生成器的执行流程、参数含义、实现逻辑和注意事项。同时改进了测试框架,在GeneratorExecutionResult中分离了生成代码的编译诊断,使测试能够更精确地验证生成代码的质量。
2026-04-17 12:58:34 +08:00
gewuyou
263586b139
Merge branch 'main' into refactor/cqrs-and-config-system 2026-04-17 12:44:09 +08:00
gewuyou
7d25f4cb98
Merge pull request #243 from GeWuYou/feature/game-content-config-system
docs(config): 添加配置系统文档和分析器规则清单
2026-04-17 12:43:34 +08:00
GeWuYou
bcde9f644e feat(rule): 添加上下文感知基类和生成器实现
- 新增 ContextAwareBase 抽象类提供手动继承的上下文感知基础实现
- 实现 IContextAware 接口的简单实例字段缓存上下文功能
- 添加 ContextAwareGenerator 源代码生成器自动生成上下文感知实现
- 生成器支持 partial 类的 ContextAware 特性标记自动实现
- 提供 CqrsHandlerRegistryGenerator 生成 CQRS 处理器注册器减少运行时反射扫描
2026-04-17 11:47:56 +08:00
GeWuYou
cde234ddea test(config): 添加YAML配置加载器dependentSchemas约束功能测试
- 实现YAML配置加载器对对象级dependentSchemas约束的运行时行为验证
- 添加dependentSchemas不满足时抛出异常的测试用例
- 添加触发字段缺席时不误触发dependentSchemas检查的测试用例
- 添加dependentSchemas满足时正常加载并保留额外字段的测试用例
- 添加非对象类型dependentSchemas声明时抛出异常的测试用例
- 添加触发字段未在同级properties中声明时的错误处理测试
- 添加dependentSchemas条件子schema非object类型时的验证测试
- 实现临时目录管理以避免不同测试场景间的数据污染
- 提供完整的测试辅助方法包括文件创建、schema构建等功能
2026-04-17 11:47:06 +08:00
GeWuYou
57a006caeb chore(build): 添加 C# 命名规范验证脚本
- 实现了 PascalCase 命名规则检查功能
- 集成了 Git 文件遍历和 grep 文本匹配
- 支持排除特定目录如 Godot 模板和测试快照
- 验证命名空间和目录路径的大小写规范
- 提供详细的违规信息报告和错误定位
- 包含字母数字字符和缩写命名规则校验
2026-04-17 10:58:42 +08:00
GeWuYou
9ec83fa56a feat(source-generators): 添加CQRS处理器注册器和枚举扩展生成器
- 实现了CqrsHandlerRegistryGenerator用于自动生成CQRS处理器注册器
- 添加了EnumExtensionsGenerator用于自动生成枚举相关的扩展方法
- 创建了ContextAwareGenerator为标记类自动生成IContextAware接口实现
- 支持运行时类型引用的安全编码和反射回退机制
- 实现了精确的运行时类型引用描述和泛型类型处理
- 添加了完整的诊断报告和错误处理机制
2026-04-17 10:44:09 +08:00
GeWuYou
2486352341 test(config): 添加YAML配置加载器dependentSchemas约束测试
- 验证触发字段出现但条件schema未满足时抛出异常
- 验证触发字段缺席时不会误触发dependentSchemas检查
- 验证触发字段出现且条件schema满足时正常加载对象
- 验证非对象dependentSchemas声明在解析阶段被拒绝
- 验证dependentSchemas触发字段必须在同级properties中显式声明
- 验证dependentSchemas只接受object-typed条件子schema
- 实现临时目录创建和清理避免文件堆积
- 提供完整的测试用例覆盖dependentSchemas各种场景
2026-04-17 10:15:04 +08:00
GeWuYou
b19877f970 feat(source-generators): 添加多个代码生成器功能
- 新增 PriorityGenerator 为标记 Priority 特性的类自动生成 IPrioritized 接口实现
- 新增 EnumExtensionsGenerator 为枚举自动生成 Is 和 IsIn 扩展方法
- 新增 LoggerGenerator 为标记 Log 特性的类自动生成日志字段
- 新增 ContextAwareGenerator 为标记 ContextAware 特性的类自动生成 IContextAware 接口实现
- 新增 CqrsHandlerRegistryGenerator 为 CQRS 处理器生成编译时注册器减少运行时反射开销
2026-04-17 10:07:57 +08:00
GeWuYou
01a815a518 feat(config): 添加配置验证工具和代码分析规则
- 实现配置架构解析器和验证功能
- 添加YAML解析和注释提取功能
- 创建配置验证诊断规则表格
- 实现批量编辑器支持的字段提取
- 添加字符串格式验证(日期、邮箱、UUID等)
- 创建示例配置YAML生成功能
- 实现表单更新应用到YAML的功能
- 添加常量和枚举值的元数据处理
- 实现精确小数倍数验证算法
- 添加配置模式规范化和比较功能
2026-04-17 09:43:23 +08:00
GeWuYou
35a1634697 feat(cqrs): 添加 CQRS 处理器注册器源代码生成器
- 实现了 CqrsHandlerRegistryGenerator 源代码生成器
- 减少运行时程序集反射扫描成本提高性能
- 支持 IRequestHandler、INotificationHandler 和 IStreamRequestHandler 接口
- 生成静态注册代码避免运行时动态发现处理器
- 实现精确的运行时类型引用解析机制
- 支持跨程序集类型的反射查找功能
- 添加了日志记录和错误处理机制
- 实现了类型安全的依赖注入注册过程
2026-04-17 09:26:01 +08:00
GeWuYou
5185247c35 docs(config): 添加配置系统文档和分析器规则清单
- 创建游戏内容配置系统详细文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 添加配置系统的当前能力说明,包括运行时查询、生成器支持等功能特性
- 完善 Schema 示例和 YAML 示例,提供完整的配置定义和数据样例
- 整理推荐接入模板,包含目录结构、csproj 配置、启动帮助器等最佳实践
- 补充运行时读取模板、生成查询辅助、Architecture 接入等高级使用方式
- 添加运行时校验行为说明,涵盖跨表引用、格式验证、约束检查等内容
- 提供开发期热重载功能文档,说明自动刷新运行时表的工作机制
- 创建 VS Code 工具使用指南,介绍浏览、编辑、校验等开发辅助功能
- 生成分析器规则清单文件,记录所有配置相关的诊断规则和严重级别
2026-04-17 08:47:10 +08:00
GeWuYou
d0b4946bba test: 增强快照测试基础设施,添加安全验证和覆盖率改进
- 在 EnumExtensionsGeneratorSnapshotTests.cs 中补充 snapshotFileNameSelector 的 null 分支覆盖,新增默认快照文件名选择器用例及对应快照资产

- 强化 GeneratorSnapshotTest.cs 的快照路径校验,拒绝空白文件名、绝对路径和目录遍历攻击;将辅助器改为通过 Roslyn GeneratorDriver 读取真实生成结果并验证编译,消除仅依赖 TestState.GeneratedSources 导致的空跑风险

- 新增 GeneratorSnapshotTestSecurityTests.cs 安全回归测试,覆盖绝对路径拒绝和目录逃逸防护两个分支

- 将 Priority、Logger、ContextAware 三组生成器测试统一指向仓库内快照目录,并补齐缺失的快照资产以支持现在强制执行的生成验证
2026-04-17 07:40:36 +08:00
gewuyou
1d6ff223d5
Merge pull request #235 from GeWuYou/refactor/cqrs-and-config-system
refactor: 移除 Mediator 兼容性 API 并重组源生成器项目结构
2026-04-16 22:50:39 +08:00
GeWuYou
fe27dfe609 test(generator): 添加源代码生成器快照测试框架和枚举扩展生成器测试
- 实现 GeneratorSnapshotTest 类用于源代码生成器的快照测试功能
- 添加 EnumExtensionsGeneratorSnapshotTests 测试类验证各种枚举配置的输出
- 创建完整的快照测试基础设施支持生成器输出验证
- 配置测试项目依赖和快照文件管理规则
- 生成多个测试场景的快照文件验证枚举扩展生成功能
2026-04-16 22:34:09 +08:00
GeWuYou
8e38afc6c4 docs(generator): 更新配置生成器方法参数文档
- 添加 isDirectChildOfRoot 参数说明到 ParseProperty 方法
- 添加 isIndexedLookup 参数说明到 ParseArrayProperty 方法
2026-04-16 22:17:19 +08:00
GeWuYou
30e3ca05fd feat(enum): 添加枚举扩展方法生成器功能
- 实现 EnumExtensionsGenerator 自动生成枚举扩展方法
- 支持 GenerateIsMethods 和 GenerateIsInMethod 两种生成开关
- 添加完整的单元测试和快照验证机制
- 实现 IsIn 扩展方法支持多值匹配功能
- 支持带显式位标志值的枚举生成扩展方法
- 提供灵活的属性参数配置选项
2026-04-16 22:16:06 +08:00
GeWuYou
08b12ae852 test(EnumExtensions): 添加枚举扩展生成器快照测试
- 实现基本枚举的 IsMethods 快照测试
- 实现基本枚举的 IsInMethod 快照测试
- 实现带标志值枚举的快照测试
- 实现禁用 IsMethods 选项的快照测试
- 实现禁用 IsInMethod 选项的快照测试
- 创建统一的源代码构建方法用于测试场景
2026-04-16 21:49:59 +08:00
GeWuYou
534818f5f6 docs(source-generators): 添加源代码生成器文档和相关常量定义
- 新增完整的 GFramework.SourceGenerators 文档,涵盖所有核心特性
- 添加 Log 属性生成器、Config Schema 生成器等详细使用说明
- 添加 ContextAware、GenerateEnumExtensions 等属性生成器文档
- 添加 Godot 专用生成器如 GetNode、BindNodeSignal 等使用指南
- 添加 AutoRegisterModule、AutoUiPage、AutoScene 等自动化工具文档
- 添加诊断信息、性能优势、使用示例和最佳实践章节
- 新增 PathContests 常量类定义 GFramework 项目路径常量
- 添加 ContextRegistrationAnalyzerTests 测试类验证上下文注册分析器
2026-04-16 21:40:47 +08:00
GeWuYou
9f9a421b6c docs(source-generators): 添加源代码生成器文档和抽象包项目
- 新增完整的 GFramework.SourceGenerators 文档,涵盖所有生成器功能
- 添加 Log 属性生成器、ContextAware 属性生成器、Config Schema 生成器等详细说明
- 包含 Godot 专用生成器如 GetNode、BindNodeSignal、AutoUiPage 等使用指南
- 提供诊断信息、性能优势、使用示例和最佳实践章节
- 创建 Core.SourceGenerators.Abstractions 项目文件和配置
- 集成 Meziantou.Analyzer 和 Meziantou.Polyfill 包引用
- 配置项目构建属性和命名空间引入设置
2026-04-16 21:16:23 +08:00
GeWuYou
0cf4945e78 docs(config): 添加游戏内容配置系统文档
- 新增 CQRS 架构模式详细文档,包括命令查询职责分离核心概念
- 添加命令、查询、处理器、请求分发器等基本用法示例
- 包含高级用法如通知、管道行为、流式处理等完整功能介绍
- 提供最佳实践指南和常见问题解决方案
- 添加游戏内容配置系统文档,涵盖 YAML 配置源文件和 JSON Schema 结构描述
- 包含推荐目录结构、Schema 示例和 YAML 示例配置
- 提供完整的接入模板,包括 csproj 配置、启动帮助器和运行时读取模板
- 添加 Godot 文本配置桥接、热重载和 Architecture 接入等高级功能说明
2026-04-16 21:01:01 +08:00
GeWuYou
09f751a4f7 docs: 添加 CQRS 架构模式和游戏配置系统文档
- 新增 CQRS 核心概念、命令查询处理器实现指南
- 添加 CQRS 高级用法包括通知发布、管道行为和流式处理
- 提供 CQRS 最佳实践和常见问题解决方案
- 添加游戏配置系统完整接入模板和运行时读取示例
- 包含 YAML 配置文件和 JSON Schema 结构定义说明
- 提供 Godot 引擎配置桥接和热重载功能使用指南
- 添加架构模块集成和生成查询辅助功能文档
2026-04-16 20:36:15 +08:00
gewuyou
d8831733ff
Merge pull request #234 from GeWuYou/refactor/cqrs-architecture-decoupling
Refactor/cqrs architecture decoupling
2026-04-16 19:53:44 +08:00
gewuyou
52e40a185c
Merge pull request #233 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-11
feat(generator): 添加运行时发现处理器接口的日志名称记录功能
2026-04-16 19:47:27 +08:00
GeWuYou
823be21779 feat(generator): 添加运行时发现处理器接口的日志名称记录功能
- 在 HandlerCandidateAnalysis 结构中新增 RuntimeDiscoveredHandlerInterfaceLogNames 字段
- 为运行时发现的处理器接口创建日志名称收集器并存储显示名称
- 修改构造函数和属性以支持新的日志名称数组字段
- 更新相等性比较逻辑以包含运行时发现接口日志名称的比较
- 在生成的代码中添加注释显示剩余的运行时接口发现目标
- 更新单元测试验证生成的注释内容是否正确包含接口名称
2026-04-16 19:40:26 +08:00
gewuyou
e96623b7f5
Merge pull request #232 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-10
Refactor/cqrs architecture decoupling todo 10
2026-04-16 19:14:24 +08:00
gewuyou
82ae73424e
Merge pull request #231 from GeWuYou/feature/game-content-config-system
Feature/Implement dependentRequired schema validation across runtime and tooling
2026-04-16 19:11:30 +08:00
GeWuYou
163077589e refactor(tests): 调整全局引用顺序
- 将 Microsoft.CodeAnalysis.CSharp 引用添加到 GlobalUsings.cs
- 重新排列引用顺序以符合代码风格规范
2026-04-16 19:08:03 +08:00
GeWuYou
45bcffc6ee test(cqrs): 添加 CQRS 处理器注册生成器测试
- 创建 MetadataReferenceTestBuilder 工具类用于构建内存元数据引用
- 实现 CreateFromSource 方法将源码编译为内存程序集并返回元数据引用
- 添加 GetRuntimeMetadataReferences 方法获取当前运行时可信平台程序集引用
- 创建 CqrsHandlerRegistryGeneratorTests 测试类验证 CQRS 处理器注册生成器功能
- 添加多种测试用例验证不同场景下的处理器注册行为
- 包含嵌套处理器、隐藏实现、数组类型参数、泛型类型定义等边界情况测试
- 实现混合直接注册和精确重建注册的测试验证
- 添加对外部基类保护类型处理器的支持测试
- 验证生成器优先处理隐藏处理器而不输出遗留回退标记的功能
2026-04-16 19:06:34 +08:00
GeWuYou
31b6285bbd test(cqrs): 添加 CQRS 分发器缓存功能的单元测试
- 验证相同消息类型重复分发时不会重复扩张服务类型与调用委托缓存
- 验证 request 调用委托会按响应类型分别缓存避免不同响应类型共用 object 结果桥接
- 实现通过反射读取 dispatcher 静态缓存字典的测试辅助方法
- 添加清空 dispatcher 静态缓存的方法避免跨用例共享进程级状态
- 创建多个测试数据模型和处理器用于验证不同的缓存场景
- 实现异步流消费方法确保建流路径被真实执行
2026-04-16 19:06:20 +08:00
GeWuYou
73b63777ce feat(cqrs): 添加CQRS处理器注册器源代码生成器
- 实现CqrsHandlerRegistryGenerator源代码生成器
- 减少运行时程序集反射扫描开销
- 支持IRequestHandler、INotificationHandler和IStreamRequestHandler接口
- 生成静态注册代码替代运行时动态发现
- 提供精确的运行时类型引用描述功能
- 实现泛型类型和数组类型的反射处理
- 添加日志记录和错误处理机制
- 支持跨程序集类型引用和内部类型反射查找
- 生成符合IServiceCollection的服务注册代码
2026-04-16 19:06:11 +08:00
GeWuYou
9fadde0a44 test(config): 添加配置验证功能的全面单元测试
- 实现了对嵌套对象和对象数组元数据捕获的测试
- 添加了标量、对象、数组、整数和布尔类型常量元数据测试
- 验证了空字符串常量原始值和显示元数据的保留功能
- 测试了对象常量可比较键的构建逻辑
- 实现了嵌套映射和对象数组解析功能的测试
- 验证了复杂映射键的保留功能
- 添加了缺失和未知嵌套属性报告的测试
- 实现了对象数组项目问题检测功能的测试
- 验证了深层枚举不匹配的报告功能
- 测试了标量常量不匹配检测功能
- 实现了各种类型常量匹配验证的测试
- 验证了对象常量比较标准化但保持数组顺序的功能
- 添加了对象和数组常量不匹配检测的测试
- 实现了整数和布尔常量标量标准化及不匹配测试
- 验证了数字范围和字符串长度不匹配检测功能
- 测试了独占边界、模式和数组项目计数不匹配检测
- 实现了支持字符串格式验证的测试
- 验证了受支持字符串格式接受功能
- 添加了独占最大值和最大项目违规检测的测试
- 实现了对象属性计数不匹配报告功能的测试
- 验证了唯一对象属性计数约束功能
- 测试了倍数和唯一项目违规检测功能
- 实现了包含匹配计数违规报告的测试
- 验证了结构无效项目时跳过包含匹配计数功能
- 测试了仅值级违规时继续包含匹配计数功能
- 实现了最大包含违规检测的测试
- 验证了满足包含约束接受功能
- 测试了对象包含匹配允许额外声明字段功能
- 实现了大十进制倍数无浮点漂移接受的测试
- 验证了非实际倍数大数字拒绝功能
- 测试了科学记数法数字接受功能
- 实现了Unicode语义应用模式的测试
- 验证了无效数组项目跳过唯一项目检查功能
- 测试了一次通过报告每个唯一项目重复功能
- 实现了避免不同对象唯一项目可比较键冲突的测试
- 验证了标量范围和长度元数据捕获功能
- 测试了独占边界、模式和数组项目计数元数据捕获
- 实现了支持字符串格式元数据捕获的测试
2026-04-16 18:48:15 +08:00
GeWuYou
eca2d67529 feat(cqrs): 添加CQRS处理器注册器源代码生成器
- 实现了CqrsHandlerRegistryGenerator源代码生成器
- 为CQRS处理器减少运行时程序集反射扫描开销
- 支持IRequestHandler、INotificationHandler和IStreamRequestHandler接口
- 提供静态类型引用和运行时反射发现的混合注册策略
- 生成服务注册代码并添加调试日志记录功能
- 实现精确的运行时类型引用描述和泛型类型处理
2026-04-16 18:41:20 +08:00
GeWuYou
ed5d11576d docs(config): 添加配置系统文档和分析器规则定义
- 创建 AnalyzerReleases.Unshipped.md 定义41条新规则
- 添加游戏内容配置系统详细文档,涵盖YAML配置、JSON Schema结构、目录组织等
- 实现运行时只读查询功能,支持多种数据验证约束
- 集成Source Generator生成配置类型、表包装和访问辅助
- 提供VS Code插件支持配置浏览、编辑和校验功能
- 实现热重载机制支持开发期动态配置更新
- 添加Godot引擎文本配置桥接支持
- 提供Architecture架构接入模板和运行时读取接口
2026-04-16 18:25:48 +08:00
GeWuYou
594dffdd50 feat(config): 添加配置 schema 诊断和 VS Code 扩展工具
- 实现了配置 schema 代码生成相关的诊断功能
- 添加了 VS Code 扩展工具用于配置文件管理和验证
- 提供配置文件树视图和表单预览功能
- 实现配置文件的批量编辑功能
- 集成 schema 验证和错误提示机制
- 支持配置文件的引用导航和快速访问
- 添加多语言本地化支持
2026-04-16 17:34:24 +08:00
GeWuYou
1792fafc85 refactor(Cqrs): 重构CQRS处理器注册生成逻辑以支持混合注册类型
- 修改注册条件判断逻辑,支持多种注册类型的组合处理
- 新增有序注册实现方法,统一处理直接、反射和精确反射注册
- 添加注册类型枚举以区分不同的注册方式
- 实现混合注册场景下的稳定排序机制
- 更新反射注册逻辑以支持更复杂的类型解析
- 优化代码结构提升可读性和维护性
- 添加单元测试验证各种混合注册场景的正确性
2026-04-16 17:24:52 +08:00
GeWuYou
a8386c1759 feat(cqrs): 添加 CQRS 分发器实现及缓存测试
- 实现了 GFramework 自有 CQRS 运行时分发器,支持请求/通知/流式请求处理
- 添加了多层级缓存机制,包括服务类型缓存、调用委托缓存、按响应类型分层缓存
- 实现了上下文感知处理器的自动注入功能
- 集成了管道行为链处理机制,支持中间件模式的请求处理
- 添加了完整的缓存测试用例,验证各种消息类型的缓存命中与复用逻辑
- 优化了反射调用性能,避免热路径中的重复类型构造与装箱操作
2026-04-16 17:07:04 +08:00
gewuyou
692671a9ec
Merge pull request #230 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-9
Refactor/Decouple handler registry generator from interface discovery reflection
2026-04-16 16:12:59 +08:00
GeWuYou
082b2403c7 feat(cqrs): 添加 CQRS 处理器注册器源代码生成器
- 实现了 CqrsHandlerRegistryGenerator 源代码生成器
- 减少运行时程序集反射扫描成本,提升性能
- 支持 IRequestHandler、INotificationHandler 和 IStreamRequestHandler 接口
- 自动为 CQRS 处理器生成服务注册代码
- 提供精确的运行时类型引用和反射注册功能
- 包含直接引用、数组和泛型类型的支持
- 生成带有日志记录的处理器注册代码
2026-04-16 15:56:48 +08:00
gewuyou
1b3140a0dc
Merge pull request #229 from GeWuYou/feature/game-content-config-system
feat(config): 添加enum约束验证和相关测试
2026-04-16 15:24:53 +08:00
GeWuYou
33dd108697 feat(config): 添加配置验证工具功能
- 实现了JSON Schema解析和YAML验证功能
- 添加了对象和数组枚举值的比较验证逻辑
- 实现了配置文件的采样生成功能
- 添加了批量编辑器的数值更新功能
- 实现了配置路径和注释提取功能
- 添加了多种数据格式验证支持包括日期、邮箱、UUID等
- 实现了常量和枚举值的元数据处理功能
- 添加了配置验证诊断信息生成功能
- 实现了表单更新应用到YAML的功能
- 添加了字符串排序比较算法确保工具一致性
2026-04-16 15:12:02 +08:00
GeWuYou
a8cb82e2f1 feat(config): 添加配置验证功能支持枚举对象和数组
- 实现 parseSchemaContent 函数解析对象和数组枚举元数据
- 添加 validateParsedConfig 验证对象值是否在枚举声明范围内
- 支持数组枚举候选项的顺序敏感比较
- 优化诊断信息避免父对象枚举不匹配的重复报告
- 添加测试用例验证枚举对象和数组的解析与验证功能
- 实现可编辑字段收集功能支持批量编辑器更新
- 添加 YAML 解析和注释提取功能用于表单预览
- 实现配置验证诊断生成功能支持本地化消息
- 添加格式化和规范化函数支持不同数据类型的处理
2026-04-16 14:50:46 +08:00
gewuyou
f25353db8c feat(cqrs-generator): 支持泛型与数组类型重建并优化隐藏处理器绑定 2026-04-16 14:24:00 +08:00
GeWuYou
809e1f5ded docs(config): 添加游戏内容配置系统完整文档
- 新增 YAML 配置与 JSON Schema 结构描述支持
- 添加一对象一文件的目录组织方式说明
- 实现运行时只读查询功能详细文档
- 添加 Source Generator 生成配置类型的完整指南
- 集成 VS Code 插件提供配置浏览和校验功能
- 添加 Godot 文本配置桥接的使用说明
- 实现热重载模板和 Architecture 接入示例
- 添加运行时校验行为和错误处理机制
- 提供开发期热重载功能的详细配置方法
- 添加生成器接入约定和工具使用说明
2026-04-16 14:18:25 +08:00
GeWuYou
76bb9671d5 feat(cqrs): 添加 CQRS 处理器注册生成器
- 实现 CqrsHandlerRegistryGenerator 源代码生成器
- 为 CQRS 请求处理器、通知处理器和流请求处理器生成注册代码
- 减少运行时程序集反射扫描开销
- 支持直接类型引用和反射加载两种注册方式
- 提供完整的单元测试验证生成器功能
- 实现对私有嵌套类型的反射注册支持
2026-04-16 12:50:02 +08:00
gewuyou
ba6a358df1
Merge pull request #228 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-8
Refactor/Add CQRS dispatcher caching and refactor handler registration
2026-04-16 12:30:14 +08:00
GeWuYou
4951fb0254 feat(cqrs): 添加 CQRS 分发器和服务注册生成器
- 实现 CqrsDispatcher 类,支持请求/通知/流式请求的分发处理
- 添加进程级缓存机制,优化热路径中的反射和类型构造性能
- 实现上下文感知处理器的 CQRS 分发上下文注入功能
- 开发 CqrsHandlerRegistryGenerator 源代码生成器,减少运行时反射扫描
- 添加完整的单元测试验证缓存机制和服务类型注册功能
- 支持管道行为链处理和异步流式请求响应模式
2026-04-16 12:19:44 +08:00
GeWuYou
b07da252c4 refactor(cqrs): 优化并发处理能力
- 在 CqrsDispatcher 中添加 Concurrent 包引用以支持线程安全操作
- 在全局引用文件中增加 Concurrent 包引用,统一并发编程支持
- 为后续的并发处理逻辑改进奠定基础架构支持
2026-04-16 11:53:07 +08:00
GeWuYou
06f95db593 feat(cqrs): 添加CQRS调度器实现和改进处理器注册机制
- 实现GFramework自有CQRS运行时分发器,支持请求/通知/流式请求处理
- 添加进程级缓存机制优化反射调用性能,包括请求、通知、流水线调用委托缓存
- 重构CqrsHandlerRegistrar使用ReflectionFallbackMetadata替代字符串类型名
- 引入CqrsReflectionFallbackAttribute支持运行时补充反射扫描的处理器类型
- 添加完整的CQRS处理器注册单元测试,验证有序执行和容错行为
- 修复MicrosoftDiContainer中异常消息的格式化空白问题
- 实现上下文感知处理器的CQRS分发上下文注入功能
2026-04-16 11:36:31 +08:00
gewuyou
a3f5010247
Merge pull request #227 from GeWuYou/feature/game-content-config-system
Feature/game content config system
2026-04-16 11:19:02 +08:00
GeWuYou
a14e736fb9 test(config): 添加YAML配置加载器的not约束运行时行为验证测试
- 实现标量值命中not子schema时的异常抛出验证
- 验证值未命中not子schema时的正常加载行为
- 测试对象完整命中禁用schema时的约束失败触发
- 验证对象仅命中not schema属性子集时的正确处理
- 添加not声明为非对象值时的解析阶段拒绝验证
- 创建临时目录隔离测试环境避免用例间污染
- 实现配置文件和schema文件的动态创建功能
- 提供标量和对象两种not约束场景的测试加载器
2026-04-16 11:11:52 +08:00
GeWuYou
391e3e9813 feat(cqrs): 添加CQRS处理器自动注册功能
- 实现CqrsHandlerRegistrar类,支持扫描并注册CQRS请求/通知/流式处理器
- 添加源码生成注册器优先策略,减少冷启动时的反射开销
- 实现运行时反射扫描回退机制,确保处理器注册的完整性
- 添加CqrsReflectionFallbackAttribute特性,标记需要运行时补充扫描的程序集
- 创建完整的单元测试套件,验证处理器注册顺序与容错行为
- 实现CqrsHandlerRegistryGenerator源码生成器,自动生成处理器注册代码
- 添加详细的日志记录与诊断功能,便于调试注册过程
- 实现类型安全的处理器映射验证与重复注册检测机制
2026-04-16 11:11:29 +08:00
GeWuYou
ebc53510ab test(config): 添加配置验证功能的全面单元测试
- 实现了对嵌套对象和数组元数据解析的测试
- 添加了常量值比较和对象排序一致性的验证测试
- 创建了对YAML解析器嵌套映射和复杂键名的支持测试
- 开发了针对缺失和未知属性的验证诊断测试
- 实现了对象数组项目验证和深度枚举匹配测试
- 添加了标量、对象、数组、整数和布尔型常量验证测试
- 创建了数字范围和字符串长度限制验证测试
- 实现了独占边界、模式匹配和数组项目计数验证
- 添加了支持的字符串格式验证(日期、时间、邮箱等)
- 创建了多重约束和唯一性检查验证测试
- 实现了包含匹配计数约束验证测试
- 添加了科学记数法和大数精度处理验证测试
- 创建了Unicode模式匹配和唯一项重复检测测试
2026-04-16 10:51:30 +08:00
GeWuYou
0f5b3a98bf docs(config): 添加游戏内容配置系统完整文档
- 新增 YAML 配置源文件支持说明
- 添加 JSON Schema 结构描述功能介绍
- 实现一对象一文件的目录组织方式
- 提供运行时只读查询机制说明
- 添加 Source Generator 类型生成功能文档
- 集成 VS Code 插件配置浏览功能说明
- 添加跨表引用和校验行为详细说明
- 提供热重载开发期工具使用指南
- 完善 Godot 引擎文本配置桥接文档
- 补充 Architecture 模块接入模板说明
2026-04-16 09:59:43 +08:00
gewuyou
21627c0381
Merge pull request #226 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-7
Refactor/cqrs architecture decoupling todo 7
2026-04-16 09:57:50 +08:00
GeWuYou
ba15d9d0f6 docs(config): 添加游戏内容配置系统完整文档
- 新增游戏内容配置系统详细介绍文档
- 包含 YAML 配置源文件和 JSON Schema 结构描述说明
- 提供推荐目录结构和 Schema 示例配置
- 添加官方启动帮助器 GameConfigBootstrap 使用指南
- 包含 Godot 文本配置桥接和运行时读取模板
- 提供 Architecture 推荐接入模板和热重载配置说明
- 添加运行时校验行为和开发期热重载功能说明
- 包含生成器接入约定和 VS Code 工具使用指南
- 新增 JavaScript 配置验证实现和格式校验模式
- 添加字符串格式校验包括 date、email、uuid 等类型
- 实现配置字段可编辑性检测和批量编辑功能支持
2026-04-16 09:26:56 +08:00
GeWuYou
a4dfc78201 feat(ioc): 添加Microsoft DI容器适配器及测试
- 实现MicrosoftDiContainer类,包装IServiceProvider为IIocContainer接口
- 提供线程安全的依赖注入容器功能,支持单例、瞬态、作用域服务注册
- 添加RegisterSingleton、RegisterTransient、RegisterScoped等多种注册方法
- 实现RegisterPlurality方法支持一个实例注册到多个接口类型
- 添加CQRS相关注册功能,包括管道行为和处理器自动注册
- 实现Get、GetAll、GetRequired等服务解析方法
- 添加容器冻结机制,冻结后构建ServiceProvider提供服务解析
- 实现CreateScope方法支持服务作用域创建
- 添加完整的单元测试覆盖各种注册和解析场景
- 实现服务按优先级排序功能支持系统调度需求
2026-04-16 09:26:05 +08:00
GeWuYou
6d5d9e2240 docs(config): 添加游戏内容配置系统完整文档
- 新增游戏内容配置系统详细介绍文档
- 包含 YAML 配置源文件支持说明
- 提供 JSON Schema 结构描述功能说明
- 说明一对象一文件的目录组织方式
- 介绍运行时只读查询功能特性
- 详细说明 Runtime / Generator / Tooling 共享支持的约束类型
- 提供 Source Generator 生成配置类型的完整说明
- 包含 VS Code 插件功能详细介绍
- 提供推荐目录结构和 Schema 示例
- 说明 YAML 示例格式和接入模板
- 详细说明 Godot 文本配置桥接功能
- 提供运行时读取模板和生成查询辅助说明
- 包含 Architecture 接入模板和热重载配置说明
- 详细说明运行时校验行为和跨表引用机制
- 提供开发期热重载功能完整配置指南
- 说明生成器接入约定和 VS Code 工具功能
- 包含当前限制和独立 Config Studio 评估说明
- 新增配置验证 JavaScript 工具实现
2026-04-16 09:16:50 +08:00
GeWuYou
0d9d09bc4a feat(ioc): 添加Microsoft DI容器适配器及测试
- 实现MicrosoftDiContainer类作为IIocContainer接口的适配器
- 提供线程安全的依赖注入容器功能
- 支持单例、瞬态、作用域服务注册
- 实现CQRS处理器注册功能
- 添加服务工厂方法注册支持
- 实现按优先级排序的服务获取功能
- 添加完整的单元测试覆盖基本功能和边界情况
- 支持容器冻结和作用域创建功能
- 实现多样性实例注册到多个接口的功能
2026-04-16 09:14:27 +08:00
GeWuYou
00a1038d0a refactor(GFramework.Cqrs): 添加全局using引用System.Reflection
- 在GlobalUsings.cs文件中新增System.Reflection的全局引用
- 便于后续代码中直接使用Reflection相关功能
- 减少重复的using声明语句
2026-04-16 08:52:39 +08:00
GeWuYou
bc9336428e feat(cqrs): 添加 CQRS 处理器注册器和源码生成器
- 实现 CqrsHandlerRegistrar 类用于扫描并注册 CQRS 处理器
- 添加源码生成器自动生成 CQRS 处理器注册器减少反射开销
- 实现运行时回退机制在生成注册器不可用时使用反射扫描
- 添加完整的单元测试验证处理器注册顺序和容错行为
- 支持请求、通知和流式处理器的自动注册功能
- 实现稳定的处理器注册顺序保证跨环境一致性
- 添加详细的诊断日志记录注册过程和异常情况
2026-04-16 08:49:13 +08:00
GeWuYou
a7604de804 feat(ioc): 添加 Microsoft DI 容器适配器和 CQRS 运行时模块
- 实现 MicrosoftDiContainer 类,提供对 Microsoft.Extensions.DependencyInjection 的适配
- 添加线程安全的依赖注入容器功能,支持单例、瞬态和作用域服务注册
- 实现 CqrsRuntimeModule 模块,用于注册 CQRS 运行时组件
- 添加 CqrsRuntimeFactory 工厂类,提供 CQRS 运行时实现的创建入口
- 实现 DefaultCqrsRegistrationService,处理 CQRS 处理器的程序集注册
- 添加 CqrsTestRuntime 测试工具类,为测试环境提供 CQRS 运行时访问
- 支持多种注册方式包括实例注册、类型映射和工厂方法
- 实现服务获取、查询和生命周期管理功能
- 添加容器冻结机制以构建服务提供者
- 支持 CQRS 管道行为和处理器的批量注册功能
2026-04-16 08:37:40 +08:00
GeWuYou
1973fb2a60 feat(ioc): 添加Microsoft DI容器适配器和CQRS运行时模块
- 移除过时的Cqrs抽象引用
- 添加MicrosoftDiContainer实现IIocContainer接口
- 提供线程安全的依赖注入容器功能
- 支持单例、瞬态、作用域生命周期管理
- 实现CQRS请求管道行为注册功能
- 添加CqrsRuntimeModule服务模块
- 提供CQRS运行时实现和处理器注册器
- 扩展IArchitectureContext接口支持CQRS契约
2026-04-16 07:32:17 +08:00
gewuyou
385893c791
Merge pull request #225 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-6
feat(cqrs): 添加CQRS运行时模块和兼容性扩展
2026-04-15 23:02:54 +08:00
GeWuYou
922ad43b5e fix(cqrs): 修复CQRS命名空间兼容性测试中的类型解析问题
- 更新注释以更准确描述基础消息类型的命名空间暴露方式
- 将Type.GetType的throwOnError参数从true改为false以避免异常抛出
- 调整测试逻辑以更好地处理类型解析场景
2026-04-15 22:59:46 +08:00
GeWuYou
7b63a65f51 refactor(tests): 重构CQRS类型转发测试以使用新命名空间
- 更新测试方法名称从 GFramework_Core_Assembly_Should_Forward_Legacy_Base_Types_To_Runtime_Assembly
  为 Type_Forwarding_Should_Resolve_Cqrs_Types_From_Core_Assembly
- 将断言中的程序集限定名从 GFramework.Core.Cqrs.* 更新为 GFramework.Cqrs.*
- 保持对命令、查询、请求和通知基类型的验证逻辑不变
2026-04-15 22:52:26 +08:00
GeWuYou
ff9b010639 refactor(cqrs): 调整基础消息类型的命名空间和程序集布局
- 将基础消息类型从遗留的Core.Cqrs命名空间迁移到新的Cqrs命名空间
- 保持运行时程序集承载实现的架构设计
- 更新测试方法名称以反映新的命名空间结构
- 确保公共API兼容性的同时优化组件组织结构
2026-04-15 22:51:31 +08:00
GeWuYou
7a2127b50e refactor(cqrs): 更新Cqrs命名空间路径
- 将GFramework.Core.Cqrs.Command更改为GFramework.Cqrs.Command
- 将GFramework.Core.Cqrs.Query更改为GFramework.Cqrs.Query
- 将GFramework.Core.Cqrs.Request更改为GFramework.Cqrs.Request
- 将GFramework.Core.Cqrs.Notification更改为GFramework.Cqrs.Notification
2026-04-15 22:51:10 +08:00
GeWuYou
7e402d91d3 docs(cqrs): 修正泛型类型参数的XML文档注释
- 修正NotificationBase中TInput类型的XML文档注释,将input更正为INotificationInput
- 修正QueryBase中TInput类型的XML文档注释,将TResponse更正为IQueryInput
- 修正RequestBase中TInput类型的XML文档注释,将TResponse更正为IRequestInput
2026-04-15 22:50:21 +08:00
GeWuYou
b747787b87 refactor(core): 更新类型转发器和测试文件的命名空间引用
- 在 TypeForwarders.cs 中添加 Cqrs 相关命名空间引用
- 在 CqrsPublicNamespaceCompatibilityTests.cs 中同步更新命名空间导入
- 在 CqrsTestRuntime.cs 中补充 Command 命名空间引用
- 确保所有测试运行时环境的命名空间一致性
2026-04-15 22:36:55 +08:00
GeWuYou
12c9c8a9ec refactor(cqrs): 迁移CQRS基础类型实现并维护程序集兼容性
- 将CommandBase、QueryBase、RequestBase、NotificationBase类型从Core模块迁移到独立Cqrs模块
- 在GFramework.Core中添加TypeForwarder维持向后兼容性
- 创建CqrsPublicNamespaceCompatibilityTests验证运行时程序集转发功能
- 更新CqrsTestRuntime移除对已迁移类型的直接引用
- 为所有基础类型添加统一输入模型支持和命名空间兼容性注释
- 实现完整的CQRS抽象基类重构以支持模块化架构
2026-04-15 22:27:55 +08:00
GeWuYou
005c32d84f feat(cqrs): 添加CQRS扩展方法兼容层和日志工厂解析器
- 新增ContextAwareMediatorCommandExtensions提供命令扩展方法兼容性支持
- 新增ContextAwareMediatorQueryExtensions提供查询扩展方法兼容性支持
- 添加LoggerFactoryResolver实现全局日志工厂访问入口
- 实现TypeForwarders将核心类型转发到正确程序集
- 添加MediatorCompatibilityDeprecationTests验证弃用策略
- 扩展LoggerFactoryTests覆盖并发初始化和回退逻辑
- 迁移CommandBase到Core.Cqrs.Command命名空间
- 移动LoggingBehavior到GFramework.Cqrs.Cqrs.Behaviors
- 添加AbstractStreamQueryHandler支持流式查询处理
- 创建NotificationBase提供通知基类实现
2026-04-15 22:27:09 +08:00
GeWuYou
18337c5995 refactor(tests): 移除未使用的 System.Diagnostics 引用
- 从 GlobalUsings.cs 中删除未使用的 System.Diagnostics 全局引用
- 保持测试项目的全局引用列表整洁
- 减少不必要的命名空间导入
2026-04-15 21:54:29 +08:00
GeWuYou
1c7558aeb8 refactor(cqrs): 移除旧日志行为并添加CQRS运行时模块
- 删除 LoggingBehavior 类及其相关实现
- 新增 CqrsRuntimeModule 用于注册CQRS运行时组件
- 添加 ArchitectureComponentRegistryBehaviorTests 测试组件注册行为
- 添加 ArchitectureContextTests 测试架构上下文功能
- 完善CQRS运行时的并发安全性和生命周期管理
2026-04-15 21:41:59 +08:00
GeWuYou
e36c80229a feat(cqrs): 添加CQRS处理器基类和测试运行时支持
- 引入AbstractCommandHandler、AbstractQueryHandler等各类处理器基类
- 实现CqrsContextAwareHandlerBase提供上下文感知功能
- 添加CqrsTestRuntime为测试项目提供CQRS运行时访问入口
- 创建AbstractCqrsHandlerContextTests验证上下文注入行为
- 支持命令、查询、通知及流式处理的各种抽象基类实现
2026-04-15 20:34:08 +08:00
GeWuYou
a80ff59631 feat(cqrs): 添加CQRS运行时模块和兼容性扩展
- 新增ContextAwareMediatorCommandExtensions提供命令扩展方法的兼容性别名
- 新增ContextAwareMediatorExtensions提供CQRS统一接口扩展方法的兼容性别名
- 新增ContextAwareMediatorQueryExtensions提供查询扩展方法的兼容性别名
- 添加CqrsRuntimeModule用于注册CQRS运行时和处理器注册器到依赖注入容器
- 更新IArchitectureContext接口添加新版CQRS请求、命令、查询和通知的统一入口
- 添加架构上下文的CQRS处理器注册相关单元测试
- 配置项目文件以支持多目标框架和包引用管理
2026-04-15 19:42:08 +08:00
gewuyou
f7b4ae9995
Merge pull request #224 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-5
Refactor/cqrs architecture decoupling todo 5
2026-04-15 19:18:13 +08:00
GeWuYou
d881bd5ad1 refactor(cqrs): 简化接口定义并分离流式命令和查询接口
- 移除 ICommand<TResponse> 和 ICommand 的空实现体
- 移除 IQuery<TResponse> 和 IStreamQuery<TResponse> 的空实现体
- 移除 INotification、IRequest<TResponse>、IStreamRequest<TResponse> 的空实现体
- 将 IStreamCommand<TResponse> 分离到独立文件中
- 将 IStreamQuery<TResponse> 分离到独立文件中
- 保持所有接口的核心功能不变,仅简化语法结构
2026-04-15 19:02:53 +08:00
GeWuYou
fe73d13991 chore(tests): 添加Cqrs抽象依赖到架构测试
- 在ArchitectureContextTests中添加GFramework.Cqrs.Abstractions.Cqrs命名空间引用
2026-04-15 18:55:41 +08:00
GeWuYou
a068a5e707 test(arch): 优化架构上下文并发测试的超时配置
- 将工作线程数量从16调整为8
- 添加工作线程启动超时设置为5秒
- 添加首次解析超时设置为5秒
- 使用可配置超时替代硬编码的1秒等待时间
- 提高测试稳定性和可读性
2026-04-15 18:52:53 +08:00
GeWuYou
2425d28097 refactor(tests): 更新测试文件以支持Cqrs功能
- 在ArchitectureContextTests.cs中添加GFramework.Cqrs.Abstractions.Cqrs命名空间引用
- 在MicrosoftDiContainerTests.cs中添加GFramework.Cqrs.Abstractions.Cqrs命名空间引用
- 为测试文件提供必要的Cqrs相关依赖注入支持
2026-04-15 17:49:52 +08:00
GeWuYou
82e6332a9b test(core): 添加架构上下文和依赖注入容器的单元测试
- 实现 ArchitectureContext 类的全面单元测试,覆盖构造函数、查询命令事件发送等功能
- 添加 MicrosoftDiContainer 依赖注入容器的完整测试,包括注册、获取、冻结等操作
- 创建 CqrsTestRuntime 测试基础设施,提供对 CQRS 处理器注册的受控访问
- 测试并发场景下的线程安全性,验证多线程环境下容器操作的正确性
- 实现优先级排序功能测试,确保服务按优先级正确排序和注册
- 添加各种边界条件测试,包括空参数异常处理和重复注册异常检测
2026-04-15 17:47:54 +08:00
GeWuYou
81897ce2ac docs(source-generators): 添加源码生成器文档
- 新增 AutoRegisterExportedCollections 生成器文档
- 新增 AutoScene 生成器文档
- 新增 AutoUiPage 生成器文档
- 新增完整的源码生成器索引文档
- 详细介绍各生成器的使用方法和参数说明
- 提供生成代码示例和诊断信息说明
- 包含性能优势和使用示例章节
2026-04-15 17:00:49 +08:00
GeWuYou
f9cc1237a3 chore(project): 初始化项目结构和测试配置
- 创建 GFramework.Core.Tests 和 GFramework.Cqrs.Tests 测试项目
- 配置测试项目的全局 using 语句和依赖引用
- 添加主项目 GFramework 的元包配置文件
- 生成解决方案文件并配置所有项目引用关系
- 设置多目标框架支持 net8.0、net9.0 和 net10.0
- 配置包发布设置和仓库信息
2026-04-15 16:22:09 +08:00
GeWuYou
e2001766cb feat(arch): 添加架构上下文实现及完整测试
- 实现 ArchitectureContext 类,提供对系统、模型、工具等组件的访问
- 集成 CQRS runtime,支持命令、查询、事件的执行管理
- 添加服务缓存机制,优化容器解析性能
- 实现并发安全的 CQRS runtime 懒加载
- 提供同步和异步的请求处理方法
- 支持优先级排序的服务实例获取
- 添加完整的单元测试覆盖构造函数、查询、命令、事件等功能
- 配置测试项目依赖和全局引用
- 实现共享的 CQRS 测试运行时支持
2026-04-15 15:57:08 +08:00
GeWuYou
932235e8cc refactor(tests): 更新CqrsCoroutineExtensionsTests中的命名空间引用
- 添加GFramework.Core.Coroutine.Extensions命名空间引用
- 保持现有测试功能完整性
- 优化代码结构以匹配最新框架变更
2026-04-15 15:36:08 +08:00
GeWuYou
ede8a8faa4 fix(namespace): 修正命名空间
- 修正Core模块命名空间
- 修正Godot模块命名空间
2026-04-15 15:34:14 +08:00
GeWuYou
aba304f667 test(cqrs): 添加CQRS处理器注册器单元测试
- 验证通知处理器按稳定名称顺序执行而非依赖反射枚举顺序
- 测试部分类型加载失败时保留可加载类型并记录诊断日志
- 验证源码生成注册器优先级高于反射扫描机制
- 测试生成注册器元数据损坏时回退到反射扫描路径
- 实现确定性通知处理器执行顺序验证功能
- 添加捕获型日志工厂提供程序用于测试断言
- 修正命名空间从Core.Tests.Logging到Cqrs.Tests.Logging
2026-04-15 15:28:51 +08:00
GeWuYou
28cdf791df refactor(tests): 移除项目警告级别配置
- 移除了 GFramework.Cqrs.Tests 项目的 WarningLevel 配置
- 使测试项目遵循默认警告级别设置
2026-04-15 15:27:14 +08:00
GeWuYou
1c5c5c812a chore(deps): 更新 Meziantou.Analyzer 和 Meziantou.Polyfill 依赖包版本
- 将 Meziantou.Analyzer 从 2.0.264 版本升级到 3.0.46 版本
- 将 Meziantou.Polyfill 从 1.0.71 版本升级到 1.0.109 版本
2026-04-15 15:26:38 +08:00
GeWuYou
49ed5d0d06 refactor(tests): 添加CQRS抽象层依赖项
- 在ContainerRegistrationFixtures.cs中添加GFramework.Core.Abstractions.Cqrs命名空间引用
- 在MicrosoftDiContainerTests.cs中添加GFramework.Core.Abstractions.Cqrs命名空间引用
- 统一测试文件中的依赖注入配置
- 确保CQRS相关接口的正确引用路径
2026-04-15 15:22:00 +08:00
GeWuYou
34e140e919 feat(ioc): 添加 Microsoft DI 容器适配器和 CI/CD 工作流
- 实现 MicrosoftDiContainer 类,提供 Microsoft.Extensions.DependencyInjection 的适配器
- 添加 DefaultCqrsHandlerRegistrar 默认 CQRS 处理器注册器实现
- 配置 GitHub Actions CI/CD 工作流,包含代码质量检查和构建测试任务
- 设置 .NET 8/9/10 多版本支持和缓存策略
- 添加单元测试覆盖 IoC 容器的各项功能,包括注册、解析和生命周期管理
- 实现线程安全的读写锁机制保护容器操作
- 支持 CQRS 处理器和管道行为的注册管理
2026-04-15 15:13:43 +08:00
GeWuYou
048f96c6cd feat(core): 添加架构上下文和CQRS运行时实现
- 实现ArchitectureContext提供系统、模型、工具等组件访问管理
- 添加CqrsDispatcher作为GFramework自有CQRS运行时分发器
- 集成Microsoft.Extensions.DependencyInjection作为IoC容器适配器
- 实现完整的命令、查询、事件处理机制
- 支持上下文感知处理器注入架构上下文
- 提供管道行为链处理机制
- 实现流式请求处理功能
- 添加服务实例缓存和优先级排序支持
2026-04-15 14:41:53 +08:00
gewuyou
3dbe1053fb
Merge pull request #223 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-4
feat(core): 扩展 CQRS 处理器注册 API 并完善文档
2026-04-15 13:21:31 +08:00
GeWuYou
a01ec8d29c fix(ci): 修复PR扫描的基线和头版本配置
- 将基础提交哈希从 github.event.before 更新为 github.event.pull_request.base.sha
- 将当前提交哈希从 github.sha 更新为 github.event.pull_request.head.sha
- 确保PR工作流正确比较基线和目标分支的差异
2026-04-15 13:20:31 +08:00
coderabbitai[bot]
2329cba3a6
fix: apply CodeRabbit auto-fixes
Fixed 1 file(s) based on 1 unresolved review comment.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-15 05:07:59 +00:00
GeWuYou
49df81e46f refactor(tests): 重构 CQRS 处理程序测试架构
- 移除自定义测试架构类,改用现有的 SyncTestArchitecture
- 将 RegisterCqrsHandlersFromAssembly 测试方法中的架构创建逻辑提取为统一方法
- 更新重复程序集注册去重测试,验证不同 Assembly 实例但相同程序集键的情况
- 简化测试架构初始化逻辑,使用 AddPostRegistrationHook 替代自定义配置
- 调整注释文档以反映新的测试架构创建方式
- 移除 GitHub 工作流中对 main 分支的限制条件
2026-04-15 12:59:12 +08:00
GeWuYou
340b6cae90 chore(ci): 更新GitHub Actions工作流配置
- 移除push触发器,仅保留pull request触发CI构建测试
- 添加CodeQL静态代码分析工作流,支持安全漏洞检测
- 配置每日凌晨2点定时执行CodeQL分析
- 设置.NET 8.0.x运行时环境支持
- 启用C#语言自动构建模式进行代码扫描
2026-04-15 12:51:59 +08:00
GeWuYou
0cd1e9e83a feat(ci): 添加CI/CD工作流和CQRS命令接口
- 配置CI构建和测试工作流,支持多.NET版本和并发测试
- 添加CodeQL静态代码分析工作流
- 实现自动版本递增和标签创建工作流
- 定义CQRS命令接口规范,包括响应式和流式命令
- 为架构测试添加空值参数异常文档注释
2026-04-15 12:47:22 +08:00
GeWuYou
27266d037d feat(arch): 添加架构基础类和依赖注入容器实现
- 创建 Architecture 基类提供系统、模型、工具等组件的注册与管理功能
- 实现架构生命周期管理、初始化流程控制和阶段转换功能
- 添加 ArchitectureModules 模块管理器负责 CQRS 行为注册和模块安装
- 实现 MicrosoftDiContainer 依赖注入容器适配器
- 支持单例、瞬态、作用域服务注册和工厂方法注册
- 添加 CQRS 请求管道行为和处理器注册功能
- 实现线程安全的读写锁保护容器操作
- 提供服务获取、排序和优先级管理功能
2026-04-15 12:38:45 +08:00
GeWuYou
4db7923512 docs(core): 添加 CQRS 架构模式详细文档
- 完整介绍 CQRS 核心概念包括命令、查询、处理器和分发器
- 提供命令和查询的定义与实现示例代码
- 详细介绍处理器编写方法和注册流程
- 说明管道行为(Behaviors)的使用方式
- 展示通知(Notification)和流式处理功能
- 提供最佳实践和常见问题解决方案
- 包含完整的 API 参考和用法示例
2026-04-15 11:44:44 +08:00
gewuyou
f59e8f7a1f
Merge pull request #222 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-3
Refactor/Deprecate Mediator alias and introduce source-generated CQRS handler registry
2026-04-15 11:20:19 +08:00
GeWuYou
7a6f966601 feat(cqrs): 添加 CQRS 处理器注册生成器
- 实现 CqrsHandlerRegistryGenerator 源代码生成器
- 支持 IRequestHandler、INotificationHandler 和 IStreamRequestHandler 接口的处理器注册
- 生成程序集级别的 CQRS 处理器注册器以减少运行时反射开销
- 添加对请求、通知和流处理器的稳定顺序注册支持
- 实现对私有嵌套处理器的检测和回退机制
- 提供字符串字面量转义功能以避免生成代码中的语法错误
- 添加完整的单元测试验证生成器的功能和边界条件
2026-04-15 11:12:36 +08:00
GeWuYou
fd64423741 docs(core): 添加 CQRS 架构模式完整文档
- 新增 CQRS 核心概念介绍,包括命令、查询、处理器和分发器
- 添加基本用法示例,展示命令和查询的定义与发送流程
- 实现高级功能文档,涵盖请求、通知、管道行为和流式处理
- 提供最佳实践指南,明确命令查询分离和验证行为使用方式
- 增加常见问题解答,解释 Command/Query 区别和错误处理方案
- 新增 CQRS 处理器自动注册实现,支持源码生成和反射扫描
- 添加单元测试验证处理器注册顺序和容错行为
- 更新项目 AI 代理说明文档,完善模块依赖关系图
2026-04-15 10:21:20 +08:00
GeWuYou
295496e90f docs(core): 添加 CQRS 文档并实现架构模块管理
- 添加完整的 CQRS 中文文档,涵盖命令、查询、处理器、管道行为等核心概念
- 实现 ArchitectureModules 类用于管理架构模块安装和 CQRS 行为注册
- 重构 Architecture 类为协调器模式,委托给专门的管理器组件
- 添加 RegisterCqrsPipelineBehavior 方法替代旧的 RegisterMediatorBehavior
- 标记旧的扩展方法为 Obsolete 并提供新的兼容性别名
- 实现模块化架构组件注册和生命周期管理功能
2026-04-15 09:49:26 +08:00
gewuyou
779c521a20
Merge pull request #221 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-2
Replace Mediator pattern with CQRS pipeline behavior registration
2026-04-15 09:12:46 +08:00
GeWuYou
c0e2e9a640 docs(coroutine): 更新CqrsCoroutineExtensions文档
- 添加了TaskCanceledException异常说明文档
- 详细描述了命令调度取消时的异常情况
- 补充了底层命令调度相关的异常处理说明
2026-04-15 09:05:22 +08:00
GeWuYou
4c0a99d24c fix(coroutine): 优化协程扩展中的异常处理机制
- 添加 TaskCanceledException 映射以统一取消状态处理
- 保留原始异常调用栈以避免调试时丢失异常来源
- 优先解包业务异常以避免直接暴露 AggregateException
- 使用 ExceptionDispatchInfo.Capture 确保异常栈信息完整
2026-04-15 08:25:52 +08:00
GeWuYou
96ffd49b31 fix(coroutine): 更新CQRS协程扩展的异常处理文档
- 将TaskCanceledException更改为Exception以反映实际抛出的异常类型
- 更新异常描述以准确说明在未提供onError时的行为
- 修正文档以反映底层原始异常的传递机制
2026-04-15 08:24:48 +08:00
GeWuYou
5a2981a557 feat(cqrs): 添加 CQRS 命令协程扩展功能
- 实现 CqrsCoroutineExtensions 扩展类,提供协程方式发送 CQRS 命令的功能
- 添加 SendCommandCoroutine 方法支持命令异步执行与异常处理
- 实现取消操作的特殊处理逻辑,区分取消、失败和成功状态
- 添加 ContextAwareCqrsCommandExtensions 扩展类,提供同步和异步命令发送方法
- 增加对 TaskCanceledException 的专门处理机制
- 完善相关单元测试,验证取消操作的异常处理行为
2026-04-15 08:18:27 +08:00
GeWuYou
088f02d586 docs(core): 添加 CQRS 文档并完善相关扩展方法
- 新增 CQRS 核心概念、命令查询处理器使用指南
- 添加管道行为、流式处理和最佳实践说明
- 实现 CQRS 协程扩展方法支持异步命令执行
- 添加 ContextAware 接口的 CQRS 命令查询扩展
- 集成 Microsoft DI 容器依赖注入支持
- 补充架构模块行为测试验证功能完整性
- 扩展 GameContext 测试用例提高代码覆盖率
2026-04-15 07:34:01 +08:00
GeWuYou
115fe65e88 docs(core): 添加 CQRS 和核心框架文档
- 新增 CQRS 模块详细文档,介绍命令查询职责分离模式
- 添加核心框架架构概述和五层架构设计说明
- 补充快速开始指南和最佳实践建议
- 完善包说明和组件联动机制介绍
- 添加架构生命周期管理和模块化设计说明
2026-04-14 22:54:27 +08:00
GeWuYou
5c112f8545 docs(core): 添加 CQRS 和核心框架文档
- 新增 CQRS 详细文档,介绍命令查询职责分离模式
- 添加核心框架概述文档,包含架构图和快速开始指南
- 详细介绍五层架构设计和组件联动机制
- 提供完整的最佳实践和设计理念说明
- 添加架构生命周期管理和模块化设计说明
2026-04-14 22:30:59 +08:00
gewuyou
156fd4df2f
Merge pull request #220 from GeWuYou/refactor/cqrs-architecture-decoupling-todo-1
Replace Mediator runtime with built-in CQRS
2026-04-14 22:12:40 +08:00
GeWuYou
f8fa2a8481 feat(cqrs): 添加流式命令处理器和自动注册功能
- 实现 AbstractStreamCommandHandler 基类支持流式命令处理
- 创建 CqrsHandlerRegistrar 自动扫描注册 CQRS 处理器
- 添加流式处理器接口 IStreamRequestHandler 支持
- 实现处理器注册的容错机制和类型加载恢复
- 添加确定性排序确保跨环境稳定的处理器注册顺序
- 提供完整的单元测试验证注册行为和异常处理
2026-04-14 22:05:20 +08:00
GeWuYou
195c8321a1 feat(cqrs): 添加CQRS命令查询责任分离架构支持
- 实现抽象命令处理器基类支持命令处理
- 添加流式命令处理器基类支持异步流式响应
- 创建查询处理器基类提供统一查询处理接口
- 实现查询基类提供通用查询结构定义
- 扩展架构上下文接口集成CQRS运行时入口
- 定义消息处理器委托支持管道行为处理
- 实现CQRS处理器注册器扫描并注册处理器
- 添加架构模块行为测试验证模块安装功能
- 创建中介器高级特性测试覆盖边界场景
2026-04-14 21:37:32 +08:00
GeWuYou
618f07369e config(ci): 配置Coderabbit以支持重构分支的自动审查
- 启用auto_review功能以进行代码审查
- 添加refactor/cqrs-architecture-decoupling作为基础分支
- 配置草稿PR时不进行审查的选项
- 设置聊天自动回复功能
2026-04-14 20:56:11 +08:00
gewuyou
48e57c8547 Replace Mediator runtime with built-in CQRS 2026-04-14 20:46:59 +08:00
GeWuYou
c2ee2209fd docs(community): 添加问题模板和缺陷报告模板
- 创建了 Bug Report 模板,支持中英双语,包含模块选择、版本信息、复现步骤等字段
- 添加了 Question 模板,用于使用咨询和技术问答
- 配置了预提交检查项,确保提交前完成必要验证
- 设计了结构化的表单字段,便于收集准确的问题信息
- 实现了多语言支持,提升社区协作体验
2026-04-14 13:13:06 +08:00
GeWuYou
396bb1566a docs(contributing): 更新贡献指南并添加标准 Issue 模板
- 更新问题报告指引,整合 Bug、功能、文档、咨询四类模板
- 优化 Issue 分诊建议,明确 bug、enhancement、documentation、question 分类
- 修订 PR 提交流程说明,统一模板使用要求
- 新增 README 项目介绍文档,包含模块说明、安装指导等内容
- 添加标准化 Issue 模板配置,支持 Bug 报告、功能建议、文档改进、使用咨询
- 完善 GitHub Issue 配置,提供模板搜索与文档链接指引
2026-04-14 13:06:00 +08:00
gewuyou
6b5acbd99a
Merge pull request #217 from GeWuYou/feat/godot-source-generators-project-metadata 2026-04-14 09:58:48 +08:00
GeWuYou
31a439e184 test(Godot): 添加项目元数据生成器测试
- 验证基于 project.godot 的 AutoLoad 和 Input Action 强类型入口生成
- 测试 AutoLoad 类型非节点继承时的诊断报告功能
- 验证 Input Action 标识符冲突时的后缀追加和警告机制
- 测试多个显式映射指向同一 AutoLoad 时的重复检测
- 验证不同命名空间同名节点类型的隐式映射冲突处理
- 测试 AutoLoad 和 Input Action 重复条目的诊断和保留逻辑
- 验证缺失或空 project.godot 文件时的无生成行为
2026-04-14 09:51:52 +08:00
GeWuYou
bb7abc0d8f test(Godot): 添加项目元数据生成器测试
- 验证 AutoLoad 和 Input Action 强类型入口生成
- 测试非节点类型上的 AutoLoad 标记诊断
- 验证输入动作标识符冲突处理和后缀追加
- 测试多个显式映射指向相同 AutoLoad 的重复检测
- 验证不同命名空间同名节点类型的冲突处理
- 测试 AutoLoad 标识符冲突的诊断和后缀追加
- 验证项目文件中重复 AutoLoad 条目的处理
- 测试重复输入动作条目的诊断和保留机制
2026-04-14 09:23:49 +08:00
GeWuYou
833a295b84 feat(godot): 添加 Godot 集成功能和测试基础设施
- 新增 AdditionalTextGeneratorTestDriver 用于源生成器测试
- 添加 AutoLoadAttribute 特性支持 AutoLoad 类型映射
- 扩展项目构建目标,支持自定义 project.godot 路径验证
- 创建完整 Godot 集成教程文档,涵盖节点生命周期、信号系统等功能
- 添加源代码生成器测试项目配置和相关依赖包引用
2026-04-14 09:05:33 +08:00
GeWuYou
7dafec72be docs(docs): 添加文档配置和API参考
- 新增.vitepress/config.mts配置文件,包含本地搜索、代码块保护等功能
- 添加API参考文档,涵盖核心架构、事件系统、属性系统等完整API
- 添加源码生成器文档,介绍Log、ContextAware、EnumExtensions等生成器用法
- 配置多语言导航和侧边栏结构,完善文档站点设置
- 添加代码示例和使用指南,提供完整的框架使用参考
2026-04-14 08:22:28 +08:00
GeWuYou
61ee3a8f0c feat(Godot.SourceGenerators): 添加 Godot 项目元数据源码生成器
- 实现 project.godot 文件解析功能,支持 AutoLoad 和 Input Action 元数据提取
- 生成 AutoLoads 强类型访问入口,提供 GetRequiredNode 和 TryGetNode 方法
- 生成 InputActions 常量类,避免手写字符串魔法值
- 添加 AutoLoadAttribute 特性支持显式类型映射声明
- 实现标识符冲突检测和自动后缀追加机制
- 添加完整的诊断系统支持,包括类型继承检查和重复条目警告
- 创建 MSBuild 集成目标文件确保生成器正确加载
- 提供详细的 README 文档说明使用方法和最佳实践
2026-04-14 08:22:12 +08:00
GeWuYou
b3066f3a8d chore(config): 增加 GitHub 检查超时时间
- 将 github-checks 的 timeout_ms 从 90000 增加到 900000
2026-04-13 23:16:40 +08:00
gewuyou
e6b3cad2a7
Merge pull request #215 from GeWuYou/docs/vitepress-site-config
docs: 添加文档站点配置和开发环境说明
2026-04-13 23:14:41 +08:00
coderabbitai[bot]
12022d661a
fix: apply CodeRabbit auto-fixes
Fixed 1 file(s) based on 2 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
2026-04-13 15:12:33 +00:00
GeWuYou
7ddf82877e docs: 添加文档站点配置和开发环境说明
- 配置 GitHub Pages 部署工作流,添加 Configure GitHub Pages 步骤
- 集成 demodrive-ai/llms-txt-action 生成 LLM 可读索引文件
- 添加 sitemap.xml 生成和 LLM 产物验证机制
- 创建完整的 VitePress 中文文档配置文件
- 添加开发环境能力清单和 AI 使用约定
- 配置多语言导航和侧边栏结构
- 设置搜索、页脚和社会链接等 UI 组件
2026-04-13 23:00:29 +08:00
gewuyou
713c091dd3
Merge pull request #213 from GeWuYou/docs/api-reference-and-generators
docs(api): 添加 GFramework API 参考文档和源代码生成器文档
2026-04-13 21:58:34 +08:00
GeWuYou
0a7d4adc59 docs(generator): 更新自动生成注册集合文档
- 修正了 GF_AutoExport_004 错误消息描述中的措辞错误
2026-04-13 20:44:01 +08:00
GeWuYou
3d169ca91f docs(generated): 添加源码生成器文档
- 新增 AutoRegisterExportedCollections 生成器文档
- 新增 AutoRegisterModule 生成器文档
- 新增 AutoScene 生成器文档
- 新增 AutoUiPage 生成器文档
- 更新源码生成器总览索引文档
- 添加各生成器的使用示例和参数说明
- 补充诊断信息和使用约束说明
2026-04-13 20:34:51 +08:00
gewuyou
01b32f6cfb
Merge branch 'main' into docs/api-reference-and-generators 2026-04-13 20:28:14 +08:00
gewuyou
59e0c4ea68
Merge pull request #214 from GeWuYou/feat/generator-inheritance-support
feat(generator): 添加对继承层次结构中注册方法的支持
2026-04-13 20:27:43 +08:00
GeWuYou
973a3c3cb4 test(registration): 添加自动注册导出集合生成器测试
- 添加了批量注册方法生成的基础功能测试
- 添加了集合元素类型推断失败时的诊断报告测试
- 添加了数组参数注册方法的生成测试
- 添加了从继承接口获取注册方法的测试
- 添加了显式接口实现成员不可访问的诊断测试
- 添加了从基类获取注册方法的测试
- 添加了从基类获取注册器成员的测试
- 添加了非实例可读集合成员的诊断测试
- 添加了非实例可读注册器成员的诊断测试
- 添加了注册方法不可访问的诊断测试
- 添加了属性参数无效时的诊断测试
- 添加了多个分部声明时只生成一个源文件的测试
2026-04-13 20:18:47 +08:00
GeWuYou
56bc078288 refactor(generator): 优化类型声明关键字生成逻辑
- 将条件判断语句替换为 switch 表达式以提高可读性
- 添加对 partial interface 类型的支持
- 为不支持的类型添加异常处理机制
- 简化代码结构并提升维护性
2026-04-13 20:05:16 +08:00
GeWuYou
eeef5961d7 feat(godot): 添加导出集合自动注册生成器功能
- 实现了 AutoRegisterExportedCollectionsGenerator 源生成器
- 支持扫描标记了 AutoRegisterExportedCollectionsAttribute 的 partial 类型
- 为使用 RegisterExportedCollectionAttribute 声明的集合成员生成集中注册方法
- 提供详细的诊断支持,包括 GF_AutoExport_001 到 GF_AutoExport_008 错误码
- 支持从基类和接口继承链查找注册方法
- 实现了完整的单元测试覆盖各种使用场景
- 验证集合可枚举性、元素类型推导和注册表成员可访问性
- 生成安全的空值检查代码防止运行时异常
- 支持泛型类型约束和复杂继承关系的处理
2026-04-13 20:04:14 +08:00
GeWuYou
812235a243 test(generator): 添加批量注册集合生成器的单元测试
- 添加了针对注解集合生成批处理注册方法的测试用例
- 添加了当集合元素类型无法推断时报告诊断的测试
- 添加了注册方法使用数组参数时的批处理注册测试
- 添加了从继承接口获取注册方法的批处理注册测试
- 添加了从基类获取注册方法的批处理注册测试
- 添加了当集合成员不可实例读取时报告诊断的测试
- 添加了当注册成员不可实例读取时报告诊断的测试
- 添加了当注册方法对所有者类型不可访问时报告诊断的测试
- 添加了当注册导出集合属性参数无效时报告诊断的测试
- 添加了多个分部声明注解时仅生成一个源文件的测试
- 为枚举候选方法功能添加了详细的XML文档注释
2026-04-13 19:39:40 +08:00
GeWuYou
5e1e16f86e feat(generator): 添加对继承层次结构中注册方法的支持
- 实现 EnumerateCandidateMethods 方法以搜索基类和接口中的注册方法
- 修改 AutoRegisterExportedCollectionsGenerator 以支持从继承链中查找兼容的注册方法
- 添加完整的单元测试覆盖继承、接口实现和泛型场景
- 修复静态成员和不可访问方法的诊断报告功能
- 增强源代码生成器对复杂继承结构的支持能力
2026-04-13 19:17:06 +08:00
GeWuYou
e691c9c855 docs(api): 添加 GFramework API 参考文档和源代码生成器文档
- 新增 API 参考文档,包含核心命名空间、常用 API、游戏模块 API、Godot 集成 API
- 详细介绍架构、模型、系统、命令、查询等核心类型及其用法示例
- 添加本地化系统 API 文档,包含管理器、字符串、配置等相关接口
- 新增源代码生成器完整文档,涵盖 Log、Config Schema、ContextAware 等生成器
- 详细说明各生成器的使用方法、配置选项和诊断信息
- 提供完整的 Godot 专用生成器文档,包括 GetNode、BindNodeSignal、AutoUiPage 等
- 添加使用示例和最佳实践指南,展示完整的游戏控制器和枚举状态管理示例
2026-04-13 19:16:28 +08:00
gewuyou
3f237ef32e
Merge pull request #212 from GeWuYou/feat/generator-diagnostics-and-tests
feat(generator): 添加代码生成器诊断规则和测试用例
2026-04-13 15:53:46 +08:00
GeWuYou
6898866b97 feat(generator): 改进自动注册模块生成器的跨文件顺序稳定性
当partial类分布在多个文件中时,确保生成器使用稳定的跨文件顺序来生成注册代码。
添加了对语法树排序的支持,使相同声明上的注册特性能够按照源码中的书写顺序生成安装代码。
同时修复了测试快照换行符问题,确保跨平台兼容性。
2026-04-13 15:47:06 +08:00
GeWuYou
62d448354c feat: 增强生成器属性参数校验与泛型约束支持,完善诊断体系
### 属性参数校验(Attribute Validation)
- AutoUiPageGenerator
  - 新增 GF_AutoBehavior_004 诊断:
    - 检测 AutoUiPageAttribute 参数无效情况
  - 添加测试用例验证错误参数的诊断报告

- AutoRegisterExportedCollectionsGenerator
  - 新增 GF_AutoExport_008 诊断:
    - 检测 RegisterExportedCollectionAttribute 参数无效情况
  - 改进 TryGetRegistrationAttributeArguments 方法:
    - 精确报告错误位置
  - 更新文档以包含新增诊断规则

### 泛型约束支持(Generic Constraints)
- AutoUiPageGenerator / AutoRegisterModuleGenerator
  - 支持以下泛型约束的正确生成:
    - class?
    - notnull
    - unmanaged
  - 添加对应测试用例确保生成正确性

### 诊断体系优化(Diagnostics Improvements)
- AutoRegisterModuleGenerator
  - 重构 AutoRegisterModuleDiagnostics:
    - 优化诊断定义顺序,提高可读性与维护性
2026-04-13 15:13:51 +08:00
GeWuYou
be928718e3 feat: 增强 AutoSceneGenerator 与 AutoRegisterExportedCollectionsGenerator 的验证与安全机制
### AutoSceneGenerator
- 引入保留成员名称集合(GeneratedMemberNames),包含:
  - SceneKeyStr
  - __autoSceneBehavior_Generated
- 实现 ReportGeneratedMemberConflicts 方法:
  - 检测用户定义成员与生成成员冲突
  - 提供清晰的诊断信息
- 在生成流程中集成冲突检测,避免重复成员导致的编译错误

### AutoRegisterExportedCollectionsGenerator
- 增强集合注册生成器的验证逻辑:
  - 新增诊断 GF_AutoExport_006:导出集合成员必须为实例可读成员
  - 新增诊断 GF_AutoExport_007:注册表成员必须为实例可读成员
- 实现 IsInstanceReadableMember 方法:
  - 校验成员为非静态字段或可读属性
- 修复符号访问性检查:
  - 确保注册方法对所有者类型可访问
- 优化生成逻辑:
  - 过滤重复的部分类声明,仅生成一次源码

### Tests
- AutoSceneGenerator
  - 覆盖保留成员冲突场景:
    - SceneKeyStr 冲突
    - __autoSceneBehavior_Generated 冲突

- AutoRegisterExportedCollectionsGenerator
  - 覆盖完整验证逻辑:
    - 不可读成员 → GF_AutoExport_006 / 007
    - 方法不可访问 → GF_AutoExport_003
    - 多个 partial class → 仅生成一个源文件
2026-04-13 13:04:00 +08:00
GeWuYou
3fadba2d79 feat(generator): 添加导出集合自动注册生成器
- 实现了 AutoRegisterExportedCollectionsGenerator 源生成器
- 支持扫描标记了 AutoRegisterExportedCollectionsAttribute 的 partial 类型
- 为使用 RegisterExportedCollectionAttribute 声明的集合成员生成集中注册方法
- 添加了类型验证和诊断报告功能
- 实现了集合元素类型推导和注册方法兼容性检查
- 生成批量注册样板代码以简化手动注册流程
- 添加了完整的单元测试覆盖各种使用场景
2026-04-13 12:27:27 +08:00
GeWuYou
d21fac42b0 feat(generator): 添加 AutoScene 和 AutoRegisterExportedCollections 源代码生成器
- 实现 AutoSceneGenerator 为标记了 [AutoScene] 的 Godot 节点生成场景行为样板
- 实现 AutoRegisterExportedCollectionsGenerator 为导出集合生成批量注册方法
- 添加完整的单元测试覆盖两种源代码生成器的功能和诊断
- 支持泛型类型参数约束的正确生成
- 提供详细的诊断信息帮助用户修复配置错误
2026-04-13 11:25:49 +08:00
GeWuYou
ca1214f47f refactor(generators): 添加通用扩展方法引用
- 在 AutoSceneGenerator 中引入 GFramework.SourceGenerators.Common.Extensions
- 在 AutoRegisterExportedCollectionsGenerator 中引入 GFramework.SourceGenerators.Common.Extensions
2026-04-13 10:59:26 +08:00
GeWuYou
80acf84e95 feat(godot): 添加AutoScene和AutoRegisterExportedCollections源代码生成器
- 实现AutoSceneGenerator为标记了[AutoScene]特性的Godot节点生成场景行为样板代码
- 实现AutoRegisterExportedCollectionsGenerator为导出集合生成批量注册样板方法
- 添加AutoBehaviorDiagnostics和AutoRegisterExportedCollectionsDiagnostics诊断描述符
- 创建AnalyzerReleases.Unshipped.md文件跟踪新的分析器规则
- 添加完整的单元测试覆盖两个生成器的功能和错误情况
- 更新.gitignore文件排除dotnet-home和脚本缓存目录
2026-04-13 10:51:40 +08:00
GeWuYou
eb307bf188 feat(generator): 添加代码生成器诊断规则和测试用例
- 定义了 Godot 源代码生成器的诊断规则表格
- 添加了上下文获取生成器的全面单元测试
- 实现了自动生成行为和注册导出集合的诊断功能
- 配置了全局 using 语句简化代码生成器实现
- 添加了完整的分析器发布跟踪文档记录新规则
2026-04-13 10:01:46 +08:00
gewuyou
83cceed57b
Merge pull request #211 from GeWuYou/feat/yaml-schema-validation
feat(config): 添加YAML配置文件的JSON Schema校验功能
2026-04-12 16:43:56 +08:00
GeWuYou
774b69f560 feat(config): 添加YAML配置文本校验器
- 实现同步和异步YAML文本校验功能
- 添加基于schema文件的配置校验支持
- 实现schema缓存机制避免重复磁盘IO
- 提供配置表名称和文件路径参数验证
- 集成取消令牌支持异步操作取消
- 添加详细的异常处理和诊断信息
2026-04-12 16:09:07 +08:00
GeWuYou
949904b57c docs(Config): 更新YAML配置文本验证器文档
- 为Validate方法添加详细的remarks文档说明同步加载schema的特性
- 为ValidateAsync方法添加cancellation token异常说明和异步加载schema的详细文档
- 补充异步验证方法的I/O密集场景适用性说明
2026-04-12 15:47:43 +08:00
GeWuYou
12e54ce637 feat(config): 添加YAML配置序列化和校验功能
- 实现YamlConfigTextSerializer提供YAML文本序列化功能
- 实现YamlConfigTextValidator提供YAML文本校验功能
- 添加缓存机制优化schema文件加载性能
- 实现同步和异步校验接口支持
- 添加集成测试验证生成配置绑定功能
- 扩展SchemaConfigGenerator支持配置类型生成
- 实现GeneratedConfigConsumerIntegrationTests完整测试覆盖
2026-04-12 15:41:45 +08:00
GeWuYou
7473adb789 feat(config): 添加YAML配置序列化器并更新集成测试
- 新增YamlConfigTextSerializer类提供统一的YAML序列化功能
- 集成测试中添加配置抽象接口引用
- 序列化器使用驼峰命名约定和默认值保留策略
- 自动确保YAML输出以换行符结尾
- 配置对象序列化时验证空值并抛出异常
2026-04-12 14:51:36 +08:00
GeWuYou
e40703c202 feat(config): 添加 YAML 配置文件 JSON Schema 校验器
- 实现了 YAML 配置与 JSON Schema 的运行时校验功能
- 支持嵌套对象、对象数组、标量数组的递归校验
- 集成了 enum 和引用约束的深度校验机制
- 实现了 multipleOf、uniqueItems 等扩展约束规则
- 添加了跨表引用收集和校验能力
- 提供了异步和同步两种加载校验接口
- 支持 minContains/maxContains 数组匹配计数规则
- 实现了 minProperties/maxProperties 对象属性数量校验
- 集成了日期时间、邮箱、URI 等字符串格式校验
- 提供了详细的错误诊断信息和定位功能
2026-04-12 14:28:31 +08:00
GeWuYou
925b6ce2d2 feat(config): 添加YAML配置序列化支持并完善测试依赖
- 集成YamlDotNet库实现YAML配置文件的序列化功能
- 在配置消费者集成测试中添加抽象配置接口引用
- 在YAML配置验证测试中添加抽象配置接口引用
- 统一配置模块的依赖注入和接口抽象层次
2026-04-12 14:09:53 +08:00
GeWuYou
1fac276437 feat(config): 添加YAML配置文件的JSON Schema校验功能
- 实现了YAML配置与JSON Schema的运行时校验能力
- 支持嵌套对象、对象数组、标量数组的递归校验
- 提供async和sync两种模式的schema文件加载解析
- 实现跨表引用的收集与校验机制
- 支持enum枚举值、引用约束和深层约束校验
- 添加了multipleOf、uniqueItems、contains等高级校验功能
- 实现了minProperties、maxProperties对象属性数量校验
- 提供详细的错误诊断信息和路径定位功能
2026-04-12 14:06:06 +08:00
gewuyou
5e9a9de66e
Merge pull request #210 from GeWuYou/docs/config-system-guide
docs(config): 添加游戏内容配置系统完整文档和诊断规则
2026-04-11 16:17:39 +08:00
GeWuYou
809f53e6a0 feat(config): 添加配置验证功能
- 实现配置架构解析器,支持对象、数组和标量类型验证
- 添加 YAML 格式解析和注释提取功能
- 集成数值、布尔值、字符串等基本数据类型验证规则
- 实现日期、邮箱、UUID 等特殊格式验证逻辑
- 添加配置约束验证如最小/最大长度、数值范围等
- 支持正则表达式模式匹配验证
- 提供配置样本生成和批量编辑更新功能
- 实现多语言验证消息本地化支持
- 添加配置字段排序和可编辑性检查功能
- 支持嵌套对象和数组项的路径定位验证
2026-04-11 15:04:22 +08:00
GeWuYou
7c07395825 docs(config): 添加游戏内容配置系统完整文档
- 介绍面向静态游戏内容的 AI-First 配表方案
- 说明 YAML 配置源文件和 JSON Schema 结构描述支持
- 提供推荐目录结构和 Schema 配置示例
- 展示怪物配置和物品配置的 YAML 示例
- 提供完整的接入模板包括 csproj 配置和启动代码
- 介绍官方启动帮助器 GameConfigBootstrap 使用方法
- 说明 Godot 引擎文本配置桥接功能
- 提供运行时读取模板和生成查询辅助功能
- 介绍 Architecture 架构接入模板和热重载配置
- 详述运行时接入方式和注册辅助功能
- 说明运行时校验行为和跨表引用机制
- 提供开发期热重载功能配置指南
- 介绍生成器接入约定和 VS Code 工具支持
- 列出当前功能限制和独立工具评估结论
- 添加配置验证 JavaScript 实现代码
- 实现字符串格式验证和正则表达式校验
- 提供 schema 解析和 YAML 解析功能
- 实现配置字段编辑和注释提取功能
2026-04-11 14:44:00 +08:00
GeWuYou
924d2fd4da docs(config): 添加游戏内容配置系统完整文档和诊断规则
- 新增配置系统详细使用指南,涵盖目录结构、Schema示例、YAML示例
- 添加VS Code插件工具功能说明和推荐接入模板
- 实现配置生成器诊断规则,包括Schema解析、类型检查等错误处理
- 提供运行时加载、热重载、架构集成等完整接入方案
- 添加Godot引擎文本配置桥接和开发期热重载功能说明
2026-04-11 13:24:39 +08:00
gewuyou
5198d1c1c5
Merge pull request #209 from GeWuYou/feat/game-content-config
docs(config): 添加游戏内容配置系统完整文档
2026-04-11 08:55:16 +08:00
GeWuYou
35849f7053 refactor(tests): 移除未使用的 Roslyn 分析器引用
- 从 GlobalUsings.cs 中删除 Microsoft.CodeAnalysis 的全局引用
- 清理测试项目中不再需要的依赖项
2026-04-11 08:52:55 +08:00
GeWuYou
8c8373d844 refactor(config): 更新配置加载器依赖项
- 添加事件抽象依赖项到YAML配置加载器
- 添加YamlDotNet序列化库依赖项
- 为Godot平台配置文件访问添加别名引用
- 在测试文件中添加配置依赖项引用
2026-04-11 08:44:37 +08:00
GeWuYou
0f1319334e docs(config): 添加游戏内容配置系统完整文档
- 新增游戏内容配置系统详细文档,涵盖 YAML 配置、JSON Schema 结构描述
- 添加运行时只读查询、Source Generator 类型生成等功能说明
- 提供推荐目录结构、Schema 示例和 YAML 示例配置
- 添加 VS Code 插件配置浏览、校验和表单编辑功能介绍
- 提供 Godot 文本配置桥接、运行时读取模板和 Architecture 接入指南
- 说明热重载、跨表引用、查询辅助等高级功能使用方法
- 添加开发期工具和当前限制说明,提供完整的配置系统接入流程
2026-04-11 08:41:30 +08:00
GeWuYou
1c064bfe66 fix(config): 解决目录列表加载错误问题
- 添加了 ListDirBegin 方法的错误检查
- 在遇到错误时返回 null 避免异常
- 确保目录遍历前检查操作状态
2026-04-11 07:41:55 +08:00
GeWuYou
abf78aa934 refactor(tests): 重构测试项目的全局引用配置
- 在 GodotYamlConfigLoaderTests 中添加 GFramework.Game.Config 引用
- 从 GodotYamlConfigTableSourceTests 中移除未使用的 System 引用
- 新增 GlobalUsings.cs 文件统一管理所有全局引用
- 将常用的系统命名空间配置为全局引用以减少重复导入
- 优化测试代码的引用管理和项目结构
2026-04-11 07:39:19 +08:00
GeWuYou
aedc30cfd2 refactor(config): 更新Godot YAML配置加载器的文件访问引用
- 将Godot.FileAccess别名为FileAccess以提高代码可读性
- 保持现有功能不变,仅优化命名空间引用方式
2026-04-11 07:37:59 +08:00
GeWuYou
c29c9fe8f4 feat(config): 添加配置表来源安全性验证功能
- 在 GodotYamlConfigLoader 中增加对路径中冒号字符的验证,防止 Windows 无效名称和 ADS 类似语法
- 新增 GodotYamlConfigTableSource 类用于描述配置表来源信息,并实现安全路径验证
- 添加对配置路径和 schema 路径的严格安全检查,拒绝包含根路径、遍历标记或冒号字符的路径
- 扩展测试用例覆盖多种不安全路径场景,包括路径遍历、绝对路径前缀和冒号字符
- 为新功能添加完整的单元测试验证安全路径验证逻辑
2026-04-11 07:37:22 +08:00
GeWuYou
82091be03c refactor(config): 更新Godot YAML配置加载器的文件访问引用
- 将Godot.FileAccess重命名为FileAccess以避免命名冲突
- 优化了配置加载器中的文件操作引用
- 提高了代码的可读性和维护性
2026-04-11 07:36:03 +08:00
GeWuYou
86ff04680b docs(config): 更新 GodotYamlConfigLoader 异步加载方法的文档注释
- 添加了详细的 XML 文档注释说明方法功能和参数
- 补充了异常情况的详细说明包括 ArgumentNullException 和 ConfigLoadException
- 添加了关于运行时缓存同步执行原因的技术备注
- 保留了原有的继承特性标记并添加了完整的文档结构
2026-04-11 07:33:36 +08:00
GeWuYou
1bf5d287e9 fix(config): 修复Godot YAML配置加载器的目录重置异常处理
- 为构造函数添加ArgumentNullException和ArgumentException异常说明
- 为EnableHotReload方法添加InvalidOperationException异常说明
- 重构ResetDirectory方法以捕获目录操作异常并包装为ConfigLoadException
- 添加detail参数到CreateConfigLoadException方法用于提供更详细的错误信息
- 新增单元测试验证运行时缓存目录重置失败时的异常处理
- 添加GodotYamlConfigTableSourceTests测试类验证安全相对路径约束
2026-04-11 07:28:49 +08:00
GeWuYou
e746297496 feat(config): 添加 Godot YAML 配置加载器支持
- 实现 GodotYamlConfigLoader 类,提供 YAML 配置加载适配层
- 支持编辑器态直接读取项目目录和导出态运行时缓存同步
- 添加 GodotYamlConfigEnvironment 抽象处理 Godot 路径和文件访问
- 实现配置文件同步机制,支持 YAML 和 schema 文件复制
- 提供热重载功能,在编辑器态下支持配置实时更新
- 添加完整的单元测试验证各种场景下的配置加载行为
2026-04-11 00:04:29 +08:00
GeWuYou
411d4cb14a docs(config): 添加游戏内容配置系统完整文档
- 新增配置系统概述和核心能力介绍
- 添加Schema和YAML配置文件格式示例
- 提供推荐目录结构和接入模板
- 详细说明Generator集成和运行时加载流程
- 介绍VS Code工具和热重载功能
- 添加Godot引擎桥接适配器文档
- 说明运行时校验行为和错误处理机制
- 提供Architecture模块集成模板
- 记录当前限制和未来规划评估
2026-04-10 23:25:53 +08:00
GeWuYou
0ea3c0ad9d refactor(config): 更新Godot YAML配置加载器的命名空间引用
- 为Godot.FileAccess添加using别名以避免冲突
- 添加GFramework.Game.Config命名空间引用
- 添加NUnit.Framework测试框架引用
- 优化配置加载器的依赖管理
- 提升代码可读性和维护性
- 确保测试类的正确引用关系
2026-04-10 23:10:06 +08:00
GeWuYou
40f5fd34b7 docs(config): 添加游戏内容配置系统完整文档
- 新增面向静态游戏内容的 AI-First 配表方案介绍
- 详细说明 YAML 作为配置源文件和 JSON Schema 结构描述功能
- 提供推荐目录结构和 Schema 示例配置
- 添加 VS Code 插件工具支持说明
- 包含 Godot 文本配置桥接使用指南
- 提供运行时读取和热重载模板示例
- 说明生成器接入约定和运行时校验行为
- 添加开发期热重载和工具支持详细说明
- 创建 Godot 测试项目配置文件
- 实现 GodotYamlConfigLoader 配置加载适配层
2026-04-10 23:05:25 +08:00
gewuyou
39e3ecfe46
Merge pull request #208 from GeWuYou/docs/config-system-complete 2026-04-10 20:42:29 +08:00
GeWuYou
19088fed03 feat(config): 添加配置验证功能模块
- 实现配置架构解析器,支持JSON架构到递归树的转换
- 添加YAML解析器,支持根映射、嵌套对象和数组结构
- 集成配置验证诊断系统,提供架构和YAML内容校验
- 实现批量编辑器字段提取,支持标量类型安全更新
- 添加YAML注释提取功能,映射到逻辑字段路径
- 创建示例配置YAML生成功能,包含架构描述作为注释
- 实现表单更新应用到YAML功能,重写YAML树结构
- 添加标量兼容性检查,支持整数、数字、布尔值和字符串类型
- 实现精确十进制算术运算,用于multipleOf约束验证
- 添加模式匹配验证,支持正则表达式编译和测试
- 实现常量值比较功能,保持与运行时一致的比较格式
- 集成多语言本地化支持,提供中英文验证消息
2026-04-10 20:30:04 +08:00
GeWuYou
b0e8b6ecc5 feat(config): 添加配置验证功能模块
- 实现配置模式解析器,支持对象、数组和标量类型的递归验证
- 添加 YAML 配置文件解析和注释提取功能
- 实现配置值的类型兼容性检查和约束验证
- 添加批量编辑器字段收集和表单更新应用功能
- 实现配置样本生成和多语言本地化支持
- 添加精确十进制算术用于数值约束验证
- 实现配置枚举值和默认值的标准化处理
- 添加配置常量值的可比较键构建功能
2026-04-10 20:21:47 +08:00
GeWuYou
dca304afeb feat(config): 添加配置验证功能模块
- 实现配置架构解析器,支持对象、数组和标量类型的递归验证
- 添加YAML文档解析功能,包括注释提取和路径映射
- 集成配置验证诊断系统,支持多种数据类型约束检查
- 实现批量编辑器的可编辑字段收集功能
- 添加表单更新应用逻辑,支持标量和数组值的安全更新
- 集成数值约束验证,包括最小值、最大值和倍数检查
- 实现字符串长度和正则表达式模式验证
- 添加枚举值匹配和唯一性约束检查
- 实现配置架构注释提取和样本YAML生成功能
- 支持配置架构默认值和常量值处理
2026-04-10 20:09:12 +08:00
GeWuYou
925af56b1c feat(config): 添加配置验证功能
- 实现配置模式解析器,支持对象、数组和标量类型的递归验证
- 添加 YAML 解析和注释提取功能,支持嵌套对象和数组结构
- 实现配置验证诊断,提供详细的错误和警告信息
- 添加表单更新应用功能,支持标量值和数组的批量编辑
- 实现配置示例生成功能,包含描述信息作为 YAML 注释
- 添加数值约束验证,包括最小值、最大值、倍数和长度限制
- 实现枚举值和模式匹配验证,确保数据符合预定义规则
- 添加常量值比较功能,支持对象和数组类型的深度比较
2026-04-10 19:58:42 +08:00
GeWuYou
039ef9817a feat(extension): 添加GFramework配置工具扩展功能
- 实现配置文件浏览器树视图,支持工作区配置目录导航
- 集成轻量级验证系统,支持YAML配置文件语法检查
- 添加模式感知表单预览功能,支持结构化配置编辑
- 实现批量编辑功能,支持跨多个配置文件统一修改字段值
- 集成国际化支持,提供中英文本地化界面
- 添加实时配置文件保存验证,在文件保存时自动校验
- 实现引用导航功能,支持跳转到关联配置表和文件
- 添加工作区变更响应,支持动态刷新配置树视图
2026-04-10 18:52:03 +08:00
GeWuYou
4ff5189da4 docs(config): 添加游戏内容配置系统完整文档与验证工具
- 新增游戏内容配置系统详细文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 添加 Schema 示例和 YAML 示例,展示怪物和物品配置的具体用法
- 提供推荐接入模板,包括目录结构、csproj 配置和启动代码模板
- 添加运行时读取模板和 Architecture 接入模板,简化集成流程
- 实现配置系统运行时校验行为说明,支持多种约束验证
- 添加开发期热重载功能说明和使用方法
- 提供 VS Code 工具支持,包括配置浏览、表单编辑等功能
- 新增配置验证工具实现,支持 JSON Schema 解析和 YAML 验证
- 添加批编辑功能,支持安全更新顶层标量字段和数组
- 提供完整的 API 参考和最佳实践指南
2026-04-10 18:22:40 +08:00
dependabot[bot]
dd004738b3 chore(deps): bump trufflesecurity/trufflehog from 3.94.2 to 3.94.3
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.94.2 to 3.94.3.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.94.2...v3.94.3)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.94.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:09:01 +08:00
dependabot[bot]
58f362f7eb chore(deps): bump actions/download-artifact from 5 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:08:46 +08:00
dependabot[bot]
137a9427f9 chore(deps): bump actions/setup-node from 5 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:08:12 +08:00
dependabot[bot]
41194d5d45 Bump Meziantou.Analyzer from 3.0.43 to 3.0.46
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:07:17 +08:00
dependabot[bot]
2f782d52f5 Bump Meziantou.Polyfill from 1.0.106 to 1.0.109
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.109
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.109
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:06:59 +08:00
dependabot[bot]
396397356c Bump Microsoft.NET.Test.Sdk from 18.3.0 to 18.4.0
---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:06:35 +08:00
dependabot[bot]
733fd4c7d2 Bump Scriban from 7.0.6 to 7.1.0
---
updated-dependencies:
- dependency-name: Scriban
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 17:06:15 +08:00
gewuyou
9f73421532
Merge pull request #207 from GeWuYou/feat/config-system-docs-and-validation
docs(config): 添加游戏内容配置系统完整文档与验证工具实现
2026-04-10 17:04:23 +08:00
GeWuYou
8287bf37fc docs(config): 添加AI代理编码行为规范和配置验证工具测试
- 定义了代码风格、注释规则和文档要求
- 规定了测试覆盖范围和安全编码准则
- 实现了配置模式解析和验证功能
- 添加了常量值比较和枚举校验逻辑
- 集成了数字范围和字符串长度验证
- 支持对象数组和嵌套结构验证
2026-04-10 16:50:39 +08:00
GeWuYou
e28a1e4ecd feat(config): 添加配置验证功能模块
- 实现配置架构解析器,支持JSON架构到递归树的转换
- 添加YAML解析器,支持根映射、缩进嵌套对象和数组结构
- 实现配置验证诊断功能,提供架构和YAML解析验证
- 添加表单更新应用功能,支持将表单更改安全写回YAML
- 实现批编辑器字段提取,支持可编辑标量类型的识别
- 添加配置注释提取功能,将注释映射到逻辑字段路径
- 实现示例配置YAML生成功能,包含架构描述作为注释
- 添加精确十进制算术运算,用于multipleOf约束检查
- 实现标量类型兼容性验证,包括整数、数字、布尔值模式匹配
- 添加常量值元数据处理,支持工具比较对齐运行时行为
2026-04-10 14:33:44 +08:00
GeWuYou
0320404514 docs(config): 添加游戏内容配置系统完整文档与验证工具实现
- 新增游戏内容配置系统详细文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等核心概念
- 实现配置验证工具,支持运行时校验、类型检查、引用验证等功能
- 提供完整的接入模板,包括项目结构、CSProj 配置、启动帮助器等推荐实践
- 集成 VS Code 插件支持,提供配置浏览、表单编辑、递归校验等开发期工具能力
- 实现热重载机制,支持开发期配置文件变更自动刷新运行时表
- 添加详细的 Schema 示例和 YAML 示例,展示怪物、物品等游戏内容配置的实际应用
- 提供 Architecture 接入模板,支持与现有架构的无缝集成
- 实现跨表引用校验,确保配置数据的一致性和完整性
2026-04-10 12:22:20 +08:00
gewuyou
50161a2f28
Merge pull request #206 from GeWuYou/docs/config-system
docs(config): 添加游戏内容配置系统文档与验证工具
2026-04-10 11:14:48 +08:00
GeWuYou
a49c99c528 feat(config): 添加配置验证功能模块
- 实现配置架构解析器,支持对象、数组和标量类型的递归解析
- 添加 YAML 配置文件解析和注释提取功能
- 实现配置验证诊断系统,支持多种数据类型的校验
- 添加表单更新应用功能,支持标量和数组值的批量编辑
- 实现配置示例生成功能,包含架构描述作为 YAML 注释
- 添加国际化支持,提供中英文验证消息本地化
- 实现精确十进制运算,确保数值约束验证的准确性
- 添加批处理数组值解析和枚举值标准化功能
2026-04-10 10:45:22 +08:00
GeWuYou
1a50d7af39 test(config): 添加 YAML 配置加载器单元测试
- 验证 YAML 文件扫描和注册功能
- 测试配置表注册选项对象支持
- 验证空选项对象异常处理
- 测试配置目录不存在时的错误处理
- 验证部分加载失败时的回滚机制
- 测试非法 YAML 文件的错误处理
- 验证 schema 校验功能包括必填字段检查
- 测试类型不匹配的字段校验
- 验证标量 enum 限制校验
- 测试数值范围约束校验包括最小值最大值
- 验证数值特殊约束如 exclusiveMinimum/exclusiveMaximum
- 测试 multipleOf 约束校验
- 验证大数值和科学计数法处理
- 测试字符串长度和正则模式校验
- 验证数组元素数量和唯一性校验
- 测试未知字段检测
- 验证嵌套对象和对象属性数量校验
2026-04-10 10:20:40 +08:00
GeWuYou
7931b41589 feat(config): 添加配置验证和YAML解析功能
- 实现了JSON schema解析器和验证器
- 添加了YAML文档解析和注释提取功能
- 创建了配置验证诊断系统支持中英文本地化
- 实现了批量编辑器可编辑字段收集功能
- 添加了配置文件示例生成功能
- 实现了表单更新应用到YAML的功能
- 添加了精确十进制算术运算支持multipleOf约束检查
- 实现了YAML标量值格式化和引用处理
- 创建了完整的配置验证消息本地化系统
2026-04-10 10:10:47 +08:00
GeWuYou
06d048f38a docs(config): 添加游戏内容配置系统文档与验证工具
- 新增游戏内容配置系统完整文档,包含 YAML 配置、JSON Schema 结构描述
- 添加运行时只读查询、Source Generator 类型生成等功能说明
- 提供推荐目录结构、Schema 示例和 YAML 示例配置模板
- 添加 VS Code 插件工具支持配置浏览、校验和表单编辑功能
- 实现跨表引用校验、热重载及批量编辑等高级特性文档
- 集成 Architecture 模块化接入和运行时校验行为说明
- 添加配置系统限制说明与独立工具评估结论
2026-04-10 09:38:51 +08:00
gewuyou
5722b2a211
Merge pull request #198 from GeWuYou/feat/config-schema-generator-and-validation
Feat/config schema generator and validation
2026-04-09 20:36:44 +08:00
GeWuYou
d263a4360e docs(config): 添加游戏内容配置系统文档和验证工具
- 新增游戏内容配置系统完整文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 实现运行时只读查询、Source Generator 类型生成、VS Code 插件等功能
- 提供配置浏览、raw 编辑、schema 打开、递归校验和嵌套对象表单入口
- 添加配置系统接入模板,包括 csproj 模板、启动帮助器、运行时读取模板
- 实现热重载功能支持开发期配置文件自动刷新
- 提供完整的 schema 示例和 YAML 示例配置
- 添加跨表引用、索引查询辅助、批量编辑等高级功能支持
- 实现配置验证工具,支持类型校验、约束检查、注释提取等特性
2026-04-09 20:26:13 +08:00
GeWuYou
3ec3429857 test(config): 添加YAML配置加载器单元测试
- 验证YAML文件扫描和注册表写入功能
- 测试带schema校验的配置表注册选项对象支持
- 验证空配置表注册选项的异常处理
- 测试配置目录不存在时的错误抛出
- 验证配置表加载失败时注册表状态回滚
- 测试非法YAML文件的反序列化错误处理
- 验证schema校验对必填字段缺失的检查
- 测试schema校验对类型不匹配的检查
- 验证schema校验对枚举值限制的支持
- 测试数值范围约束的校验功能
- 验证数值exclusive min/max约束
- 测试multipleOf约束校验
- 验证大数值和科学计数法支持
- 测试字符串长度和正则模式约束
- 验证数组元素数量和唯一性约束
- 测试未知字段检测和错误处理
- 验证嵌套对象和数组的递归校验
- 测试跨表引用校验功能
2026-04-09 19:58:48 +08:00
GeWuYou
ccb6b5ad42 docs(agents): 添加AI代理行为准则文档
- 定义了环境能力清单和工具选择规则
- 规定了XML文档注释、内联注释和架构级注释要求
- 明确了代码风格包括命名规范、格式化和C#约定
- 设立了测试覆盖范围、组织结构和验证命令标准
- 制定了安全输入验证、依赖管理和权限控制规则
- 确立了文档更新、任务跟踪和审查完成标准
- 更新了浮点数比较算法中的容差计算方式
- 优化了数值精度验证逻辑以避免十进制步进误差
2026-04-09 19:43:15 +08:00
GeWuYou
f9f608ad64 docs(agents): 添加AI代理编码行为规范文档
- 定义了环境能力清单和工具选择规则
- 规定了XML文档注释、内联注释和架构级注释要求
- 明确了代码风格包括命名约定、格式化和C#惯例
- 设立了测试覆盖范围、组织结构和验证命令标准
- 制定了安全规则防止输入验证和敏感数据泄露
- 规范了代码文档、任务跟踪和仓库文档更新流程
- 建立了审查标准确保代码质量和完整性
2026-04-09 19:23:17 +08:00
GeWuYou
16686a0d97 docs(config): 添加游戏内容配置系统文档和验证工具
- 新增游戏内容配置系统完整文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 添加 Schema 示例和 YAML 示例,说明怪物、物品等静态数据配置方式
- 提供推荐接入模板,包括目录结构、csproj 配置和启动代码模板
- 实现官方启动帮助器 GameConfigBootstrap 与 GameConfigModule 集成
- 添加运行时读取模板,提供强类型配置访问入口
- 实现生成查询辅助功能,支持 FindBy* 和 TryFindFirstBy* 查询接口
- 提供 Architecture 推荐接入模板,支持模块化配置管理
- 添加热重载模板,支持开发期配置文件自动刷新
- 实现运行时接入方案,提供只读表形式的配置访问
- 添加运行时校验行为说明,支持跨表引用和数据完整性检查
- 实现开发期热重载功能,支持配置变更自动重载
- 添加生成器接入约定,自动生成配置类型和表包装代码
- 提供 VS Code 工具支持,包括配置浏览、表单编辑和批量更新功能
- 实现配置验证工具,支持 JSON Schema 子集解析和 YAML 校验功能
2026-04-09 19:23:06 +08:00
GeWuYou
f5317eda01 docs(config): 添加游戏内容配置系统文档
- 介绍面向静态游戏内容的 AI-First 配表方案
- 详细说明 YAML 配置源文件和 JSON Schema 结构描述功能
- 提供推荐目录结构和 Schema 示例配置指南
- 说明 VS Code 插件提供的配置浏览和编辑功能
- 提供运行时接入模板和强类型查询辅助使用方法
- 说明跨表引用和运行时校验行为规范
- 介绍开发期热重载功能和性能优化建议
- 说明当前限制和独立 Config Studio 评估结论
2026-04-09 17:07:29 +08:00
GeWuYou
51de7f1102 feat(config): 添加配置验证和YAML解析功能
- 实现了配置模式解析器,支持递归对象/数组/标量树结构
- 添加了可编辑字段收集功能,支持批量编辑标量和数组类型
- 实现了YAML解析器,支持嵌套对象、标量数组和对象数组
- 添加了YAML注释提取功能,将注释映射到逻辑字段路径
- 实现了基于模式的示例YAML配置生成功能
- 添加了扩展端验证诊断功能,支持中英文错误消息
- 实现了表单更新应用功能,支持标量、数组和对象数组更新
- 添加了批处理数组值解析和模式枚举值标准化功能
- 实现了YAML标量格式化和引号移除功能
- 添加了完整的模式节点验证,支持数值约束、长度限制和模式匹配
- 实现了多语言验证消息本地化功能
- 添加了YAML标记化和块解析功能
- 实现了唯一性检查和比较键构建功能
2026-04-09 17:06:43 +08:00
GeWuYou
c693337ebf feat(config): 添加基于JSON schema的配置生成器
- 实现了SchemaConfigGenerator源代码生成器
- 支持根据JSON schema文件自动生成配置类型
- 生成强类型的配置表包装类
- 支持嵌套对象和对象数组的类型生成
- 生成配置表的查询和索引功能
- 添加了跨表引用的元数据支持
- 生成运行时注册和访问辅助代码
- 支持默认值、枚举和约束的文档生成
2026-04-09 17:06:20 +08:00
gewuyou
73d2577fe1
Merge pull request #197 from GeWuYou/feat/config-module-architecture-integration
feat(config): 添加配置模块集成测试和架构模块支持
2026-04-09 16:44:35 +08:00
GeWuYou
febf948077 feat(config): 添加架构配置集成测试和模块实现
- 实现了 ArchitectureConfigIntegrationTests 测试类,验证配置模块在架构场景下的完整链路
- 添加了 GameConfigModule 类,提供基于 Architecture 的配置模块接入入口
- 实现了配置模块的生命周期管理,包括首次加载和热重载支持
- 集成了 BootstrapInitializationHook 确保配置在 utility 初始化前完成加载
- 添加了模块复用限制和安装窗口验证机制
- 实现了架构销毁时的资源清理和生命周期钩子注册
2026-04-09 16:33:02 +08:00
GeWuYou
eb7a8c702c docs(tests): 为配置集成测试添加详细的XML文档注释
- 为ConsumerArchitecture构造函数添加参数验证和功能说明文档
- 为ConfigModule属性添加配置模块获取方法的详细说明
- 为Registry属性添加配置注册表访问的生命周期状态说明
- 为MonsterTable属性添加怪物配置表读取的异常处理和使用约束
- 为ProbeUtility属性添加配置可见性探针的功能说明
- 为ModuleOnlyArchitecture类添加模块共享测试的相关文档
- 为配置模块和注册表属性添加生命周期状态和使用时机说明
2026-04-09 15:15:10 +08:00
GeWuYou
13c91c8869 feat(config): 添加配置模块架构集成与YAML加载器
- 实现 GameConfigBootstrap 启动帮助器,统一管理配置注册表、YAML加载器与热重载句柄
- 创建 GameConfigModule 配置模块,集成到 Architecture 生命周期中完成自动加载与资源回收
- 实现 YamlConfigLoader 基于文件目录的YAML配置加载器,支持批量加载与热重载功能
- 添加 ArchitectureConfigIntegrationTests 集成测试,验证模块安装、加载顺序与表访问
- 实现热重载防抖机制,支持开发期配置变更监听与增量更新
- 提供同步上下文桥接支持,避免Unity主线程或UI线程上的死锁问题
2026-04-09 14:48:05 +08:00
GeWuYou
f290050262 feat(config): 添加配置模块集成测试和架构模块支持
- 新增 ArchitectureConfigIntegrationTests 验证配置模块在架构场景下的接入链路
- 添加 GameConfigModule 作为 Architecture 官方配置模块接入入口
- 实现模块生命周期管理,统一完成注册表暴露和首次加载
- 添加配置模块防止重复安装到多个架构的保护机制
- 验证配置模块在其他 utility 初始化前完成首次加载的顺序
- 更新中文文档详细说明配置系统接入模板和架构集成方式

 Conflicts:
	docs/zh-CN/game/config-system.md
2026-04-09 12:44:28 +08:00
gewuyou
55a51fb5d2
Merge pull request #196 from GeWuYou/feat/add-game-content-configuration-documentation
refactor: 重构配置目录API并新增诊断查询方法
2026-04-09 10:18:17 +08:00
GeWuYou
fac2453766 docs(config): 添加游戏内容配置系统完整文档与集成测试
- 新增游戏内容配置系统完整使用文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 添加推荐的项目接入模板,包括目录结构、csproj 配置、启动帮助器和运行时读取入口
- 实现官方启动帮助器 GameConfigBootstrap 与 GameConfigBootstrapOptions 集成
- 添加强类型配置表访问、查询辅助和跨表引用功能说明
- 实现开发期热重载、运行时校验和 VS Code 工具集成指南
- 添加完整的单元测试验证生成器绑定、聚合注册和强类型访问功能
- 提供 Architecture 接入模板和热重载管理最佳实践
- 包含运行时校验行为、诊断对象和配置加载异常处理说明
2026-04-09 10:01:32 +08:00
GeWuYou
5190ba2359 docs(game): 添加游戏内容配置系统详细文档
- 新增游戏内容配置系统完整文档,涵盖 YAML 配置、JSON Schema 结构、目录组织等
- 添加 Schema 示例和 YAML 示例,展示怪物和物品配置的具体格式
- 提供推荐接入模板,包括目录结构、csproj 配置、启动帮助器和运行时读取模板
- 完善运行时接入说明,介绍配置加载、注册和访问的完整流程
- 增加热重载功能说明,提供开发期自动刷新配置的实现方式
- 补充 VS Code 工具支持说明,提供配置浏览、编辑和校验功能介绍
- 添加生成器接入约定和当前限制说明,确保开发者了解系统边界
- 生成项目级配置目录和注册扩展方法,简化多表注册流程
2026-04-09 09:33:08 +08:00
gewuyou
015cac6eb5
Merge pull request #195 from GeWuYou/feat/game-config-system
feat(config): 实现x-gframework-index索引元数据支持
2026-04-08 12:48:39 +08:00
GeWuYou
017179466d feat(config): 添加配置架构生成器和怪物表自动生成
- 实现 SchemaConfigGenerator 源代码生成器
- 自动生成 MonsterTable 配置表包装类
- 支持基于 JSON schema 的类型安全配置访问
- 生成配置表的精确匹配索引查找功能
- 实现懒加载的只读字典索引结构
- 添加配置实体的运行时注册和访问辅助方法
2026-04-08 12:33:12 +08:00
GeWuYou
031d0d1e11 docs(Config): 更新 SchemaConfigGenerator 文档注释
- 添加 isDirectChildOfRoot 参数的文档说明
2026-04-08 12:18:28 +08:00
GeWuYou
9b13985615 feat(generator): 添加配置架构代码生成器功能
- 实现 SchemaConfigGenerator 源代码生成器
- 支持从 JSON schema 文件生成配置类型和配置表包装类
- 生成强类型的 MonsterTable 配置表包装器
- 实现基于属性名称的查找索引构建功能
- 提供自动生成的 FindByName 和 TryFindFirstByName 方法
- 支持配置表的精确匹配查询操作
- 生成配置绑定辅助类和元数据常量
- 实现跨表引用关系的元数据提取功能
2026-04-08 11:14:58 +08:00
GeWuYou
43b95c7513 docs(config): 添加游戏内容配置系统完整文档
- 新增配置系统架构说明,涵盖 YAML 源文件、JSON Schema 结构描述、运行时只读查询等核心功能
- 完善推荐目录结构和 Schema 示例,包括怪物、物品配置表的标准定义方式
- 提供完整的接入模板,包含 csproj 配置、GameConfigHost 生命周期管理、GameConfigRuntime 读取入口
- 添加运行时校验行为说明,支持必填字段、类型匹配、数值范围、字符串长度、正则表达式、数组长度等多种约束
- 集成跨表引用功能,支持通过 x-gframework-ref-table 声明关联关系并进行有效性检查
- 添加开发期热重载支持,可自动监听配置目录和 schema 文件变更并重载对应表格
- 提供 VS Code 工具集成说明,包括配置浏览、raw 编辑、schema 打开、表单入口等功能
- 补充生成器接入约定,从 *.schema.json 自动生成配置类型、表包装、注册辅助等代码
- 添加完整的 Analyzer 规则文档,涵盖 GF_ConfigSchema_001 到 GF_ConfigSchema_008 等错误诊断码
- 增加单元测试验证,确保消费者项目可以正常使用生成的聚合注册辅助和强类型访问入口
2026-04-08 09:32:00 +08:00
gewuyou
3109beaa9b
Merge pull request #194 from GeWuYou/feat/docs-init-vitepress-config
feat(docs): 初始化 GFramework 文档网站配置
2026-04-07 14:34:30 +08:00
GeWuYou
ff4f92c6d7 feat(docs): 初始化 GFramework 文档网站配置
- 添加 VitePress 主题样式文件,自定义颜色、按钮、首页、自定义块等组件样式
- 配置深蓝色品牌色彩方案,包括文字、悬停和背景色
- 实现首页英雄区域渐变效果和响应式图像模糊滤镜
- 集成本地搜索功能,支持中文界面翻译和搜索提示
- 创建安全泛型转义插件,防止 Markdown 中的尖括号被误解析
- 设置多语言导航菜单,包含入门指南、Core、Game、Godot 等模块链接
- 构建完整的侧边栏结构,覆盖核心框架、游戏模块、源码生成器等所有功能区域
- 配置教程、最佳实践、API参考等学习资源分类
- 添加页脚版权信息、社交链接和返回顶部功能
- 优化移动端和桌面端的搜索框显示适配
2026-04-07 14:03:01 +08:00
gewuyou
d645e8a338
Merge pull request #193 from GeWuYou/chore/coderabbit-balanced-to-chill
chore(config): 调整 CodeRabbit 配置以简化审查设置
2026-04-07 12:54:34 +08:00
GeWuYou
ade735ed4a feat(config): 添加 GitHub Checks 工具配置
- 在 .coderabbit.yaml 中新增 tools 配置块
- 启用 github-checks 工具
- 设置 github-checks 超时时间为 90 秒
- 保留原有的 auto_review 配置设置
2026-04-07 12:50:08 +08:00
GeWuYou
ed6c13f151 chore(config): 调整 CodeRabbit 配置以简化审查设置
- 将审查配置文件从 balanced 更改为 chill 以降低严格度
- 移除 github-checks 工具配置
- 保持自动审查功能启用状态
- 维持现有的请求更改工作流程和摘要设置
2026-04-07 12:49:32 +08:00
gewuyou
b3e484632d
Merge pull request #191 from GeWuYou/feat/config-system-with-source-generator
feat(config): 添加游戏内容配置系统及源代码生成器
2026-04-07 09:18:28 +08:00
GeWuYou
0564428d69 chore(config): 更新 CodeRabbit 配置以优化代码审查设置
- 添加 YAML 语言服务器 schema 指定
- 设置语言为简体中文
- 配置审查参数包括高阶总结、状态展示及详细问题显示
- 开启请求修改工作流
- 配置工具与 GitHub 检查功能
- 设置超时时间为 90 秒
- 启用自动审查并排除草稿 PR
- 开启聊天自动回复功能
2026-04-07 08:59:28 +08:00
GeWuYou
ca82b2701c feat(config): 添加游戏内容配置系统及源代码生成器
- 实现基于 YAML 的静态游戏内容配置管理
- 集成 JSON Schema 结构描述与校验功能
- 提供一对象一文件的目录组织方式
- 支持运行时只读查询与类型安全访问
- 添加 Source Generator 自动生成配置类型和表包装
- 实现 VS Code 插件提供配置浏览与编辑功能
- 添加热重载支持开发期实时配置更新
- 提供官方启动帮助器简化初始化流程
- 支持跨表引用校验与关联表联动重载
- 实现强类型查询辅助方法提升开发效率
2026-04-07 08:38:06 +08:00
gewuyou
d120236e13
Merge pull request #190 from GeWuYou/feat/config-system-integration
Feat/config system integration
2026-04-06 23:01:14 +08:00
GeWuYou
d99af1cfac docs(game): 添加游戏内容配置系统文档
- 介绍面向静态游戏内容的 AI-First 配表方案
- 详细说明 YAML 配置源文件和 JSON Schema 结构描述功能
- 提供推荐的目录结构和完整的 Schema 与 YAML 示例
- 包含配置系统的接入模板和运行时读取方法
- 说明开发期热重载功能和 VS Code 工具集成
- 记录当前限制和独立 Config Studio 评估结论
- 提供 Architecture 推荐接入模板和热重载配置方法
2026-04-06 22:39:37 +08:00
GeWuYou
cd32a006c6 fix(tests): 修正配置加载器参数名称断言
- 将断言中的参数名从 "ConfigureLoader" 更新为 "options"
- 确保测试用例与实际实现保持一致
2026-04-06 22:15:30 +08:00
GeWuYou
bba589a853 docs(config): 添加游戏内容配置系统完整文档
- 新增 CI/CD 工作流配置文件,集成代码质量检查、安全扫描和构建测试
- 详细介绍配置系统架构,包括 YAML 源文件、JSON Schema 结构描述和运行时只读查询
- 提供完整的目录结构推荐和 Schema/JSON 示例配置
- 包含项目接入模板,涵盖 csproj 配置、启动帮助器和运行时读取模板
- 说明运行时校验行为,支持必填字段、类型匹配、数值范围等校验规则
- 介绍开发期热重载功能,支持配置文件变更自动刷新
- 详述生成器接入约定,包括配置类型、表包装和注册辅助生成
- 提供 VS Code 工具使用指南,支持配置浏览、表单编辑和批量操作
- 说明当前系统限制和未来发展规划,明确适用场景
2026-04-06 21:19:49 +08:00
GeWuYou
c732285dfb docs(config): 添加游戏内容配置系统文档和验证工具
- 新增游戏内容配置系统完整文档,涵盖 YAML 配置、JSON Schema 结构、目录组织
- 实现配置系统的运行时查询、类型生成、VS Code 插件集成等功能说明
- 添加 Schema 示例、YAML 示例和推荐接入模板
- 提供运行时读取、热重载、批处理编辑等功能的使用指南
- 实现配置校验行为、跨表引用、诊断对象等核心功能文档
- 集成开发期工具支持,包括表单编辑、批量更新、注释渲染等能力
- 添加架构接入模板和生产部署相关建议
2026-04-06 20:17:57 +08:00
GeWuYou
67149ab2b2 feat(config): 添加配置系统集成测试和官方启动帮助器
- 添加 ArchitectureConfigIntegrationTests 验证架构初始化流程中配置加载
- 实现 GameConfigBootstrap 收敛配置注册、加载与热重载生命周期管理
- 提供 GameConfigBootstrapOptions 配置启动约定选项对象
- 添加 GameConfigBootstrapTests 验证启动帮助器功能完整性
- 更新中文文档详述配置系统接入模板和最佳实践
- 提供 Architecture 推荐接入模板简化框架集成步骤
- 实现热重载支持和错误诊断机制提升开发体验
2026-04-06 18:41:05 +08:00
gewuyou
a76630ad16
Merge pull request #189 from GeWuYou/feat/config-system-integration
feat(config): 添加配置系统集成测试和文档
2026-04-06 17:58:42 +08:00
GeWuYou
975f556ab0 docs(config): 添加AI代理编码规范和配置系统集成测试
- 创建AGENTS.md文档定义AI代理编码行为规则
- 包含环境能力清单、注释规则、代码风格要求
- 定义测试要求、安全规则和文档规范
- 添加端到端集成测试验证生成配置消费者功能
- 实现跨域配置表加载和强类型访问验证
- 添加按域、表名和自定义谓词过滤注册支持
- 提供完整的测试验证命令和执行期望说明
2026-04-06 17:24:04 +08:00
GeWuYou
92eb365dc7 feat(config): 添加配置系统集成测试和文档
- 添加 ArchitectureConfigIntegrationTests 验证架构初始化流程中配置加载
- 添加 GeneratedConfigConsumerIntegrationTests 测试消费者项目配置绑定功能
- 添加完整的游戏内容配置系统中文文档
- 添加生成配置目录和注册选项支持批量表注册与筛选
- 实现配置架构集成模板和热重载功能
- 添加跨表引用校验和运行时诊断功能
- 实现 VS Code 工具支持配置浏览和表单编辑
- 添加查询辅助方法支持按字段快速检索配置数据
2026-04-06 16:38:42 +08:00
gewuyou
e9e04d9792
Merge pull request #188 from GeWuYou/feat/game-content-config-system
docs(config): 添加游戏内容配置系统文档和集成测试
2026-04-06 16:03:56 +08:00
GeWuYou
4f966f9f50 docs(game): 添加游戏内容配置系统文档和生成器功能
- 添加了 AI-First 配置系统完整文档,涵盖 YAML 配置、JSON Schema 结构、目录组织
- 实现了 Source Generator 自动生成配置类型、表包装、单表注册和访问辅助代码
- 提供了项目级聚合注册目录和配置浏览、校验、表单编辑等工具支持
- 集成了运行时只读查询、热重载、跨表引用校验等核心功能
- 添加了 VS Code 插件支持配置浏览、raw 编辑、schema 打开和递归校验功能
2026-04-06 15:55:58 +08:00
GeWuYou
83c0c57f10 docs(config): 添加游戏内容配置系统文档和集成测试
- 新增架构配置集成测试验证 YAML 配置加载功能
- 添加消费者项目配置生成器集成测试
- 创建完整的游戏内容配置系统中文文档
- 文档涵盖目录结构、Schema 示例、接入模板和运行时校验行为
- 提供 Architecture 推荐接入模板和热重载配置说明
- 完善 VS Code 工具功能介绍和当前限制说明
2026-04-06 15:17:33 +08:00
gewuyou
f0064e31aa
Merge pull request #187 from GeWuYou/feat/data-repository-persistence
docs(data): 添加数据与存档系统文档并实现数据仓库功能
2026-04-06 13:01:31 +08:00
GeWuYou
60526a8a98 docs(game): 添加数据与存档系统文档和持久化测试
- 新增数据与存档系统完整文档,包含核心概念、基本用法和高级功能
- 实现文件存储、槽位存档仓库和统一设置仓库的持久化行为测试
- 覆盖存档迁移、备份恢复、批量操作等关键功能的测试用例
- 添加数据版本控制和自动备份机制的详细说明
- 提供完整的 API 接口文档和使用示例代码
2026-04-06 12:52:06 +08:00
gewuyou
77f67c8a9c
Merge pull request #186 from GeWuYou/feat/add-game-content-config-with-source-generator
docs(config): 添加游戏内容配置系统文档和集成测试
2026-04-06 12:40:32 +08:00
GeWuYou
7fad6772e0 feat(generator): 添加配置架构集成测试和JSON模式配置生成器
- 添加 ArchitectureConfigIntegrationTests 测试验证配置注册表初始化功能
- 实现 SchemaConfigGenerator 源代码生成器解析JSON schema文件
- 生成配置类型类、配置表包装器和运行时绑定辅助代码
- 支持嵌套对象、对象数组、标量数组的类型安全访问
- 提供强类型的配置表查询方法如 FindByProperty 等
- 实现跨表引用元数据生成和验证机制
2026-04-06 12:25:11 +08:00
GeWuYou
7114a76377 docs(data): 添加数据与存档系统文档并实现数据仓库功能
- 新增数据与存档系统详细文档,涵盖核心概念和使用方法
- 实现 DataRepository 类提供统一数据持久化接口
- 添加 DataRepositoryOptions 配置选项支持备份和事件功能
- 实现完整的数据仓库测试用例验证持久化行为
- 支持多槽位存档管理和版本化数据迁移功能
- 提供批量数据操作和事件通知机制
- 实现自动备份功能防止数据丢失
- 支持聚合设置仓库统一管理多个配置项
2026-04-06 12:21:28 +08:00
GeWuYou
2b30e859e9 docs(config): 添加游戏内容配置系统文档和集成测试
- 新增游戏内容配置系统完整文档,包含 YAML 配置、JSON Schema 结构描述
- 添加推荐目录结构和配置示例,支持怪物、物品、技能等静态内容管理
- 实现 Source Generator 自动生成配置类型、表包装和注册访问辅助功能
- 集成 VS Code 插件提供配置浏览、raw 编辑、schema 打开和校验功能
- 添加生成查询辅助,为顶层标量字段生成 FindBy* 与 TryFindFirstBy* 方法
- 实现开发期热重载功能,支持配置文件修改后自动刷新运行时表
- 添加跨表引用校验,支持 x-gframework-ref-table 声明的引用关系检查
- 新增集成测试验证生成器自动拾取 schema 并支持强类型访问入口
- 添加 IsExternalInit 类型支持低版本 .NET 框架的 init-only setter 功能
2026-04-06 11:42:34 +08:00
gewuyou
fb3bf49a12
Merge pull request #185 from GeWuYou/feat/game-save-data-system
feat(game): 添加数据与存档系统核心功能
2026-04-06 11:39:17 +08:00
GeWuYou
25e4965817 feat(game): 添加存档仓库实现和持久化测试
- 实现基于槽位的存档仓库功能,支持存档的保存、加载、删除和列举操作
- 添加存档版本迁移机制,支持自动升级旧版本存档数据
- 实现文件存储和统一设置仓库的基础持久化功能
- 添加完整的单元测试覆盖存档仓库的各种使用场景
- 创建测试工具类和测试数据模型用于验证持久化行为
- 添加项目AI代理行为规范文档,确保代码质量和一致性
2026-04-06 11:33:35 +08:00
GeWuYou
7ad80f54d3 feat(game): 添加数据与存档系统核心功能
- 实现 ISaveRepository<T> 接口提供存档管理功能
- 添加 SaveRepository<T> 实现类支持槽位存档管理
- 实现数据版本迁移机制支持存档版本升级
- 添加完整的存档测试用例验证功能正确性
- 创建数据与存档系统中文文档说明使用方法
- 移除项目中不再需要的本地计划文件夹配置
2026-04-06 11:09:53 +08:00
gewuyou
397611d47c
Merge pull request #184 from GeWuYou/docs/godot-architecture-and-patterns
docs(godot): add architecture integration and design pattern docs
2026-04-06 10:19:13 +08:00
GeWuYou
aab0995f49 docs(godot): add architecture integration and design pattern docs
- Add documentation for Godot architecture integration, including AbstractArchitecture,
  ArchitectureAnchor, and IGodotModule
- Describe basic usage: architecture creation, initialization, and anchor usage
- Provide advanced examples: module system, lifecycle hooks, and hot-reload support
- Document ContextAware usage for accessing architecture within nodes
- Include best practices for multi-architecture setups and common pitfalls
- Add architecture design patterns guide (MVC, MVVM, Command, etc.)
- Cover event-driven, DI, and service locator patterns with examples

Note:
- Normalize line endings to LF to fix inconsistent diffs caused by CRLF/LF mismatch
- No functional code changes
2026-04-06 10:12:59 +08:00
gewuyou
c62893d0c2
Merge pull request #183 from GeWuYou/chore/add-editorconfig-gitattributes
chore(config): 添加编辑器配置和 Git 属性设置
2026-04-06 09:47:02 +08:00
GeWuYou
5a1232274e chore(config): 添加编辑器配置和 Git 属性设置
- 配置 .editorconfig 文件统一代码风格
- 设置 UTF-8 编码和 LF 行尾
- 为解决方案文件和批处理脚本配置 CRLF 行尾
- 配置 .gitattributes 统一文本文件行尾规范化
- 设置二进制文件不进行行尾转换
- 指定各类源码文件使用 LF 行尾
2026-04-06 09:41:42 +08:00
gewuyou
e513ecc284
Merge pull request #174 from GeWuYou/feat/architecture-base-and-bootstrapper
Feat/architecture base and bootstrapper
2026-04-06 08:44:14 +08:00
GeWuYou
e3ea364b29 docs(core): 添加架构详解和核心框架文档
- 新增 Architecture 架构详解文档,涵盖设计目标、核心组件、生命周期管理
- 添加 GFramework.Core 核心框架文档,包含五层架构、快速开始、组件联动等内容
- 新增架构组件激活器实现,支持类型注册路径的实例创建能力
- 添加架构销毁器,统一处理可销毁对象的登记与释放
- 实现架构生命周期管理器,负责阶段转换和组件初始化销毁
2026-04-06 08:33:56 +08:00
gewuyou
6f17e2c437
Merge pull request #175 from GeWuYou/feat/ai-first-config-system
Feat/ai first config system
2026-04-06 07:59:48 +08:00
GeWuYou
7da35c00b2 feat(config): 添加基于文件目录的YAML配置加载器
- 实现YamlConfigLoader类,支持从文件目录加载YAML配置
- 提供RegisterTable方法注册配置表定义,支持schema校验
- 添加LoadAsync异步加载功能,支持批量加载配置表
- 实现EnableHotReload方法,支持开发期配置热重载
- 添加跨表引用校验功能,确保配置依赖关系正确性
- 支持YAML文件和YML文件格式,自动识别文件扩展名
- 提供配置表主键提取器和比较器自定义功能
- 实现文件变更监听和防抖机制,避免频繁重载
- 支持配置目录和schema文件路径的灵活配置
- 提供详细的加载异常信息和诊断支持
2026-04-06 07:53:46 +08:00
GeWuYou
a416e093ee feat(config): 添加基于YAML的配置加载器实现
- 实现YamlConfigLoader类,支持从文件目录加载YAML配置
- 提供RegisterTable方法支持配置表定义注册
- 实现热重载功能,监听文件变更并自动重新加载
- 支持schema校验,拒绝未知字段和类型错误
- 实现跨表引用校验,确保配置一致性
- 添加YamlConfigTableRegistrationOptions选项类
- 支持防抖机制避免频繁重载
- 提供详细的错误诊断信息
2026-04-06 07:37:59 +08:00
gewuyou
e67cfd4808
Merge pull request #176 from GeWuYou/feat/coroutine-core-and-godot-integration
Feat/coroutine core and godot integration
2026-04-06 07:23:05 +08:00
GeWuYou
d21370787b test(godot): 添加Godot测试项目并配置CI流水线
- 在CI工作流中添加GFramework.Godot.Tests项目的测试执行
- 配置dotnet test命令运行Godot测试套件
- 添加TRX格式的日志输出和测试结果目录设置
- 更新Godot模块的全局引用配置
- 在Timing.cs中添加必要的命名空间引用
- 在GodotTimeSourceTests.cs中添加NUnit框架引用
2026-04-06 00:37:32 +08:00
GeWuYou
2053451185 feat(coroutine): 添加协程调度器和相关功能实现
- 实现了 CoroutineScheduler 类,支持协程的运行、暂停、恢复和终止管理
- 添加了协程槽位管理机制 CoroutineSlot,用于跟踪单个协程状态
- 实现了协程的优先级、标签和分组功能,支持批量操作
- 集成了等待指令系统,包括 WaitForSecondsRealtime、WaitForFixedUpdate 等
- 添加了协程统计功能和异常处理机制
- 实现了 Godot 平台的时间源适配器 GodotTimeSource
- 创建了协程调度器的高级功能测试用例
- 添加了 Timing 节点用于在 Godot 引擎中管理协程生命周期
2026-04-06 00:33:37 +08:00
gewuyou
c4f5d502b3
Merge pull request #182 from GeWuYou/chore/ci-github-checks-config
chore(ci): 配置 GitHub Checks 工具
2026-04-05 23:30:21 +08:00
GeWuYou
621bba9b09 chore(ci): 配置 GitHub Checks 工具
- 启用 GitHub Checks 功能
- 设置超时时间为 90000 毫秒
- 添加 reviews 配置项
- 配置 github-checks 工具选项
2026-04-05 23:26:37 +08:00
gewuyou
dcb9aa229a
Merge pull request #180 from GeWuYou/feat/data-unified-settings-repository
Feat/data unified settings repository
2026-04-05 23:12:29 +08:00
GeWuYou
d2533de3be test(serializer): 添加JSON序列化器单元测试并优化反序列化异常处理
- 添加了完整的JsonSerializer单元测试覆盖序列化和反序列化场景
- 优化了反序列化方法中的异常处理逻辑,改进错误信息
- 修改了DeserializeCore方法中未使用的参数命名
- 添加了对各种边界情况的测试验证,包括无效JSON和空值处理
2026-04-05 22:58:45 +08:00
GeWuYou
3d86cdb093 docs(setting): 添加设置系统文档并实现JSON序列化器
- 新增设置系统详细文档,包含核心概念、接口定义和基本用法
- 实现JSON序列化器支持对象序列化和反序列化功能
- 添加序列化器单元测试验证序列化功能正确性
- 提供自定义转换器支持和错误处理机制
2026-04-05 22:26:07 +08:00
GeWuYou
a5d18e4eca docs(game): 添加数据与存档系统及GFramework.Game模块文档
- 创建数据与存档系统文档,介绍IData、IDataRepository、ISaveRepository等核心接口
- 添加基本用法示例,包括数据类型定义、存档仓库使用和配置注册
- 提供高级用法指南,涵盖自动保存、数据版本迁移和批量数据操作
- 实现存档备份和恢复功能示例
- 整理数据与存档系统最佳实践和常见问题解答
- 创建GFramework.Game模块总览文档,介绍游戏特定功能抽象
- 添加架构模块系统说明,包含AbstractModule基础使用和复杂模块示例
- 实现资产管理章节,介绍AbstractAssetCatalogUtility和资产映射系统
- 提供存储系统详解,包括ScopedStorage分层存储和自定义存储实现
- 添加序列化系统文档,涵盖JsonSerializer使用和自定义转换器
- 整理完整的游戏数据管理系统使用示例
2026-04-05 21:40:54 +08:00
GeWuYou
21b4c826d4 feat(data): 添加统一设置数据仓库和JSON序列化器实现
- 实现UnifiedSettingsDataRepository统一管理所有设置数据
- 添加JsonSerializer基于Newtonsoft.Json的序列化功能
- 创建SettingsModel管理设置数据生命周期和迁移
- 添加完整的单元测试验证持久化功能
- 实现数据类型注册和批量保存加载功能
- 支持设置数据的版本迁移和事件通知机制
2026-04-05 21:40:28 +08:00
gewuyou
46ea6f1ffd
Merge pull request #179 from GeWuYou/feat/ci-publish-workflow-nuget-github
feat(workflow): 添加许可证合规检查工作流并优化发布流程
2026-04-05 20:54:45 +08:00
GeWuYou
cd210da167 feat(workflow): 添加许可证合规检查工作流并优化发布流程
- 新增 license-compliance.yml 工作流,集成 Feluda 许可证扫描器
- 实现许可证合规性检查、SBOM 生成和验证功能
- 移除 publish.yml 中的许可证合规相关步骤
- 更新发布流程以分离许可证合规和包发布职责
- 添加并发控制配置避免重复执行
- 简化 GitHub Release 创建流程,移除合规文件附件逻辑
2026-04-05 20:42:00 +08:00
gewuyou
152da3fe3f
Merge pull request #177 from GeWuYou/feat/ci-publish-workflow-nuget-github
feat(ci): 添加发布工作流支持NuGet和GitHub Packages
2026-04-05 20:28:46 +08:00
GeWuYou
1e092c07d3 chore(ci): 更新发布工作流配置
- 添加 .NET 10.0 环境设置步骤
- 将密码参数从 secrets.GITHUB_TOKEN 替换为 github.token
- 将环境变量中的 secrets.GITHUB_TOKEN 替换为 github.token
2026-04-05 20:23:16 +08:00
gewuyou
658a36fdd0
Merge pull request #178 from GeWuYou/feat/godot-localization-settings
Feat/godot localization settings
2026-04-05 20:21:10 +08:00
GeWuYou
e84af1512d feat(setting): 添加本地化设置测试并优化依赖注入
- 在 GodotLocalizationSettingsTests 中添加核心本地化接口引用
- 为 GodotLocalizationSettings 添加架构依赖项
- 配置 Godot 全局命名空间以便更简单的 API 访问
- 更新测试文件中的设置数据抽象层依赖项
- 简化 Godot 项目中的全局 using 指令结构
2026-04-05 20:08:28 +08:00
GeWuYou
d588372cff docs(godot): 添加 Godot 设置模块文档
- 新增 Godot 设置模块概述和核心类说明
- 添加音频设置系统详细文档包括 AudioBusMap 和 GodotAudioSettings
- 添加图形设置系统文档包括 GodotGraphicsSettings 实现
- 添加本地化设置系统文档包括 LocalizationMap 和 GodotLocalizationSettings
- 提供完整的架构设计图和使用示例代码
- 添加 API 详细说明和技术实现细节
- 包含最佳实践、性能考虑和故障排除指南
2026-04-05 19:54:09 +08:00
GeWuYou
41dd759379 feat(godot): 添加Godot本地化设置功能
- 新增LocalizationMap类实现用户语言到Godot locale和框架语言码的映射
- 创建GodotLocalizationSettings类同步应用本地化设置到Godot引擎和GFramework框架
- 添加测试项目配置文件GFramework.Game.Tests.csproj
- 实现本地化设置的单元测试验证语言同步功能
2026-04-05 19:54:02 +08:00
GeWuYou
46d8a7d4e2 chore(workflow): 移除发布状态检查
- 移除了 NuGet.org 和 GitHub Packages 发布状态检查
- 简化了发布工作流的输出信息
- 更新了合规性检查部分的格式
2026-04-05 18:51:47 +08:00
GeWuYou
1f34928785 feat(ci): 添加发布工作流支持NuGet和GitHub Packages
- 实现自动构建和打包功能,支持标签触发
- 集成NuGet.org和GitHub Packages双重发布机制
- 添加许可证合规性检查和SBOM文件生成
- 实现GitHub Release自动创建和资产上传
- 配置OIDC身份验证和临时API密钥管理
- 添加包重复上传检测和跳过功能
2026-04-05 18:49:08 +08:00
GeWuYou
6cac882fb4 refactor(coroutine): 简化协程调度器中的执行阶段访问
- 移除私有字段 _executionStage,直接使用构造函数参数 executionStage
- 更新 ExecutionStage 属性实现,直接返回构造函数参数
- 修改协程元数据设置时使用参数而非私有字段
- 调整等待指令判断逻辑,直接比较参数值
2026-04-05 15:21:51 +08:00
GeWuYou
ccffb121b3 fix(coroutine): 修复协程完成状态处理中的异常情况
- 为 CoroutineCompletionStatus 枚举添加默认分支处理
- 抛出 ArgumentOutOfRangeException 以处理不支持的协程完成状态
- 防止因未知状态值导致的运行时错误
- 提高协程调度器的健壮性和错误处理能力
2026-04-05 15:18:29 +08:00
GeWuYou
03346fbfe7 docs(coroutine): 更新协程系统文档
- 重构 Core 协程系统文档,优化概述和核心概念说明
- 新增 Godot 协程系统集成文档
- 添加协程系统使用教程
- 更新等待指令说明,包括时间、条件、Task 和事件等待
- 补充协程控制、快照查询和生命周期管理相关内容
- 修正代码示例和 API 使用说明
2026-04-05 15:06:53 +08:00
GeWuYou
1c41c57d72 feat(coroutine): 添加协程系统核心组件与Godot集成
- 实现CoroutineMetadata类存储协程元数据信息
- 创建CoroutineScheduler协程调度器管理协程生命周期
- 添加CoroutineSlot类管理单个协程执行状态
- 实现GodotTimeSource时间源支持缩放和真实时间
- 添加Timing类提供Godot协程管理功能
- 实现CoroutineNodeExtensions扩展方法支持节点生命周期管理
- 支持协程分组、标签、优先级等功能
- 提供协程暂停、恢复、终止等控制接口
- 实现协程统计和快照功能
- 添加等待指令处理机制支持多种等待类型
2026-04-05 15:06:35 +08:00
GeWuYou
34a333a0c1 fix(generator): 解决重复引用路径生成成员名称不稳定问题
- 使用 TryGetValue 方法替代 ContainsKey 检查避免多次访问字典
- 重用跟踪的重复计数确保重复引用路径保持生成的成员名称稳定
- 修复重复计数递增逻辑确保正确的序号生成
- 简化重复计数器的使用方式提高代码可读性
- 移除文件末尾多余空行保持代码整洁
2026-04-05 13:44:31 +08:00
GeWuYou
8c9fbb39b2 feat(config): 添加YAML配置加载器依赖注入支持
- 引入GFramework.Core.Abstractions.Events命名空间
- 添加YamlDotNet反序列化库相关引用
- 注册配置抽象层依赖到YAML配置加载器
- 更新测试文件中的命名空间引用以匹配新架构
2026-04-05 13:34:50 +08:00
GeWuYou
4ad89b10b2 chore(dependencies): 添加 Microsoft.Extensions.DependencyInjection 引用
- 在 ArchitectureComponentRegistry.cs 中添加 Microsoft.Extensions.DependencyInjection 引用
- 在 ArchitectureComponentRegistryBehaviorTests.cs 中添加 Microsoft.Extensions.DependencyInjection 引用
2026-04-05 13:28:32 +08:00
GeWuYou
8f6c453c1a refactor(architectures): 添加依赖注入服务引用
- 在 Architecture.cs 中引入 Microsoft.Extensions.DependencyInjection 命名空间
- 在 ArchitectureComponentActivator.cs 中引入 Microsoft.Extensions.DependencyInjection 命名空间
- 为架构组件激活器增加依赖注入支持
- 统一架构层的服务注册机制
2026-04-05 13:18:42 +08:00
GeWuYou
f7e05d19cc docs(core): 添加核心架构与CQRS模式详细文档
- 新增Architecture架构详解文档,包含设计目标、生命周期管理和组件注册等内容
- 新增CQRS与Mediator模式文档,详细介绍命令查询职责分离的实现方式
- 新增核心框架概述文档,提供完整的架构图和快速入门指南
- 完善架构组件联动说明,涵盖初始化、命令执行和事件传播流程
- 补充最佳实践指导,明确分层职责和通信方式选择原则
2026-04-05 11:02:00 +08:00
GeWuYou
bb2b3a0c60 refactor(arch): 重构架构组件注册机制
- 将组件注册逻辑提取到独立的 ArchitectureComponentRegistry 类中
- 实现 ArchitectureComponentActivator 来支持注册阶段实例化组件
- 更新系统和模型注册文档说明,明确在注册阶段创建实例并参与初始化
- 修复类型注册在架构准备就绪后的行为一致性问题
- 添加完整的组件注册行为测试覆盖实例注册、工厂注册和生命周期管理
- 优化依赖注入解析机制,支持构造函数依赖和单例缓存
2026-04-05 11:01:50 +08:00
GeWuYou
01dc1523a5 feat(architecture): 添加架构核心组件和依赖注入容器实现
- 实现 Architecture 基类,提供系统、模型、工具等组件的注册与管理功能
- 添加 ArchitectureComponentRegistry 组件注册管理器,负责管理系统、模型、工具的注册
- 实现 ArchitectureLifecycle 生命周期管理器,管理架构阶段转换和组件初始化
- 添加 ArchitectureModules 模块管理器,负责架构模块安装和中介行为注册
- 实现 MicrosoftDiContainer 依赖注入容器,包装 Microsoft.Extensions.DependencyInjection
- 提供完整的组件生命周期管理,支持同步和异步初始化模式
- 添加架构阶段管理和组件注册验证机制
2026-04-05 10:52:21 +08:00
GeWuYou
16fae83f70 feat(architectures): 添加架构基类和初始化编排功能
- 实现 Architecture 基类,提供系统、模型、工具等组件的注册与管理功能
- 添加 ArchitectureBootstrapper 协调器,负责初始化期间的基础设施准备工作
- 实现生命周期管理、组件注册管理和模块管理功能
- 提供同步和异步初始化方法,支持不同场景下的架构初始化需求
- 添加架构上下文绑定和 IOC 容器冻结功能,确保运行时依赖图稳定
- 实现架构生命周期钩子注册和阶段变更事件功能
- 添加完整的单元测试验证初始化编排流程的正确性
2026-04-05 10:03:48 +08:00
gewuyou
a22e522cf9
Merge pull request #173 from GeWuYou/refactor/analyzer-method-resolution
refactor(analyzer): 优化上下文注册分析器中的方法解析逻辑
2026-04-05 10:03:20 +08:00
GeWuYou
37049be600 refactor(analyzer): 重构上下文注册分析器中的辅助方法解析逻辑
- 修改 TryResolveArchitectureHelperMethod 和 TryResolveModuleHelperMethod 方法参数
- 添加新的 TryResolveHelperMethod 通用方法处理辅助方法调用解析
- 实现对显式 base 调用的特殊处理以保留基类语义
- 添加 IsExplicitBaseInvocation 方法检测显式基础调用
- 更新测试文件验证分析器核心行为
2026-04-05 09:14:15 +08:00
GeWuYou
d2ecd14ca8 refactor(analyzer): 优化上下文注册分析器中的方法解析逻辑
- 移除对已具备源码方法的特殊处理逻辑
- 统一使用 ResolveHierarchyMethodImplementation 进行方法解析
- 优先解析到当前具体架构类型上的 override 方法
- 为模块安装路径添加一致的 override 解析逻辑
- 添加完整的单元测试验证分析器行为
2026-04-05 00:25:14 +08:00
gewuyou
9239e51644
Merge pull request #172 from GeWuYou/feat/gframework-analysis
Feat/gframework analysis
2026-04-04 23:47:12 +08:00
GeWuYou
7901a69028 docs(generator): 更新上下文获取生成器文档中的措辞
- 将“强推断”更正为“强行推断”以提高表述准确性
2026-04-04 23:42:05 +08:00
GeWuYou
8eaf837327 refactor(analyzer): 优化上下文注册分析器中的语法匹配逻辑
- 使用属性模式匹配替换条件判断语句
- 简化了方法声明语法的空值检查逻辑
- 优化了构造函数声明语法的表达式体检查
- 提高了代码可读性和维护性
- 减少了冗余的语法树遍历操作
2026-04-03 23:50:09 +08:00
GeWuYou
c5a33ed571 docs(source-generators): 添加源代码生成器文档和测试项目配置
- 新增 Context Get 注入生成器详细文档,包含使用示例和诊断信息
- 添加源代码生成器总览文档,涵盖 Log、Config Schema、ContextAware 等功能
- 配置测试项目 GFramework.SourceGenerators.Tests 的项目文件和依赖
- 生成器诊断规则新增至 Unshipped 分析器发布跟踪文件
2026-04-03 23:48:24 +08:00
GeWuYou
7fda40de42 feat(game): 添加游戏内容配置系统实现
- 实现基于 YAML 的配置加载器支持
- 添加 JSON Schema 结构验证功能
- 实现一对象一文件的目录组织方式
- 提供运行时只读查询接口
- 添加 Source Generator 生成配置类型和表包装
- 实现 VS Code 插件配置浏览和编辑功能
- 添加开发期热重载支持
- 实现跨表引用校验机制
- 提供完整的配置系统文档说明
2026-04-03 22:58:05 +08:00
GeWuYou
ecf2309e11 docs(game): 添加游戏内容配置系统文档
- 介绍面向静态游戏内容的 AI-First 配表方案
- 说明配置系统管理怪物、物品、技能、任务等静态内容数据
- 描述 YAML 作为配置源文件和 JSON Schema 作为结构描述的支持
- 展示推荐的目录结构和 Schema 示例
- 提供完整的接入模板包括 csproj 配置、启动引导和运行时读取
- 详述运行时校验行为和跨表引用机制
- 说明开发期热重载功能和 VS Code 工具集成
- 列出当前限制和独立 Config Studio 评估结论
2026-04-03 22:01:10 +08:00
GeWuYou
ec4e2edeab feat(config): 添加AI-First游戏内容配置系统
- 实现YAML配置文件与JSON Schema结构描述支持
- 提供一对象一文件的目录组织方式
- 集成Source Generator生成配置类型和表包装代码
- 添加VS Code插件支持配置浏览和表单编辑功能
- 实现运行时只读查询和开发期热重载机制
- 支持跨表引用校验和轻量元数据复用
- 添加配置加载异常诊断和批量编辑入口
2026-04-03 21:17:39 +08:00
GeWuYou
61cc7eaa6d feat(config): 添加AI-First配置系统及文档
- 引入YAML配置源文件支持
- 实现JSON Schema结构描述功能
- 提供一对象一文件的目录组织方式
- 添加运行时只读查询能力
- 实现Source Generator生成配置类型和表包装
- 集成VS Code插件提供配置浏览和编辑功能
- 添加开发期热重载支持
- 提供跨表引用校验机制
- 创建配置生成器约定和绑定辅助类
- 添加详细的中文文档说明
- 实现集成测试验证生成器功能
2026-04-03 19:10:23 +08:00
gewuyou
ec5153f452
Merge pull request #170 from GeWuYou/test/game-integration-tests
Test/game integration tests
2026-04-03 17:47:37 +08:00
GeWuYou
b4e026a70d feat(config): 添加YAML配置文件的JSON Schema校验功能
- 实现了YAML配置文件与JSON Schema的运行时校验能力
- 支持嵌套对象、对象数组、标量数组的递归校验
- 提供跨表引用的约束检查与引用采集功能
- 支持enum枚举值与数值范围约束验证
- 实现详细的错误诊断信息与字段路径定位
- 包含完整的异常处理与错误报告机制
2026-04-03 17:08:24 +08:00
GeWuYou
0e538738df feat(game): 添加游戏内容配置系统和YAML配置校验器
- 实现面向静态游戏内容的AI-First配置方案,支持怪物、物品、技能、任务等数据管理
- 集成YAML作为配置源文件格式,JSON Schema作为结构描述标准
- 提供一对象一文件的目录组织结构和运行时只读查询功能
- 实现Source Generator生成配置类型、表包装和注册/访问辅助代码
- 添加VS Code插件支持配置浏览、raw编辑、schema打开和递归校验功能
- 创建YamlConfigSchemaValidator类提供YAML与JSON Schema的运行时校验能力
- 支持嵌套对象、对象数组、标量数组的递归校验和深层约束检查
- 实现跨表引用验证和配置热重载功能
- 提供详细的错误诊断信息和开发期工具链支持
2026-04-03 16:32:14 +08:00
GeWuYou
f63714f1e1 test(game): 添加游戏模块集成测试项目
- 创建了 GFramework.Game.Tests 测试项目配置文件
- 添加了 Microsoft.NET.Test.Sdk、Moq、NUnit 等测试依赖包
- 配置了项目引用包括 GFramework.Game、GFramework.Core 和源代码生成器
- 实现了自动生成配置消费者集成测试验证功能
- 添加了怪物配置模式定义用于端到端测试验证
- 创建了源代码生成器目标文件实现自动化配置收集
- 验证了消费者项目自动拾取 schema 并生成绑定的功能
2026-04-03 15:50:45 +08:00
gewuyou
14ed42cabe
Merge pull request #169 from GeWuYou/feat/game-content-config
feat(game): 添加游戏内容配置系统
2026-04-03 12:44:12 +08:00
GeWuYou
b1e9d0a345 feat(config): 添加基于YAML的配置加载器和架构验证器
- 实现YamlConfigLoader类,支持从文件目录加载YAML配置
- 添加热重载功能,监听配置文件变更并自动重新加载
- 实现YAML配置架构验证器,支持JSON Schema校验
- 添加跨表引用验证机制,确保配置依赖关系正确
- 支持配置表注册和类型安全的配置项访问
- 实现防抖机制避免频繁的文件变更触发
- 提供详细的错误诊断信息和异常处理
2026-04-03 12:31:58 +08:00
GeWuYou
081a65f740 feat(config): 添加YAML配置加载器依赖注入支持
- 引入GFramework.Core.Abstractions.Events命名空间
- 添加YamlDotNet反序列化库依赖
- 注册YAML配置加载器到依赖注入容器
- 更新单元测试中的命名空间引用
- 实现YAML配置文件的解析功能
- 添加配置加载过程中的事件发布机制
2026-04-03 12:21:03 +08:00
GeWuYou
12ce31f82a feat(game): 添加游戏内容配置系统
- 实现基于 YAML 的配置文件加载功能
- 集成 JSON Schema 结构验证和类型检查
- 提供一对象一文件的目录组织方式
- 支持运行时只读查询和类型安全访问
- 实现 Source Generator 生成配置类型和表包装
- 添加 VS Code 插件提供配置浏览和编辑功能
- 支持跨表引用校验和依赖关系管理
- 实现开发期热重载功能,支持配置变更自动刷新
- 提供完整的配置加载、验证、注册和访问接口
2026-04-03 12:00:32 +08:00
gewuyou
a92e514ffe
Merge pull request #168 from GeWuYou/feat/ai-first-config-system
feat(config): 添加AI-First配置系统及源生成器
2026-04-03 10:14:34 +08:00
GeWuYou
76479eb9f8 refactor(GFramework.SourceGenerators): 添加全局命名空间引用以支持代码生成
- 引入 System.Globalization 用于区域设置相关操作
- 添加 System.IO 支持文件输入输出功能
- 集成 System.Text 提供文本处理能力
- 包含 System.Text.Json 用于 JSON 序列化反序列化
2026-04-03 10:04:18 +08:00
GeWuYou
3bca6390ce feat(config): 添加JSON schema配置生成器
- 实现了根据JSON schema自动生成配置类型和配置表包装的功能
- 支持嵌套对象、对象数组、标量数组的类型生成
- 提供可映射的default/enum/ref-table元数据支持
- 生成强类型的配置表包装器和运行时绑定辅助类
- 实现了完整的schema解析和C#代码生成功能
- 添加了详细的XML文档注释和错误诊断功能
2026-04-03 09:53:51 +08:00
GeWuYou
48fd8a22bb feat(config): 添加AI-First配置系统及源生成器
- 实现YAML配置文件加载和JSON Schema校验功能
- 提供Source Generator自动生成配置类型和表包装类
- 添加VS Code插件支持配置浏览和表单编辑
- 支持跨表引用校验和开发期热重载功能
- 生成强类型的配置访问辅助方法和注册绑定
- 实现嵌套对象和对象数组的类型安全访问
2026-04-03 09:25:06 +08:00
gewuyou
eaa1e5dff4
Merge pull request #166 from GeWuYou/feat/config-content-system
Feat/config content system
2026-04-02 22:29:59 +08:00
GeWuYou
3c52c8c1ea feat(config): 添加配置验证和YAML解析功能
- 实现了配置模式解析器,支持递归对象/数组/标量树结构
- 添加了可编辑字段收集功能,支持标量和数组类型的批量编辑
- 集成了YAML解析器,支持嵌套对象、数组和注释提取
- 实现了配置验证诊断,支持中英文本地化错误消息
- 添加了表单更新应用功能,支持安全的嵌套对象编辑
- 实现了示例配置生成功能,包含模式描述作为YAML注释
- 提供了批量数组值解析和枚举值标准化工具函数
- 集成了多语言支持,包含中英文验证消息本地化
2026-04-02 22:22:46 +08:00
dependabot[bot]
ad13f58a45 Bump Godot.SourceGenerators from 4.6.1 to 4.6.2
---
updated-dependencies:
- dependency-name: Godot.SourceGenerators
  dependency-version: 4.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 22:01:42 +08:00
dependabot[bot]
14fb9f1fa1 Bump System.Text.Json from 8.0.5 to 8.0.6
---
updated-dependencies:
- dependency-name: System.Text.Json
  dependency-version: 8.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 22:01:25 +08:00
dependabot[bot]
c668dca7ba Bump GodotSharp and GodotSharpEditor
Bumps GodotSharp from 4.6.1 to 4.6.2
Bumps GodotSharpEditor from 4.6.1 to 4.6.2

---
updated-dependencies:
- dependency-name: GodotSharp
  dependency-version: 4.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: GodotSharpEditor
  dependency-version: 4.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 21:52:22 +08:00
GeWuYou
55602b16f2 chore(workflow): 激活 VS Code 扩展发布工作流配置
- 移除注释符号以启用工作流定义
- 恢复完整的 GitHub Actions 工作流配置
- 保留所有扩展版本发布和包管理功能
- 维持 Node.js 和 Bun 环境设置步骤
- 保持 VSIX 包生成和市场发布的完整流程
2026-04-02 21:42:46 +08:00
dependabot[bot]
093f01ed98 chore(deps): bump trufflesecurity/trufflehog from 3.94.1 to 3.94.2
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.94.1 to 3.94.2.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.94.1...v3.94.2)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.94.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 21:41:53 +08:00
dependabot[bot]
32e57eb1b9 Bump Meziantou.Analyzer from 3.0.27 to 3.0.43
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 21:40:45 +08:00
dependabot[bot]
4ae1b31d60 Bump Scriban from 7.0.5 to 7.0.6
---
updated-dependencies:
- dependency-name: Scriban
  dependency-version: 7.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 21:40:30 +08:00
GeWuYou
94f0f536ea feat(config): 添加游戏内容配置系统和VS Code工具
- 实现YAML配置源文件和JSON Schema结构描述
- 提供一对象一文件的目录组织方式
- 集成Source Generator生成配置类型和表包装
- 开发VS Code插件支持配置浏览和编辑功能
- 实现运行时只读查询和热重载机制
- 添加跨表引用校验和批量编辑入口
2026-04-02 21:29:07 +08:00
dependabot[bot]
3f26231c84 Bump Meziantou.Polyfill from 1.0.104 to 1.0.106
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.106
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.106
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 21:26:23 +08:00
GeWuYou
6df348fb4e feat(config-tool): 添加 VS Code 扩展实现配置文件管理功能
- 根据 VS Code 当前界面语言在英文和简体中文之间切换主要工具界面文本
- 实现配置验证消息的本地化支持,包括数组、标量、枚举等类型的错误提示
- 添加完整的 VS Code 扩展框架,支持配置文件浏览、验证和表单预览
- 实现批量编辑功能,支持对同一配置域内的多个 YAML 文件执行字段更新
- 集成诊断功能,在编辑器中显示配置验证错误和警告
- 提供树形视图展示配置目录结构和文件列表
2026-04-02 20:45:02 +08:00
gewuyou
3dbe7a979f
Merge pull request #158 from GeWuYou/feat/game-config
Feat/game config
2026-04-02 09:06:24 +08:00
GeWuYou
988d7f85fd docs(config): 添加配置系统文档和VS Code工具
- 更新GitHub工作流中工具路径配置
- 新增游戏内容配置系统详细文档
- 创建VS Code扩展包描述文件
- 添加VS Code扩展功能说明文档
2026-04-02 08:46:34 +08:00
GeWuYou
642f2641ec chore(ci): 禁用 VS Code 扩展发布工作流
- 注释掉整个 GitHub Actions 工作流配置文件
- 暂时停用扩展发布到 Visual Studio Marketplace 的功能
- 保留原始配置代码以备后续启用
2026-04-02 08:24:49 +08:00
GeWuYou
01616c745d feat(config-tool): 添加配置验证工具和相关功能
- 实现了配置模式解析器,支持嵌套对象和数组结构
- 添加了YAML解析和验证功能,支持语法检查和类型匹配
- 实现了批量编辑器,支持标量和标量数组属性的更新
- 添加了表单更新应用功能,可将更改写回YAML文件
- 提供了完整的单元测试覆盖核心功能验证
- 配置了项目依赖管理和忽略规则
- 添加了Apache 2.0许可证文件
2026-04-01 23:06:44 +08:00
GeWuYou
2d02c1efdd feat(core): 迁移项目基础配置和依赖
- 添加项目配置验证模块 configValidation.js
- 创建扩展功能模块 extension.js
- 添加配置验证测试文件 configValidation.test.js
- 配置 .gitignore 忽略规则
- 添加 LICENSE 许可证文件
- 创建 package.json 项目依赖配置
- 添加 README.md 项目说明文档
2026-04-01 23:05:48 +08:00
GeWuYou
9e3efa04c7 chore(vscode-config-extension): 更新发布者名称为大写格式
- 将 publisher 字段从 gewuyou 更改为 GeWuYou
- 保持其他配置信息不变
2026-04-01 23:00:03 +08:00
GeWuYou
4c6deb4097 feat(vscode-extension): 添加 GFramework 配置工具扩展
- 创建 VS Code 扩展用于浏览、验证和编辑 GFramework 项目的配置文件
- 实现配置文件浏览器视图和相关命令功能
- 添加 YAML 文件和匹配模式文件的打开功能
- 实现嵌套对象字段的轻量级表单预览功能
- 添加批量编辑配置域的功能
- 集成轻量级模式验证支持
- 创建 GitHub Actions 工作流用于打包和发布扩展
- 配置扩展的激活事件和菜单贡献点
- 设置工作区配置选项用于指定配置和模式路径
2026-04-01 22:58:47 +08:00
GeWuYou
38bd934779 feat(docs): 添加游戏内容配置系统文档和VSCode插件功能
- 新增游戏内容配置系统完整文档,介绍AI-First配表方案
- 实现YAML配置源文件和JSON Schema结构描述功能
- 添加运行时只读查询和Source Generator类型生成能力
- 集成VSCode插件提供配置浏览、校验和表单编辑功能
- 支持开发期热重载和跨表引用校验机制
- 提供批量编辑和嵌套对象安全表单入口
2026-04-01 21:35:53 +08:00
gewuyou
65a6e2c257
Merge pull request #157 from GeWuYou/feat/game-content-config-yaml-schema
feat(game): 添加游戏内容配置系统及YAML Schema校验器
2026-04-01 21:09:58 +08:00
GeWuYou
03580d6836 feat(game): 添加游戏内容配置系统及YAML Schema校验器
- 实现AI-First配表方案,支持怪物、物品、技能等静态内容管理
- 集成YAML配置源文件与JSON Schema结构描述功能
- 提供一对象一文件的目录组织方式和运行时只读查询能力
- 实现Source Generator生成配置类型和表包装类
- 集成VS Code插件提供配置浏览、raw编辑和递归校验功能
- 开发YamlConfigSchemaValidator实现JSON Schema子集校验
- 支持嵌套对象、对象数组、标量数组与深层enum引用约束校验
- 实现跨表引用检测和热重载时依赖表联动校验机制
2026-04-01 21:02:25 +08:00
gewuyou
965f20059f
Merge pull request #156 from GeWuYou/feat/config-management
Feat/config management
2026-04-01 12:54:45 +08:00
GeWuYou
c84f62897c refactor(config): 优化YAML配置模式验证器中的允许值检查逻辑
- 将传统的空值检查和计数判断替换为更简洁的模式匹配语法
- 使用集合表达式简化代码结构,提高可读性
- 保持原有的功能逻辑不变,仅优化代码风格
2026-04-01 12:47:31 +08:00
GeWuYou
ad87f72ca6 feat(game): 添加游戏内容配置系统
- 实现基于YAML的配置文件管理和JSON Schema校验功能
- 提供YamlConfigSchemaValidator用于运行时配置校验和跨表引用检查
- 添加完整的单元测试覆盖配置加载器的各种场景
- 支持热重载功能,开发期修改配置文件后自动刷新运行时表
- 集成Source Generator生成配置类型和表包装类
- 提供VS Code插件支持配置浏览、编辑和校验操作
2026-04-01 12:38:52 +08:00
GeWuYou
5b8099cd98 feat(game): 添加游戏内容配置系统和VS Code插件支持
- 实现基于YAML的配置源文件和JSON Schema结构验证
- 提供运行时只读查询和Source Generator代码生成
- 添加VS Code插件实现配置浏览、编辑和轻量校验功能
- 支持开发期热重载和跨表引用校验
- 实现批量编辑和表单预览功能
2026-04-01 10:18:34 +08:00
GeWuYou
15761c6677 feat(game): 添加基于YAML的游戏内容配置系统
- 实现YamlConfigLoader支持从YAML文件加载配置数据
- 提供ConfigRegistry用于统一管理命名的配置表
- 支持JSON Schema校验配置结构和类型匹配
- 实现跨表引用校验避免无效引用和缺失依赖
- 提供开发期热重载功能监听文件变更自动刷新
- 支持一对象一文件的目录组织方式
- 集成VS Code插件提供配置浏览和轻量校验
- 生成器支持从schema自动生成配置类型定义
- 文档说明配置系统的使用方法和推荐目录结构
2026-04-01 09:04:28 +08:00
GeWuYou
0c662ced2a feat(game): 添加游戏内容配置系统和VS Code插件支持
- 实现YAML配置文件管理和JSON Schema验证功能
- 提供运行时只读查询和Source Generator代码生成功能
- 开发VS Code插件实现配置浏览、校验和轻量表单编辑
- 支持开发期热重载和配置变更自动刷新机制
- 集成诊断功能提供配置文件错误提示和修复建议
2026-03-31 22:49:10 +08:00
GeWuYou
e8d0ea2daf feat(game): 添加游戏内容配置系统和VS Code扩展
- 引入基于YAML和JSON Schema的静态内容配置系统
- 实现运行时只读查询和Source Generator支持
- 提供VS Code扩展用于配置浏览、验证和轻量编辑
- 支持开发期热重载和跨表引用校验功能
- 包含完整的文档说明和工具链集成
2026-03-31 22:44:58 +08:00
GeWuYou
3332aaff7b feat(config): 添加YAML配置加载器及开发期热重载功能
- 实现YamlConfigLoader支持基于文件目录的YAML配置加载
- 添加EnableHotReload方法支持开发期配置文件变更自动重载
- 提供带schema校验的配置表注册功能
- 实现按表粒度的热重载机制及错误处理回调
- 添加配置文件变更监听和防抖处理
- 更新文档说明热重载使用方法和行为特性
- 移除未完成功能列表中的运行时热重载项
2026-03-31 22:39:39 +08:00
GeWuYou
ae9693e0ff refactor(config): 更新配置加载器依赖项
- 在YamlConfigLoader中添加YamlDotNet序列化库引用
- 移除YamlConfigSchemaValidator中的未使用引用
- 在全局引用中添加YAML处理相关库引用
- 优化配置模块的依赖管理和命名空间使用
2026-03-31 22:32:57 +08:00
GeWuYou
b87e511334 docs(game): 添加游戏模块完整文档
- 创建了 GFramework.Game 模块的全面文档
- 包含架构模块系统、资产管理、存储系统和序列化系统详解
- 提供了 AbstractModule、AbstractAssetCatalogUtility 等核心组件使用示例
- 添加了分层存储、加密存储和缓存存储的实现方案
- 集成了 JSON 序列化、自定义转换器和版本化数据管理
- 提供了完整的游戏数据管理系统和自动保存系统实现
- 修改了 VitePress 配置文件
2026-03-31 22:30:33 +08:00
gewuyou
a10cc5b6f0
Merge pull request #155 from GeWuYou/docs/add-vitepress-config-with-escape-plugin
docs(vitepress): 添加文档站点配置文件
2026-03-31 19:54:05 +08:00
GeWuYou
4c64db3c58 docs(vitepress): 添加文档站点配置文件
- 实现 safeGenericEscapePlugin 插件解决 Markdown 中泛型符号转义问题
- 配置 VitePress 文档站点基本信息包括标题、描述和基础路径
- 设置多语言支持和本地搜索功能的中文翻译
- 定义导航菜单结构包含入门指南、核心框架、ECS系统等模块
- 配置侧边栏按模块分组显示详细文档页面链接
- 添加社交媒体链接、页脚信息和主题切换等 UI 元素
- 设置代码块大小警告阈值以适应大量代码示例
2026-03-31 19:28:24 +08:00
gewuyou
783570bae0
Merge pull request #154 from GeWuYou/docs/source-generators-complete-documentation
feat(docs): 初始化 GFramework 文档站点配置
2026-03-31 18:41:56 +08:00
GeWuYou
24dc2bb9cf feat(docs): 初始化 GFramework 文档站点配置
- 添加 VitePress 配置文件,设置文档标题和描述
- 实现安全泛型转义插件,保护代码块和 HTML 标签
- 配置多语言支持,设置简体中文为默认语言
- 设置文档导航栏,包含入门指南、核心框架、ECS 等模块
- 配置侧边栏结构,按模块划分文档目录
- 添加本地搜索功能,配置中文翻译选项
- 设置 GitHub Pages 部署基础路径
- 配置社交链接和页脚信息
2026-03-31 18:37:11 +08:00
gewuyou
059d5a8f41
Merge pull request #153 from GeWuYou/docs/source-generators-complete-documentation
docs(source-generators): 添加源代码生成器完整文档
2026-03-31 17:26:20 +08:00
GeWuYou
38020c32a2 docs(source-generators): 添加源代码生成器完整文档
- 新增 GFramework.SourceGenerators 主文档,介绍编译时代码生成工具
- 详细说明 Log 属性生成器的使用方法和配置选项
- 完整描述 ContextAware 属性生成器的功能和测试场景配置
- 添加 GenerateEnumExtensions 属性生成器文档和使用示例
- 介绍 GetNode 生成器(Godot 专用)的节点获取功能
- 新增 BindNodeSignal 生成器文档,说明信号绑定与解绑机制
- 提供 Context Get 注入生成器的完整使用指南
- 添加诊断信息章节,涵盖所有生成器的错误提示和解决方案
- 包含性能优势对比和基准测试结果
- 提供多个完整使用示例,展示实际应用场景
- 整理最佳实践和常见问题解答
- 添加 BindNodeSignal 生成器专用文档,详细介绍其高级用法
2026-03-31 15:10:06 +08:00
gewuyou
ba45171924
Merge pull request #152 from GeWuYou/feat/bindnodesignal-generator
Feat/bindnodesignal generator
2026-03-31 12:15:54 +08:00
GeWuYou
693cad2adf refactor(generators): 统一添加必要的命名空间引用
- 在 BindNodeSignalDiagnostics.cs 中添加 Microsoft.CodeAnalysis 引用
- 在 BindNodeSignalGenerator.cs 中添加 Roslyn 相关命名空间引用
- 在 GetNodeGenerator.cs 中添加 Roslyn 相关命名空间引用
- 在 GlobalUsings.cs 中集中管理全局命名空间引用
- 在 ContextGetGenerator.cs 中添加字符串和扩展方法引用
- 在 CommonDiagnostics.cs 中添加诊断相关命名空间引用
- 在 Common 全局引用文件中统一管理 Microsoft.CodeAnalysis 引用
2026-03-31 12:09:47 +08:00
GeWuYou
6fa4580893 feat(generator): 添加 BindNodeSignal 和 GetNode 源代码生成器
- 实现 BindNodeSignalGenerator 用于生成节点信号绑定与解绑逻辑
- 实现 GetNodeGenerator 用于生成 Godot 节点获取注入逻辑
- 添加 BindNodeSignalDiagnostics 提供详细的诊断错误信息
- 集成到 AnalyzerReleases.Unshipped.md 追踪新的分析规则
- 支持 [BindNodeSignal] 属性的方法自动生成事件绑定代码
- 支持 [GetNode] 属性的字段自动生成节点获取代码
- 提供生命周期方法集成的智能提示和验证功能
2026-03-31 11:11:23 +08:00
GeWuYou
2dfd6e044f feat(Godot.SourceGenerators): 添加 BindNodeSignal 源代码生成器
- 实现 BindNodeSignalGenerator 源代码生成器,用于自动化节点信号绑定
- 添加完整的诊断系统,包含 11 种不同的错误和警告场景检测
- 生成对称的绑定和解绑方法,确保资源正确释放
- 支持一个处理方法通过多个特性绑定到多个节点事件
- 实现生命周期钩子调用检查,确保在 _Ready 和 _ExitTree 中正确调用生成的方法
- 提供详细的单元测试覆盖各种使用场景和边界条件
- 生成器与现有的 GetNode 声明完全兼容并可共存
- 包含命名冲突检测和构造参数验证等安全检查机制
2026-03-31 10:26:44 +08:00
GeWuYou
9cca190aff docs(generator): 添加源码生成器文档和分析器规则清单
- 新增 AnalyzerReleases.Unshipped.md 文件记录代码分析规则
- 添加 GF_Godot_GetNode 系列规则定义(001-006)
- 添加 GF_Godot_BindNodeSignal 系列规则定义(001-009)
- 创建 README.md 文件详述源码生成器使用方法
- 文档化 GetNode 和 BindNodeSignal 特性用法示例
- 说明 Godot 场景相关的编译期生成能力
2026-03-31 10:03:31 +08:00
GeWuYou
5b996d8618 feat(generator): 添加 BindNodeSignal 源生成器实现
- 实现 BindNodeSignalGenerator 源生成器,用于自动生成 Godot 节点事件绑定与解绑逻辑
- 添加 BindNodeSignalAttribute 特性,标记需要生成绑定逻辑的事件处理方法
- 实现完整的诊断系统,包括嵌套类型、静态方法、字段类型等错误检查
- 添加生命周期方法调用检查,在 _Ready 和 _ExitTree 中验证生成方法的调用
- 支持方法签名与事件委托的兼容性验证
- 实现单元测试覆盖各种使用场景和错误情况
2026-03-31 09:39:06 +08:00
GeWuYou
91f0375461 refactor(tests): 更新测试驱动程序依赖
- 添加 Microsoft.CodeAnalysis.CSharp 命名空间引用
- 优化代码结构以支持 C# 语法分析功能
- 提升测试驱动程序的编译器集成能力
2026-03-30 18:41:52 +08:00
GeWuYou
9972788c32 feat(vscode): 添加 GFramework 配置工具扩展
- 实现配置文件浏览器功能,支持工作区 config 目录下的 YAML 文件浏览
- 添加配置文件验证功能,支持基于 JSON Schema 的轻量级验证
- 提供表单预览界面,支持顶层标量字段的编辑功能
- 实现配置文件与匹配模式文件的快速打开功能
- 添加工作区设置选项,可自定义配置和模式目录路径
- 支持实时保存和验证反馈,集成 VSCode 诊断集合显示错误警告
2026-03-30 18:37:15 +08:00
GeWuYou
c9d2306295 feat(generator): 添加JSON schema配置代码生成功能
- 实现SchemaConfigGenerator源代码生成器
- 支持从JSON schema文件生成配置类型和表包装类
- 添加ConfigSchemaDiagnostics诊断系统
- 集成System.Text.Json包依赖
- 生成强类型的配置访问接口
- 支持多种数据类型包括整数、浮点数、布尔值、字符串和数组
- 实现id字段作为表主键的约束验证
- 添加完整的单元测试和快照验证
2026-03-30 18:29:31 +08:00
GeWuYou
5fa12dcd37 feat(config): 添加YAML配置加载器支持
- 新增YamlConfigLoader类支持基于目录的YAML配置加载
- 添加对.yaml和.yml文件格式的自动识别和解析
- 实现异步加载任务支持取消令牌
- 集成YamlDotNet库进行YAML反序列化处理
- 支持驼峰命名约定和忽略未匹配属性
- 实现配置表注册的链式API设计
- 添加详细的加载过程异常处理和错误信息
- 提供完整的单元测试覆盖各种加载场景
- 更新项目依赖添加YamlDotNet包引用16.3.0版本
2026-03-30 14:13:26 +08:00
GeWuYou
c0aa8ba70e feat(config): 添加配置管理系统核心组件
- 实现了 ConfigRegistry 配置注册表,支持按名称注册和类型安全查询
- 创建了 InMemoryConfigTable 内存配置表,提供基于字典的只读配置存储
- 定义了 IConfigLoader、IConfigRegistry 和 IConfigTable 接口契约
- 添加了完整的单元测试验证配置表的注册、查询和类型检查功能
- 在项目文件中添加了新的代码文件夹结构
- 实现了配置表的覆盖策略以支持开发期热重载需求
2026-03-30 13:18:54 +08:00
gewuyou
a628ade28e
Merge pull request #151 from GeWuYou/feat/generator-skip-static-readonly-fields
feat(generator): 添加对 [GetAll] 特性的静态和只读字段跳过支持
2026-03-30 09:27:34 +08:00
GeWuYou
9590bf1dd9 chore(generator): 更新代码生成器依赖引入
- 在 ContextGetGenerator 中添加 System.Text 和 Extensions 引入
- 在测试文件中添加 Microsoft.CodeAnalysis.Text 引入
2026-03-30 09:22:59 +08:00
GeWuYou
da34b2fa2a feat(generator): 添加对 const 字段的显式跳过支持
- 在 ContextGetGenerator 中添加对 const 字段的显式检查和跳过逻辑
- 更新文档说明 const、static 和 readonly 字段的处理方式
- 重构测试代码使用 MarkupTestSource 解析器进行更精确的诊断测试
- 添加新的 MarkupTestSource 类用于源码标记解析和诊断定位
2026-03-30 09:13:45 +08:00
GeWuYou
2ae16b22eb docs(constants): 更新源代码生成器命名空间注释
- 将GFramework源代码生成器抽象层命名空间注释更正为GFramework源代码生成器根命名空间
2026-03-30 08:44:36 +08:00
GeWuYou
2ae783c127 feat(generator): 添加对 [GetAll] 特性的静态和只读字段跳过支持
- 添加了新的诊断规则 GF_ContextGet_007 和 GF_ContextGet_08
- 实现了对静态字段和只读字段的跳过逻辑
- 为 [GetAll] 特性添加了跳过字段的警告提示
- 更新了测试用例验证跳过逻辑的正确性
- 修改了代码生成顺序以确保正确的绑定推断
- 在 README 中添加了关于字段跳过的文档说明
2026-03-30 08:40:57 +08:00
gewuyou
63cb6b5e17
Merge pull request #150 from GeWuYou/feat/array-extensions-2d-helper-methods-
Feat/array extensions 2d helper methods
2026-03-30 08:25:50 +08:00
GeWuYou
fa82c33992 perf(ArrayExtensions): 优化二维数组扩展方法性能并添加单元测试
- 在 IsInBounds 和 Enumerate 方法中缓存数组维度长度,避免重复读取元数据
- 为 TryGet 方法添加 MaybeNullWhen 特性注解以改善空值检查
- 更新 TryGet 方法文档说明其在失败时返回默认值的行为
- 新增 ArrayExtensionsTests 类,包含 TryGet 和 Enumerate 方法的完整测试用例
- 添加 using System.Diagnostics.CodeAnalysis 引入空值相关特性支持
2026-03-30 08:18:07 +08:00
GeWuYou
dfbd6a69c5 feat(ArrayExtensions): 添加二维数组扩展方法
- 添加 GetOrDefault 方法用于获取越界时返回默认值的元素
- 添加 GetOr 方法用于获取越界时返回指定回退值的元素
- 添加 TryGet 方法用于尝试获取指定位置的元素
- 添加 GetNeighbors4 方法用于获取四个方向的邻居坐标
- 添加 GetNeighbors8 方法用于获取八个方向的邻居坐标
- 添加 Enumerate 方法用于枚举数组中所有元素及坐标
- 添加 Width 和 Height 方法分别获取数组宽高维度
- 在文件头注释中修复版权年份格式问题
2026-03-29 22:54:15 +08:00
GeWuYou
6908c74efc feat(extensions): 添加数组扩展方法支持二维数组边界检查
- 实现 IsInBounds 扩展方法用于检查二维数组坐标边界
- 提供泛型支持以适配不同类型的二维数组
- 包含完整的 XML 文档注释说明方法用途和参数
- 遵循 Apache 2.0 开源协议规范添加版权头文件
2026-03-29 22:04:14 +08:00
gewuyou
76a1406346
Merge pull request #149 from GeWuYou/docs/generators-priority-context-injection
docs(generators): 添加 Priority 和 Context Get 生成器文档
2026-03-29 20:30:09 +08:00
GeWuYou
c9423702a2 docs(context-get): 更新上下文注入生成器文档
- 在多个示例中添加 __InjectContextBindings_Generated() 调用
- 重写推荐调用时机与模式章节,强调在生命周期入口统一调用
- 添加 Godot 节点和测试场景的具体使用模式
- 重构诊断信息表格,整合 Priority 和 Context Get 相关诊断
- 更新 FAQ 部分关于构造函数使用的建议
2026-03-29 20:23:45 +08:00
GeWuYou
159578ab90 feat(docs): 添加泛型安全转义插件并增加源代码生成器文档
- 实现 safeGenericEscapePlugin 插件保护 Markdown 中的泛型语法
- 配置 Vite 构建选项提高代码块大小警告阈值至 1000
- 添加 Priority 生成器和 Context Get 注入文档链接
- 重构配置文件结构将插件函数移至顶部定义
- 确保代码块和 HTML 标签在转义过程中得到正确保护
2026-03-29 20:08:20 +08:00
GeWuYou
010ab70b7f docs(generators): 添加 Priority 和 Context Get 生成器文档
- 新增 Priority 生成器文档,介绍自动实现 IPrioritized 接口的功能
- 新增 Context Get 注入生成器文档,说明自动注入架构组件的特性
- 更新索引页面,添加新生成器的导航链接和功能描述
- 补充 EnumGenerator 配置选项说明,列出已实现和未实现的选项
- 添加完整的诊断信息说明,涵盖新生成器的所有错误场景
2026-03-29 19:54:26 +08:00
gewuyou
428b932f66
Merge pull request #148 from GeWuYou/fix/context-get-generator-service-binding-
Fix/context get generator service binding
2026-03-28 19:54:40 +08:00
GeWuYou
2f4ba63d32 chore(generators): 添加全局引用和依赖项
- 在 GFramework.Godot.SourceGenerators.Tests 中添加 Microsoft.CodeAnalysis 相关引用
- 在 GFramework.SourceGenerators 中添加 ImmutableCollections 和 StringBuilder 引用
- 在 GFramework.SourceGenerators 中添加 Common.Extensions 引用
- 在 GFramework.SourceGenerators.Tests 中添加测试框架相关引用
- 统一全局引用的组织结构
2026-03-28 19:49:46 +08:00
GeWuYou
535743e824 fix(generator): 解决源代码生成器中的换行符兼容性和集合类型候选检测问题
- 在测试中添加换行符标准化功能,确保跨平台测试一致性
- 修复ContextGetGenerator中集合类型候选检测逻辑,跳过无效类型参数
- 添加针对可空服务字段的单元测试用例
- 优化生成器对不同系统换行符的处理机制
2026-03-28 19:45:14 +08:00
GeWuYou
4fb1da2da6 refactor(GFramework.SourceGenerators): 优化集合类型候选枚举逻辑
- 将嵌套循环重构为使用 SelectMany 扁平化集合类型参数
- 简化了候选元素类型的遍历逻辑
- 提高了代码可读性和性能
- 移除了不必要的 continue 语句
- 保持了原有的类型匹配功能不变
2026-03-28 19:40:02 +08:00
GeWuYou
d72d4ab0bd refactor(GFramework.SourceGenerators): 优化ContextGetGenerator中的集合类型遍历逻辑
- 重构了EnumerateCollectionTypeCandidates方法的调用方式
- 使用模式匹配简化了类型参数的提取逻辑
- 移除了不必要的SelectMany操作提高代码可读性
- 添加了空值检查增强代码健壮性
- 在方法末尾添加了必要的换行符保持代码格式一致
2026-03-28 19:32:23 +08:00
GeWuYou
d1eafe2c9b fix(generator): 修复ContextGetGenerator中的服务绑定推断逻辑
- 移除了对引用类型的自动服务绑定推断,避免将非上下文服务字段误判为服务依赖
- 更新了GetAll特性的行为描述,明确Service和Services绑定不会自动推断
- 添加了显式GetService特性的测试用例验证正确的绑定行为
- 从测试代码中移除了未使用的GetService扩展方法声明
- 为BattlePanel测试类添加了IStrategy服务集合字段以完善测试覆盖
2026-03-28 19:30:24 +08:00
gewuyou
e692c721e9
Merge pull request #147 from GeWuYou/feat/context-aware-injection-generator
Feat/context aware injection generator
2026-03-28 13:11:57 +08:00
GeWuYou
6e3954eb3e docs(GFramework.Core): 更新 ContextAwareServiceExtensions 文档注释
- 为 GetSystem 方法添加 InvalidOperationException 异常文档说明
- 为 GetModel 方法添加 InvalidOperationException 异常文档说明
- 为 GetUtility 方法添加 InvalidOperationException 异常文档说明
- 清理文件末尾多余空行
2026-03-28 13:06:01 +08:00
GeWuYou
b5ac8b2c34 refactor(core): 重构上下文感知服务扩展以改进组件获取逻辑
- 引入通用的 GetRequiredComponent 方法来统一服务、系统、模型和工具的获取逻辑
- 添加对架构上下文组件的空值检查和异常处理
- 实现更清晰的错误消息以指示未注册的组件类型
- 为所有组件类型(服务、系统、模型、工具)添加缺失的单元测试
- 测试验证当上下文返回空组件时抛出正确的 InvalidOperationException
- 改进代码可维护性并减少重复的获取组件逻辑
2026-03-28 13:03:56 +08:00
GeWuYou
796408539e refactor(generators): 优化ContextGetGenerator代码结构并改进异常处理
- 修改GetService方法文档,将返回值描述从"返回null"改为"抛出异常"
- 为GetService方法添加InvalidOperationException异常说明
- 删除冗余的IsExternalInit类文件
- 重构属性匹配逻辑,使用预定义集合进行候选属性名称验证
- 添加辅助方法HasCandidateAttribute、TryGetAttributeSimpleName等提升代码可读性
- 改进集合类型推断逻辑,支持接口类型的遍历匹配
- 更新单元测试以验证完全限定名属性和只读列表类型的支持
- 修正诊断错误位置信息的准确性
2026-03-28 12:54:17 +08:00
GeWuYou
ee2936e0a2 refactor(generator): 重构上下文获取生成器的代码结构
- 将 ContextSymbols 的创建提取为独立方法 CreateContextSymbols
- 将源码生成逻辑提取为独立方法 GenerateSources
- 将绑定收集逻辑提取为独立方法 CollectBindings
- 将显式绑定添加逻辑提取为独立方法 AddExplicitBindings
- 将推断绑定添加逻辑提取为独立方法 AddInferredBindings
- 将绑定推断检查逻辑提取为独立方法 CanInferBinding
- 优化了代码组织结构和可读性
2026-03-28 11:47:59 +08:00
GeWuYou
78af119f38 feat(generator): 添加上下文感知注入源码生成器
- 移除ContextAwareServiceExtensions中GetService/GetSystem/GetModel/GetUtility方法的可空返回值
- 添加ContextGetGenerator源码生成器,支持通过特性自动生成上下文注入代码
- 新增GetService/GetServices/GetSystem/GetSystems/GetModel/GetModels/GetUtility/GetUtilities/GetAll特性
- 添加ContextGetDiagnostics提供注入相关的编译时诊断检查
- 实现INamedTypeSymbol扩展方法AreAllDeclarationsPartial用于检查partial类声明
- 添加ITypeSymbol扩展方法IsAssignableTo用于类型兼容性判断
- 创建FieldCandidateInfo和TypeCandidateInfo记录类型用于存储生成器候选信息
- 添加IsExternalInit内部类型支持低版本.NET框架的init-only setter功能
- 更新AnalyzerReleases.Unshipped.md添加新的诊断规则条目
- 创建完整的单元测试验证生成器功能和各种边界情况
2026-03-28 11:29:40 +08:00
GeWuYou
c681c4861f chore(deps): 更新 Mediator.Abstractions 包版本
- 将 Mediator.Abstractions 从 3.0.1 升级到 3.0.2 版本
2026-03-27 15:31:32 +08:00
dependabot[bot]
2531235276 Bump Mediator.Abstractions from 3.0.1 to 3.0.2
---
updated-dependencies:
- dependency-name: Mediator.Abstractions
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Mediator.Abstractions
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:19:01 +08:00
dependabot[bot]
f51e2cf741 chore(deps): bump actions/deploy-pages from 4 to 5
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:18:06 +08:00
dependabot[bot]
346d2aa2ec chore(deps): bump dorny/test-reporter from 2 to 3
Bumps [dorny/test-reporter](https://github.com/dorny/test-reporter) from 2 to 3.
- [Release notes](https://github.com/dorny/test-reporter/releases)
- [Changelog](https://github.com/dorny/test-reporter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dorny/test-reporter/compare/v2...v3)

---
updated-dependencies:
- dependency-name: dorny/test-reporter
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:17:51 +08:00
dependabot[bot]
66edb1da96 chore(deps): bump trufflesecurity/trufflehog from 3.93.8 to 3.94.1
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.93.8 to 3.94.1.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.93.8...v3.94.1)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.94.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:08:42 +08:00
dependabot[bot]
f4c7b349ea chore(deps): bump anistark/feluda from 1.11.1 to 1.12.0
Bumps [anistark/feluda](https://github.com/anistark/feluda) from 1.11.1 to 1.12.0.
- [Release notes](https://github.com/anistark/feluda/releases)
- [Commits](https://github.com/anistark/feluda/compare/v1.11.1...v1.12.0)

---
updated-dependencies:
- dependency-name: anistark/feluda
  dependency-version: 1.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:08:13 +08:00
dependabot[bot]
9bf7226c0b Bump Mediator.SourceGenerator from 3.0.1 to 3.0.2
---
updated-dependencies:
- dependency-name: Mediator.SourceGenerator
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:07:25 +08:00
dependabot[bot]
3ba85ec297 Bump Meziantou.Analyzer from 3.0.25 to 3.0.27
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:07:12 +08:00
dependabot[bot]
3a56dfb12d Bump NUnit3TestAdapter from 6.1.0 to 6.2.0
---
updated-dependencies:
- dependency-name: NUnit3TestAdapter
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit3TestAdapter
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit3TestAdapter
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit3TestAdapter
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit3TestAdapter
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:06:56 +08:00
dependabot[bot]
173973e0a6 Bump Scriban from 7.0.0 to 7.0.5
---
updated-dependencies:
- dependency-name: Scriban
  dependency-version: 7.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 15:06:25 +08:00
dependabot[bot]
1d81c4de58 Bump the nuget group with 1 update
Bumps Scriban from 6.6.0 to 7.0.0

---
updated-dependencies:
- dependency-name: Scriban
  dependency-version: 7.0.0
  dependency-type: direct:production
  dependency-group: nuget
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 16:37:50 +08:00
gewuyou
b3d52a0865
Merge pull request #135 from GeWuYou/feat/build-modular-global-usings
Feat/build modular global usings
2026-03-24 23:27:17 +08:00
GeWuYou
20f1c987eb refactor(tests): 优化全局引用测试的命名空间发现机制
- 添加基于真实类型的命名空间常量定义,避免硬编码字符串
- 引入 Architecture、Extensions 和 CoroutineExtensions 命名空间自动发现
- 将 FindRepositoryRoot 方法重构为 ResolveRepositoryRoot 并使用 CallerFilePath
- 更新断言逻辑以使用动态命名空间变量而非字面量字符串
- 移除对解决方案文件扫描的依赖,改用相对路径计算仓库根目录
- 添加方法参数验证和异常处理增强代码健壮性
2026-03-24 22:29:45 +08:00
GeWuYou
2d1d1a43b6 chore(build): 移除静态全局using配置并实现自动化生成
- 删除所有手动维护的 buildTransitive props 文件
- 从项目文件中移除静态的 global usings 配置
- 删除废弃的 global-usings.modules.json 清单文件
- 移除旧的 TransitiveGlobalUsingsGenerationTests 测试
- 添加新的 TransitiveGlobalUsingsPackagingTests 验证自动化生成
- 在 Directory.Build.targets 中集成 MSBuild 自动化生成任务
- 实现基于源码扫描的动态命名空间发现机制
2026-03-24 22:24:52 +08:00
GeWuYou
b80f46b6fa feat(build): 添加 GFramework 模块化全局命名空间导入功能
- 在 NuGet 包中实现可选的 transitive global usings 功能
- 添加 XML 配置方式启用模块级自动命名空间导入
- 支持通过 GFrameworkExcludedUsing 排除特定命名空间
- 为所有运行时模块生成对应的 buildTransitive props 文件
- 添加 Python 脚本自动生成和验证命名空间配置
- 在文档中添加新的安装配置说明
- 创建单元测试验证生成脚本的同步状态
2026-03-24 21:46:31 +08:00
gewuyou
a9ac8a927c
Merge pull request #134 from GeWuYou/feat/state-history-undo-redo
feat(state): 扩展状态管理功能支持历史记录撤销重做和批处理
2026-03-24 19:52:01 +08:00
GeWuYou
e5da5aa801 refactor(state): 将历史快照属性改为方法并优化批处理逻辑
- 将 HistoryEntries 属性替换为 GetHistoryEntriesSnapshot() 方法,明确表达会返回集合副本
- 在批处理清理逻辑中添加 else 条件避免无效操作
- 更新测试代码使用新的快照获取方法
- 添加 System.Diagnostics 命名空间引用
- 修复批处理深度为零时的异常处理逻辑
2026-03-24 19:45:59 +08:00
GeWuYou
bd29475748 refactor(store): 添加调试断言确保线程安全
- 在 CreateMiddlewareSnapshotCore 方法中添加锁持有检查
- 在 CreateReducerSnapshotCore 方法中添加锁持有检查
- 确保并发安全性避免竞态条件
- 导入 System.Diagnostics 命名空间支持断言功能
2026-03-24 19:39:55 +08:00
GeWuYou
91246ff482 feat(state): 扩展状态管理功能支持历史记录撤销重做和批处理
- 新增 RunInBatch() 方法支持批处理通知折叠
- 添加 Undo()/Redo() 基于历史缓冲区的状态回退前进功能
- 实现 TimeTravelTo() 跳转到指定历史索引的能力
- 提供 ClearHistory() 以当前状态重置历史锚点的功能
- 支持可选历史缓冲区、撤销/重做和时间旅行功能
- 添加可选批处理通知折叠机制
- 实现多态 action 匹配(基类/接口)支持
- 在诊断信息中增加历史游标和批处理状态
- StoreBuilder 新增 WithHistoryCapacity() 和 WithActionMatching() 配置方法
- 优化 reducer 注册支持全局序号以实现稳定排序
- 实现多态匹配时的类型继承距离计算
- 添加批处理嵌套支持和状态通知延迟机制
2026-03-24 19:08:03 +08:00
gewuyou
b912e6aa4d
Merge pull request #133 from GeWuYou/feat/state-dynamic-registration
feat(state): 添加运行时临时注册与注销功能
2026-03-23 21:18:43 +08:00
GeWuYou
1f1aff5335 refactor(state): 优化状态管理存储的中间件和reducer快照创建
- 为CreateMiddlewareSnapshot方法添加状态锁保护
- 为CreateReducerSnapshot方法添加状态锁保护
- 更新方法注释说明锁的安全性保障机制
- 避免调用方需要了解锁顺序的隐式依赖关系
2026-03-23 20:58:03 +08:00
GeWuYou
14849d6761 refactor(GFramework.Core.Tests): 更新全局using引用
- 添加GFramework.Core.Abstractions.Property命名空间引用
- 重新排序using语句以优化代码结构
- 保持现有功能不变的同时改进代码组织方式
2026-03-23 20:41:36 +08:00
GeWuYou
2c00070bb1 feat(state): 添加运行时临时注册与注销功能
- 实现 RegisterReducerHandle 和 RegisterMiddleware 方法,支持获取注销句柄
- 添加 IUnRegister 接口和 DefaultUnRegister 实现,提供精确注销能力
- 修改内部数据结构,使用 Registration 包装对象确保注销时的身份稳定性
- 实现中间件和 reducer 的快照机制,确保运行中注销不影响当前 dispatch
- 添加相关单元测试验证运行时注册注销的正确性
- 更新文档说明运行时临时注册与注销的使用方式和约束条件
2026-03-23 20:38:46 +08:00
gewuyou
b6ef6278c0
Merge pull request #132 from GeWuYou/feat/state-management-core
Feat/state management core
2026-03-23 20:19:53 +08:00
GeWuYou
3d212716d6 refactor(tests): 更新状态管理测试的命名空间引用
- 添加了属性抽象层的命名空间引用
- 添加了状态管理抽象层的命名空间引用
- 保持了原有的核心扩展、属性和状态管理命名空间引用
2026-03-23 20:14:23 +08:00
GeWuYou
b7c54743fa refactor(state): 优化 Store 状态分发的并发控制机制
- 将 Store 类标记为 sealed 以防止继承
- 引入独立的 dispatch 门闩锁,将状态锁的保护范围缩小为仅保护临界区访问
- 实现 dispatch 过程中的快照机制,确保中间件和 reducer 在锁外执行稳定的不可变序列
- 重构 ExecuteDispatchPipeline 方法,接受快照参数并改为静态方法
- 添加 CreateReducerSnapshot 方法为每次分发创建 reducer 快照
- 更新 StoreBuilder 和 StoreSelection 类为 sealed
- 新增测试用例验证长时间运行的 middleware 不会阻塞状态读取和订阅操作
- 修复 dispatch 过程中状态锁占用时间过长的问题,提升并发性能
2026-03-23 20:11:10 +08:00
GeWuYou
79cebb95b5 feat(state): 添加 StoreBuilder 配置功能并优化状态管理
- 引入 StoreBuilder<TState> 支持模块化配置 reducer 和中间件
- 实现状态选择视图缓存机制提升性能
- 重构订阅管理使用精确订阅对象替代委托链
- 增强 SubscribeWithInitValue 方法防止状态变化遗漏
- 添加完整的状态管理文档示例和测试用例
- 更新接口定义支持新的构建器功能
2026-03-23 19:59:23 +08:00
GeWuYou
79f1240e1d docs(core): 添加状态管理文档并完善属性绑定指南
- 新增 state-management 文档,介绍集中式状态容器方案
- 在 property 文档中补充与 Store 的使用边界说明
- 更新核心功能表格,添加状态管理条目链接
- 在 README 中增加 StateManagement 功能描述
- 添加状态管理相关接口到抽象层文档
- 提供 Store 与 BindableProperty 的选择指导原则
2026-03-23 19:35:01 +08:00
GeWuYou
2b4b87baba feat(state): 添加状态管理框架核心功能
- 实现 Store 类作为集中式状态容器,默认支持状态归约和订阅通知
- 添加 IReadonlyStore、IStore、IReducer 等状态管理相关抽象接口
- 实现 StoreExtensions 扩展方法,提供 Select 和 ToBindableProperty 选择器功能
- 添加 StoreSelection 类,支持从完整状态树中投影局部状态视图
- 实现 StoreDispatchContext 和 StoreDispatchRecord 用于分发过程诊断
- 添加 IStoreMiddleware 中间件接口,支持在分发过程中插入日志和审计逻辑
- 实现完整的状态选择器和绑定属性桥接功能,便于现有 UI 代码复用
- 添加 Store 相关单元测试,覆盖状态归约、订阅通知和选择器桥接场景
2026-03-23 19:34:28 +08:00
deepsource-autofix[bot]
c70728b64e refactor: simplify lambda
This PR refactors a lambda expression that contained unnecessary braces around a single-statement body, converting it into a more concise expression-bodied form to improve readability and maintainability.

- Consider simplifying lambda when its body has a single statement: The original lambda used a block body with braces and a single call to Execute, which is verbose for a one-line operation. We removed the braces and semicolon, converting it into an expression-bodied lambda (`static (spc, pair) => Execute(spc, pair.Left, pair.Right)`) to simplify the code and follow best practices.

> This Autofix was generated by AI. Please review the change before merging.
2026-03-23 08:28:07 +08:00
gewuyou
cf486cbeff
Merge pull request #128 from GeWuYou/feat/get-node-generator
feat(godot): 添加 GetNode 源代码生成器功能
2026-03-22 15:34:00 +08:00
gewuyou
8d656b90a7
Merge pull request #129 from GeWuYou/deepsource-autofix-b7cf8394
refactor: simplify single-statement getter
2026-03-22 15:30:07 +08:00
GeWuYou
fc386fb4bc refactor(generator): 调整项目文件夹结构
- 移除 logging 文件夹引用
- 将 diagnostics 文件夹重命名为 Diagnostics
- 更新项目文件中的文件夹路径配置
2026-03-22 15:28:39 +08:00
deepsource-autofix[bot]
bbf1dc8d0c
refactor: simplify single-statement getter
This PR refactors properties that contain only a single return statement by converting them to expression-bodied members, reducing boilerplate and improving readability.

- Getters and setters with a single statement in their bodies can be simplified: The `IsDone` property originally used a full getter block to evaluate whether all coroutine handles are inactive. We replaced it with an expression-bodied property (`public bool IsDone => _handles.All(handle => !_scheduler.IsCoroutineAlive(handle));`) and relocated the explanatory comment above it, streamlining the code.

> This Autofix was generated by AI. Please review the change before merging.
2026-03-22 07:24:25 +00:00
GeWuYou
b95c65a30e refactor(generator): 优化GetNodeGenerator代码结构
- 使用语法树遍历替代字符串匹配来检测注入方法调用
- 添加IsGeneratedInjectionInvocation辅助方法提高代码可读性
- 将字段分组逻辑从列表查找改为字典映射提升性能
- 优化GroupByContainingType方法的时间复杂度
2026-03-22 15:23:51 +08:00
GeWuYou
9ab09cf47b feat(godot): 添加 GetNode 源代码生成器功能
- 实现了 [GetNode] 属性用于标记 Godot 节点字段
- 创建了 GetNodeGenerator 源代码生成器自动注入节点获取逻辑
- 添加了节点路径推导和多种查找模式支持
- 集成了生成器到 Godot 脚手架模板中
- 添加了完整的诊断规则和错误提示
- 创建了单元测试验证生成器功能
- 更新了解决方案配置以包含新的测试项目
- 在 README 中添加了详细的使用文档和示例代码
2026-03-22 15:16:24 +08:00
gewuyou
63b1d71a0e
Merge pull request #127 from GeWuYou/feat/async-log-appender-error-handler
feat(logging): 添加异步日志输出器的错误处理回调功能
2026-03-21 22:09:06 +08:00
GeWuYou
cdc49c319a feat(logging): 添加异步日志输出器功能
- 使用 Channel 实现异步日志处理机制
- 解耦调用线程与慢速日志目标
- 添加全局 Channels 命名空间引用
- 完善日志组件的异步处理能力
2026-03-21 22:04:09 +08:00
GeWuYou
d94d8deb29 fix(logging): 修复异步日志追加器中的操作取消异常处理
- 添加对 OperationCanceledException 的特殊处理,避免将其报告为后台处理错误
- 在 ReportProcessingError 方法中检查并过滤掉操作取消异常
- 添加单元测试验证当内部追加器抛出 OperationCanceledException 时不报告错误
- 创建 CancellationAppender 测试辅助类来模拟取消异常场景
- 确保取消相关的异常不会触发错误处理逻辑
2026-03-21 21:59:51 +08:00
GeWuYou
49609d3821 feat(logging): 添加异步日志输出器的错误处理回调功能
- 在 AsyncLogAppender 构造函数中添加 processingErrorHandler 参数用于处理后台异常
- 实现 ReportProcessingError 方法安全上报后台处理异常而不影响处理循环
- 更新文档注释说明异常处理机制和错误回调用途
- 修改测试用例验证异常处理回调功能的正确性
- 确保错误观察者异常不会终止日志处理线程
- 移除直接写入控制台错误输出的逻辑改为统一回调处理
2026-03-21 21:54:24 +08:00
gewuyou
003fe42ad8
Merge pull request #126 from GeWuYou/refactor/generators-downgrade-to-netstandard20
refactor(generators): 将源代码生成器项目目标框架降级至 netstandard2.0
2026-03-21 21:40:43 +08:00
GeWuYou
a42ec0c282 fix(generator): 修复优先级生成器中的部分关键字检查逻辑
- 将语法节点的部分关键字检查从 Any 操作改为 All 操作
- 修正了对非部分类的诊断报告条件判断
- 确保只有当所有修饰符都不是部分关键字时才报告错误
2026-03-21 21:31:52 +08:00
GeWuYou
884249649d chore(build): 配置项目构建属性以支持源代码生成器
- 为 GFramework.Godot 项目添加 GodotProjectDir 属性默认值
- 在 GFramework 元包中添加 NoPackageAnalysis 属性配置
- 为不同 .NET 版本添加占位符文件到包输出中
- 确保源代码生成器在标准 SDK 构建中正常运行
2026-03-21 21:30:29 +08:00
GeWuYou
d582dffe40 refactor(generators): 将源代码生成器项目目标框架降级至 netstandard2.0
- 将 GFramework.Godot.SourceGenerators 项目的目标框架从 netstandard2.1 更改为 netstandard2.0
- 将 GFramework.SourceGenerators.Abstractions 项目的目标框架从 netstandard2.1 更改为 netstandard2.0
- 将 GFramework.SourceGenerators 项目的目标框架从 netstandard2.1 更改为 netstandard2.0
- 将 GFramework.SourceGenerators.Common 项目的目标框架从 netstandard2.1 更改为 netstandard2.0
- 从 GFramework.SourceGenerators 项目中移除对 GFramework.Core.Abstractions 的引用
- 从 GFramework.SourceGenerators.Abstractions 项目中移除对 GFramework.Core.Abstractions 的引用
- 更新 PriorityGenerator 中的语法检查逻辑,使用 Any 替代 All 进行 partial 关键字检查
- 更新 PriorityAttribute 文档注释中的 cref 格式为 c 标签
2026-03-21 21:20:32 +08:00
GeWuYou
63a6c2e6f0 refactor(abstractions): 移除重复的Key属性声明
- 从LockInfo结构体移除StructLayout特性
- 从ISceneBehavior接口移除重复的Key属性声明
- 从IUiPageBehavior接口移除重复的Key属性声明
- 简化LockInfo类定义减少不必要的using引用
2026-03-21 21:13:53 +08:00
GeWuYou
f3d45169cd refactor(pause): 将暂停状态变化事件改为标准事件模式
- 将 OnPauseStateChanged 事件从 Action<PauseGroup, bool> 类型改为 EventHandler<PauseStateChangedEventArgs>
- 添加 PauseStateChangedEventArgs 类来封装事件数据
- 更新所有事件处理方法的签名以匹配新的事件参数
- 修改文档中相关的事件处理代码示例
- 在 PauseStackManager 中添加 RaisePauseStateChanged 方法统一处理事件触发
- 更新测试代码以适应新的事件处理方式
2026-03-21 21:13:53 +08:00
GeWuYou
86645d34cb fix(generator): 修复诊断消息中的多余句号
- 移除了 Priority 特性描述中的多余句号
- 移除了 IPrioritized 接口实现跳过警告中的多余句号
- 移除了 partial 类要求错误中的多余句号
- 移除了 Priority 特性值验证错误中的多余句号
- 移除了嵌套类限制错误中的多余句号
- 移除了服务获取建议信息中的多余句号
2026-03-21 20:51:03 +08:00
GeWuYou
ab04f0ace7 docs(diagnostic): 更新诊断消息描述文本
- 为 Priority 特性错误消息添加句号结尾
- 为接口实现警告消息添加句号结尾
- 为 partial 类要求错误消息添加句号结尾
- 为整数值验证错误消息添加句号结尾
- 为嵌套类限制错误消息添加句号结尾
- 为服务获取建议消息添加句号结尾
- 在测试项目配置中添加警告级别设置
2026-03-21 20:51:03 +08:00
gewuyou
51492b1dcd fix(docs): remove dead ADR references 2026-03-21 15:56:18 +08:00
gewuyou
4caa3c0d71
Merge pull request #122 from GeWuYou/feat/localization-compact-number-formatter
Feat/localization compact number formatter
2026-03-21 15:07:02 +08:00
GeWuYou
fca3808657 fix(localization): 修复紧凑数字格式化器处理未知选项的行为
- 修改 CompactNumberLocalizationFormatter 中 TryApplyOption 方法的返回逻辑
- 当键名未知时现在返回 true 而不是 false,允许忽略未知选项
- 更新 NumericDisplayFormatter 使用 ResolveRule 方法来确定格式化规则
- 添加对不同数值显示风格的支持和验证
- 在集成测试中添加未知选项的测试用例以验证正确行为
- 改进 NumericSuffixFormatRule 的文档注释以更清楚地描述功能
2026-03-21 15:01:47 +08:00
GeWuYou
5996ecf5f3 docs(core): 添加内置数值显示工具文档
- 新增内置数值显示工具使用说明
- 提供 FormatCompact 和 ToCompactString 示例代码
- 展示 NumericFormatOptions 配置选项用法
- 介绍本地化文本中的数值格式化功能
- 更新相关链接列表移除多余逗号
2026-03-21 14:43:55 +08:00
GeWuYou
53edd13f8f feat(localization): 添加本地化格式化器和数值显示功能
- 在LocalizationManager中注册内置格式化器包括条件、复数和紧凑数值格式化器
- 实现CompactNumberLocalizationFormatter支持{value:compact}格式化语法
- 添加数值显示扩展方法ToDisplayString和ToCompactString
- 实现NumericDisplayFormatter和NumericSuffixFormatRule数值格式化核心逻辑
- 添加数值格式化选项配置包括小数位数、四舍五入策略等参数
- 为紧凑数值格式化功能添加完整的单元测试覆盖各种数值类型和边界情况
2026-03-21 14:43:42 +08:00
gewuyou
0442fec2d1
Merge pull request #121 from GeWuYou/docs/refactor-guidelines-comprehensive
Docs/refactor guidelines comprehensive
2026-03-21 13:47:39 +08:00
GeWuYou
2001eddbff refactor(scripts): 重构AI环境生成脚本以优化工具选择逻辑
- 移除shell脚本中的冗余命令执行逻辑
- 添加select_tool函数统一处理工具偏好和回退逻辑
- 使用新函数重构搜索、JSON处理、脚本编写等工具选择
- 更新时间戳以反映代码变更后的重新生成
- 简化构建工具配置的回退策略
2026-03-21 12:49:51 +08:00
GeWuYou
3130a3bab2 feat(docs): 添加开发环境能力清单及相关工具脚本
- 在贡献指南中添加开发环境能力清单链接和说明
- 创建详细的开发环境能力清单文档,记录项目所需的运行时和工具
- 添加 .ai/environment/tools.ai.yaml 文件,为 AI 提供精简的环境能力信息
- 添加 .ai/environment/tools.raw.yaml 文件,存储完整的环境检测数据
- 创建 collect-dev-environment.sh 脚本,用于收集和输出环境信息
- 创建 generate-ai-environment.py 脚本,从原始数据生成 AI 友好的环境清单
- 在 .gitignore 中添加 .venv/ 工具目录忽略规则
2026-03-21 12:37:56 +08:00
GeWuYou
ba4ee24ce7 docs(guidelines): 更新 AGENTS.md 和 CLAUDE.md 文档内容
- 重写 AGENTS.md 为 AI 代理和贡献者提供完整的编码行为准则
- 新增详细的注释规则,包括 XML 文档、内联注释和架构级注释要求
- 完善代码风格指南,涵盖命名约定、格式化和 C# 最佳实践
- 扩展测试要求,明确覆盖率、组织结构和执行期望
- 添加安全规则和文档规范,确保代码质量和安全性
- 重构 CLAUDE.md 为 AI 代理提供项目理解指导
- 更新模块依赖图和架构模式说明,澄清各层职责
- 补充源码生成器、测试框架和文档结构的详细说明
- 优化项目概述和设计意图描述,提升 AI 理解准确性
2026-03-21 11:36:39 +08:00
gewuyou
dfae4ba207
Merge pull request #120 from GeWuYou/feat/docs-add-repository-guide
docs(guide): 添加仓库开发指南文档
2026-03-20 08:36:02 +08:00
GeWuYou
ccb51791a3 docs(guide): 更新提交和拉取请求指南中的拼写错误
- 修复了 "Conventional Commit" 到 "Conventional Commits" 的拼写
- 确保文档中使用的术语与业界标准保持一致
2026-03-20 08:24:17 +08:00
GeWuYou
55234c4d70 docs(guide): 添加仓库开发指南文档
- 创建了项目结构和模块组织说明
- 添加了构建测试和开发命令指南
- 定义了代码风格和命名约定规范
- 提供了测试指南和最佳实践
- 包含了提交和拉取请求准则
- 记录了解决方案文件和目录布局说明
2026-03-20 08:18:00 +08:00
dependabot[bot]
108bcbf27e Bump Meziantou.Analyzer from 3.0.19 to 3.0.25
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 08:12:51 +08:00
dependabot[bot]
51393c30ee Bump Microsoft.Extensions.DependencyInjection from 10.0.4 to 10.0.5
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection
  dependency-version: 10.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 08:12:35 +08:00
dependabot[bot]
589f9f7d63 Bump the nuget group with 1 update
Bumps Scriban from 6.2.0 to 6.6.0

---
updated-dependencies:
- dependency-name: Scriban
  dependency-version: 6.6.0
  dependency-type: direct:production
  dependency-group: nuget
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 08:12:18 +08:00
gewuyou
ba8369c8b3
Merge pull request #115 from GeWuYou/feat/localization-system
feat(core): 添加本地化系统支持多语言功能
2026-03-19 13:21:22 +08:00
GeWuYou
9ca28a44d8 refactor(localization): 优化回退表检查逻辑
- 将 Fallback.ContainsKey 检查替换为更安全的模式匹配语法
- 避免了潜在的空引用异常风险
- 提高了代码的可读性和健壮性
- 保持了原有的功能逻辑不变
2026-03-19 13:15:39 +08:00
GeWuYou
0c5c9dceae test(localization): 添加本地化集成测试的临时文件管理和测试数据创建
- 添加 System.IO 命名空间引用以支持文件操作
- 实现 CreateTestLocalizationFiles 方法创建测试用的多语言文件
- 使用 GUID 生成唯一的临时目录路径避免冲突
- 添加 TearDown 方法清理测试过程中创建的临时文件
- 在 Setup 方法中调用文件创建方法初始化测试环境
- 将目标框架配置改为可配置的条件变量方式
2026-03-19 12:52:11 +08:00
GeWuYou
d7e7d3cc7f feat(events): 为优先级事件系统添加线程安全支持
- 添加同步锁对象以保护处理器集合的并发访问
- 在注册和注销操作中加入线程安全锁机制
- 实现快照创建方法以避免迭代期间的并发修改
- 重构触发器逻辑以使用线程安全的快照创建
- 在计数器方法中添加同步保护
- 确保所有集合操作都在安全锁内执行
2026-03-19 12:51:59 +08:00
GeWuYou
b5c67850ce docs(localization): 更新本地化字符串类的XML文档注释
- 为构造函数添加更详细的参数描述和异常说明
- 为WithVariable方法添加完整的XML文档注释
- 为WithVariables方法添加完整的XML文档注释
- 为Format方法添加详细的返回值和备注信息
- 为GetRaw方法添加完整的XML文档注释
- 为Exists方法添加完整的XML文档注释
- 为私有FormatString方法添加参数和返回值说明
- 为私有FormatMatch方法添加详细的处理逻辑描述
- 为私有TryFormatValue方法添加格式化器相关参数说明
- 为私有FormatValue方法添加默认格式化逻辑说明
- 为私有GetOptionalGroupValue方法添加功能说明
- 为私有GetFormatter方法添加获取格式化器的详细描述
2026-03-19 09:20:43 +08:00
GeWuYou
1f680d2822 refactor(localization): 重构本地化字符串格式化逻辑
- 将 FormatVariablePattern 从 readonly 字段改为 const 常量
- 提取复杂的正则替换逻辑到独立的 FormatMatch 方法中
- 新增 GetOptionalGroupValue 辅助方法处理可选组值提取
- 分离格式化值和尝试格式化的逻辑到独立方法
- 简化条件判断并提高代码可读性
- 优化错误处理流程,保持原有功能不变
2026-03-19 09:19:34 +08:00
GeWuYou
075d397a4c refactor(localization): 更新集成测试中的命名空间引用
- 添加对 GFramework.Core.Abstractions.Localization 的引用
- 确保测试文件能够访问本地化相关的抽象接口
- 为后续的本地化功能扩展做好准备
- 保持代码结构的一致性与可维护性
2026-03-18 23:25:55 +08:00
GeWuYou
5fb96761a3 docs(localization): 更新本地化文档并完善功能实现
- 添加了配置项暂不支持的说明信息
- 扩展了语言变化监听的使用方式,增加命名方法订阅示例
- 完善了覆盖机制的文档说明
- 优化了异常处理逻辑,精确捕获本地化相关异常
- 实现了正则表达式的预编译以提升性能
- 添加了必要的命名空间引用
2026-03-18 23:25:09 +08:00
GeWuYou
e49713a842 feat(core): 添加本地化系统支持多语言功能
- 实现 ILocalizationManager 接口及 LocalizationManager 管理器
- 添加 ILocalizationTable 和 ILocalizationString 接口及其实现
- 创建 LocalizationConfig 配置类用于管理本地化行为
- 实现 ConditionalFormatter 和 PluralFormatter 内置格式化器
- 添加本地化文档包括 API 参考和使用指南
- 集成本地化系统到核心框架架构中
2026-03-18 22:58:07 +08:00
gewuyou
aee13c3c1d
Merge pull request #114 from GeWuYou/docs/add-claude-md-guide
docs(guide): 添加 CLAUDE.md 文件提供项目开发指导
2026-03-18 10:00:28 +08:00
GeWuYou
05c4f06717 docs(guide): 添加 CLAUDE.md 文件提供项目开发指导
- 新增项目概述说明,介绍 GFramework 框架的核心特性
- 添加构建和测试命令指南,包括 dotnet 构建和测试脚本
- 提供模块依赖关系图,说明各模块之间的依赖结构
- 详细描述架构模式,包括四层结构和关键设计模式
- 添加代码约定说明,涵盖命名空间、隐式引用等规范
- 补充测试框架信息,说明测试结构和基类使用方式
- 介绍源码生成器功能,列出四个主要生成器的作用
- 提供文档站点信息,说明 VitePress 文档的本地预览方法
2026-03-18 09:44:06 +08:00
gewuyou
2accbf4bdf
Merge pull request #113 from GeWuYou/refactor/router-base-ci-concurrency
refactor(game): 重构路由系统并优化CI测试流程
2026-03-17 16:45:05 +08:00
GeWuYou
60068aff4f refactor(ci): 重构工作流配置以分离代码质量和构建测试任务
- 将原有的 test job 重命名为 code-quality,专注于代码质量与安全检查
- 添加构建和测试独立的 build-and-test job,实现并行执行
- 更新 MegaLinter 配置,优化缓存和报告上传流程
- 重新组织 CI 工作流结构,提升执行效率和可维护性
- 调整作业名称和描述,明确职责分工
2026-03-17 16:34:09 +08:00
GeWuYou
9c69c4ec00 refactor(ci): 优化CI工作流中的测试执行策略
- 将多个独立的测试步骤合并为单个并发执行步骤
- 移除重复的测试配置以简化工作流定义
- 保留后台测试等待机制确保执行完整性
- 统一测试项目名称提高可读性
2026-03-17 16:20:55 +08:00
GeWuYou
65b949b62f perf(scene): 优化路由守卫异步方法性能
- 将 ISceneRouteGuard 中的 Task 返回类型改为 ValueTask
- 将 IUiRouteGuard 中的 Task 返回类型改为 ValueTask
- 移除注释中的多余缩进空格
- 提升异步操作的性能表现
2026-03-17 16:10:24 +08:00
GeWuYou
4afa856fdc refactor(game): 重构路由系统并优化CI测试流程
- 将SceneRouterBase和UiRouterBase继承自新的RouterBase基类
- 移除原有的守卫管理相关代码,统一使用基类实现
- 更新路由栈操作使用基类提供的Stack属性
- 重写Current、Contains等方法以使用基类实现
- 在CI工作流中启用并发测试执行以提升性能
- 添加等待步骤确保并发测试完成
- 更新项目文件排除测试项目的编译
- 在解决方案文件中添加GFramework.Game.Tests项目引用
- 新增RouterBase基类提供通用路由管理功能
2026-03-17 15:01:55 +08:00
gewuyou
27858df94e
Merge pull request #112 from GeWuYou/refactor/architecture-modular-safety
refactor(architecture): 重构架构类为模块化设计提升代码安全性
2026-03-17 12:56:34 +08:00
GeWuYou
1c2e68fc5a style(docs): 统一文档中IoC容器术语格式并优化架构生命周期代码
- 将文档中的"IOC"统一更正为"IoC"格式
- 重构ArchitectureLifecycle类构造函数使用主构造函数语法
- 移除私有字段前缀下划线,直接使用参数名称
- 修复配置访问权限问题,移除字段访问前缀下划线
- 调整组件注册方法泛型约束,提升类型安全
- 优化日志记录器访问方式,移除字段访问前缀下划线
- 重构销毁逻辑,分离组件清理和服务模块销毁流程
- 提取清理组件逻辑到独立方法,提升代码可读性
- 更新阶段转换和钩子通知中的对象引用方式
2026-03-17 12:50:43 +08:00
GeWuYou
3d8e19b5e2 refactor(architecture): 重构架构类为模块化设计提升代码安全性
- 将单一 Architecture 类拆分为 ArchitectureLifecycle、ArchitectureComponentRegistry 和 ArchitectureModules
- 消除 3 处 null! 强制断言,在构造函数中初始化管理器提高代码安全性
- 添加 PhaseChanged 事件支持架构阶段监听
- 所有公共 API 保持不变确保向后兼容
- 实现单一职责原则使代码更易维护和测试
- 组件注册、生命周期管理和模块管理职责分离到专门的管理器中
2026-03-17 11:08:48 +08:00
gewuyou
ef05713bf2
Merge pull request #111 from GeWuYou/refactor/architecture-to-architectures-namespace
Refactor/architecture to architectures namespace
2026-03-14 17:01:31 +08:00
GeWuYou
e022a10bd5 refactor(architecture): 将架构相关文件从 Architecture 目录移动到 Architectures 目录
- 重命名目录名称从 Architecture 到 Architectures
- 更新所有相关文件的命名空间声明
- 保持代码功能不变,仅调整目录结构和命名空间一致性
2026-03-14 16:54:07 +08:00
GeWuYou
c82a15f8bc refactor(abstractions): 将Architecture命名空间重命名为Architectures
- 更新所有引用GFramework.Core.Abstractions.Architecture的文件
- 将ArchitectureModuleRegistry.cs从Architecture目录移动到Architectures目录
- 将IArchitecture.cs从Architecture目录移动到Architectures目录
- 将IArchitectureConfiguration.cs从Architecture目录移动到Architectures目录
- 将IArchitectureContext.cs从Architecture目录移动到Architectures目录
- 将IArchitectureContextProvider.cs从Architecture目录移动到Architectures目录
- 将IArchitectureLifecycleHook.cs从Architecture目录移动到Architectures目录
- 将IArchitectureModule.cs从Architecture目录移动到Architectures目录
- 将IArchitecturePhaseListener.cs从Architecture目录移动到Architectures目录
- 将IArchitectureServices.cs从Architecture目录移动到Architectures目录
- 将IServiceModule.cs从Architecture目录移动到Architectures目录
- 将IServiceModuleManager.cs从Architecture目录移动到Architectures目录
- 在ArchitectureModuleRegistry中将私有字段_factories重命名为Factories并添加StringComparer.Ordinal参数
2026-03-14 16:52:28 +08:00
gewuyou
2d89efa4b7
Merge pull request #110 from GeWuYou/docs/remove-migration-guide
Docs/remove migration guide
2026-03-13 22:44:29 +08:00
GeWuYou
597d4dfeda docs(menu): 移除迁移指南菜单项
- 从中文导航菜单中删除迁移指南链接
- 更新配置文件中的菜单结构
2026-03-13 22:44:01 +08:00
GeWuYou
f3deb299ac docs: 移除版本迁移指南文档
- 删除了整个迁移指南文档文件 docs/zh-CN/migration-guide.md
- 移除了详细的从 0.x 到 1.x 版本迁移说明
- 删除了架构变更、API 变更和配置变更相关内容
- 清理了常见问题解答和回滚方案部分
- 移除了测试迁移和代码迁移工具介绍
2026-03-13 22:43:28 +08:00
gewuyou
fc2f9ebf1a
Merge pull request #109 from GeWuYou/chore/resharper-namespace-suppression
chore(abstractions): 添加 ReSharper 禁用检查命名空间注释
2026-03-13 22:36:58 +08:00
GeWuYou
0640a06e44 chore(abstractions): 添加 ReSharper 禁用检查命名空间注释
- 在 GFramework.Core.Abstractions 中添加 // ReSharper disable CheckNamespace 注释
- 在 GFramework.Game.Abstractions 中添加 // ReSharper disable CheckNamespace 注释
- 解决代码分析工具对命名空间检查的警告问题
2026-03-13 22:29:29 +08:00
gewuyou
94f75bfa03
Merge pull request #108 from GeWuYou/chore/cleanup-refactor-scripts
chore(build): 删除文件夹映射配置和命名空间更新脚本
2026-03-13 10:03:24 +08:00
GeWuYou
10640f1c73 refactor(scripts): 将 C# 命名验证脚本从 Python 重写为 Bash
- 将验证逻辑从 Python 代码转换为 Bash 脚本实现
- 使用 grep 和正则表达式替换 Python 的字符串匹配功能
- 实现 PascalCase 验证的正则表达式模式
- 添加目录路径和命名空间段的验证逻辑
- 保持原有的排除规则和错误报告格式
- 移除对 Python3 的依赖,仅使用系统内置命令
2026-03-13 09:53:50 +08:00
GeWuYou
cb0d0682b0 refactor(core): 统一C#命名规范并添加校验脚本
- 将所有IoC相关命名空间从"IoC"重命名为"Ioc"
- 将所有CQRS相关命名空间从"CQRS"重命名为"Cqrs"
- 更新所有受影响的using语句以匹配新的命名空间
- 在CI工作流中添加C#命名规范校验步骤
- 修正了测试文件中的命名空间引用
2026-03-13 09:41:43 +08:00
GeWuYou
8b5efc69ec chore(build): 删除文件夹映射配置和命名空间更新脚本
- 移除 folder-mappings.json 配置文件
- 删除 update-namespaces.sh 自动化脚本
- 清理项目中的文件夹重命名映射关系
- 移除自动生成命名空间更新的功能
- 完成代码库结构规范化清理工作
2026-03-12 21:35:50 +08:00
dependabot[bot]
54103c21a4 chore(deps): bump trufflesecurity/trufflehog from 3.93.7 to 3.93.8
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.93.7 to 3.93.8.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.93.7...v3.93.8)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.93.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:33:15 +08:00
dependabot[bot]
7aa009ab06 Bump coverlet.collector from 6.0.2 to 6.0.4
---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 6.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:33:04 +08:00
dependabot[bot]
90bfa7200a Bump Meziantou.Analyzer from 2.0.264 to 2.0.302
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:32:51 +08:00
dependabot[bot]
e4cc0c7943 Bump Meziantou.Polyfill from 1.0.71 to 1.0.104
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.104
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:32:41 +08:00
dependabot[bot]
0b7d5c8f0c Bump Microsoft.Extensions.DependencyInjection from 10.0.3 to 10.0.4
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection
  dependency-version: 10.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:32:28 +08:00
dependabot[bot]
920a2c519e Bump NUnit from 4.5.0 to 4.5.1
---
updated-dependencies:
- dependency-name: NUnit
  dependency-version: 4.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: NUnit
  dependency-version: 4.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: NUnit
  dependency-version: 4.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 21:32:16 +08:00
gewuyou
f48a8db094
Merge pull request #99 from GeWuYou/docs/coroutine-system-refactor
Docs/coroutine system refactor
2026-03-12 12:58:51 +08:00
GeWuYou
4362989056 docs(coroutine): 更新协程相关文档
- 添加了 AsCoroutineInstruction()、ToCoroutineEnumerator() 和 StartTaskAsCoroutine()
  的使用场景说明
- 优化了等待异步方法的文档描述,明确不同 API 的适用场景
- 详细说明了 CancelWith 方法的节点有效性判断机制和停止条件
- 补充了 Godot 协程中 Task 转协程的具体使用建议
2026-03-12 12:49:29 +08:00
GeWuYou
1c30149ebd docs(coroutine): 更新协程系统文档内容
- 重新描述协程系统功能,强调基于 IEnumerator<IYieldInstruction> 的调度能力
- 更新核心概念介绍,明确协程系统的组成部分和架构设计
- 修改 CoroutineScheduler 使用示例,添加统计信息启用说明
- 完善 CoroutineHandle 的控制方法说明,包括暂停、恢复和终止操作
- 优化协程状态控制示例代码,展示标签和分组管理功能
- 重构等待指令说明,按时间帧、条件等待、Task桥接等方式分类
- 更新事件等待相关示例,改进超时处理和多事件等待功能
- 完善协程组合功能说明,包括子协程等待和多句柄等待
- 优化扩展方法介绍,按组合扩展、协程生成扩展、Task扩展等分类
- 更新命令、查询和Mediator扩展使用说明
- 修订异常处理机制说明,明确调度器异常处理方式
- 更新常见问题解答,澄清协程执行时机和线程模型概念
- 精简相关文档链接,移除冗余的系统集成说明
2026-03-12 12:41:53 +08:00
GeWuYou
4156839bd9 docs(godot): 更新协程系统文档内容
- 重构协程系统架构说明,明确核心组件和入口点
- 更新协程启动方式和基本用法示例代码
- 添加 Segment 分段调度机制详细说明
- 补充节点生命周期绑定和延迟调用功能介绍
- 完善常用等待指令和协程控制方法文档
- 优化事件总线集成和上下文感知集成说明
2026-03-12 12:41:22 +08:00
gewuyou
d038b67e29
Merge pull request #98 from GeWuYou/refactor/storage-async-safety
refactor(storage): 重构文件存储实现以支持异步安全锁和原子写入
2026-03-11 23:08:09 +08:00
GeWuYou
820cdcf0fa refactor(storage): 统一文件存储模块的依赖注入
- 在 FileStorage 中添加 System.IO 和 System.Text 引用
- 在 GodotFileStorage 中整合所有必要的命名空间引用
- 统一并发和序列化接口的依赖注入方式
- 添加 Godot 特定的 FileAccess 类型别名
- 优化 Godot 扩展功能的引用结构
2026-03-11 22:34:30 +08:00
GeWuYou
b01867b231 fix(storage): 修复文件存储组件的资源管理和死锁问题
- 添加了内部锁管理器所有权标识,防止外部传入的锁管理器被错误释放
- 在构造函数中正确初始化锁管理器的所有权状态
- 在Dispose方法中只释放内部创建的锁管理器,避免重复释放异常
- 为所有同步包装方法添加了ConfigureAwait(false)以避免死锁
- 更新了读取、写入、删除和检查存在的同步方法实现
- 为所有异步操作添加了适当的配置避免上下文切换问题
- 改进了Godot文件存储类的相同资源管理逻辑
- 为所有阻塞式同步方法添加了详细的XML注释警告说明
2026-03-11 22:26:01 +08:00
GeWuYou
494c341c08 refactor(storage): 重构文件存储实现以支持异步安全锁和原子写入
- 替换同步锁机制为异步键锁管理器,提升并发性能
- 实现原子写入功能,通过临时文件防止写入过程中的数据损坏
- 添加资源释放接口(IDisposable)和对象销毁检查
- 集成异步IO操作,包括缓冲区大小配置选项
- 更新Godot文件存储适配器以匹配新的异步安全机制
- 优化文件读取操作,支持异步文本读取避免阻塞
- 移除旧的并发字典锁实现,统一使用新的锁管理器
2026-03-11 21:57:04 +08:00
gewuyou
9c2e63f0e1
Merge pull request #96 from GeWuYou/feat/concurrency-add-async-key-lock-manager
feat(concurrency): 添加工业级异步键锁管理器
2026-03-11 19:41:07 +08:00
GeWuYou
378d7afb23 fix(concurrency): 修复异步锁管理器中的超时单位错误和资源泄漏问题
- 修正 _lockTimeoutTicks 为 _lockTimeoutMs,统一使用毫秒作为时间单位
- 在 AcquireLockAsync 方法中添加异常处理,防止锁等待失败时的资源泄漏
- 为同步 AcquireLock 方法添加 ConfigureAwait(false) 避免死锁风险
- 更新锁统计信息中的 WaitingCount 字段为近似值说明
- 修正清理逻辑中使用正确的超时单位进行比较
2026-03-11 19:17:03 +08:00
gewuyou
00a687168f
Merge pull request #97 from GeWuYou/refactor/scoped-array-optimization
refactor(core): 优化ScopedArray结构体实现
2026-03-11 12:53:44 +08:00
GeWuYou
b6c13088cd refactor(GFramework.Core): 移除ScopedArray的IDisposable接口实现
- 从ScopedArray结构体中移除IDisposable接口
- 保留数组池管理和自动释放功能
- 简化类型定义以提高性能表现
2026-03-11 12:44:32 +08:00
GeWuYou
ea79df232b refactor(GFramework.Core): 优化ScopedArray实现并添加资源清理功能
- 为ScopedArray<T>实现IDisposable接口以支持资源清理
- 修改Array属性访问方式,通过GetArray方法确保对象未被释放
- 更新Length属性实现,依赖Array属性而非直接访问私有字段
- 调整AsSpan方法实现,统一通过Array属性获取数组实例
- 重写索引器实现,使用Array属性替代直接字段访问
- 新增GetArray私有方法,用于检查对象状态并返回内部数组
- 添加ObjectDisposedException异常处理,防止访问已释放对象
2026-03-11 12:34:08 +08:00
GeWuYou
ffda10be86 refactor(core): 优化ScopedArray结构体实现
- 将ScopedArray从readonly struct改为ref struct以提高性能
- 添加_array字段存储数组引用并移除公共Array属性
- 在Dispose方法中添加空值检查避免重复释放
- 添加Span属性和索引器支持直接访问数组元素
- 使用#pragma warning禁用CA1819警告并优化代码风格
2026-03-11 08:58:33 +08:00
GeWuYou
b37873a67c feat(concurrency): 添加工业级异步键锁管理器
- 实现了基于键的细粒度异步锁机制
- 提供自动清理未使用锁的功能,避免内存泄漏
- 集成了统计信息收集功能,便于监控和调试
- 支持同步和异步两种锁获取方式
- 实现了锁句柄的自动释放机制
- 添加了完整的单元测试覆盖各种并发场景
2026-03-10 23:11:35 +08:00
gewuyou
11c7bc1457
Merge pull request #93 from GeWuYou/feat/result-add-try-map-bind-methods
feat(Result): 扩展Result结构体功能并优化实现
2026-03-10 21:16:41 +08:00
GeWuYou
c6024bf94a feat(GFramework.Core.Functional.Result): 增强Result类的安全性和健壮性
- 在构造函数中添加强制不变式检查,确保失败状态必须携带非空异常
- 为Try方法添加空值验证,防止传入空委托导致异常
- 为Map方法添加空值验证,增强方法调用的安全性
- 为Bind方法添加空值验证,提升代码健壮性
- 重构Map和Bind方法结构,使其更清晰易读
2026-03-10 21:09:58 +08:00
gewuyou
248a29b4df
Merge pull request #92 from GeWuYou/deepsource-autofix-834b3193
refactor: use ternary operator for conditional assignments
2026-03-10 20:25:35 +08:00
gewuyou
1f0eb55288
Merge pull request #94 from GeWuYou/refactor/pool-simplify-warning-messages
refactor(pool): 简化对象池释放警告消息
2026-03-10 20:24:58 +08:00
deepsource-autofix[bot]
caeb1ab80f
refactor: use ternary operator for conditional assignments
This PR refactors code that used multi-line if/else statements to use the ternary operator for more concise and readable assignments.

- if statement can be rewritten using the ternary operator: The original code assigned values based on Storage.ExistsAsync(key) with separate if and else blocks, leading to verbose multi-line statements. We have replaced these with single-line ternary expressions in both the generic GetAsync<T> method and the UnifiedSettingsFile loader, reducing code duplication and improving clarity.

> This Autofix was generated by AI. Please review the change before merging.
2026-03-10 11:21:39 +00:00
GeWuYou
4750910675 feat(Result): 扩展Result结构体功能并优化实现
- 添加StructLayout特性优化内存布局
- 将Failure方法中的Exception替换为InvalidOperationException
- 重构Equals方法提高比较逻辑的可读性
- 简化GetHashCode方法的哈希计算逻辑
- 更新ToString方法移除空值检查
- 新增Try方法用于安全执行可能抛出异常的操作
- 添加Map方法支持将Result成功状态映射到其他类型
- 实现Bind方法用于链式调用Result操作
2026-03-10 19:20:52 +08:00
GeWuYou
43b88e7573 refactor(pool): 简化对象池释放警告消息
- 移除冗余的 'Attempting to release object for key' 文本
- 删除重复的 'or incorrect key' 描述
- 简化警告消息以提高可读性
- 保持核心警告信息不变
2026-03-10 19:13:39 +08:00
gewuyou
8e4e794661
Merge pull request #91 from GeWuYou/refactor/namespace-pascalcase
Refactor/namespace pascalcase
2026-03-10 19:07:33 +08:00
GeWuYou
52f95c7e5f refactor(tests): 将Architecture目录重命名为Architectures
- 重命名GFramework.Core.Tests/Architecture目录为GFramework.Core.Tests/Architectures
- 更新所有相关文件中的命名空间引用
- 修复GameContextTests中TestArchitecture类的基类引用
- 修复TestArchitectureBase类的基类引用
- 修复ArchitectureTestsBase泛型约束中的类型引用
- 更新其他测试文件中的命名空间导入路径
2026-03-10 19:01:50 +08:00
GeWuYou
8ea462de28 test(architecture): 更新架构上下文测试以验证未注册组件抛出异常
- 修改 GetSystem 方法测试用例,验证未注册系统时抛出 InvalidOperationException
- 修改 GetModel 方法测试用例,验证未注册模型时抛出 InvalidOperationException
- 修改 GetUtility 方法测试用例,验证未注册工具时抛出 InvalidOperationException
- 更新异步架构测试中的系统销毁验证逻辑
- 移除对已销毁系统的空值检查断言,改为验证异步测试系统的销毁状态
2026-03-10 10:16:04 +08:00
GeWuYou
95de78efae refactor(architecture): 优化架构上下文中的服务缓存和空值处理
- 将服务缓存从 Dictionary 替换为 ConcurrentDictionary 以提高线程安全性
- 移除所有 GetService 相关方法的可空返回类型,统一改为非空返回
- 修改 GetOrCache 方法实现,使用 GetOrAdd 方法简化缓存逻辑
- 更新命令和事件总线调用方式,移除空值检查操作符
- 调整接口契约,明确服务不存在时抛出异常而非返回 null
- 优化依赖注入容器的服务获取流程,增强错误处理机制
2026-03-10 09:08:13 +08:00
GeWuYou
aeed1f903c refactor(GFramework.Ecs.Arch): 移除未使用的抽象依赖
- 从 ArchEcsModule.cs 中移除未使用的 GFramework.Ecs.Arch.Abstractions 引用
- 清理项目中不必要的命名空间引用以优化代码结构
2026-03-10 08:48:35 +08:00
GeWuYou
027a214479 refactor(core): 将System命名空间重命名为Systems
- 更新所有GFramework.Core.Abstractions.System引用为GFramework.Core.Abstractions.Systems
- 重命名GFramework.Core/System目录为GFramework.Core/Systems
- 重命名GFramework.Core.Tests/System目录为GFramework.Core.Tests/Systems
- 更新所有相关using语句和命名空间声明
- 修复测试文件中的命名空间引用
- 添加全局using引用GFramework.Core.Systems
2026-03-10 08:42:53 +08:00
GeWuYou
fb14d7122c docs(style): 更新文档中的命名空间导入格式
- 将所有小写的命名空间导入更正为首字母大写格式
- 统一 GFramework 框架的命名空间引用规范
- 修复 core、ecs、godot 等模块的命名空间导入错误
- 标准化文档示例代码中的 using 语句格式
- 确保所有文档中的命名空间引用保持一致性
- 更新 global using 语句以匹配正确的命名空间格式
2026-03-10 07:18:49 +08:00
gewuyou
53b04c12f0
Merge pull request #90 from GeWuYou/docs/ecs-documentation-improvements-
docs(ecs): 更新文档中的类型参数表示和相关链接
2026-03-08 21:54:44 +08:00
GeWuYou
f5d1985a59 docs(ecs): 更新文档中的类型参数表示和相关链接
- 将文档中的 `ArchSystemAdapter<T>` 替换为 `ArchSystemAdapter&lt;T&gt;` 以正确显示尖括号
- 移除重复的许可证信息和分隔线
- 删除过时的文档链接,保持导航结构简洁
2026-03-08 21:37:37 +08:00
gewuyou
05d7557fa1
Merge pull request #89 from GeWuYou/refactor/extract-ecs-to-independent-module
Refactor/extract ecs to independent module
2026-03-08 21:27:34 +08:00
GeWuYou
f771b7dbef chore(ci): 添加 GFramework.Ecs.Arch.Tests 测试步骤
- 为 CI 工作流添加新的测试步骤
- 配置 GFramework.Ecs.Arch.Tests 的测试运行命令
- 设置测试结果输出目录为 TestResults
- 使用 trx 格式记录测试日志文件
- 保持与现有测试配置一致的结构和格式
2026-03-08 21:01:13 +08:00
GeWuYou
f35c9309f3 docs(menu): 重构 ECS 文档导航结构
- 将 ECS 相关菜单项从 Core 部分独立出来
- 新增 ECS 概述页面和 Arch ECS 集成文档
- 删除旧的 Core/ECS 集成文档文件
- 更新侧边栏配置以支持新的 ECS 导航结构
2026-03-08 20:55:03 +08:00
GeWuYou
5c5525e3e9 refactor(architecture): 简化模块注册接口并增强配置管理
- 移除 RegisterBuiltInModules 方法中的 ArchitectureProperties 参数
- 更新 ArchitectureModuleRegistry 使用 ConcurrentDictionary 存储模块工厂
- 实现模块注册的幂等性检查,相同模块名只注册一次
- 为 ArchEcsModule 添加 ArchOptions 配置类支持
- 更新 UseArch 扩展方法传递配置选项给 ArchEcsModule
- 移除废弃的 properties 命名空间引用
- 添加显式注册集成测试验证模块配置功能
2026-03-08 20:47:26 +08:00
GeWuYou
ac2a9759e1 refactor(ArchEcsModule): 优化系统适配器管理
- 将 _systems 字段类型从 List 改为 IReadOnlyList
- 使用 GetAllByPriority 方法按优先级获取适配器
- 移除手动 AddRange 操作,直接赋值适配器列表
- 销毁时将 _systems 设置为空数组而非 Clear() 操作
2026-03-08 20:38:12 +08:00
GeWuYou
4257d58f86 feat(GFramework.Ecs.Arch): 注册模块自身到容器中
- 在 ArchEcsModule 初始化时注册模块自身到容器
- 移除不必要的空行以保持代码整洁
2026-03-08 20:33:00 +08:00
GeWuYou
bca92e52a3 refactor(ecs): 重构 Arch ECS 模块注册机制
- 移除自动初始化器,改用显式注册方式
- 修改 UseArch 扩展方法支持可选配置参数
- 更新文档说明新的集成方式和配置选项
- 删除自动注册相关的测试代码
- 调整 README 中的使用示例和架构说明
2026-03-08 20:19:24 +08:00
GeWuYou
af76e0ab0b refactor(ecs): 移除Arch ECS模块及相关组件和系统
- 删除Position组件结构体定义
- 删除Velocity组件结构体定义
- 删除MovementSystem移动系统实现
- 移除ArchEcsModule ECS模块管理器
- 删除ArchSystemAdapter适配器基类
- 从ServiceModuleManager中移除ECS模块注册逻辑
- 从ArchitectureProperties中移除EnableEcs配置选项
- 删除ECS相关的单元测试文件
- 从项目文件中移除Arch和Arch.System包引用
- 从解决方案文件中移除ECS相关项目引用
- 更新项目配置文件中的目标框架和测试项目属性
2026-03-08 19:45:36 +08:00
gewuyou
23f186d395
Merge pull request #88 from GeWuYou/refactor/controllers-to-context-aware-architecture-access
refactor(docs): 修正文档中关于IController的描述
2026-03-08 11:39:51 +08:00
GeWuYou
25f7779b4e refactor(docs): 将 Context 属性访问替换为扩展方法访问
- 将 Context.GetModel<T>() 调用替换为 this.GetModel<T>()
- 将 Context.GetSystem<T>() 调用替换为 this.GetSystem<T>()
- 将 Context.GetUtility<T>() 调用替换为 this.GetUtility<T>()
- 将 Context.SendCommand() 调用替换为 this.SendCommand()
- 将 Context.SendQuery() 调用替换为 this.SendQuery()
- 将 Context.SendEvent() 调用替换为 this.SendEvent()
- 将 Context.RegisterEvent<T>() 调用替换为 this.RegisterEvent<T>()
2026-03-08 11:37:31 +08:00
GeWuYou
1b9e81bbdb refactor(docs): 将控制器实现转换为上下文感知模式
- 将 IController 实现改为使用 [ContextAware] 特性和 partial 类
- 移除手动实现的 GetArchitecture 方法
- 将架构交互方法从 this 调用改为 Context 调用
- 添加必要的 using 语句以支持新的架构访问方式
- 更新所有涉及模型、系统、工具和事件的架构访问代码
- 统一架构访问模式以提高代码一致性和可维护性
2026-03-08 11:03:02 +08:00
gewuyou
5190b7a463
Merge pull request #87 from GeWuYou/docs/technical-documentation-update
docs(config): 更新文档导航结构并添加新章节
2026-03-07 23:37:01 +08:00
GeWuYou
0d20a28385 fix(docs): 修正 API 参考链接路径并移除重复侧边栏配置
- 修正了 API 参考链接路径,移除了末尾多余的斜杠
- 移除了重复的 API 参考侧边栏配置项
- 确保导航链接的一致性和正确性
2026-03-07 23:34:11 +08:00
GeWuYou
eaa59c03c3 docs(config): 更新文档导航结构并添加新章节
- 添加最佳实践导航菜单和相关页面链接
- 在核心模块侧边栏增加生命周期、CQRS模式、协程系统等新条目
- 为游戏模块添加数据管理、场景系统、UI系统等功能链接
- 在Godot集成部分新增暂停系统、对象池和日志系统文档
- 将规则生成器重命名为ContextAware生成器
- 在教程部分增加暂停系统实践、数据迁移和单元测试等内容
- 新增API参考、常见问题、故障排查等文档分类
- 为最佳实践页面配置详细的子菜单项
2026-03-07 23:30:15 +08:00
gewuyou
8a070af51b
Merge pull request #86 from GeWuYou/docs/technical-documentation-update
docs(guide): 添加 ContextAware 生成器文档并更新相关链接
2026-03-07 23:15:06 +08:00
GeWuYou
740cc66ac4 docs: 更新源生成器文档并调整配置
- 移除 .claude 设置文件
- 重构枚举扩展生成器文档,更新 API 使用方式和配置选项
- 调整日志生成器文档,更新属性使用方式和配置参数
- 修改 Git 忽略规则添加 .claude/settings.json
- 更新代码示例和最佳实践指南
2026-03-07 23:13:21 +08:00
GeWuYou
4804b75215 test(PlayerController): 将测试方法转换为异步任务
- 将 TestPlayerController 方法从同步改为异步
- 使用 Task 类型替代 void 返回类型
- 为测试方法添加 async 关键字修饰符
2026-03-07 22:56:58 +08:00
GeWuYou
3dce243bcd docs(source-generators): 修复上下文感知生成器文档中的错别字和链接
- 修复了代码注释中的错别字"生命期"为"生命周期"
- 移除了文档末尾的规则验证生成器链接引用
2026-03-07 22:55:37 +08:00
GeWuYou
6d398a515b docs(guide): 添加 ContextAware 生成器文档并更新相关链接
- 新增 ContextAware 生成器完整文档,介绍自动实现 IContextAware 接口的功能
- 更新索引页面中的相关链接,替换规则生成器为 ContextAware 生成器
- 修改基础使用示例中的命名空间引用和代码实现细节
- 补充测试场景配置和多架构场景的使用说明
- 添加最佳实践和诊断信息相关内容
2026-03-07 22:51:42 +08:00
gewuyou
575dcdf27b
Merge pull request #85 from GeWuYou/docs/technical-documentation-update
docs(guidelines): 更新错误处理和移动端优化最佳实践
2026-03-07 22:12:35 +08:00
GeWuYou
28ad02dc80 docs(best-practices): 更新移动端优化代码示例
- 添加了图形 API 和多线程渲染的配置说明
- 增加了运行时可调整的性能设置选项
- 优化了纹理质量和阴影设置参数
- 添加了目标帧率和 VSync 配置
- 实现了基于设备性能的质量等级自动调整
- 改进了垃圾回收优化策略和相关注释说明
- 添加了设备性能检测的辅助方法
2026-03-07 22:10:14 +08:00
GeWuYou
8554f01423 docs(guidelines): 更新错误处理和移动端优化最佳实践
- 添加完整的错误处理最佳实践指南,涵盖Result<T>和Option<T>使用方式
- 补充移动端性能优化策略,包括纹理压缩、对象池、内存管理和电池优化
- 更新单元测试教程中的相关文档链接
- 完善错误处理层次结构和测试示例代码
- 增加移动端UI优化和平台适配最佳实践
2026-03-07 22:05:48 +08:00
gewuyou
519e3a480b
Merge pull request #84 from GeWuYou/docs/technical-documentation-update
Docs/technical documentation update
2026-03-07 17:45:19 +08:00
GeWuYou
9edf64193f docs(architecture): 更新架构设计模式指南文档
- 将标题从"架构模式最佳实践"改为"架构设计模式指南"
- 添加全面的架构设计模式介绍和概述
- 新增MVC模式详细说明,包括概念、GFramework实现示例和最佳实践
- 新增MVVM模式详细说明,包括概念、GFramework实现示例和最佳实践
- 新增命令模式详细说明,包括概念、实现示例和撤销功能支持
- 新增查询模式详细说明,包括CQRS概念和复杂查询示例
- 新增事件驱动模式详细说明,包括事件定义和监听实现
- 新增依赖注入模式详细说明,包括构造函数注入示例
- 新增服务定位器模式详细说明,包括与依赖注入对比
- 新增对象池模式详细说明,包括通用对象池实现
- 新增状态模式详细说明,包括异步状态和状态机系统
- 补充模式选择与组合建议,针对小型、中型、大型项目提供不同方案
- 更新代码示例中的泛型语法格式,统一使用尖括号表示法
2026-03-07 17:32:26 +08:00
GeWuYou
739565d278 chore(build): 更新.gitignore配置以忽略AI相关和文档构建缓存文件
- 添加ai相关目录到忽略列表
- 忽略.omc/目录及其内容
- 忽略docs/.omc/目录
- 忽略docs/.vitepress/cache/目录
- 移除已删除的依赖文件和缓存文件
2026-03-07 17:12:11 +08:00
GeWuYou
a021941cab docs(guidelines): 添加文档编写规范和配置设置
- 创建 DOCUMENTATION_STANDARDS.md 文件定义 Markdown 语法规范
- 添加泛型标记转义规则和 HTML 标签转义说明
- 提供内部链接验证规则和已存在文档路径列表
- 定义代码块规范和 Frontmatter 规范
- 添加文档结构规范和验证清单
- 配置 .claude/settings.json 启用 oh-my-claudecode 插件
2026-03-07 15:52:08 +08:00
GeWuYou
c969a9a022 docs(core): 修复文档中的泛型符号显示问题
- 修复了配置模块文档中 GetConfig、SetConfig、WatchConfig 方法的泛型符号
- 修复了 ECS 模块文档中 ArchSystemAdapter 的泛型符号显示
- 修复了函数式编程文档中 Option 和 Result 类型的泛型符号
- 修复了序列化和存储模块中各类方法的泛型符号显示
- 修正了存储模块文档中的序列化系统链接路径
- 修复了函数式编程教程中 Option 和 Result 的泛型符号显示
2026-03-07 15:51:47 +08:00
GeWuYou
84d7408bef docs(tutorials): 添加系统实现教程并完善核心组件文档
- 新增协程系统、状态机、暂停系统、资源管理和存档系统教程
- 添加 Configuration 包详细使用说明文档
- 创建 ECS 系统集成指南,介绍 Arch.Core 集成方案
- 提供完整的组件定义、系统创建和实体管理示例
- 包含性能优化建议和最佳实践指导
2026-03-07 15:44:34 +08:00
GeWuYou
b4ef62c731 docs: 更新文档链接和相关资源引用
- 修改 resource.md 中 Godot 资源仓储链接为 Godot 扩展
- 更新 data.md 中相关文档链接,将存储和序列化系统替换为设置系统和 Godot 集成
- 将多个教程文档中的架构概览链接替换为快速开始链接
- 调整 save-system.md 中的相关文档列表,更新数据迁移和系统依赖链接
- 为 bun.lock 添加 configVersion 字段
2026-03-07 14:00:35 +08:00
GeWuYou
b3838ce8c7 docs(godot): 添加 Godot 架构集成和场景系统文档
- 新增 Godot 架构集成文档,介绍 AbstractArchitecture 和 ArchitectureAnchor
- 添加 Godot 场景系统文档,涵盖 SceneBehavior 和场景生命周期管理
- 包含数据与存档系统文档,介绍 IDataRepository 和 ISaveRepository 接口
- 提供完整的代码示例和最佳实践指南
- 覆盖多架构支持、热重载和场景参数传递等高级功能
- 包含常见问题解答和相关文档链接
2026-03-07 13:02:19 +08:00
gewuyou
23f70a6e5a
Merge pull request #83 from GeWuYou/feat/events-enhanced-bus
引入增强版事件总线,支持可过滤事件与弱事件,并可选地对事件发布与处理进行统计。

新特性:

新增 EnhancedEventBus,支持标准、优先级、可过滤和弱事件的发布与订阅,并提供可选的统计功能。
引入可过滤事件,支持可插拔的 IEventFilter 实现,包括基于谓词的过滤器和采样过滤器。
新增事件统计抽象及实现,用于跟踪发布/处理/失败计数和监听器指标,并支持生成统计报告。
测试:

新增全面的单元测试覆盖弱事件行为,包括与 GC 的交互、清理、注销以及与统计功能的集成。
新增基于谓词和采样事件过滤器的测试,包括多个过滤器、移除/清空行为以及对无效配置的校验。
新增事件统计测试,用于验证计数器、按事件类型的指标、重置行为、报告输出以及线程安全性。
2026-03-06 17:04:22 +08:00
GeWuYou
c5bd08acfd fix(events): 修正优先级事件触发传播行为
- 将优先级事件的传播模式从 Continue 修改为 All
- 确保事件能够正确传递到所有监听器
2026-03-06 16:58:27 +08:00
GeWuYou
5ef464c484 feat(event): 添加事件统计功能和优化性能
- 在EasyEventGeneric中添加GetListenerCount方法获取监听器数量
- 重新排列EnhancedEventBus中字段顺序以优化内存布局
- 为所有Send方法添加发布统计记录功能
- 实现事件处理器包装以添加统计功能,包括成功处理和失败记录
- 添加监听器数量统计更新机制,自动跟踪注册和注销事件
- 重构FilterableEvent中的过滤逻辑以减少锁持有时间
- 在PriorityEvent中添加GetListenerCount方法获取总监听器数量
- 移除EventStatistics中的过时字段并优化ActiveEventTypes和ActiveListeners计算
- 清理StatisticsEventDecorator中的并发问题和实现装饰器模式
2026-03-06 16:40:54 +08:00
GeWuYou
e738e59a58 feat(events): 添加增强事件总线支持过滤器和统计功能
- 实现 EnhancedEventBus 支持过滤器、弱引用事件和统计功能
- 添加 FilterableEvent 和 WeakEvent 支持事件过滤和弱引用订阅
- 实现 PredicateEventFilter 和 SamplingEventFilter 事件过滤器
- 添加 EventStatistics 统计事件发布、处理和失败次数
- 实现完整的单元测试验证过滤器和统计功能
2026-03-06 16:09:40 +08:00
gewuyou
1b92bda8ba
Merge pull request #82 from GeWuYou/feat/coroutine-enhancements
为调度器新增协程分组、优先级与统计能力,以及相应的抽象与测试。

New Features:

引入协程优先级等级,并在调度器中按优先级顺序执行协程。
添加协程分组支持,用于批量暂停、恢复、终止以及计数操作。
提供协程统计接口及实现,用于跟踪数量、执行时间指标以及按优先级/标签划分的数据,并可在调度器上按需启用。
暴露一个可控的 FakeTimeSource 实现,用于驱动可确定性的协程测试。
Enhancements:

扩展协程元数据和槽位以存储优先级、分组信息以及开始时间戳,并相应更新调度器生命周期处理逻辑。
Tests:

添加单元测试,覆盖协程统计行为与报告、分组管理操作以及基于优先级的执行顺序。
2026-03-06 13:13:54 +08:00
GeWuYou
e5bd972ee7 fix(coroutine): 修复协程调度器中的潜在异常问题
- 在KillByTag方法中创建句柄数组副本以避免集合被修改的异常
- 修复Complete方法的缩进格式问题
- 为WaitCommandSwitch添加默认分支以处理未知类型的等待指令
2026-03-06 13:07:18 +08:00
GeWuYou
74f27ddfd5 refactor(coroutine): 优化协程调度器中的暂停计数统计
- 引入 _pausedCount 字段直接跟踪暂停协程数量
- 将统计信息中的 ActiveCount 和 PausedCount 改为线程安全的原子操作
- 在暂停和恢复协程时直接更新 _pausedCount 计数
- 修复 KillGroup 方法中的并发修改异常问题
- 重置统计信息时使用原子操作清零计数字段
2026-03-06 12:59:05 +08:00
GeWuYou
06114db8bd refactor(coroutine): 修改协程优先级枚举的基础类型
- 将 CoroutinePriority 枚举的基础类型从 byte 移除
- 优化枚举类型的定义方式
2026-03-06 12:36:50 +08:00
GeWuYou
e5e3a1c0ca feat(coroutine): 添加协程分组管理和优先级支持
- 实现协程分组功能,支持批量暂停、恢复和终止协程
- 添加协程优先级系统,支持从最低到最高的5个优先级级别
- 引入协程统计功能,跟踪启动、完成、失败数量及执行时间
- 添加FakeTimeSource用于协程测试的时间控制
- 实现按优先级排序的协程执行机制
- 添加协程执行时间戳记录功能
- 实现完整的协程统计报告生成功能
2026-03-06 12:34:12 +08:00
GeWuYou
16d8cad4f3 refactor(ioc): 优化依赖注入容器的优先级排序实现
- 修改 MicrosoftDiContainer 中 GetAllByPriority 方法的排序逻辑,使用 OrderBy 确保稳定排序
- 修正注释中的中文描述,明确优先级排序规则
- 将 PriorityUsageAnalyzer 中的硬编码诊断规则替换为统一的 PriorityDiagnostic
- 在 PriorityGenerator 中添加对嵌套类的支持检查,报告 GF_Priority_005 错误
- 改进生成文件的命名策略,使用完整元数据名称避免冲突
- 更新 AnalyzerReleases.Unshipped.md 文档,添加新的诊断规则说明
- 移除 PriorityGeneratorSnapshotTests 中关于嵌套类的测试用例
2026-03-05 22:52:59 +08:00
GeWuYou
330bd8b0b0 feat(generator): 添加优先级源代码生成器和相关分析器
- 新增 PriorityGenerator 源生成器,自动生成 IPrioritized 接口实现
- 添加 PriorityAttribute 特性,用于标记类的优先级值
- 实现 PriorityUsageAnalyzer 分析器,检测优先级使用建议
- 添加预定义的 PriorityGroup 常量,提供标准优先级分组
- 在 AnalyzerReleases.Unshipped.md 中注册新的诊断规则
- 更新项目依赖,升级 Meziantou.Analyzer 和 Polyfill 版本
- 为测试项目添加源生成器项目引用
- 添加 PriorityGenerator 的快照测试用例
2026-03-05 22:52:59 +08:00
GeWuYou
f8c39e46a5 feat(architecture): 添加按优先级获取服务实例的功能
- 在 ArchitectureContext 中添加 GetServicesByPriority、GetSystemsByPriority、
  GetModelsByPriority 和 GetUtilitiesByPriority 方法
- 在 ContextAwareServiceExtensions 中添加对应的扩展方法支持按优先级获取实例
- 在 MicrosoftDiContainer 中实现 GetAllByPriority 方法和 SortByPriority 排序逻辑
- 在抽象层定义 IPrioritized 接口用于标记可排序的服务组件
- 为 PauseToken 添加完整的相等性比较和字符串转换方法
- 添加全面的单元测试验证优先级排序功能的正确性
2026-03-05 22:52:59 +08:00
GeWuYou
b4d17edeee refactor(core): 移除废弃的同步命令查询扩展方法并简化类型引用
- 移除了 ContextAwareCommandExtensions 中废弃的 SendCommand 同步方法
- 移除了 ContextAwareQueryExtensions 中废弃的 SendQuery 同步方法
- 简化了 ICommand 和 IQuery 的类型引用,移除冗长的命名空间前缀
- 保持了异步命令和查询方法的功能完整性
2026-03-05 22:52:39 +08:00
dependabot[bot]
71b5831261 Bump Meziantou.Polyfill from 1.0.101 to 1.0.103
---
updated-dependencies:
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Polyfill
  dependency-version: 1.0.103
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 21:59:59 +08:00
dependabot[bot]
a5d3289f5c Bump Meziantou.Analyzer from 3.0.17 to 3.0.19
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 21:59:46 +08:00
dependabot[bot]
9deae03da0 chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 21:59:23 +08:00
dependabot[bot]
6d67a125cb chore(deps): bump trufflesecurity/trufflehog from 3.93.4 to 3.93.7
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.93.4 to 3.93.7.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.93.4...v3.93.7)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.93.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 21:59:15 +08:00
dependabot[bot]
90796543b7 chore(deps): bump oxsecurity/megalinter from 9.3.0 to 9.4.0
Bumps [oxsecurity/megalinter](https://github.com/oxsecurity/megalinter) from 9.3.0 to 9.4.0.
- [Release notes](https://github.com/oxsecurity/megalinter/releases)
- [Changelog](https://github.com/oxsecurity/megalinter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxsecurity/megalinter/compare/v9.3.0...v9.4.0)

---
updated-dependencies:
- dependency-name: oxsecurity/megalinter
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 21:59:05 +08:00
GeWuYou
bbb91d597a docs: 添加协程系统、CQRS与Mediator、生命周期管理、资源管理系统文档
- 新增协程系统文档,介绍协程调度器、等待指令、基本用法和最佳实践
- 新增CQRS与Mediator文档,涵盖命令查询职责分离、处理器实现和管道行为
- 新增生命周期管理文档,说明同步异步初始化和销毁机制
- 新增资源管理系统文档,介绍资源加载、缓存和引用计数管理功能
2026-03-05 21:53:55 +08:00
GeWuYou
ae8c3e4fc4 feat(logging): 扩展ILogAppender接口并实现时间提供者注入
- 将ILogAppender接口继承IDisposable以支持资源释放
- 添加ITimeProvider和SystemTimeProvider接口及实现类
- 创建FakeTimeProvider用于测试时间控制
- 修改SamplingFilter支持时间提供者注入和最大日志记录器数量限制
- 为SamplingFilter添加过期状态清理功能
- 修改StatisticsAppender使用时间提供者并实现IDisposable
- 更新相关单元测试以使用FakeTimeProvider进行精确时间控制
- 在测试类中为模拟追加器添加Dispose方法实现
2026-03-05 16:26:47 +08:00
GeWuYou
cd407dc93c test(logging): 添加采样过滤器和统计附加器的单元测试
- 为SamplingFilter添加完整的单元测试覆盖采样率、时间窗口、线程安全等功能
- 为StatisticsAppender添加全面的单元测试验证统计计算、错误率跟踪、报告生成功能
- 测试各个日志级别和记录器的独立状态维护
- 验证多线程环境下的数据一致性
- 包含边界条件和异常情况的测试用例
2026-03-05 16:26:47 +08:00
GeWuYou
c5ed053f2c feat(logging): 添加日志采样过滤器和统计追加器功能
- 实现 SamplingFilter 类用于限制高频日志输出,支持线程安全的采样控制
- 添加 StatisticsAppender 类用于收集日志指标,包括总数量、错误率、级别分布等统计信息
- 提供时间窗口内的采样机制,可配置采样率和时间窗口参数
- 实现完整的统计报告生成功能,支持按级别和日志记录器分类展示
- 添加线程安全的数据结构确保并发环境下的数据一致性
- 提供统计重置和数据查询接口便于监控和调试
2026-03-05 16:26:47 +08:00
deepsource-autofix[bot]
c9617fba8a refactor: use equality operators when evaluating bool?
This PR replaces the use of null-coalescing defaults on nullable booleans with explicit equality checks across instance control methods. The changes make the intent clearer by ensuring only a true result is treated as a positive outcome.

- Consider using the equality operators when evaluating `bool?`: DeepSource flagged instances where `GetInstance(...)?... ?? false` was used to coerce a nullable bool to false implicitly. We replaced these patterns in `PauseOnInstance`, `ResumeOnInstance`, and `KillOnInstance` with `== true` comparisons. Using `== true` clearly indicates that only an explicit true value returns a positive result and avoids ambiguity when the value is null.

> This Autofix was generated by AI. Please review the change before merging.
2026-03-05 14:01:42 +08:00
GeWuYou
41592013ec refactor(GFramework.Core): 移除 ResultState 枚举的字节类型声明
- 移除了 ResultState 枚举的 byte 类型声明,改用默认整型
- 简化了枚举类型的定义,提高代码可读性
2026-03-05 13:12:21 +08:00
GeWuYou
e96b5f24b4 refactor(godot): 将异步方法重命名为遵循Async约定的方法名
- 将WaitUntilReady方法重命名为WaitUntilReadyAsync
- 将AddChildX方法重命名为AddChildXAsync
- 更新所有相关文档中的方法调用引用
- 修改架构层锚点等待方法调用为异步版本
- 更新测试代码中的方法调用以匹配新的方法名
- 调整函数式异步扩展方法命名约定
- 统一所有异步扩展方法的命名规范
2026-03-05 12:54:59 +08:00
GeWuYou
8db379c53f refactor(mediator): 移除自动生成的程序集引用和中介者实现代码
- 删除了 AssemblyReference.g.cs 中的程序集引用生成代码
- 移除了 Mediator.g.cs 中的中介者依赖注入扩展实现
- 清理了内部消息处理器基类和包装器的自动生成代码
- 移除了容器探测器和元数据相关的生成代码
- 删除了中介者主类的自动生成实现
2026-03-05 08:52:38 +08:00
GeWuYou
54bed12056 fix(config): 修复配置管理器变更检测和资源配置优化
- 修改 ConfigurationManager 中的 AddOrUpdate 逻辑,先获取旧值再更新以正确检测变更
- 只有在配置值真正发生变化时才触发监听器回调
- 更新异常日志记录方式,移除冗余的标签前缀
- 将 ConfigWatcherUnRegister 移动到正确的命名空间
- 修复 ResourceManager 中的引用计数逻辑,移除重复的 AddReference 调用
- 优化资源加载和卸载时的异常处理和日志记录
- 更新测试注释以反映正确的引用计数行为
2026-03-05 08:34:05 +08:00
GeWuYou
7919c93f44 feat(resource): 添加资源管理系统和日志集成
- 实现了完整的资源管理系统,包括资源加载、缓存和卸载功能
- 添加了 IResourceHandle、IResourceLoader、IResourceManager 和 IResourceReleaseStrategy 接口定义
- 实现了 AutoReleaseStrategy 和 ManualReleaseStrategy 两种资源释放策略
- 创建了 ResourceCache 缓存系统和 ResourceHandle 资源句柄管理
- 在 ConfigurationManager 和 CoroutineScheduler 中集成了 ILogger 日志功能
- 添加了全面的 ResourceManagerTests 单元测试覆盖各种使用场景
2026-03-05 08:34:05 +08:00
GeWuYou
d8cd22a424 feat(configuration): 添加配置管理器功能
- 实现了 IConfigurationManager 接口定义配置管理契约
- 创建 ConfigurationManager 类提供线程安全的配置存储和访问
- 添加配置的增删改查功能支持泛型类型转换
- 实现配置变更监听机制和取消注册功能
- 提供 JSON 格式导入导出和文件读写功能
- 添加完整的单元测试覆盖并发场景和边界条件
- 实现 ConfigWatcherUnRegister 类处理监听器注销逻辑
2026-03-05 08:34:05 +08:00
GeWuYou
ffaace4538 refactor(core): 重构上下文感知命令和查询扩展方法
- 将原有的 ContextAwareCommandExtensions 中的 Mediator 相关方法分离到新的 ContextAwareMediatorCommandExtensions 类中
- 将原有的 ContextAwareQueryExtensions 中的 Mediator 相关方法分离到新的 ContextAwareMediatorQueryExtensions 类中
- 移除 ContextAwareCommandExtensions 中的异步命令方法 SendCommandAsync
- 移除 ContextAwareQueryExtensions 中的异步查询方法 SendQueryAsync
- 修复了 ContextAwareCommandExtensions 中的泛型类型参数引用问题
- 统一了代码格式和命名空间引用
- 保持了原有功能的向后兼容性
2026-03-05 08:18:57 +08:00
GeWuYou
bde1af2c2e feat(architecture): 添加批量获取组件实例的功能
- 在 ArchitectureContext 中添加 GetServices、GetSystems、GetModels 和 GetUtilities 方法
- 扩展 IArchitectureContext 接口以支持批量获取各类组件实例
- 在测试类中实现相应的批量获取功能
- 将原有的 ContextAwareExtensions 拆分为多个专门的扩展类文件
- 新增 ContextAwareCommandExtensions、ContextAwareEnvironmentExtensions 和 ContextAwareEventExtensions 等扩展类
- 提供了更完善的架构上下文组件访问能力
2026-03-05 08:18:57 +08:00
GeWuYou
d88aa12014 fix(logging): 修复异步日志输出器刷新机制并增强线程安全性
- 实现了基于信号量的可靠Flush完成通知机制
- 添加了OnFlushCompleted事件用于监控刷新操作结果
- 修复了BindaleProperty的线程安全问题,添加锁保护
- 将协程异常回调改为异步执行,防止阻塞调度器主循环
- 优化了AsyncLogAppender的资源清理逻辑
- 增强了Flush方法的超时处理机制
2026-03-04 11:04:59 +08:00
GeWuYou
f984f4a600 refactor(core): 优化核心组件的线程安全性和错误处理
- 重构 AsyncLogAppender 的 Flush 方法,添加超时控制和 SpinWait 优化
- 为 BindableProperty 添加线程安全锁保护,确保并发访问的安全性
- 在 BindableProperty 中实现回调外部调用以避免死锁问题
- 为 EasyEvents 使用 ConcurrentDictionary 替代 Dictionary 提高并发性能
- 添加协程调度器异常处理回调机制,防止异常传播导致调度器崩溃
- 为 FileAppender 添加初始化异常处理和资源清理逻辑
- 补充完整的单元测试覆盖并发场景下的线程安全性验证
2026-03-04 11:04:59 +08:00
GeWuYou
b417ece73a chore(dependencies): 移除 LanguageExt 相关依赖和引用
- 从 GFramework.Game 项目中移除 LanguageExt.Core 包引用
- 从 GFramework.Godot 项目中移除 LanguageExt.Core 包引用
- 从全局引用文件中移除 LanguageExt.Common 引用
- 从全局引用文件中移除 LanguageExt.Effects 引用
- 从全局引用文件中移除 LanguageExt.Pretty 引用
- 保留必要的 System.Threading.Tasks 引用
2026-03-03 22:11:13 +08:00
GeWuYou
1df4e78cdc style(tests): 统一事件测试中的lambda表达式格式
- 在EasyEvent_UnRegister_Should_Remove_Handler方法中将lambda表达式改为块状格式
- 在OrEventTests测试中将lambda表达式改为块状格式
- 保持代码风格一致性,所有lambda表达式都使用大括号包围
2026-03-02 22:01:22 +08:00
deepsource-autofix[bot]
a30abdb4c3 refactor: simplify lambda expressions
This PR refactors numerous lambda expressions by removing unnecessary braces and streamlining single-statement lambdas throughout the codebase, improving readability and maintainability.

- Consider simplifying lambda when its body has a single statement: DeepSource flagged lambdas written with a block body for only one statement, causing extra verbosity. This update converts those to concise expression-bodied lambdas by stripping out the curly braces, applied across test assertions, event registrations, and unregister logic. The code is now cleaner and more consistent.

> This Autofix was generated by AI. Please review the change before merging.
2026-03-02 22:01:22 +08:00
GeWuYou
50c73a7d7c fix(pause): 修复暂停管理器销毁时的并发问题
- 在销毁过程中收集暂停组和处理器快照,避免并发修改异常
- 在锁外通知所有之前暂停的组恢复,保持生命周期信号一致性
- 添加异常处理确保单个处理器失败不影响其他处理器的通知
- 修改文件过滤规则以正确包含测试文件路径
2026-03-02 21:51:35 +08:00
GeWuYou
ccc3d046ca fix(pause): 修复暂停管理器的并发安全和资源清理问题
- 添加了_disposed标志位用于跟踪对象销毁状态
- 实现了完整的DestroyAsync方法进行资源清理和数据结构清空
- 添加了ThrowIfDisposed方法防止对象销毁后被使用
- 将状态变更通知移到锁外部以避免死锁问题
- 在多个公共方法中添加了销毁状态检查
- 修复了ClearGroup和ClearAll方法中的死锁风险
- 改进了异常处理机制,确保线程安全
2026-03-02 21:51:35 +08:00
GeWuYou
7734fba56f feat(pause): 添加暂停栈管理系统
- 实现了 PauseStackManager 核心管理器,支持嵌套暂停和分组管理
- 添加了 PauseToken 暂停令牌和 PauseGroup 暂停组枚举
- 创建了 PauseScope 作用域类,支持 using 语法自动管理暂停生命周期
- 实现了线程安全的暂停栈操作,包括 Push、Pop 和状态查询
- 添加了暂停处理器接口 IPauseHandler 和 Godot 平台具体实现
- 提供了完整的单元测试覆盖基础功能、嵌套暂停、分组管理和线程安全场景
2026-03-02 21:51:35 +08:00
GeWuYou
aa13760748 refactor(functional): 统一功能模块命名空间格式
- 将 GFramework.Core.Functional 命名空间统一改为 GFramework.Core.functional
- 更新 AsyncFunctionalExtensions.cs 中的命名空间声明
- 移除不必要的 using 指令,包括 GFramework.Core.Functional 的导入
- 调整测试文件中的命名空间引用以匹配新的命名空间格式
- 确保所有相关文件都使用一致的小写命名空间约定
2026-03-02 21:51:35 +08:00
GeWuYou
e391bab1ee refactor(ecs): 更新 ArchSystemAdapter 中 OnUpdate 方法的文档注释
- 修改了核心更新逻辑方法的文档描述
- 明确说明该方法为受保护虚方法,默认不执行任何操作
- 详细说明子类可以按需选择性重写此方法来实现具体系统逻辑
- 更新了参数说明文档
2026-03-02 21:20:50 +08:00
GeWuYou
db716a63cb fix(ecs): 修复异步销毁方法返回值问题
- 移除 DestroyAsync 方法中的 async 关键字
- 修改条件判断逻辑,确保返回正确的 ValueTask.CompletedTask
- 删除不必要的 await 关键字,直接返回 ValueTask.CompletedTask
- 保持方法的异步操作正确性
2026-03-02 21:20:50 +08:00
GeWuYou
155ca3024b fix(ecs): 修复模块重复初始化和系统更新问题
- 添加 _isInitialized 标志防止 ArchEcsModule 重复初始化
- 在 Initialize 方法中检查是否已初始化避免重复执行
- 设置初始化标志在所有系统初始化完成后
- 修改 DestroyAsync 方法确保仅在已初始化时执行销毁
- 重置 _isInitialized 标志为 false 在销毁时
- 修正 ArchSystemAdapter 注释描述 OnUpdate 为虚方法而非抽象方法
- 简化 EcsAdvancedTests 中的断言语法移除不必要的大括号
2026-03-02 21:20:50 +08:00
GeWuYou
43dc5a4d11 refactor(ecs): 将 ECS 系统重构为基于 Arch 的原生实现
- 将 MovementSystem 从继承 EcsSystemBase 改为继承 ArchSystemAdapter
- 更新 MovementSystem 的初始化和更新方法以适配 Arch 架构
- 移除测试代码中的 ECS 相关接口实现和抽象层
- 将测试用例从 GFramework ECS API 迁移到 Arch 原生 API
- 更新 ECS 测试类以使用 Arch World 和实体操作方法
- 重构 ECS 模块初始化流程以支持 Arch 系统注册和管理
2026-03-02 21:20:50 +08:00
GeWuYou
40ba109671 refactor(ecs): 优化位置和速度组件的内存布局
- 为 Position 结构体添加 StructLayout 特性以确保顺序布局
- 为 Velocity 结构体添加 StructLayout 特性以确保顺序布局
- 更新 Velocity 组件的 XML 文档注释,提供更详细的描述
- 优化 Velocity 组件属性的文档注释,明确单位信息
- 添加 System.Runtime.InteropServices 命名空间引用
2026-03-02 21:20:50 +08:00
GeWuYou
d7bd9fc569 refactor(ecs): 将ECS系统重构为Arch适配器模式
- 移除原有的ECS基础实现和接口定义
- 添加ArchEcsModule作为新的ECS模块实现
- 创建ArchSystemAdapter基类用于桥接Arch系统
- 修改MovementSystem继承ArchSystemAdapter适配新架构
- 更新ServiceModuleManager使用新的ArchECS模块
- 移除ArchitectureContext中的ECS相关方法
- 从项目中移除对Arch包的直接依赖引用
2026-03-02 21:20:50 +08:00
GeWuYou
3675666e13 refactor(core): 重命名EcsModule为EcsServiceModule以提高命名一致性
- 将EcsModule类重命名为EcsServiceModule
- 更新构造函数名称以匹配新的类名
- 修改ModuleName属性中的类型引用
- 在服务模块管理器中更新模块实例化调用
2026-03-02 21:20:50 +08:00
GeWuYou
fc93ab6e4c chore(config): 添加测试文件排除配置到 deepsource
- 排除 **/*.Tests.cs 模式
- 排除 **/*Test.cs 模式
- 排除 **/tests/** 目录
- 排除 **/*Tests.cs 模式
- 排除 **/Tests/** 目录
2026-03-02 12:42:09 +08:00
GeWuYou
a53898dd43 feat(rule): 添加上下文提供者重置功能
- 添加 ResetContextProvider 方法用于重置上下文提供者为默认值
- 为方法添加 XML 文档注释说明用途
- 实现测试清理相关的上下文管理功能
2026-03-02 12:42:09 +08:00
GeWuYou
3ecce110ed feat(architecture): 添加架构上下文提供者和相关测试
- 新增 IArchitectureContextProvider 接口定义
- 实现 GameContextProvider 类提供上下文获取功能
- 添加 GameContext 静态类用于获取架构上下文
- 创建 ContextProviderTests 测试上下文提供者功能
- 实现 RegistryInitializationHookBase 抽象基类的完整测试
- 修改 IArchitectureContext.GetUtility 方法为虚拟方法以支持重写
2026-03-02 12:42:09 +08:00
GeWuYou
0ed8edf015 refactor(context): 重构上下文管理实现
- 引入 IArchitectureContextProvider 接口解耦上下文获取逻辑
- 创建 GameContextProvider 作为默认上下文提供者
- 添加 ScopedContextProvider 支持多架构实例场景
- 修改源代码生成器使用上下文提供者模式
- 增加 SetContextProvider 方法支持测试和多架构场景
- 添加 RegistryInitializationHookBase 简化注册表初始化逻辑
2026-03-02 12:42:09 +08:00
dependabot[bot]
f98c7f16cf chore(deps): bump trufflesecurity/trufflehog from 3.93.3 to 3.93.4
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.93.3 to 3.93.4.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.93.3...v3.93.4)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.93.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 21:54:36 +08:00
dependabot[bot]
88e65bc276 Bump Meziantou.Analyzer from 3.0.12 to 3.0.17
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 3.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 21:53:47 +08:00
dependabot[bot]
d8ac30d1b6 Bump Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0
---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 21:52:42 +08:00
GeWuYou
13229f1c91 refactor(logging): 优化文件追加器测试中的资源管理
- 重构 Constructor_ShouldCreateDirectoryIfNotExists 测试方法名称为更描述性的格式
- 使用 using 语句块确保 FileAppender 资源得到正确释放
- 改进测试代码结构以提高可读性和资源清理可靠性
2026-02-26 19:57:42 +08:00
GeWuYou
e94e4890cd fix(logging): 统一使用UTC时间戳记录日志
- 将所有DateTime.Now替换为DateTime.UtcNow以确保时区一致性
- 修复文档中的时间戳记录方式
- 更新测试代码中的时间戳生成逻辑
- 统一框架各模块的时间记录标准
2026-02-26 19:57:42 +08:00
GeWuYou
7d0e5931d1 refactor(logging): 优化日志系统的时间戳和代码实现
- 将时间戳从本地时间改为UTC时间以提高一致性
- 使用ToUpperInvariant替代ToUpper提高文化区域安全性
- 简化LogContext中的空值检查逻辑
- 重构CompositeDisposable类以使用主构造函数语法
- 更新测试代码中的时间戳处理方式
2026-02-26 19:57:42 +08:00
GeWuYou
466aae49ec feat(logging): 增强日志配置加载器功能
- 添加 JsonStringEnumConverter 支持枚举的驼峰命名转换
- 实现 ConfigurableLoggerFactory 的 IDisposable 接口确保资源正确释放
- 支持日志级别配置的前缀匹配功能(命名空间层级匹配)
- 优化测试代码中的资源管理,使用 using 语句确保对象正确释放
- 修复 JsonLogFormatter 测试中的属性访问逻辑,使用 TryGetProperty 安全访问
- 将测试中的异常断言从 ArgumentNullException 更新为 ArgumentException
2026-02-26 19:57:42 +08:00
GeWuYou
abdf4cc690 test(logging): 添加日志系统单元测试
- 为 AsyncLogAppender 添加完整功能测试,包括异步写入、缓冲区管理、并发处理等场景
- 为 CachedLoggerFactory 添加缓存机制测试,验证相同名称和级别的日志记录器重用
- 为 CompositeFilter 添加过滤器组合测试,验证多个过滤器的逻辑组合功能
- 为 CompositeLogger 添加复合日志记录器测试,验证多追加器写入和级别过滤功能
- 为 ConsoleAppender 添加控制台追加器测试,验证格式化输出和过滤器支持
- 为 DefaultLogFormatter 添加默认格式化器测试,验证基本格式化和异常处理功能
- 为 FileAppender 添加文件追加器测试,验证文件写入、目录创建和追加模式功能
- 为 JsonLogFormatter 添加 JSON 格式化器测试,验证 JSON 输出和属性序列化功能
- 为 LogContext 添加日志上下文测试,验证属性推送和作用域管理功能
2026-02-26 19:57:42 +08:00
GeWuYou
1ba771e13a feat(logging): 实现结构化日志记录和异步日志输出功能
- 将 AbstractLogger 实现从 ILogger 扩展为 IStructuredLogger 接口
- 添加通用日志方法 Log(LogLevel, string, params object[]) 支持格式化参数
- 实现结构化日志方法支持属性键值对记录
- 添加 ConsoleAppender、FileAppender 和 AsyncLogAppender 日志输出器
- 实现 CompositeFilter 过滤器和 DefaultLogFormatter、JsonLogFormatter 格式化器
- 在 ConsoleLogger 和 GodotLogger 中使用预缓存的日志级别字符串提升性能
- 使用 ANSI 颜色代码替代 ConsoleColor 实现跨平台日志着色
- 在 ConsoleLoggerFactoryProvider 和 GodotLoggerFactoryProvider 中添加日志工厂缓存
- 优化 FileStorage 中目录遍历使用 OfType<string>() 类型转换
- 添加 LogContext 支持异步流中的结构化属性传递
2026-02-26 19:57:42 +08:00
GeWuYou
445513b784 docs(tests): 为测试文件添加XML文档注释
- 为AsyncExtensionsTests中的所有测试方法添加描述性注释
- 为CollectionExtensionsTests中的所有测试方法添加描述性注释
- 为DelayTests类和其中的测试方法添加描述性注释
- 为GuardExtensionsTests中的所有测试方法添加描述性注释
- 为MediatorComprehensiveTests中的所有测试方法添加描述性注释
- 为NumericExtensionsTests中的所有测试方法添加描述性注释
- 为OptionTests中的所有测试方法添加描述性注释
- 为PipeExtensionsTests中的所有测试方法添加描述性注释
2026-02-26 14:45:39 +08:00
GeWuYou
59fbb2253b feat(tests): 添加函数式编程扩展和Option类型测试
- 添加ControlExtensions的TakeIfValue、TakeUnlessValue、When、RepeatUntil和Retry方法测试
- 添加FunctionExtensions的Compose、AndThen、Curry、Uncurry、Defer和Once方法测试
- 添加Option<T>类型的完整测试套件,包括工厂方法、取值、变换、过滤、模式匹配等功能
- 添加PipeExtensions的Tap、Pipe、Let、PipeIf方法测试
- 移除AsyncExtensionsTests中的WhenAll相关测试
- 移除NumericExtensionsTests中的Clamp测试
- 更新ObjectExtensionsTests中Do方法为Also方法的测试
- 修复ControlExtensions文档中的XML代码标签格式
- 在AsyncExtensionsTests中添加对GFramework.Core.Functional.Async的引用
- 在ObjectExtensionsTests中添加对GFramework.Core.functional.pipe的引用
2026-02-26 14:45:39 +08:00
GeWuYou
28ce315d29 feat(functional): 添加函数式编程扩展方法
- 在 ControlExtensions 中添加 TakeIfValue 和 TakeUnlessValue 方法,支持值类型的条件判断
- 在 ControlExtensions 中添加 When 方法,支持条件执行操作
- 在 ControlExtensions 中添加 RepeatUntil 方法,支持重复执行直到条件满足
- 在 ControlExtensions 中添加 Retry 方法,支持同步重试机制
- 在 FunctionExtensions 中添加 Compose 和 AndThen 方法,支持函数组合
- 在 FunctionExtensions 中添加 Curry 和 Uncurry 方法,支持函数柯里化
- 在 FunctionExtensions 中添加 Defer 和 Once 方法,支持延迟执行和单次执行
- 在 PipeExtensions 中添加 Tap 方法,作为 Also 的别名
- 在 PipeExtensions 中添加 Pipe 方法,支持管道操作
- 在 PipeExtensions 中添加 Let 方法,支持作用域函数
- 在 PipeExtensions 中添加 PipeIf 方法,支持条件管道操作
2026-02-26 14:45:39 +08:00
GeWuYou
df0f00bd9e refactor(core): 重构核心库代码结构
- 将异步扩展方法移至新的 AsyncFunctionalExtensions 类中
- 删除重复的数值扩展、对象扩展和字符串扩展方法
- 添加 Option 函数式编程类型实现
- 重命名 ResultExtensions 文件路径
- 修复 ResultExtensions 中的错误处理逻辑
- 更新命名空间以符合新的包结构
2026-02-26 14:45:39 +08:00
GeWuYou
c454fa1acf perf(GFramework.Core): 优化PriorityEvent事件处理器性能
- 在MergeAndSortHandlers方法中创建_handlers和_contextHandlers的快照副本
- 避免在迭代期间直接访问集合可能发生的修改问题
- 提高事件处理时的性能表现和稳定性
2026-02-25 21:39:53 +08:00
GeWuYou
78e0c75641 refactor(events): 重构PriorityEvent事件处理逻辑
- 将原有的大块switch语句拆分为独立的方法
- 提取TriggerAll、TriggerUntilHandled和TriggerHighest方法
- 新增MergeAndSortHandlers方法用于合并和排序处理器
- 添加GetHighestPriority方法获取最高优先级值
- 分离普通事件处理器和上下文事件处理器的执行逻辑
- 提高代码可读性和维护性
2026-02-25 21:39:53 +08:00
GeWuYou
eec50ab45b feat(events): 添加事件上下文支持和线程安全改进
- 在EventBus中添加RegisterWithContext方法支持事件上下文
- 实现EventContext<T>类包装事件数据并提供处理控制
- 在PriorityEvent中添加上下文事件处理器和相关管理逻辑
- 改进事件触发机制支持普通和上下文处理器混合使用
- 优化MicrosoftDiContainer的线程安全性和并发访问
- 修复SpanExtensions中TryParseValue的返回值类型问题
- 添加全面的单元测试覆盖新功能和边界情况
2026-02-25 21:39:53 +08:00
GeWuYou
e2dca4f5a6 feat(events): 添加事件优先级和传播控制功能
- 实现了事件优先级机制,支持按优先级顺序执行事件处理器
- 新增EventPropagation枚举,支持All、UntilHandled和Highest三种传播模式
- 添加Register方法的重载版本,支持指定事件处理器优先级
- 实现Send方法的重载版本,支持指定事件传播模式
- 新增PriorityEvent类处理带优先级的事件逻辑
- 添加IocContainer的CreateScope方法支持服务作用域管理
- 实现RegisterTransient和RegisterScoped方法完善依赖注入生命周期
- 新增SpanExtensions扩展方法提供高性能的span操作功能
- 添加全面的单元测试覆盖事件优先级、IoC容器生命周期和span扩展功能
2026-02-25 21:39:53 +08:00
GeWuYou
e2cfa7bffa fix(pool): 修复对象池系统中的双重释放和线程安全问题
- 修复 ActiveCount 在双重释放时可能变为负数的问题
- 添加对错误 key 释放的防护和警告日志
- 优化 StringBuilderPool 使用 ConcurrentBag 实现线程安全
- 改进池容量限制逻辑,超过最大容量的对象将被销毁
- 添加完整的单元测试验证双重释放、错误释放和线程安全场景
2026-02-25 20:40:02 +08:00
GeWuYou
eb763a9bc4 feat(pool): 重构对象池系统增加统计和容量控制功能
- 引入 PoolInfo 类来管理对象池的核心数据结构和统计信息
- 添加对象池容量限制功能,超过容量时自动销毁多余对象
- 实现对象池统计功能,跟踪创建、获取、释放、销毁等操作计数
- 新增 GetPoolSize 和 GetActiveCount 方法获取池状态信息
- 添加 SetMaxCapacity 方法设置池的最大容量限制
- 实现 Prewarm 功能用于预创建对象提高性能
- 提供 GetStatistics 方法获取详细的池统计信息
- 添加 IsExternalInit 支持旧版 .NET 框架的 init-only 属性
- 扩展 ArrayPool 添加便捷的扩展方法和自动释放功能
- 新增 StringBuilderPool 提供高性能的字符串构建器复用
- 完善单元测试覆盖新增的所有功能特性
2026-02-25 20:40:02 +08:00
GeWuYou
1d50dc2224 fix(result): 修复Result扩展和异常处理逻辑
- 在Combine方法中添加对Bottom状态的检查和处理
- 使用IfSucc方法简化成功状态下的值添加逻辑
- 修正泛型绑定示例中的语法错误
- 在FromNullable和FromNullableStruct方法中使用nameof获取参数名称
- 改进Exception属性的文档说明并优化异常消息
- 在Try方法中添加对空函数的验证
2026-02-25 20:21:37 +08:00
GeWuYou
61349a83ab feat(functional): 增强Result类型功能并添加完整测试覆盖
- 为Result.Failure方法添加参数验证,确保异常和消息参数不为空
- 重构Result<T>内部状态枚举顺序以优化比较逻辑
- 为Result<T>的Map、Bind和MapAsync方法添加参数验证和异常处理
- 在Result<T>比较逻辑中添加类型不可比较时的安全处理
- 添加ResultExtensions.BindAsync扩展方法支持异步绑定操作
- 重写Combine扩展方法中对失败结果的处理逻辑
- 添加完整的Result相关类型单元测试覆盖所有功能场景
- 为Result类型添加详细的XML文档注释和使用示例
2026-02-25 20:21:37 +08:00
GeWuYou
1cb7dfdb14 feat(functional): 添加函数式编程支持和Result类型实现
- 实现了Result和Result<T>结构体,提供函数式错误处理
- 添加了AsyncExtensions中的函数式编程命名空间引用
- 在FunctionExtensions中添加函数式编程相关引用
- 从项目文件中移除LanguageExt.Core依赖包
- 重构GlobalUsings.cs移除不必要的全局引用
- 添加ResultExtensions扩展方法支持函数式操作
- 实现Map、Bind、Match等核心函数式编程方法
- 添加异步操作支持和安全执行委托功能
2026-02-25 20:21:37 +08:00
GeWuYou
ee3f8c97df fix(tests): 修正异步扩展测试中的异常类型断言
- 将 OperationCanceledException 替换为 TaskCanceledException 进行正确的异常断言
2026-02-25 17:28:52 +08:00
GeWuYou
cddd1fa627 test(extensions): 更新异步扩展方法测试以使用直接调用方式
- 移除旧的Arrange步骤,直接在Act步骤中调用AsyncExtensions.WithTimeout方法
- 添加新的测试用例验证超时时内部任务能够被正确取消
- 修改现有测试用例适配新的方法调用方式
- 简化异常处理相关的断言逻辑
2026-02-25 17:28:52 +08:00
GeWuYou
afbff7127d refactor(extensions): 重构异步扩展中的超时处理机制
- 将参数从直接传入Task改为传入接收取消令牌的任务工厂方法
- 更新XML文档注释以反映新的参数设计
- 优化取消令牌处理逻辑,统一管理超时和外部取消信号
- 改进异常处理机制,确保超时情况下正确抛出TimeoutException
- 简化代码结构并提高可读性
2026-02-25 17:28:52 +08:00
GeWuYou
850fecdff4 fix(async): 修复异步扩展中的超时和重试逻辑问题
- 修复TimeoutAfter方法中的取消令牌处理逻辑,避免OperationCanceledException被意外捕获
- 修复RetryAsync方法中的参数验证,移除对可空值类型的空值检查
- 为RetryAsync方法添加throwOriginal参数以控制异常抛出行为
- 统一超时处理中的令牌取消方式,使用linkedCts.Cancel()替代timeoutCts.CancelAsync()
2026-02-25 17:28:52 +08:00
GeWuYou
475f301d9f feat(extensions): 添加多个扩展方法类和对应测试
- 新增 AsyncExtensions 提供异步任务超时、重试、安全执行等功能
- 新增 CollectionExtensions 提供集合遍历、空值检查、过滤等扩展功能
- 新增 GuardExtensions 提供参数验证的 Guard 模式扩展方法
- 新增 NumericExtensions 提供数值范围限制、插值计算等数学扩展功能
- 为所有扩展方法添加完整的单元测试覆盖正常和异常情况
- 包含详细的 XML 文档注释和使用示例代码
2026-02-25 17:28:52 +08:00
GeWuYou
66da08e3e1 docs(skill): 更新技能文档
- 修改了 SKILL.md 文件内容移除了BOM
2026-02-25 09:28:33 +08:00
GeWuYou
8aba6c6fad refactor(scripts): 重构脚本以使用共享模块配置
- 将模块配置提取到共享的 module-config.sh 文件中
- 在 batch-generate.sh 中使用 get_source_dir 和 is_valid_module 函数
- 更新可用模块列表显示为动态获取
- 在 generate-examples.sh 中添加命名空间参数和详细的示例生成指南
- 优化 update-vitepress-nav.sh 中的用户界面和添加重复检查
- 修改 validate-all.sh 中的代码块验证以避免中断流程
- 改进 validate-frontmatter.sh 中的 frontmatter 检测逻辑
- 将 find 命令结果存储为数组以提高处理准确性
2026-02-25 09:28:33 +08:00
GeWuYou
bb449259d3 feat(docs): 添加 VitePress 文档生成技能系统
- 新增 .claude/skills 目录及完整的文档生成技能系统
- 添加批量 API 文档生成脚本支持模块化文档创建
- 添加 API 文档、功能指南和教程生成模板与示例
- 添加 C# XML 注释解析和代码示例生成工具
- 添加文档验证和导航更新脚本确保质量
- 更新 .gitignore 配置排除本地设置文件
2026-02-25 09:28:33 +08:00
GeWuYou
7c71ed154e chore(docs): 更新 .NET 版本标识从 6.0+ 到 8.0+
- 修改 README.md 中的 .NET badge 版本号
- 将 .NET 支持版本更新为最新的 8.0+ 标准
2026-02-24 15:20:31 +08:00
GeWuYou
94d3f0ba27 fix(storage): 修复文件存储和存档仓库中的路径处理问题
- 在 FileStorage 中过滤掉以点开头的隐藏目录
- 优化 SaveRepository 中的存档存在性检查逻辑
- 移除冗余的 ScopedStorage 创建操作
- 删除过时的 SaveRepository 使用指南文档
2026-02-24 15:20:31 +08:00
GeWuYou
2d4527d066 feat(storage): 添加目录操作功能和存档仓库系统
- 在IStorage接口中添加目录操作相关方法:ListDirectoriesAsync、
  ListFilesAsync、DirectoryExistsAsync、CreateDirectoryAsync
- 为FileStorage和GodotFileStorage实现目录操作功能
- 添加ScopedStorage的目录操作委托实现
- 新增ISaveRepository接口定义基于槽位的存档系统
- 实现SaveRepository类提供完整的存档管理功能
- 添加SaveConfiguration类用于存档系统配置
2026-02-24 15:20:31 +08:00
GeWuYou
6a99b54d6e refactor(repository): 更新仓储接口继承实用工具接口
- 添加 GFramework.Core.Abstractions.utility 命名空间引用
- 修改 IRepository 接口继承 IUtility 接口
- 为仓储接口添加实用工具功能支持
2026-02-23 22:56:12 +08:00
GeWuYou
f8a1c99b99 refactor(GodotResourceRepository): 重构资源仓库路径加载功能
- 添加ILogger用于日志记录替换GD.PushWarning
- 修改GetAll方法返回ToArray()副本而非直接Values引用
- 分离路径加载方法为非递归和递归两个独立接口
- 新增LoadFromPath和LoadFromPathRecursive的重载方法
- 提取内部处理逻辑到ProcessEntry私有方法
- 优化目录遍历逻辑并改进错误处理机制
- 添加重复键检测和资源加载失败的日志记录
2026-02-23 22:33:29 +08:00
GeWuYou
4fd90e45a1 feat(godot): 添加资源仓储功能支持
- 新增 IHasKey 接口定义键值访问契约
- 新增 IRepository 接口提供通用数据仓储功能
- 实现 GodotResourceRepository 类支持资源的存储和加载
- 添加 IResourceRepository 接口扩展通用仓储功能
- 实现从路径批量加载 Godot 资源的功能
- 支持递归加载子目录中的资源文件
- 提供 .tres 和 .res 文件的自动识别和加载
2026-02-23 22:33:29 +08:00
GeWuYou
7046c2cd47 feat(services): 添加内置模块重复注册检查功能
- 在 ServiceModuleManager 中添加 _builtInModulesRegistered 标志位
- 实现重复注册检测逻辑,避免内置模块被多次注册
- 更新 RegisterBuiltInModules 方法的文档注释
- 在销毁所有模块时重置注册标志位
- 优化方法参数命名和描述信息
- 改进代码结构和注释内容
2026-02-23 13:53:29 +08:00
GeWuYou
c401d63a05 docs(IServiceModuleManager): 为服务模块管理器接口添加完整文档注释
- 为接口添加总体功能描述注释
- 为RegisterModule方法添加参数说明注释
- 为RegisterBuiltInModules方法添加容器和属性参数说明注释
- 为GetModules方法添加返回值说明注释
- 为InitializeAllAsync方法添加异步模式参数和返回值说明注释
- 为DestroyAllAsync方法添加返回值说明注释
2026-02-23 13:53:29 +08:00
GeWuYou
5cb0a03d5c refactor(architecture): 重构架构服务接口设计
- 将 ArchitectureServices 类型改为 IArchitectureServices 接口
- 简化 IArchitectureServices 接口中属性声明的访问修饰符
- 为 IArchitectureServices 接口添加模块管理器属性
2026-02-23 13:53:29 +08:00
GeWuYou
ed187473dd test(architecture): 更新架构服务测试以验证内置模块注册
- 添加了对ArchitectureProperties和GFramework.Core.services的引用
- 实现了RegisterBuiltInServices方法用于注册内置服务
- 修改了构造函数测试以验证容器初始化而非所有服务
- 更新了EventBus、CommandExecutor和QueryExecutor的测试以验证注册后可用性
- 添加了AsyncQueryExecutor可用性测试
- 添加了未注册服务时EventBus为null的测试
- 在多个实例测试中添加了模块注册以确保独立性
- 添加了ModuleManager属性非空测试
- 实现了ECS配置开关控制模块注册的测试
- 移除了TestArchitectureContextV3中的硬编码服务实现
- 更新了ECS相关测试以直接注册EcsWorld到容器中
- 改进了ECS世界获取失败时的错误消息
2026-02-23 13:53:29 +08:00
GeWuYou
c593c5016b feat(architecture): 实现服务模块化管理和ECS功能
- 将架构服务重构为模块化设计,引入ServiceModuleManager统一管理
- 新增EventBusModule、CommandExecutorModule、QueryExecutorModule等核心服务模块
- 实现ECS模块支持,可配置启用Entity Component System功能
- 在架构初始化过程中集成模块注册、初始化和销毁流程
- 更新架构属性配置,添加EnableEcs开关控制ECS功能启用
- 优化服务获取方式,从直接依赖改为通过容器动态获取
- 移除架构上下文中的ECS相关实现代码,统一由ECS模块管理
2026-02-23 13:53:29 +08:00
GeWuYou
07e2a80de5 refactor(ecs): 将EcsSystemBase中的EcsWorld类型改为接口
- 将EcsWorld属性的类型从具体类EcsWorld改为接口IEcsWorld
- 修改OnInit方法中的服务获取逻辑以使用接口类型
- 提高代码的抽象性和可扩展性
2026-02-23 12:27:16 +08:00
GeWuYou
808d3beecf refactor(abstractions): 更新 IsExternalInit 类型定义
- 将预处理器条件从具体版本改为 !NET5_0_OR_GREATER
- 修改类访问修饰符为 internal
- 更新 XML 注释文档,添加对 .NET 5.0+ 版本的说明
- 移除中文注释中的特殊字符描述
- 优化代码可读性和维护性
2026-02-23 12:27:16 +08:00
GeWuYou
89b7bcca8a feat(ecs): 为ECS相关功能添加实验性特性标记
- 在ArchitectureContext中的ECS相关方法添加[Experimental]特性
- 在ECS测试类上添加[Experimental]特性标记
- 为ECS基础测试方法添加实验性特性
- 统一使用System.Diagnostics.CodeAnalysis命名空间
- 标记GetEcsWorld、RegisterEcsSystem等核心方法为实验性API
2026-02-23 12:27:16 +08:00
GeWuYou
a65d4fa294 refactor(architecture): 重构架构生命周期相关接口命名
- 将 IArchitectureLifecycle 重命名为 IArchitectureLifecycleHook
- 将 IArchitecturePhaseAware 重命名为 IArchitecturePhaseListener
- 更新内部生命周期钩子集合类型为 IArchitectureLifecycleHook
- 更新 NotifyPhaseAwareObjects 方法中的类型引用
- 移除 IArchitectureModule 对生命周期接口的继承
- 更新 IModel 和 ISystem 接口中的相位感知类型引用
- 删除废弃的 AbstractModule 抽象类
2026-02-23 12:27:16 +08:00
GeWuYou
9ccfd7f49e refactor(architecture): 将销毁方法改为异步实现
- 将Destroy方法替换为DestroyAsync异步方法
- 更新锚点绑定以使用异步销毁任务
- 在异步方法中保持相同的销毁逻辑
- 确保扩展组件正确分离和清理
- 维持原有的继承关系和调用链路
2026-02-23 12:27:16 +08:00
GeWuYou
3db89ab498 refactor(architecture): 重构架构初始化和销毁机制
- 将Init方法统一重命名为Initialize方法以提高一致性
- 修改Architecture类中的组件注册逻辑,优化去重判断
- 更新ECS系统基础类以使用新的初始化接口
- 重构EcsWorld类使用属性自动实现而非私有字段
- 移除过时的EcsUsageExample示例文件
- 更新相关测试类以匹配新的初始化方法命名
- 改进代码注释和文档字符串格式
2026-02-23 12:27:16 +08:00
GeWuYou
35845be93f test(ecs): 添加高级ECS集成测试并完善测试覆盖
- 新增EcsAdvancedTests类,包含完整的ECS系统测试套件
- 添加EcsWorld高级功能测试,包括实体创建、销毁和组件操作
- 实现EcsSystemRunner生命周期控制测试,验证启动停止行为
- 添加多系统交互测试,验证优先级执行顺序
- 完善组件操作测试,涵盖增删改查场景
- 集成ArchitectureContext与ECS的测试用例
- 添加依赖注入容器的ECS系统注册测试
- 补充系统运行器异常处理和资源清理测试
2026-02-23 12:27:16 +08:00
GeWuYou
6ee7a52326 fix(mediator): 修复参数验证错误消息中的字符串拼接问题
- 修正了 Name 参数为空时错误消息中的字符串拼接格式
- 在错误消息中添加了适当的空格分隔符
2026-02-23 12:27:16 +08:00
GeWuYou
5f3fac2147 test(ecstests): 添加ECS测试并优化中介者测试的异常断言
- 添加EcsBasicTests类,实现ECS基础功能测试包括实体创建、组件设置、系统更新等
- 添加EcsIntegrationTests类,实现ECS集成测试包括性能基准测试和优先级调度验证
- 修改MediatorComprehensiveTests中的断言,使用OperationCanceledException替代TaskCanceledException
- 移除流测试中的冗余取消令牌传递,简化异步流的取消测试逻辑
2026-02-23 12:27:16 +08:00
GeWuYou
daff1fa12b feat(architecture): 集成Arch ECS框架并升级目标框架
- 在ArchitectureContext中添加ECS世界和系统调度器支持
- 添加IEcsWorld和IEcsSystem接口定义
- 实现EcsWorld、EcsSystemBase和EcsSystemRunner核心类
- 添加Position和Velocity示例组件及MovementSystem示例
- 创建ECS使用示例代码
- 将多个项目的TargetFramework从netstandard2.0升级到netstandard2.1
- 添加Arch和Arch.System包依赖到核心项目
- 在测试项目中添加ECS相关接口的模拟实现
2026-02-23 12:27:16 +08:00
GeWuYou
d653994ded fix(ui): 修复UI过渡流水线中的空引用异常
- 添加空值检查避免FromUiKey为null时的日志记录错误
- 确保流水线执行时参数安全处理
2026-02-21 08:59:56 +08:00
GeWuYou
608251047c refactor(scene): 将场景路由异步方法改为await调用
- 将SceneRouterBase中的AfterChange方法改为异步方法AfterChangeAsync
- 修改SceneRouterBase中的场景切换流程使用await调用异步方法
- 移除后台线程执行,直接使用同步await调用
- 更新日志记录逻辑,优化调试信息输出
- 简化异常处理流程,统一异步执行模式
2026-02-21 08:59:56 +08:00
GeWuYou
7015ba118d fix(registries): 修复 Values 方法返回空集合的问题
- 修复了当 Map.Values 无法转换为 IReadOnlyCollection<TValue> 时返回空集合的问题
- 现在正确地将 Map.Values 转换为 List 后再创建 ReadOnlyCollection
- 确保 Values 方法始终返回包含实际数据的集合而不是空集合
2026-02-20 22:52:56 +08:00
GeWuYou
a4b3bca1c1 feat(registries): 扩展注册表接口功能并实现基础类
- 移除 IRegistry 接口中的 in 泛型约束
- 添加 Unregister 方法用于移除指定键的项
- 添加 GetAll 方法用于获取所有键值对
- 添加 Values 方法用于获取所有注册值
- 添加 Keys 属性用于获取所有键
- 添加 Count 属性用于获取项的数量
- 在 KeyValueRegistryBase 中实现新增的接口方法
- 添加 System.Collections.ObjectModel 引用支持只读集合
2026-02-20 22:52:56 +08:00
GeWuYou
6b51c04deb feat(scene): 添加环绕场景过渡处理器注册功能
- 实现 RegisterAroundHandler 方法用于注册环绕场景过渡处理器
- 实现 UnregisterAroundHandler 方法用于注销环绕场景过渡处理器
- 添加处理器选项配置参数支持
- 提供完整的环绕处理器生命周期管理功能
2026-02-20 22:32:40 +08:00
GeWuYou
29d05e099b chore(deps): 更新项目依赖包版本
- 将 Meziantou.Analyzer 从 2.0.302 版本更新到 3.0.9 版本
- 将 Godot.SourceGenerators 从 4.6.0 版本更新到 4.6.1 版本
- 在多个项目文件中统一更新了代码分析器依赖版本
2026-02-20 20:31:12 +08:00
dependabot[bot]
85ef0967a7 Bump GodotSharp and GodotSharpEditor
Bumps GodotSharp from 4.6.0 to 4.6.1
Bumps GodotSharpEditor from 4.6.0 to 4.6.1

---
updated-dependencies:
- dependency-name: GodotSharp
  dependency-version: 4.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: GodotSharpEditor
  dependency-version: 4.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 20:22:09 +08:00
dependabot[bot]
fad5ea4f1c Bump Meziantou.Analyzer from 2.0.299 to 2.0.302
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.302
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 20:21:52 +08:00
dependabot[bot]
3f0a2f5bda Bump NUnit from 4.4.0 to 4.5.0
---
updated-dependencies:
- dependency-name: NUnit
  dependency-version: 4.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: NUnit
  dependency-version: 4.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 20:21:40 +08:00
GeWuYou
905dbea964 docs(license): 添加 More-Effective-Godot-Coroutines 许可证文件
- 添加 MIT 许可证文本文件
- 包含版权声明和许可条款
- 确保第三方库许可证合规性
2026-02-17 21:52:14 +08:00
GeWuYou
56769cbf01 feat(architecture): 添加异步销毁功能支持
- 在 Architecture 中添加对 IAsyncDestroyable 接口的支持
- 将销毁集合类型从 IDestroyable 改为 object 以支持多种销毁接口
- 实现 DestroyAsync 方法提供异步销毁能力
- 保留旧的同步 Destroy 方法用于向后兼容
- 在 StateMachineSystem 中添加异步销毁状态的支持
- 添加 IAsyncDestroyable、IAsyncInitializable 和 IAsyncLifecycle 接口定义
- 更新测试代码以使用新的异步销毁方法
- 在架构销毁时清理依赖注入容器
2026-02-17 18:41:16 +08:00
GeWuYou
73d1fcf6fd refactor(core): 将 IDisposable 替换为 IDestroyable 接口
- 重命名 IDisposable 接口为 IDestroyable 并移动到 lifecycle 命名空间
- 更新 Architecture.cs 中的可销毁组件集合类型从 IDisposable 到 IDestroyable
- 修改 WaitForEvent 和 WaitForMultipleEvents 类实现 IDestroyable 接口
- 更新 AsyncContextAwareStateBase 和 ContextAwareStateBase 继承 IDestroyable 接口
- 修改 StateMachineSystem 中状态清理逻辑使用 IDestroyable 类型判断
- 更新 ILifecycle 接口继承关系使用新的 IDestroyable 接口
2026-02-17 18:41:16 +08:00
GeWuYou
058dff010c refactor(tests): 移除架构服务测试中的未实现方法
- 从 ArchitectureServicesTests 类中删除 QueryAsync 方法
- 从 ArchitectureServicesTests 类中删除 PublishEventAsync 方法
- 从 GameContextTests 类中删除 QueryAsync 方法
- 从 GameContextTests 类中删除 PublishEventAsync 方法
- 清理相关的方法签名和异常抛出代码
- 简化测试类结构,移除不必要的接口实现
2026-02-17 18:41:16 +08:00
GeWuYou
8e88137399 feat(state): 支持异步状态退出功能
- 实现了 IAsyncState 接口的异步退出方法调用
- 添加了对异步状态和普通状态的区分处理
- 确保状态机系统兼容新旧状态类型
- 保持现有同步状态退出逻辑不变
2026-02-17 18:41:16 +08:00
GeWuYou
d76751c636 refactor(architecture): 移除查询和事件发布语法糖方法
- 删除 ArchitectureContext 中的 QueryAsync 和 PublishEventAsync 扩展方法
- 删除 ContextAwareExtensions 中对应的扩展方法实现
- 从 IArchitectureContext 接口中移除相关方法定义
- 更新测试代码中的参数命名从 command 到 query
- 移除相关的单元测试用例
- 修正 Godot 扩展中对 PublishEventAsync 的调用为 PublishAsync
2026-02-17 18:41:16 +08:00
GeWuYou
984829c368 refactor(coroutine): 移除命令等待事件协程扩展并改进测试
- 从 MediatorCoroutineExtensions 中移除 SendCommandAndWaitEventCoroutine 相关代码
- 从 CommandCoroutineExtensionsTests 中移除对应的测试方法
- 更新测试用例验证逻辑,统一使用静态方法调用方式
- 添加新的 MediatorCoroutineExtensionsTests 测试类
- 修改测试方法名称以更准确反映测试行为
- 统一异常处理和参数验证的测试覆盖
2026-02-16 22:44:52 +08:00
GeWuYou
855b3f9eac refactor(coroutine): 优化协程扩展中的异常处理和参数验证
- 修改了CommandCoroutineExtensions和MediatorCoroutineExtensions中的异常处理逻辑
- 添加了对负数超时参数的验证和异常抛出
- 改进了服务获取的空值检查机制
- 更新了文档注释以提供更清晰的参数说明
- 重构了SendCommandAndWaitEvent方法的实现结构
- 统一了错误消息格式和异常处理方式
2026-02-16 22:44:52 +08:00
GeWuYou
b196cd40bb feat(coroutine): 添加Mediator模式与协程集成的扩展方法
- 实现SendCommandCoroutine方法,支持以协程方式发送命令并处理异常
- 实现SendCommandAndWaitEventCoroutine方法,支持发送命令并等待特定事件
- 添加超时控制功能,支持设置等待事件的超时间
- 集成IEventBus和IMediator服务,提供完整的事件驱动协程支持
- 提供异常回调处理机制,增强错误处理能力
- 实现资源清理机制,确保WaitForEvent对象正确释放
2026-02-16 22:44:52 +08:00
GeWuYou
82cd2585d5 refactor(cqrs): 将基础类改为抽象类以增强架构设计
- 将 CommandBase 类标记为抽象类
- 将 NotificationBase 类标记为抽象类
- 将 QueryBase 类标记为抽象类
- 将 RequestBase 类标记为抽象类
- 保持所有泛型约束和接口继承关系不变
- 保留构造函数和输入数据属性的原有功能
2026-02-16 20:55:06 +08:00
GeWuYou
51ed593acb refactor(cqrs): 重构CQRS架构基础组件并新增核心基类
- 将命令相关抽象接口从command目录迁移至cqrs.command目录
- 新增CommandBase、NotificationBase、QueryBase和RequestBase通用基类
- 统一所有CQRS组件的命名空间为GFramework.Core.Abstractions.cqrs
- 更新所有引用位置的using语句指向新的命名空间路径
- 为命令和查询输入接口添加IInput基接口继承
- 在测试文件中同步更新相关的引用路径修改
2026-02-16 20:55:06 +08:00
GeWuYou
7552337b3f feat(godot): 添加协程扩展功能支持Mediator模式
- 新增ContextAwareCoroutineExtensions类,提供IContextAware接口的协程扩展方法
- 实现RunCommandCoroutine、RunQueryCoroutine和RunPublishCoroutine方法
- 将原有CoroutineExtensions重命名为CoroutineNodeExtensions并迁移相关功能
- 添加文件头版权信息到新的协程扩展类
- 重构协程生命周期管理方法,包括RunCoroutine和CancelWith系列方法
- 移除测试文件中关于日志行为的占位测试用例
2026-02-16 19:28:27 +08:00
GeWuYou
040a937159 refactor(coroutine): 优化Task转协程实现
- 将AsCoroutine方法重命名为ToCoroutineEnumerator以提高语义清晰度
- 修改StartTaskAsCoroutine方法内部调用改为使用新的ToCoroutineEnumerator方法
- 为ToCoroutineEnumerator方法添加完整的XML文档注释
- 为泛型版本的ToCoroutineEnumerator<T>方法添加类型参数和参数说明
- 统一方法命名规范,提高代码可读性
2026-02-15 23:26:15 +08:00
GeWuYou
396636e595 refactor(coroutine): 优化任务协程扩展实现
- 将私有方法 CreateTaskCoroutine 替换为公共扩展方法 AsCoroutine
- 简化 StartTaskAsCoroutine 方法实现,直接调用 AsCoroutine 扩展方法
- 移除重复的私有方法定义,统一使用扩展方法模式
- 提高代码可读性和复用性
2026-02-15 23:26:15 +08:00
GeWuYou
d3ffcbc7bf refactor(tests): 移除状态机测试中的重复代码
- 删除了 StateMachineSystemTests.cs 中关于 ChangeTo 方法的基本功能测试
- 删除了 StateMachineTests.cs 中关于状态切换、注册注销等基础功能的测试用例
- 保留了异步操作相关的测试方法以简化测试套件
- 减少了测试文件的代码量并提高维护效率
2026-02-15 22:59:44 +08:00
GeWuYou
3a334e5666 refactor(state): 移除状态机中的同步方法实现
- 移除 IStateMachine 接口中 Unregister<T>() 方法的同步定义
- 移除 StateMachine 类中 Unregister<T>() 方法的同步实现
- 移除 IStateMachine 接口中 CanChangeTo<T>() 方法的同步定义
- 移除 StateMachine 类中 CanChangeTo<T>() 方法的同步实现
- 移除 IStateMachine 接口中 ChangeTo<T>() 方法的同步定义
- 移除 StateMachine 类中 ChangeTo<T>() 方法的同步实现
- 移除 IStateMachine 接口中 GoBack() 方法的同步定义
- 移除 StateMachine 类中 GoBack() 方法的同步实现
2026-02-15 22:59:44 +08:00
GeWuYou
6c53626df8 refactor(state): 将状态机实现为完全异步操作并改进线程安全机制
- 添加 SemaphoreSlim 锁确保状态转换的线程安全性
- 将所有同步方法重构为异步方法并移除旧的同步实现
- 使用异步锁替代传统的 lock 机制提升并发性能
- 优化状态历史记录的处理时机和逻辑
- 移除过时的同步状态转换内部方法
- 统一异常处理和资源释放机制
2026-02-15 22:59:44 +08:00
GeWuYou
e24aacc4bc refactor(ui): 将页面行为接口中的原始对象属性重命名为视图属性
- 将 IUiPageBehavior 接口中的 Original 属性重命名为 View
- 更新 UiRouterBase 中的日志输出,使用 View 属性替代 Original 属性
- 在 CanvasItemUiPageBehaviorBase 中将属性实现从 Original 改为 View
- 相应更新接口文档注释,明确表示返回页面视图实例
2026-02-15 22:07:49 +08:00
GeWuYou
323976677c refactor(ui): 将View属性重命名为Original以统一接口设计
- 将IUiPageBehavior中的View属性重命名为Original
- 更新UiRouterBase中日志输出使用Original属性替代View属性
- 在ISceneBehavior接口中添加Original属性定义
- 在SceneBehaviorBase实现类中添加Original属性实现
- 在CanvasItemUiPageBehaviorBase中将View属性改为Original属性
- 更新相关注释文档说明Original属性用途
2026-02-15 22:07:49 +08:00
GeWuYou
342b4b5e88 chore(workflow): 更新自动标签工作流触发条件
- 修改触发条件以确保仅在 main 分支上运行
- 重构条件逻辑结构提高可读性
- 保持 workflow_run 和 workflow_dispatch 触发方式
- 添加适当的括号分组逻辑运算符
2026-02-15 21:09:36 +08:00
GeWuYou
cdb7f32497 chore(workflow): 更新自动标签工作流配置
- 修改触发条件以支持手动调度
- 重构条件判断逻辑提高可读性
- 保持原有自动化标签功能不变
- 添加对 workflow_dispatch 事件的支持
2026-02-15 21:09:36 +08:00
GeWuYou
487f55fef6 refactor(state): 重构异步状态基类实现架构上下文感知功能
- 更新类注释说明IAsyncState继承自IState接口
- 添加SetContext和GetContext方法用于架构上下文管理
- 实现Destroy方法用于状态销毁和资源释放
- 显式实现IState同步方法并标记为已弃用
- 使用Obsolete特性标注同步方法并提示使用异步版本
- 恢复IAsyncState异步方法的正常实现
- 添加上下文未设置时的操作异常处理
2026-02-15 21:00:38 +08:00
GeWuYou
22c1d08dc3 feat(state): 实现异步状态基类的同步方法限制
- 为 AsyncContextAwareStateBase 添加同步方法异常抛出机制
- 禁止在异步状态中使用 OnEnter、OnExit 和 CanTransitionTo 同步方法
- 提供清晰的错误提示引导使用对应的异步方法
- 修复 StateMachine 中的状态转换逻辑确保线程安全
- 更新 IAsyncState 接口继承 IState 接口统一状态管理
2026-02-15 21:00:38 +08:00
GeWuYou
38967d047a feat(core): 扩展ContextAwareExtensions功能并增强状态机系统
- 在ContextAwareExtensions中添加事件发送、注册和取消注册方法
- 添加环境对象获取功能
- 扩展命令和查询功能支持同步、异步及中介者模式
- 添加统一请求处理方法和便捷扩展方法
- 为StateMachineSystem添加异步状态切换事件通知功能
- 添加状态机异步操作相关单元测试
- 扩展现有测试类以覆盖新增功能
- [release ci]
2026-02-15 19:00:06 +08:00
GeWuYou
7e2a1ff66d test(state): 更新状态机上下文获取测试验证逻辑
- 将断言修改为验证 GetContext 方法抛出 InvalidOperationException 异常
- 在状态机初始化前验证状态上下文为空的预期行为
- 保持初始化后状态上下文正确设置的验证逻辑
2026-02-15 19:00:06 +08:00
GeWuYou
703328deb2 refactor(state): 优化状态机实现并增强上下文安全检查
- 在 ContextAwareStateBase 和 AsyncContextAwareStateBase 中添加架构上下文空值检查
- 引入 HashSet 用于快速检查状态注册状态,提升性能
- 重构注销逻辑,分离准备和完成阶段的处理
- 优化回退功能,跳过已注销的状态并使用 O(1) 复杂度检查
- 统一状态切换中的进入和退出逻辑处理
- 简化状态转换验证流程,提升代码可读性
- 添加辅助方法处理异步状态操作的统一入口
- [release ci]
2026-02-15 19:00:06 +08:00
GeWuYou
a5daadea96 feat(state): 添加状态机异步操作支持
- 实现了异步注销状态功能 UnregisterAsync
- 添加了异步状态切换检查 CanChangeToAsync
- 实现了异步状态切换功能 ChangeToAsync
- 添加了异步回退到上一状态 GoBackAsync
- 支持同步状态(IState)和异步状态(IAsyncState)的统一管理
- 提供了异步状态转换过程中的回调机制
- 完善了异步状态切换的核心逻辑处理
- [release ci]
2026-02-15 19:00:06 +08:00
GeWuYou
1f724103bd feat(state): 添加异步状态管理基础功能
- 新增 IAsyncState 接口定义异步状态行为和转换规则
- 实现 AsyncContextAwareStateBase 基类提供上下文感知异步状态功能
- 添加异步状态进入、退出和转换判断的核心方法
- 集成架构上下文访问能力支持状态管理
- 实现资源销毁和清理机制
2026-02-15 19:00:06 +08:00
GeWuYou
65568a99b0 docs(api): 移除Core API参考文档和事件系统接口文档
- 删除了Core API参考文档,包括架构、组件、接口详细说明
- 移除了事件系统接口文档,涵盖IEvent、IEventBus、IUnRegister等相关接口
- 清理了API参考文档目录结构
- 移除了相关的Mermaid图表和代码示例引用
- 删除了性能考量和故障排查指南等内容
- 移除了测试用例和实现类的引用链接
- [release ci]
2026-02-15 17:15:18 +08:00
GeWuYou
899fbd76c3 feat(godot): 添加 Godot 场景管理和路径扩展功能
- 新增 Godot 场景行为基类和具体实现(Node2D、Node3D、Control、通用场景行为)
- 添加场景行为工厂类,支持根据节点类型自动创建合适的行为实例
- 实现 Godot 场景工厂类,用于创建场景实例并集成场景注册表
- 添加 Godot 路径扩展方法,支持判断用户数据路径和资源路径
- 优化数据仓库和设置事件类的初始化方法,添加 XML 文档注释
- 修改场景切换管道中的日志记录逻辑,避免空引用异常
- 更新 Godot 日志记录器和日志工厂的文档注释
- 为设置相关类添加数据对象和类型属性的文档说明
- 移除加载进度处理器类,精简场景切换流程
2026-02-15 16:59:09 +08:00
GeWuYou
628a39b9f8 refactor(scene): 修改场景栈返回类型为IEnumerable
- 将Stack属性的返回类型从IReadOnlyList改为IEnumerable
- 更新接口定义中的返回类型保持一致
- 优化内部实现直接返回可枚举集合而不是转换为列表
- 更新文档注释明确说明栈底到栈顶的顺序
2026-02-15 16:59:09 +08:00
GeWuYou
53c2ee4ef3 feat(router): 添加场景和UI路由的Around中间件支持
- 在SceneRouterBase和UiRouterBase中集成管道执行Around处理器
- 实现场景过渡管道SceneTransitionPipeline的Around处理器注册和执行功能
- 实现UI过渡管道UiTransitionPipeline的Around处理器注册和执行功能
- 添加ISceneAroundTransitionHandler和IUiAroundTransitionHandler接口定义
- 扩展SceneTransitionPhases和UITransitionPhases枚举支持Around阶段
- 实现Around处理器的优先级排序和中间件链构建机制
- 添加Around处理器的超时控制和异常处理机制
2026-02-15 16:59:09 +08:00
GeWuYou
6f61ff55aa refactor(scene): 优化场景过渡管道的日志记录器创建
- 将硬编码字符串替换为 nameof 操作符以提高类型安全性
- 确保日志记录器名称与类名保持一致
- 提高代码可维护性,避免手动字符串输入错误
2026-02-15 16:59:09 +08:00
GeWuYou
c0dda5a341 fix(scene): 修复场景工厂接口参数命名错误
- 修正了 Create 方法中参数名从 sceneKy 到 sceneKey 的拼写错误
- 更新了 XML 文档注释中的参数名称以保持一致性
2026-02-15 16:59:09 +08:00
GeWuYou
629c0a70a9 refactor(scene): 简化 ISceneRoot 接口并重构场景路由系统
- 简化 ISceneRoot 接口,移除路由逻辑和状态管理职责
  - 移除路由方法:ReplaceAsync, PushAsync, PopAsync, ClearAsync
  - 移除场景加载方法:LoadAsync, UnloadAsync
  - 移除状态属性:Current, Stack, IsTransitioning
  - 添加容器管理方法:AddScene, RemoveScene

- 重构 SceneRouterBase 实现
  - PushInternalAsync:使用 ISceneFactory.Create() 创建场景实例,通过 Root.AddScene() 添加到场景树
  - PopInternalAsync:使用 Root.RemoveScene() 从场景树移除场景
  - 保持正确的生命周期调用顺序

- 职责分离更清晰
  - ISceneRoot:仅负责场景树容器管理
  - ISceneFactory:负责场景实例创建
  - SceneRouterBase:负责路由逻辑和生命周期协调

- 与 UI 路由系统设计保持一致
2026-02-15 16:59:09 +08:00
GeWuYou
b054ee1c4a feat(scene): 实现场景路由守卫和过渡处理器管道
- 添加场景路由守卫机制,支持进入和离开场景的权限检查
- 实现场景过渡处理器管道,支持BeforeChange和AfterChange阶段处理
- 新增LoadingProgressHandler和LoggingTransitionHandler处理器
- 添加SceneTransitionPhases和SceneTransitionType枚举定义
- 实现ISceneRouteGuard、ISceneTransitionHandler等核心接口
- 在SceneRouterBase中集成守卫检查和处理器管道功能
- 重构场景切换逻辑,添加事件驱动的过渡处理机制
2026-02-15 16:59:09 +08:00
GeWuYou
65d56d0696 refactor(scene): 重构场景路由系统并迁移资源注册接口
- 将场景路由基类从同步改为异步实现,支持场景栈管理
- 添加场景行为接口定义及相关的进入参数接口
- 实现场景的压入、弹出、替换和清空等栈操作功能
- 迁移UI资源注册接口到资产模块下
- 移除缓存淘汰策略枚举并更新UI切换阶段命名空间引用
- 优化日志记录器创建方式和统一命名空间规范
2026-02-15 16:59:09 +08:00
GeWuYou
d0e7a9fb9b refactor(architecture): 重构架构上下文中的命令和查询方法
- 移除旧的 Mediator 扩展方法区域标记
- 重新组织命令发送方法,将异步和同步版本分离
- 更新 SendCommand 和 SendQuery 方法的实现逻辑
- 为查询操作添加新的同步和异步发送方法
- 调整命令执行器方法的参数类型和返回值
- 优化方法注释文档以提高可读性
2026-02-14 22:16:59 +08:00
GeWuYou
e6a114fe7b test(mediator): 调整缓存性能测试的阈值要求
- 将缓存性能测试中的性能比较阈值从 2.0 倍放宽到 2.5 倍
- 保持缓存应该比未缓存版本更快的测试逻辑
- 更新了测试断言以适应更宽松的性能标准
- [release ci]
2026-02-14 21:43:07 +08:00
GeWuYou
c16f89cb47 refactor(ioc): 将Services属性重命名为GetServicesUnsafe以提高安全性
- 将MicrosoftDiContainer中的Services属性重命名为GetServicesUnsafe
- 将IIocContainer接口中的Services属性重命名为GetServicesUnsafe
- 更新所有使用Services的地方为GetServicesUnsafe
- 保持原有的功能不变,仅修改属性名称以避免直接访问风险
2026-02-14 19:41:21 +08:00
GeWuYou
a420a41a55 refactor(ioc): 为依赖注入容器注册方法添加线程安全锁
- 在RegisterSingleton方法中添加读写锁保护
- 在RegisterFactory方法中添加读写锁保护
- 在ExecuteServicesHook方法中添加读写锁保护
- 确保在冻结状态下抛出异常
- 添加日志记录单例注册操作
- 统一异常处理和资源清理逻辑
2026-02-14 19:41:21 +08:00
GeWuYou
ae8ad29806 fix(architecture): 修复中介者行为注册方法
- 将 Container.RegisterPlurality<TBehavior>() 替换为 Container.RegisterMediatorBehavior<TBehavior>()
- 修正了中介者行为注册的 API 调用错误
2026-02-14 19:41:21 +08:00
GeWuYou
b2f2ab4fa5 perf(cqrs): 优化性能行为中的请求处理逻辑
- 将同步方法改为异步方法以正确处理异步操作
- 使用 Stopwatch.GetTimestamp() 替代 StartNew() 提高计时精度
- 通过 try-finally 确保即使在异常情况下也能正确计算执行时间
- 改进长时间运行请求的日志记录机制
- 使用 Elapsed.TotalMilliseconds 替代 ElapsedMilliseconds 并保留两位小数
- 保持 500 毫秒阈值不变,只对超时请求记录警告日志
2026-02-14 19:41:21 +08:00
GeWuYou
276f50a255 perf(cqrs): 优化LoggingBehavior性能并改进错误处理
- 添加Stopwatch用于精确测量请求处理时间
- 将Handle方法改为异步方法并正确await next调用
- 在成功和失败情况下都记录详细的耗时信息
- 添加对OperationCanceledException的特殊处理和日志记录
- 改进异常处理逻辑以包含执行时间信息
2026-02-14 19:41:21 +08:00
GeWuYou
35d05a46fa refactor(architecture): 更新IArchitectureContext接口中的命令和查询方法签名
- 移除ICommand类型的using别名,直接使用完整命名空间
- 将SendCommand方法参数类型从ICommand改为command.ICommand
- 添加Mediator模式的同步命令处理方法兼容性接口
- 添加Mediator模式的异步命令处理方法支持取消令牌
- 添加Mediator模式的同步查询处理方法兼容性接口
- 添加Mediator模式的异步查询处理方法支持取消令牌
- 移除重复的Mediator相关方法声明,优化接口结构
2026-02-14 19:41:21 +08:00
GeWuYou
7c77149ab0 fix(mediator): 修复高级功能测试中的异常处理和断路器逻辑
- 将 OperationCanceledException 替换为更具体的 TaskCanceledException
- 修复瞬态错误处理器中的计数器逻辑,仅在 MaxErrors > 0 时递增
- 实现断路器功能,当失败次数达到阈值时打开断路器
- 添加Saga事务的补偿机制,在步骤失败时执行回滚操作
- 为验证行为添加输入验证逻辑
- 注册传统CQRS组件以支持混合模式测试
- 修复架构集成测试中的上下文访问问题
- [release ci]
2026-02-14 19:41:21 +08:00
GeWuYou
bed4f66576 test(mediator): 添加Mediator高级特性和架构集成测试
- 实现多通知处理器调用验证功能
- 添加取消令牌对长运行请求的取消支持
- 实现流请求的取消令牌处理机制
- 添加并发请求干扰测试用例
- 实现处理器异常传播验证功能
- 添加多命令处理器共享对象修改测试
- 实现查询缓存功能测试用例
- 添加通知排序保持功能验证
- 实现流请求过滤功能测试
- 添加请求验证行为测试用例
- 实现性能基准测试功能
- 添加传统CQRS与Mediator共存测试
- 实现管道行为测试用例
- 添加高并发性能测试功能
- 实现内存使用稳定性测试
- 添加瞬态错误处理测试用例
- 实现熔断器模式测试功能
- 添加Saga模式一致性测试用例
- 实现请求链式依赖测试功能
- 添加外部服务依赖超时测试
- 实现数据库事务处理测试用例
- 添加架构上下文访问测试功能
- 实现服务检索功能测试用例
- 添加嵌套请求发送测试功能
- 实现生命周期管理测试用例
- 添加作用域服务隔离测试功能
- 实现错误传播测试用例
- 添加上下文性能开销测试功能
- 实现缓存性能提升测试用例
- 添加并发安全访问测试功能
- 实现状态一致性测试用例
- 添加系统集成测试功能
- 实现混合CQRS模式测试用例
2026-02-14 19:41:21 +08:00
GeWuYou
e755c5c7f8 refactor(core): 替换Mediator集成实现为通用服务配置机制
- 移除专用的RegisterMediator方法,替换为ExecuteServicesHook通用服务配置方法
- 从架构配置中移除Mediator特定配置选项,改为通用服务配置委托
- 在架构基类中添加Configurator属性支持,允许子类提供自定义服务配置
- 更新测试代码适配新的服务配置方式,通过ExecuteServicesHook注册Mediator
- 移除过时的测试组件和相关验证逻辑
- 删除Mediator.SourceGenerator包引用,保留运行时依赖
- 添加WaitUntilReadyAsync方法的详细文档注释
2026-02-14 19:41:21 +08:00
GeWuYou
a61c796e4d refactor(tests): 更新查询接口类型引用
- 将 Mediator.IQuery<int> 替换为 IQuery<int> 类型引用
- 保持空值参数测试逻辑不变
- 确保类型转换正确性
2026-02-14 19:41:21 +08:00
GeWuYou
d3e1e04e89 feat(architecture): 添加Mediator模式支持并扩展架构上下文功能
- 在ArchitectureContext中新增Sender属性和SendCommand/SendQuery方法
- 实现异步命令和查询的发送功能,支持取消令牌
- 提供同步版本的命令和查询发送方法以保持向后兼容性
- 更新IArchitectureContext接口定义新增相关方法签名
- 添加完整的Mediator集成测试验证新功能
- 配置项目依赖移除旧的Mediator包并添加必要引用
- 修复测试中的类型引用和方法重载问题
2026-02-14 19:41:21 +08:00
GeWuYou
a082b770a9 feat(architecture): 集成 Mediator 模式支持
- 添加 Mediator 和 IPublisher 实例的延迟加载功能
- 实现 SendRequestAsync 方法用于发送 Command/Query 请求
- 添加 PublishAsync 方法用于发布通知事件
- 提供 CreateStream 方法支持流式数据处理
- 增加 SendAsync、QueryAsync、PublishEventAsync 等便捷扩展方法
- 更新 SendCommand 和 SendQuery 方法使用完整命名空间
- 在 IArchitectureContext 接口中添加 Mediator 相关方法定义
2026-02-14 19:41:21 +08:00
GeWuYou
9a783f3caa feat(cqrs): 添加流式命令、查询和请求处理器基类
- 新增 AbstractStreamCommandHandler 基类支持流式命令处理
- 新增 AbstractStreamQueryHandler 基类支持流式查询处理
- 新增 AbstractStreamRequestHandler 基类支持流式请求处理
- 所有基类继承 ContextAwareBase 并实现对应的流式处理器接口
- 提供统一的异步可枚举响应序列处理机制
- 支持取消令牌用于控制流式操作的执行过程
2026-02-14 19:41:21 +08:00
GeWuYou
a4c719773e feat(cqrs): 添加CQRS模式的抽象处理器基类
- 实现了抽象命令处理器基类,支持带返回值和无返回值两种类型
- 创建了抽象通知处理器基类,提供统一的通知处理功能
- 添加了抽象查询处理器基类,支持泛型查询和结果类型
- 实现了抽象请求处理器基类,处理有响应和无响应的请求场景
- 集成了ContextAwareBase基类以提供上下文感知功能
- 使用Mediator库接口实现标准化的CQRS处理模式
2026-02-14 19:41:21 +08:00
GeWuYou
91c9163312 feat(core): 集成Mediator框架并添加CQRS行为支持
- 移除直接的Mediator包依赖,改用Source Generator方式集成
- 添加RegisterMediator方法用于配置Mediator框架
- 添加RegisterMediatorBehavior方法用于注册管道行为
- 实现LoggingBehavior用于记录CQRS请求处理日志
- 实现PerformanceBehavior用于监控请求执行性能
- 更新架构配置以支持Mediator自定义配置
- 优化容器冻结检查的代码结构
2026-02-14 19:41:21 +08:00
GeWuYou
b7efe0cac4 feat(core): 集成 Mediator 框架并配置服务
- 添加 Mediator 框架依赖注入配置
- 设置 Mediator 命名空间为 GFramework.Core.Mediator
- 配置 Mediator 服务生命周期为单例模式
- 设置生成类型为内部访问权限
- 配置通知发布器类型为 ForeachAwaitPublisher
- 添加必要的 using 语句引入 Mediator 和常量模块
2026-02-14 19:41:21 +08:00
GeWuYou
ec07f6b2ef refactor(ioc): 重构MicrosoftDiContainer以支持未冻结状态下的服务获取
- 移除OnContextReady方法,将日志记录器初始化改为直接赋值
- 将日志记录器改为readonly字段并直接初始化
- 修改Get<T>()方法以支持未冻结状态下的实例获取逻辑
- 修改Get(Type)方法以支持未冻结状态下的类型实例获取
- 更新GetAll<T>()方法以支持未冻结状态下的批量服务获取
- 更新GetAll(Type)方法以支持未冻结状态下的批量类型服务获取
- 移除EnsureProvider私有方法,内联检查逻辑到各个获取方法中
2026-02-14 19:41:21 +08:00
GeWuYou
853bcf4315 feat(ioc): 添加类型注册工厂和多接口注册功能
- 为 Architecture 添加 RegisterSystem<T>、RegisterModel<T> 和 RegisterUtility<T> 泛型方法
- 支持通过 DI 容器自动创建实例并提供创建后回调钩子
- 在 MicrosoftDiContainer 中实现 RegisterPlurality<T> 方法
- 支持将单个实例注册到其实现的所有接口
- 更新 IIocContainer 接口定义以匹配新功能
- 为 RegisterFactory 方法添加 class 约束确保类型安全
2026-02-14 19:41:21 +08:00
GeWuYou
55ec42a670 feat(ioc): 替换自定义IoC容器为Microsoft.Extensions.DependencyInjection
- 移除原有的IocContainer实现
- 添加MicrosoftDiContainer作为Microsoft.Extensions.DependencyInjection的适配器
- 修改ArchitectureServices使用MicrosoftDiContainer替代IocContainer
- 更新所有相关测试类使用MicrosoftDiContainer
- 添加Mediator和Microsoft.Extensions.DependencyInjection包引用
- 扩展IIocContainer接口支持更多注册方法
- 在架构初始化中添加Mediator服务注册
2026-02-14 19:41:21 +08:00
GeWuYou
68d292dc64 feat(ioc): 添加基于Type的依赖注入方法
- 实现Get(Type type)方法以获取指定类型的单个实例
- 实现GetRequired(Type type)方法以获取指定类型的必需实例
- 实现GetAll(Type type)方法以获取指定类型的所有实例
- 在抽象层添加对应的接口定义
- 为新方法添加完整的XML文档注释
- 添加全局using System.Runtime指令
2026-02-14 19:41:21 +08:00
GeWuYou
9427cc9dbf docs(architecture): 更新架构服务接口文档注释
- 将异步查询总线实例注释更正为异步查询执行器实例
- 为命令执行器添加返回值类型说明
- 为查询执行器添加返回值类型说明
- 为异步查询执行器添加返回值类型说明
- 移除多余空行并优化代码格式
2026-02-14 19:41:21 +08:00
dependabot[bot]
d151558f96 build(deps): bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 22:23:17 +08:00
dependabot[bot]
d4b5867cbf build(deps): bump actions/upload-pages-artifact from 3 to 4
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 22:23:03 +08:00
dependabot[bot]
03fd8f2463 build(deps): bump trufflesecurity/trufflehog from 3.93.0 to 3.93.3
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.93.0 to 3.93.3.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.93.0...v3.93.3)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.93.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 22:22:50 +08:00
dependabot[bot]
f32a4b63c4 Bump Meziantou.Analyzer from 2.0.298 to 2.0.299
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.299
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.299
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.299
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.299
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.299
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 22:22:25 +08:00
GeWuYou
93302dbc23 chore(ci): 更新文档发布工作流配置
- 移除 bun 安装步骤中的缓存配置
- 删除依赖安装步骤
2026-02-12 14:50:50 +08:00
GeWuYou
2105833f2f fix(ci): 修复文档工作流配置中的参数名称错误
- 将参数名从 docs-path 更改为 docs_dir
- 确保与 llms-txt-action 的预期输入参数一致
2026-02-12 14:46:44 +08:00
GeWuYou
47b8b4c975 docs(property): 更新属性文档中的代码块语法高亮
- 为双向绑定示例添加 C# 语法标记
- 为计算属性示例添加 C# 语法标记
- 为属性验证示例添加 C# 语法标记
- 为条件监听示例添加 C# 语法标记
- 为避免频繁触发示例添加 C# 语法标记
- 为自定义比较器示例添加 C# 语法标记
- 为值变化检测示例添加 C# 语法标记
- 为事件触发机制示例添加 C# 语法标记
2026-02-12 14:39:33 +08:00
GeWuYou
004da5b302 docs(core): 完全重写 rule.md 文档以反映实际框架实现
- 移除所有不存在的接口引用(ICanGetModel、ICanSendCommand 等)
- 更正设计模式说明,准确反映 IContextAware + 扩展方法的实现
- 替换所有 Godot 特定代码为纯 C# 示例
- 详细列出 ContextAwareExtensions 中的所有扩展方法
- 添加自定义组件使用 IContextAware 的示例
- 完善上下文注入机制和回退机制的说明
- 更新最佳实践指南
2026-02-12 14:35:52 +08:00
GeWuYou
e58179a6a4 docs(menu): 更新文档导航菜单和API引用格式
- 在核心文档菜单中新增Context上下文和异步初始化页面链接
- 修正API参考文档中泛型类名的显示格式
- 更新事件、查询和规则文档中的控制器相关描述
- 优化故障排除页面的链接指引结构
2026-02-12 14:20:52 +08:00
GeWuYou
93b25a19f7 docs(core): 更新命令系统文档并移除控制器独立文档
- 移除 controller.md 文件,将控制器相关内容整合到其他文档中
- 重构 command.md 文档,更新命令基类的类型参数设计
- 添加新的命令基类 AbstractCommand<TInput> 和 AbstractCommand<TInput, TResult>
- 更新命令使用示例,采用输入参数对象替代构造函数参数
- 优化事件注册相关代码示例,移除 Godot 特定的生命周期方法
- 更新依赖注入容器文档,明确 Register 方法的泛型特性
- 添加模型异步初始化功能说明和相关接口介绍
- 重构查询系统文档,统一采用输入参数对象的设计模式
- 更新架构生命周期枚举值,使用更准确的阶段名称
- 添加 GitHub Actions 工作流配置,集成 LLM 准备的文档索引功能
2026-02-12 13:13:07 +08:00
GeWuYou
aa0a9f7ab6 docs(tutorials): 添加教程概览页面并调整导航链接
- 创建了新的教程概览页面 docs/zh-CN/tutorials/index.md
- 添加了完整的教程目录结构和学习路径介绍
- 在侧边栏中增加了教程概览链接
- 修正了教程导航链接指向正确的根目录
- 包含了基础教程、Godot集成教程和高级模式教程的详细介绍
- 提供了三种不同的学习路径建议和前置知识要求
2026-02-12 01:24:55 +08:00
GeWuYou
f2a15a8302 fix(docs): 修复入门指南导航链接路径
- 修正了入门指南主链接从 /zh-CN/getting-started/installation 到 /zh-CN/getting-started
- 调整了侧边栏中架构概览和安装配置的顺序
- 确保导航链接与实际页面路径保持一致
2026-02-12 01:22:38 +08:00
GeWuYou
3136c03b03 fix(docs): 修正教程链接路径
- 将教程链接从 '/zh-CN/tutorials/basic-tutorial' 修改为 '/zh-CN/tutorials/basic'
- 保持导航菜单结构不变
- 确保链接指向正确的教程页面
2026-02-12 01:18:31 +08:00
GeWuYou
5d8fec2acd docs(tutorials): 更新文档中的图片路径引用
- 修正 basic/01-environment.md 中的 C# 项目初始化图片路径
- 修正 basic/02-project-setup.md 中的 C# 支持初始化图片路径
- 修正 basic/02-project-setup.md 中的 NuGet 包管理图片路径
- 修正 basic/02-project-setup.md 中的全局类创建图片路径
- 修正 basic/03-counter-basic.md 中的计数器界面图片路径
- 修正 basic/03-counter-basic.md 中的运行效果图片路径
- 修正 basic/04-model-refactor.md 中的运行效果图片路径
- 修正 basic/06-utility-system.md 中的阈值提示图片路径
- 统一所有图片路径从 ../assets/basic-tutorial/ 指向 ../assets/basic/
2026-02-12 01:11:58 +08:00
GeWuYou
e4e79e16dc docs(tutorials): 更新基础教程导航结构并添加完整教程内容
- 重构教程导航,将基础教程拆分为多个子章节
- 添加第1章:环境准备,包含.NET SDK和Godot引擎安装指南
- 添加第2章:项目创建与初始化,介绍GFramework项目结构搭建
- 添加第3章:基础计数器实现,演示传统MVC模式及问题分析
- 添加第4章:引入Model重构,展示GFramework的Model层设计
- 配置教程间的前后导航链接
- 更新导航菜单结构,支持折叠展开功能
2026-02-12 01:08:55 +08:00
GeWuYou
da1c0d0295 docs(tutorials): 更新基础教程文档结构和内容
- 重新组织教程目录结构,分为入门准备、基础实践、架构深化等六个部分
- 添加 GFramework 核心概念介绍,包括 MVC 架构模式和框架组件概述
- 更新项目创建指南,优化包管理配置说明
- 完善计数器实现教程,从传统 MVC 到 GFramework 架构的演进
- 增加 Model、System、Utility 各层设计与实现指导
- 补充架构集成、依赖管理和测试验证相关内容
- 添加事件驱动架构原理和最佳实践总结
2026-02-12 00:01:53 +08:00
GeWuYou
4c547258a5 refactor(storage): 优化文件存储删除操作的线程安全性
- 为Delete方法添加详细的参数注释说明
- 添加锁机制确保文件删除操作的线程安全
- 使用GetOrAdd方法管理路径对应的锁对象
- 实现DeleteAsync异步删除方法
- 优化代码结构提高可读性和维护性
2026-02-12 00:01:39 +08:00
GeWuYou
5e8887145b docs(tutorials): 添加 GFramework 基础教程文档
- 新增完整的从零开始的计数器应用教程
- 包含环境准备、项目创建、项目初始化步骤说明
- 提供功能实现详细指南,涵盖 MVC 架构实践
- 添加测试验证章节和代码示例
- 介绍 GFramework 核心概念:Model、System、Utility、Command
- 提供事件驱动架构和解耦设计模式最佳实践
- 包含实际代码重构案例和设计模式应用场景
2026-02-11 23:52:02 +08:00
GeWuYou
3630369b42 docs(tutorials): 更新基础教程内容
- 将教程目标从游戏项目改为计数器应用
- 移除目录章节符号,调整章节结构
- 更新Godot版本要求为Mono版
- 重新设计项目初始化流程和截图说明
- 完全重构架构设计部分,详细介绍模块化开发
- 添加游戏入口点和模块注册实现
- 实现MVC模式的计数器功能示例
- 增加命令模式的实现说明
- 详细解释事件驱动架构的优势
2026-02-11 23:05:19 +08:00
GeWuYou
e9707f4712 docs(tutorials): 更新高级模式文档目录结构
- 移除目录标题前的图标符号
- 删除模块化设计、性能分析和错误处理章节链接
- 简化目录结构以聚焦核心架构内容
2026-02-11 20:19:00 +08:00
GeWuYou
7a18d9459b docs(core): 更新核心架构文档完善命令事件系统说明
- 重构架构文档增加模块管理和生命周期管理说明
- 更新命令系统文档移除输入参数结构简化命令定义
- 完善事件系统文档添加事件总线和注销功能说明
- 补充IoC容器文档增加多实例注册和单例管理说明
- 优化示例代码展示架构初始化和组件获取方式
- 添加配置选项说明和最佳实践建议
2026-02-11 20:13:40 +08:00
GeWuYou
4be7f7a731 style(docs): 更新品牌颜色主题配置
- 注释掉原有的 indigo 颜色变量定义
- 添加自定义深蓝色 (#1e40af) 用于文字和激活状态
- 添加自定义蓝色 (#2563eb) 用于悬停效果
- 保留原有的品牌颜色 3 和软色变量设置
2026-02-11 16:31:18 +08:00
GeWuYou
fe0066299b style(docs): 更新文档主题样式
- 添加默认颜色变量之间的空行分隔
- 将主页英雄名称背景渐变改为 WebKit 线性渐变
- 恢复原始的紫色到蓝色渐变配色方案
- 简化主页英雄图像背景为紫色到青色渐变
- 移除自定义按钮品牌背景渐变样式
- 移除 VPFeature 悬停阴影效果样式
2026-02-11 16:24:58 +08:00
GeWuYou
caf0784326 style(docs): 更新品牌颜色变量定义
- 移除自定义深蓝色和蓝色配置
- 使用 VitePress 内置的 indigo 颜色变量替代
- 简化品牌颜色主题配置
- 保持品牌色彩一致性
2026-02-11 16:20:25 +08:00
GeWuYou
5aaef20b70 style(docs): 更新文档主题样式和导航链接配置
- 修改品牌颜色变量定义方式,统一使用 indigo 颜色系统
- 注释掉原有的蓝色品牌颜色配置
- 将架构概览链接从 /zh-CN/getting-started/architecture 调整为 /zh-CN/getting-started
- 调整导航菜单结构配置
2026-02-11 16:18:26 +08:00
GeWuYou
b35450bb15 feat(docs): 添加网站图标配置
- 在head中添加favicon链接标签
- 配置图标类型为image/png
- 设置图标路径为/GFramework/favicon.png
2026-02-11 16:13:09 +08:00
GeWuYou
1fc5e0c708 docs(homepage): 更新架构概览链接路径
- 将架构概览链接从 /zh-CN/getting-started/architecture-overview 修改为 /zh-CN/getting-started/architecture
- 移除了不必要的主题配置 alt 属性
2026-02-11 16:02:48 +08:00
GeWuYou
08650cf682 docs(nav): 更新源码生成器导航链接
- 修正源码生成器菜单项的链接路径,移除 overview 后缀
2026-02-11 16:00:47 +08:00
GeWuYou
1ab615db26 docs(source-generators): 更新文档结构并调整Godot版本信息
- 将Source Generators概述文档从overview重命名为index
- 更新所有相关文档中的链接指向新的index文件
- 移除Godot文档中的许可证和版本信息冗余内容
- 统一Godot版本要求从4.5.1+到4.6
- 删除各模块文档末尾的相关链接部分
- 优化文档结构提升可读性
2026-02-11 15:57:40 +08:00
GeWuYou
3d656981b4 docs: 更新文档结构和链接配置
- 移除架构概览页面的独立文件,将其内容迁移至getting-started目录
- 更新导航菜单中架构概览的链接路径
- 删除game模块中的场景管理文档及其相关引用
- 修复godot模块中相关文档的链接格式
- 清理各个文档末尾的多余链接和许可证信息
- 优化文档间的引用关系,确保链接有效性
2026-02-11 15:51:48 +08:00
GeWuYou
f387e3788e docs(core): 更新文档中的链接格式和代码引用样式
- 将文档中的文件路径链接替换为纯文本格式
- 统一代码引用的显示样式,移除多余的链接标记
- 修正事件和接口文档中的格式一致性问题
- 更新扩展方法文档中的链接引用方式
- 标准化日志系统文档中的接口引用格式
2026-02-11 15:37:05 +08:00
GeWuYou
8f847de24e docs(core): 更新架构文档并修复链接路径
- 修复 Core 概述链接路径,添加 index.md 后缀
- 统一标点符号使用,在冒号后添加空格
- 优化段落格式和列表样式,提升文档可读性
- 调整代码示例缩进和格式
- 更新架构类标题描述,明确其为基类
- 修正文档中的拼写和格式错误
- 调整设计模式章节标题格式
- 更新最佳实践部分的格式和表述
- 优化相关包列表的显示格式
2026-02-11 15:29:41 +08:00
GeWuYou
cd25f8effe docs(game): 更新游戏设置文档中的代码注释和示例
- 移除 GameSettings 类的 XML 文档注释
- 移除 GameSettings 应用器的 XML 文档注释
- 修正 Factory Pattern 描述中的方法名称格式
- 更新设计模式说明以匹配实际实现细节
2026-02-11 15:18:12 +08:00
GeWuYou
7dd9b99e49 fix(docs): 修复文档中代码块转义问题并更新插件配置
- 将 markdownEscapePlugin 重命名为 safeGenericEscapePlugin
- 更新插件逻辑以保护 HTML 标签并仅转义泛型形式的尖括号
- 修复文档中所有代码块的语法标记为正确的 csharp 格式
- 更新依赖缓存文件的哈希值
- 修正事件文档中泛型类型的显示格式
2026-02-11 15:15:28 +08:00
GeWuYou
6cc0ddf7f9 docs: 更新文档中的代码示例和链接引用
- 修复 IEventHandler 接口中的参数关键字冲突
- 修正场景管理器接口中的泛型约束拼写错误
- 本地化核心抽象文档链接为中文标题
- 更新事件系统文档中的接口链接路径
- 修复扩展方法文档中的上下文感知链接
- 调整日志系统文档中的接口链接路径
- 重构架构概述中的代码示例和设计原则
- 统一 Godot 设置模块中的代码块格式
- 优化音频和图形设置的代码示例
2026-02-11 14:49:34 +08:00
GeWuYou
d1cdac8082 docs: 更新文档链接和代码块格式
- 修复了文档中多个文件的链接指向,统一使用相对路径格式
- 移除了代码块中的语言标识符以保持一致性
- 更新了存储模块文档中的类名显示方式
- 修正了架构文档中的跨文档引用链接
- 调整了事件、命令、查询等核心模块的文档链接结构
- 规范化了所有代码示例的格式和引用方式
2026-02-11 14:44:46 +08:00
GeWuYou
75826961d4 feat(docs): 添加 Markdown 转义插件解决 HTML 标签显示问题
- 在 VitePress 配置中集成 markdown-escape-plugin
- 实现代码块保护机制避免代码中的 < > 符号被转义
- 添加预处理器确保代码块内容不被 HTML 转义影响
- 通过占位符机制实现代码块的临时替换和恢复
- 提供完整的代码块解析和转义处理流程
2026-02-11 14:44:15 +08:00
GeWuYou
8c04a5008a style(docs): 修复代码块标记语法错误
- 修正了所有代码块前的标记符号,从 ``csharp 更改为 ```csharp
- 确保了文档中代码片段的正确显示格式
- 提高了文档的可读性和语法规范性
2026-02-11 14:18:04 +08:00
GeWuYou
033e2b076a docs(core): 更新文档中的代码格式和类型标记
- 修复 IfType<T, TResult> 扩展方法的类型格式显示
- 更正 Contains<T>() 方法的类型标记格式
- 统一代码块标记为正确的 ```csharp 格式
- 修正 IQuery<TResult> 接口的类型标记显示
2026-02-11 14:16:52 +08:00
GeWuYou
50a71403bb docs(ioc): 更新 IoC 容器文档
- 修复 IocContainer 链接路径指向正确文件位置
- 统一泛型方法语法格式,添加反引号标记如 Register<T>、Get<T> 等
- 修正代码块标记语法错误
- 更新注册和获取实例的方法示例代码格式
2026-02-11 14:09:23 +08:00
GeWuYou
c6cec4ae13 chore(docs): 简化 VitePress 脚本命令
- 将 docs:dev 脚本重命名为 dev
- 将 docs:build 脚本重命名为 build
- 将 docs:preview 脚本重命名为 preview
- 移除脚本名称中的 docs: 前缀以简化命令使用
2026-02-11 13:57:01 +08:00
GeWuYou
a5a90a59bd chore(workflow): 更新 Bun 版本配置
- 将 publish-docs.yml 工作流中的 Bun 版本从 2.1.x 改为 latest
- 保持缓存配置不变
2026-02-11 13:53:35 +08:00
GeWuYou
3791dc5b13 chore(workflow): 更新文档发布工作流配置
- 添加详细的中文注释说明工作流功能和配置项
- 修改触发条件支持标签推送和手动触发两种方式
- 配置工作流所需权限包括 contents、pages 和 id-token
- 更新并发控制配置格式并设置不允许取消进行中的任务
- 优化步骤命名从数字编号改为功能描述性名称
- 添加 Bun 缓存配置和工作目录指定
- 改进条件判断逻辑支持正式版本标签和手动触发
2026-02-11 13:50:56 +08:00
GeWuYou
62fbfd41e1 chore(workflow): 添加手动触发文档发布工作流功能
- 在 GitHub Actions 工作流配置中添加 workflow_dispatch 触发器
- 允许通过 GitHub 界面手动运行文档发布流程
- 保留原有的 push 和 tags 触发规则
- 维持现有的权限设置不变
2026-02-11 13:45:51 +08:00
GeWuYou
604d720639 fix(workflow): 修复文档发布工作流条件并指定Bun版本
- 修复了触发文档发布的条件逻辑
- 指定Bun.js版本为2.1.x以确保兼容性
- 移除了不必要的分支检查条件
2026-02-11 13:33:13 +08:00
GeWuYou
d147bc01fe chore(ci): 更新文档发布工作流以使用 Bun.js
- 将 Node.js 设置替换为 Bun.js 安装
- 更新依赖安装命令从 npm 到 bun
- 更新构建命令从 npm run build 到 bun run build
- 移除缓存配置选项
2026-02-11 13:33:13 +08:00
GeWuYou
5e92232cc6 chore(workflow): 更新文档发布工作流配置
- 修改标签匹配模式从 '*' 到 'v*' 以确保版本标签格式一致性
- 添加条件判断逻辑以精确控制工作流触发时机
- 增加对预发布标签的过滤处理
- 为手动文档发布增加分支合并条件支持
2026-02-11 13:33:13 +08:00
GeWuYou
713dd65d50 chore(workflow): 更新文档发布工作流配置
- 移除对所有分支的推送触发器
- 删除通配符标签匹配规则
- 简化工作流权限配置
- 优化工作流触发条件设置
- [release ci]
2026-02-11 12:52:14 +08:00
GeWuYou
8f30361972 refactor(docs): 将文档构建工具从 DocFX 迁移到 VitePress
- 移除 .NET SDK 相关配置,改为使用 Node.js 环境
- 更新依赖安装方式,使用 npm 替代 dotnet restore
- 修改构建命令为 npm run build,替换原有的 DocFX 构建流程
- 调整输出路径配置,从 docfx/_site 改为 docs/.vitepress/dist
- 更新工作流触发条件,启用 push 触发器替代手动触发
- 重命名作业名称为 build-and-deploy,简化部署流程
- 更新 Action 版本号,统一使用较新的版本
- [release ci]
2026-02-11 12:52:14 +08:00
GeWuYou
590bbbf81b docs(sidebar): 更新侧边栏链接并删除API参考导航
- 将Game和Godot模块的概览链接从overview路径更新为根路径
- 删除了API参考相关的侧边栏导航配置
- 移除了已删除的Game和Godot概览文档文件
2026-02-11 12:52:14 +08:00
GeWuYou
0b1d3006fa docs(website): 更新首页文档内容和特性描述
- 修改标题为 GFramework
- 更新英雄区域文本描述,强调模块化架构和多引擎集成支持
- 重新组织特性列表,优化清洁架构、CQRS、事件系统、引擎集成、响应式编程和源码生成器的描述
- 调整特性标题和详情内容,使其更准确地反映框架的核心功能
- 修复页面底部布局语法错误
2026-02-11 12:52:14 +08:00
GeWuYou
f4731ee5a3 fix(docs): 修复中文文档链接路径错误
- 修正快速开始页面链接为 /zh-CN/getting-started/quick-start
- 修正架构概览页面链接为 /zh-CN/getting-started/architecture-overview
- 确保所有中文文档导航链接指向正确的本地化路径
2026-02-11 12:52:14 +08:00
GeWuYou
317eddca9b docs(sidebar): 更新侧边栏导航结构并移除API参考页面
- 调整Core模块导航链接结构,从overview页面改为根路径
- 重构Core模块侧边栏,将原有的6个主要类别扩展为15个详细分类
- 精简Game模块侧边栏,保留场景管理和游戏设置两个主要功能
- 更新Godot集成模块侧边栏,新增协程、信号、存储等功能分类
- 修改源码生成器模块命名,将枚举扩展重命名为枚举生成器
- 新增抽象接口侧边栏,包含Core和Game抽象接口文档
- 调整教程模块顺序,新增入门教程和Godot集成教程分类
- 移除独立的API参考导航项,将其整合到相应模块中
- 修正生成器API文档链接路径错误问题
2026-02-11 12:52:14 +08:00
GeWuYou
bc89ff07a1 docs(pages): 删除 404 页面文档文件
- 移除 docs/404.md 文件及其所有内容
- 删除 404 页面的 Vue 组件实现代码
- 清理相关样式和脚本配置
2026-02-11 12:52:14 +08:00
GeWuYou
0244883e14 feat(docs): 添加自定义404页面组件
- 创建 NotFound.vue 组件实现404页面功能
- 在主题配置中注册并集成自定义404页面
- 实现中英文双语支持和自动重定向功能
- 添加倒计时自动跳转到首页的功能
- 设计美观的404错误页面样式和布局
- 提供相关文档页面链接建议和返回首页按钮
2026-02-11 12:52:14 +08:00
GeWuYou
6f4bbd6d06 refactor(docs): 优化文档站点配置和404页面实现多语言支持
- 更新VitePress配置移除不必要的服务器中间件
- 实现404页面的中英文国际化显示
- 为404页面添加倒计时自动跳转功能
- 重构404页面样式并添加返回首页按钮
- 优化依赖缓存哈希值更新构建配置
2026-02-11 12:52:14 +08:00
GeWuYou
b835d3af67 docs(site): 实现多语言支持并重构文档站点配置
- 添加简体中文本地化配置和导航链接
- 配置本地搜索功能并设置中文翻译
- 添加 Catch-all 404 重定向中间件
- 重构侧边栏和导航结构以支持国际化
- 移除旧的英文文档内容并更新配置
- 添加页脚导航和面包屑文字本地化
2026-02-11 12:52:14 +08:00
GeWuYou
67df7337b9 style(docs): 更新文档主题样式以匹配GFramework品牌色彩
- 替换默认靛蓝色系为GFramework品牌蓝色彩
- 修改首页英雄标题渐变背景为绿色到蓝色到紫色渐变
- 更新首页英雄图像背景为多色透明渐变
- 添加品牌按钮背景渐变样式
- 为功能组件添加悬停阴影效果
2026-02-11 12:52:14 +08:00
GeWuYou
45068f304f feat(docs): 添加网站导航栏 Logo
- 在主题配置中添加 logo 属性指向 '/logo-icon.png'
- 配置文件中增加 Logo 显示功能
2026-02-11 12:52:14 +08:00
GeWuYou
1dc173e4df docs(core): 添加核心模块架构文档
- 添加 Architecture 包使用说明文档,介绍 MVC 架构模式实现
- 添加 Command 包使用说明文档,阐述命令模式设计和实现
- 添加 Controller 包使用说明文档,描述控制器接口规范
- 添加 Environment 包使用说明文档,定义环境配置功能
- 添加 Events 包使用说明文档,提供事件系统完整介绍
2026-02-11 12:52:14 +08:00
GeWuYou
6b48c92710 docs: 删除多个核心模块的文档文件
- 移除 architecture 模块的 README 文档
- 移除 command 模块的 README 文档
- 移除 environment 模块的 README 文档
- 移除 events 模块的 README 文档
- 清理框架核心组件的使用说明文档
2026-02-11 12:52:14 +08:00
GeWuYou
8b49099231 remove(docfx): 删除 DocFX 配置文件
- 移除 docfx.json 配置文件
- 移除 filterConfig.yml 过滤配置文件
- 移除 index.md 主页文档
- 移除 toc.yml 导航配置文件
- 移除 API 目录下的 toc.yml 文件
2026-02-11 12:52:14 +08:00
GeWuYou
026d9964fe docs(game): 更新游戏模块文档并优化整体结构
- 重写了 GFramework.Game 模块的完整文档
- 添加了详细的目录结构和使用示例
- 扩展了架构模块系统的说明和代码示例
- 增加了资产管理、存储系统和序列化系统的详细文档
- 提供了模块配置和高级用法的指导
- 完善了存储系统的分层存储和缓存实现
- 添加了序列化系统的自定义转换器示例
- 更新了核心特性和设计理念的描述
- 优化了文档的整体组织结构和可读性
- 刷新了 VitePress 依赖缓存以同步文档变更
2026-02-11 12:52:14 +08:00
GeWuYou
88a528746d docs(website): 更新文档网站配置和内容结构
- 将描述从英文改为中文,突出框架的游戏开发定位
- 添加base路径配置以支持GitHub Pages部署
- 重构导航菜单,提供更清晰的文档分类
- 创建详细的侧边栏结构,涵盖入门指南、核心框架、游戏模块等内容
- 更新首页Hero区域,添加框架Logo和现代化功能介绍
- 移除默认示例页面,替换为实际的框架文档
- 添加页脚版权信息和Apache许可证声明
- 创建核心框架、游戏模块和Godot集成的概览文档
- 添加入门指南,包括安装配置、快速开始和架构概览
- 实现完整的多层级文档导航和内容组织
2026-02-11 12:52:14 +08:00
GeWuYou
2670cf564b feat(docs): 迁移文档系统到 VitePress
- 将文档首页从传统 Markdown 格式迁移到 VitePress 首页配置
- 添加 VitePress 主题配置文件和自定义样式
- 配置 Git 忽略文件以排除构建产物和依赖
- 添加 VitePress 构建缓存和依赖预构建文件
- 创建 API 示例页面和导航配置
- 移除旧的 TOC 配置文件并替换为新的路由结构
2026-02-11 12:52:14 +08:00
GeWuYou
e83dd278b3 test(coroutine): 添加协程指令单元测试并改进现有测试
- 为 Delay 指令添加完整的单元测试覆盖各种时间情况
- 为 WaitForCoroutine 指令添加单元测试验证协程等待功能
- 为 WaitForFrames 指令添加单元测试覆盖帧计数逻辑
- 为 WaitForTask<T> 指令添加单元测试包括异常处理场景
- 为 WaitOneFrame 指令添加单元测试验证单帧等待
- 为 WaitUntil 和 WaitWhile 指令添加单元测试覆盖谓词逻辑
- 将 WaitForMultipleEventsTests 中的异步方法标记为 async Task 类型
- 修改测试事件类的 Data 属性为可变的 set 访问器而不是只读 init
- 优化 WaitForMultipleEventsTests 中的断言注释描述
2026-02-10 23:47:40 +08:00
GeWuYou
42a1ab0f29 fix(coroutine): 修复 WaitForMultipleEvents 的事件处理逻辑
- 添加了完成状态检查,避免在已完成或释放后继续处理事件
- 立即注销事件监听器以防止内存泄漏
- 在事件触发后清理注册器引用
- 添加了完整的单元测试覆盖各种事件场景
2026-02-10 23:47:40 +08:00
GeWuYou
4748198696 feat(coroutine): 添加多种协程等待指令及对应单元测试
- 实现 WaitForConditionChange 指令,支持等待条件状态变化
- 实现 WaitForEndOfFrame 指令,支持等待当前帧渲染完成
- 实现 WaitForFixedUpdate 指令,支持等待物理固定更新周期
- 实现 WaitForMultipleEvents 指令,支持等待多个事件中的任意一个触发
- 实现 WaitForNextFrame 指令,支持等待下一帧开始
- 实现 WaitForPredicate 指令,支持通用谓词等待功能
- 实现 WaitForSecondsRealtime 指令,支持基于真实时间的等待
- 实现 WaitForSecondsScaled 指令,支持受时间缩放影响的等待
- 实现 WaitUntilOrTimeout 指令,支持带超时的条件等待
- 为所有新指令添加完整的单元测试覆盖
2026-02-10 23:47:40 +08:00
GeWuYou
6cc2bdfeb5 refactor(coroutine): 优化异步操作延续处理逻辑
- 使用while循环替代递归调用避免栈溢出风险
- 改进CAS操作的重试机制提高并发安全性
- 简化空值检查逻辑提升代码可读性
- 优化双重检查锁模式确保线程安全
2026-02-09 19:16:22 +08:00
GeWuYou
01fb7c33ca chore(docs): 更新 README 中的 Godot 版本号
- 将 Godot 版本从 4.5+ 更新为 4.6
2026-02-09 15:45:55 +08:00
GeWuYou
7a259cde36 docs(readme): 添加 zread 集成徽章
- 在 README.md 中添加 zread 集成徽章
- 徽章链接指向 zread.ai 的 GFramework 项目页面
- 使用 SVG 格式的徽章图标和自定义颜色样式
2026-02-09 15:45:08 +08:00
GeWuYou
058c27ce26 docs(core): 完善核心框架文档注释
- 为 AbstractContextUtility 类添加日志记录器文档注释
- 为 Architecture 类的 IsReady 属性和待初始化组件集合添加详细说明
- 修改 GitHub Actions workflow 使用 autobuild 模式替代手动构建
- 为 CoroutineScheduler 的 IsCoroutineAlive 方法添加完整文档注释
- 为 EnvironmentBase 类的 Initialize 方法和 Register 方法完善参数说明
- 为 IocContainer 的 OnContextReady 方法添加初始化日志记录器说明
- 为 WaitForEvent 协程指令类添加全面的 XML 文档注释和异常说明
2026-02-09 11:37:44 +08:00
GeWuYou
edef111ce7 perf(ci): 优化CI工作流配置以提升构建性能
- 为MegaLinter添加缓存机制以加速代码质量检查
- 为TruffleHog添加缓存机制以提升安全扫描效率
- 扩展NuGet包缓存路径并包含更多依赖目录
- 添加.NET工具缓存以减少重复下载时间
- 将CodeQL构建模式从自动改为手动控制
- 更新.NET版本配置仅保留8.0.x版本支持
- 调整仓库检出深度设置以优化拉取速度
2026-02-09 11:27:10 +08:00
GeWuYou
94bfa9aa29 feat(ui): 优化UI实例ID生成逻辑以支持多线程安全
- 使用Interlocked.Increment确保多线程环境下实例计数器的原子操作
- 修复了潜在的并发访问导致ID重复的问题
- 保持原有的ID格式化规则不变
- 为GenerateInstanceId方法添加返回值XML文档注释
2026-02-08 14:27:12 +08:00
GeWuYou
d2e2739016 feat(ui): 添加通过UI键隐藏指定层级UI的功能
- 在UiRouterBase中新增HideByKey方法,支持根据UI键隐藏指定层级中的UI
- 为IUiPageBehavior接口添加Handle属性,用于获取或设置当前UI句柄
- 在IUiRouter接口中定义HideByKey方法契约
- 为CanvasItemUiPageBehaviorBase实现Handle属性
- 修复UI页面行为基类中的注释描述
- 在路由初始化过程中设置页面句柄以确保正确的UI管理
- [release ci]
2026-02-08 10:09:35 +08:00
GeWuYou
b039e3bd6f feat(workflow): 添加许可证合规文件打包功能
- 在 license-compliance 工作流中增加 ZIP 压缩包创建步骤
- 将 NOTICE、第三方许可证列表和 SBOM 验证文件打包为 license-compliance.zip
- 更新 GitHub Release 上传配置以包含新的合规打包文件
- 添加详细的注释说明打包内容和用途
- 优化工作流步骤顺序和可读性
2026-02-07 21:59:04 +08:00
GeWuYou
43eacc1e4a refactor(ui): 移除UI根接口中的Z序管理方法并优化文档注释
- 从IUiRoot接口中移除SetZOrder和GetVisiblePages方法
- 删除GodotUiRoot类的完整实现文件
- 为ModalLayerUiPageBehavior类添加详细的XML文档注释
- 为TopmostLayerUiPageBehavior类添加详细的XML文档注释
- 优化模态层和顶层UI行为类的属性文档说明
- [release ci]
2026-02-07 21:51:34 +08:00
GeWuYou
35a06d2565 refactor(ui): 将CanvasItemUiPageBehavior重构为分层行为基类和工厂模式
- 移除原有的CanvasItemUiPageBehavior类
- 创建CanvasItemUiPageBehaviorBase抽象基类,统一管理生命周期逻辑
- 实现PageLayerUiPageBehavior处理页面层UI行为
- 实现OverlayLayerUiPageBehavior处理覆盖层UI行为
- 实现ModalLayerUiPageBehavior处理模态层UI行为
- 实现ToastLayerUiPageBehavior处理Toast层UI行为
- 实现TopmostLayerUiPageBehavior处理顶层UI行为
- 创建UiPageBehaviorFactory工厂类按层级创建对应的行为实例
- 添加Apache License 2.0版权声明到所有新文件
2026-02-07 21:28:15 +08:00
GeWuYou
83a268690f feat(ui): 完善UI路由系统功能
- 添加层级UI管理功能,支持Overlay、Modal、Toast等浮层显示
- 实现路由守卫机制,支持页面跳转前后的权限检查
- 新增实例ID计数器,为每个UI实例生成唯一标识符
- 重构代码结构,添加区域划分提高代码可读性
- 优化页面栈管理逻辑,改进生命周期处理流程
- 修复Push和Pop操作中的日志输出格式问题
- 添加类型安全检查,防止重复注册相同UI实例
- 实现UI句柄公共构造函数,支持外部创建UI句柄对象
- 增强Show和Hide操作的重入性检测机制
2026-02-07 21:09:50 +08:00
GeWuYou
b505ef5dff feat(ui): 更新UI系统接口和实现
- 在IUiPageBehavior接口中添加Layer和IsReentrant属性
- 将IUiRouter的Show方法返回类型从void改为UiHandle
- 修改Hide、Resume、GetFromLayer等方法参数从uiKey改为UiHandle
- 新增UiHandle结构体用于唯一标识和管理UI实例
- 在CanvasItemUiPageBehavior中实现Layer和IsReentrant属性
2026-02-07 21:02:21 +08:00
GeWuYou
3f0dbb06b7 remove(ui): 移除UI缓存和过渡相关接口和配置
- 删除了 IUiCacheStatistics 接口定义
- 删除了 IUiTransition 接口定义
- 删除了 UiCacheConfig 类定义及其相关方法
- 移除了UI缓存统计、过渡动画和缓存配置功能
2026-02-07 21:02:04 +08:00
GeWuYou
bf5672759a docs(enums): 更新 UiLayer 枚举文档注释
- 为 Page 层添加不可重入说明
- 为 Overlay 层添加支持重入说明
- 为 Modal 层添加支持重入及注意事项说明
- 为 Toast 层添加支持重入说明
- 为 Topmost 层添加不可重入说明
- [release ci]
2026-02-07 20:04:13 +08:00
GeWuYou
0771a7ad85 refactor(ui): 更新UI路由和页面行为接口定义
- 修改HasVisibleInLayer方法签名,添加uiKey参数以精确检查特定UI可见性
- 在IUiPageBehavior接口中添加IsVisible属性用于获取页面可见状态
- 从IUiPageBehavior接口中移除RequiresMask属性
- 为ClearLayer和GetFromLayer方法添加完整的XML文档注释
- 更新CanvasItemUiPageBehavior实现以支持新的IsVisible属性
- 优化UI层级检查逻辑,提高可见性判断准确性
2026-02-07 19:49:13 +08:00
GeWuYou
bcb82b1473 chore(workflow): 更新许可证合规工作流配置
- 移除条件检查逻辑以简化工作流触发
- 修改许可证徽章更新条件为标签版本发布
- 精简工作流步骤配置
2026-02-07 09:45:31 +08:00
GeWuYou
177552a730 docs(coroutine): 更新协程扩展方法和定时器类的文档注释
- 为 CoroutineExtensions 类添加了总体功能描述
- 完善了 RunCoroutine 方法的参数和返回值文档注释
- 补充了 CancelWith 方法族的参数说明和返回值描述
- 优化了 AllNodesAlive 私有方法的文档注释格式
- 将 Timing 类中的重复错误消息提取为静态只读字段
- 统一了调度器属性的异常消息为常量引用
- [release ci]
2026-02-07 08:57:48 +08:00
gewuyou
bbb4636967 Add explicit UI/game coroutine helpers 2026-02-07 08:54:23 +08:00
GeWuYou
2b5610a659 chore(workflow): 更新许可证合规工作流配置
- 移除对 CI 构建测试工作流完成的依赖触发
- 为 GitHub Release 上传步骤添加标签名称参数
- 简化推送事件触发条件,移除通配符标签匹配
- 保留内容写入权限配置
2026-02-07 00:40:17 +08:00
GeWuYou
e57597146f chore(workflow): 移除许可证合规工作流中的标签名称配置
- 删除了 softprops/action-gh-release 中的 tag_name 配置项
- 保持 GitHub Release 的上传功能不变
- 简化了工作流配置以避免标签命名冲突
- [release ci]
2026-02-06 23:55:00 +08:00
GeWuYou
0a48fb4652 fix(ui): 修复CanvasItemUiPageBehavior暂停逻辑问题
- 添加BlocksInput检查条件,避免输入被错误阻止
- 修复暂停状态下节点处理、物理处理和输入处理的控制逻辑
- [release ci]
2026-02-06 23:50:44 +08:00
GeWuYou
f1e45385c4 refactor(ui): 重构UI路由基础功能
- 移除Show方法中基于实例的显示功能,简化接口设计
- 改进Hide方法实现,支持永久销毁和临时隐藏两种模式
- 添加Resume方法用于恢复已隐藏的UI界面
- 更新XML文档注释,提供更清晰的参数说明
- 优化代码结构和注释,提升代码可读性
- 调整IUiRouter接口定义,保持API一致性
- [release ci]
2026-02-06 23:14:51 +08:00
GeWuYou
89227ff802 refactor(ui): 优化UiRouterBase中的页面销毁和隐藏逻辑
- 区分永久移除和临时隐藏的处理流程,销毁时才调用OnExit方法
- 重构日志消息以更准确反映操作类型
- 简化离开守卫检查的循环逻辑,提高代码可读性
- 添加注释说明销毁与隐藏的不同行为
- 调整日志输出格式,保持一致性
- [release ci]
2026-02-06 23:05:09 +08:00
GeWuYou
aaf728ad1a refactor(ui): 移除UI实例管理策略和缓存功能
- 移除UiInstancePolicy枚举类型
- 从Push、Replace和Show方法中移除instancePolicy参数
- 从IUiFactory接口中移除缓存相关方法和GetOrCreate方法
- 简化GodotUiFactory实现类,移除缓存池和实例管理逻辑
- 将Pop操作中的Cache策略重命名为Suspend
- 将Exclusive策略描述从Pause+Hide改为Pause+Suspend
- 修复CanvasItemUiPageBehavior中OnResume方法的节点有效性检查
- [release ci]
2026-02-06 22:39:49 +08:00
GeWuYou
f1c3bc5a1d refactor(scene): 更新场景路由器接口继承系统接口
- 为 ISceneRouter 接口添加 GFramework.Core.Abstractions.system 命名空间引用
- 让 ISceneRouter 接口继承 ISystem 接口以统一系统管理规范
- [release ci]
2026-02-05 21:24:48 +08:00
dependabot[bot]
4647d1f184 build(deps): bump actions/setup-dotnet from 4 to 5
Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5.
- [Release notes](https://github.com/actions/setup-dotnet/releases)
- [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-dotnet
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:05:04 +08:00
dependabot[bot]
6f88719648 Bump Meziantou.Analyzer from 2.0.296 to 2.0.298
---
updated-dependencies:
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.298
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.298
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.298
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.298
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Meziantou.Analyzer
  dependency-version: 2.0.298
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:04:18 +08:00
dependabot[bot]
bd5feca90f build(deps): bump actions/upload-artifact from 4 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:02:56 +08:00
dependabot[bot]
6d6bf9a7b2 build(deps): bump trufflesecurity/trufflehog from 3.92.5 to 3.93.0
Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.92.5 to 3.93.0.
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](https://github.com/trufflesecurity/trufflehog/compare/v3.92.5...v3.93.0)

---
updated-dependencies:
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.93.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:02:38 +08:00
dependabot[bot]
91bb7020d6 build(deps): bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:02:16 +08:00
dependabot[bot]
548377f054 build(deps): bump github/codeql-action from 3 to 4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 21:01:57 +08:00
GeWuYou
917a95e245 refactor(scene): 重构场景路由系统架构
- 移除原有的 ISceneLoader 接口定义
- 新增 SceneRouterBase 抽象基类实现场景路由基础功能
- 添加 ISceneRoot 接口定义场景根节点操作规范
- 创建 ISceneRouter 接口统一场景路由操作契约
- 实现场景替换和卸载的核心逻辑
- 添加场景切换前后钩子方法支持扩展功能
- [release ci]
2026-02-05 20:50:24 +08:00
GeWuYou
41661c8a6f refactor(scene): 更新场景加载器接口继承实用工具接口
- 为 ISceneLoader 接口添加对 IUtility 的继承
- 在文件顶部添加 GFramework.Core.Abstractions.utility 命名空间引用
- 使场景加载器接口具备实用工具的基本功能
2026-02-05 20:35:11 +08:00
GeWuYou
a4dcb19f8f feat(scene): 添加场景加载器接口定义
- 定义了 ISceneLoader<T> 接口用于管理场景加载、替换和卸载操作
- 提供 Current 属性获取当前加载的场景对象
- 添加 Replace 方法用于替换当前场景为指定键对应的场景
- 添加 Unload 方法用于卸载当前加载的场景
- 包含完整的 XML 文档注释说明接口功能和方法用途
- 遵循 Apache 2.0 许可证协议并添加版权信息
2026-02-05 20:32:56 +08:00
gewuyou
29fcfbe0a1 docs: unify module docs navigation and package guidance 2026-02-05 20:27:54 +08:00
gewuyou
bb971e98ae docs: rewrite root README for accuracy and structure 2026-02-05 20:27:54 +08:00
GeWuYou
c8be4b317d refactor(core): 将命令和查询总线重构为执行器模式
- 将 CommandBus 重命名为 CommandExecutor 并更新相关接口
- 将 QueryBus 重命名为 QueryExecutor 并更新相关接口
- 将 AsyncQueryBus 重命名为 AsyncQueryExecutor 并更新相关接口
- 更新 ArchitectureContext 中的服务引用和错误消息
- 修改 ArchitectureServices 中的私有字段和公共属性名称
- 更新所有测试文件中的实例变量和服务引用
- 修改测试类名称以匹配新的执行器命名
- 更新状态机系统测试中的容器注册项
2026-02-05 12:46:44 +08:00
GeWuYou
7481011780 feat(Timing): 添加预热函数优化初始化性能
- 添加 Prewarm 方法用于提前触发实例初始化
- 通过访问 Instance 属性避免首次使用时的性能开销
- [release ci]
2026-02-05 09:36:02 +08:00
GeWuYou
04c76d3d2c feat(workflow): 添加许可证合规检查工作流
- 配置工作流在推送标签时触发
- 添加注释说明合规产物上传到 GitHub Actions 工件存储
- 实现将合规产物上传至 GitHub Release 功能
- 配置上传 NOTICE、THIRD_PARTY_LICENSES.md 和 SBOM 文件
- 设置 GITHUB_TOKEN 环境变量用于授权发布操作
2026-02-05 08:02:21 +08:00
GeWuYou
013fd1ee02 feat(setting): 添加设置模型初始化状态检查功能
- 在 ISettingsModel 接口中新增 IsInitialized 属性
- 提供布尔值返回当前对象初始化状态
- 支持外部调用方检查模型是否已完成初始化
- [release ci]
2026-02-04 20:47:52 +08:00
GeWuYou
5cf6c12c52 chore(dependencies): 更新 Meziantou.Analyzer 包版本
- 将 GFramework.Core.Abstractions 项目中的 Meziantou.Analyzer 从 2.0.286 更新到 2.0.296
- 将 GFramework.Game.Abstractions 项目中的 Meziantou.Analyzer 从 2.0.286 更新到 2.0.296
- 将 GFramework.Godot.SourceGenerators.Abstractions 项目中的 Meziantou.Analyzer 从 2.0.286 更新到 2.0.296
- 将 GFramework.SourceGenerators.Abstractions 项目中的 Meziantou.Analyzer 从 2.0.286 更新到 2.0.296
- 将 GFramework.SourceGenerators.Common 项目中的 Meziantou.Analyzer 从 2.0.286 更新到 2.0.296
2026-02-04 20:45:12 +08:00
GeWuYou
1ebbc83807 feat(setting): 添加设置模型初始化状态检查功能
- 新增 IsInitialized 属性用于检查对象初始化状态
- 为 GetData 方法添加泛型类型参数注释说明
- 添加 AllData 方法返回所有设置数据实例集合
- 优化 AllApplicators 方法的文档注释
- 新增 RegisterMigration 方法的详细文档说明
- 在 Initialize 方法末尾设置初始化状态标记
- [release ci]
2026-02-04 20:29:15 +08:00
GeWuYou
ed09ab7009 refactor(property): 优化可绑定属性和事件系统实现
- 为BindableProperty添加属性值变化事件回调委托的XML文档注释
- 为BindableProperty添加存储属性实际值的受保护字段的XML文档注释
- 统一Event类中泛型参数命名规范,将TK改为Tk以保持一致性
- 更新Event类中所有相关方法和字段的泛型参数类型引用
- 修正Event类中Trigger方法的参数类型声明
2026-02-04 09:06:43 +08:00
GeWuYou
222c481ffa chore(workflow): 更新工作流配置
- 修改 auto-tag.yml 中的触发工作流名称从 "License Compliance (Feluda)" 到 "CI - Build & Test"
- 移除 license-compliance.yml 中的上传合规产物步骤
- 在 publish-docs.yml 中启用 workflow_dispatch 触发方式
2026-02-03 21:39:30 +08:00
GeWuYou
28b750b0d0 chore(workflow): 移除许可证扫描配置参数
- 移除 .feluda.yaml 配置文件依赖
- 简化 feluda 扫描命令执行流程
- 更新工作流许可证合规检查逻辑
- [release ci]
2026-02-03 21:00:39 +08:00
GeWuYou
efd7ababd2 feat(ui): 添加基于实例的UI显示方法
- 在UiRouterBase中新增Show方法,支持通过IUiPageBehavior实例显示UI
- 为IUiRouter接口添加对应的Show方法重载签名
- 添加详细的XML文档注释说明参数用途
- 临时禁用publish-docs工作流以解决文档生成问题
- [release ci]
2026-02-03 20:20:41 +08:00
GeWuYou
c27c02a027 build(docfx): 更新文档生成配置
- 修改内容文件匹配规则,将api/index.md从通用匹配中分离
- 添加资源文件配置,支持图片资源(png、jpg、jpeg、gif、svg)的处理
- 集成material模板以增强文档外观
- 调整文件路径匹配模式,使用**/*.md替代**.md以确保正确匹配
2026-02-03 15:26:52 +08:00
GeWuYou
6e4d8d99e1 docs(index): 更新文档站点链接路径
- 调整了首页导航链接的相对路径,将使用指南链接从 docs/index.md
修改为 ../docs/index.md,API文档链接从 api/index.html 修改为
_site/api/index.html,确保文档站点导航功能正常。
- [release doc]
2026-02-03 11:13:24 +08:00
GeWuYou
d359f661f4 build(docfx): 更新文档构建配置
移除了冗余的content配置项,简化了文件路径匹配规则,
统一使用更简洁的glob模式来处理markdown和toc文件
2026-02-03 11:07:50 +08:00
GeWuYou
afa544b79c feat(workflow): 添加手动触发发布文档工作流功能
- 添加 workflow_dispatch 触发器,允许手动触发发布文档工作流,
方便在需要时手动执行文档发布操作。
- [release doc]
2026-02-03 10:58:41 +08:00
GeWuYou
1ea0eac6a2 feat(docs): 配置文档生成系统并添加框架文档
- 配置docfx.json以支持多项目源文件生成API文档
- 添加filterConfig.yml过滤测试和内部实现相关代码
- 创建主页index.md介绍GFramework框架特性
- 配置多层级目录结构toc.yml组织文档导航
- 设置构建输出路径和全局元数据配置
2026-02-03 08:56:24 +08:00
GeWuYou
624f193a2c chore(workflow): 更新许可证合规工作流配置
- 移除 completed 状态检查
- 删除默认值设置
- 调整权限配置结构
- [release doc]
2026-02-03 08:37:39 +08:00
GeWuYou
4d423b3c67 fix(ci): 修复DocFX文档构建流程
- 将docfx命令拆分为metadata和build两个独立步骤
- 添加调试步骤以检查docfx输出目录结构
- 修复工作流中的路径问题确保构建正确执行
2026-02-03 08:31:14 +08:00
GeWuYou
1f1f3dfd8a build(docs): 重命名文档配置文件
- 将根目录下的 docfx.json 配置文件移动到 docfx 子目录中,
以更好地组织项目结构和文档相关配置。
- [release doc]
2026-02-03 08:24:03 +08:00
GeWuYou
f2b5711fc1 fix(workflow): 修复文档发布工作流配置
- 修正了 if 条件的位置以确保正确触发
- 保持了标签发布和提交消息触发的功能
- 优化了工作流语法结构
- [release doc]
2026-02-03 08:18:17 +08:00
GeWuYou
8f388d4a9e docs(ci): 添加文档生成配置和自动化发布流程
- 新增 docfx.json 配置文件用于 API 文档生成
- 在所有项目文件中启用 GenerateDocumentationFile 选项
- 添加 GitHub Actions 工作流 publish-docs.yml 实现文档自动发布
- 配置工作流触发条件支持标签推送和特定提交信息
- 设置文档构建环境使用 .NET 10.0 和 DocFX 工具
- 实现文档站点部署到 GitHub Pages 的完整流程
- [release doc]
2026-02-03 08:15:59 +08:00
GeWuYou
3571ba8ced chore(workflow): 更新工作流配置以优化许可证合规检查
- 修改 auto-tag 工作流触发器从 "CI - Build & Test" 到 "License Compliance (Feluda)"
- 移除 license-compliance 工作流中的依赖和权限设置
- 将 license-compliance 工作流的触发方式改为 workflow_run
- 调整 ci 工作流中的内容权限从 write 改为 read
- 在 license-compliance 工作流中添加分支和提交消息条件检查
2026-02-02 22:35:15 +08:00
GeWuYou
dadda8803f feat(ui): 添加UI层级管理和优化Peek方法
- 修改Peek方法返回类型为可空IUiPageBehavior?以避免空栈异常
- 在IUiRouter接口中添加完整的UI层级管理功能
- 新增Show方法支持在指定层级显示UI(Overlay/Modal/Toast等)
- 新增Hide方法支持隐藏指定层级的UI
- 新增ClearLayer方法支持清空指定层级的所有UI
- 新增GetFromLayer方法支持从指定层级获取UI实例
- 新增HasVisibleInLayer方法支持判断指定层级是否存在可见UI
- 完善UI路由系统的层级控制能力
- [release ci]
2026-02-02 22:19:31 +08:00
GeWuYou
3ad4913f9e refactor(architecture): 优化架构上下文的构造函数和服务获取逻辑
- 使用主构造函数简化 ArchitectureContext 的初始化
- 移除私有字段赋值的冗余代码
- 添加 GetOrCache 方法的详细注释说明
- 为关键业务逻辑添加中文注释
- 保持服务缓存和服务获取的核心功能不变
2026-02-02 21:59:31 +08:00
GeWuYou
75ad00dbcb chore(ci): 更新许可证合规工作流配置
- 在feluda命令中添加配置文件参数
- 修正许可证扫描命令以使用自定义配置
2026-02-02 21:27:03 +08:00
GeWuYou
2f0a619e81 refactor(workflow): 重构许可证合规检查流程
- 将许可证扫描逻辑提取到独立的 license-compliance.yml 工作流文件
- 在 auto-tag 工作流中添加 license-compliance 作业依赖
- 移除 ci.yml 中的 Feluda 许可证扫描相关步骤
- 移除 publish.yml 中的 Feluda 设置和 SBOM 生成步骤
- 更新工件上传配置以包含 SBOM 验证文件
- 添加工作流输出标记用于许可证合规检查触发
2026-02-02 21:25:08 +08:00
GeWuYou
6226ba0ec0 fix(ci): 修复工作流中的许可证扫描配置
- 修正了更新徽章条件中的提交消息检查语法
- 修复了 GitHub Actions 工作流表达式以正确匹配提交信息
2026-02-02 21:03:25 +08:00
GeWuYou
c1f906af61 chore(ci): 更新工作流以支持条件徽章更新
- 修改了许可证扫描器的徽章更新逻辑
- 添加了 [release ci] 提交消息条件检查
- 确保仅在特定提交标记时更新徽章状态
2026-02-02 21:01:22 +08:00
GeWuYou
7d6ec71989 chore(licenses): 添加许可证覆盖配置
- 为 NETStandard.Library 添加 MIT 许可证覆盖
- 为 Microsoft.NETCore.Platforms 添加 MIT 许可证覆盖
- 为 System.Buffers 添加 MIT 许可证覆盖
- 为 System.Memory 添加 MIT 许可证覆盖
- 为 System.Numerics.Vectors 添加 MIT 许可证覆盖
- 为 System.Threading.Tasks.Extensions 添加 MIT 许可证覆盖
- 为 System.ComponentModel.Composition 添加 MIT 许可证覆盖
- 为 System.Security.Cryptography.ProtectedData 添加 MIT 许可证覆盖
- 为 System.Security.Permissions 添加 MIT 许可证覆盖
- 为 Microsoft.VisualStudio.Validation 添加 MIT 许可证覆盖
2026-02-02 20:58:18 +08:00
GeWuYou
43f6280ff8 chore(ci): 添加Feluda许可证扫描器不兼容许可证检查
- 在CI工作流中集成Feluda许可证扫描器
- 配置不兼容许可证检测功能
- 设置许可证扫描仅在推送到main分支时更新徽章
2026-02-02 20:24:59 +08:00
GeWuYou
6bc11de132 chore(ci): 在feluda命令中添加--incompatible参数
- 为feluda工具添加--incompatible参数以检查兼容性问题
2026-02-02 20:13:18 +08:00
GeWuYou
b8b92faf3f docs(readme): 更新 Feluda 扫描链接指向正确的仓库
- 将 Feluda 扫描徽章的链接从 anistark/feluda 更新为 GeWuYou/GFramework
- 保持了原有的扫描状态显示功能
2026-02-02 20:11:11 +08:00
GeWuYou
40d83e69af chore(workflow): 更新 .NET 版本并简化 NUGET 用户配置
- 将 .NET 版本从 9.0.x 更新到 10.x
- 移除 NUGET_USER 配置中的注释,保持配置简洁
- [skip ci]
2026-02-02 20:06:35 +08:00
GeWuYou
8ab079f2c0 docs: update Feluda scan badge 2026-02-02 11:59:55 +00:00
GeWuYou
ffc75099c8 chore(ci): 更新许可证检查配置以禁用严格模式
- 将 fail-on-restrictive 设置为 false
- 将 fail-on-incompatible 设置为 false
- 添加注释说明配置变更原因
2026-02-02 19:51:03 +08:00
GeWuYou
22eebb6e2d chore(ci): 更新许可证检查工作流配置
- 在许可证检查步骤中启用详细输出模式
- 保持现有的许可证类型和失败策略设置不变
- 维持主分支推送时的徽章更新功能
2026-02-02 19:25:09 +08:00
GeWuYou
58de08d260 docs: update Feluda scan badge 2026-02-02 09:16:07 +00:00
GeWuYou
01a88cc223 chore(workflow): 调整许可证检查工作流配置
移除硬编码的update-badge选项,改用条件表达式控制仅在main分支push时更新徽章,
确保许可证检查徽章只在主分支推送时自动更新
2026-02-02 17:08:13 +08:00
GeWuYou
09e194a2bf feat(ci): 集成Feluda工具实现合规性检查和SBOM生成
- 在CI工作流中添加Feluda工具设置和合规性文件生成
- 集成SBOM生成功能,支持SPDX和CycloneDX格式
- 添加SBOM文件验证步骤并生成验证报告
- 实现许可证合规工件上传,包含通知文件和第三方许可证
- 更新发布工作流以包含合规性信息和SBOM文件到发布内容
- 修改权限设置以支持内容写入操作
2026-02-02 15:03:02 +08:00
GeWuYou
ed51722746 feat(ci): 集成Feluda许可证扫描器实现合规性检查
- 添加Feluda许可证扫描工作流步骤,设置Apache-2.0项目许可证
- 配置许可证合规性检查参数,启用限制性和不兼容许可证失败机制
- 实现SBOM文件自动生成,支持SPDX和CycloneDX两种格式
- 集成SBOM文件验证步骤并生成验证结果报告
- 添加许可证合规相关工件文件上传功能
- 在README中添加Feluda扫描徽章标识
2026-02-02 14:13:46 +08:00
GeWuYou
adc28efa26 chore(ci): 添加安全事件写入权限
- 在 GitHub Actions 工作流中添加 security-events 写入权限
- 允许工作流将安全相关事件写入存储库的安全功能
- 提升代码扫描和安全分析的集成能力
2026-02-02 12:29:27 +08:00
GeWuYou
5c8de84256 chore(ci): 更新CI工作流配置以集成MegaLinter和SARIF报告
- 在.gitleaks.toml中添加测试凭证白名单注释说明
- 为MegaLinter步骤添加代码质量检查和安全扫描功能
- 配置FAIL_ON_ERROR环境变量在main分支上失败时停止
- 添加SARIF报告上传步骤到GitHub安全中心
- 更新TruffleHog扫描步骤的中文注释说明
2026-02-02 12:20:56 +08:00
GeWuYou
b4b26517ad chore(config): 更新 gitleaks 配置文件
- 修改 .gitleaks.toml 配置规则
- 调整敏感信息检测策略
- 优化配置文件结构以提高扫描效率
- 添加新的排除模式和白名单规则
2026-02-02 12:11:29 +08:00
GeWuYou
f2f2083dd1 chore(config): 更新 gitleaks 配置文件格式
- 将路径匹配从单引号格式改为双引号格式
- 将正则表达式从单引号格式改为双引号格式
- 在 allowlist 部分添加描述性空行以提高可读性
- 统一配置文件的字符串引用格式为双引号
2026-02-02 11:45:53 +08:00
GeWuYou
defcca85f3 chore(security): 添加 gitleaks 配置文件以忽略测试密钥
- 配置 allowlist 忽略 docs 目录下的文件
- 添加对 .*Test.*\.json 文件的忽略规则
- 配置 Development 相关文件的忽略路径
- 添加 FAKE_.*_KEY 正则表达式到忽略列表
- 添加 TEST_.*_TOKEN 正则表达式到忽略列表
- 设置描述信息为 "Ignore test/demo secrets"
2026-02-02 11:19:46 +08:00
GeWuYou
24a129b8f5 chore(ci): 添加 MegaLinter 配置并更新 CI 工作流
- 添加 .mega-linter.yml 配置文件,设置代码质量检查工具参数
- 配置全局排除目录包括 bin、obj、node_modules 等
- 禁用 COPYPASTE、SPELL、MARKDOWN 等噪音检查器
- 启用 CSHARP_DOTNET_FORMAT、YAML、JSON 等核心检查器
- 设置 C# 代码格式化检查参数和 YAML/JSON 过滤规则
- 在 CI 工作流中为 MegaLinter 步骤添加 continue-on-error 选项
2026-02-02 09:36:37 +08:00
GeWuYou
7cba4d0756 feat(ci): 集成 MegaLinter 代码质量扫描工具
- 添加 MegaLinter 扫描步骤到 CI 流程
- 配置 GITHUB_TOKEN 环境变量用于访问权限
- 保持 TruffleHog 敏感信息扫描功能
2026-02-02 08:39:47 +08:00
GeWuYou
14e1d984e6 chore(workflow): 移除跳过标记检查并调整代码扫描定时任务
- 移除了 GitHub 工作流中的跳过关键字检查步骤
- 将代码扫描定时任务从每周二凌晨4点41分改为每天凌晨2点执行
- 简化了工作流配置逻辑,移除了条件判断相关的代码块
2026-02-01 22:11:32 +08:00
GeWuYou
7242f58029 refactor(coroutine): 重构 WaitForAllCoroutines 实现
- 修改 WaitForAllCoroutines 构造函数,添加 CoroutineScheduler 参数
- 移除 WaitForAllCoroutines 内部的待处理句柄集合和完成状态管理
- 修改 WaitForAllCoroutines 的 IsDone 属性实现,改为通过调度器检查协程状态
- 移除 WaitForAllCoroutines 的 NotifyCoroutineComplete 方法
- 更新 CoroutineScheduler 中对 WaitForAllCoroutines 的处理逻辑
- 移除调度器中的协程完成通知相关代码
- 更新所有相关测试用例以适应新的构造函数参数
- 添加对 scheduler 参数的空值验证测试
- [release ci]
2026-02-01 16:53:26 +08:00
GeWuYou
65fdea6c12 refactor(tests): 重构协程测试代码以改进类型安全性和构造函数参数
- 在CommandCoroutineExtensionsTests中使用模式匹配变量替换类型检查
- 为CoroutineSchedulerTests添加必要的依赖注入和模拟对象支持
- 移除CoroutineState枚举中的Held状态并调整相关测试断言
- 更新WaitForAllCoroutines构造函数调用以移除scheduler参数
- 修改WaitForCoroutine测试以提供必需的协程参数
- 添加WaitForEvent协程功能的完整测试实现
- 移除重复的构造函数重载测试用例
- [release ci]
2026-02-01 16:08:07 +08:00
GeWuYou
ae37b8c5f1 refactor(coroutine): 重构协程等待机制并移除Held状态
- 移除了CoroutineState中的Held状态
- WaitForAllCoroutines不再依赖CoroutineScheduler参数
- 使用HashSet替代IReadOnlyList存储待处理协程句柄
- 添加NotifyCoroutineComplete方法通知协程完成
- 修改HandleYieldInstruction方法使用switch表达式处理不同等待指令
- 移除WaitForCoroutine逻辑中对Held状态的设置
- 添加对WaitForAllCoroutines的完成通知支持
2026-02-01 15:27:49 +08:00
GeWuYou
b4360b01ca refactor(coroutine): 优化 WaitForAllCoroutines 实现逻辑
- 将字段初始化改为构造函数中赋值
- 添加 _isDone 字段缓存完成状态
- 在构造函数中预处理空列表情况
- 优化 Update 方法减少重复计算
- 简化 IsDone 属性实现
- 提升协程等待性能
2026-02-01 15:16:15 +08:00
GeWuYou
120fd14cd8 refactor(coroutine): 重构协程调度器以支持WaitForCoroutine指令
- 将WaitForCoroutine改为构造函数注入协程枚举器的方式
- 添加ProcessWaitingInstruction方法专门处理等待指令
- 添加IsWaiting方法判断协程等待状态
- 添加ProcessCoroutineStep方法处理协程步骤推进
- 添加HandleYieldInstruction方法处理yield指令逻辑
- 实现WaitForCoroutine指令的完整协程等待功能
- 在协程完成时通知WaitForCoroutine指令标记完成状态
- 优化协程调度器的执行流程和异常处理机制
2026-02-01 15:11:51 +08:00
GeWuYou
4943fc5c70 fix(coroutine): 修复Timing单例初始化逻辑
- 添加了GFramework.Godot.extensions命名空间引用
- 修正了Timing实例获取逻辑,避免重复创建已存在的实例
- 将AddChild操作包装在WaitUntilReady回调中确保正确添加到场景树
- 添加了WaitUntilReady的Action回调重载方法
- 实现了节点准备就绪后执行回调的功能
- 保持了原有异步等待ready信号的核心功能
- [release ci]
2026-02-01 14:34:56 +08:00
GeWuYou
af583c101c refactor(core): 重构协程扩展和函数式编程相关代码
- 优化 CommandCoroutineExtensions 中的代码格式和异常处理逻辑
- 简化 WaitForEvent 和 WaitForEventWithTimeout 中的EventData属性实现
- 调整 EventListenerScope 中的EventData属性访问器
- 重构 ControlExtensions 中 TakeIf 和 TakeUnless 方法的实现
- 优化 FunctionExtensions 中 Repeat 和 Partial 方法的代码结构
- 调整 PipeExtensions 和其他扩展类的文档注释格式
- 修改测试代码中的协程迭代和事件注册相关实现
- 优化 DataRepository 中的异步操作实现方式
= [release ci]
2026-02-01 14:07:59 +08:00
GeWuYou
1d7fe998b9 feat(context): 添加服务获取扩展方法
- 实现了从上下文感知对象获取指定类型服务的功能
- 添加了泛型约束确保服务类型为引用类型
- 集成了空值检查以提高代码健壮性
- 提供了详细的XML文档注释说明
- 扩展了IContextAware接口的功能范围
2026-02-01 13:33:54 +08:00
GeWuYou
085370aa27 test(coroutine): 添加协程扩展和助手类的单元测试
- 为 WaitForSecondsWithProgress 方法添加 null 回调参数的安全性测试
- 为 WaitForProgress 方法添加完整的功能和边界条件测试
- 为 RepeatCallForever 方法添加 shouldContinue 参数相关测试
- 为 RepeatCallForever 方法添加 CancellationToken 相关测试
- 移除未使用的 CreateCountingCoroutine 私有方法
- 使用 Assert.DoesNotThrow 确保 null 回调不会引发异常
2026-02-01 12:48:02 +08:00
GeWuYou
c50797dbe2 fix(coroutine): 修复协程扩展方法中的空引用和测试代码
- 为 RepeatEvery 方法的 action 参数添加可空引用支持
- 更新测试代码中集合断言的语法格式
- 移除测试方法中未使用的变量声明以简化代码
- 修复测试代码中 lambda 表达式的写法以避免不必要的变量赋值
2026-02-01 12:32:26 +08:00
GeWuYou
c7f6b3a9b2 test(coroutine): 添加协程组合扩展方法的单元测试
- 创建了 CoroutineComposeExtensionsTests 测试类
- 实现了 Then(Action) 方法的完整测试覆盖
- 实现了 Then(IEnumerator) 方法的完整测试覆盖
- 添加了链式调用功能的测试验证
- 包含边界条件和异常处理的测试用例
- 覆盖了空协程、延迟指令等特殊情况
- 验证了多层嵌套协程的正确执行顺序
- [release ci]
2026-02-01 12:28:20 +08:00
GeWuYou
5a056fca84 feat(coroutine): 添加协程组合扩展功能并优化节点存活检查
- 为SendCommandCoroutineWithErrorHandler方法的onError参数添加默认值null
- 新增CoroutineComposeExtensions扩展类,提供Then方法实现协程顺序组合
- 优化CancelWith扩展方法,改进节点存活检查逻辑
- 使用LINQ All方法简化节点存活状态检查代码
- 添加完整的XML文档注释支持
2026-02-01 12:25:11 +08:00
GeWuYou
ec8f72932b test(coroutine): 添加协程相关功能的单元测试
- 添加 CommandCoroutineExtensions 的完整测试用例
- 添加 QueryCoroutineExtensions 的完整测试用例
- 添加 WaitForEvent 的完整测试用例
- 添加 WaitForEventWithTimeout 的完整测试用例
- 添加 Moq 依赖包用于模拟测试
- 实现多种协程指令和扩展方法的功能验证
- 包含超时处理、异常处理和事件触发等场景测试
- [release ci]
2026-02-01 11:04:50 +08:00
GeWuYou
9ac4ac0534 feat(coroutine): 扩展命令协程支持超时等待事件
- 为SendCommandAndWaitEventCoroutine方法添加timeout参数支持
- 实现WaitForEventWithTimeout类用于带超时的事件等待
- 添加泛型约束确保命令类型实现IAsyncCommand接口
- 新增EventListenerScope类提供事件监听器作用域管理
- 支持超时异常处理并抛出相应的TimeoutException
- 优化事件回调处理逻辑,确保事件数据正确传递
2026-02-01 10:42:34 +08:00
GeWuYou
a47439f027 feat(coroutine): 添加带超时的事件等待协程指令
- 实现 WaitForEventWithTimeout 类用于带超时的事件等待
- 支持泛型事件类型参数化
- 提供超时检测和事件数据访问功能
- 实现 IYieldInstruction 接口支持协程执行
- 包含时间累加和状态更新逻辑
2026-02-01 10:37:29 +08:00
GeWuYou
32be23b01d feat(coroutine): 添加命令和查询的协程扩展功能
- 实现了 CommandCoroutineExtensions 类,提供命令异步执行的协程包装
- 添加了 SendCommandCoroutineWithErrorHandler 方法处理命令执行异常
- 实现了 SendCommandAndWaitEventCoroutine 方法支持发送命令并等待事件
- 创建了 QueryCoroutineExtensions 类,提供查询操作的协程扩展
- 添加了 WaitForEvent 协程指令用于等待特定事件触发
- 实现了完整的事件监听和资源清理机制
2026-02-01 10:35:11 +08:00
GeWuYou
af64c4ab3e refactor(setting): 重构设置事件系统
- 移除旧的设置相关事件类包括 SettingsAllLoadedEvent、SettingsBatchChangedEvent、
  SettingsBatchSavedEvent、SettingsChangedEvent、SettingsDeletedEvent 和 SettingsLoadedEvent
- 添加新的设置事件类包括 SettingsAppliedAllEvent、SettingsInitializedEvent、
  SettingsSavedAllEvent 和 SettingsResetEvent
- 在 SettingsModel 中集成新的事件发送机制
- 修改 Initialize 方法以发送 SettingsInitializedEvent 事件
- 更新 Save 方法以发送 SettingsSavedAllEvent 事件
- 修改 Apply 方法以发送 SettingsAppliedAllEvent 事件
- 添加 Reset 功能以发送 SettingsResetEvent 事件
- 添加 ResetAll 功能以发送 SettingsResetAllEvent 事件
- [release ci]
2026-01-31 23:47:24 +08:00
GeWuYou
829c7a3b06 refactor(setting): 优化设置模型中的数据类型获取方式
- 在IResetApplyAbleSettings接口中添加DataType属性定义
- 修改SettingsModel中数据存储逻辑,使用applicator.DataType替代typeof(T)
- 为GodotAudioSettings、GodotGraphicsSettings和GodotLocalizationSettings实现DataType属性
- 统一通过DataType属性获取设置数据的类型信息
- [release ci]
2026-01-31 23:11:55 +08:00
GeWuYou
f226a355b2 feat(setting): 添加设置数据存储功能
- 在 SettingsModel 中添加了数据存储逻辑
- 实现了应用器数据的自动注册机制
- 确保设置数据与应用器类型的正确关联
- 优化了设置模型的数据管理流程
- [release ci]
2026-01-31 22:43:55 +08:00
GeWuYou
b2e8ed9787 refactor(functional): 重构函数式编程扩展模块
- 移除 EnumerableExtensions 扩展类及其 Map、Filter、Reduce 方法
- 从 ControlExtensions 中删除 Match、MatchOrDefault、If、IfElse 等控制流方法
- 重命名 FunctionExtensions 中的 Memoize 为 MemoizeUnbounded 并更新文档注释
- 重命名 FunctionExtensions 中的 Partial 相关方法并调整参数命名
- 在 PipeExtensions 中移除 Pipe、Then、After、Let 等方法,保留 Also 方法
- 删除多个功能性类型扩展文件,包括 Option、Result、NullableExtensions 等
- 移除功能扩展的 README.md 文档文件
- 更新相关命名空间引用和依赖关系
- [release ci]
2026-01-31 22:31:50 +08:00
GeWuYou
3493d6a481 docs(functional): 添加函数式编程类型文档和单元测试
- 新增 Option 类型文档,包含核心类型及扩展方法说明
- 新增 Result 类型文档,包含核心类型及扩展方法说明
- 新增 Nullable Extensions 文档,提供可空类型转换功能说明
- 添加 Option 类型单元测试,覆盖基本功能和扩展方法
- 添加 Result 类型单元测试,验证成功失败结果处理
- 添加 Nullable Extensions 单元测试,确保类型转换正确性
- 添加 Option 和 Result 扩展方法的完整测试用例
- [release ci]
2026-01-31 21:52:04 +08:00
GeWuYou
1b442edadd refactor(functions): 重构函数式编程扩展方法
- 使用ConcurrentDictionary替换Dictionary实现线程安全的Memoize功能
- 将TryResult方法重命名为Try并简化返回类型为元组结构
- 为所有功能区域添加代码区域标记(柯里化、部分应用、重复执行、安全执行、缓存、映射)
- 更新Try方法的XML文档注释以匹配新的返回类型
- 移除GFramework.Core.functional.types命名空间引用并添加System.Collections.Concurrent引用
2026-01-31 21:44:45 +08:00
GeWuYou
20dcb87def refactor(control): 修改Match方法返回Option类型
- 将Match方法的返回类型从TResult改为Option<TResult>
- 匹配成功时返回Option<TResult>.Some(handler(value))
- 匹配失败时返回Option<TResult>.None()而不是抛出异常
- 移除InvalidOperationException异常抛出逻辑
2026-01-31 21:40:27 +08:00
GeWuYou
20bbf2297e refactor(pipe): 移除Apply和On扩展方法
- 删除了Apply扩展方法及其相关文档注释
- 删除了On扩展方法及其相关文档注释
- 移除了对应的单元测试方法
- 保留了Also、Pipe等其他管道操作方法
2026-01-31 21:34:02 +08:00
GeWuYou
c9dd969b05 feat(functional): 添加Result类型及其扩展方法支持
- 引入Result<TSuccess, TError>结构体用于表示可能成功或失败的计算结果
- 实现Result类型的Success和Failure静态工厂方法
- 添加SuccessValue和ErrorValue属性用于获取对应值
- 创建ResultExtensions扩展类提供Map、Bind、MapError和Match方法
- 在FunctionExtensions中添加TryResult方法将异常安全执行封装为Result类型
- 更新Try方法的文档注释以反映新的功能和返回类型
2026-01-31 21:31:33 +08:00
GeWuYou
fd3a9ae9e0 feat(functional): 添加函数式编程扩展和Option类型支持
- 在FunctionExtensions中新增Map扩展方法用于对象映射
- 在PipeExtensions中新增On扩展方法用于值到函数的应用
- 移除Tap方法及相关测试以优化管道操作
- 新增NullableExtensions实现可空类型到Option的转换
- 新增Option结构体提供安全的可选值处理
- 新增OptionExtensions提供Map、Bind、Filter、Match等函数式操作
- 新增OptionValueExtensions提供GetOrElse和OrElse值提取方法
- 调整全局引用添加Concurrent集合支持
- 扩展IResetApplyAbleSettings接口添加Data属性
- 更新Godot设置类实现Data属性返回设置数据模型
2026-01-31 21:25:27 +08:00
GeWuYou
c93d32c495 feat(data): 实现设置数据类型的动态注册和反序列化
- 添加类型注册表支持动态类型映射
- 修改LoadAllAsync方法使用注册类型进行反序列化
- 在SettingsModel初始化时自动注册数据类型到仓库
- 添加RegisterDataType接口方法支持类型注册功能
- 移除原有的无类型约束反序列化逻辑
- 增强数据加载的安全性和准确性
- [release ci]
2026-01-31 19:44:59 +08:00
GeWuYou
43dcae0cf5 refactor(pipe): 重构函数式编程扩展方法为模块化结构
- 将原有的PipeExtensionsTests拆分为多个专门的测试类
- 创建ControlExtensionsTests用于控制流函数测试
- 创建EnumerableExtensionsTests用于集合操作函数测试
- 创建FunctionExtensionsTests用于高级函数操作测试
- 移除旧的综合测试文件中的多余测试方法
- 更新文档结构以反映新的模块化组织方式
- 重新整理README.md文档为模块化分类说明
2026-01-31 15:11:33 +08:00
GeWuYou
5318f5a38f refactor(functional): 重构函数式编程扩展方法组织结构
- 将原有的 PipeExtensions.cs 文件拆分为多个专门的功能模块
- 新增 ControlExtensions.cs 专门处理控制流扩展方法
- 新增 EnumerableExtensions.cs 专门处理集合相关扩展方法
- 新增 FunctionExtensions.cs 专门处理函数式编程核心功能
- 新增 TypeExtensions.cs 专门处理类型转换相关扩展方法
- 移除 PipeExtensions.cs 中的集合操作、函数式核心功能和控制流方法
- 保留 PipeExtensions.cs 中的管道操作相关核心方法
- 优化代码组织结构提升可维护性和可读性
2026-01-31 14:45:16 +08:00
GeWuYou
f5e460ff88 test(pipe): 添加函数式编程扩展方法的全面测试覆盖
- 实现 Pipe 方法测试,验证值能正确传递给函数并返回结果
- 添加 Then 方法测试,验证两个函数能够正确组合执行
- 添加 After 方法测试,验证反向函数组合的正确性
- 添加 Tap 方法测试,验证副作用操作执行后返回原值
- 添加 Map 方法测试,验证集合中每个元素都能被正确转换
- 添加 Filter 方法测试,验证集合能够根据条件正确过滤
- 添加 Reduce 方法测试,验证集合能够正确归约为单个值
- 添加 Apply 方法测试,验证函数能够正确应用到参数上
- 添加 Curry 方法测试,验证二参数函数能够正确柯里化
- 添加 Uncurry 方法测试,验证柯里化函数能够正确还原为二参数函数
- 添加 Partial 方法测试,验证部分应用函数功能
- 添加 Match 方法测试,验证模式匹配功能及无匹配时异常处理
- 添加 MatchOrDefault 方法测试,验证模式匹配带默认值功能
- 添加 If 和 IfElse 方法测试,验证条件执行和分支功能
- 添加 As 和 Cast 方法测试,验证安全类型转换和强制类型转换
- 添加 Also 和 Let 方法测试,验证执行操作后返回原值和值转换功能
- 添加 TakeIf 和 TakeUnless 方法测试,验证条件判断返回功能
- 添加 Repeat 方法测试,验证重复执行函数功能
- 添加 Try 方法测试,验证安全执行成功和异常情况处理
- 添加 Memoize 方法测试,验证函数结果缓存功能
2026-01-31 09:22:51 +08:00
GeWuYou
317bded2e1 docs(GFramework.Core): 添加Pipe扩展方法文档
- 新增函数式编程扩展方法的详细说明文档
- 包含管道操作、函数组合、柯里化等20种核心功能介绍
- 提供每种方法的具体用法示例和代码片段
- 添加链式操作和函数组合的实际应用场景
- 补充注意事项和适用场景说明
2026-01-31 09:11:55 +08:00
GeWuYou
b4c1096b10 feat(core): 添加函数式编程管道扩展方法
- 实现 Pipe 方法用于将值传递给函数
- 添加 Then 和 After 方法用于函数组合操作
- 提供 Tap 和 Also 方法用于执行副作用操作
- 添加 Map、Filter、Reduce 方法用于集合操作
- 实现 Curry、Uncurry、Partial 方法支持柯里化
- 添加 Match 和 MatchOrDefault 方法用于模式匹配
- 提供 If、IfElse 条件执行功能
- 添加类型转换相关方法 As、Cast
- 实现 Let、TakeIf、TakeUnless 等 方法
- 添加 Repeat 方法用于重复执行函数
- 提供 Try 方法用于安全执行函数
- 实现 Memoize 方法用于函数结果缓存
2026-01-31 09:06:10 +08:00
GeWuYou
eb60b05144 refactor(data): 统一设置数据仓库实现线程安全和键管理
- 添加 UnifiedKey 属性用于获取统一键值
- 在 SaveAsync 方法中添加异步锁确保线程安全
- 使用 UnifiedKey 替换 fileName 进行文件读写操作
- 在 EnsureLoadedAsync 中使用统一键进行存在性检查
- 优化 SaveAllToUnifiedFile 方法使用新的键属性
- 移除多余的空行以改善代码格式
- [release ci]
2026-01-30 22:53:27 +08:00
GeWuYou
e5d6f72bac fix(setting): 修复 SettingsModel 构造函数参数可空性问题
- 将 IDataLocationProvider 参数标记为可空类型
- 将 TRepository 参数标记为可空类型
- 保持泛型约束不变以确保类型安全
2026-01-30 22:40:36 +08:00
GeWuYou
e2fef7110d refactor(setting): 更新 SettingsModel 构造函数注入依赖项
- 将 IDataLocationProvider 和 TRepository 从属性注入改为构造函数参数注入
- 移除字段初始化器中的空值赋值操作
- 简化依赖项的初始化流程,提高代码可读性
- 保持原有的数据仓库访问逻辑不变
- [release ci]
2026-01-30 22:23:39 +08:00
GeWuYou
70421159e4 refactor(setting): 优化设置应用器注册方法的泛型参数约束
- 修改 RegisterApplicator 方法的参数类型从 IResetApplyAbleSettings 为具体泛型类型 T
- 移除抽象层中的方法约束,统一实现层和抽象层的方法签名
- 保持泛型约束 T : class, IResetApplyAbleSettings 不变
- 确保接口和实现类的方法定义一致性
- [release ci]
2026-01-30 22:05:04 +08:00
GeWuYou
209c331d1f refactor(setting): 移除设置应用器注册方法中的new()约束
- 从RegisterApplicator方法的泛型约束中移除new()要求
- 修改实现类SettingsModel中的方法签名以匹配接口变更
- 更新抽象层ISettingsModel中的方法约束定义
- 保持原有功能完整性的同时提高代码灵活性
- [release ci]
2026-01-30 21:48:57 +08:00
GeWuYou
6172ce96f1 fix(setting): 修复设置应用器注册方法的泛型约束
- 将RegisterApplicator方法的泛型约束从ISettingsData改为IResetApplyAbleSettings
- 更新接口定义中的泛型参数约束
- 修正相关XML文档注释中的接口名称描述
- [release ci]
2026-01-30 21:34:04 +08:00
GeWuYou
7d581f07ca feat(settings): 重构设置系统架构以支持数据仓库模式
- 为 ILoadableFrom 接口添加 XML 文档注释
- 重命名 UnifiedSettingsRepository 为 UnifiedSettingsDataRepository
- 将仓库基类从 IDataRepository 替换为更具体的 ISettingsDataRepository
- 为 UnifiedSettingsDataRepository 添加完整的 XML 文档注释
- 在 SettingsModel 中使用 ISettingsDataRepository 替代 IDataRepository
- 修改 SettingsModel 中的应用器存储结构从 ConcurrentBag 到 ConcurrentDictionary
- 添加 LoadAllAsync 方法以支持批量加载所有设置数据
- 优化 SettingsModel 初始化逻辑以使用批量加载提高性能
- 为 AudioSettings、GraphicsSettings 和 LocalizationSettings 添加 LoadFrom 实现
- 将设置数据版本属性改为私有只读以防止外部修改
- 更新 SettingsSystem 接口约束以匹配新的抽象层设计
- 添加 GetApplicator 泛型方法以支持获取特定类型的应用器
- 实现 Reset 泛型方法以支持重置指定类型的设置数据
- [release ci]
2026-01-30 21:16:31 +08:00
GeWuYou
970b8d3b96 refactor(settings): 重构设置系统和数据仓库实现
- 将音频和图形设置从 IResettable, IVersioned 迁移到 ISettingsData 接口
- 添加数据位置接口 IDataLocation 和数据位置提供者接口 IDataLocationProvider
- 修改数据仓库实现,使用数据位置替代类型进行数据操作
- 更新数据仓库的加载、保存、删除和存在检查方法以使用数据位置参数
- 重命名 IPersistentApplyAbleSettings 为 IResetApplyAbleSettings 并更新其实现
- 创建 ISettingsData 接口整合设置数据的基础功能
- 更新设置模型实现,统一管理设置数据的生命周期和应用器
- 添加版本化数据接口 IVersionedData 和可从源加载接口 ILoadableFrom
- 实现数据位置到存储键的扩展方法
- 更新数据事件类型以使用数据位置信息
- 重构设置模型的数据加载、保存和应用逻辑
- [skip ci]
2026-01-30 16:48:09 +08:00
GeWuYou
49d210b9ad refactor(data): 重构数据存储库的键生成逻辑
- 将 DataRepository 中的 GetKey 方法从私有改为受保护的虚拟方法
- 简化了基于类型的键生成逻辑,使用 FullName 替代 Name 和前缀组合
- 移除了 DataRepositoryOptions 中的 KeyPrefix 属性
- 将 UnifiedSettingsRepository 中的相关方法改为受保护的虚拟方法
- 简化了统一键生成的路径处理逻辑,移除多余的 TrimEnd 操作
- [release ci]
2026-01-29 23:15:30 +08:00
GeWuYou
cc8f40ee44 style(formatter): 统一代码格式化和文档缩进
- 调整文档文件中的缩进格式一致性
- 修正所有C#接口和类定义中的注释缩进
- 移除测试代码中不必要的构造函数参数
- 重构条件语句减少嵌套层级
- 规范方法体的大括号使用风格
- 整理全局命名空间声明格式
- 优化方法实现的代码结构和可读性
- [release ci]
2026-01-29 22:35:45 +08:00
GeWuYou
ad6c621c59 refactor(SettingsSystem): 简化保存所有设置数据的逻辑
- 移除手动遍历设置数据的循环代码
- 使用 Repository.SaveAllAsync 方法批量保存所有数据
- 提高代码简洁性和执行效率
2026-01-29 22:31:19 +08:00
GeWuYou
0c0ddaab7f feat(setting): 添加设置重置功能并重构Godot设置类
- 在SettingsModel中添加Reset<T>()和ResetAll()方法
- 在SettingsSystem中添加异步Reset<T>()和ResetAll()方法
- 扩展ISettingsModel和ISettingsSystem接口以支持重置操作
- 重构GodotAudioSettings、GodotGraphicsSettings和GodotLocalizationSettings类
- 将直接依赖设置对象改为依赖ISettingsModel接口
- 实现IResettable接口以支持设置重置功能
- [release ci]
2026-01-29 21:51:41 +08:00
GeWuYou
7e4d93aa2b refactor(settings): 修改UnifiedSettingsRepository类访问修饰符
- 将UnifiedSettingsRepository类从sealed改为普通class
- 移除密封限制以支持继承扩展需求
- [release ci]
2026-01-29 21:12:19 +08:00
GeWuYou
6c2e89bc4f feat(data): 添加统一设置仓库和运行时类型序列化支持
- 新增 UnifiedSettingsRepository 类实现单一文件存储所有设置数据
- 扩展 JsonSerializer 实现 IRuntimeTypeSerializer 接口支持运行时类型序列化
- 修改 DataRepositoryOptions 默认键名前缀为空字符串
- 实现异步加载、保存、删除和检查数据功能
- 添加数据事件通知机制支持
- 实现线程安全的数据缓存和文件操作
- [release ci]
2026-01-29 20:57:05 +08:00
GeWuYou
86cd947006 chore(ci): 更新工作流配置以启用工件上传和历史结果获取
- 添加 upload-artifact 选项以启用测试工件上传
- 添加 fetch-previous-results 选项以获取历史测试结果
- 这些变更将改进测试报告和结果对比功能
2026-01-29 20:07:42 +08:00
GeWuYou
8ea9752fc8 chore(ci): 更新 .NET 工具命令参数
- 将 DotnetCtrfJsonReporter 的输出参数从 -o 替换为 -d 和 -f
- 为 ctrf 输出目录添加显式指定参数
- 为输出文件名添加格式化参数
- 保持测试报告生成功能在测试后执行的逻辑不变
2026-01-29 20:02:24 +08:00
GeWuYou
fe9f610c93 fix(ci): 修复CTRF报告生成脚本中的输出路径配置
- 为每个TRX文件指定正确的JSON输出路径
- 使用basename提取文件名并构建输出路径
- 添加目录创建确保输出目录存在
- 改进处理消息显示源和目标文件名
- 确保所有TRX文件都能正确转换为JSON格式
2026-01-29 19:59:33 +08:00
GeWuYou
c01ab04292 refactor(ci): 分离核心和源生成器测试流程
- 将单一测试步骤拆分为核心测试和源生成器测试两个独立步骤
- 为核心测试指定特定的程序集GFramework.Core.Tests
- 为源生成器测试指定特定的程序集GFramework.SourceGenerators.Tests
- 更新测试报告文件命名规则以区分不同测试类型
- 移除合并后的CTRF报告生成步骤
2026-01-29 19:54:47 +08:00
GeWuYou
b9e7caeada fix(ci): 修复测试报告生成逻辑
- 修改TRX文件名生成方式,避免并发测试时文件冲突
- 更新CTRF报告生成逻辑,支持处理多个测试结果文件
- 添加目录创建确保CTRF输出路径存在
- 改进循环处理所有TRX文件而不是仅处理最新一个
2026-01-29 19:50:19 +08:00
GeWuYou
0bc4e0d8ff fix(ci): 简化测试报告生成逻辑
- 修改TRX文件名生成方式,使用变量存储报告文件名
- 移除循环处理多个TRX文件的逻辑,改为只处理最新文件
- 删除调试步骤以简化工作流配置
- 保持测试报告功能正常运行
2026-01-29 19:45:51 +08:00
GeWuYou
ed72103c59 fix(ci): 修复测试报告生成逻辑
- 更新 TRX 日志文件名格式以包含程序集和框架信息
- 修改 CTRF 报告生成脚本以处理多个测试结果文件
- 添加循环遍历所有 TRX 文件并生成对应 CTRF 报告
- 移除只处理最新单个文件的限制
2026-01-29 19:34:28 +08:00
GeWuYou
dee89e1134 feat(ci): 更新CI工作流以支持多版本.NET SDK
- 添加.NET 9和.NET 10版本的支持
- 将原有的.NET SDK设置步骤重命名为.NET 8
- 配置多个.NET版本以进行兼容性测试
- 更新actions/setup-dotnet到v5版本
- 优化SDK安装流程以提高构建效率
2026-01-29 19:27:46 +08:00
GeWuYou
c46cfa265e fix(ci): 修复CI工作流中的.NET SDK版本配置和测试报告生成
- 修正了.NET SDK版本配置,支持多个版本并移除重复配置
- 更新了测试结果文件命名格式以避免冲突
- 修复了CTRF报告生成的路径和参数配置
- 移除了调试步骤中的条件检查逻辑
2026-01-29 19:23:34 +08:00
GeWuYou
524ceff770 chore(ci): 简化CTRF报告生成配置
移除手动创建目录和多参数调用方式,改用简化的命令行参数
直接指定TRX文件路径,提高构建脚本的可读性和维护性
2026-01-29 17:32:24 +08:00
GeWuYou
9a158d6c7e feat(ci): 添加CTRF报告生成和调试步骤
- 创建ctrf输出目录
- 使用DotnetCtrfJsonReporter工具生成CTRF格式测试报告
- 添加调试步骤验证CTRF文件生成
- 配置工具参数以正确处理TRX文件并输出JSON报告
2026-01-29 17:24:48 +08:00
GeWuYou
c61f19126a feat(ci): 添加.NET工具恢复步骤
在CI工作流中添加了.NET本地工具恢复步骤,确保构建过程中使用的本地工具能够正确安装和配置。
2026-01-29 17:15:29 +08:00
GeWuYou
cfef1e1d03 feat(ci): 集成测试报告生成和发布功能
新增DotnetCtrfJsonReporter工具来生成JSON格式的测试报告,
并添加GitHub测试报告发布步骤,支持PR报告、摘要对比、
洞察分析、易失率、失败率和最慢测试等多维度报告展示。
2026-01-29 17:10:59 +08:00
GeWuYou
f2b3c8663e feat: 添加 dotnet 工具配置文件
新增 .config/dotnet-tools.json 配置文件,集成 DotnetCtrfJsonReporter 工具。
[skip ci]
2026-01-29 17:05:18 +08:00
GeWuYou
7a1b43dff1 feat(ci): 集成TruffleHog敏感信息扫描工具
在CI工作流中添加TruffleHog OSS扫描步骤,用于检测代码库中的敏感信息泄露,
如API密钥、密码等。该工具会比较基础分支和当前提交之间的差异,
扫描新增内容中是否包含敏感数据,提升代码安全性。
2026-01-29 15:59:39 +08:00
dependabot[bot]
717ea7a161 chore(deps): bump actions/cache from 3 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 13:08:02 +08:00
dependabot[bot]
47b9007793 chore(deps): bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 13:02:07 +08:00
dependabot[bot]
d7a5a3fde4 chore(deps): bump actions/setup-dotnet from 4 to 5
Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5.
- [Release notes](https://github.com/actions/setup-dotnet/releases)
- [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-dotnet
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 12:57:08 +08:00
GeWuYou
d5b05c1578 chore(workflow): 更新 GitHub Actions 工作流配置
- 移除 auto-tag 工作流中的 ref 参数配置
- 清理工作流中多余的检查跳过关键词步骤
- 为 ci 工作流添加内容读取权限配置
- 优化工作流触发条件和权限设置
2026-01-29 12:42:22 +08:00
GeWuYou
411cac4028 chore(workflow): 更新自动标签工作流以支持发布触发条件
- 在 auto-tag 工作流中添加对 [release ci] 提交消息的检查
- 仅当提交消息包含 [release ci] 时才执行标签创建
- 在发布工作流中启用自动生成发布说明功能
- 配置 GitHub Release 操作以自动生成版本发布说明
- [skip ci]
2026-01-29 12:28:59 +08:00
GeWuYou
9b77aa4b07 fix(workflow): 修复自动标签工作流中的重复标签问题
- 添加了对现有标签的检查以避免重复创建
- 配置了从正确的提交哈希进行检出
- 在推送标签前验证标签是否已存在
- 添加了标签已存在时的优雅退出机制
- 确保了 Git 配置的一致性设置
2026-01-29 12:23:07 +08:00
GeWuYou
ef655bbaf1 refactor(workflow): 重构自动标签工作流并添加CI构建测试
- 将自动标签触发方式从直接push改为基于CI工作流完成状态
- 新增独立的CI构建测试工作流配置文件
- 简化自动标签逻辑,移除跳过关键字检查和版本解析冗余代码
- 优化Git标签创建和推送流程,统一配置用户名邮箱
- 集成.NET项目构建测试流程,包含依赖恢复、编译和单元测试
- 更新工作流权限配置和并发控制设置
2026-01-29 12:14:38 +08:00
GeWuYou
2f443087a4 ci(workflow): 添加 CodeQL 静态代码分析工作流
- 配置 GitHub Actions 工作流用于 C# 项目安全漏洞分析
- 设置在 main 分支推送和拉取请求时触发扫描
- 添加每周二凌晨 4 点 41 分的定时安全扫描
- 配置 .NET 8.0.x、9.0.x 和 10.0.x 版本环境支持
- 初始化 CodeQL 分析环境并启用 C# 语言支持
- 设置自动构建模式并执行静态代码分析
- 配置安全事件写入权限以生成分析报告
2026-01-29 12:05:40 +08:00
GeWuYou
57fdb1c3d4 chore(.github): 添加dependabot配置文件
- 新增dependabot.yml配置文件用于自动化依赖更新管理,
提升项目维护效率和安全性。
- [skip ci]
2026-01-29 10:20:05 +08:00
GeWuYou
2896f35c67 feat(setting): 更新设置系统支持数据持久化和泛型仓库
- 添加 IDataRepository 依赖注入支持泛型仓库
- 实现 SaveAll 方法用于保存所有设置数据到存储库
- 为 ApplyAll 和 Apply<T> 方法添加返回值类型注释
- 添加 SettingsApplyingEvent 事件发送功能
- 优化代码结构使用泛型约束和空合并运算符
- 添加 Repository 属性确保仓库实例不为空
2026-01-28 23:01:46 +08:00
GeWuYou
58291fd85c feat(setting): 添加设置迁移器注册和异步初始化功能
- 新增 RegisterMigration 方法用于注册设置迁移器
- 新增 InitializeAsync 方法支持异步初始化指定类型的设置
- 扩展了 ISettingsModel 接口以支持设置迁移功能
- 添加了对设置类型数组的批量异步初始化支持
2026-01-28 22:36:33 +08:00
GeWuYou
d8188a894a chore(deps): 更新 Meziantou.Polyfill 依赖版本
- 将 GFramework.Core.Abstractions 中的 Meziantou.Polyfill 版本从 1.0.100 更新到 1.0.101
- 将 GFramework.Game.Abstractions 中的 Meziantou.Polyfill 版本从 1.0.100 更新到 1.0.101
- 将 GFramework.Godot.SourceGenerators.Abstractions 中的 Meziantou.Polyfill 版本从 1.0.100 更新到 1.0.101
- 将 GFramework.SourceGenerators.Abstractions 中的 Meziantou.Polyfill 版本从 1.0.100 更新到 1.0.101
- 将 GFramework.SourceGenerators.Common 中的 Meziantou.Polyfill 版本从 1.0.100 更新到 1.0.101
2026-01-28 22:08:57 +08:00
GeWuYou
76a8b140f1 refactor(setting): 将设置持久化功能整合到数据仓库中
- 移除独立的SettingsPersistence类,将其功能合并到DataRepository
- 在DataRepository中新增基于Type参数的异步加载方法
- 修改SettingsModel以使用IDataRepository替代ISettingsPersistence
- 更新SettingsModel为泛型类并注入数据仓库依赖
- 将ISettingsSection接口继承IData接口
- 删除ISettingsPersistence接口定义
2026-01-28 20:36:24 +08:00
GeWuYou
0b7c64fd99 feat(data): 添加数据仓库功能并重构设置系统接口
- 新增 DataRepository 类实现数据存储和读取功能
- 添加数据仓库配置选项类 DataRepositoryOptions
- 定义 IData 接口作为通用数据标记接口
- 实现数据加载、保存、删除等异步操作方法
- 添加数据事件系统包括加载、保存、删除等事件类型
- 将 ISettingsData 接口重命名为 IResettable 并更新相关实现
- 更新 SettingsModel 和 SettingsPersistence 使用新的接口
- 修改 SettingsBatchChangedEvent 和 SettingsBatchSavedEvent 使用 IResettable 类型
- 重构 AudioSettings、GraphicsSettings、LocalizationSettings 继承新接口
- 更新 IPersistentApplyAbleSettings 接口依赖为 IResettable
2026-01-28 20:08:34 +08:00
GeWuYou
c918085ba9 refactor(setting): 移除 SettingsModel 的 IDisposable 接口实现
- 从 SettingsModel 类定义中移除 IDisposable 接口
- 删除 Dispose 方法及其相关实现逻辑
- 移除 _disposed 标记字段和相关的资源清理代码
- 简化类结构,不再需要手动管理资源释放
- 依赖垃圾回收器自动处理内存管理
2026-01-28 12:47:08 +08:00
GeWuYou
d250ee1d93 feat(globalusings): 为旧版.NET框架添加IsExternalInit兼容性支持
- 在GlobalUsings.cs中添加条件编译指令支持NETSTANDARD2_0、NETFRAMEWORK和NETCOREAPP2_0
- 添加System.ComponentModel命名空间引用
- 实现IsExternalInit静态类以支持仅初始化setter语法
- 使用EditorBrowsable特性标记为隐藏状态避免IDE显示
- 确保新功能仅在目标框架版本下可用
2026-01-27 23:03:35 +08:00
GeWuYou
31045f305c refactor(core): 调整命名空间结构以优化模块组织
- 将 IRegistry 接口从 GFramework.Game.Abstractions.registry 移至 GFramework.Core.Abstractions.registries
- 移除 KeyValueRegistryBase 中对旧命名空间的引用
- 将 IsExternalInit 类从 System.Runtime.CompilerServices 移至 GFramework.Game.Abstractions.internals
- 更新 IGameSceneRegistry 对新注册表命名空间的引用
- 将音频和图形设置类移至 GFramework.Game.Abstractions.setting.data 子命名空间
- 将资产注册表接口更新为使用新的核心注册表命名空间
- 调整 Godot 模块中的音频总线映射命名空间至 data 子目录
- 更新 Godot 音频和图形设置类以引用正确的设置数据命名空间
2026-01-27 22:58:37 +08:00
GeWuYou
9531cd0883 refactor(setting): 重构设置模块结构并添加版本控制功能
- 将AudioSettings和GraphicsSettings移至data子目录
- 为AudioSettings和GraphicsSettings实现IVersioned接口
- 新增LocalizationSettings类管理本地化配置
- 重命名AudioBusMapSettings为AudioBusMap并移至data目录
- 新增LocalizationMap类定义语言映射关系
- 更新GodotAudioSettings依赖注入参数名称
- 修复GodotAudioSettings重置方法逻辑
- 新增GodotLocalizationSettings类应用本地化配置到Godot引擎
- 添加必要的using语句和版权注释
2026-01-27 22:57:03 +08:00
GeWuYou
4cfc5d3505 refactor(storage): 将文件存储读取操作改为异步模式
- 使用 await using 替代 using 确保异步资源正确释放
- 优化文件读取流程以支持异步IO操作
- 提高文件存储组件的异步处理能力
2026-01-27 22:39:26 +08:00
GeWuYou
a29a484834 refactor(setting): 优化设置模型的并发安全性和性能
- 将字典集合替换为ConcurrentDictionary以提高并发安全性
- 添加方法缓存机制减少反射调用开销
- 实现迁移缓存避免重复查询操作
- 增加异步加载异常处理和日志记录
- 实现IDisposable接口添加资源清理功能
- 优化GetOrAdd方法简化数据获取逻辑
2026-01-27 22:38:49 +08:00
GeWuYou
11c94d462f feat(setting): 添加设置数据版本迁移功能
- 新增 IVersioned 接口用于定义版本信息
- 实现设置数据自动迁移机制,支持版本升级转换
- 添加 SettingsMigration 接口用于处理不同版本间的数据转换
- 在 SettingsModel 中集成迁移功能,加载时自动执行版本迁移
- 优化设置数据管理,新增 AllData 方法获取所有设置数据
- 重构代码结构,添加清晰的方法分组注释块
2026-01-27 22:22:20 +08:00
GeWuYou
07f5d27ab3 refactor(setting): 重构设置系统的接口设计
- 移除 SettingsModel 中的 All() 方法,避免同时实现两个接口的设置被重复返回
- 添加 AllApplicators() 方法用于获取所有可应用设置
- 添加 AllData() 方法用于获取所有设置数据
- 修改 SettingsSystem.ApplyAll() 方法,直接遍历可应用设置而非设置节
- 更新 ISettingsModel 接口定义,将 All() 方法拆分为 AllData() 和 AllApplicators()
- 移除 SettingsSystem 中的 Apply(Type) 和 Apply(IEnumerable<Type>) 重载方法
- 更新 Apply<T>() 泛型约束从 ISettingsSection 改为 IApplyAbleSettings
- 移除注册时对 ISettingsData 的自动注册逻辑,保持职责分离
2026-01-27 22:11:01 +08:00
GeWuYou
19c0830a7d feat(serializer): 添加运行时类型序列化器接口并重构序列化模块
- 新增 IRuntimeTypeSerializer 接口支持运行时类型序列化
- 将序列化器接口从 Game 模块迁移到 Core 模块
- 更新 JsonSerializer 的命名空间引用
- 为 Godot 音频和图形设置类添加持久化应用接口实现
- 重构设置模型的初始化和去重逻辑
- 移除批量加载所有设置的功能
- 优化设置应用过程为异步执行
- 在存储接口中添加异步删除方法
- 为各种存储实现添加异步删除功能
- 为 Godot 文件存储添加标准文件系统路径删除支持
- 删除废弃的设置数据基类实现
2026-01-27 21:58:30 +08:00
GeWuYou
b49079de3e style(coding-style): 统一代码风格并优化文档格式
- 移除多余using语句和空行,统一代码缩进格式
- 优化注释文档中的缩进和对齐格式
- 简化条件语句和方法实现,提升代码可读性
- 重构协程系统相关类的字段和方法定义格式
- 更新架构服务中容器访问方式的实现
- 调整异步操作类的属性和方法组织结构
- [skip ci]
2026-01-27 20:30:04 +08:00
GeWuYou
a71c7f6f1a docs(architecture): 为IArchitecture接口添加文档注释
- 为RegisterSystem方法添加返回值文档注释
- 为RegisterModel方法添加返回值文档注释
- 为RegisterUtility方法添加返回值文档注释
- 为IArchitecture接口添加WaitUntilReadyAsync方法
- 为新添加的方法添加完整的XML文档注释
2026-01-27 19:59:02 +08:00
GeWuYou
50e334b006 chore(deps): 更新项目依赖包版本
- 将 Meziantou.Analyzer 从 2.0.283 更新到 2.0.286
- 将 Godot 相关包从 4.5.1 更新到 4.6.0
- 统一所有项目中的代码分析器版本
- 保持依赖包版本一致性
2026-01-27 19:03:20 +08:00
GeWuYou
cfb55972b1 test(coroutine): 更新 WaitForTask 测试以使用 TaskCompletionSource
- 将测试中的 Task.Run 替换为 TaskCompletionSource
- 确保测试初始状态检查的准确性
- 改进测试的可靠性和可预测性
2026-01-27 13:13:42 +08:00
GeWuYou
df7ad24b48 test(coroutine): 更新协程句柄和任务扩展测试
- 修改CoroutineHandleTests中的Equals比较测试,使用不同的实例ID进行验证
- 在Equals测试中添加Key值的不同性验证
- 更新AsCoroutineInstruction测试文档,验证已完成任务的状态
- 移除重复的泛型版本测试方法
- 在TaskCoroutineExtensionsTests中移除未使用的句柄变量赋值
- 简化任务协程启动的测试逻辑,专注于调度器行为验证
2026-01-27 13:03:47 +08:00
GeWuYou
684d4601d0 test(coroutine): 为 WaitWhile 添加断言以验证谓词函数行为
- 修改测试逻辑以跟踪谓词函数的调用次数
- 添加对 IsDone 属性访问时谓词评估的验证
- 增加对条件变化时谓词重新评估的检查
- 添加相应的断言确保谓词按预期工作
2026-01-27 12:57:17 +08:00
GeWuYou
bb95f738a8 chore(project): 禁用隐式using并添加全局using文件
- 在所有项目中禁用 ImplicitUsings 配置
- 为所有项目添加 GlobalUsings.cs 文件统一管理常用命名空间
- 统一添加 System、System.Collections.Generic、System.Linq、System.Threading 和 System.Threading.Tasks 的全局引用
- 更新项目文件中的 PackageReference 格式规范化
- 移除各个源文件顶部的重复 using 语句
- 添加标准版权头注释到全局引用文件
2026-01-27 12:45:03 +08:00
GeWuYou
87e11449f1 refactor(core): 移除隐式using并统一全局using配置
- 在多个核心类文件中移除System命名空间的重复using声明
- 创建GlobalUsings.cs文件集中管理公共命名空间引用
- 将System、System.Collections.Generic、System.Linq、System.Threading.Tasks设为全局using
- 禁用项目级别的隐式using功能以提高代码可读性
- 优化项目配置中的包引用格式添加必要的空格
2026-01-27 12:35:44 +08:00
GeWuYou
21c5d1bc68 refactor(command): 重构命令和查询抽象基类以支持输入参数分离
- 将 AbstractAsyncCommand 拆分为 AbstractAsyncCommand 和 AbstractAsyncCommandWithInput
- 将 AbstractAsyncCommand<TInput, TResult> 移至新的 AbstractAsyncCommandWithResult 类
- 将 AbstractCommand 拆分为 AbstractCommand 和 AbstractCommandWithInput
- 将 AbstractCommand<TInput, TResult> 移至新的 AbstractCommandWithResult 类
- 将 AbstractAsyncQuery 简化为不带输入参数的版本
- 将 AbstractQuery 简化为不带输入参数的版本
- 创建新的 AbstractAsyncQueryWithResult 类处理带输入参数的异步查询
- 创建新的 AbstractQueryWithResult 类处理带输入参数的同步查询
2026-01-26 13:03:50 +08:00
GeWuYou
7e5036ae76 test(coroutine): 添加协程扩展方法和等待所有协程的单元测试
- 添加 CoroutineExtensionsTests 测试类,覆盖 RepeatEvery、ExecuteAfter、Sequence、ParallelCoroutines 和 WaitForSecondsWithProgress 方法
- 添加 WaitForAllCoroutinesTests 测试类,验证 WaitForAllCoroutines 的初始化、IsDone 属性、空句柄处理等功能
- 实现协程调度器集成测试,验证多协程并发执行场景
- 添加边界条件测试,包括空数组、null 参数、负数参数等情况
- 实现异常处理和特殊状态测试,如暂停恢复、终止协程等场景
2026-01-26 11:45:13 +08:00
GeWuYou
01d9fefa1d feat(coroutine): 扩展协程功能并重构指令结构
- 将协程等待指令移动到instructions命名空间下
- 添加WaitForProgress指令支持带进度回调的时间等待
- 添加WaitForAllCoroutines指令用于等待多个协程完成
- 添加AsyncOperation类用于桥接协程与async/await模型
- 添加协程扩展方法包括RepeatEvery、ExecuteAfter、Sequence等功能
- 添加Task与协程的转换扩展方法AsCoroutineInstruction
- 添加协程调度器的ParallelCoroutines扩展方法
- 添加IsCoroutineAlive方法检查协程状态
- 更新相关测试文件以匹配新的命名空间结构
2026-01-26 09:44:07 +08:00
GeWuYou
27bc481577 feat(Architecture): 添加架构就绪状态等待功能
- 新增 `_readyTcs` 字段用于跟踪架构初始化状态
- 添加 `IsReady` 属性检查当前架构是否已就绪
- 在架构进入 Ready 阶段时释放 Ready await
- 实现 `WaitUntilReadyAsync()` 方法支持异步等待架构初始化完成
- [skip ci]
2026-01-24 15:42:32 +08:00
GeWuYou
9808367aa5 refactor(architecture): 移除事件相关依赖并优化命名空间引用
- 从 Architecture.cs 中移除了 GFramework.Core.Abstractions.events 和 GFramework.Core.events 的引用
- 在 EasyEventGeneric.cs 中添加了 System 命名空间引用
- 在 GameContext.cs 中添加了 System、System.Collections.Generic 和 System.Linq 引用
- 在 ObjectExtensions.cs 中添加了 System 命名空间引用
- 整理了架构层的依赖关系,移除了不必要的事件模块引用
- 优化了各文件的 using 语句顺序和结构
- [skip ci]
2026-01-24 09:17:32 +08:00
GeWuYou
2d15184afe refactor(architecture): 移除架构生命周期事件发送功能
- 从 Architecture.cs 中移除所有 EventBus.Send 事件发送调用
- 删除 ArchitectureEvents.cs 文件及其相关事件定义
- 移除架构销毁开始、销毁完成和初始化失败事件的发送逻辑
- 更新测试代码移除对已删除事件的依赖
2026-01-24 09:15:31 +08:00
GeWuYou
7314bf03d0 feat(coroutine): 添加基于条件和取消令牌的重复调用功能
- 新增RepeatCallForever方法支持条件函数参数
- 添加CancellationToken参数支持取消令牌控制
- 重构原有RepeatCallForever方法保持向后兼容
- 添加详细的XML文档注释说明参数和返回值
- 实现基于条件判断的循环执行逻辑
- 实现基于取消令牌的循环执行控制
2026-01-23 12:50:59 +08:00
GeWuYou
bf517a4f7f refactor(coroutine): 优化协程调度器实现
- 在 CoroutineSlot 中添加 Handle 属性用于标识协程实例
- 使用集合初始化语法替换 HashSet 创建方式
- 简化协程执行状态检查逻辑
- 优化 KillAllByTag 方法中的计数逻辑
- 改进协程清理过程中的句柄验证和等待者唤醒机制
2026-01-23 12:42:06 +08:00
GeWuYou
a79f02c987 docs(api): 添加 Core API 参考文档与事件系统接口文档
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件
- 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明
- 提供完整的 API 使用示例路径、最佳实践与性能建议
- 包含架构图、依赖关系图与故障排查指南
- 添加测试用例参考与扩展方法说明
- [skip ci]
2026-01-21 23:45:10 +08:00
GeWuYou
1513460ac7 refactor(coroutine): 优化协程调度器测试代码结构
- 修改Run方法测试用例以使用CreateYieldingCoroutine创建协程
- 移除Coroutines_Should_Complete_At_Different_Stages测试方法
- 在CreateYieldingCoroutine方法末尾添加yield break语句
- 在CreateImmediateCoroutine方法中添加WaitUntil指令并返回
- 修改CreateCountingCoroutine方法实现逻辑,替换无限循环为有限帧执行
- 移除Delay_Should_Accumulate_Time_Across_Multiple_Updates测试方法
2026-01-21 22:02:02 +08:00
GeWuYou
faf860cc57 docs(tests): 添加测试覆盖计划文档和协程系统单元测试
- 新增 TEST_COVERAGE_PLAN.md 测试覆盖详细清单,包含总体统计和详细补全计划
- 添加 CoroutineHandleTests.cs 协程句柄单元测试,覆盖15个测试用例
- 添加 CoroutineHelperTests.cs 协程辅助方法单元测试,覆盖19个测试用例
- 添加 CoroutineSchedulerTests.cs 协程调度器单元测试,覆盖25个测试用例
- 完善协程系统测试覆盖至100%,提升整体文件覆盖率从79.2%至83.1%
- 建立协程系统测试执行计划和进度跟踪机制
2026-01-21 21:42:54 +08:00
GeWuYou
9194ef9445 docs(Timing): 添加完整注释文档并优化协程管理器实现
- 为 Timing 类添加了完整的 XML 文档注释,包括类说明、属性和方法描述
- 将协程调度器字段改为可空引用类型,提升类型安全性
- 添加了安全访问调度器的属性,避免未初始化时的潜在问题
- 优化了协程执行段切换逻辑,使用安全访问属性替代直接字段访问
- 完善了生命周期管理方法的文档注释
- 添加了协程控制 API 的详细注释,包括暂停、恢复、终止等功能
- 优化了延迟调用相关方法的实现和文档
- 改进了节点有效性检查方法的可读性
2026-01-21 20:45:00 +08:00
GeWuYou
ddbf7af572 feat(coroutine): 添加完整的协程系统实现
- 实现了协程调度器和句柄管理机制
- 添加了多种等待指令包括延时、帧数、条件等待等
- 创建了协程辅助方法和扩展功能
- 集成了Godot引擎的时间源和生命周期管理
- 实现了协程的暂停、恢复、终止等控制功能
- 添加了协程标签管理和按标签批量操作功能
- 提供了与Godot节点生命周期绑定的取消机制
2026-01-21 20:34:10 +08:00
GeWuYou
16a72e85af refactor(coroutine): 移除协程相关抽象接口
移除了以下协程相关的接口定义:
- ICoroutineContext: 协程上下文接口
- ICoroutineHandle: 协程句柄接口
- ICoroutineScheduler: 协程调度器接口
- ICoroutineScope: 协程作用域接口
- ICoroutineSystem: 协程系统接口
- IYieldInstruction: 等待指令接口
- [skip ci]
2026-01-21 16:02:27 +08:00
GeWuYou
3e26c84bb1 feat(coroutine): 优化协程执行机制,修复嵌套协程和yield null处理问题
- 修改CoroutineHandle中的协程执行逻辑,实现每帧只推进一步的机制,
避免单帧内过度执行导致的性能问题
- 修复yield null处理逻辑,正确处理等待一帧后继续执行的情况
- 改进嵌套协程处理,确保子协程完成后正确返回到父协程
- 优化WaitUntil条件检查逻辑,确保状态转换正确性
- 在定时任务扩展中添加yield break确保协程正确结束
- 调整协程调度器的更新顺序,先添加新协程再执行更新
2026-01-21 14:19:15 +08:00
GeWuYou
f24ec656e6 refactor(coroutine): 将协程相关接口从Game模块迁移到Core模块
- 重命名命名空间从GFramework.Game.Abstractions.coroutine到GFramework.Core.Abstractions.coroutine
- 更新ICoroutineContext.cs、ICoroutineHandle.cs、ICoroutineScheduler.cs、
  ICoroutineScope.cs、ICoroutineSystem.cs、IYieldInstruction.cs的命名空间
- 更新测试覆盖率计划文档,添加协程模块测试计划
- 新增协程模块测试计划,包含15个源文件,计划91个测试用例
- 添加CoroutineHandleTests.cs等7个协程相关测试文件的计划
2026-01-21 09:21:08 +08:00
GeWuYou
ef2e718efe feat(coroutine): 完善协程系统接口设计与实现
- 实现ICoroutineContext和ICoroutineHandle接口,提供协程上下文和句柄的标准定义
- 重构CoroutineContext实现ICoroutineContext接口,统一协程上下文访问方式
- 修改CoroutineHandle实现ICoroutineHandle接口,标准化协程控制方法
- 扩展ICoroutineScheduler和ICoroutineScope接口,增加ActiveCount属性和Launch方法
- 优化CoroutineScheduler线程安全性,添加线程ID检查防止跨线程调用
- 为WaitForSeconds、WaitUntil、WaitWhile添加Reset方法支持状态重置
- 重构CoroutineScopeExtensions移除类型转换,使用接口方法替代具体类型
- 改进GlobalCoroutineScope添加TryGetScope方法,使用TryGet模式替代异常控制
- 优化CoroutineHandle取消逻辑,确保取消时正确触发OnComplete事件
- 统一各协程组件的XML文档注释,完善参数和返回值说明
- [skip ci]
2026-01-21 00:06:01 +08:00
GeWuYou
f143cf5c1b feat(coroutine): 实现协程系统核心功能
- 添加协程上下文、句柄、调度器和作用域管理类
- 实现协程等待指令包括 WaitForSeconds、WaitUntil 和 WaitWhile
- 创建协程系统和全局协程作用域管理器
- 定义协程相关抽象接口 ICoroutineScheduler、ICoroutineScope 等
- 升级 Meziantou.Analyzer 依赖版本至 2.0.283
- 升级 Meziantou.Polyfill 依赖版本至 1.0.100
2026-01-20 23:05:15 +08:00
GeWuYou
5ef6145688 fix(ui): 修复UiRouterBase弹出栈时目标UI键可空性问题
- 将topUiKey重命名为leavingUiKey以提高代码可读性
- 修改nextUiKey逻辑使其在栈中只有一个元素时返回null而非抛出异常
- 更新CreateEvent方法参数toUiKey为可空字符串类型
- 调整UiTransitionEvent中的ToUiKey属性为可空字符串类型
- 添加注释说明nextUiKey现在是可选的
- 格式化代码缩进和换行以提高可读性
2026-01-20 19:12:45 +08:00
GeWuYou
039152438b refactor(ui): 重构GodotUiRoot类构造函数和层级管理逻辑
- 将层级Z轴顺序映射表作为构造函数参数注入
- 移除静态字段LayerZOrderMap,改用实例字段_layerZOrderMap
- 为层级映射表添加详细的XML文档注释和默认值说明
- 修改GetBaseZOrder方法为实例方法并更新内部字段引用
- 优化代码结构和可读性
2026-01-20 12:56:34 +08:00
GeWuYou
88ced1ac55 refactor(ui): 重构UI层级管理系统
- 移除 System.Collections.Generic 和 System 的 using 语句
- 添加 GFramework.Game.Abstractions.enums 的 using 语句
- 添加静态只读字典 LayerZOrderMap 来管理 UI 层级 Z 轴顺序
- 修改 AddUiPage 方法参数,使用 UiLayer 枚举替代 zOrder 参数
- 使用 TryAdd 方法替换 ContainsKey 判断逻辑
- 使用 Remove 方法的重载版本来简化页面移除逻辑
- 删除 RefreshLayerOrder 方法
- 添加 GetBaseZOrder 辅助方法来获取基础 Z 轴顺序
- 更新 UiLayer 枚举定义,移除显式的数值赋值
- 更新 IUiRoot 接口中的 AddUiPage 方法签名
- 删除 IUiRoot 接口中 RefreshLayerOrder 方法
- 更新 UiRouterBase 中调用 AddUiPage 方法的方式,传递 UiLayer 参数
2026-01-20 12:51:48 +08:00
GeWuYou
d85ef83ac1 feat(ui): 添加UI页面行为接口和实现
- 在IUiPageBehavior接口中添加IsModal、BlocksInput和RequiresMask属性定义
- 在CanvasItemUiPageBehavior类中实现模态对话框相关属性
- 添加页面模态状态、输入阻断和遮罩层需求的属性支持
- 为UI页面提供统一的模态行为控制接口
- 实现对下层交互阻断功能的支持
- 完善UI页面行为抽象层的设计规范
2026-01-20 12:40:53 +08:00
GeWuYou
3362d9456d feat(ui): 实现UI缓存淘汰策略和移除动画相关功能
- 新增CacheEvictionPolicy枚举定义LRU和LFU缓存淘汰策略
- 在GodotUiFactory中实现缓存淘汰机制支持LRU/LFU策略
- 将IUiCacheStatistics接口从IUiFactory中分离到独立文件
- 移除UiAnimationPolicy类及相关动画策略参数配置
- 移除GodotUiTransition类中的UI过渡动画实现
- 移除UiTransitionAnimation枚举类型
- 更新UiRouterBase中路由方法移除动画策略参数
- 重构路由守卫注册方法位置优化代码结构
- 更新UiCacheConfig配置类适配新的缓存策略枚举值
-[skip ci]
2026-01-20 12:27:22 +08:00
GeWuYou
ad061bba46 feat(ui): 添加UI缓存统计和路由守卫功能
- 新增IUiCacheStatistics接口用于UI缓存统计信息
- 为IUiFactory添加缓存策略管理和统计信息获取功能
- 将IUiRouter中的层级管理改为路由守卫功能
- 实现路由守卫的注册、移除和执行逻辑
- 添加缓存配置管理支持
- [skip ci]
2026-01-20 10:24:23 +08:00
GeWuYou
e972d926a7 feat(ui): 添加UI过渡动画系统
添加了完整的UI过渡动画功能,包括:
- 新增UiTransitionAnimation枚举定义各种动画类型
- 扩展IUiRouter接口支持动画策略参数
- 新增IUiTransition接口定义动画播放契约
- 新增UiAnimationPolicy类配置动画行为
- 实现God
2026-01-20 09:36:59 +08:00
GeWuYou
c9f01f5877 feat(ui): 添加UI层级管理和Godot平台实现
- 在IUiRoot接口中添加Z-order控制和页面层级管理功能
- 实现Godot平台的UiRoot,支持UI页面的添加、移除和层级排序
- 添加UiLayer枚举定义不同UI层级(Page、Overlay、Modal、Toast、Topmost)
- 在IUiRouter中扩展层级管理方法,支持指定层级显示UI
- 实现UiRouterBase中的层级管理逻辑,包括显示、隐藏、清空等操作
- 添加对GodotSharp包的引用以支持Godot平台功能
2026-01-20 09:14:37 +08:00
GeWuYou
760cc71985 feat(ui): 实现UI实例池化管理和生命周期优化
- 添加UI实例管理策略枚举(AlwaysCreate、Reuse、Pooled)
- 在GodotUiFactory中实现缓存池和实例回收机制
- 扩展IUiFactory接口支持预加载、回收和缓存管理功能
- 更新UiRouterBase支持实例策略参数传递
- 重构Pop策略将Hide重命名为Cache以明确语义
- 移除项目文件中的冗余文件夹引用
- 添加日志记录便于调试和监控实例状态
- 实现批量预加载和全量缓存清理功能
- 优化页面替换逻辑支持实例复用和池化管理
2026-01-20 08:32:53 +08:00
GeWuYou
c2b046e185 chore(logging): 添加系统命名空间引用
- 在 AbstractLogger.cs 中添加 System 命名空间引用
- 在 ConsoleLogger.cs 中添加 System 和 System.IO 命名空间引用
- 统一日志模块的命名空间导入规范
2026-01-20 07:55:06 +08:00
GeWuYou
0a924725a5 feat(ui): 更新UiRouterBase以支持基于键值的页面导航
- 添加PeekKey方法获取页面栈顶元素的键值
- 修改Peek方法返回IUiPageBehavior对象而不是类型名称
- 更新IsTop和Contains方法使用键值比较替代类型名比较
- 在UiTransitionEvent中使用PeekKey获取来源UI键值
- 为CanvasItemUiPageBehavior添加key参数和Key属性实现
- 在IUiPageBehavior接口中定义Key属性
- 更新IUiRouter接口定义新的PeekKey和Peek方法
- 添加必要的using引用和异步任务配置
2026-01-19 22:23:36 +08:00
GeWuYou
9c27aa5927 feat(ui): 添加对已存在UI页面的路由推送支持
- 在UiRouterBase中新增Push方法重载,支持直接推送已创建的IUiPageBehavior实例
- 统一页面推送逻辑到DoPushPageInternal方法,同时处理工厂创建和现有页面
- 更新Replace方法使用新的页面推送逻辑
- 优化日志输出,统一使用View.GetType().Name获取页面类型名称
- 为新功能添加完整的XML文档注释
- 在IUiRouter接口中定义新的Push方法重载签名
2026-01-19 22:00:00 +08:00
GeWuYou
859bd1de41 feat(ui): 添加UI路由栈状态查询功能
- 在Push方法中添加栈顶检查,避免重复推送相同UI并记录警告日志
- 移除GetCurrentUiKey私有方法,使用Peek方法替代
- 添加Peek方法获取栈顶UI的类型名称
- 添加IsTop方法判断指定UI是否为栈顶元素
- 添加Contains方法检查UI是否存在于栈中
- 添加Count属性获取栈中元素数量
- 更新IUiRouter接口定义相关方法
- 简化DoClearInternal方法实现逻辑
2026-01-19 21:05:13 +08:00
GeWuYou
766a73f2a9 feat(storage): 实现 Godot 文件存储删除功能
- 添加 Godot 命名空间引用
- 实现 Delete 方法的具体逻辑
- 支持 Godot 路径和普通文件路径的删除操作
- 添加文件存在性检查避免删除不存在的文件
- 实现线程安全的锁机制防止并发冲突
- 添加删除完成后的锁清理防止内存泄漏
- 提供详细的错误处理和异常抛出机制
2026-01-19 20:12:20 +08:00
GeWuYou
48c962f874 docs(readme): 更新 NuGet 包链接和添加 zread 集成徽章
- 修正了 NuGet 包链接指向正确的 GeWuYou.GFramework 包
- 添加了 zread 集成徽章以支持文档阅读功能
- 保持了原有的项目描述和许可证信息不变
- [skip ci]
2026-01-19 19:36:51 +08:00
GeWuYou
c223fbcb5c refactor(storage): 重构存储接口实现
- 将FileStorage类的接口从IStorage改为IFileStorage
- 添加IFileStorage接口定义,继承自IStorage接口
- 将ScopedStorage类的接口从IStorage改为IScopedStorage
- 添加IScopedStorage接口定义,继承自IStorage接口
- 更新相关命名空间引用
- 修改FileStorage类的XML注释文档
2026-01-19 19:08:59 +08:00
GeWuYou
a30e576c03 feat(test): 完成GFramework.Core模块测试覆盖提升至100%
完成GFramework.Core模块测试覆盖详细清单的全面更新,
将测试覆盖率从79.2%提升至100%,新增63个测试用例。

主要变更包括:
- 补充异步命令系统测试,新增AbstractAsyncCommandTests.cs (12个测试)
- 补充异步查询系统测试,新增AsyncQueryBusTests.cs和AbstractAsyncQueryTests.cs (20个测试)
- 补充工具基类测试,新增AbstractContextUtilityTests.cs (11个测试)
- 补充常量验证测试,新增ArchitectureConstantsTests.cs和GFrameworkConstantsTests.cs (16个测试)
- 更新架构系统测试,新增ArchitectureConstantsTests.cs (11个测试)
- 更新CommandBus异步测试,补充4个异步测试方法
- 更新测试统计信息,包含详细的测试用例数量和覆盖率数据
- 完善测试质量总结和最佳实践指南
- [skip ci]
2026-01-19 08:55:13 +08:00
GeWuYou
3859098b7e refactor(godot): 重构Godot UI注册表相关接口和类名
- 将IGodotAssetRegistry重命名为IGodotUiRegistry
- 将GodotAssetRegistry重命名为GodotUiRegistry
- 更新GodotUiFactory中的依赖注入类型
- 为IGodotSceneRegistry接口添加详细的XML文档注释
- 移除GodotUiFactory中不必要的Godot命名空间引用
2026-01-18 22:46:15 +08:00
GeWuYou
825a026c8e refactor(architecture): 重构架构上下文和服务初始化逻辑
- 移除 Architecture 类中的命令总线、查询总线和异步查询总线属性
- 修改 ArchitectureContext 构造函数,仅接收容器参数并实现服务缓存机制
- 添加 GetService 方法用于获取指定类型的服务实例
- 更新所有查询和命令方法使用服务缓存机制
- 修改 ArchitectureServices 构造函数初始化逻辑,将服务注册到容器
- 更新相关测试类中的上下文初始化方式
- 在 GameContext 和相关测试类中实现 GetService 方法
2026-01-18 22:26:02 +08:00
GeWuYou
241efa0363 test(core): 添加核心组件单元测试
- 添加ArchitectureConstants类的完整单元测试,验证架构阶段常量和转换
- 添加AbstractAsyncCommand抽象类的单元测试,覆盖异步命令的各种场景
- 添加GFrameworkConstants框架常量的单元测试,确保常量值正确性
- 添加AbstractAsyncQuery抽象类的单元测试,验证异步查询功能
- 添加AsyncQueryBus查询总线的单元测试,测试异步查询发送功能
2026-01-18 21:43:56 +08:00
GeWuYou
db4306a7bc test(command): 补充命令总线异步方法单元测试
- 添加SendAsync方法执行异步命令的测试用例
- 添加SendAsync方法处理null异步命令的异常测试
- 添加SendAsync泛型方法返回值的正确性测试
- 添加SendAsync泛型方法处理null异步命令的异常测试
- 新增TestAsyncCommand测试类用于异步命令验证
- 新增TestAsyncCommandWithResult测试类用于异步返回值验证
- 更新测试覆盖率报告反映异步功能测试需求
2026-01-18 21:12:13 +08:00
GeWuYou
1c1385ee24 feat(architecture): 添加异步查询总线支持
- 在Architecture类中添加AsyncQueryBus属性
- 在ArchitectureContext中添加异步查询执行方法SendQueryAsync
- 在ArchitectureServices中添加AsyncQueryBus服务实例
- 扩展IArchitectureContext接口以包含异步查询方法
- 扩展IArchitectureServices接口以包含异步查询总线
- 更新ArchitectureContext构造函数以接受异步查询总线参数
- 为ArchitectureContextTests添加异步查询总线相关测试用例
- 更新测试中的构造函数调用以包含新的异步查询总线参数
2026-01-18 20:53:44 +08:00
GeWuYou
15844b7077 refactor(query): 将IAsyncQueryBus接口移动到GFramework.Core.Abstractions模块
- 将IAsyncQueryBus.cs文件从GFramework.Core/query重命名为GFramework.Core.Abstractions/query
- 更新命名空间从GFramework.Core.query到GFramework.Core.Abstractions.query
- 移除无用的GFramework.Core.Abstractions.query using引用
- 添加System.Threading.Tasks命名空间引用
2026-01-18 20:41:48 +08:00
GeWuYou
42ddb80248 feat(core): 添加异步查询系统并优化命令系统实现
- 新增 AbstractAsyncQuery 基类支持异步查询操作
- 实现 AsyncQueryBus 和 IAsyncQueryBus 查询总线功能
- 添加 IAsyncQuery 接口定义异步查询契约
- 重构 CommandBus 的 SendAsync 方法移除不必要的 await
- 为 AbstractAsyncCommand 添加完整 XML 文档注释
- 更新 TEST_COVERAGE_PLAN.md 反映测试覆盖率提升至 91.5%
2026-01-18 20:39:23 +08:00
GeWuYou
1fb1334d88 refactor(template): 移除页面控制器模板中的接口前缀
- 移除了 OnExit 方法的 IUiPage 接口前缀
- 移除了 OnPause 方法的 IUiPage 接口前缀
- 移除了 OnResume 方法的 IUiPage 接口前缀
- 移除了 OnShow 方法的 IUiPage 接口前缀
- 移除了 OnHide 方法的 IUiPage 接口前缀
2026-01-18 20:23:37 +08:00
GeWuYou
078f5c2102 refactor(asset): 移除抽象资源目录工具并重构注册表接口
- 删除 AbstractAssetCatalogUtility 类及其所有实现逻辑
- 移除 AssetCatalog 相关结构体和接口定义
- 删除 IAssetCatalogUtility 和 IResourceFactoryUtility 接口
- 移除 AbstractResourceFactoryUtility 和 ResourceLoadUtility 实现
- 重命名 IUiRegistry 接口为 IAssetRegistry 并更新泛型参数说明
- 重命名 GodotUiRegistry 为 GodotAssetRegistry 并更新接口引用
- 创建新的 IGodotAssetRegistry 接口用于PackedScene资源管理
- 创建新的 IGodotSceneRegistry 接口并更新 GodotSceneRegistry 实现
- 更新 GodotUiFactory 中的依赖注入从 IUiRegistry 改为 IAssetRegistry
2026-01-18 20:14:33 +08:00
GeWuYou
3589a0cf2f feat(registry): 添加通用注册表基础设施并重构UI注册功能
- 新增 IKeyValue 接口定义通用键值对数据结构契约
- 创建 IRegistry 接口提供通用注册表功能定义
- 实现 KeyValueRegistryBase 基类提供基于字典的键值对管理
- 添加 GodotSceneRegistry 类管理Godot场景资源
- 重构 GodotUiRegistry 和 GodotUiFactory 使用新的注册表基类
- 移除废弃的 IWritableUiRegistry 接口
- 更新项目文件添加注册表相关目录结构
2026-01-18 16:01:10 +08:00
GeWuYou
bbb8d417f6 refactor(state): 将状态机相关类重命名以统一命名规范
- 将 ContextAwareStateMachine 重命名为 StateMachineSystem
- 将 ContextAwareStateMachineTests 重命名为 StateMachineSystemTests
- 将 GameStateMachine 重命名为 GameStateMachineSystem
- 创建新的 IStateMachineSystem 接口继承 ISystem 和 IStateMachine
- 移除 ContextAwareStateMachine 中对 system 的引用
- 将 Context 字段改为私有 _context 字段
- 更新所有测试类中的类型引用以匹配新名称
2026-01-17 21:13:38 +08:00
GeWuYou
193e3f2cfa chore(deps): 更新 Meziantou.Analyzer 依赖包版本
- 将 GFramework.Core.Abstractions 项目中的 Meziantou.Analyzer 版本从 2.0.278 更新到 2.0.279
- 将 GFramework.Game.Abstractions 项目中的 Meziantou.Analyzer 版本从 2.0.278 更新到 2.0.279
- 将 GFramework.Godot.SourceGenerators.Abstractions 项目中的 Meziantou.Analyzer 版本从 2.0.278 更新到 2.0.279
- 将 GFramework.SourceGenerators.Abstractions 项目中的 Meziantou.Analyzer 版本从 2.0.278 更新到 2.0.279
- 将 GFramework.SourceGenerators.Common 项目中的 Meziantou.Analyzer 版本从 2.0.278 更新到 2.0.279
2026-01-17 20:10:47 +08:00
GeWuYou
8fa3e0ec79 refactor(serializer): 重构序列化器接口继承实用工具接口
- 为 ISerializer 接口添加 using 语句引用 GFramework.Core.Abstractions.utility
- 修改 ISerializer 接口继承 IUtility 接口以提供基础实用功能
- 保持原有序列化和反序列化方法定义不变
2026-01-17 20:10:22 +08:00
GeWuYou
fedf7f9c98 refactor(PageControllerTemplate): 移除测试日志代码
- 删除了页面进入方法中的测试日志输出
- [skip ci]
2026-01-17 19:49:53 +08:00
GeWuYou
ba91b68c64 feat(architecture): 修改InstallModule和RegisterLifecycleHook方法返回实例
- InstallModule方法现在返回安装的模块实例
- RegisterLifecycleHook方法现在返回注册的钩子实例
- 为两个方法添加返回值的XML文档注释
- 更新接口定义以匹配新的返回类型
2026-01-17 19:44:56 +08:00
GeWuYou
3bc7e84af4 feat(template): 添加UI页面控制器类模板
- 创建PageControllerTemplate.cs模板文件
- 实现IController、IUiPageBehaviorProvider和IUiPage接口
- 添加页面生命周期管理方法(OnEnter、OnExit、OnPause、OnResume、OnShow、OnHide)
- 集成CanvasItemUiPageBehavior页面行为实现
- 添加ContextAware和Log注解支持
- 提供页面行为实例的懒加载获取功能
2026-01-17 19:40:24 +08:00
GeWuYou
3137c85449 refactor(setting): 重构设置系统异步操作实现
- 移除原有的重置设置命令相关文件和方法
- 添加异步命令发送接口的默认实现
- 实现设置系统的异步应用功能
- 优化设置应用逻辑并添加泛型支持
- 统一任务完成状态返回方式
2026-01-17 19:33:15 +08:00
GeWuYou
e29b6da9e1 refactor(ContextAwareExtensions): 重构命令发送方法并优化代码结构
- 移除重复的SendCommand同步方法实现
- 统一Context变量命名规范,修复大小写不一致问题
- 调整方法顺序并重新组织代码结构
- 完善IAsyncCommand接口的XML文档注释
- 优化异步命令执行的实现逻辑
2026-01-17 19:26:13 +08:00
GeWuYou
a45bf27c8b refactor(setting): 重构设置重置功能实现
- 移除 SettingsResetEvent 中的旧设置属性,改为仅保存新设置
- 删除 SettingsPersistence 中的重置方法,统一通过命令模式处理
- 在 SettingsSystem 中添加 ResetAsync 方法并集成命令模式
- 为 AudioSettings 和 GraphicsSettings 添加 Reset 方法实现
- 扩展 ISettingsData 接口添加 Reset 方法定义
- 从接口中移除重置相关方法定义
- 在 ISettingsSystem 中添加重置相关的异步方法声明
- 为 AudioBusMapSettings 添加 Reset 方法实现
- 新增 ResetSettingsCommand 和 ResetSettingsInput 实现命令模式
- 添加 SettingsData 抽象基类提供默认的 Reset 实现
- [skip ci]
2026-01-17 16:07:37 +08:00
GeWuYou
e7285b3426 feat(core): 添加异步命令支持功能
- 在 ArchitectureContext 中新增 SendCommandAsync 方法支持异步命令执行
- 在 CommandBus 中实现 SendAsync 方法处理异步命令的发送和执行
- 在 ContextAwareExtensions 中扩展 SendCommandAsync 扩展方法
- 更新 IArchitectureContext 接口定义异步命令方法契约
- 更新 ICommandBus 接口定义异步命令执行方法
- 新增 AbstractAsyncCommand 抽象类提供异步命令基类实现
- 定义 IAsyncCommand 接口规范异步命令的行为 contract
2026-01-17 16:03:00 +08:00
GeWuYou
6ef22e5d10 chore(test): 更新测试工作流配置
- 移除 trx 日志记录器中的 LogFileName 参数
- 简化测试结果日志配置以提高兼容性
- [skip ci]
2026-01-17 13:48:03 +08:00
GeWuYou
267d7cc84d feat(setting): 添加设置系统事件通知和重置功能
- 在SettingsModel中添加事件相关依赖引用
- 在SettingsPersistence中实现设置加载、保存、删除的事件发送机制
- 添加SettingsDeletedEvent用于通知设置删除操作
- 添加SettingsResetEvent和SettingsResetAllEvent支持设置重置功能
- 在SettingsPersistence中新增ResetAsync和ResetAllAsync方法
- 修改TryApply方法为实例方法并添加设置应用过程的事件通知
- 添加SettingsApplyingEvent和SettingsAppliedEvent跟踪设置应用状态
- [skip ci]
2026-01-17 13:43:15 +08:00
GeWuYou
ce6cb3f8df refactor(state): 修改状态机接口返回类型支持链式调用
- 将Register方法返回类型从void改为IStateMachine
- 将Unregister方法返回类型从void改为IStateMachine
- 在实现类中添加return this语句
- 更新接口定义以匹配新的返回类型
- 实现链式调用功能提升API易用性
2026-01-17 13:20:33 +08:00
GeWuYou
9ae0f63324 feat(setting): 添加设置事件系统和改进设置模型接口
- 新增 SettingsAllLoadedEvent 事件类,用于表示所有设置加载完成
- 新增 SettingsAppliedEvent 事件类,用于表示设置应用完成状态
- 新增 SettingsApplyingEvent 事件类,用于表示设置正在应用过程
- 新增 SettingsBatchChangedEvent 事件类,用于表示批量设置变更
- 新增 SettingsBatchSavedEvent 事件类,用于表示批量设置保存
- 新增 SettingsChangedEvent 通用设置变更事件类
- 新增 SettingsLoadedEvent 和 SettingsSavedEvent 事件类
- 在 SettingsModel 中添加对 GFramework.Core.extensions 的引用
- 更新 RegisterApplicator 方法支持链式调用并改进注释说明
- 新增 ISettingsChangedEvent 接口定义设置变更事件基础结构
- 修改 ISettingsModel 接口使 RegisterApplicator 方法支持链式调用
- 修改 ISettingsPersistence 接口继承 IContextUtility 接口
2026-01-17 13:16:50 +08:00
GeWuYou
103792f178 feat(state): 为状态基类添加销毁功能支持
- 实现 IDisposable 接口以支持资源清理
- 添加 Destroy 方法用于状态销毁和资源释放
- 在状态机切换时调用 Destroy 替代 Dispose
- 允许子类重写 Destroy 方法执行特定清理操作
- 确保状态切换时正确释放相关资源
2026-01-17 13:08:55 +08:00
GeWuYou
00053e67e5 refactor(architecture): 修改注册方法返回注册成功的实例
- 修改RegisterSystem方法返回注册的系统实例
- 修改RegisterModel方法返回注册的模型实例
- 修改RegisterUtility方法返回注册的工具实例
- 更新接口定义以匹配新的返回值类型
- 添加泛型约束说明到XML文档注释
2026-01-17 13:07:56 +08:00
GeWuYou
e656c805e8 fix(ci): 修复.NET测试报告路径配置问题
- 修改TRX日志文件名为动态格式{assembly}.trx
- 更新测试结果输出目录为GitHub工作空间路径
- 修正测试报告步骤中的路径引用以匹配实际输出位置
- [skip ci]
2026-01-17 11:51:30 +08:00
GeWuYou
047647b04a chore(workflow): 更新测试配置以指定统一输出目录
为dotnet test命令添加--results-directory参数,
将测试结果输出到./TestResults目录,
便于后续的测试报告处理和分析
2026-01-17 11:41:28 +08:00
GeWuYou
9f505061bd refactor(Architecture): 移除多余的注释标记
移除了Lifecycle Management区域中关于方案1的多余注释标记,
保留了必要的方法文档注释,使代码更加简洁清晰。
2026-01-17 11:38:04 +08:00
GeWuYou
d25b8661ae feat(.github): 添加.NET测试报告功能
- 配置dotnet test命令输出TRX格式的测试结果文件
- 集成dorny/test-reporter@v2来展示.NET测试报告
- 使用TestResults/*.trx路径匹配测试结果文件
- 采用dotnet-trx报告器格式化显示测试统计信息
2026-01-17 11:37:19 +08:00
GeWuYou
44b7a223d8 refactor(architecture): 优化组件初始化和销毁管理机制
- 将_pendingInitializableList重命名为_pendingInitializableSet并改为HashSet类型,
  实现组件去重功能
- 新增_pendingInitializableList保持组件注册顺序
- 将_disposables重命名为_disposableSet并改为HashSet类型,避免重复注册
- 新增_disposables列表保持销毁顺序
- 在添加可初始化组件时使用原子去重检查
- 在添加可销毁组件时使用原子去重检查
- 清空操作同步清理对应的Set集合
- 销毁组件时按注册逆序进行销毁,确保依赖关系正确处理
2026-01-17 11:30:39 +08:00
GeWuYou
47326085e7 fix(state): 修改状态机切换方法返回值类型并改进转换失败处理
- 将ChangeTo方法返回值从void改为bool类型
- 添加转换失败时返回false的逻辑
- 在状态转换被拒绝时调用OnTransitionRejected回调
- 更新接口定义以匹配新的返回值类型
- 修改单元测试以验证转换失败时的返回值
- [skip ci]
2026-01-17 10:06:16 +08:00
GeWuYou
f70254716b refactor(architecture): 重构架构阶段验证和初始化流程
- 修改阶段转换验证逻辑,允许从任何阶段转换到 FailedInitialization
- 调整初始化流程,确保始终进入各个阶段而不仅仅是有组件时才进入
- 重新排列阶段转换顺序,实现线性状态机模式
- 添加架构阶段线性顺序定义数组
- 更新测试用例以验证初始化失败时抛出异常的情况
2026-01-17 10:05:52 +08:00
GeWuYou
177de6d3e6 fix(ci): 更新工作流中的测试命令
- 注释掉原始的 dotnet test 命令
- 添加带过滤输出的新测试命令,只显示测试总数、通过数和失败数
- 保持测试执行的正常流程不受影响
2026-01-17 10:00:24 +08:00
GeWuYou
d8df348bec refactor(architecture): 重构架构生命周期管理和组件注册逻辑
- 添加IDisposable接口导入并优化组件生命周期管理
- 引入IInitializable和IDisposable统一管理待初始化和可销毁组件
- 实现统一的组件生命周期注册逻辑RegisterLifecycleComponent方法
- 重构InitializeAllComponentsAsync方法按类型分组初始化组件
- 更新RegisterSystem、RegisterModel和RegisterUtility方法使用新生命周期管理
- 修改Destroy方法使用新的_disposables集合进行有序销毁
- 移除旧的_mModels、_mSystems、_mContextUtilities字段
- 添加ValidateRegistration方法验证注册时机
- 重构InitializeInternalAsync方法使用新的组件初始化流程
- 移除废弃的InitializeComponentAsync方法
- 添加异常处理和错误日志记录机制
2026-01-17 09:14:04 +08:00
GeWuYou
efa069d2f5 refactor(core): 重构核心框架生命周期管理
- 引入标准化的生命周期接口体系 (IInitializable, IDisposable, ILifecycle)
- 将上下文工具类的初始化方法改为公共访问权限
- 为上下文工具类添加销毁功能和相关回调方法
- 更新模型和系统接口以使用新的生命周期接口
- 移除原有的独立初始化和销毁方法声明
- 统一框架组件的生命周期管理机制
2026-01-17 08:52:51 +08:00
GeWuYou
b6554c5820 refactor(state): 重构状态机实现以支持状态历史记录和线程安全
- 在销毁时添加当前状态退出和所有状态清理逻辑
- 向IStateMachine接口添加状态检查、获取、历史记录等新方法
- 实现线程安全的状态机,添加锁保护并发访问
- 添加状态历史记录功能,支持最大历史数量限制
- 实现GoBack状态回退功能和状态转换验证
- 添加状态切换前后的回调方法
- 在注销状态时从历史记录中移除相关引用
- 添加Unregister方法中的状态转换验证逻辑
2026-01-17 08:43:32 +08:00
GeWuYou
442e8e7088 refactor(setting): 重构设置系统以支持数据和应用器分离
- 将SettingsModel内部存储分离为_dataSettings和_applicators两个字典
- 添加IDataSettings接口用于标识纯数据设置
- 修改Get方法为GetData以明确区分数据获取
- 添加RegisterApplicator和GetApplicator方法管理可应用设置
- 更新TryGet方法支持从数据和应用器中查找设置
- 扩展SettingsPersistence支持批量保存和加载所有设置数据
- 将AudioBusMap重命名为AudioBusMapSettings并实现ISettingsData接口
- 修改Godot音频和图形设置适配新的接口变更
- [skip ci]
2026-01-16 23:44:28 +08:00
GeWuYou
516a9e2281 feat(setting): 添加设置持久化功能
- 实现了 SettingsPersistence 类提供设置数据的加载、保存、删除等操作
- 定义了 ISettingsPersistence 接口规范设置持久化行为
- 集成存储服务支持异步读写设置节数据
- 实现类型安全的设置节存取机制
- 提供设置节存在性检查和删除功能
- 采用 "Settings_类型名称" 格式生成存储键名
2026-01-16 23:25:33 +08:00
GeWuYou
66d4c8be11 docs(TEST_COVERAGE_PLAN): 更新测试覆盖清单文档
- 添加了清单更新部分,说明测试完成后需要更新进度
- 格式化文档开头的空行调整
- 新增更新日志章节
- [skip ci]
2026-01-16 15:47:59 +08:00
GeWuYou
7246fef061 doc(core-tests): 添加架构配置和上下文相关单元测试添加注释
- 添加注释
- [skip ci]
2026-01-16 13:15:52 +08:00
GeWuYou
70e16724c9 feat(test): 完成ContextAwareStateMachine的单元测试覆盖
- 创建了ContextAwareStateMachineTests.cs,包含12个测试用例
- 覆盖了状态机的集成测试、上下文感知功能、状态变更事件等核心功能
- 测试了Init方法的上下文初始化、状态变更事件发送、多状态注册等功能
- 更新测试覆盖率从~45%提升至~47%,总测试数从286个增加到298个
- 完成第一批所有5个核心
2026-01-16 12:35:50 +08:00
GeWuYou
804ccee329 feat(tests): 添加ArchitectureEventsTests测试类并更新测试覆盖率计划
- 新增ArchitectureEventsTests.cs文件,包含9个测试用例
- 覆盖架构生命周期事件、事件订阅、事件顺序等核心功能
- 测试用例包括ArchitectureLifecycleReadyEvent、ArchitectureDestroyingEvent、
  ArchitectureDestroyedEvent、ArchitectureFailedInitializationEvent等事件
- 更新TEST_COVERAGE_PLAN.md中的测试统计数据
- 测试覆盖率从44%提升至45%
- 现有测试数从277个增加到286个
- 缺失测试数相应调整为122-178个
- 已完成文件数更新为4/26个
2026-01-16 12:21:22 +08:00
GeWuYou
64f015865a feat(architecture): 添加ArchitectureServices测试并提升代码覆盖率
- 创建ArchitectureServicesTests.cs文件,包含15个测试用例
- 覆盖构造函数、服务初始化、上下文管理、接口实现验证等功能
- 验证多实例间的独立性,包括Container、EventBus、CommandBus、QueryBus
- 修改GetContext方法行为,从抛出异常改为返回null
- 测试覆盖率从42%提升至44%
- 更新测试覆盖清单文档,同步最新测试数据
- [skip ci]
2026-01-16 12:15:11 +08:00
GeWuYou
9c61486dbe docs(TEST_COVERAGE_PLAN): 添加注释规范说明
- 生成的测试类需要有注释说明这个测试类具体有哪些测试
- 测试方法需要有注释说明具体测试的是什么
- 对于复杂逻辑的测试方法,需要有标准的行注释说明逻辑,不要使用行位注释
- 对于类与方法的测试
2026-01-16 11:47:40 +08:00
GeWuYou
c84c573693 feat(architecture): 添加 ArchitectureContext 测试用例
- 新增 ArchitectureContextTests.cs 文件,包含 22 个测试用例
- 覆盖构造函数参数验证、命令/查询/事件发送功能
- 包含系统、模型、工具组件获取功能测试
- 更新测试计划文档中的测试数量统计和完成状态
- 修正测试方法命名以匹配实际实现的方法名
- 添加上下文访问安全性验证测试
- [skip ci]
2026-01-16 11:40:36 +08:00
GeWuYou
82e3bd1ec2 feat(tests): 完成ArchitectureConfigurationTests测试用例开发
- 创建ArchitectureConfigurationTests.cs文件,包含12个测试用例
- 覆盖默认配置初始化、自定义配置替换、接口实现验证等场景
- 测试日志属性和架构属性的各种配置情况
- 验证实例间属性不共享的安全性
- [skip ci]
更新测试覆盖率从41%提升至42%,完成240个测试用例
2026-01-16 11:01:15 +08:00
GeWuYou
de53fe5413 docs(test): 添加GFramework.Core模块测试覆盖详细清单
添加TEST_COVERAGE_PLAN.md文档,包含:
- 当前测试覆盖率统计(41%)和目标(85%+)
- 各子系统测试覆盖情况分析
- 26个缺失测试文件的详细规划
- 分批次执行计划和时间预估
- 预计总共180-236个测试用例
- [skip ci]
2026-01-16 10:48:39 +08:00
GeWuYou
4f1450fc9b test(state): 添加状态机和状态相关单元测试
添加了 StateMachineTests.cs 文件,包含以下测试用例:
- 验证当前状态为空时的行为
- 测试状态注册功能
- 测试状态切换功能,包括 OnEnter 和 OnExit 回调的调用
- 测试状态转换权限控制
- 测试状态注销功能
- 验证多个状态切换的回调逻辑
 添加了 StateTests.cs 文件,包含以下测试用例:
- 验证状态类实现 IState 接口
- 测试 OnEnter、OnExit 方法
- 测试 CanTransitionTo 转换规则
- 验证复杂状态转换逻辑
- [skip ci]
2026-01-16 10:18:59 +08:00
GeWuYou
941cbee0ad feat(state): 添加上下文感知状态基类
- 实现了ContextAwareStateBase类,继承IState和IContextAware接口
- 提供状态进入、退出和转换的基础功能
- 添加架构上下文的设置和获取方法
- 支持状态转换规则的自定义实现
- 包含完整的XML文档注释
2026-01-16 08:26:52 +08:00
GeWuYou
c0274074b3 feat(state): 添加状态机系统核心功能实现
- 实现了基础状态机StateMachine类,支持状态注册、切换和生命周期管理
- 创建了上下文感知状态机ContextAwareStateMachine,能够感知架构上下文并发送状态变更事件
- 定义了IState和IStateMachine抽象接口,规范状态和状态机的行为契约
- 添加了StateChangedEvent事件类,用于通知状态变更
- 实现了游戏专用状态机GameStateMachine,提供类型安全的状态检查和获取功能
2026-01-15 23:04:41 +08:00
GeWuYou
863e0a523a test(logging): 更新日志生成器快照测试中的依赖项定义
- 在测试代码中添加了完整的 LogAttribute 定义
- 添加了 ILogger 接口和相关实现类定义
- 包含 LoggerFactoryResolver 和 MockLoggerProvider 实现
- 补充了 MockLogger 类的具体实现
- 确保所有测试用例都有完整的基础依赖项定义
2026-01-15 22:11:20 +08:00
GeWuYou
6cfde41dc6 feat(events): 添加全局事件获取或添加功能
- 实现了GetOrAdd方法用于获取或添加指定类型的全局事件
- 添加了XML文档注释说明方法用途和泛型约束
- 方法支持自动创建不存在的事件实例并返回指定类型对象
2026-01-15 22:00:32 +08:00
GeWuYou
2ae26ea590 fix(events): 修复事件获取方法调用错误
- 将 EasyEvents.Get 替换为 EasyEvents.GetOrAdd 以确保事件实例正确获取
- 移除多余的 _easyEvents.GetOrAddEvent 调用避免重复初始化
- 统一事件获取方式提高代码一致性
2026-01-15 22:00:24 +08:00
GeWuYou
77502e1b91 test(property): 添加测试清理方法并改进比较器测试
- 添加TearDown方法重置默认比较器
- 修改WithComparer测试使用新的比较器验证机制
- 添加比较器调用验证断言
- 更新测试逻辑以正确验证比较器行为
2026-01-15 22:00:11 +08:00
GeWuYou
1783245d22 test(rule): 添加上下文感知测试的绑定和清理逻辑
- 在测试设置中添加 GameContext 绑定
- 添加 TearDown 方法用于解绑上下文
- 确保测试后正确清理上下文状态
2026-01-15 22:00:05 +08:00
GeWuYou
ee3a087e35 refactor(ui): 重命名页面行为接口并更新依赖包版本
- 将 IPageBehavior 接口重命名为 IUiPageBehavior 并更新相关引用
- 将 CanvasItemPageBehavior 类重命名为 CanvasItemUiPageBehavior
- 更新 Newtonsoft.Json 从 13.0.3 到 13.0.4
- 更新 NUnit3TestAdapter 从 6.0.1 到 6.1.0
- 更新 Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing 从 1.1.2 到 1.3
- 为多个项目添加 Meziantou.Analyzer 和 Meziantou.Polyfill 包引用
2026-01-15 21:33:51 +08:00
GeWuYou
d1b4ef1971 feat(godot): 添加Godot UI注册表和日志测试用例
- 实现GodotUiRegistry类用于管理PackedScene类型的UI资源注册和获取
- 添加完整的控制台日志记录器单元测试覆盖所有日志级别和功能
- 添加日志工厂相关测试用例验证不同配置下的日志行为
- 实现基础日志抽象类的完整测试覆盖各种日志记录场景
2026-01-15 20:51:06 +08:00
GeWuYou
5d11666fd8 test(core): 添加核心组件的单元测试
- 为 ContextAware 功能添加全面的单元测试覆盖
- 增加对枚举扩展生成器的快照测试验证
- 实现环境管理器的完整测试用例集
- 添加事件总线功能的核心测试验证
- 为游戏上下文管理添加架构测试
- 扩展注销列表扩展方法的测试覆盖
- 增加注销机制的全面单元测试验证
- [skip ci]
2026-01-15 14:36:30 +08:00
GeWuYou
dda2d8f864 test(core): 添加核心组件单元测试并优化目标框架配置
- 在AsyncTestModel和TestModel中添加override关键字修复方法重写
- 调整GFramework.Core.Tests和GFramework.SourceGenerators.Tests的目标框架顺序为net10.0;net8.0
- 优化SyncArchitectureTests中的注释格式,统一添加前导空格
- 移除TestQuery相关代码文件
- 新增BindablePropertyTests测试绑定属性功能
- 新增CommandBusTests测试命令总线功能
- 新增EasyEventsTests和EventTests测试事件系统功能
- 新增IocContainerTests测试依赖注入容器功能
- 新增ObjectExtensionsTests测试对象扩展方法功能
- 新增ObjectPoolTests测试对象池功能
- 新增OrEventTests测试或事件功能
- 新增QueryBusTests测试查询总线功能
- [skip ci]
2026-01-15 13:53:08 +08:00
GeWuYou
3ec1c6748b refactor(ui): 使用集合表达式初始化列表
- 将 List<IUiTransitionHandler> 的初始化从 new() 改为 []
- 简化了代码语法,提高可读性
2026-01-15 12:38:57 +08:00
GeWuYou
c931cb7d66 feat(ui): 添加CanvasItem页面行为和Godot UI工厂
- 实现CanvasItemPageBehavior类支持所有继承自CanvasItem的节点
- 添加OnEnter、OnExit、OnPause、OnResume、OnHide、OnShow页面生命周期方法
- 创建GodotUiFactory工厂类用于创建UI页面实例
- 实现Create方法根据UI键创建页面行为实例
- 重命名IUiPageProvider为IUiPageBehaviorProvider接口
- 更新接口方法GetPage返回页面行为实例的描述
2026-01-15 12:33:19 +08:00
GeWuYou
8fd7e2e952 feat(ui): 添加UI页面生命周期和路由管理相关接口及实现
- 定义了IPageBehavior接口,提供UI页面的生命周期方法如OnEnter、OnExit、OnPause、OnResume等
- 创建了IUiFactory接口用于创建UI页面实例,以及IUiPage接口定义页面基本操作
- 添加了IUiPageEnterParam接口用于定义页面跳转参数数据结构
- 实现了IUiRouter接口提供页面栈管理功能,支持Push、Pop、Replace、Clear等操作
- 创建了UI切换处理器相关接口和实现,包括IUiTransitionHandler和UiTransitionPipeline
- 添加了UI切换事件系统,支持BeforeChange和AfterChange两个执行阶段
- 实现了日志记录处理器LoggingTransitionHandler用于记录UI切换信息
- 定义了多种UI切换策略枚举如UiTransitionPolicy、UiTransitionType等
- 提供了UI注册表接口用于管理UI实例的注册和获取功能
2026-01-15 08:44:56 +08:00
GeWuYou
14894814a5 refactor(logging): 重构日志生成器代码结构
- 添加AttributeData扩展方法用于获取命名参数和构造函数参数
- 引入GenericInfo记录结构体处理泛型信息
- 将INamedTypeSymbol扩展方法转换为扩展方法语法
- 添加ResolveGenerics方法解析泛型参数和约束条件
- 简化LoggerGenerator中的参数解析逻辑
- 移除不再需要的GetNamedArg私有方法
- 优化代码可读性和维护性
2026-01-14 13:36:32 +08:00
GeWuYou
7876647871 feat(generator): 添加命名类型符号扩展方法并优化日志生成器
- 新增 INamedTypeSymbolExtensions 扩展类,提供 GetFullClassName 方法获取完整类名
- 在 LoggerGenerator 中引入命名空间扩展,支持嵌套类型完整路径解析
- 重构 LoggerGenerator 的类名和参数解析逻辑,增强代码可读性
- 添加对 record 类型的支持,完善类型判断机制
- 优化泛型参数和约束的处理方式,提升代码生成准确性
2026-01-14 13:21:54 +08:00
GeWuYou
3fb281031c feat(logging): 添加泛型类的日志生成器支持
- 添加了对泛型类的支持,包括类型参数和约束的处理
- 实现了泛型约束的代码生成功能
- 增加了对引用类型、值类型、构造函数约束的支持
- 重构了类声明的生成逻辑以支持泛型参数
- 添加了必要的命名空间引用和集合操作支持
2026-01-14 13:12:06 +08:00
GwWuYou
f781be22a9 refactor(setting): 重构音频设置系统架构
- 将 GodotAudioSettings 从继承模式改为组合模式
- 移除 GodotAudioApplier 类,统一使用 GodotAudioSettings
- 修改 GodotAudioSettings 构造函数接受 AudioSettings 和 AudioBusMap 参数
- 更新文档中的代码示例和类图关系
- 添加自定义总线映射的平滑过渡功能
- 优化音频设置的应用流程和音量转换逻辑
2026-01-12 22:01:58 +08:00
GwWuYou
fcac697663 refactor(setting): 将Godot音频设置应用逻辑合并到设置类中
- 移除独立的GodotAudioApplier类,将其功能整合到GodotAudioSettings中
- 在GodotAudioSettings类中实现音频总线音量设置逻辑
- 更新项目文件移除对已删除文件的引用
- 添加设置系统和信号连接系统的技术文档
- 完善Godot扩展方法和设置模块的使用说明
2026-01-12 21:33:42 +08:00
GwWuYou
807dbc482e feat(setting): 添加设置管理系统和Godot平台实现
- 实现了SettingsModel用于管理应用程序设置部分
- 创建了SettingsSystem用于应用各种设置配置
- 添加了AudioSettings和GraphicsSettings基础设置类
- 定义了ISettingsModel、ISettingsSystem等核心接口
- 实现了GodotAudioApplier用于应用音频设置到Godot音频系统
- 创建了GodotGraphicsSettings用于管理游戏图形显示设置
- 添加了GodotFileStorage特化文件存储实现
- 实现了Godot路径扩展方法IsUserPath、IsResPath、IsGodotPath
- 添加了AudioBusMap音频总线映射配置类
2026-01-12 21:07:27 +08:00
GeWuYou
5877dae8fe chore(build): 更新.gitignore文件
- 添加.idea/目录到忽略列表中,避免IDE相关配置文件被提交到仓库。
- [skip ci]
2026-01-12 14:55:27 +08:00
GeWuYou
32ac9e8069 refactor(GFramework.Core): 修改GameArchitecture基类继承
- 移除Architecture泛型参数,将GameArchitecture的继承从
`Architecture<GameArchitecture>`改为`Architecture`
- [skip ci]
2026-01-12 14:45:26 +08:00
GeWuYou
ca133d47f5 refactor(GFramework.Core): 修改GameArchitecture类继承关系
移除了GameArchitecture类中的泛型参数,从Architecture<GameArchitecture>
改为直接继承Architecture基类,并更新了相应的代码格式。
2026-01-12 14:44:53 +08:00
GeWuYou
396723bd68 refactor(GFramework.Core): 简化GameArchitecture类的继承实现
移除了GameArchitecture类中不必要的泛型参数,并删除了示例代码中的PlayerModel
类定义,因为AbstractModel基类已经自动实现了架构引用功能,简化了组件注册
的代码示例。
2026-01-12 14:44:35 +08:00
GeWuYou
023ba44f57 docs(pool): 完善对象池系统文档并添加使用示例
更新 GFramework.Core 对象池系统的 README 文档,增加详细的功能说明、API
参考、使用示例和最佳实践。

主要变更包括:

- 补充核心组件的详细说明和代码示例
- 添加 IPoolableObject 接口的完整定义
- 添加 IObjectPoolSystem 接口和 AbstractObjectPoolSystem 抽象类的
  详细说明
- 增加基本使用指南,包含池化对象定义和系统实现步骤
- 添加高级用法示例,如多键对象池管理和大小限制
- 补充游戏对象池、UI元素池等具体应用场景
- 添加性能优化建议和最佳实践指导
- 完善注意事项和相关包引用信息
2026-01-12 14:44:19 +08:00
GeWuYou
065f997654 refactor(logging): 更新GameArchitecture继承方式
移除了GameArchitecture类中对Architecture<GameArchitecture>的泛型继承,
改为直接继承Architecture基类,简化了架构实现并保持了相同的功能。
2026-01-12 14:44:01 +08:00
GeWuYou
96bf8a1982 refactor(ioc): 修改Architecture基类设计并更新文档
- 将Architecture基类从泛型改为非泛型设计,简化继承关系
- 移除泛型约束<T>,使架构定义更加简洁
- 更新GameArchitecture示例代码以适配新的基类设计
- 添加Contains、ContainsInstance和Clear等实用方法的详细文档
- 补充了容器实用方法的使用场景和注意事项说明
2026-01-12 14:43:40 +08:00
GeWuYou
9217c95bad refactor(command): 重命名EmptyCommentInput为EmptyCommandInput
- 将EmptyCommentInput类重命名为EmptyCommandInput以修正拼写错误
- 更新README.md文档中的相关引用和代码示例
- 移除文件开头的BOM字符
2026-01-12 14:42:22 +08:00
GeWuYou
525685c62f docs(architecture): 更新架构文档添加核心方法详细说明
- 添加 Initialize() 和 InitializeAsync() 方法的详细文档
- 补充 InstallModule 模块管理和 RegisterLifecycleHook 生命周期钩子说明
- 增加 CurrentPhase 和 Context 属性的使用示例
- 提供完整的代码示例和异常处理说明
2026-01-12 14:40:56 +08:00
GeWuYou
a8803f31be docs(GFramework.Game): 添加游戏功能模块完整文档
创建了 GFramework.Game 模块的详细 README 文档,涵盖以下核心内容:

- 模块概述和核心设计理念介绍
- 架构模块系统说明,包含 AbstractModule 使用示例
- 资产管理系统详解,包括资产目录和映射功能
- 存储系统实现,支持分层存储和缓存机制
- 序列化系统集成,基于 Newtonsoft.Json 的完整方案
- 丰富的代码示例,展示实际使用场景
- 最佳实践指南,涵盖数据模型设计和性能优化建议
- 性能特性说明和技术栈依赖关系
2026-01-12 13:40:36 +08:00
GeWuYou
de1dd9002a docs(core): 更新核心模块文档说明
- 移除架构README中接口链接的方括号标记
- 在架构README中添加构造函数参数说明和特性优化
- 移除命令README中继承能力接口的冗余说明
- 重构命令抽象基类为泛型版本并添加输入参数结构
- 更新事件README中接口引用路径和事件总线相关说明
- 重命名事件类名去掉Easy前缀统一为Event
- 更新扩展方法README为ContextAware扩展并添加新的扩展方法
- 移除控制器示例中的Godot特定生命周期方法
- 更新IOC容器README中线程安全实现和方法扩展说明
- [skip ci]
2026-01-12 11:10:41 +08:00
GwWuYou
8adce14b43 docs(pool): 添加对象池系统文档
- 创建了对象池系统的完整技术文档
- 详细说明了核心组件包括IPoolableObject接口和IObjectPoolSystem接口
- 描述了AbstractObjectPoolSystem抽象类的实现机制
- 解释了对象池的设计特点和工作原理
- 列出了对象池系统的典型使用场景
- 提供了完整的API参考和生命周期管理说明
2026-01-11 21:12:45 +08:00
GwWuYou
5d623462ce feat(pool): 添加对象池系统基础架构
- 实现了抽象对象池系统支持基于键值的对象池管理
- 定义了对象池系统接口和可池化对象接口规范
- 提供了获取、释放和清空对象池的核心功能
- 添加了Godot节点专用的对象池系统抽象类
- 实现了对象在池中生命周期管理的回调机制
2026-01-11 21:07:23 +08:00
GwWuYou
3afef8cb49 feat(storage): 添加细粒度锁机制保证线程安全
- 通过细粒度锁机制保证线程安全,每个键都有独立的锁
- 更新文档说明线程安全特性,不同键的操作可以并发执行
- 添加存储键格式说明,支持使用 / 作为分隔符创建目录层级
- 补充异步操作安全性说明,异步IO仍使用锁保证并发访问安全
2026-01-11 20:46:45 +08:00
GwWuYou
4c997ffc07 refactor(storage): 为FileStorage添加基于key的细粒度线程安全锁
- 引入ConcurrentDictionary存储每个key对应的锁对象
- 在Delete方法中添加key级别锁定确保删除操作的原子性
- 在Exists方法中使用key级别锁定保证存在性检查的线程安全
- 在Read同步方法中添加key级别锁定保护文件读取操作
- 在Write同步方法中添加key级别锁定保护文件写入操作
- 在ReadAsync异步读取方法中使用锁保护文件访问并优化异步IO
- 在WriteAsync异步写入方法中使用锁保护文件访问并优化异步IO
- 更新类注释说明支持细粒度锁的线程安全特性
- 改进XML文档注释的准确性和清晰度
2026-01-11 20:44:26 +08:00
GwWuYou
5dc4feeff2 docs(storage): 更新存储模块文档并增强文件路径安全性
- 添加了完整的 GFramework 存储模块使用指南文档
- 实现了 SanitizeSegment 方法用于清理文件段中的无效字符
- 增强了 ToPath 方法的安全性验证,防止路径逃逸攻击
- 添加了对空键值和包含 .. 字符的键的异常处理
- 实现了路径分段处理和目录自动创建功能
- 统一了路径分隔符处理,支持正斜杠和反斜杠
- 添加了详细的使用示例和注意事项说明
2026-01-11 20:38:53 +08:00
GwWuYou
c3376bf4d5 feat(storage): 添加存储系统接口和文件存储实现
- 定义了IStorage接口提供同步和异步的数据存储操作功能
- 实现了基于文件系统的FileStorage类支持读写删除操作
- 添加了ScopedStorage包装器为存储键提供作用域前缀功能
- 创建了ISerializer接口并实现JsonSerializer使用Newtonsoft.Json
- 在项目中引入Newtonsoft.Json包依赖
2026-01-11 19:56:31 +08:00
GwWuYou
7843e2a14f Merge branch 'main' of github.com:GeWuYou/GFramework 2026-01-11 11:17:41 +08:00
GwWuYou
157b3ce846 refactor(events): 将类型事件系统重构为事件总线
- 将TypeEventSystem重命名为EventBus
- 将IEasyEvent接口重命名为IEvent接口
- 将ITypeEventSystem接口重命名为IEventBus接口
- 更新Architecture类中使用TypeEventSystem为EventBus
- 更新ArchitectureContext中依赖注入参数类型
- 将EasyEvent泛型类重命名为Event泛型类
- 更新所有相关类型引用和实现
- 修改接口继承关系以使用新的事件接口命名
2026-01-11 11:17:30 +08:00
GeWuYou
4c5e3e01a3 docs(core): 更新文档说明架构与平台无关性及新特性
- 更新 Architecture 包文档,强调与 Godot 解耦设计
- 修改 IArchitecture 接口方法参数命名规范
- 添加架构阶段感知接口 IArchitecturePhaseAware 说明
- 补充架构模块接口 IArchitectureModule 和异步初始化接口说明
- 更新架构初始化流程描述,增加模块安装系统介绍
- 修订使用示例,展示依赖注入而非单例访问模式
- 更新 Logging 包文档结构,重新组织核心接口和类说明
- 添加日志工厂提供程序和解析器使用说明
- 修正 Property 包文档中的比较器使用说明
- 更新主 README 强调平台无关性和模块化设计
- 修订架构图和数据流向说明,体现阶段式生命周期管理
- [skip ci]
2026-01-10 12:45:12 +08:00
GwWuYou
8c8555985d refactor(assets): 将系统组件重构为工具组件以优化架构设计
- 重命名 AbstractAssetCatalogSystem 为 AbstractAssetCatalogUtility 并继承 AbstractContextUtility
- 重命名 IAssetCatalogSystem 为 IAssetCatalogUtility 并继承 IContextUtility 接口
- 重命名 IResourceFactorySystem 为 IResourceFactoryUtility 并继承 IContextUtility 接口
- 重命名 AbstractResourceFactorySystem 为 AbstractResourceFactoryUtility 并调整依赖注入方式
- 重命名 IResourceLoadSystem 为 IResourceLoadUtility 并继承 IContextUtility 接口
- 重命名 ResourceLoadSystem 为 ResourceLoadUtility 并更新内部日志输出信息
- 移除 AbstractAudioManagerSystem 和 IAudioManagerSystem 相关代码
- 更新所有相关依赖注入和类型引用以匹配新的工具组件架构
2026-01-09 19:31:46 +08:00
GwWuYou
38625b80db feat(core): 添加空命令和查询输入类
- 实现了EmptyCommentInput类用于表示无参数命令
- 实现了EmptyQueryInput类用于表示无参数查询
- 两个类分别实现ICommandInput和IQueryInput接口
- 提供了命令模式中输入参数的占位符实现
- 适用于不需要额外输入参数的简单操作场景
2026-01-07 22:23:05 +08:00
GwWuYou
e000665c67 feat(architecture): 添加上下文工具初始化阶段支持
- 在架构中新增 _mContextUtilities 集合存储未初始化的上下文工具
- 实现工具注册时根据初始化状态决定是否立即初始化上下文工具
- 添加 BeforeUtilityInit 和 AfterUtilityInit 两个新的架构阶段
- 更新架构阶段转换配置以支持工具初始化流程
- 在同步和异步架构测试中验证新的初始化阶段序列
- 完善架构初始化流程日志记录和调试信息
2026-01-07 21:16:43 +08:00
GwWuYou
0766416f83 feat(architecture): 添加上下文工具支持
- 注册工具时自动设置上下文
- 添加对IContextUtility类型的支持
- 集成extensions命名空间以支持类型检查
2026-01-07 20:52:50 +08:00
GeWuYou
cfdeb4649b style(core): 统一泛型参数命名规范并完善测试代码
- 将 EasyEvent 类中的泛型参数 Tk 统一改为 TK,保持命名一致性
- 更新所有使用 Tk 的地方为 TK,包括字段、方法参数和触发方法
- 在测试方法末尾添加 return 语句,提高代码可读性
- [skip ci]
2026-01-06 13:05:55 +08:00
GeWuYou
4f01828543 refactor(architecture): 重构架构基类和模型实现
- 移除 Architecture 类中关于业务操作方法的注释说明
- 更新 AsyncTestModel 继承 AbstractModel 并移除上下文设置相关方法
- 添加 ITestModel 接口定义用于测试模型
- 在 SyncArchitectureTests 中添加事件接收和取消注册功能测试
- 创建 TestEvent 和 EmptyEvent 用于事件系统测试
- 修改 TestModel 继承 AbstractModel 并实现 ITestModel 接口
- 添加 TestQuery 类用于测试查询操作功能
- [skip ci]
2026-01-06 12:07:03 +08:00
GwWuYou
e23a53c3d4 feat(template): 添加控制器类模板并更新项目配置
- 添加了控制器类模板文件 ControllerTemplate.cs
- 在项目文件中添加 Godot 目录的排除规则
- 更新项目引用和编译排除规则
- 统一项目配置中的路径格式
- 添加控制器模板的元数据信息
- [skip ci]
2026-01-04 22:50:37 +08:00
GwWuYou
f87c9cf421 style(csharp): 格式化代码样式和优化代码结构
- 统一调整代码注释的缩进格式,保持文档注释的一致性
- 简化对象初始化语法,移除不必要的参数名称指定
- 优化条件语句结构,移除多余的花括号
- 调整方法实现格式,使用表达式主体语法简化代码
- 标准化代码缩进和空格使用,提升代码可读性
- [skip ci]
2026-01-04 22:14:34 +08:00
GwWuYou
18267e7c14 feat(command): 为命令和查询类添加输入参数支持
- 重构 AbstractCommand 类,添加泛型参数 TInput 并要求实现 ICommandInput 接口
- 修改 AbstractCommand.Execute 方法,传入输入参数到 OnExecute 方法
- 重构 AbstractCommand<TInput, TResult> 类,支持输入参数和返回结果
- 更新 AbstractQuery 类,添加泛型参数 TInput 和 TResult 并要求实现 IQueryInput 接口
- 创建 ICommandInput 接口作为命令输入的标记接口
- 创建 IQueryInput 接口定义查询输入规范
- 为所有抽象方法添加参数文档注释
2026-01-04 22:10:46 +08:00
GwWuYou
029f3a4652 refactor(model): 优化模型架构上下文设置机制
- 移除通过反射调用SetArchitecture方法的方式
- 改为直接调用model.SetContext(Context)方法
- 将AbstractModel基类继承ContextAwareBase
- 删除手动实现的SetContext和GetContext方法
- 简化模型注册流程,提高代码可读性
2026-01-03 22:10:56 +08:00
GwWuYou
49ceb35156 feat(architecture): 添加环境配置支持并重构架构初始化
- 引入IEnvironment接口和EnvironmentBase抽象类实现环境管理
- 在Architecture类中添加environment参数和Environment属性
- 修改ArchitectureContext构造函数以接收环境对象
- 添加DefaultEnvironment默认环境实现类
- 更新ContextAwareExtensions扩展方法支持环境获取
- 移除NoopLogger和NoopLoggerFactory无操作日志类
- 重构架构初始化流程以包含环境初始化
- 添加GetEnvironment扩展方法用于获取环境对象
2026-01-03 21:44:22 +08:00
GwWuYou
4adf3f11d4 refactor(godot): 调整命名空间和导入语句
- 移除 GFramework.Godot.Abstractions.assets 命名空间引用
- 添加 System 和 System.Collections.Generic 导入
- 统一使用 GFramework.Godot.assets 命名空间
- 修正 AbstractResourceFactorySystem 中的导入引用
- 更新 IResourceLoadSystem 的命名空间定义
- 调整 ResourceLoadSystem 的导入顺序
2026-01-03 20:24:31 +08:00
GwWuYou
ba8e9b5bb3 refactor(ResourceFactorySystem): 更新资源工厂系统依赖注入
- 添加 System 命名空间引用
- 将 _assetCatalogSystem 替换为 _resourceLoadSystem
- 保持原有的资产目录系统注入逻辑
2026-01-03 13:23:48 +08:00
GwWuYou
0c9063a5fd refactor(architecture): 移除架构运行时并使用命令查询总线
- 移除了 IArchitectureRuntime 接口和 ArchitectureRuntime 类
- 在 ArchitectureContext 中添加了对 ICommandBus 和 IQueryBus 的依赖注入
- 修改 Architecture 类以使用 CommandBus 和 QueryBus 替代 Runtime
- 更新 ArchitectureServices 以提供 CommandBus 和 QueryBus 服务
- 将组件初始化逻辑从 if-else 改为 switch 语句
- 更新 ContextAwareBase 以使用新的 GetFirstArchitectureContext 方法
- 添加了 CommandBus 和 QueryBus 的实现类
- 修复了 Godot 模块中系统获取的重复代码问题
2026-01-03 12:07:32 +08:00
GwWuYou
f88f90f394 feat(signal): 为SignalBuilder添加连接标志参数支持
- 为To方法添加GodotObject.ConnectFlags参数,默认为null
- 为ToAndCall方法添加GodotObject.ConnectFlags参数,默认为null
- 重构连接逻辑使用合并后的标志值
- 更新XML文档注释包含新参数说明
2026-01-02 21:37:00 +08:00
GwWuYou
98f343d78e feat(signal): 添加信号连接并立即调用功能
- 实现 ToAndCall 方法连接信号到指定可调用对象
- 支持传递参数并在连接后立即执行调用
- 返回当前构建器实例以支持链式调用
- 完善方法注释文档说明功能用途
- 保持原有 API 结构不变确保兼容性
2026-01-02 21:30:15 +08:00
GwWuYou
2bc5a08d74 refactor(signal): 将SignalBuilder的参数类型从Node改为GodotObject
- 修改SignalBuilder构造函数参数类型从Node为GodotObject
- 修改SignalBuilder.End()方法返回类型从Node为GodotObject
- 修改SignalFluentExtensions.Signal扩展方法参数名和类型从Node为GodotObject
- 更新XML文档注释中的参数描述
2026-01-02 21:14:36 +08:00
GwWuYou
cacd82d7b7 refactor(signal): 优化 SignalBuilder 的 To 方法实现
- 将方法功能描述从"将信号连接到指定的处理方法"更新为"连接信号到指定的可调用对象"
- 为 To 方法添加返回值类型 SignalBuilder 以支持链式调用
- 简化连接逻辑,移除不必要的 if-else 分支
- 添加 End 方法用于返回目标节点
- 更新参数说明文档
2026-01-02 20:46:53 +08:00
GwWuYou
cb17d9ecdd refactor(ci): 优化 GitHub Actions 发布工作流
- 使用 softprops/action-gh-release 替换 actions/create-release
- 简化发布创建和资产上传流程
- 移除手动 curl 上传 .nupkg 文件的复杂脚本
- 直接通过 files 参数支持通配符上传所有包文件
- 保持发布描述和版本信息功能
- 减少工作流步骤数量,提高可维护性
2026-01-02 20:31:22 +08:00
GwWuYou
a34aa2388a feat(signal): 添加信号连接构建器和流畅API扩展
- 实现 SignalBuilder 类用于流畅方式连接 Godot 信号
- 提供 WithFlags 方法设置连接标志
- 提供 To 方法将信号连接到指定处理方法
- 添加 SignalFluentExtensions 扩展方法提供流畅API
- 支持通过扩展方法创建信号构建器实例
2026-01-02 20:22:28 +08:00
GwWuYou
330a06c018 chore(workflow): 调整自动标签工作流中的条件判断顺序
- 交换了 "[skip]" 和 "[no tag]" 关键词的检查顺序
- 保持了原有的跳过标签创建的功能逻辑
- 优化了条件判断的可读性
- [skip]
2026-01-02 13:55:36 +08:00
GwWuYou
3a2ec6f7fc chore(workflow): 移除自动标签工作流中的跳过发布检查
- 从条件判断中移除了 [skip release] 关键词检查
- 保留了 [no tag] 和 [skip] 关键词的跳过逻辑
- 简化了提交信息的跳过条件判断流程
- [skip]
2026-01-02 13:52:52 +08:00
GwWuYou
4022600cb1 chore(workflow): 更新自动标签跳过关键词检测逻辑
- 修改跳过关键词检测条件,支持 [skip release] 标记
- 保持对 [no tag] 和 [skip] 标记的兼容性
- 优化条件判断表达式结构
2026-01-02 13:49:46 +08:00
GwWuYou
0a70cbfb86 chore(workflow): 调整自动标签工作流中的日志输出格式
- 修复了最后提交信息日志的缩进格式
- 统一了工作流中的代码缩进风格
- [skip]
2026-01-02 13:47:28 +08:00
GwWuYou
dad9e88ce4 fix(ci): 修复自动标签工作流中的跳过条件匹配
- 修正了正则表达式以正确匹配跳过标签的关键词
- 简化了条件判断逻辑,提高脚本可读性
- 移除了多余的换行和格式问题
- 保持了原有的跳过功能但优化了实现方式
- [skip]
2026-01-02 13:46:16 +08:00
GwWuYou
14d8fbbdd8 chore(workflow): 更新工作流配置以支持跳过关键词和发布动作版本
- 添加 [skip] 关键词支持以跳过标签创建
- 将发布工作流中的 create-release 动作从 v1 更新到 v2
- 保持现有的 [skip release] 和 [no tag] 关键词功能
- [skip]
2026-01-02 13:42:51 +08:00
GwWuYou
ef7d53dfb6 refactor(architecture): 优化模块安装日志输出
- 移除模块名称后缀的".Module",保持日志简洁一致
- 统一安装前后的日志格式
- 提高日志可读性,便于调试和监控
2026-01-02 13:37:55 +08:00
GwWuYou
8bccd0fa7f refactor(architecture): 优化模块安装日志记录
- 提取模块类型名称到局部变量以避免重复调用
- 统一使用变量名简化日志消息中的模块名称引用
- 保持原有日志功能不变,仅优化代码结构
2026-01-02 13:37:11 +08:00
GwWuYou
3b8671d22d chore(workflow): 优化自动标签和发布工作流配置
- 调整 auto-tag 工作流触发条件,仅在 push 事件时执行
- 添加并发控制组配置避免重复执行
- 优化标签版本获取逻辑,使用 git tag 命令替代 describe
- 修复版本号解析方式,使用 IFS 分割替代 cut 命令
- 添加标签存在性检查,避免重复创建相同标签
- 为 publish 工作流添加详细功能注释和说明
- 优化 NuGet 包推送步骤的描述信息
- 改进 GitHub Release 创建和资产上传的注释说明
2026-01-02 13:32:35 +08:00
GwWuYou
f7542cbc98 feat(workflow): 为自动标签工作流添加.NET测试步骤
- 在auto-tag.yml中添加.NET环境设置步骤
- 添加NuGet包缓存配置以优化构建性能
- 添加依赖项恢复、构建和测试步骤
- 从publish.yml中移除重复的依赖项恢复和测试步骤
- 优化工作流配置以提高构建效率
2026-01-02 13:18:12 +08:00
GwWuYou
6b8a8660ef feat(logging): 更新 Godot 日志记录器实现
- 添加时间戳格式化到日志前缀中
- 为日志级别字符串添加右对齐格式
- 将异常信息直接追加到日志消息中
- 更新致命错误、错误、警告和普通日志的输出方法
- 添加了更详细的日志格式包括时间戳、级别和名称
2026-01-02 12:52:58 +08:00
GwWuYou
333cefa84e refactor(logging): 优化日志记录器的类型名称获取方式
- 修复了Architecture模块安装时的日志记录器类型名称
- 统一了IocContainer中日志记录器的类型名称获取逻辑
- 重构了AbstractSystem中日志记录器的类型名称处理
- 改进了AbstractContextUtility中日志记录器的类型名称获取
- 通过变量缓存避免重复调用GetType().Name提高性能
2026-01-02 12:50:22 +08:00
GwWuYou
e543ef9baf refactor(tests): 提取架构初始化失败断言方法
- 添加 ArchitecturePhase 枚举的 using 引用
- 提取 AssertInitializationFailed 方法用于验证初始化失败状态
- 简化 AddPostRegistrationHook 中的 lambda 表达式语法
- 使用新提取的断言方法替换重复的断言逻辑
2026-01-02 12:20:17 +08:00
GwWuYou
e19f4ce5a1 refactor(architecture): 重构架构初始化方法和测试基类
- 将InitializeAsync方法改为真正的异步方法并正确等待内部初始化
- 移除多余的返回语句以符合异步模式
- 创建TestArchitectureBase基类来统一测试架构的公共功能
- 将AsyncTestArchitecture和SyncTestArchitecture继承自TestArchitectureBase
- 移除重复的属性和方法实现
- 添加完整的异步架构测试用例
- 包括组件初始化、阶段转换、异常处理等测试场景
2026-01-02 12:17:15 +08:00
GwWuYou
3729e2ead2 feat(architecture): 添加架构初始化失败处理和阶段转换规则
- 将 CurrentPhase 属性改为公共读取私有设置
- 在 Initialize 和 InitializeAsync 方法中添加异常处理机制
- 添加 ArchitectureFailedInitializationEvent 事件类型
- 定义架构阶段转换规则,支持失败初始化状态转换
- 添加 FailedInitialization 枚举值
- 在同步测试架构中添加后注册钩子功能
- 重构测试基类,移除重复的测试方法
- 添加架构初始化失败时的错误日志记录
- 实现初始化失败时自动进入 FailedInitialization 阶段
2026-01-02 11:49:12 +08:00
GwWuYou
78da01878b test(architecture): 添加异步架构测试并重构测试基类
- 创建 AsyncTestArchitecture 类用于异步测试
- 添加 AsyncTestSystem 实现异步初始化系统
- 创建 ArchitectureTestsBase 基类统一同步异步测试逻辑
- 实现 AsyncArchitectureTests 异步架构测试用例
- 将同步测试重构为继承自 ArchitectureTestsBase
- 移除重复的测试方法实现
- 重命名模型初始化状态属性为 Initialized
2026-01-02 10:53:55 +08:00
GwWuYou
67b0e83da4 refactor(architecture): 重构架构初始化逻辑并添加异步支持
- 修改模块安装日志格式,添加.Module后缀
- 重命名_mInited字段为_mInitialized以提高语义清晰度
- 将EnterPhase方法设为protected virtual以支持继承扩展
- 将阶段变更通知的日志级别从Debug调整为Trace
- 为NotifyPhase方法添加生命周期钩子的日志记录
- 实现同步和异步初始化方法(Initialize和InitializeAsync)
- 创建InitializeComponentAsync方法统一处理组件初始化逻辑
- 重构InitializeInternalAsync方法实现完整的异步初始化流程
- 重命名测试架构类TestArchitecture为SyncTestArchitecture
- 添加异步测试模型AsyncTestModel用于验证异步初始化功能
- 添加失败模型FailingModel用于测试异常处理机制
- 重命名系统测试类的初始化和销毁状态属性
- 创建新的同步架构测试类SyncArchitectureTests替代原有测试
- 删除已过时的ArchitectureInitializationTests测试类
2026-01-02 10:39:52 +08:00
GwWuYou
6475d2c421 fix(logging): 调整日志级别输出方法
- 将 Fatal 级别日志从 PrintErr 改为 PushError
- 重新排列 switch 语句中的 case 顺序
- 确保 Fatal 和 Error 级别使用正确的 Godot 日志方法
2026-01-02 09:58:43 +08:00
GwWuYou
45ba75c0ad refactor(architecture): 重构抽象架构类的初始化和锚点管理
- 添加架构配置、服务和上下文依赖注入支持
- 将静态架构锚点名称改为动态实例字段
- 实现基于类型名称和哈希码的唯一锚点命名机制
- 更新锚点创建和生命周期绑定逻辑
- 移除硬编码的常量名称,提高架构实例唯一性
2026-01-01 22:58:56 +08:00
GwWuYou
2f5af5c067 refactor(architecture): 移除架构上下文中的日志属性依赖
- 从 ArchitectureContext 构造函数中移除 LoggerProperties 参数
- 更新 Architecture 类中上下文初始化逻辑,不再传递日志属性
- 优化事件系统中的空值安全处理
- 修正 EasyEvent 泛型类中的类型参数命名
- 移除不再需要的 IsExternalInit 内部实现
- 更新包引用配置添加 PrivateAssets 属性
2026-01-01 22:13:06 +08:00
GwWuYou
0599f289f0 refactor(godot): 重构资源工厂系统架构
- 移除 IArchitecturePhaseAware 接口依赖
- 将 OnArchitecturePhase 方法改为重写基类方法
- 添加 Godot 模块命名空间占位类型
- 移除项目中未使用的 NUnit 包引用
2026-01-01 21:48:21 +08:00
GwWuYou
f620dea073 refactor(architecture): 重构日志系统和配置属性结构
- 将日志工厂配置改为日志属性配置,使用LoggerProperties替代ILoggerFactory
- 引入ArchitectureProperties替代ArchitectureOptions,统一架构配置属性
- 修改日志记录器创建方式,使用LoggerFactoryResolver.Provider统一管理
- 重构控制台日志工厂提供程序接口,移除minLevel参数
- 更新架构配置接口和上下文接口中的日志相关属性
- 移除Godot日志生成器相关的源代码生成器和特性
- 更新源代码生成器中的日志创建逻辑,使用新的日志工厂解析器
2026-01-01 21:39:08 +08:00
GwWuYou
435c3398fc feat(logging): 添加日志级别配置和工厂提供程序
- 为 ILoggerFactory 接口添加 minLevel 参数支持
- 实现 ConsoleLoggerFactoryProvider 和 GodotLoggerFactoryProvider
- 创建 LoggerFactoryResolver 用于管理日志工厂提供程序
- 为 NoopLoggerFactory 添加日志级别参数
- 在 LogAttribute 中添加 MinLevel 属性
- 更新项目引用以支持日志级别配置功能
2026-01-01 20:37:12 +08:00
GwWuYou
42d6590edd refactor(generator): 重构ContextAwareGenerator实现
- 移除IContextAware接口的继承要求
- 添加partial关键字检查验证
- 更新诊断规则描述和错误消息
- 修改代码生成逻辑以自动实现IContextAware接口
- 调整Analyzer发布文档格式和链接地址
2026-01-01 10:55:13 +08:00
GeWuYou
95add80c6d refactor(ioc): 修改RegisterPlurality方法的参数类型和实现逻辑
- 将RegisterPlurality方法的泛型参数改为object类型
- 移除类型约束检查逻辑
- 简化接口类型获取逻辑
- 添加容器冻结检查注释
- 添加类型重复注册检查注释
- 移除调试日志输出
2025-12-31 13:30:27 +08:00
GeWuYou
2cfa78b91d feat(architecture): 添加架构阶段感知能力支持
- 在AbstractModel和AbstractSystem中添加OnArchitecturePhase虚方法实现
- 修改Architecture类移除IArchitectureLifecycle接口和OnPhase方法
- 更新IModel和ISystem接口继承IArchitecturePhaseAware接口
- 修改AbstractResourceFactorySystem实现IArchitecturePhaseAware接口
- 在测试类TestModel和TestSystem中添加OnArchitecturePhase方法实现
- 在项目文件中添加对生成器相关目录的排除配置
- 将ArchitecturePhase枚举引入到相关文件中
2025-12-31 12:42:06 +08:00
GwWuYou
4e035295ca feat(core): 添加对象类型判断扩展方法
- 实现 IfType 方法支持类型匹配时执行操作
- 添加 IfType 泛型方法支持类型匹配时返回计算结果
- 提供 As 扩展方法用于安全类型转换
- 实现 Do 方法支持链式调用操作
- 添加 SwitchType 方法支持运行时类型分派处理
- 提供类型条件判断和多分支处理功能
- 完善方法注释和使用示例文档
2025-12-30 21:42:44 +08:00
GwWuYou
806f9163be feat(architecture): 添加抽象模块基类
- 创建AbstractModule抽象类实现IArchitectureModule接口
- 提供OnPhase和OnArchitecturePhase虚方法供子类重写
- 定义Install抽象方法强制子类实现模块安装逻辑
- 为架构模块提供统一的基础功能实现
2025-12-30 21:18:33 +08:00
GwWuYou
f022f25ae6 refactor(architecture): 优化架构上下文清理机制
- 将测试专用的 ResetForTests 方法重命名为 Clear 并改为公共方法
- 在测试初始化时添加上下文清理确保测试环境纯净
- 在测试清理时使用 try-finally 确保架构正确销毁和上下文清理
- 修复了架构对象可能未正确清理的潜在问题
2025-12-30 19:03:58 +08:00
GwWuYou
8a01178cc4 refactor(generator): 将GameContext类改为静态类
- 修改GameContext为静态类以符合设计要求
- 保持原有的架构上下文功能不变
- 优化类的访问方式和内存使用
2025-12-30 18:56:25 +08:00
GwWuYou
0be919d8b1 feat(architecture): 添加架构上下文管理和绑定功能
- 在Architecture类中添加GameContext.Bind调用以绑定架构上下文
- 创建GameContext类用于管理架构上下文实例的注册和获取
- 实现架构上下文的绑定、获取、查找和移除功能
- 更新ContextAwareGenerator生成器以使用懒加载方式获取上下文
- 在测试架构中添加就绪事件注册功能
- 添加架构上下文按类型注册的测试用例
2025-12-29 23:11:50 +08:00
GwWuYou
56ff201f94 feat(architecture): 为架构服务添加上下文支持并改进事件系统
- 在 ArchitectureServices 中添加 SetContext 和 GetContext 方法
- 为 IArchitectureServices 接口添加 IContextAware 继承
- 在架构初始化过程中设置服务上下文
- 将事件系统的 GetEvent 方法替换为 GetOrAddEvent 方法
- 重构测试类添加测试装置和拆卸逻辑
- 为测试类添加 NonParallelizable 特性确保测试隔离
2025-12-29 21:42:52 +08:00
GwWuYou
8130cf7fb0 refactor(ioc): 重构依赖注入容器和模型上下文管理
- 将IocContainer的Init方法重命名为OnContextReady并设为protected override
- 重构AbstractModel中的Architecture字段为_context属性并实现IContextAware接口
- 移除GetArchitecture和SetArchitecture方法,添加GetContext和SetContext方法
- 为IModel接口添加IContextAware继承
- 添加TestArchitecture、TestModel和TestSystem测试类
- 创建ArchitectureInitializationTests测试用例验证组件初始化
- 更新项目文件添加NUnit包引用和测试项目配置
- 在解决方案文件中添加测试项目引用
2025-12-29 21:14:23 +08:00
GwWuYou
603b06325d refactor(source-generators): 优化ContextAware生成器实现并添加快照测试
- 为ContextAwareGenerator添加详细的XML文档注释
- 简化接口验证逻辑,合并条件判断语句
- 修正特性数据参数命名,统一使用attr命名
- 为接口实现方法添加global::前缀以确保类型解析正确
- 移除未使用的回退方法体,简化方法实现逻辑
- 新增GeneratorSnapshotTest通用快照测试类
- 添加ContextAwareGeneratorSnapshotTests快照测试
- 移除原有的硬编码期望值测试方法
- 修正接口实现中的全局命名空间前缀格式
2025-12-29 20:30:54 +08:00
GwWuYou
02e2e31e95 feat(core): 添加上下文感知扩展方法并完善架构上下文接口
- 新增 ContextAwareExtensions 扩展类,提供便捷的上下文访问方法
- 为 IContextAware 接口添加 GetContext 方法以获取架构上下文
- 更新 ContextAwareBase 基类实现 GetContext 方法
- 改进源代码生成器的 Generate 方法参数结构
- 重构 ContextAwareGenerator 生成器实现接口方法自动实现
- 更新单元测试以验证新生成的上下文感知代码正确性
2025-12-29 20:06:25 +08:00
GwWuYou
e808a0c365 refactor(generators): 移除枚举扩展生成器中的自动生成标记
- 移除了 IsX 方法中注释的 Auto-generated 前缀
- 移除了 IsIn 方法中注释的 Auto-generated 前缀
- 保持了注释的中文描述内容不变
- 简化了生成代码的注释格式
- [no tag]
2025-12-28 17:21:30 +08:00
GwWuYou
75dfb0a942 refactor(generators): 重构枚举扩展生成器基类实现
- 将 EnumExtensionsGenerator 的基类从 MetadataAttributeClassGeneratorBase 改为 AttributeEnumGeneratorBase
- 修改 AttributeMetadataName 为静态私有字段
- 重写 ResolveAttribute 方法用于解析属性数据
- 更新 ValidateSymbol 方法参数类型为 EnumDeclarationSyntax
- 调整命名空间生成逻辑,简化条件判断
- 重构 AttributeEnumGeneratorBase 基类实现
- 添加 ResolveAttribute 抽象方法用于属性解析
- 改进 Initialize 方法中的语法提供程序逻辑
- 添加 GetHintName 虚方法用于生成文件名提示
2025-12-28 17:13:07 +08:00
GwWuYou
539d285faa refactor(assets): 移除IAssetCatalogSystem接口中的异常文档注释
- 移除RegisterSceneUnit方法的InvalidOperationException异常文档
- 移除RegisterScenePage方法的InvalidOperationException异常文档
- 为SourceGenerators.Abstractions项目启用可空引用类型支持
- 在测试中禁用GF_Common_Trace_001诊断警告
2025-12-28 16:41:40 +08:00
GwWuYou
8b42c6c005 docs(generator): 更新AttributeClassGeneratorBase文档
- 添加编译对象参数说明
- [no tag]
2025-12-28 16:17:51 +08:00
GwWuYou
3262e111f4 refactor(generator): 重构源代码生成器基础类和诊断功能
- 为 ValidateSymbol 方法添加 Compilation 参数以支持类型解析
- 实现基于 Compilation 的接口类型验证,替代字符串比较方式
- 添加源代码生成器跟踪诊断功能,便于调试生成过程
- 在 AttributeClassGeneratorBase 中增加详细的执行流程跟踪日志
- 更新诊断描述符配置,添加跟踪信息的诊断支持
- 优化 ContextAwareGenerator 中的接口验证逻辑
2025-12-28 16:17:08 +08:00
GwWuYou
414e49c413 refactor(generators): 重构源代码生成器基类架构
- 将 AttributeClassGeneratorBase 抽象基类拆分为 MetadataAttributeClassGeneratorBase 和 TypeAttributeClassGeneratorBase
- 为 GodotLoggerGenerator 实现 TypeAttributeClassGeneratorBase 基类
- 为 EnumExtensionsGenerator 实现 MetadataAttributeClassGeneratorBase 基类
- 为 LoggerGenerator 实现 TypeAttributeClassGeneratorBase 基类
- 为 ContextAwareGenerator 实现 MetadataAttributeClassGeneratorBase 基类
- 添加 ContextAwareGenerator 中对 IContextAware 接口实现的验证逻辑
- 简化 AttributeClassGeneratorBase 中的语法提供程序实现
- 移除 AttributeClassGeneratorBase 中的异常处理和错误输出逻辑
- 优化属性解析机制,使用元数据名称或类型进行特性查找
2025-12-28 16:08:24 +08:00
GwWuYou
af24a64d3b refactor(ContextAwareGenerator): 移除接口实现检查逻辑
- 删除了对IContextAware接口实现的验证代码
- 简化了ContextAwareGenerator的检查逻辑
- 移除了相关的诊断报告功能
2025-12-28 15:41:12 +08:00
GwWuYou
d73be1e15e refactor(architecture): 调整命名空间结构并添加必要引用
- 将 ArchitecturePhase 枚举移至 enums 命名空间
- 在多个架构相关文件中添加 enums 命名空间引用
- 修复 IController 接口中的错误命名空间声明
- 统一架构组件的命名空间组织结构
2025-12-28 15:13:11 +08:00
GwWuYou
6b87c537b2 chore(build): 更新项目配置以启用包打包功能
- 移除 GFramework.Core 项目引用中的 PrivateAssets="all" 属性
- 移除 GFramework.Game 项目引用中的 PrivateAssets="all" 属性
- 将 GFramework.Core.Abstractions 项目的 IsPackable 设置替换为 PackageId
- 将 GFramework.Game.Abstractions 项目的 IsPackable 设置替换为 PackageId
- 更新项目注释以反映新的配置变化
2025-12-28 14:37:30 +08:00
GwWuYou
f2fb8942b7 chore(build): 统一使用 AssemblyName 变量简化项目配置
- 将 PackageId 属性从硬编码名称改为 GeWuYou.$(AssemblyName) 模式
- 更新 GFramework.Godot 项目移除重复的 Product 属性
- 修改源代码生成器项目中的 ProjectReference 路径使用 AssemblyName 变量
- 更新源代码生成器项目中 DLL 文件引用使用 AssemblyName 变量
- 调整 targets 文件引用使用 AssemblyName 变量保持一致性
- 消除项目配置中的硬编码依赖提高维护性
2025-12-28 14:25:33 +08:00
GwWuYou
6b8e1fe66e chore(build): 统一项目引用和包依赖配置
- 将项目引用从硬编码路径改为使用 $(AssemblyName) 变量
- 为所有项目引用添加 PrivateAssets="all" 属性
- 在 GFramework.Godot 项目中添加缺失的抽象层引用
- 更新源代码生成器测试项目的包依赖配置
- 添加 Microsoft.CodeAnalysis 和 Microsoft.CodeAnalysis.CSharp.Workspaces 包引用
2025-12-28 14:22:03 +08:00
GwWuYou
9ad300159f chore(license): 更新版权信息
- 将版权年份更新为 2025
- 将版权持有者名称更新为 GeWuYou
- 保持 Apache License 2.0 许可证条款不变
- [no tag]
2025-12-28 13:54:22 +08:00
GwWuYou
eed07a1a4b refactor(constants): 将路径常量类移动到通用模块并更新引用
- 将 PathContests 类从 GFramework.SourceGenerators.constants 移动到 GFramework.SourceGenerators.Common.constants
- 删除旧的 GFramework.Godot.SourceGenerators.constants.PathContests 文件
- 更新 GodotLoggerGenerator 中的命名空间引用
- 更新 LoggerGenerator 和 ContextAwareGenerator 的常量引用
- 为 PathContests 类添加详细的 XML 文档注释
- 扩展 PathContests 类,添加多个模块的命名空间常量定义
2025-12-28 13:45:37 +08:00
GwWuYou
bc462987af refactor(logging): 重构Godot日志生成器实现
- 将日志生成器注释从LogAttribute更新为GodotLogAttribute
- 移除冗余的常量定义AttributeShortName
- 优化语法提供程序的查询逻辑,简化LINQ表达式
- 更新方法注释,明确源生成器初始化功能
- 简化属性数据获取逻辑,使用更直接的LINQ查询
- 优化代码生成部分的变量命名,提高可读性
- 改进错误处理的代码生成格式,统一命名规范
- 移除不必要的空行和注释,精简代码结构
2025-12-28 13:39:38 +08:00
GwWuYou
00704b7ec2 refactor(architecture): 重构项目结构并移除抽象层
- 移除 GFramework.Godot.Abstractions 项目及其所有配置文件
- 将抽象接口直接合并到 GFramework.Godot 项目中
- 更新项目引用关系,移除不必要的抽象层依赖
- 调整命名空间引用,统一使用 GFramework.Godot.architecture
- 简化模块参数命名,提升代码可读性
- 更新解决方案配置,移除已删除的项目配置
2025-12-28 13:34:20 +08:00
GwWuYou
7299126a18 refactor(assets): 将资源相关抽象移至专用模块
- 将 AssetCatalog.cs、IAssetCatalogSystem.cs、IResourceFactorySystem.cs 和
  ResourceFactory.cs 从 GFramework.Game 移至 GFramework.Game.Abstractions
- 在 GFramework.Game 项目中添加对 GFramework.Game.Abstractions 的引用
- 更新 AbstractAssetCatalogSystem.cs 以使用新的命名空间引用
- 在 GFramework.Godot 项目中添加对 GFramework.Game.Abstractions 的引用
- 更新 ResourceLoadSystem.cs 以使用新的命名空间并修正命名空间声明
- 在解决方案文件中注册新的 GFramework.Game.Abstractions 项目
- 为 GFramework.Game.Abstractions 项目添加 Directory.Build.props 配置文件
- 在主项目文件中排除新抽象模块的编译和资源文件以避免重复包含
2025-12-28 13:24:29 +08:00
GwWuYou
1a13809bae refactor(godot): 将Godot抽象接口移动到独立项目
- 将IGodotModule接口从GFramework.Godot移动到GFramework.Godot.Abstractions
- 将IResourceLoadSystem接口从GFramework.Godot移动到GFramework.Godot.Abstractions
- 将IAudioManagerSystem接口从GFramework.Godot移动到GFramework.Godot.Abstractions
- 在相关系统类中添加对GFramework.Godot.Abstractions的引用
- 在解决方案文件中添加GFramework.Godot.Abstractions项目引用
- 创建Directory.Build.props和项目配置文件支持抽象层构建
2025-12-28 13:12:08 +08:00
GwWuYou
a191228d85 refactor(source-generators): 重构命名空间引用和代码生成逻辑
- 将硬编码的命名空间路径替换为常量类中的动态引用
- 添加 PathContests 常量类统一管理框架命名空间
- 更新 LoggerGenerator 使用动态命名空间引用
- 重构 ContextAwareGenerator 生成的代码格式和命名空间引用
- 为 ContextAware 生成的属性添加 XML 文档注释
- 简化 ContextAware 生成文件的路径命名规则
- 更新测试代码以匹配新的命名空间引用方式
2025-12-28 12:39:11 +08:00
GwWuYou
14c7dadee2 refactor(logging): 统一日志记录器的根日志名称引用
- 将 ConsoleLogger 中的 ILogger.RootLoggerName 替换为 RootLoggerName
- 将 NoopLogger 中的 ILogger.RootLoggerName 替换为 RootLoggerName
- 将 GodotLogger 中的 ILogger.RootLoggerName 替换为 RootLoggerName
- 更新 ContextAwareGenerator 生成的文件路径格式,包含完整命名空间路径
2025-12-28 12:06:10 +08:00
GwWuYou
1bab3b68da fix(logging): 修复日志模块的命名空间引用问题
- 添加了 GFramework.Core.Abstractions.logging 的 using 语句到 AbstractLogger.cs
- 添加了 System 的 using 语句到 ILogger.cs
- 移除了 GFramework.Core.Abstractions.csproj 中无效的 TargetFramework 空标签
- 解决了日志模块的依赖引用问题
2025-12-28 11:49:57 +08:00
GwWuYou
8496bf43bb refactor(logging): 重构日志系统抽象和目标框架配置
- 将 RootLoggerName 常量从接口移至具体实现类 AbstractLogger
- 在 AbstractLogger 中添加 IsEnabledForLevel 方法的完整实现
- 更新 ILogger 接口移除 IsEnabledForLevel 的默认实现
- 统一所有项目的目标框架为 netstandard2.0
- 修正命名空间引用确保日志相关类型正确导入
- 添加详细的 XML 文档注释提升代码可读性
- 优化项目构建属性配置支持更高版本的语言特性
2025-12-28 11:45:24 +08:00
GwWuYou
4172952b11 refactor(source-generators): 重构枚举扩展生成器和日志生成器
- 将 EnumExtensionsGenerator 从 IIncrementalGenerator 迁移到 AttributeClassGeneratorBase
- 将 LoggerGenerator 从 IIncrementalGenerator 迁移到 AttributeClassGeneratorBase
- 添加 AttributeEnumGeneratorBase 基类用于枚举相关生成器
- 更新依赖引用路径,使用新的抽象层和通用生成器基类
- 改进代码生成逻辑,使用强类型 Attribute 替代字符串匹配
- 添加详细的 XML 文档注释
- 修改项目目标框架为多版本支持 (net8.0;net9.0;net10.0)
2025-12-28 11:25:24 +08:00
GwWuYou
e4a317b743 style(generator): 格式化源代码生成器相关文件
- 修复 ILogger.cs 中多余的逗号
- 统一 ContextAwareDiagnostic.cs 中的注释缩进格式
- 统一 ContextAwareGenerator.cs 中的注释缩进格式
- 统一 ContextAwareAttribute.cs 中的注释缩进格式
- 统一 CommonDiagnostics.cs 中的注释缩进格式
- 简化 AttributeClassGeneratorBase.cs 中的 isEnabledByDefault 参数
- 统一 GeneratorTest.cs 中的注释缩进格式
- 优化 ContextAwareGeneratorTests.cs 中的代码结构
- 调整 AnalyzerReleases.Unshipped.md 中的表格格式
2025-12-28 10:50:41 +08:00
GwWuYou
3e1531d7eb refactor(godot): 更新Godot模块的依赖注入配置
- 为AbstractGodotModule添加GFramework.Core.Abstractions.architecture命名空间引用
- 为UnRegisterExtension添加GFramework.Core.Abstractions.events命名空间引用
- 为GodotLogger添加GFramework.Core.Abstractions.logging命名空间引用
- 为GodotLoggerFactory添加GFramework.Core.Abstractions.logging命名空间引用
- 统一模块内部的抽象层依赖引用路径
2025-12-28 10:49:44 +08:00
GwWuYou
6dd79b8e9a chore(build): 更新项目目标框架和构建配置
- 将多个项目的TargetFramework从netstandard2.0更新为net8.0;net9.0;net10.0
- 优化Directory.Build.props中的注释和配置说明
- 添加缺失的using System;引用
- 调整资源加载系统命名空间从GFramework.Godot.system到GFramework.Godot.assets
- 修正ILogger.cs中的异常消息格式
- 移除BindableProperty.cs中多余的可空断言操作符
2025-12-28 10:45:07 +08:00
GwWuYou
2dea63e69f refactor(abstractions): 将抽象接口迁移至独立项目并更新引用
- 将架构相关接口从 GFramework.Core 迁移至 GFramework.Core.Abstractions 项目
- 更新项目引用配置,添加对抽象层项目的项目引用
- 修正命名空间引用,使用新的抽象层命名空间
- 调整类型定义,将 List<T> 替换为更通用的 IList<T> 接口
- 修复控制器接口命名空间错误
- 添加必要的 using 语句以支持新的抽象层引用
2025-12-28 10:37:18 +08:00
GwWuYou
f638f50eb4 build(generator): 修正源代码生成器项目中的程序集引用
- 修复了 Common.dll 和 Common.xml 文件的输出路径配置
- 确保生成的程序集文件正确包含在 NuGet 包中
- 更新了包构建过程中的文件引用路径
2025-12-28 09:00:35 +08:00
GwWuYou
929ea6b2d6 refactor(godot): 重构源代码生成器依赖结构
- 将CommonDiagnostics移至GFramework.SourceGenerators.Common模块
- 添加PathContests常量类统一管理路径常量
- 更新GodotLoggerGenerator使用新的路径常量和诊断引用
- 修改项目引用以包含GFramework.SourceGenerators.Common依赖
- 更新NuGet包配置以包含Common模块的DLL和XML文档
- 在解决方案文件中添加GFramework.SourceGenerators.Common项目引用
- 为Common模块创建Analyzer发布跟踪文件
2025-12-28 08:54:52 +08:00
GwWuYou
60a42a5f1e refactor(rule): 更新命名空间为 abstractions
- 将 ContextAwareAttribute 的命名空间从 Attributes.rule 更新为 Abstractions.rule
2025-12-27 23:32:44 +08:00
GwWuYou
13829c6d2b chore(license): 更新许可证为Apache 2.0并完善文档
- 将项目许可证从MIT更改为Apache 2.0
- 在各个README文件中添加许可证信息
- 更新主README文件为中文介绍
- 添加框架设计理念和架构优势说明
- 补充技术栈和性能特性介绍
- 更新安装和使用示例
- 添加项目背景和修改说明
- [no tag]
2025-12-27 23:20:13 +08:00
GwWuYou
c5a11820bc build(generator): 添加源代码生成器的 MSBuild targets 配置文件
- 为 GFramework.Godot.SourceGenerators 创建 GeWuYou.GFramework.Godot.SourceGenerators.targets 文件
- 为 GFramework.SourceGenerators 创建 GeWuYou.GFramework.SourceGenerators.targets 文件
- 在项目中启用 EnforceExtendedAnalyzerRules 规则
- 修正项目引用路径配置
- 更新包打包配置以包含正确的 targets 文件
- 从 GFramework.csproj 中移除多余的 targets 文件排除配置
2025-12-27 23:05:44 +08:00
GwWuYou
f3c5840ebe feat(diagnostic): 添加通用诊断描述符并重构诊断系统
- 添加 CommonDiagnostics 类提供通用诊断描述符
- 将诊断相关文件从 logging 目录移动到 diagnostics 目录
- 更新命名空间从 GFramework.SourceGenerators.Common.diagnostics 到 GFramework.SourceGenerators.diagnostics
- 修改诊断ID从 GFC001 到 GF_Common_Class_001
- 移除 GFramework.SourceGenerators.Common 项目引用
- 更新 AnalyzerReleases.Unshipped.md 文件中的诊断规则
- 重构 README.md 文件提供完整的项目介绍和使用指南
2025-12-27 22:51:39 +08:00
GwWuYou
7cd3979c48 fix(build): 修正项目引用和打包配置
- 修复了对 GFramework.Godot.SourceGenerators.Abstractions 的项目引用路径
- 更新了打包时包含的 targets 文件名称为 GFramework.Godot.SourceGenerators.targets
- 确保编译期引用正确且不被打包到最终输出中
2025-12-27 22:30:06 +08:00
GwWuYou
3074f8420d build(generator): 更新项目配置以包含Abstractions包
- 将Attributes.dll和Attributes.xml替换为Abstractions.dll和Abstractions.xml
- 修改GFramework.Godot.SourceGenerators项目配置
- 修改GFramework.SourceGenerators项目配置
- 保持包路径和可见性设置不变
2025-12-27 22:24:56 +08:00
GwWuYou
74b807b063 build(generator): 修正源代码生成器DLL包路径配置
- 修正 GFramework.Godot.SourceGenerators 项目的DLL包路径
- 修正 GFramework.SourceGenerators 项目的DLL包路径
- 移除多余的命名空间前缀 GeWuYou
- 确保生成器DLL正确包含到analyzers目录
2025-12-27 22:21:43 +08:00
GwWuYou
0126b69c5c refactor(source-generators): 重构源代码生成器项目结构和配置
- 移除 IArchitectureExtensible 接口定义
- 更新 Godot 源代码生成器项目配置,添加 Nullable 启用和包路径配置
- 添加 Directory.Build.props 构建属性文件到抽象层项目
- 修复命名空间引用错误和添加 using 语句
- 优化源代码生成器项目的打包配置和依赖引用
- 添加文档注释到 LogAttribute 构造函数
- 更新主项目文件中的源代码生成器相关引用路径
- 从解决方案用户设置中移除过时配置文件
- 添加解决方案用户设置到 gitignore 文件
2025-12-27 22:18:26 +08:00
GwWuYou
5f55a1b8db refactor(generator): 将Attributes项目重命名为Abstractions并更新引用
- 将GFramework.SourceGenerators.Attributes重命名为GFramework.SourceGenerators.Abstractions
- 将GFramework.Godot.SourceGenerators.Attributes重命名为GFramework.Godot.SourceGenerators.Abstractions
- 更新所有源生成器中对Attribute命名空间的引用
- 修改项目引用从Attributes指向Abstractions
- 添加程序集打包配置到生成项目
- 更新解决方案文件中的项目引用路径
- 修正测试文件中的命名空间引用
2025-12-27 21:29:13 +08:00
GwWuYou
fc88d908be refactor(build): 优化源代码生成器项目配置
- 移除 GeneratePackageOnBuild 和 IsRoslynComponent 配置项
- 统一设置 IncludeBuildOutput 为 false 以避免运行时库输出
- 更新 Microsoft.CodeAnalysis.Analyzers 版本至 4.14.0
- 为所有项目引用添加 PrivateAssets="all" 属性
- 简化打包配置,只将生成器 DLL 打包到 analyzers 目录
- 添加中文注释说明各配置项的作用和用途
2025-12-27 21:11:42 +08:00
GeWuYou
eababa471a test(rule): 更新 ContextAware 生成器测试方法
- 将测试方法的返回类型从 Task<int> 更改为 Task
- 使用 Assert.DoesNotThrowAsync 包装生成器测试执行逻辑
- 在测试方法末尾添加 return Task.CompletedTask 返回已完成任务
2025-12-27 13:37:39 +08:00
GeWuYou
383eceb36f test(generator): 添加上下文感知生成器的继承接口测试
- 为 ContextAwareGenerator 添加新的单元测试方法
- 测试当接口继承自 IContextAware 时的代码生成功能
- 验证间接接口实现的正确性
- 检查生成的 SetContext 方法和 Context 属性
- 确保继承场景下的代码生成符合预期
2025-12-27 13:35:44 +08:00
GeWuYou
5f211d8680 fix(generator): 修复ContextAware生成器代码格式和测试配置
- 移除ContextAwareGenerator中多余的空行
- 为生成的类添加IContextAware接口实现
- 在测试中添加IContextAware接口定义
- 修复Rider测试会话配置中的IsActive属性
- 更新测试ID以匹配正确的测试类路径
2025-12-27 13:31:27 +08:00
GeWuYou
40a9b523f5 feat(rule): 添加上下文感知诊断规则
- 新增 GF_Rule_001 诊断规则,要求类必须实现 IContextAware 接口
- 创建 ContextAwareDiagnostic 类定义诊断规则元数据
- 修改 ContextAwareGenerator 实现 IContextAware 接口检查
- 优化生成器代码结构,添加候选类查找和输出生成功能
- 更新 AnalyzerReleases.Unshipped.md 文档
- 调整测试代码以适配新的诊断规则
- 修复日志诊断规则的命名空间大小写错误
2025-12-27 13:04:01 +08:00
GwWuYou
eebd7de409 fix(generator): 修复ContextAware生成器的代码生成问题
- 修复生成代码末尾多余的换行符问题
- 添加GFramework.Core.rule命名空间引用
- 在测试中添加框架存根代码以提供必要的接口依赖
- 更新解决方案设置以包含新的分析器测试文件
2025-12-26 23:10:15 +08:00
GwWuYou
eaa706a7e4 refactor(source-generator): 重构ContextAware生成器的代码格式
- 将多行字符串插值改为逐行添加以改善代码可读性
- 更新测试用例中的源代码和期望输出格式
- 修改项目文件中的目标框架为net8.0
- 添加必要的包引用Microsoft.CodeAnalysis.CSharp和Microsoft.CodeAnalysis.Common
- 移除解决方案用户设置中的过期配置项
2025-12-26 22:51:57 +08:00
GwWuYou
68cf0c71ee test(generator): 添加源代码生成器测试框架和ContextAwareGenerator测试
- 创建GeneratorTest通用测试类用于源代码生成器测试
- 实现ContextAwareGeneratorTests测试用例验证上下文感知代码生成
- 在项目文件中添加测试项目排除规则
- 更新解决方案文件包含测试项目配置
- 创建GFramework.SourceGenerators.Tests项目文件并配置测试依赖
2025-12-26 22:28:40 +08:00
GwWuYou
a888e76842 refactor(source-generators): 提取通用诊断描述符并更新代码生成器
- 将 ClassMustBePartial 诊断描述符移至 CommonDiagnostics 类
- 更新 GodotLoggerGenerator 和 LoggerGenerator 引用通用诊断
- 添加 ContextAwareGenerator 实现上下文感知功能
- 创建 ContextAwareAttribute 标记需要自动实现 IContextAware 的类
- 在项目中添加对 GFramework.SourceGenerators.Common 的引用
- 更新诊断规则 ID 命名规范
- 修复 AnalyzerReleases 文件格式
- 添加 nullable enable 配置
- 在解决方案文件中添加新项目引用
2025-12-26 22:05:34 +08:00
GeWuYou
017870421e style(csharp): 统一代码格式化规范并优化方法实现
- 调整注释格式统一使用4个空格缩进
- 重新排列字段声明顺序提升代码可读性
- 将简单属性访问器改为表达式主体语法
- 优化AudioManagerSystem中音量设置逻辑
- 移除AbstractAssetCatalogSystem中多余空行
- 重构日志类中方法实现为表达式主体形式
- 统一空行分隔符保持代码结构一致性
- 优化方法内部逻辑表达式简化代码
- [no tag]
2025-12-26 13:50:14 +08:00
GwWuYou
378690a42c fix(logging): 修复源代码生成器中的日志属性引用错误
- 修正 GodotLoggerGenerator 中的属性元数据名称为正确的命名空间路径
- 更新 LoggerGenerator 中的属性引用从 GodotLogAttribute 改为 LogAttribute
- 修复 ConsoleLoggerFactory 的实例化方式,添加缺失的构造函数调用
- 统一日志属性名称格式,移除多余的 Godot 前缀
2025-12-25 22:09:52 +08:00
GwWuYou
4fbc067414 fix(logging): 修复GodotLogger生成器中的工厂实例化问题
- 修复GodotLoggerGenerator中GodotLoggerFactory的实例化方式,
  从静态方法调用改为实例方法调用
- 将默认日志字段名从"_log"更改为"Logger",
  以提供更具描述性的命名
2025-12-25 21:54:32 +08:00
GwWuYou
b5c1371b86 build(godot): 更新包ID为Godot特定的命名空间
将PackageId从GeWuYou.GFramework.SourceGenerators.Attributes
更改为GeWuYou.GFramework.Godot.SourceGenerators.Attributes,
以更好地反映Godot特定的源生成器属性包。
```
2025-12-25 21:45:33 +08:00
GwWuYou
72c787df3e fix(GFramework.Godot.SourceGenerators): 修复项目引用路径错误
修复了 GFramework.Godot.SourceGenerators 项目中对 Attributes 项目的引用路径,
将错误的 GFramework.SourceGenerators.Attributes.csproj 路径修正为正确的
GFramework.Godot.SourceGenerators.Attributes.csproj 路径。
2025-12-25 21:24:32 +08:00
GwWuYou
2f3bc2d526 feat(godot-source-generators): 重构Godot源代码生成器项目配置
- 将TargetFramework从net10.0更改为netstandard2.0以提高兼容性
- 添加必要的using语句(System和System.Linq)到GodotLoggerGenerator
- 配置项目属性以支持Roslyn分析器功能,包括GeneratePackageOnBuild、
  IsRoslynAnalyzer等设置
- 添加EnforceExtendedAnalyzerRules以启用扩展规则验证
- 配置项目引用GFramework.Godot.SourceGenerators.Attributes并设置
  PrivateAssets="all"避免运行时依赖
- 设置打包配置将生成器DLL打包为analyzers/dotnet/cs路径
- 修正GodotLogAttribute命名空间为GFramework.Godot.SourceGenerators.Attributes.logging
- 更新PackageId为GeWuYou.GFramework.SourceGenerators.Attributes
- 移除不必要的PackageReadmeFile配置
2025-12-25 21:22:20 +08:00
GwWuYou
763b460575 refactor(GFramework.Generator): 重构代码生成器结构并添加Godot日志生成器
- 移除原有的LoggerGenerator.cs和相关README文档
- 重命名GFramework.Generator为GFramework.SourceGenerators
- 重命名GFramework.Generator.Attributes为GFramework.SourceGenerators.Attributes
- 添加新的Godot日志生成器(GodotLoggerGenerator)及对应属性(GodotLogAttribute)
- 创建GFramework.Godot.SourceGenerators新项目用于Godot特定功能
- 修改日志生成器使用GodotLoggerFactory而非ConsoleLoggerFactory
2025-12-25 21:10:29 +08:00
GeWuYou
7fa2a1e4cb refactor(architecture): 重构日志记录器的初始化和使用方式
- 移除 ArchitectureContext 构造函数中的 ILogger 参数
- 从 IArchitectureContext 接口中移除 Logger 属性
- 更新 AbstractContextUtility 使用 LoggerFactory 创建日志记录器
- 修改 AbstractSystem 使用 LoggerFactory 获取日志记录器
- 调整 Architecture 类中上下文创建时的日志工厂使用
- 更新 IocContainer 初始化时的日志记录器获取方式
- 移除 IIocContainer 接口中的 Init 方法定义
- [no tag]
2025-12-25 13:42:16 +08:00
GeWuYou
543e32eb6a feat(architecture): 为架构上下文添加日志工厂支持
- 在ArchitectureContext构造函数中添加ILoggerFactory参数
- 为IArchitectureContext接口添加LoggerFactory属性
- 在Architecture的Initialize和InitializeAsync方法中传递loggerFactory
- 修改AbstractContextUtility初始化逻辑,使用NoopLoggerFactory创建默认logger
- 新增ILogAware接口用于支持日志记录功能
- [no tag]
2025-12-25 13:31:16 +08:00
GeWuYou
8913f2fb2c refactor(architecture): 移除泛型参数并删除拖拽组件
- 移除 AbstractArchitecture<T> 中的泛型参数 T
- 移除 AbstractGodotModule<T> 中的泛型参数 T
- 删除 AbstractDragDrop2DComponentBase 组件类
- 删除 AbstractDragDropArea2DComponent 组件类
- 修改 InstallGodotModule 方法的泛型约束
- 更新系统中获取系统实例的方式
- 调整命名空间和依赖引用关系
- 添加新的日志抽象基类 AbstractLogger
- 重构控制台日志记录器继承抽象基类
2025-12-25 13:05:38 +08:00
GeWuYou
bc2b73b19a refactor(generator): 重构日志生成器以使用新属性名称和日志接口
- 将LogAttribute中的Category属性重命名为Name
- 更新构造函数参数名称从category到name
- 添加类和方法的XML文档注释
- 将生成的日志字段类型从ILog改为ILogger
- 更新日志创建方式从Log.CreateLogger到ConsoleLoggerFactory.GetLogger
- 移除项目中的空文件夹引用
- 优化代码结构和注释格式
2025-12-25 08:42:03 +08:00
GeWuYou
485b2a11fe feat(utility): 添加抽象上下文工具类和接口
- 创建了 AbstractContextUtility 抽象类,继承 ContextAwareBase 并实现 IContextUtility 接口
- 实现了 IContextUtility 接口,提供上下文相关的通用功能
- 添加了 Init 方法用于初始化上下文工具,包含日志记录功能
- 提供了抽象 OnInit 方法供子类实现具体初始化逻辑
- 定义了 IContextUtility 接口,继承 IUtility 和 IContextAware 接口
- 添加了上下文感知能力的工具功能支持
2025-12-25 08:34:46 +08:00
GeWuYou
270411c66c refactor(architecture): 优化事件系统泛型约束和命名规范
- 为 SendEvent 方法添加 class 约束以确保类型安全
- 统一泛型参数命名从 T 到 TEvent 提高可读性
- 移除不必要的 using 语句简化文件依赖
- 保持事件发送和注册功能的原有行为不变
2025-12-25 08:25:12 +08:00
GwWuYou
5b7eaea142 refactor(architecture): 重构架构基类以支持上下文和运行时模式
- 移除架构中的命令和查询执行方法,将业务操作委托给 ArchitectureRuntime
- 引入 ArchitectureContext 类统一管理组件访问和事件处理
- 创建 ArchitectureRuntime 类作为统一的命令、查询、事件操作入口
- 更新架构生命周期管理,添加对 IArchitectureLifecycle 的支持
- 重命名 DefaultArchitectureConfiguration 为 ArchitectureConfiguration
- 重命名 DefaultArchitectureServices 为 ArchitectureServices
- 删除旧的 DefaultArchitectureContext 类
- 更新查询接口实现,使用 ContextAwareBase 基类
- 修改系统和模型注册逻辑,使用上下文而非架构实例
- 重构事件发送机制,统一使用 TypeEventSystem
- [no tag]
2025-12-24 23:39:34 +08:00
GwWuYou
3e672cf56f refactor(architecture): 重构架构基类以支持依赖注入和服务配置
- 将Architecture类重构为使用构造函数注入IArchitectureConfiguration、IArchitectureServices和IArchitectureContext
- 移除泛型参数和单例模式,改为使用依赖注入容器管理实例
- 添加异步初始化方法InitializeAsync支持异步初始化场景
- 引入ArchitectureOptions类统一管理架构配置选项
- 创建DefaultArchitectureConfiguration和DefaultArchitectureServices默认实现
- 新增IArchitectureContext接口提供统一的上下文访问
- 添加IAsyncInitializable接口支持异步初始化能力
- 简化架构生命周期阶段,移除Created、BeforeInit和AfterInit阶段
- 更新事件系统为ITypeEventSystem接口实现
- 重构命令和控制器接口,统一使用IContextAware替代多个能力接口
- 移除FunctionalArchitectureOptions和相关委托配置方式
- 优化日志记录使用配置中的LoggerFactory实例
2025-12-24 23:09:17 +08:00
GeWuYou
9e053d525f style(analyzer): 格式化分析器规则表格
- 将表格格式从简单的分隔符转换为标准markdown表格
- 添加表格头部分隔线以提高可读性
- 确保表格对齐和格式一致性
- [no tag]
2025-12-24 13:14:03 +08:00
GeWuYou
fb61ae3198 refactor(logging): 优化日志生成器属性处理逻辑
- 将 LogAttribute 的 Category 属性改为可设置
- 添加了无参构造函数支持
- 移除了部分无效的诊断检查代码
- 为 LoggerGenerator 添加了可空引用类型支持
- 使用 switch 表达式简化参数解析逻辑
- 优化了命名参数获取方法的实现
2025-12-24 13:10:44 +08:00
GeWuYou
73c474c37a fix(generator): 修复日志生成器中的诊断和分类逻辑
- 使用预定义的 Diagnostics.MustBePartial 替代手动创建 DiagnosticDescriptor
- 优化构造函数参数检查逻辑,添加对 null 值和无效类型的处理
- 增加三种参数情况的处理:null 值、有效字符串、无效类型
- 添加错误情况下的回退机制,使用默认分类值
- 改进代码注释和错误处理的健壮性
2025-12-24 12:57:26 +08:00
GeWuYou
d6b97fc0d1 fix(generator): 修复日志生成器的属性匹配和错误处理
- 添加了更精确的属性匹配逻辑,支持别名和命名空间匹配
- 增加了 try-catch 错误处理机制,避免生成器崩溃
- 实现了错误信息输出到生成文件中便于调试
- 优化了命名参数解析逻辑,支持更安全的类型转换
- 添加了字段访问修饰符和静态修饰符的正确处理
- 为生成的字段添加了 XML 文档注释
- 修复了构造函数参数解析的边界情况处理
2025-12-24 08:46:19 +08:00
GwWuYou
2db8a5d215 refactor(logging): 优化日志生成器的语法分析实现
- 使用 SyntaxProvider 替换原有的 candidates 遍历方式
- 实现更精确的语法节点匹配逻辑
- 添加对 [Log] 和 [Log(...)] 属性的完整支持
- 改进属性名称匹配,支持命名空间前缀
- 重构代码结构以提高性能和准确性
- 保持原有功能逻辑不变
2025-12-23 23:20:09 +08:00
GwWuYou
ce8dca3631 fix(generator): 修复代码生成器属性路径和匹配逻辑
- 修正了枚举扩展生成器中属性的完整名称路径
- 修正了日志生成器中属性的完整名称路径
- 改进了属性匹配逻辑,添加了空值检查
- 增强了属性类名匹配,支持简短名称匹配
2025-12-23 23:03:31 +08:00
GwWuYou
1f370dfdc9 refactor(logging): 优化 LoggerGenerator 属性查找逻辑
- 简化 LogAttribute 元数据名称定义
- 移除不必要的注释和步骤编号
- 重构属性筛选逻辑,直接在候选结果中查找匹配属性
- 简化源代码输出注册过程
- 移除冗余的符号合并操作
2025-12-23 22:54:31 +08:00
1675 changed files with 262222 additions and 11047 deletions

113
.agents/skills/README.md Normal file
View File

@ -0,0 +1,113 @@
# GFramework Skills
公开入口目前包含 `gframework-doc-refresh``gframework-batch-boot``gframework-multi-agent-batch`
## 公开入口
### `gframework-doc-refresh`
按源码模块驱动文档刷新,而不是按 `guide``tutorial``api` 等类型拆入口。
适用场景:
- 刷新某个模块的 landing page
- 复核专题页是否与源码、测试、README 一致
- 评估是否需要补 API reference 或教程
- 在 adoption path 不清晰时引入 `ai-libs/` 消费者接法作为补充证据
推荐调用:
```bash
/gframework-doc-refresh <module>
```
示例:
```bash
/gframework-doc-refresh Core
/gframework-doc-refresh Godot.SourceGenerators
/gframework-doc-refresh Cqrs
```
### `gframework-batch-boot`
`gframework-boot` 的基础上,自动推进可分批执行的重复性任务,不需要人工一轮轮重新触发。
适用场景:
- analyzer warning reduction
- 大批量测试结构收口
- 分模块文档刷新 wave
- 任何有明确 stop condition 的多批次任务
推荐调用:
```bash
/gframework-batch-boot <task-or-stop-condition>
```
批处理阈值速记:
```bash
/gframework-batch-boot 75
/gframework-batch-boot 75 2000
```
- 单个数字默认表示“当前分支全部提交相对远程 `origin/main` 接近多少个文件变更时停止”
- 两个数字默认表示“当前分支全部提交相对远程 `origin/main``文件数 OR 变更行数`”,顺序固定为 `<files> <lines>`
- 不推荐写 `/gframework-batch-boot 75 | 2000`,因为 `|` 很像 shell pipe若用户这样写也应按 OR 语义理解并在后续说明中归一化成无 `|` 版本
示例:
```bash
/gframework-batch-boot 75
/gframework-batch-boot 75 2000
/gframework-batch-boot continue analyzer warning reduction until branch diff vs origin/main approaches 75 files
/gframework-batch-boot keep refactoring repetitive source-generator tests in bounded batches
```
### `gframework-multi-agent-batch`
当用户希望主 Agent 负责拆分任务、派发互不冲突的 subagent 切片、核对进度、维护 `ai-plan`、验收结果并持续推进时,使用该入口。
适用场景:
- 复杂任务已经明确可以拆成多个互不冲突的写面
- 主 Agent 需要持续 review / integrate而不是把执行权完全交给单个 worker
- 需要把 delegated scope、验证结果与下一恢复点同步写回 `ai-plan`
- 任务仍要受 branch diff、context budget 与 reviewability 边界约束
推荐调用:
```bash
/gframework-multi-agent-batch <task>
```
示例:
```bash
/gframework-multi-agent-batch continue the current cqrs optimization by delegating non-conflicting benchmark and runtime slices
/gframework-multi-agent-batch coordinate parallel subagents, keep ai-plan updated, and stop when reviewability starts to degrade
```
## 共享资源
- `_shared/DOCUMENTATION_STANDARDS.md`
- 统一的文档规则、证据顺序与验证要求
- `_shared/module-map.json`
- 机器可读的模块映射表
- `_shared/module-config.sh`
- 轻量 shell 辅助函数
## 内部资源
`gframework-doc-refresh/` 下包含:
- `references/`
- 模块选择、证据顺序、输出策略
- `templates/`
- landing page、专题页、API reference、教程模板
- `scripts/`
- 模块扫描与文档验证脚本
`vitepress-*` skills 不再作为并列公开入口保留。

View File

@ -0,0 +1,126 @@
# GFramework 文档编写规范
本文件只保留跨模块稳定生效的写作与校验规则,不再维护容易失真的固定页面清单。
模块到源码、测试、README、`docs/zh-CN` 栏目以及 `ai-libs/` 参考入口的映射,统一以
`.agents/skills/_shared/module-map.json` 为准。
## 证据顺序
统一按以下顺序判断文档应写什么、删什么、保留什么:
1. 源码、公开 XML docs、`*.csproj`
2. 对应测试和 snapshot
3. 模块 `README.md`
4. 当前 `docs/zh-CN` 页面
5. `ai-libs/` 下已验证的消费者项目
6. 归档文档,仅在前述证据无法解释当前行为时回看
不要把旧文档互相抄写当成“更新”。
## 模块驱动规则
- 先按源码模块归一化输入,再决定落到 landing page、专题页、API reference、教程还是仅做校验。
- 如果用户给的是栏目名而不是源码模块名,先映射回模块;若仍有歧义,只给归一化建议,不直接生成文档。
- 文档栏目是派生输出,不是主输入源。
## `ai-libs/` 使用边界
`ai-libs/` 只用于补消费者视角证据:
- 验证真实接入目录结构
- 查最小 wiring、扩展点装配方式
- 给 adoption path 提供端到端例子
不要用 `ai-libs/` 覆盖以下事实:
- 公共 API 契约
- 当前版本支持范围
- Source Generator 诊断与生成语义
如果 `ai-libs/` 与当前源码或测试冲突,以当前仓库实现为准,并在文档里写明迁移或兼容边界。
## 公开文档边界
- `README.md``docs/**` 面向框架使用者,不面向治理执行者。
- 不要把 inventory、覆盖基线、恢复点、批处理阈值、review 线程、待补审计波次等内部治理信息写进公开页面。
- XML、README、测试与 `ai-libs/` 证据可以驱动文档决策,但公开页面只能输出读者真正需要的内容:
- 模块边界
- 最小接入路径
- 推荐阅读顺序
- 源码 / XML / API 的入口提示
- 如果确实需要保留治理基线、盘点结果或后续治理计划,把它写到 `ai-plan/**` 或其他 contributor-only 记录里。
- 当页面需要引用 XML 文档时,写“应优先查看哪些类型、命名空间或契约,以及为什么”,不要写覆盖数量、盘点日期或“已覆盖 / 未覆盖”状态。
## Markdown 规则
### 泛型与 HTML 转义
代码块外出现泛型或 XML 标签时必须转义:
- `List&lt;T&gt;`
- `Result&lt;TValue, TError&gt;`
- `&lt;summary&gt;`
- `&lt;param&gt;`
### Frontmatter
每个文档都必须包含合法 frontmatter
```yaml
---
title: 文档标题
description: 1-2 句话描述当前页面解决什么问题
---
```
### 代码块
- 始终标注语言,如 `csharp``bash``json`
- 示例只保留当前实现可追溯的最小路径
- 必要时写中文注释解释接入原因或边界,不要堆砌与代码同步无关的注释
### 链接
- 只链接到当前仓库真实存在的页面
- 站内链接优先使用 `/zh-CN/...` 形式
- 如果文档站不允许跳出 `docs/` 根目录,就不要把仓库 README 写成站内链接
## 输出优先级
统一按以下顺序决定产出:
1. 先修模块 README、landing page 与 adoption path
2. 再修失真的专题页
3. 再补 API reference
4. 最后才补教程
## 用户页检查点
- 用户读完页面后,应知道怎么采用、该看哪几个入口,而不是知道当前治理批次做到哪一轮。
- 如果一段内容删掉日期、数量、基线、治理术语后就失去价值,它大概率不该出现在公开文档里。
- 表格优先表达“何时看什么、解决什么问题”,不要表达“当前盘点覆盖到哪里”。
## 验证清单
- [ ] frontmatter 正确
- [ ] 代码块语言标记齐全
- [ ] 泛型和 XML 标签已转义
- [ ] 站内链接存在
- [ ] 示例与当前实现一致
- [ ] `ai-libs/` 只作为消费者接入参考,没有覆盖源码契约
## 验证工具
统一复用 `gframework-doc-refresh/scripts/` 下的校验脚本:
- `validate-frontmatter.sh`
- `validate-links.sh`
- `validate-code-blocks.sh`
- `validate-all.sh`
需要站点级验证时,执行:
```bash
cd docs && bun run build
```

View File

@ -0,0 +1,271 @@
#!/bin/bash
# 共享的模块配置
# 机器可读映射以 .agents/skills/_shared/module-map.json 为准。
normalize_module() {
local INPUT
INPUT="$(echo "$1" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr '_' '-')"
case "$INPUT" in
core|core-runtime|runtime-core|core-module)
echo "Core"
;;
core.abstractions|core-abstractions)
echo "Core.Abstractions"
;;
core.sourcegenerators|core-source-generators|core-sourcegenerators)
echo "Core.SourceGenerators"
;;
core.sourcegenerators.abstractions|core-source-generators-abstractions)
echo "Core.SourceGenerators.Abstractions"
;;
game|game-runtime|runtime-game|game-module)
echo "Game"
;;
game.abstractions|game-abstractions)
echo "Game.Abstractions"
;;
game.sourcegenerators|game-source-generators)
echo "Game.SourceGenerators"
;;
godot|godot-runtime|runtime-godot|godot-module)
echo "Godot"
;;
godot.sourcegenerators|godot-source-generators|godot-generators)
echo "Godot.SourceGenerators"
;;
godot.sourcegenerators.abstractions|godot-source-generators-abstractions)
echo "Godot.SourceGenerators.Abstractions"
;;
cqrs|mediator|cqrs-module)
echo "Cqrs"
;;
cqrs.abstractions|cqrs-abstractions)
echo "Cqrs.Abstractions"
;;
cqrs.sourcegenerators|cqrs-source-generators)
echo "Cqrs.SourceGenerators"
;;
ecs|ecs.arch|ecs-arch)
echo "Ecs.Arch"
;;
ecs.arch.abstractions|ecs-arch-abstractions)
echo "Ecs.Arch.Abstractions"
;;
sourcegenerators.common|source-generators-common)
echo "SourceGenerators.Common"
;;
*)
return 1
;;
esac
}
get_all_modules() {
cat <<'EOF'
Core
Core.Abstractions
Core.SourceGenerators
Core.SourceGenerators.Abstractions
Game
Game.Abstractions
Game.SourceGenerators
Godot
Godot.SourceGenerators
Godot.SourceGenerators.Abstractions
Cqrs
Cqrs.Abstractions
Cqrs.SourceGenerators
Ecs.Arch
Ecs.Arch.Abstractions
SourceGenerators.Common
EOF
}
is_valid_module() {
normalize_module "$1" >/dev/null 2>&1
}
get_source_dirs() {
local MODULE
MODULE="$(normalize_module "$1")" || return 1
case "$MODULE" in
Core)
echo "GFramework.Core"
;;
Core.Abstractions)
echo "GFramework.Core.Abstractions"
;;
Core.SourceGenerators)
echo "GFramework.Core.SourceGenerators"
;;
Core.SourceGenerators.Abstractions)
echo "GFramework.Core.SourceGenerators.Abstractions"
;;
Game)
echo "GFramework.Game"
;;
Game.Abstractions)
echo "GFramework.Game.Abstractions"
;;
Game.SourceGenerators)
echo "GFramework.Game.SourceGenerators"
;;
Godot)
echo "GFramework.Godot"
;;
Godot.SourceGenerators)
echo "GFramework.Godot.SourceGenerators"
;;
Godot.SourceGenerators.Abstractions)
echo "GFramework.Godot.SourceGenerators.Abstractions"
;;
Cqrs)
echo "GFramework.Cqrs"
;;
Cqrs.Abstractions)
echo "GFramework.Cqrs.Abstractions"
;;
Cqrs.SourceGenerators)
echo "GFramework.Cqrs.SourceGenerators"
;;
Ecs.Arch)
echo "GFramework.Ecs.Arch"
;;
Ecs.Arch.Abstractions)
echo "GFramework.Ecs.Arch.Abstractions"
;;
SourceGenerators.Common)
echo "GFramework.SourceGenerators.Common"
;;
esac
}
get_test_projects() {
local MODULE
MODULE="$(normalize_module "$1")" || return 1
case "$MODULE" in
Core|Core.Abstractions)
echo "GFramework.Core.Tests/GFramework.Core.Tests.csproj"
;;
Core.SourceGenerators|Core.SourceGenerators.Abstractions|Game.SourceGenerators|Cqrs.SourceGenerators|SourceGenerators.Common)
echo "GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"
;;
Game|Game.Abstractions)
echo "GFramework.Game.Tests/GFramework.Game.Tests.csproj"
;;
Godot)
echo "GFramework.Godot.Tests/GFramework.Godot.Tests.csproj"
;;
Godot.SourceGenerators|Godot.SourceGenerators.Abstractions)
echo "GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj"
;;
Cqrs|Cqrs.Abstractions)
echo "GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj"
;;
Ecs.Arch|Ecs.Arch.Abstractions)
echo "GFramework.Ecs.Arch.Tests/GFramework.Ecs.Arch.Tests.csproj"
;;
esac
}
get_readme_paths() {
local MODULE
MODULE="$(normalize_module "$1")" || return 1
case "$MODULE" in
Core)
echo "GFramework.Core/README.md"
;;
Core.Abstractions)
echo "GFramework.Core.Abstractions/README.md"
;;
Core.SourceGenerators)
echo "GFramework.Core.SourceGenerators/README.md"
;;
Core.SourceGenerators.Abstractions)
echo "GFramework.Core.SourceGenerators.Abstractions/README.md"
;;
Game)
echo "GFramework.Game/README.md"
;;
Game.Abstractions)
echo "GFramework.Game.Abstractions/README.md"
;;
Game.SourceGenerators)
echo "GFramework.Game.SourceGenerators/README.md"
;;
Godot)
echo "GFramework.Godot/README.md"
;;
Godot.SourceGenerators)
echo "GFramework.Godot.SourceGenerators/README.md"
;;
Godot.SourceGenerators.Abstractions)
echo "GFramework.Godot.SourceGenerators.Abstractions/README.md"
;;
Cqrs)
echo "GFramework.Cqrs/README.md"
;;
Cqrs.Abstractions)
echo "GFramework.Cqrs.Abstractions/README.md"
;;
Cqrs.SourceGenerators)
echo "GFramework.Cqrs.SourceGenerators/README.md"
;;
Ecs.Arch)
echo "GFramework.Ecs.Arch/README.md"
;;
Ecs.Arch.Abstractions)
echo "GFramework.Ecs.Arch.Abstractions/README.md"
;;
SourceGenerators.Common)
echo "GFramework.SourceGenerators.Common/README.md"
;;
*)
return 1
;;
esac
}
infer_module_from_namespace() {
local NAMESPACE="$1"
if [[ "$NAMESPACE" == GFramework.Core.SourceGenerators.Abstractions* ]]; then
echo "Core.SourceGenerators.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Core.SourceGenerators* ]]; then
echo "Core.SourceGenerators"
elif [[ "$NAMESPACE" == GFramework.Core.Abstractions* ]]; then
echo "Core.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Core* ]]; then
echo "Core"
elif [[ "$NAMESPACE" == GFramework.Game.SourceGenerators* ]]; then
echo "Game.SourceGenerators"
elif [[ "$NAMESPACE" == GFramework.Game.Abstractions* ]]; then
echo "Game.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Game* ]]; then
echo "Game"
elif [[ "$NAMESPACE" == GFramework.Godot.SourceGenerators.Abstractions* ]]; then
echo "Godot.SourceGenerators.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Godot.SourceGenerators* ]]; then
echo "Godot.SourceGenerators"
elif [[ "$NAMESPACE" == GFramework.Godot* ]]; then
echo "Godot"
elif [[ "$NAMESPACE" == GFramework.Cqrs.SourceGenerators* ]]; then
echo "Cqrs.SourceGenerators"
elif [[ "$NAMESPACE" == GFramework.Cqrs.Abstractions* ]]; then
echo "Cqrs.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Cqrs* ]]; then
echo "Cqrs"
elif [[ "$NAMESPACE" == GFramework.Ecs.Arch.Abstractions* ]]; then
echo "Ecs.Arch.Abstractions"
elif [[ "$NAMESPACE" == GFramework.Ecs.Arch* ]]; then
echo "Ecs.Arch"
elif [[ "$NAMESPACE" == GFramework.SourceGenerators.Common* ]]; then
echo "SourceGenerators.Common"
else
return 1
fi
}

View File

@ -0,0 +1,434 @@
{
"version": 1,
"description": "Canonical documentation refresh module map for GFramework skills.",
"modules": {
"Core": {
"aliases": ["core", "core-runtime", "runtime-core", "core module"],
"source_paths": ["GFramework.Core"],
"project_file": "GFramework.Core/GFramework.Core.csproj",
"test_projects": ["GFramework.Core.Tests/GFramework.Core.Tests.csproj"],
"readme_paths": ["GFramework.Core/README.md"],
"docs": {
"landing": ["docs/zh-CN/core/index.md"],
"topics": [
"docs/zh-CN/core/architecture.md",
"docs/zh-CN/core/context.md",
"docs/zh-CN/core/lifecycle.md",
"docs/zh-CN/core/events.md",
"docs/zh-CN/core/property.md",
"docs/zh-CN/core/logging.md",
"docs/zh-CN/core/state-management.md",
"docs/zh-CN/core/coroutine.md"
],
"fallback": [
"docs/zh-CN/getting-started/quick-start.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": [
"ai-libs/CoreGrid/CoreGrid.csproj",
"ai-libs/CoreGrid/global",
"ai-libs/CoreGrid/docs"
],
"search_hints": [
"rg -n \"Architecture|RegisterModel|RegisterSystem|BindableProperty|EventBus\" ai-libs/CoreGrid"
]
}
},
"Core.Abstractions": {
"aliases": ["core.abstractions", "core-abstractions", "core abstractions"],
"source_paths": ["GFramework.Core.Abstractions"],
"project_file": "GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj",
"test_projects": ["GFramework.Core.Tests/GFramework.Core.Tests.csproj"],
"readme_paths": ["GFramework.Core.Abstractions/README.md"],
"docs": {
"landing": ["docs/zh-CN/abstractions/core-abstractions.md"],
"topics": [
"docs/zh-CN/core/index.md",
"docs/zh-CN/core/architecture.md",
"docs/zh-CN/core/context.md"
],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/CoreGrid.csproj"],
"search_hints": [
"rg -n \"GFramework\\.Core\\.Abstractions|IArchitecture|IModel|ISystem\" ai-libs/CoreGrid"
]
}
},
"Core.SourceGenerators": {
"aliases": [
"core.sourcegenerators",
"core-sourcegenerators",
"core-source-generators",
"core source generators"
],
"source_paths": ["GFramework.Core.SourceGenerators"],
"project_file": "GFramework.Core.SourceGenerators/GFramework.Core.SourceGenerators.csproj",
"test_projects": ["GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"],
"readme_paths": ["GFramework.Core.SourceGenerators/README.md"],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [
"docs/zh-CN/source-generators/context-aware-generator.md",
"docs/zh-CN/source-generators/context-get-generator.md",
"docs/zh-CN/source-generators/priority-generator.md",
"docs/zh-CN/source-generators/logging-generator.md"
],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global", "ai-libs/CoreGrid/scripts"],
"search_hints": [
"rg -n \"ContextAware|ContextGet|Priority|GeneratedLogger|Log\" ai-libs/CoreGrid"
]
}
},
"Core.SourceGenerators.Abstractions": {
"aliases": [
"core.sourcegenerators.abstractions",
"core-source-generators-abstractions",
"core source generators abstractions"
],
"source_paths": ["GFramework.Core.SourceGenerators.Abstractions"],
"project_file": "GFramework.Core.SourceGenerators.Abstractions/GFramework.Core.SourceGenerators.Abstractions.csproj",
"test_projects": ["GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"],
"readme_paths": [],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [
"docs/zh-CN/source-generators/context-aware-generator.md",
"docs/zh-CN/source-generators/context-get-generator.md",
"docs/zh-CN/source-generators/priority-generator.md"
],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global"],
"search_hints": [
"rg -n \"GFramework\\.Core\\.SourceGenerators\\.Abstractions|\\[ContextAware\\]|\\[Priority\\]\" ai-libs/CoreGrid"
]
}
},
"Game": {
"aliases": ["game", "game-runtime", "runtime-game", "game module"],
"source_paths": ["GFramework.Game"],
"project_file": "GFramework.Game/GFramework.Game.csproj",
"test_projects": ["GFramework.Game.Tests/GFramework.Game.Tests.csproj"],
"readme_paths": ["GFramework.Game/README.md"],
"docs": {
"landing": ["docs/zh-CN/game/index.md"],
"topics": [
"docs/zh-CN/game/scene.md",
"docs/zh-CN/game/ui.md",
"docs/zh-CN/game/data.md",
"docs/zh-CN/game/storage.md",
"docs/zh-CN/game/serialization.md",
"docs/zh-CN/game/setting.md",
"docs/zh-CN/game/config-system.md"
],
"fallback": [
"docs/zh-CN/getting-started/quick-start.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": [
"ai-libs/CoreGrid/global",
"ai-libs/CoreGrid/scenes",
"ai-libs/CoreGrid/addons"
],
"search_hints": [
"rg -n \"SceneRouter|UiRouter|Setting|Storage|Serialization|Config\" ai-libs/CoreGrid"
]
}
},
"Game.Abstractions": {
"aliases": ["game.abstractions", "game-abstractions", "game abstractions"],
"source_paths": ["GFramework.Game.Abstractions"],
"project_file": "GFramework.Game.Abstractions/GFramework.Game.Abstractions.csproj",
"test_projects": ["GFramework.Game.Tests/GFramework.Game.Tests.csproj"],
"readme_paths": ["GFramework.Game.Abstractions/README.md"],
"docs": {
"landing": ["docs/zh-CN/abstractions/game-abstractions.md"],
"topics": [
"docs/zh-CN/game/index.md",
"docs/zh-CN/game/scene.md",
"docs/zh-CN/game/ui.md"
],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global", "ai-libs/CoreGrid/scenes"],
"search_hints": [
"rg -n \"ISceneFactory|ISceneRoot|UiInteractionProfile|IUiRoot\" ai-libs/CoreGrid"
]
}
},
"Game.SourceGenerators": {
"aliases": [
"game.sourcegenerators",
"game-source-generators",
"game source generators"
],
"source_paths": ["GFramework.Game.SourceGenerators"],
"project_file": "GFramework.Game.SourceGenerators/GFramework.Game.SourceGenerators.csproj",
"test_projects": ["GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"],
"readme_paths": ["GFramework.Game.SourceGenerators/README.md"],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [
"docs/zh-CN/source-generators/auto-scene-generator.md",
"docs/zh-CN/source-generators/auto-ui-page-generator.md"
],
"fallback": ["docs/zh-CN/game/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/scenes", "ai-libs/CoreGrid/addons"],
"search_hints": [
"rg -n \"AutoScene|AutoUiPage|SceneRouter|UiRouter\" ai-libs/CoreGrid"
]
}
},
"Godot": {
"aliases": ["godot", "godot-runtime", "runtime-godot", "godot module"],
"source_paths": ["GFramework.Godot"],
"project_file": "GFramework.Godot/GFramework.Godot.csproj",
"test_projects": ["GFramework.Godot.Tests/GFramework.Godot.Tests.csproj"],
"readme_paths": ["GFramework.Godot/README.md"],
"docs": {
"landing": ["docs/zh-CN/godot/index.md"],
"topics": [
"docs/zh-CN/godot/architecture.md",
"docs/zh-CN/godot/scene.md",
"docs/zh-CN/godot/ui.md",
"docs/zh-CN/godot/storage.md",
"docs/zh-CN/godot/setting.md",
"docs/zh-CN/godot/signal.md"
],
"fallback": [
"docs/zh-CN/source-generators/index.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": [
"ai-libs/CoreGrid/project.godot",
"ai-libs/CoreGrid/global",
"ai-libs/CoreGrid/scenes"
],
"search_hints": [
"rg -n \"AutoLoad|InputActions|Node|Signal|PackedScene|Godot\" ai-libs/CoreGrid"
]
}
},
"Godot.SourceGenerators": {
"aliases": [
"godot.sourcegenerators",
"godot-source-generators",
"godot source generators",
"godot generators"
],
"source_paths": ["GFramework.Godot.SourceGenerators"],
"project_file": "GFramework.Godot.SourceGenerators/GFramework.Godot.SourceGenerators.csproj",
"test_projects": ["GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj"],
"readme_paths": ["GFramework.Godot.SourceGenerators/README.md"],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [
"docs/zh-CN/source-generators/godot-project-generator.md",
"docs/zh-CN/source-generators/get-node-generator.md",
"docs/zh-CN/source-generators/bind-node-signal-generator.md",
"docs/zh-CN/source-generators/auto-register-exported-collections-generator.md"
],
"fallback": ["docs/zh-CN/godot/index.md"]
},
"ai_libs": {
"paths": [
"ai-libs/CoreGrid/project.godot",
"ai-libs/CoreGrid/global",
"ai-libs/CoreGrid/scenes"
],
"search_hints": [
"rg -n \"GetNode|BindNodeSignal|AutoRegisterExported|project\\.godot|AutoLoad\" ai-libs/CoreGrid"
]
}
},
"Godot.SourceGenerators.Abstractions": {
"aliases": [
"godot.sourcegenerators.abstractions",
"godot-source-generators-abstractions",
"godot source generators abstractions"
],
"source_paths": ["GFramework.Godot.SourceGenerators.Abstractions"],
"project_file": "GFramework.Godot.SourceGenerators.Abstractions/GFramework.Godot.SourceGenerators.Abstractions.csproj",
"test_projects": ["GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj"],
"readme_paths": [],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [
"docs/zh-CN/source-generators/godot-project-generator.md",
"docs/zh-CN/source-generators/get-node-generator.md",
"docs/zh-CN/source-generators/bind-node-signal-generator.md"
],
"fallback": ["docs/zh-CN/godot/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/project.godot", "ai-libs/CoreGrid/global"],
"search_hints": [
"rg -n \"GFramework\\.Godot\\.SourceGenerators\\.Abstractions|GetNode|BindNodeSignal\" ai-libs/CoreGrid"
]
}
},
"Cqrs": {
"aliases": ["cqrs", "mediator", "cqrs module"],
"source_paths": ["GFramework.Cqrs"],
"project_file": "GFramework.Cqrs/GFramework.Cqrs.csproj",
"test_projects": ["GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj"],
"readme_paths": ["GFramework.Cqrs/README.md"],
"docs": {
"landing": ["docs/zh-CN/core/cqrs.md"],
"topics": [
"docs/zh-CN/core/command.md",
"docs/zh-CN/core/query.md",
"docs/zh-CN/core/cqrs.md"
],
"fallback": [
"docs/zh-CN/core/index.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global", "ai-libs/CoreGrid/scripts"],
"search_hints": [
"rg -n \"CommandHandler|QueryHandler|RegisterCqrs|PipelineBehavior\" ai-libs/CoreGrid"
]
}
},
"Cqrs.Abstractions": {
"aliases": ["cqrs.abstractions", "cqrs-abstractions", "cqrs abstractions"],
"source_paths": ["GFramework.Cqrs.Abstractions"],
"project_file": "GFramework.Cqrs.Abstractions/GFramework.Cqrs.Abstractions.csproj",
"test_projects": ["GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj"],
"readme_paths": ["GFramework.Cqrs.Abstractions/README.md"],
"docs": {
"landing": ["docs/zh-CN/core/cqrs.md"],
"topics": [
"docs/zh-CN/core/command.md",
"docs/zh-CN/core/query.md"
],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global"],
"search_hints": [
"rg -n \"GFramework\\.Cqrs\\.Abstractions|ICommand|IQuery|IRequest\" ai-libs/CoreGrid"
]
}
},
"Cqrs.SourceGenerators": {
"aliases": [
"cqrs.sourcegenerators",
"cqrs-source-generators",
"cqrs source generators"
],
"source_paths": ["GFramework.Cqrs.SourceGenerators"],
"project_file": "GFramework.Cqrs.SourceGenerators/GFramework.Cqrs.SourceGenerators.csproj",
"test_projects": ["GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"],
"readme_paths": ["GFramework.Cqrs.SourceGenerators/README.md"],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [],
"fallback": [
"docs/zh-CN/core/cqrs.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/global"],
"search_hints": [
"rg -n \"GFramework\\.Cqrs\\.SourceGenerators|RequestHandler|PipelineBehavior\" ai-libs/CoreGrid"
]
}
},
"Ecs.Arch": {
"aliases": ["ecs.arch", "ecs-arch", "ecs arch", "ecs"],
"source_paths": ["GFramework.Ecs.Arch"],
"project_file": "GFramework.Ecs.Arch/GFramework.Ecs.Arch.csproj",
"test_projects": ["GFramework.Ecs.Arch.Tests/GFramework.Ecs.Arch.Tests.csproj"],
"readme_paths": ["GFramework.Ecs.Arch/README.md"],
"docs": {
"landing": ["docs/zh-CN/ecs/index.md"],
"topics": ["docs/zh-CN/ecs/arch.md"],
"fallback": [
"docs/zh-CN/core/index.md",
"docs/zh-CN/api-reference/index.md"
]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/scripts", "ai-libs/CoreGrid/global"],
"search_hints": [
"rg -n \"Arch\\.Core|World|SystemGroup|QueryDescription\" ai-libs/CoreGrid"
]
}
},
"Ecs.Arch.Abstractions": {
"aliases": [
"ecs.arch.abstractions",
"ecs-arch-abstractions",
"ecs arch abstractions"
],
"source_paths": ["GFramework.Ecs.Arch.Abstractions"],
"project_file": "GFramework.Ecs.Arch.Abstractions/GFramework.Ecs.Arch.Abstractions.csproj",
"test_projects": ["GFramework.Ecs.Arch.Tests/GFramework.Ecs.Arch.Tests.csproj"],
"readme_paths": [],
"docs": {
"landing": ["docs/zh-CN/ecs/index.md"],
"topics": ["docs/zh-CN/ecs/arch.md"],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": ["ai-libs/CoreGrid/scripts"],
"search_hints": [
"rg -n \"GFramework\\.Ecs\\.Arch\\.Abstractions|IArchSystem|IArchModel\" ai-libs/CoreGrid"
]
}
},
"SourceGenerators.Common": {
"aliases": [
"sourcegenerators.common",
"source-generators-common",
"source generators common"
],
"source_paths": ["GFramework.SourceGenerators.Common"],
"project_file": "GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj",
"test_projects": ["GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj"],
"readme_paths": [],
"docs": {
"landing": ["docs/zh-CN/source-generators/index.md"],
"topics": [],
"fallback": ["docs/zh-CN/api-reference/index.md"]
},
"ai_libs": {
"paths": [],
"search_hints": []
}
}
},
"docs_section_aliases": {
"core": ["Core"],
"abstractions": ["Core.Abstractions", "Game.Abstractions", "Ecs.Arch.Abstractions"],
"game": ["Game"],
"godot": ["Godot"],
"cqrs": ["Cqrs"],
"ecs": ["Ecs.Arch"],
"source-generators": [
"Core.SourceGenerators",
"Game.SourceGenerators",
"Cqrs.SourceGenerators",
"Godot.SourceGenerators"
]
}
}

View File

@ -0,0 +1,121 @@
#!/bin/bash
# 生成代码示例辅助脚本
# 用法: generate-examples.sh <类型> <类名> [命名空间]
set -e
TYPE="$1" # class/interface/enum
CLASS_NAME="$2"
NAMESPACE="$3"
if [ -z "$TYPE" ] || [ -z "$CLASS_NAME" ]; then
echo "用法: $0 <类型> <类名> [命名空间]"
echo "类型: class, interface, enum"
exit 1
fi
echo "=========================================="
echo "代码示例生成指南"
echo "=========================================="
echo "类型: $TYPE"
echo "类名: $CLASS_NAME"
if [ -n "$NAMESPACE" ]; then
echo "命名空间: $NAMESPACE"
fi
echo ""
# 根据类型提供示例生成指南
case "$TYPE" in
class)
echo "## 类示例生成建议"
echo ""
echo "1. 基本用法示例:"
echo " - 实例化对象"
echo " - 调用主要方法"
echo " - 访问公共属性"
echo ""
echo "2. 常见场景示例:"
echo " - 实际应用案例"
echo " - 与其他组件的集成"
echo ""
echo "3. 高级用法示例(如适用):"
echo " - 复杂配置"
echo " - 扩展和自定义"
echo ""
echo "示例模板:"
echo '```csharp'
echo "// 创建实例"
echo "var instance = new $CLASS_NAME();"
echo ""
echo "// 使用主要功能"
echo "instance.MainMethod();"
echo '```'
;;
interface)
echo "## 接口示例生成建议"
echo ""
echo "1. 实现接口:"
echo " - 展示如何实现该接口"
echo " - 实现所有必需成员"
echo ""
echo "2. 使用接口:"
echo " - 通过接口类型使用实例"
echo " - 依赖注入场景"
echo ""
echo "示例模板:"
echo '```csharp'
echo "// 实现接口"
echo "public class My$CLASS_NAME : $CLASS_NAME"
echo "{"
echo " // 实现成员"
echo "}"
echo ""
echo "// 使用接口"
echo "$CLASS_NAME instance = new My$CLASS_NAME();"
echo '```'
;;
enum)
echo "## 枚举示例生成建议"
echo ""
echo "1. 基本用法:"
echo " - 枚举值赋值"
echo " - 值比较"
echo ""
echo "2. Switch 语句:"
echo " - 根据枚举值执行不同逻辑"
echo ""
echo "3. 枚举转换:"
echo " - 字符串转枚举"
echo " - 枚举转整数"
echo ""
echo "示例模板:"
echo '```csharp'
echo "// 使用枚举值"
echo "var value = $CLASS_NAME.SomeValue;"
echo ""
echo "// Switch 语句"
echo "switch (value)"
echo "{"
echo " case $CLASS_NAME.Value1:"
echo " // 处理逻辑"
echo " break;"
echo " case $CLASS_NAME.Value2:"
echo " // 处理逻辑"
echo " break;"
echo "}"
echo '```'
;;
*)
echo "错误: 不支持的类型: $TYPE"
exit 1
;;
esac
echo ""
echo "注意事项:"
echo "- 使用项目的命名约定"
echo "- 包含必要的 using 语句"
echo "- 确保示例代码可以编译运行"
echo "- 参考现有教程的代码风格"
exit 0

View File

@ -0,0 +1,48 @@
#!/bin/bash
# 解析 C# XML 文档注释
# 用法: parse-csharp-xml.sh <C# 文件路径>
set -e
FILE_PATH="$1"
if [ -z "$FILE_PATH" ]; then
echo "用法: $0 <C# 文件路径>"
exit 1
fi
if [ ! -f "$FILE_PATH" ]; then
echo "错误: 文件不存在: $FILE_PATH"
exit 1
fi
echo "解析 C# XML 文档注释: $FILE_PATH"
# 提取 summary 标签内容
echo "=== Summary ==="
grep -A 5 "/// <summary>" "$FILE_PATH" | grep "///" | sed 's/.*\/\/\/\s*//' | sed 's/<summary>//g' | sed 's/<\/summary>//g' || echo "未找到 summary"
# 提取 param 标签内容
echo ""
echo "=== Parameters ==="
grep "/// <param" "$FILE_PATH" | sed 's/.*\/\/\/\s*//' || echo "未找到 param"
# 提取 returns 标签内容
echo ""
echo "=== Returns ==="
grep "/// <returns>" "$FILE_PATH" | sed 's/.*\/\/\/\s*//' | sed 's/<returns>//g' | sed 's/<\/returns>//g' || echo "未找到 returns"
# 提取 exception 标签内容
echo ""
echo "=== Exceptions ==="
grep "/// <exception" "$FILE_PATH" | sed 's/.*\/\/\/\s*//' || echo "未找到 exception"
# 提取 example 标签内容
echo ""
echo "=== Examples ==="
grep -A 10 "/// <example>" "$FILE_PATH" | grep "///" | sed 's/.*\/\/\/\s*//' || echo "未找到 example"
echo ""
echo "解析完成"
exit 0

View File

@ -0,0 +1,57 @@
#!/bin/bash
# 更新 VitePress 侧边栏配置
# 用法: update-vitepress-nav.sh <文档路径> <文档标题>
set -e
DOC_PATH="$1"
DOC_TITLE="$2"
CONFIG_FILE="docs/.vitepress/config.mts"
if [ -z "$DOC_PATH" ] || [ -z "$DOC_TITLE" ]; then
echo "用法: $0 <文档路径> <文档标题>"
echo "示例: $0 /zh-CN/api-reference/core/architecture Architecture"
exit 1
fi
if [ ! -f "$CONFIG_FILE" ]; then
echo "错误: 找不到 VitePress 配置文件: $CONFIG_FILE"
exit 1
fi
# 提取模块名称core/game/godot/source-generators
MODULE=$(echo "$DOC_PATH" | grep -oP '(?<=/zh-CN/)[^/]+' | head -1)
if [ -z "$MODULE" ]; then
echo "错误: 无法从路径中提取模块名称: $DOC_PATH"
exit 1
fi
echo "=========================================="
echo "VitePress 导航配置更新"
echo "=========================================="
echo "模块: $MODULE"
echo "路径: $DOC_PATH"
echo "标题: $DOC_TITLE"
echo ""
# 检查配置文件中是否已存在该路径
if grep -q "link: '$DOC_PATH'" "$CONFIG_FILE"; then
echo "✓ 该文档已存在于导航配置中"
exit 0
fi
echo "提示: 需要在 VitePress 配置中添加新条目"
echo ""
echo "建议的配置条目:"
echo "{ text: '$DOC_TITLE', link: '$DOC_PATH' }"
echo ""
echo "请使用以下方式之一更新配置:"
echo "1. 让 AI 使用 Edit 工具直接修改 $CONFIG_FILE"
echo "2. 手动编辑配置文件并添加上述条目到对应的 sidebar 部分"
echo ""
# 输出相关的 sidebar 配置路径
echo "相关的 sidebar 配置路径: '/zh-CN/$MODULE/'"
exit 0

View File

@ -0,0 +1,207 @@
---
name: gframework-batch-boot
description: Repository-specific bulk-task workflow for the GFramework repo. Use when Codex should start from the normal GFramework boot context and then continue a repetitive or large-scope task in automatic batches without waiting for manual round-by-round prompts, especially for analyzer warning cleanup, repetitive test refactors, documentation waves, or similar multi-file work with an explicit stop condition such as changed-file count, warning count, or timebox.
---
# GFramework Batch Boot
## Overview
Use this skill when `gframework-boot` is necessary but not sufficient because the task should keep advancing in bounded
batches until a clear stop condition is met.
Treat `AGENTS.md` as the source of truth. This skill extends `gframework-boot`; it does not replace it.
If the task's defining requirement is that the main agent must keep acting as dispatcher, reviewer, `ai-plan` owner,
and final integrator for multiple parallel workers, prefer `gframework-multi-agent-batch` and use this skill's stop
condition guidance as a secondary reference.
Context budget is a first-class stop signal. Do not keep batching merely because a file-count threshold still has
headroom if the active conversation, loaded repo artifacts, validation output, and pending recovery updates suggest the
agent is approaching its safe working-context limit.
## Startup Workflow
1. Execute the normal `gframework-boot` startup sequence first:
- read `AGENTS.md`
- read `.ai/environment/tools.ai.yaml`
- read `ai-plan/public/README.md`
- read the mapped active topic `todos/` and `traces/`
2. Classify the task as a batch candidate only if all of the following are true:
- the work is repetitive, sliceable, or likely to require multiple similar iterations
- each batch can be given an explicit ownership boundary
- a stop condition can be measured locally
- the task does not primarily need the orchestration-heavy main-agent workflow captured by `gframework-multi-agent-batch`
3. Before any delegation, define the batch objective in one sentence:
- warning family reduction
- repeated test refactor pattern
- module-by-module documentation refresh
- other repetitive multi-file cleanup
4. Before the first implementation batch, estimate whether the current task is likely to stay below roughly 80% of the
agent's safe working-context budget through one more full batch cycle:
- include already loaded `AGENTS.md`, skills, `ai-plan` files, recent command output, active diffs, and expected validation output
- if another batch would probably push the conversation near the limit, plan to stop after the current batch even if
branch-size thresholds still have room
## Baseline Selection
When the stop condition depends on branch size or changed-file count, choose the baseline carefully.
1. Prefer the freshest remote-tracking reference that already exists locally:
- `origin/main`
- or the mapped upstream base branch for the current topic
2. Do not default to local `main` when `refs/heads/main` is behind `refs/remotes/origin/main`.
3. If both local and remote-tracking refs exist, report:
- ref name
- short SHA
- committer date
4. If only a local branch exists, state that the baseline may be stale before using it.
5. When the task is tied to a PR or topic branch rather than `main`, prefer that explicit upstream comparison target over
a generic `main`.
For changed-file limits, measure branch-wide scope against the chosen baseline, not just the current working tree:
- use `git diff --name-only <baseline>...HEAD`
- do not confuse branch diff size with `git status --short`
For changed-line limits, also measure branch-wide scope against the chosen baseline:
- prefer `git diff --numstat <baseline>...HEAD`
- treat "changed lines" as `added + deleted` summed across the branch diff
- do not use working-tree-only line counts as a substitute for branch-wide scope
For shorthand numeric thresholds, use a fixed default baseline:
- compare the current branch's cumulative diff against remote `origin/main`
- include all commits reachable from `HEAD` that are not already in `origin/main`
- do not reinterpret shorthand thresholds as "this batch only" or "current unstaged changes only"
- only use another baseline when the user explicitly names it in the prompt
## Stop Conditions
Choose one primary stop condition before the first batch and restate it to the user.
When the user does not explicitly override the priority order, use:
1. context-budget safety
2. semantic batch boundary / reviewability
3. the user-requested local metric such as files, lines, warnings, or time
Common stop conditions:
- the next batch would likely push the agent above roughly 80% of its safe working-context budget
- branch diff vs baseline approaches a file-count threshold
- warnings-only build reaches a target count
- a specific hotspot list is exhausted
- a timebox or validation budget is reached
If multiple stop conditions exist, rank them and treat one as primary.
Treat file-count or line-count thresholds as coarse repository-scope signals, not as a proxy for AI context health.
When they disagree with context-budget safety, context-budget safety wins.
## Shorthand Stop-Condition Syntax
`gframework-batch-boot` may be invoked with shorthand numeric thresholds when the user clearly wants a branch-size stop
condition instead of a long natural-language prompt.
Interpret shorthand as follows:
- `$gframework-batch-boot 75`
- means: stop when the current branch's cumulative diff vs remote `origin/main` approaches `75` changed files
- `$gframework-batch-boot 75 2000`
- means: stop when the current branch's cumulative diff vs remote `origin/main` approaches `75` changed files OR
`2000` changed lines
- default positional meaning is `<files> <lines>`
- `$gframework-batch-boot 75 | 2000`
- may be interpreted as the same OR shorthand in plain-language chat
- when restating, planning, or documenting the command, normalize it to `$gframework-batch-boot 75 2000`
- prefer the no-pipe form because `|` is easy to confuse with a shell pipeline
When shorthand is used:
- report the resolved thresholds explicitly before the first batch
- report that the baseline is remote `origin/main`, unless the user explicitly overrides it
- if two numeric thresholds are present, treat file count as the default primary metric for status reporting unless the
user says otherwise
- stop when either threshold is reached or exceeded, even if the other threshold still has headroom
## Batch Loop
1. Inspect the current state before the first batch:
- current branch and active topic
- selected baseline
- current stop-condition metric
- current context-budget posture and whether one more batch is safe
- next candidate slices
2. Keep the critical path local.
3. Delegate only bounded slices with explicit ownership:
- one file
- one warning family within one project
- one module documentation wave
4. For each worker batch, specify:
- objective
- owned files or subsystem
- required validation commands
- output format
- reminder that other agents may be editing the repo
5. While workers run, use the main thread for non-overlapping tasks:
- queue the next candidate slice
- inspect the next hotspot
- recompute branch size or warning distribution
6. After each completed batch:
- integrate or verify the result
- rerun the required validation
- recompute the primary stop-condition metric
- reassess whether one more batch would likely push the agent near or beyond roughly 80% context usage
- decide immediately whether to continue or stop
7. Do not require the user to manually trigger every round unless:
- the next slice is ambiguous
- a validation failure changes strategy
- the batch objective conflicts with the active topic
## Task Tracking
For multi-batch work, keep recovery artifacts current.
- Update the active `ai-plan/public/<topic>/todos/` document when a meaningful batch lands.
- Update the matching `traces/` document with:
- accepted delegated scope
- validation milestones
- current stop-condition metric
- next recommended batch
- Keep the active recovery point concise; archive detailed history when it starts to sprawl.
## Delegation Defaults
- Prefer `worker` subagents for independent write slices.
- Prefer `explorer` subagents for read-only hotspot ranking or next-batch discovery.
- Keep each worker ownership boundary disjoint.
- Avoid launching a new batch when the expected write set would push the branch beyond the declared threshold without a
deliberate decision.
## Completion
Stop the loop when any of the following becomes true:
- the next batch would likely push the agent near or beyond roughly 80% of its safe working-context budget
- the primary stop condition has been reached or exceeded
- the remaining slices are no longer low-risk
- validation failures indicate the task is no longer repetitive
- the branch has grown large enough that reviewability would materially degrade
When stopping, report:
- whether context budget was the deciding factor
- which baseline was used
- the exact metric value at stop time
- completed batches
- remaining candidate batches
- whether further work should continue in a new turn or after rebasing/fetching
## Example Triggers
- `Use $gframework-batch-boot 75 to keep reducing analyzer warnings until the branch diff vs baseline approaches 75 files.`
- `Use $gframework-batch-boot 75 2000 to keep reducing warnings until the branch diff approaches 75 files or 2000 changed lines.`
- `Use $gframework-batch-boot and keep reducing analyzer warnings until the branch diff vs origin/main approaches 75 files.`
- `Use $gframework-batch-boot to continue this repetitive test refactor in bounded batches until the warning count drops below 10.`
- `Use $gframework-batch-boot and refresh module docs in waves without asking me to trigger every round.`

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework Batch Boot"
short_description: "Run boot, then iterate bounded bulk batches"
default_prompt: "Use $gframework-batch-boot to start from the normal GFramework boot context and continue the current repetitive task in automatic bounded batches until the declared stop condition is reached."

View File

@ -0,0 +1,92 @@
---
name: gframework-boot
description: Repository-specific boot workflow for the GFramework repo. Use when Codex needs to start or resume work in this repository from short prompts such as "boot", "continue", "read AGENTS", or "start the next step"; when the user expects Codex to first read AGENTS.md, .ai/environment/tools.ai.yaml, and public ai-plan tracking files; or when Codex should assess task complexity, decide whether explorer or worker subagents are warranted, and then proceed under the repository's workflow rules.
---
# GFramework Boot
## Overview
Use this skill to bootstrap work in the GFramework repository with minimal user prompting.
Treat `AGENTS.md` as the source of truth. Use this skill to enforce a startup sequence, not to replace repository rules.
If the task clearly requires the main agent to keep coordinating multiple parallel subagents while maintaining
`ai-plan` and reviewing each result, switch to `gframework-multi-agent-batch` after the boot context is established.
## Startup Workflow
1. Read `AGENTS.md` before choosing tools, planning edits, or delegating work.
2. Read `.ai/environment/tools.ai.yaml` to confirm the preferred local toolchain.
3. Read `ai-plan/public/README.md` before asking the user for missing context.
4. If `ai-plan/public/README.md` maps the current branch or worktree to active topics, inspect those topics'
`todos/` and `traces/` directories in listed priority order.
5. If no mapping exists, scan `ai-plan/public/<topic>/todos/` and `ai-plan/public/<topic>/traces/` across active
topics, and ignore `ai-plan/public/archive/` unless the user explicitly asks for historical context.
6. Treat `ai-plan/public/<topic>/archive/` as secondary context even for active topics; only read it when the active
todo/trace files point there or when the user explicitly asks for historical detail.
7. If `ai-plan/private/<branch-or-worktree>/` exists and is relevant, treat it as private recovery context for the
current worktree only and do not assume it should be committed.
8. Classify the task state:
- `new`: no matching recovery document exists, or the user is clearly starting fresh work
- `resume`: a matching todo or trace exists and the user is continuing that thread
- `recovery`: prior work looks partial, interrupted, or ambiguous and the next safe recovery point must be reconstructed
9. Choose the best matching `ai-plan` artifacts:
- Prefer topics explicitly mapped from `ai-plan/public/README.md`
- Prefer path names or headings that match the user's task wording
- Break ties by most recently updated trace or todo
- If ambiguity would materially change implementation, summarize the candidates and ask one concise question
10. Classify the task complexity before deciding on subagents:
- `simple`: one concern, one file or module, no parallel discovery required
- `medium`: a small number of modules, some read-only exploration helpful, critical path still easy to keep local
- `complex`: cross-module design, migration, large refactor, or work likely to exceed one context window
11. Estimate the current context-budget posture before substantive execution:
- account for loaded startup artifacts, active `ai-plan` files, visible diffs, open validation output, and likely next-step output volume
- if the task already appears near roughly 80% of a safe working-context budget, prefer closing the current batch,
refreshing recovery artifacts, and stopping at the next natural semantic boundary instead of starting a fresh broad slice
12. Apply the delegation policy from `AGENTS.md`:
- Keep the critical path local
- Use `explorer` with `gpt-5.1-codex-mini` for narrow read-only questions, tracing, inventory, and comparisons
- Use `worker` with `gpt-5.4` only for bounded implementation tasks with explicit ownership
- Do not delegate purely for ceremony; delegate only when it materially shortens the task or controls context growth
- If the user explicitly wants the main agent to keep orchestrating multiple workers through several review/integration
cycles, prefer `gframework-multi-agent-batch` over ad-hoc delegation
13. Before editing files, tell the user what you read, how you classified the task, whether subagents will be used,
and the first implementation step.
14. Proceed with execution, validation, and documentation updates required by `AGENTS.md`.
## Task Tracking
For multi-step, cross-module, or interruption-prone work, maintain the repository recovery artifacts instead of keeping state only in chat.
- Update `ai-plan/public/README.md` whenever the active topic set or worktree mapping changes.
- Update the active public document under `ai-plan/public/<topic>/todos/` with completed work, validation results,
risks, and the next recovery point.
- Update the matching public trace under `ai-plan/public/<topic>/traces/` with key decisions, delegated scope, and the
immediate next step.
- Keep the active todo/trace files concise enough for `boot` to use as default entrypoints. When completed, validated
stages start piling up, move their detailed history into `ai-plan/public/<topic>/archive/` and leave archive
pointers in the active files.
- Move stage-complete artifacts into `ai-plan/public/<topic>/archive/`, and move completed topics into
`ai-plan/public/archive/<topic>/` so `boot` does not keep reloading stale context.
- Keep worktree-private scratch recovery files under `ai-plan/private/` and do not treat them as commit targets.
- Never write secrets, machine-specific paths, or other sensitive environment details into any `ai-plan/**` artifact.
- If the task is clearly complex and no recovery artifact exists yet, create one before substantive edits.
## Recovery Heuristics
- If the user says `next step`, `continue`, `继续`, or similar resume language, read `ai-plan/public/README.md`
first, then search the mapped active topics before scanning the broader public area.
- If the current branch and the mapped active topics describe the same feature area, prefer resuming those topics first.
- If the repository state suggests in-flight work but no recovery document matches, reconstruct the safest next step from code, tests, and Git state before asking the user for clarification.
- If the current turn already carries heavy recovery context, broad diffs, or long validation output, prefer a
recovery-point update and a clean stop over starting another large slice just because the code task itself remains open.
## Example Triggers
- `boot`
- `Use $gframework-boot and continue the current task`
- `Read AGENTS and public ai-plan, then start the next step`
- `继续当前任务,先看 AGENTS.md 和 public ai-plan`
## References
Read `references/startup-artifacts.md` when you need a quick reminder of the repository entrypoints, task-state heuristics, or delegation defaults without re-reading the entire skill.

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework Boot"
short_description: "Bootstrap GFramework repository tasks"
default_prompt: "Use $gframework-boot to start or resume work in this GFramework repository."

View File

@ -0,0 +1,38 @@
# Startup Artifacts
## Required Reads
- `AGENTS.md`
- `.ai/environment/tools.ai.yaml`
- `ai-plan/public/README.md`
- the selected `ai-plan/public/<topic>/todos/` directories
- the selected `ai-plan/public/<topic>/traces/` directories
## AI-Plan Selection Heuristics
- Match the current branch or worktree against `ai-plan/public/README.md` first.
- If the index maps the current worktree to topics, inspect those topics in listed order before scanning anything else.
- Match the user's wording against public todo and trace file names next.
- Prefer the newest matching trace when several candidates describe the same feature area.
- If one file records a clearer recovery point than a newer but vague file, prefer the clearer recovery point.
- Ignore `ai-plan/public/archive/**` unless the user explicitly requests historical recovery context.
- Even inside an active topic, prefer the root `todos/` and `traces/` entry files first; only read `archive/` when the
active files point there or when the user asks for historical detail.
- If a matching `ai-plan/private/<branch-or-worktree>/` directory exists, use it only as private context for the current worktree.
## Complexity Defaults
- `simple`: keep everything local, no subagent
- `medium`: keep design local, optionally use one `explorer` for parallel read-only discovery
- `complex`: keep architecture and integration local, delegate only bounded non-blocking subtasks
## Model Defaults
- `explorer`: `gpt-5.1-codex-mini`
- `worker`: `gpt-5.4`
## Startup Summary Template
Use a short update before execution:
`Read AGENTS.md, the environment inventory, ai-plan/public/README.md, and the relevant public ai-plan artifacts. This looks like a <task-state> <complexity> task. I will <delegate-or-not> and start with <first-step>.`

View File

@ -0,0 +1,218 @@
---
name: gframework-doc-refresh
description: "Refresh or reassess GFramework documentation for a source module such as Core, Game, Godot, Cqrs, Ecs.Arch, or their generator/abstraction packages. Use this when the user asks to update module docs, re-evaluate landing pages, fix outdated topic pages, refresh API reference coverage, verify adoption paths against source/tests/README, or compare current docs with ai-libs consumer wiring. Recommended command: /gframework-doc-refresh <module>."
---
# Purpose
Use this skill to refresh GFramework documentation from source-first evidence.
The public entry is module-driven, not doc-type-driven:
- Input: a source module or a resolvable docs section alias
- Output: the minimal documentation update set needed for that module
- Evidence: code, tests, README, current docs, then `ai-libs/`
Do not start by deciding “this is an API doc task” or “this is a tutorial task”.
Decide that only after the module scan.
# Triggers
Use this skill when the user asks things like:
- `refresh docs for Core`
- `update Game module docs`
- `根据 Godot 模块源码刷新文档`
- `重新评估 Cqrs 模块文档并更新`
- `核对 Godot.SourceGenerators 的文档状态`
- `看看 source-generators 栏目哪些页面已经失真`
Recommended command form:
```bash
/gframework-doc-refresh <module>
```
# Supported Modules
Canonical module names:
- `Core`
- `Core.Abstractions`
- `Core.SourceGenerators`
- `Core.SourceGenerators.Abstractions`
- `Game`
- `Game.Abstractions`
- `Game.SourceGenerators`
- `Godot`
- `Godot.SourceGenerators`
- `Godot.SourceGenerators.Abstractions`
- `Cqrs`
- `Cqrs.Abstractions`
- `Cqrs.SourceGenerators`
- `Ecs.Arch`
- `Ecs.Arch.Abstractions`
- `SourceGenerators.Common`
The canonical mapping lives in `.agents/skills/_shared/module-map.json`.
If the user supplies a docs section name:
- resolve it back to a source module first
- if it maps to multiple modules, stop at normalization guidance and do not draft docs yet
# Workflow
## 1. Normalize the input
Run:
```bash
python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py <module>
```
The script normalizes aliases, reports ambiguity, and prints the module's evidence surface.
If the result is ambiguous:
- return the candidate modules
- ask the user to pick the intended source module
- do not continue into document generation
## 2. Scan the evidence surface
For the resolved module, inspect:
- source directories
- `*.csproj`
- relevant test projects
- sibling `README.md`
- mapped `docs/zh-CN` landing pages and topic pages
- optional `ai-libs/` consumer evidence when needed
Always confirm the actual files in the repository.
Do not assume the mapping is enough on its own.
## 3. Decide whether `ai-libs/` is needed
Use `ai-libs/` when:
- adoption path is unclear from source and README alone
- extension points need a real consumer wiring example
- current docs have concepts but lack an end-to-end integration path
Do not rely on `ai-libs/` for:
- public API contract definitions
- generator diagnostics or semantic guarantees
- claims about what the current version officially supports
If `ai-libs/` conflicts with current source or tests, keep source/tests as the contract and document the migration boundary.
## 4. Judge the documentation state
Classify the module into one or more of these states:
- missing landing page
- stale landing page
- stale topic page
- missing or stale API reference coverage
- stale tutorial/example
- validation-only
Base this on evidence, not on the previous docs shape.
## 5. Choose the output set
Always prioritize:
1. README / landing page / adoption path
2. topic pages
3. API reference
4. tutorials
If the module only needs validation or relinking, do not generate extra pages.
## 6. Draft or update docs
Load only the template that matches the output you selected:
- `templates/module-landing.md`
- `templates/topic-refresh.md`
- `templates/api-reference.md`
- `templates/tutorial.md`
Keep examples minimal, current, and traceable to source or tests.
## 7. Validate
Run the internal validators as needed:
```bash
bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh <file-or-directory>
```
For site-level confirmation after doc edits:
```bash
cd docs && bun run build
```
# Evidence Order
Use this exact priority:
1. source code, XML docs, `*.csproj`
2. tests and snapshots
3. module `README.md`
4. current `docs/zh-CN` pages
5. verified `ai-libs/` consumers
6. archived docs only as fallback context
# Output Rules
- Prefer correcting the adoption path over expanding page count.
- Do not copy wording from outdated docs just to keep page volume.
- Public docs must stay reader-facing. Do not write inventory, coverage baseline, recovery-point, batch-metric, review
backlog, or audit-wave wording into `README.md` or `docs/**`.
- Use neutral, destination-first section names and link labels. Do not expose raw filenames or paths such as
`game/index.md`, `README.md`, or `../core/cqrs.md` as visible reader-facing labels when a semantic label is
available.
- Do not use rhetorical or conversational headings in public docs, such as “你真正会用到的公开入口”、
“先理解包关系” or “想看……转到……”. Prefer direct labels such as “公开入口”、
“模块与包关系” and “相关主题”.
- Keep public docs out of internal product-decision tone. Do not publish repository-governance wording such as
“当前阶段的结论”、“不建议立即启动” or audience-maintainer tradeoff discussions unless the page itself is a public
adoption guide and the wording has been rewritten as reader-facing suitability guidance.
- If XML or audit evidence is relevant, translate it into reader guidance such as “which types to inspect first” or
“which entry points define the contract”, instead of exposing counts, dates, or governance status.
- Escape generics outside code blocks.
- Keep internal links real and current.
- Mark code blocks with explicit languages.
- Use the smallest example that demonstrates the current contract.
- Consumer examples may align with `ai-libs/`, but must not exceed the current module contract.
# Validation
Use the shared standards in `.agents/skills/_shared/DOCUMENTATION_STANDARDS.md`.
When this skill changes public docs, prefer:
1. focused validator on touched pages
2. `cd docs && bun run build`
When this skill changes the skill system itself:
1. validate `SKILL.md` frontmatter exists
2. run the module scan script for representative modules
3. confirm obsolete `vitepress-*` public entries are gone
# References
Read these only when needed:
- `.agents/skills/_shared/DOCUMENTATION_STANDARDS.md`
- `.agents/skills/_shared/module-map.json`
- `references/module-selection.md`
- `references/evidence-and-ai-libs.md`
- `references/output-strategy.md`

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework Doc Refresh"
short_description: "Refresh module docs from code-first evidence"
default_prompt: "Use $gframework-doc-refresh to refresh a GFramework module's docs from source, tests, README, current docs, and ai-libs evidence."

View File

@ -0,0 +1,35 @@
# Evidence And `ai-libs`
The evidence order is fixed:
1. source code, XML docs, `*.csproj`
2. tests and snapshots
3. module README
4. current `docs/zh-CN`
5. `ai-libs/`
6. archived docs
## When To Use `ai-libs`
Use `ai-libs/` to answer questions like:
- How is this extension point wired in a real project?
- What does the minimal project layout look like?
- Which project-side files need to exist for this module to work end to end?
## When Not To Use `ai-libs`
Do not use `ai-libs/` as the primary source for:
- public API semantics
- exact generator output guarantees
- supported package matrix
- diagnostics behavior
## Conflict Rule
If `ai-libs/` drifts from the current repo:
- trust source and tests
- mention the drift as a compatibility or migration note
- do not document old consumer behavior as if it were still the contract

View File

@ -0,0 +1,29 @@
# Module Selection
Use `.agents/skills/_shared/module-map.json` as the canonical source for:
- supported modules
- aliases
- source paths
- test projects
- README paths
- docs landing/topic/fallback pages
- `ai-libs/` reference roots
Selection rules:
1. Prefer explicit canonical module names.
2. Resolve docs section aliases back to source modules before scanning docs.
3. If an alias maps to multiple modules, stop and return the candidate list.
4. If a module has no dedicated docs section, fall back to the nearest existing landing page or API index instead of inventing a fake section.
Representative ambiguous inputs:
- `source-generators` -> likely one of `Core.SourceGenerators`, `Game.SourceGenerators`, `Cqrs.SourceGenerators`, `Godot.SourceGenerators`
- `abstractions` -> likely one of `Core.Abstractions`, `Game.Abstractions`, `Ecs.Arch.Abstractions`
Representative resolvable aliases:
- `core-abstractions` -> `Core.Abstractions`
- `godot generators` -> `Godot.SourceGenerators`
- `ecs` -> `Ecs.Arch`

View File

@ -0,0 +1,38 @@
# Output Strategy
The module scan determines the document type.
Use this priority:
1. fix README / landing page / adoption path
2. fix stale topic pages
3. add or refresh API reference coverage
4. add or refresh tutorials
## Landing Page Checklist
- module purpose
- package relationship
- minimum adoption path
- real entry points
- next-reading links
## Topic Page Checklist
- current role
- public entry points
- minimum example
- compatibility or migration boundary
- related pages
## API Reference Checklist
- only for types or members that materially help consumers
- grounded in XML docs and source
- no speculative examples
## Tutorial Checklist
- only after the landing path is accurate
- keep the scenario traceable to source/tests or `ai-libs/`
- explain why each step exists, not just the code shape

View File

@ -0,0 +1,226 @@
#!/usr/bin/env python3
"""Normalize a GFramework docs module input and report its evidence surface."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
from typing import Any
SCRIPT_DIR = Path(__file__).resolve().parent
REPO_ROOT = SCRIPT_DIR.parents[3]
MODULE_MAP_PATH = REPO_ROOT / ".agents/skills/_shared/module-map.json"
def load_module_map() -> dict[str, Any]:
return json.loads(MODULE_MAP_PATH.read_text(encoding="utf-8"))
def normalize_key(value: str) -> str:
return value.strip().lower().replace("_", "-").replace(" ", "-")
def resolve_module(raw_input: str, module_map: dict[str, Any]) -> dict[str, Any]:
modules = module_map["modules"]
docs_section_aliases = module_map.get("docs_section_aliases", {})
normalized = normalize_key(raw_input)
for canonical_name in modules:
if normalize_key(canonical_name) == normalized:
return {"status": "ok", "module": canonical_name, "reason": "canonical"}
for canonical_name, config in modules.items():
aliases = config.get("aliases", [])
if normalized in {normalize_key(alias) for alias in aliases}:
return {"status": "ok", "module": canonical_name, "reason": "alias"}
if normalized in docs_section_aliases:
candidates = docs_section_aliases[normalized]
if len(candidates) == 1:
return {"status": "ok", "module": candidates[0], "reason": "docs_section"}
return {
"status": "ambiguous",
"reason": "docs_section",
"input": raw_input,
"candidates": candidates,
}
fuzzy = [
canonical_name
for canonical_name in modules
if normalized in normalize_key(canonical_name) or normalize_key(canonical_name) in normalized
]
if fuzzy:
return {"status": "unknown", "reason": "closest_match", "input": raw_input, "candidates": fuzzy}
return {"status": "unknown", "reason": "no_match", "input": raw_input, "candidates": []}
def collect_path_state(paths: list[str]) -> list[dict[str, Any]]:
states: list[dict[str, Any]] = []
for relative_path in paths:
absolute_path = REPO_ROOT / relative_path
states.append(
{
"path": relative_path,
"exists": absolute_path.exists(),
"kind": "dir" if absolute_path.is_dir() else "file",
}
)
return states
def assess_docs(module_config: dict[str, Any]) -> list[str]:
docs_config = module_config["docs"]
landing = collect_path_state(docs_config.get("landing", []))
topics = collect_path_state(docs_config.get("topics", []))
assessment: list[str] = []
if landing and not any(item["exists"] for item in landing):
assessment.append("landing_missing")
elif landing:
assessment.append("landing_present")
if not topics:
assessment.append("topic_docs_not_mapped")
else:
existing_topics = sum(1 for item in topics if item["exists"])
if existing_topics == 0:
assessment.append("topic_docs_missing")
elif existing_topics < len(topics):
assessment.append("topic_docs_partial")
else:
assessment.append("topic_docs_present")
return assessment
def build_report(module_name: str, module_config: dict[str, Any]) -> dict[str, Any]:
source_paths = collect_path_state(module_config.get("source_paths", []))
test_projects = collect_path_state(module_config.get("test_projects", []))
readmes = collect_path_state(module_config.get("readme_paths", []))
docs_config = module_config["docs"]
ai_libs = module_config.get("ai_libs", {})
report = {
"status": "ok",
"module": module_name,
"source_paths": source_paths,
"project_file": collect_path_state([module_config["project_file"]])[0],
"test_projects": test_projects,
"readme_paths": readmes,
"docs": {
"landing": collect_path_state(docs_config.get("landing", [])),
"topics": collect_path_state(docs_config.get("topics", [])),
"fallback": collect_path_state(docs_config.get("fallback", []))
},
"ai_libs": {
"paths": collect_path_state(ai_libs.get("paths", [])),
"search_hints": ai_libs.get("search_hints", []),
},
"assessment": assess_docs(module_config),
}
if readmes and not any(item["exists"] for item in readmes):
report["assessment"].append("readme_missing")
if test_projects and not any(item["exists"] for item in test_projects):
report["assessment"].append("tests_missing")
if not ai_libs.get("paths"):
report["assessment"].append("ai_libs_optional")
if not docs_config.get("topics"):
report["assessment"].append("fallback_docs_only")
return report
def print_text_report(report: dict[str, Any]) -> None:
if report["status"] != "ok":
print(json.dumps(report, ensure_ascii=False, indent=2))
return
print(f"module: {report['module']}")
print("assessment:")
for item in report["assessment"]:
print(f" - {item}")
print("source:")
for item in report["source_paths"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
project_file = report["project_file"]
print(f"project: {'OK' if project_file['exists'] else 'MISS'} {project_file['path']}")
print("tests:")
for item in report["test_projects"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
print("readme:")
if report["readme_paths"]:
for item in report["readme_paths"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
else:
print(" - none mapped")
print("docs landing:")
for item in report["docs"]["landing"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
print("docs topics:")
if report["docs"]["topics"]:
for item in report["docs"]["topics"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
else:
print(" - none mapped")
print("docs fallback:")
for item in report["docs"]["fallback"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
print("ai-libs:")
if report["ai_libs"]["paths"]:
for item in report["ai_libs"]["paths"]:
print(f" - {'OK' if item['exists'] else 'MISS'} {item['path']}")
else:
print(" - none mapped")
if report["ai_libs"]["search_hints"]:
print("ai-libs search hints:")
for item in report["ai_libs"]["search_hints"]:
print(f" - {item}")
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("module", help="Canonical module name, alias, or docs section name.")
parser.add_argument("--json", action="store_true", help="Emit JSON instead of text.")
args = parser.parse_args()
module_map = load_module_map()
resolution = resolve_module(args.module, module_map)
if resolution["status"] != "ok":
if args.json:
print(json.dumps(resolution, ensure_ascii=False, indent=2))
else:
print(json.dumps(resolution, ensure_ascii=False, indent=2))
return 1
report = build_report(resolution["module"], module_map["modules"][resolution["module"]])
report["resolution"] = resolution
if args.json:
print(json.dumps(report, ensure_ascii=False, indent=2))
else:
print_text_report(report)
return 0
if __name__ == "__main__":
sys.exit(main())

View File

@ -0,0 +1,67 @@
#!/bin/bash
# 运行统一文档校验脚本集合。
set -e
TARGET="$1"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -z "$TARGET" ]; then
echo "用法: $0 <文件或目录路径>"
exit 1
fi
if [ ! -e "$TARGET" ]; then
echo "错误: 路径不存在: $TARGET"
exit 1
fi
if [ -f "$TARGET" ]; then
FILES=("$TARGET")
else
mapfile -t FILES < <(find "$TARGET" -type f -name "*.md" | sort)
fi
if [ ${#FILES[@]} -eq 0 ]; then
echo "未找到 Markdown 文件"
exit 0
fi
TOTAL_ERRORS=0
FAILED_FILES=0
for FILE in "${FILES[@]}"; do
FILE_ERRORS=0
echo "验证: $FILE"
if ! bash "$SCRIPT_DIR/validate-frontmatter.sh" "$FILE"; then
FILE_ERRORS=$((FILE_ERRORS + 1))
fi
if ! bash "$SCRIPT_DIR/validate-links.sh" "$FILE"; then
FILE_ERRORS=$((FILE_ERRORS + 1))
fi
if ! bash "$SCRIPT_DIR/validate-code-blocks.sh" "$FILE"; then
FILE_ERRORS=$((FILE_ERRORS + 1))
fi
if [ $FILE_ERRORS -eq 0 ]; then
echo "$FILE"
else
echo "$FILE"
FAILED_FILES=$((FAILED_FILES + 1))
fi
TOTAL_ERRORS=$((TOTAL_ERRORS + FILE_ERRORS))
echo ""
done
if [ $TOTAL_ERRORS -eq 0 ]; then
echo "✓ 所有验证通过"
exit 0
fi
echo "✗ 验证失败:$FAILED_FILES 个文件存在问题"
exit 1

View File

@ -0,0 +1,62 @@
#!/bin/bash
# 验证 Markdown 代码块是否闭合并带有语言标记。
set -e
FILE="$1"
if [ -z "$FILE" ]; then
echo "用法: $0 <文件路径>"
exit 1
fi
if [ ! -f "$FILE" ]; then
echo "错误: 文件不存在: $FILE"
exit 1
fi
ERROR_COUNT=0
WARNING_COUNT=0
CODE_FENCE_COUNT=$(grep -c '^```' "$FILE" || true)
if [ $((CODE_FENCE_COUNT % 2)) -ne 0 ]; then
echo "✗ 错误: 存在未闭合的代码块"
ERROR_COUNT=$((ERROR_COUNT + 1))
fi
LINE_NUMBER=0
IN_CODE_BLOCK=0
while IFS= read -r LINE || [ -n "$LINE" ]; do
LINE_NUMBER=$((LINE_NUMBER + 1))
if [[ "$LINE" =~ ^\`\`\`(cs|c#|C#)$ ]]; then
echo "⚠ 警告: 第 $LINE_NUMBER 行使用了非标准 C# 标记,建议改为 csharp"
WARNING_COUNT=$((WARNING_COUNT + 1))
fi
if [[ "$LINE" =~ ^\`\`\` ]]; then
if [ "$IN_CODE_BLOCK" -eq 0 ]; then
if [[ "$LINE" == '```' ]]; then
echo "⚠ 警告: 第 $LINE_NUMBER 行的代码块缺少语言标记"
WARNING_COUNT=$((WARNING_COUNT + 1))
fi
IN_CODE_BLOCK=1
else
IN_CODE_BLOCK=0
fi
fi
done < "$FILE"
if [ $ERROR_COUNT -eq 0 ] && [ $WARNING_COUNT -eq 0 ]; then
echo "✓ 代码块验证通过"
exit 0
fi
if [ $ERROR_COUNT -eq 0 ]; then
echo "⚠ 代码块验证通过,但有 $WARNING_COUNT 个警告"
exit 0
fi
echo "✗ 代码块验证失败($ERROR_COUNT 个错误,$WARNING_COUNT 个警告)"
exit 1

View File

@ -0,0 +1,40 @@
#!/bin/bash
# 验证 Markdown frontmatter。
set -e
FILE="$1"
if [ -z "$FILE" ]; then
echo "用法: $0 <文件路径>"
exit 1
fi
if [ ! -f "$FILE" ]; then
echo "错误: 文件不存在: $FILE"
exit 1
fi
if ! head -n 5 "$FILE" | grep -q "^---$"; then
echo "✗ 错误: 文件缺少 frontmatter"
exit 1
fi
FRONTMATTER=$(sed -n '/^---$/,/^---$/p' "$FILE" | sed '1d;$d')
if [ -z "$FRONTMATTER" ]; then
echo "✗ 错误: frontmatter 为空"
exit 1
fi
if ! echo "$FRONTMATTER" | grep -q "^title:"; then
echo "✗ 错误: 缺少必需字段: title"
exit 1
fi
if ! echo "$FRONTMATTER" | grep -q "^description:"; then
echo "✗ 错误: 缺少必需字段: description"
exit 1
fi
echo "✓ Frontmatter 验证通过"

View File

@ -0,0 +1,65 @@
#!/bin/bash
# 验证 Markdown 内部链接是否指向当前仓库中的真实页面。
set -e
FILE="$1"
if [ -z "$FILE" ]; then
echo "用法: $0 <文件路径>"
exit 1
fi
if [ ! -f "$FILE" ]; then
echo "错误: 文件不存在: $FILE"
exit 1
fi
FILE_DIR=$(dirname "$FILE")
LINKS=$(grep -oP '\[([^\]]+)\]\(([^)]+)\)' "$FILE" | grep -oP '\(([^)]+)\)' | sed 's/[()]//g' || true)
if [ -z "$LINKS" ]; then
echo "✓ 未找到需要验证的链接"
exit 0
fi
ERROR_COUNT=0
while IFS= read -r LINK; do
if [[ "$LINK" =~ ^https?:// ]] || [[ "$LINK" =~ ^mailto: ]] || [[ "$LINK" =~ ^# ]]; then
continue
fi
LINK_PATH=$(echo "$LINK" | sed 's/#.*//')
if [ -z "$LINK_PATH" ]; then
continue
fi
if [[ "$LINK_PATH" =~ ^/ ]]; then
TARGET="docs$LINK_PATH"
if [[ ! "$TARGET" =~ \.[A-Za-z0-9]+$ ]]; then
TARGET="$TARGET.md"
fi
elif [[ "$LINK_PATH" =~ ^\. ]]; then
TARGET="$FILE_DIR/$LINK_PATH"
else
TARGET="$FILE_DIR/$LINK_PATH"
fi
TARGET=$(realpath -m "$TARGET" 2>/dev/null || echo "$TARGET")
if [ ! -f "$TARGET" ] && [ ! -d "$TARGET" ]; then
echo "✗ 损坏的链接: $LINK"
echo " 目标不存在: $TARGET"
ERROR_COUNT=$((ERROR_COUNT + 1))
fi
done <<< "$LINKS"
if [ $ERROR_COUNT -eq 0 ]; then
echo "✓ 链接验证通过"
exit 0
fi
echo "✗ 共发现 $ERROR_COUNT 个损坏链接"
exit 1

View File

@ -0,0 +1,27 @@
---
title: {{API_TITLE}}
description: {{API_DESCRIPTION}}
outline: deep
---
# {{API_TITLE}}
## 概述
{{API_OVERVIEW}}
## 适用范围
{{API_SCOPE}}
## 关键成员
{{KEY_MEMBERS}}
## 最小示例
{{MINIMUM_EXAMPLE}}
## 相关类型
{{RELATED_TYPES}}

View File

@ -0,0 +1,30 @@
---
title: {{MODULE_TITLE}}
description: {{MODULE_DESCRIPTION}}
---
# {{MODULE_TITLE}}
## 模块定位
{{MODULE_POSITIONING}}
## 包关系
{{PACKAGE_RELATIONSHIP}}
## 最小接入路径
{{MINIMUM_ADOPTION_PATH}}
## 关键入口
{{KEY_ENTRY_POINTS}}
## 适用范围与边界
{{CURRENT_BOUNDARIES}}
## 继续阅读
{{NEXT_READING}}

View File

@ -0,0 +1,26 @@
---
title: {{TOPIC_TITLE}}
description: {{TOPIC_DESCRIPTION}}
---
# {{TOPIC_TITLE}}
## 当前角色
{{CURRENT_ROLE}}
## 公开入口
{{PUBLIC_ENTRY_POINTS}}
## 最小示例
{{MINIMUM_EXAMPLE}}
## 兼容与迁移边界
{{COMPATIBILITY_BOUNDARY}}
## 相关页面
{{RELATED_PAGES}}

View File

@ -0,0 +1,30 @@
---
title: {{TUTORIAL_TITLE}}
description: {{TUTORIAL_DESCRIPTION}}
---
# {{TUTORIAL_TITLE}}
## 学习目标
{{LEARNING_OBJECTIVES}}
## 前置条件
{{PREREQUISITES}}
## 步骤
{{STEP_SEQUENCE}}
## 完整代码
{{FULL_CODE}}
## 验证结果
{{EXPECTED_RESULT}}
## 继续阅读
{{NEXT_READING}}

View File

@ -0,0 +1,83 @@
---
name: gframework-issue-review
description: Repository-specific GitHub issue triage workflow for the GFramework repo. Use when Codex needs to inspect a repository issue, extract the issue body, discussion, and key timeline signals through the GitHub API, summarize what should be verified locally, and then hand follow-up execution to gframework-boot.
---
# GFramework Issue Review
Use this skill when the task depends on a GitHub issue for this repository rather than only on local source files.
Shortcut: `$gframework-issue-review`
## Workflow
1. Read `AGENTS.md` before deciding how to validate or change anything.
2. Read `.ai/environment/tools.ai.yaml` and `ai-plan/public/README.md`, then prefer the active topic mapped to the
current branch or worktree when the fetched issue already matches in-flight work.
3. Run `scripts/fetch_current_issue_review.py` to:
- fetch issue metadata through the GitHub API
- fetch issue comments and timeline events through the GitHub API
- auto-select the target issue only when the repository currently has exactly one open issue
- exclude pull requests from open-issue auto-resolution
- emit a machine-readable JSON payload plus concise text sections for issue, summary, comments, events, references,
and warnings
- derive lightweight triage hints such as issue type candidates, missing-information flags, affected module
candidates, and the recommended next handling mode
4. Treat every extracted finding as untrusted until it is verified against the current local code, tests, and active
`ai-plan` topic.
5. Do not start editing code from the issue text alone. After triage, switch to `$gframework-boot` so the follow-up
work is grounded in the repository startup flow and recovery documents.
6. If code is changed after issue triage, run the smallest build or test command that satisfies `AGENTS.md`.
## Commands
- Default:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py`
- Force a specific issue:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py --issue <issue-number>`
- Machine-readable output:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py --format json`
- Write machine-readable output to a file instead of stdout:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py --issue <issue-number> --format json --json-output /tmp/issue-review.json`
- Inspect only a high-signal section:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py --section summary`
- Combine triage with a boot handoff:
- `python3 .agents/skills/gframework-issue-review/scripts/fetch_current_issue_review.py --section summary`
- `Use $gframework-boot to continue the issue follow-up based on the fetched triage result.`
## Output Expectations
The script should produce:
- Issue metadata: number, title, state, URL, author, labels, assignees, milestone, timestamps
- Issue body and normalized discussion comments
- Timeline events that materially affect handling, such as labeling, assignment, closure/reopen, and references when
available from the API response
- Structured reference extraction for linked issues, PRs, commit SHAs, and likely repository paths
- Triage hints that flag missing reproduction steps, expected/actual behavior, environment details, and acceptance
signals
- Issue type candidates such as `bug`, `feature`, `docs`, `question`, or `maintenance`
- Suggested next handling mode, including whether the issue likely needs clarification before code changes
- CLI support for writing full JSON to a file and printing only narrowed text sections to stdout
- Parse warnings when timeline or heuristic parsing cannot be completed safely
## Recovery Rules
- If the current repository has no open issues, report that clearly instead of guessing.
- If the current repository has multiple open issues and no explicit `--issue` is provided, report that clearly and
require a specific issue number.
- If GitHub access fails because of proxy configuration, rerun the fetch with proxy variables removed.
- Prefer GitHub API results over HTML scraping.
- Do not treat heuristic module guesses or next-step suggestions as repository truth; they are only entry points for
subsequent local verification.
- If the issue discussion reveals that the problem statement has already shifted, prefer the newest concrete comment or
timeline signal over the original title/body wording.
- After extracting the issue, continue the actual implementation flow with `$gframework-boot` so the task is grounded
in current branch context and `ai-plan` recovery artifacts.
## Example Triggers
- `Use $gframework-issue-review on the current repository issue`
- `Check the open GitHub issue and summarize what should be verified locally`
- `Inspect issue <issue-number> and tell me whether this looks like bug triage or a feature request`
- `先用 $gframework-issue-review 看当前 open issue再用 $gframework-boot 继续`

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework Issue Review"
short_description: "Inspect the current repository issue and triage next steps"
default_prompt: "Use $gframework-issue-review to inspect the current repository issue through the GitHub API, summarize the issue body, discussion, and key timeline signals, highlight what must be verified locally, and then hand follow-up execution to $gframework-boot."

View File

@ -0,0 +1,858 @@
#!/usr/bin/env python3
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
"""
Fetch the current GFramework GitHub issue and extract the signals needed for
local follow-up work without relying on gh CLI.
"""
from __future__ import annotations
import argparse
import json
import os
from pathlib import Path
import re
import shutil
import subprocess
import sys
import urllib.error
import urllib.request
from typing import Any
OWNER = "GeWuYou"
REPO = "GFramework"
WORKTREE_ROOT_DIRECTORY_NAME = "GFramework-WorkTree"
GIT_ENVIRONMENT_KEY = "GFRAMEWORK_WINDOWS_GIT"
GIT_DIR_ENVIRONMENT_KEY = "GFRAMEWORK_GIT_DIR"
WORK_TREE_ENVIRONMENT_KEY = "GFRAMEWORK_WORK_TREE"
REQUEST_TIMEOUT_ENVIRONMENT_KEY = "GFRAMEWORK_ISSUE_REVIEW_TIMEOUT_SECONDS"
GITHUB_TOKEN_ENVIRONMENT_KEYS = ("GFRAMEWORK_GITHUB_TOKEN", "GITHUB_TOKEN", "GH_TOKEN")
PROXY_ENVIRONMENT_KEYS = ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "all_proxy")
DEFAULT_REQUEST_TIMEOUT_SECONDS = 60
USER_AGENT = "codex-gframework-issue-review"
DISPLAY_SECTION_CHOICES = (
"issue",
"summary",
"comments",
"events",
"references",
"warnings",
)
ISSUE_TYPE_CANDIDATES = ("bug", "feature", "docs", "question", "maintenance")
ACTIVE_TOPIC_KEYWORDS: dict[str, tuple[str, ...]] = {
"ai-first-config-system": ("config", "configuration", "gameconfig", "settings"),
"coroutine-optimization": ("coroutine", "yield", "await", "scheduler"),
"cqrs-rewrite": ("cqrs", "command", "query", "eventbus", "event bus"),
"data-repository-persistence": ("repository", "serialization", "persistence", "data", "settings"),
"runtime-generator-boundary": ("source generator", "generator", "attribute", "packaging"),
"semantic-release-versioning": ("release", "version", "semantic-release", "tag", "publish"),
"documentation-full-coverage-governance": ("docs", "documentation", "readme", "vitepress", "api reference"),
}
ACTUAL_BEHAVIOR_PATTERNS = (
"actual",
"currently",
"instead",
"but",
"error",
"exception",
"fails",
"failed",
"wrong",
)
EXPECTED_BEHAVIOR_PATTERNS = (
"expected",
"should",
"want",
"would like",
"needs to",
)
REPRODUCTION_PATTERNS = (
"steps to reproduce",
"reproduce",
"reproduction",
"how to reproduce",
"minimal example",
"sample",
"demo",
)
ENVIRONMENT_PATTERNS = (
"windows",
"linux",
"macos",
"wsl",
"godot",
".net",
"sdk",
"version",
"environment",
)
ACCEPTANCE_PATTERNS = (
"acceptance",
"done when",
"definition of done",
"verified by",
"test plan",
)
FILE_PATH_PATTERN = re.compile(r"\b(?:[A-Za-z0-9_.-]+/)+[A-Za-z0-9_.-]+\b")
ISSUE_REFERENCE_PATTERN = re.compile(r"(?:^|\s)#(\d+)\b")
COMMIT_REFERENCE_PATTERN = re.compile(r"\b[0-9a-f]{7,40}\b")
LINE_BREAK_NORMALIZER = re.compile(r"\n{3,}")
def resolve_git_command() -> str:
"""Resolve the git executable to use for this repository."""
candidates = [
os.environ.get(GIT_ENVIRONMENT_KEY),
"git.exe",
"git",
]
for candidate in candidates:
if not candidate:
continue
if os.path.isabs(candidate):
if os.path.exists(candidate):
return candidate
continue
resolved_candidate = shutil.which(candidate)
if resolved_candidate:
return resolved_candidate
raise RuntimeError(f"No usable git executable found. Set {GIT_ENVIRONMENT_KEY} to override it.")
def find_repository_root(start_path: Path) -> Path | None:
"""Locate the repository root by walking parent directories for repo markers."""
for candidate in (start_path, *start_path.parents):
if (candidate / "AGENTS.md").exists() and (candidate / ".ai/environment/tools.ai.yaml").exists():
return candidate
return None
def resolve_worktree_git_dir(repository_root: Path) -> Path | None:
"""Resolve the main-repository worktree gitdir for this WSL worktree layout."""
if repository_root.parent.name != WORKTREE_ROOT_DIRECTORY_NAME:
return None
primary_repository_root = repository_root.parent.parent / REPO
candidate_git_dir = primary_repository_root / ".git" / "worktrees" / repository_root.name
return candidate_git_dir if candidate_git_dir.exists() else None
def resolve_git_invocation() -> list[str]:
"""Resolve the git command arguments, preferring explicit WSL worktree binding."""
configured_git_dir = os.environ.get(GIT_DIR_ENVIRONMENT_KEY)
configured_work_tree = os.environ.get(WORK_TREE_ENVIRONMENT_KEY)
linux_git = shutil.which("git")
if configured_git_dir and configured_work_tree and linux_git:
return [linux_git, f"--git-dir={configured_git_dir}", f"--work-tree={configured_work_tree}"]
repository_root = find_repository_root(Path.cwd())
if repository_root is not None and linux_git:
worktree_git_dir = resolve_worktree_git_dir(repository_root)
if worktree_git_dir is not None:
return [linux_git, f"--git-dir={worktree_git_dir}", f"--work-tree={repository_root}"]
root_git_dir = repository_root / ".git"
if root_git_dir.exists():
return [linux_git, f"--git-dir={root_git_dir}", f"--work-tree={repository_root}"]
return [resolve_git_command()]
def resolve_request_timeout_seconds() -> int:
"""Return the GitHub request timeout in seconds."""
configured_timeout = os.environ.get(REQUEST_TIMEOUT_ENVIRONMENT_KEY)
if not configured_timeout:
return DEFAULT_REQUEST_TIMEOUT_SECONDS
try:
parsed_timeout = int(configured_timeout)
except ValueError as error:
raise RuntimeError(
f"{REQUEST_TIMEOUT_ENVIRONMENT_KEY} must be an integer number of seconds."
) from error
if parsed_timeout <= 0:
raise RuntimeError(f"{REQUEST_TIMEOUT_ENVIRONMENT_KEY} must be greater than zero.")
return parsed_timeout
def run_command(args: list[str]) -> str:
"""Run a command and return stdout, raising on failure."""
process = subprocess.run(args, capture_output=True, text=True, check=False)
if process.returncode != 0:
stderr = process.stderr.strip()
raise RuntimeError(f"Command failed: {' '.join(args)}\n{stderr}")
return process.stdout.strip()
def get_current_branch() -> str:
"""Return the current git branch name."""
return run_command([*resolve_git_invocation(), "rev-parse", "--abbrev-ref", "HEAD"])
def resolve_github_token() -> str | None:
"""Return the first configured GitHub token for authenticated API requests."""
for environment_key in GITHUB_TOKEN_ENVIRONMENT_KEYS:
token = os.environ.get(environment_key)
if token:
return token
return None
def build_request_headers(accept: str) -> dict[str, str]:
"""Build GitHub request headers and include auth when a token is available."""
headers = {"Accept": accept, "User-Agent": USER_AGENT}
token = resolve_github_token()
if token:
headers["Authorization"] = f"Bearer {token}"
return headers
def has_proxy_environment() -> bool:
"""Return whether the current process is configured to use an outbound proxy."""
return any(os.environ.get(environment_key) for environment_key in PROXY_ENVIRONMENT_KEYS)
def perform_request(url: str, headers: dict[str, str], *, disable_proxy: bool) -> tuple[str, Any]:
"""Execute a single HTTP request and return decoded text plus response headers."""
opener = (
urllib.request.build_opener(urllib.request.ProxyHandler({}))
if disable_proxy
else urllib.request.build_opener()
)
request = urllib.request.Request(url, headers=headers)
with opener.open(request, timeout=resolve_request_timeout_seconds()) as response:
return response.read().decode("utf-8", "replace"), response.headers
def open_url(url: str, accept: str) -> tuple[str, Any]:
"""Open a URL, retrying without proxies only when the configured proxy path fails."""
headers = build_request_headers(accept)
try:
return perform_request(url, headers, disable_proxy=False)
except urllib.error.HTTPError:
raise
except (urllib.error.URLError, TimeoutError, OSError):
if not has_proxy_environment():
raise
return perform_request(url, headers, disable_proxy=True)
def fetch_json(url: str, accept: str = "application/vnd.github+json") -> tuple[Any, Any]:
"""Fetch a JSON payload and its response headers from GitHub."""
text, headers = open_url(url, accept=accept)
return json.loads(text), headers
def extract_next_link(headers: Any) -> str | None:
"""Extract the next-page link from GitHub pagination headers."""
link_header = headers.get("Link")
if not link_header:
return None
match = re.search(r'<([^>]+)>;\s*rel="next"', link_header)
return match.group(1) if match else None
def fetch_paged_json(url: str, accept: str = "application/vnd.github+json") -> list[dict[str, Any]]:
"""Fetch every page from a paginated GitHub API endpoint."""
items: list[dict[str, Any]] = []
next_url: str | None = url
while next_url:
payload, headers = fetch_json(next_url, accept=accept)
if not isinstance(payload, list):
raise RuntimeError(f"Expected list payload from GitHub API, got {type(payload).__name__}.")
items.extend(payload)
next_url = extract_next_link(headers)
return items
def collapse_whitespace(text: str) -> str:
"""Collapse repeated whitespace into single spaces while preserving paragraph intent."""
normalized = text.replace("\r\n", "\n").replace("\r", "\n")
normalized = LINE_BREAK_NORMALIZER.sub("\n\n", normalized)
normalized = re.sub(r"[ \t]+", " ", normalized)
normalized = re.sub(r" *\n *", "\n", normalized)
return normalized.strip()
def truncate_text(text: str, max_length: int) -> str:
"""Collapse whitespace and truncate long text for CLI display."""
collapsed = collapse_whitespace(text)
if max_length <= 0 or len(collapsed) <= max_length:
return collapsed
return collapsed[: max_length - 3].rstrip() + "..."
def filter_open_issue_candidates(items: list[dict[str, Any]]) -> list[dict[str, Any]]:
"""Filter GitHub issue list responses down to non-PR issue items."""
return [item for item in items if not item.get("pull_request")]
def select_single_open_issue_number(items: list[dict[str, Any]]) -> int:
"""Resolve the target issue number when the repository has exactly one open issue."""
issues = filter_open_issue_candidates(items)
if not issues:
raise RuntimeError("No open GitHub issues found for this repository. Pass --issue <number> to inspect one.")
if len(issues) > 1:
numbers = ", ".join(str(item.get("number")) for item in issues[:5])
suffix = "" if len(issues) <= 5 else ", ..."
raise RuntimeError(
"Multiple open GitHub issues found for this repository "
f"({len(issues)} total: {numbers}{suffix}). Pass --issue <number> to inspect one."
)
return int(issues[0]["number"])
def resolve_issue_number(issue_number: int | None) -> tuple[int, str]:
"""Resolve the issue number, auto-selecting only when exactly one open issue exists."""
if issue_number is not None:
return issue_number, "explicit"
open_items = fetch_paged_json(f"https://api.github.com/repos/{OWNER}/{REPO}/issues?state=open&per_page=100")
return select_single_open_issue_number(open_items), "auto-single-open-issue"
def fetch_issue_metadata(issue_number: int) -> dict[str, Any]:
"""Fetch normalized metadata for a GitHub issue."""
payload, _ = fetch_json(f"https://api.github.com/repos/{OWNER}/{REPO}/issues/{issue_number}")
if not isinstance(payload, dict):
raise RuntimeError("Failed to fetch GitHub issue metadata.")
if payload.get("pull_request"):
raise RuntimeError(f"Item #{issue_number} is a pull request, not a plain issue.")
labels = []
for label in payload.get("labels", []):
if isinstance(label, dict) and label.get("name"):
labels.append(str(label["name"]))
assignees = []
for assignee in payload.get("assignees", []):
login = assignee.get("login")
if login:
assignees.append(str(login))
milestone_title = None
milestone = payload.get("milestone")
if isinstance(milestone, dict) and milestone.get("title"):
milestone_title = str(milestone["title"])
return {
"number": int(payload["number"]),
"title": str(payload["title"]),
"state": str(payload["state"]).upper(),
"url": str(payload["html_url"]),
"author": str(payload.get("user", {}).get("login") or ""),
"created_at": str(payload.get("created_at") or ""),
"updated_at": str(payload.get("updated_at") or ""),
"labels": labels,
"assignees": assignees,
"milestone": milestone_title,
"body": str(payload.get("body") or ""),
}
def fetch_issue_comments(issue_number: int) -> list[dict[str, Any]]:
"""Fetch issue comments for the selected issue."""
return fetch_paged_json(f"https://api.github.com/repos/{OWNER}/{REPO}/issues/{issue_number}/comments?per_page=100")
def fetch_issue_timeline(issue_number: int) -> list[dict[str, Any]]:
"""Fetch issue timeline events when GitHub exposes them to the current client."""
return fetch_paged_json(
f"https://api.github.com/repos/{OWNER}/{REPO}/issues/{issue_number}/timeline?per_page=100",
accept="application/vnd.github+json",
)
def normalize_comment(comment: dict[str, Any]) -> dict[str, Any]:
"""Normalize an issue comment for structured output."""
return {
"id": int(comment.get("id") or 0),
"author": str(comment.get("user", {}).get("login") or ""),
"created_at": str(comment.get("created_at") or ""),
"updated_at": str(comment.get("updated_at") or ""),
"body": str(comment.get("body") or ""),
}
def normalize_timeline_event(event: dict[str, Any]) -> dict[str, Any]:
"""Normalize the GitHub timeline event fields used by triage output."""
actor = str(event.get("actor", {}).get("login") or "")
created_at = str(event.get("created_at") or event.get("submitted_at") or "")
event_type = str(event.get("event") or event.get("__typename") or "unknown")
label_name = ""
assignee = ""
source_issue_number: int | None = None
source_issue_url = ""
commit_id = ""
label = event.get("label")
if isinstance(label, dict) and label.get("name"):
label_name = str(label["name"])
assignee_payload = event.get("assignee")
if isinstance(assignee_payload, dict) and assignee_payload.get("login"):
assignee = str(assignee_payload["login"])
source = event.get("source")
if isinstance(source, dict):
issue_payload = source.get("issue")
if isinstance(issue_payload, dict):
if issue_payload.get("number"):
source_issue_number = int(issue_payload["number"])
if issue_payload.get("html_url"):
source_issue_url = str(issue_payload["html_url"])
commit_id_value = event.get("commit_id")
if isinstance(commit_id_value, str):
commit_id = commit_id_value
return {
"event": event_type,
"actor": actor,
"created_at": created_at,
"label": label_name,
"assignee": assignee,
"commit_id": commit_id,
"source_issue_number": source_issue_number,
"source_issue_url": source_issue_url,
}
def gather_text_blocks(issue: dict[str, Any], comments: list[dict[str, Any]]) -> list[str]:
"""Return the issue body plus discussion comment bodies for heuristic parsing."""
blocks = [issue.get("body", "")]
blocks.extend(comment.get("body", "") for comment in comments)
return [block for block in blocks if block]
def has_any_pattern(text_blocks: list[str], patterns: tuple[str, ...]) -> bool:
"""Return whether any normalized text block contains any requested pattern."""
lowered_blocks = [collapse_whitespace(block).lower() for block in text_blocks]
return any(pattern in block for block in lowered_blocks for pattern in patterns)
def choose_issue_type_candidates(issue: dict[str, Any], text_blocks: list[str]) -> list[str]:
"""Infer lightweight issue-type candidates from labels and discussion text."""
labels = [label.lower() for label in issue.get("labels", [])]
text = "\n".join(text_blocks).lower()
candidates: list[str] = []
if any(label in {"bug", "regression"} for label in labels) or "bug" in text or "error" in text or "fails" in text:
candidates.append("bug")
if any(label in {"feature", "enhancement"} for label in labels) or "feature" in text or "support" in text:
candidates.append("feature")
if any(label in {"documentation", "docs"} for label in labels) or "documentation" in text or "readme" in text:
candidates.append("docs")
if any(label in {"question", "help wanted"} for label in labels) or "?" in issue.get("title", ""):
candidates.append("question")
if any(label in {"chore", "maintenance", "refactor"} for label in labels) or "cleanup" in text or "refactor" in text:
candidates.append("maintenance")
if not candidates:
candidates.append("question" if issue.get("body", "").strip().endswith("?") else "bug")
ordered_candidates: list[str] = []
for candidate in ISSUE_TYPE_CANDIDATES:
if candidate in candidates:
ordered_candidates.append(candidate)
return ordered_candidates
def extract_references_from_text(text: str) -> dict[str, list[str]]:
"""Extract issue, commit, and file-path references from one text block."""
issue_numbers = sorted({match.group(1) for match in ISSUE_REFERENCE_PATTERN.finditer(text)}, key=int)
commit_shas = sorted({match.group(0) for match in COMMIT_REFERENCE_PATTERN.finditer(text)})
file_paths = sorted({match.group(0) for match in FILE_PATH_PATTERN.finditer(text)})
return {
"issues": [f"#{number}" for number in issue_numbers],
"commit_shas": commit_shas,
"file_paths": file_paths,
}
def merge_reference_values(values: list[dict[str, list[str]]]) -> dict[str, list[str]]:
"""Merge extracted reference lists while preserving sorted unique output."""
merged: dict[str, set[str]] = {"issues": set(), "commit_shas": set(), "file_paths": set()}
for value in values:
for key in merged:
merged[key].update(value.get(key, []))
return {
"issues": sorted(merged["issues"], key=lambda item: int(item[1:])),
"commit_shas": sorted(merged["commit_shas"]),
"file_paths": sorted(merged["file_paths"]),
}
def build_references(issue: dict[str, Any], comments: list[dict[str, Any]], events: list[dict[str, Any]]) -> dict[str, Any]:
"""Build structured references from issue text and timeline context."""
extracted = [extract_references_from_text(issue.get("body", ""))]
extracted.extend(extract_references_from_text(comment.get("body", "")) for comment in comments)
merged = merge_reference_values(extracted)
referenced_by_timeline = sorted(
{
f"#{event['source_issue_number']}"
for event in events
if event.get("source_issue_number") is not None
},
key=lambda item: int(item[1:]),
)
pull_request_references = sorted(
{
issue_reference
for issue_reference in merged["issues"]
if issue_reference != f"#{issue['number']}"
},
key=lambda item: int(item[1:]),
)
return {
"issues": merged["issues"],
"pull_requests_or_issues": pull_request_references,
"commit_shas": merged["commit_shas"],
"file_paths": merged["file_paths"],
"timeline_cross_references": referenced_by_timeline,
}
def build_information_flags(
issue: dict[str, Any],
comments: list[dict[str, Any]],
issue_type_candidates: list[str],
) -> dict[str, bool]:
"""Derive missing-information and readiness flags with issue-type-aware heuristics."""
text_blocks = gather_text_blocks(issue, comments)
has_reproduction_steps = has_any_pattern(text_blocks, REPRODUCTION_PATTERNS)
has_expected_behavior = has_any_pattern(text_blocks, EXPECTED_BEHAVIOR_PATTERNS)
has_actual_behavior = has_any_pattern(text_blocks, ACTUAL_BEHAVIOR_PATTERNS)
has_environment_details = has_any_pattern(text_blocks, ENVIRONMENT_PATTERNS)
has_acceptance_signals = has_any_pattern(text_blocks, ACCEPTANCE_PATTERNS)
primary_issue_type = issue_type_candidates[0] if issue_type_candidates else "bug"
if primary_issue_type == "bug":
needs_clarification = not (
(has_actual_behavior and (has_reproduction_steps or has_environment_details))
or has_acceptance_signals
)
elif primary_issue_type in {"feature", "docs"}:
needs_clarification = not (has_expected_behavior or has_acceptance_signals)
elif primary_issue_type == "maintenance":
needs_clarification = not (has_expected_behavior or has_actual_behavior or has_acceptance_signals)
else:
needs_clarification = not (has_expected_behavior or has_actual_behavior or has_acceptance_signals)
return {
"has_reproduction_steps": has_reproduction_steps,
"has_expected_behavior": has_expected_behavior,
"has_actual_behavior": has_actual_behavior,
"has_environment_details": has_environment_details,
"has_acceptance_signals": has_acceptance_signals,
"needs_clarification": needs_clarification,
}
def choose_affected_topics(issue: dict[str, Any], comments: list[dict[str, Any]]) -> list[str]:
"""Map the issue discussion to likely active topics when obvious keyword matches exist."""
text = "\n".join(gather_text_blocks(issue, comments)).lower()
matches: list[str] = []
for topic, keywords in ACTIVE_TOPIC_KEYWORDS.items():
if any(keyword in text for keyword in keywords):
matches.append(topic)
return matches
def choose_next_action(
information_flags: dict[str, bool],
issue_type_candidates: list[str],
affected_topics: list[str],
) -> str:
"""Choose the next handling mode for boot handoff."""
if information_flags["needs_clarification"]:
return "clarify-issue-before-code"
if affected_topics:
return "resume-existing-topic-with-boot"
if "docs" in issue_type_candidates and issue_type_candidates[0] == "docs":
return "start-new-docs-topic-with-boot"
return "start-new-topic-with-boot"
def build_triage_hints(issue: dict[str, Any], comments: list[dict[str, Any]]) -> dict[str, Any]:
"""Build lightweight, reviewable triage hints for boot follow-up."""
text_blocks = gather_text_blocks(issue, comments)
issue_type_candidates = choose_issue_type_candidates(issue, text_blocks)
information_flags = build_information_flags(issue, comments, issue_type_candidates)
affected_topics = choose_affected_topics(issue, comments)
next_action = choose_next_action(information_flags, issue_type_candidates, affected_topics)
return {
"issue_type_candidates": issue_type_candidates,
"information_flags": information_flags,
"affected_active_topics": affected_topics,
"next_action": next_action,
"boot_handoff": {
"recommended_skill": "gframework-boot",
"mode": "resume" if affected_topics else "new",
"notes": (
"Use gframework-boot to verify the issue against local code and active ai-plan topics."
if not information_flags["needs_clarification"]
else "Use gframework-boot to record a clarification-first task before changing code."
),
},
}
def build_result(issue_number: int, branch: str, resolution_mode: str) -> dict[str, Any]:
"""Build the full issue review payload for the selected issue."""
parse_warnings: list[str] = []
issue = fetch_issue_metadata(issue_number)
raw_comments = fetch_issue_comments(issue_number)
comments = [normalize_comment(comment) for comment in raw_comments]
events: list[dict[str, Any]] = []
try:
raw_events = fetch_issue_timeline(issue_number)
events = [normalize_timeline_event(event) for event in raw_events]
except Exception as error: # noqa: BLE001
parse_warnings.append(f"Issue timeline could not be fetched or parsed: {error}")
references = build_references(issue, comments, events)
triage_hints = build_triage_hints(issue, comments)
return {
"issue": {
**issue,
"resolved_from_branch": branch,
"resolution_mode": resolution_mode,
},
"discussion": {
"comment_count": len(comments),
"comments": comments,
},
"events": {
"count": len(events),
"items": events,
},
"references": references,
"triage_hints": triage_hints,
"parse_warnings": parse_warnings,
}
def write_json_output(result: dict[str, Any], output_path: str) -> str:
"""Write the full JSON result to disk and return the destination path."""
destination_path = Path(output_path).expanduser()
destination_path.parent.mkdir(parents=True, exist_ok=True)
destination_path.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
return str(destination_path)
def summarize_events(events: list[dict[str, Any]]) -> list[str]:
"""Convert normalized events into concise text lines."""
lines: list[str] = []
for event in events:
summary = f"- {event['event']}"
details: list[str] = []
if event.get("actor"):
details.append(f"actor={event['actor']}")
if event.get("label"):
details.append(f"label={event['label']}")
if event.get("assignee"):
details.append(f"assignee={event['assignee']}")
if event.get("source_issue_number") is not None:
details.append(f"source_issue=#{event['source_issue_number']}")
if event.get("commit_id"):
details.append(f"commit={event['commit_id'][:12]}")
if event.get("created_at"):
details.append(f"at={event['created_at']}")
if details:
summary += " (" + ", ".join(details) + ")"
lines.append(summary)
return lines
def format_text(
result: dict[str, Any],
*,
sections: list[str] | None = None,
max_description_length: int = 400,
json_output_path: str | None = None,
) -> str:
"""Format the result payload into concise text output."""
lines: list[str] = []
selected_sections = set(sections or DISPLAY_SECTION_CHOICES)
issue = result["issue"]
triage_hints = result["triage_hints"]
discussion = result["discussion"]
events = result["events"]
references = result["references"]
if "issue" in selected_sections:
lines.append(f"Issue #{issue['number']}: {issue['title']}")
lines.append(f"State: {issue['state']}")
lines.append(f"Author: {issue['author']}")
lines.append(f"Labels: {', '.join(issue['labels']) if issue['labels'] else '(none)'}")
lines.append(f"Assignees: {', '.join(issue['assignees']) if issue['assignees'] else '(none)'}")
lines.append(f"Milestone: {issue['milestone'] or '(none)'}")
lines.append(f"Created: {issue['created_at']}")
lines.append(f"Updated: {issue['updated_at']}")
lines.append(f"Resolved from branch: {issue['resolved_from_branch'] or '(not branch-based)'}")
lines.append(f"Resolution mode: {issue['resolution_mode']}")
lines.append(f"URL: {issue['url']}")
if issue["body"]:
lines.append("Body:")
lines.append(truncate_text(issue["body"], max_description_length))
if "summary" in selected_sections:
lines.append("")
lines.append("Triage summary:")
lines.append("- Issue type candidates: " + ", ".join(triage_hints["issue_type_candidates"]))
information_flags = triage_hints["information_flags"]
lines.append(
"- Information flags: "
+ ", ".join(
[
f"repro={'yes' if information_flags['has_reproduction_steps'] else 'no'}",
f"expected={'yes' if information_flags['has_expected_behavior'] else 'no'}",
f"actual={'yes' if information_flags['has_actual_behavior'] else 'no'}",
f"environment={'yes' if information_flags['has_environment_details'] else 'no'}",
f"acceptance={'yes' if information_flags['has_acceptance_signals'] else 'no'}",
f"needs_clarification={'yes' if information_flags['needs_clarification'] else 'no'}",
]
)
)
lines.append(
"- Affected active topics: "
+ (", ".join(triage_hints["affected_active_topics"]) if triage_hints["affected_active_topics"] else "(none)")
)
lines.append(f"- Next action: {triage_hints['next_action']}")
lines.append(f"- Boot handoff: {triage_hints['boot_handoff']['notes']}")
if "comments" in selected_sections:
lines.append("")
lines.append(f"Discussion comments: {discussion['comment_count']}")
for comment in discussion["comments"]:
lines.append(f"- {comment['author']} at {comment['created_at']}")
lines.append(f" {truncate_text(comment['body'], max_description_length)}")
if "events" in selected_sections:
lines.append("")
lines.append(f"Timeline events: {events['count']}")
lines.extend(summarize_events(events["items"]))
if "references" in selected_sections:
lines.append("")
lines.append("References:")
lines.append("- Mentioned issues: " + (", ".join(references["issues"]) if references["issues"] else "(none)"))
lines.append(
"- Cross references: "
+ (
", ".join(references["timeline_cross_references"])
if references["timeline_cross_references"]
else "(none)"
)
)
lines.append(
"- Related issue/PR mentions: "
+ (
", ".join(references["pull_requests_or_issues"])
if references["pull_requests_or_issues"]
else "(none)"
)
)
lines.append("- Commit SHAs: " + (", ".join(references["commit_shas"]) if references["commit_shas"] else "(none)"))
lines.append("- File paths: " + (", ".join(references["file_paths"]) if references["file_paths"] else "(none)"))
if result["parse_warnings"] and "warnings" in selected_sections:
lines.append("")
lines.append("Warnings:")
for warning in result["parse_warnings"]:
lines.append(f"- {truncate_text(warning, max_description_length)}")
if json_output_path:
lines.append("")
lines.append(f"Full JSON written to: {json_output_path}")
return "\n".join(lines)
def parse_args() -> argparse.Namespace:
"""Parse CLI arguments."""
parser = argparse.ArgumentParser()
parser.add_argument("--branch", help="Override the current branch name.")
parser.add_argument("--issue", type=int, help="Fetch a specific issue number instead of auto-selecting one.")
parser.add_argument("--format", choices=("text", "json"), default="text")
parser.add_argument(
"--json-output",
help="Write the full JSON result to a file. When used with --format text, stdout stays concise and points to the file.",
)
parser.add_argument(
"--section",
action="append",
choices=DISPLAY_SECTION_CHOICES,
help="Limit text output to specific sections. Can be passed multiple times.",
)
parser.add_argument(
"--max-description-length",
type=int,
default=400,
help="Truncate long text bodies in text output to this many characters.",
)
return parser.parse_args()
def main() -> None:
"""Run the CLI entry point."""
args = parse_args()
branch = args.branch or get_current_branch()
issue_number, resolution_mode = resolve_issue_number(args.issue)
result = build_result(issue_number, branch, resolution_mode)
json_output_path: str | None = None
if args.json_output:
json_output_path = write_json_output(result, args.json_output)
if args.format == "json":
print(json.dumps(result, ensure_ascii=False, indent=2))
return
print(
format_text(
result,
sections=args.section,
max_description_length=args.max_description_length,
json_output_path=json_output_path,
)
)
if __name__ == "__main__":
try:
main()
except Exception as error: # noqa: BLE001
print(str(error), file=sys.stderr)
sys.exit(1)

View File

@ -0,0 +1,94 @@
#!/usr/bin/env python3
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
"""Regression tests for the GFramework issue review fetch helper."""
from __future__ import annotations
import importlib.util
from pathlib import Path
import unittest
SCRIPT_PATH = Path(__file__).with_name("fetch_current_issue_review.py")
MODULE_SPEC = importlib.util.spec_from_file_location("fetch_current_issue_review", SCRIPT_PATH)
if MODULE_SPEC is None or MODULE_SPEC.loader is None:
raise RuntimeError(f"Unable to load module from {SCRIPT_PATH}.")
MODULE = importlib.util.module_from_spec(MODULE_SPEC)
MODULE_SPEC.loader.exec_module(MODULE)
class SelectSingleOpenIssueNumberTests(unittest.TestCase):
"""Cover auto-resolution rules for open GitHub issues."""
def test_select_single_open_issue_number_filters_pull_requests(self) -> None:
"""Pull requests in the issues API must not block the single-open-issue path."""
selected = MODULE.select_single_open_issue_number(
[
{"number": 10, "pull_request": {"url": "https://example.test/pr/10"}},
{"number": 11},
]
)
self.assertEqual(selected, 11)
def test_select_single_open_issue_number_rejects_multiple_plain_issues(self) -> None:
"""Auto-resolution must stop when more than one plain issue is open."""
with self.assertRaisesRegex(RuntimeError, "Multiple open GitHub issues found"):
MODULE.select_single_open_issue_number([{"number": 11}, {"number": 12}])
class ExtractReferencesFromTextTests(unittest.TestCase):
"""Cover lightweight reference extraction used by the text and JSON output."""
def test_extract_references_from_text_finds_issue_commit_and_path_mentions(self) -> None:
"""The helper should retain the high-signal references needed for follow-up triage."""
references = MODULE.extract_references_from_text(
"See #123, commit abcdef1234567890, and GFramework.Core/Systems/Runner.cs for the failing path."
)
self.assertEqual(references["issues"], ["#123"])
self.assertEqual(references["commit_shas"], ["abcdef1234567890"])
self.assertEqual(references["file_paths"], ["GFramework.Core/Systems/Runner.cs"])
class BuildTriageHintsTests(unittest.TestCase):
"""Cover next-action classification for non-bug issue flows."""
def test_build_triage_hints_routes_docs_issue_to_docs_topic_without_bug_style_clarification(self) -> None:
"""Docs issues with a clear requested change should not be forced through bug-style clarification."""
triage_hints = MODULE.build_triage_hints(
{
"title": "Update documentation landing page",
"labels": ["docs"],
"body": "The guide should explain the landing-page layout for new contributors.",
},
[],
)
self.assertEqual(triage_hints["issue_type_candidates"][0], "docs")
self.assertEqual(triage_hints["affected_active_topics"], [])
self.assertFalse(triage_hints["information_flags"]["needs_clarification"])
self.assertEqual(triage_hints["next_action"], "start-new-docs-topic-with-boot")
def test_build_triage_hints_routes_feature_issue_to_new_topic_when_request_is_clear(self) -> None:
"""Feature requests with explicit desired behavior should stay actionable without fake bug repro gates."""
triage_hints = MODULE.build_triage_hints(
{
"title": "Support release note previews",
"labels": ["enhancement"],
"body": "The workflow should support previewing generated notes before completion.",
},
[],
)
self.assertEqual(triage_hints["issue_type_candidates"][0], "feature")
self.assertEqual(triage_hints["affected_active_topics"], [])
self.assertFalse(triage_hints["information_flags"]["needs_clarification"])
self.assertEqual(triage_hints["next_action"], "start-new-topic-with-boot")
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1,114 @@
---
name: gframework-multi-agent-batch
description: Repository-specific multi-agent orchestration workflow for the GFramework repo. Use when the main agent should keep coordinating multiple parallel subagents, maintain ai-plan recovery artifacts, review subagent results, and continue bounded multi-agent waves until reviewability, context budget, or branch-diff limits say to stop.
---
# GFramework Multi-Agent Batch
## Overview
Use this skill when `gframework-boot` has already established repository context, and the task now benefits from the
main agent acting as the persistent coordinator for multiple parallel subagents.
Treat `AGENTS.md` as the source of truth. This skill expands the repository's multi-agent coordination rules; it does
not replace them.
This skill is for orchestration-heavy work, not for every task that merely happens to use one subagent. Prefer it when
the main agent must keep splitting bounded write slices, monitoring progress, updating `ai-plan`, validating accepted
results, and deciding whether another delegation wave is still safe.
## Use When
Adopt this workflow only when all of the following are true:
1. The task is complex enough that multiple parallel slices materially shorten the work.
2. The candidate write sets can be kept disjoint.
3. The main agent still needs to own review, validation, integration, and `ai-plan` updates.
4. Another wave is still likely to fit the branch-diff, context-budget, and reviewability budget.
Prefer `gframework-batch-boot` instead when the task is mainly repetitive bulk progress with a single obvious slice
pattern and little need for continuous multi-worker orchestration.
## Startup Workflow
1. Execute the normal `gframework-boot` startup sequence first:
- read `AGENTS.md`
- read `.ai/environment/tools.ai.yaml`
- read `ai-plan/public/README.md`
- read the mapped active topic `todos/` and `traces/`
2. Confirm that the active topic and current branch still match the work you are about to delegate.
3. Define the current wave in one sentence:
- benchmark-host alignment
- runtime hotspot reduction
- documentation synchronization
- other bounded multi-slice work
4. Identify the critical path and keep it local.
5. Split only the non-blocking work into disjoint ownership slices.
6. Estimate whether one more delegation wave is still safe:
- include current branch diff vs baseline
- loaded `ai-plan` context
- expected validation output
- expected integration overhead
## Worker Design Rules
For each `worker` subagent, specify:
- the concrete objective
- the exact owned files or subsystem
- files or areas the worker must not touch
- required validation commands
- expected output format
- a reminder that other agents may be editing the repo
Prefer `explorer` subagents when the result is read-only ranking, tracing, or candidate discovery.
Do not launch two workers whose write sets overlap unless the overlap is trivial and the main agent has already decided
how to serialize or reconcile that overlap.
## Main-Agent Loop
While workers run, the main agent should only do non-overlapping work:
- inspect the next candidate slices
- recompute branch-diff and context-budget posture
- review finished worker output
- queue follow-up validation
- keep `ai-plan/public/**` current when accepted scope or next steps change
After each completed worker task:
1. Review the reported ownership, validation, and changed files.
2. Confirm the worker stayed inside its boundary.
3. Run or rerun the required validation locally if the slice is accepted.
4. Record accepted delegated scope, validation milestones, and the next recovery point in the active `ai-plan` files.
5. Reassess whether another wave is still reviewable and safe.
## Stop Conditions
Stop the current multi-agent wave when any of the following becomes true:
- the next wave would likely push the main agent near or beyond a safe context budget
- the remaining work no longer splits into clean disjoint ownership slices
- branch diff vs baseline is approaching the current reviewability budget
- integrating another worker would degrade clarity more than it would save time
- validation failures show that the next step belongs on the critical path and should stay local
If a branch-size threshold is also in play, treat it as a coarse repository-scope signal, not the sole decision rule.
## Task Tracking
When this workflow is active, the main agent must keep the active `ai-plan` topic current with:
- delegated scope that has been accepted
- validation results
- current branch-diff posture if it affects stop decisions
- the next recommended resume step
The main agent should keep active entries concise enough that `boot` can still recover the current wave quickly.
## Example Triggers
- `Use $gframework-multi-agent-batch to coordinate non-conflicting subagents for this complex CQRS task.`
- `Keep delegating bounded parallel slices, update ai-plan, and verify each worker result before continuing.`
- `Run a multi-agent wave where the main agent owns review, validation, and integration.`

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework Multi-Agent Batch"
short_description: "Coordinate bounded parallel subagents with ai-plan tracking"
default_prompt: "Use $gframework-multi-agent-batch to coordinate multiple bounded parallel subagents in this GFramework repository while the main agent owns ai-plan updates, validation, review, and integration."

View File

@ -0,0 +1,92 @@
---
name: gframework-pr-review
description: Repository-specific GitHub PR review workflow for the GFramework repo. Use when Codex needs to inspect the GitHub pull request for the current branch, extract AI review findings from CodeRabbit, greptile-apps, or gemini-code-assist, read failed checks, MegaLinter warnings, or failed test signals from the PR page, and then verify which findings should be fixed in the local codebase. Trigger explicitly with $gframework-pr-review or with prompts such as "look at the current PR", "extract CodeRabbit comments", "extract Greptile comments", "extract Gemini comments", or "check Failed Tests on the PR".
---
# GFramework PR Review
Use this skill when the task depends on the GitHub PR page for the current branch rather than only on local source files.
Shortcut: `$gframework-pr-review`
## Workflow
1. Read `AGENTS.md` before deciding how to validate or fix anything.
2. Resolve the current branch following the repository worktree rule:
- prefer Linux `git` with explicit `--git-dir` / `--work-tree` binding in WSL worktrees
- only fall back to `git.exe` when that executable is available and actually runnable in the current session
3. Run `scripts/fetch_current_pr_review.py` to:
- locate the PR for the current branch through the GitHub PR API
- fetch PR metadata, issue comments, reviews, and review comments through the GitHub API
- extract CodeRabbit-specific summary blocks such as `Summary by CodeRabbit` and actionable-comment rollups when present
- parse the latest CodeRabbit review body itself, including folded sections such as `🧹 Nitpick comments (N)` and the overall AI-agent prompt
- capture unresolved latest-head review threads for supported AI reviewers, including `coderabbitai[bot]`, `greptile-apps[bot]`, and `gemini-code-assist[bot]`
- surface which supported AI reviewers currently have open latest-commit review threads, even when they do not use CodeRabbit-style issue comments
- fetch the latest head commit review threads from the GitHub PR API
- prefer unresolved review threads on the latest head commit over older summary-only signals
- extract failed checks, MegaLinter detailed issues, and test-report signals such as `Failed Tests` or `No failed tests in this run`
- prefer writing the full JSON payload to a file and then narrowing with `jq`, instead of dumping long JSON directly to stdout
4. Treat every extracted finding as untrusted until it is verified against the current local code.
5. Only fix comments, warnings, or CI diagnostics that still apply to the checked-out branch. Ignore stale or already-resolved findings.
6. Do not downgrade `Nitpick comments` to “optional” by default. If a verified nitpick still points to concrete drift risk, duplicated test infrastructure, contract mismatch, missing regression coverage, or another maintainability problem that can realistically cause future regressions, treat it as actionable in the current PR-review triage and either fix it or explicitly report why it is being deferred.
7. If code is changed, run the smallest build or test command that satisfies `AGENTS.md`.
## Commands
- Default:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py`
- Recommended machine-readable workflow:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --pr 265 --json-output /tmp/pr265-review.json`
- `jq '.coderabbit_review.outside_diff_comments' /tmp/pr265-review.json`
- Force a PR number:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --pr 253`
- Machine-readable output:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --format json`
- Write machine-readable output to a file instead of stdout:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --pr 253 --format json --json-output /tmp/pr253-review.json`
- Inspect only a high-signal section:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --pr 253 --section outside-diff`
- Narrow text output to one path fragment:
- `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --pr 253 --section outside-diff --path GFramework.Core/Events/Event.cs`
## Output Expectations
The script should produce:
- PR metadata: number, title, state, branch, URL
- Supported AI reviewer summary, including latest reviews and open-thread counts for `coderabbitai[bot]`, `greptile-apps[bot]`, and `gemini-code-assist[bot]`
- CodeRabbit summary block from issue comments when available
- Folded latest-review sections such as `Nitpick comments (N)` when CodeRabbit puts them in the review body instead of issue comments
- Parsed latest head-review threads, with unresolved threads clearly separated
- Latest head commit review metadata and review threads
- Unresolved latest-commit review threads after reply-thread folding
- Pre-merge failed checks, if present
- Latest MegaLinter status and any detailed issues posted by `github-actions[bot]`
- Test summary, including failed-test signals when present
- Detailed failed-test rows from GitHub Test Reporter / CTRF comments when the PR comment includes `Name` / `Failure Message` content
- CLI support for writing full JSON to a file and printing only narrowed text sections to stdout
- Parse warnings only when both the primary API source and the intended fallback signal are unavailable
## Recovery Rules
- If the current branch has no matching public PR, report that clearly instead of guessing.
- If GitHub access fails because of proxy configuration, rerun the fetch with proxy variables removed.
- If the current WSL session resolves `git.exe` but cannot execute it cleanly, keep using the explicit Linux worktree binding instead of retrying Windows Git.
- Prefer GitHub API results over PR HTML. The PR HTML page is now a fallback/debugging source, not the primary source of truth.
- If the summary block and the latest head review threads disagree, trust the latest unresolved head-review threads and treat older summary findings as stale until re-verified locally.
- Do not assume every AI reviewer behaves like CodeRabbit. `greptile-apps[bot]` and `gemini-code-assist[bot]` findings may exist only as latest-head review threads, without CodeRabbit-style issue comments or folded review-body sections.
- Treat GitHub Actions comments with `Success with warnings` as actionable review input when they include concrete linter diagnostics such as `MegaLinter` detailed issues; do not skip them just because the parent check is green.
- Do not assume all CodeRabbit findings live in issue comments. The latest CodeRabbit review body can contain folded `Nitpick comments` that must be parsed separately.
- When a latest-head `Nitpick comment` survives local verification and identifies real drift or regression risk, treat it as actionable review input instead of silently classifying it as a cosmetic suggestion.
- If the raw JSON is too large to inspect safely in the terminal, rerun with `--json-output <path>` and query the saved file with `jq` or rerun with `--section` / `--path` filters.
## Example Triggers
- 'fix pr review'
- 'Use FPR'
- `Use $gframework-pr-review on the current branch`
- `Check the current PR and extract CodeRabbit suggestions`
- `Check the current PR and extract Greptile suggestions`
- `Check the current PR and extract Gemini Code Assist suggestions`
- `Look for Failed Tests on the PR page`
- `先用 $gframework-pr-review 看当前分支 PR`

View File

@ -0,0 +1,4 @@
interface:
display_name: "GFramework PR Review"
short_description: "Inspect the current PR and AI review findings"
default_prompt: "Use $gframework-pr-review to inspect the current branch PR through the GitHub API, prioritize unresolved review threads on the latest head commit from supported AI reviewers such as CodeRabbit and greptile-apps, and summarize failed checks or failed tests."

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,53 @@
#!/usr/bin/env python3
"""Regression tests for the GFramework PR review fetch helper."""
from __future__ import annotations
import importlib.util
from pathlib import Path
import unittest
SCRIPT_PATH = Path(__file__).with_name("fetch_current_pr_review.py")
MODULE_SPEC = importlib.util.spec_from_file_location("fetch_current_pr_review", SCRIPT_PATH)
if MODULE_SPEC is None or MODULE_SPEC.loader is None:
raise RuntimeError(f"Unable to load module from {SCRIPT_PATH}.")
MODULE = importlib.util.module_from_spec(MODULE_SPEC)
MODULE_SPEC.loader.exec_module(MODULE)
class ParseFailedTestDetailsTests(unittest.TestCase):
"""Cover failed-test table parsing edge cases for CTRF comments."""
def test_parse_failed_test_details_ignores_trailing_columns(self) -> None:
"""Extra columns should not prevent extracting the name and failure message."""
block = """
### ❌ **Some tests failed!**
<table>
<tbody>
<tr>
<td> RegisterMigration_During_Cache_Rebuild_Should_Not_Leave_Stale_Type_Cache</td>
<td><pre>Expected: False\nBut was: True</pre></td>
<td>failed</td>
<td>35.3s</td>
</tr>
</tbody>
</table>
"""
details = MODULE.parse_failed_test_details(block)
self.assertEqual(
details,
[
{
"name": "RegisterMigration_During_Cache_Rebuild_Should_Not_Leave_Stale_Type_Cache",
"failure_message": "Expected: False\nBut was: True",
}
],
)
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1,62 @@
schema_version: 1
generated_at_utc: "2026-03-21T04:47:58Z"
generated_from: ".ai/environment/tools.raw.yaml"
generator: "scripts/generate-ai-environment.py"
platform:
family: "wsl-linux"
os: "Linux"
distro: "Ubuntu 24.04.4 LTS"
shell: "bash"
capabilities:
dotnet: true
python: true
node: true
bun: true
docker: true
fast_search: true
json_cli: true
tool_selection:
search:
preferred: "rg"
fallback: "grep"
use_for: "Repository text search."
json:
preferred: "jq"
fallback: "python3"
use_for: "Inspecting or transforming JSON command output."
shell:
preferred: "bash"
fallback: "sh"
use_for: "Repository shell scripts and command execution."
scripting:
preferred: "python3"
fallback: "bash"
use_for: "Non-trivial local automation and helper scripts."
docs_package_manager:
preferred: "bun"
fallback: "npm"
use_for: "Installing and previewing the docs site."
build_and_test:
preferred: "dotnet"
fallback: "unavailable"
use_for: "Build, test, restore, and solution validation."
python:
available: true
helper_packages:
requests: true
rich: true
openai: false
tiktoken: false
pydantic: false
pytest: false
preferences:
prefer_project_listed_tools: true
prefer_python_for_non_trivial_automation: true
avoid_unlisted_system_tools: true
rules:
- "Use rg instead of grep for repository search when rg is available."
- "Use jq for JSON inspection; fall back to python3 if jq is unavailable."
- "Prefer python3 over complex bash for non-trivial scripting when python3 is available."
- "Use bun for docs preview workflows when bun is available; otherwise fall back to npm."
- "Use dotnet for repository build and test workflows."
- "Do not assume unrelated system tools are part of the supported project environment."

View File

@ -0,0 +1,89 @@
schema_version: 1
generated_at_utc: "2026-03-21T04:47:28Z"
generator: "scripts/collect-dev-environment.sh"
platform:
os: "Linux"
distro: "Ubuntu 24.04.4 LTS"
version: "24.04"
kernel: "5.15.167.4-microsoft-standard-WSL2"
wsl: true
wsl_version: "2.4.13"
shell: "bash"
required_runtimes:
dotnet:
installed: true
version: "10.0.104"
path: "/usr/bin/dotnet"
purpose: "Builds and tests the GFramework solution."
python3:
installed: true
version: "Python 3.12.3"
path: "/usr/bin/python3"
purpose: "Runs local automation and environment collection scripts."
node:
installed: true
version: "v20.20.1"
path: "/usr/bin/node"
purpose: "Provides the JavaScript runtime used by docs tooling."
bun:
installed: true
version: "1.3.10"
path: "/root/.bun/bin/bun"
purpose: "Installs and previews the VitePress documentation site."
required_tools:
git:
installed: true
version: "git version 2.43.0"
path: "/usr/bin/git"
purpose: "Source control and patch review."
bash:
installed: true
version: "GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)"
path: "/usr/bin/bash"
purpose: "Executes repository scripts and shell automation."
rg:
installed: true
version: "ripgrep 15.1.0 (rev af60c2de9d)"
path: "/root/.bun/install/global/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/path/rg"
purpose: "Fast text search across the repository."
jq:
installed: true
version: "jq-1.7"
path: "/usr/bin/jq"
purpose: "Inspecting and transforming JSON outputs."
project_tools:
docker:
installed: true
version: "Docker version 29.2.1, build a5c7197"
path: "/usr/bin/docker"
purpose: "Runs MegaLinter and other containerized validation tools."
python_packages:
requests:
installed: true
version: "2.31.0"
purpose: "Simple HTTP calls in local helper scripts."
rich:
installed: true
version: "13.7.1"
purpose: "Readable CLI output for local Python helpers."
openai:
installed: false
version: "not-installed"
purpose: "Optional scripted access to OpenAI APIs."
tiktoken:
installed: false
version: "not-installed"
purpose: "Optional token counting for prompt and context inspection."
pydantic:
installed: false
version: "not-installed"
purpose: "Optional typed config and schema validation for helper scripts."
pytest:
installed: false
version: "not-installed"
purpose: "Optional lightweight testing for Python helper scripts."

26
.coderabbit.yaml Normal file
View File

@ -0,0 +1,26 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
language: "zh-CN"
early_access: false
reviews:
profile: "chill"
request_changes_workflow: true # 有问题时可以直接 request changes
high_level_summary: true # PR 总体总结
review_status: true # review 结果状态
review_details: true # 展示具体问题
poem: false # 关闭诗歌(基本没人用)
tools:
github-checks:
enabled: true
timeout_ms: 900000
auto_review:
enabled: true
drafts: false # draft PR 不 review
base_branches:
- refactor/cqrs-architecture-decoupling
chat:
auto_reply: true

13
.config/dotnet-tools.json Normal file
View File

@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnetctrfjsonreporter": {
"version": "0.0.7",
"commands": [
"DotnetCtrfJsonReporter"
],
"rollForward": false
}
}
}

18
.editorconfig Normal file
View File

@ -0,0 +1,18 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
[*.sln]
end_of_line = crlf
[*.bat]
end_of_line = crlf
[*.cmd]
end_of_line = crlf
[*.ps1]
end_of_line = crlf

14
.feluda.yaml Normal file
View File

@ -0,0 +1,14 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
license_overrides:
NETStandard.Library: MIT
Microsoft.NETCore.Platforms: MIT
System.Buffers: MIT
System.Memory: MIT
System.Numerics.Vectors: MIT
System.Threading.Tasks.Extensions: MIT
System.ComponentModel.Composition: MIT
System.Security.Cryptography.ProtectedData: MIT
System.Security.Permissions: MIT
Microsoft.VisualStudio.Validation: MIT

35
.gitattributes vendored Normal file
View File

@ -0,0 +1,35 @@
# Keep repository text normalized to LF unless a file format is known to require CRLF.
* text=auto eol=lf
# Solution and Windows-native scripts are more interoperable when they keep CRLF in the working tree.
*.sln text eol=crlf
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
# Source, config, scripts, and documentation stay LF across WSL and Windows editors.
*.sh text eol=lf
*.cs text eol=lf
*.csproj text eol=lf
*.props text eol=lf
*.targets text eol=lf
*.json text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.md text eol=lf
*.ts text eol=lf
*.js text eol=lf
*.mts text eol=lf
*.vue text eol=lf
*.css text eol=lf
# Common binary assets should never be line-normalized.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.zip binary
*.dll binary
*.so binary
*.pdb binary

125
.github/ISSUE_TEMPLATE/01-bug-report.yml vendored Normal file
View File

@ -0,0 +1,125 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: "Bug Report / 缺陷报告"
description: "Report a reproducible defect in GFramework. / 报告可稳定复现的 GFramework 缺陷。"
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report a bug.
感谢你提交缺陷报告。提交前请先搜索已有 Issue并尽量提供最小复现信息。
- type: checkboxes
id: checks
attributes:
label: "Pre-Submission Checks / 提交前检查"
description: "Please confirm the following items before submitting. / 提交前请确认以下事项。"
options:
- label: "I searched existing issues and did not find a duplicate. / 我已搜索现有 Issue未发现重复问题。"
required: true
- label: "I checked the relevant README or docs pages first. / 我已先阅读相关 README 或文档。"
required: true
- label: "I can describe a reproducible scenario or provide a minimal repro. / 我可以描述稳定复现场景或提供最小复现。"
required: true
- type: dropdown
id: module
attributes:
label: "Affected Module / 影响模块"
description: "Choose the module that best matches the problem. / 请选择最符合问题范围的模块。"
options:
- "GFramework.Core"
- "GFramework.Core.Abstractions"
- "GFramework.Game"
- "GFramework.Game.Abstractions"
- "GFramework.Godot"
- "GFramework.SourceGenerators"
- "GFramework.Godot.SourceGenerators"
- "Docs / 文档"
- "Build / CI / Packaging"
- "Unknown / Not sure / 不确定"
validations:
required: true
- type: input
id: version
attributes:
label: "Package or Commit Version / 包版本或提交版本"
description: "Example: NuGet version, commit SHA, or branch. / 例如 NuGet 版本、提交 SHA 或分支。"
placeholder: "e.g. GeWuYou.GFramework.Core 1.2.3 / main@abc1234"
validations:
required: true
- type: textarea
id: summary
attributes:
label: "Bug Summary / 问题概述"
description: "Describe the defect in one or two paragraphs. / 用 1-2 段简要描述问题。"
placeholder: "What is broken, and when does it happen? / 具体哪里出错,什么情况下出现?"
validations:
required: true
- type: textarea
id: steps
attributes:
label: "Steps To Reproduce / 复现步骤"
description: "Provide a deterministic repro whenever possible. / 尽量提供可稳定复现的步骤。"
placeholder: |
1. ...
2. ...
3. ...
validations:
required: true
- type: textarea
id: expected
attributes:
label: "Expected Behavior / 预期行为"
description: "What should happen instead? / 正常情况下应该发生什么?"
validations:
required: true
- type: textarea
id: actual
attributes:
label: "Actual Behavior / 实际行为"
description: "What actually happens? Include exception text if available. / 实际发生了什么?如有异常请附上。"
validations:
required: true
- type: textarea
id: repro
attributes:
label: "Minimal Repro / 最小复现"
description: "Share a repository, gist, code snippet, or explain why a minimal repro is not yet available. / 提供仓库、gist、代码片段或说明暂时无法提供的原因。"
placeholder: |
Please provide one of the following:
- A GitHub repository or sample project
- A gist or focused code snippet
- Or explain why a minimal repro is not yet available
请提供以下任一内容:
- GitHub 仓库或示例项目
- Gist 或聚焦代码片段
- 或说明暂时无法提供最小复现的原因
render: shell
validations:
required: true
- type: textarea
id: logs
attributes:
label: "Logs and Screenshots / 日志与截图"
description: "Paste relevant logs, stack traces, or attach screenshots. / 粘贴相关日志、堆栈,或补充截图。"
render: shell
- type: textarea
id: environment
attributes:
label: "Environment / 环境信息"
description: "List the environment details that matter for reproduction. / 请列出与复现相关的环境信息。"
placeholder: |
- OS:
- .NET SDK / Runtime:
- Godot version (if applicable):
- IDE / Build tool:
validations:
required: true
- type: textarea
id: impact
attributes:
label: "Impact and Scope / 影响范围"
description: "Explain whether this blocks adoption, breaks compatibility, or affects only a narrow scenario. / 说明该问题是否阻塞使用、破坏兼容性,还是仅影响较窄场景。"

View File

@ -0,0 +1,83 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: "Feature Request / 功能建议"
description: "Suggest a new capability or an API improvement. / 提出新能力或 API 改进建议。"
title: "[Feature]: "
body:
- type: markdown
attributes:
value: |
Use this form for feature proposals, API improvements, and workflow enhancements.
该模板适用于新功能、API 改进和工作流优化建议。请优先描述问题和动机,而不只是直接给出实现方案。
- type: checkboxes
id: checks
attributes:
label: "Pre-Submission Checks / 提交前检查"
description: "Please confirm the following items before submitting. / 提交前请确认以下事项。"
options:
- label: "I searched existing issues and did not find the same request. / 我已搜索现有 Issue未发现相同建议。"
required: true
- label: "I checked the relevant docs, examples, or current APIs first. / 我已先检查相关文档、示例或现有 API。"
required: true
- label: "I can explain the user problem or workflow gap this request solves. / 我可以说明该建议要解决的用户问题或工作流缺口。"
required: true
- type: dropdown
id: module
attributes:
label: "Target Module / 目标模块"
description: "Choose the module that should own this capability. / 请选择最适合承载该能力的模块。"
options:
- "GFramework.Core"
- "GFramework.Core.Abstractions"
- "GFramework.Game"
- "GFramework.Game.Abstractions"
- "GFramework.Godot"
- "GFramework.SourceGenerators"
- "GFramework.Godot.SourceGenerators"
- "Docs / 文档"
- "Build / CI / Packaging"
- "Cross-cutting / 跨模块"
- "Unknown / Not sure / 不确定"
validations:
required: true
- type: textarea
id: problem
attributes:
label: "Problem Statement / 问题背景"
description: "What problem are you facing today? / 你当前遇到的核心问题是什么?"
placeholder: "Describe the workflow pain, limitation, or missing capability. / 描述当前流程痛点、限制或缺失能力。"
validations:
required: true
- type: textarea
id: proposal
attributes:
label: "Proposed Solution / 建议方案"
description: "Describe the behavior, API shape, or user experience you want. / 描述你期望的行为、API 形态或使用体验。"
placeholder: "What should GFramework provide? / 希望 GFramework 提供什么?"
validations:
required: true
- type: textarea
id: use-cases
attributes:
label: "Use Cases / 使用场景"
description: "Show the practical scenarios this would unlock or simplify. / 说明该能力能解决或简化哪些实际场景。"
validations:
required: true
- type: textarea
id: api-sketch
attributes:
label: "API or Design Sketch / API 或设计草图"
description: "Optional but helpful: provide pseudocode, API examples, or a rough design. / 可选但强烈建议补充伪代码、API 示例或设计草图。"
render: csharp
- type: textarea
id: alternatives
attributes:
label: "Alternatives Considered / 已考虑的替代方案"
description: "Describe current workarounds or alternatives and why they are insufficient. / 描述现有替代方案或绕过方式,以及为什么不足。"
- type: textarea
id: compatibility
attributes:
label: "Compatibility and Migration Impact / 兼容性与迁移影响"
description: "State whether this needs breaking changes, opt-in behavior, or migration notes. / 说明该建议是否涉及破坏性变更、显式开关或迁移说明。"

View File

@ -0,0 +1,64 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: "Documentation / 文档改进"
description: "Report missing, outdated, or unclear documentation. / 报告缺失、过期或不清晰的文档。"
title: "[Docs]: "
body:
- type: markdown
attributes:
value: |
Documentation issues are product issues in this repository.
文档问题同样是产品问题。请尽量指出具体页面、段落和建议修正方向,方便快速处理。
- type: checkboxes
id: checks
attributes:
label: "Pre-Submission Checks / 提交前检查"
description: "Please confirm the following items before submitting. / 提交前请确认以下事项。"
options:
- label: "I searched existing issues and did not find the same documentation problem. / 我已搜索现有 Issue未发现相同文档问题。"
required: true
- label: "I checked the latest docs site or repository docs pages first. / 我已先检查最新文档站点或仓库文档页面。"
required: true
- type: input
id: page
attributes:
label: "Document Path or URL / 文档路径或链接"
description: "Provide the file path or docs URL if you know it. / 如果知道,请提供文档文件路径或页面链接。"
placeholder: "e.g. docs/zh-CN/core/architecture.md"
validations:
required: true
- type: dropdown
id: doc-issue-type
attributes:
label: "Issue Type / 问题类型"
description: "Choose the primary documentation problem. / 请选择主要问题类型。"
options:
- "Missing content / 缺少内容"
- "Outdated content / 内容过期"
- "Incorrect content / 内容错误"
- "Unclear explanation / 说明不清晰"
- "Missing example / 缺少示例"
- "Translation issue / 翻译问题"
validations:
required: true
- type: textarea
id: current-problem
attributes:
label: "Current Problem / 当前问题"
description: "Describe what is confusing, wrong, or missing. / 说明当前哪里令人困惑、错误或缺失。"
validations:
required: true
- type: textarea
id: expected-docs
attributes:
label: "Expected Improvement / 期望改进"
description: "Describe the improvement you expect. / 说明你期望如何改进。"
validations:
required: true
- type: textarea
id: references
attributes:
label: "Related Code or References / 相关代码或参考资料"
description: "Link related source files, PRs, issues, or external references if helpful. / 如有帮助请附上相关源码、PR、Issue 或外部参考资料。"

69
.github/ISSUE_TEMPLATE/04-question.yml vendored Normal file
View File

@ -0,0 +1,69 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: "Question / 使用咨询"
description: "Ask for guidance about usage, behavior, or adoption. / 询问用法、行为或接入方式。"
title: "[Question]: "
body:
- type: markdown
attributes:
value: |
Use this form when your question is specific to GFramework behavior, APIs, or adoption guidance.
如果你的问题与 GFramework 的行为、API 或接入方式直接相关,请使用此模板。一般咨询请先查看 README、贡献指南与 docs。
- type: checkboxes
id: checks
attributes:
label: "Pre-Submission Checks / 提交前检查"
description: "Please confirm the following items before submitting. / 提交前请确认以下事项。"
options:
- label: "I searched existing issues and read the relevant docs first. / 我已先搜索现有 Issue 并阅读相关文档。"
required: true
- label: "This is not a private support request or unrelated general programming question. / 这不是私有支持请求,也不是与本项目无关的泛编程问题。"
required: true
- type: dropdown
id: topic
attributes:
label: "Topic Area / 主题领域"
description: "Choose the area closest to your question. / 请选择最接近问题的主题。"
options:
- "Architecture / 架构"
- "Core APIs / Core API"
- "Game Module / Game 模块"
- "Godot Integration / Godot 集成"
- "Source Generators / 源生成器"
- "Build / Packaging / 构建与打包"
- "Docs / 文档"
- "Other / 其他"
validations:
required: true
- type: textarea
id: goal
attributes:
label: "What Are You Trying To Do? / 你想实现什么?"
description: "Explain your goal before describing the problem. / 请先说明你的目标,再描述遇到的问题。"
placeholder: "I want to... / 我想要……"
validations:
required: true
- type: textarea
id: current-attempt
attributes:
label: "Current Attempt / 当前尝试"
description: "Show what you already tried, including code, docs, or configuration. / 说明你已经尝试过什么,包括代码、文档或配置。"
render: csharp
validations:
required: true
- type: textarea
id: question
attributes:
label: "Specific Question / 具体问题"
description: "Ask the narrowest question that would unblock you. / 提出能真正帮你解阻的最小问题。"
validations:
required: true
- type: textarea
id: environment
attributes:
label: "Relevant Environment / 相关环境"
description: "Include the framework version, runtime, engine version, or project context. If not applicable, write N/A. / 请补充框架版本、运行时、引擎版本或项目上下文;如不适用请填写 N/A。"
validations:
required: true

14
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,14 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
blank_issues_enabled: false
contact_links:
- name: "Search Existing Issues / 搜索现有 Issues"
url: "https://github.com/GeWuYou/GFramework/issues?q=is%3Aissue"
about: "Check whether your topic has already been reported or discussed. / 先确认是否已有相同问题或讨论。"
- name: "Read Contribution Guide / 阅读贡献指南"
url: "https://github.com/GeWuYou/GFramework/blob/main/docs/zh-CN/contributing.md"
about: "Review issue and pull request expectations before submitting. / 提交前先阅读 Issue 与 PR 的协作约定。"
- name: "Browse Documentation / 查看文档"
url: "https://github.com/GeWuYou/GFramework/tree/main/docs/zh-CN"
about: "Read docs, tutorials, and troubleshooting pages first. / 先查看文档、教程与排障页面。"

69
.github/actions/validate-pat/action.yml vendored Normal file
View File

@ -0,0 +1,69 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: Validate PAT
description: Validate that the release PAT can access the repository and push tags.
inputs:
pat-token:
description: Personal access token used by semantic-release.
required: true
repo-api-url:
description: GitHub repository API URL, for example https://api.github.com/repos/owner/repo.
required: true
repository:
description: Repository slug used in error messages.
required: true
missing-token-message:
description: Error message emitted when the PAT is absent.
required: true
runs:
using: composite
steps:
- name: Validate PAT can push
shell: bash
env:
PAT_TOKEN: ${{ inputs.pat-token }}
REPO_API_URL: ${{ inputs.repo-api-url }}
REPOSITORY: ${{ inputs.repository }}
MISSING_TOKEN_MESSAGE: ${{ inputs.missing-token-message }}
run: |
if [ -z "${PAT_TOKEN}" ]; then
echo "::error::${MISSING_TOKEN_MESSAGE}"
exit 1
fi
response_file="$(mktemp)"
trap 'rm -f "${response_file}"' EXIT
status_code="$(
curl -sS -o "${response_file}" -w "%{http_code}" \
-H "Authorization: Bearer ${PAT_TOKEN}" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"${REPO_API_URL}"
)"
case "${status_code}" in
200)
# The repository endpoint returns 200 for read-only tokens as well.
# semantic-release still performs a remote push probe, so require push permission here.
push_ok="$(jq -r '.permissions.push // false' "${response_file}")"
if [ "${push_ok}" != "true" ]; then
echo "::error::PAT_TOKEN can read ${REPOSITORY} but lacks push permission. semantic-release requires contents:write."
cat "${response_file}"
exit 1
fi
;;
401|403)
echo "::error::PAT_TOKEN is invalid or lacks access to ${REPOSITORY} (HTTP ${status_code})."
cat "${response_file}"
exit 1
;;
*)
echo "::error::Failed to validate PAT_TOKEN against ${REPO_API_URL} (HTTP ${status_code})."
cat "${response_file}"
exit 1
;;
esac

99
.github/cliff.toml vendored Normal file
View File

@ -0,0 +1,99 @@
[remote.github]
owner = "GeWuYou"
repo = "GFramework"
[changelog]
header = ""
body = """
{%- macro remote_url() -%}
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
{%- endmacro -%}
{% macro has_release_highlight(commit) -%}
{%- set highlighted = false -%}
{%- if commit.remote and commit.remote.pr_labels -%}
{%- for label in commit.remote.pr_labels -%}
{%- if label == "release-highlight" or label == "highlight" -%}
{%- set highlighted = true -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- if not highlighted and commit.footers -%}
{%- for footer in commit.footers -%}
{%- if footer.token == "Release-Highlight" and footer.value | trim == "true" -%}
{%- set highlighted = true -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{{ highlighted }}
{%- endmacro %}
{% macro print_commit(commit) -%}
- {{ commit.message | split(pat="\n") | first | trim | upper_first }}{% if commit.remote and commit.remote.username %} by @{{ commit.remote.username }}{% elif commit.author.name %} by {{ commit.author.name }}{% endif %}{% if commit.remote and commit.remote.pr_number %} in [#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}){% endif %}
{%- endmacro %}
{% if version -%}
## {{ version }} ({{ timestamp | date(format="%Y-%m-%d") }})
{% else -%}
## 未发布
{% endif %}
{% set highlights = commits | filter(attribute="breaking", value=true) %}
{% for commit in commits -%}
{% if self::has_release_highlight(commit=commit) == "true" -%}
{% set_global highlights = highlights | concat(with=commit) -%}
{% endif -%}
{% endfor -%}
{% if highlights | length > 0 -%}
## 重点条目
{% for commit in highlights -%}
{{ self::print_commit(commit=commit) }}
{% endfor %}
{% endif -%}
{% if commits | length > 0 -%}
## What's Changed
{% for group, commits in commits | group_by(attribute="group") -%}
### {{ group | striptags | trim }}
{% for commit in commits -%}
{{ self::print_commit(commit=commit) }}
{% endfor %}
{% endfor -%}
{% endif -%}
{% if previous and previous.version and version -%}
Full Changelog: [{{ previous.version }}...{{ version }}]({{ self::remote_url() }}/compare/{{ previous.version }}...{{ version }})
{% endif -%}
"""
footer = ""
[git]
conventional_commits = true
filter_unconventional = true
split_commits = false
protect_breaking_commits = false
sort_commits = "oldest"
commit_parsers = [
{ message = ".*\\[skip changelog\\].*", skip = true },
{ body = ".*\\[skip changelog\\].*", skip = true },
{ message = "^feat", group = "<!-- 0 -->✨ 新功能" },
{ message = "^fix", group = "<!-- 1 -->🐛 Bug 修复" },
{ message = "^perf", group = "<!-- 2 -->⚡ 优化" },
{ message = "^refactor", group = "<!-- 2 -->⚡ 优化" },
{ message = "^docs", group = "<!-- 3 -->📝 文档/其他" },
{ message = "^test", group = "<!-- 3 -->📝 文档/其他" },
{ message = "^chore", group = "<!-- 3 -->📝 文档/其他" },
{ message = "^build", group = "<!-- 3 -->📝 文档/其他" },
{ message = "^ci", group = "<!-- 3 -->📝 文档/其他" },
{ message = "^style", group = "<!-- 3 -->📝 文档/其他" }
]
[git.github]
commits = true

22
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,22 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
version: 2
updates:
# ===== NuGet 依赖(所有项目)=====
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
ignore:
# 忽略所有依赖的大版本升级(框架项目非常建议)
- dependency-name: "*"
update-types:
- "version-update:semver-major"
# ===== GitHub Actions =====
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@ -1,112 +1,187 @@
name: Auto Increment Version and Tag
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: Semantic Release Version and Tag
# 工作流触发条件配置
# 当向 main 或 master 分支推送代码时触发
# 或者当针对 main 或 master 的 PR 被合并关闭时触发
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
types: [ closed ]
workflow_dispatch:
concurrency:
group: semantic-release-main
cancel-in-progress: false
jobs:
auto-tag:
name: Auto Increment Version and Create Tag
preview:
if: >
github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
published: ${{ steps.semantic_release.outputs.new_release_published }}
last_tag: ${{ steps.semantic_release.outputs.last_release_git_tag }}
next_version: ${{ steps.semantic_release.outputs.new_release_version }}
next_tag: ${{ steps.semantic_release.outputs.new_release_git_tag }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false
ref: ${{ github.sha }}
# semantic-release 在 dry-run 中仍会执行一次 git push --dry-run 权限探测。
# 这里提前要求与正式 release 相同的 PAT避免 github-actions[bot] 因只读上下文触发误导性的 403。
- name: Validate PAT token
uses: ./.github/actions/validate-pat
with:
pat-token: ${{ secrets.PAT_TOKEN }}
repo-api-url: ${{ github.api_url }}/repos/${{ github.repository }}
repository: ${{ github.repository }}
missing-token-message: PAT_TOKEN is required because semantic-release preview performs a git push --dry-run permission check.
# preview 始终先运行,用于给当前 SHA 生成待发布版本预览。
- name: Semantic release preview
id: semantic_release
uses: cycjimmy/semantic-release-action@v6
with:
dry_run: true
ci: false
extra_plugins: |
conventional-changelog-conventionalcommits@9.1.0
env:
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
- name: Show preview result
run: |
echo "published=${{ steps.semantic_release.outputs.new_release_published }}"
echo "last_tag=${{ steps.semantic_release.outputs.last_release_git_tag }}"
echo "next_version=${{ steps.semantic_release.outputs.new_release_version }}"
echo "next_tag=${{ steps.semantic_release.outputs.new_release_git_tag }}"
- name: Generate preview release notes
if: ${{ steps.semantic_release.outputs.new_release_published == 'true' }}
id: cliff_preview
uses: orhun/git-cliff-action@v4
with:
config: .github/cliff.toml
args: >-
-vv --unreleased --strip header
--tag "${{ steps.semantic_release.outputs.new_release_git_tag }}"
env:
OUTPUT: PREVIEW_RELEASE_NOTES.md
GITHUB_REPO: ${{ github.repository }}
GITHUB_TOKEN: ${{ github.token }}
- name: Write preview summary
env:
RELEASE_PUBLISHED: ${{ steps.semantic_release.outputs.new_release_published }}
CLIFF_RELEASE_NOTES: ${{ steps.cliff_preview.outputs.content }}
run: |
{
echo "## Release Preview"
echo
echo "- Commit: \`${{ github.sha }}\`"
echo "- Release needed: \`${{ steps.semantic_release.outputs.new_release_published }}\`"
echo "- Last tag: \`${{ steps.semantic_release.outputs.last_release_git_tag }}\`"
echo "- Next version: \`${{ steps.semantic_release.outputs.new_release_version }}\`"
echo "- Next tag: \`${{ steps.semantic_release.outputs.new_release_git_tag }}\`"
echo "- Preview auth: uses \`PAT_TOKEN\` because semantic-release dry-run still performs a remote push permission probe."
echo "- Snapshot semantics: this preview is pinned to dispatch SHA \`${{ github.sha }}\`; commits added to \`main\` after the run starts are not included."
if [ "${RELEASE_PUBLISHED}" = "true" ] && [ -n "${CLIFF_RELEASE_NOTES}" ]; then
echo
echo "### 候选发布说明"
echo
printf '%s\n' "${CLIFF_RELEASE_NOTES}"
fi
echo
echo "If the version looks correct, approve the \`release-approval\` environment to continue."
} >> "${GITHUB_STEP_SUMMARY}"
release:
if: >
github.ref == 'refs/heads/main' &&
needs.preview.result == 'success' &&
needs.preview.outputs.published == 'true'
needs:
- preview
runs-on: ubuntu-latest
# 条件判断:仅在推送事件或已合并的 PR 关闭事件中执行
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true)
permissions:
contents: write
pull-requests: read
environment:
name: release-approval
steps:
# 步骤一:检出仓库代码
# 使用 actions/checkout 动作获取完整的 Git 历史用于查找已有标签
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
lfs: true
fetch-depth: 0 # 获取全部历史记录以查找现有标签
fetch-depth: 0
persist-credentials: false
ref: ${{ github.sha }}
# 步骤二:检查是否需要跳过打标签操作
# 根据最新提交信息决定是否继续后续流程
- name: Check for skip keyword
id: check_skip
run: |
# 检查最近一次提交信息是否包含跳过关键词
LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%B")
if [[ "$LAST_COMMIT_MSG" == *"[skip release]"* ]] || [[ "$LAST_COMMIT_MSG" == *"[no tag]"* ]]; then
echo "skip_tag=true" >> $GITHUB_OUTPUT
echo "Skipping tag creation due to skip keyword in commit message"
else
echo "skip_tag=false" >> $GITHUB_OUTPUT
echo "No skip keyword found, proceeding with tag creation"
fi
echo "Last commit message: $LAST_COMMIT_MSG"
- name: Validate PAT token
uses: ./.github/actions/validate-pat
with:
pat-token: ${{ secrets.PAT_TOKEN }}
repo-api-url: ${{ github.api_url }}/repos/${{ github.repository }}
repository: ${{ github.repository }}
missing-token-message: PAT_TOKEN is required because a tag created with GITHUB_TOKEN will not trigger publish.yml.
# 步骤三:计算下一个版本号(若未被跳过)
# 自动解析当前最新标签并递增修订号生成新的语义化版本号
- name: Get next version
id: get_next_version
if: steps.check_skip.outputs.skip_tag == 'false'
run: |
# 获取最新的标签版本号,如果没有标签则默认为 0.0.0
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
# 移除可能存在的 v 前缀
VERSION_NUM=${LATEST_TAG#v}
# 解析主版本号、次版本号和修订号
MAJOR=$(echo $VERSION_NUM | cut -d. -f1)
MINOR=$(echo $VERSION_NUM | cut -d. -f2)
PATCH=$(echo $VERSION_NUM | cut -d. -f3)
# 递增修订号
PATCH=$((PATCH + 1))
# 构造新版本号
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
NEW_TAG="v$NEW_VERSION"
echo "latest_tag=$LATEST_TAG"
echo "new_version=$NEW_VERSION"
echo "new_tag=$NEW_TAG"
echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT
# 步骤四:创建并推送新标签到远程仓库(若未被跳过)
# 使用个人访问令牌(PAT)进行身份验证完成推送操作
- name: Create tag and push (using PAT)
if: steps.check_skip.outputs.skip_tag == 'false'
- name: Semantic release
id: semantic_release
uses: cycjimmy/semantic-release-action@v6
with:
dry_run: false
extra_plugins: |
conventional-changelog-conventionalcommits@9.1.0
env:
PAT: ${{ secrets.PAT_TOKEN }}
REPO: ${{ github.repository }}
NEW_TAG: ${{ steps.get_next_version.outputs.new_tag }}
run: |
set -e
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
echo "Creating annotated tag $NEW_TAG"
git tag -a "$NEW_TAG" -m "Auto-generated tag: $NEW_TAG"
# 推送单个 tag使用 PAT 作为 HTTPS token
echo "Pushing tag $NEW_TAG to origin using PAT"
git push "https://x-access-token:${PAT}@github.com/${REPO}.git" "refs/tags/${NEW_TAG}"
# 步骤五:输出本次成功创建的新版本相关信息(若未被跳过)
- name: Print version info
if: steps.check_skip.outputs.skip_tag == 'false'
- name: Show release result
run: |
echo "Previous tag was: ${{ steps.get_next_version.outputs.latest_tag }}"
echo "New tag created: ${{ steps.get_next_version.outputs.new_tag }}"
echo "Version number: ${{ steps.get_next_version.outputs.new_version }}"
echo "published=${{ steps.semantic_release.outputs.new_release_published }}"
echo "preview_last_tag=${{ needs.preview.outputs.last_tag }}"
echo "preview_next_version=${{ needs.preview.outputs.next_version }}"
echo "preview_next_tag=${{ needs.preview.outputs.next_tag }}"
echo "last_tag=${{ steps.semantic_release.outputs.last_release_git_tag }}"
echo "next_version=${{ steps.semantic_release.outputs.new_release_version }}"
echo "next_tag=${{ steps.semantic_release.outputs.new_release_git_tag }}"
# 步骤六:输出跳过原因信息(如果检测到了跳过关键字)
- name: Print skip info
if: steps.check_skip.outputs.skip_tag == 'true'
- name: Generate published release notes
if: ${{ steps.semantic_release.outputs.new_release_published == 'true' }}
id: cliff_release
uses: orhun/git-cliff-action@v4
with:
config: .github/cliff.toml
args: >-
-vv --latest --strip header
env:
OUTPUT: PUBLISHED_RELEASE_NOTES.md
GITHUB_REPO: ${{ github.repository }}
GITHUB_TOKEN: ${{ github.token }}
- name: Write release summary
env:
RELEASE_PUBLISHED: ${{ steps.semantic_release.outputs.new_release_published }}
CLIFF_RELEASE_NOTES: ${{ steps.cliff_release.outputs.content }}
run: |
echo "Tag creation skipped due to commit message containing skip keyword"
{
echo "## Release Publish"
echo
echo "- Commit: \`${{ github.sha }}\`"
echo "- Preview last tag: \`${{ needs.preview.outputs.last_tag }}\`"
echo "- Preview next version: \`${{ needs.preview.outputs.next_version }}\`"
echo "- Preview next tag: \`${{ needs.preview.outputs.next_tag }}\`"
echo "- Published: \`${{ steps.semantic_release.outputs.new_release_published }}\`"
echo "- Last tag: \`${{ steps.semantic_release.outputs.last_release_git_tag }}\`"
echo "- Next version: \`${{ steps.semantic_release.outputs.new_release_version }}\`"
echo "- Next tag: \`${{ steps.semantic_release.outputs.new_release_git_tag }}\`"
echo "- Snapshot semantics: this publish run still uses dispatch SHA \`${{ github.sha }}\`; commits added to \`main\` after the preview started are excluded."
if [ "${RELEASE_PUBLISHED}" = "true" ] && [ -n "${CLIFF_RELEASE_NOTES}" ]; then
echo
echo "### 已发布说明"
echo
printf '%s\n' "${CLIFF_RELEASE_NOTES}"
fi
} >> "${GITHUB_STEP_SUMMARY}"

71
.github/workflows/benchmark.yml vendored Normal file
View File

@ -0,0 +1,71 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: Benchmark
on:
workflow_dispatch:
inputs:
benchmark_filter:
description: '可选的 BenchmarkDotNet 过滤器;留空时仅执行 benchmark 项目 Release build'
required: false
default: ''
type: string
permissions:
contents: read
jobs:
benchmark:
name: Benchmark Build Or Run
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v5
with:
path: |
~/.nuget/packages
~/.local/share/NuGet
key: ${{ runner.os }}-nuget-benchmarks-${{ hashFiles('GFramework.Cqrs.Benchmarks/*.csproj', 'GFramework.Cqrs/*.csproj', 'GFramework.Cqrs.Abstractions/*.csproj', 'GFramework.Core/*.csproj', 'GFramework.Core.Abstractions/*.csproj', '**/nuget.config') }}
- name: Restore benchmark project
run: dotnet restore GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj
- name: Build benchmark project
run: dotnet build GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj -c Release --no-restore
- name: Report build-only mode
if: ${{ inputs.benchmark_filter == '' }}
run: |
echo "No benchmark filter provided."
echo "Workflow completed after validating the benchmark project build."
- name: Run filtered benchmarks
if: ${{ inputs.benchmark_filter != '' }}
env:
BENCHMARK_FILTER: ${{ inputs.benchmark_filter }}
run: |
set -euo pipefail
dotnet run --project GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj -c Release --no-build -- \
--filter "$BENCHMARK_FILTER"
- name: Upload BenchmarkDotNet artifacts
if: ${{ always() && inputs.benchmark_filter != '' }}
uses: actions/upload-artifact@v7
with:
name: benchmark-artifacts
path: |
BenchmarkDotNet.Artifacts/**
GFramework.Cqrs.Benchmarks/bin/Release/net10.0/BenchmarkDotNet.Artifacts/**
if-no-files-found: ignore

304
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,304 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# CI/CD工作流配置构建和测试.NET项目
# 该工作流仅在创建或更新面向任意分支的 pull request 时触发
name: CI - Build & Test
on:
pull_request:
branches: [ '**' ]
permissions:
contents: read
pull-requests: write
security-events: write
jobs:
# 代码质量检查 job并行执行不阻塞构建
code-quality:
name: Code Quality & Security
runs-on: ubuntu-latest
steps:
# 检出源代码设置fetch-depth为0以获取完整的git历史
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
# 校验C#命名空间与源码目录是否符合命名规范
- name: Validate C# naming
run: bash scripts/validate-csharp-naming.sh
# 校验仓库维护源码是否包含 Apache-2.0 文件头声明
- name: Validate license headers
run: python3 scripts/license-header.py --check
- name: Validate runtime-generator boundaries
run: python3 scripts/validate-runtime-generator-boundaries.py
# 缓存MegaLinter
- name: Cache MegaLinter
uses: actions/cache@v5
with:
path: ~/.cache/megalinter
key: ${{ runner.os }}-megalinter-v9
restore-keys: |
${{ runner.os }}-megalinter-
# MegaLinter扫描步骤
# 执行代码质量检查和安全扫描生成SARIF格式报告
- name: MegaLinter
uses: oxsecurity/megalinter@v9.4.0
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FAIL_ON_ERROR: ${{ github.ref == 'refs/heads/main' }}
# 上传SARIF格式的安全和代码质量问题报告到GitHub安全中心
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: megalinter-reports/sarif
# 缓存TruffleHog
- name: Cache TruffleHog
uses: actions/cache@v5
with:
path: ~/.cache/trufflehog
key: ${{ runner.os }}-trufflehog
# TruffleHog OSS 扫描步骤
# 使用 TruffleHog 工具扫描代码库中的敏感信息泄露如API密钥、密码等
# 该步骤会比较基础分支和当前提交之间的差异,检测新增内容中是否包含敏感数据
- name: TruffleHog OSS
uses: trufflesecurity/trufflehog@v3.95.2
with:
# 扫描路径,. 表示扫描整个仓库
path: .
# 基础提交哈希,用于与当前提交进行比较
base: ${{ github.event.pull_request.base.sha }}
# 当前提交哈希,作为扫描的目标版本
head: ${{ github.event.pull_request.head.sha }}
# 构建和测试 job并行执行
build-and-test:
name: Build and Test
runs-on: ubuntu-latest
steps:
# 检出源代码
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
# 安装和配置.NET SDK版本
- name: Setup .NET 8
uses: actions/setup-dotnet@v5
with:
dotnet-version: 8.0.x
- name: Setup .NET 9
uses: actions/setup-dotnet@v5
with:
dotnet-version: 9.0.x
- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
# 配置NuGet包缓存以加速后续构建
- name: Cache NuGet packages
uses: actions/cache@v5
with:
path: |
~/.nuget/packages
~/.local/share/NuGet
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/nuget.config') }}
# 配置.NET本地工具缓存以加速后续构建
- name: Cache dotnet tools
uses: actions/cache@v5
with:
path: ~/.dotnet/tools
key: ${{ runner.os }}-dotnet-tools-${{ hashFiles('.config/dotnet-tools.json') }}
# 执行NuGet包恢复操作
- name: Restore
run: dotnet restore GFramework.sln
# 恢复.NET本地工具
- name: Restore .NET tools
run: dotnet tool restore
- name: Setup Node.js 20
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.2.15
- name: Install config tool dependencies
working-directory: tools/gframework-config-tool
run: bun install
- name: Run config tool tests
working-directory: tools/gframework-config-tool
run: bun run test
# 构建项目使用Release配置且跳过恢复步骤
- name: Build
run: dotnet build GFramework.sln -c Release --no-restore
- name: Pack published modules
run: |
rm -rf ./packages
dotnet pack GFramework.sln \
-c Release \
--no-build \
--no-restore \
-o ./packages \
-p:IncludeSymbols=false
- name: Validate packed modules
run: bash scripts/validate-packed-modules.sh ./packages
# 运行单元测试输出TRX格式结果到TestResults目录
# 顺序执行各测试项目,避免并发 dotnet test 进程导致“TRX 全绿但 step 仍返回失败”的假红状态
- name: Test All Projects
id: test_all_projects
run: |
set -euo pipefail
mkdir -p TestResults
test_projects=(
"GFramework.Core.Tests/GFramework.Core.Tests.csproj:core"
"GFramework.Game.Tests/GFramework.Game.Tests.csproj:game"
"GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj:sg"
"GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj:cqrs"
"GFramework.Ecs.Arch.Tests/GFramework.Ecs.Arch.Tests.csproj:ecs-arch"
"GFramework.Godot.Tests/GFramework.Godot.Tests.csproj:godot"
"GFramework.Godot.SourceGenerators.Tests/GFramework.Godot.SourceGenerators.Tests.csproj:godot-sg"
)
failed=0
failed_projects=()
failed_log_paths=()
for entry in "${test_projects[@]}"; do
project="${entry%%:*}"
name="${entry##*:}"
log_path="TestResults/${name}.console.log"
echo "::group::dotnet test $project"
if ! dotnet test "$project" \
-c Release \
--no-build \
--logger "trx;LogFileName=${name}.trx" \
--results-directory TestResults \
2>&1 | tee "$log_path"; then
failed=1
failed_projects+=("$project")
failed_log_paths+=("$log_path")
echo "::error title=Test project failed::$project returned a non-zero exit code."
fi
echo "::endgroup::"
done
if [ "$failed" -eq 1 ]; then
printf 'Failed test projects:\n'
printf ' %s\n' "${failed_projects[@]}"
fi
{
echo "failed=$failed"
echo "failed_projects<<EOF"
if [ "${#failed_projects[@]}" -gt 0 ]; then
printf '%s\n' "${failed_projects[@]}"
fi
echo "EOF"
echo "failed_log_paths<<EOF"
if [ "${#failed_log_paths[@]}" -gt 0 ]; then
printf '%s\n' "${failed_log_paths[@]}"
fi
echo "EOF"
} >> "$GITHUB_OUTPUT"
- name: Generate CTRF report
run: |
mkdir -p ctrf
for trx in TestResults/*.trx; do
name=$(basename "$trx" .trx)
echo "Processing $trx -> ctrf/$name.json"
dotnet tool run DotnetCtrfJsonReporter \
-p "$trx" \
-t nunit \
-d ctrf \
-f "$name.json"
done
- name: Run GFramework.Godot.Tests Diagnostics
if: always() && contains(steps.test_all_projects.outputs.failed_projects, 'GFramework.Godot.Tests/GFramework.Godot.Tests.csproj')
continue-on-error: true
run: |
mkdir -p TestResults
dotnet test GFramework.Godot.Tests/GFramework.Godot.Tests.csproj \
-c Release \
--no-build \
--blame-crash \
--diag TestResults/godot-testhost-diag.log \
--logger "trx;LogFileName=godot-diagnostic.trx" \
--results-directory TestResults \
2>&1 | tee TestResults/godot-diagnostic.console.log
# 生成并发布测试报告,无论测试成功或失败都会执行
- name: Test Report
uses: dorny/test-reporter@v3
if: always()
with:
name: .NET Test Results
path: TestResults/*.trx
reporter: dotnet-trx
- name: Publish Test Report
uses: ctrf-io/github-test-reporter@v1
with:
report-path: './ctrf/*.json'
github-report: true
pull-request-report: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
summary-delta-report: true
insights-report: true
flaky-rate-report: true
fail-rate-report: true
slowest-report: true
upload-artifact: true
fetch-previous-results: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: always()
- name: Fail if any test project failed
if: always() && steps.test_all_projects.outputs.failed == '1'
env:
FAILED_PROJECTS: ${{ steps.test_all_projects.outputs.failed_projects }}
FAILED_LOG_PATHS: ${{ steps.test_all_projects.outputs.failed_log_paths }}
run: |
echo "The following test projects returned non-zero exit codes:"
printf '%s\n' "$FAILED_PROJECTS"
echo
echo "Captured dotnet test output:"
while IFS= read -r log_path; do
if [ -n "$log_path" ] && [ -f "$log_path" ]; then
echo "--- BEGIN $log_path ---"
cat "$log_path"
echo "--- END $log_path ---"
fi
done <<< "$FAILED_LOG_PATHS"
exit 1

53
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,53 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# GitHub Actions工作流配置CodeQL静态代码分析
# 该工作流用于对C#项目进行安全漏洞和代码质量分析
name: "CodeQL"
# 触发事件配置
# 在以下情况下触发工作流:
# 1. 针对任意分支的拉取请求时
# 2. 每天凌晨2点执行一次
on:
pull_request:
branches: [ '**' ]
schedule:
- cron: '0 2 * * *'
jobs:
# 分析任务配置
# 对C#代码进行静态分析扫描
analyze:
name: Analyze (C#)
runs-on: ubuntu-latest
permissions:
security-events: write
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
# 设置.NET运行时环境
# 配置.NET 8.0.x版本支持
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
8.0.x
# 初始化CodeQL分析环境
# 配置C#语言支持并启用自动构建模式
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: csharp
build-mode: autobuild
# 执行CodeQL代码分析
# 运行静态分析并生成结果报告
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4

128
.github/workflows/license-compliance.yml vendored Normal file
View File

@ -0,0 +1,128 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: License Compliance (Feluda)
on:
push:
tags:
- '*'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
jobs:
compliance:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
# 使用Feluda许可证扫描器检查项目依赖的许可证合规性
# 配置参数:
# - project-license: 设置项目许可证为Apache-2.0
# - fail-on-restrictive: 发现限制性许可证时失败
# - fail-on-incompatible: 发现不兼容许可证时失败
# - update-badge: 自动更新许可证徽章
- name: Feluda License Scanner
uses: anistark/feluda@v1.12.0
with:
project-license: 'Apache-2.0'
fail-on-restrictive: false
fail-on-incompatible: false
update-badge: startsWith(github.ref, 'refs/tags/v')
- name: Feluda License Scanner Incompatible Licenses
run: |
feluda --incompatible
# 生成合规性文件NOTICE / THIRD_PARTY_LICENSES
- name: Generate compliance files
run: |
echo "1" | feluda generate
echo "2" | feluda generate
# 生成 SBOMSPDX + CycloneDX
- name: Generate SBOM
run: |
feluda sbom spdx --output sbom.spdx.json
feluda sbom cyclonedx --output sbom.cyclonedx.json
# 校验 SBOM
- name: Validate SBOM files
run: |
feluda sbom validate sbom.spdx.json --output sbom-spdx-validation.txt
feluda sbom validate sbom.cyclonedx.json --output sbom-cyclonedx-validation.txt
# 上传合规产物到 GitHub Actions 工件存储
# 此步骤将指定的合规文件打包并上传为工件,供后续流程使用
# 参数说明:
# name: 步骤名称,用于标识该操作
# uses: 指定使用的 GitHub Action此处为上传工件的官方动作
# with: 配置上传的具体内容
# name: 工件名称,用于标识上传的文件集合
# path: 指定需要上传的文件路径列表(支持多行格式)
# third-party-licenses/**: 手工维护的参考源码许可证原文
- name: Upload compliance artifacts
uses: actions/upload-artifact@v7
with:
name: license-compliance
path: |
NOTICE
THIRD_PARTY_LICENSES.md
third-party-licenses/**
sbom.spdx.json
sbom.cyclonedx.json
sbom-spdx-validation.txt
sbom-cyclonedx-validation.txt
# 将合规文件打包为 ZIP 压缩包
# 此步骤通过 zip 命令将多个合规文件压缩为一个 ZIP 文件,便于分发或存档
# 压缩包中包含以下文件:
# - NOTICE: 项目声明文件
# - THIRD_PARTY_LICENSES.md: 第三方许可证列表
# - third-party-licenses/: 手工维护的参考源码许可证原文
# - sbom.spdx.json: SPDX 格式的软件物料清单
# - sbom.cyclonedx.json: CycloneDX 格式的软件物料清单
# - sbom-spdx-validation.txt: SPDX 格式验证结果
# - sbom-cyclonedx-validation.txt: CycloneDX 格式验证结果
- name: Package compliance bundle
run: |
zip -r license-compliance.zip \
NOTICE \
THIRD_PARTY_LICENSES.md \
third-party-licenses \
sbom.spdx.json \
sbom.cyclonedx.json \
sbom-spdx-validation.txt \
sbom-cyclonedx-validation.txt
# 将合规产物上传至 GitHub Release
# 此步骤将指定的合规文件附加到当前标签对应的 GitHub Release 中
# 参数说明:
# name: 步骤名称,用于标识该操作
# uses: 指定使用的 GitHub Action此处为发布 Release 的第三方动作
# with: 配置发布的具体信息
# tag_name: 指定 Release 对应的 Git 标签名
# files: 指定需要附加到 Release 的文件路径列表(支持多行格式)
# env: 设置环境变量
# GITHUB_TOKEN: GitHub 访问令牌,用于授权发布操作
- name: Upload compliance assets to GitHub Release
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ github.ref_name }}
files: |
NOTICE
THIRD_PARTY_LICENSES.md
sbom.spdx.json
sbom.cyclonedx.json
sbom-spdx-validation.txt
sbom-cyclonedx-validation.txt
license-compliance.zip
env:
GITHUB_TOKEN: ${{ github.token }}

View File

@ -0,0 +1,54 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# 维护者手动触发的 Apache-2.0 文件头修复流程。
name: License Header Fix
on:
workflow_dispatch:
inputs:
base_branch:
description: Branch to fix and target with the generated pull request.
required: true
default: main
permissions:
contents: write
pull-requests: write
jobs:
fix-license-headers:
name: Create license header fix PR
runs-on: ubuntu-latest
steps:
- name: Checkout target branch
uses: actions/checkout@v6
with:
ref: ${{ inputs.base_branch }}
- name: Add missing license headers
run: python3 scripts/license-header.py --fix
- name: Create pull request
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
base: ${{ inputs.base_branch }}
branch: chore/license-headers-${{ github.run_id }}
delete-branch: true
commit-message: |
chore(license): 补齐 Apache-2.0 文件头
- 补充缺失源文件许可证声明
- 更新文件头治理校验结果
title: "chore(license): 补齐 Apache-2.0 文件头"
body: |
## Summary
- 补齐仓库维护源码和配置文件缺失的 Apache-2.0 文件头
- 使用 `scripts/license-header.py --fix` 生成本次修复
## Validation
- `python3 scripts/license-header.py --check`

110
.github/workflows/publish-docs.yml vendored Normal file
View File

@ -0,0 +1,110 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# 工作流名称Publish Docs
# 该工作流用于在推送标签或手动触发时构建并部署文档到 GitHub Pages
name: Publish Docs
# 触发条件配置
# 当推送以 'v' 开头的标签时触发,或者通过 GitHub UI 手动触发
on:
push:
tags:
- 'v*'
workflow_dispatch:
# 权限配置
# 配置工作流所需的权限:
# - contents: read读取仓库内容
# - pages: write写入 GitHub Pages
# - id-token: write写入身份令牌
permissions:
contents: read
pages: write
id-token: write
# 并发控制配置
# 设置并发组为 "pages",并且不允许取消正在进行的任务
concurrency:
group: pages
cancel-in-progress: false
# 定义工作流中的任务
jobs:
# 构建和部署任务
build-and-deploy:
# 条件判断:仅当推送的是正式版本标签(不包含预发布标识)或手动触发时执行
if: |
(startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-'))
|| github.event_name == 'workflow_dispatch'
# 指定运行环境为最新版 Ubuntu
runs-on: ubuntu-latest
# 环境配置
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# 步骤定义
steps:
# 检出代码
- name: Checkout
uses: actions/checkout@v6
# 按 GitHub Pages 官方流程初始化部署元数据。
- name: Configure GitHub Pages
uses: actions/configure-pages@v6
# 安装 Bun 运行时
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
# 安装项目依赖
- name: Install Dependencies
working-directory: docs
run: bun install
# 构建 VitePress 文档
- name: Build VitePress
working-directory: docs
run: bun run build
# 生成 LLM 索引文件
- name: Make docs LLM ready
uses: demodrive-ai/llms-txt-action@v1
with:
docs_dir: docs/.vitepress/dist
sitemap_path: sitemap.xml
skip_llms_txt: 'false'
skip_llms_full_txt: 'false'
skip_md_files: 'false'
# 在上传前校验 LLM 索引产物,避免部署出“步骤成功但文件缺失”的 Pages 站点。
- name: Verify LLM artifacts
run: |
test -f docs/.vitepress/dist/sitemap.xml
test -f docs/.vitepress/dist/llms.txt
test -f docs/.vitepress/dist/llms-full.txt
md_count="$(find docs/.vitepress/dist -type f -name '*.md' | wc -l)"
if [ "$md_count" -eq 0 ]; then
echo "Expected llms-txt-action to generate page-level markdown files, but none were found."
exit 1
fi
echo "Generated $md_count markdown files for LLM ingestion."
# 上传构建产物作为 Pages 部署工件
- name: Upload Pages Artifact
uses: actions/upload-pages-artifact@v5
with:
path: docs/.vitepress/dist
# 将文档部署到 GitHub Pages
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5

View File

@ -0,0 +1,97 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
name: Publish VS Code Extension
on:
workflow_dispatch:
inputs:
version:
description: Extension version to publish, for example 0.1.0. Leave empty to use package.json or the pushed tag.
required: false
type: string
publish_to_marketplace:
description: Publish to the Visual Studio Marketplace after packaging.
required: true
type: boolean
default: true
push:
tags:
- 'gframework-config-tool-v*'
permissions:
contents: read
jobs:
publish:
name: Package And Publish Marketplace Extension
runs-on: ubuntu-latest
defaults:
run:
working-directory: tools/gframework-config-tool
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Node.js 20
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.2.15
- name: Determine extension version
id: version
shell: bash
run: |
set -euo pipefail
PACKAGE_VERSION=$(node -p "require('./package.json').version")
VERSION="${PACKAGE_VERSION}"
if [[ "${GITHUB_REF:-}" == refs/tags/gframework-config-tool-v* ]]; then
VERSION="${GITHUB_REF#refs/tags/gframework-config-tool-v}"
elif [[ -n "${{ inputs.version || '' }}" ]]; then
VERSION="${{ inputs.version }}"
fi
echo "Resolved extension version: ${VERSION}"
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
- name: Install extension dependencies
run: bun install
- name: Synchronize package.json version
shell: bash
run: |
set -euo pipefail
node -e "const fs=require('fs'); const path='package.json'; const data=JSON.parse(fs.readFileSync(path,'utf8')); data.version='${{ steps.version.outputs.version }}'; fs.writeFileSync(path, JSON.stringify(data, null, 2) + '\n');"
- name: Run extension tests
run: bun run test
- name: Package VSIX
run: |
set -euo pipefail
mkdir -p ../../artifacts
bun run package:vsix -- --out "../../artifacts/gframework-config-tool-${{ steps.version.outputs.version }}.vsix"
- name: Upload VSIX artifact
uses: actions/upload-artifact@v7
with:
name: gframework-config-tool-vsix
path: artifacts/gframework-config-tool-${{ steps.version.outputs.version }}.vsix
if-no-files-found: error
- name: Publish to Visual Studio Marketplace
if: github.event_name == 'push' || inputs.publish_to_marketplace
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
run: bun run publish:marketplace

View File

@ -1,50 +1,64 @@
name: Publish (NuGet + GitHub Release)
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# 发布工作流NuGet + GitHub Packages + GitHub Release
#
# 功能:当推送标签时自动构建、打包,并将相同产物并发发布到 NuGet.org 与 GitHub Packages
# 最后创建 GitHub Release。
# 触发条件:推送任何标签(如 v1.0.0 或 1.0.0
# 权限:允许写入内容、包和使用 OIDC 身份验证
name: Publish (NuGet + GitHub Packages + GitHub Release)
# 触发:推送 tag 时触发(例如 v1.0.0 或 1.0.0
on:
push:
tags:
- '*'
# 顶级权限:允许创建 release、写 packages并允许 id-tokenOIDC
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
packages: write
id-token: write
jobs:
build-and-publish:
build-pack:
name: Build And Pack
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
id-token: write
contents: write
packages: write
outputs:
package_version: ${{ steps.tag_version.outputs.version }}
steps:
- name: Checkout repository (at tag)
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: true
- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install unzip (for reading .nuspec from .nupkg)
run: sudo apt-get update && sudo apt-get install -y unzip
- name: Cache NuGet packages
uses: actions/cache@v5
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build -c Release --no-restore -p:DebugType=portable
- name: Test
run: dotnet test --no-build -c Release --verbosity normal
run: dotnet restore GFramework.sln
# 从 GitHub 引用中提取标签版本。
# 提取逻辑:去除 refs/tags/ 前缀,然后去除 v/V 前缀。
- name: Determine tag version
id: tag_version
run: |
@ -54,23 +68,68 @@ jobs:
VERSION=${TAG#v}
VERSION=${VERSION#V}
echo "tag='$TAG' -> version='$VERSION'"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Pack (use tag version)
run: |
set -e
echo "Packing with version=${{ steps.tag_version.outputs.version }}"
dotnet pack -c Release -o ./packages -p:PackageVersion=${{ steps.tag_version.outputs.version }} -p:IncludeSymbols=false
dotnet pack GFramework.sln \
-c Release \
--no-restore \
-o ./packages \
-p:PackageVersion=${{ steps.tag_version.outputs.version }} \
-p:IncludeSymbols=false
- name: Validate packed modules
run: bash scripts/validate-packed-modules.sh ./packages
- name: Validate runtime-generator package boundaries
run: python3 scripts/validate-runtime-generator-boundaries.py --package-dir ./packages
- name: Show packages
run: ls -la ./packages || true
# 上传 nupkg 工件,供多个发布 job 复用,避免重复打包。
- name: Upload package artifacts
uses: actions/upload-artifact@v7
with:
name: packages
path: ./packages/*.nupkg
publish-nuget:
name: Publish To NuGet.org
runs-on: ubuntu-latest
needs: build-pack
permissions:
contents: read
packages: read
id-token: write
steps:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Download package artifacts
uses: actions/download-artifact@v8
with:
name: packages
path: ./packages
- name: Show downloaded packages
run: ls -la ./packages || true
- name: NuGet login (OIDC → temporary API key)
id: nuget_login
uses: NuGet/login@v1
with:
user: ${{ secrets.NUGET_USER }} # 推荐将用户名放 secrets
user: ${{ secrets.NUGET_USER }}
# 将所有生成的包推送到 nuget.org。
# 使用临时 API 密钥进行身份验证,并跳过重复包上传。
- name: Push all packages to nuget.org
env:
NUGET_API_KEY: ${{ steps.nuget_login.outputs.NUGET_API_KEY }}
@ -91,58 +150,118 @@ jobs:
echo "No packages found to push."
fi
- name: Get Version and First Package Path
id: get_version
publish-github-packages:
name: Publish To GitHub Packages
runs-on: ubuntu-latest
needs: build-pack
permissions:
contents: read
packages: write
steps:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Download package artifacts
uses: actions/download-artifact@v8
with:
name: packages
path: ./packages
- name: Show downloaded packages
run: ls -la ./packages || true
# 使用仓库内建的 GITHUB_TOKEN 配置 GitHub Packages NuGet 源。
- name: Configure GitHub Packages source
run: |
set -e
PACKAGE_FILE=$(find ./packages -name "*.nupkg" | head -n 1 || true)
if [ -z "$PACKAGE_FILE" ]; then
echo "No .nupkg file found in ./packages"
exit 1
fi
# 从 .nupkgzip里读取 .nuspec 并提取 <version>
VERSION=$(unzip -p "$PACKAGE_FILE" '*.nuspec' 2>/dev/null | sed -n 's:.*<version>\(.*\)</version>.*:\1:p' | head -n1)
if [ -z "$VERSION" ]; then
echo "Failed to parse version from $PACKAGE_FILE"
exit 1
fi
BASENAME=$(basename "$PACKAGE_FILE")
echo "package_file=$PACKAGE_FILE" >> $GITHUB_OUTPUT
echo "package_basename=$BASENAME" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT
dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
--name github \
--username "${{ github.repository_owner }}" \
--password "${{ github.token }}" \
--store-password-in-clear-text
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Push all packages to GitHub Packages
run: |
set -e
pushed_any=false
for PKG in ./packages/*.nupkg; do
[ -f "$PKG" ] || continue
pushed_any=true
echo "Pushing $PKG to GitHub Packages..."
dotnet nuget push "$PKG" \
--source github \
--skip-duplicate
done
if [ "$pushed_any" = false ]; then
echo "No packages found to push."
fi
create-release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs:
- build-pack
- publish-nuget
- publish-github-packages
if: ${{ always() && needs.build-pack.result == 'success' }}
permissions:
contents: write
packages: read
pull-requests: read
steps:
- name: Checkout repository (at tag)
uses: actions/checkout@v6
with:
tag_name: ${{ github.ref_name }}
release_name: "Release ${{ github.ref_name }}"
body: "Release created by CI for tag ${{ github.ref_name }} (package version ${{ steps.get_version.outputs.version }})"
fetch-depth: 0
persist-credentials: true
- name: Download package artifacts
uses: actions/download-artifact@v8
with:
name: packages
path: ./packages
- name: Generate release notes
id: cliff_release
uses: orhun/git-cliff-action@v4
with:
config: .github/cliff.toml
args: >-
-vv --latest --strip header
env:
OUTPUT: RELEASE_NOTES.md
GITHUB_REPO: ${{ github.repository }}
GITHUB_TOKEN: ${{ github.token }}
# 无论某一侧包源发布是否失败,都继续创建 Release。
# 合规工件由独立 workflow 生成,当前发布流不再假设这些文件在同一次运行中可用。
- name: Create GitHub Release and Upload Assets
uses: softprops/action-gh-release@v3
with:
name: "Release ${{ github.ref_name }}"
body_path: RELEASE_NOTES.md
draft: false
prerelease: false
- name: Upload all .nupkg to Release (curl)
files: |
./packages/*.nupkg
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UPLOAD_URL_TEMPLATE: ${{ steps.create_release.outputs.upload_url }}
run: |
set -e
# upload_url from create-release is like: https://uploads.github.com/repos/OWNER/REPO/releases/ID/assets{?name,label}
# strip template part "{?name,label}"
UPLOAD_URL="${UPLOAD_URL_TEMPLATE%\{*}"
echo "Upload base URL: $UPLOAD_URL"
GITHUB_TOKEN: ${{ github.token }}
for package_file in ./packages/*.nupkg; do
if [ -f "$package_file" ]; then
basename=$(basename "$package_file")
echo "Uploading $basename to release..."
curl --fail -sS -X POST \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$package_file" \
"$UPLOAD_URL?name=$basename"
echo "Uploaded $basename"
fi
done
- name: Write publish summary
env:
CLIFF_RELEASE_NOTES: ${{ steps.cliff_release.outputs.content }}
run: |
{
echo "## GitHub Release"
echo
echo "- Tag: \`${{ github.ref_name }}\`"
echo "- Package version: \`${{ needs.build-pack.outputs.package_version }}\`"
echo
printf '%s\n' "${CLIFF_RELEASE_NOTES}"
} >> "${GITHUB_STEP_SUMMARY}"

26
.gitignore vendored
View File

@ -2,4 +2,28 @@ bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
/_ReSharper.Caches/
GFramework.sln.DotSettings.user
.idea/
dotnet-home/
scripts/__pycache__/
# ai
opencode.json
.claude/settings.local.json
.claude/settings.json
.omc/
docs/.omc/
docs/.vitepress/cache/
ai-plan/*
!ai-plan/README.md
!ai-plan/public/
ai-plan/public/*
!ai-plan/public/README.md
!ai-plan/public/**/
!ai-plan/public/**/*.md
ai-plan/private/
ai-libs/
.codex
# tool
.venv/
BenchmarkDotNet.Artifacts/

15
.gitleaks.toml Normal file
View File

@ -0,0 +1,15 @@
# Allowlist for fake/test/demo secrets only
# DO NOT add real credentials here
[allowlist]
description = "Ignore test/demo secrets"
paths = [
"docs/.*",
".*Test.*\\.json",
".*Development.*"
]
regexes = [
"FAKE_.*_KEY",
"TEST_.*_TOKEN"
]

BIN
.idea/.idea.GFramework/.idea/icon.png generated Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

91
.mega-linter.yml Normal file
View File

@ -0,0 +1,91 @@
# Copyright (c) 2025-2026 GeWuYou
# SPDX-License-Identifier: Apache-2.0
# 配置文件用于设置代码质量检查工具的各项参数和规则
# 包含全局排除目录、启用/禁用的检查器、特定语言配置等设置
APPLY_FIXES: none
FAIL_ON_ERROR: false
# ========================
# 全局排除目录配置
# 定义不需要进行代码检查的目录列表
# ========================
EXCLUDED_DIRECTORIES:
- bin
- obj
- packages
- node_modules
- TestResults
- .git
- .vs
- .vscode
# ========================
# 禁用噪音较大的检查器
# 避免在检查过程中产生过多无关警告信息
# ========================
DISABLE:
- COPYPASTE
- SPELL
- MARKDOWN
# ========================
# 启用核心检查器列表
# 定义需要运行的主要代码质量检查工具
# ========================
ENABLE_LINTERS:
- CSHARP_DOTNET_FORMAT
- CSHARP_ROSLYN_ANALYZERS
- YAML
- JSON
- GITHUB_ACTIONS
- REPOSITORY_GITLEAKS
- REPOSITORY_TRUFFLEHOG
# ========================
# C# 代码格式化检查配置
# 设置 C# 代码风格检查的参数和验证级别
# ========================
CSHARP_DOTNET_FORMAT_ARGUMENTS:
# 仓库根目录同时存在 GFramework.sln 与 GFramework.csproj
# 显式指定 workspace避免 dotnet format 在 CI 中因自动探测歧义直接异常退出。
- "GFramework.sln"
- "--severity"
- "info"
- "--verify-no-changes"
# ========================
# YAML 文件检查过滤配置
# 定义 YAML 文件的包含和排除正则表达式模式
# ========================
YAML_YAMLLINT_FILTER_REGEX_INCLUDE: '.*\.(ya?ml)$'
YAML_YAMLLINT_FILTER_REGEX_EXCLUDE: '.*/.github/.*'
# ========================
# JSON 文件检查过滤配置
# 定义 JSON 文件的包含正则表达式模式
# ========================
JSON_JSONLINT_FILTER_REGEX_INCLUDE: '.*\.json$'
# ========================
# GitHub Actions 工作流检查配置
# 控制 GitHub Actions 文件检查的错误报告行为
# ========================
ACTION_ACTIONLINT_DISABLE_ERRORS: true
# ========================
# 报告输出配置
# 设置检查结果的多种报告输出格式
# ========================
CONSOLE_REPORTER: true
SARIF_REPORTER: true
GITHUB_COMMENT_REPORTER: true
# ========================
# 性能优化配置
# 控制检查过程的并行执行和时间统计选项
# ========================
PARALLEL: true
SHOW_ELAPSED_TIME: true
VALIDATE_ALL_CODEBASE: false

129
.releaserc.json Normal file
View File

@ -0,0 +1,129 @@
{
"branches": [
"main"
],
"tagFormat": "v${version}",
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"releaseRules": [
{
"breaking": true,
"release": "major"
},
{
"revert": true,
"release": "patch"
},
{
"type": "feat",
"release": "minor"
},
{
"type": "fix",
"release": "patch"
},
{
"type": "perf",
"release": "patch"
},
{
"type": "refactor",
"release": "patch"
},
{
"type": "deps",
"release": "patch"
},
{
"type": "security",
"release": "patch"
},
{
"type": "docs",
"release": false
},
{
"type": "test",
"release": false
},
{
"type": "chore",
"release": false
},
{
"type": "build",
"release": false
},
{
"type": "ci",
"release": false
},
{
"type": "style",
"release": false
}
],
"parserOpts": {
"noteKeywords": [
"BREAKING CHANGE",
"BREAKING CHANGES"
]
}
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits",
"presetConfig": {
"types": [
{
"type": "feat",
"section": "Features",
"hidden": false
},
{
"type": "fix",
"section": "Bug Fixes",
"hidden": false
},
{
"type": "perf",
"section": "Performance Improvements",
"hidden": false
},
{
"type": "refactor",
"section": "Refactoring",
"hidden": false
},
{
"type": "deps",
"section": "Dependency Updates",
"hidden": false
},
{
"type": "security",
"section": "Security Fixes",
"hidden": false
},
{
"type": "revert",
"section": "Reverts",
"hidden": false
}
]
},
"parserOpts": {
"noteKeywords": [
"BREAKING CHANGE",
"BREAKING CHANGES"
]
}
}
]
]
}

539
AGENTS.md Normal file
View File

@ -0,0 +1,539 @@
# AGENTS.md
This document is the single source of truth for coding behavior in this repository.
All AI agents and contributors must follow these rules when writing, reviewing, or modifying code in `GFramework`.
## Environment Capability Inventory
- Before choosing runtimes or CLI tools, read `@.ai/environment/tools.ai.yaml`.
- Use `@.ai/environment/tools.raw.yaml` only when you need the full collected facts behind the AI-facing hints.
- Prefer the project-relevant tools listed there instead of assuming every installed system tool is fair game.
- If the real environment differs from the inventory, use the project-relevant installed tool and report the mismatch.
- When working in WSL against this repository's Windows-backed worktree, first prefer Linux `git` with an explicit
`--git-dir=<repo>/.git/worktrees/<worktree-name>` and `--work-tree=<worktree-root>` binding for every repository
command. Treat that explicit binding as higher priority than `git.exe`, because it avoids WSL worktree path
translation mistakes and still works in sessions where Windows `.exe` execution is unavailable.
- If a plain Linux `git` command in WSL fails with a worktree-style “not a git repository” path translation error,
rerun it with the explicit `--git-dir` / `--work-tree` binding before trying `git.exe`.
- Only prefer Windows Git from WSL (for example `git.exe`) when that executable is both resolvable and executable in the
current session, and when the explicit Linux `git` binding is unavailable or has already failed.
- If the shell resolves `git.exe` but the current WSL session cannot execute it cleanly (for example `Exec format
error`), keep using the explicit Linux `git` binding for the rest of the task instead of retrying Windows Git.
- If the shell does not currently resolve `git.exe` to the host Windows Git installation and you still need Windows Git
as a fallback, prepend that installation's command directory to `PATH` and reset shell command hashing for the
current session before continuing.
- After resolving either strategy, prefer a session-local binding or command wrapper for subsequent Git commands so the
shell does not silently fall back to the wrong repository context later in the same WSL session.
## Git Workflow Rules
- Every completed task MUST pass at least one build validation before it is considered done.
- When the goal is to inspect or reduce warnings printed during project build, contributors MUST establish the warning
baseline from a non-incremental repository-root build by running `dotnet clean` and then `dotnet build`.
- Contributors MUST NOT treat a repeated incremental `dotnet build` result as authoritative for warning inspection when
a clean baseline has not been captured in the same round.
- If a direct `dotnet clean`, `dotnet build`, or `dotnet test` command fails inside the agent sandbox with missing
diagnostics, `Permission denied`, MSBuild pipe/socket errors, or other environment-only noise that does not match a
normal shell invocation, contributors MUST request permission and rerun the same direct command outside the sandbox
before concluding that the repository or toolchain is broken.
- For repository truth, contributors MUST prefer the result of the original direct command executed outside the sandbox
over sandbox-only failures, workaround-heavy variants, or speculative environment flags unless the user explicitly
asks for a non-default command shape.
- If the task changes multiple projects or shared abstractions, prefer a solution-level or affected-project
`dotnet build ... -c Release`; otherwise use the smallest build command that still proves the result compiles.
- When a task adds a feature or modifies code, contributors MUST run a Release build for every directly affected
module/project instead of relying on an unrelated project or solution slice that does not actually compile the touched
code.
- Warnings reported by those affected-module builds are part of the task scope. Contributors MUST resolve the touched
module's build warnings in the same change, or stop and explicitly report the exact warning IDs and blocker instead of
deferring them to a separate long-lived cleanup branch by default.
- If the required build passes and there are task-related staged or unstaged changes, contributors MUST create a Git
commit automatically instead of leaving the task uncommitted, unless the user explicitly says not to commit.
- Commit messages MUST use Conventional Commits format: `<type>(<scope>): <summary>`.
- The commit `summary` MUST use simplified Chinese and briefly describe the main change.
- The commit `body` MUST use unordered list items, and each item MUST start with a verb such as `新增``修复``优化`
`更新``补充``重构`.
- Each commit body bullet MUST describe one independent change point; avoid repeated or redundant descriptions.
- Commit `type` MUST reflect release semantics instead of author intent:
- Use `feat` only for user-facing or consumer-facing capability additions that should raise the next released version's
`minor` segment.
- Use `fix` for behavior corrections, `perf` for observable performance improvements, and `refactor` only for
non-feature code restructuring; these should raise the next released version's `patch` segment.
- Use `deps` for dependency version updates, dependency lockfile refreshes, and package maintenance that should raise
the next released version's `patch` segment.
- Use `security` for vulnerability fixes, dependency security mitigations, and security configuration corrections
that should raise the next released version's `patch` segment.
- Use `docs``test``chore``build``ci``style` for their literal categories; do not encode these changes as
`feat` just because they feel important. These categories MUST NOT trigger a release.
- Use `BREAKING CHANGE` in the commit footer or `!` after the type / scope header (for example `feat!:` or
`feat(core)!:`) when the change should raise the next released version's `major` segment.
- Documentation-only changes MUST NOT use `feat`, including new guides, refreshed examples, navigation updates, and
adoption notes for existing capabilities. If a commit changes both product behavior and related docs, either split the
commit or use `feat` only when the code/package behavior is the primary released change.
- Contributors MUST avoid ambiguous scopes such as `feat(docs)` for documentation work. If the change only affects docs,
prefer `docs(<module-or-area>)`; if it adds a real capability in a docs-related toolchain, use the scope of that
actual subsystem instead of `docs`.
- Keep technical terms in English when they are established project terms, such as `API``Model``System`.
- When composing a multi-line commit body from shell commands, contributors MUST NOT rely on Bash `$"..."` quoting for
newline escapes, because it passes literal `\n` sequences to Git. Use multiple `-m` flags or ANSI-C `$'...'`
quoting so the commit body contains real line breaks.
- If a new task starts while the current branch is `main`, contributors MUST first try to update local `main` from the
remote, then create and switch to a dedicated branch before making substantive changes.
- The branch naming rule for a new task branch is `<type>/<topic-or-scope>`, where `<type>` should match the intended
Conventional Commit category as closely as practical.
## License Header Rules
- Repository-maintained source and configuration files that are supported by `scripts/license-header.py` MUST include an
Apache-2.0 file header before the task is considered complete.
- When creating or modifying supported files, contributors MUST preserve an existing compliant header or add the SPDX
header generated by `python3 scripts/license-header.py --fix`.
- Before committing changes that add or modify supported source/configuration files, contributors MUST run
`python3 scripts/license-header.py --check` and resolve any missing or misplaced headers.
- For files with shebang lines, keep the shebang as the first line and place the license header immediately after it.
- For XML/MSBuild files with an XML declaration, keep the XML declaration as the first node and place the license header
immediately after it.
- Do not add project license headers to excluded or third-party areas such as `.agents/**`, `ai-libs/**`,
`third-party-licenses/**`, generated snapshots, binary assets, lock files, and generated build output. Treat
`scripts/license-header.py` as the authoritative include/exclude policy for this check.
- If CI reports a license-header failure, either fix it locally with `python3 scripts/license-header.py --fix` or, for
maintainer-owned cleanup, use the manual `License Header Fix` GitHub Actions workflow to create a reviewed repair PR.
## Repository Boot Skill
- The repository-maintained Codex boot skill lives at `.agents/skills/gframework-boot/`.
- The repository-maintained multi-agent coordination skill lives at `.agents/skills/gframework-multi-agent-batch/`.
- Prefer invoking `$gframework-boot` when the user uses short startup prompts such as `boot``continue``next step`
`按 boot 开始``先看 AGENTS``继续当前任务`.
- Prefer invoking `$gframework-multi-agent-batch` when the user explicitly wants the main agent to delegate bounded
parallel work, track subagent progress, maintain `ai-plan`, verify subagent output, and keep coordinating until the
current multi-agent batch reaches a natural stop boundary.
- The boot skill is a startup convenience layer, not a replacement for this document. If the skill and `AGENTS.md`
diverge, follow `AGENTS.md` first and update the skill in the same change.
- The boot skill MUST read `AGENTS.md``.ai/environment/tools.ai.yaml``ai-plan/public/README.md` and the relevant
active-topic `ai-plan/` artifacts before substantive execution.
## Subagent Usage Rules
- Use subagents only when the task is complex, the context is likely to grow too large, or the work can be split into
independent parallel subtasks.
- The main agent MUST identify the critical path first. Do not delegate the immediate blocking task if the next local
step depends on that result.
- Use `explorer` subagents for read-only discovery, comparison, tracing, and narrow codebase questions.
- Use `worker` subagents only for bounded implementation tasks with an explicit file or module ownership boundary.
- Every delegation MUST specify:
- the concrete objective
- the expected output format
- the files or subsystem the subagent owns
- any constraints about tests, diagnostics, or compatibility
- Subagents are not allowed to revert or overwrite unrelated changes from the user or other agents. They must adapt to
concurrent work instead of assuming exclusive ownership of the repository.
- Prefer lightweight models such as `gpt-5.1-codex-mini` for narrow exploration, indexing, and comparison tasks.
- Prefer stronger models such as `gpt-5.4` for cross-module design work, non-trivial refactors, and tasks that require
higher confidence reasoning.
- The main agent remains responsible for reviewing and integrating subagent output. Unreviewed subagent conclusions do
not count as final results.
### Multi-Agent Coordination Rules
The terms below describe the default guardrails for multi-agent batches and how they affect worker-launch decisions.
- `branch-diff budget`: the maximum acceptable branch diff size in files or lines before another worker wave becomes
harder to review as a single PR.
- `reviewability budget`: the cumulative complexity limit beyond which accepting more parallel slices would materially
reduce review quality, even if the raw file count still looks acceptable.
- `context-budget`: the main agent's remaining capacity to track active workers, validation, and integration state
without losing critical execution context.
- When any of these budgets approaches its safe limit, the main agent SHOULD stop launching more workers and close the
current wave first.
- `$gframework-multi-agent-batch` contains the fuller workflow and stop-condition guidance for applying these budgets in
practice.
- Prefer the repository's multi-agent coordination mode when the user explicitly wants the main agent to keep
orchestrating parallel subagents, or when the work naturally splits into `2+` disjoint write slices that can proceed
in parallel without blocking the next local step.
- In that mode, the main agent MUST keep ownership of:
- critical-path selection
- baseline and stop-condition tracking
- `ai-plan` updates
- validation planning and final validation
- review and acceptance of every subagent result
- the final integration and completion decision
- Before spawning any `worker` subagent, the main agent MUST:
- identify the immediate blocking step and keep it local
- define disjoint file or subsystem ownership for each worker
- state the required validation commands and expected output format
- check that the expected write set still fits the current branch-diff and reviewability budget
- While workers run, the main agent MUST avoid overlapping edits and focus on non-conflicting work such as:
- ranking the next candidate slices
- reviewing completed worker output
- recomputing branch-diff and context-budget posture
- keeping `ai-plan/public/**` recovery artifacts current
- Before accepting a worker result, the main agent MUST confirm:
- the worker stayed within its owned files or subsystem
- the reported validation is sufficient for that slice
- any accepted findings or follow-up scope are recorded in the active `ai-plan` todo or trace when the task is
complex or multi-step
- Do not continue launching workers merely because a file-count threshold still has room. Stop the current wave when
ownership boundaries start to overlap, reviewability materially degrades, or the context-budget signal says the main
agent should close the batch.
- When a complex task uses multiple workers, the main agent SHOULD prefer the public workflow documented by
`$gframework-multi-agent-batch` unless a more task-specific skill already provides stricter rules.
## Commenting Rules (MUST)
All generated or modified code MUST include clear and meaningful comments where required by the rules below.
### XML Documentation (Required)
- All public, protected, and internal types and members MUST include XML documentation comments (`///`).
- Use `<summary>`, `<param>`, `<returns>`, `<exception>`, and `<remarks>` where applicable.
- Comments must explain intent, contract, and usage constraints instead of restating syntax.
- If a member participates in lifecycle, threading, registration, or disposal behavior, document that behavior
explicitly.
### Inline Comments
- Add inline comments for:
- Non-trivial logic
- Concurrency or threading behavior
- Performance-sensitive paths
- Workarounds, compatibility constraints, or edge cases
- Registration order, lifecycle sequencing, or generated code assumptions
- Avoid obvious comments such as `// increment i`.
### Architecture-Level Comments
- 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
- When to use it instead of alternatives
### Source Generator Comments
- Generated logic and generator pipelines MUST explain:
- What is generated
- Why it is generated
- The semantic assumptions the generator relies on
- Any diagnostics or fallback behavior
### Complex Logic Requirement
- Methods with non-trivial logic MUST document:
- The core idea
- Key decisions
- Edge case handling, if any
### Quality Rules
- Comments MUST NOT be trivial, redundant, or misleading.
- Prefer explaining `why` and `when`, not just `what`.
- Code should remain understandable without requiring external context.
- Prefer slightly more explanation over too little for framework code.
### Enforcement
- Missing required documentation is a coding standards violation.
- Code that does not meet the documentation rules is considered incomplete.
## Code Style
### Language and Project Settings
- Follow the repository defaults:
- `ImplicitUsings` disabled
- `Nullable` enabled
- `GenerateDocumentationFile` enabled for shipped libraries
- `LangVersion` is generally `preview` in the main libraries and abstractions
- Do not rely on implicit imports. Declare every required `using` explicitly.
- Write null-safe code that respects nullable annotations instead of suppressing warnings by default.
### Naming and Structure
- Use the namespace pattern `GFramework.{Module}.{Feature}` with PascalCase segments.
- Follow standard C# naming:
- Types, methods, properties, events, and constants: PascalCase
- Interfaces: `I` prefix
- Parameters and locals: camelCase
- Private fields: `_camelCase`
- Keep abstractions projects free of implementation details and engine-specific dependencies.
- Preserve existing module boundaries. Do not introduce new cross-module dependencies without clear architectural need.
- Framework runtime, abstractions, and meta-package projects MUST NOT reference `*.SourceGenerators*` projects or packages,
and MUST NOT use source-generator attributes such as `GenerateEnumExtensions` or `ContextAware`. Those capabilities are
reserved for consumer projects, generator projects, examples explicitly meant to demonstrate generator usage, and related tests.
### Formatting
- Use 4 spaces for indentation. Do not use tabs.
- Use Allman braces.
- Keep `using` directives at the top of the file and sort them consistently.
- Separate logical blocks with blank lines when it improves readability.
- Prefer one primary type per file unless the surrounding project already uses a different local pattern.
- Unless there is a clear and documented reason to keep a file large, keep a single source file under roughly 800-1000
lines.
- If a file grows beyond that range, contributors MUST stop and check whether responsibilities should be split before
continuing; treating oversized files as the default is considered a design smell.
- Keep line length readable. Around 120 characters is the preferred upper bound.
### C# Conventions
- Prefer explicit, readable code over clever shorthand in framework internals.
- Match existing async patterns and naming conventions (`Async` suffix for asynchronous methods).
- Avoid hidden side effects in property getters, constructors, and registration helpers.
- Preserve deterministic behavior in registries, lifecycle orchestration, and generated outputs.
- When adding analyzers or suppressions, keep them minimal and justify them in code comments if the reason is not
obvious.
### Analyzer and Validation Expectations
- The repository uses `Meziantou.Analyzer`; treat analyzer feedback as part of the coding standard.
- Treat SonarQube maintainability rules as part of the coding standard as well, especially cognitive complexity and
oversized parameter list findings.
- When a method approaches analyzer complexity limits, prefer extracting named helper methods by semantic phase
(parsing, normalization, validation, diagnostics) instead of silencing the warning or doing cosmetic reshuffles.
- When a constructor or method exceeds parameter count limits, choose the refactor that matches the shape of the API:
use domain-specific value objects or parameter objects for naturally grouped data, and prefer named factory methods
when the call site is really selecting between different creation modes.
- Do not add suppressions for complexity or parameter-count findings unless the constraint is externally imposed and the
reason is documented in code comments.
- Naming must remain compatible with `scripts/validate-csharp-naming.sh`.
## Testing Requirements
### Required Coverage
- 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 the meaningful variants, including null,
empty, default, and filtered inputs when those branches change behavior.
- Regression fixes should include a test that fails before the fix and passes after it.
### Test Organization
- 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.
### Source Generator Tests
- Source generator changes MUST be covered by generator tests.
- Preserve snapshot-based verification patterns already used in the repository.
- When generator behavior changes intentionally, update snapshots together with the implementation.
### Validation Commands
Use the smallest command set that proves the change, then expand if the change is cross-cutting.
If a sandboxed agent run reports environment-specific .NET failures, rerun the same direct command outside the sandbox
and treat that unsandboxed result as authoritative for validation and warning baselines.
```bash
# Check warnings from the default repository build entrypoint
dotnet clean
dotnet build
# Build the full solution
dotnet build GFramework.sln -c Release
# Run all tests
dotnet test GFramework.sln -c Release
# Run a single test project
dotnet test GFramework.Core.Tests -c Release
dotnet test GFramework.Game.Tests -c Release
dotnet test GFramework.SourceGenerators.Tests -c Release
dotnet test GFramework.Ecs.Arch.Tests -c Release
# Run a single NUnit test or test group
dotnet test GFramework.Core.Tests -c Release --filter "FullyQualifiedName~CommandExecutorTests.Execute"
# Validate naming rules used by CI
bash scripts/validate-csharp-naming.sh
```
### Test Execution Expectations
- Run targeted tests for the code you changed whenever possible.
- Run broader solution-level validation for changes that touch shared abstractions, lifecycle behavior, source
generators, or dependency wiring.
- Do not claim completion if required tests were skipped; state what was not run and why.
## Security Rules
- Validate external or user-controlled input before it reaches file system, serialization, reflection, code generation,
or process boundaries.
- Do not build command strings, file paths, type names, or generated code from untrusted input without strict validation
or allow-listing.
- Avoid logging secrets, tokens, credentials, or machine-specific sensitive data.
- Keep source generators deterministic and free of hidden environment or network dependencies.
- Prefer least-privilege behavior for file, process, and environment access.
- Do not introduce unsafe deserialization, broad reflection-based activation, or dynamic code execution unless it is
explicitly required and tightly constrained.
- When adding caching, pooling, or shared mutable state, document thread-safety assumptions and failure modes.
- Minimize new package dependencies. Add them only when necessary and keep scope narrow.
## Documentation Rules
### Code Documentation
- Any change to public API, lifecycle semantics, module behavior, or extension points MUST update the related XML docs.
- If a framework abstraction changes meaning or intended usage, update the explanatory comments in code as part of the
same change.
### Documentation Source Of Truth
- Treat source code, `*.csproj`, tests, generated snapshots, and packaging metadata as the primary evidence for
documentation updates.
- Treat verified reference implementations under `ai-libs/` as a secondary evidence source for real project adoption
patterns, directory layouts, and end-to-end usage examples.
- Treat existing `README.md` files and `docs/zh-CN/` pages as editable outputs, not authoritative truth.
- If existing documentation conflicts with code or tests, update the documentation to match the implementation instead
of preserving outdated wording.
- Do not publish example code, setup steps, or package guidance that cannot be traced back to code, tests, or a
verified consumer project.
### Module README Requirements
- Every user-facing package or module directory that contains a `*.csproj` intended for direct consumption MUST have a
sibling `README.md`.
- Use the canonical filename `README.md`. Do not introduce new `ReadMe.md` or other filename variants.
- A module README MUST describe:
- the module's purpose
- the relationship to adjacent runtime, abstractions, or generator packages
- the major subdirectories or subsystems the reader is expected to use
- the minimum adoption path
- the corresponding `docs/zh-CN/` entry points
- Adding a new top-level module directory without a `README.md` is considered incomplete work.
- If a module's responsibilities, setup, public API surface, generator inputs, or adoption path change, update that
module's `README.md` in the same change.
### Repository Documentation
- Update the relevant `README.md` or `docs/` page when behavior, setup steps, architecture guidance, or user-facing
examples change.
- Public documentation under `README.md` and `docs/**` MUST stay reader-facing. Do not publish governance-only content
such as inventory tables, coverage baselines, review queues, batch metrics, recovery points, trace summaries, or
“this still needs a later audit wave” notes in those user-facing pages.
- Public documentation MUST use semantic section titles and link labels. Do not surface raw filenames or paths such as
`README.md``game/index.md``../core/cqrs.md` as reader-facing navigation text when a meaningful destination label is
available.
- Public documentation MUST avoid rhetorical, self-referential, or AI-sounding headings and prompts such as
“你真正会用到的公开入口”、
“先理解包关系”、
“这个栏目应该回答什么” or “想看……转到……”. Prefer neutral labels such as
“公开入口”、
“模块与包关系”、
“栏目覆盖范围” and “相关主题”.
- Public documentation MUST present limitations, suitability, and migration boundaries as adoption guidance for readers.
Do not publish internal-governance or product-roadmap wording such as “当前阶段的结论”、
“不建议立即启动”、
“仓库当前的主要使用者” or similar maintainer-facing decision records in `README.md` or `docs/**`; that material
belongs in `ai-plan/**` if it must be tracked.
- Governance-only material such as XML audit snapshots, documentation remediation baselines, backlog status, and
recovery metadata belongs in `ai-plan/**` or other contributor-only artifacts, not in public docs.
- Treat `ai-libs/` as a read-only third-party source reference area.
- Code under `ai-libs/**` exists for comparison, tracing, design study, and behavior verification; do not modify it
unless the user explicitly asks to sync or update that third-party snapshot.
- When implementation plans, traces, reviews, or design notes say “reference a third-party project”, prefer the
repository-local path under `ai-libs/` instead of an unspecified upstream repository.
- If a task depends on observations from `ai-libs/**`, record the referenced path and conclusion in the active plan or
trace when the work is multi-step or complex, or when an active tracking document already exists, rather than editing
the third-party reference copy.
- The main documentation site lives under `docs/`, with Chinese content under `docs/zh-CN/`.
- Keep code samples, package names, and command examples aligned with the current repository state.
- Prefer documenting behavior and design intent, not only API surface.
- When a public page references XML docs or API coverage, convert that evidence into reader-facing guidance: explain
which types, namespaces, or entry points readers should inspect and why, instead of exposing audit counts or
governance terminology.
- 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 such as the AI-First config system, documentation MUST cover:
- project directory layout and file conventions
- required project or package wiring
- minimal working usage example
- migration or compatibility notes when behavior changes
- If an existing documentation page no longer reflects the current implementation, fixing the code without fixing the
documentation is considered incomplete work.
- Do not rely on “the code is self-explanatory” for framework features that consumers need to adopt; write the
adoption path down so future users do not need to rediscover it from source.
- The repository root `README.md` MUST mirror the current top-level documentation taxonomy used by the docs site.
Do not maintain a second, differently named navigation system in the root README.
- Prefer linking the root `README.md` to section landing pages such as `index.md` instead of deep-linking to a single
article when the target is intended to be a documentation category.
- If a docs category appears in VitePress navigation or sidebar, it MUST have a real landing page or be removed from
navigation in the same change.
- When examples are rewritten, preserve only the parts that remain true. Delete or replace speculative examples instead
of lightly editing them into another inaccurate form.
### Task Tracking
- `ai-plan/` is split by intent:
- `ai-plan/public/README.md`: the shared startup index that binds worktrees or branches to active topics and resume
entry points
- `ai-plan/public/<topic>/todos/`: repository-safe recovery documents for an active topic
- `ai-plan/public/<topic>/traces/`: repository-safe execution traces for an active topic
- `ai-plan/public/<topic>/archive/`: archived stage-level artifacts that still belong to an active topic; prefer
`archive/todos/` and `archive/traces/` when archiving content cut out of the active entry files
- `ai-plan/public/archive/<topic>/`: completed-topic archives that should not be treated as default boot context
- `ai-plan/private/`: worktree-private recovery artifacts; keep these untracked and scoped to the current worktree
- 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 any `ai-plan/**` file.
- Never record absolute file-system paths in `ai-plan/**`; use repository-relative paths, branch names, PR numbers, or
stable document identifiers instead.
- Use `ai-plan/public/**` only for durable, handoff-safe task state. Put temporary notes, local experiments, or
worktree-specific scratch recovery data under `ai-plan/private/`.
- `ai-plan/public/README.md` MUST list only active topics. Do not add `ai-plan/public/archive/**` content to the
default boot index.
- When a worktree-to-topic mapping changes, or when a topic becomes active/inactive, contributors MUST update
`ai-plan/public/README.md` in the same change.
- 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.
- Active tracking and trace files are recovery entrypoints, not append-only changelogs. They MUST stay concise enough
for `boot` to locate the current recovery point quickly.
- Completing code changes without updating the active tracking document is considered incomplete work.
- For any multi-step refactor, migration, or cross-module task, contributors MUST create or adopt a dedicated recovery
document under `ai-plan/public/<topic>/todos/` before making substantive code changes.
- Recovery documents MUST record the current phase, the active recovery point identifier, known risks, and the next
recommended resume step so another contributor or subagent can continue the work safely.
- 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 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 begin to accumulate, contributors MUST archive their detailed history out of the
active `todos/` and `traces/` entry files in the same change. Keep only the current recovery point, active facts,
active risks, immediate next step, and pointers to the relevant archive files in the default boot path.
- When a topic is fully complete, move the entire topic directory under `ai-plan/public/archive/<topic>/` and remove it
from `ai-plan/public/README.md` in the same change.
- When a task spans multiple commits or is likely to exceed a single agent context window, update both the recovery
document and the trace at each meaningful milestone before pausing or handing work off.
- If subagents are used on a complex task, the main agent MUST capture the delegated scope and any accepted findings in
the active recovery document or trace before continuing implementation.
### Documentation Preview
When documentation changes need local preview, use:
```bash
cd docs && bun install && bun run dev
```
## Review Standard
Before considering work complete, confirm:
- Required comments and XML docs are present
- Code follows repository style and naming rules
- Relevant tests were added or updated
- Sensitive or unsafe behavior was not introduced
- User-facing documentation is updated when needed
- Feature adoption docs under `docs/zh-CN/` were added or updated when functionality was added, removed, or refactored

144
CLAUDE.md Normal file
View File

@ -0,0 +1,144 @@
# CLAUDE.md
This file provides project understanding for AI agents working in this repository.
## Project Overview
GFramework 是面向游戏开发的模块化 C# 框架,核心能力与引擎解耦。项目灵感参考 QFramework并在模块边界、工程组织和可扩展性方面持续重构。
## AI Agent Instructions
All coding rules are defined in:
@AGENTS.md
Follow them strictly.
## Module Dependency Graph
```text
GFramework (meta package) ─→ Core + Game
GFramework.Cqrs ─→ Cqrs.Abstractions, Core.Abstractions
GFramework.Core ─→ Core.Abstractions
GFramework.Game ─→ Game.Abstractions, Core, Core.Abstractions
GFramework.Godot ─→ Core, Game, Core.Abstractions, Game.Abstractions
GFramework.Ecs.Arch ─→ Ecs.Arch.Abstractions, Core, Core.Abstractions
GFramework.Core.SourceGenerators ─→ Core.SourceGenerators.Abstractions, SourceGenerators.Common
GFramework.Game.SourceGenerators ─→ SourceGenerators.Common
GFramework.Godot.SourceGenerators ─→ Godot.SourceGenerators.Abstractions, SourceGenerators.Common
GFramework.Cqrs.SourceGenerators ─→ SourceGenerators.Common
```
- **Abstractions projects** (`netstandard2.1`): 只包含接口和契约定义,不承载运行时实现逻辑。
- **Core / Game / Ecs.Arch** (`net8.0;net9.0;net10.0`): 平台无关的核心实现层。
- **Godot**: Godot 引擎集成层,负责与节点、场景和引擎生命周期对接。
- **SourceGenerators family** (`netstandard2.0`/`netstandard2.1`): 按 Core / Game / Godot / Cqrs 拆分的 Roslyn
增量源码生成器,以及共享的 abstractions/common 基础设施。
## Architecture Pattern
框架核心采用 `Architecture / Model / System / Utility` 四层结构:
- **IArchitecture**: 顶层容器,负责生命周期管理、组件注册、模块安装和统一服务访问。
- **IContextAware**: 统一上下文访问接口,组件通过 `SetContext(IArchitectureContext)` 获取架构上下文。
- **IModel**: 数据与状态层,负责长期状态和业务数据建模。
- **ISystem**: 业务逻辑层,负责命令执行、流程编排和规则落地。
- **IUtility**: 通用无状态工具层,供其他层复用。
关键实现位于 `GFramework.Core/Architectures/Architecture.cs`,其职责是作为总协调器串联生命周期、组件注册和模块系统。
## Architecture Details
### Lifecycle
Architecture 负责统一生命周期编排,核心阶段包括:
- `Init`
- `Ready`
- `Destroy`
在实现层中,生命周期被拆分为更细粒度的初始化与销毁阶段,用于保证 Utility、Model、System、服务模块和钩子的顺序一致性。
### Component Coordination
框架通过独立组件协作完成架构编排:
- `ArchitectureLifecycle`: 管理生命周期阶段、阶段转换和生命周期钩子。
- `ArchitectureComponentRegistry`: 管理 Model、System、Utility 的注册与解析。
- `ArchitectureModules`: 管理模块安装、服务模块接入和扩展点注册。
这组拆分的目标是降低单个核心类的职责密度,同时保持对外 API 稳定。
### Context Propagation
`IArchitectureContext` 和相关 Provider 类型负责在组件之间传播上下文能力,使 Model、System
和外部扩展都能通过统一入口访问架构服务,而不直接耦合具体实现细节。
## Key Patterns
### CQRS
命令与查询分离,支持同步与异步执行。当前版本内建自有 CQRS runtime、行为管道和 handler 自动注册;历史 `Mediator`
兼容别名已从公开 API 移除,统一使用 `Cqrs` 命名入口。
### EventBus
类型安全事件总线支持事件发布、订阅、优先级、过滤器和弱引用订阅。它是模块之间松耦合通信的核心基础设施之一。
### BindableProperty
响应式属性模型通过值变化通知驱动界面或业务层更新,适合表达轻量级状态同步。
### Coroutine
帧驱动协程系统基于 `IYieldInstruction` 和调度器抽象,支持等待时间、事件和任务完成等常见模式。
### IoC
依赖注入通过 `MicrosoftDiContainer``Microsoft.Extensions.DependencyInjection` 进行封装,用于统一组件注册和服务解析体验。
### Service Modules
`IServiceModule` 模式用于向 Architecture 注册内置服务,例如 EventBus、CommandExecutor、QueryExecutor 等。这一模式承担“基础设施能力装配”的职责。
## Source Generators
当前仓库包含多类 Roslyn 增量源码生成器:
- `LoggerGenerator` (`[Log]`): 自动生成日志字段和日志辅助方法。
- `PriorityGenerator` (`[Priority]`): 生成优先级比较相关实现。
- `EnumExtensionsGenerator` (`[GenerateEnumExtensions]`): 生成枚举扩展能力。
- `ContextAwareGenerator` (`[ContextAware]`): 自动实现 `IContextAware` 相关样板逻辑。
- `CqrsHandlerRegistryGenerator`: 为消费端程序集生成 CQRS handler 注册器,运行时优先使用生成产物,无法覆盖时回退到反射扫描;非默认程序集可通过
`RegisterCqrsHandlersFromAssembly(...)` / `RegisterCqrsHandlersFromAssemblies(...)` 显式接入同一路径。
这些生成器的目标是减少重复代码,同时保持框架层 API 的一致性与可维护性。
## Module Structure
仓库以“抽象层 + 实现层 + 集成层 + 生成器层”的方式组织:
- `GFramework.Core.Abstractions` / `GFramework.Game.Abstractions`: 约束接口和公共契约。
- `GFramework.Cqrs.Abstractions` / `GFramework.Cqrs`: 提供 CQRS 契约、runtime 与 handler 注册基础设施。
- `GFramework.Core` / `GFramework.Game`: 提供平台无关实现。
- `GFramework.Godot`: 提供与 Godot 运行时集成的适配实现。
- `GFramework.Ecs.Arch`: 提供 ECS Architecture 相关扩展。
- `GFramework.Core.SourceGenerators` / `GFramework.Game.SourceGenerators` / `GFramework.Godot.SourceGenerators` /
`GFramework.Cqrs.SourceGenerators` 与相关 Abstractions/Common: 提供代码生成能力。
这种结构的核心设计目标是让抽象稳定、实现可替换、引擎集成隔离、生成器能力可独立演进。
## Documentation Structure
项目文档位于 `docs/`,中文内容位于 `docs/zh-CN/`。文档内容覆盖:
- 入门与安装
- Core / Game / Godot / ECS 各模块能力
- Source Generator 使用说明
- 教程、最佳实践与故障排查
阅读顺序通常建议先看根目录 `README.md` 和各子模块 `README.md`,再进入 `docs/` 查阅专题说明。
## Design Intent
GFramework 的设计重点不是把所有能力堆进单一核心类,而是通过清晰的模块边界、可组合的服务注册方式、稳定的抽象契约以及适度自动化的源码生成,构建一个适合长期演进的游戏开发基础框架。

18
Directory.Build.props Normal file
View File

@ -0,0 +1,18 @@
<!--
Copyright (c) 2025-2026 GeWuYou
SPDX-License-Identifier: Apache-2.0
-->
<Project>
<!-- Keep repository-wide analyzer behavior consistent while allowing only selected projects to opt into polyfills. -->
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="3.0.72">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Update="Meziantou.Polyfill" Version="1.0.123">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

176
Directory.Build.targets Normal file
View File

@ -0,0 +1,176 @@
<!--
Copyright (c) 2025-2026 GeWuYou
SPDX-License-Identifier: Apache-2.0
-->
<Project>
<!--
为 GFramework 运行时包生成可选的模块级 transitive global usings。
该逻辑只在明确启用的可打包项目中生效,并在构建/打包期间自动扫描源码命名空间。
-->
<UsingTask TaskName="GenerateGFrameworkTransitiveGlobalUsingsProps"
TaskFactory="RoslynCodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)/Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
<SourceFiles ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true"/>
<ExcludedNamespaces ParameterType="Microsoft.Build.Framework.ITaskItem[]"/>
<ExcludedNamespacePrefixes ParameterType="Microsoft.Build.Framework.ITaskItem[]"/>
<OutputFile ParameterType="System.String" Required="true"/>
<NamespaceItemName ParameterType="System.String" Required="true"/>
</ParameterGroup>
<Task>
<Code Type="Fragment"
Language="cs"><![CDATA[
var discoveredNamespaces = new global::System.Collections.Generic.SortedSet<string>(global::System.StringComparer.Ordinal);
var exactExclusions = new global::System.Collections.Generic.HashSet<string>(global::System.StringComparer.Ordinal);
var prefixExclusions = new global::System.Collections.Generic.List<string>();
var namespacePattern = new global::System.Text.RegularExpressions.Regex(
@"^\s*namespace\s+([A-Za-z_][A-Za-z0-9_.]*)\s*(?:;|\{)",
global::System.Text.RegularExpressions.RegexOptions.Compiled);
if (ExcludedNamespaces != null)
{
foreach (var excludedNamespace in ExcludedNamespaces)
{
if (!string.IsNullOrWhiteSpace(excludedNamespace.ItemSpec))
{
exactExclusions.Add(excludedNamespace.ItemSpec.Trim());
}
}
}
if (ExcludedNamespacePrefixes != null)
{
foreach (var excludedPrefix in ExcludedNamespacePrefixes)
{
if (!string.IsNullOrWhiteSpace(excludedPrefix.ItemSpec))
{
prefixExclusions.Add(excludedPrefix.ItemSpec.Trim());
}
}
}
foreach (var sourceFile in SourceFiles)
{
var path = sourceFile.ItemSpec;
if (!global::System.IO.File.Exists(path))
{
continue;
}
foreach (var line in global::System.IO.File.ReadLines(path))
{
var match = namespacePattern.Match(line);
if (!match.Success)
{
continue;
}
var namespaceName = match.Groups[1].Value;
if (!namespaceName.StartsWith("GFramework.", global::System.StringComparison.Ordinal))
{
continue;
}
if (exactExclusions.Contains(namespaceName))
{
continue;
}
var excludedByPrefix = false;
foreach (var prefix in prefixExclusions)
{
if (namespaceName.StartsWith(prefix, global::System.StringComparison.Ordinal))
{
excludedByPrefix = true;
break;
}
}
if (!excludedByPrefix)
{
discoveredNamespaces.Add(namespaceName);
}
}
}
static string Escape(string value)
{
return global::System.Security.SecurityElement.Escape(value) ?? value;
}
var directory = global::System.IO.Path.GetDirectoryName(OutputFile);
if (!string.IsNullOrEmpty(directory))
{
global::System.IO.Directory.CreateDirectory(directory);
}
var builder = new global::System.Text.StringBuilder();
var msbuildPropertyOpen = new string(new[] { '$', '(' });
var msbuildItemOpen = new string(new[] { '@', '(' });
builder.AppendLine("<Project>");
builder.AppendLine(" <!-- This file is generated by GFramework's MSBuild transitive global usings pipeline. -->");
builder.AppendLine(" <!-- EnableGFrameworkGlobalUsings=true enables the transitive global usings from this package. -->");
builder.AppendLine(" <!-- Add <GFrameworkExcludedUsing Include=\"Namespace\" /> to opt out of specific namespaces. -->");
builder.Append(" <ItemGroup Condition=\"'");
builder.Append(msbuildPropertyOpen);
builder.AppendLine("EnableGFrameworkGlobalUsings)' == 'true'\">");
foreach (var namespaceName in discoveredNamespaces)
{
builder.Append(" <");
builder.Append(NamespaceItemName);
builder.Append(" Include=\"");
builder.Append(Escape(namespaceName));
builder.AppendLine("\" />");
}
builder.Append(" <");
builder.Append(NamespaceItemName);
builder.Append(" Remove=\"");
builder.Append(msbuildItemOpen);
builder.AppendLine("GFrameworkExcludedUsing)\" />");
builder.Append(" <Using Include=\"");
builder.Append(msbuildItemOpen);
builder.Append(NamespaceItemName);
builder.AppendLine(")\" />");
builder.AppendLine(" </ItemGroup>");
builder.AppendLine("</Project>");
global::System.IO.File.WriteAllText(OutputFile, builder.ToString(), new global::System.Text.UTF8Encoding(false));
Log.LogMessage(global::Microsoft.Build.Framework.MessageImportance.Low,
$"Generated {discoveredNamespaces.Count} transitive global usings for {OutputFile}.");
]]></Code>
</Task>
</UsingTask>
<PropertyGroup>
<_GFrameworkTransitiveGlobalUsingsEnabled Condition="'$(EnableGFrameworkPackageTransitiveGlobalUsings)' == 'true' and '$(IsPackable)' != 'false'">true</_GFrameworkTransitiveGlobalUsingsEnabled>
<_GFrameworkTransitiveGlobalUsingsPrimaryTargetFramework Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true' and '$(TargetFrameworks)' != ''">$([System.String]::Copy('$(TargetFrameworks)').Split(';')[0])</_GFrameworkTransitiveGlobalUsingsPrimaryTargetFramework>
<_GFrameworkTransitiveGlobalUsingsGenerationBuild Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true' and ('$(TargetFrameworks)' == '' or '$(TargetFramework)' == '$(_GFrameworkTransitiveGlobalUsingsPrimaryTargetFramework)')">true</_GFrameworkTransitiveGlobalUsingsGenerationBuild>
<_GFrameworkTransitiveGlobalUsingsPackageId Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true' and '$(PackageId)' != ''">$(PackageId)</_GFrameworkTransitiveGlobalUsingsPackageId>
<_GFrameworkTransitiveGlobalUsingsPackageId Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true' and '$(_GFrameworkTransitiveGlobalUsingsPackageId)' == ''">$(AssemblyName)</_GFrameworkTransitiveGlobalUsingsPackageId>
<_GFrameworkTransitiveGlobalUsingsOutputFile Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true'">$(BaseIntermediateOutputPath)gframework/$(_GFrameworkTransitiveGlobalUsingsPackageId).props</_GFrameworkTransitiveGlobalUsingsOutputFile>
<_GFrameworkTransitiveGlobalUsingsItemName Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true'">_$([System.Text.RegularExpressions.Regex]::Replace('$(MSBuildProjectName)', '[^A-Za-z0-9_]', '_'))_TransitiveUsing</_GFrameworkTransitiveGlobalUsingsItemName>
</PropertyGroup>
<ItemGroup Condition="'$(_GFrameworkTransitiveGlobalUsingsEnabled)' == 'true'">
<None Include="$(_GFrameworkTransitiveGlobalUsingsOutputFile)"
Pack="true"
PackagePath="buildTransitive"
Visible="false"/>
</ItemGroup>
<Target Name="GenerateGFrameworkModuleTransitiveGlobalUsings"
Condition="'$(_GFrameworkTransitiveGlobalUsingsGenerationBuild)' == 'true'"
BeforeTargets="CoreCompile;GenerateNuspec">
<GenerateGFrameworkTransitiveGlobalUsingsProps
SourceFiles="@(Compile->'%(FullPath)')"
ExcludedNamespaces="@(GFrameworkTransitiveUsingExclude)"
ExcludedNamespacePrefixes="@(GFrameworkTransitiveUsingExcludePrefix)"
OutputFile="$(_GFrameworkTransitiveGlobalUsingsOutputFile)"
NamespaceItemName="$(_GFrameworkTransitiveGlobalUsingsItemName)"/>
</Target>
</Project>

View File

@ -0,0 +1,45 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using System.Collections.Concurrent;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构模块注册表 - 用于外部模块的自动注册
/// </summary>
public static class ArchitectureModuleRegistry
{
private static readonly ConcurrentDictionary<string, Func<IServiceModule>> Factories = new(StringComparer.Ordinal);
/// <summary>
/// 注册模块工厂(幂等操作,相同模块名只会注册一次)
/// </summary>
/// <param name="factory">模块工厂函数</param>
public static void Register(Func<IServiceModule> factory)
{
// 创建临时实例以获取模块名(用于幂等性检查)
var tempModule = factory();
var moduleName = tempModule.ModuleName;
// 幂等注册:相同模块名只注册一次
Factories.TryAdd(moduleName, factory);
}
/// <summary>
/// 创建所有已注册的模块实例
/// </summary>
/// <returns>模块实例集合</returns>
public static IEnumerable<IServiceModule> CreateModules()
{
return Factories.Values.Select(f => f());
}
/// <summary>
/// 清空注册表(主要用于测试)
/// </summary>
public static void Clear()
{
Factories.Clear();
}
}

View File

@ -0,0 +1,27 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Enums;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 表示架构阶段变化事件的数据。
/// 该类型用于向事件订阅者传递当前已进入的阶段值。
/// </summary>
public sealed class ArchitecturePhaseChangedEventArgs : EventArgs
{
/// <summary>
/// 初始化 <see cref="ArchitecturePhaseChangedEventArgs" /> 的新实例。
/// </summary>
/// <param name="phase">当前已进入的架构阶段。</param>
public ArchitecturePhaseChangedEventArgs(ArchitecturePhase phase)
{
Phase = phase;
}
/// <summary>
/// 获取当前已进入的架构阶段。
/// </summary>
public ArchitecturePhase Phase { get; }
}

View File

@ -0,0 +1,138 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using System.Reflection;
using GFramework.Core.Abstractions.Lifecycle;
using GFramework.Core.Abstractions.Model;
using GFramework.Core.Abstractions.Systems;
using GFramework.Core.Abstractions.Utility;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构接口,专注于生命周期管理,包括系统、模型、工具的注册和获取
/// 业务操作通过 ArchitectureRuntime 提供
/// </summary>
public interface IArchitecture : IAsyncInitializable, IAsyncDestroyable, IInitializable, IDestroyable
{
/// <summary>
/// 获取架构上下文
/// </summary>
IArchitectureContext Context { get; }
/// <summary>
/// 获取或设置用于配置服务集合的委托
/// </summary>
/// <value>
/// 一个可为空的委托用于配置IServiceCollection实例
/// </value>
Action<IServiceCollection>? Configurator { get; }
/// <summary>
/// 注册系统实例到架构中
/// </summary>
/// <typeparam name="T">系统类型必须实现ISystem接口</typeparam>
/// <param name="system">要注册的系统实例</param>
/// <returns>注册的系统实例</returns>
T RegisterSystem<T>(T system) where T : ISystem;
/// <summary>
/// 注册系统实例到架构中
/// </summary>
/// <typeparam name="T">系统类型必须实现ISystem接口</typeparam>
/// <param name="onCreated">系统实例创建后的回调函数可为null</param>
void RegisterSystem<T>(Action<T>? onCreated = null) where T : class, ISystem;
/// <summary>
/// 注册模型实例到架构中
/// </summary>
/// <typeparam name="T">模型类型必须实现IModel接口</typeparam>
/// <param name="model">要注册的模型实例</param>
/// <returns>注册的模型实例</returns>
T RegisterModel<T>(T model) where T : IModel;
/// <summary>
/// 注册模型实例到架构中
/// </summary>
/// <typeparam name="T">模型类型必须实现IModel接口</typeparam>
/// <param name="onCreated">模型实例创建后的回调函数可为null</param>
void RegisterModel<T>(Action<T>? onCreated = null) where T : class, IModel;
/// <summary>
/// 注册工具实例到架构中
/// </summary>
/// <typeparam name="T">工具类型必须实现IUtility接口</typeparam>
/// <param name="utility">要注册的工具实例</param>
/// <returns>注册的工具实例</returns>
T RegisterUtility<T>(T utility) where T : IUtility;
/// <summary>
/// 注册工具类型并可选地指定创建回调
/// 当工具实例被创建时会调用指定的回调函数
/// </summary>
/// <typeparam name="T">工具类型必须是引用类型且实现IUtility接口</typeparam>
/// <param name="onCreated">工具实例创建后的回调函数可为null</param>
void RegisterUtility<T>(Action<T>? onCreated = null) where T : class, IUtility;
/// <summary>
/// 注册 CQRS 请求管道行为。
/// 既支持实现 <c>IPipelineBehavior&lt;,&gt;</c> 的开放泛型行为类型,
/// 也支持绑定到单一请求/响应对的封闭行为类型。
/// </summary>
/// <typeparam name="TBehavior">行为类型,必须是引用类型</typeparam>
void RegisterCqrsPipelineBehavior<TBehavior>()
where TBehavior : class;
/// <summary>
/// 注册 CQRS 流式请求管道行为。
/// 既支持实现 <c>IStreamPipelineBehavior&lt;,&gt;</c> 的开放泛型行为类型,
/// 也支持绑定到单一流式请求/响应对的封闭行为类型。
/// </summary>
/// <typeparam name="TBehavior">行为类型,必须是引用类型</typeparam>
/// <exception cref="InvalidOperationException">当前架构的底层容器已冻结,无法继续注册流式管道行为。</exception>
/// <exception cref="ObjectDisposedException">当前架构的底层容器已释放,无法继续注册流式管道行为。</exception>
/// <remarks>
/// 该入口应在架构初始化冻结容器之前调用;具体开放泛型或封闭行为类型的校验逻辑由底层容器负责。
/// </remarks>
void RegisterCqrsStreamPipelineBehavior<TBehavior>()
where TBehavior : class;
/// <summary>
/// 从指定程序集显式注册 CQRS 处理器。
/// 当处理器位于默认架构程序集之外的模块或扩展程序集中时,可在初始化阶段调用该入口接入对应程序集。
/// </summary>
/// <param name="assembly">包含 CQRS 处理器或生成注册器的程序集。</param>
/// <exception cref="ArgumentNullException"><paramref name="assembly" /> 为 <see langword="null" />。</exception>
/// <exception cref="InvalidOperationException">当前架构的底层容器已冻结,无法继续注册处理器。</exception>
void RegisterCqrsHandlersFromAssembly(Assembly assembly);
/// <summary>
/// 从多个程序集显式注册 CQRS 处理器。
/// 该入口会对程序集集合去重,适用于统一接入多个扩展包或模块程序集。
/// </summary>
/// <param name="assemblies">要接入的程序集集合。</param>
/// <exception cref="ArgumentNullException"><paramref name="assemblies" /> 为 <see langword="null" />。</exception>
/// <exception cref="InvalidOperationException">当前架构的底层容器已冻结,无法继续注册处理器。</exception>
void RegisterCqrsHandlersFromAssemblies(IEnumerable<Assembly> assemblies);
/// <summary>
/// 安装架构模块
/// </summary>
/// <param name="module">要安装的模块</param>
/// <returns>安装的模块实例</returns>
IArchitectureModule InstallModule(IArchitectureModule module);
/// <summary>
/// 注册生命周期钩子
/// </summary>
/// <param name="hook">生命周期钩子实例</param>
/// <returns>注册的钩子实例</returns>
IArchitectureLifecycleHook RegisterLifecycleHook(IArchitectureLifecycleHook hook);
/// <summary>
/// 等待直到架构准备就绪的异步操作
/// </summary>
/// <returns>表示异步等待操作的任务</returns>
Task WaitUntilReadyAsync();
}

View File

@ -0,0 +1,22 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Properties;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 定义架构配置的接口,提供日志工厂、日志级别和架构选项的配置功能
/// </summary>
public interface IArchitectureConfiguration
{
/// <summary>
/// 获取或设置日志选项,包含日志相关的配置参数
/// </summary>
LoggerProperties LoggerProperties { get; set; }
/// <summary>
/// 获取或设置架构选项,包含架构相关的配置参数
/// </summary>
ArchitectureProperties ArchitectureProperties { get; set; }
}

View File

@ -0,0 +1,293 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Command;
using GFramework.Core.Abstractions.Environment;
using GFramework.Core.Abstractions.Events;
using GFramework.Core.Abstractions.Model;
using GFramework.Core.Abstractions.Query;
using GFramework.Core.Abstractions.Systems;
using GFramework.Core.Abstractions.Utility;
using GFramework.Cqrs.Abstractions.Cqrs;
using ICommand = GFramework.Core.Abstractions.Command.ICommand;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构上下文接口,统一暴露框架组件访问、兼容旧命令/查询总线,以及当前推荐的 CQRS 运行时入口。
/// </summary>
/// <remarks>
/// <para>旧的 <c>GFramework.Core.Abstractions.Command</c> 与 <c>GFramework.Core.Abstractions.Query</c> 契约会继续通过原有 Command/Query Executor 路径执行,以保证存量代码兼容。</para>
/// <para>新的 <c>GFramework.Cqrs.Abstractions.Cqrs</c> 契约由内置 CQRS dispatcher 统一处理,支持 request pipeline、notification publish 与 stream request。</para>
/// <para>新功能优先使用 <see cref="SendRequestAsync{TResponse}(IRequest{TResponse},CancellationToken)" />、<see cref="SendAsync{TCommand}(TCommand,CancellationToken)" /> 与对应的 CQRS Command/Query 重载;迁移旧代码时可先保留旧入口,再逐步替换为 CQRS 请求模型。</para>
/// </remarks>
public interface IArchitectureContext : ICqrsContext
{
/// <summary>
/// 获取指定类型的服务实例
/// </summary>
/// <typeparam name="TService">服务类型</typeparam>
/// <returns>服务实例,如果不存在则抛出异常</returns>
TService GetService<TService>() where TService : class;
/// <summary>
/// 获取指定类型的所有服务实例
/// </summary>
/// <typeparam name="TService">服务类型</typeparam>
/// <returns>所有符合条件的服务实例列表</returns>
IReadOnlyList<TService> GetServices<TService>() where TService : class;
/// <summary>
/// 获取指定类型的系统实例
/// </summary>
/// <typeparam name="TSystem">系统类型必须继承自ISystem接口</typeparam>
/// <returns>系统实例,如果不存在则抛出异常</returns>
TSystem GetSystem<TSystem>() where TSystem : class, ISystem;
/// <summary>
/// 获取指定类型的所有系统实例
/// </summary>
/// <typeparam name="TSystem">系统类型必须继承自ISystem接口</typeparam>
/// <returns>所有符合条件的系统实例列表</returns>
IReadOnlyList<TSystem> GetSystems<TSystem>() where TSystem : class, ISystem;
/// <summary>
/// 获取指定类型的模型实例
/// </summary>
/// <typeparam name="TModel">模型类型必须继承自IModel接口</typeparam>
/// <returns>模型实例,如果不存在则抛出异常</returns>
TModel GetModel<TModel>() where TModel : class, IModel;
/// <summary>
/// 获取指定类型的所有模型实例
/// </summary>
/// <typeparam name="TModel">模型类型必须继承自IModel接口</typeparam>
/// <returns>所有符合条件的模型实例列表</returns>
IReadOnlyList<TModel> GetModels<TModel>() where TModel : class, IModel;
/// <summary>
/// 获取指定类型的工具类实例
/// </summary>
/// <typeparam name="TUtility">工具类类型必须继承自IUtility接口</typeparam>
/// <returns>工具类实例,如果不存在则抛出异常</returns>
TUtility GetUtility<TUtility>() where TUtility : class, IUtility;
/// <summary>
/// 获取指定类型的所有工具类实例
/// </summary>
/// <typeparam name="TUtility">工具类类型必须继承自IUtility接口</typeparam>
/// <returns>所有符合条件的工具类实例列表</returns>
IReadOnlyList<TUtility> GetUtilities<TUtility>() where TUtility : class, IUtility;
/// <summary>
/// 获取指定类型的所有服务实例,并按优先级排序
/// 实现 IPrioritized 接口的服务将按优先级排序(数值越小优先级越高)
/// </summary>
/// <typeparam name="TService">服务类型</typeparam>
/// <returns>按优先级排序后的服务实例列表</returns>
IReadOnlyList<TService> GetServicesByPriority<TService>() where TService : class;
/// <summary>
/// 获取指定类型的所有系统实例,并按优先级排序
/// 实现 IPrioritized 接口的系统将按优先级排序(数值越小优先级越高)
/// </summary>
/// <typeparam name="TSystem">系统类型必须继承自ISystem接口</typeparam>
/// <returns>按优先级排序后的系统实例列表</returns>
IReadOnlyList<TSystem> GetSystemsByPriority<TSystem>() where TSystem : class, ISystem;
/// <summary>
/// 获取指定类型的所有模型实例,并按优先级排序
/// 实现 IPrioritized 接口的模型将按优先级排序(数值越小优先级越高)
/// </summary>
/// <typeparam name="TModel">模型类型必须继承自IModel接口</typeparam>
/// <returns>按优先级排序后的模型实例列表</returns>
IReadOnlyList<TModel> GetModelsByPriority<TModel>() where TModel : class, IModel;
/// <summary>
/// 获取指定类型的所有工具类实例,并按优先级排序
/// 实现 IPrioritized 接口的工具将按优先级排序(数值越小优先级越高)
/// </summary>
/// <typeparam name="TUtility">工具类类型必须继承自IUtility接口</typeparam>
/// <returns>按优先级排序后的工具类实例列表</returns>
IReadOnlyList<TUtility> GetUtilitiesByPriority<TUtility>() where TUtility : class, IUtility;
/// <summary>
/// 发送一个旧版命令。
/// </summary>
/// <param name="command">要发送的旧版命令。</param>
void SendCommand(ICommand command);
/// <summary>
/// 发送一个旧版带返回值命令。
/// </summary>
/// <typeparam name="TResult">命令执行结果类型。</typeparam>
/// <param name="command">要发送的旧版命令。</param>
/// <returns>命令执行结果。</returns>
TResult SendCommand<TResult>(ICommand<TResult> command);
/// <summary>
/// 发送一个新版 CQRS 命令并返回结果。
/// </summary>
/// <typeparam name="TResponse">命令响应类型。</typeparam>
/// <param name="command">要发送的 CQRS 命令。</param>
/// <returns>命令执行结果。</returns>
/// <remarks>
/// 这是迁移后的推荐命令入口。无返回值命令应实现 <c>IRequest&lt;Unit&gt;</c>,并优先通过 <see cref="SendAsync{TCommand}(TCommand,CancellationToken)" /> 调用。
/// </remarks>
TResponse SendCommand<TResponse>(GFramework.Cqrs.Abstractions.Cqrs.Command.ICommand<TResponse> command);
/// <summary>
/// 异步发送一个旧版命令。
/// </summary>
/// <param name="command">要发送的旧版命令。</param>
Task SendCommandAsync(IAsyncCommand command);
/// <summary>
/// 异步发送一个新版 CQRS 命令并返回结果。
/// </summary>
/// <typeparam name="TResponse">命令响应类型。</typeparam>
/// <param name="command">要发送的 CQRS 命令。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>包含命令执行结果的值任务。</returns>
ValueTask<TResponse> SendCommandAsync<TResponse>(
GFramework.Cqrs.Abstractions.Cqrs.Command.ICommand<TResponse> command,
CancellationToken cancellationToken = default);
/// <summary>
/// 异步发送一个旧版带返回值命令。
/// </summary>
/// <typeparam name="TResult">命令执行结果类型。</typeparam>
/// <param name="command">要发送的旧版命令。</param>
/// <returns>命令执行结果。</returns>
Task<TResult> SendCommandAsync<TResult>(IAsyncCommand<TResult> command);
/// <summary>
/// 发送一个旧版查询请求。
/// </summary>
/// <typeparam name="TResult">查询结果类型。</typeparam>
/// <param name="query">要发送的旧版查询。</param>
/// <returns>查询结果。</returns>
TResult SendQuery<TResult>(IQuery<TResult> query);
/// <summary>
/// 发送一个新版 CQRS 查询并返回结果。
/// </summary>
/// <typeparam name="TResponse">查询响应类型。</typeparam>
/// <param name="query">要发送的 CQRS 查询。</param>
/// <returns>查询结果。</returns>
/// <remarks>
/// 这是迁移后的推荐查询入口。新查询应优先实现 <c>GFramework.Cqrs.Abstractions.Cqrs.Query.IQuery&lt;TResponse&gt;</c>。
/// </remarks>
TResponse SendQuery<TResponse>(GFramework.Cqrs.Abstractions.Cqrs.Query.IQuery<TResponse> query);
/// <summary>
/// 异步发送一个旧版查询请求。
/// </summary>
/// <typeparam name="TResult">查询结果类型。</typeparam>
/// <param name="query">要发送的旧版异步查询。</param>
/// <returns>查询结果。</returns>
Task<TResult> SendQueryAsync<TResult>(IAsyncQuery<TResult> query);
/// <summary>
/// 异步发送一个新版 CQRS 查询并返回结果。
/// </summary>
/// <typeparam name="TResponse">查询响应类型。</typeparam>
/// <param name="query">要发送的 CQRS 查询。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>包含查询结果的值任务。</returns>
ValueTask<TResponse> SendQueryAsync<TResponse>(GFramework.Cqrs.Abstractions.Cqrs.Query.IQuery<TResponse> query,
CancellationToken cancellationToken = default);
/// <summary>
/// 发送一个事件
/// </summary>
/// <typeparam name="TEvent">事件类型,必须具有无参构造函数</typeparam>
void SendEvent<TEvent>() where TEvent : new();
/// <summary>
/// 发送一个带参数的事件
/// </summary>
/// <typeparam name="TEvent">事件类型</typeparam>
/// <param name="e">事件参数</param>
void SendEvent<TEvent>(TEvent e) where TEvent : class;
/// <summary>
/// 注册事件处理器
/// </summary>
/// <typeparam name="TEvent">事件类型</typeparam>
/// <param name="handler">事件处理委托</param>
/// <returns>事件注销接口</returns>
IUnRegister RegisterEvent<TEvent>(Action<TEvent> handler);
/// <summary>
/// 取消注册事件监听器
/// </summary>
/// <typeparam name="TEvent">事件类型</typeparam>
/// <param name="onEvent">要取消注册的事件回调方法</param>
void UnRegisterEvent<TEvent>(Action<TEvent> onEvent);
/// <summary>
/// 发送新版 CQRS 请求,并统一处理命令与查询。
/// </summary>
/// <remarks>
/// 这是自有 CQRS 运行时的主入口。新代码应优先通过该方法或 <see cref="SendAsync{TCommand}(TCommand,CancellationToken)" /> 进入 dispatcher。
/// </remarks>
ValueTask<TResponse> SendRequestAsync<TResponse>(
IRequest<TResponse> request,
CancellationToken cancellationToken = default);
/// <summary>
/// 发送新版 CQRS 请求的同步包装版本。
/// </summary>
/// <remarks>
/// 仅为兼容同步调用链保留;新代码应优先使用异步入口,避免阻塞当前线程。
/// </remarks>
TResponse SendRequest<TResponse>(IRequest<TResponse> request);
/// <summary>
/// 发布新版 CQRS 通知。
/// </summary>
/// <remarks>
/// 该入口用于一对多通知分发,与框架级 <c>EventBus</c> 事件系统并存,适合围绕请求处理过程传播领域通知。
/// </remarks>
ValueTask PublishAsync<TNotification>(
TNotification notification,
CancellationToken cancellationToken = default)
where TNotification : INotification;
/// <summary>
/// 创建新版 CQRS 流式请求。
/// </summary>
/// <remarks>
/// 适用于需要按序惰性产出大量结果的场景。调用方应消费返回的异步序列,而不是回退到旧版查询总线。
/// </remarks>
IAsyncEnumerable<TResponse> CreateStream<TResponse>(
IStreamRequest<TResponse> request,
CancellationToken cancellationToken = default);
// === 便捷扩展方法 ===
/// <summary>
/// 发送一个无返回值的新版 CQRS 命令。
/// </summary>
ValueTask SendAsync<TCommand>(
TCommand command,
CancellationToken cancellationToken = default)
where TCommand : IRequest<Unit>;
/// <summary>
/// 发送一个有返回值的新版 CQRS 请求。
/// </summary>
ValueTask<TResponse> SendAsync<TResponse>(
IRequest<TResponse> command,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取环境对象
/// </summary>
/// <returns>环境对象实例</returns>
IEnvironment GetEnvironment();
}

View File

@ -0,0 +1,24 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构上下文提供者接口,用于解耦上下文获取逻辑
/// </summary>
public interface IArchitectureContextProvider
{
/// <summary>
/// 获取当前的架构上下文
/// </summary>
/// <returns>架构上下文实例</returns>
IArchitectureContext GetContext();
/// <summary>
/// 尝试获取指定类型的架构上下文
/// </summary>
/// <typeparam name="T">架构上下文类型</typeparam>
/// <param name="context">输出的上下文实例</param>
/// <returns>如果成功获取则返回true否则返回false</returns>
bool TryGetContext<T>(out T? context) where T : class, IArchitectureContext;
}

View File

@ -0,0 +1,20 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Enums;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构生命周期钩子接口,用于在架构的不同生命周期阶段执行自定义逻辑。
/// 实现此接口的类可以监听架构阶段变化并访问相关的架构实例。
/// </summary>
public interface IArchitectureLifecycleHook
{
/// <summary>
/// 当架构进入指定阶段时触发的回调方法。
/// </summary>
/// <param name="phase">当前的架构阶段</param>
/// <param name="architecture">相关的架构实例</param>
void OnPhase(ArchitecturePhase phase, IArchitecture architecture);
}

View File

@ -0,0 +1,17 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构模块接口,继承自架构生命周期接口。
/// 定义了模块安装到架构中的标准方法。
/// </summary>
public interface IArchitectureModule
{
/// <summary>
/// 将当前模块安装到指定的架构中。
/// </summary>
/// <param name="architecture">要安装模块的目标架构实例。</param>
void Install(IArchitecture architecture);
}

View File

@ -0,0 +1,19 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Enums;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构阶段监听器接口,用于监听和响应架构生命周期中的不同阶段变化。
/// 实现此接口的类可以在架构进入特定阶段时执行相应的逻辑处理。
/// </summary>
public interface IArchitecturePhaseListener
{
/// <summary>
/// 当架构进入指定阶段时触发的回调方法。
/// </summary>
/// <param name="phase">架构阶段枚举值,表示当前所处的架构阶段</param>
void OnArchitecturePhase(ArchitecturePhase phase);
}

View File

@ -0,0 +1,52 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Command;
using GFramework.Core.Abstractions.Events;
using GFramework.Core.Abstractions.Ioc;
using GFramework.Core.Abstractions.Query;
using GFramework.Core.Abstractions.Rule;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 架构服务接口,定义了框架核心架构所需的服务组件
/// </summary>
public interface IArchitectureServices : IContextAware
{
/// <summary>
/// 获取依赖注入容器
/// </summary>
/// <returns>IIocContainer类型的依赖注入容器实例</returns>
IIocContainer Container { get; }
/// <summary>
/// 获取类型事件系统
/// </summary>
/// <returns>ITypeEventSystem类型的事件系统实例</returns>
IEventBus EventBus { get; }
/// <summary>
/// 获取命令执行器
/// </summary>
/// <returns>ICommandExecutor类型的命令执行器实例</returns>
ICommandExecutor CommandExecutor { get; }
/// <summary>
/// 获取查询执行器
/// </summary>
/// <returns>IQueryExecutor类型的查询执行器实例</returns>
IQueryExecutor QueryExecutor { get; }
/// <summary>
/// 获取异步查询执行器
/// </summary>
/// <returns>IAsyncQueryExecutor类型的异步查询执行器实例</returns>
IAsyncQueryExecutor AsyncQueryExecutor { get; }
/// <summary>
/// 获取服务模块管理器
/// </summary>
/// <returns>IServiceModuleManager类型的服务模块管理器实例</returns>
IServiceModuleManager ModuleManager { get; }
}

View File

@ -0,0 +1,37 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Ioc;
using GFramework.Core.Abstractions.Lifecycle;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 服务模块接口,定义了服务模块的基本契约。
/// 所有服务模块必须实现此接口,以支持注册、初始化和异步销毁功能。
/// </summary>
public interface IServiceModule : IInitializable, IAsyncDestroyable
{
/// <summary>
/// 获取模块的唯一名称。
/// </summary>
string ModuleName { get; }
/// <summary>
/// 获取模块的优先级,数值越小优先级越高。
/// 用于控制模块的注册和初始化顺序。
/// </summary>
int Priority { get; }
/// <summary>
/// 获取模块的启用状态。
/// 返回 true 表示模块已启用false 表示模块被禁用。
/// </summary>
bool IsEnabled { get; }
/// <summary>
/// 注册模块提供的服务到依赖注入容器中。
/// </summary>
/// <param name="container">依赖注入容器实例,用于注册服务。</param>
void Register(IIocContainer container);
}

View File

@ -0,0 +1,43 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Ioc;
namespace GFramework.Core.Abstractions.Architectures;
/// <summary>
/// 服务模块管理器接口,用于管理架构中的服务模块。
/// </summary>
public interface IServiceModuleManager
{
/// <summary>
/// 注册一个服务模块。
/// </summary>
/// <param name="module">要注册的服务模块实例。</param>
void RegisterModule(IServiceModule module);
/// <summary>
/// 注册内置的服务模块。
/// </summary>
/// <param name="container">IoC容器实例用于解析依赖。</param>
void RegisterBuiltInModules(IIocContainer container);
/// <summary>
/// 获取所有已注册的服务模块。
/// </summary>
/// <returns>只读的服务模块列表。</returns>
IReadOnlyList<IServiceModule> GetModules();
/// <summary>
/// 异步初始化所有已注册的服务模块。
/// </summary>
/// <param name="asyncMode">是否以异步模式初始化模块。</param>
/// <returns>表示异步操作的任务。</returns>
Task InitializeAllAsync(bool asyncMode);
/// <summary>
/// 异步销毁所有已注册的服务模块。
/// </summary>
/// <returns>表示异步操作的值任务。</returns>
ValueTask DestroyAllAsync();
}

View File

@ -0,0 +1,26 @@
// Copyright (c) 2026 GeWuYou
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
namespace GFramework.Core.Abstractions.Bases;
/// <summary>
/// 定义具有键值访问能力的接口契约
/// </summary>
/// <typeparam name="TKey">键的类型</typeparam>
public interface IHasKey<out TKey>
{
/// <summary>
/// 获取对象的键值
/// </summary>
TKey Key { get; }
}

View File

@ -0,0 +1,22 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Bases;
/// <summary>
/// 表示键值对的接口,定义了通用的键值对数据结构契约
/// </summary>
/// <typeparam name="TKey">键的类型</typeparam>
/// <typeparam name="TValue">值的类型</typeparam>
public interface IKeyValue<out TKey, out TValue>
{
/// <summary>
/// 获取键值对中的键
/// </summary>
TKey Key { get; }
/// <summary>
/// 获取键值对中的值
/// </summary>
TValue Value { get; }
}

View File

@ -0,0 +1,20 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Bases;
/// <summary>
/// 定义具有优先级的对象接口。
/// 数值越小优先级越高,越先执行。
/// 用于控制服务、系统等组件的执行顺序。
/// </summary>
public interface IPrioritized
{
/// <summary>
/// 获取优先级值。
/// 数值越小优先级越高。
/// 默认优先级为 0。
/// 建议范围:-1000 到 1000。
/// </summary>
int Priority { get; }
}

View File

@ -0,0 +1,74 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Bases;
/// <summary>
/// 预定义的优先级分组常量
/// </summary>
/// <remarks>
/// 提供标准化的优先级值,用于统一管理系统、服务等组件的执行顺序。
/// 优先级值越小,优先级越高(负数表示高优先级)。
/// </remarks>
public static class PriorityGroup
{
/// <summary>
/// 关键优先级 - 最高优先级,用于核心系统和基础设施
/// </summary>
/// <remarks>
/// 适用场景:
/// - 日志系统
/// - 配置管理
/// - IoC 容器初始化
/// - 架构核心组件
/// </remarks>
public const int Critical = -100;
/// <summary>
/// 高优先级 - 用于重要但非核心的系统
/// </summary>
/// <remarks>
/// 适用场景:
/// - 事件总线
/// - 资源管理器
/// - 输入系统
/// - 网络管理器
/// </remarks>
public const int High = -50;
/// <summary>
/// 普通优先级 - 默认优先级
/// </summary>
/// <remarks>
/// 适用场景:
/// - 游戏逻辑系统
/// - UI 系统
/// - 音频系统
/// - 大部分业务逻辑
/// </remarks>
public const int Normal = 0;
/// <summary>
/// 低优先级 - 用于非关键系统
/// </summary>
/// <remarks>
/// 适用场景:
/// - 统计系统
/// - 调试工具
/// - 性能监控
/// - 辅助功能
/// </remarks>
public const int Low = 50;
/// <summary>
/// 延迟优先级 - 最低优先级,用于可延迟执行的系统
/// </summary>
/// <remarks>
/// 适用场景:
/// - 分析和遥测
/// - 后台数据同步
/// - 缓存清理
/// - 非紧急任务
/// </remarks>
public const int Deferred = 100;
}

View File

@ -0,0 +1,31 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Rule;
namespace GFramework.Core.Abstractions.Command;
/// <summary>
/// 表示一个异步命令接口,该命令不返回结果
/// </summary>
public interface IAsyncCommand : IContextAware
{
/// <summary>
/// 异步执行命令
/// </summary>
/// <returns>表示异步操作的任务</returns>
Task ExecuteAsync();
}
/// <summary>
/// 表示一个异步命令接口,该命令返回指定类型的结果
/// </summary>
/// <typeparam name="TResult">命令执行结果的类型</typeparam>
public interface IAsyncCommand<TResult> : IContextAware
{
/// <summary>
/// 异步执行命令并返回结果
/// </summary>
/// <returns>表示异步操作的任务,任务结果为命令执行的返回值</returns>
Task<TResult> ExecuteAsync();
}

View File

@ -1,18 +1,15 @@
using GFramework.Core.events;
using GFramework.Core.model;
using GFramework.Core.query;
using GFramework.Core.rule;
using GFramework.Core.system;
using GFramework.Core.utility;
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.command;
using GFramework.Core.Abstractions.Rule;
namespace GFramework.Core.Abstractions.Command;
/// <summary>
/// 命令接口,定义了无返回值命令的基本契约
/// 该接口继承了多个框架能力接口,使命令可以访问架构、系统、模型、工具,并能够发送事件、命令和查询
/// </summary>
public interface ICommand : ICanSetArchitecture, ICanGetSystem, ICanGetModel, ICanGetUtility,
ICanSendEvent, ICanSendCommand, ICanSendQuery
public interface ICommand : IContextAware
{
/// <summary>
/// 执行命令的核心方法
@ -26,9 +23,7 @@ public interface ICommand : ICanSetArchitecture, ICanGetSystem, ICanGetModel, IC
/// 该接口继承了多个框架能力接口,使命令可以访问架构、系统、模型、工具,并能够发送事件、命令和查询
/// </summary>
/// <typeparam name="TResult">命令执行后返回的结果类型</typeparam>
public interface ICommand<out TResult> : ICanSetArchitecture, ICanGetSystem, ICanGetModel,
ICanGetUtility,
ICanSendEvent, ICanSendCommand, ICanSendQuery
public interface ICommand<out TResult> : IContextAware
{
/// <summary>
/// 执行命令的核心方法

View File

@ -0,0 +1,39 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Command;
/// <summary>
/// 定义命令执行器接口,提供同步和异步方式发送并执行命令的方法。
/// </summary>
public interface ICommandExecutor
{
/// <summary>
/// 发送并执行一个命令。
/// </summary>
/// <param name="command">要执行的命令对象,实现 ICommand 接口。</param>
public void Send(ICommand command);
/// <summary>
/// 发送并执行一个带返回值的命令。
/// </summary>
/// <typeparam name="TResult">命令执行结果的类型。</typeparam>
/// <param name="command">要执行的带返回值的命令对象,实现 ICommand&lt;TResult&gt; 接口。</param>
/// <returns>命令执行的结果,类型为 TResult。</returns>
public TResult Send<TResult>(ICommand<TResult> command);
/// <summary>
/// 发送并异步执行一个命令。
/// </summary>
/// <param name="command">要执行的命令对象,实现 IAsyncCommand 接口。</param>
/// <returns>表示异步操作的任务。</returns>
Task SendAsync(IAsyncCommand command);
/// <summary>
/// 发送并异步执行一个带返回值的命令。
/// </summary>
/// <typeparam name="TResult">命令执行结果的类型。</typeparam>
/// <param name="command">要执行的带返回值的命令对象,实现 IAsyncCommand&lt;TResult&gt; 接口。</param>
/// <returns>表示异步操作的任务,其结果为命令执行的结果,类型为 TResult。</returns>
Task<TResult> SendAsync<TResult>(IAsyncCommand<TResult> command);
}

View File

@ -0,0 +1,49 @@
// Copyright (c) 2025 GeWuYou
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using GFramework.Core.Abstractions.Utility;
namespace GFramework.Core.Abstractions.Concurrency;
/// <summary>
/// 异步键锁管理器接口,提供基于键的细粒度锁机制
/// </summary>
public interface IAsyncKeyLockManager : IUtility, IDisposable
{
/// <summary>
/// 异步获取指定键的锁(推荐使用)
/// </summary>
/// <param name="key">锁键</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>锁句柄,使用 await using 自动释放</returns>
ValueTask<IAsyncLockHandle> AcquireLockAsync(string key, CancellationToken cancellationToken = default);
/// <summary>
/// 同步获取指定键的锁(兼容性方法)
/// </summary>
/// <param name="key">锁键</param>
/// <returns>锁句柄,使用 using 自动释放</returns>
IAsyncLockHandle AcquireLock(string key);
/// <summary>
/// 获取锁管理器的统计信息
/// </summary>
/// <returns>统计信息快照</returns>
LockStatistics GetStatistics();
/// <summary>
/// 获取当前活跃的锁信息(用于调试)
/// </summary>
/// <returns>键到锁信息的只读字典</returns>
IReadOnlyDictionary<string, LockInfo> GetActiveLocks();
}

View File

@ -0,0 +1,30 @@
// Copyright (c) 2025 GeWuYou
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
namespace GFramework.Core.Abstractions.Concurrency;
/// <summary>
/// 异步锁句柄接口,支持 await using 语法
/// </summary>
public interface IAsyncLockHandle : IAsyncDisposable, IDisposable
{
/// <summary>
/// 锁的键
/// </summary>
string Key { get; }
/// <summary>
/// 锁获取时的时间戳Environment.TickCount64
/// </summary>
long AcquiredTicks { get; }
}

View File

@ -0,0 +1,43 @@
// Copyright (c) 2025 GeWuYou
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
namespace GFramework.Core.Abstractions.Concurrency;
/// <summary>
/// 锁信息(用于调试)
/// </summary>
public readonly struct LockInfo
{
/// <summary>
/// 锁的键。
/// </summary>
public string Key { get; init; }
/// <summary>
/// 当前引用计数。
/// </summary>
public int ReferenceCount { get; init; }
/// <summary>
/// 最后访问时间戳Environment.TickCount64
/// </summary>
public long LastAccessTicks { get; init; }
/// <summary>
/// 等待队列长度(近似值)。
/// 注意:这是一个基于 SemaphoreSlim.CurrentCount 的近似指示器,
/// 当 CurrentCount == 0 时表示锁被持有且可能有等待者,返回 1
/// 否则返回 0。这不是精确的等待者数量仅用于调试参考。
/// </summary>
public int WaitingCount { get; init; }
}

View File

@ -0,0 +1,43 @@
// Copyright (c) 2025 GeWuYou
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Runtime.InteropServices;
namespace GFramework.Core.Abstractions.Concurrency;
/// <summary>
/// 锁统计信息
/// </summary>
[StructLayout(LayoutKind.Auto)]
public readonly struct LockStatistics
{
/// <summary>
/// 当前活跃的锁数量
/// </summary>
public int ActiveLockCount { get; init; }
/// <summary>
/// 累计获取锁的次数
/// </summary>
public int TotalAcquired { get; init; }
/// <summary>
/// 累计释放锁的次数
/// </summary>
public int TotalReleased { get; init; }
/// <summary>
/// 累计清理的锁数量
/// </summary>
public int TotalCleaned { get; init; }
}

View File

@ -0,0 +1,102 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Events;
using GFramework.Core.Abstractions.Utility;
namespace GFramework.Core.Abstractions.Configuration;
/// <summary>
/// 配置管理器接口,提供类型安全的配置存储和访问
/// 线程安全:所有方法都是线程安全的
/// </summary>
public interface IConfigurationManager : IUtility
{
/// <summary>
/// 获取配置数量
/// </summary>
int Count { get; }
/// <summary>
/// 获取指定键的配置值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <returns>配置值,如果不存在则返回类型默认值</returns>
T? GetConfig<T>(string key);
/// <summary>
/// 获取指定键的配置值,如果不存在则返回默认值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="defaultValue">默认值</param>
/// <returns>配置值或默认值</returns>
T GetConfig<T>(string key, T defaultValue);
/// <summary>
/// 设置指定键的配置值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="value">配置值</param>
void SetConfig<T>(string key, T value);
/// <summary>
/// 检查指定键的配置是否存在
/// </summary>
/// <param name="key">配置键</param>
/// <returns>如果存在返回 true否则返回 false</returns>
bool HasConfig(string key);
/// <summary>
/// 移除指定键的配置
/// </summary>
/// <param name="key">配置键</param>
/// <returns>如果成功移除返回 true否则返回 false</returns>
bool RemoveConfig(string key);
/// <summary>
/// 清空所有配置
/// </summary>
void Clear();
/// <summary>
/// 监听指定键的配置变化
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="onChange">配置变化时的回调,参数为新值</param>
/// <returns>取消注册接口</returns>
IUnRegister WatchConfig<T>(string key, Action<T> onChange);
/// <summary>
/// 从 JSON 字符串加载配置
/// </summary>
/// <param name="json">JSON 字符串</param>
void LoadFromJson(string json);
/// <summary>
/// 将配置保存为 JSON 字符串
/// </summary>
/// <returns>JSON 字符串</returns>
string SaveToJson();
/// <summary>
/// 从文件加载配置
/// </summary>
/// <param name="path">文件路径</param>
void LoadFromFile(string path);
/// <summary>
/// 将配置保存到文件
/// </summary>
/// <param name="path">文件路径</param>
void SaveToFile(string path);
/// <summary>
/// 获取所有配置键
/// </summary>
/// <returns>配置键集合</returns>
IEnumerable<string> GetAllKeys();
}

View File

@ -0,0 +1,41 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Controller;
/// <summary>
/// 控制器标记接口,用于标识控制器组件
/// </summary>
/// <remarks>
/// <para>
/// IController 是一个标记接口Marker Interface不包含任何方法或属性。
/// 它的作用是标识一个类是控制器,用于协调 Model、System 和 UI 之间的交互。
/// </para>
/// <para>
/// 架构访问 :控制器通常需要访问架构上下文。使用 [ContextAware] 特性
/// 自动生成上下文访问能力:
/// </para>
/// <code>
/// using GFramework.Core.SourceGenerators.Abstractions.Rule;
///
/// [ContextAware]
/// public partial class PlayerController : IController
/// {
/// public void Initialize()
/// {
/// // [ContextAware] 实现 IContextAware 接口,可使用扩展方法
/// var playerModel = this.GetModel&lt;PlayerModel&gt;();
/// var gameSystem = this.GetSystem&lt;GameSystem&gt;();
/// }
/// }
/// </code>
/// <para>
/// 注意:
/// </para>
/// <list type="bullet">
/// <item>必须添加 partial 关键字</item>
/// <item>[ContextAware] 特性会自动实现 IContextAware 接口</item>
/// <item>可使用 this.GetModel()、this.GetSystem() 等扩展方法访问架构</item>
/// </list>
/// </remarks>
public interface IController;

View File

@ -0,0 +1,31 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 表示协程的最终完成结果。
/// </summary>
public enum CoroutineCompletionStatus
{
/// <summary>
/// 调度器无法确认该句柄的最终结果。
/// 这通常意味着句柄无效,或者句柄对应的历史结果已经不可用。
/// </summary>
Unknown,
/// <summary>
/// 协程自然执行结束。
/// </summary>
Completed,
/// <summary>
/// 协程被外部终止、清空或取消令牌中断。
/// </summary>
Cancelled,
/// <summary>
/// 协程在推进过程中抛出了异常。
/// </summary>
Faulted
}

View File

@ -0,0 +1,32 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 表示协程调度器当前所处的执行阶段。
/// </summary>
/// <remarks>
/// 某些等待指令具有阶段语义,例如 <c>WaitForFixedUpdate</c> 和 <c>WaitForEndOfFrame</c>。
/// 宿主应为这些语义提供匹配的调度器阶段,否则这类等待不会自然完成。
/// </remarks>
public enum CoroutineExecutionStage
{
/// <summary>
/// 默认更新阶段。
/// 普通时间等待、下一帧等待以及大多数条件等待都会在该阶段推进。
/// </summary>
Update,
/// <summary>
/// 固定更新阶段。
/// 仅与固定步相关的等待指令会在该阶段完成。
/// </summary>
FixedUpdate,
/// <summary>
/// 帧结束阶段。
/// 仅与帧尾或延迟执行相关的等待指令会在该阶段完成。
/// </summary>
EndOfFrame
}

View File

@ -0,0 +1,36 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 协程优先级枚举
/// 定义协程的执行优先级,高优先级的协程会优先执行
/// </summary>
public enum CoroutinePriority
{
/// <summary>
/// 最低优先级
/// </summary>
Lowest = 0,
/// <summary>
/// 低优先级
/// </summary>
Low = 1,
/// <summary>
/// 普通优先级(默认)
/// </summary>
Normal = 2,
/// <summary>
/// 高优先级
/// </summary>
High = 3,
/// <summary>
/// 最高优先级
/// </summary>
Highest = 4
}

View File

@ -0,0 +1,30 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 表示协程的执行状态枚举
/// </summary>
public enum CoroutineState
{
/// <summary>
/// 协程正在运行中
/// </summary>
Running,
/// <summary>
/// 协程已暂停
/// </summary>
Paused,
/// <summary>
/// 协程已完成执行
/// </summary>
Completed,
/// <summary>
/// 协程已被取消
/// </summary>
Cancelled
}

View File

@ -0,0 +1,71 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 协程统计信息接口
/// 提供协程执行的性能统计数据
/// </summary>
public interface ICoroutineStatistics
{
/// <summary>
/// 获取总协程启动数量
/// </summary>
long TotalStarted { get; }
/// <summary>
/// 获取总协程完成数量
/// </summary>
long TotalCompleted { get; }
/// <summary>
/// 获取总协程失败数量
/// </summary>
long TotalFailed { get; }
/// <summary>
/// 获取当前活跃协程数量
/// </summary>
int ActiveCount { get; }
/// <summary>
/// 获取当前暂停协程数量
/// </summary>
int PausedCount { get; }
/// <summary>
/// 获取协程平均执行时间(毫秒)
/// </summary>
double AverageExecutionTimeMs { get; }
/// <summary>
/// 获取协程最大执行时间(毫秒)
/// </summary>
double MaxExecutionTimeMs { get; }
/// <summary>
/// 获取按优先级分组的协程数量
/// </summary>
/// <param name="priority">协程优先级</param>
/// <returns>指定优先级的协程数量</returns>
int GetCountByPriority(CoroutinePriority priority);
/// <summary>
/// 获取按标签分组的协程数量
/// </summary>
/// <param name="tag">协程标签</param>
/// <returns>指定标签的协程数量</returns>
int GetCountByTag(string tag);
/// <summary>
/// 重置统计数据
/// </summary>
void Reset();
/// <summary>
/// 生成统计报告
/// </summary>
/// <returns>格式化的统计报告字符串</returns>
string GenerateReport();
}

View File

@ -0,0 +1,25 @@
// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Core.Abstractions.Coroutine;
/// <summary>
/// 时间源接口,提供当前时间、时间增量以及更新功能
/// </summary>
public interface ITimeSource
{
/// <summary>
/// 获取当前时间
/// </summary>
double CurrentTime { get; }
/// <summary>
/// 获取时间增量(上一帧到当前帧的时间差)
/// </summary>
double DeltaTime { get; }
/// <summary>
/// 更新时间源的状态
/// </summary>
void Update();
}

Some files were not shown because too many files have changed in this diff Show More