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:
2026-08-15 16:52:23 +00:00
parent c951f79a18
commit 394d5dae3f
33 changed files with 1681 additions and 228 deletions
@@ -0,0 +1,144 @@
# superior plumbing,heating and air conditioning
## Online Presence Audit
**Location:** Rancho Cucamonga, CA
**Vertical:** Plumbing
**Audit date:** 14 August 2026
**Prepared for:** superior plumbing,heating and air conditioning
**Prepared by:** VeriPath
---
## Executive Summary
We audited superior plumbing,heating and air conditioning across its primary online surfaces: Google Business Profile, Apple Maps, Bing Places and Website. The business shows 2.7 ★ across 57 Google reviews.
**7 material integrity issues were identified:**
1. Phone numbers are inconsistent across directories.
2. Address details differ between Google and Apple.
3. Business hours are inconsistent between Google and Apple.
5. The website URL does not align across directories.
4. Average rating is below the 4.0 trust threshold.
6. Ratings vary across surfaces.
7. The website lacks LocalBusiness structured data.
---
## Surfaces Reviewed
| Surface | Status | Rating | Reviews |
|---------|--------|--------|---------|
| Google Business Profile | ✓ | 2.7 ★ | 57 |
| Apple Maps | ✓ | No rating | No reviews |
| Bing Places | ✓ | 4.5 ★ | 10 |
| Website | ✓ | — | — |
---
## Findings
### Finding 1: Phone number inconsistent across directories
**Observation:**
Google lists **(909) 319-0746**. Apple lists **+1 (916) 316-5708**. Bing lists **(215) 416-6557**. Website lists **9093190746**.
**Impact:**
Customers reaching the business through a single directory may call a disconnected or wrong number. Inconsistent NAP (name-address-phone) signals reduce local search ranking across all surfaces.
**Recommendation:**
Confirm the correct primary number, then update every directory to match. Keep the verified number identical across Google, Apple, and the website.
---
### Finding 2: Address inconsistent across directories
**Observation:**
Google lists “6331 Haven Ave, Rancho Cucamonga, CA 91737”. Apple Maps lists “1150 Sibley St, Folsom, CA 95630”.
**Impact:**
Conflicting addresses split local search signals and can send customers or service vehicles to the wrong location. NAP consistency is a core local-ranking factor.
**Recommendation:**
Confirm the canonical street address (including unit) with the business, then align Google and Apple to the same string.
---
### Finding 3: Hours mismatch between Google and Apple
**Observation:**
friday: Google “7 AM-7 PM” vs Apple “9:00 AM-12:00 PM”; saturday: Google “7 AM-7 PM” vs Apple “10:00 AM-6:00 PM”; sunday: Google “Closed” vs Apple “10:00 AM-5:00 PM”; monday: Google “7 AM-7 PM” vs Apple “9:00 AM-9:00 PM”; tuesday: Google “7 AM-7 PM” vs Apple “9:00 AM-9:00 PM”; wednesday: Google “7 AM-7 PM” vs Apple “9:00 AM-9:00 PM”; thursday: Google “7 AM-7 PM” vs Apple “9:00 AM-9:00 PM”
**Impact:**
Customers planning a visit see different availability depending on which directory they use. Mismatched hours drive no-shows and lost calls at the edge of the workday.
**Recommendation:**
Verify actual operating hours with the business. Update the non-authoritative surface to match Google's verified schedule, or correct Google if its hours are inaccurate.
---
### Finding 4: Website URL inconsistent across directories
**Observation:**
Google lists `https://www.superiorplumbingac.com/`. Apple Maps lists `https://www.yelp.com/biz/w-and-t-hvac-and-plumbing-solutions-folsom-3`.
**Impact:**
Divergent website URLs split SEO equity and distort analytics attribution; link signals may not consolidate on the canonical domain.
**Recommendation:**
Point every directory at the canonical website URL (https, no tracking parameters) and consolidate redirects so link equity consolidates on one domain.
---
### Finding 5: Average rating 3.6 — below 4.0 threshold
**Observation:**
Blended average is **3.6** (Google 2.7, Apple None) — below the 4.0 trust threshold.
**Impact:**
A sub-4.0 average is below the trust threshold for most local verticals and suppresses click-through in the local pack regardless of review volume.
**Recommendation:**
Review the lower-rated reviews for recurring service issues; respond publicly to negative reviews and prioritize the service gaps they describe.
---
### Finding 6: Rating varies by 1.8 across surfaces (range: 2.74.5)
**Observation:**
Google shows **2.7** ★ while Apple Maps shows **None** ★.
**Impact:**
A rating spread across surfaces undermines the consistency signal local search relies on and can suppress the lower-rated surface in results.
**Recommendation:**
Verify which rating is current; the stale surface usually reflects an unmanaged listing that has stopped receiving reviews.
---
### Finding 7: No JSON-LD schema found on website
**Observation:**
{"url": "https://www.superiorplumbingac.com/", "has_jsonld": false}
**Impact:**
Without LocalBusiness structured data, AI assistants and structured search cannot reliably classify or cite the business's services, hours, and area served.
**Recommendation:**
Add LocalBusiness JSON-LD (Dentist/Plumber/Contractor type) with name, address, phone, hours, and areaServed.
---
## Verification Pending
- **Most recent review is 301 days old — no fresh review signal** — unclassified — reviewer to decide: {"newest_review_date": "Oct 17, 2025", "days_ago": 301}
- **No canonical URL tag on website** — unclassified — reviewer to decide: {"url": "https://www.superiorplumbingac.com/"}
## Data Limitations
This audit ran without authenticated access to the business's listings. Known ceilings:
- **Review text and dates** were not captured; ratings and counts only.
- **Bing Places** is bot-walled for headless capture in most runs; where it shows ✗ above, that surface is excluded from this audit, not verified.
- This is a **point-in-time snapshot**; directory data changes after the audit date.
*Prepared under the VeriPath beta audit process v1.1. Findings reflect reviewed engine output; format-level discrepancies were normalized before inclusion.*
@@ -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.74.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 MonSat 7AM7PM / Sun Closed vs Apple 9AM9PM /
Sun 10AM5PM.
- **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.*