Frontend Definition of Ready (DoR) — Ghasi Melmastoon
Status: draft (P0)
Owner: FE Platform + Product
Applies to: every Jira ticket (
MEL-NNN) under an FE Epic before it can enterIn Progress.
A ticket is "ready" only when every applicable box is ticked. Tickets that are not ready bounce back to refinement.
Universal (every FE story)
- Outcome stated — the user-visible change is named in 1 sentence ("Guest can hold a room with cash-on-arrival from the iPhone Discover tab").
- Persona named — exactly one primary persona from
docs/frontend/common/01-product-overview-frontend.md§2. - Surface(s) named — exactly which app(s) ship this (
apps/web-tenant-booking,apps/mobile, ...). If "all consumer surfaces", call that out explicitly. - Journey link — references the
J-NNjourney file in../frontend/journeys/. If no journey exists, story is not ready until one is drafted. - Acceptance criteria — Gherkin or numbered list; covers happy path + at least 2 edge cases + 1 failure mode + 1 offline behaviour (if applicable to surface).
- Designs attached — Figma link + frame ids; designs already passed
DESIGN_REVIEW_CHECKLIST. - i18n keys — every new user-visible string has a proposed
next-intlkey and an English value; PS / DR / UR / AR translations are not blocked-on but are tracked.
API / data dependencies
- BFF endpoint identified —
bff-consumer-service/bff-tenant-booking-service/bff-backoffice-serviceand the route(s). - API contract exists —
services/<bff>/API_CONTRACTS.mdcovers the request / response shape; if not, story is blocked on a BE refinement story. - Generated client present —
packages/api-clientsexposes the typed client; if not, blocked onapi-clientsregen. - React Query key declared — follows convention; staleTime / gcTime stated.
- Mutation idempotency — declared
X-Idempotency-Keystrategy on writes.
Theming / multi-tenancy
- Tenant-variation surface declared — does this story add a new flow toggle, content block, or token? If yes,
theme-config-service/DOMAIN_MODEL.mdupdated; story is blocked until that's merged. - Suspended-tenant behaviour stated — what does this UX do for a suspended or unknown tenant?
Performance
- Performance budget known — which metrics in
../frontend/common/09-non-functional-requirements.mddoes this story risk regressing? Stated. - Loading / skeleton state designed — for any flow that fetches data; named pattern from
../frontend/catalogs/C3-empty-loading-error-state-catalog.md(P1).
Accessibility
- Keyboard flow designed — focus order, tab stops, modal trap behaviour stated.
- Screen reader pass designed — labels for icon buttons, status announcements (
aria-live), error summary. - Reduced-motion behaviour stated — what users with reduced motion see.
- Touch target compliance — designs honour 44x44 mobile / 32x32 web minimums.
Telemetry
- Telemetry events declared — name, properties, sink, expected volume; matches
C1-telemetry-event-dictionary(P1). - Funnel-step semantics declared — which
funnel.stepvalue(s) this screen/flow emits. - Privacy review — confirmed no PII in event payload.
Offline (when surface supports it)
- Offline behaviour stated — what's readable, what's blocked, what UX is shown when blocked.
- Conflict policy stated (desktop/kiosk) — for any mutation, which side wins on conflict and why.
AI (when AI is involved)
- AI purpose declared (
ai.purpose). - HITL pattern stated — accept/reject/edit UI;
decisionIdflow. - Provenance UI stated — where and how provenance card renders.
- Fallback stated — what happens when AI gateway returns 5xx / rate-limit / safety block.
- Feature flag named — default-off; per-tenant opt-in surface stated.
Security
- Auth scope stated — which scope/role is required.
- Tenant boundary stated —
X-Tenant-Idsemantics on this endpoint. - Sensitive-data handling stated — passport / national-ID / payment / lock-key.
- Audit log entries stated — what gets logged, with what fields.
Testing
- Unit tests scope stated — what is being tested at unit level.
- Component / Storybook stories stated — variants, RTL story.
- E2E required? — yes/no; if yes, journey gate id (G-WEB-N / G-MOB-N / G-DSK-N) named.
- Visual regression coverage — story covered, RTL story covered.
Cross-cutting checks
- No "implementation in spec" — story description doesn't dictate library or file structure beyond existing standards.
- Sized — story-points or t-shirt size attached.
- Owner assigned — designer + engineer pair named.
Sign-off
- Spec review: ___________ (date) — see
docs/standards/REQUIREMENTS_GUARD_RAILS.md(when present). - Design sign-off: ___________ (date)
- Engineering pull: ___________ (date moved to In Progress)