That did not help to understand. I understand interval logic, but not getting what is the main difference on event deletion.
What I understood, that by adding interval into the rules you implemented the same logic - you set duration in the rule, by making the fact valid for the rule longer.
In this case, I guess, @duration can be set on event for the same purpose you use interval [0s,10s]
Expiration is very hard thing (according to the source code I read).
The TIME_SOFT policy is explained here
but I fail to understand the meaning from description.
If I understood right from the description and your tests this statement
@Expires(value="0s", policy=TIME_SOFT)
will make events to remain in the memory forever if at least one rule can be triggered by it even it was already triggered once.
But, according to the source code. the expiration offset is set to 1ms (unless there are other expirations defined on rules or context).
drools/drools-core/src/main/java/org/drools/core/reteoo/builder/PatternBuilder.java method attachObjectTypeNode
I would use this with caution
@Expires(value="0s", policy=TIME_SOFT)
If events are not needed if not covered by any rule, I will delete them. If events are needed only once, I will use them as default facts. If there is interval logic, I will define duration.
Thanks for your question, I think I concluded answer for mine. :-)