Implement S6 doctor and A1 daily-board with fixtures.

Add operator health checks (make doctor) wrapping platform CLIs, and the fixtures-only daily board skill library with unit tests (make verify).
This commit is contained in:
Ty
2026-07-27 12:41:40 -07:00
parent 0198ab6881
commit 15f6a6c713
24 changed files with 2011 additions and 40 deletions
+37 -4
View File
@@ -1,11 +1,44 @@
# Fixtures (scaffold)
# Fixtures
Demo persona when implemented: **Claire Bennett**, **Lumina Hair Studio & Spa**.
Demo persona: **Claire Bennett**, **Lumina Hair Studio & Spa**.
All fixture data is clearly labeled in skill output — never silent fake live data.
| Path | Purpose |
|------|---------|
| `books/` | Sample QBO-shaped JSON |
| `scheduling/` | Sample appointment data for daily-board |
| `books/` | Sample QBO-shaped JSON (future) |
| `media/` | Sample social media assets for vision tests |
| `../recorded/` | Optional recorded responses (local only; do not commit secrets) |
No fixture JSON committed until **build** unless explicitly requested.
## Scheduling fixtures
| File | Description |
|------|-------------|
| `scheduling/claire_bennett_2026-07-28.json` | Sample salon day: 7 appointments (2 staff, 1 cancelled) |
### Fixture schema
```json
{
"salon_name": "Lumina Hair Studio & Spa",
"date": "2026-07-28",
"business_hours": {"open": "09:00", "close": "18:00"},
"staff": [{"name": "Claire Bennett", "role": "owner-stylist"}],
"appointments": [
{
"id": "APT-001",
"start": "2026-07-28T09:00:00",
"end": "2026-07-28T10:30:00",
"client_name": "Elena Rossi",
"service_name": "Balayage + Cut",
"staff_name": "Claire Bennett",
"status": "confirmed",
"needs_confirmation": false,
"notes": "Formula: 9.1 + 0-45 gloss"
}
]
}
```
**Status values:** `confirmed`, `pending`, `cancelled`, `completed`, `no_show`
@@ -0,0 +1,97 @@
{
"salon_name": "Lumina Hair Studio & Spa",
"date": "2026-07-28",
"business_hours": {
"open": "09:00",
"close": "18:00"
},
"staff": [
{
"name": "Claire Bennett",
"role": "owner-stylist"
},
{
"name": "Maya Torres",
"role": "colorist"
}
],
"appointments": [
{
"id": "APT-001",
"start": "2026-07-28T09:00:00",
"end": "2026-07-28T10:30:00",
"client_name": "Elena Rossi",
"service_name": "Balayage + Cut",
"staff_name": "Claire Bennett",
"status": "confirmed",
"needs_confirmation": false,
"notes": "Formula: 9.1 + 0-45 gloss. Allergic to ammonia."
},
{
"id": "APT-002",
"start": "2026-07-28T10:30:00",
"end": "2026-07-28T11:30:00",
"client_name": "Sarah Kim",
"service_name": "Blowout + Updo",
"staff_name": "Claire Bennett",
"status": "pending",
"needs_confirmation": true,
"notes": "Wedding guest — updo reference photo sent."
},
{
"id": "APT-003",
"start": "2026-07-28T11:00:00",
"end": "2026-07-28T12:30:00",
"client_name": "Jasmine Patel",
"service_name": "Root Touch-Up",
"staff_name": "Maya Torres",
"status": "confirmed",
"needs_confirmation": false,
"notes": "2B dark brown. Regular client."
},
{
"id": "APT-004",
"start": "2026-07-28T13:00:00",
"end": "2026-07-28T14:00:00",
"client_name": "Chris Nguyen",
"service_name": "Men's Cut",
"staff_name": "Claire Bennett",
"status": "pending",
"needs_confirmation": true,
"notes": "Running late from work — may be 15 min behind."
},
{
"id": "APT-005",
"start": "2026-07-28T14:00:00",
"end": "2026-07-28T15:30:00",
"client_name": "Priya Sharma",
"service_name": "Deep Conditioning Treatment",
"staff_name": "Maya Torres",
"status": "confirmed",
"needs_confirmation": false,
"notes": "Post-color repair. Keratin-safe product only."
},
{
"id": "APT-006",
"start": "2026-07-28T15:30:00",
"end": "2026-07-28T17:00:00",
"client_name": "Aisha Williams",
"service_name": "Full Color + Style",
"staff_name": "Claire Bennett",
"status": "confirmed",
"needs_confirmation": false,
"notes": "First visit — consultation included."
},
{
"id": "APT-007",
"start": "2026-07-28T12:30:00",
"end": "2026-07-28T13:00:00",
"client_name": "Tom Bradley",
"service_name": "Quick Trim",
"staff_name": "Maya Torres",
"status": "cancelled",
"needs_confirmation": false,
"notes": "Client cancelled — rescheduled to next week."
}
]
}