npmatch's default cascade blocks every pass on state and only opens up to a
cross-state token pass at the end. That is right when query and reference are
the same establishment; it is wrong here, because a New York foundation
routinely funds a California charity and the address the filer types is
whatever was on the check — sometimes the grantee's HQ, sometimes a program
site, sometimes a lockbox. Every pass below is therefore state-free.
Value
A list of pass specifications for npmatch::np_cascade().
Details
Note that "no blocking" cannot mean a full cross product: 5,000 grants against 1.9M BMF rows is 9.6 billion pairs. What is dropped is geographic blocking. Candidates are still generated by exact name keys and by a shared distinctive name token (IDF-pruned), which is a recall device rather than a geographic constraint — state is used only downstream, as scoring evidence.