Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
Reviewer disposition pass applied per locked process v1.0 (docs/operations/beta-audit-process.md):
- Each run: raw capture, findings.json, findings.md, REPORT-final.md (customer-facing), VALIDATION.md (reviewer dispositions)
- Normalized format false-positives (+1 prefix, #N vs Ste N, 8AM vs 8:00AM, 1800 scraper parse glitch)
- Material: 28 across batch (phone mismatches, NAP address conflicts, hours divergences, missing LocalBusiness schema, missing website)
- Verification-pending items separated from material findings; no surface presented without evidence
- 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
- 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
- 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
- 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
Internal proof run on Phoenix Salon + Spa (Cameron Park, CA) using the new
pipeline. 4 surfaces captured (GBP 4.9/64, Apple 4.9/65, Bing 5.0/65,
website). After engine normalization the report is a clean 2-finding set:
hours mismatch (Immediate) + stale reviews 115d (High). Address/category
false positives removed. Serves as the 'after' baseline for a future
before/after comparison.
- 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.
Raw multi-surface JSON, engine findings (json+md), and VALIDATION.md for the
Superior HVAC & Plumbing (Cameron Park) run. All 4 surfaces returned data;
the pipeline correctly captured genuine cross-source NAP divergence (3
different business names, 2.7 vs 4.5 vs null ratings, conflicting phones and
hours) as evidence rather than error. GBP phone glyph-stripped to
'(909) 319-0746'.
Raw multi-surface JSON, engine findings (json+md), and VALIDATION.md for the
Crystal Blue Plumbing Heating & Air run. Demonstrates the GBP match gate
rejecting a wrong entity and falling back to Apple with a glyph-clean phone
('+1 (916) 571-6448').
- 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.