@koda-sl/baker-cli 0.437.0 → 0.438.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3465,9 +3465,9 @@ Reading the scores: **`relevance`** (0–1) = match of the creative to your quer
3465
3465
 
3466
3466
  ### `baker winning-ads hooks|mechanisms|formats`
3467
3467
 
3468
- Read the **winner-weighted rollup** of the ad-dna corpus → `GET /api/ad-library/seed-catalog` — the hook /
3469
- mechanism / static-format patterns that actually win, ranked by `winner_score` among the ads of the segment you
3470
- pass (`--platform`, `--awareness`, `--industry`; an unset one means any), keyed on the closed seeds/enums the
3468
+ Read the pattern rollup of the ad-dna corpus → `GET /api/ad-library/seed-catalog` — the hook /
3469
+ mechanism / static-format patterns that win **inside brands**, among the creatives of the segment you pass
3470
+ (`--platform`, `--awareness`, `--industry`; an unset one means any), keyed on the closed seeds/enums the
3471
3471
  extractor emits (no clustering). Ground a creative in a **proven** pattern for the exact segment instead of
3472
3472
  guessing. The rollup is recomputed daily.
3473
3473
 
@@ -3489,8 +3489,10 @@ baker winning-ads formats --awareness solution_aware --output md
3489
3489
  | `--limit <n>` | Max keys 1–100 (default 20) |
3490
3490
  | `--full` | Include the per-key segment breakdown |
3491
3491
 
3492
- Each key returns `count`, `mean_winner_score`, and `winner_share`. Ranking is winner-weighted volume, so a
3493
- proven grand-slam pattern floats to the top and a measured dud is floored.
3492
+ Each key returns `lift`, `brands_for`, `brands_against`, `count`, `mean_winner_score` and `winner_share`. The
3493
+ ranking is `lift`: how much more often a brand's creatives using the pattern kept running 60 days than that
3494
+ brand's others, one vote per brand, 0 until five brands have a verdict. `brands_for` / `brands_against` count
3495
+ the brands it won and lost inside. A common pattern is not a winning one: `count` is how often it is used.
3494
3496
 
3495
3497
  ### `baker winning-ads fit <adId>`
3496
3498
 
package/dist/cli.js CHANGED
@@ -23605,6 +23605,13 @@ var patternSeedSchema = z5.object({
23605
23605
  sum_winner_score: z5.number(),
23606
23606
  mean_winner_score: z5.number(),
23607
23607
  winner_share: z5.number(),
23608
+ // How the seed did inside the brands that used it, the order of the catalog:
23609
+ // the mean, over brands, of how much more often their creatives with the seed
23610
+ // ran 60 days than their others (0 until five brands have a verdict), and
23611
+ // how many brands it won and lost inside.
23612
+ lift: z5.number(),
23613
+ brands_for: z5.number(),
23614
+ brands_against: z5.number(),
23608
23615
  // Per-segment counts (platform/awareness_stage/industry → value → n); present
23609
23616
  // only on `--full`, so the response can stay lean by default.
23610
23617
  breakdown_by: z5.record(z5.string(), z5.unknown()).nullable()
@@ -112413,9 +112420,12 @@ var refreshCommand = defineCommand311({
112413
112420
 
112414
112421
  // src/commands/winning-ads/seeds.ts
112415
112422
  import { defineCommand as defineCommand312 } from "citty";
112416
- function leanRow(r) {
112423
+ function leanSeedRow(r) {
112417
112424
  return {
112418
112425
  key: r.key,
112426
+ lift: r.lift,
112427
+ brands_for: r.brands_for,
112428
+ brands_against: r.brands_against,
112419
112429
  count: r.count,
112420
112430
  mean_winner_score: r.mean_winner_score,
112421
112431
  winner_share: r.winner_share
@@ -112456,7 +112466,7 @@ function makeSeedCommand(opts) {
112456
112466
  const data = await apiGet("/api/ad-library/seed-catalog", params);
112457
112467
  const rows = Array.isArray(data?.patterns) ? data.patterns : [];
112458
112468
  const full = args8.full;
112459
- const projected = rows.map((r) => full ? r : leanRow(r));
112469
+ const projected = rows.map((r) => full ? r : leanSeedRow(r));
112460
112470
  const output = args8.output || "json";
112461
112471
  if (output === "json") {
112462
112472
  writeJson({