把渲染层下沉的现行口径同步回主规范与事件化里程碑

- 主规范新增「AGC 客户端现行分工:离线前端、事件驱动与维护态出口」一节,写明网络与凭据归 Rust、活动回合唯一事实源是 Direct 线程管理器、维护态由 Rust 分类并单一事件广播、失败文案只展示宿主脱敏摘要
- 事件化里程碑的范围与验收第 2 条改为按线程管理器的登记/进度内容变化/收口三处通知点表述,并补 2026-09-28 对齐说明
This commit is contained in:
kdletters
2026-09-28 15:59:11 +08:00
parent f5424ce805
commit c7df10b394
2 changed files with 16 additions and 2 deletions
@@ -11,7 +11,7 @@ Parent Spec: `docs/technical/【技术方案】AGC后端框架整理与演进路
## 范围
- Direct 活动回合列表:由 Rust 活动注册表变更事件驱动。
- Direct 活动回合列表:由 Rust 活动注册表变更事件驱动(2026-09-28 对齐后,唯一事实源是 Direct 线程管理器的活动回合快照)。
- 本地素材生成任务:由 Rust 账本变更事件驱动,保留一次恢复快照读取。
- Runtime 设置中的 AGC 插件状态:由 Rust 插件状态事件驱动,保留显式刷新。
- 保留两处已修复的无限 `setState` 回归测试,并补充事件订阅/去重/卸载测试。
@@ -26,7 +26,7 @@ Parent Spec: `docs/technical/【技术方案】AGC后端框架整理与演进路
## 验收标准
1. AGC 工作区代码中 Direct 活动回合与本地素材生成任务不再设置固定 `setInterval` 轮询。
2. Rust 在活动回合登记、更新、结束和素材生成账本状态变化时发出快照/更新事件;事件 payload 不含凭据或未脱敏项目内容。
2. Rust 在活动回合登记、进度内容变化、收口和素材生成账本状态变化时发出快照/更新事件;事件 payload 不含凭据或未脱敏项目内容。
3. React 订阅先于首次快照读取,事件重复或内容未变时不产生新的数组状态引用;卸载后迟到事件不能写回。
4. 插件状态页进入时读取一次,状态变更事件即时更新,用户操作仍可显式刷新;不再每秒读取。
5. 现有无限 `setState` 回归测试继续通过,并新增事件驱动竞态测试。
@@ -46,3 +46,6 @@ Parent Spec: `docs/technical/【技术方案】AGC后端框架整理与演进路
- 验收 3/7(订阅先于快照、重复事件不换数组身份、卸载后迟到事件不写回、subscriber 幂等注销):`npx vitest run tests/directActiveTurns.test.tsx tests/resourceCanvasAssetGenerationQueue.test.ts --root apps/ai-game-creator-shell` → **11 + 19 passed**;Rust 侧 `cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --offline -- direct_thread_manager --test-threads=1` → **13 passed**。
- 验收 4(插件状态:进入读一次 + 事件更新 + 显式刷新):`npx vitest run tests/pluginHost.test.ts --root apps/ai-game-creator-shell` → **14 passed**。
- 仍未验证(需要真实客户端):长回合中插件状态事件与素材任务事件的真实时序、真实 Provider 生成下的任务账本事件密度。
## 对齐说明(2026-09-28)
合并 `origin/master` 时确认:Direct 活动回合的唯一事实源已经移到 Direct 线程管理器(`active_turn_snapshots()`),本里程碑原来的通知点挂在 `DIRECT_TAONIER_ACTIVE_INVOCATIONS` 上。对齐后只保留线程管理器一份快照,`accept_direct_thread_turn` / `update_direct_thread_active_turn`(仅内容变化时)/ `complete_direct_thread_turn(_if_reserved)` 各广播一次 `game-creator-direct-active-turns-changed`;渲染层的「先订阅、再读一次快照、重复事件不换数组身份、卸载不写回」契约未变。细节见 `docs/project-memory/plans/【里程碑】AGC渲染层下沉与最新master对齐-2026-09-28.md`。
@@ -1,5 +1,16 @@
# AI 游戏创作智能体 App 实施计划
## 2026-09-28 AGC 客户端现行分工:离线前端、事件驱动与维护态出口
本节是 AGC 客户端「React 只做展示与交互」的现行口径,取代更早文档里渲染层直连平台网络、按固定频率轮询、自行解析维护响应的做法。
- **网络与凭据只在 Rust**。平台 origin、Bearer/refresh 凭据、OSS 直传票据、Provider 与更新清单请求都由 `src-tauri` 承担;渲染层通过 typed command 提交结构化意图,不再持有 access token,也不再声明 `http:default` 权限(`capabilities/main.json`)。`src/services/clientApi.ts` 与 `fetchClientHttp` 已删除。
- **状态变更由 Rust 事件驱动**。正式状态归 Rust:Direct 活动回合的唯一事实源是 Direct 线程管理器的活动回合快照(`list_direct_active_turns` 只读它),登记、进度内容变化、收口各广播一次 `game-creator-direct-active-turns-changed`;素材生成与插件状态同理。渲染层进入入口时**先订阅、再读一次受控快照**,事件重复或内容未变时保持数组身份,卸载后迟到事件不写回;不恢复任何固定频率轮询(纯 UI 计时器、拖拽重复器与动画 tick 除外)。
- **维护态判定归 Rust,渲染层只订阅**。平台请求的错误分支统一经 `platform_maintenance::watch_platform_response` 分类(只有 `503` 且命中 `MAINTENANCE` 或「维护」才算,对象存储自身的 503 不误伤),命中后广播 `genarrative-client-maintenance-detected`;渲染层由 `clientMaintenance.subscribeClientMaintenanceEvent` 订阅并打开唯一的「系统维护中」弹窗,业务面板各自的错误文案保持不变,同一批并发失败只弹一次。
- **失败文案只展示宿主给的脱敏摘要**。`turn.completed.failure` 是失败说明的唯一来源,渲染层不做 HTTP 判定、不预读诊断正文;失败线索留在 `.agent/runtime/errors`、应用日志与错误上报池(`5398a53e6` 起用户可见文案不再带诊断引用)。
- **活动回合之外的两条配套约束**:命令返回 `Ok` 只代表接单成立,整轮收场只由 `turn.completed` 回答;渲染层的队列、忙态与提示都以事件流的这些终态为准。
证据入口:`cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --offline -- direct_thread_manager --test-threads=1`、`-- platform_maintenance --test-threads=1`、`npx vitest run tests/directActiveTurns.test.tsx tests/maintenanceNotice.test.tsx --root apps/ai-game-creator-shell`。
## 2026-09-23 UI 编辑器退役界面图参考语义建议
本节覆盖下文“2026-08-18 UI Editor 从属页面、手势与保存失败边界”中的 `UIDesignImage.metadata.slave_to` 口径,以及“界面语义建议”相关描述。