Filed unassigned,来自 #3314 的只读排查(为定 visible 归一化判据而通读 ActionEngine)。只记录发现。
现象
packages/core/src/actions/ActionEngine.ts:
1. 这条 API 是 dormant 的。 git grep addMapping -- packages apps examples(排除
CHANGELOG)只命中定义处与 packages/core/src/actions/__tests__/ActionEngine.test.ts
里的 4 处测试调用 —— 没有任何生产代码注册过 event→action 映射,dispatch() 也就
没有真实调用方。
2. dispatch() 的 condition 求值与 visible 的契约有两点不一致:
if (mapping.condition) {
const evaluator = this.runner.getEvaluator();
const shouldRun = evaluator.evaluateCondition(mapping.condition);
if (!shouldRun) continue;
}
为什么是 observation-class
零生产调用方,今天没有用户能碰到这两点中的任何一个。把它当缺陷直接「修」反而是给
一条没人用的 API 增加行为面;真正要先回答的问题多半是这条 event-mapping API 要不要留
(留 → 契约对齐 visible:throwOnError + 接受 Expression 信封;不留 → 按
enforce-or-remove 退役,连同 ActionMapping 类型与那 4 个测试)。
所以只记录,不带 pm:queue,留给 triage 决定方向。
Filed unassigned,来自 #3314 的只读排查(为定
visible归一化判据而通读ActionEngine)。只记录发现。现象
packages/core/src/actions/ActionEngine.ts:1. 这条 API 是 dormant 的。
git grep addMapping -- packages apps examples(排除CHANGELOG)只命中定义处与
packages/core/src/actions/__tests__/ActionEngine.test.ts里的 4 处测试调用 —— 没有任何生产代码注册过 event→action 映射,
dispatch()也就没有真实调用方。
2.
dispatch()的 condition 求值与visible的契约有两点不一致:throwOnError,所以谓词抛错时 fail-OPEN(动作照跑);同一个类里getActionsForLocation的visible是明确 fail-closed 的(谓词不可求值就隐藏)。ActionMapping.condition的类型是string,拿不到{ dialect: 'cel', source }信封,因此永远走 legacy JS 求值 —— 正是 ActionEngine.getActionsForLocation 把 CEL 信封塌回 legacy JS 求值路径,与每个渲染器的判决不一致 #3314 刚在
visible上修掉的那条路径。裸串在
evaluateCondition里会被当作整条表达式求值(不是 CEL 引擎)。为什么是 observation-class
零生产调用方,今天没有用户能碰到这两点中的任何一个。把它当缺陷直接「修」反而是给
一条没人用的 API 增加行为面;真正要先回答的问题多半是这条 event-mapping API 要不要留
(留 → 契约对齐
visible:throwOnError+ 接受 Expression 信封;不留 → 按enforce-or-remove 退役,连同
ActionMapping类型与那 4 个测试)。所以只记录,不带
pm:queue,留给 triage 决定方向。