@nextcommerce/campaigns-os 1.37.1 → 1.37.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/CHANGELOG.md CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  Notable supported-surface changes are recorded here.
4
4
 
5
+ ## [1.37.2] - 2026-09-18
6
+
7
+ ### Fixed
8
+
9
+ - Refresh the public starter catalog, per-family SDK verification and CampaignSpec
10
+ examples from template commit `11352c30`. The vendored SDK policy now records
11
+ released SDK 0.4.38, so freshness compares older certification against that
12
+ release instead of reporting SDK 0.4.37 as current.
13
+ - Carry forward private families and local QA structure. Refresh Apollo Template
14
+ Reference provenance and upsell shipping-copy guidance from the same source.
15
+ Reconcile certified fixture and payment-chrome provenance with the catalog;
16
+ rendered pages, config files and payment asset hashes remain unchanged.
17
+ - Preserve the toolkit's established pre-checkout select role and authored
18
+ forward routes when refreshing the known public examples. Narrow adapters
19
+ retain unrelated source updates and leave distinct future contracts unchanged.
20
+
21
+ ## [1.37.1+agent.1] - 2026-09-18
22
+
23
+ ### Changed
24
+
25
+ - Document the page-kit change procedure after handoff: PM proposals are
26
+ reconciled against a known baseline and the current reviewed repository spec.
27
+ Conflicting authored edits require a recorded decision; generated and API-owned
28
+ fields retain their own authority. The worked example preserves a developer's
29
+ SDK upgrade and new page URL while accepting an authored upsell change.
30
+ - Keep Map pin write-back explicit and store refresh with the authorized operator.
31
+ The procedure names the review and evidence requirements for the next build,
32
+ including fresh fingerprints after authored-only changes. It adds no automatic
33
+ synchronization, portal writes or spec prerequisite for static SDK upgrades.
34
+
5
35
  ## [1.37.1] - 2026-09-18
6
36
 
7
37
  ### Fixed
package/README.md CHANGED
@@ -139,7 +139,15 @@ states (the SDK pin, page routes, analytics ids) into the local CampaignSpec,
139
139
  and with `--write-map` records the pin in the saved Map's Build hints too, so
140
140
  a bump in the repo is one edit followed by a derive rather than a hand edit
141
141
  in two tools; with `--from-store <subdomain>` and the store's Admin API read
142
- token in the environment it derives the store profile from the store as well. Everything after `start` is agent-driven: after `start`
142
+ token in the environment it derives the store profile from the store as well.
143
+ Map write-back stays explicit and pin-only.
144
+
145
+ For changes after handoff, follow the
146
+ [spec review procedure](docs/build-packet.md#changing-a-campaign-after-handoff):
147
+ apply the PM's authored changes to the current repository spec, preserve derived
148
+ fields, and resolve competing edits before the next build.
149
+
150
+ Everything after `start` is agent-driven: after `start`
143
151
  and after every stage, run `next` and do what it prints — it names the skill
144
152
  and the exact commands for the next stage, already spelled `npx campaigns-os
145
153
  …` for this install, which is why `install-skills` comes first. The browser
@@ -2,8 +2,8 @@
2
2
  "schema_version": "campaign-cart-sdk-support-policy/v0",
3
3
  "provenance": {
4
4
  "source": "NextCommerceCo/campaign-cart release tags",
5
- "latest_known_release": "0.4.36",
6
- "captured_at": "2026-08-18"
5
+ "latest_known_release": "0.4.38",
6
+ "captured_at": "2026-09-18"
7
7
  },
8
8
  "source": "contracts/campaign-cart-sdk-support-policy.v0.json",
9
9
  "minimum_supported": "0.4.20",
@@ -166,13 +166,15 @@
166
166
  "items_json",
167
167
  "vouchers_json",
168
168
  "accept_text",
169
- "decline_text"
169
+ "decline_text",
170
+ "retail_shipping",
171
+ "offer_shipping"
170
172
  ],
171
173
  "sourceOfTruth": [
172
174
  "CampaignSpec upsell/downsell pages",
173
175
  "Campaigns API package refs and vouchers/offers"
174
176
  ],
175
- "agentRule": "Post-purchase upsells do not use shipping_methods. Package refs and vouchers must come from the upsell page contract."
177
+ "agentRule": "Post-purchase upsells do not use shipping_methods. Package refs and vouchers must come from the upsell page contract. `retail_shipping` and `offer_shipping` are display copy for the offer price block (the struck retail shipping line and the offer shipping line), not shipping method refs. The starter defaults claim `+$4.95 SHIPPING` and `+ FREE SHIPPING`; set both from the target campaign's real shipping figures whenever they differ."
176
178
  },
177
179
  "upsell_bundle_tiers": {
178
180
  "purpose": "Tiered post-purchase bundle upsell rows.",
@@ -493,9 +495,9 @@
493
495
  }
494
496
  },
495
497
  "verification": {
496
- "sdk_version": "0.4.37",
497
- "verified_at": "2026-08-21T15:26:00Z",
498
- "evidence": "sdk-0.4.37-2026-08-21",
498
+ "sdk_version": "0.4.38",
499
+ "verified_at": "2026-09-15T16:51:10Z",
500
+ "evidence": "sdk-0.4.38-2026-09-15",
499
501
  "status": "certified",
500
502
  "source": "template-verification.json"
501
503
  }
@@ -505,8 +507,8 @@
505
507
  "templateReference": {
506
508
  "id": "template-reference-apollo",
507
509
  "family": "apollo",
508
- "version": "sdk-0.4.37-2026-08-21",
509
- "source_commit": "e9a2fc17beefe572b8ddc0c4f9b1b8e2f97f9a59",
510
+ "version": "sdk-0.4.38-revalidated-2026-09-03",
511
+ "source_commit": "84a63fe7af8cf49cd8cfdaaa66eb00ef6dd9bc4a",
510
512
  "provenance_url": "https://raw.githubusercontent.com/NextCommerceCo/campaign-cart-starter-templates/main/docs/template-references/apollo/README.md",
511
513
  "contract_path": "contracts/commerce-surface-catalog.json",
512
514
  "standard_viewport_refs": [
@@ -832,9 +834,9 @@
832
834
  }
833
835
  },
834
836
  "verification": {
835
- "sdk_version": "0.4.37",
836
- "verified_at": "2026-08-21T15:26:00Z",
837
- "evidence": "sdk-0.4.37-2026-08-21",
837
+ "sdk_version": "0.4.38",
838
+ "verified_at": "2026-09-15T16:51:10Z",
839
+ "evidence": "sdk-0.4.38-2026-09-15",
838
840
  "status": "certified",
839
841
  "source": "template-verification.json"
840
842
  }
@@ -1038,9 +1040,9 @@
1038
1040
  }
1039
1041
  },
1040
1042
  "verification": {
1041
- "sdk_version": "0.4.37",
1042
- "verified_at": "2026-08-21T15:26:00Z",
1043
- "evidence": "sdk-0.4.37-2026-08-21",
1043
+ "sdk_version": "0.4.38",
1044
+ "verified_at": "2026-09-15T16:51:10Z",
1045
+ "evidence": "sdk-0.4.38-2026-09-15",
1044
1046
  "status": "certified",
1045
1047
  "source": "template-verification.json"
1046
1048
  }
@@ -1235,9 +1237,9 @@
1235
1237
  }
1236
1238
  },
1237
1239
  "verification": {
1238
- "sdk_version": "0.4.37",
1239
- "verified_at": "2026-08-21T15:26:00Z",
1240
- "evidence": "sdk-0.4.37-2026-08-21",
1240
+ "sdk_version": "0.4.38",
1241
+ "verified_at": "2026-09-15T16:51:10Z",
1242
+ "evidence": "sdk-0.4.38-2026-09-15",
1241
1243
  "status": "certified",
1242
1244
  "source": "template-verification.json"
1243
1245
  }
@@ -1469,9 +1471,9 @@
1469
1471
  }
1470
1472
  },
1471
1473
  "verification": {
1472
- "sdk_version": "0.4.37",
1473
- "verified_at": "2026-08-21T15:26:00Z",
1474
- "evidence": "sdk-0.4.37-2026-08-21",
1474
+ "sdk_version": "0.4.38",
1475
+ "verified_at": "2026-09-15T16:51:10Z",
1476
+ "evidence": "sdk-0.4.38-2026-09-15",
1475
1477
  "status": "certified",
1476
1478
  "source": "template-verification.json"
1477
1479
  }
@@ -1802,9 +1804,9 @@
1802
1804
  }
1803
1805
  },
1804
1806
  "verification": {
1805
- "sdk_version": "0.4.37",
1806
- "verified_at": "2026-08-21T15:26:00Z",
1807
- "evidence": "sdk-0.4.37-2026-08-21",
1807
+ "sdk_version": "0.4.38",
1808
+ "verified_at": "2026-09-15T16:51:10Z",
1809
+ "evidence": "sdk-0.4.38-2026-09-15",
1808
1810
  "status": "certified",
1809
1811
  "source": "template-verification.json"
1810
1812
  }
@@ -2052,9 +2054,9 @@
2052
2054
  }
2053
2055
  },
2054
2056
  "verification": {
2055
- "sdk_version": "0.4.37",
2056
- "verified_at": "2026-08-21T15:26:00Z",
2057
- "evidence": "sdk-0.4.37-2026-08-21",
2057
+ "sdk_version": "0.4.38",
2058
+ "verified_at": "2026-09-15T16:51:10Z",
2059
+ "evidence": "sdk-0.4.38-2026-09-15",
2058
2060
  "status": "certified",
2059
2061
  "source": "template-verification.json"
2060
2062
  }
@@ -2236,9 +2238,9 @@
2236
2238
  }
2237
2239
  },
2238
2240
  "verification": {
2239
- "sdk_version": "0.4.37",
2240
- "verified_at": "2026-08-21T15:26:00Z",
2241
- "evidence": "sdk-0.4.37-2026-08-21",
2241
+ "sdk_version": "0.4.38",
2242
+ "verified_at": "2026-09-15T16:51:10Z",
2243
+ "evidence": "sdk-0.4.38-2026-09-15",
2242
2244
  "status": "certified",
2243
2245
  "source": "template-verification.json"
2244
2246
  }
@@ -2448,5 +2450,5 @@
2448
2450
  },
2449
2451
  "_synced_from_repo": "NextCommerceCo/campaign-cart-starter-templates",
2450
2452
  "_synced_from_ref": "main",
2451
- "_synced_from_sha": "a7cc8beaf9d332c5d8e501d36fb9d4d7e3667468"
2453
+ "_synced_from_sha": "11352c30c596db258679fd3a552b906086b11bb9"
2452
2454
  }
@@ -5207,6 +5207,72 @@
5207
5207
  }
5208
5208
  ],
5209
5209
  "entry_sha256": "76423be9a8624b8a3b398f4a4bfd47ff17b48f45d6a3bc44a22e122172684c6a"
5210
+ },
5211
+ {
5212
+ "id": "RL-0127",
5213
+ "sequence": 127,
5214
+ "date": "2026-09-18",
5215
+ "kind": "release",
5216
+ "surface_version": null,
5217
+ "changelog_section": "1.37.1+agent.1",
5218
+ "changelog_sha256": "4eef81fac283eb699daff04ea5de96a4ad768099f8b9e0556f57e671435479ca",
5219
+ "agent_impact": "For page-kit campaigns after handoff, reconcile PM proposals against their baseline and the current reviewed repository spec. Record authored conflicts and regenerate build evidence for the accepted revision. Map pin write-back remains explicit; static SDK upgrades do not gain a spec requirement.",
5220
+ "compatibility": "compatible",
5221
+ "migration": "none",
5222
+ "changes": [
5223
+ {
5224
+ "class": "named_surface",
5225
+ "path": "docs/build-packet.md",
5226
+ "surface_entry": "docs/build-packet.md",
5227
+ "summary": "Document PM/developer ownership, authored reconciliation, reviewed build evidence and the boundary for future Git-backed portal saves."
5228
+ }
5229
+ ],
5230
+ "entry_sha256": "7a643454252eff345d8015246440a037f69dab2041aee2f8fbafe1367caef087"
5231
+ },
5232
+ {
5233
+ "id": "RL-0128",
5234
+ "sequence": 128,
5235
+ "date": "2026-09-18",
5236
+ "kind": "release",
5237
+ "surface_version": "1.37.2",
5238
+ "changelog_section": "1.37.2",
5239
+ "changelog_sha256": "96345150e314126c0b639cedebd4359085cb841af80cbf6e4ba0fb4554ce6d4c",
5240
+ "agent_impact": "Use released SDK 0.4.38 for freshness comparisons. Public family verification, Apollo reference and upsell shipping-copy guidance now follow the pinned September 15 template source; older SDK evidence remains stale. Private overlays and rendered fixture bytes are preserved. Catalog refresh preserves the established select role and authored forward routes in exact known examples without overriding distinct future source contracts.",
5241
+ "compatibility": "compatible",
5242
+ "migration": "none",
5243
+ "changes": [
5244
+ {
5245
+ "class": "compatibility_policy",
5246
+ "path": "contracts/supported-surface.json",
5247
+ "surface_entry": "contracts/supported-surface.json",
5248
+ "summary": "Advance the compatible package patch to 1.37.2."
5249
+ },
5250
+ {
5251
+ "class": "package_export",
5252
+ "path": "package.json",
5253
+ "surface_entry": null,
5254
+ "summary": "Ship refreshed template evidence, SDK release policy and controlled refresh adapters that preserve established example roles and routes as package 1.37.2."
5255
+ },
5256
+ {
5257
+ "class": "generated_runtime",
5258
+ "path": "package-lock.json",
5259
+ "surface_entry": null,
5260
+ "summary": "Keep the exact lockfile package identity at 1.37.2."
5261
+ },
5262
+ {
5263
+ "class": "documentation",
5264
+ "path": "docs/orientation-contract-reference.md",
5265
+ "surface_entry": "docs/orientation-contract-reference.md",
5266
+ "summary": "Regenerate the orientation reference for surface version 1.37.2."
5267
+ },
5268
+ {
5269
+ "class": "named_surface",
5270
+ "path": "docs/runtime-readiness.md",
5271
+ "surface_entry": "docs/runtime-readiness.md",
5272
+ "summary": "Regenerate the runtime reference for package version 1.37.2."
5273
+ }
5274
+ ],
5275
+ "entry_sha256": "174e0bac2ba34b94fbb7b30257d0baf4e417440cdbcfdc5685b9f48fa565ce26"
5210
5276
  }
5211
5277
  ]
5212
5278
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_note": "The downstream contract manifest. Everything listed here is SUPPORTED SURFACE: consumers (campaigns-agent, campaign-builder, the private ops repo, page-kit campaign repos) may depend on it, and changing it is a deliberate act \u2014 hashed entries require a surface_version bump in the same change (check-supported-surface.mjs --base, mirroring the skills.json bump gate), named entries must keep existing at their path, cli_commands must keep resolving in the CLI dispatch, package_exports must stay exported, and every entry must ship in the npm pack (files[] coverage). Anything NOT listed here \u2014 src/** internals, scripts/** checkers, examples/**, prompts/**, contracts/** other than this file and the entries named[] below (the orientation contract, the release ledger, and the consumer-facing orientation fixtures) \u2014 is implementation: consumers may read it for context but must not build on it, and it can change without notice. Rationale and the compatibility promise: docs/supported-surface.md.",
3
- "surface_version": "1.37.1",
3
+ "surface_version": "1.37.2",
4
4
  "package_exports": [
5
5
  "./commercial-journey",
6
6
  "./commercial-parity",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "asset_pin": {
57
57
  "repo": "NextCommerceCo/campaign-cart-starter-templates",
58
- "sha": "a7cc8beaf9d332c5d8e501d36fb9d4d7e3667468",
58
+ "sha": "11352c30c596db258679fd3a552b906086b11bb9",
59
59
  "path": "src/<family>/assets/<asset>",
60
60
  "note": "asset_sha256 is the sha256 of each shipped starter asset at this commit (the commerce-surface-catalog _synced_from_sha pin; the bytes are identical across every family). A served asset whose bytes hash to the shipped value is the untouched starter asset and counts as residue even though its markup names no method; different bytes mean it was edited in place. check-template-doctrine verifies these hashes against the pinned checkout."
61
61
  },
@@ -220,6 +220,113 @@ action. A configured campaign whose pin is newer than the spec's is the
220
220
  advisory case above: no required action, and sync never moves that pin
221
221
  backwards; `spec derive` is the command that closes it from the spec side.
222
222
 
223
+ ### Changing a campaign after handoff
224
+
225
+ For page-kit campaigns, the reviewed repository spec determines the next build.
226
+ New handoffs use `.campaigns-os/campaign.spec.json`; existing packets keep their
227
+ `spec.local_path` until a separate, reviewed migration. Static campaigns do not
228
+ need a spec or packet for an SDK upgrade. This procedure implements the operating
229
+ agreement in [#432](https://github.com/NextCommerceCo/campaigns-os/issues/432)
230
+ and [#447](https://github.com/NextCommerceCo/campaigns-os/issues/447). It is a
231
+ review procedure, not an automatic Map import or a portal editing lock.
232
+
233
+ A PM can keep using Map Builder to propose a change. Saving the Map does not
234
+ change the campaign repository or approve that change for the next build.
235
+
236
+ | Responsibility | Owner |
237
+ |---|---|
238
+ | Propose offers, copy, page sequence and other authored intent; confirm the intended result | Campaign PM or named campaign owner |
239
+ | Compare the proposal with the current repository, prepare the spec/code change and run checks | Developer, assisted by an agent where useful |
240
+ | Resolve competing edits to the same authored field | PM confirms intent; developer checks the resulting implementation |
241
+ | Review and merge the repository change | The campaign's existing authorized reviewer, under its normal PR rules |
242
+ | Refresh store-derived data requiring an Admin token | Authorized operator or PM; never a routine developer SDK-bump prerequisite |
243
+
244
+ Record the actual PM and developer/reviewer in the campaign change request. An
245
+ agent can prepare a diff and evidence, but cannot supply a missing human decision.
246
+ This procedure does not grant new merge, store-write or deployment authority.
247
+
248
+ #### Propose and reconcile a change
249
+
250
+ 1. **Identify the starting revision.** Record the campaign repo, Git commit and
251
+ packet's spec path that the PM reviewed. Keep that spec as the baseline. A Map
252
+ ID identifies lineage, not the revision: also retain the proposed Map export
253
+ and its save/hash evidence. Do not overwrite the repository spec with it.
254
+ 2. **Compare three versions.** Compare the baseline with the PM's proposal, then
255
+ with the current repository spec. Match pages and packages by their stable
256
+ identifiers, not array position. Explain additions, removals and routing
257
+ changes as well as changed values. The
258
+ [field-class contract](https://github.com/NextCommerceCo/campaigns-os/issues/432#issuecomment-5707550439)
259
+ identifies what a PM can author and what the repo, API or editor owns.
260
+ 3. **Apply the intended change to the current spec on a branch.** Transfer only
261
+ the PM's authored changes. Keep current repo-derived SDK pins, page URLs and
262
+ analytics IDs; preserve API/store records and editor metadata under their own
263
+ authority. An offer selection may change, but a proposed price does not
264
+ rewrite an API-owned price: route that commercial setup change to its owner
265
+ and obtain refreshed readback before building it.
266
+ 4. **Resolve conflicts before accepting the change.** If PM and developer changed
267
+ the same authored field differently, neither value wins automatically. Record
268
+ the chosen value and PM confirmation in the PR. If the baseline is missing,
269
+ pause the import: ask the PM to restate the change against the current spec.
270
+ Do not infer intent from every difference in a stale export. If the repository
271
+ advances during review, repeat the comparison against the new revision.
272
+ 5. **Refresh and validate the result.** Preview `spec derive --dry-run`, inspect
273
+ every refused or unresolved field, then apply the accepted derivation. Plain
274
+ derive is local; it does not merge authored intent. Follow the packet's normal
275
+ `page-kit sync`, build, doctor and relevant QA steps. Resolve stale routing
276
+ hints and rebuild affected pages. A successful derive exit alone is not build
277
+ or QA approval. After an authored-only edit, derive may return `unchanged`
278
+ and leave the Assembly Report's spec hash at the previous build. Record fresh
279
+ build evidence and verify its spec fingerprint before accepting it. A changed
280
+ spec must not reuse evidence for the older build.
281
+ 6. **Review the intended result and record the revision.** The PM confirms the
282
+ commercial change and the developer supplies the checked diff and preview
283
+ evidence. Record the reviewed spec's exact-byte SHA-256, the tested repository
284
+ revision, and the doctor/QA evidence in the PR. Build or deploy from that
285
+ reviewed revision under the campaign's existing rules; rerun affected checks
286
+ if the spec or code changes afterwards. Tell the PM which proposal was accepted
287
+ and identify any remaining Map differences, so the saved Map is not mistaken
288
+ for a synchronized copy.
289
+
290
+ A change request needs only: baseline commit/spec path, the proposal or requested
291
+ field changes, current repository revision, conflict decisions, named reviewers,
292
+ and the final spec hash with build/QA evidence. Use existing PRs and campaign
293
+ records for this; there is no additional sidecar schema or new CLI command.
294
+
295
+ #### Example: the PM changes an upsell while the developer upgrades the SDK
296
+
297
+ The PM starts from reviewed revision A and replaces the first upsell's selected
298
+ package with package B, already present in the campaign API. Meanwhile the
299
+ repository reaches revision R with a newer SDK pin and a changed page permalink.
300
+ The PM's export still contains A's SDK pin and generated page URL.
301
+
302
+ | Value | PM proposal | Current repo R | Reviewed result |
303
+ |---|---|---|---|
304
+ | Selected upsell package (authored) | B | Original package | B, after PM confirmation |
305
+ | SDK pin (repo-derived) | Old pin from A | Newer pin | Newer pin |
306
+ | Page URL (repo-derived) | Old URL from A | New permalink | URL derived from the new permalink |
307
+ | Package price (API-owned) | Copied API value | Current API value | Current API value; selection does not change the price |
308
+
309
+ Start from R, change the selected package, and derive the repo-owned fields. Review
310
+ routing references and rebuild the affected upsell page. If the developer also
311
+ changed the selected package to C, record a conflict and obtain a choice before
312
+ merging. Do not apply B merely because the Map was saved later.
313
+
314
+ #### Map write-back and future portal saves
315
+
316
+ `spec derive --write-map` remains an explicit, pin-only action. A developer or
317
+ operator may request it when updating the Map's SDK hint is part of their task;
318
+ it is not a default SDK-bump or reconciliation step. It retains the existing
319
+ hash precondition and refusal to overwrite a newer Map pin. It does not mark a
320
+ PM proposal accepted or synchronize offers, routes or other authored content.
321
+ Store refresh through `--from-store` remains a separate authorized operator step.
322
+
323
+ A future Git-backed portal save can replace the manual transfer only when it
324
+ identifies the repository/spec and base revision, shows the authored diff,
325
+ preserves each field's authority, detects concurrent changes, and submits the
326
+ change through the same review process. It must show whether a change is merely
327
+ proposed, reviewed or used by a build. That is separate portal work; this
328
+ agreement does not enable portal writes.
329
+
223
330
  ### Deriving the spec from the repo (`spec derive`)
224
331
 
225
332
  Every CampaignSpec field has a class: **authored** (a human writes it: offers,
@@ -25,7 +25,7 @@ Ledger schema id: `campaigns-os-release-ledger/v1`
25
25
  Change policy version: `1.0.0`
26
26
  Reason-code vocabulary version: `1.0.0`
27
27
  Limits version: `1.0.0`
28
- Supported surface at generation time: `1.37.1`
28
+ Supported surface at generation time: `1.37.2`
29
29
 
30
30
  ## Forward compatibility
31
31
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  How a checkout of this repository at one commit becomes a usable installed runtime, and how a consumer decides whether a prepared one is still trustworthy. Everything below is generated from `contracts/runtime-recipe.campaigns-os-node-v1.json`, which is the only authority for these values.
10
10
 
11
- Recipe kind `campaigns-os-node-v1`, revision `1.0.2`, validated by `schemas/campaigns-os-runtime-recipe.v1.schema.json` (`Campaigns OS Runtime Recipe v1`). Supported surface at generation time: `1.37.1`.
11
+ Recipe kind `campaigns-os-node-v1`, revision `1.0.2`, validated by `schemas/campaigns-os-runtime-recipe.v1.schema.json` (`Campaigns OS Runtime Recipe v1`). Supported surface at generation time: `1.37.2`.
12
12
 
13
13
  ## What this is
14
14
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextcommerce/campaigns-os",
3
- "version": "1.37.1",
3
+ "version": "1.37.2",
4
4
  "description": "Toolkit for agent-assisted NEXT campaign builds.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {