Skip to content

The schemaless nodes' designer forms live only in objectui's hand-written table, and nothing reconciles them — script offers three broken options and cannot author the one that works #4278

Description

@os-zhuang

#4045 关闭时留下的覆盖边界,以及边界外查实的第一个实例。

边界在哪

#4045 建立的对账是「描述符发布的 configSchema ↔ 执行器读了什么」。五个内置节点有意不发布 configSchemaconfig-schemas.test.ts 钉住了这一点,各有记录在案的理由):decisionscriptsubflowwaitconnector_action

对这五个,平台侧没有任何声明可供对账 —— 但作者在 Studio 里看到的表单并没有消失,它来自 objectui 的手写表 flow-node-config.tsFLOW_NODE_CONFIG。也就是说契约还在,只是搬到了另一个仓库的另一份手写清单里,而那份清单和执行器之间没有任何对账

waitconnector_action 的兄弟块(waitEventConfig / connectorConfig)在 #4161 / #4210 里逐个核过。其余三个没有。查了 script,是漂的。

script —— 已核实,用户可见

objectui flow-node-config.tsscript 组 vs screen-nodes.tsscript 执行器实际读的键:

表单提供 执行器读 判定
outputVariables(复数,stringList) 声明而不读
outputVariable(单数,string,screen-nodes.ts:245 读而不声明
function:181 读而不声明
inputs:244 读而不声明
actionType 选项 code/email/sms/notification 内置集合 SCRIPT_BUILTIN_ACTION_TYPES = { 'email', 'slack' }:34 三项对不上

逐条推到运行时后果:

  1. outputVariables 没人读。 作者在「Output variables」里填的名字不产生任何效果 —— Console: screen-flow Submit never calls the resume endpoint — every screen flow is un-completable from the UI #3528 的同一形状(填了 Studio 字段,什么都没发生)。执行器绑定输出用的是单数 outputVariable
  2. smsnotification 必然失败。 二者都不在内置集合里,于是被当作函数名去 resolveFunction('sms'),解析不到就失败整步,错误信息写着 "'sms' is not a built-in action (email, slack) and no function named 'sms' is registered" —— 报错里列的两个选项,表单一个提供(email)、一个不提供(slack)。
  3. 默认选项 code 是 no-op。 执行器自己警告得很清楚:内联 config.script 不被执行(没有服务端 JS 沙箱),并指路「改用注册函数 + config.function」。
  4. function / inputs / outputVariable 这条唯一能工作的路径,表单里根本没有。

净效果:Studio 里 script 节点能配的四个 actionType一个是 no-op、两个运行时必然失败,唯一真能跑的调用函数路径无法授权。

建议

不建议直接照搬 #4045 的做法(那需要给这些节点发布 configSchema,而它们不发布是有理由的 —— 见 config-schemas.test.tsdecision 的虚拟 Target 列由边推导、script 的表单按 actionType 条件切换、subflow/wait 的契约在顶层字段,发布一份部分 schema 会丢掉这些编辑器)。

两个方向,成本递增:

  1. 先修 script 本身(独立、可立即做):outputVariablesoutputVariable 的处置(按 ADR-0087 D2 判断是改名还是删)、actionType 选项与 SCRIPT_BUILTIN_ACTION_TYPES 对齐(补 slacksms/notification 要么实现要么撤下)、把 function/inputs 加进表单。
  2. 给这条缝一个 ratchetA designer configSchema and the keys its executor actually reads are still unreconciled — notify honours cfg.source, which no schema declares #4045 的对账之所以成立,是因为两侧都在同一个仓库、且 Zod 的键集可机读。这里跨仓库,objectui 的 FLOW_NODE_CONFIG 也是手写字面量。可行的形态是把执行器派生的 Zod 键集发布出去(它们已经在 @objectstack/spec 里了),由 objectui 侧加一条测试比对 —— objectui 已经消费 @objectstack/spec,所以这条边本来就存在。

另外查一下 subflowdecision,本 issue 只核实了 script

Related

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions