You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
<ConditionBuilderlabel="Run only when (optional CEL)"value={typeofdraft.condition==='string' ? (draft.conditionasstring) : ''}onCommit={(v)=>onPatch({condition: v||undefined})}.../>
Activity
os-zhuang commentedon Aug 2, 2026
裁决:B,并且
needs-user-decision撤掉 —— 读过 spec 之后这不再是个偏好题本单把写侧列为「需要决策、不宜由实现者猜」是对的。但决策所依赖的那个事实(「确认
meta在这条路径上是否真的会被保留」)是可查的,查完之后 A 不是「另一个合理选项」,而是会静默损坏数据。packages/spec/src/shared/expression.zod.ts:42-83:A 会毁掉三样东西,
meta是其中最不重要的一样选项 A 是「提交裸字符串,让 spec 的 pipe 去规范化」。但那个 pipe 是
z.string().transform(source => ({ dialect: 'cel', source }))—— 它把 dialect 硬编码成cel。于是:dialect被改写。一条存成{ dialect: 'template', source: … }或{ dialect: 'cron', … }的 hook 条件,作者在这个检查器里编辑一次,就变成cel。这不是丢失附属信息,是把守卫换成另一种语言去求值——本单描述的「作者从没见过原来那条」在这里升级为「作者以为自己只改了表达式,实际上换了求值引擎」;ast被丢弃。按文件里写明的 Phase 2 路线,ast会成为构建产物里的权威表示、source退为 round-trip/debug。写侧只发裸字符串的路径在那之后是直接扔掉权威表示;meta(rationale/generatedBy)被丢弃——注释写明它的用途正是「AI 生成的产物,让审计/解释工具有东西可渲染」。本仓的 AI 作者路线上,这恰恰是最常被填、也最没人会手工补回来的一份。三条都是静默的:改完能存、能跑、schema 校验通过。这正是 ADR-0049 / ADR-0078 那一族的失效形态。
所以 B,但要补一条本单没写的:
ast必须丢,不能跟着保留「保留原信封的
dialect/meta,只替换source」的字面执行会连ast一起留下,而那个ast是从旧 source 编译来的。留着它,在 Phase 2 之后就是:引擎按旧 AST 求值,界面显示新 source——比现在这个 bug 更难查。准确的写侧规则:
source被编辑时dialect'cel')metasourceastobjectstack compile会重新填)丢弃
ast后refine仍满足(source在)。清空条件时照旧提交condition: undefined。四轴对照
meta.generatedBy的信封;A 让「人改一个字」等于「抹掉这条守卫的来历」。ast的 Phase 2 路线已经写在 spec 里,写侧现在就不该建立一条会丢弃它的路径。cron/template的 hook 条件今天就可表达,dialect 改写是当下就能踩的。施工要求
{ dialect, source }信封形式的边守卫当成「没有条件」 #3216 沉淀下来的那一个读法,不得出现第四份typeof c === 'string';ConditionBuilder的其余调用点一并查,同族的按同一规则修;source;② 编辑后dialect/meta原样保留;③ 原来带ast的,编辑后ast没了;④dialect: 'template'的条件编辑后仍是template(这条是 A/B 的分界线,必须有);{ dialect, source }信封形式的边守卫当成「没有条件」 #3216 的做法:不手写信封,把作者输入喂给HookSchema.parse再断言,固件因此不可能与 spec 漂移。维护者若不同意,推翻即可——但请注意 A 的代价是 dialect 改写,不只是丢
meta。Generated by Claude Code
os-zhuang commentedon Aug 2, 2026
认领:PM 循环第 6 轮(分片:objectui 整仓)
会话:
session_01PRJtkgUAaVG11FsJQbvZWA分支:
claude/issue-3218-hook-inspector-expression-envelopeWorktree:
objectui-issue-3218写侧按上一条评论的裁决 B(含
ast必须丢弃那一条)执行,needs-user-decision已撤。同轮并行:#3221(
packages/fields)、#3223(packages/layout)。本条在packages/app-shell/src/views/metadata-admin/,三者文件宇宙不相交。只读引用previews/flow-canvas-layout.ts的conditionText可以,不要改它(#3216 刚把它定为唯一读法)。Generated by Claude Code
fix(app-shell): inspectors read and write the expression envelope (ob…
fix(app-shell): page block inspector authors `visibleWhen`, not `hidd…