diff --git a/GFramework.Godot.SourceGenerators/README.md b/GFramework.Godot.SourceGenerators/README.md index 0d3d33b2..7f42c5c1 100644 --- a/GFramework.Godot.SourceGenerators/README.md +++ b/GFramework.Godot.SourceGenerators/README.md @@ -129,6 +129,35 @@ 也就是说,本包负责生成辅助方法,但调用时机仍由项目侧决定。 +最小接法可以直接写成: + +```csharp +using GFramework.Godot.Attribute; +using Godot; + +public partial class MainMenu : Control +{ + [GetNode] + private Button _startButton = null!; + + public override void _Ready() + { + __InjectGetNodes_Generated(); + __BindNodeSignals_Generated(); + } + + public override void _ExitTree() + { + __UnbindNodeSignals_Generated(); + } + + [BindNodeSignal(nameof(_startButton), nameof(Button.Pressed))] + private void OnStartPressed() + { + } +} +``` + ### 4. 按场景选特性 - 项目级元数据: diff --git a/ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md b/ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md new file mode 100644 index 00000000..6c306881 --- /dev/null +++ b/ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md @@ -0,0 +1,77 @@ +# Documentation Full Coverage Governance Status History Through RP-016 + +以下内容从 active tracking 中迁出,用于保留 `DOCUMENTATION-FULL-COVERAGE-GOV-RP-001` 到 +`DOCUMENTATION-FULL-COVERAGE-GOV-RP-016` 的阶段性状态、治理结论与恢复背景。默认 `boot` 只需要读取 active +tracking 中的最新摘要;若需要追溯已完成波次的详细背景,再回到本归档文件。 + +## 阶段里程碑 + +### `RP-001` 到 `RP-007` + +- 建立长期 active topic `documentation-full-coverage-governance`,并在 `ai-plan/public/README.md` 中将当前分支 + `docs/sdk-update-documentation` 映射到该 topic。 +- 明确消费属性边界: + - `GFramework.Ecs.Arch.Abstractions` 是可打包直接消费模块,需要 README 与文档入口。 + - `GFramework.Core.SourceGenerators.Abstractions`、 + `GFramework.Godot.SourceGenerators.Abstractions`、`GFramework.SourceGenerators.Common` + 都按 `IsPackable=false` 的内部支撑模块处理。 +- 收口 `Core` / `Core.Abstractions` README、landing page 与类型族级 XML inventory。 +- 收口 `Ecs.Arch` / `Ecs.Arch.Abstractions` README、landing page、抽象页与 `UseArch(...)` 早于 + `Initialize()` 的采用约束。 +- 收口 `Cqrs` family 的 runtime / abstractions / source generator 入口,并为缺失的内部类型补齐 XML 注释。 +- 收口 `Game` family 的 README、landing page、抽象页与类型族级 XML inventory。 +- 将 `Game` family 从“文档存在但入口失真”推进到“runtime / abstractions / source generator 都有当前可审计入口”。 + +### `RP-008` 到 `RP-013` + +- 消化 PR #271 的文档 follow-up,修正 `gframework-pr-review` 脚本与 skill 中的 WSL Git 策略,使其与 + `AGENTS.md` 保持一致。 +- 将 `Godot` family 的核心恢复摘要迁回 active topic,避免默认恢复路径继续依赖 archive 细节。 +- 重写 `GFramework.Godot/README.md` 与 `GFramework.Godot.SourceGenerators/README.md`,补齐当前包关系、 + 子系统地图、最小接入路径与站内文档入口。 +- 更新根 `README.md`、`docs/zh-CN/source-generators/index.md`、`docs/zh-CN/api-reference/index.md`,把 + `GFramework.Godot.SourceGenerators` 的 owner 与能力边界收敛到当前源码口径。 +- 完成 `Godot` docs surface 的 validation-only 巡检,确认 landing、tutorial、API reference 与 README + 当前保持一致叙述,没有出现新的入口漂移。 + +### `RP-014` 到 `RP-016` + +- 重写 `docs/zh-CN/godot/storage.md`,补齐 frontmatter、`GodotFileStorage` 的路径语义、repository 分工与 + `GodotYamlConfigLoader` 分流边界。 +- 重写 `docs/zh-CN/godot/setting.md`,改回当前 `ISettingsModel` / `RegisterApplicator(...)` 口径,并补齐 + `LocalizationMap` fallback 与当前 consumer wiring。 +- 对 `Godot` docs surface 再做一轮 validation-only 巡检,确认 `storage.md`、`setting.md`、landing、README、 + tutorial 与 API reference 没有新的回漂。 +- 重写 `docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md`,把 `Game` persistence docs + surface 收口到当前 repository / storage / serializer / settings 责任边界。 +- 将 `DataRepository`、`UnifiedSettingsDataRepository`、`SaveRepository` 与 `FileStorage` / + `ScopedStorage` / `SettingsModel` 的分工,统一回写到 README、源码与 `PersistenceTests` 已验证的采用路径。 + +## 已确认的长期事实 + +- 已归档的 `documentation-governance-and-refresh` 只作为历史证据保留,不再作为默认 `boot` 入口。 +- `Godot` family 当前核心页面集包括: + - `docs/zh-CN/godot/index.md` + - `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` + - `docs/zh-CN/godot/extensions.md` + - `docs/zh-CN/godot/logging.md` + - `docs/zh-CN/tutorials/godot-integration.md` +- `Game` persistence docs surface 当前最值得优先复核的页面集包括: + - `docs/zh-CN/game/data.md` + - `docs/zh-CN/game/storage.md` + - `docs/zh-CN/game/serialization.md` + - `docs/zh-CN/game/setting.md` +- `GFramework.Cqrs` 在当前 WSL / dotnet 环境下仍会读取失效的 fallback package folder,并在标准 build 中触发 + `MSB4276` / `MSB4018`;这是已知环境阻塞,不是本 topic 当前文档回归。 +- 当前 WSL 会话里 `git.exe` 可解析但不可执行,仓库默认 Git 策略应继续优先使用显式 + `--git-dir` / `--work-tree` 绑定。 + +## 关联归档 + +- 早期详细验证历史:`ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` +- 时间线归档:`ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md` diff --git a/ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md b/ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md new file mode 100644 index 00000000..6138130a --- /dev/null +++ b/ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md @@ -0,0 +1,92 @@ +# Documentation Full Coverage Governance Trace History Through RP-016 + +以下内容从 active trace 中迁出,用于保留 `DOCUMENTATION-FULL-COVERAGE-GOV-RP-001` 到 +`DOCUMENTATION-FULL-COVERAGE-GOV-RP-016` 的阶段时间线、关键决策与主要验证结果。默认 `boot` 只需要读取 +active trace 中的最新恢复点;若需要追溯旧阶段的执行顺序,再回到本归档文件。 + +## 2026-04-22 + +### `RP-001` + +- 新建 active topic `documentation-full-coverage-governance`。 +- 在 `ai-plan/public/README.md` 中将当前 worktree 绑定到该 topic。 +- 盘点可消费模块与内部支撑模块的边界,作为后续 README / docs 治理基线。 + +### `RP-002` + +- 完成 `Core` / `Core.Abstractions` README、landing page 与类型族级 XML inventory 的第一轮收口。 +- 运行 `docs` 站点构建与局部文档校验,结果通过。 + +### `RP-003` + +- 完成 `Ecs.Arch` / `Ecs.Arch.Abstractions` 文档刷新。 +- 确认 `UseArch(...)` 必须早于 `Initialize()` 的采用顺序,并将该约束写回文档。 +- 运行 `docs` 站点构建,结果通过。 + +### `RP-004` + +- 完成 `Cqrs` family landing、generator topic 与 API 参考入口刷新。 +- 为 `GFramework.Cqrs` 与 `GFramework.Cqrs.SourceGenerators` 缺失的内部类型补齐 XML 注释。 +- `GFramework.Cqrs.SourceGenerators` Release build 通过。 +- `GFramework.Cqrs` Release build 仍受环境级 fallback package folder 问题阻塞,记录为已知非回归风险。 + +## 2026-04-23 + +### `RP-005` + +- 完成 `Game` family README、landing page、抽象页与类型族级 XML inventory 刷新。 +- 文档校验与 `docs` 站点构建通过。 + +### `RP-006` + +- 更新 `AGENTS.md` 的 WSL Git 回退顺序: + - 优先显式 `--git-dir` / `--work-tree` 绑定。 + - `git.exe` 仅在当前会话可执行时作为 fallback。 +- `docs` 站点构建通过。 + +### `RP-007` + +- 完成 `Game` family validation-only 巡检。 +- 确认 `config-system.md`、`scene.md`、`ui.md` 与 `source-generators/index.md` 当前没有新的采用漂移。 + +### `RP-008` 到 `RP-013` + +- 消化 PR #271 的 review follow-up,修正 `gframework-pr-review` 脚本与 skill 中的 Git 策略。 +- 将 `Godot` family 的核心恢复摘要迁回 active topic。 +- 重写 `GFramework.Godot/README.md` 与 `GFramework.Godot.SourceGenerators/README.md`。 +- 更新根 `README.md`、`docs/zh-CN/source-generators/index.md` 与 `docs/zh-CN/api-reference/index.md` 的 + `Godot` 入口与 owner 描述。 +- 针对 `Godot` docs surface 执行 validation-only 巡检,确认当前 landing / topic / tutorial / API reference + 与 README 保持一致。 + +### `RP-014` + +- 重写 `docs/zh-CN/godot/storage.md` 与 `docs/zh-CN/godot/setting.md`。 +- 运行 `scan_module_evidence.py Godot`、相关文档校验与 `docs` 站点构建,结果通过。 + +### `RP-015` + +- 再次执行 `Godot` docs surface validation-only 巡检。 +- 确认 `storage.md`、`setting.md`、landing、README、tutorial 与 API reference 没有新的回漂。 + +### `RP-016` + +- 重写 `docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md`。 +- 运行 `scan_module_evidence.py Game`、相关文档校验与 `docs` 站点构建,结果通过。 +- 当前 `Game` persistence docs surface 已回到与源码、README 和 `PersistenceTests` 一致的责任边界叙述。 + +## 主要验证汇总 + +- `cd docs && bun run build` + - 多轮执行通过;仅保留既有 VitePress 大 chunk warning,无构建失败。 +- `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh ...` + - 针对本 topic 涉及的 landing / topic / abstractions 页面多轮执行通过。 +- `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot` + - 通过。 +- `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Game` + - 通过。 + +## 归档关联 + +- 状态归档:`ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md` +- 早期详细验证历史:`ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` diff --git a/ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md b/ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md index 23926915..ee1e1412 100644 --- a/ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md +++ b/ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md @@ -3,7 +3,7 @@ ## 目标 建立一个长期 active topic,持续治理 `GFramework` 的 README、`docs/zh-CN`、站点导航、XML 文档和 API -参考链路,避免历史上的阶段性刷新完成后再次回漂。 +参考链路,避免阶段性刷新完成后再次回漂。 - 用源码、测试、`*.csproj` 和必要的 `ai-libs/` 证据校正文档 - 以模块族为单位闭环 README、landing page、专题页、教程入口和 API 参考链路 @@ -12,184 +12,60 @@ ## 当前恢复点 -- 恢复点编号:`DOCUMENTATION-FULL-COVERAGE-GOV-RP-016` +- 恢复点编号:`DOCUMENTATION-FULL-COVERAGE-GOV-RP-017` - 当前阶段:`Phase 5 - Governance Maintenance` - 当前焦点: - - 保持 `Game` family 的 persistence docs surface 与当前 `README`、源码、`PersistenceTests` 使用同一套 owner / adoption path 叙述 - - 将 `data.md`、`storage.md`、`serialization.md`、`setting.md` 视为 `Game` family 当前需要一起巡检的核心页面集,而不是分散的旧 API 手册页 - - 重点观察 `DataRepository` / `UnifiedSettingsDataRepository` / `SaveRepository`、`FileStorage` / `ScopedStorage` 与 `SettingsModel` 的职责边界是否再次回漂 - - 在 `Game` runtime public API 或 README 再次变动前,优先做 targeted 巡检,不重复改写已稳定的 landing page + - 保持 `Game` persistence docs surface 与当前 `README`、源码、`PersistenceTests` 使用同一套 owner / adoption path 叙述 + - 保持 `GFramework.Godot.SourceGenerators/README.md` 与 `docs/zh-CN/tutorials/godot-integration.md` 在生命周期接法上的一致性 + - 保持 active tracking / trace 只承载当前恢复入口,把阶段细节留在 `archive/` ## 当前状态摘要 -- 已归档的 `documentation-governance-and-refresh` 仅保留为历史证据,不再作为默认 `boot` 入口 -- `2026-04-23` 的 `Game` persistence docs wave 新增结论: - - `docs/zh-CN/game/storage.md` 之前仍停留在旧版“通用存储 API 手册”写法,没有反映 `FileStorage` / `ScopedStorage` 与上层 repository 的分工,也没有强调当前同步 API 只是异步阻塞包装 - - `docs/zh-CN/game/data.md` 之前缺少 `DataRepository`、`UnifiedSettingsDataRepository` 与 `SaveRepository` 三层分工,以及 `PersistenceTests` 已覆盖的备份 / 批量事件 / 存档迁移语义 - - `docs/zh-CN/game/serialization.md` 之前仍沿用“业务层手工 Serialize 再写回 storage”的旧示例,没有反映当前 `FileStorage` 已直接复用注入的 `ISerializer` - - `docs/zh-CN/game/setting.md` 虽然已回到 `ISettingsModel` / `RegisterApplicator(...)` 口径,但缺少 frontmatter,且还没有和新的 `Game` persistence docs surface 使用同一套结构 -- `2026-04-23` 的 `Game` persistence docs wave 治理动作: - - 重写 `docs/zh-CN/game/storage.md`,将其改为 `FileStorage` / `ScopedStorage` 的职责、路径语义、作用域复用与 repository 边界页 - - 重写 `docs/zh-CN/game/data.md`,补齐 `DataRepository`、`UnifiedSettingsDataRepository`、`SaveRepository` 与 `DataRepositoryOptions` / `SaveConfiguration` 的当前契约 - - 重写 `docs/zh-CN/game/serialization.md`,收敛到 `JsonSerializer` 的配置生命周期、运行时类型序列化与和 storage / repository 的分工 - - 重写 `docs/zh-CN/game/setting.md`,使其与 `SettingsModel`、`SettingsSystem`、迁移缓存和统一设置仓库的当前实现保持一致 -- 本轮已消化的 PR #271 review follow-up: - - 为 `.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py` 补齐 WSL worktree 下的显式 Linux Git 绑定,避免 `git.exe` 在当前会话触发 `Exec format error` - - 同步更新 `.agents/skills/gframework-pr-review/SKILL.md`,改为与 `AGENTS.md` 一致的 Git 策略,并把命令示例统一到 `.agents/...` 路径 - - 为 `docs/zh-CN/source-generators/cqrs-handler-registry-generator.md` 补充 marker 类型放置与命名约定说明 - - 从 `docs/zh-CN/abstractions/ecs-arch-abstractions.md` 删除误放的 source-generator 内部模块提醒,并微调 `docs/zh-CN/ecs/index.md` 的边界说明语序 - - 为 `ai-plan/public/archive/documentation-governance-and-refresh/traces/documentation-governance-and-refresh-trace.md` 的归档验证补写结果态 - - 将 RP-001 至 RP-007 的详细验证历史迁入 `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` - - `2026-04-23` 再次执行 `$gframework-pr-review` 后,确认 PR `#271` 已关闭,latest reviewed commit `df91d3706ba9db71737e803ef2f40f4841ecbbf1` 仍显示 `2` 条 open thread,但两条都对应已在当前 HEAD 满足的 `ai-plan` 变更,属于 closed PR 上未自动收敛的陈旧线程信号 -- 本轮已确认的消费属性结论: - - `GFramework.Ecs.Arch.Abstractions`:可打包直接消费模块,需要 README 和文档入口 - - `GFramework.Core.SourceGenerators.Abstractions`:`IsPackable=false`,按内部支撑模块处理 - - `GFramework.Godot.SourceGenerators.Abstractions`:`IsPackable=false`,按内部支撑模块处理 - - `GFramework.SourceGenerators.Common`:`IsPackable=false`,按内部支撑模块处理 -- 本轮已确认的 `Godot` family 恢复摘要: - - `docs/zh-CN/godot/index.md`、`architecture.md`、`scene.md`、`ui.md`、`storage.md`、`setting.md`、`signal.md`、`extensions.md`、`logging.md` 与 `docs/zh-CN/tutorials/godot-integration.md` 是当前需要保留的核心页面集 - - `GFramework.Godot.SourceGenerators` 继续作为 `[GetNode]`、`[BindNodeSignal]`、`AutoLoads` 与 `InputActions` 的 owner;`GFramework.Godot.SourceGenerators.Abstractions` 仍按内部支撑模块处理 - - `Godot` Scene / UI 采用边界已经稳定:当前没有 `GodotSceneRouter` 或 `GodotUiRouter`;`GodotSceneFactory` 在 provider 缺失时会回退到 `SceneBehaviorFactory`,而 `GodotUiFactory` 仍要求 `IUiPageBehaviorProvider` -- `2026-04-23` 的 validation-only 巡检新增结论: - - 根 `README.md`、`docs/zh-CN/godot/index.md`、`docs/zh-CN/tutorials/godot-integration.md`、`docs/zh-CN/source-generators/index.md` 与 `docs/zh-CN/api-reference/index.md` 当前仍保持同一套 `Godot` owner / adoption path 叙述,没有发现新的入口漂移 - - `scan_module_evidence.py Godot` 显示 `docs/zh-CN/godot/storage.md` 与 `setting.md` 仍属于 `Godot` runtime docs surface,应并入 active topic 的最小恢复摘要,避免后续 `boot` 漏掉当前 landing page 的关键入口 -- `2026-04-23` 的子页巡检新增结论: - - `docs/zh-CN/godot/storage.md` 之前仍停留在旧版 API 手册写法,缺少 frontmatter、`IStorage` / repository 边界和 `GodotYamlConfigLoader` 的分流说明 - - `docs/zh-CN/godot/setting.md` 之前仍把 `GodotAudioSettings` / `GodotGraphicsSettings` 描述成直接持有设置数据对象的旧构造方式,没有反映当前 `ISettingsModel` + `RegisterApplicator(...)` 接法 -- `2026-04-23` 的交叉链接巡检新增结论: - - `GFramework.Godot/README.md` 仍停留在旧版简略描述,缺少当前包关系、子系统地图、最小接入路径与 `docs/zh-CN` 入口 - - `GFramework.Godot.SourceGenerators/README.md` 虽有示例,但没有覆盖 `AutoScene`、`AutoUiPage`、`AutoRegisterExportedCollections` 等当前生成器分组,也没有把运行时 / 生成器边界说清 - - `docs/zh-CN/api-reference/index.md` 的 `Godot` 行此前只把生成器入口指向泛化的 `source-generators/index.md`,不利于从 API 参考直接落到 `Godot` 专题页 -- `2026-04-23` 的后续入口巡检新增结论: - - 根 `README.md` 的模块地图仍把 `GFramework.Godot.SourceGenerators` 写成“Godot 场景专用源码生成器”,范围过窄,不符合当前 `project.godot` 元数据、节点注入、信号绑定、Scene / UI 包装与导出集合注册的真实职责 - - `docs/zh-CN/source-generators/index.md` 的选包说明此前只提到 `AutoLoad / Input Action` 与节点 / 信号样板,没有把 Scene / UI 包装与导出集合注册辅助纳入同一入口 -- 本轮已完成的治理动作: - - 新建 `GFramework.Ecs.Arch.Abstractions/README.md` - - 在根 `README.md` 中补齐 `GFramework.Ecs.Arch.Abstractions` 入口,并声明内部支撑模块 owner - - 为抽象接口栏目补齐 `Ecs.Arch.Abstractions` 页面与 sidebar 入口 - - 将 `docs/zh-CN/api-reference/index.md` 重写为模块到 XML / README / 教程的阅读链路入口 - - 为 `GFramework.Core/README.md` 补齐 `Services`、`Configuration`、`Environment`、`Pool`、`Rule`、`Time` 等当前目录映射 - - 为 `GFramework.Core.Abstractions/README.md` 补齐契约族地图与 XML 阅读重点 - - 将 `docs/zh-CN/abstractions/core-abstractions.md` 从过时的接口摘录页重写为契约边界 / 包关系 / 最小接入路径页面 - - 为 `docs/zh-CN/core/index.md` 补齐 frontmatter、能力域导航和 API / XML 阅读入口 - - 为 `GFramework.Core/README.md`、`GFramework.Core.Abstractions/README.md` 补齐类型族级 XML 覆盖基线入口 - - 为 `docs/zh-CN/core/index.md`、`docs/zh-CN/abstractions/core-abstractions.md` 增加“类型族 -> XML 覆盖状态 -> 代表类型”的 inventory - - 基于顶层目录轻量盘点确认:`Core` / `Core.Abstractions` 当前公开 / 内部类型声明都已带 XML 注释,成员级审计留待后续波次 - - 重写 `docs/zh-CN/ecs/index.md`,收敛当前 ECS family 的包边界、采用顺序和 XML inventory - - 重写 `docs/zh-CN/ecs/arch.md`,明确 `UseArch(...)` 需早于 `Initialize()` 的真实接入时机 - - 刷新 `GFramework.Ecs.Arch/README.md`,使运行时 README 与源码 / 测试一致 - - 为 `GFramework.Ecs.Arch.Abstractions/README.md` 与 `docs/zh-CN/abstractions/ecs-arch-abstractions.md` 补齐类型族级 XML inventory - - 重写 `docs/zh-CN/core/cqrs.md`,将其收敛为 `Cqrs` family landing,并补齐运行时 / 契约层 / 生成器的 XML inventory - - 新建 `docs/zh-CN/source-generators/cqrs-handler-registry-generator.md`,为 `Cqrs.SourceGenerators` 补齐站内专题入口 - - 更新 `docs/zh-CN/source-generators/index.md`、`docs/zh-CN/api-reference/index.md` 与 VitePress sidebar,使 `Cqrs` family 的 generator 入口可导航 - - 为 `GFramework.Cqrs/Internal/CqrsHandlerRegistrar.cs` 与 `GFramework.Cqrs.SourceGenerators/Cqrs/CqrsHandlerRegistryGenerator.cs` 中缺失的内部类型补齐 XML 注释,使本轮轻量 inventory 达到声明级闭环 - - 为 `GFramework.Game/README.md`、`GFramework.Game.Abstractions/README.md`、`GFramework.Game.SourceGenerators/README.md` 补齐 `Game` family 的类型族级 XML inventory - - 为 `docs/zh-CN/game/index.md` 补齐 frontmatter,并增加 `Game` / `Game.Abstractions` / `Game.SourceGenerators` 的 XML 覆盖基线入口 - - 将 `docs/zh-CN/abstractions/game-abstractions.md` 从失真的旧接口摘录页重写为契约边界 / 包关系 / 最小接入路径页面 - - 基于顶层目录轻量盘点确认:`GFramework.Game` 为 `56/56`、`GFramework.Game.Abstractions` 为 `80/80`、`GFramework.Game.SourceGenerators` 为 `2/2`,当前公开 / 内部类型声明都已带 XML 注释 - - 更新 `AGENTS.md` 的 WSL Git 策略,将显式 `--git-dir` / `--work-tree` 绑定提升为高于 `git.exe` 的默认优先级 - - 记录当前环境偏差:本会话 `git.exe` 可解析但执行会触发 `Exec format error`,而 plain Linux `git` 会命中 worktree 路径翻译错误,需要显式仓库绑定 - - 完成 `Game` family 巡检,确认 `docs/zh-CN/game/config-system.md`、`scene.md`、`ui.md` 与 `docs/zh-CN/source-generators/index.md` 的核心采用说明、包关系与交叉引用仍与当前源码 / README 一致,没有发现需要立刻修正的回漂 - - 将 `Godot` family 的最小恢复摘要迁回 active topic,保留核心页面集、生成器 owner、Scene / UI 真实边界与归档指针,避免长期治理默认恢复路径继续依赖 archive 明细 - - 重写 `GFramework.Godot/README.md`,补齐包定位、相邻包关系、子系统地图、最小接入路径与站内文档入口,并明确它不拥有生成器职责 - - 重写 `GFramework.Godot.SourceGenerators/README.md`,按 `project.godot` 元数据、节点注入 / 信号绑定、行为包装与批量注册四组能力重建入口 - - 更新 `docs/zh-CN/api-reference/index.md` 的 `Godot` 模块映射,使 API 参考能直接落到 `Godot` 专用生成器专题页,而不是仅回到总览页 - - 修正根 `README.md` 中 `GFramework.Godot.SourceGenerators` 的模块描述,使其与当前生成器职责边界一致 - - 扩充 `docs/zh-CN/source-generators/index.md` 的 Godot 选包说明,把 Scene / UI 包装与导出集合注册辅助纳入入口摘要 - - 重写 `docs/zh-CN/godot/storage.md`,补齐 frontmatter、`GodotFileStorage` 的路径语义、repository 分工与 `GodotYamlConfigLoader` 分流边界 - - 重写 `docs/zh-CN/godot/setting.md`,改回当前 `ISettingsModel` / `RegisterApplicator(...)` 口径,并补上 `LocalizationMap` fallback 与 `CoreGrid` 注册示例 - - `2026-04-23` 再次通过 `$gframework-boot` 恢复当前 worktree 后,按 `Godot` docs surface 执行 validation-only 巡检,确认 `GFramework.Godot/README.md`、`docs/zh-CN/godot/index.md`、`storage.md`、`setting.md`、`docs/zh-CN/source-generators/index.md`、`docs/zh-CN/api-reference/index.md` 与 `docs/zh-CN/tutorials/godot-integration.md` 仍保持一致的 owner / adoption path 叙述,没有出现自 `RP-014` 之后的新漂移 - -## Inventory(第一版) - -| 模块族 | 当前状态 | 当前证据 | 下一动作 | -| --- | --- | --- | --- | -| `Core` / `Core.Abstractions` | `README / landing / 类型族级 XML inventory 已收口,成员级审计待补齐` | 根 README、模块 README、`docs/zh-CN/core/**`、`docs/zh-CN/abstractions/core-abstractions.md` 已对齐当前目录与类型族基线 | 进入巡检;如有新 API 变更,再追加成员级 XML 审计 | -| `Cqrs` / `Cqrs.Abstractions` / `Cqrs.SourceGenerators` | `README / landing / generator topic / 类型族级 XML inventory 已收口,成员级审计待补齐` | `GFramework.Cqrs/README.md`、`GFramework.Cqrs.Abstractions/README.md`、`GFramework.Cqrs.SourceGenerators/README.md`、`docs/zh-CN/core/cqrs.md`、`docs/zh-CN/source-generators/cqrs-handler-registry-generator.md`、`docs/zh-CN/api-reference/index.md` 已对齐当前源码与测试 | 转入巡检;下一波切到 `Game` family 的 XML / 教程链路审计 | -| `Game` / `Game.Abstractions` / `Game.SourceGenerators` | `README / landing / abstractions / persistence topic pages / 类型族级 XML inventory 已收口,成员级审计待补齐` | `GFramework.Game/README.md`、`GFramework.Game.Abstractions/README.md`、`GFramework.Game.SourceGenerators/README.md`、`docs/zh-CN/game/index.md`、`docs/zh-CN/abstractions/game-abstractions.md`、`docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md` 已对齐当前源码、README 与 `PersistenceTests` | 转入巡检;优先观察后续分支是否再次把 `Game` persistence docs 写回旧 API 手册口径 | -| `Godot` / `Godot.SourceGenerators` | `README / 生成器 README / landing / topic / tutorial / API reference 入口已重新对齐,成员级 XML 审计不在本轮范围` | `GFramework.Godot/README.md`、`GFramework.Godot.SourceGenerators/README.md`、`docs/zh-CN/godot/index.md`、`architecture.md`、`scene.md`、`ui.md`、`storage.md`、`setting.md`、`signal.md`、`extensions.md`、`logging.md`、`docs/zh-CN/tutorials/godot-integration.md` | 进入巡检周期,优先观察后续分支是否再次把 README / API 入口写回过时边界 | -| `Ecs.Arch` / `Ecs.Arch.Abstractions` | `README / landing / abstractions / 类型族级 XML inventory 已收口,成员级审计待补齐` | `GFramework.Ecs.Arch/README.md`、`GFramework.Ecs.Arch.Abstractions/README.md`、`docs/zh-CN/ecs/**`、`docs/zh-CN/abstractions/ecs-arch-abstractions.md` 已对齐当前源码与测试 | 转入巡检;后续仅在运行时公共 API 变动时补成员级 XML 细审 | -| `SourceGenerators.Common` 与 `*.SourceGenerators.Abstractions` | `已判定为内部支撑` | `*.csproj` 明确 `IsPackable=false` | 由所属模块 README 与生成器栏目说明 owner,不建独立采用页 | - -## 缺口分级 - -- `P0` - - 错误采用路径、错误包关系、错误 API / 生命周期语义 - - 站点导航死链、空 landing page、明显错误的模块 owner -- `P1` - - 直接消费模块缺 README 或缺对应 docs 入口 - - README / docs 示例与源码实现不一致 - - 教程仍引用已经过时的默认接线方式 -- `P2` - - 结构重复、交叉链接不足、API 参考链路过薄 - - 站内页面存在事实正确但组织方式不利于定位的内容 +- `Core`、`Ecs.Arch`、`Cqrs`、`Game`、`Godot` 五个模块族当前都已有 README / landing / topic / API 参考层级的已验证入口。 +- `Game` persistence docs surface 当前以 `docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md` + 作为最小巡检集合;若后续 README、runtime public API 或 `PersistenceTests` 变动,应优先复核这一组页面。 +- `Godot` runtime 与 generator 入口当前以 `GFramework.Godot/README.md`、 + `GFramework.Godot.SourceGenerators/README.md`、`docs/zh-CN/godot/index.md`、 + `docs/zh-CN/source-generators/index.md`、`docs/zh-CN/tutorials/godot-integration.md` 维持统一 owner / adoption path。 +- `2026-04-23` 基于 PR `#272` 的 review follow-up 已完成: + - 为 `docs/zh-CN/game/data.md` 补充 `UnifiedSettingsDataRepository` 的统一文件布局示例 + - 为 `GFramework.Godot.SourceGenerators/README.md` 补充手写 `_Ready()` / `_ExitTree()` 时显式调用生成方法的最小样例 + - 将过长的 active tracking / trace 瘦身,并把历史摘要迁回 `archive/` +- 当前唯一剩余的 PR 信号是 GitHub `Title check` 对 PR 标题过泛的 inconclusive 提示;这属于托管侧元数据,不是本地文件缺陷。 ## 当前风险 -- 当前 `Core` / `Core.Abstractions` 只完成了类型族级 XML 基线,不等于成员级契约全审计 - - 缓解措施:后续只在共享抽象或高风险生命周期接口发生改动时补成员级细审,不在本轮扩张范围 -- `Godot` family 的详细治理历史仍保留在 archive,active topic 只回填了最小恢复摘要 - - 缓解措施:active topic 记录核心页面集、owner、运行时边界与 archive 指针;只有在需要阶段级历史时再读取归档材料 -- 新功能分支若修改 README / docs / 公共 API 却不挂文档 topic,仍可能回漂 - - 缓解措施:将本 topic 作为长期 active topic 保留,并在后续巡检中记录回漂来源 -- VitePress 页面不能直接链接到 `docs/` 目录之外的模块 `README.md` - - 缓解措施:站内页面用模块路径文本或站内 API 入口表达,仓库级 README 仍保留仓库文件链接 -- `GFramework.Cqrs` 在当前 WSL / dotnet 环境下,本地 build 仍会读取失效的 fallback package folder 配置,导致无法完成该项目的标准编译验证 - - 缓解措施:本轮先以 `GFramework.Cqrs.SourceGenerators` 编译通过和 docs site build 通过作为有效验证,并在后续环境治理或构建脚本清理时单独处理 `RestoreFallbackFolders` / 资产文件问题 -- 当前 WSL 会话中 `git.exe` 虽然可解析,但不能执行 - - 缓解措施:把显式 `--git-dir` / `--work-tree` 绑定上升为仓库默认回退策略,并仅把 `git.exe` 保留为可执行时的次级 fallback +- 当前 `Core` / `Core.Abstractions`、`Ecs.Arch`、`Cqrs`、`Game` 的 XML 治理仍以“类型声明级基线”为主,不等于成员级契约全审计。 +- `GFramework.Cqrs` 在当前 WSL / dotnet 环境下仍会读取失效的 fallback package folder,并在标准 build 中触发 + `MSB4276` / `MSB4018`;这是已知环境阻塞,不属于本轮文档回归。 +- 当前 WSL 会话里 `git.exe` 可解析但不能执行,应继续使用显式 `--git-dir` / `--work-tree` 绑定作为默认 Git 策略。 -## 验证说明 +## 归档指针 -- 详细验证历史已归档到 `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` -- 最新 PR review 结论: - - `2026-04-23` `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json` - - 结果:通过;PR `#271` 已关闭,latest reviewed commit 为 `df91d3706ba9db71737e803ef2f40f4841ecbbf1`,当前 `2` 条 open thread 都是已被本地文件满足的陈旧信号,不再构成本轮阻塞 -- 最新构建结论: - - `2026-04-23` `cd docs && bun run build` - - 结果:通过;在重写 `docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md` 后再次验证通过,仅保留既有 VitePress 大 chunk warning,无构建失败 -- 最新 `Game` persistence docs wave 结论: - - `2026-04-23` 基于 `GFramework.Game` 源码、`GFramework.Game/README.md`、`JsonSerializerTests`、`SettingsModelTests` 与 `PersistenceTests` - - 结果:通过;`docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md` 当前已回到同一套 `Game` runtime 持久化采用路径,不再沿用旧版 API 手册叙述 -- 最新稳定性巡检结论: - - `2026-04-23` 重新执行 `Godot` docs surface 巡检 - - 结果:通过;根入口链路保持稳定,并额外发现 `docs/zh-CN/godot/storage.md`、`setting.md` 两页存在旧版叙述残留,当前已按源码口径完成最小修复 -- 最新 validation-only 巡检结论: - - `2026-04-23` 通过 `$gframework-boot` 恢复后重新执行 `Godot` docs surface 巡检 - - 结果:通过;`README / landing / topic / tutorial / API reference` 当前仍保持同一套 `Godot` owner / adoption path 叙述,本轮无需新增文档补丁 -- 最新恢复治理结论: - - `2026-04-23` 重新读取 `ai-plan/public/archive/documentation-governance-and-refresh/**` - - 结果:通过;确认 `Godot` family 适合把最小恢复摘要迁回 active topic,但不需要把整段归档历史重新放回默认 `boot` 路径 -- 已完成的针对性校验: - - `2026-04-23` `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过 - - `2026-04-23` `python3 -B -c "from pathlib import Path; compile(Path('.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py').read_text(encoding='utf-8'), '.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py', 'exec')"`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/source-generators/cqrs-handler-registry-generator.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/ecs/index.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/abstractions/ecs-arch-abstractions.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot/README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot/README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot.SourceGenerators/README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot.SourceGenerators/README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/api-reference/index.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh README.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/source-generators/index.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/index.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/tutorials/godot-integration.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/storage.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/setting.md`:通过 - - `2026-04-23` `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过(boot 后复核) - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/storage.md`:通过(boot 后复核) - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/setting.md`:通过(boot 后复核) - - `2026-04-23` `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Game`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/data.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/storage.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/serialization.md`:通过 - - `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/setting.md`:通过 - - `2026-04-23` `cd docs && bun run build`:通过(本轮 `Game` persistence docs wave 复核;仅保留既有 VitePress 大 chunk warning) +- 详细验证历史(`RP-001` 到 `RP-007`): + `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` +- 阶段状态归档(`RP-001` 到 `RP-016`): + `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md` +- 时间线归档(`RP-001` 到 `RP-016`): + `ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md` + +## 最新验证 + +- `2026-04-23` `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json` + - 结果:通过;PR `#272` 处于 `OPEN`,latest head commit 没有未解决 open thread,当前只剩 `Title check` 的 PR 标题提示。 +- `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/data.md` + - 结果:通过。 +- `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot.SourceGenerators/README.md` + - 结果:通过。 +- `2026-04-23` `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot.SourceGenerators/README.md` + - 结果:通过。 +- `2026-04-23` `cd docs && bun run build` + - 结果:通过;仅保留既有 VitePress 大 chunk warning,无构建失败。 ## 下一步 -1. 若后续分支继续调整 `GFramework.Game` 的 persistence runtime、README 或公共 API,优先复核 `docs/zh-CN/game/data.md`、`storage.md`、`serialization.md`、`setting.md` 与 landing page 是否仍保持同一套职责边界 -2. 当 `Godot` / `Game` family 再次出现交叉入口漂移时,沿用当前 README -> landing -> topic page -> API reference 的最小修复顺序 -3. 仅在需要阶段级细节时再读取 `documentation-governance-and-refresh` archive,而不是把 archive 重新当作默认 `boot` 入口 +1. 如果 PR `#272` 的 `Title check` 仍需要消除,到 GitHub 上把标题改成更具体的文档治理描述。 +2. 若后续分支继续调整 `Game` persistence runtime、README 或公共 API,优先复核 `docs/zh-CN/game/data.md`、 + `storage.md`、`serialization.md`、`setting.md` 与 landing page 是否仍保持同一套职责边界。 +3. 若后续分支继续调整 `Godot` generator 接法,优先复核 `GFramework.Godot.SourceGenerators/README.md`、 + `docs/zh-CN/tutorials/godot-integration.md` 与相关专题页是否仍保持一致。 diff --git a/ai-plan/public/documentation-full-coverage-governance/traces/documentation-full-coverage-governance-trace.md b/ai-plan/public/documentation-full-coverage-governance/traces/documentation-full-coverage-governance-trace.md index 964b7ede..5bae58e4 100644 --- a/ai-plan/public/documentation-full-coverage-governance/traces/documentation-full-coverage-governance-trace.md +++ b/ai-plan/public/documentation-full-coverage-governance/traces/documentation-full-coverage-governance-trace.md @@ -1,642 +1,52 @@ # Documentation Full Coverage Governance Trace -## 2026-04-22 +## 2026-04-23 -### 当前恢复点:RP-001 +### 当前恢复点:RP-017 -- 按长期治理计划新建 active topic `documentation-full-coverage-governance` -- 在 `ai-plan/public/README.md` 中将当前分支 `docs/sdk-update-documentation` 映射到该 topic -- 复核已知缺口模块的 `*.csproj` 后确认: - - `GFramework.Ecs.Arch.Abstractions` 是可打包消费模块,需要独立 README - - `GFramework.Core.SourceGenerators.Abstractions`、`GFramework.Godot.SourceGenerators.Abstractions`、 - `GFramework.SourceGenerators.Common` 都是 `IsPackable=false` 的内部支撑模块 -- 基于该结论,本轮没有为内部支撑模块新增独立 README,而是在根 README 与 abstractions / API 入口中明确其 owner +- 使用 `$gframework-pr-review` 复核当前分支 PR `#272`。 +- 本地核对后确认三条 review follow-up 仍然成立: + - active tracking / trace 过长,已经偏离“恢复入口”用途 + - `docs/zh-CN/game/data.md` 缺少 `UnifiedSettingsDataRepository` 的统一文件布局示例 + - `GFramework.Godot.SourceGenerators/README.md` 缺少手写 `_Ready()` / `_ExitTree()` 时显式调用生成方法的最小样例 +- 本轮执行的修复: + - 为 `docs/zh-CN/game/data.md` 补充统一设置文件目录树示例 + - 为 `GFramework.Godot.SourceGenerators/README.md` 补充最小生命周期代码片段 + - 将 active tracking / trace 瘦身,并把 `RP-001` 到 `RP-016` 的阶段细节迁入 `archive/` -### 当前决策 +### 当前决策(RP-017) -- 新主题的完成条件采用长期治理口径:`P0` 清零、无 README 缺失、无导航死链,并完成连续两轮稳定巡检 -- 本轮先做治理基础设施与 inventory,不把整个长期计划伪装成单轮完成 -- `api-reference` 页面改为“模块 -> README / docs / XML / tutorial”的阅读链路入口,避免继续维护失真的伪签名列表 -- `Ecs.Arch` family 被列为高优先 backlog:抽象层入口已补齐,但 runtime docs 仍需按源码重写 -- `Core` / `Core.Abstractions` 波次先收口 README、landing page 和 abstractions 页的目录映射,再补显式 XML 覆盖 inventory -- VitePress 站内页面不直接链接仓库根模块 `README.md`;站内仅保留可构建的 docs 链接,模块 README 以文本路径或仓库 README 承接 +- active recovery artifact 只保留当前恢复点、当前事实、风险、验证结果与下一步;旧阶段细节统一转移到 archive。 +- `Game` persistence docs surface 继续以 `data.md`、`storage.md`、`serialization.md`、`setting.md` 作为最小巡检集合。 +- `GFramework.Godot.SourceGenerators/README.md` 的生命周期接法说明应直接复用与 tutorial 一致的最小样例,避免 README 与教程再次分叉。 -### 当前恢复点:RP-002 - -- 完成 `Core` / `Core.Abstractions` 的类型族级 XML inventory: - - `GFramework.Core/README.md` - - `GFramework.Core.Abstractions/README.md` - - `docs/zh-CN/core/index.md` - - `docs/zh-CN/abstractions/core-abstractions.md` -- 通过顶层目录轻量盘点确认: - - `GFramework.Core` 当前各目录族的公开 / 内部类型声明都已带 XML 注释 - - `GFramework.Core.Abstractions` 当前各契约目录族的公开 / 内部类型声明都已带 XML 注释 -- 这轮 inventory 明确限定为“类型声明级基线”,不把结果表述成成员级 XML 合规审计 - -### 当前决策(RP-002) - -- XML inventory 同时落在模块 README 和站内 landing page: - - README 提供仓库侧入口,方便从包目录直接恢复上下文 - - docs landing 提供更细的类型族 / 代表类型 / 阅读重点表格,方便站内导航 -- `Core` 波次在补齐基线后转入巡检,不继续在本轮展开成员级 ```` / ```` 审计 -- 下一恢复点切换到 `Ecs` 波次,优先处理仍明显失真的 runtime docs - -### 当前验证 - -- 文档校验: - - `validate-all.sh docs/zh-CN/abstractions/index.md`:通过 - - `validate-all.sh docs/zh-CN/abstractions/ecs-arch-abstractions.md`:通过 - - `validate-all.sh docs/zh-CN/api-reference/index.md`:通过 - - `validate-all.sh docs/zh-CN/core/index.md`:通过 - - `validate-all.sh docs/zh-CN/abstractions/core-abstractions.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过 - - `DOTNET_CLI_HOME=/tmp/dotnet-home dotnet build GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj -c Release -p:RestoreFallbackFolders=`:通过,`0 Warning(s) / 0 Error(s)` - - `dotnet build GFramework.Ecs.Arch.Abstractions/GFramework.Ecs.Arch.Abstractions.csproj -c Release -p:RestoreFallbackFolders=`:通过,`0 Warning(s) / 0 Error(s)` - -### 当前验证(RP-002) - -- 文档校验: - - `validate-all.sh docs/zh-CN/core/index.md`:通过 - - `validate-all.sh docs/zh-CN/abstractions/core-abstractions.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - -### 当前恢复点:RP-003 - -- 完成 `Ecs.Arch` 波次的运行时文档刷新: - - `docs/zh-CN/ecs/index.md` - - `docs/zh-CN/ecs/arch.md` - - `GFramework.Ecs.Arch/README.md` -- 为 `Ecs.Arch.Abstractions` 补齐与运行时页同粒度的 XML inventory: - - `GFramework.Ecs.Arch.Abstractions/README.md` - - `docs/zh-CN/abstractions/ecs-arch-abstractions.md` -- 明确记录一个关键采用事实: - - `UseArch(...)` 必须早于 `Initialize()` 调用 - - 该结论以 `ArchExtensions` 的模块注册方式和 `ExplicitRegistrationTests` 为证据 -- 将 `Ecs.Arch` family 从“入口存在但失真”推进到“README / landing / abstractions / XML inventory 已对齐源码与测试” - -### 当前决策(RP-003) - -- `Ecs` 波次继续采用与 `Core` 相同的治理粒度: - - 模块 README 承担仓库入口 - - `docs/zh-CN/ecs/index.md` 承担模块族 landing - - `docs/zh-CN/ecs/arch.md` 承担运行时默认实现专题页 - - `docs/zh-CN/abstractions/ecs-arch-abstractions.md` 承担契约边界专题页 -- `EnableStatistics` 当前仅保留在公开配置面上;文档不再把它写成已验证的运行时行为 -- 下一恢复点切换到 `Cqrs` 波次,优先解决入口分散和 API / XML 阅读链路不统一的问题 - -### 当前验证(RP-003) - -- 文档校验: - - `validate-all.sh docs/zh-CN/ecs/index.md`:通过 - - `validate-all.sh docs/zh-CN/ecs/arch.md`:通过 - - `validate-all.sh docs/zh-CN/abstractions/ecs-arch-abstractions.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 在 `Cqrs` 波次核对模块 README、`docs/zh-CN/core/cqrs.md` 与 `docs/zh-CN/source-generators/**` 的真实 owner -2. 决定 `Cqrs` family 是补 dedicated landing 还是拆分现有入口页 - -### 当前恢复点:RP-004 - -- 完成 `Cqrs` 波次的模块族入口刷新: - - 重写 `docs/zh-CN/core/cqrs.md` - - 新建 `docs/zh-CN/source-generators/cqrs-handler-registry-generator.md` - - 更新 `docs/zh-CN/source-generators/index.md` - - 更新 `docs/zh-CN/api-reference/index.md` - - 更新 `docs/.vitepress/config.mts` -- 将 `Cqrs` family 从“README 已存在但 generator 入口分散”推进到“runtime / abstractions / source generator 都有明确站内入口” -- 为 `GFramework.Cqrs/Internal/CqrsHandlerRegistrar.cs` 与 - `GFramework.Cqrs.SourceGenerators/Cqrs/CqrsHandlerRegistryGenerator.cs` 中缺失的内部类型补齐 XML 注释 -- 基于轻量扫描确认: - - `GFramework.Cqrs.Abstractions/Cqrs/` 当前类型声明级 XML 覆盖为 `20/20` - - `GFramework.Cqrs` 根入口与 `Internal/` 已补到 `19/19` - - `GFramework.Cqrs.SourceGenerators/Cqrs/` 当前类型声明级 XML 覆盖为 `3/3` - -### 当前决策(RP-004) - -- `docs/zh-CN/core/cqrs.md` 继续保留在 `Core` 栏目,但其角色调整为 `Cqrs` family landing,而不再只是 runtime 简介页 -- `Cqrs.SourceGenerators` 不单独新建一级导航栏目,而是在 `source-generators` 栏目内补一个专用专题页,保持站点 taxonomy 稳定 -- generator 入口以“专题页 + API reference 链接 + sidebar”三点联动,而不是只在 `source-generators/index.md` 留一个段落链接 -- XML inventory 仍维持“类型声明级基线”口径,不在本轮扩展成成员级 `param/returns/exception` 细审 - -### 当前验证(RP-004) - -- 文档校验: - - `validate-all.sh docs/zh-CN/core/cqrs.md`:通过 - - `validate-all.sh docs/zh-CN/source-generators/cqrs-handler-registry-generator.md`:通过 -- 轻量 XML inventory: - - `GFramework.Cqrs/Internal/`:`14/14` - - `GFramework.Cqrs.Abstractions/Cqrs/`:`20/20` - - `GFramework.Cqrs.SourceGenerators/Cqrs/`:`3/3` -- 构建校验: - - `dotnet build GFramework.Cqrs.SourceGenerators/GFramework.Cqrs.SourceGenerators.csproj -c Release -p:RestoreFallbackFolders=`:通过 - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - - `dotnet build GFramework.Cqrs/GFramework.Cqrs.csproj -c Release`:失败;当前 WSL / dotnet 环境仍引用失效的 Windows fallback package folder,并在多目标 inner build 阶段触发 `MSB4276` / `MSB4018` - -### 下一步 - -1. 切换到 `Game` family 波次,按 `Core` / `Ecs` / `Cqrs` 已验证模板继续补 XML inventory 与教程链路 -2. 把 `GFramework.Cqrs` 的本地构建阻塞留给后续环境治理或构建脚本清理,不在本 topic 内扩张为环境修复任务 - -### 当前恢复点:RP-005 - -- 完成 `Game` 波次的模块族入口刷新: - - 更新 `GFramework.Game/README.md` - - 更新 `GFramework.Game.Abstractions/README.md` - - 更新 `GFramework.Game.SourceGenerators/README.md` - - 更新 `docs/zh-CN/game/index.md` - - 重写 `docs/zh-CN/abstractions/game-abstractions.md` -- 将 `Game` family 从“README / 页面存在但缺少可审计 XML 入口,且 abstractions 页失真”推进到“runtime / abstractions / source generator 都有声明级 XML inventory 与真实采用边界” -- 基于轻量扫描确认: - - `GFramework.Game` 当前类型声明级 XML 覆盖为 `56/56` - - `GFramework.Game.Abstractions` 当前类型声明级 XML 覆盖为 `80/80` - - `GFramework.Game.SourceGenerators` 当前类型声明级 XML 覆盖为 `2/2` - -### 当前决策(RP-005) - -- `docs/zh-CN/abstractions/game-abstractions.md` 不再维护虚构接口摘录,而是与源码中的 `Config` / `Data` / `Setting` / `Scene` / `UI` / `Routing` 契约分组保持一致 -- `Game.SourceGenerators` 继续以 `README + docs/zh-CN/game/config-system.md + docs/zh-CN/source-generators/index.md` 组成入口,不额外新增只为凑数量的专题页 -- `docs/zh-CN/game/index.md` 补 frontmatter,并承担 `Game` family 的 XML 基线入口;更细的类型族说明继续留在模块 README 与 abstractions 页 - -### 当前验证(RP-005) - -- 文档校验: - - `validate-all.sh docs/zh-CN/abstractions/game-abstractions.md`:通过 - - `validate-all.sh docs/zh-CN/game/index.md`:通过 -- 轻量 XML inventory: - - `GFramework.Game`:`56/56` - - `GFramework.Game.Abstractions`:`80/80` - - `GFramework.Game.SourceGenerators`:`2/2` -- 构建校验: - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 进入 `Game` family 巡检,优先检查 `config-system.md`、`scene.md`、`ui.md` 与 `source-generators/index.md` 的交叉引用是否回漂 -2. 评估是否需要把 `Godot` family 的关键 XML inventory 摘要迁回 active topic,减少对 archive 的依赖 - -### 当前恢复点:RP-006 - -- 更新 `AGENTS.md` 的 WSL Git 规则: - - 将显式 `git --git-dir=<...> --work-tree=<...>` 绑定提升为高于 `git.exe` 的默认优先级 - - 明确 plain Linux `git` 命中 worktree 路径翻译错误时,应先切到显式绑定而不是直接改用 `git.exe` - - 明确 `git.exe` 只有在当前会话可执行时才作为次级 fallback -- 记录本次恢复任务的环境偏差: - - `git.exe` 在当前 WSL 会话中可解析,但执行会触发 `Exec format error` - - plain `git` 会把 worktree 元数据路径翻译错并报“not a git repository” - - 显式 `--git-dir` / `--work-tree` 绑定是本次已验证可用的 Git 操作方式 - -### 当前决策(RP-006) - -- 把 Git 回退顺序写进 `AGENTS.md`,而不是只留在一次性的聊天上下文里 -- 不额外扩张 `gframework-boot` skill,因为它本身不内嵌 Git 选择逻辑,继续由 `AGENTS.md` 作为唯一准则 -- 继续把 `git.exe` 保留为 fallback,而不是完全删除,避免在可执行的 WSL 会话里丢掉可用路径 - -### 当前验证(RP-006) - -- 构建校验: - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 继续 `Game` family 巡检,优先检查 `config-system.md`、`scene.md`、`ui.md` 与 `source-generators/index.md` 的交叉引用是否回漂 -2. 评估是否需要把 `Godot` family 的关键 XML inventory 摘要迁回 active topic,减少对 archive 的依赖 - -### 当前恢复点:RP-007 - -- 完成 `Game` family 巡检: - - 复核 `docs/zh-CN/game/config-system.md` - - 复核 `docs/zh-CN/game/scene.md` - - 复核 `docs/zh-CN/game/ui.md` - - 复核 `docs/zh-CN/source-generators/index.md` -- 对照 `GFramework.Game`、`GFramework.Game.Abstractions`、`GFramework.Game.SourceGenerators` README 与相关源码 / 测试后,未发现需要立刻修正的采用语义回漂 -- 重点确认的真实语义包括: - - `GameConfigBootstrap` / `RegisterAllGeneratedConfigTables(...)` / `GFrameworkConfigSchemaDirectory` 的配置入口仍与文档示例一致 - - `SceneRouterBase` 仍通过 `SemaphoreSlim` 串行化切换,并拒绝重复 `sceneKey` 入栈 - - `UiRouterBase` 仍将 `Page` 层与 `Overlay` / `Modal` / `Toast` / `Topmost` 分为两套入口,且 `Show(..., UiLayer.Page)` 会直接拒绝 - -### 当前决策(RP-007) - -- 本轮不为“巡检通过”硬造文档改动,先把结论写回 active topic,保持恢复点准确 -- `Game` family 暂时转入稳定巡检,不在没有源码变化的情况下重复改写 landing page -- 默认下一步切到 `Godot` family 摘要是否回迁,减少长期治理对 archive topic 的依赖 - -### 当前验证(RP-007) - -- 构建校验: - - `cd docs && bun run build`:通过;仅保留 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 评估是否需要把 `Godot` family 的关键 XML inventory 摘要迁回 active topic -2. 若不需要迁回,则继续抽查 README / landing page / API reference 之间的 cross-link 是否出现新的漂移 - -### 当前恢复点:RP-008 - -- 使用 `$gframework-pr-review` 抓取当前分支 PR `#271` 后,确认 latest head review threads 仍有 `4` 条 open: - - `docs/zh-CN/source-generators/cqrs-handler-registry-generator.md` 的 marker 类型约定说明缺口 - - `docs/zh-CN/ecs/index.md` 的边界说明语序问题 - - `docs/zh-CN/abstractions/ecs-arch-abstractions.md` 误放的 source-generator 内部模块提醒 - - `ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md` 的验证历史过长,以及 - `ai-plan/public/archive/documentation-governance-and-refresh/traces/documentation-governance-and-refresh-trace.md` 缺少显式结果态 -- 在当前 WSL 会话里,`gframework-pr-review` 脚本先命中了 `git.exe` 的 `Exec format error` -- 已将 `.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py` 改为优先使用 Linux `git` 的显式 - `--git-dir` / `--work-tree` 绑定,并仅在无法建立该绑定时回退到旧的可执行解析逻辑 -- 已同步更新 `.agents/skills/gframework-pr-review/SKILL.md`,使其 Git 策略与命令示例都与当前仓库状态一致 -- 已把 `DOCUMENTATION-FULL-COVERAGE-GOV-RP-001` 到 `RP-007` 的详细验证历史迁入 - `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` - -### 当前决策(RP-008) - -- 继续把 latest-head unresolved threads 作为主信号,只修仍在本地成立的评论,不为已失效的历史 summary 做无意义回写 -- active tracking 只保留最新验证摘要与恢复点;详细验证历史留在 topic 自己的 archive,而不是继续堆在默认 boot 路径 -- `gframework-pr-review` 的脚本行为、技能文案与 `AGENTS.md` 必须保持同一套 WSL Git 策略,避免再次出现“文档说法正确但工具实现仍跑偏”的情况 - -### 当前验证(RP-008) +### 当前验证(RP-017) - PR review 抓取: - - `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json`:通过 -- 脚本语法校验: - - `python3 -B -c "from pathlib import Path; compile(Path('.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py').read_text(encoding='utf-8'), '.agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py', 'exec')"`:通过 + - `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json` + - 结果:通过;PR `#272` 处于 `OPEN`,latest head commit 没有未解决 open thread,当前只剩 `Title check` 的 PR 标题提示。 - 文档校验: - - `validate-all.sh docs/zh-CN/source-generators/cqrs-handler-registry-generator.md`:通过 - - `validate-all.sh docs/zh-CN/ecs/index.md`:通过 - - `validate-all.sh docs/zh-CN/abstractions/ecs-arch-abstractions.md`:通过 + - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/data.md` + - 结果:通过。 +- README 校验: + - `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot.SourceGenerators/README.md` + - 结果:通过。 + - `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot.SourceGenerators/README.md` + - 结果:通过。 - 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 + - `cd docs && bun run build` + - 结果:通过;仅保留既有 VitePress 大 chunk warning,无构建失败。 + +### 归档指针 + +- `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-validation-history-through-rp-007.md` +- `ai-plan/public/documentation-full-coverage-governance/archive/todos/documentation-full-coverage-governance-status-history-through-rp-016.md` +- `ai-plan/public/documentation-full-coverage-governance/archive/traces/documentation-full-coverage-governance-trace-history-through-rp-016.md` ### 下一步 -1. 提交本轮 PR review follow-up -2. 推送当前分支后重新执行 `$gframework-pr-review`,观察 PR #271 的 open threads 是否收敛 - -### 当前恢复点:RP-009 - -- 按 `boot` 恢复 `documentation-full-coverage-governance` 主题 -- 重新读取 `AGENTS.md`、`.ai/environment/tools.ai.yaml`、`ai-plan/public/README.md` 与当前 topic 的 active todo / trace 后,确认当前 worktree `docs/sdk-update-documentation` 仍映射到本 topic -- 当前 worktree Git 状态干净,且不存在 `ai-plan/private/` 的 worktree 私有恢复材料 -- 重新执行 `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json` -- 抓取结果显示 PR `#271` 已关闭,latest reviewed commit 仍为 `df91d3706ba9db71737e803ef2f40f4841ecbbf1` -- 当前 latest commit 仍显示 `2` 条 open thread,但两条都落在 `ai-plan` 文件上,且本地文件已经满足评论要求: - - `ai-plan/public/archive/documentation-governance-and-refresh/traces/documentation-governance-and-refresh-trace.md` 已包含显式 `结果:通过` - - `ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md` 已将 RP-001 至 RP-007 的详细验证明细迁入 archive -- 因此本轮将 PR #271 follow-up 视为已完成,后续不再为 closed PR 上未自动收敛的陈旧 thread 状态追加仓库改动 - -### 当前决策(RP-009) - -- `closed PR + stale open thread` 不再作为需要继续修改仓库内容的信号;除非后续 review 抓取显示新的 latest-head finding -- `documentation-full-coverage-governance` 的默认下一步切回治理 backlog,优先判断是否把 `Godot` family 的关键 XML inventory 摘要迁回 active topic -- 本轮 `boot` 不引入 subagent;关键恢复信号都能通过本地读取和单次 PR review 抓取直接确认 - -### 当前验证(RP-009) - -- PR review 抓取: - - `python3 .agents/skills/gframework-pr-review/scripts/fetch_current_pr_review.py --json-output /tmp/gframework-current-pr-review.json`:通过;PR `#271` 已关闭,latest reviewed commit 为 `df91d3706ba9db71737e803ef2f40f4841ecbbf1`,当前 `2` 条 open thread 都是已被本地文件满足的陈旧信号 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 评估是否需要把 `Godot` family 的关键 XML inventory 摘要迁回 active topic -2. 若不迁回,则在 active todo / trace 保留足够的 archive 指针,并继续抽查 README / landing page / API reference 的 cross-link 是否出现新的漂移 - -### 当前恢复点:RP-010 - -- 按 `boot` 恢复当前 topic 后,重新读取: - - `AGENTS.md` - - `.ai/environment/tools.ai.yaml` - - `ai-plan/public/README.md` - - `ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md` - - `ai-plan/public/documentation-full-coverage-governance/traces/documentation-full-coverage-governance-trace.md` -- 确认当前任务状态属于 `resume`: - - 当前分支仍为 `docs/sdk-update-documentation` - - `ai-plan/public/README.md` 继续把本 worktree 映射到 `documentation-full-coverage-governance` - - 当前 worktree 没有 `ai-plan/private/` 私有恢复材料 -- 为判断 `Godot` family 是否需要回填恢复摘要,补读归档主题: - - `ai-plan/public/archive/documentation-governance-and-refresh/todos/documentation-governance-and-refresh-tracking.md` - - `ai-plan/public/archive/documentation-governance-and-refresh/traces/documentation-governance-and-refresh-trace.md` - - `ai-plan/public/archive/documentation-governance-and-refresh/archive/todos/documentation-governance-and-refresh-history-through-2026-04-22.md` -- 归档材料表明,`Godot` family 的可恢复关键信号已经稳定,且足以压缩成 active topic 里的最小摘要: - - 核心页面集为 `docs/zh-CN/godot/index.md`、`architecture.md`、`scene.md`、`ui.md`、`signal.md`、`extensions.md`、`logging.md` 与 `docs/zh-CN/tutorials/godot-integration.md` - - `GFramework.Godot.SourceGenerators` 继续作为 `[GetNode]`、`[BindNodeSignal]`、`AutoLoads`、`InputActions` 的 owner - - `GFramework.Godot.SourceGenerators.Abstractions` 继续按 `IsPackable=false` 的内部支撑模块处理 - - `GodotSceneFactory` 在 provider 缺失时回退到 `SceneBehaviorFactory`,而 `GodotUiFactory` 仍要求 `IUiPageBehaviorProvider` -- 因此本轮决定: - - 不把整段 `documentation-governance-and-refresh` 历史重新迁回 active 路径 - - 只把足够让未来 `boot` 快速恢复的 `Godot` family 摘要写回 active todo - - 继续把阶段级细节留在 archive,保持默认恢复入口轻量 - -### 当前决策(RP-010) - -- `Godot` family 的“最小恢复摘要”应当留在 active topic,因为它已经属于长期治理 backlog 的默认上下文,而不仅仅是已完成项目的历史注脚 -- active topic 只保留对后续判断有用的事实: - - 页面范围 - - generator owner - - Scene / UI 真实运行时边界 - - archive 指针 -- `documentation-governance-and-refresh` archive 继续作为阶段级历史证据,不重新回到 `boot` 默认扫描路径 -- 下一步从“是否回填摘要”切换回“继续巡检 cross-link 漂移”,避免治理入口停留在已经完成的元问题上 - -### 当前验证(RP-010) - -- 归档恢复检查: - - `sed -n '1,260p' ai-plan/public/archive/documentation-governance-and-refresh/todos/documentation-governance-and-refresh-tracking.md`:通过 - - `sed -n '1,260p' ai-plan/public/archive/documentation-governance-and-refresh/traces/documentation-governance-and-refresh-trace.md`:通过 - - `sed -n '1,240p' ai-plan/public/archive/documentation-governance-and-refresh/archive/todos/documentation-governance-and-refresh-history-through-2026-04-22.md`:通过 - -### 下一步 - -1. 抽查 `Godot` 与 `Game` 相关 README / landing page / API reference 的 cross-link 是否出现新的漂移 -2. 当后续分支修改相关 README / docs / 公共 API 时,回到对应 module family 追加 targeted 巡检与验证 - -### 当前恢复点:RP-011 - -- 继续按 `boot` 恢复后的默认下一步执行 `Godot` / `Game` cross-link 巡检,并额外补读: - - `GFramework.Godot/README.md` - - `GFramework.Godot.SourceGenerators/README.md` - - `docs/zh-CN/api-reference/index.md` - - `docs/zh-CN/godot/index.md` - - `docs/zh-CN/source-generators/index.md` -- 结合 `GFramework.Godot.csproj`、`GFramework.Godot.SourceGenerators.csproj`、相关测试与 `scan_module_evidence.py` 输出,确认新的漂移点集中在入口 README: - - `GFramework.Godot/README.md` 仍是旧版简略说明,没有记录当前包关系、子系统地图、最小接入路径与 `docs/zh-CN` 入口 - - `GFramework.Godot.SourceGenerators/README.md` 没有覆盖 `AutoScene`、`AutoUiPage`、`AutoRegisterExportedCollections` 这些当前已发布的生成器分组 - - `docs/zh-CN/api-reference/index.md` 的 `Godot` 映射仍只把生成器入口落到泛化总览页,恢复效率偏低 -- 因此本轮执行最小修复集: - - 重写 `GFramework.Godot/README.md` - - 重写 `GFramework.Godot.SourceGenerators/README.md` - - 更新 `docs/zh-CN/api-reference/index.md` 的 `Godot` 行 - -### 当前决策(RP-011) - -- 这轮不改 `docs/zh-CN/godot/**` landing / topic 页面,因为站内页面本身没有发现新的事实漂移,问题集中在仓库 README 与 API 入口的回退 -- `GFramework.Godot` README 必须和 `Game` / `Godot` 真实边界一致,明确它不是生成器 owner,也不引入虚构的 router 类型 -- `GFramework.Godot.SourceGenerators` README 采用“元数据 / 节点注入与信号绑定 / 行为包装 / 批量注册”四段式入口,避免读者只看到旧的三项能力 -- API 参考页对 `Godot` 生成器入口直接给出专题页链接,而不是仅要求读者再从总览页二次分流 - -### 当前验证(RP-011) - -- 模块扫描: - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过 - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot.SourceGenerators`:通过 -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot/README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot/README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh GFramework.Godot.SourceGenerators/README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh GFramework.Godot.SourceGenerators/README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/api-reference/index.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 继续抽查根 `README.md`、`docs/zh-CN/source-generators/index.md` 与 `docs/zh-CN/tutorials/godot-integration.md` 是否仍把 `Godot` owner 写回旧边界 -2. 当后续分支继续修改 `Game` / `Godot` family 入口时,沿用当前 README -> landing -> API reference 的最小修复顺序 - -### 当前恢复点:RP-012 - -- 继续按 `boot` 恢复后的默认下一步执行 `Game` / `Godot` 入口巡检,并重新读取: - - `README.md` - - `docs/zh-CN/source-generators/index.md` - - `docs/zh-CN/tutorials/godot-integration.md` - - `docs/zh-CN/api-reference/index.md` - - `GFramework.Godot/README.md` - - `GFramework.Godot.SourceGenerators/README.md` -- 巡检结果显示主体内容仍然稳定,但根入口摘要存在一处残留漂移: - - 根 `README.md` 仍把 `GFramework.Godot.SourceGenerators` 写成“Godot 场景专用源码生成器”,与当前包实际覆盖的 `project.godot` 元数据、节点注入、信号绑定、Scene / UI 包装和导出集合注册职责不符 - - `docs/zh-CN/source-generators/index.md` 的选包描述同步缺少 Scene / UI 包装与导出集合注册辅助这组能力 -- 因此本轮执行最小修复集: - - 更新根 `README.md` 的 `GFramework.Godot.SourceGenerators` 模块描述 - - 更新 `docs/zh-CN/source-generators/index.md` 的 Godot 选包摘要 - -### 当前决策(RP-012) - -- 继续维持“只修新发现的入口漂移,不重写稳定页面”的治理节奏;这轮不改 `docs/zh-CN/tutorials/godot-integration.md`,因为教程与 README / 生成器专题页仍使用同一套职责边界 -- 根 `README.md` 作为仓库一级入口,必须与模块 README 保持同一粒度的职责摘要;如果根入口比模块 README 更旧,后续 `boot` 和人工恢复都会被误导 -- `source-generators/index.md` 的选包段落需要覆盖当前真实能力分组,但不重复展开各专题页细节,避免重新长成第二份 README - -### 当前验证(RP-012) - -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-links.sh README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-code-blocks.sh README.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/source-generators/index.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 继续抽查 `docs/zh-CN/tutorials/godot-integration.md`、`docs/zh-CN/godot/index.md` 与根 `README.md` 的职责摘要是否继续保持同一口径 -2. 当后续分支继续修改 `Game` / `Godot` family 入口时,沿用当前 README -> landing -> API reference 的最小修复顺序 - -### 当前恢复点:RP-013 - -- 使用 `$gframework-boot` 恢复当前 worktree 后,按 `documentation-full-coverage-governance` 的默认下一步执行一次 - validation-only 巡检,并补读: - - `README.md` - - `docs/zh-CN/godot/index.md` - - `docs/zh-CN/tutorials/godot-integration.md` - - `docs/zh-CN/source-generators/index.md` - - `docs/zh-CN/api-reference/index.md` - - `GFramework.Godot/README.md` - - `.agents/skills/gframework-doc-refresh/SKILL.md` -- 同时执行 `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`,确认当前 `Godot` - docs surface 除 `index.md`、`architecture.md`、`scene.md`、`ui.md`、`signal.md`、`extensions.md`、`logging.md` - 外,还应把 `storage.md` 与 `setting.md` 视为默认恢复集合的一部分 -- 巡检结论: - - 根 `README.md`、`docs/zh-CN/godot/index.md`、`docs/zh-CN/tutorials/godot-integration.md`、 - `docs/zh-CN/source-generators/index.md` 与 `docs/zh-CN/api-reference/index.md` 当前仍保持同一套 `Godot` - owner / adoption path 叙述,没有发现新的入口漂移 - - 本轮不需要改动稳定的 README / docs 页面,只需要把 active topic 的最小恢复摘要补齐到当前 landing page - 实际覆盖的页集合 -- 因此本轮执行的唯一修改是: - - 更新 `ai-plan/public/documentation-full-coverage-governance/todos/documentation-full-coverage-governance-tracking.md` - 的恢复点、`Godot` 页面集合、稳定性巡检结论与下一步 - - 记录本条 `RP-013` trace,保证未来 `boot` 不会漏掉 `storage.md` / `setting.md` - -### 当前决策(RP-013) - -- 当前 topic 继续保持“巡检优先、最小修复”的节奏;验证通过时不为凑改动而重写稳定页面 -- `scan_module_evidence.py` 识别出的 docs surface 应优先反映到 active recovery artifact,而不是只留在一次性 chat - 上下文 -- `Godot` family 的后续巡检重点从“根入口是否还残留旧描述”切换为“storage / setting 子页是否和 landing / README - 保持同一口径” - -### 当前验证(RP-013) - -- 模块扫描: - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过 -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/index.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/tutorials/godot-integration.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 若后续分支继续调整 `GFramework.Godot` 运行时入口,优先复核 `docs/zh-CN/godot/storage.md`、`setting.md` 与根 - `README.md` / landing page 是否仍保持同一套职责边界 -2. 当后续分支再修改 `Godot` / `Game` family 的 README、docs 或公共 API 时,回到对应模块追加 targeted 巡检与验证 - -### 当前恢复点:RP-016 - -- 用户明确要求“继续下一步的文档治理,并形成足够体量的 PR”后,当前 topic 不再停留在 validation-only 巡检, - 而是切到一个可独立成波次的 `Game` persistence docs surface: - - `docs/zh-CN/game/data.md` - - `docs/zh-CN/game/storage.md` - - `docs/zh-CN/game/serialization.md` - - `docs/zh-CN/game/setting.md` -- 先执行 `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Game`,确认 `Game` 的默认 docs surface - 包含 `data`、`storage`、`serialization`、`setting`、`scene`、`ui`、`config-system` 与 landing / API fallback -- 结合 `GFramework.Game/README.md`、`FileStorage.cs`、`ScopedStorage.cs`、`DataRepository.cs`、 - `UnifiedSettingsDataRepository.cs`、`SaveRepository.cs`、`JsonSerializer.cs`、`SettingsModel.cs`、 - `SettingsSystem.cs`、`JsonSerializerTests.cs`、`SettingsModelTests.cs` 与 `PersistenceTests.cs`,确认四个旧页面存在持续性漂移: - - `storage.md` 仍按旧版通用 API 手册组织,没有强调 `FileStorage` / `ScopedStorage` 与 repository 的职责边界 - - `data.md` 缺少 `DataRepository`、`UnifiedSettingsDataRepository` 与 `SaveRepository` 三层分工,以及当前备份 / - 批量事件 / 存档迁移语义 - - `serialization.md` 仍沿用“业务层手工 Serialize 再写回 storage”的旧接法,没有反映当前 `FileStorage` - 已直接复用注入的 `ISerializer` - - `setting.md` 虽已回到 `ISettingsModel` / `RegisterApplicator(...)` 口径,但结构仍未与当前 `Game` family 的 runtime topic - 页面统一,也缺少 frontmatter -- 因此本轮执行的最小但成组修复集是: - - 重写 `docs/zh-CN/game/storage.md` - - 重写 `docs/zh-CN/game/data.md` - - 重写 `docs/zh-CN/game/serialization.md` - - 重写 `docs/zh-CN/game/setting.md` - - 更新 active tracking 的恢复点、治理结论与下一步 - -### 当前决策(RP-016) - -- 这轮不去扩张到 `Game` tutorial 或 root README,而是把同一子领域里仍残留的旧页一次性收口,形成清晰的 PR 边界 -- `Game` persistence docs surface 统一采用“当前公开入口 -> 最小接入路径 -> 当前边界 -> 继续阅读”的结构, - 不再维护分散的伪 API 手册页 -- 文档示例只保留可直接映射到当前框架类型、测试行为或已验证 consumer wiring 的内容,避免继续写虚构接线名 - -### 当前验证(RP-016) - -- 模块扫描: - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Game`:通过 -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/data.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/storage.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/serialization.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/game/setting.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 -- 代码 / 测试证据: - - `GFramework.Game/README.md` - - `GFramework.Game/Storage/FileStorage.cs` - - `GFramework.Game/Storage/ScopedStorage.cs` - - `GFramework.Game/Data/DataRepository.cs` - - `GFramework.Game/Data/UnifiedSettingsDataRepository.cs` - - `GFramework.Game/Data/SaveRepository.cs` - - `GFramework.Game/Serializer/JsonSerializer.cs` - - `GFramework.Game/Setting/SettingsModel.cs` - - `GFramework.Game/Setting/SettingsSystem.cs` - - `GFramework.Game.Tests/Data/PersistenceTests.cs` - - `GFramework.Game.Tests/Serializer/JsonSerializerTests.cs` - - `GFramework.Game.Tests/Setting/SettingsModelTests.cs` - -### 下一步 - -1. 回填 tracking 的最新验证结果,并按仓库规则提交本轮 `Game` persistence docs wave -2. 若后续分支继续调整 `GFramework.Game` 的 persistence runtime 或 README,优先复核这四个 topic page 与 landing page 的一致性 - -### 当前恢复点:RP-015 - -- 通过 `$gframework-boot` 恢复当前 worktree 后,继续按 `documentation-full-coverage-governance` 的默认下一步执行一次 - validation-only 巡检,并补读: - - `GFramework.Godot/README.md` - - `docs/zh-CN/godot/index.md` - - `docs/zh-CN/godot/storage.md` - - `docs/zh-CN/godot/setting.md` - - `docs/zh-CN/source-generators/index.md` - - `docs/zh-CN/api-reference/index.md` - - `docs/zh-CN/tutorials/godot-integration.md` - - `GFramework.Godot/Setting/GodotAudioSettings.cs` - - `GFramework.Godot/Setting/GodotGraphicsSettings.cs` - - `GFramework.Godot/Setting/GodotLocalizationSettings.cs` - - `GFramework.Game.Tests/Setting/GodotLocalizationSettingsTests.cs` -- 同时重新执行 `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`,确认 `Godot` - docs surface 仍然覆盖 landing、`storage.md`、`setting.md`、source-generators fallback、API reference 与 - CoreGrid 参考接线,没有新的默认恢复页缺口 -- 巡检结论: - - `GFramework.Godot/README.md`、`docs/zh-CN/godot/index.md`、`storage.md`、`setting.md`、`docs/zh-CN/source-generators/index.md`、 - `docs/zh-CN/api-reference/index.md` 与 `docs/zh-CN/tutorials/godot-integration.md` 当前仍保持同一套 - `Godot` owner / adoption path 叙述,没有发现自 `RP-014` 之后的新入口漂移 - - `setting.md` 里关于 `ISettingsModel`、`RegisterApplicator(...)`、`LocalizationMap` fallback 的描述,仍与 - `GodotAudioSettings`、`GodotGraphicsSettings`、`GodotLocalizationSettings` 以及 - `GodotLocalizationSettingsTests` 保持一致 -- 因此本轮执行的唯一修改是: - - 更新 active tracking 与 trace 的恢复点、巡检结论和验证结果 - -### 当前决策(RP-015) - -- 当前 topic 继续维持“巡检优先、无漂移则只更新 recovery artifact”的治理节奏,不为凑改动重写稳定页面 -- `boot` 恢复本身也应留下可复用的恢复证据,避免下一次启动时重复判断“最近一次巡检是否已经覆盖 `storage.md` / - `setting.md`” - -### 当前验证(RP-015) - -- 模块扫描: - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过 -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/storage.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/setting.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 若后续分支继续调整 `GFramework.Godot` 运行时入口,优先复核 `docs/zh-CN/godot/storage.md`、`setting.md` 与根 - `README.md` / landing page 是否仍保持同一套职责边界 -2. 当后续分支再修改 `Godot` / `Game` family 的 README、docs 或公共 API 时,回到对应模块追加 targeted 巡检与验证 - -### 当前恢复点:RP-014 - -- 继续沿用 `RP-013` 的 `Godot` docs surface 巡检范围,补读: - - `docs/zh-CN/godot/storage.md` - - `docs/zh-CN/godot/setting.md` - - `GFramework.Godot/Storage/GodotFileStorage.cs` - - `GFramework.Godot/Setting/GodotAudioSettings.cs` - - `GFramework.Godot/Setting/GodotGraphicsSettings.cs` - - `GFramework.Godot/Setting/GodotLocalizationSettings.cs` - - `GFramework.Godot/Setting/Data/AudioBusMap.cs` - - `GFramework.Godot/Setting/Data/LocalizationMap.cs` - - `GFramework.Game.Tests/Setting/GodotLocalizationSettingsTests.cs` - - `ai-libs/CoreGrid/scripts/module/UtilityModule.cs` - - `ai-libs/CoreGrid/scripts/module/ModelModule.cs` -- 巡检发现两处新的 topic 级漂移: - - `docs/zh-CN/godot/storage.md` 仍按旧版 API 手册组织,缺少 frontmatter、当前 `IStorage` / repository 分工与 - `GodotYamlConfigLoader` 分流说明 - - `docs/zh-CN/godot/setting.md` 仍使用过时的“settings data 直接注入 applicator 构造函数”叙述,没有反映当前 - `ISettingsModel` + `RegisterApplicator(...)` 的真实接线方式 -- 因此本轮执行最小修复集: - - 重写 `docs/zh-CN/godot/storage.md` - - 重写 `docs/zh-CN/godot/setting.md` - - 更新 active tracking 的恢复点、巡检结论与验证结果 - -### 当前决策(RP-014) - -- 继续遵循“README / landing 稳定时,不重写稳定入口;只修新发现的 topic 漂移”的治理节奏 -- `storage.md` 应强调宿主路径语义与 repository 分工,而不是重复 `Game` 通用存储手册 -- `setting.md` 应强调 applicator 注册和运行时边界,而不是重新维护一份过时的设置 API 摘要 - -### 当前验证(RP-014) - -- 模块扫描: - - `python3 .agents/skills/gframework-doc-refresh/scripts/scan_module_evidence.py Godot`:通过 -- 文档校验: - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/storage.md`:通过 - - `bash .agents/skills/gframework-doc-refresh/scripts/validate-all.sh docs/zh-CN/godot/setting.md`:通过 -- 构建校验: - - `cd docs && bun run build`:通过;仅保留既有 VitePress 大 chunk warning,无构建失败 - -### 下一步 - -1. 若后续分支继续调整 `GFramework.Godot` 运行时入口,优先复核 `docs/zh-CN/godot/storage.md`、`setting.md` 与根 - `README.md` / landing page 是否仍保持同一套职责边界 -2. 当后续分支再修改 `Godot` / `Game` family 的 README、docs 或公共 API 时,回到对应模块追加 targeted 巡检与验证 +1. 如果 PR `#272` 的 `Title check` 仍需要处理,到 GitHub 上把标题改成更具体的文档治理描述。 +2. 若后续分支继续调整 `Game` persistence runtime 或 README,优先复核 `docs/zh-CN/game/data.md`、 + `storage.md`、`serialization.md`、`setting.md` 与 landing page 是否仍保持一致。 +3. 若后续分支继续调整 `Godot` generator 接法,优先复核 `GFramework.Godot.SourceGenerators/README.md`、 + `docs/zh-CN/tutorials/godot-integration.md` 与相关专题页是否仍保持一致。 diff --git a/docs/zh-CN/game/data.md b/docs/zh-CN/game/data.md index 3f17d98e..2faa03a1 100644 --- a/docs/zh-CN/game/data.md +++ b/docs/zh-CN/game/data.md @@ -49,6 +49,21 @@ description: 以当前 GFramework.Game 源码与 PersistenceTests 为准,说 - 保存、删除时会整文件回写,而不是只改单个 section 文件 - 开启 `AutoBackup` 时,备份粒度也是整个统一文件,不是单个 section +当 `DataRepositoryOptions.BasePath = "settings"`,并保持默认文件名时,最小目录结构通常是: + +```text +settings/ + settings.json +``` + +如果同时开启 `AutoBackup = true`,则同一路径下还会额外出现: + +```text +settings/ + settings.json + settings.backup +``` + ### `SaveRepository` 适合: