Thread EvalResult.Batch.nextEvalState into releaseClaim so the composite cursor from Task 1.5 actually lands in rule.evalState across tick boundaries. Guards against empty-batch wipe (would regress to first-run scan).
Thread EvalResult.Batch.nextEvalState into releaseClaim so the composite cursor from Task 1.5 actually lands in rule.evalState across tick boundaries. Guards against empty-batch wipe (would regress to first-run scan).