# DRCS-EC 1.0: Consumer E-Commerce Profile for AI Agents

DRCS-EC 1.0 defines the DRCS Core 1.0 fields required when a custodial agent selects a product, service, seller, or marketplace offer for a user. It is the consumer e-commerce conformance profile for agentic commerce decisions. The base DRCS record supplies the seventeen components; DRCS-EC fixes the minimum attribute set those components must carry for e-commerce agent decisions.

## Scope

The profile applies when an agent can spend money, select a seller, route an order, renew a subscription, book a service, or choose among materially different commercial offers for a user.

The profile covers single-item purchases, multi-item baskets, subscriptions, digital goods, services, delivery choices, pickup choices, and marketplace seller selection.

## Required Record Objects

Each conforming record must include these objects in addition to the base DRCS 1.0 component names:

| Object | Purpose |
|---|---|
| `delegation_snapshot` | The user's instruction, constraints, preference weights, and permission boundary before the agent acted. |
| `option_set_snapshot` | Every serious option retrieved before the choice, with the seller-published attributes used by the agent. |
| `chosen_option` | The selected option and the recorded values that made it win under the user's preferences. |
| `rejected_options` | Every serious declined option, with the attribute or constraint that caused it to lose. |
| `scoring_trace` | The utility, rank, or rule path used to compare options. |
| `feed_provenance` | Source feed, URL or API endpoint, timestamp, schema version, and content hash for each option. |
| `outcome_followup` | Realized delivery, return friction, dispute, correction cost, and satisfaction-independent performance metrics when known. |

## Delegation Snapshot

`delegation_snapshot` must be written before the purchase or routing decision. It must include:

| Field | Required | Description |
|---|---:|---|
| `user_id_hash` | yes | Stable pseudonymous user identifier. |
| `agent_id` | yes | Agent or service instance that acted. |
| `operator_id` | yes | Firm or marketplace operating the agent. |
| `delegation_id` | yes | Transaction-level delegation identifier. |
| `task_text` | yes | User instruction or normalized task. |
| `budget_max` | yes, when monetary | Maximum authorized spend. |
| `delivery_deadline` | yes, when relevant | Latest acceptable arrival or completion date. |
| `payment_methods_allowed` | yes | Payment methods the user allowed. |
| `seller_constraints` | yes | Blocked sellers, required sellers, geography, merchant category, or trust constraints. |
| `preference_weights` | yes | User weights or rule order for price, shipping, returns, speed, quality, risk, loyalty, and friction. |
| `override_policy` | yes | When the agent may trade off a hard constraint or must ask the user. |

## Option Set Snapshot

Each serious option in `option_set_snapshot` must include the fields below when the marketplace or seller feed exposes them.

| Field | Required | Description |
|---|---:|---|
| `option_id` | yes | Stable option identifier inside the record. |
| `seller_id` | yes | Seller or merchant identifier. |
| `marketplace_id` | yes | Marketplace, store, or catalog searched. |
| `product_or_service_id` | yes | SKU, offer ID, ASIN, GTIN, service ID, or equivalent. |
| `display_title` | yes | Human-readable offer label. |
| `base_price` | yes | Listed price before shipping, fees, discounts, and tax. |
| `promotions` | yes | Coupon, bundle, sale, or loyalty discount used in evaluation. |
| `tax_estimate` | yes, when available | Estimated tax. |
| `fees` | yes, when available | Platform, service, handling, restocking, or other fees. |
| `shipping_cost` | yes | Shipping price or zero-price reason. |
| `shipping_speed` | yes | Estimated delivery window or service level. |
| `delivery_date_estimate` | yes | Earliest and latest expected delivery or service completion. |
| `pickup_available` | yes, when relevant | Store pickup or local collection option. |
| `one_click_available` | yes | Whether the user's saved account can complete the transaction with stored payment and shipping details. |
| `checkout_steps_estimate` | yes | Estimated steps, redirects, or user confirmations required. |
| `payment_methods_accepted` | yes | Cards, wallet, bank, invoice, BNPL, credits, gift card, or platform balance accepted. |
| `membership_shipping_benefit` | yes, when relevant | Prime-like, marketplace, merchant, or subscription shipping benefit. |
| `availability_status` | yes | In stock, preorder, backorder, service availability, or quantity limit. |
| `return_window_days` | yes | Days allowed for return or cancellation. |
| `return_method` | yes | Mail, pickup, store drop-off, label, pickup fee, no-return, or final sale. |
| `return_fee` | yes | Restocking, return shipping, cancellation, or handling charge. |
| `refund_timing` | yes, when available | Expected timing of refund or credit. |
| `warranty_or_support` | yes, when relevant | Warranty, service guarantee, support channel, or coverage period. |
| `seller_reputation` | yes, when available | Rating, defect rate, dispute rate, on-time delivery rate, or verified trust score. |
| `privacy_or_data_terms` | yes, when relevant | Data sharing, account-linking, or recurring-access term. |
| `subscription_or_renewal_terms` | yes, when relevant | Renewal price, cancellation rule, minimum term, or trial conversion. |
| `total_landed_cost` | yes | Price plus tax, shipping, mandatory fees, and known adjustments. |
| `feed_provenance_id` | yes | Link to the feed snapshot object supporting the option. |

## Chosen and Rejected Options

`chosen_option` must copy the option object selected from `option_set_snapshot` and must add:

| Field | Required | Description |
|---|---:|---|
| `rank_at_decision` | yes | Rank of the chosen option under the recorded scoring method. |
| `score_at_decision` | yes | Utility score, rule score, or ordered-rule result. |
| `winning_attributes` | yes | Attributes that caused the option to win. |
| `constraint_exceptions` | yes | Any soft constraint exceeded, waived, or traded off. |

Each `rejected_options` entry must include:

| Field | Required | Description |
|---|---:|---|
| `rejected_option_id` | yes | Link to the declined option. |
| `rank_at_decision` | yes | Rank under the recorded scoring method. |
| `score_at_decision` | yes | Utility score, rule score, or ordered-rule result. |
| `lost_on_attributes` | yes | Attributes that made it lose: price, shipping, delivery time, return terms, payment method, seller risk, checkout friction, warranty, subscription risk, or another profile field. |
| `user_weighted_delta` | yes | Difference from the chosen option under the user's recorded weights. |
| `dominates_chosen` | yes | Boolean showing whether the rejected option dominated the chosen option under the recorded weights. |
| `dominance_explanation` | yes | Short machine-readable reason if `dominates_chosen` is true. |

## Scoring Trace

`scoring_trace` must make the comparison repeatable by an evaluator. It must include:

| Field | Required | Description |
|---|---:|---|
| `scoring_method` | yes | Weighted utility, lexicographic rule, threshold rule, learned ranker, policy rule, or hybrid. |
| `weights_source` | yes | User profile, one-time instruction, enterprise policy, legal rule, or marketplace default. |
| `normalization_method` | yes | How price, speed, returns, reputation, and friction were placed on comparable scales. |
| `hard_constraints_applied` | yes | Constraints that removed options before scoring. |
| `soft_constraints_scored` | yes | Constraints allowed to trade off against other values. |
| `ranked_option_ids` | yes | Ordered list of option IDs after scoring. |
| `score_version` | yes | Version of the scoring logic used for the decision. |

## Outcome Follow-Up

For marketplaces that evaluate agents after the transaction, `outcome_followup` should be appended when observed:

| Field | Required | Description |
|---|---:|---|
| `realized_total_cost` | yes, when known | Final charged amount. |
| `realized_delivery_date` | yes, when known | Actual delivery or completion date. |
| `delivery_failure` | yes, when known | Late, lost, cancelled, damaged, or unavailable. |
| `return_started` | yes, when known | Whether the user attempted a return or cancellation. |
| `return_completed` | yes, when known | Whether return or refund completed. |
| `return_friction_score` | yes, when known | Steps, cost, delay, support contacts, and user time. |
| `dispute_or_support_contact` | yes, when known | Chargeback, support ticket, claim, or complaint. |
| `correction_cost` | yes, when known | Extra spend, delay, or effort needed to fix the decision. |
| `repeat_delegation` | yes, when known | Whether the user delegated again after the outcome. |

## Minimum Conformance Tests

A marketplace or evaluator can reject a record as incomplete if any test fails:

1. `delegation_snapshot.preference_weights` exists before the transaction timestamp.
2. `option_set_snapshot` contains the chosen option and every serious declined option used by the agent.
3. Every option has `price`, `shipping`, `payment`, `return`, `availability`, `seller`, `checkout_friction`, and `total_landed_cost` fields when the feed exposes them.
4. Every option links to a feed snapshot with timestamp, source, schema version, and content hash.
5. `chosen_option` and `rejected_options` can be rescored from the recorded fields.
6. A rejected option that dominates the chosen option under the recorded user weights is explicitly marked.
7. Outcome follow-up can be joined to the original decision record when the marketplace later observes performance.

## Example Shape

```json
{
  "drcs_version": "1.0",
  "profile": "DRCS-EC-1.0",
  "delegation_snapshot": {
    "delegation_id": "del_20260708_001",
    "budget_max": 125.00,
    "delivery_deadline": "2026-07-12",
    "payment_methods_allowed": ["card", "wallet"],
    "preference_weights": {
      "total_landed_cost": 0.35,
      "delivery_speed": 0.20,
      "return_terms": 0.20,
      "seller_reputation": 0.15,
      "checkout_friction": 0.10
    }
  },
  "option_set_snapshot": [
    {
      "option_id": "opt_a",
      "seller_id": "seller_17",
      "base_price": 99.00,
      "shipping_cost": 0.00,
      "delivery_date_estimate": {"earliest": "2026-07-10", "latest": "2026-07-11"},
      "one_click_available": true,
      "payment_methods_accepted": ["card", "wallet"],
      "return_window_days": 30,
      "return_method": "dropoff_or_mail",
      "return_fee": 0.00,
      "seller_reputation": {"on_time_rate": 0.97, "dispute_rate": 0.01},
      "total_landed_cost": 105.42,
      "feed_provenance_id": "feed_981"
    }
  ],
  "chosen_option": {
    "option_id": "opt_a",
    "rank_at_decision": 1,
    "score_at_decision": 0.91,
    "winning_attributes": ["delivery_speed", "return_terms", "checkout_friction"]
  },
  "rejected_options": [
    {
      "rejected_option_id": "opt_b",
      "rank_at_decision": 2,
      "score_at_decision": 0.84,
      "lost_on_attributes": ["return_fee", "checkout_steps_estimate"],
      "user_weighted_delta": -0.07,
      "dominates_chosen": false
    }
  ]
}
```
