# Profitability And Release Gates

Status: active spec
Date: 2026-05-13

Use this spec when a Shopify24H storefront or Meravoq-managed store needs a
traffic-readiness decision, profit model, checkout gift rule, or internal release
record.

## Core Boundary

Target conversion rate is a planning scenario, not observed performance.

For example, `3% CR` can be the operator's target and the model's base scenario,
but it is not a promise and it is not evidence. Actual conversion rate must come
from live traffic and purchase data. Keep these fields separate in every packet:

| Field | Meaning |
| --- | --- |
| `target_conversion_rate` | Planning target used to decide whether the unit economics are worth testing. |
| `observed_conversion_rate` | Real conversion rate from a defined traffic window. Leave blank before traffic. |
| `conversion_rate_basis` | `operator_target`, `model_scenario`, `live_observed`, or `blocked_missing_data`. |

Do not write "passed 3% conversion" unless live purchase data proves it.

## Profit Model

Every traffic-ready one-product store should model the featured paid offer before
media spend.

Required inputs:

- featured offer ID and quantity
- featured offer AOV
- product COGS
- gift COGS when a gift is present
- shipping or fulfillment cost
- payment processing estimate
- refund or replacement reserve when available
- target conversion rate
- observed conversion rate after traffic starts

Minimum formulas:

```text
pre_ad_contribution =
  featured_offer_aov
  - product_cogs
  - gift_cogs
  - shipping_cost
  - fulfillment_cost
  - payment_fee
  - refund_reserve

breakeven_cpc_at_target_cr =
  pre_ad_contribution * target_conversion_rate

observed_cpa =
  ad_spend / purchases

gross_margin_after_ads =
  revenue - cogs - shipping - fulfillment - payment_fees - refunds - ad_spend
```

The breakeven CPC is only valid for the stated target CR. If observed CR is
lower, the allowable CPC drops. Keep at least three scenarios in the launch
packet:

| Scenario | CR | Use |
| --- | ---: | --- |
| Conservative | 1% | Survival case for weak cold traffic. |
| Base | 2% | Early paid-social planning case. |
| Target | 3% | Operator target or upside planning case. |

## Traffic Gates

Traffic preflight can pass before observed purchase data if:

- the profit model is complete
- the target CR is clearly labeled as a target or scenario
- the featured offer has positive pre-ad contribution
- checkout handoff works
- UTM and cart attributes are preserved
- payment, fulfillment, support, return, safety, and policy trust surfaces are
  visible before checkout
- free-gift checkout pricing is verified when a gift is promoted as free

Paid-traffic scale cannot pass from target CR alone. Scale requires observed
traffic, spend, checkout, purchase, refund, and support evidence.

## Shopify Gift Discount Boundary

If a storefront markets a gift as free, checkout must prove the gift is free.
The storefront may add the gift line to the Shopify cart, but Shopify must own
the actual price outcome.

Allowed implementation paths:

1. Gift variant is genuinely priced at `$0.00`.
2. Shopify Admin has a manually configured automatic discount that discounts the
   gift line to `$0.00`.

The repo does not need to auto-create Shopify discount rules. A manual Shopify
automatic discount is acceptable, but the launch packet must record:

- discount type, usually Buy X Get Y
- X condition, usually any paid offer variant
- Y product or variant
- Y discount, usually 100% off
- per-order limit
- date checked
- checkout smoke evidence

If `smoke:checkout` shows the gift line is still paid, the store is blocked for
paid traffic unless the operator explicitly accepts a temporary release with the
checkout smoke marked skipped or blocked.

## Internal HTML Changelog

Major releases should include an internal HTML changelog in the preview build.

Default path:

```text
/internal/changelog/
/internal/changelog/YYYY-MM-DD-release-slug.html
```

Rules:

- changelog content is English by default
- no secrets, customer data, supplier credentials, token names with values, or
  private checkout data
- include what changed, why it changed, proof gates, skipped gates, and remaining
  operator actions
- add `<meta name="robots" content="noindex,nofollow,noarchive">`
- add `_headers` with `X-Robots-Tag: noindex, nofollow, noarchive`
- add `robots.txt` with `Disallow: /internal/`
- do not link internal changelog pages from public SEO navigation

Noindex is not authentication. If a release record contains sensitive operational
data, publish it behind the token-gated Meravoq Worker or Cloudflare Access
instead of a public Pages preview.

## Agent Output Requirements

When an agent touches profitability or release readiness, return:

- target CR and observed CR as separate fields
- formulas and assumptions used
- featured offer AOV and pre-ad contribution
- breakeven CPC for each stated scenario
- traffic-ready decision and blocker, if any
- Shopify gift-discount evidence or missing manual step
- internal changelog URL, if the release includes one
- confirmation that no external Shopify, ad, supplier, payment, domain, or
  credential mutation happened without approval
