---
id: "2.4"
title: "v3 PRD"
dept: product
status: draft
owner: Param
branded: false
last_verified: 2026-10-26
sources:
  - "brew origin/main b91e364: SCOPE.md:39, DUMMY.md:36-38"
  - "brew origin/main: measure-spec.js:1-97, measure-stats.js:1-20, measure-families.js:1-30, data/measure-families.json"
  - "brew origin/main: moves-engine.js:14, moves-engine.js:384, jam-brief.js:94-95, public/app.js:2202, public/app.js:2378"
  - "brand-directions/docs2/content/inventory.mjs LEARN; pages.mjs:262-307"
  - "brand-directions/_shared/product-model.md:18"
  - "brand-directions/book/content/a.js a-5 v3; c1.js c-4 how-it-went"
  - "brew working tree docs/pricing.md:17-22"
  - "memory: feed-measurement-engine, brew-name-and-scope, brew-meta-connector-qa, brew-shopify-connector-qa"
---

# v3 PRD

## Answer

v3 measures what went out: every shipped pick gets a How it went result with its source, method and grade, and those results shape next week's picks and the Plays.

## Today

### Cut from v1

Measurement is cut: no measuring engine, launch records, report back, A to D grades, results or result columns [src: SCOPE.md:39] [src: DUMMY.md:37].

### What already exists on origin/main

| Piece | What it does today | Source |
|---|---|---|
| How we measure it, in the brief | Each brief writes a small measure plan from blocks: scope, track, compare, funnel, formula, guard, watch, north, attribution, open | [src: measure-spec.js:7] |
| Brief is the truth | Every number in the measure plan must appear in the brief, or it is dropped | [src: measure-spec.js:5] [src: measure-spec.js:51-74] |
| Card page | Shows How we measure it with metric and goal, "Set with you" when the brief sets none | [src: public/app.js:2378] |
| Watch block | Says the team runs the checks; Brew does not watch or stop anything | [src: measure-spec.js:23] |
| Methods and grades | A holdout, B launched vs untouched, C tagged sales only, D before vs after, with a bootstrap range | [src: measure-stats.js:5-20] |
| Families | 13 families, each with the closest metric: paid ads to cost per first order, site to visits that become an order, messages to revenue per person messaged, and so on | [src: data/measure-families.json] |
| Timings | Per family: check days, a decide day, minimum sample and early stop rules, such as paid ads checked on days 1, 3, 7 and decided on day 14 | [src: measure-families.js:16-30] |
| Plays cite their family | Each Play's measure section names its family, metric and check timings | [src: moves-engine.js:384] |

### Built before and not carried over

The archived feed repo had a full engine: launch records, report back by voice, graded attribution, live for one test brand on 14 Oct. Its engine, deployment and metric source files are not on brew origin/main [src: memory feed-measurement-engine].

### Data v3 can read once connected

Shopify orders, checkouts and COD state; Meta spend, ROAS and campaign frequency; GA4 visits and purchases; Google Ads spend and conversions; Klaviyo flows; Judge.me reviews [src: brand-directions/docs2/content/inventory.mjs] [src: memory brew-shopify-connector-qa] [src: memory brew-meta-connector-qa].

## Tomorrow

| Item | Version | Tag | What it is |
|---|---|---|---|
| Measuring words in v1 cards | v1 | Goes | Removed in a Restyle, back only in v3 [src: brand-directions/_shared/product-model.md:18] |
| Launch record | v3 | New | When a pick ships, the version, channel, time and fingerprint are locked |
| Fingerprint | v3 | New | A link tag, a code or a campaign so results can be traced to the pick |
| How it went | v3 | New | One line per shipped pick: effect, range, method, grade, source |
| Work column How it went | v3 | New | After Live |
| Results feed the picks | v3 | New | A/B/C graded results raise or lower kinds of Plays; D results inform only |
| Results you share | v3 | Changes | Today a learning; tomorrow weighted by how it was measured [src: brand-directions/docs2/content/inventory.mjs LEARN] |
| Measured trust | v3 | New | Wins and undos move each kind of work up a trust ladder that never touches money [src: brand-directions/docs2/content/inventory.mjs LEARN] |
| Holdouts | v3 | New | Grade A needs a declared holdout; a comparison alone is B [src: memory feed-measurement-engine] |

### Requirements with acceptance

| Requirement | Acceptance |
|---|---|
| Source on every result | A result without a connected account or a shared number never shows |
| Never early | Before the family's decide day the line says Too early, never a grade |
| Method named | Every result names its method in plain words, from `GRADE_WORDS` |
| One check per card | A result never mixes two reads |
| Game layer stays clean | Progress shown to founders never counts sales |

## How we do it

1. Port the archived engine piece by piece into brew, starting with the launch record, never wholesale.
2. Use the 13 families as they stand; add a family as data, never engine code [src: data/measure-families.json].
3. Start with one family on one partner with a connected store, such as customer messages on Shopify.
4. Show results to the brand's team only; numbers from accounts stay members only.

## Numbers

| Metric | Definition | Where measured | Status |
|---|---|---|---|
| Measured share | Share of shipped picks with a How it went result | Launch records | Proposed |
| Grade mix | Share of results at A, B, C and D | Launch records | Proposed |
| Time to result | Days from going live to the decide day result | Launch records | Proposed |

## Open

1. **How is a play graded fairly?** Proposal: only A and B results move ranking; C and D show to the team but never teach the feed.
2. **When is a result ready to read?** Proposal: the family's decide day from measure-families.js, with early reads shown as notes only.
3. **Holdouts need sending.** Brew sending is cut [src: SCOPE.md:38]. Proposal: run holdouts through the brand's own Klaviyo or WhatsApp tool, never Brew's own sending.
4. **Keep How we measure it in v1 briefs?** Proposal: keep it as the team's plan, renamed How your team measures it.
5. **v3 price.** Proposal: the $149 or ₹9,999 working number in the pricing proposal [src: brew working tree docs/pricing.md:20].
