4.0 KiB
4.0 KiB
Leonard Execution Card — GBP Snapshot Ingest v1.2
Goal: Map a filled GBP Snapshot Intake into client docs with minimal reasoning.
Governing docs:
docs/agents/agent-charter-v1.mddocs/agents/audit-playbook-v1.mddocs/templates/gbp-snapshot-intake.md(v1.2+)
Input required
A completed gbp-snapshot-intake (or form output) for the client.
If required metadata missing (client name, snapshot datetime, source, observation surface), stop and report BLOCKED: incomplete intake.
Step 1 — Update Data Inventory GBP row only
Open: docs/clients/<client>/data-inventory-v1.md
Map intake → GBP section. Rules:
- Factual values only
- Blank →
NOT_OBSERVED - Confirmed absent after looking →
NOT_PRESENT - PLACE_ID: if MAPS_URL present and PLACE_ID empty → compute from URL (
/g/...,0x...:0x...); never leave blank when derivable - Secondary
!5s/ related feature IDs → note as related-listing lead (not conclusion) - PRIMARY_CATEGORY: must be single canonical value; multi-token free text → write
INVALID_CAPTURE+ raw string; do not invent primary - CLAIMED_STATUS inference (allowed, named signals only):
- If claim prompt NOT_PRESENT/No and review responses Yes → may write
Likely Claimed — inferred+ list signals - Do not write Tier 1 Claimed without owner/dashboard source
- If claim prompt NOT_PRESENT/No and review responses Yes → may write
- Verification Tier: owner dashboard → 1; human Maps / API → 2
- Snapshot datetime from intake (require TZ when open-now is set)
- Do not rewrite non-GBP sources unless intake names them
Step 2 — Threat Trigger Rules (boolean only)
Apply only these rules. No creative threats.
| Rule ID | Version | Condition | Action |
|---|---|---|---|
| R1 | 1.2 | BOOKING_BUTTON_PRESENT_ON_GBP = No and action-button row completeness OK (messaging observed or explicitly NOT_OBSERVED as incomplete) | Ensure threat for missing public booking on GBP. Prefer title form: missing GBP booking button. If siblings null, emit reduced confidence note in evidence. Update evidence/recency if exists; else create. verification_tier: 2; severity: major (provisional). |
| R2 | 1.2 | (Claimed = No OR Unknown) AND (reviews thin OR NOT_OBSERVED) | Ensure threat for thin/unclear GBP completeness. Prefer enumerated deficits in evidence (posts, services, photos, Q&A, categories). If status is Likely Claimed — inferred, still allow thin-review threat but do not claim “unclaimed.” |
| R3 | 1.2 | SECOND_LISTING_NEARBY = Yes or secondary feature ID lead present | Ensure minor tier-2 related/duplicate listing risk threat; evidence must say lead vs verified. |
| R4 | 1.2 | Star rating + review count both observed | Do not create threat from rating alone. |
| R5 | 1.2 | Field NOT_OBSERVED alone | Do not invent threat from absence of observation unless R1–R3/R6 fire. |
| R6 | 1.2 | Services listed present and category/services breadth mismatch observable (e.g. services narrow vs multi category tokens / spin+PT vs strength only) | Ensure threat for services vs category discovery mismatch. |
Rules log requirement (output): for each fired rule include: rule ID, version, input fields read, values read, output emitted (threat ID or update).
Step 3 — Output format
Return only:
- Updated GBP inventory section
- Threat Register changes (if any rule fired)
Changes Madelist — bullet facts; include object IDs (e.g. T-012) when creating/updating threatsRules Firedlist — structured per log requirement above
Forbidden:
- Severity upgrades beyond template defaults without human request
- Solution language
- Competitor claims
- New threats outside R1–R6
- Phone masking / partial redaction of intake values
Pass criteria
- Every written value traces to intake or deterministic URL parse
- No extra narrative analysis
- Tier labels correct; severity separate from verification_tier
- Only trigger rules created/updated threats
- PLACE_ID computed when URL present
If uncertain: leave field as NOT_OBSERVED and do not fire a rule.