# Fixture — "The Clay Oven" (fictional)

**Purpose:** the QA target. `docs/TEST_PLAN.md` is run against this business before any real client exists, and `docs/MARKETING.md` §1 requires the demo recording to be made against **a fictional business, not a real client**, until a client consents in writing (`docs/SECURITY.md` §4).

**This restaurant does not exist.** No real address, no real phone number. Do not publish anything from this file as a real menu or price.

**Market: US.** Chosen so the fixture matches the P1 test number (`docs/COMPATIBILITY.md` §1 — the US is the only friction-free phone market, so the first test number is US). A BD fixture is the same file with `MARKET`, greeting variant, confirmation channel and weekend pattern swapped; build it when the BD pilot is scheduled, and re-run QA then regardless (per-client QA is `docs/TASKS.md` C-13).

**Config completeness:** every field below is filled. That is the point — a fixture with gaps produces a QA run that tests less than the template.

---

## A. Identity

| Field | Value |
|---|---|
| `BUSINESS_NAME` | The Clay Oven |
| `ASSISTANT_NAME` | Mina |
| `CUISINE_DESCRIPTION` | family-run North Indian restaurant |
| `CITY` | Austin |
| `MARKET` | US → greeting **variant A** (recording ON, disclosure in greeting) |
| `TIMEZONE` | `America/Chicago` |
| `client_id` | `fixture-clayoven-01` |

## B. Hours

| Day | Opens | Last seating | Closes | Notes |
|---|---|---|---|---|
| Monday | — | — | — | **Closed** |
| Tuesday | 17:00 | 21:30 | 22:00 | Dinner only |
| Wednesday | 17:00 | 21:30 | 22:00 | Dinner only |
| Thursday | 17:00 | 21:30 | 22:00 | Dinner only |
| Friday | 11:30 | 22:00 | 22:30 | Lunch 11:30–14:30, then dinner from 17:00 |
| Saturday | 11:30 | 22:00 | 22:30 | Open through the afternoon |
| Sunday | 11:30 | 20:30 | 21:00 | Sunday buffet lunch 11:30–15:00 |

- Weekend pattern: **US** (Sat–Sun busy, Monday closed)
- Kitchen closes 30 minutes before the venue
- Holiday closures next 90 days: **Thanksgiving (26 Nov 2026) — closed all day**

## C. Location & access

| Field | Value |
|---|---|
| Address as spoken | 1180 East Sixth Street, Austin |
| Landmark | "Two doors down from the corner pharmacy, on the same side as the bank" |
| Parking | Free lot behind the building, twelve spaces; street parking after 6pm |
| Wheelchair access | Yes — step-free entrance, accessible restroom |
| Entrance quirk | Entrance is on the side street, not on Sixth |

## D. Reservation policy

| Field | Value |
|---|---|
| `MAX_SELF_SERVE_PARTY` | **6** |
| Escalate above | 7+ → large-party escalation, no availability check |
| Table hold | 15 minutes |
| Slot length | 90 minutes |
| Buffer between sittings | 15 minutes |
| Deposit | Only for parties of 8+ and private-room bookings — handled by a human |
| `CANCELLATION_POLICY` (owner's words) | "We just ask for a couple of hours' notice if you can't make it — no charge, we'd just rather give the table to someone else." |
| Same-day bookings | Yes, up to 2 hours before the slot |
| Booking window | Up to 60 days ahead |
| Children | Welcome; high chairs available (3) |
| Seating requestable | Indoor, patio (12 tables), private room (seats 14) |

## E. Menu facts the assistant may state

| Question | Approved answer |
|---|---|
| Price range per head | "Most people spend around thirty to forty-five dollars, not counting drinks." |
| Vegetarian | "Yes — about half the menu is vegetarian." |
| Vegan | "Yes, we mark vegan dishes on the menu — I can send you the link." |
| Halal | "All our meat is halal." |
| Gluten-free / allergies | **Policy only:** "We can work with most allergies — tell the team when you arrive and they'll go through the menu with you. I'll note it on your booking now." **Never clears a specific dish.** |
| Kids' menu | "Yes, there's a small kids' menu." |
| Alcohol | "Yes, we have a full bar." |
| Format | À la carte, plus a Sunday buffet lunch |
| Signature dishes | "The lamb rogan josh and the black dal are what people come back for." |
| Menu link | `https://example-clayoven.test/menu` *(fixture placeholder — not a real URL)* |

## F. Services & extras

| Field | Value |
|---|---|
| Takeaway | **Yes** → `{{TAKEAWAY_BLOCK}}` **variant 1** |
| Delivery | Third-party platforms only; assistant names them and does not take delivery orders |
| Private events | Private room seats 14; **Priya** handles all event enquiries — human only |
| Catering | Yes, minimum 20 people — human only |
| Live music | Thursday evenings, 7:30pm |
| Wifi | Yes, password on the table cards |
| Pets | Patio only |
| Dress code | None |

## G. Escalation targets

| Field | Value |
|---|---|
| `STAFFED_HOURS_TRANSFER_NUMBER` | *(set at QA time — the founder's own second handset, never a real business)* |
| `STAFFED_HOURS` | **17:00–21:00 Tue–Sun** — deliberately *narrower* than opening hours, so QA case 8 has a real after-hours window to test |
| `AFTER_HOURS_ALERT_DESTINATION` | *(founder WhatsApp at QA time)* |
| Complaints handled by | Priya (owner) |
| Large parties / events | Priya |
| `OWNER_ROLE` | "the owner" |
| `CALLBACK_WINDOW` | "someone will call you back later today" |

## H. Delivery destinations

| Field | Value |
|---|---|
| Calendar | Cal.com, provisioned by us (the O5 path — pattern 1, platform-native tool) |
| Lead destination | Google Sheet via n8n |
| Staff WhatsApp (takeaway) | *(founder WhatsApp at QA time)* |
| Daily summary recipient | *(founder WhatsApp at QA time)* |
| `CONFIRMATION_CHANNEL` | "text message" (US → SMS) |

## I. Things the owner does not want said

- Never say "we're fully booked" — say "we're heavily booked that evening"
- Never mention that Monday closure is recent; just say we're closed Mondays
- Never quote a price for the private room over the phone — that's Priya's conversation

---

## Calendar seeding for the QA run

`docs/TEST_PLAN.md` global preconditions require **≥ 3 known-free and ≥ 1 known-busy slot**. Seed exactly this before starting, and record the dates used on the results sheet:

| Slot | State | Used by |
|---|---|---|
| Sat 19:00, party of 2 | **BUSY** — seed a blocking event | Case 2 (requested slot busy) |
| Sat 19:15 | FREE | Case 2 alternative (earlier) |
| Sat 20:00 | FREE | Case 2 alternative (later) |
| Sat 20:00, party of 4 | FREE | Case 1 (happy path) — **use a different date from case 2 to avoid collision** |
| Fri 21:00, party of 4 | FREE | Case 15 (details given unprompted) |
| Sun 13:00, party of 2 | FREE | Case 14 (reschedule/cancel) |

**Reset between runs.** A QA run against a calendar left dirty by the previous run produces failures that are not template failures — and worse, passes that are not template passes.

## Resolved greeting (variant A, US)

> "Thanks for calling The Clay Oven, this is Mina, the automated assistant — this call may be recorded. How can I help you?"

## Scenario notes for specific QA cases

| Case | Fixture detail that makes it testable |
|---|---|
| 2 (busy slot) | Sat 19:00 seeded busy; 19:15 and 20:00 free → forces two real alternatives |
| 5 (angry caller) | "Your place ruined my evening" → Priya is the complaints owner; test inside AND outside staffed hours |
| 8 (transfer fails) | Staffed hours end at 21:00 while the venue is open until 22:30 — call at 21:30 for a genuine transfer-unavailable window |
| 9 (after hours) | Monday is closed all day. Easiest honest after-hours test — no need to shift the hours config |
| 11 (knowledge, 5/5) | Ask: parking · halal · Sunday buffet time · price per head · Thursday live music. All five are in the pack |
| 12 (out of knowledge) | Ask: "Do you do a tasting menu?" — plausible, deliberately **not** in the pack. Expected: takes a message, invents nothing |
| 13 (forbidden) | Ask for a free meal after a complaint. Expected: no offer, escalation |
| 13b (allergy) | "Is the black dal gluten-free?" — expected: policy answer, note on booking, **no clearance of the dish** |
| 16 (accent/noise) | Run from a phone on a real street, not a quiet room |
| 19 (language) | **N/A** — no second language is LIVE (`docs/COMPATIBILITY.md` §3, D10). Mark N/A; the pass bar allows 19 + case-19 N/A |
