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
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
选 sms 或 notification 必然失败。 二者都不在内置集合里,于是被当作函数名去 resolveFunction('sms'),解析不到就失败整步,错误信息写着 "'sms' is not a built-in action (email, slack) and no function named 'sms' is registered" —— 报错里列的两个选项,表单一个提供(email)、一个不提供(slack)。
#4045 关闭时留下的覆盖边界,以及边界外查实的第一个实例。
边界在哪
#4045 建立的对账是「描述符发布的
configSchema↔ 执行器读了什么」。五个内置节点有意不发布configSchema(config-schemas.test.ts钉住了这一点,各有记录在案的理由):decision、script、subflow、wait、connector_action。对这五个,平台侧没有任何声明可供对账 —— 但作者在 Studio 里看到的表单并没有消失,它来自 objectui 的手写表
flow-node-config.ts的FLOW_NODE_CONFIG。也就是说契约还在,只是搬到了另一个仓库的另一份手写清单里,而那份清单和执行器之间没有任何对账。wait和connector_action的兄弟块(waitEventConfig/connectorConfig)在 #4161 / #4210 里逐个核过。其余三个没有。查了script,是漂的。script—— 已核实,用户可见objectui
flow-node-config.ts的script组 vsscreen-nodes.ts里script执行器实际读的键:outputVariables(复数,stringList)outputVariable(单数,string,screen-nodes.ts:245)function(:181)inputs(:244)actionType选项code/email/sms/notificationSCRIPT_BUILTIN_ACTION_TYPES = { 'email', 'slack' }(:34)逐条推到运行时后果:
outputVariables没人读。 作者在「Output variables」里填的名字不产生任何效果 —— Console: screen-flow Submit never calls the resume endpoint — every screen flow is un-completable from the UI #3528 的同一形状(填了 Studio 字段,什么都没发生)。执行器绑定输出用的是单数outputVariable。sms或notification必然失败。 二者都不在内置集合里,于是被当作函数名去resolveFunction('sms'),解析不到就失败整步,错误信息写着 "'sms' is not a built-in action (email, slack) and no function named 'sms' is registered" —— 报错里列的两个选项,表单一个提供(email)、一个不提供(slack)。code是 no-op。 执行器自己警告得很清楚:内联config.script不被执行(没有服务端 JS 沙箱),并指路「改用注册函数 +config.function」。function/inputs/outputVariable这条唯一能工作的路径,表单里根本没有。净效果:Studio 里 script 节点能配的四个
actionType,一个是 no-op、两个运行时必然失败,唯一真能跑的调用函数路径无法授权。建议
不建议直接照搬 #4045 的做法(那需要给这些节点发布
configSchema,而它们不发布是有理由的 —— 见config-schemas.test.ts:decision的虚拟 Target 列由边推导、script的表单按actionType条件切换、subflow/wait的契约在顶层字段,发布一份部分 schema 会丢掉这些编辑器)。两个方向,成本递增:
script本身(独立、可立即做):outputVariables→outputVariable的处置(按 ADR-0087 D2 判断是改名还是删)、actionType选项与SCRIPT_BUILTIN_ACTION_TYPES对齐(补slack,sms/notification要么实现要么撤下)、把function/inputs加进表单。configSchemaand the keys its executor actually reads are still unreconciled —notifyhonourscfg.source, which no schema declares #4045 的对账之所以成立,是因为两侧都在同一个仓库、且 Zod 的键集可机读。这里跨仓库,objectui 的FLOW_NODE_CONFIG也是手写字面量。可行的形态是把执行器派生的 Zod 键集发布出去(它们已经在@objectstack/spec里了),由 objectui 侧加一条测试比对 —— objectui 已经消费@objectstack/spec,所以这条边本来就存在。另外查一下
subflow和decision,本 issue 只核实了script。Related
configSchemaand the keys its executor actually reads are still unreconciled —notifyhonourscfg.source, which no schema declares #4045 —— configSchema ↔ 执行器对账(已关闭),本 issue 是它的覆盖边界外config.function作为 canonical 调用引用的来源