# Phase 10 — Search results aren't de-duplicated, and trust info is hardcoded

**Blocker:** blockers.md § "Search."
**Depends on:** nothing to start; do together with [09-nurse-verification-badge.md](09-nurse-verification-badge.md) — same root cause on the badge half.

---

## 10a. Not de-duplicated — architectural, not accidental

`NurseSearchIndex.cs:7-11` documents itself as
"one flat row per (bookable variant × covered service area)." `SqlNurseSearch.SearchAsync:20-59` filters/
sorts/paginates the raw rows with no `GroupBy(NurseId)` — `total` is a row count, so pagination itself is
row-counted. This is a stated, accepted fact of the contract client-side too
(`search/types.ts:14-15`), not previously flagged as a bug.

**Fix:** move the dedup into `SqlNurseSearch.SearchAsync` itself (must be SQL-layer, since page size needs to
be nurse-counted, not row-counted, for correct pagination) — group by `NurseId` inside the existing filter
chain, pick one representative row per nurse (e.g. lowest matching price, keep the existing rating sort),
count/paginate over the grouped set. `NurseSearchResultDto` needs a shape change to represent "one card, N
matching services."

## 10b. Trust info on the result card is hardcoded, and an unverified nurse's profile can show as verified

Both `NurseResultCard.tsx:87` and `search/nurse/[nurseId]/page.tsx:173` hardcode `state="verified"` instead of
deriving it from real data — the exact same bug as phase 09's "badge doesn't reflect reality," just a
different call site. `verification/types.ts:328-330`'s `publicBadgeState()` helper already exists for this
and isn't used by either. Fix both call sites in the same change as phase 09's verification-badge fix.

**Flag, don't guess:** whether an anonymous customer should be able to view an unverified nurse's profile at
all (vs. a clean 404) isn't stated anywhere in `mvp/`/`archive/product/`. Note this is a **display** bug, not
a money-safety bypass — `CreateBookingRequestCommand.Handler.cs:56-57` independently gates actual booking
creation on `IsVerified && IsAcceptingBookings`, so an unverified nurse reached by direct link can be shown
misleadingly but not actually booked.
