Part XIV column (d), SIGOCPYPOGOC, asks the filer what the grant was for.
This module turns that free text into a comparison against the recipient's own
self-description and uses it to break ties the name cascade could not.
Why a tiebreak and not a score
Measured on 63 adjudicated MAYBE grants and 794 YES grants
(dev/PURPOSE-MATCH-FINDINGS.md):
The purpose is contentless 58.9% of the time (median 2 words), and when it has content the comparison still separates candidates on only half of grants. It is silent far more often than it is wrong.
Added to the linkage score across all pairs it is a net loss on grants that were already right (−14 of 794 at w = 0.4), and it would shift the score distribution the YES/MAYBE/NO thresholds are tuned against.
Confined to the tie band it gains without losing, and the weight stops mattering — which is the signature of a tiebreak rather than a score term. So it is implemented as one, and the weight disappears.
The measured gain is small and rests on few cases: +1 grant of 61 at
npmatch's own gates, +3 if the tie_high gate is dropped. It is therefore
off by default; see pf_purpose_tiebreak().