@koda-sl/baker-cli 0.249.0-dev.94b6a6a7e → 0.249.0-dev.e7a1a227e
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 +0 -54
- package/dist/{chunk-HBDGUVUH.js → chunk-VLNO5AUC.js} +1 -1
- package/dist/chunk-VLNO5AUC.js.map +1 -0
- package/dist/cli.js +531 -1626
- package/dist/cli.js.map +1 -1
- package/dist/engine/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-HBDGUVUH.js.map +0 -1
package/README.md
CHANGED
|
@@ -1264,45 +1264,6 @@ Data is retained for 400 days; a window reaching further back comes back with a
|
|
|
1264
1264
|
|
|
1265
1265
|
---
|
|
1266
1266
|
|
|
1267
|
-
### A/B tests (`baker experiment`)
|
|
1268
|
-
|
|
1269
|
-
Two versions of one landing page, split 50/50 at the edge, decided by a verdict rather than by two rates somebody reads.
|
|
1270
|
-
|
|
1271
|
-
```bash
|
|
1272
|
-
baker experiment plan --landing oferta --variant oferta-b # FIRST — can this page settle the question at all?
|
|
1273
|
-
baker experiment plan --landing oferta --variant oferta-b --goal event:request_demo
|
|
1274
|
-
baker experiment plan --landing oferta --variant oferta-b --days 21 # what could 21 days settle?
|
|
1275
|
-
baker experiment start --landing oferta --variant oferta-b --because "60% of visitors never scroll past the hero" --change "put the price in the headline"
|
|
1276
|
-
baker experiment status # the verdict on every test
|
|
1277
|
-
baker experiment status --id a3f91c2b --full # one test, with the posteriors behind it
|
|
1278
|
-
baker experiment finish --id a3f91c2b # send all the traffic to whichever won
|
|
1279
|
-
baker experiment finish --id a3f91c2b --abandon # stop it, keep the original page, record no result
|
|
1280
|
-
```
|
|
1281
|
-
|
|
1282
|
-
The variant is an ordinary published landing with its own slug. Assignment happens while the HTML is served, so there is no flicker, no client JavaScript and nothing for an ad blocker to suppress — and the visitor's URL still reads `/oferta/`, because the split is a path rewrite and never a redirect. A direct visit to `/oferta-b/` is served that page with **no** assignment and stays out of the measurement, so a shared link cannot stuff one arm.
|
|
1283
|
-
|
|
1284
|
-
**`--days` answers the other question.** You cannot set how long a test runs — the finish line is a visitor count fixed before it starts, and a horizon that moves is not a horizon. But `--days 21` says what a window that long *could* settle on this page's traffic: *"in 21 days this page could only settle a change of +31% or more"*. That turns a refusal into a brief, because the lever is the size of the change, not the calendar.
|
|
1285
|
-
|
|
1286
|
-
**`plan` before building anything.** At a 3% conversion rate a +20% lift needs roughly 14,000 visitors *per variant*; most landing pages will never get there, and `plan` refuses rather than letting a test run for three weeks and report a conclusion made on noise. `--lift` sets the smallest lift worth detecting (default `0.2`), and it is the most consequential flag here — halving it roughly quadruples the traffic needed.
|
|
1287
|
-
|
|
1288
|
-
**`--goal` decides what "better" means, and it is fixed for the life of the test.**
|
|
1289
|
-
|
|
1290
|
-
| `--goal` | Counts |
|
|
1291
|
-
|---|---|
|
|
1292
|
-
| `leads` (default) | Whatever this company already marks as a conversion |
|
|
1293
|
-
| `leads:<form>` | The same, one Form only |
|
|
1294
|
-
| `event:<name>` | An event the page declares for itself (`data-baker-click="request_demo"`) |
|
|
1295
|
-
| `event:<name>/<key>=<value>` | The same, narrowed by one of its own properties |
|
|
1296
|
-
| `click` / `click:<host>` | Leaving the site, optionally for one destination |
|
|
1297
|
-
|
|
1298
|
-
`baker analytics events` lists what a page already reports. A goal that has never fired on the page is **refused**, not run — it would return zero on both sides forever, and that reads as a tie rather than as "not measured".
|
|
1299
|
-
|
|
1300
|
-
**Read `verdict` and nothing else** to decide: `keep_running` | `winner` | `no_difference` | `invalid` | `stopped_early_harmful`. `summary` is one sentence fit to show a client. The numbers under `--full` are for printing — a test that says `keep_running` has not finished however good they look, and only `finish` on a concluded test can record a result.
|
|
1301
|
-
|
|
1302
|
-
**`--abandon` overrides the verdict.** It stops the test, keeps the original page and records no result — the only way to end one that has not concluded, and it applies even when the test *has*. That is deliberate: the only outcome it can disagree with is a variant win, so deferring to the verdict would mean a flag asking to keep the original page handed all the traffic to the alternative instead. The response reports `discardedVerdict` when a real finding was thrown away.
|
|
1303
|
-
|
|
1304
|
-
Nothing goes live until the session is published: starting stages onto the session, and the person publishing is the review of the variant page.
|
|
1305
|
-
|
|
1306
1267
|
### Google Analytics 4 (`baker ga4`)
|
|
1307
1268
|
|
|
1308
1269
|
GA4 commands for multi-channel audits **and** for configuring what the property measures. Playbook-aligned report presets, property health audits, free-form Data API queries, and staged Admin API writes.
|
|
@@ -5712,21 +5673,6 @@ baker landing inspiration scrape <url> --out .baker/<dir> # capture any page n
|
|
|
5712
5673
|
- **Inspiration, never a clipboard.** A reference's structure and mechanism are the lesson; write the client's own words.
|
|
5713
5674
|
- **A capture has to land in `.baker/`, and `scrape` refuses anywhere else in a workspace.** `--out` is free-form and the directory is the agent's choice, but a capture is tens of MB of lossless PNG whose individual files clear every size gate — written to a tracked directory it becomes a permanent part of the client's repo, force-cloned into every later session. `.baker/` is gitignored precisely so a capture costs nothing. The refusal is scoped to the workspace: outside a git work tree — a local run against `/tmp` — any path is allowed, because there is no history to bloat.
|
|
5714
5675
|
|
|
5715
|
-
### `baker landing variant`
|
|
5716
|
-
|
|
5717
|
-
Creates the alternative version of a landing for an A/B test. The new page **imports the control's sections** and owns its own copy of only what you fork, so the two arms differ by exactly the hypothesis.
|
|
5718
|
-
|
|
5719
|
-
```bash
|
|
5720
|
-
baker landing variant oferta oferta-b --fork Hero.astro
|
|
5721
|
-
baker landing variant oferta oferta-b --fork Hero.astro,Proof.astro --because "60% of visitors never scroll past the hero" --change "put the price in the headline"
|
|
5722
|
-
```
|
|
5723
|
-
|
|
5724
|
-
- **Sharing, not copying, is what keeps the test honest.** A duplicated page drifts from its control on every later edit — a price, a typo, a new testimonial — and the test then reports that drift plus the hypothesis as one result. A shared section is one file, so an edit reaches both arms at once. Baker follows the sharing too: both pages redeploy together, and both are re-critiqued when a shared section changes.
|
|
5725
|
-
- **Relative paths are re-aimed, not string-patched.** Every specifier in the copied files is resolved and re-relativised, so `index.astro` and a forked `_components/Hero.astro` — which sit at different depths — both keep pointing at the right thing, including the control's `_images/` and shared wrappers like `src/components/Video.astro`.
|
|
5726
|
-
- **`_definition.md` is the control's**, with a fresh quoted `internalId`, a `(variant)` suffix on `internalTitle`, and a note recording what differs, the observation behind it and the change. `metaTitle`/`metaDescription` stay identical on purpose: the variant is served under the control's URL.
|
|
5727
|
-
- **Errors carry the retry.** `NOT_FOUND` returns `availableSlugs` (wrong control) or `availableComponents` (wrong `--fork`); `ALREADY_EXISTS` and `INVALID_SLUG` name what to change. Omitting `--fork` succeeds with a hint saying the page currently renders exactly the control, so a test between them cannot conclude.
|
|
5728
|
-
- **Run `baker experiment plan` first.** Most pages never get the traffic to settle most questions.
|
|
5729
|
-
|
|
5730
5676
|
### `baker landing critique`
|
|
5731
5677
|
|
|
5732
5678
|
Deterministic design-quality critic for landing pages — an offline, no-LLM detector for the well-known "AI slop" tells (gradient text, overused fonts like Inter, side-tab colored borders, cream/parchment grounds, purple-on-heading palettes, buzzword copy, broken images, and more). It scores a landing's `.astro` source and returns findings tiered **block / warn / advisory**.
|