@nextcommerce/campaigns-os 1.33.0 → 1.34.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.
- package/CHANGELOG.md +42 -0
- package/README.md +3 -0
- package/compatibility.json +1 -1
- package/contracts/fixtures/runtime-recipe/accept/current.json +3 -5
- package/contracts/fixtures/runtime-recipe/accept/minimal.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/missing-required-field.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +2 -4
- package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +3 -5
- package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +3 -5
- package/contracts/release-ledger.json +255 -0
- package/contracts/runtime-recipe.campaigns-os-node-v1.json +3 -5
- package/contracts/supported-surface.json +5 -3
- package/docs/orientation-contract-reference.md +2 -1
- package/docs/qa-and-test-orders.md +26 -0
- package/docs/runtime-readiness.md +3 -3
- package/docs/sdk-storage-compatibility.md +19 -0
- package/docs/supported-surface.md +2 -1
- package/docs/versioning.md +1 -1
- package/package.json +11 -7
- package/src/cli.mjs +22 -2
- package/src/sdk-storage-compatibility.mjs +359 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,48 @@
|
|
|
2
2
|
|
|
3
3
|
Notable supported-surface changes are recorded here.
|
|
4
4
|
|
|
5
|
+
## [1.34.1+agent.1] - 2026-09-18
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Upgrade HTML parsing to parse5 8.0.1 and entities 8.1.0. Existing ESM
|
|
10
|
+
imports and the Node 20.19 minimum remain compatible; no consumer migration
|
|
11
|
+
or supported API change is required.
|
|
12
|
+
|
|
13
|
+
## [1.34.1] - 2026-09-18
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Playwright 1.63.0 and YAML 2.9.1 are validated with runtime recipe 1.0.2,
|
|
18
|
+
whose install-script expectation reflects removal of fsevents. The v1
|
|
19
|
+
contract retains exact agreement for additions and removals.
|
|
20
|
+
- CI runs independent TypeScript, unit, contract and required Chromium checks
|
|
21
|
+
behind the existing `check` status. Missing Chromium fails browser proof.
|
|
22
|
+
Installed-package checks exercise shared, conflicting and latest consumer
|
|
23
|
+
Playwright versions using the package-owned browser installer and launcher.
|
|
24
|
+
- Unit tests are discovered automatically as the codebase grows. Dependabot
|
|
25
|
+
groups minor/patch updates and leaves major API upgrades separate.
|
|
26
|
+
|
|
27
|
+
## [1.34.0] - 2026-09-17
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- `campaigns-os sdk storage-check --target <git-root> --target-sdk <x.y.z>
|
|
32
|
+
--manifest <SDK-manifest.json> --scope <dir,file> [--exclude <dir,file>]
|
|
33
|
+
[--json]` checks Git-tracked campaign HTML and JavaScript before an SDK
|
|
34
|
+
upgrade. The SDK-owned migration manifest supplies storage keys, verified
|
|
35
|
+
release boundaries, and public replacements; the scanner carries no second
|
|
36
|
+
registry. Explicit source scope and exclusions are recorded with file hashes.
|
|
37
|
+
Inline scripts and local shared scripts are checked, with findings at their
|
|
38
|
+
original source locations. Known incompatible accesses fail the check;
|
|
39
|
+
unresolved code, unreadable sources, and unsupported target versions cannot
|
|
40
|
+
produce a clean result. No merchant source, SDK pin, or lifecycle journal is
|
|
41
|
+
written. The report identifies manifest bytes and available Git provenance.
|
|
42
|
+
- The new `sdk` CLI command and its reference are supported surface. This is
|
|
43
|
+
source compatibility evidence only: order, browser, and analytics behavior
|
|
44
|
+
still need their own proof. Supply the SDK manifest explicitly; the pending
|
|
45
|
+
SDK contract change does not imply an existing released tag contains it.
|
|
46
|
+
|
|
5
47
|
## [1.33.0+agent.5] - 2026-09-17
|
|
6
48
|
|
|
7
49
|
### Changed
|
package/README.md
CHANGED
|
@@ -211,6 +211,8 @@ design markup separate from SDK-owned commerce controls.
|
|
|
211
211
|
|
|
212
212
|
## Important Commands
|
|
213
213
|
|
|
214
|
+
Before an SDK bump, scan explicitly scoped tracked merchant HTML/JS with [SDK storage compatibility](docs/sdk-storage-compatibility.md). The SDK-generated manifest is supplied separately; a clean result covers static source compatibility only.
|
|
215
|
+
|
|
214
216
|
```bash
|
|
215
217
|
npm run campaigns-os -- tooling status
|
|
216
218
|
npm run campaigns-os -- install-skills --dry-run
|
|
@@ -219,6 +221,7 @@ npm run campaigns-os -- qa install-browser
|
|
|
219
221
|
npm run skills -- status
|
|
220
222
|
npm run campaigns-os -- prepare-build --spec <spec.json> --source <html-dir> --target <page-kit-repo> --template-family <family> --brief <campaign-build-brief.yaml>
|
|
221
223
|
npm run campaigns-os -- doctor --packet <page-kit-repo>/campaign-runtime.build.json
|
|
224
|
+
npm run campaigns-os -- sdk storage-check --target <campaign-git-root> --target-sdk 0.4.38 --manifest <sdk-storage-manifest.json> --scope <campaign,shared> --json
|
|
222
225
|
npm run campaigns-os -- standardize --target <page-kit-repo-or-cpk-repo> --json
|
|
223
226
|
npm run campaigns-os -- theme inspect --packet <page-kit-repo>/campaign-runtime.build.json --json
|
|
224
227
|
npm run campaigns-os -- theme generate --packet <page-kit-repo>/campaign-runtime.build.json --json
|
package/compatibility.json
CHANGED
|
@@ -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.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.
|
|
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.",
|
|
@@ -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.2",
|
|
5
5
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
6
6
|
"fail_closed": true,
|
|
7
7
|
"unperformable_check_disposition": "failed",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"stdin": "closed",
|
|
80
80
|
"lifecycle_scripts": "disabled",
|
|
81
81
|
"timeout_bound": "install_seconds",
|
|
82
|
-
"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.
|
|
82
|
+
"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."
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"id": "build",
|
|
@@ -281,9 +281,7 @@
|
|
|
281
281
|
"build:spec": "tsc -p campaign-spec/tsconfig.build.json",
|
|
282
282
|
"prepare": "npm run build:spec"
|
|
283
283
|
},
|
|
284
|
-
"install_script_dependencies": [
|
|
285
|
-
"fsevents"
|
|
286
|
-
]
|
|
284
|
+
"install_script_dependencies": []
|
|
287
285
|
},
|
|
288
286
|
"capabilities": {
|
|
289
287
|
"_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.
|
|
6
|
+
"recipe_revision": "1.0.2",
|
|
7
7
|
"refusal_reason_code": "runtime_recipe_refused",
|
|
8
8
|
"fail_closed": false,
|
|
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.
|
|
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.
|
|
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",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"stdin": "closed",
|
|
83
83
|
"lifecycle_scripts": "disabled",
|
|
84
84
|
"timeout_bound": "install_seconds",
|
|
85
|
-
"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.
|
|
85
|
+
"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."
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"id": "build",
|
|
@@ -284,9 +284,7 @@
|
|
|
284
284
|
"build:spec": "tsc -p campaign-spec/tsconfig.build.json",
|
|
285
285
|
"prepare": "npm run build:spec"
|
|
286
286
|
},
|
|
287
|
-
"install_script_dependencies": [
|
|
288
|
-
"fsevents"
|
|
289
|
-
]
|
|
287
|
+
"install_script_dependencies": []
|
|
290
288
|
},
|
|
291
289
|
"capabilities": {
|
|
292
290
|
"_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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.",
|