@koda-sl/baker-cli 0.192.1 → 0.192.2

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
@@ -789,7 +789,7 @@ baker ads meta pixels --pixel-id 9988 --stats --days 7
789
789
 
790
790
  Meta writes mirror the Google/LinkedIn model: they **never hit the Graph API when you run them**. Each op is validated at stage time (field shapes, budget rules, page/Instagram identity ownership, CBO/ABO exclusivity, status-transition legality), shows in the dashboard chat as a pending Meta change, and applies only when the chat is published. Meta has no atomic batch mutate, so ops apply **sequentially** on publish — one failure skips its dependents but the publish completes.
791
791
 
792
- If the company's `metaAdsWriteEnabled` flag is off (the default), publish runs the identical lifecycle **simulated** fake `sim_meta_*` ids, zero Meta calls. The stage response and `baker ads meta draft` show `mode: "simulated"`.
792
+ **That publish reaches the real ad account for every company** Meta writes are generally available, with no per-company flag and no simulated mode to turn on. Discarding the chat before it completes is what undoes a staged change.
793
793
 
794
794
  Chain a full ad from scratch with `meta_temp_*` refs (each create returns one):
795
795
 
@@ -999,7 +999,7 @@ draft [list|remove <ref>|clear|amend <ref>|show <ref>] # review/undo/amend sta
999
999
 
1000
1000
  Write commands never call the LinkedIn API at stage time. Each stages an op on the current chat's draft, fully validated at staging (field limits, enums, budget minimums, URN shapes, parent existence, Baker media readiness, status-transition legality). Validation errors are structured per-field; non-blocking warnings (Maximum Delivery when no `--bid`, budget below playbook floor, audience under 300 rows, >4 lead-form questions, audience expansion/LAN on) come back in the stage envelope. Ops apply when the chat is published.
1001
1001
 
1002
- If the company's LinkedIn-write flag is off (the default), publish runs the identical lifecycle **simulated** — fake `urn:li:simulated:*` results, zero LinkedIn calls. The stage response and `baker ads linkedin draft` show `mode: "simulated"`.
1002
+ **That publish reaches the real ad account for every company** LinkedIn writes are generally available, with no per-company flag and no simulated mode to turn on. Discarding the chat before it completes is what undoes a staged change.
1003
1003
 
1004
1004
  ```bash
1005
1005
  # Chain creates via li_temp_* refs — group → campaign → creative in one chat
package/dist/cli.js CHANGED
@@ -2477,7 +2477,7 @@ var CAPABILITY_SURFACE_SPECS = {
2477
2477
  label: "Google Ads",
2478
2478
  provider: "google-ads",
2479
2479
  resourceNoun: "ad account",
2480
- writePath: "staged-gated",
2480
+ writePath: "staged-live",
2481
2481
  writeScopes: ["https://www.googleapis.com/auth/adwords"],
2482
2482
  commands: "baker ads google"
2483
2483
  },
@@ -2486,7 +2486,7 @@ var CAPABILITY_SURFACE_SPECS = {
2486
2486
  label: "Meta Ads",
2487
2487
  provider: "meta",
2488
2488
  resourceNoun: "ad account",
2489
- writePath: "staged-gated",
2489
+ writePath: "staged-live",
2490
2490
  writeScopes: ["ads_management"],
2491
2491
  commands: "baker ads meta"
2492
2492
  },
@@ -2495,7 +2495,7 @@ var CAPABILITY_SURFACE_SPECS = {
2495
2495
  label: "LinkedIn Ads",
2496
2496
  provider: "linkedin",
2497
2497
  resourceNoun: "ad account",
2498
- writePath: "staged-gated",
2498
+ writePath: "staged-live",
2499
2499
  writeScopes: ["rw_ads"],
2500
2500
  commands: "baker ads linkedin"
2501
2501
  },
@@ -2575,7 +2575,7 @@ var capabilityLimitViewSchema = z6.object({
2575
2575
  cause: z6.enum(["not_built", "provider_forbids", "no_permission"]),
2576
2576
  detail: z6.string()
2577
2577
  });
2578
- var capabilityWriteModeSchema = z6.enum(["live", "simulated", "applies-at-publish", "none"]);
2578
+ var capabilityWriteModeSchema = z6.enum(["live", "applies-at-publish", "none"]);
2579
2579
  var capabilitySurfaceReportSchema = z6.object({
2580
2580
  surface: capabilitySurfaceSchema,
2581
2581
  label: z6.string(),
@@ -12525,7 +12525,7 @@ registerSchema({
12525
12525
  });
12526
12526
  registerSchema({
12527
12527
  command: "ads.linkedin.draft.list",
12528
- description: "Show every LinkedIn write op staged in this chat: ref, summary, dependencies, warnings, mode (simulated = publish will NOT hit LinkedIn), and post-publish results (applied/simulated/failed/skipped). Ops are invisible to the read commands until publish \u2014 check here before finishing.",
12528
+ description: "Show every LinkedIn write op staged in this chat: ref, summary, dependencies, warnings, and post-publish results. Ops are invisible to the read commands until publish, and publishing reaches the real ad account \u2014 check here before finishing.",
12529
12529
  args: {
12530
12530
  json: {
12531
12531
  type: "boolean",
@@ -15270,7 +15270,7 @@ Performance \u2014 the workhorse (3 axes):
15270
15270
 
15271
15271
  Staged writes (NEVER hit LinkedIn directly \u2014 ops stage on this chat's draft,
15272
15272
  show in the dashboard as pending LinkedIn changes, and apply when the chat is
15273
- published; if the company's LinkedIn-write flag is off the publish is simulated):
15273
+ published, at which point they reach the real ad account):
15274
15274
  baker ads linkedin campaign-groups create|update|pause|resume|duplicate
15275
15275
  baker ads linkedin campaigns create|update|pause|resume|archive|duplicate
15276
15276
  baker ads linkedin creatives create|update|pause|resume|duplicate
@@ -17260,7 +17260,7 @@ async function listDraft2(chat) {
17260
17260
  var listCommand9 = defineCommand62({
17261
17261
  meta: {
17262
17262
  name: "list",
17263
- description: "Show every Meta write op staged in this chat, its mode (simulated = publish will NOT hit Meta), dependencies, and post-publish results. Example: baker ads meta draft"
17263
+ description: "Show every Meta write op staged in this chat, its dependencies, and post-publish results. Publishing reaches the real ad account, so review this before you finish. Example: baker ads meta draft"
17264
17264
  },
17265
17265
  args: { chat: CHAT_READ_ARG },
17266
17266
  run: async ({ args }) => {
@@ -26535,7 +26535,7 @@ Full guide: __tooling__/docs/tools/baker/canvas.md`
26535
26535
  import { defineCommand as defineCommand100 } from "citty";
26536
26536
  registerSchema({
26537
26537
  command: "capabilities",
26538
- description: "Start here, before promising the user anything on an ad platform, in Analytics, or in Tag Manager. Answers three questions in one call: what is connected and with what access, whether writes are LIVE or SIMULATED for this company, and what CANNOT be done here and why. Run it with no arguments for every surface; name one surface to also get the exact fields every change on it accepts.",
26538
+ description: "Start here, before promising the user anything on an ad platform, in Analytics, or in Tag Manager. Answers three questions in one call: what is connected and with what access, what a write on each surface actually does when it lands, and what CANNOT be done here and why. Run it with no arguments for every surface; name one surface to also get the exact fields every change on it accepts.",
26539
26539
  args: {
26540
26540
  surface: {
26541
26541
  type: "positional",
@@ -26552,12 +26552,6 @@ registerSchema({
26552
26552
  });
26553
26553
  function capabilityHints(surfaces) {
26554
26554
  const hints = [];
26555
- const simulated = surfaces.filter((surface) => surface.writeMode === "simulated");
26556
- if (simulated.length > 0) {
26557
- hints.push(
26558
- `SIMULATED: ${simulated.map((s) => s.label).join(", ")} \u2014 staging and publishing complete in full and nothing reaches the platform. Do the work, but never tell the user it is live.`
26559
- );
26560
- }
26561
26555
  const immediate = surfaces.filter((surface) => surface.writeMode === "applies-at-publish");
26562
26556
  if (immediate.length > 0) {
26563
26557
  hints.push(
@@ -26586,7 +26580,7 @@ var runCapabilities = defineCommand100({
26586
26580
  name: "capabilities",
26587
26581
  description: `What Baker can and cannot do for this company, before any work starts.
26588
26582
 
26589
- Reports, per surface: what is connected and with what access, whether writes are live or simulated, the entities that can be changed, and \u2014 the part nothing else tells you \u2014 what cannot be changed and why.
26583
+ Reports, per surface: what is connected and with what access, what a write there does when it lands, the entities that can be changed, and \u2014 the part nothing else tells you \u2014 what cannot be changed and why.
26590
26584
 
26591
26585
  Examples:
26592
26586
  baker capabilities