@nextcommerce/campaigns-os 1.46.0 → 1.47.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/CHANGELOG.md +153 -3
- package/README.md +1 -1
- package/compatibility.json +1 -1
- package/contracts/commerce-surface-catalog.json +1204 -129
- package/contracts/effects.v1.json +3 -3
- package/contracts/release-ledger.json +338 -0
- package/contracts/supported-surface.json +2 -2
- package/contracts/template-brand-contract.shared-commerce.v0.json +3 -3
- package/docs/build-packet.md +22 -2
- package/docs/local-setup.md +7 -4
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/qa-and-test-orders.md +19 -1
- package/docs/runtime-readiness.md +1 -1
- package/docs/sdk-storage-compatibility.md +1 -1
- package/docs/skills-revision.md +10 -10
- package/package.json +1 -1
- package/skills/campaign-lifecycle-orientation/SKILL.md +3 -3
- package/skills/campaign-readback-classification/SKILL.md +3 -3
- package/skills/campaign-run-evidence/SKILL.md +3 -3
- package/skills/contribution-intake/SKILL.md +3 -3
- package/skills/next-campaigns-build/SKILL.md +4 -4
- package/skills/next-campaigns-os/SKILL.md +3 -3
- package/skills/next-campaigns-os-setup/SKILL.md +3 -3
- package/skills/next-campaigns-polish/SKILL.md +3 -3
- package/skills/next-campaigns-qa/SKILL.md +4 -4
- package/skills.json +10 -10
- package/src/built-script-syntax.mjs +116 -15
- package/src/diagnostic.mjs +2 -1
- package/src/doctor/checks.mjs +0 -1
- package/src/qa-analytics-parity.mjs +37 -2
- package/src/qa-binding-evidence.mjs +4 -2
- package/src/qa-browser.mjs +74 -12
- package/src/sdk-markup.mjs +6 -45
- package/src/sdk-storage-compatibility.mjs +3 -2
- package/src/tooling-setup.mjs +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,154 @@
|
|
|
2
2
|
|
|
3
3
|
Notable supported-surface changes are recorded here.
|
|
4
4
|
|
|
5
|
+
## [1.47.0] - 2026-10-01
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- `contracts/effects.v1.json`: the `--force` notes on `start`,
|
|
10
|
+
`prepare-build` and `build` now say that `--force` also regenerates a stale
|
|
11
|
+
Design Source Package that the intake synthesized itself (#506). That holds
|
|
12
|
+
when the previous Assembly Report records origin `"synthesized"` and the
|
|
13
|
+
package bytes still match it. An adopted or hand-edited package is never
|
|
14
|
+
replaced. The declared writes already covered this path, so behaviour is
|
|
15
|
+
unchanged; only the notes were incomplete.
|
|
16
|
+
- `compatibility.json` names the package version again. It still said 1.34.0
|
|
17
|
+
(#486). A unit test now fails when it differs from `package.json`.
|
|
18
|
+
- Bundled skills carry revision `1.47.0+skills.1`, with each skill version
|
|
19
|
+
advanced one patch, and the local setup install command pins the 1.47.0
|
|
20
|
+
package. The skill text is unchanged.
|
|
21
|
+
|
|
22
|
+
## [1.46.0+agent.11] - 2026-10-01
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- `doctor`'s `built_output.script_syntax` gate groups missing-script warnings
|
|
27
|
+
by the URL the browser resolves, not the raw src. Two spellings of one URL,
|
|
28
|
+
such as `check	out.js` and `checkout.js`, now give one
|
|
29
|
+
`built_output.script_syntax.missing_script` warning instead of two. One src
|
|
30
|
+
that names different files on pages in different folders still gives one
|
|
31
|
+
warning per file.
|
|
32
|
+
- A `<script>` the page ends inside, with no `</script>`, is no longer parsed
|
|
33
|
+
by doctor or QA: the browser never runs a script element whose end tag never
|
|
34
|
+
arrives, so it can no longer block either. Doctor warns about it under the
|
|
35
|
+
new `built_output.script_syntax.unclosed_script` code, one warning per page,
|
|
36
|
+
because the page output is probably truncated.
|
|
37
|
+
- A script symlink under `_site` is read by following the link only while its
|
|
38
|
+
real path stays inside the site root. A link whose target is outside the
|
|
39
|
+
site root is not read. Doctor warns under the new
|
|
40
|
+
`built_output.script_syntax.symlink_outside_site` code, naming the link, and
|
|
41
|
+
does not block. The gate lists such links in `scripts_outside_site[]`. The
|
|
42
|
+
rule is recorded in `docs/build-packet.md`.
|
|
43
|
+
|
|
44
|
+
## [1.46.0+agent.10] - 2026-10-01
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- `qa run --test-order` now follows a redirected order upsell mutation. When
|
|
49
|
+
the accept's POST to the order-upsells URL answered 307 or 308, the step
|
|
50
|
+
took the redirect hop as the mutation's response and judged the upsell
|
|
51
|
+
without the order body. It now waits for the redirect chain's final
|
|
52
|
+
response and judges from that body. A late body is matched to the step by
|
|
53
|
+
the request that started its redirect chain, so every hop of one redirected
|
|
54
|
+
POST counts as the step's request and a body from another request still
|
|
55
|
+
never does. A redirect whose chain has no final response is reported as no
|
|
56
|
+
mutation response, not as answered.
|
|
57
|
+
|
|
58
|
+
## [1.46.0+agent.9] - 2026-10-01
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- `qa run` analytics parity no longer blocks on `purchase-present` when the
|
|
63
|
+
operator did not pass `--analytics-candidate`. The automatic candidate (the
|
|
64
|
+
campaign root, or the first built entry) is not a receipt page, so a Purchase
|
|
65
|
+
cannot fire there. When that candidate fires no Purchase, `purchase-present`
|
|
66
|
+
is now `MANUAL_REVIEW`/`WARN`, and `evidence.page_mismatch` gives the reason
|
|
67
|
+
(`receipt_baseline_non_receipt_candidate` or `candidate_not_receipt`), the
|
|
68
|
+
candidate's source and its page type. An explicit `--analytics-candidate`,
|
|
69
|
+
or a built entry whose topology page type is a receipt, still blocks on a
|
|
70
|
+
missing Purchase. To compare Purchase, pass the candidate receipt with
|
|
71
|
+
`--analytics-candidate`.
|
|
72
|
+
|
|
73
|
+
## [1.46.0+agent.8] - 2026-10-01
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
|
|
77
|
+
- The local setup command in `docs/local-setup.md` installed both the toolkit
|
|
78
|
+
and `next-campaign-page-kit` with `--save-dev`. In an existing page-kit
|
|
79
|
+
project that moved page-kit from `dependencies` to `devDependencies`, so
|
|
80
|
+
builds that run `npm ci --omit=dev` or set `NODE_ENV=production` no longer
|
|
81
|
+
installed it. The command now installs page-kit with `--save-exact` only and
|
|
82
|
+
the toolkit with `--save-dev --save-exact`, so a project that declares
|
|
83
|
+
page-kit under `dependencies` keeps it there. The README and quickstart
|
|
84
|
+
page-kit installs also pin exactly.
|
|
85
|
+
- `tooling setup` now warns when the project declares page-kit only in
|
|
86
|
+
`devDependencies`, and prints the command that moves it back. The warning
|
|
87
|
+
appears in the text output and in a new `warnings` array in the `--json`
|
|
88
|
+
result; setup still proceeds.
|
|
89
|
+
|
|
90
|
+
## [1.46.0+agent.7] - 2026-10-01
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- The vendored starter-template catalog is re-synced to
|
|
95
|
+
campaign-cart-starter-templates `3793b1d` (was `11352c3`). That brings in the
|
|
96
|
+
runtime-gated payment logos, the composable upsell pages, the `is_upsell`
|
|
97
|
+
opt-out on every bump include, and template verification evidence for
|
|
98
|
+
Campaign Cart SDK 0.4.40. Family certification freshness now reads 0.4.40 as
|
|
99
|
+
the verified SDK. The SDK support policy (minimum and preferred versions) is
|
|
100
|
+
unchanged.
|
|
101
|
+
- `fixtures/certified-families` is regenerated at the new pin, and the shared
|
|
102
|
+
commerce brand contract's payment-chrome `asset_pin` moves with it. The
|
|
103
|
+
shipped asset bytes are unchanged. The payment-chrome repair text now says
|
|
104
|
+
to set `payment_flags.show_<method>: false` in the page frontmatter when a
|
|
105
|
+
logo from the starter `payment-logos.html` row is flagged, instead of
|
|
106
|
+
deleting markup. `upsell-payment-logos.svg` stays listed because the
|
|
107
|
+
starter still renders it ungated under `payment_flags.style: flat` and on
|
|
108
|
+
one select page.
|
|
109
|
+
|
|
110
|
+
## [1.46.0+agent.6] - 2026-10-01
|
|
111
|
+
|
|
112
|
+
### Fixed
|
|
113
|
+
|
|
114
|
+
- `sdk storage-check` accepts a Campaign Cart release manifest whose SDK
|
|
115
|
+
version is above its supported range. Released manifests stamp their own
|
|
116
|
+
release version but declare an earlier supported range (v0.4.40 declares
|
|
117
|
+
0.4.38 only), and the check refused every one of them with "Manifest
|
|
118
|
+
source SDK version must equal supported maximum". The target SDK is still
|
|
119
|
+
judged against the declared range, so a target outside it reports unknown
|
|
120
|
+
(`target-outside-manifest-range`). A manifest whose SDK version is below its
|
|
121
|
+
supported maximum is still refused, because it cannot vouch for later
|
|
122
|
+
releases. The report keeps recording the manifest's SDK version and range
|
|
123
|
+
separately.
|
|
124
|
+
|
|
125
|
+
## [1.46.0+agent.5] - 2026-10-01
|
|
126
|
+
|
|
127
|
+
### Removed
|
|
128
|
+
|
|
129
|
+
- `doctor` no longer warns with `built_output.sdk_markup.checkout_bump_is_upsell`
|
|
130
|
+
(added in `1.45.0+agent.5`). When a shopper selects an order bump on a
|
|
131
|
+
checkout page, it is added as a line item on the checkout order. With
|
|
132
|
+
`data-next-is-upsell="true"` that line is tagged as an upsell, so platform
|
|
133
|
+
order reports show upsell items apart from the core items. That tagging is
|
|
134
|
+
the intended default. The warning fired on every canonical starter checkout
|
|
135
|
+
with a bump and told the user to remove the attribute, which would report
|
|
136
|
+
the bump as a core item. Leave the attribute in place. A campaign that
|
|
137
|
+
should not tag a bump as an upsell opts out by passing `is_upsell: false` to
|
|
138
|
+
the bump include. Doctor reports no finding for the attribute either way.
|
|
139
|
+
|
|
140
|
+
## [1.46.0+agent.4] - 2026-10-01
|
|
141
|
+
|
|
142
|
+
### Changed
|
|
143
|
+
|
|
144
|
+
- The `next-campaigns-qa` and `next-campaigns-build` skills now say which
|
|
145
|
+
checkout controls count as bound for `browser-commerce-structure`: a
|
|
146
|
+
required field bound only on a `type="hidden"` input, a disabled control, a
|
|
147
|
+
read-only input or read-only textarea, or a control with
|
|
148
|
+
`aria-disabled="true"` does not count, and QA reports it in `fields_bound.missing`. This is the rule QA
|
|
149
|
+
has applied since #540; the skills had not stated it. Bundled skills carry
|
|
150
|
+
revision `1.46.0+skills.2`, with each skill version advanced one patch. No
|
|
151
|
+
change to the CLI.
|
|
152
|
+
|
|
5
153
|
## [1.46.0+agent.3] - 2026-09-30
|
|
6
154
|
|
|
7
155
|
### Changed
|
|
@@ -135,9 +283,11 @@ Notable supported-surface changes are recorded here.
|
|
|
135
283
|
downsell and receipt pages, and bumps without the flag, get no warning. The
|
|
136
284
|
flag comes from the bump include's markup, and several starter bump includes
|
|
137
285
|
write it unconditionally, so a canonical starter checkout with a bump shows
|
|
138
|
-
this warning.
|
|
139
|
-
|
|
140
|
-
upsell
|
|
286
|
+
this warning. It was a warning, not a blocker. Its advice to remove
|
|
287
|
+
`data-next-is-upsell="true"` was wrong: tagging a checkout bump line as an
|
|
288
|
+
upsell is the intended default, so order reports show upsell items apart
|
|
289
|
+
from core items, and removing the attribute would report the bump as a core
|
|
290
|
+
item. The warning is retired in `1.46.0+agent.5`.
|
|
141
291
|
|
|
142
292
|
### Fixed
|
|
143
293
|
|
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ steps, in this order:
|
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
mkdir "<route>" && cd "<route>"
|
|
48
|
-
npm init -y && npm i next-campaign-page-kit
|
|
48
|
+
npm init -y && npm i --save-exact next-campaign-page-kit
|
|
49
49
|
npx campaign-init --non-interactive --template <family> --slug "<route>" --name "<campaign name>"
|
|
50
50
|
npm install --save-dev --save-exact @nextcommerce/campaigns-os@<version>
|
|
51
51
|
npx --no-install campaigns-os tooling status --platform claude
|