# response-style

Per-brand voice and tone settings. Read by response-drafter when drafting any public response. Brands edit this in their settings page.

## Shape

```yaml
brand: <id>
voice:
  tone:        "warm" | "neutral" | "formal"
  contractions: true
  emoji_allowed: false
  apology_allowed: true
  signature: "<text>"
banned_phrases:
  - "<phrase>"
allowed_actions:
  offer_compensation_in_public: false
  ask_to_remove_review:         false
  mention_specific_employees:   false
platform_tone_overrides:
  google:
    tone: "neutral"
  yelp:
    tone: "warm"
notes:
  - "<free-form brand-specific guidance for the drafter>"
```

## Defaults

If a brand has not set anything, response-drafter uses:

```yaml
voice:
  tone:           "warm"
  contractions:   true
  emoji_allowed:  false
  apology_allowed: true
  signature:      "<location name>"
banned_phrases:
  - "unfortunately"
  - "as per our policy"
  - "we strive for"
allowed_actions:
  offer_compensation_in_public: false
  ask_to_remove_review:         false
  mention_specific_employees:   false
platform_tone_overrides: {}
```

## Why the banned phrases

- "Unfortunately" pre-loads a defensive tone before the actual content.
- "As per our policy" reads as legalistic and pushes the customer further away.
- "We strive for [outcome]" is corporate filler. Operators don't talk like that.

## Why apology_allowed defaults to true (but is configurable)

Some brand-legal teams treat "sorry" as an admission of fault (insurance / litigation reasons). The default is to allow it because not apologizing in public reads as cold; brands that need to disable it can.

## How response-drafter applies this

- The brand's `tone` is the primary voice setting. Platform overrides win for that platform only.
- Banned phrases are matched as substrings (case insensitive); the drafter must avoid them.
- `allowed_actions` toggles drive specific guardrails in the response-drafter prompt.
- `notes` is read as additional context. Keep notes short and quote-able; the drafter doesn't have unlimited context.

## What the brand cannot do

- Disable the gate-outbound hook. The drafter still goes through human approval regardless of style.
- Disable scrub-customer-pii. The reviewer is still identified by first-name-last-initial only.
- Set `ask_to_remove_review: true`. That's a respect-platform-tos violation; the option doesn't exist.
