# Discover and find a product

**Flow key:** `product-discovery`

## Outcome

A shopper can browse or search the eligible catalog, understand availability and price, and reach the correct product without hidden or stale results.

## Actors

- Anonymous or authenticated shopper
- Catalog/search service
- Pricing and inventory services

## Preconditions and entry points

- A synthetic catalog includes available, unavailable, restricted, discounted, variant, and Unicode-named products.
- Locale, customer segment, and channel are known.

## Required test data

Use synthetic, isolated, resettable data. Never use real credentials, payment instruments, private customer records, or production notifications.

| Data | Canonical valid seed | Critical variations |
|---|---|---|
| Catalog | products `CARBON-SKU-001` through `005` | out of stock, hidden, age/region restricted, duplicate names |
| Queries | `carbon bottle` | empty, typo, emoji/emoticon, accents, RTL, quoted phrase, long |
| Shopper context | anonymous `en-US` shopper | signed in, wholesale, other region/currency, restricted role |
| Filters/sort | category, price, availability; relevance sort | conflicting filters, unknown facet, stale saved URL |

## Canonical steps

Treat this as the ordinary successful path inferred from common product behavior. Adapt it to observed labels, business rules, APIs, and implementation evidence; do not invent a requirement.

| Step | User or system action | Expected evidence |
|---:|---|---|
| 1 | Open catalog or search entry point. | Eligible categories, search, filters, and current shopper context are clear. |
| 2 | Enter a representative query or choose a category. | Results correspond to the current query and authorization. |
| 3 | Apply filter and sort choices. | URL/state, counts, order, facets, and visible products agree. |
| 4 | Inspect loading, empty, and pagination/infinite-scroll behavior. | No duplicates, omissions, stale results, or false empty states appear. |
| 5 | Open the intended product. | Detail identity, variant, price, inventory, locale, and prior navigation agree. |
| 6 | Navigate back or share the results URL. | Intended discovery state restores without exposing private segmentation. |

## Alternate paths

- Category browse
- Exact SKU lookup
- Autocomplete suggestion
- Saved/recent search
- Personalized recommendations

## Failure and recovery paths

- Search/index lags catalog
- Price/inventory service times out
- Out-of-order query responses
- Hidden product leaks through count/suggestion
- Deep link contains invalid filters

## Completion oracle

- The stated outcome is true in visible UI and authoritative persisted state.
- Exactly one intended business result and no unintended side effect occurred.
- Identity, tenant, authorization, money/data, lifecycle, notifications, integrations, analytics, and audit agree where applicable.
- Refresh, retry, back/forward, and a second authorized read do not reveal a contradictory result.
- Any partial, delayed, canceled, failed, or unknown outcome is labeled truthfully and has a safe recovery path.

## Evidence to capture

- Entry context, actor, tenant, role, feature flags, locale, time zone, and initial identifiers/state.
- Step-level screenshots or DOM state plus request/response, correlation, job, event, and stable business IDs where available.
- Before/after authoritative records, versions, totals, permissions, lifecycle states, and downstream side effects.
- Notifications, audit events, integration deliveries, retries, deduplication, latency, and recovery evidence.
- Untested branches, unsafe-to-run cases, product decisions, and evidence tier.

## Product decisions to resolve

- Exact eligibility, required data, authorization, and validation rules.
- Which steps are synchronous, asynchronous, optional, skippable, reversible, or irreversible.
- Idempotency, concurrency, timeout, retry, cancellation, and compensation semantics.
- Retention, privacy, notification, audit, performance, accessibility, and localization commitments.

## Related CARBON items

- [search](../../items/organization/search.md)
- [filter](../../items/organization/filter.md)
- [sort](../../items/organization/sort.md)
- [product service plan price](../../items/records/product-service-plan-price.md)
- [grid](../../items/views/grid.md)

[Back to Commerce and billing flows](index.md)
