Sounds like your change listener might be better implemented as a rule with a
"no-loop" declaration. Your rule would be invoked when the fact it matches
changes, and it would be invoked at an appropriate time to modify the fact.
In my JessListener I want to set a slot value on the fact that I get on a Fact
Event. I tried Rete.modify to modify the fact but got an exception that the
fact was not in active memory. So figuring that the fact had not yet been added
to the system I tried calling setSlotValue on the fact but then got a very
strange behavior where my JessListener is called again with the same fact,
without the slot value I set, and with the factid incremented. If my code again
does a setSlotValue on this fact then my JessListener gets called again with
the same fact, without the slot I set, and with the factid incremented, and
this becomes an infinite loop. If I set a boolean and ignore the second call,
then I end up with two facts, one with the slot having value nil and the other
with the value I set.
I am assuming by this behavior that I am not supposed to modify the fact I get
in my JessListener. Is there any way to set the slot value for this fact?