5.4.0, STREAM, fireUntilHalt() run in separate thread, AlertEvent events inserted every 1 or two seconds.

The following rule should add the oldest AlertEvent that hasn't been associated with an AlertCluster
to an AlertCluster and store the cluster reference in AlertEvent.cluster and add an AlertEvent
reference to the cluster's list:

rule "extend AlertCluster"
    $alertEvent: AlertEvent( cluster == null ) from entry-point "Cluster Stream"
    not( AlertEvent( cluster == null, this before $alertEvent ) from entry-point "Cluster Stream" )
    $cluster: AlertCluster( eval( $cluster.closeEnough( $alertEvent ) ) )
    modify( $cluster ){
        addAlertEvent( $alertEvent ) // add AlertEvent to AlertCluster's list
    modify( $alertEvent ){
        setCluster( $cluster ) // store reference to containing AlertCluster

In spite of the constraint "cluster == null" and using modify for updating the AlertEvent, the rule
fires repeatedly. Even adding "no-loop true" does not avoid this. (A redundant constraint
testing for the non-occurrence of the AlertEvent in the AlertCluster's List alertEvent

The rule executes perfectly well with 5.3.0.

I'm aware of Edson's note indicating some synchronization bug in 5.4.0, but it's hard to imagine
how a lack of synchronization can be responsible for a problem when inserts occur at a very