Tighten adaptive unseen and pharmacy refill safety
Browse files- .gitattributes +35 -35
- README.pdf +0 -0
- app/composer.py +2 -2
- app/decision_engine.py +72 -7
- judge_full_release_log.json +145 -0
- judge_full_release_log_after_fix.json +145 -0
- judge_full_release_log_after_restart.json +145 -0
- judge_full_release_log_final.json +145 -0
- judge_short_fallback_log.json +15 -0
- judge_unseen_adaptive_full_log.json +145 -0
- judge_unseen_adaptive_full_log_after_gym.json +145 -0
- judge_unseen_adaptive_full_log_final.json +145 -0
- judge_unseen_adaptive_log.json +1 -0
- submission.jsonl +0 -0
.gitattributes
CHANGED
|
@@ -1,35 +1,35 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
README.pdf
ADDED
|
Binary file (96 kB). View file
|
|
|
app/composer.py
CHANGED
|
@@ -415,8 +415,8 @@ def _compose_customer(category: Context, merchant: Context, trigger: Context, cu
|
|
| 415 |
if not _has_any(payload, "molecule_list", "stock_runs_out_iso"):
|
| 416 |
return _generic_customer(category, merchant, trigger, customer)
|
| 417 |
meds = ", ".join(payload.get("molecule_list", []))
|
| 418 |
-
|
| 419 |
-
body = f"Namaste {customer_name}, {merchant_name} here. Your monthly medicines ({meds}) are due by {_date_from_iso(payload.get('stock_runs_out_iso'))}. {
|
| 420 |
return _msg(body, CTA_CONFIRM, "merchant_on_behalf", trigger, "Refill reminder uses molecule list, run-out date, delivery status, and pharmacy offer.")
|
| 421 |
|
| 422 |
return _msg(
|
|
|
|
| 415 |
if not _has_any(payload, "molecule_list", "stock_runs_out_iso"):
|
| 416 |
return _generic_customer(category, merchant, trigger, customer)
|
| 417 |
meds = ", ".join(payload.get("molecule_list", []))
|
| 418 |
+
address_note = "We have your saved delivery address on file." if payload.get("delivery_address_saved") else "We can confirm the delivery address after your reply."
|
| 419 |
+
body = f"Namaste {customer_name}, {merchant_name} here. Your monthly medicines ({meds}) are due by {_date_from_iso(payload.get('stock_runs_out_iso'))}. {address_note} Reply CONFIRM and our pharmacist will verify stock and delivery details before preparing it."
|
| 420 |
return _msg(body, CTA_CONFIRM, "merchant_on_behalf", trigger, "Refill reminder uses molecule list, run-out date, delivery status, and pharmacy offer.")
|
| 421 |
|
| 422 |
return _msg(
|
app/decision_engine.py
CHANGED
|
@@ -942,6 +942,28 @@ def render_body(category: Context, merchant: Context, trigger: Context, customer
|
|
| 942 |
if not customer and car and should_use_adaptive_unseen_body(trigger, evidence, car):
|
| 943 |
return adaptive_unseen_body(cat, name, trigger, car, evidence)
|
| 944 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 945 |
if not customer and str(trigger.get("kind")) == "active_planning_intent" and car:
|
| 946 |
topic = fact_value(evidence, "intent_topic") or fact_value(evidence, "topic") or "this plan"
|
| 947 |
offer = fact_value(evidence, "active_offer") or (car.active_offers[0] if car.active_offers else "")
|
|
@@ -1102,6 +1124,16 @@ def render_body(category: Context, merchant: Context, trigger: Context, customer
|
|
| 1102 |
season = fact_value(evidence, "season") or "this season"
|
| 1103 |
trends = fact_value(evidence, "trends")
|
| 1104 |
shelf_action = fact_value(evidence, "shelf_action_recommended") or "reorder/checklist action"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1105 |
body = f"{name}, {season} demand is shifting: {trends}. Best next step is {shelf_action}, with claim-free customer copy. Want me to draft the reorder checklist and counter note now?"
|
| 1106 |
return final_scrub(body)
|
| 1107 |
|
|
@@ -1432,7 +1464,7 @@ def merchant_vulnerability_signal(car: MerchantCAR, trigger: Context, evidence:
|
|
| 1432 |
|
| 1433 |
def adaptive_unseen_body(cat: str, name: str, trigger: Context, car: MerchantCAR, evidence: list[Evidence]) -> str:
|
| 1434 |
kind = str(trigger.get("kind") or "signal")
|
| 1435 |
-
signal_name =
|
| 1436 |
archetype = adaptive_archetype(trigger, evidence)
|
| 1437 |
locality = car.locality if car.locality and car.locality != "unknown" else "your area"
|
| 1438 |
demand = compact_demand_anchor(car)
|
|
@@ -1464,15 +1496,30 @@ def adaptive_unseen_body(cat: str, name: str, trigger: Context, car: MerchantCAR
|
|
| 1464 |
|
| 1465 |
pressure = adaptive_pressure_sentence(archetype, cat)
|
| 1466 |
consequence = business_consequence_sentence(car, trigger, evidence, archetype)
|
|
|
|
|
|
|
| 1467 |
consequence_phrase = f" {consequence}" if consequence else ""
|
| 1468 |
-
body = f"{name}, this {signal_name}
|
| 1469 |
return final_scrub(body)
|
| 1470 |
|
| 1471 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1472 |
def adaptive_body_facts(evidence: list[Evidence]) -> list[Evidence]:
|
|
|
|
| 1473 |
priority = {
|
| 1474 |
"metric": 0,
|
| 1475 |
-
"
|
|
|
|
| 1476 |
"occurrences_30d": 2,
|
| 1477 |
"avg_delay_minutes": 3,
|
| 1478 |
"available_slots": 4,
|
|
@@ -1485,13 +1532,15 @@ def adaptive_body_facts(evidence: list[Evidence]) -> list[Evidence]:
|
|
| 1485 |
"retrieved_trend_query": 11,
|
| 1486 |
"retrieved_seasonal_note": 12,
|
| 1487 |
"retrieved_digest_actionable": 13,
|
| 1488 |
-
"
|
|
|
|
| 1489 |
}
|
| 1490 |
candidates = [
|
| 1491 |
item for item in evidence
|
| 1492 |
if item.kind != "identity"
|
| 1493 |
and item.label not in {"retrieval_confidence", "peer_ctr", "peer_reviews", "car_consent_state", "car_customer_stage"}
|
| 1494 |
and item.value not in {"unknown", "not applicable", "merchant only"}
|
|
|
|
| 1495 |
]
|
| 1496 |
candidates.sort(key=lambda item: (priority.get(item.label.replace("car_", ""), 40), -item.weight))
|
| 1497 |
chosen: list[Evidence] = []
|
|
@@ -1508,12 +1557,14 @@ def adaptive_body_facts(evidence: list[Evidence]) -> list[Evidence]:
|
|
| 1508 |
|
| 1509 |
def adaptive_archetype(trigger: Context, evidence: list[Evidence]) -> str:
|
| 1510 |
terms = terms_from_values([trigger, [item.value for item in evidence if item.source.startswith("trigger") or item.source.startswith("category.adaptive")]])
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1511 |
if terms & {"compliance", "regulation", "audit", "expiry", "expired", "batch", "stock", "supply", "recall", "safety"}:
|
| 1512 |
return "compliance"
|
| 1513 |
if terms & {"late", "delay", "dispatch", "complaint", "review", "rating", "cold", "wrong", "service"}:
|
| 1514 |
return "ops"
|
| 1515 |
-
if terms & {"lapsed", "inactive", "dormant", "winback", "churn", "renewal", "expired"}:
|
| 1516 |
-
return "retention"
|
| 1517 |
if terms & {"competitor", "rival", "opened", "nearby", "compare"}:
|
| 1518 |
return "competitive"
|
| 1519 |
if terms & {"spike", "search", "trend", "festival", "season", "demand", "views", "calls", "growth", "yoy"}:
|
|
@@ -1534,6 +1585,14 @@ def adaptive_pressure_sentence(archetype: str, cat: str) -> str:
|
|
| 1534 |
return "The right move is a checklist first, then any customer-facing note after merchant approval."
|
| 1535 |
if archetype == "retention":
|
| 1536 |
return "The reply should make restart feel easy, not like a guilt or discount blast."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1537 |
if archetype == "competitive":
|
| 1538 |
return "This is a local comparison moment; make the profile look current before shoppers compare."
|
| 1539 |
if archetype == "demand":
|
|
@@ -1551,6 +1610,8 @@ def business_consequence_sentence(car: MerchantCAR, trigger: Context, evidence:
|
|
| 1551 |
return "The cost is trust: the next promo wastes demand if the same ops signal stays visible."
|
| 1552 |
if archetype == "retention":
|
| 1553 |
return "The cost is silence: each missed week makes the comeback ask colder."
|
|
|
|
|
|
|
| 1554 |
if archetype == "compliance":
|
| 1555 |
return "The risk is process drift: the team may keep using the old checklist after the trigger window."
|
| 1556 |
if archetype == "demand" and car.views_30d:
|
|
@@ -1564,6 +1625,8 @@ def adaptive_category_action(cat: str, archetype: str) -> str:
|
|
| 1564 |
if cat == "dentists":
|
| 1565 |
if archetype == "compliance":
|
| 1566 |
return "the 3-point clinic checklist and patient-safe counter note"
|
|
|
|
|
|
|
| 1567 |
if archetype == "demand":
|
| 1568 |
return "the patient-safe service note and GBP update"
|
| 1569 |
return "the clinic checklist and patient-safe reply"
|
|
@@ -1810,7 +1873,7 @@ def recommended_action(cat: str, kind: str, playbook: Context, customer: Context
|
|
| 1810 |
return "I can draft a consent-safe approval note for you first."
|
| 1811 |
if customer:
|
| 1812 |
if kind == "chronic_refill_due":
|
| 1813 |
-
return "Reply CONFIRM
|
| 1814 |
if kind in {"recall_due", "appointment_tomorrow"}:
|
| 1815 |
return "Reply YES to confirm, or send a better time."
|
| 1816 |
if kind in {"customer_lapsed_hard", "customer_lapsed_soft"}:
|
|
@@ -2451,6 +2514,8 @@ def format_fact(e: Evidence) -> str:
|
|
| 2451 |
"locality": "locality",
|
| 2452 |
"verified": "verified",
|
| 2453 |
"merchant_offer_status": "merchant offer",
|
|
|
|
|
|
|
| 2454 |
"metric": "metric",
|
| 2455 |
"delta_pct": "delta",
|
| 2456 |
"vs_baseline": "baseline",
|
|
|
|
| 942 |
if not customer and car and should_use_adaptive_unseen_body(trigger, evidence, car):
|
| 943 |
return adaptive_unseen_body(cat, name, trigger, car, evidence)
|
| 944 |
|
| 945 |
+
if customer and str(trigger.get("kind")) == "chronic_refill_due" and send_as != "merchant_on_behalf":
|
| 946 |
+
meds = fact_value(evidence, "molecule_list") or fact_value(evidence, "metric_or_topic") or "refill context"
|
| 947 |
+
due_raw = fact_value(evidence, "stock_runs_out_iso")
|
| 948 |
+
due_phrase = f" due by {str(due_raw).split('T', 1)[0]}" if due_raw else ""
|
| 949 |
+
if cat != "pharmacies":
|
| 950 |
+
cust = customer_name(customer)
|
| 951 |
+
visits = fact_value(evidence, "visits_total")
|
| 952 |
+
last_visit = fact_value(evidence, "last_visit")
|
| 953 |
+
visit_phrase = f"; {cust} has {visits} visits and last visited {last_visit}" if visits or last_visit else f"; customer: {cust}"
|
| 954 |
+
body = f"{name}, chronic refill due is a mismatched customer trigger for a {cat[:-1] if cat.endswith('s') else cat}{visit_phrase}. Consent is not explicit for this outreach, so I can prepare a consent-safe merchant approval note instead of direct customer copy. Reply YES and I will draft it."
|
| 955 |
+
else:
|
| 956 |
+
body = f"{name}, chronic refill due context is present{due_phrase}: {meds}. Consent is not explicit for direct outreach, so I can prepare a consent-safe merchant approval note first. Reply YES and I will draft it."
|
| 957 |
+
return final_scrub(body)
|
| 958 |
+
|
| 959 |
+
if customer and cat == "pharmacies" and str(trigger.get("kind")) == "chronic_refill_due":
|
| 960 |
+
meds = fact_value(evidence, "molecule_list") or "your monthly medicines"
|
| 961 |
+
due_raw = fact_value(evidence, "stock_runs_out_iso")
|
| 962 |
+
due = str(due_raw).split("T", 1)[0] if due_raw else "the refill date"
|
| 963 |
+
address_note = "Address is already saved." if str(fact_value(evidence, "delivery_address_saved")).lower() == "true" else "We can confirm the delivery address after your reply."
|
| 964 |
+
body = f"{name}, {merchant_name} here. Chronic refill due reminder: your monthly medicines ({meds}) are due by {due}. {address_note} Reply CONFIRM and our pharmacist will verify stock and delivery details before preparing it."
|
| 965 |
+
return final_scrub(body)
|
| 966 |
+
|
| 967 |
if not customer and str(trigger.get("kind")) == "active_planning_intent" and car:
|
| 968 |
topic = fact_value(evidence, "intent_topic") or fact_value(evidence, "topic") or "this plan"
|
| 969 |
offer = fact_value(evidence, "active_offer") or (car.active_offers[0] if car.active_offers else "")
|
|
|
|
| 1124 |
season = fact_value(evidence, "season") or "this season"
|
| 1125 |
trends = fact_value(evidence, "trends")
|
| 1126 |
shelf_action = fact_value(evidence, "shelf_action_recommended") or "reorder/checklist action"
|
| 1127 |
+
if str(shelf_action).lower() in {"true", "yes", "1"}:
|
| 1128 |
+
shelf_action = {
|
| 1129 |
+
"pharmacies": "a reorder checklist for fast-moving summer stock",
|
| 1130 |
+
"restaurants": "a menu-window prep checklist",
|
| 1131 |
+
"salons": "a slot and service-package prep checklist",
|
| 1132 |
+
"gyms": "a seasonal class/restart prep checklist",
|
| 1133 |
+
"dentists": "a patient-safe service and recall checklist",
|
| 1134 |
+
}.get(cat, "a category-specific prep checklist")
|
| 1135 |
+
elif str(shelf_action).lower() in {"false", "no", "0"}:
|
| 1136 |
+
shelf_action = "a conservative hold-and-monitor checklist"
|
| 1137 |
body = f"{name}, {season} demand is shifting: {trends}. Best next step is {shelf_action}, with claim-free customer copy. Want me to draft the reorder checklist and counter note now?"
|
| 1138 |
return final_scrub(body)
|
| 1139 |
|
|
|
|
| 1464 |
|
| 1465 |
def adaptive_unseen_body(cat: str, name: str, trigger: Context, car: MerchantCAR, evidence: list[Evidence]) -> str:
|
| 1466 |
kind = str(trigger.get("kind") or "signal")
|
| 1467 |
+
signal_name = adaptive_signal_name(kind)
|
| 1468 |
archetype = adaptive_archetype(trigger, evidence)
|
| 1469 |
locality = car.locality if car.locality and car.locality != "unknown" else "your area"
|
| 1470 |
demand = compact_demand_anchor(car)
|
|
|
|
| 1496 |
|
| 1497 |
pressure = adaptive_pressure_sentence(archetype, cat)
|
| 1498 |
consequence = business_consequence_sentence(car, trigger, evidence, archetype)
|
| 1499 |
+
if consequence and any(label in fact_sentence.lower() for label in ["baseline gap", "estimated value gap"]):
|
| 1500 |
+
consequence = "Every quiet cycle keeps the leak open."
|
| 1501 |
consequence_phrase = f" {consequence}" if consequence else ""
|
| 1502 |
+
body = f"{name}, this {signal_name} signal is actionable now: {fact_sentence}.{category_phrase}{consequence_phrase} {pressure}{offer_phrase} Want me to draft {action} now?"
|
| 1503 |
return final_scrub(body)
|
| 1504 |
|
| 1505 |
|
| 1506 |
+
def adaptive_signal_name(kind: str) -> str:
|
| 1507 |
+
label = signal_label(kind)
|
| 1508 |
+
replacements = {
|
| 1509 |
+
"dormant with vera": "dormant outreach",
|
| 1510 |
+
"winback eligible": "winback",
|
| 1511 |
+
"renewal due": "renewal",
|
| 1512 |
+
"gbp unverified": "GBP verification",
|
| 1513 |
+
}
|
| 1514 |
+
return replacements.get(label, label)
|
| 1515 |
+
|
| 1516 |
+
|
| 1517 |
def adaptive_body_facts(evidence: list[Evidence]) -> list[Evidence]:
|
| 1518 |
+
has_concrete_gap = bool(fact_value(evidence, "implied_loss") or fact_value(evidence, "implied_gap"))
|
| 1519 |
priority = {
|
| 1520 |
"metric": 0,
|
| 1521 |
+
"implied_loss": 1,
|
| 1522 |
+
"implied_gap": 1,
|
| 1523 |
"occurrences_30d": 2,
|
| 1524 |
"avg_delay_minutes": 3,
|
| 1525 |
"available_slots": 4,
|
|
|
|
| 1532 |
"retrieved_trend_query": 11,
|
| 1533 |
"retrieved_seasonal_note": 12,
|
| 1534 |
"retrieved_digest_actionable": 13,
|
| 1535 |
+
"delta_pct": 18,
|
| 1536 |
+
"locality": 19,
|
| 1537 |
}
|
| 1538 |
candidates = [
|
| 1539 |
item for item in evidence
|
| 1540 |
if item.kind != "identity"
|
| 1541 |
and item.label not in {"retrieval_confidence", "peer_ctr", "peer_reviews", "car_consent_state", "car_customer_stage"}
|
| 1542 |
and item.value not in {"unknown", "not applicable", "merchant only"}
|
| 1543 |
+
and not (has_concrete_gap and item.label.replace("car_", "") == "delta_pct")
|
| 1544 |
]
|
| 1545 |
candidates.sort(key=lambda item: (priority.get(item.label.replace("car_", ""), 40), -item.weight))
|
| 1546 |
chosen: list[Evidence] = []
|
|
|
|
| 1557 |
|
| 1558 |
def adaptive_archetype(trigger: Context, evidence: list[Evidence]) -> str:
|
| 1559 |
terms = terms_from_values([trigger, [item.value for item in evidence if item.source.startswith("trigger") or item.source.startswith("category.adaptive")]])
|
| 1560 |
+
if terms & {"renewal"}:
|
| 1561 |
+
return "renewal"
|
| 1562 |
+
if terms & {"lapsed", "inactive", "dormant", "winback", "churn", "expired"}:
|
| 1563 |
+
return "retention"
|
| 1564 |
if terms & {"compliance", "regulation", "audit", "expiry", "expired", "batch", "stock", "supply", "recall", "safety"}:
|
| 1565 |
return "compliance"
|
| 1566 |
if terms & {"late", "delay", "dispatch", "complaint", "review", "rating", "cold", "wrong", "service"}:
|
| 1567 |
return "ops"
|
|
|
|
|
|
|
| 1568 |
if terms & {"competitor", "rival", "opened", "nearby", "compare"}:
|
| 1569 |
return "competitive"
|
| 1570 |
if terms & {"spike", "search", "trend", "festival", "season", "demand", "views", "calls", "growth", "yoy"}:
|
|
|
|
| 1585 |
return "The right move is a checklist first, then any customer-facing note after merchant approval."
|
| 1586 |
if archetype == "retention":
|
| 1587 |
return "The reply should make restart feel easy, not like a guilt or discount blast."
|
| 1588 |
+
if archetype == "renewal":
|
| 1589 |
+
return {
|
| 1590 |
+
"dentists": "Treat it as a clinic ROI check before renewal; fix patient acquisition before asking them to renew.",
|
| 1591 |
+
"salons": "Treat it as a slot ROI check before renewal; show one action that fills chairs first.",
|
| 1592 |
+
"restaurants": "Treat it as a demand ROI check before renewal; show one meal-window recovery action first.",
|
| 1593 |
+
"gyms": "Treat it as a member acquisition check before renewal; show the next-session plan first.",
|
| 1594 |
+
"pharmacies": "Treat it as an operational ROI check before renewal; keep the action calm and checklist-led.",
|
| 1595 |
+
}.get(cat, "Treat it as an ROI check before renewal.")
|
| 1596 |
if archetype == "competitive":
|
| 1597 |
return "This is a local comparison moment; make the profile look current before shoppers compare."
|
| 1598 |
if archetype == "demand":
|
|
|
|
| 1610 |
return "The cost is trust: the next promo wastes demand if the same ops signal stays visible."
|
| 1611 |
if archetype == "retention":
|
| 1612 |
return "The cost is silence: each missed week makes the comeback ask colder."
|
| 1613 |
+
if archetype == "renewal":
|
| 1614 |
+
return "The cost is renewal without proof: fix one visible demand gap before the plan decision."
|
| 1615 |
if archetype == "compliance":
|
| 1616 |
return "The risk is process drift: the team may keep using the old checklist after the trigger window."
|
| 1617 |
if archetype == "demand" and car.views_30d:
|
|
|
|
| 1625 |
if cat == "dentists":
|
| 1626 |
if archetype == "compliance":
|
| 1627 |
return "the 3-point clinic checklist and patient-safe counter note"
|
| 1628 |
+
if archetype == "renewal":
|
| 1629 |
+
return "the 3-point clinic recovery checklist"
|
| 1630 |
if archetype == "demand":
|
| 1631 |
return "the patient-safe service note and GBP update"
|
| 1632 |
return "the clinic checklist and patient-safe reply"
|
|
|
|
| 1873 |
return "I can draft a consent-safe approval note for you first."
|
| 1874 |
if customer:
|
| 1875 |
if kind == "chronic_refill_due":
|
| 1876 |
+
return "Reply CONFIRM and the pharmacist will verify stock and delivery details before preparing it."
|
| 1877 |
if kind in {"recall_due", "appointment_tomorrow"}:
|
| 1878 |
return "Reply YES to confirm, or send a better time."
|
| 1879 |
if kind in {"customer_lapsed_hard", "customer_lapsed_soft"}:
|
|
|
|
| 2514 |
"locality": "locality",
|
| 2515 |
"verified": "verified",
|
| 2516 |
"merchant_offer_status": "merchant offer",
|
| 2517 |
+
"implied_gap": "baseline gap",
|
| 2518 |
+
"implied_loss": "estimated value gap",
|
| 2519 |
"metric": "metric",
|
| 2520 |
"delta_pct": "delta",
|
| 2521 |
"vs_baseline": "baseline",
|
judge_full_release_log.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 42,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 9,
|
| 11 |
+
"engagement": 7,
|
| 12 |
+
"hint": "Fold the 22-day stale-posts and sub-median CTR into the cost of delay to make inaction feel expensive.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 41,
|
| 20 |
+
"specificity": 8,
|
| 21 |
+
"category_fit": 9,
|
| 22 |
+
"merchant_fit": 8,
|
| 23 |
+
"decision_quality": 9,
|
| 24 |
+
"engagement": 7,
|
| 25 |
+
"hint": "A whisper of calendar pressure and renewal proximity can turn clinical clarity into immediate action without breaking peer tone.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 8 below baseline. Do not let the leak sit another cycle. GBP is unverified; no active merchant offer; only 4 calls came through in 30d, so the fastest fix is listing cleanup plus owner callback. Say GO and I'll draft the GBP cleanup checklist and missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "Let the dormant signal whisper that unverified GBP is bleeding appointments before they renew.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 39,
|
| 46 |
+
"specificity": 8,
|
| 47 |
+
"category_fit": 7,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 7,
|
| 51 |
+
"hint": "A whisper of scarcity around peak-hour slots can tip quiet owners into motion without breaking warmth.",
|
| 52 |
+
"body": "Anjali, your customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand. Restart warm, not salesy: one slot-led comeback note for recent visitors. I'll keep it slot-led around your busiest hour. Say YES and I'll prepare it now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 39,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 6,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "Let the 50-minute sting hint at tables turning faster than pies can leave the oven.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". This is a reply-and-ops moment, not a promo. Say YES and I'll draft the public reply pattern plus the counter/team checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 36,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 8,
|
| 74 |
+
"merchant_fit": 8,
|
| 75 |
+
"decision_quality": 7,
|
| 76 |
+
"engagement": 6,
|
| 77 |
+
"hint": "Let the ledger speak: HSR peers gaining while views bleed makes the next seven days a wager against pride, not just a nudge.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. Keep it no-shame and restart-focused before another week of restart decisions passes. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft a 7-day comeback class nudge now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 41,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 7,
|
| 87 |
+
"merchant_fit": 9,
|
| 88 |
+
"decision_quality": 8,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "A whisper of social proof at the finish line could tip urgency without breaking taboo.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ \u00e2\u201a\u00b9149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 39,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 8,
|
| 100 |
+
"merchant_fit": 7,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Let the recall whisper its own consequence while your checklist waits in the wings.",
|
| 104 |
+
"body": "Ramesh, supply alert: urgent stock action for atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ. Check the 240 repeat/chronic customer context before outreach. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the replacement-call list plus counter checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 41,
|
| 111 |
+
"specificity": 8,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 9,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 7,
|
| 116 |
+
"hint": "Let silence verify what urgency amplifies.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll prepare the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 38,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 7,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 6,
|
| 129 |
+
"hint": "Fold her 22-day stale-post gap and sub-median CTR into the threat so the 'sharper listing' is a rescue, not an upsell.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ \u00e2\u201a\u00b9199. Your hook is Dental Cleaning @ \u00e2\u201a\u00b9299. This week, nearby searchers will compare both profiles. Say GO and I'll draft a sharper local listing post that protects your nearby demand."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 39,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 8,
|
| 141 |
+
"engagement": 7,
|
| 142 |
+
"hint": "Let silence cost her a busy-hour slot she can't reclaim once the week fills.",
|
| 143 |
+
"body": "Anjali, your customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand. Restart warm, not salesy: one slot-led comeback note for recent visitors. I'll keep it slot-led around your busiest hour. Say YES and I'll prepare it now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_full_release_log_after_fix.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 41,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 8,
|
| 11 |
+
"engagement": 7,
|
| 12 |
+
"hint": "Fold her 22-day stale-posts and sub-median CTR into the compliance hook so the regulation feels like a reputational lever, not just a checklist.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 36,
|
| 20 |
+
"specificity": 7,
|
| 21 |
+
"category_fit": 8,
|
| 22 |
+
"merchant_fit": 7,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 6,
|
| 25 |
+
"hint": "A whisper of local ranking bleed often hides in plain sight when GBP sleeps.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 8 below baseline. Do not let the leak sit another cycle. GBP is unverified; no active merchant offer; only 4 calls came through in 30d, so the fastest fix is listing cleanup plus owner callback. Say GO and I'll draft the GBP cleanup checklist and missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "Let the checklist preview whisper ROI before the bill lands.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 39,
|
| 46 |
+
"specificity": 8,
|
| 47 |
+
"category_fit": 7,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 7,
|
| 51 |
+
"hint": "A dusk-lit mirror reflects only what is brought to it.",
|
| 52 |
+
"body": "Anjali, your customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand. Restart warm, not salesy: one slot-led comeback note for recent visitors. I'll keep it slot-led around your busiest hour. Say YES and I'll prepare it now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 40,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 7,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "Let the rising 4-review wave threaten the Tue-Thu BOGO flow to sharpen the yes-now sting.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". This is a reply-and-ops moment, not a promo. Say YES and I'll draft the public reply pattern plus the counter/team checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 36,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 8,
|
| 74 |
+
"merchant_fit": 8,
|
| 75 |
+
"decision_quality": 7,
|
| 76 |
+
"engagement": 6,
|
| 77 |
+
"hint": "A streak about to break carries more weight than a calendar nudge.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. Keep it no-shame and restart-focused before another week of restart decisions passes. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft a 7-day comeback class nudge now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 42,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 7,
|
| 87 |
+
"merchant_fit": 10,
|
| 88 |
+
"decision_quality": 8,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "A whisper of social proof could tip urgency without breaking taboos.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ \u00e2\u201a\u00b9149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 39,
|
| 98 |
+
"specificity": 8,
|
| 99 |
+
"category_fit": 9,
|
| 100 |
+
"merchant_fit": 7,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Let the recall's reach speak for itself without naming the machinery behind the counter.",
|
| 104 |
+
"body": "Ramesh, supply alert: urgent stock action for atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ. Check the 240 repeat/chronic customer context before outreach. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the replacement-call list plus counter checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 38,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 6,
|
| 116 |
+
"hint": "A whisper of scarcity wrapped in sunrise precision nudges the hand to move before the light shifts.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll prepare the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 38,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 7,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 6,
|
| 129 |
+
"hint": "A whisper of peer momentum often bends the scroll before logic ever weighs the choice.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ \u00e2\u201a\u00b9199. Your hook is Dental Cleaning @ \u00e2\u201a\u00b9299. This week, nearby searchers will compare both profiles. Say GO and I'll draft a sharper local listing post that protects your nearby demand."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 39,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 8,
|
| 141 |
+
"engagement": 7,
|
| 142 |
+
"hint": "Let silence cost more than the reply.",
|
| 143 |
+
"body": "Anjali, your customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand. Restart warm, not salesy: one slot-led comeback note for recent visitors. I'll keep it slot-led around your busiest hour. Say YES and I'll prepare it now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_full_release_log_after_restart.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 43,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 9,
|
| 11 |
+
"engagement": 8,
|
| 12 |
+
"hint": "Fold their 22-day stale posts and CTR dip into the cost of delayed compliance to sharpen the now-or-never hook.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 36,
|
| 20 |
+
"specificity": 7,
|
| 21 |
+
"category_fit": 8,
|
| 22 |
+
"merchant_fit": 7,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 6,
|
| 25 |
+
"hint": "A whisper of calendar precision and a peer's nod from the corridor often tightens the loop without raising volume.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 8 below baseline. Do not let the leak sit another cycle. GBP is unverified; no active merchant offer; only 4 calls came through in 30d, so the fastest fix is listing cleanup plus owner callback. Say GO and I'll draft the GBP cleanup checklist and missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "A whisper of local ranking bleed and a single peer benchmark can tip the scale without breaking clinical reserve.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 38,
|
| 46 |
+
"specificity": 7,
|
| 47 |
+
"category_fit": 8,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 6,
|
| 51 |
+
"hint": "A whisper of peer scarcity and the unspoken cost of empty chairs after dark can move dormant owners faster than gentle nudges.",
|
| 52 |
+
"body": "Anjali, customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand. Before this week's evening slots go cold, make one warm comeback ask. Draft one slot-led comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 41,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 8,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "A tighter cost-of-delay line showing rupees per late ticket could tip urgency from 3 to 5 without hype.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". That is a kitchen-dispatch problem before it is a promo problem. Keep Buy 1 Pizza Get 1 Free (Tue-Thu) out of peak-delay windows until dispatch is tighter. Say YES and I'll draft the public reply plus a 3-step prep/rider handoff checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 38,
|
| 72 |
+
"specificity": 8,
|
| 73 |
+
"category_fit": 9,
|
| 74 |
+
"merchant_fit": 7,
|
| 75 |
+
"decision_quality": 8,
|
| 76 |
+
"engagement": 6,
|
| 77 |
+
"hint": "Let the post-resolution window whisper urgency without shouting; tie the 245 to a visible ripple in HSR Layout.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. Calls are also -35%. You still have 245 active members to build proof around. Do not buy cold ads into the April-June dip; make the next 7 days about trial-to-restart conversion. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft the 7-day class comeback post now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 44,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 8,
|
| 87 |
+
"merchant_fit": 10,
|
| 88 |
+
"decision_quality": 9,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "A whisper of scarcity around the 150-mark could tilt urgency without breaking the practical voice.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ Rs 149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 41,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 9,
|
| 100 |
+
"merchant_fit": 8,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Let the recall notice and batch ledger speak; imply consequence without declaring it.",
|
| 104 |
+
"body": "Ramesh, supply alert: pull atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ before the next refill sale. Check the 240 repeat/chronic customer context before outreach. You already asked for the list; this is the same action moment. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the affected-customer list plus counter replacement checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 38,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 6,
|
| 116 |
+
"hint": "Let the unclaimed fourteen calls echo as a quiet tax on tomorrow's prescriptions.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll prepare the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 41,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 9,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 7,
|
| 129 |
+
"hint": "Let the ledger speak while the scalpel waits.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ Rs 199. Your hook is Dental Cleaning @ Rs 299. This week, nearby searchers will compare both profiles. Say GO and I'll draft the local listing post that makes your clinic look current before patients compare."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 39,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 8,
|
| 141 |
+
"engagement": 7,
|
| 142 |
+
"hint": "Let silence do the lifting: hint at what the last 38 days already cost.",
|
| 143 |
+
"body": "Anjali, customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand. Before this week's evening slots go cold, make one warm comeback ask. Draft one slot-led comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_full_release_log_final.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 43,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 9,
|
| 11 |
+
"engagement": 8,
|
| 12 |
+
"hint": "Fold her 22-day stale-posts and sub-median CTR into the compliance narrative to make the audit feel like a reputational reset as well as a regulatory one.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 43,
|
| 20 |
+
"specificity": 9,
|
| 21 |
+
"category_fit": 9,
|
| 22 |
+
"merchant_fit": 9,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 8,
|
| 25 |
+
"hint": "Let the calendar and the delta speak; keep the script promise tight so the ask feels surgical, not salesy.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 4 vs 12 baseline: 8 calls below baseline before Pro renewal in 12 days. GBP is unverified and there is no live offer, so patients in Andheri West will not see a fresh reason to call back. Say GO and I'll draft the 3-step GBP fix plus missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 39,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 7,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "A whisper of peer evidence\u2014how many similar clinics recovered calls within a week\u2014would tip the scale without breaking clinical reserve.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 38,
|
| 46 |
+
"specificity": 7,
|
| 47 |
+
"category_fit": 8,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 6,
|
| 51 |
+
"hint": "A quiet suite forgets the last song that kept chairs full.",
|
| 52 |
+
"body": "Anjali, customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 41,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 8,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "Let silence on the line do the work\u2014imply the reviews are still live and costing orders right now.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". That is a kitchen-dispatch problem before it is a promo problem. Keep Buy 1 Pizza Get 1 Free (Tue-Thu) out of peak-delay windows until dispatch is tighter. Say YES and I'll draft the public reply plus a 3-step prep/rider handoff checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 36,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 8,
|
| 74 |
+
"merchant_fit": 8,
|
| 75 |
+
"decision_quality": 7,
|
| 76 |
+
"engagement": 6,
|
| 77 |
+
"hint": "Anchor the 245 members as social proof in motion and let the post-resolution window frame the comeback as inevitable, not optional.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. Calls are also -35%. You still have 245 active members to build proof around. Do not buy cold ads into the April-June dip; make the next 7 days about trial-to-restart conversion. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft the 7-day class comeback post now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 41,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 8,
|
| 87 |
+
"merchant_fit": 9,
|
| 88 |
+
"decision_quality": 8,
|
| 89 |
+
"engagement": 7,
|
| 90 |
+
"hint": "A whisper of social momentum beats a shout\u2014let the milestone do the heavy lifting.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ Rs 149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 41,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 8,
|
| 100 |
+
"merchant_fit": 9,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Let the recall timeline whisper the cost of delay without naming it.",
|
| 104 |
+
"body": "Ramesh, supply alert: pull atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ before the next refill sale. Check the 240 repeat/chronic customer context before outreach. You already asked for the list; this is the same action moment. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the affected-customer list plus counter replacement checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 38,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 6,
|
| 116 |
+
"hint": "A whisper of local color and a tighter loss frame sharpen response without breaking trust.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift and no active merchant offer. Every refill search that lands before verification sees less trust. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll draft the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 41,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 9,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 7,
|
| 129 |
+
"hint": "Let proximity sharpen the scalpel.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ Rs 199. Your hook is Dental Cleaning @ Rs 299. This week, nearby searchers will compare both profiles. Say GO and I'll draft the local listing post that makes your clinic look current before patients compare."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 39,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 8,
|
| 141 |
+
"engagement": 7,
|
| 142 |
+
"hint": "Evening-slot scarcity plus a whisper of peer uptake can tip hesitation faster than a lone comeback ask.",
|
| 143 |
+
"body": "Anjali, customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_short_fallback_log.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 30,
|
| 7 |
+
"specificity": 10,
|
| 8 |
+
"category_fit": 5,
|
| 9 |
+
"merchant_fit": 5,
|
| 10 |
+
"decision_quality": 5,
|
| 11 |
+
"engagement": 5,
|
| 12 |
+
"hint": "LLM scoring failed - using basic heuristics",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
}
|
| 15 |
+
]
|
judge_unseen_adaptive_full_log.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 42,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 9,
|
| 11 |
+
"engagement": 7,
|
| 12 |
+
"hint": "A whisper of the \u20b9299 cleaning offer could turn compliance into a recall opportunity without breaking clinical tone.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 43,
|
| 20 |
+
"specificity": 9,
|
| 21 |
+
"category_fit": 9,
|
| 22 |
+
"merchant_fit": 9,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 8,
|
| 25 |
+
"hint": "A whisper of local authority quietly seals the click when numbers alone hesitate.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 4 vs 12 baseline: 8 calls below baseline before Pro renewal in 12 days. GBP is unverified and there is no live offer, so patients in Andheri West will not see a fresh reason to call back. Say GO and I'll draft the 3-step GBP fix plus missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "A dormant list plus an unverified GBP quietly starves new patient flow while renewal nears.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 38,
|
| 46 |
+
"specificity": 7,
|
| 47 |
+
"category_fit": 8,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 6,
|
| 51 |
+
"hint": "Let silence cost more than words.",
|
| 52 |
+
"body": "Anjali, customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 41,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 8,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "A whisper of social proof from nearby tables can tip busy owners from thinking to doing.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". That is a kitchen-dispatch problem before it is a promo problem. Keep Buy 1 Pizza Get 1 Free (Tue-Thu) out of peak-delay windows until dispatch is tighter. Say YES and I'll draft the public reply plus a 3-step prep/rider handoff checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 35,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 8,
|
| 74 |
+
"merchant_fit": 6,
|
| 75 |
+
"decision_quality": 7,
|
| 76 |
+
"engagement": 7,
|
| 77 |
+
"hint": "Anchor claims only to payload fields the merchant can audit; let the calendar and CTR do the heavy lifting.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. 245 active members are the proof to show, not a discount to shout. April-June is the weak acquisition window in HSR Layout; the next 7 days should look like classes are alive, not like ads are desperate. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft the 7-day trial-to-restart class post now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 44,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 8,
|
| 87 |
+
"merchant_fit": 10,
|
| 88 |
+
"decision_quality": 9,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "A milestone so close it almost drafts itself\u2014let the numbers finish the sentence.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ Rs 149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 42,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 9,
|
| 100 |
+
"merchant_fit": 8,
|
| 101 |
+
"decision_quality": 9,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Fold in the 15% senior offer as a counter-script lever without sounding promotional.",
|
| 104 |
+
"body": "Ramesh, supply alert: pull atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ before the next refill sale. Check the 240 repeat/chronic customer context before outreach. You already asked for the list; this is the same action moment. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the affected-customer list plus counter replacement checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 38,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 6,
|
| 116 |
+
"hint": "Anchor the 30% uplift to Gomti Nagar refill searches and let the postcard timeline do the silent urgency.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift and no active merchant offer. Every refill search that lands before verification sees less trust. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll draft the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 41,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 9,
|
| 126 |
+
"merchant_fit": 8,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 7,
|
| 129 |
+
"hint": "A whisper of peer scrutiny sharpens faster than a shout of opportunity.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ Rs 199. Your hook is Dental Cleaning @ Rs 299. This week, nearby searchers will compare both profiles. Say GO and I'll draft the local listing post that makes your clinic look current before patients compare."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 37,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 7,
|
| 141 |
+
"engagement": 6,
|
| 142 |
+
"hint": "A whispered detail about the last popular stylist or chair can turn a quiet profile into a busy chair without shouting discounts.",
|
| 143 |
+
"body": "Anjali, customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_unseen_adaptive_full_log_after_gym.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 42,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 9,
|
| 11 |
+
"engagement": 7,
|
| 12 |
+
"hint": "A whisper of peer compliance rates and a nod to their idle offer calendar would tighten the knot without breaking clinical authority.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 41,
|
| 20 |
+
"specificity": 9,
|
| 21 |
+
"category_fit": 8,
|
| 22 |
+
"merchant_fit": 9,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 7,
|
| 25 |
+
"hint": "A whisper of local search share at risk sharpens the sting without shouting guarantees.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 4 vs 12 baseline: 8 calls below baseline before Pro renewal in 12 days. GBP is unverified and there is no live offer, so patients in Andheri West will not see a fresh reason to call back. Say GO and I'll draft the 3-step GBP fix plus missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "Let the 30-day call metric whisper a before/after contrast without ever promising a cure.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 38,
|
| 46 |
+
"specificity": 7,
|
| 47 |
+
"category_fit": 8,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 6,
|
| 51 |
+
"hint": "The quiet after expiry holds more weight than the view count when the calendar speaks first.",
|
| 52 |
+
"body": "Anjali, customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 41,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 8,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 8,
|
| 63 |
+
"engagement": 7,
|
| 64 |
+
"hint": "Let silence do the selling\u2014imply the checklist already knows where the 50-minute bleed hides.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". That is a kitchen-dispatch problem before it is a promo problem. Keep Buy 1 Pizza Get 1 Free (Tue-Thu) out of peak-delay windows until dispatch is tighter. Say YES and I'll draft the public reply plus a 3-step prep/rider handoff checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 38,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 8,
|
| 74 |
+
"merchant_fit": 8,
|
| 75 |
+
"decision_quality": 8,
|
| 76 |
+
"engagement": 7,
|
| 77 |
+
"hint": "Let the 22 recent calls and above-peer CTR do the talking\u2014frame the dip as a missed beat in an otherwise strong rhythm.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. 245 active members are the proof to show, not a discount to shout. April-June is the weak acquisition window in HSR Layout; the next 7 days should look like classes are alive, not like ads are desperate. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft the 7-day trial-to-restart class post now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 44,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 8,
|
| 87 |
+
"merchant_fit": 10,
|
| 88 |
+
"decision_quality": 9,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "A whisper of social proof at the tipping point can tip the scale without breaking taboo.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ Rs 149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 41,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 8,
|
| 100 |
+
"merchant_fit": 9,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "Let the recall timeline whisper the cost of delay without naming it.",
|
| 104 |
+
"body": "Ramesh, supply alert: pull atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ before the next refill sale. Check the 240 repeat/chronic customer context before outreach. You already asked for the list; this is the same action moment. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the affected-customer list plus counter replacement checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 38,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 6,
|
| 116 |
+
"hint": "A whisper of local search share slipping past competitors can tighten the noose without breaking trust.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift and no active merchant offer. Every refill search that lands before verification sees less trust. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll draft the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 41,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 9,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 7,
|
| 129 |
+
"hint": "The listing update must visibly precede the comparison moment; signal decay is faster than clinical recall.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ Rs 199. Your hook is Dental Cleaning @ Rs 299. This week, nearby searchers will compare both profiles. Say GO and I'll draft the local listing post that makes your clinic look current before patients compare."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 37,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 7,
|
| 141 |
+
"engagement": 6,
|
| 142 |
+
"hint": "Evening silence in Aundh waits for no calendar.",
|
| 143 |
+
"body": "Anjali, customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_unseen_adaptive_full_log_final.json
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"trigger_id": "trg_002_compliance_dci_radiograph",
|
| 4 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 5 |
+
"customer_id": null,
|
| 6 |
+
"total": 41,
|
| 7 |
+
"specificity": 9,
|
| 8 |
+
"category_fit": 9,
|
| 9 |
+
"merchant_fit": 8,
|
| 10 |
+
"decision_quality": 8,
|
| 11 |
+
"engagement": 7,
|
| 12 |
+
"hint": "Fold her 22-day stale posts and sub-median CTR into the compliance risk to make the audit feel urgent for visibility, not just paperwork.",
|
| 13 |
+
"body": "Dr. Meera, immediate action needed: DCI revised radiograph dose limits effective 2026-12-15 from Dental Council of India circular 2026-11-04. Maximum dose per IOPA exposure drops from 1.5 mSv to 1.0 mSv. E-speed film passes at the new limit; D-speed does not. Digital RVG sensors unaffected. For your Lajpat Nagar clinic, audit your X-ray setup before Dec 15; document E-speed or RVG in your SOPs. A missed audit risks staff using the wrong film after the deadline. Say GO and I'll draft the 5-point SOP checklist and patient-safe counter note now."
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"trigger_id": "trg_004_perf_dip_bharat",
|
| 17 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 18 |
+
"customer_id": null,
|
| 19 |
+
"total": 41,
|
| 20 |
+
"specificity": 9,
|
| 21 |
+
"category_fit": 8,
|
| 22 |
+
"merchant_fit": 9,
|
| 23 |
+
"decision_quality": 8,
|
| 24 |
+
"engagement": 7,
|
| 25 |
+
"hint": "A whisper of local search share at risk sharpens the sting without crossing into taboo territory.",
|
| 26 |
+
"body": "Dr. Bharat, calls are 4 vs 12 baseline: 8 calls below baseline before Pro renewal in 12 days. GBP is unverified and there is no live offer, so patients in Andheri West will not see a fresh reason to call back. Say GO and I'll draft the 3-step GBP fix plus missed-call callback script now."
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"trigger_id": "trg_005_renewal_due_bharat",
|
| 30 |
+
"merchant_id": "m_002_bharat_dentist_mumbai",
|
| 31 |
+
"customer_id": null,
|
| 32 |
+
"total": 41,
|
| 33 |
+
"specificity": 8,
|
| 34 |
+
"category_fit": 9,
|
| 35 |
+
"merchant_fit": 9,
|
| 36 |
+
"decision_quality": 8,
|
| 37 |
+
"engagement": 7,
|
| 38 |
+
"hint": "Let the unverified GBP and severe dip speak before the spend ask so the checklist feels like rescue, not upsell.",
|
| 39 |
+
"body": "Dr. Bharat, Pro is due in 12 days for \u20b94,999; calls are down with 4 30d calls. Before renewal, fix the patient acquisition gap first. Say GO and I'll prepare the 3-point clinic recovery checklist now."
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"trigger_id": "trg_009_winback_glamour",
|
| 43 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 44 |
+
"customer_id": null,
|
| 45 |
+
"total": 38,
|
| 46 |
+
"specificity": 7,
|
| 47 |
+
"category_fit": 8,
|
| 48 |
+
"merchant_fit": 9,
|
| 49 |
+
"decision_quality": 8,
|
| 50 |
+
"engagement": 6,
|
| 51 |
+
"hint": "A whisper of evening-slot scarcity and a peer nod can tip quiet demand into motion without shouting discounts.",
|
| 52 |
+
"body": "Anjali, customer outreach has been quiet for 38 days and 24 lapsed customers are waiting for a reason to return; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"trigger_id": "trg_011_review_theme_late_delivery",
|
| 56 |
+
"merchant_id": "m_005_pizzajunction_restaurant_delhi",
|
| 57 |
+
"customer_id": null,
|
| 58 |
+
"total": 43,
|
| 59 |
+
"specificity": 9,
|
| 60 |
+
"category_fit": 8,
|
| 61 |
+
"merchant_fit": 9,
|
| 62 |
+
"decision_quality": 9,
|
| 63 |
+
"engagement": 8,
|
| 64 |
+
"hint": "A whisper of social proof from nearby pizzerias could tip urgency without breaking voice.",
|
| 65 |
+
"body": "Suresh, 4 reviews in 30d mention delivery late; one says \"took 50 mins for a 15 min ride\". That is a kitchen-dispatch problem before it is a promo problem. Keep Buy 1 Pizza Get 1 Free (Tue-Thu) out of peak-delay windows until dispatch is tighter. Say YES and I'll draft the public reply plus a 3-step prep/rider handoff checklist now."
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"trigger_id": "trg_014_seasonal_acquisition_dip_powerhouse",
|
| 69 |
+
"merchant_id": "m_007_powerhouse_gym_bangalore",
|
| 70 |
+
"customer_id": null,
|
| 71 |
+
"total": 39,
|
| 72 |
+
"specificity": 7,
|
| 73 |
+
"category_fit": 9,
|
| 74 |
+
"merchant_fit": 8,
|
| 75 |
+
"decision_quality": 8,
|
| 76 |
+
"engagement": 7,
|
| 77 |
+
"hint": "Anchor the 30% slide against last year's HSR Layout April baseline to make the dip feel reversible rather than routine.",
|
| 78 |
+
"body": "Karthik, seasonal perf dip: views dropped 30% in 7d. 245 active members are the proof to show, not a discount to shout. April-June is the weak acquisition window in HSR Layout; the next 7 days should look like classes are alive, not like ads are desperate. Use 3 FREE Trial Classes only as the hook. No guilt, just the next session. Reply YES. I'll draft the 7-day trial-to-restart class post now."
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"trigger_id": "trg_012_milestone_mylari",
|
| 82 |
+
"merchant_id": "m_006_southindiancafe_restaurant_bangalore",
|
| 83 |
+
"customer_id": null,
|
| 84 |
+
"total": 42,
|
| 85 |
+
"specificity": 9,
|
| 86 |
+
"category_fit": 7,
|
| 87 |
+
"merchant_fit": 10,
|
| 88 |
+
"decision_quality": 8,
|
| 89 |
+
"engagement": 8,
|
| 90 |
+
"hint": "Let the milestone breathe by anchoring it to the next table, not the next hour.",
|
| 91 |
+
"body": "Suresh, review count is 145, only 5 away from 150 in Indiranagar. Tie it to Weekday Lunch Thali @ Rs 149 while customers are happy. The clean play is to ask the next happy customers at billing, not create a discount. Say YES and I'll draft the 2-line review ask now."
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"trigger_id": "trg_018_supply_atorvastatin_recall",
|
| 95 |
+
"merchant_id": "m_009_apollo_pharmacy_jaipur",
|
| 96 |
+
"customer_id": null,
|
| 97 |
+
"total": 41,
|
| 98 |
+
"specificity": 9,
|
| 99 |
+
"category_fit": 9,
|
| 100 |
+
"merchant_fit": 8,
|
| 101 |
+
"decision_quality": 8,
|
| 102 |
+
"engagement": 7,
|
| 103 |
+
"hint": "A whisper of regulatory exposure and refill-stock risk would sharpen the compulsion without breaking tone.",
|
| 104 |
+
"body": "Ramesh, supply alert: pull atorvastatin batches AT2024-1102, AT2024-1108 from MfrZ before the next refill sale. Check the 240 repeat/chronic customer context before outreach. You already asked for the list; this is the same action moment. Keep it calm and pharmacist-approved; Confirm YES and I'll draft the affected-customer list plus counter replacement checklist now."
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"trigger_id": "trg_021_unverified_gbp_sunrise",
|
| 108 |
+
"merchant_id": "m_010_sunrisepharm_pharmacy_lucknow",
|
| 109 |
+
"customer_id": null,
|
| 110 |
+
"total": 39,
|
| 111 |
+
"specificity": 7,
|
| 112 |
+
"category_fit": 9,
|
| 113 |
+
"merchant_fit": 8,
|
| 114 |
+
"decision_quality": 8,
|
| 115 |
+
"engagement": 7,
|
| 116 |
+
"hint": "Let silence on the postcard do the persuading.",
|
| 117 |
+
"body": "Vikas, GBP is still unverified via postcard or phone call with 14 recent calls at stake; the context estimates 30% visibility lift and no active merchant offer. Every refill search that lands before verification sees less trust. This is a visibility fix, not a promo. Calm, clear, and claim-free. Confirm YES and I'll draft the exact 3-step verification checklist now."
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"trigger_id": "trg_023_competitor_opened_dentist",
|
| 121 |
+
"merchant_id": "m_001_drmeera_dentist_delhi",
|
| 122 |
+
"customer_id": null,
|
| 123 |
+
"total": 39,
|
| 124 |
+
"specificity": 9,
|
| 125 |
+
"category_fit": 8,
|
| 126 |
+
"merchant_fit": 7,
|
| 127 |
+
"decision_quality": 8,
|
| 128 |
+
"engagement": 7,
|
| 129 |
+
"hint": "The gap between 199 and 299 is the lever; whisper the word 'perception' without saying it.",
|
| 130 |
+
"body": "Dr. Meera, Smile Studio opened 1.3 km away on 2026-04-08 with Dental Cleaning @ Rs 199. Your hook is Dental Cleaning @ Rs 299. This week, nearby searchers will compare both profiles. Say GO and I'll draft the local listing post that makes your clinic look current before patients compare."
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"trigger_id": "trg_025_dormancy_glamour",
|
| 134 |
+
"merchant_id": "m_004_glamour_salon_pune",
|
| 135 |
+
"customer_id": null,
|
| 136 |
+
"total": 37,
|
| 137 |
+
"specificity": 8,
|
| 138 |
+
"category_fit": 7,
|
| 139 |
+
"merchant_fit": 9,
|
| 140 |
+
"decision_quality": 7,
|
| 141 |
+
"engagement": 6,
|
| 142 |
+
"hint": "A whisper of booked-out evenings and peer credibility tightens the noose without a discount.",
|
| 143 |
+
"body": "Anjali, customer outreach has been quiet for 38 days since the last subscription expiry conversation; 1200 30d views and 8 calls show the profile still has demand in Aundh. Before this week's evening slots go cold, make one warm comeback ask. Draft one warm hair/spa slot comeback note for recent visitors, not a discount blast. Say YES and I'll draft it around your busiest hour now."
|
| 144 |
+
}
|
| 145 |
+
]
|
judge_unseen_adaptive_log.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
[]
|
submission.jsonl
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|