评审后续:修正标题栏项目标签的空态、视图门控与文案
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m7s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m38s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m42s
Project CI / Frontend tests (pull_request) Successful in 3m37s
Project CI / Backend tests (pull_request) Successful in 8m12s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m54s
Project CI / Repository checks (pull_request) Successful in 6m58s
Project CI / Native shell tests (pull_request) Successful in 9m32s

- 面板形态:快照读取成功但没有在跑回合时不再渲染「未能读取正在运行的项目」,补回 !readFailed 守卫
- 发布门控:currentProjectPath / currentProjectName 只在 launcherView === 'project-development' 时发布,离开工作台按口径回落到最近启动的在跑项目
- 菜单头部只报运行中数量,读取失败结论由 role=status 一行独占,避免同一句连排两遍
- 标签提示拆成「作用域 + 运行状态」:回落态记为「最近运行的项目:X」、状态位「共 N 个项目在运行」,不再重复「正在运行」
- 数量徽标补 title 说明数字含义
- 用例:新增面板空态回归与两条视图门控回归,更新两处标签断言;三条定向文件 25 passed
- 文档:决策日志补 2026-10-05 评审后续条目并修正实施计划交叉引用,里程碑补 2026-10-05 修订,实施计划与主规范同步口径
This commit is contained in:
2026-10-05 15:35:55 +08:00
parent f2f33aead3
commit 45ae29461c
10 changed files with 202 additions and 26 deletions
@@ -29,7 +29,7 @@ Milestone: `【里程碑】Direct回合跨页面生命周期与运行中项目
1. Rust:扩展活动回合注册表并暴露只读快照命令,配定向用例(进入 / 进度 / 终态移除 / 多项目并存)。
2. 前端:接入快照读取,实现“重新进入项目 → 恢复忙碌态与进度 → 以快照 sequence 续接 → 阻止并发提交”。
3. 前端:在窗口标题栏挂载项目入口;2026-10-04 修订为**主文案恒为当前项目名**,运行中项目只占圆点、数量徽标与展开菜单(展开后按开始时间列出全部在跑项目,当前项目带「当前」标记),复用既有组件与设计 token。原口径「标题栏只显示最后开始的项目」见里程碑文末修订记录。
3. 前端:在窗口标题栏挂载项目入口;2026-10-04 修订为**工作台内主文案恒为当前项目名**(只在工作台视图发布这个身份,不在项目内时回落到最近启动的在跑项目),运行中项目只占圆点、数量徽标与展开菜单(展开后按开始时间列出全部在跑项目,当前项目带「当前」标记),复用既有组件与设计 token。原口径「标题栏只显示最后开始的项目」见里程碑文末修订记录。
4. 报错归类:按审计结论修正会误导的映射,逐条加回归用例;真实权限拒绝保持原提示。
5. 文档:主规范与共享记忆同步;里程碑验收后删除临时计划文件。
@@ -22,7 +22,7 @@ Parent Spec: `docs/technical/【技术方案】AI游戏创作智能体App实施
- 重新进入有在跑回合的项目后:界面进入“正在处理”、显示最近一次进度、以快照 `sequence` 续接后续事件;回合结束前提交第二条需求不会真正发起第二条付费回合。
- 回合结束(completed / failed)后:忙碌态解除、可以再次发送;不重复追加助手消息。
- 无在跑回合的项目:行为与今天一致(可正常发送,不出现额外提示或阻塞)。
- 窗口标题栏入口:常态显示当前项目名(不在项目内时回落到最后开始的在跑项目);正在运行的项目只占圆点与数量徽标,点击后按 `startedAt` 升序列出所有在跑项目,显示项目名(缺失时回退目录名)与状态/时长、当前项目带「当前」标记,点击进入对应项目;没有在跑回合且没有读取失败时不渲染入口;读取失败不顶掉当前项目名,结论在展开菜单里。
- 窗口标题栏入口:常态显示当前项目名(只在工作台视图才算「当前项目」,不在项目内时回落到最近启动的在跑项目);正在运行的项目只占圆点与数量徽标,点击后按 `startedAt` 升序列出所有在跑项目,显示项目名(缺失时回退目录名)与状态/时长、当前项目带「当前」标记,点击进入对应项目;没有在跑回合且没有读取失败时不渲染入口;读取失败不顶掉当前项目名,结论落在圆点告警色、标签提示与展开菜单里。
- 快照读取失败不得阻断发送、不得显示成业务失败。
- 已修的错误映射不回归:`direct-codex-turn-already-running:` 与历史同义中文正文都归一到“仍在处理这个项目的上一条需求”;真正的 `项目权限策略拒绝执行:<command>` 仍显示审批提示。
@@ -47,6 +47,14 @@ Parent Spec: `docs/technical/【技术方案】AI游戏创作智能体App实施
- 背景:issue #618。窗口标题栏那枚标签原来被「正在运行的项目」整块接管(`WindowChrome` 在 `activeTurns.length > 0 || readFailed` 时替换掉当前工作区标题),主文案取开始时间最晚的在跑项目。于是「当前项目没在跑、后台别的项目在跑」时标签显示的是别的项目,当前项目名在整个窗口上消失(现场:当前项目 `gameagent-ff7f3240`,标签显示 `gameagent-c3af9c7e`)。
- 决策(主文案优先级):标签主文案恒为当前项目名(`currentProjectContext.projectName`,经 `WindowChromeActiveProjectRuns.currentProjectName` 由 `WorkspaceLauncher` 发布);不在项目内时才回落到最后开始的在跑项目。这与主规范既有条目「打开项目后居中标题切换为当前项目名」一致,运行中项目不再和它抢位置。
- 决策(运行态表达):圆点(读取失败转告警色)+ 运行中数量徽标(≥1 即显示)+ 展开菜单;菜单里当前项目那一行用与标签同名的项目名并带「当前」标记(`aria-current` 保留)。
- 决策(读取失败):不再整块替换标签,结论只留在圆点与菜单里;既没有在跑项目、又没有当前项目可显示时才保留原来的纯提示。
- 决策(读取失败):不再整块替换标签,结论落在圆点告警色、标签提示(`aria-label` / `title`)与展开菜单里,不占主文案;既没有在跑项目、又没有当前项目可显示时才保留原来的纯提示。
- 有意未做:后台项目在菜单里仍是目录名。运行中项目名来自快照 `projectName`(Rust 侧取 `thread_id` 目录名),要改成清单项目名就得让 `ThreadManager` 在认领回合时读 `.agent/manifest.json`,给纯内存模块的 claim 路径加锁内文件 I/O;当前项目那一行已用清单项目名对齐。
- 验证:`npx vitest run apps/ai-game-creator-shell/tests/directActiveTurns.test.tsx apps/ai-game-creator-shell/tests/WindowChrome.test.tsx apps/ai-game-creator-shell/tests/workspaceWindowSync.test.tsx` → 22 passed(含三条新回归:别的项目在跑时标签仍是当前项目、当前项目自己跑时列表带「当前」、读取失败不顶掉当前项目名);全量 AGC Web 用例与真实浏览器冒烟见 PR。
## 2026-10-05 修订(评审后续)
- 面板形态误报读取失败:`ActiveProjectRunsPanel` 的空态早退只判 `runningCount === 0`,把「快照读取成功、只是没有在跑回合」渲染成「未能读取正在运行的项目」,与本组件自身注释相反。补回 `!readFailed` 守卫;`panel` 是默认 prop,虽当前唯一生产调用方 `WindowChrome` 恒用 `titlebar`,但组件注释对外宣称面板布局可复用。
- 会话残留的项目身份:`currentProjectContext` 是会话级状态(离开工作台不清空),活动回合快照却是全局轮询;照搬上下文会让首页 / 项目组 / 模板库上的标签一直写「当前项目:<上次打开的项目>」,徽标数字却属于别的项目,也令「不在项目内回落到最近启动的在跑项目」实际不可达。发布时按 `launcherView === 'project-development'` 门控 `currentProjectPath` / `currentProjectName`,与同文件窗口标题 effect 同口径。
- 文案去重:读取失败的结论曾在菜单头部与 `role=status` 行连排两遍,头部改为只报数量;回落态触发文案原为「正在运行的项目:X;正在运行 N 个项目」,拆成「作用域 + 运行状态」(回落态作用域记为「最近运行的项目:X」,状态位「共 N 个项目在运行」);数量徽标补 `title` 说明数字含义。
- 验证:同三条定向用例文件 → 25 passed;对照旧实现,分别临时禁用 `launcherView` 门控与去掉面板空态守卫,对应用例各自转红(回归用例确有判别力)。
- 仍未取得证据(需要真实运行):真机重新进入正在跑的项目后恢复忙碌态与进度、标题栏入口点击进入对应项目、回合结束后可再次发送。