# Experience Frontend Validation Report (Quality Report)

**Date:** 2026-07-27  
**Scope:** FE-11.0 – FE-11.5 (**STOP**)  
**Backend:** experience-service v0.11.10.0 :8008

## Automated checks

| Check | Command | Result |
| --- | --- | --- |
| Route thinness | `npm run validate:experience-routes` | Pass — `app/experience/**/page.tsx` ≤25 lines |
| Nav filter | `node modules/experience/__tests__/nav-filter.mjs` | Pass |
| Accessibility smoke | `node modules/experience/__tests__/a11y-smoke.mjs` | Pass — ARIA roles/labels on DS primitives |
| Performance smoke | `node modules/experience/__tests__/perf-smoke.mjs` | Pass — ≥49 routes; API via BFF; no fake JSON |
| Architecture boundaries | `npm run validate:architecture` | Pass |
| TypeScript | `npm run typecheck` | Pass |

Full suite: `npm run validate:experience`

## Manual test plan

1. **Hub & auth:** `/experience/hub` → login → `/experience` dashboard loads
2. **Workspace switcher:** select workspace persists after refresh (localStorage)
3. **CRUD:** create workspace → site → page; edits include `version`
4. **Builder:** `/experience/pages/{id}/builder` — placements, reorder, media drawer, undo/redo
5. **Forms:** form builder saves `form_schema_json`; invalid JSON rejected
6. **Publishing:** publish-targets provisional `publish_id`; preview `/experience/preview/page/{id}`
7. **Analytics:** refresh snapshots → `POST /api/v1/analytics-snapshots/refresh`
8. **Embed:** widget snippet with provisional `publish_id`
9. **Design system:** `/experience/design-system` — RTL/LTR toggle, brand color, charts/map/timeline/kanban
10. **BFF:** browser calls `/api/experience/...` not direct `:8008`

## Seed data

```bash
cd backend/services/experience
set AUTH_REQUIRED=false
set EXPERIENCE_SEED_TENANT_ID=<tenant-uuid>
python scripts/seed_experience.py
```

## Known gaps (by design — stop at FE-11.5)

- No official Publish Target Registry — provisional IDs only
- No payment, booking, QR, short link, marketplace UI
- Published actions UI is catalog + local toggle only
- Fine-grained `experience.*` RBAC deferred to identity integration

## Artifacts

- Module: `frontend/modules/experience/`
- Routes: `frontend/app/experience/` (50 pages)
- BFF: `frontend/app/api/experience/[...path]/route.ts`
- Snapshot: `docs/service-snapshots/experience-frontend.yaml`
- Handover: `docs/phase-handover/phase-experience-fe-11-5.md`
