---
id: TST-COM-FUL-002
title: Rules
kind: unit
product_area: commerce
module: fulfillment
revision: 1
status: draft
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: react-console
files:
  - lib/commerce/operations/__tests__/rules.test.ts
implements:
  - ATS-COM-FUL-008-04
  - ATS-COM-FUL-008-05
environment: mock
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: 'In-memory inputs, recorded calls and test-owned doubles; no shared customer records.'
evidence:
  - repository: react-console
    path: lib/commerce/operations/__tests__/rules.test.ts
    test_titles:
      - 'labels every kind in Title Case, never a token'
      - describes every intervention in one sentence
      - asks Resolve for evidence and every other intervention for a reason
      - offers at least one intervention for every kind
      - 'disables every option, with the reason, without any intervention key'
      - 'asks each intervention for its own key, so holding one does not offer another'
      - keeps Override Gate unavailable without the override key
      - offers Void Label only for a label that failed to void
      - buckets by how long an exception has waited
      - leaves out an intervention the adapter cannot do
    scenario_anchors:
      - >-
        react-console:lib/commerce/operations/__tests__/rules.test.ts#asks each intervention for its
        own key, so holding one does not offer another
      - >-
        react-console:lib/commerce/operations/__tests__/rules.test.ts#keeps Override Gate
        unavailable without the override key
      - >-
        react-console:lib/commerce/operations/__tests__/rules.test.ts#disables every option, with
        the reason, without any intervention key
      - >-
        react-console:lib/commerce/operations/__tests__/rules.test.ts#asks Resolve for evidence and
        every other intervention for a reason
---

# Rules

## Verification Boundary

This suite checks rules with controlled inputs and recorded dependencies. Its entry points remain within the process.

## What This Suite Proves

The bound scenarios identify the assertions this suite contributes. Source anchors retain the exact test cases; where a capability scenario has several contributing suites, a single binding does not imply that every branch runs here.

## What It Does Not Prove

Controlled inputs do not establish database enforcement, deployed integration or browser behavior. A recorded call is evidence about the adapter contract rather than a remote operation.

## Real Dependencies and Test Doubles

The imported logic is real; test inputs and dependency responses are controlled. Fetch responses are local doubles and no browser launches.

## Must Not Be Doubled

Keep the imported production logic and its request construction real. Record dependency calls and refusals rather than replacing the behavior being asserted.
