---
id: ADR-COM-FUL-012
title: Resolve retained carrier intent before another purchase
product_area: commerce
module: fulfillment
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
decision: >-
  Retain purchase intent before calling the carrier and settle the result under
  the existing key before another purchase begins.
constrains:
  - WF-COM-FUL-011
  - STATE-COM-FUL-006
  - SVC-COM-FUL-shipping
origin: 'services-commerce:docs/migrations/shipping/README.md#D-P8S-08 (build decision)'
alternatives:
  - option: Purchase labels within a database transaction.
    why_not: A carrier purchase cannot roll back with a local transaction.
  - option: Buy again under another key after an unknown purchase result.
    why_not: >-
      Another key could buy another label when the earlier purchase already
      succeeded.
consequences:
  - >-
    A purchase can remain requested until its carrier result is recovered or
    staff confirm it.
  - A refused label void retains the cost and creates an inventory finding.
supersedes: []
evidence:
  - >-
    services-commerce at c8b66a98:
    modules/shipping/services/fulfillment/labels.ts;
    services/carriers/carrier-port.ts.
---

# Resolve retained carrier intent before another purchase

## Context

A carrier can sell a label while its answer is lost.

## Decision

Retain purchase intent before calling the carrier and settle the result under the existing key before another purchase begins.

## Alternatives Considered

Purchase labels within a database transaction. A carrier purchase cannot roll back with a local transaction.

Buy again under another key after an unknown purchase result. Another key could buy another label when the earlier purchase already succeeded.

## Consequences

Some purchases require staff confirmation. Void uncertainty can leave the local record behind the carrier’s outcome.
