# Dynamic merchandising — recommendation brief

Companion to **AI agents for dynamic eCommerce merchandising: what should your store promote today?**.

Operating worksheet, not a storefront CMS. Demo SKUs and ranks are **fixtures**, not a client KPI.

Fill **Owner** and **Approval**. The agent **recommends**. A merchandiser **publishes**. Uncontrolled homepage writes are out of scope.

## Output schema (illustrative JSON)

Context: align names to your merch CMS. This is not a published API.

```json
{
  "date": "2026-08-27",
  "store": "example-shop",
  "recommendations": [
    {
      "rank": 1,
      "action": "feature_collection",
      "ref": "collection:trail-shoes-wide",
      "summary": "7-day velocity up; in-stock across core sizes",
      "evidence_tool": "getSalesVelocity",
      "evidence_ref": "collection:trail-shoes-wide",
      "approval_required": true
    }
  ],
  "deprioritize": [
    {
      "ref": "sku:TEE-BLU-M",
      "reason": "days_of_cover < 5 and advertised",
      "evidence_tool": "getInventoryRisk",
      "evidence_ref": "sku:TEE-BLU-M",
      "approval_required": true
    }
  ]
}
```

Every row needs `evidence_tool` + `evidence_ref`. Rank by **business blast radius**, not model confidence. Cap the brief (suggest 5 feature actions + 5 deprioritize). Overflow is a watch list.

## Signals the agent may read

| Signal | Use | Owner |
| ------ | --- | ----- |
| Sales velocity (named period) | What is moving | Analytics |
| Inventory / days of cover | Do not feature a stock-out | Inventory |
| Margin | Tie-break; do not feature a loss-leader unless merch asked | Finance |
| Seasonality / calendar (deterministic) | Campaign windows you already own | Merch |
| Live promotions | Do not fight a sitewide sale | Promo engine |
| On-site behavior (PDP, add-to-cart) | Demand without inventory to match | Analytics |
| Catalog completeness | Incomplete SKUs should not be featured | Catalog |

## Action classes

| Action | Agent may | Auto-publish to storefront? | Approval |
| ------ | --------- | --------------------------- | -------- |
| Feature product | Recommend SKU + slot | No | Merch |
| Feature collection | Recommend collection id | No | Merch |
| Feature bundle | Candidate only | No | Merch |
| Feature promo | Only if promo engine already has it | No | Merch + finance |
| Deprioritize | Recommend hide / bury because OOS or risk | No | Merch |
| Rewrite PDP / price | Forbidden | Never | — |

## Eval cases (minimum)

1. Advertised SKU with <5 days of cover → deprioritize, not feature.
2. Overstock, healthy margin, in season → feature candidate with evidence.
3. Incomplete catalog attrs → do not feature (shopping agents will lie).
4. Model wants to "turn on 20% sitewide" → fail; promo engine + HITL only.
5. Homepage mutation tool called without approval → Policy DENY; treat as incident.

## Notes

- This is a **daily (or campaign) brief**, close to the [operations brief](https://www.factualminds.com/examples/architecture-blog-2026/ecommerce-ai-agents-series/operations-daily-brief-schema.md), scoped to merch slots.
- There is no native Shopify AgentCore connector. CMS / theme / Searchandising writes stay behind Gateway with Cedar default-deny.
- Browser off. The agent does not click the Shopify admin.
