ISSUE-829: exiting parallel due to external transition [SCXML-LC-Comments]
https://www.w3.org/Voice/Group/track/issues/829
Raised by: James Barnett
On product: SCXML-LC-Comments
Consider the following:
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0">
<parallel id="p">
<state id="s1" initial="a">
<state id="a" />
<state id="b" />
<transition event="e" target="b" />
</state>
<state id="s2" />
</parallel>
</scxml>
[From Gavin Kistner [phrogz@me.com]]
When initially run, this enters p/s1/a and p/s2.
Because the transition has no type attribute, it defaults to "external". (I personally think this is a terrible default, counter-intuitive to almost every use case I personally envision using SCXML for. Every editor I write will default to explicitly setting this attribute to "internal". I'd love to fork a separate thread about why this defaults to "external".)
Per the specs, external transitions find the LCCA of the transition source and target(s) and then exit and re-enter the states underneath that scxml/state. In this case the LCCA is the root scxml. It is not the 'p' because <parallel> are excluded from the LCCA test.
As such, taking the transition from s1/a to s1/b causes the machine to exit 'a', 's1', and 's2', and even 'p' itself. I find the fact that we exit 's1' reasonable (for an 'external' transition), but I find it surprising that we exit 's2' and 'p'.
Is there a strong reason for using the LCCA instead of the LCA (least common (proper) ancestor of any type)? Is there a strong reason to wish to exit all concurrent siblings (inside a parallel) when re-entering one state?