Skip to content

observation: UnifiedSidebar 的 nav-order/pin 存储键在 home 上下文解析成「第一个 app」,|| 'home' 兜底实际不可达 #3631

Description

@yinlianghui

越界发现,记录于 #3609 / PR #3630(把 /home 的 Administration 组改由 NavigationRenderer 渲染)期间。按纪律只报不改,单独立单,未认领

观察类(observation-class):今天没有用户会碰到,是休眠代码 + 一处不可达兜底。标 finding,不入队,留给 PM 分诊定级。

实测基线:origin/main @ 8d5418e59

观察

packages/app-shell/src/layout/UnifiedSidebar.tsx

const activeApp = matchAppBySegment(apps.filter(a => a.active !== false), activeAppName || currentAppName) || activeApps[0];
…
const { applyOrder, handleReorder } = useNavOrder(activeApp?.name || 'home');

useNavOrder(appName) 把顺序存进 objectui-nav-order-${appName}。两点:

  1. || 'home' 这个兜底不可达(对结果的消费者而言)。 applyOrder/applyPins 的产物只经 processedNavigation 流向 app 分支NavigationRenderer。而 app 分支的渲染条件正是 context === 'app' && activeApp —— activeApp 为空时这条分支根本不渲染。所以凡是用到排序结果的时刻,activeApp?.name 必然有值,字面量 'home' 永远不会成为存储键。它读起来像「home 上下文有自己的一套排序」,其实没有。

  2. 真要用起来,键是错的。 home 上下文里 activeApp 会解析成 activeApps[0] —— 部署里第一个 app,而不是 home。所以一旦有人给 home 分支接上 enablePinning / enableReorder(PR fix(app-shell): /home 的 Administration 组改由 NavigationRenderer 渲染,9 个系统管理入口恢复可达 (#3609) #3630 特意没有接,理由写在调用点注释里),home 导航就会去吃那个 app 存下的 __root__ 根排序;换个 app 排到第一位,home 侧栏的顺序跟着变。

换句话说:当前是「不可达的兜底」,接通之后是「跨上下文串键」。两种状态都不对,只是前者没有症状。

为什么现在只记录

/home 的导航是内建的固定簇(Home / Documentation + 管理员的 9 项 Administration 组),不是用户可编排的元数据;要不要让它可拖排、可 pin,是独立的产品决定,不属于 #3609「把组展开」的范围。#3630 因此维持现状并把理由写进注释,避免下一个人以为是遗漏而顺手接上。

可能的方向(留给分诊)

  • 若结论是 home 导航不该可排序/可 pin:把 useNavOrder(...) 的调用挪进只有 app 分支才求值的位置,删掉误导性的 || 'home',让「app 专属」在代码里显形;
  • 若结论是可排序:存储键必须按上下文取(context === 'app' ? activeApp?.name : 'home'),而不是按 activeApp,否则就是上面第 2 条。

关联

已就关键词(useNavOrder / objectui-nav-order / UnifiedSidebar + storage key / sidebar nav order pin)搜过本仓开放 issue 与 PR,无同源单。


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions