AbstractWorkingMemory.executeQueuedActions() catches exceptions thrown within calls to action.execute() (line 1486).
It then tests to see if the exception is a RuntimeDroolsException and rethrows it if it is. However, if it is not, it simply does a printStackTrace() on the exception and does not re-throw it. This is a problem because SplitInstance throws an IllegalArgumentException on line 73. This is then caught and gobbled by the catch clause starting on line 1487 of AbstractWorkingMemory.java.
The result is that any service or application hosting the Drools runtime will never see this exception. What looks to the user like a clean (albeit overly shortened) rules session has in fact thrown an error, but it is not visible to the user or the owning service. It is therefore very difficult to diagnose why the rules and/or flows are not doing what they should.