From b077cb5277462c218b6381197ca2f95fb01fb220 Mon Sep 17 00:00:00 2001 From: Suzumiya Date: Mon, 14 Sep 2026 19:30:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=20decision-log=EF=BC=9A?= =?UTF-8?q?=E3=80=8C=E6=95=B4=E7=90=86=E7=94=BB=E5=B8=83=E3=80=8D=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E4=BD=8D=E7=BD=AE=E5=9B=BA=E5=AE=9A=E5=9C=A8=E3=80=8C?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=B4=A0=E6=9D=90=E3=80=8D=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=E3=80=81=E3=80=8C=E7=AE=A1=E7=90=86=E6=9C=AA=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E3=80=8D=E4=B9=8B=E5=89=8D=EF=BC=88=E4=B8=8D?= =?UTF-8?q?=E5=9C=A8=E8=A1=8C=E5=B0=BE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/project-memory/shared-memory/decision-log.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index f32791d10..faea37b4a 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -56,7 +56,7 @@ ## 2026-09-14 AGC 资源画布改为「手动整理」:新素材不再自动重排,整张重排只由「整理画布」发起 - 背景:生成一张新素材会让整张资源画布重排。两个 layout hook 都把 `rederiveAutomaticPositions` 打开(type 侧无条件 `true`,dependency 侧长期等于 `resourceGraphReady`),而该开关的语义是「每次资源协调签名变化就丢掉全部 `manuallyPlaced=false` 坐标、按当前资源与拓扑整体重算」;新增一张素材必然改签名,于是既有自动卡全部跟着挪位,用户刚记住的位置就没了。画布上也没有任何显式整理入口(`复位资源视图` 只复位视口)。 -- 决策一(默认口径):两个 mode 的 `rederiveAutomaticPositions` 固定 `false`——画布默认只补新卡,不动任何既有坐标(`preserve`)。整张重排改为显式动作:资源工具条动作区新增**独立的**「整理画布」动作按钮(**不在**「资源排列方式」这个 `role="group"` 内——它是一键动作,不是第三种排列方式;真机上第一版塞进排序 tab 组里被验收人指出「整理画布的按钮独立出来,不要塞到那个里面」,已移出),调用 hook 新暴露的 `rederiveNow()`,复用既有写队列与 sidecar 写回链路,只把策略换成 `rederive`;用户可见反馈继续用既有 `resourceLayoutNotice`(成功即「布局已保存」)与 `resourceLayoutSaving`,不新增状态位。重算结果与当前坐标一致时**不落盘**(沿用既有 `changed` 门):已经整齐的画布按一下不该白推进一次 CAS / revision,关系图 `producerMappingTruncated` 时更不该把一份来自不完整关系图的自动布局写进 sidecar——既有用例 `keeps trusted truncated-graph depths through the workbench without persisting a flat automatic layout` 就是钉这条。 +- 决策一(默认口径):两个 mode 的 `rederiveAutomaticPositions` 固定 `false`——画布默认只补新卡,不动任何既有坐标(`preserve`)。整张重排改为显式动作:资源工具条动作区新增**独立的**「整理画布」动作按钮(**不在**「资源排列方式」这个 `role="group"` 内——它是一键动作,不是第三种排列方式;真机上第一版塞进排序 tab 组里被验收人指出「整理画布的按钮独立出来,不要塞到那个里面」,已移出;第二轮又被指出「不要放在最右边」,所以**最终位置固定在「生成素材」之后、「管理未完成编辑」之前**(紧邻同类资源动作、在排序组左侧,不做这一行的行尾按钮——行尾会被读成「针对整个工具条」的动作)),调用 hook 新暴露的 `rederiveNow()`,复用既有写队列与 sidecar 写回链路,只把策略换成 `rederive`;用户可见反馈继续用既有 `resourceLayoutNotice`(成功即「布局已保存」)与 `resourceLayoutSaving`,不新增状态位。重算结果与当前坐标一致时**不落盘**(沿用既有 `changed` 门):已经整齐的画布按一下不该白推进一次 CAS / revision,关系图 `producerMappingTruncated` 时更不该把一份来自不完整关系图的自动布局写进 sidecar——既有用例 `keeps trusted truncated-graph depths through the workbench without persisting a flat automatic layout` 就是钉这条。 - 决策二(依赖图首次就绪的那一次):`dependencyDepth` 仍要在关系图就绪后按最终拓扑排一次列。这一层不再靠「让布尔长期为真」,而是按**项目作用域的一次性 flag**(`dependencyRederiveScopeRef`):关系图就绪且该侧 sidecar `ready` 的那一刻调用一次 `rederiveNow()`,之后一律 `preserve`;切排序 tab 不重新武装,切项目才重新记一次。 - 决策三(生成后自动聚焦):新增 `seenManifestAssetIdsRef` + effect,按 `manifest.assets` 的**新增 id**(不是 diff 位置、也不是文件名)把新卡交给既有 `pendingResourceFocusRef` + `advanceFocusGeneration()` 裁决链。首次打开项目 / 切项目只登记基线、不聚焦;重命名不改 id、天然不触发;已有指向同一资源的聚焦意图时不重复挂(显式生成链路在提交时就已挂好)。被搜索条件挡住时继续复用既有的「清除搜索并定位」提示与动作。 - 影响范围:`apps/ai-game-creator-shell/src/view/project-development/useProjectResourceCanvasLayout.ts`(写意图增 `rederive` 标记、写策略分支、`rederiveNow`)、`.../index.tsx`(两个 hook 配置 + 一次性重派生 effect + 新素材聚焦 effect + 「整理画布」按钮)、`apps/ai-game-creator-shell/tests/resourceCanvasManualLayout.test.tsx`。不改 `manuallyPlaced` 语义、不改 sidecar 的 CAS / revision 协议与字段形状、不改卡片尺寸模型、不改「搜索不重排」合同、不改 Rust 资源图与 `dependencyDepth` 权威。