Skip to main content

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 enter In 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-NN journey 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-intl key and an English value; PS / DR / UR / AR translations are not blocked-on but are tracked.

API / data dependencies

  • BFF endpoint identifiedbff-consumer-service / bff-tenant-booking-service / bff-backoffice-service and the route(s).
  • API contract existsservices/<bff>/API_CONTRACTS.md covers the request / response shape; if not, story is blocked on a BE refinement story.
  • Generated client presentpackages/api-clients exposes the typed client; if not, blocked on api-clients regen.
  • React Query key declared — follows convention; staleTime / gcTime stated.
  • Mutation idempotency — declared X-Idempotency-Key strategy 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.md updated; story is blocked until that's merged.
  • Suspended-tenant behaviour stated — what does this UX do for a suspended or unknown tenant?

Performance

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.step value(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; decisionId flow.
  • 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 statedX-Tenant-Id semantics 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

References