@nextcommerce/campaigns-os 1.55.0 → 1.59.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 +124 -0
- package/CONTEXT.md +11 -0
- package/campaign-spec/README.md +15 -1
- package/campaign-spec/dist/checkout-flow.d.ts +97 -0
- package/campaign-spec/dist/checkout-flow.js +245 -0
- package/campaign-spec/dist/index.d.ts +1 -0
- package/campaign-spec/dist/index.js +6 -1
- package/campaign-spec/dist/normalize.d.ts +3 -2
- package/campaign-spec/dist/normalize.js +7 -5
- package/campaign-spec/dist/routing.d.ts +6 -3
- package/campaign-spec/dist/routing.js +6 -3
- package/campaign-spec/dist/rules/checkout-forward-target.d.ts +17 -0
- package/campaign-spec/dist/rules/checkout-forward-target.js +48 -0
- package/campaign-spec/dist/rules/checkout-step-reaches-checkout.d.ts +12 -0
- package/campaign-spec/dist/rules/checkout-step-reaches-checkout.js +37 -0
- package/campaign-spec/dist/rules/exit-intent-validation.js +2 -1
- package/campaign-spec/dist/rules/index.d.ts +4 -0
- package/campaign-spec/dist/rules/index.js +12 -0
- package/campaign-spec/dist/rules/one-checkout-per-path.d.ts +25 -0
- package/campaign-spec/dist/rules/one-checkout-per-path.js +84 -0
- package/campaign-spec/dist/rules/pre-payment-forward-target.d.ts +12 -0
- package/campaign-spec/dist/rules/pre-payment-forward-target.js +42 -0
- package/campaign-spec/dist/rules/promo-code-input-validation.js +2 -1
- package/campaign-spec/dist/rules/schema-version.d.ts +9 -4
- package/campaign-spec/dist/rules/schema-version.js +10 -5
- package/campaign-spec/dist/types.d.ts +20 -3
- package/campaign-spec/dist/types.js +3 -2
- package/compatibility.json +2 -2
- package/contracts/campaign-cart-sdk-support-policy.v0.json +2 -2
- package/contracts/commerce-surface-catalog.json +26 -27
- package/contracts/effects.v1.json +5 -5
- package/contracts/fixtures/runtime-recipe/accept/current.json +6 -1
- package/contracts/fixtures/runtime-recipe/accept/minimal.json +6 -1
- package/contracts/fixtures/runtime-recipe/dist-states.json +1 -1
- package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/missing-required-field.json +1 -1
- package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +5 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +6 -1
- package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +6 -1
- package/contracts/release-ledger.json +1137 -0
- package/contracts/runtime-recipe.campaigns-os-node-v1.json +6 -1
- package/contracts/supported-surface.json +9 -5
- package/contracts/template-brand-contract.shared-commerce.v0.json +1 -1
- package/docs/build-packet.md +68 -10
- package/docs/local-setup.md +1 -1
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/qa-and-test-orders.md +124 -22
- package/docs/runtime-readiness.md +8 -3
- package/docs/skills-revision.md +10 -10
- package/docs/supported-surface.md +1 -1
- package/docs/versioning.md +4 -1
- package/package.json +2 -1
- package/schemas/campaign-runtime-build-context.v0.schema.json +4 -1
- package/schemas/campaign-runtime-build-packet.v0.schema.json +4 -1
- package/schemas/campaign-spec.v5.schema.json +586 -0
- package/skills/campaign-lifecycle-orientation/SKILL.md +10 -8
- 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 +6 -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 +21 -6
- package/skills/next-campaigns-qa/SKILL.md +4 -3
- package/skills.json +10 -10
- package/src/adapter-decision-contract.mjs +1 -1
- package/src/build-brief.mjs +14 -5
- package/src/built-site-scope.mjs +91 -0
- package/src/cli-helpers.mjs +129 -0
- package/src/cli.mjs +117 -57
- package/src/commercial-journey.mjs +25 -2
- package/src/design-source-package.mjs +1 -1
- package/src/design-source-publication.mjs +7 -7
- package/src/doctor/checks.mjs +269 -16
- package/src/doctor/inspect.mjs +4 -2
- package/src/doctor/next-step.mjs +18 -9
- package/src/doctor-sidecar.mjs +5 -3
- package/src/gate-actions.mjs +21 -1
- package/src/input-refresh.mjs +6 -6
- package/src/local-preview-policy.mjs +110 -12
- package/src/polish-node.mjs +8 -7
- package/src/qa-browser.mjs +363 -36
- package/src/qa-cart-entry.mjs +183 -14
- package/src/qa-node.mjs +38 -34
- package/src/qa-test-order-topology.mjs +118 -1
- package/src/qa-verdict-discovery.mjs +21 -4
- package/src/qa-verdict.mjs +24 -1
- package/src/runtime-state-ignore.mjs +7 -5
- package/src/sdk-attribute-index.mjs +8 -7
- package/src/source-html-intake.mjs +58 -7
- package/src/stage-ledger.mjs +4 -2
- package/src/stage-record.mjs +203 -36
|
@@ -6267,8 +6267,8 @@
|
|
|
6267
6267
|
"sends": [
|
|
6268
6268
|
{
|
|
6269
6269
|
"destination": "{base-url}",
|
|
6270
|
-
"what": "a GET for each built page under the served URL, to prove the
|
|
6271
|
-
"when": "the
|
|
6270
|
+
"what": "a GET for each built page under the served URL, to prove the preview answers before it is recorded, and on a hosted target a GET for each script and stylesheet the built pages load from that origin, to compare its bytes with the built output",
|
|
6271
|
+
"when": "--base-url names the campaign's route root on a loopback origin (deploy target local-serve) or an https origin (any other deploy target; plain http only on a loopback host)",
|
|
6272
6272
|
"requires_consent": false,
|
|
6273
6273
|
"observed_in": [
|
|
6274
6274
|
"no_session",
|
|
@@ -6281,7 +6281,7 @@
|
|
|
6281
6281
|
],
|
|
6282
6282
|
"effect_test": "effects: record deploy",
|
|
6283
6283
|
"test_scope": "full",
|
|
6284
|
-
"notes": "Destructive: it replaces stages.deploy, stamped with the build fingerprint it probed, and the packet's deploy.preview_url.
|
|
6284
|
+
"notes": "Destructive: it replaces stages.deploy, stamped with the build fingerprint it probed, and the packet's deploy.preview_url. On a local-serve packet the requests stay on this machine: --base-url must be a loopback origin. On any other deploy target --base-url is an https origin and the served scripts and stylesheets are compared by sha256 with the built output (HTML is not compared). Refused, writing nothing but the lifecycle entry, when the URL breaks those rules or is not the campaign's route root, a built page does not answer (2xx locally, 200 hosted), a served asset is missing or differs, polish is not recorded, build or Polish is owed again after a brief or CampaignSpec change or its record does not say which content it was made against, the built output changed since build was recorded or a record build of other output lands between the probe and the write (on either deploy target), or the theme gate is blocked. The Build Context is read, not written."
|
|
6285
6285
|
},
|
|
6286
6286
|
{
|
|
6287
6287
|
"command": "record",
|
|
@@ -6300,8 +6300,8 @@
|
|
|
6300
6300
|
"sends": [
|
|
6301
6301
|
{
|
|
6302
6302
|
"destination": "{base-url}",
|
|
6303
|
-
"what": "a GET for each built page under the served URL, to prove the
|
|
6304
|
-
"when": "the
|
|
6303
|
+
"what": "a GET for each built page under the served URL, to prove the preview answers before it is recorded, and on a hosted target a GET for each script and stylesheet the built pages load from that origin, to compare its bytes with the built output",
|
|
6304
|
+
"when": "--base-url names the campaign's route root on a loopback origin (deploy target local-serve) or an https origin (any other deploy target; plain http only on a loopback host)",
|
|
6305
6305
|
"requires_consent": false,
|
|
6306
6306
|
"observed_in": [
|
|
6307
6307
|
"no_session",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
3
3
|
"recipe_kind": "campaigns-os-node-v1",
|
|
4
|
-
"recipe_revision": "1.0.
|
|
4
|
+
"recipe_revision": "1.0.3",
|
|
5
5
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
6
6
|
"fail_closed": true,
|
|
7
7
|
"unperformable_check_disposition": "failed",
|
|
@@ -101,6 +101,7 @@
|
|
|
101
101
|
"fingerprint_algorithm": "sha256",
|
|
102
102
|
"files": [
|
|
103
103
|
"campaign-spec/analytics-vocabulary.ts",
|
|
104
|
+
"campaign-spec/checkout-flow.ts",
|
|
104
105
|
"campaign-spec/index.ts",
|
|
105
106
|
"campaign-spec/normalize.ts",
|
|
106
107
|
"campaign-spec/package.json",
|
|
@@ -108,7 +109,9 @@
|
|
|
108
109
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
109
110
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
110
111
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
112
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
111
113
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
114
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
112
115
|
"campaign-spec/rules/cycle-detection.ts",
|
|
113
116
|
"campaign-spec/rules/design-source-shape.ts",
|
|
114
117
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -119,9 +122,11 @@
|
|
|
119
122
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
120
123
|
"campaign-spec/rules/index.ts",
|
|
121
124
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
125
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
122
126
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
123
127
|
"campaign-spec/rules/page-count.ts",
|
|
124
128
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
129
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
125
130
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
126
131
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
127
132
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_note": "Declarative descriptions of the prepared-runtime states an output-check implementation must distinguish. A test builds each state from the accepted recipe rather than from paths written down here, so adding a module to the input set cannot leave a fixture describing an inventory that no longer exists.",
|
|
3
3
|
"schema": "campaigns-os-runtime-recipe-dist-states/v1",
|
|
4
4
|
"directory": "campaign-spec/dist",
|
|
5
|
-
"expected_file_count":
|
|
5
|
+
"expected_file_count": 86,
|
|
6
6
|
"states": [
|
|
7
7
|
{
|
|
8
8
|
"id": "healthy",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": false,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"fingerprint_algorithm": "sha256",
|
|
105
105
|
"files": [
|
|
106
106
|
"campaign-spec/analytics-vocabulary.ts",
|
|
107
|
+
"campaign-spec/checkout-flow.ts",
|
|
107
108
|
"campaign-spec/index.ts",
|
|
108
109
|
"campaign-spec/normalize.ts",
|
|
109
110
|
"campaign-spec/package.json",
|
|
@@ -111,7 +112,9 @@
|
|
|
111
112
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
112
113
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
113
114
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
115
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
114
116
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
115
118
|
"campaign-spec/rules/cycle-detection.ts",
|
|
116
119
|
"campaign-spec/rules/design-source-shape.ts",
|
|
117
120
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -122,9 +125,11 @@
|
|
|
122
125
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
123
126
|
"campaign-spec/rules/index.ts",
|
|
124
127
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
128
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
125
129
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
126
130
|
"campaign-spec/rules/page-count.ts",
|
|
127
131
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
132
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
128
133
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
129
134
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
130
135
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v2",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "skipped",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_growth_note": "When a bound below is genuinely reached, the answer is to find out why before raising it. A dependency install that exceeds its bound on a warm machine is a supply-chain change, not a slow morning; an output inventory that exceeds its file or byte bound is a build that went wrong, not a package that grew 50x overnight. Raising a bound is the fallback, it advances recipe_revision, and it owes a release-ledger entry. Widening the accepted npm range follows the same path, and its trigger is external and checkable: widen when a Node release line ships that npm major by default, not when a particular machine happens to have it installed.",
|
|
4
4
|
"schema": "campaigns-os-runtime-recipe/v1",
|
|
5
5
|
"recipe_kind": "campaigns-os-node-v1",
|
|
6
|
-
"recipe_revision": "1.0.
|
|
6
|
+
"recipe_revision": "1.0.3",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": true,
|
|
9
9
|
"unperformable_check_disposition": "failed",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"fingerprint_algorithm": "sha256",
|
|
107
107
|
"files": [
|
|
108
108
|
"campaign-spec/analytics-vocabulary.ts",
|
|
109
|
+
"campaign-spec/checkout-flow.ts",
|
|
109
110
|
"campaign-spec/index.ts",
|
|
110
111
|
"campaign-spec/normalize.ts",
|
|
111
112
|
"campaign-spec/package.json",
|
|
@@ -113,7 +114,9 @@
|
|
|
113
114
|
"campaign-spec/rules/analytics-contract-shape.ts",
|
|
114
115
|
"campaign-spec/rules/assembly-hints-shape.ts",
|
|
115
116
|
"campaign-spec/rules/campaign-metadata.ts",
|
|
117
|
+
"campaign-spec/rules/checkout-forward-target.ts",
|
|
116
118
|
"campaign-spec/rules/checkout-has-success-url.ts",
|
|
119
|
+
"campaign-spec/rules/checkout-step-reaches-checkout.ts",
|
|
117
120
|
"campaign-spec/rules/cycle-detection.ts",
|
|
118
121
|
"campaign-spec/rules/design-source-shape.ts",
|
|
119
122
|
"campaign-spec/rules/downsell-without-upsell.ts",
|
|
@@ -124,9 +127,11 @@
|
|
|
124
127
|
"campaign-spec/rules/funnel-weight-sum.ts",
|
|
125
128
|
"campaign-spec/rules/index.ts",
|
|
126
129
|
"campaign-spec/rules/offer-ref-integrity.ts",
|
|
130
|
+
"campaign-spec/rules/one-checkout-per-path.ts",
|
|
127
131
|
"campaign-spec/rules/package-pricing-sanity.ts",
|
|
128
132
|
"campaign-spec/rules/page-count.ts",
|
|
129
133
|
"campaign-spec/rules/page-id-uniqueness.ts",
|
|
134
|
+
"campaign-spec/rules/pre-payment-forward-target.ts",
|
|
130
135
|
"campaign-spec/rules/promo-code-input-validation.ts",
|
|
131
136
|
"campaign-spec/rules/promo-codes-shape.ts",
|
|
132
137
|
"campaign-spec/rules/route-field-ignored-for-page-type.ts",
|