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
spec(automation): add an optional mode: 'inclusive' to DecisionConfigSchema — the contract half of #15429's ruling (edge-branched decisions become exclusive / first-match; "take every true edge" must be declared) #19867
③ — a ruled task, split out of #15429 because the ruling's own shape crosses a lane boundary.
Filed by the domain:services PM seat (seat post #6021, session_01AhQASwqJr2Z7XfGWUdvnbF). ⛔ Unlabelled, ⛔ ungraded, ⛔ unrouted — grading and routing belong to triage. ⛔ Not a claim.
Reader, and what they do: triage routes this card to the lane that owns packages/spec and grades it. That lane's execution seat adds the key. The domain:services seat then takes #15429's engine semantics and migration on top of it. This seat's lane carries a standing ⛔ on any packages/spec edit, which is why the contract half cannot ride #15429's PR here.
The ruling this carries out (not re-litigated here)
The maintainer ruled on #15429 on 2026-09-23 (triage record 5793803317, maintainer verbatim 「跟主流对齐」). Item 2 of that record:
The same record's routing note sets the split order:
按 spec 键先落 → 引擎语义 + os migrate meta 迁移同一个 PR 落 → 文档的顺序拆;⛔ 语义变更与迁移不能分开落地
What this card is, and is not
Is: an optional key on DecisionConfigSchema (packages/spec/src/automation/schemaless-node-config.zod.ts:409), working name mode, with values 'exclusive' (the default) and 'inclusive'. It comes with the .describe() text and the schema docblock rewritten to describe the two modes. Clause-②: yes (a new key on a published schema), so the PR goes through needs:contract-review.
Dedupe — query run by this seat, hit count including closed
Query (semantic, repo-scoped, closed included): decision node mode inclusive DecisionConfigSchema exclusive first match out-edges spec key → 3 hits, 0 duplicates. The hits were #15429 (the parent), #8593 (closed; dashboard component schema, unrelated) and #4027 (closed; node config keys validated at author time, adjacent but a different question).
③ — a ruled task, split out of #15429 because the ruling's own shape crosses a lane boundary.
Filed by the
domain:servicesPM seat (seat post #6021,session_01AhQASwqJr2Z7XfGWUdvnbF). ⛔ Unlabelled, ⛔ ungraded, ⛔ unrouted — grading and routing belong to triage. ⛔ Not a claim.Reader, and what they do: triage routes this card to the lane that owns
packages/specand grades it. That lane's execution seat adds the key. Thedomain:servicesseat then takes #15429's engine semantics and migration on top of it. This seat's lane carries a standing ⛔ on anypackages/specedit, which is why the contract half cannot ride #15429's PR here.The ruling this carries out (not re-litigated here)
The maintainer ruled on #15429 on 2026-09-23 (triage record 5793803317, maintainer verbatim 「跟主流对齐」). Item 2 of that record:
The same record's routing note sets the split order:
What this card is, and is not
DecisionConfigSchema(packages/spec/src/automation/schemaless-node-config.zod.ts:409), working namemode, with values'exclusive'(the default) and'inclusive'. It comes with the.describe()text and the schema docblock rewritten to describe the two modes.Clause-②: yes(a new key on a published schema), so the PR goes throughneeds:contract-review.os migrate metaconversion, the lint hint, or the pin-test rewrite. Those belong to A decision node with no declaredconfig.conditionstakes EVERY out-edge whose condition holds, in parallel — nothing enforces or warns that intended-exclusive edges partition #15429 and land together there, so no shipped flow ever sits in a window where its behaviour changed silently.config.conditionstakes EVERY out-edge whose condition holds, in parallel — nothing enforces or warns that intended-exclusive edges partition #15429 lands, the engine still takes every true edge whatevermodesays. Whoever takes this card should decide whether the docblock may say "first-match" before the engine does. The current docblock already claims "a plain BPMN exclusive gateway", and test(service-automation): pin the measured semantics of overlapping decision out-edge conditions #16408's pin measured that claim as false. That mismatch is the A decision node with no declaredconfig.conditionstakes EVERY out-edge whose condition holds, in parallel — nothing enforces or warns that intended-exclusive edges partition #15429 defect itself, so this card should not make it louder.Dedupe — query run by this seat, hit count including closed
Query (semantic, repo-scoped, closed included):
decision node mode inclusive DecisionConfigSchema exclusive first match out-edges spec key→ 3 hits, 0 duplicates. The hits were #15429 (the parent), #8593 (closed; dashboard component schema, unrelated) and #4027 (closed; node config keys validated at author time, adjacent but a different question).Generated by Claude Code