@nextcommerce/campaigns-os 1.33.0 → 1.37.1

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.
Files changed (136) hide show
  1. package/AGENTS.md +42 -13
  2. package/CHANGELOG.md +129 -0
  3. package/README.md +42 -20
  4. package/compatibility.json +1 -1
  5. package/contracts/agent-relevant-change-policy.v1.json +1 -0
  6. package/contracts/fixtures/progress/observation.v0.json +89 -0
  7. package/contracts/fixtures/runtime-recipe/accept/current.json +3 -5
  8. package/contracts/fixtures/runtime-recipe/accept/minimal.json +3 -5
  9. package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +3 -5
  10. package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +3 -5
  11. package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +3 -5
  12. package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +3 -5
  13. package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +3 -5
  14. package/contracts/fixtures/runtime-recipe/reject/missing-required-field.json +3 -5
  15. package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +3 -5
  16. package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +3 -5
  17. package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +3 -5
  18. package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +2 -4
  19. package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +3 -5
  20. package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +3 -5
  21. package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +3 -5
  22. package/contracts/release-ledger.json +614 -0
  23. package/contracts/runtime-recipe.campaigns-os-node-v1.json +3 -5
  24. package/contracts/supported-surface.json +23 -6
  25. package/demo/apollo-v0/NOTICE.txt +51 -0
  26. package/demo/apollo-v0/assets/css/demo.css +2 -0
  27. package/demo/apollo-v0/assets/css/landing/tokens.css +35 -0
  28. package/demo/apollo-v0/assets/css/next-core.css +16124 -0
  29. package/demo/apollo-v0/assets/images/1x1_1.svg +19 -0
  30. package/demo/apollo-v0/assets/images/1x1_2.svg +19 -0
  31. package/demo/apollo-v0/assets/images/affirm-logo.svg +24 -0
  32. package/demo/apollo-v0/assets/images/apple-pay-logo.svg +4 -0
  33. package/demo/apollo-v0/assets/images/bancontact-logo.svg +1 -0
  34. package/demo/apollo-v0/assets/images/cc-visa.svg +28 -0
  35. package/demo/apollo-v0/assets/images/cc_amex.svg +20 -0
  36. package/demo/apollo-v0/assets/images/cc_discover.svg +21 -0
  37. package/demo/apollo-v0/assets/images/cc_master.svg +22 -0
  38. package/demo/apollo-v0/assets/images/credit-card-flags.svg +38 -0
  39. package/demo/apollo-v0/assets/images/demo-inline-40788e52a7c75b78.svg +1 -0
  40. package/demo/apollo-v0/assets/images/demo-inline-686e73c8840a0f0a.svg +1 -0
  41. package/demo/apollo-v0/assets/images/google-pay-logo.svg +7 -0
  42. package/demo/apollo-v0/assets/images/guarantee-badge.png +0 -0
  43. package/demo/apollo-v0/assets/images/icon-dollar.svg +5 -0
  44. package/demo/apollo-v0/assets/images/icon-guarantee.svg +5 -0
  45. package/demo/apollo-v0/assets/images/icon-shipping.svg +5 -0
  46. package/demo/apollo-v0/assets/images/icons8-lock-24_1icons8-lock-24.png +0 -0
  47. package/demo/apollo-v0/assets/images/ideal-logo.svg +30 -0
  48. package/demo/apollo-v0/assets/images/klarna-logo.svg +9 -0
  49. package/demo/apollo-v0/assets/images/landing/_shared/16x9.svg +19 -0
  50. package/demo/apollo-v0/assets/images/landing/_shared/1x1_1.svg +19 -0
  51. package/demo/apollo-v0/assets/images/landing/_shared/4x3.svg +19 -0
  52. package/demo/apollo-v0/assets/images/landing/_shared/arrow-right.svg +6 -0
  53. package/demo/apollo-v0/assets/images/landing/_shared/cta-guarantee-icon.png +0 -0
  54. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-icon-1.svg +8 -0
  55. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-icon-2.svg +10 -0
  56. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-icon-3.svg +13 -0
  57. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-icon-4.svg +11 -0
  58. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-quote.svg +6 -0
  59. package/demo/apollo-v0/assets/images/landing/benefits-2/benefits-2-verified.svg +10 -0
  60. package/demo/apollo-v0/assets/images/landing/bottomcta-1/check-bullet.svg +5 -0
  61. package/demo/apollo-v0/assets/images/landing/faq-1/faq-chevron.svg +6 -0
  62. package/demo/apollo-v0/assets/images/landing/footer-1/footer-logo.png +0 -0
  63. package/demo/apollo-v0/assets/images/landing/guarantee-1/guarantee-1-badge.svg +8 -0
  64. package/demo/apollo-v0/assets/images/landing/hero-1/icon-check.svg +5 -0
  65. package/demo/apollo-v0/assets/images/landing/hero-1/icon-star.svg +6 -0
  66. package/demo/apollo-v0/assets/images/landing/hero-1/icon-verified.svg +6 -0
  67. package/demo/apollo-v0/assets/images/landing/icons-5/icon-batteries.svg +7 -0
  68. package/demo/apollo-v0/assets/images/landing/icons-5/icon-cuff-checking.svg +6 -0
  69. package/demo/apollo-v0/assets/images/landing/icons-5/icon-dual-user.svg +5 -0
  70. package/demo/apollo-v0/assets/images/landing/icons-5/icon-fda-cleared.svg +5 -0
  71. package/demo/apollo-v0/assets/images/landing/icons-5/icon-heartbeat.svg +17 -0
  72. package/demo/apollo-v0/assets/images/landing/icons-5/icon-lcd-display.svg +10 -0
  73. package/demo/apollo-v0/assets/images/landing/icons-5/icon-movement-error.svg +7 -0
  74. package/demo/apollo-v0/assets/images/landing/icons-5/icon-portable.png +0 -0
  75. package/demo/apollo-v0/assets/images/landing/icons-5/icon-reading-memory.svg +6 -0
  76. package/demo/apollo-v0/assets/images/landing/icons-5/icon-wrist-comfort.svg +5 -0
  77. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-card-1.jpg +0 -0
  78. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-card-2.jpg +0 -0
  79. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-card-3.jpg +0 -0
  80. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-card-4.jpg +0 -0
  81. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-1.png +0 -0
  82. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-2.png +0 -0
  83. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-3.png +0 -0
  84. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-4.png +0 -0
  85. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-5.png +0 -0
  86. package/demo/apollo-v0/assets/images/landing/ingredients-3/ingredients-3-promise-6.png +0 -0
  87. package/demo/apollo-v0/assets/images/landing/nav-1/flag-us.png +0 -0
  88. package/demo/apollo-v0/assets/images/landing/reviews-3/star-card.svg +3 -0
  89. package/demo/apollo-v0/assets/images/landing/reviews-3/star-lg.svg +3 -0
  90. package/demo/apollo-v0/assets/images/landing/reviews-3/star-sm.svg +3 -0
  91. package/demo/apollo-v0/assets/images/landing/reviews-3/verified.svg +10 -0
  92. package/demo/apollo-v0/assets/images/landing/testimonials-2/testimonials-2-reactions.svg +9 -0
  93. package/demo/apollo-v0/assets/images/landing/testimonials-2/testimonials-2-stars.svg +6 -0
  94. package/demo/apollo-v0/assets/images/link-logo.svg +1 -0
  95. package/demo/apollo-v0/assets/images/next-dark.svg +8 -0
  96. package/demo/apollo-v0/assets/images/paypal-logo.svg +5 -0
  97. package/demo/apollo-v0/assets/images/paypal-txt.svg +8 -0
  98. package/demo/apollo-v0/assets/images/paypal.svg +22 -0
  99. package/demo/apollo-v0/assets/images/sepa-logo.svg +275 -0
  100. package/demo/apollo-v0/assets/images/twint-logo.svg +1 -0
  101. package/demo/apollo-v0/assets/images/united-states-flag-icon.webp +0 -0
  102. package/demo/apollo-v0/assets/images/upsell-payment-logos.svg +38 -0
  103. package/demo/apollo-v0/assets/images/usps.png +0 -0
  104. package/demo/apollo-v0/checkout/index.html +1370 -0
  105. package/demo/apollo-v0/landing/index.html +1836 -0
  106. package/demo/apollo-v0/provenance.json +342 -0
  107. package/demo/apollo-v0/receipt/index.html +292 -0
  108. package/demo/apollo-v0/upsell-bundle-stepper/index.html +401 -0
  109. package/docs/activation-and-evidence.md +37 -0
  110. package/docs/demo-preview.md +63 -0
  111. package/docs/diagnostics.md +55 -0
  112. package/docs/orientation-contract-reference.md +3 -1
  113. package/docs/progress-snapshots.md +142 -0
  114. package/docs/qa-and-test-orders.md +26 -0
  115. package/docs/runtime-readiness.md +3 -3
  116. package/docs/sdk-storage-compatibility.md +19 -0
  117. package/docs/supported-surface.md +14 -1
  118. package/docs/versioning.md +1 -1
  119. package/package.json +22 -8
  120. package/schemas/campaign-runtime-build-context.v0.schema.json +42 -0
  121. package/schemas/campaigns-os-progress-snapshot.v0.schema.json +370 -0
  122. package/skills/next-campaigns-build/SKILL.md +17 -1
  123. package/skills/next-campaigns-os/SKILL.md +19 -3
  124. package/skills/next-campaigns-os-setup/SKILL.md +17 -1
  125. package/skills/next-campaigns-polish/SKILL.md +18 -2
  126. package/skills/next-campaigns-qa/SKILL.md +24 -8
  127. package/skills.json +5 -5
  128. package/src/cli.mjs +96 -6
  129. package/src/consent.mjs +2 -2
  130. package/src/demo-artifact.mjs +97 -0
  131. package/src/demo.mjs +85 -0
  132. package/src/diagnostic.mjs +101 -0
  133. package/src/install-mode.mjs +13 -1
  134. package/src/progress-node.mjs +177 -0
  135. package/src/progress.mjs +133 -0
  136. package/src/sdk-storage-compatibility.mjs +359 -0
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -238,9 +238,7 @@
238
238
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
239
239
  "prepare": "npm run build:spec"
240
240
  },
241
- "install_script_dependencies": [
242
- "fsevents"
243
- ]
241
+ "install_script_dependencies": []
244
242
  },
245
243
  "capabilities": {
246
244
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -297,9 +297,7 @@
297
297
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
298
298
  "prepare": "npm run build:spec"
299
299
  },
300
- "install_script_dependencies": [
301
- "fsevents"
302
- ]
300
+ "install_script_dependencies": []
303
301
  },
304
302
  "capabilities": {
305
303
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "skipped",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",
@@ -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.1",
6
+ "recipe_revision": "1.0.2",
7
7
  "refusal_reason_code": "runtime_recipe_refused",
8
8
  "fail_closed": true,
9
9
  "unperformable_check_disposition": "failed",
@@ -84,7 +84,7 @@
84
84
  "stdin": "closed",
85
85
  "lifecycle_scripts": "disabled",
86
86
  "timeout_bound": "install_seconds",
87
- "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. Exactly one dependency in the resolved tree declares an install script, and it ships a prebuilt binary in its published tarball, so nothing in the tree needs its scripts to function. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
87
+ "rationale": "ci rather than install, so the lockfile is authoritative and the tree is reproducible. --ignore-scripts is the load-bearing flag: it suppresses every dependency lifecycle script and the target's own prepare. No dependency in the resolved tree declares an install script. The exact list in target_expectations remains a reviewed expectation: additions and removals require a recipe revision, so existing v1 consumers retain the same agreement semantics. --no-audit and --fund=false remove two network- and output-side effects that are not part of preparing a runtime."
88
88
  },
89
89
  {
90
90
  "id": "build",
@@ -286,9 +286,7 @@
286
286
  "build:spec": "tsc -p campaign-spec/tsconfig.build.json",
287
287
  "prepare": "npm run build:spec"
288
288
  },
289
- "install_script_dependencies": [
290
- "fsevents"
291
- ]
289
+ "install_script_dependencies": []
292
290
  },
293
291
  "capabilities": {
294
292
  "_note": "What a generation prepared by this recipe can and cannot do. Stated explicitly because 'runtime ready' invites the wrong reading: the same flag that makes the install safe also means the prepared generation has no browser to drive. Preparing a runtime and being able to run browser QA are different readiness questions, and this recipe answers only the first.",