{
 "id": "2.4",
 "title": "v3 PRD",
 "department": "Product",
 "department_slug": "product",
 "direction": null,
 "branded": false,
 "status": "draft",
 "owner": "Param",
 "last_verified": "Mon Oct 26",
 "holds": "Measuring what went out, grading plays, holdouts",
 "urls": {
  "html": "https://handbook.joinsquareup.com/product/v3-prd",
  "markdown": "https://handbook.joinsquareup.com/product/v3-prd.md",
  "json": "https://handbook.joinsquareup.com/product/v3-prd.json"
 },
 "other_directions": [],
 "tldr": {
  "headline": "v3 grades what went out, so next week's picks learn from it",
  "points": [
   {
    "icon": "chart",
    "text": "Every shipped pick gets a How it went line with source, method and grade."
   },
   {
    "icon": "check",
    "text": "Only A and B results change ranking; C and D inform the team."
   },
   {
    "icon": "clock",
    "text": "Before the decide day a result reads Too early, never a grade."
   },
   {
    "icon": "book",
    "text": "An old engine existed in the archived feed repo and is not carried over."
   },
   {
    "icon": "gear",
    "text": "Port it piece by piece, starting with one family on one partner."
   }
  ],
  "stat": {
   "value": "13",
   "label": "measuring families"
  },
  "decide": "How is a play graded fairly? Proposal: only A and B results change ranking.",
  "mood": "building"
 },
 "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"
 ],
 "open_questions": [
  "**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.",
  "**When is a result ready to read?** Proposal: the family's decide day from measure-families.js, with early reads shown as notes only.",
  "**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.",
  "**Keep How we measure it in v1 briefs?** Proposal: keep it as the team's plan, renamed How your team measures it.",
  "**v3 price.** Proposal: the $149 or ₹9,999 working number in the pricing proposal [src: brew working tree docs/pricing.md:20]."
 ],
 "parts": {
  "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\n\nMeasurement 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].\n\n### What already exists on origin/main\n\n| Piece | What it does today | Source |\n|---|---|---|\n| 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] |\n| 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] |\n| Card page | Shows How we measure it with metric and goal, \"Set with you\" when the brief sets none | [src: public/app.js:2378] |\n| Watch block | Says the team runs the checks; Brew does not watch or stop anything | [src: measure-spec.js:23] |\n| 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] |\n| 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] |\n| 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] |\n| Plays cite their family | Each Play's measure section names its family, metric and check timings | [src: moves-engine.js:384] |\n\n### Built before and not carried over\n\nThe 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].\n\n### Data v3 can read once connected\n\nShopify 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 |\n|---|---|---|---|\n| Measuring words in v1 cards | v1 | Goes | Removed in a Restyle, back only in v3 [src: brand-directions/_shared/product-model.md:18] |\n| Launch record | v3 | New | When a pick ships, the version, channel, time and fingerprint are locked |\n| Fingerprint | v3 | New | A link tag, a code or a campaign so results can be traced to the pick |\n| How it went | v3 | New | One line per shipped pick: effect, range, method, grade, source |\n| Work column How it went | v3 | New | After Live |\n| Results feed the picks | v3 | New | A/B/C graded results raise or lower kinds of Plays; D results inform only |\n| Results you share | v3 | Changes | Today a learning; tomorrow weighted by how it was measured [src: brand-directions/docs2/content/inventory.mjs LEARN] |\n| 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] |\n| Holdouts | v3 | New | Grade A needs a declared holdout; a comparison alone is B [src: memory feed-measurement-engine] |\n\n### Requirements with acceptance\n\n| Requirement | Acceptance |\n|---|---|\n| Source on every result | A result without a connected account or a shared number never shows |\n| Never early | Before the family's decide day the line says Too early, never a grade |\n| Method named | Every result names its method in plain words, from `GRADE_WORDS` |\n| One check per card | A result never mixes two reads |\n| 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.\n2. Use the 13 families as they stand; add a family as data, never engine code [src: data/measure-families.json].\n3. Start with one family on one partner with a connected store, such as customer messages on Shopify.\n4. Show results to the brand's team only; numbers from accounts stay members only.",
  "Numbers": "| Metric | Definition | Where measured | Status |\n|---|---|---|---|\n| Measured share | Share of shipped picks with a How it went result | Launch records | Proposed |\n| Grade mix | Share of results at A, B, C and D | Launch records | Proposed |\n| 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.\n2. **When is a result ready to read?** Proposal: the family's decide day from measure-families.js, with early reads shown as notes only.\n3. **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.\n4. **Keep How we measure it in v1 briefs?** Proposal: keep it as the team's plan, renamed How your team measures it.\n5. **v3 price.** Proposal: the $149 or ₹9,999 working number in the pricing proposal [src: brew working tree docs/pricing.md:20]."
 }
}