# Leonard Execution Card — GBP Snapshot Ingest v1.1 **Goal:** Map a filled GBP Snapshot Intake into client docs with minimal reasoning. **Governing docs:** - `docs/agents/agent-charter-v1.md` - `docs/agents/audit-playbook-v1.md` - `docs/templates/gbp-snapshot-intake.md` --- ## Input required A completed `gbp-snapshot-intake.md` (or generated form output) for the client. If any required metadata is missing (client name, snapshot date, source), stop and report `BLOCKED: incomplete intake`. --- ## Step 1 — Update Data Inventory GBP row only Open: `docs/clients//data-inventory-v1.md` Update **only** the Google Business Profile (GBP) section using these mappings: | Intake field | Inventory field | |--------------|-----------------| | Source | Access Status / Notes | | Snapshot date | Snapshot Date | | Business name shown | Notes | | Address shown | Notes | | Phone shown | Notes | | Website shown | Notes | | Primary category + Additional categories | Notes | | Star rating | Notes | | Review count | Notes | | Review responses observed + detail | Notes | | “Own this business?” prompt visible | Notes | | Claimed status | Notes | | Verified badge | Notes | | Hours listed + hours text | Notes | | Open now observed | Notes | | Booking button present on the GBP | Notes | | Booking button label | Notes | | Messaging button present | Notes | | Other action buttons | Notes | | Photos present + approx count | Notes | | Services listed | Notes | | Updates / Posts status + most recent post date | Notes | | Q&A status | Notes | | Attributes / highlights | Notes | | Second related listing + names + notes | Notes / Gaps | | Raw notes | Notes / Gaps | Rules: - Write factual values only - Blank intake field → `Not observed` - Verification Tier: - Owner dashboard / owner-confirmed → Tier 1 - Human Maps eye or Places API → Tier 2 - Do not rewrite other sources unless the intake explicitly names them --- ## Step 2 — Threat Trigger Rules (boolean only) Apply **only** these rules. No new creative threats. | Rule ID | Condition | Action | |---------|-----------|--------| | R1 | Booking button present on the GBP = No | Ensure a threat exists for missing public booking on GBP surfaces. If missing, add a Tier 2 Major threat with evidence from intake. If exists, update Data Recency + Evidence Snippet only. | | R2 | Claimed status = No or Unknown AND (rating/reviews thin or Not observed) | Ensure a threat exists for weak/unclear GBP completeness. Update evidence/recency only if exists. | | R3 | Second related listing nearby = Yes | Ensure a Minor Tier 2 threat exists for related/duplicate listing risk. Update evidence only. | | R4 | Star rating and review count both observed | Do **not** create a new threat from rating alone. Only update inventory. | | R5 | Any field Not observed | Do not invent a threat from absence of observation alone unless R1–R3 fire. | If no rule fires, leave Threat Register unchanged except optional recency note on existing GBP-related threats. --- ## Step 3 — Output format Return: 1. Updated GBP inventory section (or full inventory if required by tooling) 2. Threat Register changes only if a rule fired 3. `Changes Made` list (bullet facts only) 4. `Rules Fired:` list (R1/R2/R3/none) Forbidden: - Severity upgrades beyond template defaults without human request - Solution language - Competitor claims - New threats outside R1–R3 --- ## Pass criteria - Every written value traces to the intake - No extra narrative analysis - Tier labels correct - Only trigger rules created/updated threats **If uncertain:** leave field as `Not observed` and do not fire a rule.