---
id: ATS-COM-CAT-007
scope: CAP-COM-CAT-007
product_area: commerce
module: catalog
revision: 2
status: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-COM-CAT-007-01
    title: Merchandise creation rejects incompatible or repeated extensions
    level: api
    proves:
      - BR-CAP-COM-CAT-007-01
      - INV-DOM-COM-CAT-003-06
    preconditions: A membership product and an already extended merchandise product exist
    steps: Attempt to extend each
    expected: The corresponding type or duplicate refusal is returned
    negative: true
    data_needs: Accounting products
    bound_to:
      - TST-COM-CAT-044
      - TST-COM-CAT-050
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#answers 400 to a
      product the tenant has not, a selection off the sets, a SKU in use and a second extension,
      naming the rule
    category: validation
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#answers 400 to a
        product the tenant has not, a selection off the sets, a SKU in use and a second extension,
        naming the rule
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#refuses
        a product of Membership’s type 403 with Accounting’s sentence, writing neither
    step_evidence:
      - do: Attempt to extend each
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#answers 400 to a
          product the tenant has not, a selection off the sets, a SKU in use and a second extension,
          naming the rule
    assertions:
      - expect: The corresponding type or duplicate refusal is returned
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#answers 400 to a
          product the tenant has not, a selection off the sets, a SKU in use and a second extension,
          naming the rule
  - id: ATS-COM-CAT-007-02
    title: Failed merchandise creation leaves no Accounting product
    level: api
    proves:
      - BR-CAP-COM-CAT-007-02
      - BR-CAP-COM-CAT-007-03
      - INV-DOM-COM-CAT-003-10
    preconditions: Creation can exercise an extension constraint and an invalid grid
    steps: Trigger extension failure and omit Standard pricing
    expected: Both fail without leaving a product behind
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-050
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#leaves
      no product when the database refuses the extension row
    category: failure
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#leaves
        no product when the database refuses the extension row
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#refuses
        a grid without a standard price 400 with Accounting’s rule
    step_evidence:
      - do: Trigger extension failure and omit Standard pricing
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#leaves
          no product when the database refuses the extension row
    assertions:
      - expect: Both fail without leaving a product behind
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js#leaves
          no product when the database refuses the extension row
  - id: ATS-COM-CAT-007-03
    title: Retirement preserves history and inventory prevents removal
    level: api
    proves:
      - BR-CAP-COM-CAT-007-04
      - BR-CAP-COM-CAT-007-05
      - INV-DOM-COM-CAT-003-09
    preconditions: Merchandise is available for retirement and has stock references
    steps: Retire twice and attempt deletion of stock-referenced merchandise
    expected: The repeated retirement and referenced deletion fail
    negative: true
    data_needs: Inventory items for a SKU
    bound_to:
      - TST-COM-CAT-044
      - TST-COM-CAT-051
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#retires the product at
      its version, keeping the extension; a second retirement is 409
    category: transition
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#retires the product
        at its version, keeping the extension; a second retirement is 409
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise.integration.spec.js#refuses
        to delete an extension whose SKUs inventory items hold (409), deletes one that has none, and
        answers 404 for one the tenant has not
    step_evidence:
      - do: Retire twice and attempt deletion of stock-referenced merchandise
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#retires the
          product at its version, keeping the extension; a second retirement is 409
    assertions:
      - expect: The repeated retirement and referenced deletion fail
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#retires the
          product at its version, keeping the extension; a second retirement is 409
  - id: ATS-COM-CAT-007-04
    title: Variants and modifier sets reject inconsistent definitions
    level: api
    proves:
      - BR-CAP-COM-CAT-007-06
      - BR-CAP-COM-CAT-007-08
      - INV-DOM-COM-CAT-003-07
      - INV-DOM-COM-CAT-003-11
    preconditions: 'Size, colour and modifier sets provide allowed values'
    steps: Repeat a SKU or selection and submit invalid modifier or variant-set options
    expected: Each invalid definition is refused
    negative: true
    data_needs: Option sets
    bound_to:
      - TST-COM-CAT-046
      - TST-COM-CAT-051
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/integration/db/merchandise-tables.table.integration.spec.js#refuses
      one SKU twice in a tenant (merchandise_variants_sku_uq) and one selection twice for a product
      (merchandise_variants_selection_uq), while another tenant may use the SKU
    category: validation
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/integration/db/merchandise-tables.table.integration.spec.js#refuses
        one SKU twice in a tenant (merchandise_variants_sku_uq) and one selection twice for a
        product (merchandise_variants_selection_uq), while another tenant may use the SKU
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise.integration.spec.js#refuses
        a modifier option off the set’s values, a variant set with options, and an empty set, 400
    step_evidence:
      - do: Repeat a SKU or selection and submit invalid modifier or variant-set options
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/integration/db/merchandise-tables.table.integration.spec.js#refuses
          one SKU twice in a tenant (merchandise_variants_sku_uq) and one selection twice for a
          product (merchandise_variants_selection_uq), while another tenant may use the SKU
    assertions:
      - expect: Each invalid definition is refused
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/integration/db/merchandise-tables.table.integration.spec.js#refuses
          one SKU twice in a tenant (merchandise_variants_sku_uq) and one selection twice for a
          product (merchandise_variants_selection_uq), while another tenant may use the SKU
  - id: ATS-COM-CAT-007-05
    title: Availability distinguishes sufficient stock and permitted shortfalls
    level: unit
    proves:
      - BR-CAP-COM-CAT-007-09
    preconditions: 'Fixtures provide ample, limited and insufficient stock'
    steps: Assess requested quantities with backorders enabled and disabled
    expected: 'Results distinguish available, limited, backordered and refused lines'
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-052
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
      limited with the units left when the quantity leaves the threshold or fewer, the last unit
      included
    category: rule
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
        limited with the units left when the quantity leaves the threshold or fewer, the last unit
        included
      - >-
        services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
        a backorder of the shortfall when stock is short and the product allows it, and the line
        proceeds
      - >-
        services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
        unavailable with what is left when stock is short and the product prohibits backorders: the
        line is refused
    step_evidence:
      - do: Assess requested quantities with backorders enabled and disabled
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
          limited with the units left when the quantity leaves the threshold or fewer, the last unit
          included
    assertions:
      - expect: 'Results distinguish available, limited, backordered and refused lines'
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/unit/participant/merchandise-availability.spec.js#is
          limited with the units left when the quantity leaves the threshold or fewer, the last unit
          included
  - id: ATS-COM-CAT-007-06
    title: Line validation checks note length and variant matching
    level: unit
    proves:
      - BR-CAP-COM-CAT-007-10
    preconditions: A merchandise item has selectable variants
    steps: Submit 200- and 201-character notes and an unmatched selection
    expected: The supported note succeeds; the longer note and unmatched selection fail
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-053
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/unit/participant/merchandise-payload.spec.js#limits
      a note to 200 characters, counted as the person sees them: an emoji is one, so 201 characters
      are refused and 200 are not (COM-ACC-0015)
    category: boundary
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/unit/participant/merchandise-payload.spec.js#limits
        a note to 200 characters, counted as the person sees them: an emoji is one, so 201
        characters are refused and 200 are not (COM-ACC-0015)
      - >-
        services-commerce:modules/merchandise/tests/unit/participant/merchandise-payload.spec.js#refuses
        an unknown SKU, a selection that names the wrong sets, and a combination no variant is
    step_evidence:
      - do: Submit 200- and 201-character notes and an unmatched selection
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/unit/participant/merchandise-payload.spec.js#limits
          a note to 200 characters, counted as the person sees them: an emoji is one, so 201
          characters are refused and 200 are not (COM-ACC-0015)
    assertions:
      - expect: The supported note succeeds; the longer note and unmatched selection fail
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/unit/participant/merchandise-payload.spec.js#limits
          a note to 200 characters, counted as the person sees them: an emoji is one, so 201
          characters are refused and 200 are not (COM-ACC-0015)
  - id: ATS-COM-CAT-007-07
    title: Variant adjustment is demonstrated only by the isolated engine
    level: api
    proves:
      - BR-CAP-COM-CAT-007-11
    preconditions: The engine fixture explicitly supplies a priced variant
    steps: Calculate by that variant’s SKU
    expected: >-
      The engine records the substituted price and adjustment provenance, without establishing
      loader integration
    negative: false
    data_needs: Merchandise with priced variants
    bound_to: []
    provenance: proposed
    source: >-
      services-commerce:modules/pricing/tests/unit/engine/step-3-base-price.spec.js#overrides the
      standard price with the variant’s by SKU, with provenance of the difference
    category: interaction
    step_evidence:
      - do: Calculate by that variant’s SKU
        provenance: proposed
        source: >-
          services-commerce:modules/pricing/tests/unit/engine/step-3-base-price.spec.js#overrides
          the standard price with the variant’s by SKU, with provenance of the difference
    assertions:
      - expect: >-
          The engine records the substituted price and adjustment provenance, without establishing
          loader integration
        provenance: proposed
        source: >-
          services-commerce:modules/pricing/tests/unit/engine/step-3-base-price.spec.js#overrides
          the standard price with the variant’s by SKU, with provenance of the difference
  - id: ATS-COM-CAT-007-08
    title: Merchandise contracts enforce access and exclude custom fields
    level: api
    proves:
      - BR-CAP-COM-CAT-007-12
    preconditions: A read-only merchandise principal is available
    steps: 'List and read items, attempt writes and submit custom fields'
    expected: Reads succeed; permission checks refuse writes and schema validation refuses custom fields
    negative: true
    data_needs: Read-exclusively persona
    bound_to:
      - TST-COM-CAT-044
    provenance: test
    source: >-
      services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#lets a reader list and
      read, and refuses it every write 403 permission_missing, leaving the records as they were
    category: permission
    binding_evidence:
      - >-
        services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#lets a reader list
        and read, and refuses it every write 403 permission_missing, leaving the records as they
        were
      - >-
        services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#refuses custom
        fields (Commerce has none, R2-ARCH-001) and a product id that is not the merchandise’s 400
        at the boundary
    step_evidence:
      - do: 'List and read items, attempt writes and submit custom fields'
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#lets a reader list
          and read, and refuses it every write 403 permission_missing, leaving the records as they
          were
    assertions:
      - expect: Reads succeed; permission checks refuse writes and schema validation refuses custom fields
        provenance: test
        source: >-
          services-commerce:modules/merchandise/tests/e2e/merchandise.e2e.spec.js#lets a reader list
          and read, and refuses it every write 403 permission_missing, leaving the records as they
          were
  - id: ATS-COM-CAT-007-09
    title: Merchandise protection refuses the protected write
    category: invariant
    level: api
    proves:
      - BR-CAP-COM-CAT-007-14
    preconditions: Separate otherwise editable records use full protection and deletion-only protection.
    steps: >-
      Replace and delete the fully protected record, then replace and delete the deletion-only
      protected record; reread both.
    expected: >-
      The full-protection requests refuse; the deletion-only replacement succeeds and removal
      refuses; refused writes preserve the stored record.
    negative: true
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - 'services-commerce:modules/merchandise/services/persistence/merchandise-extensions.ts'
    step_evidence:
      - do: >-
          Replace and delete the fully protected record, then replace and delete the deletion-only
          protected record; reread both.
        provenance: proposed
        source:
          - 'services-commerce:modules/merchandise/services/persistence/merchandise-extensions.ts'
    assertions:
      - expect: >-
          The full-protection requests refuse; the deletion-only replacement succeeds and removal
          refuses; refused writes preserve the stored record.
        provenance: proposed
        source:
          - 'services-commerce:modules/merchandise/services/persistence/merchandise-extensions.ts'
  - id: ATS-COM-CAT-007-10
    title: The combined item screen saves product and presentation separately
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-CAT-007-13
      - BR-CAP-COM-CAT-006-10
    preconditions: The console edits merchandise and a listing for one product.
    steps: >-
      Save all three requests successfully; repeat with the listing request refused; reopen the
      item.
    expected: >-
      A successful save presents the changed item; a later refusal can leave earlier product and
      merchandise changes saved.
    negative: false
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - >-
        rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-005-save-a-merchandise-item-from-the-console-in.md#WF-COM-CAT-005
      - 'react-console:lib/commerce/merchandise/live.ts:createLiveMerchandiseAdapter'
    exercises:
      - CAP-COM-CAT-007
      - CAP-COM-CAT-006
    workflows:
      - WF-COM-CAT-005
    step_evidence:
      - do: >-
          Save all three requests successfully; repeat with the listing request refused; reopen the
          item.
        provenance: proposed
        source:
          - >-
            rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-005-save-a-merchandise-item-from-the-console-in.md#WF-COM-CAT-005
          - 'react-console:lib/commerce/merchandise/live.ts:createLiveMerchandiseAdapter'
    assertions:
      - expect: >-
          A successful save presents the changed item; a later refusal can leave earlier product and
          merchandise changes saved.
        provenance: proposed
        source:
          - >-
            rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-005-save-a-merchandise-item-from-the-console-in.md#WF-COM-CAT-005
          - 'react-console:lib/commerce/merchandise/live.ts:createLiveMerchandiseAdapter'
    findings:
      - FND-COM-CAT-029
  - id: ATS-COM-CAT-007-11
    title: Loaded merchandise adjustments differ from engine fixtures
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-CAT-007-11
      - BR-CAP-COM-CAT-013-01
    preconditions: A variant and modifier carry distinct amounts.
    steps: >-
      Price an isolated engine fixture carrying both inputs, then quote the same product through
      ordinary loading.
    expected: >-
      The fixture records the supplied adjustments; ordinary loading supplies no variant or modifier
      amounts.
    negative: false
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - 'services-commerce:modules/pricing/services/persistence/catalog-products.ts:toCatalogProduct'
      - >-
        services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
        through the member cell, the variant, the bulk rule and the store’s line discount, in that
        order
    exercises:
      - CAP-COM-CAT-007
      - CAP-COM-CAT-013
    workflows: []
    step_evidence:
      - do: >-
          Price an isolated engine fixture carrying both inputs, then quote the same product through
          ordinary loading.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/services/persistence/catalog-products.ts:toCatalogProduct
          - >-
            services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
            through the member cell, the variant, the bulk rule and the store’s line discount, in
            that order
    assertions:
      - expect: >-
          The fixture records the supplied adjustments; ordinary loading supplies no variant or
          modifier amounts.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/services/persistence/catalog-products.ts:toCatalogProduct
          - >-
            services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
            through the member cell, the variant, the bulk rule and the store’s line discount, in
            that order
  - id: ATS-COM-CAT-007-12
    title: Retained stock codes keep their variant identities
    category: invariant
    level: api
    proves:
      - INV-DOM-COM-CAT-003-08
      - BR-CAP-COM-CAT-007-07
    preconditions: A product has two variant stock codes and inventory retains one of them.
    steps: >-
      Replace the definition while keeping the referenced stock code, dropping the other and adding
      a new code; read variants and inventory references.
    expected: >-
      The retained code keeps its identity and inventory reference, the new code has a new identity
      and the omitted unreferenced code is gone.
    negative: true
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise.integration.spec.js#replaces
        the extension at its version: the kept SKU keeps its id, a new SKU is added, a dropped one
        goes
      - >-
        rhythm-v2-docs:specs/commerce/catalog/design/objects/DOM-COM-CAT-003-catalog-product.md#DOM-COM-CAT-003
    verification_note: >-
      This design references the invariant; executable binding awaits an assertion-by-assertion
      comparison with this complete scenario.
    step_evidence:
      - do: >-
          Replace the definition while keeping the referenced stock code, dropping the other and
          adding a new code; read variants and inventory references.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise.integration.spec.js#replaces
            the extension at its version: the kept SKU keeps its id, a new SKU is added, a dropped
            one goes
          - >-
            rhythm-v2-docs:specs/commerce/catalog/design/objects/DOM-COM-CAT-003-catalog-product.md#DOM-COM-CAT-003
    assertions:
      - expect: >-
          The retained code keeps its identity and inventory reference, the new code has a new
          identity and the omitted unreferenced code is gone.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/merchandise/tests/integration/services/persistence/merchandise.integration.spec.js#replaces
            the extension at its version: the kept SKU keeps its id, a new SKU is added, a dropped
            one goes
          - >-
            rhythm-v2-docs:specs/commerce/catalog/design/objects/DOM-COM-CAT-003-catalog-product.md#DOM-COM-CAT-003
evidence:
  - 'Pinned service inputs: test sources in scenario bindings'
  - 'Pinned console inputs: console sources in scenario bindings'
  - >-
    rhythm-v2-docs:specs/commerce/catalog/planning/capabilities/CAP-COM-CAT-007-describe-merchandise-its-variants-and-whether-it-can-be-sold.md#CAP-COM-CAT-007
  - >-
    rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-005-save-a-merchandise-item-from-the-console-in.md#WF-COM-CAT-005
  - >-
    rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-006-write-merchandise-and-its-accounting-product-in.md#WF-COM-CAT-006
product_intent: proposed
coverage:
  rule: covered
  transition: covered
  validation: covered
  permission: covered
  edge: 'gap: FND-COM-CAT-061'
  failure: covered
  boundary: covered
  concurrency: 'gap: FND-COM-CAT-061'
  invariant: covered
  interaction: covered
coverage_notes:
  edge: >-
    No complete edge scenario is established by this back-fill; the finding records the missing
    proof.
  concurrency: Concurrent execution has no complete scenario; sequential retry is insufficient proof.
permission_coverage:
  - key: commerce.merchandise.read
    coverage: 'gap: FND-COM-CAT-061'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-061'
  - key: commerce.merchandise.create
    coverage: 'gap: FND-COM-CAT-061'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-061'
  - key: commerce.merchandise.update
    coverage: 'gap: FND-COM-CAT-061'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-061'
  - key: commerce.merchandise.delete
    coverage: 'gap: FND-COM-CAT-061'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-061'
  - key: commerce.merchandise.bulk
    coverage: 'gap: FND-COM-CAT-061'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-061'
---

# Manage merchandise selections and sale availability: Capability Test Specification

## Coverage

| Rule | Proof Scenario or Gap |
|---|---|
| `BR-CAP-COM-CAT-007-01` | `ATS-COM-CAT-007-01` |
| `BR-CAP-COM-CAT-007-02` | `ATS-COM-CAT-007-02` |
| `BR-CAP-COM-CAT-007-03` | `ATS-COM-CAT-007-02` |
| `BR-CAP-COM-CAT-007-04` | `ATS-COM-CAT-007-03` |
| `BR-CAP-COM-CAT-007-05` | `ATS-COM-CAT-007-03` |
| `BR-CAP-COM-CAT-007-06` | `ATS-COM-CAT-007-04` |
| `BR-CAP-COM-CAT-007-08` | `ATS-COM-CAT-007-04` |
| `BR-CAP-COM-CAT-007-09` | `ATS-COM-CAT-007-05` |
| `BR-CAP-COM-CAT-007-10` | `ATS-COM-CAT-007-06` |
| `BR-CAP-COM-CAT-007-11` | `ATS-COM-CAT-007-07`, `ATS-COM-CAT-007-11` |
| `BR-CAP-COM-CAT-007-12` | `ATS-COM-CAT-007-08` |
| `BR-CAP-COM-CAT-007-14` | `ATS-COM-CAT-007-09` |

## Interactions With Related Capabilities

Variant adjustment is demonstrated only by the isolated engine. The combined item screen saves product and presentation separately. Loaded merchandise adjustments differ from engine fixtures.

Coverage describes specified proof. A binding names the existing assertions that contribute to it; proposed designs remain unexecuted.
