修复资源画布溢出与模板资源投影
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m3s
Project CI / Native shell tests (pull_request) Successful in 10m23s

闭合资源画布横向收缩链并增加内部滚动条

过滤任务产物通配模板避免生成无效资源卡

补充布局与资源投影回归测试

同步工作台文档与共享排障记忆
This commit is contained in:
2026-08-07 10:53:41 +08:00
parent 53e37ea361
commit 8a4b71bf8e
8 changed files with 114 additions and 3 deletions
@@ -1,5 +1,13 @@
# 决策记录
## 2026-08-07 资源画布闭合横向收缩链并拒绝产物模板投影
- 背景:资源画布显式内容宽度超过中央主视窗时,绝对定位卡片的 min-content 宽度把 `.game-workbench-stage` 隐式 grid 列撑宽,外层 `overflow: hidden` 再把右上角布局切换和最右资源卡裁掉;点击卡片进入已有 `min-width: 0` 的聚焦态后按钮重新出现,容易被误判为条件渲染。与此同时,completed task 的 `.agent/passes/pass-*/.../director.md` 只是模板,却被投影成可点击文档并在读取时失败。
- 布局决策:工作台主视窗显式使用 `grid-template-columns: minmax(0, 1fr)`,资源管理与资源画布逐层允许横向收缩并在管理容器处裁住外溢;资源画布自身固定 `width: 100%`、承担 `overflow-x / overflow-y: auto`,并为 Tauri WebKit 提供可见滚动轨道和滑块。布局切换继续常驻,不依赖资源选中态。
- 投影决策:只有不含 `*``?``[]``{}` 的具体 task artifact 文件路径可以生成任务产物资源卡。过滤只作用于 task artifact 模板,不扩大到 manifest assets、已导入附件或 Agent 文本回执。
- 验证方式:资源投影单测同时覆盖具体产物与四类 glob 元字符;CSS 合同锁定 stage grid 列、祖先 `min-width`、内部 overflow 和 WebKit scrollbar;既有布局模型继续验证最右卡片、列间距、安全 gutter 与 section 内边距全部进入 scroll width。
- 关联:`apps/ai-game-creator-shell/src/styles.css``apps/ai-game-creator-shell/src/view/project-development/resourceProjectionModel.ts`、工作台 PRD 与 AI 游戏创作实施计划。
## 2026-08-06 app-run 以独立开发 profile 支持多工作树并行运行
- 背景:多个 Git worktree 能隔离代码和分支,但不会隔离宿主机端口、Tauri identifier、AppData、数据库或本地 data dir。默认 AGC 固定使用 `3080 / 8082 / 8083 / 3101`,另一工作树运行时当前窗口可能被同名实例混淆,默认启动器则会为避免串台直接失败关闭。
@@ -14,6 +14,22 @@
- 关联:相关文件、文档、提交或 Issue
```
## 绝对定位宽画布必须闭合所有祖先的 min-content 收缩链
- 现象:资源列表态右上角布局切换消失、最右资源卡被裁掉且画布没有有效横向滚动;点击任一资源进入聚焦态后按钮又出现,看起来像选中态条件渲染错误。
- 原因:绝对定位卡片所在内容层有显式超宽尺寸,grid 子项及其 flex 后代缺少 `min-width: 0` 时,min-content 宽度会撑大主视窗隐式列;最外层 `overflow: hidden` 只负责裁切,子画布的 `overflow: auto` 因自身也被撑宽而无法形成正确滚动范围。
- 处理:从 grid 轨道开始使用 `minmax(0, 1fr)`,中间资源管理容器和实际滚动容器逐层设置 `min-width: 0`;管理容器截住外溢,资源画布固定 `width: 100%` 并独立承担横纵滚动。Tauri WebKit 需要显式 scrollbar track / thumb 样式,不能只验证 DOM 中按钮存在。
- 验证:CSS 合同同时锁定 grid 列、祖先收缩、内部 overflow 与 WebKit scrollbar;布局模型按最右卡片外边界断言 scroll width。真实窗口还应确认布局按钮始终可见,拖到横向终点能完整看到最右卡片和安全留白。
- 关联:`apps/ai-game-creator-shell/src/styles.css``apps/ai-game-creator-shell/tests/resourceCanvasLayoutContract.test.ts``apps/ai-game-creator-shell/tests/resourceCanvasLayoutModel.test.ts`
## manifest 产物 glob 只是模板,不能直接投影为资源文件
- 现象:资源区出现 `director.md` 等卡片,点击后提示文件读取失败;磁盘上不存在该文件,但 manifest task 看起来已经 completed。
- 原因:task `artifacts` 中可能保存 `.agent/passes/pass-*/...` 之类未来轮次的路径模板。completed 只说明任务状态,不会把 glob 展开成某个具体文件;把字符串按扩展名直接分类会制造幽灵资源卡。
- 处理:task artifact 投影前拒绝包含 `*``?``[]``{}` 的路径,只让具体文件路径进入分类和受控读取。不要把此规则泛化到 manifest 已登记资产、已导入附件或 Agent 文本回执。
- 验证:同一 fixture 同时放入具体 Markdown / 图片路径和各类 glob 模板,断言前者保留、后者完全不进入资源 ID 集合。
- 关联:`apps/ai-game-creator-shell/src/view/project-development/resourceProjectionModel.ts``apps/ai-game-creator-shell/tests/projectResourceProjectionModel.test.ts`
## 多工作树只隔离代码,不会自动隔离 AGC 运行资源
- 现象:两个工作树同时运行 `npm run agc` 时,后启动者因 `3080` 已占用而失败,或用户在两个同名窗口间误把另一工作树的页面当作当前修改结果。