Skip to content

Flow 边检查器能产出缺 dialectcondition —— 写出的正是服务端自己 schema 会拒绝的形状 #3171

Description

@os-zhuang

批次 3 燃尽(objectui#3169 / objectstack#4115)时对读 FlowEdge 与 spec 同名导出发现,记录在案但有意未在该 PR 修——它改变写进元数据的内容,不该搭在一个符号派生的 PR 里。

缺陷

Flow 设计器的边检查器可以构造出只有裸表达式、不带 dialectcondition。而 ADR-0089 把 dialect 定为必填,服务端的 schema 会拒绝这种形状。

也就是说:设计器里能正常编辑、保存、看起来一切正常的一条边,提交到服务端会被拒——失败发生在离编辑现场最远的地方,而且用户没有任何线索知道是哪条边、缺了什么。

为什么值得单独修

这是"设计器写出的元数据与服务端契约不一致"这一类,和 objectstack#4115 的撞名符号是同一个根:objectui 侧有一份自己的形状理解,与 spec 各自演化。区别在于撞名符号的后果是类型信息失真,这个的后果是运行时被拒

建议的修法

在边检查器构造 condition 的位置补上 dialect(取 ADR-0089 的规范默认值),并加一条闸门断言:任何由检查器产出的 condition 都能通过 spec 的 schema 解析。闸门比修复本身重要——没有它,下一次 spec 收紧同类字段会再次静默漂移。

同时建议排查是否还有别的"设计器产出 → spec 拒绝"的形状,方法可参考 objectstack#4115 里记过的线索:grep "as any).<field>" 能找出"运行时已适配、契约未跟上"的现场。

Metadata

Metadata

Assignees

No one assigned

    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