---
id: CAP-COM-CAT-008
title: Present the store’s available products
feature: FEAT-COM-CAT-02
product_area: commerce
module: catalog
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
intent_sources:
  - 'services-commerce:docs/milestones/COMM-M1-set-up-what-you-sell.md#D8'
  - 'services-commerce:docs/milestones/COMM-M1-set-up-what-you-sell.md#D10'
purpose: >-
  Shoppers receive the catalog presentation and prices appropriate to their
  store and identity.
outcomes:
  - Shoppers see exclusively what is for sale to them.
  - >-
    Authenticated buyers receive their applicable pricing and visitors receive
    public amounts with sign-in guidance.
concepts:
  - CON-COM-CAT-003
  - CON-COM-CAT-004
actors:
  - ACT-COM-005
  - ACT-COM-006
  - ACT-COM-004
surfaces:
  - portal
  - api
permissions:
  - key: commerce.storefront.read
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-COM-CAT-008-01
    statement: >-
      A visible store item requires an active store, an admitted category, a
      published listing or direct-page unlisted listing, and an active
      Accounting product currently on sale and visible to the portal.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/unit/storefront/storefront-visibility.spec.js#removes
      a product not yet on sale, and one whose sale has ended (the end
      exclusive)
    origin: COMM-M1 D8 (docs/milestones/COMM-M1-set-up-what-you-sell.md)
  - id: BR-CAP-COM-CAT-008-02
    statement: >-
      Signed-in buyers lose products their purchase eligibility refuses;
      anonymous visitors retain those products with a notice that signing in may
      change availability.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#is
      not evaluated for eligibility: a bound product is shown, flagged that
      signing in may change its availability
    origin: none
  - id: BR-CAP-COM-CAT-008-03
    statement: >-
      Visitors receive Standard pricing alongside only publicly displayed
      audience prices and a notice that authentication may change pricing.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#shows
      the audiences marked for public display beside the Standard price (D10):
      the Members price 2000, with its audience
    origin: COMM-M1 D10 (docs/milestones/COMM-M1-set-up-what-you-sell.md)
  - id: BR-CAP-COM-CAT-008-04
    statement: Storefront pricing uses the signed-in buyer’s own identity.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#prices
      a portal member as themselves (the recorded member: the member price,
      nothing signing in could change)
    origin: none
  - id: BR-CAP-COM-CAT-008-05
    statement: >-
      Absent an explicit sort, storefront lists use configured merchandising
      order with featured items first; search matches names and headlines and
      pages contain at most sixty items.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.queries.integration.spec.js#answers
      the published listings that sell now, featured first then in sort order,
      under the rule `all`
    origin: none
  - id: BR-CAP-COM-CAT-008-06
    statement: >-
      Currency prohibition leaves a product visible with an
      unavailable-in-currency indication.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#sees
      a prohibited currency as unavailable_in_currency, the listing kept
    origin: none
  - id: BR-CAP-COM-CAT-008-07
    statement: >-
      Availability uses descriptive words and displays units on hand only when
      the listing enables a remaining count.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/unit/storefront/storefront-availability.spec.js#shows
      the units on hand when the listing shows its remaining count
    origin: none
    note: >-
      Product has not yet confirmed the recommendation defining displayed
      on-hand counts.
  - id: BR-CAP-COM-CAT-008-08
    statement: >-
      Inactive stores return empty lists, unknown stores are not found, and
      draft or out-of-assortment products have no storefront page.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#opens
      an unlisted product by its page, and is answered 404 for a draft and for a
      product another store does not sell
    origin: none
  - id: BR-CAP-COM-CAT-008-09
    statement: >-
      Console readers receive removal reasons for excluded listings and a
      diagnostic product page rather than an unexplained not-found result.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#is
      told, per listing a rule removed, which rule
    origin: none
  - id: BR-CAP-COM-CAT-008-10
    statement: >-
      Public storefront requests need no authentication, use the addressed
      workspace alone, refuse unavailable workspaces and ignore supplied signed
      context.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/catalog-security.e2e.spec.js#ignores
      a signed context it is handed: no diagnosis, the public prices
    origin: none
scenarios:
  - id: SC-CAP-COM-CAT-008-01
    given: >-
      Style Guide is published in an active store with Standard and public
      Member prices
    when: Browse without authentication
    then: >-
      Its presentation includes both prices and the notice that signing in may
      change pricing
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#shows
      the audiences marked for public display beside the Standard price (D10):
      the Members price 2000, with its audience
  - id: SC-CAP-COM-CAT-008-02
    given: The dinner requires a membership binding
    when: Browse as a signed-in contact who fails the rule
    then: The product is excluded without a shopper-facing diagnostic trace
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#who
      is not a member loses the dinner to the binding, with no trace on the page
depends_on:
  - CAP-COM-CAT-003
  - CAP-COM-CAT-006
  - CAP-COM-CAT-013
related:
  - CAP-COM-CAT-005
journeys:
  - JNY-COM-CAT-003
evidence:
  - >-
    Pinned service inputs: modules/catalog/aws/api/storefront.routes.ts and
    .schemas.ts; services/storefront/**; tests (storefront e2e, integration,
    queries, visibility, availability, security)
controls: [TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-CRY-001, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-AVL-005, TC-PI-001, TC-PI-005, TC-PRV-001, TC-PRV-002]
---

# Present the store’s available products

## Purpose

Shoppers receive the catalog presentation and prices appropriate to their store and identity.

## How It Works

A shopper opens a store list or an individual product page. Commerce filters candidates using store, listing, product and eligibility information. The result combines listing text with the requested price and availability presentation. Anonymous browsing includes public-price information and notices about what signing in may change. Signed-in browsing uses the buyer’s own context. Console inspection additionally explains excluded candidates to staff. Unknown or closed stores and excluded pages return the supported absence response. The product should prove the eventual live portal journey before treating API and mock evidence as browser delivery.

## Relationships

The configure a store’s offered assortment capability supplies related configuration or assessment used in this work.

The prepare and publish product presentations capability supplies related configuration or assessment used in this work.

The calculate and explain a buyer’s item price capability supplies related configuration or assessment used in this work.

The organize product shelves capability supplies related configuration or assessment used in this work.
