@nextcommerce/campaigns-os 1.57.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/campaign-spec/dist/checkout-flow.d.ts +7 -0
- package/campaign-spec/dist/checkout-flow.js +17 -1
- package/compatibility.json +1 -1
- package/contracts/campaign-cart-sdk-support-policy.v0.json +2 -2
- package/contracts/commerce-surface-catalog.json +26 -27
- package/contracts/effects.v1.json +5 -5
- package/contracts/release-ledger.json +432 -0
- package/contracts/supported-surface.json +4 -4
- package/contracts/template-brand-contract.shared-commerce.v0.json +1 -1
- package/docs/build-packet.md +22 -8
- package/docs/local-setup.md +1 -1
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/qa-and-test-orders.md +54 -12
- package/docs/runtime-readiness.md +1 -1
- package/docs/skills-revision.md +10 -10
- package/package.json +1 -1
- package/schemas/campaign-runtime-build-context.v0.schema.json +2 -1
- package/schemas/campaign-runtime-build-packet.v0.schema.json +2 -1
- package/skills/campaign-lifecycle-orientation/SKILL.md +3 -3
- package/skills/campaign-readback-classification/SKILL.md +3 -3
- package/skills/campaign-run-evidence/SKILL.md +3 -3
- package/skills/contribution-intake/SKILL.md +3 -3
- package/skills/next-campaigns-build/SKILL.md +6 -6
- 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 +3 -3
- package/skills.json +10 -10
- package/src/built-site-scope.mjs +91 -0
- package/src/cli.mjs +15 -23
- package/src/doctor/checks.mjs +73 -3
- package/src/doctor/next-step.mjs +3 -14
- package/src/polish-node.mjs +5 -4
- package/src/qa-browser.mjs +137 -2
- package/src/qa-cart-entry.mjs +105 -0
- package/src/qa-node.mjs +3 -1
- package/src/qa-verdict.mjs +24 -1
- package/src/sdk-attribute-index.mjs +8 -7
- package/src/source-html-intake.mjs +27 -18
- package/src/stage-record.mjs +200 -33
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,66 @@
|
|
|
2
2
|
|
|
3
3
|
Notable supported-surface changes are recorded here.
|
|
4
4
|
|
|
5
|
+
## [1.59.0] - 2026-10-09
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Publishes the untagged `1.58.0` change: multi-step checkout frontmatter follows the starter-template `next_step` contract (campaigns-os#641).
|
|
10
|
+
- Publishes `1.58.0+agent.2`: doctor warns `template_contract.select_step_missing` for a two-step family with no select page before checkout, and the phone scan skips comments and `<style>` content (campaigns-os#658, campaigns-os#660).
|
|
11
|
+
- Publishes `1.58.0+agent.3`: a stale build fingerprint names the extra, missing and changed files and flags sync conflict copies (campaigns-os#659).
|
|
12
|
+
- Publishes `1.58.0+agent.4`: QA verdicts separate planned order paths from retry attempts (campaigns-os#661).
|
|
13
|
+
- Publishes `1.58.0+agent.6`: QA cart entry chooses each slot's variant on a select page before Next (campaigns-os#667).
|
|
14
|
+
- Publishes `1.58.0+agent.7`: the starter catalog is re-synced to campaign-cart-starter-templates `d5ff501` (campaign-cart-starter-templates#223, SDK 0.4.42).
|
|
15
|
+
- Bundled skills advance to `1.59.0+skills.1`.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
`record deploy` records a hosted deploy. On a packet whose `deploy.target` is not `local-serve` it takes an https `--base-url` naming the campaign's route root (plain http only on a loopback host), requests every built page there, and requires each to answer HTTP 200. It then requests every script and stylesheet the built pages load from that origin and compares each one's sha256 with the file in the built output, following redirects only within that origin and reading no more bytes than the built file holds; a missing, larger or different asset refuses the record, naming the URL and the built file. A `record build` of other output between the probe and the write refuses the record, on a `local-serve` packet too. A response with no readable body refuses as a transport failure, not as a byte mismatch. HTML is not compared, because hosts inject toolbars and other markup. A passing probe writes what the loopback path writes: `deploy.preview_url` on the packet, and `stages.deploy` completed with the URL in `outputs`, one evidence line per page and per matched asset, and the build fingerprint it probed, so a later `record build` of other output makes deploy owed again. `local-serve` packets keep the loopback-only rules. The hosted all-template preview no longer skips the deploy stage: `next` hands off `record deploy` for the recorded preview URL and then QA, and the hosted deploy prompt names `record deploy` in place of hand-editing `stages.deploy` (campaigns-os#657).
|
|
20
|
+
|
|
21
|
+
## [1.58.0+agent.7] - 2026-10-09
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
The vendored starter catalog is re-synced to campaign-cart-starter-templates `d5ff501`, which carries the multi-step checkout contract from campaign-cart-starter-templates#223 and the Campaign Cart SDK 0.4.42 pin. Builds made with 1.58.0's `next_step` frontmatter now take templates whose step forms and select links read `next_step` and whose `next-success-url` is the Checkout's post-payment destination. Every certified family records 0.4.42 verification evidence (`sdk-0.4.42-2026-10-09`), and the eight agent CampaignSpec fixtures pin `sdk_version` 0.4.42. The certified-family fixtures are regenerated at the pin, and the payment-chrome asset pin moves to `d5ff501`; the five asset hashes are unchanged.
|
|
26
|
+
|
|
27
|
+
The SDK attribute index moves to v0.4.42 with the same recipe; it returns the same 149 names as at v0.4.41. 0.4.42 joins the cart-placeholder verified pins: the ten renderer and enhancer files the placeholder lists come from have the same git blob ids at v0.4.38 and v0.4.42. The checkout field-name mapping is unchanged at v0.4.42. The SDK support policy names 0.4.42 as `latest_known_release`; `minimum_supported` and `preferred_minimum` are unchanged.
|
|
28
|
+
|
|
29
|
+
## [1.58.0+agent.6] - 2026-10-09
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
On a select page whose bundle slots each need a variant (size, colour) before Next, `qa run --test-order` now chooses one per slot before clicking the checkout control. It does this after revealing the second step and after any bundle card click, one field at a time, over the visible, enabled slot variant selects (`[data-next-variant-selectors] select` or `.next-slot-variant-field select`, counted visible when the field is). When a field shows a dropdown UI (`os-dropdown` with a `.os-card__variant-dropdown-toggle` and `os-dropdown-item` rows, as the olympus-mv-two-step starter renders), the runner clicks the toggle and a row like a shopper, even when the SDK has already filled the select, because a page may count a field as chosen only when a row was clicked. It clicks the row matching the select's current value when that row is in stock, so the cart stays what the SDK chose, and otherwise the first in-stock row. After the toggle click it finds the field again by slot identity and the row again by its value, and waits up to 2 seconds for that row to show. A field with no dropdown UI gets its first in-stock option only when its select is empty, with `input` and `change` dispatched. Each choice is recorded on the `entered_via_landing` evidence as `variant_selections: [{ bundle_id, slot, variant_code, value, via }]`, with `via` set to `dropdown` or `select`, so the ordered variants can be checked against the cart lines. A field with no in-stock row or option, or a row that does not show or cannot be clicked, fails the path before Next with the new code `cart_entry_variant_unfilled`, naming the slot, instead of `cart_entry_no_navigation` after the navigation timeout. It classifies as `not_created` like the other cart-entry codes. A page whose filled selects have no dropdown UI is left untouched and `variant_selections` is omitted. Before this, every path on a page that blocks Next until a variant is picked failed with `cart_entry_no_navigation` (campaigns-os#667).
|
|
34
|
+
## [1.58.0+agent.4] - 2026-10-09
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
A QA run that re-ran failed order paths no longer reads as more paths than it planned. Each `test_orders[]` entry in the verdict now carries `attempt` (1 for the first try, 2 for the re-run) beside the `plan_id` of the planned path it belongs to, and `qa run` prints a summary line that keeps paths, attempts and created orders apart, such as `Test orders: 5 paths, 10 attempts, 0 orders created`. Before this, a run capped at five paths where every path was re-run once showed ten entries and nothing to say which were retries. The Assembly Report's `stages.qa.purchase_proof` gains `test_order_attempts`, and `order_paths_executed` now counts planned paths rather than attempts. Verdicts written before `attempt` existed count each entry as a path, as they did before. The array keeps one entry per attempt and no existing field changed shape.
|
|
39
|
+
|
|
40
|
+
## [1.58.0+agent.3] - 2026-10-09
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
When the built output no longer matches the recorded build fingerprint, doctor's `built_output.fingerprint_stale` and the `polish capture` refusal now name the paths that are extra, missing, or changed, at most 20 per list followed by `(+N more)`. Before, both reported only the recorded and current hashes, so finding the files behind a mismatch took a manual diff of `_site/`. `record build` keeps the path and SHA-256 list behind the fingerprint on `stages.assembly.build_manifest` to make the comparison possible; the field is additive and the fingerprint value is unchanged. A file or folder named like a macOS or iCloud sync conflict copy (`<name> 2.<ext>` beside `<name>.<ext>`) is marked as one, with a hint to remove the copies and rebuild. A build recorded before this change carries no manifest: the refusal is unchanged and says to run `record build` again to record one (campaigns-os#659).
|
|
45
|
+
|
|
46
|
+
## [1.58.0+agent.2] - 2026-10-09
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Doctor, and so `start` and `build`, warns `template_contract.select_step_missing` before build when the selected template family puts package selection on its own `select` page and its checkout carries no selector, but no enabled `select` page in the Map leads to a Checkout. The certified family affected today is `olympus-mv-two-step`. Without the select page, QA resolves the landing as the entry page, finds no add-to-cart control, and every order path fails after build, polish and deploy. The warning names the Checkout and funnel and the fix: add a Select page between the entry page and checkout in Map Builder. It stays silent when a `select` page routes to that Checkout, when the family's checkout carries its own selector, and for a Checkout pinned to another family through `sdk_hints.template_family`. The family's shape is read from the commerce surface catalog's `selectStep` and `mainSelector` surfaces. The warning does not block intake (campaigns-os#658).
|
|
51
|
+
- `copy.hardcoded_phone` no longer reads digit runs inside HTML comments, `<style>` blocks or CSS comments as phone numbers, such as a design-export frame name like `Group 1000003339`. Visible phone numbers still warn, at their original line numbers (campaigns-os#660).
|
|
52
|
+
|
|
53
|
+
## [1.58.0] - 2026-10-09
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
Page Kit frontmatter for multi-step checkout paths follows the starter-template contract adopted in NextCommerceCo/campaign-cart-starter-templates#223. On a `select` or `checkout_step` page on a path to a Checkout, `next_url` is now the Checkout's post-payment destination, the meaning `next_url` has on every checkout page; the layouts render it as `next-success-url`, which the SDK reads for express orders. The page's forward link moves to the new `next_step` key, which the templates render as the step form's `data-next-checkout-step` and the select page's checkout link. `step_number` is unchanged. `success_url` is no longer emitted as a frontmatter key; it stays a CampaignSpec field on `checkout` pages, and the Build Context and Build Packet schemas still accept it so packets written by 1.56.0 and 1.57.0 validate. A landing page that feeds a Checkout keeps `next_url` as its call-to-action target, because every certified family's landing call-to-action reads it; it no longer carries `success_url`, and the build prompt takes an express landing page's `next-success-url` from the Checkout's own `next_url`. The build prompt and the `next-campaigns-build` skill describe the new keys. Bundled skills advance to `1.58.0+skills.1` (campaigns-os#641).
|
|
58
|
+
|
|
59
|
+
## [1.57.0+agent.1] - 2026-10-08
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
Reading a 4.2 or 4.3 spec no longer turns a `checkout → checkout` chain linked through `success_url` into Checkout Steps with no way forward. A page retyped `checkout_step` keeps the link it followed as a checkout: the resolved forward target is written to `next_page` and `success_url` is dropped, because routing ignores `success_url` on a step. Before this, the upgraded spec failed `CheckoutStepReachesCheckout` and warned `RouteFieldIgnoredForPageType` on every step. A `next_page` the checkout never took (shadowed by `success_url`) is replaced by the followed link. Chains already linked through `next_page`, and 5.x specs, read as before.
|
|
64
|
+
|
|
5
65
|
## [1.57.0] - 2026-10-08
|
|
6
66
|
|
|
7
67
|
### Changed
|
|
@@ -86,5 +86,12 @@ export declare function paymentPagesForFunnel(funnel: Funnel | null | undefined)
|
|
|
86
86
|
* "this form moves on without taking payment". A supported v4 `schema_version`
|
|
87
87
|
* becomes `5.0`; a missing or unsupported one is left for SchemaVersion to
|
|
88
88
|
* report.
|
|
89
|
+
*
|
|
90
|
+
* A retyped page keeps the link it followed as a checkout. A `checkout_step`
|
|
91
|
+
* moves on through `next_page` only (routing.ts ignores `success_url` on it),
|
|
92
|
+
* so a v4 chain linked through `success_url` would otherwise upgrade into a
|
|
93
|
+
* step with no way forward and fail CheckoutStepReachesCheckout. The resolved
|
|
94
|
+
* forward target is written to `next_page` and `success_url` is dropped; a
|
|
95
|
+
* `next_page` the checkout shadowed (never taken) is replaced by it.
|
|
89
96
|
*/
|
|
90
97
|
export declare function upgradeCampaignSpec<T>(input: T): T;
|
|
@@ -189,6 +189,13 @@ export function paymentPagesForFunnel(funnel) {
|
|
|
189
189
|
* "this form moves on without taking payment". A supported v4 `schema_version`
|
|
190
190
|
* becomes `5.0`; a missing or unsupported one is left for SchemaVersion to
|
|
191
191
|
* report.
|
|
192
|
+
*
|
|
193
|
+
* A retyped page keeps the link it followed as a checkout. A `checkout_step`
|
|
194
|
+
* moves on through `next_page` only (routing.ts ignores `success_url` on it),
|
|
195
|
+
* so a v4 chain linked through `success_url` would otherwise upgrade into a
|
|
196
|
+
* step with no way forward and fail CheckoutStepReachesCheckout. The resolved
|
|
197
|
+
* forward target is written to `next_page` and `success_url` is dropped; a
|
|
198
|
+
* `next_page` the checkout shadowed (never taken) is replaced by it.
|
|
192
199
|
*/
|
|
193
200
|
export function upgradeCampaignSpec(input) {
|
|
194
201
|
if (input == null || typeof input !== 'object' || Array.isArray(input))
|
|
@@ -216,7 +223,16 @@ export function upgradeCampaignSpec(input) {
|
|
|
216
223
|
changed = true;
|
|
217
224
|
return {
|
|
218
225
|
...funnel,
|
|
219
|
-
pages: pages.map((page) =>
|
|
226
|
+
pages: pages.map((page) => {
|
|
227
|
+
if (!retype.has(page))
|
|
228
|
+
return page;
|
|
229
|
+
const step = { ...page, type: CHECKOUT_STEP_PAGE_TYPE };
|
|
230
|
+
const forward = forwardRouteTarget(page);
|
|
231
|
+
if (forward === null)
|
|
232
|
+
return step;
|
|
233
|
+
const { success_url: _ignoredOnStep, ...rest } = step;
|
|
234
|
+
return forward === page.next_page ? rest : { ...rest, next_page: forward };
|
|
235
|
+
}),
|
|
220
236
|
};
|
|
221
237
|
});
|
|
222
238
|
const upgradeVersion = version === '4.2' || version === '4.3';
|
package/compatibility.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"schema_version": "campaign-cart-sdk-support-policy/v0",
|
|
3
3
|
"provenance": {
|
|
4
4
|
"source": "NextCommerceCo/campaign-cart release tags",
|
|
5
|
-
"latest_known_release": "0.4.
|
|
6
|
-
"captured_at": "2026-10-
|
|
5
|
+
"latest_known_release": "0.4.42",
|
|
6
|
+
"captured_at": "2026-10-09"
|
|
7
7
|
},
|
|
8
8
|
"source": "contracts/campaign-cart-sdk-support-policy.v0.json",
|
|
9
9
|
"minimum_supported": "0.4.20",
|
|
@@ -848,9 +848,9 @@
|
|
|
848
848
|
}
|
|
849
849
|
},
|
|
850
850
|
"verification": {
|
|
851
|
-
"sdk_version": "0.4.
|
|
852
|
-
"verified_at": "2026-10-
|
|
853
|
-
"evidence": "sdk-0.4.
|
|
851
|
+
"sdk_version": "0.4.42",
|
|
852
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
853
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
854
854
|
"status": "certified",
|
|
855
855
|
"source": "template-verification.json"
|
|
856
856
|
}
|
|
@@ -1272,9 +1272,9 @@
|
|
|
1272
1272
|
}
|
|
1273
1273
|
},
|
|
1274
1274
|
"verification": {
|
|
1275
|
-
"sdk_version": "0.4.
|
|
1276
|
-
"verified_at": "2026-10-
|
|
1277
|
-
"evidence": "sdk-0.4.
|
|
1275
|
+
"sdk_version": "0.4.42",
|
|
1276
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
1277
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
1278
1278
|
"status": "certified",
|
|
1279
1279
|
"source": "template-verification.json"
|
|
1280
1280
|
}
|
|
@@ -1583,9 +1583,9 @@
|
|
|
1583
1583
|
}
|
|
1584
1584
|
},
|
|
1585
1585
|
"verification": {
|
|
1586
|
-
"sdk_version": "0.4.
|
|
1587
|
-
"verified_at": "2026-10-
|
|
1588
|
-
"evidence": "sdk-0.4.
|
|
1586
|
+
"sdk_version": "0.4.42",
|
|
1587
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
1588
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
1589
1589
|
"status": "certified",
|
|
1590
1590
|
"source": "template-verification.json"
|
|
1591
1591
|
}
|
|
@@ -1886,9 +1886,9 @@
|
|
|
1886
1886
|
}
|
|
1887
1887
|
},
|
|
1888
1888
|
"verification": {
|
|
1889
|
-
"sdk_version": "0.4.
|
|
1890
|
-
"verified_at": "2026-10-
|
|
1891
|
-
"evidence": "sdk-0.4.
|
|
1889
|
+
"sdk_version": "0.4.42",
|
|
1890
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
1891
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
1892
1892
|
"status": "certified",
|
|
1893
1893
|
"source": "template-verification.json"
|
|
1894
1894
|
}
|
|
@@ -2227,9 +2227,9 @@
|
|
|
2227
2227
|
}
|
|
2228
2228
|
},
|
|
2229
2229
|
"verification": {
|
|
2230
|
-
"sdk_version": "0.4.
|
|
2231
|
-
"verified_at": "2026-10-
|
|
2232
|
-
"evidence": "sdk-0.4.
|
|
2230
|
+
"sdk_version": "0.4.42",
|
|
2231
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
2232
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
2233
2233
|
"status": "certified",
|
|
2234
2234
|
"source": "template-verification.json"
|
|
2235
2235
|
}
|
|
@@ -2666,9 +2666,9 @@
|
|
|
2666
2666
|
}
|
|
2667
2667
|
},
|
|
2668
2668
|
"verification": {
|
|
2669
|
-
"sdk_version": "0.4.
|
|
2670
|
-
"verified_at": "2026-10-
|
|
2671
|
-
"evidence": "sdk-0.4.
|
|
2669
|
+
"sdk_version": "0.4.42",
|
|
2670
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
2671
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
2672
2672
|
"status": "certified",
|
|
2673
2673
|
"source": "template-verification.json"
|
|
2674
2674
|
}
|
|
@@ -2686,7 +2686,6 @@
|
|
|
2686
2686
|
],
|
|
2687
2687
|
"canonicalSurfaces": {
|
|
2688
2688
|
"selectStep": "mv-selection-step",
|
|
2689
|
-
"checkoutSelector": "mv-selected-bundle-review",
|
|
2690
2689
|
"variantSlots": "bundle-slot-selector",
|
|
2691
2690
|
"personalization": "per-slot picker (data-next-property per slot, toggled by slot_personalization); order-wide default via personalization-field (ships unwired)",
|
|
2692
2691
|
"orderSummary": "cart-summary03|cart-summary04",
|
|
@@ -3023,9 +3022,9 @@
|
|
|
3023
3022
|
}
|
|
3024
3023
|
},
|
|
3025
3024
|
"verification": {
|
|
3026
|
-
"sdk_version": "0.4.
|
|
3027
|
-
"verified_at": "2026-10-
|
|
3028
|
-
"evidence": "sdk-0.4.
|
|
3025
|
+
"sdk_version": "0.4.42",
|
|
3026
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
3027
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
3029
3028
|
"status": "certified",
|
|
3030
3029
|
"source": "template-verification.json"
|
|
3031
3030
|
}
|
|
@@ -3313,9 +3312,9 @@
|
|
|
3313
3312
|
}
|
|
3314
3313
|
},
|
|
3315
3314
|
"verification": {
|
|
3316
|
-
"sdk_version": "0.4.
|
|
3317
|
-
"verified_at": "2026-10-
|
|
3318
|
-
"evidence": "sdk-0.4.
|
|
3315
|
+
"sdk_version": "0.4.42",
|
|
3316
|
+
"verified_at": "2026-10-09T01:35:51Z",
|
|
3317
|
+
"evidence": "sdk-0.4.42-2026-10-09",
|
|
3319
3318
|
"status": "certified",
|
|
3320
3319
|
"source": "template-verification.json"
|
|
3321
3320
|
}
|
|
@@ -3504,6 +3503,6 @@
|
|
|
3504
3503
|
}
|
|
3505
3504
|
},
|
|
3506
3505
|
"_synced_from_repo": "NextCommerceCo/campaign-cart-starter-templates",
|
|
3507
|
-
"_synced_from_ref": "
|
|
3508
|
-
"_synced_from_sha": "
|
|
3506
|
+
"_synced_from_ref": "main",
|
|
3507
|
+
"_synced_from_sha": "d5ff501ab57aef160a7108341de8a952006a28a4"
|
|
3509
3508
|
}
|
|
@@ -6267,8 +6267,8 @@
|
|
|
6267
6267
|
"sends": [
|
|
6268
6268
|
{
|
|
6269
6269
|
"destination": "{base-url}",
|
|
6270
|
-
"what": "a GET for each built page under the served URL, to prove the
|
|
6271
|
-
"when": "the
|
|
6270
|
+
"what": "a GET for each built page under the served URL, to prove the preview answers before it is recorded, and on a hosted target a GET for each script and stylesheet the built pages load from that origin, to compare its bytes with the built output",
|
|
6271
|
+
"when": "--base-url names the campaign's route root on a loopback origin (deploy target local-serve) or an https origin (any other deploy target; plain http only on a loopback host)",
|
|
6272
6272
|
"requires_consent": false,
|
|
6273
6273
|
"observed_in": [
|
|
6274
6274
|
"no_session",
|
|
@@ -6281,7 +6281,7 @@
|
|
|
6281
6281
|
],
|
|
6282
6282
|
"effect_test": "effects: record deploy",
|
|
6283
6283
|
"test_scope": "full",
|
|
6284
|
-
"notes": "Destructive: it replaces stages.deploy, stamped with the build fingerprint it probed, and the packet's deploy.preview_url.
|
|
6284
|
+
"notes": "Destructive: it replaces stages.deploy, stamped with the build fingerprint it probed, and the packet's deploy.preview_url. On a local-serve packet the requests stay on this machine: --base-url must be a loopback origin. On any other deploy target --base-url is an https origin and the served scripts and stylesheets are compared by sha256 with the built output (HTML is not compared). Refused, writing nothing but the lifecycle entry, when the URL breaks those rules or is not the campaign's route root, a built page does not answer (2xx locally, 200 hosted), a served asset is missing or differs, polish is not recorded, build or Polish is owed again after a brief or CampaignSpec change or its record does not say which content it was made against, the built output changed since build was recorded or a record build of other output lands between the probe and the write (on either deploy target), or the theme gate is blocked. The Build Context is read, not written."
|
|
6285
6285
|
},
|
|
6286
6286
|
{
|
|
6287
6287
|
"command": "record",
|
|
@@ -6300,8 +6300,8 @@
|
|
|
6300
6300
|
"sends": [
|
|
6301
6301
|
{
|
|
6302
6302
|
"destination": "{base-url}",
|
|
6303
|
-
"what": "a GET for each built page under the served URL, to prove the
|
|
6304
|
-
"when": "the
|
|
6303
|
+
"what": "a GET for each built page under the served URL, to prove the preview answers before it is recorded, and on a hosted target a GET for each script and stylesheet the built pages load from that origin, to compare its bytes with the built output",
|
|
6304
|
+
"when": "--base-url names the campaign's route root on a loopback origin (deploy target local-serve) or an https origin (any other deploy target; plain http only on a loopback host)",
|
|
6305
6305
|
"requires_consent": false,
|
|
6306
6306
|
"observed_in": [
|
|
6307
6307
|
"no_session",
|