@koda-sl/baker-cli 0.425.0-dev.107cc9af3 → 0.426.0-dev.5af7a82af

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
@@ -1810,12 +1810,14 @@ Ads start from what customers said. Three commands carry the process; the agent
1810
1810
  ```bash
1811
1811
  baker creatives brief [--adset <id>] [--account-id act_<id>] # one read: viewer, account bottleneck, what works, taste, customer quotes, ideas on file
1812
1812
  baker creatives ideas [--full] # check and rank src/creatives/_ideas/*.md; build_next
1813
- baker creatives make <idea> [--slug <s>] [--adset <id>] [--reference <adId>] [--spec <beats.json>]
1813
+ baker creatives make <idea> [--slug <s>] [--adset <id>] [--reference <adId>] [--spec <beats.json>] [--from-idea]
1814
+ baker creatives learn [--days <n>] [--dry-run] # what each idea's ads did, written back onto the idea
1814
1815
  ```
1815
1816
 
1816
- - `brief` returns a verdict, not raw numbers: `account.bottleneck` is `hook`, `after_click`, `none` or `too_little_data`. A part that cannot be read says `unavailable`.
1817
+ - `brief` returns a verdict, not raw numbers: `account.bottleneck` is `hook`, `after_click`, `none` or `too_little_data`. A part that cannot be read says `unavailable`. `market` says what competitors' ads already say (the followed brands, else the library), how sophisticated the market is, and which awareness stages nobody speaks to.
1817
1818
  - `ideas` is free and local. An idea's `evidence` resolves to `src/content/insights/` entries, or it is an `explore` bet. Numbers must be in the Knowledge or our own customers' quotes (a Reddit, forum or web quote never sources a claim), no two ideas may share an angle and format, and a review or testimonial format needs a quote from our own customer.
1818
- - `make` builds one idea. A static searches the idea's container for ads made for our viewer, checks the closest three with `winning-ads fit` and scaffolds from the first that fits. A video idea takes its beats spec. Either way it records the idea on `_definition.md`, sets `prompt.json`'s `message` and syncs the definition. Drafted copy lines claiming a figure the company never wrote come back first in `hints`.
1819
+ - `learn` pools each built idea's creatives, judges them against the rest of the account's cost per result and writes `status` (`winner`, `failed`, `inconclusive`, `testing`) and a frozen `result` onto the idea. `ideas` then warns when a new idea repeats a failed one.
1820
+ - `make` builds one idea. A static searches the idea's container for ads made for our viewer, checks the closest three with `winning-ads fit` and scaffolds from the first that fits. A video idea takes its beats spec. Either way it records the idea on `_definition.md`, sets `prompt.json`'s `message` and syncs the definition. Drafted copy lines claiming a figure the company never wrote come back first in `hints`. When no proven ad fits (or with `--from-idea`), a static starts from the idea itself: `prompt.json` holds the message and placeholders, and `canvas run` refuses to render until the scene and copy are written.
1819
1821
 
1820
1822
  ### Competitive Intelligence (`baker research`)
1821
1823
 
@@ -6919,6 +6919,18 @@ function conceptProblems(spec) {
6919
6919
  }
6920
6920
  return problems;
6921
6921
  }
6922
+ var PLACEHOLDER = "[TODO";
6923
+ function unwrittenProblems(spec) {
6924
+ const problems = [];
6925
+ if (spec.scene.description.includes(PLACEHOLDER)) {
6926
+ problems.push("The scene is still a placeholder: write what the viewer sees in `scene.description`.");
6927
+ }
6928
+ const lines = spec.copy.filter((line) => line.text.includes(PLACEHOLDER));
6929
+ if (lines.length > 0) {
6930
+ problems.push(`${lines.length} line(s) of copy are still placeholders: write each as it prints, or drop it.`);
6931
+ }
6932
+ return problems;
6933
+ }
6922
6934
  function readAdSpec(raw) {
6923
6935
  if (isAdSpec(raw)) return AdSpecSchema.parse(raw);
6924
6936
  const advertiser = raw?.reference?.advertiser;
@@ -18464,6 +18476,7 @@ export {
18464
18476
  isAdSpec,
18465
18477
  conceptSummary,
18466
18478
  conceptProblems,
18479
+ unwrittenProblems,
18467
18480
  readAdSpec,
18468
18481
  withRenderedLettering,
18469
18482
  conceptClassOf,
@@ -18551,4 +18564,4 @@ export {
18551
18564
  defaultRegistry,
18552
18565
  createEngineFromEnv
18553
18566
  };
18554
- //# sourceMappingURL=chunk-5EMMHYLP.js.map
18567
+ //# sourceMappingURL=chunk-GTHLEQHU.js.map