Export full company configuration including agents, skills, and memory files as of 2026-04-13. Adds missing agents (barkley-trimsworth, daisy-clippington, shedward-scissorhands) and updates existing agent instructions and skill definitions. Co-Authored-By: Paperclip <noreply@paperclip.ing>
14 KiB
UAT Playbook — GroomBook
CTO-owned test library. Used to create atomic UAT subtasks for Shedward. Shedward never reads this file directly.
Known Fragile Areas
Track production escapes and areas that need extra scrutiny. Use this to prioritize deeper subtasks.
| Area | Defect | Issue | Root Cause | Extra Checks |
|---|---|---|---|---|
| Portal Auth | Portal always showed "Hi, Guest" | GRO-300 | Dev session endpoint not creating portal sessions | Verify browser_network_requests for session API — must return 200, not 401/500 |
| Services Seed | Every service appeared twice | GRO-301 | Missing ON CONFLICT in seed script | Count service entries — must match expected count exactly |
| Reports | All reports showed "No data" | GRO-302 | UTC date handling in report queries | Verify with known date range that has data — must show non-empty charts |
| Landing Page | Dead-end "Please sign in" with no redirect | GRO-309 | No redirect/link when portal session missing | Verify unauthenticated portal redirects to /login |
Rule: After any production escape, add an entry here. When creating subtasks for that area, include the extra checks.
Test Data
Staff Accounts
| Name | Role | |
|---|---|---|
| Jordan Lee | jordan@groombook.dev | Manager |
| Sam Rivera | sam@groombook.dev | Groomer |
| Sarah Mitchell | sarah@groombook.dev | Groomer |
UAT Test Clients (impersonation only — clients cannot log in directly)
| Client | Pet | Notes | |
|---|---|---|---|
| UAT Test Alpha | uat-alpha@groombook.dev | TestBuddy (Golden Retriever) | Has pending invoice |
| UAT Test Bravo | uat-bravo@groombook.dev | TestMax (Labrador) | Has pending invoice |
| UAT Test Charlie | uat-charlie@groombook.dev | TestCooper (Poodle) | Has pending invoice |
Environment
- Dev URL: https://groombook.dev.farh.net
- Admin URL: https://groombook.dev.farh.net/admin
- Prod URL: https://groombook.farh.net (NEVER test here)
Navigation Rules
- Admin portal (
/admin/*): URL navigation works. - Customer portal (root
/): SPA — click sidebar links only. Never type URL paths.
TS-AUTH: Authentication
Purpose: Verify login, session management, and logout.
- Navigate to https://groombook.dev.farh.net
- PASS: Page loads without error
- Log in as Jordan Lee (jordan@groombook.dev)
- PASS: Admin dashboard loads, shows appointment data
- Check browser_console_messages
- PASS: No 500 errors, no unhandled JS exceptions
- Check browser_network_requests
- PASS: No 401 or 500 responses on API calls (session/auth endpoints must return 200)
- Click logout (or sign out link)
- PASS: Redirected to login page, session cleared
- Log back in as Jordan Lee
- PASS: Session restored, dashboard shows data
TS-APPT: Appointments
Purpose: Verify appointment calendar CRUD.
- Log in as Jordan Lee
- Navigate to /admin/appointments
- PASS: Calendar view loads with existing appointments
- Click an existing appointment
- PASS: Detail modal shows client, service, groomer, start/end, status, notes
- Click "+ New Appointment" or Book
- PASS: Booking wizard opens (Service → Date & Time → Info → Confirm)
- Select a service, date, time slot, and client
- PASS: Confirmation step shows correct details
- (Optional) Submit booking
- PASS: New appointment appears on calendar
TS-CLIENT: Client Management
Purpose: Verify client CRUD, search, enable/disable.
- Log in as Jordan Lee
- Navigate to /admin/clients
- PASS: Client list loads with multiple clients
- Use search box — type "UAT Test Alpha"
- PASS: Search filters to matching client(s)
- Click on UAT Test Alpha
- PASS: Client detail page shows name, email, pets, appointment history
- Toggle "Show disabled" filter
- PASS: Filter toggles correctly
- Click "+ New" client button
- PASS: Create client form opens
TS-PET: Pet Management
Purpose: Verify pet profiles and associations.
- Log in as Jordan Lee
- Navigate to /admin/clients
- Click UAT Test Alpha
- PASS: Client detail shows TestBuddy (Golden Retriever)
- Click on TestBuddy
- PASS: Pet profile shows breed, grooming notes, visit history
- (If available) Edit pet details
- PASS: Changes save correctly
TS-SERVICE: Services
Purpose: Verify service list, no duplicates, CRUD.
- Log in as Jordan Lee
- Navigate to /admin/services
- PASS: Services list loads
- PASS: No duplicate service entries (each service appears exactly once)
- Check service details: name, price, duration visible
- (If available) Click "+ New Service"
- PASS: Create service form opens
TS-STAFF: Staff Management
Purpose: Verify staff list, roles, super user controls.
- Log in as Jordan Lee
- Navigate to /admin/staff
- PASS: Staff list shows all team members with roles
- Click on a staff member
- PASS: Detail page shows role, permissions, schedule
- Check super user toggle
- PASS: Toggle is visible and functional for manager accounts
- Try deactivating a staff member
- PASS: Deactivation guard prompts for confirmation
TS-INVOICE: Invoicing
Purpose: Verify invoice list, creation, status workflow.
- Log in as Jordan Lee
- Navigate to /admin/invoices
- PASS: Invoice list loads with date, client, subtotal, tax, tip, total, status
- PASS: Shows both PAID and PENDING invoices
- Click "View" on an invoice
- PASS: Invoice detail opens with line items
- Click "+ Create Invoice"
- PASS: Invoice creation form opens
TS-GROUP: Group Bookings
Purpose: Verify group booking functionality.
- Log in as Jordan Lee
- Navigate to /admin/group-bookings
- PASS: Page loads (may show empty state or existing bookings)
- Click "+ New Group Booking"
- PASS: Group booking form opens with client dropdown, service/staff per slot
TS-REPORT: Reports
Purpose: Verify reports show data for valid date ranges.
- Log in as Jordan Lee
- Navigate to /admin/reports
- Set date range to cover last 30 days
- PASS: Revenue by Day shows data (not "No data for this period")
- PASS: Revenue by Groomer shows data
- PASS: Appointment Trends shows data
- PASS: Service Popularity shows data
- PASS: Client Retention shows data
- Change date range to a future period with no data
- PASS: Reports correctly show "No data for this period"
TS-SETTINGS: Settings / Branding
Purpose: Verify business settings page.
- Log in as Jordan Lee
- Navigate to /admin/settings
- PASS: Settings page loads with business name, logo upload, color pickers
- PASS: Preview reflects current settings
- PASS: Save button is functional
TS-PORTAL: Customer Portal
Purpose: Verify the full customer portal experience via impersonation. Fragile area: Portal auth has escaped to prod before (GRO-300). Always include API verification.
- Log in as Jordan Lee
- Navigate to /admin/clients
- Find UAT Test Alpha
- Click "View as client" (impersonation)
- PASS: Portal loads and shows client's name (NOT "Hi, Guest")
- PASS: "STAFF VIEW" watermark visible (impersonation indicator)
- Check browser_network_requests
- PASS: Session/auth API calls return 200 (no 401, no 500)
- Click "Appointments" in sidebar (do NOT type URL)
- PASS: Appointments page loads
- Click "My Pets" in sidebar
- PASS: Shows TestBuddy (Golden Retriever)
- Click "Billing" in sidebar
- PASS: Shows at least one pending invoice
- Click "Report Cards" in sidebar
- PASS: Page loads (may be empty)
- Click "Settings" in sidebar
- PASS: Client settings page loads
- Check browser_console_messages
- PASS: No JS errors
- Check browser_network_requests
- PASS: No failed API calls across all portal pages
- End impersonation
- PASS: Returns to admin view
TS-IMPERSONATE: Impersonation
Purpose: Verify impersonation start/end and audit trail.
- Log in as Jordan Lee
- Navigate to /admin/clients, find UAT Test Alpha
- Click "View as client"
- PASS: Portal loads with client context
- PASS: "STAFF VIEW" watermark visible
- Verify you see client-specific data (their name, pets, invoices)
- End impersonation
- PASS: Returns to admin, no residual client context
- (If available) Check audit log for impersonation entry
TS-BOOK: Public Booking Wizard
Purpose: Verify the multi-step booking flow.
- Log in as Jordan Lee
- Navigate to /admin/book (or the booking entry point)
- PASS: Step 1 (Service selection) loads with service list
- Select a service
- PASS: Step 2 (Date & Time) loads with available slots
- Select a date and time
- PASS: Step 3 (Info) loads with client/pet fields
- Fill in required info
- PASS: Step 4 (Confirm) shows summary of all selections
- (Optional) Submit booking
- PASS: Confirmation displayed, no errors
TS-SEARCH: Global Search
Purpose: Verify search across entities.
- Log in as Jordan Lee
- Use global search (if available) — search for "UAT Test Alpha"
- PASS: Client result appears
- Search for "TestBuddy"
- PASS: Pet result appears
- Search for a service name
- PASS: Relevant results appear
TS-SMOKE: Regression Smoke Test
Purpose: Quick pass across all admin sections and portal. Run after every deploy.
- Log in as Jordan Lee
- Click through each admin sidebar section:
- Appointments → PASS: loads
- Clients → PASS: loads
- Staff → PASS: loads
- Services → PASS: loads, no duplicates
- Invoices → PASS: loads
- Reports → PASS: loads
- Settings → PASS: loads
- Navigate to /admin/clients, find UAT Test Alpha, click "View as client"
- PASS: Portal shows client name (not "Hi, Guest")
- Click each portal sidebar link: Appointments, My Pets, Billing, Report Cards, Settings
- PASS: Each loads
- Check browser_console_messages
- PASS: No JS errors
- Check browser_network_requests
- PASS: No 401/500 API responses across admin + portal navigation
- End impersonation
- PASS: Back to admin
TS-PWA: PWA & Mobile Responsiveness
Purpose: Verify GroomBook works as a first-class PWA. GroomBook is NOT desktop-first — mobile/PWA is equally important.
Mobile Viewport Tests
- Resize browser to mobile viewport:
browser_resizewidth=390, height=844 (iPhone 14) - Navigate to https://groombook.dev.farh.net
- PASS: Login page is fully usable — no horizontal scroll, inputs visible
- Log in as Jordan Lee
- PASS: Admin dashboard renders cleanly at mobile width — no overflow, no cut-off content
- Check sidebar navigation
- PASS: Sidebar collapses to hamburger menu or stacks appropriately
- Navigate to /admin/appointments
- PASS: Calendar view adapts to mobile — scrollable or stacked, not clipped
- Navigate to /admin/clients
- PASS: Client list is scrollable, text readable, no horizontal overflow
- Navigate to /admin/invoices
- PASS: Invoice table is scrollable or stacked — all columns accessible
- Navigate to /admin/reports
- PASS: Charts resize to fit viewport, legends readable
- Check browser_console_messages
- PASS: No JS errors at mobile viewport
Customer Portal — Mobile
- Navigate to /admin/clients, find UAT Test Alpha, click "View as client"
- PASS: Portal loads at mobile viewport — client name visible (not "Hi, Guest")
- Click through portal sidebar links: Appointments, My Pets, Billing, Report Cards, Settings
- PASS: Each page renders correctly at mobile width
- Check browser_network_requests
- PASS: No 401/500 API responses
PWA Manifest & Installability
- Resize browser back to desktop:
browser_resizewidth=1280, height=720 - Navigate to https://groombook.dev.farh.net
- Check browser_network_requests for
/manifest.jsonor/manifest.webmanifest - PASS: Manifest file loads (200 response)
- Check browser_console_messages
- PASS: No PWA-related warnings (missing icons, invalid manifest, etc.)
Tablet Viewport (Optional)
- Resize to tablet:
browser_resizewidth=768, height=1024 - Navigate through admin sections: Appointments, Clients, Services, Invoices
- PASS: Layout adapts — not clipped, not tiny
Standard Deploy Decomposition
When a PR deploys to dev, create these UAT subtasks:
| # | Subtask | Source | When |
|---|---|---|---|
| 1 | Environment readiness + API health | TS-AUTH steps 1-8 | Always first |
| 2 | Feature-specific test(s) | TS-{feature} | Based on PR scope |
| 3 | Portal smoke + API verification | TS-PORTAL steps 1-24 | Every deploy |
| 4 | Admin smoke test | TS-SMOKE steps 1-2 | Every deploy |
| 5 | Mobile viewport smoke | TS-PWA steps 1-17 | Every deploy |
| 6 | Portal mobile smoke | TS-PWA steps 18-23 | Every deploy |
| 7 | Console + network error audit | browser_console_messages + browser_network_requests | Every deploy |
Small PRs: 3-5 subtasks. Large PRs: 8-12 subtasks.
Fragile area rule: If the PR touches an area listed in Known Fragile Areas, add the extra checks from that table into the feature-specific subtask.
Subtask Template
Use this format when creating UAT subtasks:
Title: UAT: [test area] — [what specifically]
Description:
## What
Test [feature area] after [PR/deploy context].
## Steps
[Numbered steps copied from playbook, customized with specific test data]
## Pass Criteria
[Explicit PASS conditions from the steps above]
## API Verification
After completing the steps, run browser_network_requests.
PASS: No 401, 403, or 500 responses on any API call.
If any API errors exist, this is a FAIL even if the UI looked correct.
## On PASS
Mark this issue done. Post a UAT PASS comment with what you tested.
## On FAIL
Set status to "todo", assign to CTO (2a556501-95e0-4e52-9cf1-e2034678285d).
Post what failed, steps to reproduce, expected vs actual, and attach a screenshot.