The stored action fields plus authoring sugar. roles: on a fireAction-fired action (no
when) it desugars into a count($actor.roles[@ in [...]]) > 0 condition
ANDed with filter; on a CASCADE-FIRED action it stores VERBATIM instead —
the pin on which identities may execute the trigger, since folding it into
filter would make the action's existence depend on whose token cascades.
roleAliases widens the membership either way. status compiles to a
status.set op on the firing activity, appended AFTER the authored ops —
deliberately never implied, so a forgotten status is a visible stall
rather than a silently completed action.
The stored action fields plus authoring sugar.
roles: on a fireAction-fired action (nowhen) it desugars into acount($actor.roles[@ in [...]]) > 0condition ANDed withfilter; on a CASCADE-FIRED action it stores VERBATIM instead — the pin on which identities may execute the trigger, since folding it intofilterwould make the action's existence depend on whose token cascades.roleAliaseswidens the membership either way.statuscompiles to astatus.setop on the firing activity, appended AFTER the authored ops — deliberately never implied, so a forgottenstatusis a visible stall rather than a silently completed action.