# Review-Request Flow (Google/Yelp) — policy-compliant + auditable

**Deliverable for: "Review-Request flow for Google/Yelp — compliant + tested"**

## What's here
- `review_request.py` — dependency-free decision engine. Routes each customer by
  satisfaction × platform, renders policy-compliant copy, and emits an audit record.
- `eval_set_output.json` — the 30-case eval-set (happy/neutral/unhappy/unknown ×
  Google/Yelp, plus opt-out and no-consent branches) with the branch fired,
  compliance checks, message hash, and timestamp for each case.

## Policy rules enforced (mechanically, not by review)
1. **No review gating** — unhappy customers go to `recovery_then_no_review`, never a review ask.
2. **No incentive language** — templates contain no discount/gift/freebie in exchange for reviews.
3. **No copy-paste-bombs** — one templated, personalized message per customer; opt-out honored.
4. **No fake-review steering** — copy asks for *honest* feedback, never 5 stars or scripted content.
5. **Right to decline** — every flow has an opt-out; `opt_out` branch sends nothing.

## Wiring into a trigger
Call `route()` + `render()` on your post-service event (job completed / invoice paid).
Persist `audit()` output as the audit trail. The `message_hash` is the idempotency key.

## Run
```bash
python3 review_request.py
```
