同步删除栏目大纲导航的权威文档:PRD 与技术方案改成总览卡片/所有资源/下一页口径

- decision-log.md:新增「删除资源画布左侧的栏目大纲悬浮导航」决策,先记录查证结论(decision-log / pitfalls / PRD / 技术方案里此前只有要求保留该导航的条文,没有任何删除决策,本次是新决策),再写决策、语义变更、不做什么与变异验证结果。
- PRD:§阶段说明与 §7.2 验收两条不再写"大纲展示全部栏目""通过栏目大纲和滚轮访问全部栏目",改为栏目大纲由「资源总览」的栏目缩略卡片承载、切栏目走总览卡片 +「所有资源」入口 + 页内「下一页」。
- 技术方案:目标、操作边界与验收共五处删掉"栏目大纲悬浮在画布左侧/只显示图标和栏目名称""点击大纲切页""分页大纲以悬浮 Dock 展示全部栏目"等条文,改成当前状态(左侧不再有悬浮导航)。
- pitfalls.md:补记一条 jsdom 坑——栏目页 fit key 需要非零可测量尺寸,jsdom 下恒为 0,所以"总览→栏目"往返会重新适配视口;进入栏目后应恢复上次 viewport 的用例在 jsdom 里必须避免这种往返,不要误判成产品回归、也不要去改 fit 逻辑。
This commit is contained in:
2026-09-11 13:54:27 +08:00
parent 29b99f213d
commit 399fcacb8e
4 changed files with 27 additions and 10 deletions
@@ -8347,3 +8347,12 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
- 不做什么:不改 `runAvailable` 与 `showRunView` 的门槛(PRD「运行入口不可用时仍允许点击…但不切换状态」继续成立),不改 PRD :122 的"播放即切运行视图 + 启动预览",不给预览加心跳 / 轮询。
- 验证方式:AGC 子集新增两条工作台用例(仅落盘记录为 running → 初始仍是资源管理且运行入口可用;会话预览为 running → 自动进运行视图)与五条 `sessionPreview` 用例(活体优先 / 陈旧记录对齐并投影 / registry 不可读按没有在跑处理 / 记录非 running 时不发多余停止命令 / 无 invoke 零请求);Rust 定向用例三条(同项目重启后记录仍为 running、换项目时旧项目写 stopped、无活体时 stop 对齐陈旧记录)。变异验证:撤掉自动切换的收窄 → 第一条用例红灯;撤掉活体核对(直接信落盘记录)→ `sessionPreview` 两条用例红灯(均已实测)。
- 关联文档:`docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`(§4.1 已按当前状态改写)、`docs/project-memory/shared-memory/pitfalls.md`。
## 2026-09-11 删除资源画布左侧的栏目大纲悬浮导航,切栏目改由总览卡片与下一页承担
- 背景:用户报"资源总览把左边的导航栏删了""这个不是老早之前都删掉了吗?这个东西本身就不应该出现的""只有导航去掉,其他的保留"。**查证结论:仓库里没有这条删除决策**——`decision-log.md`、`pitfalls.md`、PRD 与技术方案此前都只有**要求保留**该导航的条文(PRD :56「大纲展示全部栏目,空栏目计数为 0 且可打开空画布」、PRD :512「非空项目可通过栏目大纲和滚轮访问全部栏目」、技术方案 :5/:33/:53/:54/:57/:102/:103 把大纲写成分类导航入口之一并规定其常态外观),没有任何"已决定删除、尚未执行"的记录。因此本次是**新决策**,不是补做未完成的删除。
- 决策:整条删除 `.game-resource-outline` 悬浮导航(组件 `ResourceBookOutlineNav`、栏目页与「所有资源」页两处挂载点、全部 `.game-resource-outline*` 样式),并删掉只服务它的「未读红点」状态链(`unreadResourceCategoryState`、`resourceCategorySnapshotRef`、`resourceIdsByCategory`、`viewedResourceCategory` 与对应 effect)。切栏目保留三条既有入口且全部实测可用:①「资源总览」的栏目缩略卡片(第 0 张是「所有资源」);②「所有资源」汇总页(页内「资源总览」返回);③栏目页底部「下一页」。窄屏无特殊分支:这三条入口在原样式表里没有任何媒体查询覆盖,删除导航不减少窄屏下的切栏目能力。
- 语义变更(用户已确认接受):栏目「有新资源」红点随导航一起消失(它此前只在这条导航上渲染),不再有第二处未读提示;分区栏目、栏目标题栏、卡片、缩略图、「所有资源」入口、搜索、总览、快速编辑/工具条一律未动。
- 不做什么:不新增替代导航、不做栏目下拉/分段控件、不改 `resourceBookModel` 的 `main / child + category` 目标模型、不改每「排序模式 + 栏目」独立 viewport 的既有约定、不动 sidecar schema 与跨端契约。
- 验证方式:新增反向守卫用例(`资源栏目大纲` 标签、`.game-resource-outline` 类名、对应 `<nav>` 都不再渲染)与切栏目链路用例(总览卡片进空栏目 → 下一页切下一个 → 标题栏「资源总览」返回 → 「所有资源」入口往返);变异验证:把 `<nav aria-label="资源栏目大纲">` 加回去 → 守卫红灯,只加回类名 → 守卫同样红灯(均已实测)。既有断言未放宽:栏目顺序断言改钉在总览缩略卡片的 `aria-label` 序列上(第 0 张「所有资源」+ 固定七栏目),只服务导航的断言按「四不写」直接删除。
- 关联文档:`docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`(:56 / :512)、`docs/technical/【技术方案】GameAgent资源自由画板与快速编辑-2026-08-20.md`(:5 / :33 / :53 / :54 / :57 / :102 / :103)、`docs/project-memory/shared-memory/pitfalls.md`。
@@ -5271,4 +5271,12 @@
- **原因**:bash 走 MSYS 的 `/usr/bin/git`,而 worktree 的 `.git` 是**文件**、内容为 Windows 绝对路径 `C:/Users/.../.git/worktrees/<name>`;MSYS git 把它当相对路径拼到当前目录后,解析成 `/mnt/c/.../C:/Users/...`。同一个 ref 用 Windows git 验证 `git cat-file -e <sha>^{commit}` 返回 0,所以这不是基线选错,而是 worktree + MSYS 不兼容。
- **处理**:在这类 worktree 里跑 script 门禁时,**按脚本同序、同命令用 Windows git / PowerShell 逐条等价执行**(`SPACETIME_SCHEMA_BASE_REF=<base>` 之类环境变量照传),不要因为 bash 包装层失败就判定门禁本身红。
- **验证**:`git cat-file -e "$(git rev-parse master)^{commit}"` 在 PowerShell 下 exit 0;逐条等价执行后 10 道门禁的通过与失败分布与脚本语义一致(本次仅 rustfmt / appSurface / build 三条红,各有独立归因)。
- **关联**:`scripts/check-repository-ci.sh`、`scripts/run-bash-script.mjs`。
- **关联**:`scripts/check-repository-ci.sh`、`scripts/run-bash-script.mjs`。
## 2026-09-11 资源画本用例在 jsdom 下永远拿不到 fit key,"总览→栏目"往返会重新适配视口
- **现象**:删掉左侧栏目大纲导航后,切栏目只能走「资源总览」缩略卡片;把测试 helper 从"点导航"改成"先 `收起资源` 回总览、再点缩略卡片"后,`preserves independent art viewports across sort and workbench mode switches` 里"回到依赖模式应恢复该模式 viewport"的断言变红:期望 `332,236.4,0.9`,实际 `360,256,1`(第一次 fit 的值)。
- **原因**:栏目页的首屏适配有 fit key 门禁——`openResourceBookChild` 只在 `resourceBookSceneSize.width/height > 0` 时把 `<projectPath>\n<projectId>\n<sortMode>\n<category>` 写进 `resourceCanvasFitKeysRef`,分页画布 layout effect 也同样要求可测量尺寸。jsdom 没有布局,两者恒为 0,于是**每次 `openResourceBookChild` 都走 fit 分支**,已存的 viewport 被重拟合覆盖。真机上尺寸非零、首次进入即写 key,再进入走 `resourceCanvasViewportTargetsRef[sortMode][category]` 恢复分支,所以这不是产品回归,是 jsdom 产物。
- **处理**:旧断言里那些"点导航切到当前栏目"的调用本来就是提前返回的空操作(`openResourceBookChild` 在 `view/category/phase` 未变时直接 return),改 helper 后它们变成了真实往返。修法是**保留全部断言、只去掉这些多余往返**(排序模式切换本身就会切换 viewport),不要为了让用例变绿去改 `index.tsx` 的 fit 逻辑,也不要把往返路径当成产品缺陷去"修"。
- **推广**:任何"进入栏目后应恢复上次 viewport"的用例,在 jsdom 里必须避免经过总览往返;要覆盖往返本身,得先给 `resourceBookSceneSize` 造出非零尺寸。
- **关联**:`apps/ai-game-creator-shell/src/view/project-development/index.tsx`(`openResourceBookChild` / `resourceCanvasFitKeysRef` / 分页画布 layout effect)、`apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts`。