Matches admitted = index.On(pool).Search(
RowsView.RowsOf<float>(vector, dimensions: 3), wanted: 10, arena,
predicate: key => key.TryGetUInt64(out ulong identity) && identity % 2 == 0);Rejected entries still route the traversal, so recall does not collapse at low selectivity.
The predicate runs on the executor’s worker threads, so it must be safe for concurrent use, and it is called once per scored candidate rather than once per reported match.
An exception it throws is captured, every later candidate is rejected, and the exception is rethrown with its own type once the call is final, never unwound through the native frames.
A host predicate cannot narrow a device walk, so a VRAM handle refuses one with Status.Device.