@nextcommerce/campaigns-os 1.53.0 → 1.55.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 +145 -0
- package/CONTEXT.md +8 -5
- package/README.md +26 -11
- package/compatibility.json +1 -1
- package/contracts/campaign-cart-checkout-field-contract.v0.json +10 -0
- package/contracts/campaign-cart-sdk-support-policy.v0.json +2 -2
- package/contracts/commerce-surface-catalog.json +27 -27
- package/contracts/effects.v1.json +96 -37
- package/contracts/release-ledger.json +774 -0
- package/contracts/supported-surface.json +4 -4
- package/contracts/template-brand-contract.shared-commerce.v0.json +1 -1
- package/docs/brand-theme-bridge.md +10 -0
- package/docs/build-packet.md +45 -22
- package/docs/campaign-standardization-report.md +32 -0
- package/docs/campaigns-os-build-flow.md +1 -1
- package/docs/design-source-package.md +7 -3
- package/docs/effects.md +4 -6
- package/docs/local-setup.md +1 -1
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/progress-snapshots.md +3 -1
- package/docs/qa-and-test-orders.md +83 -14
- package/docs/runtime-readiness.md +1 -1
- package/docs/sdk-storage-compatibility.md +15 -0
- package/docs/skills-revision.md +10 -10
- package/docs/supported-surface.md +2 -1
- package/docs/workflow-findings-sidecar.md +57 -2
- package/package.json +3 -1
- package/schemas/campaign-runtime-assembly-report.v0.schema.json +5 -1
- package/schemas/campaigns-os-run-record.v0.schema.json +20 -15
- package/skills/campaign-lifecycle-orientation/SKILL.md +3 -3
- package/skills/campaign-readback-classification/SKILL.md +3 -3
- package/skills/campaign-run-evidence/SKILL.md +3 -3
- package/skills/contribution-intake/SKILL.md +3 -3
- package/skills/next-campaigns-build/SKILL.md +3 -3
- package/skills/next-campaigns-os/SKILL.md +3 -3
- package/skills/next-campaigns-os-setup/SKILL.md +3 -3
- package/skills/next-campaigns-polish/SKILL.md +3 -3
- package/skills/next-campaigns-qa/SKILL.md +4 -4
- package/skills.json +10 -10
- package/src/adapter-decision-contract.mjs +26 -12
- package/src/brand-theme.mjs +44 -8
- package/src/campaign-ecosystem.mjs +153 -31
- package/src/campaign-identity.mjs +33 -4
- package/src/cli.mjs +58 -62
- package/src/consent.mjs +3 -2
- package/src/design-source-publication.mjs +1 -1
- package/src/deviation.mjs +2 -1
- package/src/directory-lock.mjs +79 -7
- package/src/doctor/checks.mjs +28 -8
- package/src/doctor/inspect.mjs +13 -0
- package/src/doctor/next-step.mjs +16 -6
- package/src/invocation.mjs +7 -4
- package/src/lifecycle.mjs +88 -6
- package/src/local-preview-policy.mjs +6 -0
- package/src/login.mjs +2 -1
- package/src/polish-browser.mjs +8 -2
- package/src/polish-node.mjs +6 -1
- package/src/polish-readability.mjs +2 -2
- package/src/progress-node.mjs +3 -2
- package/src/qa-browser.mjs +595 -95
- package/src/qa-cart-entry.mjs +29 -6
- package/src/qa-node.mjs +177 -43
- package/src/qa-verdict-publish.mjs +2 -1
- package/src/run-record.mjs +46 -34
- package/src/sdk-attribute-index.mjs +111 -23
- package/src/sdk-markup.mjs +89 -10
- package/src/sdk-repin.mjs +282 -0
- package/src/stage-ledger.mjs +15 -3
- package/src/stage-record.mjs +85 -17
- package/src/standardization-report.mjs +26 -1
- package/src/target-lock.mjs +9 -1
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"observed_in": "The conditions in which the effect test must SEE this write or send. An empty list declares an effect the offline fixture cannot reach; it then requires a not_observed_reason, and check-effects refuses the row without one. The test always refuses an effect that is NOT declared, in every condition.",
|
|
43
43
|
"effect_changing_flags": [
|
|
44
|
+
"--apply",
|
|
44
45
|
"--browser",
|
|
45
46
|
"--built",
|
|
46
47
|
"--dry-run",
|
|
@@ -233,6 +234,72 @@
|
|
|
233
234
|
"test_scope": "full",
|
|
234
235
|
"notes": "A static scan of tracked source in a Git checkout. Exempted from lifecycle capture by name in persistLifecycleIfRequested, and it bypasses the stale-session sweep."
|
|
235
236
|
},
|
|
237
|
+
{
|
|
238
|
+
"command": "sdk",
|
|
239
|
+
"subcommand": "repin",
|
|
240
|
+
"flags": [],
|
|
241
|
+
"annotations": {
|
|
242
|
+
"readOnlyHint": true,
|
|
243
|
+
"destructiveHint": false,
|
|
244
|
+
"openWorldHint": false,
|
|
245
|
+
"idempotentHint": true
|
|
246
|
+
},
|
|
247
|
+
"tier": "none",
|
|
248
|
+
"writes": [],
|
|
249
|
+
"sends": [],
|
|
250
|
+
"effect_test": "effects: sdk repin",
|
|
251
|
+
"test_scope": "full",
|
|
252
|
+
"notes": "The preview: it reads the target's HTML and script files and prints each semver-pinned Campaign Cart loader.js / campaign-cart.css reference below the target version with its rewrite, and the references it leaves alone. It writes nothing, appends no lifecycle entry (only --apply journals; the subcommand is declared journal-exempt without it in src/invocation.mjs), runs no stale-session closeout and sends nothing. A target holding _data/campaigns.json is refused (exit 2) with the same result: nothing written."
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"command": "sdk",
|
|
256
|
+
"subcommand": "repin",
|
|
257
|
+
"flags": [
|
|
258
|
+
"--apply"
|
|
259
|
+
],
|
|
260
|
+
"annotations": {
|
|
261
|
+
"readOnlyHint": false,
|
|
262
|
+
"destructiveHint": false,
|
|
263
|
+
"openWorldHint": false,
|
|
264
|
+
"idempotentHint": true
|
|
265
|
+
},
|
|
266
|
+
"tier": "B",
|
|
267
|
+
"writes": [
|
|
268
|
+
{
|
|
269
|
+
"path": "{target}/**",
|
|
270
|
+
"when": "an HTML or script file under the target holds a semver-pinned Campaign Cart loader.js / campaign-cart.css URL below the target version; only the version segment of each such URL changes",
|
|
271
|
+
"observed_in": [
|
|
272
|
+
"no_session",
|
|
273
|
+
"ambient_session",
|
|
274
|
+
"stale_session",
|
|
275
|
+
"lifecycle_log",
|
|
276
|
+
"persisted_consent"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"path": "{target}/.campaign-runtime/sdk-repin.json",
|
|
281
|
+
"when": "at least one reference was rewritten: the change record (campaigns-os-sdk-repin/v0) is (re)written",
|
|
282
|
+
"observed_in": [
|
|
283
|
+
"no_session",
|
|
284
|
+
"ambient_session",
|
|
285
|
+
"stale_session",
|
|
286
|
+
"lifecycle_log",
|
|
287
|
+
"persisted_consent"
|
|
288
|
+
]
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"path": "{lifecycle-journal}",
|
|
292
|
+
"when": "a lifecycle journal is selected for the invocation — an active run session, --lifecycle-journal, or CAMPAIGNS_OS_LIFECYCLE_LOG",
|
|
293
|
+
"observed_in": [
|
|
294
|
+
"lifecycle_log"
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
],
|
|
298
|
+
"sends": [],
|
|
299
|
+
"effect_test": "effects: sdk repin --apply",
|
|
300
|
+
"test_scope": "full",
|
|
301
|
+
"notes": "Rewrites the version segment of each semver-pinned reference below the target and writes the change record; @latest, @main, commit and prerelease refs and pins at or above the target are left alone. A second run with the same target finds nothing to change and writes nothing. `sdk repin --target <repo>` names no packet, so an ambient session bound to a packet elsewhere is not resolved for it and no entry is appended under that session. A target holding _data/campaigns.json is refused (exit 2) and nothing is written."
|
|
302
|
+
},
|
|
236
303
|
{
|
|
237
304
|
"command": "tooling",
|
|
238
305
|
"subcommand": "diagnose",
|
|
@@ -2202,11 +2269,10 @@
|
|
|
2202
2269
|
{
|
|
2203
2270
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
2204
2271
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
2205
|
-
"when": "
|
|
2272
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
2206
2273
|
"requires_consent": true,
|
|
2207
|
-
"observed_in": [
|
|
2208
|
-
|
|
2209
|
-
]
|
|
2274
|
+
"observed_in": [],
|
|
2275
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
2210
2276
|
},
|
|
2211
2277
|
{
|
|
2212
2278
|
"destination": "{base-url}",
|
|
@@ -2244,7 +2310,7 @@
|
|
|
2244
2310
|
],
|
|
2245
2311
|
"effect_test": "effects: qa run",
|
|
2246
2312
|
"test_scope": "full",
|
|
2247
|
-
"notes": "Destructive and not idempotent: each attempt overwrites the committed verdict sidecar and the report's QA stage, and a ready verdict clears the ambient run session. It SENDS on a blocked attempt too: the
|
|
2313
|
+
"notes": "Destructive and not idempotent: each attempt overwrites the committed verdict sidecar and the report's QA stage, and a ready verdict clears the ambient run session. It SENDS on a blocked attempt too: the QA stage progress observation to {proxy-base}/api/progress under persisted consent for the endpoint, and the verdict to {proxy-base}/api/qa/verdicts under the same consent unless the base URL is a local address, which keeps the verdict local by default (#486; --post-verdict still sends it). Publishing rides the telemetry consent seam rather than a flag of its own, so the four consent-off conditions saw neither request. Local-spec packets retain verdicts in the repository and never send a QA verdict or progress to the Map portal, even with --post-verdict. When a served page was read and a public Campaigns API key resolves, it also makes one read-only GET of {proxy-base}/api/campaign under X-Campaign-Key to check the served pages' shipping and package refs against the live campaign (#533); without a key or a page, or on a failed read, the verdict records the check as not_run with its reason. --no-live-refs skips that read (its own row)."
|
|
2248
2314
|
},
|
|
2249
2315
|
{
|
|
2250
2316
|
"command": "qa",
|
|
@@ -2335,11 +2401,10 @@
|
|
|
2335
2401
|
{
|
|
2336
2402
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
2337
2403
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
2338
|
-
"when": "
|
|
2404
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
2339
2405
|
"requires_consent": true,
|
|
2340
|
-
"observed_in": [
|
|
2341
|
-
|
|
2342
|
-
]
|
|
2406
|
+
"observed_in": [],
|
|
2407
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
2343
2408
|
},
|
|
2344
2409
|
{
|
|
2345
2410
|
"destination": "{base-url}",
|
|
@@ -2583,11 +2648,10 @@
|
|
|
2583
2648
|
{
|
|
2584
2649
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
2585
2650
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
2586
|
-
"when": "
|
|
2651
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
2587
2652
|
"requires_consent": true,
|
|
2588
|
-
"observed_in": [
|
|
2589
|
-
|
|
2590
|
-
]
|
|
2653
|
+
"observed_in": [],
|
|
2654
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
2591
2655
|
},
|
|
2592
2656
|
{
|
|
2593
2657
|
"destination": "{base-url}",
|
|
@@ -2625,7 +2689,7 @@
|
|
|
2625
2689
|
],
|
|
2626
2690
|
"effect_test": "effects: qa run --test-order",
|
|
2627
2691
|
"test_scope": "full",
|
|
2628
|
-
"notes": "The most consequential row in the file: --test-order places REAL orders against the store under test. Destructive, open-world, not idempotent. It SENDS on a blocked attempt too: the
|
|
2692
|
+
"notes": "The most consequential row in the file: --test-order places REAL orders against the store under test. Destructive, open-world, not idempotent. It SENDS on a blocked attempt too: the QA stage progress observation to {proxy-base}/api/progress under persisted consent for the endpoint, and the verdict to {proxy-base}/api/qa/verdicts under the same consent unless the base URL is a local address, which keeps the verdict local by default (#486; --post-verdict still sends it). Publishing rides the telemetry consent seam rather than a flag of its own, so the four consent-off conditions saw neither request. Local-spec packets retain verdicts in the repository and never send a QA verdict or progress to the Map portal, even with --post-verdict. When a served page was read and a public Campaigns API key resolves, it also makes one read-only GET of {proxy-base}/api/campaign under X-Campaign-Key to check the served pages' shipping and package refs against the live campaign (#533); without a key or a page, or on a failed read, the verdict records the check as not_run with its reason. --no-live-refs skips that read (its own row)."
|
|
2629
2693
|
},
|
|
2630
2694
|
{
|
|
2631
2695
|
"command": "qa",
|
|
@@ -2716,11 +2780,10 @@
|
|
|
2716
2780
|
{
|
|
2717
2781
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
2718
2782
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
2719
|
-
"when": "
|
|
2783
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
2720
2784
|
"requires_consent": true,
|
|
2721
|
-
"observed_in": [
|
|
2722
|
-
|
|
2723
|
-
]
|
|
2785
|
+
"observed_in": [],
|
|
2786
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
2724
2787
|
},
|
|
2725
2788
|
{
|
|
2726
2789
|
"destination": "{base-url}",
|
|
@@ -2766,7 +2829,7 @@
|
|
|
2766
2829
|
],
|
|
2767
2830
|
"effect_test": "effects: qa run --browser (preflight)",
|
|
2768
2831
|
"test_scope": "preflight",
|
|
2769
|
-
"notes": "PREFLIGHT-PROVED: --browser needs an installed Chromium and a reachable campaign, neither of which exists offline. The case proves the attempt is blocked at the same gate as the node run and writes exactly the blocked-attempt evidence. It SENDS on a blocked attempt too: the
|
|
2832
|
+
"notes": "PREFLIGHT-PROVED: --browser needs an installed Chromium and a reachable campaign, neither of which exists offline. The case proves the attempt is blocked at the same gate as the node run and writes exactly the blocked-attempt evidence. It SENDS on a blocked attempt too: the QA stage progress observation to {proxy-base}/api/progress under persisted consent for the endpoint, and the verdict to {proxy-base}/api/qa/verdicts under the same consent unless the base URL is a local address, which keeps the verdict local by default (#486; --post-verdict still sends it). Publishing rides the telemetry consent seam rather than a flag of its own, so the four consent-off conditions saw neither request. Local-spec packets retain verdicts in the repository and never send a QA verdict or progress to the Map portal, even with --post-verdict. When a served page was read and a public Campaigns API key resolves, it also makes one read-only GET of {proxy-base}/api/campaign under X-Campaign-Key to check the served pages' shipping and package refs against the live campaign (#533); without a key or a page, or on a failed read, the verdict records the check as not_run with its reason. --no-live-refs skips that read (its own row). Once the page checks run, it also sends the header-only GETs to the configured http(s) store policy URLs (their own row) to check the served pages' policy links; offline the run is blocked at the gate before any page is checked, so none is sent.",
|
|
2770
2833
|
"preflight": {
|
|
2771
2834
|
"may_write": [
|
|
2772
2835
|
"{target}/qa-output/**",
|
|
@@ -2872,11 +2935,10 @@
|
|
|
2872
2935
|
{
|
|
2873
2936
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
2874
2937
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
2875
|
-
"when": "
|
|
2938
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
2876
2939
|
"requires_consent": true,
|
|
2877
|
-
"observed_in": [
|
|
2878
|
-
|
|
2879
|
-
]
|
|
2940
|
+
"observed_in": [],
|
|
2941
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
2880
2942
|
},
|
|
2881
2943
|
{
|
|
2882
2944
|
"destination": "{base-url}",
|
|
@@ -2998,11 +3060,10 @@
|
|
|
2998
3060
|
{
|
|
2999
3061
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
3000
3062
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
3001
|
-
"when": "
|
|
3063
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
3002
3064
|
"requires_consent": true,
|
|
3003
|
-
"observed_in": [
|
|
3004
|
-
|
|
3005
|
-
]
|
|
3065
|
+
"observed_in": [],
|
|
3066
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
3006
3067
|
},
|
|
3007
3068
|
{
|
|
3008
3069
|
"destination": "{base-url}",
|
|
@@ -3232,11 +3293,10 @@
|
|
|
3232
3293
|
{
|
|
3233
3294
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
3234
3295
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
3235
|
-
"when": "
|
|
3296
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
3236
3297
|
"requires_consent": true,
|
|
3237
|
-
"observed_in": [
|
|
3238
|
-
|
|
3239
|
-
]
|
|
3298
|
+
"observed_in": [],
|
|
3299
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
3240
3300
|
},
|
|
3241
3301
|
{
|
|
3242
3302
|
"destination": "{base-url}",
|
|
@@ -3358,11 +3418,10 @@
|
|
|
3358
3418
|
{
|
|
3359
3419
|
"destination": "{proxy-base}/api/qa/verdicts",
|
|
3360
3420
|
"what": "the QA verdict for the attempt, published to the QA portal",
|
|
3361
|
-
"when": "
|
|
3421
|
+
"when": "--post-verdict is given; or, by default (no --no-post-verdict), the base URL is not a local address (localhost, *.localhost, 127.x.x.x, 0.0.0.0, [::1], an IPv4-mapped loopback) and the consent seam allows it — Run Telemetry consent on for the endpoint, or a portal-managed campaign; never for a local-spec packet",
|
|
3362
3422
|
"requires_consent": true,
|
|
3363
|
-
"observed_in": [
|
|
3364
|
-
|
|
3365
|
-
]
|
|
3423
|
+
"observed_in": [],
|
|
3424
|
+
"not_observed_reason": "the offline fixture serves the campaign from a 127.0.0.1 base URL, a local address, so the default keeps the verdict local (#486); qa publish proves this send"
|
|
3366
3425
|
},
|
|
3367
3426
|
{
|
|
3368
3427
|
"destination": "{base-url}",
|
|
@@ -5996,7 +6055,7 @@
|
|
|
5996
6055
|
"sends": [],
|
|
5997
6056
|
"effect_test": "effects: record build",
|
|
5998
6057
|
"test_scope": "full",
|
|
5999
|
-
"notes": "Destructive: it replaces stages.assembly (the replaced record is kept in its history) and, when the output changed, resets stages.polish to required. When it detects a brief or CampaignSpec change since the replaced record, it writes input_change and also makes Polish and QA required. Re-recording output identical to the build an input change superseded keeps the build owed unless --deviation-reason records the operator's reason. The fingerprint is doctor's, never typed. Refused, writing nothing but the lifecycle entry, when next answers prepare-build, when doctor cannot compute the fingerprint (no built output), when setup is still required or stages.setup is not terminal, or when the report would fail its schema. The Build Context is read, not written."
|
|
6058
|
+
"notes": "Destructive: it replaces stages.assembly (the replaced record is kept in its history) and, when the output changed, resets stages.polish to required, and a completed stages.deploy stamped with other output to required, its prior record kept in its history (a deploy with no stamped build is kept). When it detects a brief or CampaignSpec change since the replaced record, it writes input_change and also makes Polish and QA required. Re-recording output identical to the build an input change superseded keeps the build owed unless --deviation-reason records the operator's reason. The fingerprint is doctor's, never typed. Refused, writing nothing but the lifecycle entry, when next answers prepare-build, when doctor cannot compute the fingerprint (no built output), when setup is still required or stages.setup is not terminal, or when the report would fail its schema. The Build Context is read, not written."
|
|
6000
6059
|
},
|
|
6001
6060
|
{
|
|
6002
6061
|
"command": "record",
|
|
@@ -6222,7 +6281,7 @@
|
|
|
6222
6281
|
],
|
|
6223
6282
|
"effect_test": "effects: record deploy",
|
|
6224
6283
|
"test_scope": "full",
|
|
6225
|
-
"notes": "Destructive: it replaces stages.deploy and the packet's deploy.preview_url. The requests stay on this machine: --base-url must be a loopback origin. Refused, writing nothing but the lifecycle entry, when the packet is not local-serve, the URL is not loopback or not the campaign's route root, a built page does not answer 2xx, 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 the theme gate is blocked. The Build Context is read, not written."
|
|
6284
|
+
"notes": "Destructive: it replaces stages.deploy, stamped with the build fingerprint it probed, and the packet's deploy.preview_url. The requests stay on this machine: --base-url must be a loopback origin. Refused, writing nothing but the lifecycle entry, when the packet is not local-serve, the URL is not loopback or not the campaign's route root, a built page does not answer 2xx, 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 the theme gate is blocked. The Build Context is read, not written."
|
|
6226
6285
|
},
|
|
6227
6286
|
{
|
|
6228
6287
|
"command": "record",
|