由分诊座位按跨座位转移协议自 objectui#3500 拆出(contract-first:spec 面先行)。⛔ 未指派。
Part of objectstack-ai/objectui#3500
事实(消费方实测,objectui origin/main)
packages/spec/src/ui/app.zod.ts 的 AppContextSelectorSchema 声明 persist?: 'query' | 'session' | 'none'(默认 'query')。唯一消费方 objectui packages/app-shell/src/layout/ContextSelectors.tsx 对三个取值的实际区分是:
:162 — if (sel.persist === 'none') continue; 只跳过「从 sessionStorage 重新施加」那一个 effect;
setValue 无论取值如何,同时写 sessionStorage(objectui-ctx-${appName}-${sel.id})与 URL query 参数。
净结果:'none' 并没有「不持久化」(它照样写两处),'session' 与 'query' 之间没有任何行为差别。三值枚举里只有一值有部分效果。
为什么转到 spec 座位
这是 ADR-0049「声明了就得兑现」的 declared-but-unenforced 形状,两条出路的归属不同:
- enforce:objectui 按声明兑现三个取值(
'none' 两处都不写、'session' 只写 sessionStorage、'query' 只写 URL);spec 侧不变,单纯是消费侧补齐 —— 这一半可留在 objectui。
- remove:按 enforce-or-remove 把
persist 从 AppContextSelectorSchema 收掉 —— 移除一个已发布的可作者化键,属 packages/spec 单一所有者面,并牵动 ADR-0087 登记与生成物基线(spec-property-retirement playbook)。
选哪条是维护者的裁决(是否真有作者需要「不持久化 / 只在会话内持久化」的作用域选择器),故本单进决策箱而非直接入队。
PM 倾向(供裁决,不构成裁决)
倾向 enforce:三个取值的语义直白、消费侧改动小(一个函数内的三分支),且「作用域选择器要不要进 URL」对可分享链接是真实的作者诉求。若维护者判定无人需要,则走 remove,由 spec 座位按退役流程做,objectui 侧同批删消费代码。
前置依赖
objectui#3500 的第一半(URL 作用域键硬编码为 'package'、按 sel.id 派生 + Studio ?package= 迁移)与本单同文件(ContextSelectors.tsx),已在 objectui 队列。裁决落地时须与它串行,先后顺序由两边座位按落地时点定。
参考
Generated by Claude Code
由分诊座位按跨座位转移协议自 objectui#3500 拆出(contract-first:spec 面先行)。⛔ 未指派。
Part of objectstack-ai/objectui#3500
事实(消费方实测,objectui
origin/main)packages/spec/src/ui/app.zod.ts的AppContextSelectorSchema声明persist?: 'query' | 'session' | 'none'(默认'query')。唯一消费方 objectuipackages/app-shell/src/layout/ContextSelectors.tsx对三个取值的实际区分是::162—if (sel.persist === 'none') continue;只跳过「从 sessionStorage 重新施加」那一个 effect;setValue无论取值如何,同时写sessionStorage(objectui-ctx-${appName}-${sel.id})与 URL query 参数。净结果:
'none'并没有「不持久化」(它照样写两处),'session'与'query'之间没有任何行为差别。三值枚举里只有一值有部分效果。为什么转到 spec 座位
这是 ADR-0049「声明了就得兑现」的 declared-but-unenforced 形状,两条出路的归属不同:
'none'两处都不写、'session'只写 sessionStorage、'query'只写 URL);spec 侧不变,单纯是消费侧补齐 —— 这一半可留在 objectui。persist从AppContextSelectorSchema收掉 —— 移除一个已发布的可作者化键,属packages/spec单一所有者面,并牵动 ADR-0087 登记与生成物基线(spec-property-retirementplaybook)。选哪条是维护者的裁决(是否真有作者需要「不持久化 / 只在会话内持久化」的作用域选择器),故本单进决策箱而非直接入队。
PM 倾向(供裁决,不构成裁决)
倾向 enforce:三个取值的语义直白、消费侧改动小(一个函数内的三分支),且「作用域选择器要不要进 URL」对可分享链接是真实的作者诉求。若维护者判定无人需要,则走 remove,由 spec 座位按退役流程做,objectui 侧同批删消费代码。
前置依赖
objectui#3500 的第一半(URL 作用域键硬编码为
'package'、按sel.id派生 + Studio?package=迁移)与本单同文件(ContextSelectors.tsx),已在 objectui 队列。裁决落地时须与它串行,先后顺序由两边座位按落地时点定。参考
content/docs/ui/apps.mdx已加「One scope per app today」警示 callout)Generated by Claude Code