@nextcommerce/campaigns-os 1.61.0 → 1.62.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/AGENTS.md +2 -1
- package/CHANGELOG.md +118 -0
- package/README.md +86 -438
- package/agents/claude/CLAUDE.md +9 -4
- package/agents/codex/AGENTS.md +8 -4
- package/agents/copilot/copilot-instructions.md +8 -4
- package/agents/cursor/campaigns-os.mdc +10 -4
- package/campaign-spec/README.md +7 -0
- package/campaign-spec/dist/analytics-vendors.d.ts +40 -0
- package/campaign-spec/dist/analytics-vendors.js +44 -0
- package/campaign-spec/dist/checkout-flow.d.ts +18 -0
- package/campaign-spec/dist/checkout-flow.js +28 -0
- package/campaign-spec/dist/index.d.ts +4 -2
- package/campaign-spec/dist/index.js +5 -1
- package/campaign-spec/dist/rules/analytics-contract-shape.d.ts +8 -0
- package/campaign-spec/dist/rules/analytics-contract-shape.js +39 -0
- package/campaign-spec/dist/rules/campaign-currencies.d.ts +29 -0
- package/campaign-spec/dist/rules/campaign-currencies.js +130 -0
- package/campaign-spec/dist/rules/checkout-path-has-packages.d.ts +31 -0
- package/campaign-spec/dist/rules/checkout-path-has-packages.js +79 -0
- package/campaign-spec/dist/rules/index.d.ts +2 -0
- package/campaign-spec/dist/rules/index.js +6 -0
- package/campaign-spec/dist/types.d.ts +43 -9
- package/compatibility.json +1 -1
- package/contracts/commerce-surface-catalog.json +59 -53
- package/contracts/effects.v1.json +549 -165
- package/contracts/fixtures/runtime-recipe/accept/current.json +3 -0
- package/contracts/fixtures/runtime-recipe/accept/minimal.json +3 -0
- package/contracts/fixtures/runtime-recipe/dist-states.json +1 -1
- package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +3 -0
- package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +3 -0
- package/contracts/release-ledger.json +999 -0
- package/contracts/runtime-recipe.campaigns-os-node-v1.json +3 -0
- package/contracts/supported-surface.json +8 -8
- package/contracts/template-brand-contract.shared-commerce.v0.json +23 -1
- package/docs/build-packet.md +430 -37
- package/docs/campaign-standardization-report.md +4 -4
- package/docs/campaigns-os-build-flow.md +54 -3
- package/docs/campaignspec-authoring-examples.md +29 -4
- package/docs/design-source-package.md +18 -6
- package/docs/effects.md +17 -9
- package/docs/local-setup.md +1 -1
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/polish-evidence.md +2 -0
- package/docs/progress-snapshots.md +7 -4
- package/docs/qa-and-test-orders.md +147 -1
- package/docs/readback.md +40 -5
- package/docs/runtime-readiness.md +6 -3
- package/docs/sdk-storage-compatibility.md +1 -1
- package/docs/skills-revision.md +10 -10
- package/package.json +1 -1
- package/schemas/campaign-runtime-build-context.v0.schema.json +9 -0
- package/schemas/campaign-runtime-build-packet.v0.schema.json +9 -0
- package/schemas/campaign-spec.v4.schema.json +19 -3
- package/schemas/campaign-spec.v5.schema.json +19 -3
- package/schemas/campaigns-os-readback.v2.schema.json +62 -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 -3
- package/skills/next-campaigns-os/SKILL.md +6 -4
- package/skills/next-campaigns-os-setup/SKILL.md +5 -3
- package/skills/next-campaigns-polish/SKILL.md +5 -4
- package/skills/next-campaigns-qa/SKILL.md +7 -4
- package/skills/next-campaigns-sdk-bump/SKILL.md +42 -9
- package/skills.json +11 -11
- package/src/brand-theme.mjs +2 -1
- package/src/build-brief.mjs +4 -1
- package/src/campaign-workspace.mjs +288 -15
- package/src/change-scope.mjs +284 -0
- package/src/cli.mjs +308 -86
- package/src/commercial-journey.mjs +16 -3
- package/src/commercial-parity.mjs +15 -7
- package/src/content-residue.mjs +4 -2
- package/src/design-source-package.mjs +36 -0
- package/src/design-source-publication.mjs +9 -6
- package/src/directory-lock.mjs +73 -19
- package/src/doctor/checks.mjs +79 -7
- package/src/doctor/ci.mjs +75 -10
- package/src/doctor/inspect.mjs +23 -6
- package/src/doctor/next-step.mjs +7 -0
- package/src/doctor-sidecar.mjs +3 -2
- package/src/evidence-debt.mjs +47 -7
- package/src/finding-cause.mjs +12 -11
- package/src/input-refresh.mjs +339 -32
- package/src/invocation.mjs +7 -1
- package/src/live-campaign-refs.mjs +7 -2
- package/src/local-preview-policy.mjs +35 -2
- package/src/page-kit-analytics-vendors.mjs +132 -0
- package/src/polish-browser.mjs +3 -1
- package/src/polish-readability.mjs +221 -9
- package/src/polish-visual.mjs +9 -2
- package/src/progress-node.mjs +3 -2
- package/src/qa-analytics-parity.mjs +17 -1
- package/src/qa-browser.mjs +40 -4
- package/src/qa-commercial-parity.mjs +50 -3
- package/src/qa-node.mjs +196 -16
- package/src/qa-publish.mjs +9 -8
- package/src/qa-sidecar.mjs +16 -4
- package/src/qa-vendor-beacons.mjs +232 -0
- package/src/qa-vendor-endpoints.mjs +306 -0
- package/src/qc-accept.mjs +29 -1
- package/src/qc-check-registry.mjs +5 -1
- package/src/qc-results.mjs +73 -26
- package/src/readback.mjs +58 -10
- package/src/route-identity.mjs +10 -0
- package/src/run-record.mjs +18 -10
- package/src/runtime-state-ignore.mjs +6 -2
- package/src/sdk-storage-compatibility.mjs +21 -2
- package/src/source-html-intake.mjs +15 -1
- package/src/spec-derive-campaign.mjs +216 -0
- package/src/spec-derive.mjs +473 -53
- package/src/spec-identity.mjs +14 -0
- package/src/stage-ledger.mjs +40 -1
- package/src/stage-record.mjs +58 -13
- package/src/target-lock.mjs +11 -1
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
"_note": "The complete input set, enumerated explicitly rather than globbed. The compiler's configured include globs are NOT the input set: two root modules enter the compilation transitively through imports from the entry module and are emitted, so a fingerprint derived from the globs would cover 36 of the 38 compiled sources and miss one of the larger emitted surfaces. Test fixtures and the package's own tests are not inputs; nothing under them is emitted. A checker resolves the compiler's actual file list and asserts it equals this enumeration, so this list cannot rot silently.",
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
|
+
"campaign-spec/analytics-vendors.ts",
|
|
108
109
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
110
|
"campaign-spec/checkout-flow.ts",
|
|
110
111
|
"campaign-spec/index.ts",
|
|
@@ -113,9 +114,11 @@
|
|
|
113
114
|
"campaign-spec/routing.ts",
|
|
114
115
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
115
116
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
117
|
+
"campaign-spec/rules/campaign-currencies.ts",
|
|
116
118
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
119
|
"campaign-spec/rules/checkout-forward-target.ts",
|
|
118
120
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
121
|
+
"campaign-spec/rules/checkout-path-has-packages.ts",
|
|
119
122
|
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
120
123
|
"campaign-spec/rules/cycle-detection.ts",
|
|
121
124
|
"campaign-spec/rules/design-source-shape.ts",
|
|
@@ -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 — 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 — 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) — 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.
|
|
3
|
+
"surface_version": "1.62.0",
|
|
4
4
|
"package_exports": [
|
|
5
5
|
"./commercial-journey",
|
|
6
6
|
"./commercial-parity",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"sha256": "53269453dfdaac4b286124d445b60b0c46205dfbaf8037ac61b30254a32df53a"
|
|
53
53
|
},
|
|
54
54
|
"contracts/runtime-recipe.campaigns-os-node-v1.json": {
|
|
55
|
-
"sha256": "
|
|
55
|
+
"sha256": "3a960f347a8b7de7d9f223fb2bc1ae35091c943d480bca931bf8afa5e70fa83f"
|
|
56
56
|
},
|
|
57
57
|
"schemas/campaign-build-brief.v1.schema.json": {
|
|
58
58
|
"sha256": "d524003184131398dc15fdb84385af1be0de0c69d6c5ede7278689a5b6101b81"
|
|
@@ -64,16 +64,16 @@
|
|
|
64
64
|
"sha256": "625a6f2ed6bee726f9cddad750e64a54a7e03744c777f5a70afe4a39afdd9848"
|
|
65
65
|
},
|
|
66
66
|
"schemas/campaign-runtime-build-context.v0.schema.json": {
|
|
67
|
-
"sha256": "
|
|
67
|
+
"sha256": "501867cf95eca9b3d9ce8f2255ca8dfbb0c9e073a270794ab5e4203ed79e4658"
|
|
68
68
|
},
|
|
69
69
|
"schemas/campaign-runtime-build-packet.v0.schema.json": {
|
|
70
|
-
"sha256": "
|
|
70
|
+
"sha256": "1e309c5dad8c5eeef26ef6fd3b6b90b72440c5104319a161002b17f1359fbd76"
|
|
71
71
|
},
|
|
72
72
|
"schemas/campaign-spec.v4.schema.json": {
|
|
73
|
-
"sha256": "
|
|
73
|
+
"sha256": "587df2fdd5707b515a9b8685d30070bcf4bdac9e15de7a94df82224ef4fd91b6"
|
|
74
74
|
},
|
|
75
75
|
"schemas/campaign-spec.v5.schema.json": {
|
|
76
|
-
"sha256": "
|
|
76
|
+
"sha256": "c606453dc57d210a5a5ed8a099bf868546ae8f5996cf9ba0f8e71a50b2b03fa4"
|
|
77
77
|
},
|
|
78
78
|
"schemas/campaigns-os-legacy-migration-inventory.v0.schema.json": {
|
|
79
79
|
"sha256": "d6edc4572900d15fdaf6b8c59916b0d885303c1d398bdadeb7c58285522c9049"
|
|
@@ -121,10 +121,10 @@
|
|
|
121
121
|
"sha256": "2e440be6513fe06b351c3a72c35424a04f807792621cb01e89803441fd925e06"
|
|
122
122
|
},
|
|
123
123
|
"schemas/campaigns-os-readback.v2.schema.json": {
|
|
124
|
-
"sha256": "
|
|
124
|
+
"sha256": "b397b417b0456cafc03346a2e882a34c19fa0500ea92594afca2f9fa1d7f2c3b"
|
|
125
125
|
},
|
|
126
126
|
"contracts/effects.v1.json": {
|
|
127
|
-
"sha256": "
|
|
127
|
+
"sha256": "7aca3aa2208ccb700a74bc9554725a23b1f6c413e7ea7dc9ec442e884a8d72c3"
|
|
128
128
|
},
|
|
129
129
|
"schemas/campaigns-os-effects.v1.schema.json": {
|
|
130
130
|
"sha256": "3eadd22169ab98bc7c2f682af2751267605170581182158d96be035b0cfe44dc"
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"asset_pin": {
|
|
57
57
|
"repo": "NextCommerceCo/campaign-cart-starter-templates",
|
|
58
|
-
"sha": "
|
|
58
|
+
"sha": "5711e22345756c655f41c0ae71444478e4a8999e",
|
|
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
|
},
|
|
@@ -186,5 +186,27 @@
|
|
|
186
186
|
"Apply My Discount Coupon"
|
|
187
187
|
],
|
|
188
188
|
"rule": "If an exit-intent include or default widget ships without CampaignSpec checkout exit_intent or promo_code_input behavior, strip it or record a hard warning. If present, it must apply the mapped offer through the SDK/API coupon path and use cart.hasCoupon(\"CODE\") style conditionals for applied-state presentation."
|
|
189
|
+
},
|
|
190
|
+
"layout_conventions": {
|
|
191
|
+
"rule": "Design-independent layout conventions. polish capture measures them on every built page, in the same pass as readability, and reports each as a layout.conventions warning that checkpoint accept can accept. They never block Polish and never read or judge the merchant's copy. Polish reads this block from the shared contract; a family contract does not override it.",
|
|
192
|
+
"floating_cta": {
|
|
193
|
+
"key": "floating_cta",
|
|
194
|
+
"reason_code": "floating_cta_extra_content",
|
|
195
|
+
"viewports": ["mobile"],
|
|
196
|
+
"positions": ["fixed", "sticky"],
|
|
197
|
+
"control_selector": "a[href], button, input[type=\"submit\"], input[type=\"button\"], [role=\"button\"]",
|
|
198
|
+
"exclude_selector": "header, nav, dialog, [role=\"banner\"], [role=\"navigation\"], [role=\"dialog\"], [aria-modal=\"true\"], .announcement",
|
|
199
|
+
"form_field_selector": "input:not([type=\"hidden\"]):not([type=\"submit\"]):not([type=\"button\"]), select, textarea",
|
|
200
|
+
"max_viewport_height_share": 0.5,
|
|
201
|
+
"rule": "A floating CTA container holds the control alone: one link or button and no other visible text. A floating CTA container is the nearest box around a visible control (control_selector) whose computed position is one of positions. Boxes that match or sit inside exclude_selector, boxes that hold a visible form field (form_field_selector), and boxes taller than max_viewport_height_share of the viewport are not floating CTA containers. Visible text is text the browser renders, including CSS generated text; text inside the control does not count."
|
|
202
|
+
},
|
|
203
|
+
"cta_label": {
|
|
204
|
+
"key": "cta_label_size",
|
|
205
|
+
"reason_code": "cta_label_too_small",
|
|
206
|
+
"viewports": ["mobile"],
|
|
207
|
+
"roles": ["add_to_cart", "upsell_accept", "submit_control"],
|
|
208
|
+
"min_font_size_px": 16,
|
|
209
|
+
"rule": "The primary CTA label is at least min_font_size_px CSS px at the mobile viewport. The label is every rendered, enabled text element the readability record lists under one of roles (purchase and accept controls, and submit buttons)."
|
|
210
|
+
}
|
|
189
211
|
}
|
|
190
212
|
}
|