Automated run report for the Dental App — Live Walkthrough demo scene.
| Field | Value |
|---|---|
| Scene | agents/hermes/demo_scenes/dental_walkthrough |
| Run ID | dental_walkthrough_20260804T112532Z |
| Started (UTC) | 2026-08-04 11:25:32 |
| Finished (UTC) | 2026-08-04 11:29:22 |
| Duration | ~3 min 50 s |
| Result | PASS |
| Target | https://test-client-dental.dental.veripath.co.uk |
| Mode | Live interactive (control channel polled before every step) |
| Steps executed | 60 / 60 OK |
All four dental roles (Reception → Dentist → Practice Manager → Admin) were
demonstrated end-to-end in isolated Keycloak sessions, including the deliberate
RBAC block: the receptionist is denied access to Financial (HTTP 403,
"Required roles: DENTAL_ADMIN, DENTAL_PRACTICE_MANAGER"), while the Practice
Manager opens the same view successfully.
| # | Role | Action | Result | Screenshot |
|---|---|---|---|---|
| 1 | — | NOTE: Front of house — receptionist | OK | — |
| 2 | RECEPTION | USER switch (task_id demo_RECEPTION) |
OK | — |
| 3 | RECEPTION | NAVIGATE {URL} (Keycloak redirect) |
OK | — |
| 4 | RECEPTION | KEYCLOAK_LOGIN reception.test-client-dental |
OK | — |
| 5 | RECEPTION | VERIFY_VIEW /dental/practices/ |
OK | — |
| 6 | RECEPTION | VERIFY_TEXT "Test Client Dental Practice" | OK | — |
| 7 | RECEPTION | SCREENSHOT reception_practices | OK | ![]() |
| 8 | RECEPTION | NAVIGATE /dental/appointments/ |
OK | — |
| 9 | RECEPTION | VERIFY_VIEW /dental/appointments/ |
OK | — |
| 10 | RECEPTION | SCREENSHOT reception_appointments | OK | ![]() |
| 11 | RECEPTION | NAVIGATE /dental/recalls/ |
OK | — |
| 12 | RECEPTION | VERIFY_TEXT "Recall Management" | OK | — |
| 13 | RECEPTION | SCREENSHOT reception_recalls | OK | ![]() |
| 14 | RECEPTION | NAVIGATE /dental/financial/ (RBAC block) |
OK | — |
| 15 | RECEPTION | EXPECT_403 | OK (HTTP 403, permission-denied body) | — |
| 16 | RECEPTION | SCREENSHOT reception_financial_403 | OK | ![]() |
| 17 | — | NOTE: Clinical — the dentist | OK | — |
| 18 | DENTIST | USER switch (task_id demo_DENTIST) |
OK | — |
| 19 | DENTIST | NAVIGATE {URL} (signed out reception first) |
OK | — |
| 20 | DENTIST | KEYCLOAK_LOGIN dentist.test-client-dental |
OK | — |
| 21 | DENTIST | VERIFY_VIEW /dental/practices/ |
OK | — |
| 22 | DENTIST | NAVIGATE /dental/fp17/ |
OK | — |
| 23 | DENTIST | VERIFY_TEXT "FP17" | OK | — |
| 24 | DENTIST | SCREENSHOT dentist_fp17 | OK | ![]() |
| 25 | DENTIST | CLICK first claim row (Claim #72) | OK | — |
| 26 | DENTIST | SCREENSHOT dentist_fp17_detail | OK | ![]() |
| 27 | DENTIST | NAVIGATE /dental/charts/ |
OK | — |
| 28 | DENTIST | VERIFY_TEXT "Chart" | OK | — |
| 29 | DENTIST | CLICK first chart row (Tooth 27, Elena Popova) | OK | — |
| 30 | DENTIST | SCREENSHOT dentist_chart | OK | ![]() |
| 31 | DENTIST | NAVIGATE /dental/perio/ |
OK | — |
| 32 | DENTIST | CLICK first perio exam row (Elena Popova) | OK | — |
| 33 | DENTIST | SCREENSHOT dentist_perio | OK | ![]() |
| 34 | DENTIST | NAVIGATE /dental/radiographs/ |
OK | — |
| 35 | DENTIST | SCREENSHOT dentist_radiographs | OK | ![]() |
| 36 | — | NOTE: Practice Manager — financials, seats, rotas | OK | — |
| 37 | MANAGER | USER switch (task_id demo_MANAGER) |
OK | — |
| 38 | MANAGER | NAVIGATE {URL} (signed out dentist first) |
OK | — |
| 39 | MANAGER | KEYCLOAK_LOGIN manager.test-client-dental |
OK | — |
| 40 | MANAGER | VERIFY_VIEW /dental/practices/ |
OK | — |
| 41 | MANAGER | NAVIGATE /dental/financial/ |
OK | — |
| 42 | MANAGER | VERIFY_VIEW /dental/financial/ |
OK | — |
| 43 | MANAGER | SCREENSHOT manager_financial | OK | ![]() |
| 44 | MANAGER | NAVIGATE /dental/seats/ |
OK | — |
| 45 | MANAGER | SCREENSHOT manager_seats | OK | ![]() |
| 46 | MANAGER | NAVIGATE /dental/staff/ |
OK | — |
| 47 | MANAGER | SCREENSHOT manager_staff | OK | ![]() |
| 48 | — | NOTE: Admin — settings, zones, schedules, providers | OK | — |
| 49 | ADMIN | USER switch (task_id demo_ADMIN) |
OK | — |
| 50 | ADMIN | NAVIGATE {URL} (signed out manager first) |
OK | — |
| 51 | ADMIN | KEYCLOAK_LOGIN admin.test-client-dental |
OK | — |
| 52 | ADMIN | VERIFY_VIEW /dental/practices/ |
OK | — |
| 53 | ADMIN | NAVIGATE /dental/settings/zones/ |
OK | — |
| 54 | ADMIN | VERIFY_TEXT "Zone" | OK | — |
| 55 | ADMIN | SCREENSHOT admin_zones | OK | ![]() |
| 56 | ADMIN | NAVIGATE /dental/settings/schedules/ |
OK | — |
| 57 | ADMIN | SCREENSHOT admin_schedules | OK | ![]() |
| 58 | ADMIN | NAVIGATE /dental/providers/ |
OK | — |
| 59 | ADMIN | SCREENSHOT admin_providers | OK | ![]() |
| 60 | — | NOTE: Walkthrough complete | OK | — |















The receptionist (reception.test-client-dental) has no DENTAL_ADMIN /
DENTAL_PRACTICE_MANAGER role. Navigating to /dental/financial/ returned:
fetch(..., {credentials: 'include'})The same URL was then shown successfully as the Practice Manager, proving the
role→view mapping is enforced per-role, not per-route.
Interactive run with the control channel polled before every step and at the
end of the run. No viewer questions or notes were received (outbox: 5
narration entries, 0 questions, 0 notes, 0 answers).
None captured during this run.