- website surface: Jina Reader re-render when direct HTML lacks a visible
phone (bot-walled 403 or client-side rendered phone) — the NAP
cross-check no longer loses its third source
- phone regex: lookarounds reject phone-like substrings glued to other
digits (JS artifact numbers from raw HTML)
- renderer: jina_reader provenance key when fallback fires
- --selftest mode (offline check of phone extraction)
- VALIDATION.md: gate re-run timestamp (PASS unchanged)
- Reviewer decision loop: approve / reject (default Tier 2) / more evidence; decisions recorded in VALIDATION.md
- Blocked surfaces: customer-facing block = finding or documented limitation, never a bare marker
- Pre-delivery consistency gate: count match, evidence present, identity match
- Required artifact set per run; deviations require dated decision record
- Gilmore: exec summary corrected 2->3 to match findings; VALIDATION.md added with reviewer dispositions
- Pass SCRAPER_OUT as a directory (multi_scraper.py 3rd arg is an OUT_DIR,
not a file); previously produced IsADirectoryError at the engine step
- chmod +x so './audit_pipeline.sh' works directly
multi_scraper.py imports apple_scraper and bing_provider but they were not
committed to implementation/auditing/. Add them so the repo runs without
external file copies from the workdir.
- Add _looks_like_match() gate in scrape_google(): rejects search-page
titles and names sharing no >=4-char token with the query, so the scraper
no longer ingests a wrong entity (e.g. name='Hours', or 'RK Mechanical'
for an 'Aire Serv' search).
- Strip BMP PUA glyphs (U+E000-U+F8FF, e.g. the \ue0b0 map-pin) from GBP
address + phone. Old regex only covered the Supplementary PUA plane
(\U000E0000-\U000EFFFF) so the glyph leaked into the contract and broke
downstream phone normalization.
- Also: Apple Maps fallback path when GBP is rejected, and makedirs for the
optional 3rd-arg output dir.