feat(auditing): pipeline v1.1 — report generation + scripted gate + temporal delta
- report_generate.py: REPORT-final.md + VALIDATION.md from findings + raw capture; per-surface status from summary.surfaces_ok; Data Limitations - report_gate.py: §6 gate scripted (count/evidence/identity/material support); non-zero exit blocks delivery - audit_diff.py: before/after capture comparison -> DELTA.md - audit_pipeline.sh: 2 steps -> 4; collision-safe capture copy (re-runs preserve baseline); relative output dir resolved to absolute - beta-audit-process.md: locked v1.0 -> v1.1 (+ dated decision record) - all 9 runs of the 2026-08-15 batch regenerated + gated (9/9 PASS) - live end-to-end proof: Gilmore re-run, DELTA.md 0 changes (same day)
This commit is contained in:
@@ -1,55 +1,48 @@
|
||||
# Validation Run: Superior HVAC & Plumbing
|
||||
# Validation Run: superior plumbing,heating and air conditioning
|
||||
|
||||
**Date:** 2026-08-14
|
||||
**Business:** Superior HVAC & Plumbing
|
||||
**Location:** Cameron Park, CA (search) — resolved to Rancho Cucamonga, CA
|
||||
**Vertical:** HVAC / Plumbing (GTM-aligned)
|
||||
**Run context:** Second clean external run (Step B) — 4-surface extract after
|
||||
the GBP match-gate + phone-glyph fixes.
|
||||
**Date:** 14 August 2026
|
||||
**Business:** superior plumbing,heating and air conditioning
|
||||
**Rating:** 2.7 ★ | **Reviews:** 57
|
||||
**Engine findings:** 12 | **Material (in report):** 7 | **Rejected FP/low-signal:** 2 | **Needs verification:** 2
|
||||
|
||||
## Purpose
|
||||
Demonstrate a clean multi-surface run on a distinctive-named business and
|
||||
capture real cross-source NAP divergence for the audit record.
|
||||
## Reviewer dispositions (locked process v1.1 §3)
|
||||
|
||||
## Surface Results
|
||||
### Material (survive normalization → in REPORT-final.md)
|
||||
|
||||
| Surface | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
| Google Business Profile | ✅ Good | `superior plumbing, heating and air conditioning` — 2.7★/57, full hours, phone `(909) 319-0746` (glyph-stripped), website. |
|
||||
| Apple Maps | ✅ Good | `W&T HVAC & Plumbing Solutions` — null rating/reviews, hours present. |
|
||||
| Bing Places | ✅ Good | `Superior Comfort Heating & Cooling` — 4.5★/10. |
|
||||
| Website | ✅ Good | `https://www.superiorplumbingac.com/` (no 403). |
|
||||
- **immediate** — Phone number inconsistent across 2 surface(s)
|
||||
`distinct numbers: 9093190746, 9163165708`
|
||||
- **immediate** — Address inconsistent across 1 surface(s)
|
||||
`google='6331 Haven Ave, Rancho Cucamonga, CA 91737' vs apple='1150 Sibley St, Folsom, CA 95630'`
|
||||
- **immediate** — Hours mismatch on 7 day(s) — GBP is authoritative
|
||||
`7 day(s) genuinely differ: friday: 7 AM-7 PM vs 9:00 AM-12:00 PM; saturday: 7 AM-7 PM vs 10:00 AM-6:00 PM; sunday: Closed vs 10:00 AM-5:00 PM; monday: 7 AM-7 PM vs 9:00 AM-9:00 PM`
|
||||
- **immediate** — Average rating 3.6 — below 4.0 threshold
|
||||
`average 3.6 (google 2.7 / apple None)`
|
||||
- **high** — Website URL inconsistent across 1 surface(s)
|
||||
`google='https://www.superiorplumbingac.com/' vs apple='https://www.yelp.com/biz/w-and-t-hvac-and-plumbing-solutions-folsom-3' — different domains`
|
||||
- **high** — Rating varies by 1.8 across surfaces (range: 2.7–4.5)
|
||||
`google 2.7 vs apple None`
|
||||
- **high** — No JSON-LD schema found on website
|
||||
`no structured data at https://www.superiorplumbingac.com/`
|
||||
|
||||
## Notable: Genuine Cross-Source Divergence
|
||||
This is NOT a scraper bug — it is real directory fragmentation the pipeline
|
||||
correctly captured:
|
||||
### Needs verification (excluded from report until confirmed)
|
||||
|
||||
- **Three different business names** across GBP / Apple / Bing.
|
||||
- **Rating divergence:** 2.7★ (GBP) vs 4.5★ (Bing) vs null (Apple).
|
||||
- **Phone conflict:** GBP `(909) 319-0746` vs Apple `+1 (916) 316-5708`.
|
||||
- **Hours conflict:** GBP Mon–Sat 7AM–7PM / Sun Closed vs Apple 9AM–9PM /
|
||||
Sun 10AM–5PM.
|
||||
- **Website conflict:** GBP `superiorplumbingac.com` vs Apple Yelp URL.
|
||||
- **high** — Most recent review is 301 days old — no fresh review signal
|
||||
`unclassified — reviewer to decide: {"newest_review_date": "Oct 17, 2025", "days_ago": 301}`
|
||||
- **medium** — No canonical URL tag on website
|
||||
`unclassified — reviewer to decide: {"url": "https://www.superiorplumbingac.com/"}`
|
||||
|
||||
These are exactly the inconsistencies a client audit should surface.
|
||||
### Rejected (format false-positives / low-signal / tooling gaps)
|
||||
|
||||
## Fix Verification
|
||||
- **Phone glyph:** GBP phone came out `(909) 319-0746` with no leading
|
||||
`\ue0b0`. Confirmed `glyph? False`.
|
||||
- **Match gate:** GBP matched the correct `superior plumbing…` entity (shares
|
||||
tokens `superior`, `plumbing`, `heating`/`air`); gate passed.
|
||||
- ~~Review count varies by 47 across surfaces~~ — low-signal: platforms count reviews differently; not an integrity issue
|
||||
- ~~Category varies across surfaces: consumer sector, home service, plumber~~ — low-signal: per-platform taxonomy (Apple 'consumer sector' is its default)
|
||||
|
||||
## Reliability
|
||||
- All 4 surfaces returned data. ✅
|
||||
- Engine flagged name/phone/website/hours mismatches across sources. ✅
|
||||
- No crashes, valid JSON, findings.md generated. ✅
|
||||
### Enhancement tier (noted, excluded from client report)
|
||||
|
||||
## Artifacts
|
||||
- `superior_hvac__plumbing_multi_surface_2026-08-14.json` — raw scrape
|
||||
- `findings.json` — engine output
|
||||
- `findings.md` — markdown report
|
||||
- `VALIDATION.md` — this file
|
||||
- Price level not set on GBP or Apple Maps
|
||||
|
||||
## Verdict
|
||||
Clean 4-surface run. Pipeline treats cross-source disagreement as evidence,
|
||||
not error. Production-usable.
|
||||
## Pre-delivery consistency gate (v1.1 §6)
|
||||
- Count match: executive summary states 7; Findings section contains 7 ✅
|
||||
- Evidence present: every cited value exists in findings.json / raw capture ✅
|
||||
- Identity match: name, location, and date match intake record ✅
|
||||
|
||||
*Generated by report_generate.py (locked normalization rules). Gate result appended by report_gate.py before delivery.*
|
||||
|
||||
Reference in New Issue
Block a user