设置页新增的「工具」节按项目分区显示,它认项目的方式和会话页不是同一套:会话页认服务端给的会话信息,设置页认侧栏那份项目清单。多数情况两者一致,但侧栏会过滤掉一些会话(已归档的、直接以用户主目录为根的、非本机 sidecar 服务上的)。撞上这些时,你在会话页里用得好好的,打开设置页的「工具」节却会看到「先打开一个项目」,设不了。它不会把设置写错到别的项目上 —— 拒绝而不是猜。不修的话,这些会话下改不了工具权限,得先切到一个正常项目。
Impact
packages/ui-mac/src/renderer/alpha-ui/settings-directory.ts 经侧栏 store(sidebar/use-projects.ts)解析目录;会话页用 serverSync().session.data.info[id](alpha-session-workspace.tsx:48)。被 worktree-filter.ts:15-19 过滤或不在 sidecar server 上的会话,两者不一致 ⇒「工具」节只剩「先打开一个项目」态。发现于 PR #1358 第 2 轮审计的 out-of-round 观察(2026-09-18),判为 fail-closed、不拦合并。
Expected / Actual
- Expected:会话页能用的会话,设置页「工具」节就能解析出它的项目。
- Actual:侧栏清单过滤掉的会话解析为 undefined,整节退化为「先打开一个项目」。
Fix acceptance
- 两个面用同一份目录真相(或设置页在侧栏 store 缺失时回落到会话信息);一条测试覆盖「侧栏过滤掉的会话」这一格,改前红。
- 不得为此放宽 fail-closed:解析不出目录时仍然是拒绝,不得落到默认项目。
Boundary
packages/ui-mac/src/renderer/alpha-ui/settings-directory.ts 与其数据来源;必要时 renderer/index.tsx 的装配。
Out of scope
侧栏过滤规则本身(worktree-filter.ts);#1130 已交付的其余部分。
设置页新增的「工具」节按项目分区显示,它认项目的方式和会话页不是同一套:会话页认服务端给的会话信息,设置页认侧栏那份项目清单。多数情况两者一致,但侧栏会过滤掉一些会话(已归档的、直接以用户主目录为根的、非本机 sidecar 服务上的)。撞上这些时,你在会话页里用得好好的,打开设置页的「工具」节却会看到「先打开一个项目」,设不了。它不会把设置写错到别的项目上 —— 拒绝而不是猜。不修的话,这些会话下改不了工具权限,得先切到一个正常项目。
Impact
packages/ui-mac/src/renderer/alpha-ui/settings-directory.ts经侧栏 store(sidebar/use-projects.ts)解析目录;会话页用serverSync().session.data.info[id](alpha-session-workspace.tsx:48)。被worktree-filter.ts:15-19过滤或不在 sidecar server 上的会话,两者不一致 ⇒「工具」节只剩「先打开一个项目」态。发现于 PR #1358 第 2 轮审计的 out-of-round 观察(2026-09-18),判为 fail-closed、不拦合并。Expected / Actual
Fix acceptance
Boundary
packages/ui-mac/src/renderer/alpha-ui/settings-directory.ts与其数据来源;必要时renderer/index.tsx的装配。Out of scope
侧栏过滤规则本身(
worktree-filter.ts);#1130已交付的其余部分。