Skip to content

[Decision] A decision node that declares both a conditions list and mode: refuse it at authoring, give it a meaning, or leave it inert #20168

Description

@objectstack-fleet

Ruled: 5856786357 · letter A · 2026-09-27T14:49Z

This card carries the one sub-question left open by #15429's ruling (issuecomment-5793803317, maintainer 「跟主流对齐」). #15429 keeps the engine traversal, the os migrate meta conversion, the lint hint and the pin rewrite. #19867 / PR #20162 carry the spec key. Filed by the domain:services seat (#6021, session_01TEah6PeJGjxJfbHaySJjLQ) on the spec seat's hand-off: #15429 comments 5852506105 (item 2) and 5852576993 (item 1). ⛔ Not a claim.

Background

Why it cannot wait

The spec seat's contract review (5852563897, relayed in 5852576993): if a release ships PR #20162 as it stands and this combination is refused later, that refusal is a narrowing of a published accept set (Clause-②: no (narrowing) plus an ADR-0087 disposition). Decided before the next Version Packages release, it costs neither. ⛔ This seat does not ask for the release to be held; the release stays the maintainer's.

Governing text

Premises, each with its re-check

  1. PR feat(spec): DecisionConfigSchema declares an optional mode: 'exclusive' | 'inclusive' (contract half of the #15429 ruling) #20162 accepts mode beside conditions. Re-check: read DecisionConfigSchema in packages/spec/src/automation/schemaless-node-config.zod.ts at the PR's head (or on main once merged) for a refinement naming both keys. At 5fbb7ed86a: none.
  2. Nothing parses DecisionConfigSchema when a flow is registered, so a schema-only refusal is not yet an authoring-time refusal. Re-check: git grep -n "DecisionConfigSchema\|SCHEMALESS_NODE_CONFIG_SCHEMAS" origin/main -- 'packages/**/*.ts' ':!**/*.test.ts' ':!packages/spec/**' → 3 hits on 84880f9224, all in packages/metadata-protocol/src/reference-sites.ts (a reference walk, not a parse). Control: the schema file itself → 4. Radius: TypeScript under packages/ by these two names. A parse reached through another name is outside it. The spec seat independently reports the config as export-only (5852506105).
  3. Zero authored uses today: mode is not on main, so no flow can carry it.

Question

When a decision node declares a conditions list and mode, what does the platform do?

Options

option what happens what an author sees
A — refuse The schema refines DecisionConfigSchema: mode together with a non-empty conditions list is refused, with a prescription (drop mode, or move the branches onto edges). The reader #15429 adds applies the same parse at registration. A loud error on save / validate that names the fix.
B — give it a meaning mode: 'inclusive' on a conditions list runs every entry that holds (n8n Switch's "send to all matching outputs"). A second branching semantics to learn; engine and migration work beyond the ruling.
C — leave it inert Accepted and ignored, as PR #20162 stands. mode: 'inclusive' looks like it works and silently does nothing.

四维分析(业务立场)

  • ① 项目长远合理性:A 让契约闭合 ——「mode 只属于按连线分支的判断节点」一句话说清。日后真有需求要 B,从 A 放开是放宽(minor、不破坏);从 C 收回是收窄(破坏性、要 ADR-0087 处置)。主流平台里 BPMN 把排他与包容做成两种不同网关,Salesforce Decision 永远第一个命中;n8n Switch 有"全部命中"开关,但那是有人用才加的。
  • ② 实际业务拉动:零。mode 还没进 main,没有任何流程写过它;hotcrm#1555 那次事故是按连线分支的判断节点,不是条件列表。⇒ 没有拉动就不该有 B。
  • ③ 防 AI 犯错:C 最坏 —— AI 写 conditions + mode: 'inclusive' 以为会全走,运行时静默只走一条,与 hotcrm#1555 同类的"声明与执行不一致"。A 在保存时响亮拒绝并给出改法;B 多一套语义、多一个出错面。
  • ④ 创业阶段不扩散:A 不新增能力;B 新增一套无人要的能力;C 留下一个永久要维护、却不干活的键。

Prior rulings read: mode.*inclusive|inclusive gateway → 0 hits (control exclusive gateway → 1); ADR none; thread: #15429 5793803317, 5852506105, 5852576993.

推荐 A(回退项:B,仅当出现实测拉动)。只看①选 A;②③④ 是否翻转:否。
置信缺口:本席未读 objectui 设计器表单是否会在条件列表节点上展示 mode(协调卡 objectui#10750 已存在);也未测第三方宿主是否绕过注册路径直接执行判断节点。

Execution per answer

Related: #15429 · #19867 / PR #20162 · objectui#10750.

Dedupe: semantic search in this repository (closed included) for decision node mode inclusive declared alongside config.conditions refuse or inert → 6 hits (#19867, #15429, #17493, #17322, #14288, #7545). None is a card on this combination.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions