diff --git a/docs/agents/leonard-gbp-execution-card.md b/docs/agents/leonard-gbp-execution-card.md new file mode 100644 index 0000000..848e803 --- /dev/null +++ b/docs/agents/leonard-gbp-execution-card.md @@ -0,0 +1,90 @@ +# Leonard Execution Card — GBP Snapshot Ingest + +**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` 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 GMB row only + +Open: +`docs/clients//data-inventory-v1.md` + +Update **only** the Google Business Profile 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 | +| Star rating | Notes | +| Review count | Notes | +| Claimed / Own this business | Notes | +| Hours listed + hours text | Notes | +| Booking button present | Notes | +| Photos / posts / Q&A | Notes | +| Second related listing | 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 = No | Ensure a threat exists for missing public booking on GMB/website surfaces. If missing, add a Tier 2 Major threat with evidence from intake. If exists, update Data Recency + Evidence Snippet only. | +| R2 | Claimed / Own this business = No or Unknown AND rating/reviews thin or Not observed | Ensure a threat exists for weak/unclear GMB 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 GMB-related threats. + +--- + +## Step 3 — Output format + +Return: +1. Updated GMB 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.