docs: Option C — client call workflow v2, Phoenix call log, hours GATE reopened

- docs/operations/client-call-workflow-v2.md: PHASE 0-3 with binding rules
  (closed-loop rule, evidence standard, hours GATE, pricing module gate,
  one-pager education, cost log)
- docs/operations/templates/pre-call-owner-form.md: standard 5-question form
- docs/clients/phoenix-salons/call-log.md: 2026-08-17 entry; hours GATE NOT
  PASSED (Mon-Fri 6v7, Sat 5v6, Sun open/closed all OPEN); actions + owners
- canonical record v0.1.1 -> v0.1.2: hours demoted verified/tier_1 to
  open/tier_2, conflict entry added, change history recorded
- data-inventory-v1.md: hours status OPEN block
- README.md: call-log pointer
This commit is contained in:
tonyjbala
2026-08-17 19:35:24 +00:00
parent a778fe8b65
commit 3d3891aa52
6 changed files with 186 additions and 6 deletions
+2
View File
@@ -20,3 +20,5 @@
|------|-------|-------| |------|-------|-------|
| 2026-08-05 | 1a | Baseline repo created, cold audit pending | | 2026-08-05 | 1a | Baseline repo created, cold audit pending |
| 2026-08-05 | 1a | Snapshot 1 ingested — R1-R6 applied (no threats fired) | | 2026-08-05 | 1a | Snapshot 1 ingested — R1-R6 applied (no threats fired) |
- **Call log:** `call-log.md` — every client touch, newest first. Hours gate state lives here.
+55
View File
@@ -0,0 +1,55 @@
# Phoenix Salon + Spa — Call Log
Conventions: one entry per client touch, newest first. Every entry has: date, participants, items discussed (status per item), actions (owner + due), notes. Hours items carry the gate state explicitly.
---
## 2026-08-17 — Findings call (v1 workflow)
**Participants:** Tony, Ashley Thornhill (owner)
**Duration:** ~14 min
**Evidence basis:** 4-surface capture 2026-08-16/17 (`extractions/phoenix_salon__spa_multi_surface_2026-08-17.json`); original audit 2026-08-13
### Items discussed
| # | Item | Status after call |
|---|---|---|
| 1 | Website SSR: initial HTML 13 words (Lovable Vite SPA, no SSR) | **OPEN** — fix assigned to Tony |
| 2 | Hours: all surfaces disagree | **OPEN** — gate not passed (see below) |
| 3 | Rebrand residue: "La Mae" in 6 locations | **OPEN** — owner to request directory changes |
| 4 | GBP gaps: no posts, no Q&A, no price band | **OPEN** — we draft, Ashley posts |
### HOURS — GATE NOT PASSED (non-negotiable)
Call claimed hours were settled ("the posted hours on GBP reflect what you've already decided"). **This is not a lock.** No written numbers were captured. Conflicts from the 2026-08-17 capture:
| Day | GBP | Website (JSON-LD) | Conflict |
|---|---|---|---|
| MonFri | 9:00 AM 6:00 PM | 9:00 AM 7:00 PM | **OPEN — close time** |
| Saturday | 9:00 AM 6:00 PM | 9:00 AM 5:00 PM | **OPEN — close time** |
| Sunday | Closed | 9:00 AM 5:00 PM (open) | **OPEN — open vs closed** |
Apple Maps (10:00 AM 6:00 PM daily incl. Sunday) and Yelp (per 08-13: MonFri 97, Sat 97, Sun closed) also in conflict; not re-verified 08-17 (Apple is process-gated, Yelp headless-blocked) — re-verify before fixing either.
Canonical record `hours.regular_hours` was marked `verified/tier_1` from a 2026-08-16 handoff with no owner-written numbers on file → **demoted to OPEN, tier_2, 2026-08-17.**
**Next action (FIRST gate on next touch):** text Ashley — "Confirming final hours, please send written: Mon __, Tue __, Wed __, Thu __, Fri __, Sat __, Sun __." Written numbers in → record updated → gate passed. **Monitoring handoff is blocked until this closes.**
### Actions from call
| # | Action | Owner | Due |
|---|---|---|---|
| 1 | Hours: written confirmation of all 7 days | Ashley (Tony sends the ask) | next touch, GATE |
| 2 | Lovable SSR fix: paste SSR prompt to Lovable AI → Publish → re-crawl, before/after word count | Tony | Phase 2 |
| 3 | Rebrand residue (6 locations: CityFeet, BestProsInTown slug, Facebook bio, Yelp "formerly La Mae", Vagaro review, directory listing): list is 4 days old and Yelp is headless-blocked — re-verify each before touching; then Ashley requests name changes on directories she controls | Tony (verify + drafts), Ashley (directory requests) | Phase 2 |
| 4 | GBP posts + Q&A + price band: draft content, Ashley posts (GBP is her profile) | Tony (draft), Ashley (post) | Phase 2 |
| 5 | Cost log: minutes per fix, started on first fix | Tony | Phase 2 |
### Notes
- Call ran v1 (pre-workflow). GEO/AEO education was delivered on call — should have been the one-pager. Not repeating.
- No pricing discussed (no economics-v1.md for Phoenix yet; pricing module not in script — rule followed).
- Audit timeline for narrative (do not mislabel on future calls): June 2026 (~45/100) → July 23 (82/100, post-Lovable-rebuild) → Aug 6 (68/100) → Aug 13 (VeriPath-era GBP audit) → Aug 1617 (4-surface + GEO). Scores use different rubrics; never quote cross-rubric numbers to the owner.
---
@@ -1,6 +1,6 @@
{ {
"record_id": "VP-001-phoenix-salon-spa-v0.1.1", "record_id": "VP-001-phoenix-salon-spa-v0.1.1",
"record_version": "0.1.1", "record_version": "v0.1.2",
"record_type": "canonical_business_record", "record_type": "canonical_business_record",
"system": { "system": {
"authority": "veripath", "authority": "veripath",
@@ -141,8 +141,8 @@
"Sat": "09:00-18:00", "Sat": "09:00-18:00",
"Sun": "closed" "Sun": "closed"
}, },
"status": "verified", "status": "open",
"evidence_tier": "tier_1", "evidence_tier": "tier_2",
"observed_at": "2026-08-16T00:00:00Z", "observed_at": "2026-08-16T00:00:00Z",
"verified_at": "2026-08-16T10:30:00Z", "verified_at": "2026-08-16T10:30:00Z",
"fresh_until": "2026-09-16T00:00:00Z", "fresh_until": "2026-09-16T00:00:00Z",
@@ -150,7 +150,7 @@
"sources": [ "sources": [
"owner ground truth (Ashley) via Leonard handoff 2026-08-16" "owner ground truth (Ashley) via Leonard handoff 2026-08-16"
], ],
"notes": "Updated from previous Sat 09:00-15:00. Owner confirmed Mon\u2013Sat 9\u20136, Sun closed. This is now the authoritative baseline for all surface diffs." "notes": "REOPENED 2026-08-17: 2026-08-17 capture shows conflicts GBP Mon-Sat 9-6 / website (JSON-LD) Mon-Fri 9-7 Sat-Sun 9-5 / Apple 10-6 daily incl Sun / Yelp (08-13) Mon-Fri 9-7 Sat 9-7 Sun closed. 2026-08-17 findings call claimed verbal settlement but no written numbers were captured, so the hours GATE (client-call-workflow-v2.md, rule 3) was not passed. Owner-written confirmation of all 7 days required before status returns to verified and before any monitoring handoff."
}, },
"by_appointment_only": { "by_appointment_only": {
"value": true, "value": true,
@@ -430,7 +430,7 @@
{ {
"field": "hours.regular_hours", "field": "hours.regular_hours",
"description": "Owner ground truth conflicts with all public surfaces", "description": "Owner ground truth conflicts with all public surfaces",
"owner_truth": "Mon\u2013Sat 9\u20136, Sun closed", "owner_truth": "MonSat 96, Sun closed",
"website": "Mon-Fri 9-7, Sat-Sun 9-5", "website": "Mon-Fri 9-7, Sat-Sun 9-5",
"yelp": "Mon-Fri 9-7, Sat 9-7, Sun closed", "yelp": "Mon-Fri 9-7, Sat 9-7, Sun closed",
"gbp": "NOT_VERIFIED against owner truth", "gbp": "NOT_VERIFIED against owner truth",
@@ -457,6 +457,19 @@
"action_risk": "low", "action_risk": "low",
"status": "unresolved", "status": "unresolved",
"discovered_at": "2026-08-05T00:00:00Z" "discovered_at": "2026-08-05T00:00:00Z"
},
{
"id": "hours-surfaces-2026-08-17",
"field": "hours.regular_hours",
"status": "open",
"evidence": {
"gbp": "Mon-Sat 09:00-18:00, Sun closed",
"website": "Mon-Fri 09:00-19:00, Sat-Sun 09:00-17:00 (JSON-LD, 2026-08-17)",
"apple_maps": "daily 10:00-18:00 incl Sunday (2026-08-17)",
"yelp": "Mon-Fri 09:00-19:00, Sat 09:00-19:00, Sun closed (2026-08-13, not re-verified)"
},
"owner_truth": null,
"resolution_required": "Owner-written confirmation of all 7 days (hours GATE). No written numbers = stays open."
} }
], ],
"approvals": [], "approvals": [],
@@ -471,6 +484,12 @@
"action": "updated", "action": "updated",
"field": "hours.regular_hours", "field": "hours.regular_hours",
"detail": "Corrected Saturday hours from 09:00-15:00 to 09:00-18:00 per owner ground truth. Source: Leonard handoff 2026-08-16. This is now the authoritative baseline for all surface diffs." "detail": "Corrected Saturday hours from 09:00-15:00 to 09:00-18:00 per owner ground truth. Source: Leonard handoff 2026-08-16. This is now the authoritative baseline for all surface diffs."
},
{
"date": "2026-08-17",
"field": "hours.regular_hours",
"detail": "Reopened hours: demoted verified/tier_1 to open/tier_2. 2026-08-17 capture conflicts (GBP Mon-Sat 9-6 vs website Mon-Fri 9-7 Sat-Sun 9-5) were not locked on the 2026-08-17 call despite verbal 'settled' claim; no written numbers on file. Hours GATE per client-call-workflow-v2.md. Prior baseline Mon-Sat 9-6 Sun closed set 2026-08-16 from Leonard handoff — superseded until owner confirms in writing.",
"source": "2026-08-17 findings call + multi_surface_2026-08-17 capture"
} }
] ]
} }
@@ -41,6 +41,8 @@ Establish ground truth of the client's digital presence. No analysis or diagnosi
- **Notes / Gaps:** Booking button observed on GBP ("Book online"); destination not yet confirmed - **Notes / Gaps:** Booking button observed on GBP ("Book online"); destination not yet confirmed
- **Snapshot Location:** `client-data-pss/raw/booking/` - **Snapshot Location:** `client-data-pss/raw/booking/`
**Hours status:** OPEN — all four surfaces disagree (2026-08-17 capture: GBP MonSat 96 · website MonFri 97, SatSun 95 · Apple 106 daily incl Sun · Yelp 08-13 MonFri 97, Sat 97, Sun closed). Owner-written confirmation of all 7 days required before status changes (hours GATE, `client-call-workflow-v2.md`). Canonical record `hours.regular_hours` demoted to open/tier_2 on 2026-08-17.
## Summary of Gaps / Blockers ## Summary of Gaps / Blockers
- Services, posts, Q&A not yet observed on GBP - Services, posts, Q&A not yet observed on GBP
- Claim status unknown — needs owner access or deeper verification - Claim status unknown — needs owner access or deeper verification
@@ -0,0 +1,59 @@
# Client Call Workflow v2
**Status:** Active
**Effective:** 2026-08-17
**Replaces:** ad-hoc findings calls (v1, first run 2026-08-17 with Phoenix Salon + Spa — see lessons learned, `docs/clients/phoenix-salons/call-log.md`)
**Applies to:** all clients, all audit-adjacent calls
---
## Operating rules (binding)
1. **Closed-loop rule.** If it's not in the script, it's not on the call. The script is generated from the canonical record the day before. No "I'll look that up" items — any item that isn't verified and in the script is deferred to Phase 2.
2. **Evidence standard.** On call, state only what has been re-verified in the last 48 hours. Headless-blocked or stale surface → say "I will re-verify before we touch it" and mark it pending in the call log.
3. **Hours GATE.** Hours are a gate, not a finding. Day-by-day table with BLANKS where surfaces conflict. Verbal lock of all seven days is required, then written confirmation to the owner within 2 hours, then record update. No written numbers = item stays OPEN. Full stop. No monitoring handoff while hours are OPEN.
4. **Pricing.** Either the economics guide's 7-question module is in the script (§3 of `docs/architecture/economics-pricing-execution-guide-v1.md`) or pricing is not discussed. No improvisation.
5. **Education is a one-pager, not a call topic.** Concepts the owner didn't know about (GEO, AEO, llms.txt) go in the written follow-up.
6. **Cost log.** Minutes spent per fix, recorded in the call log / fix log. Becomes the first real price anchor (Tier 2 validation for the economics model).
---
## PHASE 0 — Pre-call (day before, mostly automated)
1. `multi_scraper` capture, all 4 surfaces → `extractions/<client>_<date>.json`
2. Update `docs/clients/<client>/` canonical record: hours table (every day × every surface, **BLANKS where conflict**), old-name list (live-verified or marked "re-verify"), SSR word count, rating/review counts, open items
3. Send pre-call owner form (`docs/operations/templates/pre-call-owner-form.md`), 2448h out
4. Generate call script FROM the record. Check the closed-loop rule: every item in the script is verified <48h. GATE check: hours table present with blanks where unresolved.
## PHASE 1 — Call (~15 min; presentation, not discovery)
1. **Open:** locked good news (NAP + rating), 30 seconds.
2. **Findings** in fixed order: finding → business impact → what we do → owner.
3. **Hours GATE:** read the table day by day, blanks visible. Owner gives all seven days. Verbal lock recorded verbatim.
4. **Close:** exact next actions with owners and dates.
5. **Immediately after (within 2h):** text/email with the locked numbers + education one-pager.
6. Call log entry created the same day (convention: `docs/clients/<client>/call-log.md`).
## PHASE 2 — Fix (the PoC)
1. Action list from the call; owners assigned at the call.
2. Re-capture after every fix. Before/after numbers in the report.
3. **Cost log:** minutes per fix → first real price anchor.
## PHASE 3 — Monitoring (retainer begins)
Explicit handoff: audit phase ends, monitoring begins. The record defines:
- surfaces watched
- frequency
- alert thresholds
`multi_scraper` on schedule, diff vs record, drift flagged. **Entry condition: hours item CLOSED with written numbers.** No exception.
---
## Lessons from v1 (2026-08-17 Phoenix call)
- Education inside the findings call was a design error → rule 5.
- Hours asked as a question, closed as "verbal lock" with no numbers → rule 3.
- Audit timeline mislabeled (June and July audits exist; Aug 13 is not "the original") → timeline lives in the call log, not in call memory.
- Owner assignments must be explicit per finding (who fixes, who posts, who just approves).
@@ -0,0 +1,43 @@
# Pre-Call Owner Form (standard template)
**Client:** {client}
**Call date:** {date}
**Send:** 2448h before the call. Owner answers; her answers feed the call script (Phase 0, step 4).
---
## 1. Hours (the gate — every day, no ranges)
| Day | Opens | Closes | Open/Closed |
|---|---|---|---|
| Monday | | | |
| Tuesday | | | |
| Wednesday | | | |
| Thursday | | | |
| Friday | | | |
| Saturday | | | |
| Sunday | | | |
If any day varies by season or staff, note it here: ________________
## 2. Booking
- How do customers book? (Vagaro link / phone / walk-in / other): ________________
- Do you want to be found by "near me" searches? yes / no
## 3. What matters most
- Which pages on the website matter most to you? (e.g. services, booking, contact): ________________
## 4. Known issues
- Anything you already know is wrong or broken that we should check? ________________
## 5. What's a win for you
- In your own words, what would make this call worth your time? ________________
---
**Owner notes (optional):**