394d5dae3f
- 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)
162 lines
5.2 KiB
Markdown
162 lines
5.2 KiB
Markdown
# VeriPath Beta Audit Process
|
||
|
||
**Status:** Locked v1.1 — 2026-08-15, for beta use (v1.1 decision: `docs/decisions/2026-08-15-audit-pipeline-v1-1.md`)
|
||
**Supersedes:** 2026-08-14 draft lock
|
||
|
||
## Purpose
|
||
|
||
Professional, repeatable audit for beta clients using the automated primary-surface pipeline.
|
||
|
||
## Scope
|
||
|
||
The beta audit covers four primary surfaces:
|
||
|
||
- Google Business Profile
|
||
- Apple Maps
|
||
- Bing Places
|
||
- Current website
|
||
|
||
The client-facing report includes material findings only, covering:
|
||
|
||
- NAP consistency
|
||
- Hours consistency, with Google Business Profile as the source of truth
|
||
- Review velocity
|
||
- Website reachability and schema conflicts
|
||
|
||
## Process
|
||
|
||
### 1. Intake
|
||
|
||
Collect:
|
||
|
||
- Business name
|
||
- City
|
||
- Website
|
||
- Known previous names
|
||
|
||
### 2. Run the pipeline
|
||
|
||
Run:
|
||
|
||
```text
|
||
multi_scraper → audit_engine → report_generate → report_gate
|
||
```
|
||
|
||
The pipeline writes the full required artifact set itself. `report_gate`
|
||
fails the run (non-zero exit) if the §6 gate fails — a failing run does
|
||
not deliver.
|
||
|
||
### 3. Human validation (reviewer decision loop)
|
||
|
||
The reviewer must resolve every engine finding to exactly one disposition.
|
||
Unresolved findings block delivery.
|
||
|
||
| Disposition | Effect |
|
||
|-------------|--------|
|
||
| **Approve** | Finding stands as generated |
|
||
| **Reject** | Finding defaults to **Tier 2** (corroborated, not verified) unless the reviewer (a) discards it entirely, or (b) requests more evidence |
|
||
| **Request more evidence** | Finding marked `pending`; re-verified on the next run; may not ship as Tier 1 until evidence lands |
|
||
|
||
Reviewer decisions are recorded in the run's `VALIDATION.md` (one line per finding: finding id, disposition, rationale).
|
||
|
||
### 4. Blocked surfaces
|
||
|
||
A surface that fails capture (blocked, 403, no data returned) must never be
|
||
reported as a bare "✗" with no downstream treatment.
|
||
|
||
- A blocked or missing **customer-facing** surface (website, booking page) is a
|
||
Customer Path Leakage signal: it ships as a finding, or the reviewer records
|
||
a documented limitation in `VALIDATION.md` with the reason it is not material.
|
||
- Non-customer-facing surface failures (e.g. Bing empty) are noted in the
|
||
Surfaces Reviewed table with the failure reason.
|
||
|
||
### 5. Client-facing report
|
||
|
||
Prepare a report containing material findings only. The report uses the approved
|
||
VeriPath client-facing structure and voice. It does not include coaching
|
||
language or marketing urgency.
|
||
|
||
### 6. Pre-delivery consistency gate
|
||
|
||
Executed by `implementation/auditing/report_gate.py` as pipeline step 4;
|
||
result stamped into `VALIDATION.md`. All four checks pass before the
|
||
report is sent. Any failure blocks delivery:
|
||
|
||
1. **Count match:** the executive summary's stated number of findings equals the
|
||
number of findings in the Findings section.
|
||
2. **Evidence present:** every finding's cited evidence exists in the run's
|
||
archived artifacts (raw capture or `findings.json`). Absence-type findings
|
||
(no website, no description, UTM parameters, unreachable surface) are
|
||
re-derived from the raw capture instead of requiring quoted evidence.
|
||
3. **Identity match:** report client name, location, and audit date match the
|
||
intake record.
|
||
4. **Material support:** each material finding is re-derived against the raw
|
||
capture (phone cores across surfaces, hours day counts, rating, website
|
||
presence, description/OG fields).
|
||
|
||
### 7. Delivery
|
||
|
||
Deliver the validated client-facing report to the client using the locked
|
||
delivery template.
|
||
|
||
## Required artifact set
|
||
|
||
Every run is archived under `docs/validation/<YYYY-MM-DD>-<slug>/` with:
|
||
|
||
| Artifact | Source |
|
||
|----------|--------|
|
||
| `*_multi_surface_YYYY-MM-DD.json` | raw pipeline capture |
|
||
| `findings.json` | engine output |
|
||
| `findings.md` | engine markdown |
|
||
| `REPORT-final.md` | client-facing report (post-review) |
|
||
| `VALIDATION.md` | run notes, surface results, reviewer decisions |
|
||
| `DELTA.md` | before/after field comparison (re-runs only) |
|
||
|
||
Re-runs never overwrite the prior raw capture: the pipeline writes a
|
||
timestamped sibling (`*__YYYYMMDD-HHMMSS.json`). The prior capture is the
|
||
temporal baseline; `audit_diff.py` compares the two into `DELTA.md`.
|
||
|
||
Runs completed before 2026-08-15 are grandfathered as-is. Every run on or
|
||
after this date must complete the set before delivery.
|
||
|
||
## Out of Scope for Default Beta
|
||
|
||
The following are not included in the default beta audit:
|
||
|
||
- Exhaustive secondary-directory research
|
||
- Full AI chatbot visibility scoring
|
||
- Competitive benchmarking
|
||
- Social content audits
|
||
|
||
## Conditional Legacy Check
|
||
|
||
Run a quick old-name and old-website check only when a name or location change
|
||
in the last 3–5 years is known or indicated during intake. This check is not
|
||
part of every default beta run.
|
||
|
||
## Pipeline Reference
|
||
|
||
The working pipeline is located at:
|
||
|
||
```text
|
||
implementation/auditing/
|
||
```
|
||
|
||
The standard execution path is:
|
||
|
||
```text
|
||
multi_scraper → audit_engine → report_generate → report_gate
|
||
audit_diff (re-runs: baseline capture vs. new capture)
|
||
```
|
||
|
||
## Deviations
|
||
|
||
Any deviation from this process requires a dated decision record in
|
||
`docs/decisions/`. Edits to this document follow the same rule: the change is a
|
||
dated decision, not a silent edit.
|
||
|
||
## Deeper Engagements
|
||
|
||
The full Layer 1/2 system remains available for deeper engagements. Beta audits
|
||
use the streamlined path above.
|