(Sorry for repeating this issue, because in the former one (https://issues.omg.org/issues/lists/unclassified#issue-59447) I misspelled my email, sry again)
Problem
The published SysML 2.0 document contains an apparent inconsistency between a language-description example in informative Clause 7 and the normative language definitions in Clause 8. Clause 7 states that it is informative, while also stating that it is intended to be precise and consistent with the normative specification. This report therefore asks OMG to reconcile the published example with the normative grammar; it does not treat every sentence in Clause 7 as an independent normative production.
Published OnOff6 example
In Clause 7.18.3, page 122 of formal/26-03-02, the published OnOff6 language-description example contains the following declaration inside a state definition body:
state def OnOff6 {
port commPort;
entry; then off;
state off;
accept TurnOn via commPort then on;
accept Abort via commPort then stop;
state on;
accept after 5[min] then done;
action stop terminate;
}
Normative production and state-body dispatch
Clause 8.2.2.17.6, page 183, defines TerminateNode as follows:
TerminateNode : TerminateActionUsage =
OccurrenceUsagePrefix ActionNodeUsageDeclaration?
'terminate' ( ownedRelationship += NodeParameterMember )?
ActionBody
However, Clause 8.2.2.18.1, pages 184-185, defines StateBodyItem without an ActionNode or TerminateNode alternative. The corresponding published 2026-05 Release KEBNF is available at StateBodyItem in SysML-textual-bnf.kebnf and is:
StateBodyItem : Type =
NonBehaviorBodyItem
| ( ownedRelationship += SourceSuccessionMember )?
ownedRelationship += BehaviorUsageMember
( ownedRelationship += TargetTransitionUsageMember )*
| ownedRelationship += TransitionUsageMember
| ownedRelationship += EntryActionMember
( ownedRelationship += EntryTransitionMember )*
| ownedRelationship += DoActionMember
| ownedRelationship += ExitActionMember
BehaviorUsageMember can reach ActionUsage, whereas TerminateNode is an alternative of ActionNode, not an alternative of the ActionUsage production. An action body reaches action nodes through ActionBehaviorMember and ActionNodeMember, but StateBodyItem has no corresponding dispatch path. Consequently, the TerminateNode production exists but is unreachable for action stop terminate; in a state body.
Independent implementation evidence
The official SysML v2 Pilot Implementation defines TerminateNode at SysML.xtext TerminateNode, while its StateBodyItem alternatives at SysML.xtext StateBodyItem do not include a general ActionNode or TerminateNode path. The ANTLR grammar generated by daltskin/sysml-v2-grammar at commit 7292dc39983a6d263d14f8f6689de0f3b35db5eb (v2026.05.0) likewise defines terminateNode at SysMLv2Parser.g4 terminateNode, but its stateBodyItem dispatch at SysMLv2Parser.g4 stateBodyItem does not make that production reachable for the OnOff6 declaration. This indicates that the observed problem is not specific to an ANTLR conversion in one downstream project: the published example, the normative textual grammar, and the official executable grammar are not aligned.
Duplicate and related-issue boundary
The closest open issues found during duplicate checking are SYSML21-158, Control nodes missing from textual notation for states, and SYSML21-367, No support for control nodes in Statemachines textual notation. Both currently discuss fork, join, decision, and merge control nodes. TerminateNode is an ActionNode but not a ControlNode, and neither issue mentions terminate actions or OnOff6. They may eventually share a grammar-dispatch resolution, but the concrete inconsistency reported here is not covered by their current descriptions.
Other terminate-related records are distinct: SYSML2_-44 concerns the semantic introduction and mapping of terminate actions; SYSML2_-296 concerns the graphical notation grammar; the closed SYSML2_-487 concerns displaying ordinary action nodes in the graphical stateflow view; SYSML21-28 concerns coordination of Actions::TerminateAction documentation; and SYSML21-635 concerns graphical notation for a terminate parameter. None addresses the textual StateBodyItem reachability of TerminateNode for action stop terminate; in OnOff6.
Requested clarification and correction
Please clarify and correct the relationship between the OnOff6 example, TerminateNode, StateBodyItem, and StateActionUsage so that the published example has an unambiguous, conforming textual parse and an explicitly defined abstract-syntax classification. In particular, please specify whether state bodies are intended to admit this terminate action through StateActionUsage, through a general ActionNode/TerminateNode alternative, or through another production. If the example is not intended to be legal in a state body, please revise the example and the surrounding textual description instead.
As a practical conformance criterion, the resolved specification should make the following minimal example, reduced from the published OnOff6 example, parse without a syntax error or error recovery and should identify the declaration as the intended terminate-action usage:
state def OnOff6 {
action stop terminate;
}
This issue is reported against the published SysML 2.0 specification. The daltskin/sysml-v2-grammar repository may need a follow-up compatibility or generator patch after the OMG resolution, but the primary request here is for OMG to resolve the specification inconsistency.
Evidence