SysML 2.1b1 RTF Avatar
  1. OMG Issue

SYSML21 — State do/entry/exit action derivations return the StateSubactionMembership instead of its action

  • Key: SYSML21-707
  • Status: open  
  • Source: Diversitas Systems Engineering Ltd ( Geoffrey Tullener)
  • Summary:

    In 8.3.18.5 StateDefinition and 8.3.18.6 StateUsage, the six constraints deriveStateDefinitionDoAction, deriveStateDefinitionEntryAction, deriveStateDefinitionExitAction, deriveStateUsageDoAction, deriveStateUsageEntryAction and deriveStateUsageExitAction derive the StateSubactionMembership itself, not the action it owns.

    Each constraint's description says, for example for deriveStateUsageDoAction: "The doAction of a StateUsage is the action of the owned StateSubactionMembership with kind = do." The OCL, however, ends with:

    if doMemberships->isEmpty() then null
    else doMemberships->at(1)
    endif
    

    where doMemberships : Sequence(StateSubactionMembership). The derived properties doAction, entryAction and exitAction are typed ActionUsage, and a StateSubactionMembership is not an ActionUsage, so the OCL does not type-check. The same pattern occurs in all six constraints.

    The pilot implementation computes the action, consistent with the descriptions (UsageUtil.getStateSubaction maps each StateSubactionMembership to its action). The six constraints are unchanged in the SysML 2.1 Beta 2 specification (Release 2026-07).

    Proposed resolution

    In each of the six constraints, replace the final at(1) with at(1).action, using StateSubactionMembership::action (8.3.18.4). For example, deriveStateUsageDoAction becomes:

    doAction =
        let doMemberships : Sequence(StateSubactionMembership) =
            ownedMembership->
                selectByKind(StateSubactionMembership)->
                select(kind = StateSubactionKind::do) in
        if doMemberships->isEmpty() then null
        else doMemberships->at(1).action
        endif
    

    and likewise for entryAction and exitAction (kind = StateSubactionKind::entry and StateSubactionKind::exit), in both StateDefinition and StateUsage.

    Provenance: found by method DSE-VV-01 (deterministic static type check of the OCL against the metamodel); corroborated by DSE-VV-10 (reference implementation, reviewer-confirmed) and DSE-VV-09 (no existing issue found); report prepared under DSE-VV-12 (model-drafted, reviewed and submitted by the reporter). Further information on these methods is available on request.

    Not blocking: we are proceeding with the proposed resolution in our own implementation.

  • Reported: SysML 2.0 — Sun, 25 Oct 2026 15:18 GMT
  • Updated: Tue, 27 Oct 2026 19:00 GMT