Context and confidence
Use the words around a match to raise or lower its score, resolve overlapping matches, and sweep a threshold to see the precision-recall trade-off as a table. The artifacts are piiwall/context.py, a context row in the results table with Aadhaar false positives at zero, and reports/sweep.md.
Try first
Open reports/patterns.json and the three Aadhaar false positives from milestone 2. They are phone numbers written as 91xxxxxxxxxx, twelve digits, and one in ten of those passes Verhoeff by chance. No pattern can fix that; the digits are the same.
Before reading on, write down what a human uses to tell them apart. Then write down the rule as code in one line of pseudocode, and what it should do when the human clue is missing.