@nextcommerce/campaigns-os 1.50.0 → 1.53.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 +474 -0
- package/agents/claude/CLAUDE.md +4 -2
- package/agents/codex/AGENTS.md +3 -1
- package/agents/copilot/copilot-instructions.md +3 -1
- package/agents/cursor/campaigns-os.mdc +3 -1
- package/campaign-spec/dist/rules/campaign-metadata.d.ts +5 -1
- package/campaign-spec/dist/rules/campaign-metadata.js +9 -2
- package/campaign-spec/dist/rules/design-source-shape.js +13 -3
- package/campaign-spec/dist/rules/sdk-version.js +2 -1
- package/compatibility.json +1 -1
- package/contracts/commerce-surface-catalog.json +26 -46
- package/contracts/effects.v1.json +282 -14
- package/contracts/release-ledger.json +1233 -0
- package/contracts/supported-surface.json +2 -2
- package/contracts/template-brand-contract.shared-commerce.v0.json +2 -2
- package/contracts/template-slot-manifest.shared-content-core.v0.json +24 -0
- package/docs/brand-theme-bridge.md +2 -0
- package/docs/build-packet.md +148 -23
- package/docs/campaign-build-brief.md +57 -2
- package/docs/effects.md +14 -0
- package/docs/local-setup.md +1 -1
- package/docs/orientation-contract-reference.md +1 -1
- package/docs/polish-evidence.md +12 -0
- package/docs/progress-snapshots.md +2 -4
- package/docs/qa-and-test-orders.md +47 -4
- package/docs/readback.md +19 -2
- package/docs/runtime-readiness.md +1 -1
- package/docs/sdk-storage-compatibility.md +1 -1
- package/docs/skills-revision.md +10 -10
- package/package.json +1 -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 +5 -3
- package/skills/next-campaigns-os/SKILL.md +11 -20
- package/skills/next-campaigns-os/references/session-intake.md +17 -9
- package/skills/next-campaigns-os-setup/SKILL.md +4 -3
- package/skills/next-campaigns-polish/SKILL.md +7 -5
- package/skills/next-campaigns-qa/SKILL.md +8 -5
- package/skills.json +10 -10
- package/src/adapter-decision-contract.mjs +1 -1
- package/src/brand-theme.mjs +33 -20
- package/src/brief-summary.mjs +275 -0
- package/src/build-brief.mjs +229 -30
- package/src/built-site-scope.mjs +39 -6
- package/src/built-smoke-qc.mjs +1117 -0
- package/src/campaign-identity.mjs +36 -2
- package/src/cart-placeholders.mjs +730 -0
- package/src/cli.mjs +467 -143
- package/src/commercial-journey.mjs +65 -4
- package/src/commercial-parity.mjs +6 -1
- package/src/contrast.mjs +649 -0
- package/src/design-source-publication.mjs +110 -3
- package/src/doctor/checks.mjs +415 -33
- package/src/doctor/inspect.mjs +53 -2
- package/src/doctor/next-step.mjs +16 -7
- package/src/input-currency.mjs +394 -0
- package/src/input-refresh.mjs +708 -0
- package/src/invocation.mjs +5 -2
- package/src/local-preview-policy.mjs +1 -1
- package/src/local-proof.mjs +4 -1
- package/src/polish-browser.mjs +660 -141
- package/src/polish-capture.mjs +1 -1
- package/src/polish-deadline.mjs +7 -0
- package/src/polish-media-weight.mjs +492 -0
- package/src/polish-node.mjs +400 -28
- package/src/polish-readability.mjs +828 -0
- package/src/progress-node.mjs +19 -3
- package/src/qa-browser.mjs +439 -180
- package/src/qa-content-params.mjs +889 -0
- package/src/qa-node.mjs +116 -13
- package/src/qa-order-bump.mjs +22 -1
- package/src/qa-policy-links.mjs +1019 -0
- package/src/qa-tracking-params.mjs +1389 -0
- package/src/qa-url-privacy.mjs +168 -0
- package/src/qc-accept.mjs +482 -0
- package/src/qc-check-registry.mjs +91 -0
- package/src/qc-results.mjs +1341 -0
- package/src/readback.mjs +58 -10
- package/src/sdk-attribute-index.mjs +71 -0
- package/src/sdk-markup.mjs +2 -2
- package/src/sdk-storage-compatibility.mjs +63 -3
- package/src/source-prep.mjs +37 -7
- package/src/stage-ledger.mjs +235 -44
- package/src/stage-record.mjs +165 -33
- package/src/tooling-setup.mjs +1 -1
|
@@ -4964,6 +4964,1239 @@
|
|
|
4964
4964
|
}
|
|
4965
4965
|
],
|
|
4966
4966
|
"entry_sha256": "3fed96311daa5f153704a1ec7ded952e1e00065ce9f81fd4d3350f13beba964a"
|
|
4967
|
+
},
|
|
4968
|
+
{
|
|
4969
|
+
"id": "RL-0211",
|
|
4970
|
+
"sequence": 203,
|
|
4971
|
+
"date": "2026-10-02",
|
|
4972
|
+
"kind": "release",
|
|
4973
|
+
"surface_version": null,
|
|
4974
|
+
"changelog_section": "1.50.0+agent.2",
|
|
4975
|
+
"changelog_sha256": "883416d360a9f1d0886a232259fbca2931d5c2bec48c528a0584d9441985b69f",
|
|
4976
|
+
"agent_impact": "To fill a local CampaignSpec with package, offer and shipping refs, read the campaign with its public Campaigns API key: one GET of https://campaign-map.nextcommerce.com/api/campaign with the key in X-Campaign-Key, as docs/build-packet.md \"Reading package, offer and shipping refs\" shows. Gateway login does not supply these refs; it only lets spec derive --from-store fill the Store Profile fields. The tooling status warnings for a missing gateway login now say so; they stay warnings and the exit code is unchanged.",
|
|
4977
|
+
"compatibility": "compatible",
|
|
4978
|
+
"migration": "none",
|
|
4979
|
+
"changes": [
|
|
4980
|
+
{
|
|
4981
|
+
"class": "named_surface",
|
|
4982
|
+
"path": "docs/build-packet.md",
|
|
4983
|
+
"surface_entry": "docs/build-packet.md",
|
|
4984
|
+
"summary": "Add \"Reading package, offer and shipping refs\" to the local-spec entry: the public-key read of the live campaign, its envelope, and which retrieve-body fields fill campaign.ref_id, page packages, root offers and root shipping methods."
|
|
4985
|
+
},
|
|
4986
|
+
{
|
|
4987
|
+
"class": "cli_surface",
|
|
4988
|
+
"path": "src/cli.mjs",
|
|
4989
|
+
"surface_entry": "tooling",
|
|
4990
|
+
"summary": "The tooling status warning for a missing gateway login says login is optional, only fills the Store Profile fields through spec derive --from-store, never reads package, offer or shipping refs, and points to the public-key read."
|
|
4991
|
+
}
|
|
4992
|
+
],
|
|
4993
|
+
"entry_sha256": "c1848ed1f25ee7a1069dc27e73872741867454a99b3c6d15b88e1408c2074e04"
|
|
4994
|
+
},
|
|
4995
|
+
{
|
|
4996
|
+
"id": "RL-0212",
|
|
4997
|
+
"sequence": 204,
|
|
4998
|
+
"date": "2026-10-02",
|
|
4999
|
+
"kind": "release",
|
|
5000
|
+
"surface_version": null,
|
|
5001
|
+
"changelog_section": "1.50.0+agent.3",
|
|
5002
|
+
"changelog_sha256": "b2a24c76d61c41e2418bb763e25bdc6290e954e786bd2a58a13e615463605229",
|
|
5003
|
+
"agent_impact": "Do not ask the person to approve the source design's own promo, proof or urgency copy: Build Brief question promo_urgency_copy now covers only the starter template's own promo placeholders (demo timers, promo banners, placeholder voucher codes, exit-pop offers) and is asked only when the CampaignSpec maps funnels[].promo_codes, or a checkout page's enabled exit_intent or promo_code_input. To record an answer to any guided question, copy the normalized draft to campaign-build-brief.json in the target repo, set the fields doctor's build_brief.guided_questions warning names, and re-run start or prepare-build; once a stage has recorded evidence that re-run needs --force, which clears it.",
|
|
5004
|
+
"compatibility": "compatible",
|
|
5005
|
+
"migration": "none",
|
|
5006
|
+
"changes": [
|
|
5007
|
+
{
|
|
5008
|
+
"class": "named_surface",
|
|
5009
|
+
"path": "docs/campaign-build-brief.md",
|
|
5010
|
+
"surface_entry": "docs/campaign-build-brief.md",
|
|
5011
|
+
"summary": "Reword question 5 to the template's own promo placeholders and the CampaignSpec surfaces that raise it, and add Answering The Questions with the fields that close each question and the re-run that records them."
|
|
5012
|
+
},
|
|
5013
|
+
{
|
|
5014
|
+
"class": "cli_surface",
|
|
5015
|
+
"path": "src/cli.mjs",
|
|
5016
|
+
"surface_entry": "next",
|
|
5017
|
+
"summary": "The QA prompt compares the template's own promo placeholders and trust badges with the brief and says not to flag the source design's own proof, urgency or guarantee elements; the build prompt names the template's promo placeholders instead of promo/urgency language."
|
|
5018
|
+
},
|
|
5019
|
+
{
|
|
5020
|
+
"class": "cli_surface",
|
|
5021
|
+
"path": "src/doctor/checks.mjs",
|
|
5022
|
+
"surface_entry": "doctor",
|
|
5023
|
+
"summary": "build_brief.guided_questions names the brief fields that close each open question and how to record them (copy the normalized draft to campaign-build-brief.json, set the fields, re-run start or prepare-build; --force clears stage evidence), and build_brief.questions_unanswered names the fields too."
|
|
5024
|
+
}
|
|
5025
|
+
],
|
|
5026
|
+
"entry_sha256": "0d60b7a2fa569cca0f1db2084e5691be0fac49b23954b92851cc28d337e6b7c5"
|
|
5027
|
+
},
|
|
5028
|
+
{
|
|
5029
|
+
"id": "RL-0213",
|
|
5030
|
+
"sequence": 205,
|
|
5031
|
+
"date": "2026-10-02",
|
|
5032
|
+
"kind": "release",
|
|
5033
|
+
"surface_version": null,
|
|
5034
|
+
"changelog_section": "1.50.0+agent.4",
|
|
5035
|
+
"changelog_sha256": "57bc8faea8b376e689029a495035237c67c2767aaa072578313935a2a4112200",
|
|
5036
|
+
"agent_impact": "At the QA stage of a campaign whose checkout declares an order bump (is_upsell: true rows), run both QA commands next lists: qa_run, then qa_run_bump, the same qa run --browser --test-order common with --cart <base>:1,<bump>:1, whose test orders carry the add-on. A consumer of next --json that keys on action ids should accept qa_run_bump. Progress snapshots record it as qa_run. The bump is read from the checkout QA's test orders run on; when the CampaignSpec does not parse, next warns next.order_bump_spec_unreadable.",
|
|
5037
|
+
"compatibility": "additive",
|
|
5038
|
+
"migration": "none",
|
|
5039
|
+
"changes": [
|
|
5040
|
+
{
|
|
5041
|
+
"class": "cli_surface",
|
|
5042
|
+
"path": "src/cli.mjs",
|
|
5043
|
+
"surface_entry": "next",
|
|
5044
|
+
"summary": "At the QA stage, when the checkout declares an order bump, next lists qa_run_bump beside qa_run: the same QA command with --cart <first selector tier>:1,<bump>:1. The QA stage prompt and the human next output name it too."
|
|
5045
|
+
},
|
|
5046
|
+
{
|
|
5047
|
+
"class": "named_surface",
|
|
5048
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5049
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5050
|
+
"summary": "Say that next names the base-plus-bump QA run (qa_run_bump) at the QA stage when the checkout declares an order bump."
|
|
5051
|
+
}
|
|
5052
|
+
],
|
|
5053
|
+
"entry_sha256": "baedf0070bd55ad5e899b3d697911309bffb4541df7a2c6c1039375ffcf4764d"
|
|
5054
|
+
},
|
|
5055
|
+
{
|
|
5056
|
+
"id": "RL-0214",
|
|
5057
|
+
"sequence": 206,
|
|
5058
|
+
"date": "2026-10-03",
|
|
5059
|
+
"kind": "release",
|
|
5060
|
+
"surface_version": null,
|
|
5061
|
+
"changelog_section": "1.50.0+agent.5",
|
|
5062
|
+
"changelog_sha256": "ac3f1499849d83b2e4ee2610577a0a996eca1199b2fc1ddd95abe95af8d5e423",
|
|
5063
|
+
"agent_impact": "Before the first test order, unless the operator has already said test orders are fine for this campaign, ask once, up front in your first turn with your other setup questions: test orders land in the store as real orders someone may have to cancel. qa run is unchanged and has no permission flag. An installed agent context keeps the old text until install-agent-context refreshes it; start a fresh session after install-skills, since the bundle revision moved to 1.50.0+skills.2.",
|
|
5064
|
+
"compatibility": "compatible",
|
|
5065
|
+
"migration": "none",
|
|
5066
|
+
"changes": [
|
|
5067
|
+
{
|
|
5068
|
+
"class": "documentation",
|
|
5069
|
+
"path": "agents/claude/CLAUDE.md",
|
|
5070
|
+
"surface_entry": "agents/claude/CLAUDE.md",
|
|
5071
|
+
"summary": "Say qa run has no permission flag and coverage is its only control, that test orders still land in the store as real orders someone may have to cancel, and to ask once, up front in the first turn, unless the operator has already said test orders are fine for the campaign."
|
|
5072
|
+
},
|
|
5073
|
+
{
|
|
5074
|
+
"class": "documentation",
|
|
5075
|
+
"path": "agents/codex/AGENTS.md",
|
|
5076
|
+
"surface_entry": "agents/codex/AGENTS.md",
|
|
5077
|
+
"summary": "Say qa run has no permission flag and coverage is its only control, that test orders still land in the store as real orders someone may have to cancel, and to ask once, up front in the first turn, unless the operator has already said test orders are fine for the campaign."
|
|
5078
|
+
},
|
|
5079
|
+
{
|
|
5080
|
+
"class": "documentation",
|
|
5081
|
+
"path": "agents/copilot/copilot-instructions.md",
|
|
5082
|
+
"surface_entry": "agents/copilot/copilot-instructions.md",
|
|
5083
|
+
"summary": "Say qa run has no permission flag and coverage is its only control, that test orders still land in the store as real orders someone may have to cancel, and to ask once, up front in the first turn, unless the operator has already said test orders are fine for the campaign."
|
|
5084
|
+
},
|
|
5085
|
+
{
|
|
5086
|
+
"class": "documentation",
|
|
5087
|
+
"path": "agents/cursor/campaigns-os.mdc",
|
|
5088
|
+
"surface_entry": "agents/cursor/campaigns-os.mdc",
|
|
5089
|
+
"summary": "Say qa run has no permission flag and coverage is its only control, that test orders still land in the store as real orders someone may have to cancel, and to ask once, up front in the first turn, unless the operator has already said test orders are fine for the campaign."
|
|
5090
|
+
},
|
|
5091
|
+
{
|
|
5092
|
+
"class": "named_surface",
|
|
5093
|
+
"path": "docs/skills-revision.md",
|
|
5094
|
+
"surface_entry": "docs/skills-revision.md",
|
|
5095
|
+
"summary": "Use the current 1.50.0+skills.2 bundle in executable examples."
|
|
5096
|
+
},
|
|
5097
|
+
{
|
|
5098
|
+
"class": "skill",
|
|
5099
|
+
"path": "skills.json",
|
|
5100
|
+
"surface_entry": "skills.json",
|
|
5101
|
+
"summary": "Advance the bundled skill revision to 1.50.0+skills.2 and each skill version one patch."
|
|
5102
|
+
},
|
|
5103
|
+
{
|
|
5104
|
+
"class": "skill",
|
|
5105
|
+
"path": "skills/next-campaigns-os/SKILL.md",
|
|
5106
|
+
"surface_entry": null,
|
|
5107
|
+
"summary": "Step 11 says qa run has no permission flag, that test orders land in the store as real orders someone may have to cancel, and to ask once, up front in the first turn, unless the operator has already said test orders are fine. Publish the 1.50.0+skills.2 bundle revision."
|
|
5108
|
+
},
|
|
5109
|
+
{
|
|
5110
|
+
"class": "skill",
|
|
5111
|
+
"path": "skills/next-campaigns-os/references/session-intake.md",
|
|
5112
|
+
"surface_entry": null,
|
|
5113
|
+
"summary": "The test-order proof policy asks once, up front in the first turn, whether test orders are fine for the campaign, unless the operator has already said so, instead of saying they need no permission or approval."
|
|
5114
|
+
},
|
|
5115
|
+
{
|
|
5116
|
+
"class": "skill",
|
|
5117
|
+
"path": "skills/next-campaigns-qa/SKILL.md",
|
|
5118
|
+
"surface_entry": null,
|
|
5119
|
+
"summary": "QA follows an answer the operator already gave on test orders and does not pause to ask again; when nobody asked, it asks once before the first test order. Test orders are no longer called safe to fire any time. Publish the 1.50.0+skills.2 bundle revision."
|
|
5120
|
+
},
|
|
5121
|
+
{
|
|
5122
|
+
"class": "skill",
|
|
5123
|
+
"path": "skills/next-campaigns-os-setup/SKILL.md",
|
|
5124
|
+
"surface_entry": null,
|
|
5125
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5126
|
+
},
|
|
5127
|
+
{
|
|
5128
|
+
"class": "skill",
|
|
5129
|
+
"path": "skills/next-campaigns-build/SKILL.md",
|
|
5130
|
+
"surface_entry": null,
|
|
5131
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5132
|
+
},
|
|
5133
|
+
{
|
|
5134
|
+
"class": "skill",
|
|
5135
|
+
"path": "skills/next-campaigns-polish/SKILL.md",
|
|
5136
|
+
"surface_entry": null,
|
|
5137
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5138
|
+
},
|
|
5139
|
+
{
|
|
5140
|
+
"class": "skill",
|
|
5141
|
+
"path": "skills/campaign-lifecycle-orientation/SKILL.md",
|
|
5142
|
+
"surface_entry": null,
|
|
5143
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5144
|
+
},
|
|
5145
|
+
{
|
|
5146
|
+
"class": "skill",
|
|
5147
|
+
"path": "skills/campaign-run-evidence/SKILL.md",
|
|
5148
|
+
"surface_entry": null,
|
|
5149
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5150
|
+
},
|
|
5151
|
+
{
|
|
5152
|
+
"class": "skill",
|
|
5153
|
+
"path": "skills/campaign-readback-classification/SKILL.md",
|
|
5154
|
+
"surface_entry": null,
|
|
5155
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5156
|
+
},
|
|
5157
|
+
{
|
|
5158
|
+
"class": "skill",
|
|
5159
|
+
"path": "skills/contribution-intake/SKILL.md",
|
|
5160
|
+
"surface_entry": null,
|
|
5161
|
+
"summary": "Publish the 1.50.0+skills.2 bundle revision."
|
|
5162
|
+
}
|
|
5163
|
+
],
|
|
5164
|
+
"entry_sha256": "b2cabfff7763b6b5782392b81f4586c6198a74a2300b0d69eff4a48de46f9538"
|
|
5165
|
+
},
|
|
5166
|
+
{
|
|
5167
|
+
"id": "RL-0215",
|
|
5168
|
+
"sequence": 207,
|
|
5169
|
+
"date": "2026-10-03",
|
|
5170
|
+
"kind": "release",
|
|
5171
|
+
"surface_version": null,
|
|
5172
|
+
"changelog_section": "1.50.0+agent.7",
|
|
5173
|
+
"changelog_sha256": "a3ffc2011ba990f3022bcd24248869e717f45c276bae10fb726eb2c09c50e6e7",
|
|
5174
|
+
"agent_impact": "sdk storage-check now resolves Page Kit campaign_asset script srcs and frontmatter scripts to src/<slug>/assets/<path>, so a clean Page Kit campaign whose scope covers its assets reports source-compatible instead of unknown. A resolved script outside --scope is still unknown, named by its real path.",
|
|
5175
|
+
"compatibility": "compatible",
|
|
5176
|
+
"migration": "none",
|
|
5177
|
+
"changes": [
|
|
5178
|
+
{
|
|
5179
|
+
"class": "named_surface",
|
|
5180
|
+
"path": "docs/sdk-storage-compatibility.md",
|
|
5181
|
+
"surface_entry": "docs/sdk-storage-compatibility.md",
|
|
5182
|
+
"summary": "Say that a Page Kit page's campaign_asset script srcs and frontmatter scripts resolve to src/<slug>/assets/<path>, and that any other campaign_asset value reports unknown."
|
|
5183
|
+
}
|
|
5184
|
+
],
|
|
5185
|
+
"entry_sha256": "067e8f610214c37f9066a53c418a866fb6c5670193af54ebb77dd204b653e92b"
|
|
5186
|
+
},
|
|
5187
|
+
{
|
|
5188
|
+
"id": "RL-0217",
|
|
5189
|
+
"sequence": 208,
|
|
5190
|
+
"date": "2026-10-03",
|
|
5191
|
+
"kind": "release",
|
|
5192
|
+
"surface_version": null,
|
|
5193
|
+
"changelog_section": "1.50.0+agent.9",
|
|
5194
|
+
"changelog_sha256": "0b678961d04050148587f2994831880d8e93b86da2dc6a010add319f621d6086",
|
|
5195
|
+
"agent_impact": "Record the page-kit build environment with record build --packet <packet> --build-environment development (local proof mode) instead of hand-editing stages.assembly.evidence.build_environment; next names the command under local-serve. A refused record now lists the allowed values for an enum field.",
|
|
5196
|
+
"compatibility": "additive",
|
|
5197
|
+
"migration": "none",
|
|
5198
|
+
"changes": [
|
|
5199
|
+
{
|
|
5200
|
+
"class": "cli_surface",
|
|
5201
|
+
"path": null,
|
|
5202
|
+
"surface_entry": "record",
|
|
5203
|
+
"summary": "record build takes --build-environment <development|production> and records stages.assembly.evidence.build_environment; a refused record lists a schema enum field's allowed values and the value it got."
|
|
5204
|
+
},
|
|
5205
|
+
{
|
|
5206
|
+
"class": "cli_surface",
|
|
5207
|
+
"path": "src/cli.mjs",
|
|
5208
|
+
"surface_entry": "next",
|
|
5209
|
+
"summary": "Under deploy.target local-serve, next names record build --packet <packet> --build-environment development in the build action and prompt, and the page-kit parity messages name it too."
|
|
5210
|
+
},
|
|
5211
|
+
{
|
|
5212
|
+
"class": "cli_surface",
|
|
5213
|
+
"path": "src/doctor/checks.mjs",
|
|
5214
|
+
"surface_entry": "doctor",
|
|
5215
|
+
"summary": "The local_proof.build_environment warning names record build --build-environment development; an unknown adapter-decision value lists the allowed values."
|
|
5216
|
+
},
|
|
5217
|
+
{
|
|
5218
|
+
"class": "named_surface",
|
|
5219
|
+
"path": "docs/build-packet.md",
|
|
5220
|
+
"surface_entry": "docs/build-packet.md",
|
|
5221
|
+
"summary": "Document record build --build-environment and that enum refusals list the allowed values."
|
|
5222
|
+
},
|
|
5223
|
+
{
|
|
5224
|
+
"class": "named_surface",
|
|
5225
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5226
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5227
|
+
"summary": "Local proof mode records the development build with record build --build-environment development."
|
|
5228
|
+
}
|
|
5229
|
+
],
|
|
5230
|
+
"entry_sha256": "80715cb6b6a421a8929126795d1e38ef88aec3585f15539d162c4908165f06ad"
|
|
5231
|
+
},
|
|
5232
|
+
{
|
|
5233
|
+
"id": "RL-0216",
|
|
5234
|
+
"sequence": 209,
|
|
5235
|
+
"date": "2026-10-03",
|
|
5236
|
+
"kind": "release",
|
|
5237
|
+
"surface_version": null,
|
|
5238
|
+
"changelog_section": "1.50.0+agent.10",
|
|
5239
|
+
"changelog_sha256": "0f486e2c02fa7cf57cf606277a02d740a0b6d5767d278728462e846a110db3e8",
|
|
5240
|
+
"agent_impact": "A checkout package marked is_order_bump: true is an order bump everywhere the toolkit tells bumps from tiers: the QA tier planner skips it, next names qa_run_bump for it, and commercial-journey plans its with/without scenarios. Specs that mark bumps with is_upsell: true are unchanged; no spec edit is needed.",
|
|
5241
|
+
"compatibility": "compatible",
|
|
5242
|
+
"migration": "none",
|
|
5243
|
+
"changes": [
|
|
5244
|
+
{
|
|
5245
|
+
"class": "cli_surface",
|
|
5246
|
+
"path": "src/cli.mjs",
|
|
5247
|
+
"surface_entry": "next",
|
|
5248
|
+
"summary": "next names qa_run_bump for a checkout bump marked is_order_bump as well as is_upsell, and its description and the QA test-order notes name both flags."
|
|
5249
|
+
},
|
|
5250
|
+
{
|
|
5251
|
+
"class": "named_surface",
|
|
5252
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5253
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5254
|
+
"summary": "Say that order-bump rows are those marked is_order_bump or is_upsell, for tier planning and for the qa_run_bump command."
|
|
5255
|
+
}
|
|
5256
|
+
],
|
|
5257
|
+
"entry_sha256": "5646d540954bcbf43556888627b88ba2390e311e8589f093321c3b5350b516b9"
|
|
5258
|
+
},
|
|
5259
|
+
{
|
|
5260
|
+
"id": "RL-0218",
|
|
5261
|
+
"sequence": 210,
|
|
5262
|
+
"date": "2026-10-03",
|
|
5263
|
+
"kind": "release",
|
|
5264
|
+
"surface_version": null,
|
|
5265
|
+
"changelog_section": "1.50.0+agent.11",
|
|
5266
|
+
"changelog_sha256": "5e70510bf61da0096d4b381caafe2f9e2f6daaffa4895efa073792ded32f1f22",
|
|
5267
|
+
"agent_impact": "When doctor or next warns spec.material_stale, the local CampaignSpec changed materially after prepare-build bound it; QA will refuse the run. Re-run prepare-build from the edited spec before building, polishing or deploying further.",
|
|
5268
|
+
"compatibility": "additive",
|
|
5269
|
+
"migration": "none",
|
|
5270
|
+
"changes": [
|
|
5271
|
+
{
|
|
5272
|
+
"class": "cli_surface",
|
|
5273
|
+
"path": "src/doctor/checks.mjs",
|
|
5274
|
+
"surface_entry": "doctor",
|
|
5275
|
+
"summary": "Doctor warns spec.material_stale when a local-spec campaign's CampaignSpec material hash differs from the Assembly Report's identity.spec_material_hash; next prints it with doctor's other warnings."
|
|
5276
|
+
},
|
|
5277
|
+
{
|
|
5278
|
+
"class": "named_surface",
|
|
5279
|
+
"path": "docs/build-packet.md",
|
|
5280
|
+
"surface_entry": "docs/build-packet.md",
|
|
5281
|
+
"summary": "Say that doctor and next warn spec.material_stale after a material revision of a local spec."
|
|
5282
|
+
}
|
|
5283
|
+
],
|
|
5284
|
+
"entry_sha256": "69780cf0debe67051b88def9d99f47ce1e5bcfb947218ed6c7917775c431fbcb"
|
|
5285
|
+
},
|
|
5286
|
+
{
|
|
5287
|
+
"id": "RL-0219",
|
|
5288
|
+
"sequence": 211,
|
|
5289
|
+
"date": "2026-10-03",
|
|
5290
|
+
"kind": "release",
|
|
5291
|
+
"surface_version": null,
|
|
5292
|
+
"changelog_section": "1.50.0+agent.12",
|
|
5293
|
+
"changelog_sha256": "a69c5a144ba7982e45d0d838f32c9c1d106376527715a9785ec26e054339723d",
|
|
5294
|
+
"agent_impact": "On the local preview (local-serve, loopback), record deploy now accepts the deploy stage next names after record build when polish was never recorded for this build; do not hand-write a polish skip to get past it. Polish stays owed and QA reports it.",
|
|
5295
|
+
"compatibility": "compatible",
|
|
5296
|
+
"migration": "none",
|
|
5297
|
+
"changes": [
|
|
5298
|
+
{
|
|
5299
|
+
"class": "named_surface",
|
|
5300
|
+
"path": "docs/build-packet.md",
|
|
5301
|
+
"surface_entry": "docs/build-packet.md",
|
|
5302
|
+
"summary": "Say that on the local preview a polish doctor carries forward does not hold record deploy back, as it does not hold next."
|
|
5303
|
+
}
|
|
5304
|
+
],
|
|
5305
|
+
"entry_sha256": "ab294f178bf7e40547ec76b7b62434c0879a16c5e01b7a34ddb4842d2a9f7e6c"
|
|
5306
|
+
},
|
|
5307
|
+
{
|
|
5308
|
+
"id": "RL-0220",
|
|
5309
|
+
"sequence": 212,
|
|
5310
|
+
"date": "2026-10-03",
|
|
5311
|
+
"kind": "release",
|
|
5312
|
+
"surface_version": null,
|
|
5313
|
+
"changelog_section": "1.50.0+agent.13",
|
|
5314
|
+
"changelog_sha256": "00252143f793272579a0b9a9ba1f663f8e2f7aa7b6a1ec3e385d68cc4f81dc64",
|
|
5315
|
+
"agent_impact": "Strip document wrappers in the converted page-kit page (page_kit.output_path); once it exists, doctor checks that page, not the design. Do not copy built pages over the design source or record preserve_document_wrappers for stripped pages to clear source_html.prep.document_wrapper.",
|
|
5316
|
+
"compatibility": "compatible",
|
|
5317
|
+
"migration": "none",
|
|
5318
|
+
"changes": [
|
|
5319
|
+
{
|
|
5320
|
+
"class": "cli_surface",
|
|
5321
|
+
"path": "src/doctor/checks.mjs",
|
|
5322
|
+
"surface_entry": "doctor",
|
|
5323
|
+
"summary": "source_html.prep.document_wrapper reads the converted page-kit page at page_kit.output_path once it exists, and reports a converted page that kept its wrappers under that path."
|
|
5324
|
+
}
|
|
5325
|
+
],
|
|
5326
|
+
"entry_sha256": "54969c14bbde17632be2f5256ab2af74b23c41e78687817f8a43d7b522b12683"
|
|
5327
|
+
},
|
|
5328
|
+
{
|
|
5329
|
+
"id": "RL-0221",
|
|
5330
|
+
"sequence": 213,
|
|
5331
|
+
"date": "2026-10-03",
|
|
5332
|
+
"kind": "release",
|
|
5333
|
+
"surface_version": null,
|
|
5334
|
+
"changelog_section": "1.50.0+agent.14",
|
|
5335
|
+
"changelog_sha256": "eaaef3e69436b9ad7239018040281e5b37363135c37bccedf34874ad04981cdc",
|
|
5336
|
+
"agent_impact": "Replace the starter icon-grid placeholders Benefit one through Benefit four on built pages before QA: the placeholder-text residue gate now blocks on them, as it does on Lorem, Placeholder, TODO and Product Name.",
|
|
5337
|
+
"compatibility": "compatible",
|
|
5338
|
+
"migration": "none",
|
|
5339
|
+
"changes": [
|
|
5340
|
+
{
|
|
5341
|
+
"class": "cli_surface",
|
|
5342
|
+
"path": "src/doctor/next-step.mjs",
|
|
5343
|
+
"surface_entry": "doctor",
|
|
5344
|
+
"summary": "The placeholder-text next-step hint names Benefit one through Benefit four with Lorem, Placeholder, TODO and Product Name."
|
|
5345
|
+
}
|
|
5346
|
+
],
|
|
5347
|
+
"entry_sha256": "79e0ced726df96635e2d4210266cc691a9c95f8d5aaed12bd13d983093c060f0"
|
|
5348
|
+
},
|
|
5349
|
+
{
|
|
5350
|
+
"id": "RL-0222",
|
|
5351
|
+
"sequence": 214,
|
|
5352
|
+
"date": "2026-10-03",
|
|
5353
|
+
"kind": "release",
|
|
5354
|
+
"surface_version": null,
|
|
5355
|
+
"changelog_section": "1.50.0+agent.16",
|
|
5356
|
+
"changelog_sha256": "9739f7ffed587ba5d871a04e4eb1a218d94b47d29cefc9c7798abc49877daa5f",
|
|
5357
|
+
"agent_impact": "A failed brand-theme write no longer leaves theme.warnings[].detail null on the Assembly Report, so record setup and record build stop refusing the report for it. Do not hand-edit the report to clear that refusal.",
|
|
5358
|
+
"compatibility": "compatible",
|
|
5359
|
+
"migration": "none",
|
|
5360
|
+
"changes": [
|
|
5361
|
+
{
|
|
5362
|
+
"class": "cli_surface",
|
|
5363
|
+
"path": "src/cli.mjs",
|
|
5364
|
+
"surface_entry": "prepare-build",
|
|
5365
|
+
"summary": "prepare-build and start copy theme write errors onto the Assembly Report theme.warnings with detail only when it is an object, so the report validates against its schema."
|
|
5366
|
+
}
|
|
5367
|
+
],
|
|
5368
|
+
"entry_sha256": "7d5cff84f46160230a531540cbfcf272bad32e3c36979d570586650924d9331b"
|
|
5369
|
+
},
|
|
5370
|
+
{
|
|
5371
|
+
"id": "RL-0223",
|
|
5372
|
+
"sequence": 215,
|
|
5373
|
+
"date": "2026-10-03",
|
|
5374
|
+
"kind": "release",
|
|
5375
|
+
"surface_version": null,
|
|
5376
|
+
"changelog_section": "1.50.0+agent.17",
|
|
5377
|
+
"changelog_sha256": "a6f2d75a367e3724e7fb581e172dd5bc85db545fbf636b3675ac72d9a5ba592f",
|
|
5378
|
+
"agent_impact": "Doctor and start now say which CampaignSpec field each of three validation messages wants: campaign.payment_env_key (a Campaigns API key in the spec does not fill it), global_config.sdk_version, and design_source (left off pages built from hand-written or template HTML). Fix the named field rather than treating the key line and the missing-key warning as a contradiction.",
|
|
5379
|
+
"compatibility": "compatible",
|
|
5380
|
+
"migration": "none",
|
|
5381
|
+
"changes": [
|
|
5382
|
+
{
|
|
5383
|
+
"class": "generated_runtime",
|
|
5384
|
+
"path": "campaign-spec/rules/campaign-metadata.ts",
|
|
5385
|
+
"surface_entry": null,
|
|
5386
|
+
"summary": "The missing payment_env_key warning keeps its first sentence and adds that campaign.payment_env_key is empty, where its value comes from, and that a Campaigns API key does not fill it."
|
|
5387
|
+
},
|
|
5388
|
+
{
|
|
5389
|
+
"class": "generated_runtime",
|
|
5390
|
+
"path": "campaign-spec/rules/sdk-version.ts",
|
|
5391
|
+
"surface_entry": null,
|
|
5392
|
+
"summary": "The missing SDK version error keeps its first sentence and names global_config.sdk_version in MAJOR.MINOR.PATCH form."
|
|
5393
|
+
},
|
|
5394
|
+
{
|
|
5395
|
+
"class": "generated_runtime",
|
|
5396
|
+
"path": "campaign-spec/rules/design-source-shape.ts",
|
|
5397
|
+
"surface_entry": null,
|
|
5398
|
+
"summary": "The missing design_source.file_url warning says hand-written or template HTML removes design_source from the page, unless design_source.type is figma or ai-generated."
|
|
5399
|
+
},
|
|
5400
|
+
{
|
|
5401
|
+
"class": "cli_surface",
|
|
5402
|
+
"path": "src/doctor/checks.mjs",
|
|
5403
|
+
"surface_entry": "doctor",
|
|
5404
|
+
"summary": "The no-source-mapping error for a design_source without file_url offers removing design_source for hand-written or template HTML and names the source-html manifest."
|
|
5405
|
+
}
|
|
5406
|
+
],
|
|
5407
|
+
"entry_sha256": "e9b40ee4e4764bd76dd48a0349e8046bb5e9cff2edb24fd5012566c8fbf05a70"
|
|
5408
|
+
},
|
|
5409
|
+
{
|
|
5410
|
+
"id": "RL-0224",
|
|
5411
|
+
"sequence": 216,
|
|
5412
|
+
"date": "2026-10-03",
|
|
5413
|
+
"kind": "release",
|
|
5414
|
+
"surface_version": null,
|
|
5415
|
+
"changelog_section": "1.50.0+agent.18",
|
|
5416
|
+
"changelog_sha256": "43b3fda70ba8c201c3c092e248b7ef6eea98813539c6527ca06e12e7643ac7e7",
|
|
5417
|
+
"agent_impact": "QA no longer reports price-claim-mismatch on a page showing a voucher the plan cannot price, and browser-order-bump-state reads a transparent glyph tick as unchecked. Do not rework a voucher-priced upsell or a colour-toggled bump tick to clear either warning.",
|
|
5418
|
+
"compatibility": "compatible",
|
|
5419
|
+
"migration": "none",
|
|
5420
|
+
"changes": [
|
|
5421
|
+
{
|
|
5422
|
+
"class": "named_surface",
|
|
5423
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5424
|
+
"surface_entry": null,
|
|
5425
|
+
"summary": "Commercial parity leaves a page's price claims unresolved when the page shows a voucher the normalized plan cannot price."
|
|
5426
|
+
}
|
|
5427
|
+
],
|
|
5428
|
+
"entry_sha256": "a575bd5b8eb85085f3ba083cc827f1752cb456d3df7584ea2772ef589924e54c"
|
|
5429
|
+
},
|
|
5430
|
+
{
|
|
5431
|
+
"id": "RL-0225",
|
|
5432
|
+
"sequence": 217,
|
|
5433
|
+
"date": "2026-10-03",
|
|
5434
|
+
"kind": "release",
|
|
5435
|
+
"surface_version": null,
|
|
5436
|
+
"changelog_section": "1.50.0+agent.19",
|
|
5437
|
+
"changelog_sha256": "33836079283beb6ac39aed78ed23f5aa4aa4090f7cc424c9c54dd0846837f0bc",
|
|
5438
|
+
"agent_impact": "A campaign-identity finding on a built file that no CampaignSpec page builds to now names it as leftover output under stray_files. Remove the source file if there is one, delete the built file, and rebuild and record the build again; do not retag the stray page.",
|
|
5439
|
+
"compatibility": "compatible",
|
|
5440
|
+
"migration": "none",
|
|
5441
|
+
"changes": [
|
|
5442
|
+
{
|
|
5443
|
+
"class": "cli_surface",
|
|
5444
|
+
"path": "src/doctor/checks.mjs",
|
|
5445
|
+
"surface_entry": "doctor",
|
|
5446
|
+
"summary": "Doctor marks each built page by whether an active CampaignSpec page builds to it before the campaign-identity gate runs."
|
|
5447
|
+
},
|
|
5448
|
+
{
|
|
5449
|
+
"class": "named_surface",
|
|
5450
|
+
"path": "docs/build-packet.md",
|
|
5451
|
+
"surface_entry": null,
|
|
5452
|
+
"summary": "The campaign-identity gate section describes stray_files and the repair for a built file no spec page builds to."
|
|
5453
|
+
}
|
|
5454
|
+
],
|
|
5455
|
+
"entry_sha256": "6b11a07c55a232f4a461288288807198ba62708b62f07056a4a76e0efc2e75ca"
|
|
5456
|
+
},
|
|
5457
|
+
{
|
|
5458
|
+
"id": "RL-0226",
|
|
5459
|
+
"sequence": 218,
|
|
5460
|
+
"date": "2026-10-04",
|
|
5461
|
+
"kind": "release",
|
|
5462
|
+
"surface_version": "1.51.0",
|
|
5463
|
+
"changelog_section": "1.51.0",
|
|
5464
|
+
"changelog_sha256": "acb40fac6861f258a17cc949e30c2aec372997a69ca4d25df82b133d30c71135",
|
|
5465
|
+
"agent_impact": "Surface 1.51.0. New command checkpoint accept records an operator's accept of a measured QC warning beside the unchanged measurement, and next prints a QC handoff listing open, review, lapsed, unexercised and excluded results with the ref to accept each warning by. Accepts are operator decisions: at the end of QA, run next, present the QC handoff once, and run checkpoint accept only with the refs, reason and name the operator gave you in the conversation, after the warning was shown to them. Never write qc_accepts, qc_results or QA verdict files by hand; the up-front test-order permission does not cover accepts. An accept never changes readiness, a result, the doctor or next status, or the QA disposition, and it lapses when the measured state changes or its evidence is stale or cannot be reproduced. The effects contract declares checkpoint accept (tier B: appends to the Assembly Report, marks the doctor sidecar stale, journals) and its --dry-run form, and declares header-only GETs to the configured store policy URLs on the qa run --browser rows ahead of the check that sends them; QA does not send them yet. Bundled skills carry revision 1.51.0+skills.1: an agent that loaded an earlier revision should start a fresh session. Install the 1.51.0 package with the documented local setup command.",
|
|
5466
|
+
"compatibility": "additive",
|
|
5467
|
+
"migration": "none",
|
|
5468
|
+
"changes": [
|
|
5469
|
+
{
|
|
5470
|
+
"class": "compatibility_policy",
|
|
5471
|
+
"path": "compatibility.json",
|
|
5472
|
+
"surface_entry": null,
|
|
5473
|
+
"summary": "Advance the declared version to 1.51.0."
|
|
5474
|
+
},
|
|
5475
|
+
{
|
|
5476
|
+
"class": "compatibility_policy",
|
|
5477
|
+
"path": "contracts/effects.v1.json",
|
|
5478
|
+
"surface_entry": "contracts/effects.v1.json",
|
|
5479
|
+
"summary": "Declare checkpoint accept (tier B: appends to the Assembly Report's qc_accepts and evidence, marks the doctor sidecar stale, journals; sends nothing) and its --dry-run form, and declare header-only GETs to the CampaignSpec's configured store policy URLs on the two qa run --browser rows, ahead of the check that sends them."
|
|
5480
|
+
},
|
|
5481
|
+
{
|
|
5482
|
+
"class": "compatibility_policy",
|
|
5483
|
+
"path": "contracts/supported-surface.json",
|
|
5484
|
+
"surface_entry": "contracts/supported-surface.json",
|
|
5485
|
+
"summary": "Advance surface_version to 1.51.0 and record the effects contract hash."
|
|
5486
|
+
},
|
|
5487
|
+
{
|
|
5488
|
+
"class": "named_surface",
|
|
5489
|
+
"path": "docs/effects.md",
|
|
5490
|
+
"surface_entry": "docs/effects.md",
|
|
5491
|
+
"summary": "Describe what checkpoint accept records, what it never changes, and when an agent may run it."
|
|
5492
|
+
},
|
|
5493
|
+
{
|
|
5494
|
+
"class": "named_surface",
|
|
5495
|
+
"path": "docs/local-setup.md",
|
|
5496
|
+
"surface_entry": "docs/local-setup.md",
|
|
5497
|
+
"summary": "Pin the 1.51.0 package in the local setup install command."
|
|
5498
|
+
},
|
|
5499
|
+
{
|
|
5500
|
+
"class": "documentation",
|
|
5501
|
+
"path": "docs/orientation-contract-reference.md",
|
|
5502
|
+
"surface_entry": "docs/orientation-contract-reference.md",
|
|
5503
|
+
"summary": "Regenerate at surface 1.51.0."
|
|
5504
|
+
},
|
|
5505
|
+
{
|
|
5506
|
+
"class": "named_surface",
|
|
5507
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5508
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5509
|
+
"summary": "Add the operator-accept section: what checkpoint accept records, what it never changes, and when an agent may run it."
|
|
5510
|
+
},
|
|
5511
|
+
{
|
|
5512
|
+
"class": "named_surface",
|
|
5513
|
+
"path": "docs/runtime-readiness.md",
|
|
5514
|
+
"surface_entry": "docs/runtime-readiness.md",
|
|
5515
|
+
"summary": "Regenerate at surface 1.51.0."
|
|
5516
|
+
},
|
|
5517
|
+
{
|
|
5518
|
+
"class": "named_surface",
|
|
5519
|
+
"path": "docs/skills-revision.md",
|
|
5520
|
+
"surface_entry": "docs/skills-revision.md",
|
|
5521
|
+
"summary": "Use the current 1.51.0+skills.1 bundle in executable examples."
|
|
5522
|
+
},
|
|
5523
|
+
{
|
|
5524
|
+
"class": "generated_runtime",
|
|
5525
|
+
"path": "package-lock.json",
|
|
5526
|
+
"surface_entry": null,
|
|
5527
|
+
"summary": "Advance the package version to 1.51.0."
|
|
5528
|
+
},
|
|
5529
|
+
{
|
|
5530
|
+
"class": "package_export",
|
|
5531
|
+
"path": "package.json",
|
|
5532
|
+
"surface_entry": null,
|
|
5533
|
+
"summary": "Advance the package version to 1.51.0."
|
|
5534
|
+
},
|
|
5535
|
+
{
|
|
5536
|
+
"class": "skill",
|
|
5537
|
+
"path": "skills.json",
|
|
5538
|
+
"surface_entry": "skills.json",
|
|
5539
|
+
"summary": "Advance the bundled skill revision to 1.51.0+skills.1 and each skill version one patch."
|
|
5540
|
+
},
|
|
5541
|
+
{
|
|
5542
|
+
"class": "skill",
|
|
5543
|
+
"path": "skills/campaign-lifecycle-orientation/SKILL.md",
|
|
5544
|
+
"surface_entry": null,
|
|
5545
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5546
|
+
},
|
|
5547
|
+
{
|
|
5548
|
+
"class": "skill",
|
|
5549
|
+
"path": "skills/campaign-readback-classification/SKILL.md",
|
|
5550
|
+
"surface_entry": null,
|
|
5551
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5552
|
+
},
|
|
5553
|
+
{
|
|
5554
|
+
"class": "skill",
|
|
5555
|
+
"path": "skills/campaign-run-evidence/SKILL.md",
|
|
5556
|
+
"surface_entry": null,
|
|
5557
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5558
|
+
},
|
|
5559
|
+
{
|
|
5560
|
+
"class": "skill",
|
|
5561
|
+
"path": "skills/contribution-intake/SKILL.md",
|
|
5562
|
+
"surface_entry": null,
|
|
5563
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5564
|
+
},
|
|
5565
|
+
{
|
|
5566
|
+
"class": "skill",
|
|
5567
|
+
"path": "skills/next-campaigns-build/SKILL.md",
|
|
5568
|
+
"surface_entry": null,
|
|
5569
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5570
|
+
},
|
|
5571
|
+
{
|
|
5572
|
+
"class": "skill",
|
|
5573
|
+
"path": "skills/next-campaigns-os-setup/SKILL.md",
|
|
5574
|
+
"surface_entry": null,
|
|
5575
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5576
|
+
},
|
|
5577
|
+
{
|
|
5578
|
+
"class": "skill",
|
|
5579
|
+
"path": "skills/next-campaigns-os/SKILL.md",
|
|
5580
|
+
"surface_entry": null,
|
|
5581
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5582
|
+
},
|
|
5583
|
+
{
|
|
5584
|
+
"class": "skill",
|
|
5585
|
+
"path": "skills/next-campaigns-polish/SKILL.md",
|
|
5586
|
+
"surface_entry": null,
|
|
5587
|
+
"summary": "Publish the 1.51.0+skills.1 bundle revision."
|
|
5588
|
+
},
|
|
5589
|
+
{
|
|
5590
|
+
"class": "skill",
|
|
5591
|
+
"path": "skills/next-campaigns-qa/SKILL.md",
|
|
5592
|
+
"surface_entry": null,
|
|
5593
|
+
"summary": "At the end of QA, run next and present the QC handoff once, ask the operator which open warnings to accept and why, and run checkpoint accept only with the refs, reason and name the operator gave; never write qc_accepts, qc_results or QA verdict files by hand. Publish the 1.51.0+skills.1 bundle revision."
|
|
5594
|
+
},
|
|
5595
|
+
{
|
|
5596
|
+
"class": "cli_surface",
|
|
5597
|
+
"path": "src/cli.mjs",
|
|
5598
|
+
"surface_entry": "checkpoint",
|
|
5599
|
+
"summary": "Add checkpoint accept (refuses unless every listed result is a current accept-eligible warning already on record, and appends only), a QC handoff in next, and qc_results and qc_build_fingerprint on the QA stage evidence; record ingest refuses the package-owned QC keys."
|
|
5600
|
+
},
|
|
5601
|
+
{
|
|
5602
|
+
"class": "cli_surface",
|
|
5603
|
+
"path": "src/doctor/inspect.mjs",
|
|
5604
|
+
"surface_entry": "doctor",
|
|
5605
|
+
"summary": "Doctor output carries derived.qc_results, empty until a QC check records a result; readiness is unchanged."
|
|
5606
|
+
}
|
|
5607
|
+
],
|
|
5608
|
+
"entry_sha256": "9702dae850ed7d8c2401f71939cb37eed3b63f09b3b7607f08ad94eccc8338da"
|
|
5609
|
+
},
|
|
5610
|
+
{
|
|
5611
|
+
"id": "RL-0228",
|
|
5612
|
+
"sequence": 219,
|
|
5613
|
+
"date": "2026-10-04",
|
|
5614
|
+
"kind": "release",
|
|
5615
|
+
"surface_version": null,
|
|
5616
|
+
"changelog_section": "1.51.0+agent.1",
|
|
5617
|
+
"changelog_sha256": "d01e35ae07379f131e9a57ce7651061b0e93644b5f18a4a5cd39aa3b4d7f9478",
|
|
5618
|
+
"agent_impact": "Doctor (the packet path and doctor --built) now runs built_output.cart_placeholders on every built page. A known SDK placeholder such as {item.name}, {subtotal} or {package.name} in live built HTML text, or in an alt, title, placeholder, aria-label or button value attribute outside every SDK-owned scope, is a warning (built_output.cart_placeholders.live_token) that next lists in its QC handoff; unknown brace strings and placeholders on a page whose item template selector is not an #id are review results. Move the placeholder into the SDK-owned <template> or item list that renders it, or remove it, and rebuild. A page passes only when its campaign-cart loader names an exact version in the verified list; otherwise, and on a page over a size, candidate, result or page cap or one that cannot be read, the page reads unexercised, never pass. These results are never blockers and never checkpoint gates, so checkpoint waive does not see them.",
|
|
5619
|
+
"compatibility": "additive",
|
|
5620
|
+
"migration": "none",
|
|
5621
|
+
"changes": [
|
|
5622
|
+
{
|
|
5623
|
+
"class": "named_surface",
|
|
5624
|
+
"path": "docs/build-packet.md",
|
|
5625
|
+
"surface_entry": "docs/build-packet.md",
|
|
5626
|
+
"summary": "Describe the raw cart placeholder check: what it warns on, what is expected, and when a page reads unexercised."
|
|
5627
|
+
},
|
|
5628
|
+
{
|
|
5629
|
+
"class": "cli_surface",
|
|
5630
|
+
"path": "src/doctor/checks.mjs",
|
|
5631
|
+
"surface_entry": "doctor",
|
|
5632
|
+
"summary": "Doctor runs the raw cart placeholder check after the script syntax gate on the packet path and records its results in derived.qc_results, with warning and review results in warnings[]."
|
|
5633
|
+
},
|
|
5634
|
+
{
|
|
5635
|
+
"class": "cli_surface",
|
|
5636
|
+
"path": "src/doctor/inspect.mjs",
|
|
5637
|
+
"surface_entry": "doctor",
|
|
5638
|
+
"summary": "doctor --built runs the raw cart placeholder check after the script-syntax check and records its results with the other QC results."
|
|
5639
|
+
}
|
|
5640
|
+
],
|
|
5641
|
+
"entry_sha256": "925f8d9ad8f524dc8551be91a521d1f29555ce756d2a41c90b95dec16f5bce1f"
|
|
5642
|
+
},
|
|
5643
|
+
{
|
|
5644
|
+
"id": "RL-0231",
|
|
5645
|
+
"sequence": 220,
|
|
5646
|
+
"date": "2026-10-05",
|
|
5647
|
+
"kind": "release",
|
|
5648
|
+
"surface_version": null,
|
|
5649
|
+
"changelog_section": "1.51.0+agent.2",
|
|
5650
|
+
"changelog_sha256": "2dbc67b81e660db15be54ec9939a05cab736eed325f84611252272955b525b31",
|
|
5651
|
+
"agent_impact": "After polish capture, the Assembly Report carries media_weight beside page_load from the same capture, and next reads its image weight and oversize results instead of reporting them as not captured by this version. Run polish capture again to replace page_load evidence captured before this change.",
|
|
5652
|
+
"compatibility": "compatible",
|
|
5653
|
+
"migration": "none",
|
|
5654
|
+
"changes": [
|
|
5655
|
+
{
|
|
5656
|
+
"class": "cli_surface",
|
|
5657
|
+
"path": "src/cli.mjs",
|
|
5658
|
+
"surface_entry": "polish",
|
|
5659
|
+
"summary": "polish capture attaches the media_weight record its capture produced beside page_load in the same report write, and refuses one that is not package-produced or not bound to that page_load."
|
|
5660
|
+
}
|
|
5661
|
+
],
|
|
5662
|
+
"entry_sha256": "6c7e9fea48195b6c141beec753d619710e4d5c91eb6f1c027bcb814e30366bf4"
|
|
5663
|
+
},
|
|
5664
|
+
{
|
|
5665
|
+
"id": "RL-0227",
|
|
5666
|
+
"sequence": 221,
|
|
5667
|
+
"date": "2026-10-05",
|
|
5668
|
+
"kind": "release",
|
|
5669
|
+
"surface_version": null,
|
|
5670
|
+
"changelog_section": "1.51.0+agent.3",
|
|
5671
|
+
"changelog_sha256": "c2479b7e88ca58ae09277242c2b9a617e934bd514d3892800f888038924b5b01",
|
|
5672
|
+
"agent_impact": "qa run with a browser test order now seeds synthetic tracking values (utm_*, affid, sub1, subaffiliate2 and up to eight names from analytics.params.tracking.preserve) and reports tracking.url (whether each value survives every observed page navigation through the navigation after the order), tracking.order (whether the matching attribution reached the request of an order the store accepted) and tracking.tag (whether os-tracking-tag literals match order metadata) as QC results in the verdict and the next QC handoff. They are warnings or review results, never blockers. A result passes only when every read it depends on completed: an unobserved step, a reload by QA, an attempt that ended early or a hop the browser did not report as a new-document commit ends the measurement without a pass. Click ids and funnel are not seeded. The persisted verdict never holds a query value: every stored string is cut at its first literal or percent-decoded query.",
|
|
5673
|
+
"compatibility": "additive",
|
|
5674
|
+
"migration": "none",
|
|
5675
|
+
"changes": [
|
|
5676
|
+
{
|
|
5677
|
+
"class": "named_surface",
|
|
5678
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5679
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5680
|
+
"summary": "Describe the tracking parameter results: which values QA seeds, what URL preservation and order attribution report, and what is stored."
|
|
5681
|
+
}
|
|
5682
|
+
],
|
|
5683
|
+
"entry_sha256": "45f3af2c0db67bb642a1c41f64e01034b031651883ce66cc791ddd38d931ccdb"
|
|
5684
|
+
},
|
|
5685
|
+
{
|
|
5686
|
+
"id": "RL-0229",
|
|
5687
|
+
"sequence": 222,
|
|
5688
|
+
"date": "2026-10-05",
|
|
5689
|
+
"kind": "release",
|
|
5690
|
+
"surface_version": null,
|
|
5691
|
+
"changelog_section": "1.51.0+agent.4",
|
|
5692
|
+
"changelog_sha256": "1330ace51c2b5f767c15601d8ec1e75d140ec943f30dafe7d2dd05e21d454152",
|
|
5693
|
+
"agent_impact": "qa run --browser now checks each analytics.params.content entry at runtime: for each applicable page it loads the page in two fresh browser contexts, without the parameter and with ?<name>=n, and reports content_param QC results in the verdict and the next QC handoff. A result passes only when both loads served the requested document and finished the SDK display pass before the 60 s budget ended, every element whose data-next-hide or data-next-show refers to param.<name> is the same stable element in both loads, visible without the parameter and hidden with it, and no reference needs review. A parameter whose handlers cannot hide anything with n is a warning; compound or unreliably parsed conditions, content hidden at baseline, changed targets, failed loads and pairs beyond the eighth or past the budget are review or unexercised results, never blockers. Runs without --browser list the checks as not requested. The verdict stores a hash of each condition, never its text or a query value.",
|
|
5694
|
+
"compatibility": "additive",
|
|
5695
|
+
"migration": "none",
|
|
5696
|
+
"changes": [
|
|
5697
|
+
{
|
|
5698
|
+
"class": "named_surface",
|
|
5699
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5700
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5701
|
+
"summary": "Describe the content parameter results: how QA compares the two loads, what reads as a warning, and what never passes."
|
|
5702
|
+
}
|
|
5703
|
+
],
|
|
5704
|
+
"entry_sha256": "ceb20731f07feccbedea6abe1376b91c8b830036ee1657fcb0f984c55dfc2b53"
|
|
5705
|
+
},
|
|
5706
|
+
{
|
|
5707
|
+
"id": "RL-0230",
|
|
5708
|
+
"sequence": 223,
|
|
5709
|
+
"date": "2026-10-05",
|
|
5710
|
+
"kind": "release",
|
|
5711
|
+
"surface_version": "1.52.0",
|
|
5712
|
+
"changelog_section": "1.52.0",
|
|
5713
|
+
"changelog_sha256": "42e6f8fbe9ed21935c14e69594c5afc6bc6846714b1bd69f88f7e6f556e023fe",
|
|
5714
|
+
"agent_impact": "Surface 1.52.0. qa run --browser now checks each configured store_terms, store_privacy, store_returns, store_shipping and store_contact URL and reports policy.presence and policy.availability QC results in the verdict and the next QC handoff. Presence passes only when QA read the links on every page it visits and one resolves to the configured destination (trailing slash and default port normalized, query kept); a declared footer label that points elsewhere is a warning. Availability passes only when bounded header-only GETs reach a 2xx text/html or application/xhtml+xml page within 5 redirects that differs from the configured URL only in scheme, www. or trailing slash. 404s, server errors and redirects to the store home page are warnings; authentication, rate limits, loops, non-HTML responses, unexpected statuses, non-absolute configured values and redirects elsewhere are review; network failures and anything not finished within the shared 20 s budget or the 15 s per-URL deadline are unexercised. mailto contacts are checked for presence only. Results are never blockers; runs without --browser list them as not requested. Stored destinations carry no query, and a stored record reads back only with exactly the keys QA writes. The effects contract states that qa run --browser sends these header-only GETs to the configured store policy URLs. Bundled skills carry revision 1.52.0+skills.1: an agent that loaded an earlier revision should start a fresh session. Install the 1.52.0 package with the documented local setup command.",
|
|
5715
|
+
"compatibility": "additive",
|
|
5716
|
+
"migration": "none",
|
|
5717
|
+
"changes": [
|
|
5718
|
+
{
|
|
5719
|
+
"class": "compatibility_policy",
|
|
5720
|
+
"path": "compatibility.json",
|
|
5721
|
+
"surface_entry": null,
|
|
5722
|
+
"summary": "Advance the declared version to 1.52.0."
|
|
5723
|
+
},
|
|
5724
|
+
{
|
|
5725
|
+
"class": "compatibility_policy",
|
|
5726
|
+
"path": "contracts/effects.v1.json",
|
|
5727
|
+
"surface_entry": "contracts/effects.v1.json",
|
|
5728
|
+
"summary": "State that the two qa run --browser rows send the header-only GETs to the configured store policy URLs, the offline fixture not observing them only because its browser run is blocked at the gate; and state that the offline checkpoint accept fixture is refused (changed_since_handoff) because its synthetic result ref matches no current result, while doctor, Polish and QA checks produce accept-eligible warnings."
|
|
5729
|
+
},
|
|
5730
|
+
{
|
|
5731
|
+
"class": "compatibility_policy",
|
|
5732
|
+
"path": "contracts/supported-surface.json",
|
|
5733
|
+
"surface_entry": "contracts/supported-surface.json",
|
|
5734
|
+
"summary": "Advance surface_version to 1.52.0 and record the effects contract hash."
|
|
5735
|
+
},
|
|
5736
|
+
{
|
|
5737
|
+
"class": "named_surface",
|
|
5738
|
+
"path": "docs/local-setup.md",
|
|
5739
|
+
"surface_entry": "docs/local-setup.md",
|
|
5740
|
+
"summary": "Pin the 1.52.0 package in the local setup install command."
|
|
5741
|
+
},
|
|
5742
|
+
{
|
|
5743
|
+
"class": "documentation",
|
|
5744
|
+
"path": "docs/orientation-contract-reference.md",
|
|
5745
|
+
"surface_entry": "docs/orientation-contract-reference.md",
|
|
5746
|
+
"summary": "Regenerate at surface 1.52.0."
|
|
5747
|
+
},
|
|
5748
|
+
{
|
|
5749
|
+
"class": "named_surface",
|
|
5750
|
+
"path": "docs/qa-and-test-orders.md",
|
|
5751
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
5752
|
+
"summary": "Describe the policy link results: what presence and availability check, which outcomes are warnings or review results, and what is not requested without --browser."
|
|
5753
|
+
},
|
|
5754
|
+
{
|
|
5755
|
+
"class": "named_surface",
|
|
5756
|
+
"path": "docs/runtime-readiness.md",
|
|
5757
|
+
"surface_entry": "docs/runtime-readiness.md",
|
|
5758
|
+
"summary": "Regenerate at surface 1.52.0."
|
|
5759
|
+
},
|
|
5760
|
+
{
|
|
5761
|
+
"class": "named_surface",
|
|
5762
|
+
"path": "docs/skills-revision.md",
|
|
5763
|
+
"surface_entry": "docs/skills-revision.md",
|
|
5764
|
+
"summary": "Use the current 1.52.0+skills.1 bundle in executable examples."
|
|
5765
|
+
},
|
|
5766
|
+
{
|
|
5767
|
+
"class": "generated_runtime",
|
|
5768
|
+
"path": "package-lock.json",
|
|
5769
|
+
"surface_entry": null,
|
|
5770
|
+
"summary": "Advance the package version to 1.52.0."
|
|
5771
|
+
},
|
|
5772
|
+
{
|
|
5773
|
+
"class": "package_export",
|
|
5774
|
+
"path": "package.json",
|
|
5775
|
+
"surface_entry": null,
|
|
5776
|
+
"summary": "Advance the package version to 1.52.0."
|
|
5777
|
+
},
|
|
5778
|
+
{
|
|
5779
|
+
"class": "skill",
|
|
5780
|
+
"path": "skills.json",
|
|
5781
|
+
"surface_entry": "skills.json",
|
|
5782
|
+
"summary": "Advance the bundled skill revision to 1.52.0+skills.1 and each skill version one patch."
|
|
5783
|
+
},
|
|
5784
|
+
{
|
|
5785
|
+
"class": "skill",
|
|
5786
|
+
"path": "skills/campaign-lifecycle-orientation/SKILL.md",
|
|
5787
|
+
"surface_entry": null,
|
|
5788
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5789
|
+
},
|
|
5790
|
+
{
|
|
5791
|
+
"class": "skill",
|
|
5792
|
+
"path": "skills/campaign-readback-classification/SKILL.md",
|
|
5793
|
+
"surface_entry": null,
|
|
5794
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5795
|
+
},
|
|
5796
|
+
{
|
|
5797
|
+
"class": "skill",
|
|
5798
|
+
"path": "skills/campaign-run-evidence/SKILL.md",
|
|
5799
|
+
"surface_entry": null,
|
|
5800
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5801
|
+
},
|
|
5802
|
+
{
|
|
5803
|
+
"class": "skill",
|
|
5804
|
+
"path": "skills/contribution-intake/SKILL.md",
|
|
5805
|
+
"surface_entry": null,
|
|
5806
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5807
|
+
},
|
|
5808
|
+
{
|
|
5809
|
+
"class": "skill",
|
|
5810
|
+
"path": "skills/next-campaigns-build/SKILL.md",
|
|
5811
|
+
"surface_entry": null,
|
|
5812
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5813
|
+
},
|
|
5814
|
+
{
|
|
5815
|
+
"class": "skill",
|
|
5816
|
+
"path": "skills/next-campaigns-os-setup/SKILL.md",
|
|
5817
|
+
"surface_entry": null,
|
|
5818
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5819
|
+
},
|
|
5820
|
+
{
|
|
5821
|
+
"class": "skill",
|
|
5822
|
+
"path": "skills/next-campaigns-os/SKILL.md",
|
|
5823
|
+
"surface_entry": null,
|
|
5824
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5825
|
+
},
|
|
5826
|
+
{
|
|
5827
|
+
"class": "skill",
|
|
5828
|
+
"path": "skills/next-campaigns-polish/SKILL.md",
|
|
5829
|
+
"surface_entry": null,
|
|
5830
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5831
|
+
},
|
|
5832
|
+
{
|
|
5833
|
+
"class": "skill",
|
|
5834
|
+
"path": "skills/next-campaigns-qa/SKILL.md",
|
|
5835
|
+
"surface_entry": null,
|
|
5836
|
+
"summary": "Publish the 1.52.0+skills.1 bundle revision."
|
|
5837
|
+
}
|
|
5838
|
+
],
|
|
5839
|
+
"entry_sha256": "303fbf65d9d538ae55340e7f1606b3acae50453ead24740ddd39149e77082f41"
|
|
5840
|
+
},
|
|
5841
|
+
{
|
|
5842
|
+
"id": "RL-0232",
|
|
5843
|
+
"sequence": 224,
|
|
5844
|
+
"date": "2026-10-05",
|
|
5845
|
+
"kind": "release",
|
|
5846
|
+
"surface_version": null,
|
|
5847
|
+
"changelog_section": "1.52.0+agent.1",
|
|
5848
|
+
"changelog_sha256": "8db55e2af8d696493a8c2881667ae538329a101cf5c5c582bc5d0c6e50ca91c9",
|
|
5849
|
+
"agent_impact": "Doctor (the packet path and doctor --built) now runs built_output.smoke_qc on every built page. It warns on an in-page link whose target is missing, a missing favicon or Open Graph title, description or image, an og:image that is not absolute or whose file is missing, the Tailwind CDN script in a production build, references to the cdn.29next.store asset host, and loopback URLs in a production build; next lists these in its QC handoff. Fix the page and rebuild. The Tailwind and loopback rules are decided only for a recorded production build and read unexercised otherwise; a page over a size, candidate, result or page cap, or one that cannot be read, reads unexercised, never pass. These results are never blockers and never checkpoint gates.",
|
|
5850
|
+
"compatibility": "additive",
|
|
5851
|
+
"migration": "none",
|
|
5852
|
+
"changes": [
|
|
5853
|
+
{
|
|
5854
|
+
"class": "named_surface",
|
|
5855
|
+
"path": "docs/build-packet.md",
|
|
5856
|
+
"surface_entry": "docs/build-packet.md",
|
|
5857
|
+
"summary": "Describe the built-output smoke checks: what each rule warns on, which rules need a production build, and when a page reads unexercised."
|
|
5858
|
+
},
|
|
5859
|
+
{
|
|
5860
|
+
"class": "cli_surface",
|
|
5861
|
+
"path": "src/doctor/checks.mjs",
|
|
5862
|
+
"surface_entry": "doctor",
|
|
5863
|
+
"summary": "Doctor runs the smoke checks after the raw cart placeholder check on the packet path and records their results in derived.qc_results, with warning and review results in warnings[]."
|
|
5864
|
+
},
|
|
5865
|
+
{
|
|
5866
|
+
"class": "cli_surface",
|
|
5867
|
+
"path": "src/doctor/inspect.mjs",
|
|
5868
|
+
"surface_entry": "doctor",
|
|
5869
|
+
"summary": "doctor --built runs the smoke checks after the raw cart placeholder check, with the build environment and deploy base unknown, and records their results with the other QC results."
|
|
5870
|
+
}
|
|
5871
|
+
],
|
|
5872
|
+
"entry_sha256": "e9063da2788630cb0017eedc0b2e77b717b290bae0e7cb5d6bcdbbb6e6b7368e"
|
|
5873
|
+
},
|
|
5874
|
+
{
|
|
5875
|
+
"id": "RL-0233",
|
|
5876
|
+
"sequence": 225,
|
|
5877
|
+
"date": "2026-10-05",
|
|
5878
|
+
"kind": "release",
|
|
5879
|
+
"surface_version": "1.53.0",
|
|
5880
|
+
"changelog_section": "1.53.0",
|
|
5881
|
+
"changelog_sha256": "b5e6bbfd3ab22a16b715fbd574128715ab5a9a70d76c1e09f8f91c1d25ce72f6",
|
|
5882
|
+
"agent_impact": "Surface 1.53.0. Adds record brief, which saves Campaign Build Brief answers without re-running intake, and record spec, which binds a CampaignSpec change without discarding operator state; their --dry-run forms write nothing and append no lifecycle entry. A brief file is guided unless it sets \"brief_mode\": \"prepared\" (a campaign whose report already records a prepared brief stays prepared). An unchanged or reformatted save keeps every stage's evidence and status. A material brief or CampaignSpec change makes build, Polish and QA owed again (QA alone for a qa_policy change), keeps the last five superseded records per stage as history that is never current proof, and next, doctor, progress, readback and the Assembly Report status report the owed stage; next offers refresh_inputs (record brief or record spec) when a recorded stage was made against earlier content. Build, Polish and QA records now stamp the brief and CampaignSpec content they were made against; records without stamps read unconfirmed. Re-recording an unchanged build after an input change keeps the build owed unless the operator's --deviation-reason records that the change needs no output change; Polish stays owed until a new capture postdates the change. Intake refuses, without --force, to discard recorded waivers, warning accepts, stage history, an applied theme, or a recorded deploy target, preview URL, production URL, order-path depth or allowed-domains confirmation; --force archives the build, Polish and QA records it clears and keeps stage history. spec derive no longer rebinds report identity and its --json result no longer carries rebound; run record spec after it. Bundled skills carry revision 1.53.0+skills.1: an agent that loaded an earlier revision should start a fresh session. Install the 1.53.0 package with the documented local setup command.",
|
|
5883
|
+
"compatibility": "breaking",
|
|
5884
|
+
"migration": "After upgrading, next routes each in-flight campaign back to build once, because build, Polish and QA records made before 1.53.0 do not record which brief and CampaignSpec content they used: re-record build and Polish, and run QA again for a new verdict. Add \"brief_mode\": \"prepared\" to a hand-written brief file whose open questions should block. Save brief answers with record brief and CampaignSpec changes with record spec instead of re-running start, prepare-build or build, which now refuse without --force to discard recorded waivers, warning accepts, stage history, an applied theme, or a recorded deploy target, preview URL, production URL, order-path depth or allowed-domains confirmation. Run record spec after spec derive, and stop reading rebound from spec derive --json.",
|
|
5885
|
+
"changes": [
|
|
5886
|
+
{
|
|
5887
|
+
"class": "compatibility_policy",
|
|
5888
|
+
"path": "compatibility.json",
|
|
5889
|
+
"surface_entry": null,
|
|
5890
|
+
"summary": "Advance the declared version to 1.53.0."
|
|
5891
|
+
},
|
|
5892
|
+
{
|
|
5893
|
+
"class": "compatibility_policy",
|
|
5894
|
+
"path": "contracts/effects.v1.json",
|
|
5895
|
+
"surface_entry": "contracts/effects.v1.json",
|
|
5896
|
+
"summary": "Declare the record brief and record spec rows (tier C) and their --dry-run rows (tier none); correct the start, prepare-build and build notes (refused without --force when the report carries stage evidence, stage history or operator decisions) and their --force notes (completed build, Polish and QA records are archived into stage history, which is kept); state that record build writes input_change and makes Polish and QA owed when it detects a brief or CampaignSpec change; and state that record polish, record theme and record deploy are refused while an earlier stage is owed again."
|
|
5897
|
+
},
|
|
5898
|
+
{
|
|
5899
|
+
"class": "compatibility_policy",
|
|
5900
|
+
"path": "contracts/supported-surface.json",
|
|
5901
|
+
"surface_entry": "contracts/supported-surface.json",
|
|
5902
|
+
"summary": "Advance surface_version to 1.53.0 and record the effects contract hash."
|
|
5903
|
+
},
|
|
5904
|
+
{
|
|
5905
|
+
"class": "named_surface",
|
|
5906
|
+
"path": "docs/build-packet.md",
|
|
5907
|
+
"surface_entry": "docs/build-packet.md",
|
|
5908
|
+
"summary": "Describe CampaignSpec material changes for local-spec, saved-Map and gateway packets, record spec, spec derive no longer rebinding identity, and the brief and CampaignSpec dependency map."
|
|
5909
|
+
},
|
|
5910
|
+
{
|
|
5911
|
+
"class": "named_surface",
|
|
5912
|
+
"path": "docs/campaign-build-brief.md",
|
|
5913
|
+
"surface_entry": "docs/campaign-build-brief.md",
|
|
5914
|
+
"summary": "Replace Answering The Questions with saving answers through record brief, the brief_mode rule, which changes make which stages owed again, stage history, --deviation-reason, and the one-time re-proof of records made before 1.53.0."
|
|
5915
|
+
},
|
|
5916
|
+
{
|
|
5917
|
+
"class": "named_surface",
|
|
5918
|
+
"path": "docs/effects.md",
|
|
5919
|
+
"surface_entry": "docs/effects.md",
|
|
5920
|
+
"summary": "Describe what record brief and record spec write and refuse, their dry runs, and the intake refusal and --force archive."
|
|
5921
|
+
},
|
|
5922
|
+
{
|
|
5923
|
+
"class": "named_surface",
|
|
5924
|
+
"path": "docs/local-setup.md",
|
|
5925
|
+
"surface_entry": "docs/local-setup.md",
|
|
5926
|
+
"summary": "Pin the 1.53.0 package in the local setup install command."
|
|
5927
|
+
},
|
|
5928
|
+
{
|
|
5929
|
+
"class": "documentation",
|
|
5930
|
+
"path": "docs/orientation-contract-reference.md",
|
|
5931
|
+
"surface_entry": "docs/orientation-contract-reference.md",
|
|
5932
|
+
"summary": "Regenerate at surface 1.53.0."
|
|
5933
|
+
},
|
|
5934
|
+
{
|
|
5935
|
+
"class": "named_surface",
|
|
5936
|
+
"path": "docs/progress-snapshots.md",
|
|
5937
|
+
"surface_entry": "docs/progress-snapshots.md",
|
|
5938
|
+
"summary": "Stage records carry each stage's effective status: a stage owed again by a brief or CampaignSpec change reads required, and one whose inputs cannot be confirmed reads unknown."
|
|
5939
|
+
},
|
|
5940
|
+
{
|
|
5941
|
+
"class": "named_surface",
|
|
5942
|
+
"path": "docs/readback.md",
|
|
5943
|
+
"surface_entry": "docs/readback.md",
|
|
5944
|
+
"summary": "The STAGES header prints the recorded and the effective report status, and a stage line whose effective status differs adds the recorded status and the reason."
|
|
5945
|
+
},
|
|
5946
|
+
{
|
|
5947
|
+
"class": "named_surface",
|
|
5948
|
+
"path": "docs/runtime-readiness.md",
|
|
5949
|
+
"surface_entry": "docs/runtime-readiness.md",
|
|
5950
|
+
"summary": "Regenerate at surface 1.53.0."
|
|
5951
|
+
},
|
|
5952
|
+
{
|
|
5953
|
+
"class": "named_surface",
|
|
5954
|
+
"path": "docs/skills-revision.md",
|
|
5955
|
+
"surface_entry": "docs/skills-revision.md",
|
|
5956
|
+
"summary": "Use the current 1.53.0+skills.1 bundle in executable examples."
|
|
5957
|
+
},
|
|
5958
|
+
{
|
|
5959
|
+
"class": "generated_runtime",
|
|
5960
|
+
"path": "package-lock.json",
|
|
5961
|
+
"surface_entry": null,
|
|
5962
|
+
"summary": "Advance the package version to 1.53.0."
|
|
5963
|
+
},
|
|
5964
|
+
{
|
|
5965
|
+
"class": "package_export",
|
|
5966
|
+
"path": "package.json",
|
|
5967
|
+
"surface_entry": null,
|
|
5968
|
+
"summary": "Advance the package version to 1.53.0."
|
|
5969
|
+
},
|
|
5970
|
+
{
|
|
5971
|
+
"class": "skill",
|
|
5972
|
+
"path": "skills.json",
|
|
5973
|
+
"surface_entry": "skills.json",
|
|
5974
|
+
"summary": "Advance the bundled skill revision to 1.53.0+skills.1 and each skill version one patch."
|
|
5975
|
+
},
|
|
5976
|
+
{
|
|
5977
|
+
"class": "skill",
|
|
5978
|
+
"path": "skills/campaign-lifecycle-orientation/SKILL.md",
|
|
5979
|
+
"surface_entry": null,
|
|
5980
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
5981
|
+
},
|
|
5982
|
+
{
|
|
5983
|
+
"class": "skill",
|
|
5984
|
+
"path": "skills/campaign-readback-classification/SKILL.md",
|
|
5985
|
+
"surface_entry": null,
|
|
5986
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
5987
|
+
},
|
|
5988
|
+
{
|
|
5989
|
+
"class": "skill",
|
|
5990
|
+
"path": "skills/campaign-run-evidence/SKILL.md",
|
|
5991
|
+
"surface_entry": null,
|
|
5992
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
5993
|
+
},
|
|
5994
|
+
{
|
|
5995
|
+
"class": "skill",
|
|
5996
|
+
"path": "skills/contribution-intake/SKILL.md",
|
|
5997
|
+
"surface_entry": null,
|
|
5998
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
5999
|
+
},
|
|
6000
|
+
{
|
|
6001
|
+
"class": "skill",
|
|
6002
|
+
"path": "skills/next-campaigns-build/SKILL.md",
|
|
6003
|
+
"surface_entry": null,
|
|
6004
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
6005
|
+
},
|
|
6006
|
+
{
|
|
6007
|
+
"class": "skill",
|
|
6008
|
+
"path": "skills/next-campaigns-os-setup/SKILL.md",
|
|
6009
|
+
"surface_entry": null,
|
|
6010
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
6011
|
+
},
|
|
6012
|
+
{
|
|
6013
|
+
"class": "skill",
|
|
6014
|
+
"path": "skills/next-campaigns-os/SKILL.md",
|
|
6015
|
+
"surface_entry": null,
|
|
6016
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
6017
|
+
},
|
|
6018
|
+
{
|
|
6019
|
+
"class": "skill",
|
|
6020
|
+
"path": "skills/next-campaigns-polish/SKILL.md",
|
|
6021
|
+
"surface_entry": null,
|
|
6022
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
6023
|
+
},
|
|
6024
|
+
{
|
|
6025
|
+
"class": "skill",
|
|
6026
|
+
"path": "skills/next-campaigns-qa/SKILL.md",
|
|
6027
|
+
"surface_entry": null,
|
|
6028
|
+
"summary": "Publish the 1.53.0+skills.1 bundle revision."
|
|
6029
|
+
},
|
|
6030
|
+
{
|
|
6031
|
+
"class": "cli_surface",
|
|
6032
|
+
"path": "src/cli.mjs",
|
|
6033
|
+
"surface_entry": "record",
|
|
6034
|
+
"summary": "Add record brief and record spec to the usage text; intake binds the brief material and refuses to discard operator state without --force; QA records stamp their inputs; next carries input_currency, offers refresh_inputs and notes an operator's unchanged-output decision in the QC handoff; spec derive no longer rebinds report identity, drops the rebound result field and names record spec."
|
|
6035
|
+
},
|
|
6036
|
+
{
|
|
6037
|
+
"class": "cli_surface",
|
|
6038
|
+
"path": "src/doctor/checks.mjs",
|
|
6039
|
+
"surface_entry": "doctor",
|
|
6040
|
+
"summary": "Doctor reports input currency in derived.input_currency and warns spec.material_stale, spec.binding_unknown, build_brief.material_changed, build_brief.binding_unknown, build_brief.input_unsaved, assembly.output_unchanged_after_input_change and assembly.output_unchanged_by_operator_decision; a normalized brief that is not valid JSON, or not a JSON object, is the build_brief.normalized_path error, not a crash."
|
|
6041
|
+
},
|
|
6042
|
+
{
|
|
6043
|
+
"class": "cli_surface",
|
|
6044
|
+
"path": "src/doctor/next-step.mjs",
|
|
6045
|
+
"surface_entry": "next",
|
|
6046
|
+
"summary": "The stage picker reads each stage's effective status, so a stage owed again by a brief or CampaignSpec change, or one whose inputs cannot be confirmed, is the stage next recommends."
|
|
6047
|
+
}
|
|
6048
|
+
],
|
|
6049
|
+
"entry_sha256": "85e37bd6392dcfa8415a654897eb8dbe8ab417fc9c92ec21732d2fff5a5f5f5b"
|
|
6050
|
+
},
|
|
6051
|
+
{
|
|
6052
|
+
"id": "RL-0234",
|
|
6053
|
+
"sequence": 226,
|
|
6054
|
+
"date": "2026-10-05",
|
|
6055
|
+
"kind": "release",
|
|
6056
|
+
"surface_version": null,
|
|
6057
|
+
"changelog_section": "1.53.0+agent.1",
|
|
6058
|
+
"changelog_sha256": "b865a430b924ff48016930621ba3905deb7861516d9dfdabfd797ed5aaebf6db",
|
|
6059
|
+
"agent_impact": "polish capture now measures text readability on every built page at desktop and mobile widths and attaches it as stages.polish.evidence.visual_review.readability; next lists readability.contrast warnings, review and coverage results in its QC handoff, grouping each warning colour pair across pages and widths for one checkpoint accept. On a campaign whose every mapped page is template stock, polish capture measures readability, prints the page-load no_capturable_routes message as a warning, and exits 0 with status captured_with_warnings; record polish still refuses a completed Polish record there. Polish media weight and readability results read as stale when doctor reports the built output changed since record build. Readability results never block Polish or change readiness. QA's browser-primary-cta check now runs on every page with an expected_next_url, whatever its page type, and measures every visible route-matching CTA (not only the most readable one) and each piece of text inside it, unrounded, with the same measurement Polish uses, against the requirement for its own size; its evidence lists each candidate's elements[] with contrast_ratio_exact and required_ratio. A CTA observed incompletely (the SDK, stylesheets, fonts or its text not ready, a review trigger, text generated by ::before or ::after, or disabled controls) reads manual_review at severity warn, never pass, and so does a page whose inspection script errors (inspection_error, earlier a fail). So browser-primary-cta results on existing campaigns can change in either direction: pages that were skipped are now checked, a second CTA or child text can now fail, large bold text at 3:1 can now pass, and incomplete observations read manual_review instead of pass or fail. The brand theme generator compares contrast unrounded, so a declared colour in [4.495, 4.5) now adds theme.foreground.low_contrast; generated CSS and colour choices are unchanged.",
|
|
6060
|
+
"compatibility": "additive",
|
|
6061
|
+
"migration": "none",
|
|
6062
|
+
"changes": [
|
|
6063
|
+
{
|
|
6064
|
+
"class": "cli_surface",
|
|
6065
|
+
"path": "src/cli.mjs",
|
|
6066
|
+
"surface_entry": "polish",
|
|
6067
|
+
"summary": "polish capture attaches the readability record beside page_load (which now carries captured_at), and on a campaign with no mapped pages measures readability only, reports the held page-load message as a warning and exits 0."
|
|
6068
|
+
},
|
|
6069
|
+
{
|
|
6070
|
+
"class": "named_surface",
|
|
6071
|
+
"path": "docs/qa-and-test-orders.md",
|
|
6072
|
+
"surface_entry": "docs/qa-and-test-orders.md",
|
|
6073
|
+
"summary": "Describe accepting a readability warning: one colour pair and size class per page and width, what orphans or lapses the accept, and that it never hides review, unexercised or excluded results."
|
|
6074
|
+
},
|
|
6075
|
+
{
|
|
6076
|
+
"class": "named_surface",
|
|
6077
|
+
"path": "docs/brand-theme-bridge.md",
|
|
6078
|
+
"surface_entry": "docs/brand-theme-bridge.md",
|
|
6079
|
+
"summary": "State that theme contrast uses the same unrounded measurement as Polish and QA, so a declared colour at 4.495:1 now warns, and that the generator's colour choices are unchanged."
|
|
6080
|
+
}
|
|
6081
|
+
],
|
|
6082
|
+
"entry_sha256": "b75e489a53ea7b60a3a9b3037f6f17c96b13c2960a1cbd34eb7a3cc69b54f617"
|
|
6083
|
+
},
|
|
6084
|
+
{
|
|
6085
|
+
"id": "RL-0235",
|
|
6086
|
+
"sequence": 227,
|
|
6087
|
+
"date": "2026-10-05",
|
|
6088
|
+
"kind": "release",
|
|
6089
|
+
"surface_version": null,
|
|
6090
|
+
"changelog_section": "1.53.0+agent.2",
|
|
6091
|
+
"changelog_sha256": "a7fc7d90ee83e6ad44d310d77942e00de56656259e9c754eec14cd5bd8d124d4",
|
|
6092
|
+
"agent_impact": "next prints a campaign intent summary, generated from the normalized Campaign Build Brief, on every result (intent_summary in JSON, a Campaign intent section in text) and at the top of the setup, build, Polish and QA prompts. Each value carries its origin (stated, from the source, default, not stated, or source not recorded); values are quoted data, purpose and palette source inferred from page types or names read not stated, and nothing reads the summary, so it never sets prices or commerce behaviour. The four agent context files and the setup, build, Polish and QA skills tell agents to read .campaign-runtime/input/campaign-build-brief.normalized.json and the recorded assembly decisions. Bundled skills carry revision 1.53.0+skills.2: an agent that loaded an earlier revision should start a fresh session. The lifecycle skill returns the single compact brief in references/session-intake.md (Intent: is now Work:, with a new Campaign: field and Proof policy:) and saves brief answers with record brief after asking the operator; the build skill passes --deviation-reason only on the operator's explicit decision, the Polish skill records a skipped Polish only on the operator's decision, and the Polish and QA skills report readability warnings and offer repairs inside the brand palette. tooling setup refuses an installed agent context from an earlier release and names install-agent-context --target . in its refusal.",
|
|
6093
|
+
"compatibility": "breaking",
|
|
6094
|
+
"migration": "From each existing campaign folder: install the exact 1.53.0 package, run npx --no-install campaigns-os install-agent-context --target . (it overwrites all four files under .campaign-runtime/agent-context/; local edits there are lost), review and commit the diff, rerun npx --no-install campaigns-os tooling setup --target . --platform claude, and restart the agent session. Codex, Cursor and Copilot users run install-agent-context and reinstall skills with install-skills --platform codex (or agents).",
|
|
6095
|
+
"changes": [
|
|
6096
|
+
{
|
|
6097
|
+
"class": "documentation",
|
|
6098
|
+
"path": "agents/claude/CLAUDE.md",
|
|
6099
|
+
"surface_entry": "agents/claude/CLAUDE.md",
|
|
6100
|
+
"summary": "Add the generic campaign paragraph: what a NEXT campaign is, who owns creative intent and commerce behaviour, read the normalized brief and the recorded decisions before changing a campaign, treat the intent summary as orientation only, and ask the operator before saving brief answers."
|
|
6101
|
+
},
|
|
6102
|
+
{
|
|
6103
|
+
"class": "documentation",
|
|
6104
|
+
"path": "agents/codex/AGENTS.md",
|
|
6105
|
+
"surface_entry": "agents/codex/AGENTS.md",
|
|
6106
|
+
"summary": "Add the generic campaign paragraph: what a NEXT campaign is, who owns creative intent and commerce behaviour, read the normalized brief and the recorded decisions before changing a campaign, treat the intent summary as orientation only, and ask the operator before saving brief answers."
|
|
6107
|
+
},
|
|
6108
|
+
{
|
|
6109
|
+
"class": "documentation",
|
|
6110
|
+
"path": "agents/copilot/copilot-instructions.md",
|
|
6111
|
+
"surface_entry": "agents/copilot/copilot-instructions.md",
|
|
6112
|
+
"summary": "Add the generic campaign paragraph: what a NEXT campaign is, who owns creative intent and commerce behaviour, read the normalized brief and the recorded decisions before changing a campaign, treat the intent summary as orientation only, and ask the operator before saving brief answers."
|
|
6113
|
+
},
|
|
6114
|
+
{
|
|
6115
|
+
"class": "documentation",
|
|
6116
|
+
"path": "agents/cursor/campaigns-os.mdc",
|
|
6117
|
+
"surface_entry": "agents/cursor/campaigns-os.mdc",
|
|
6118
|
+
"summary": "Add the generic campaign paragraph: what a NEXT campaign is, who owns creative intent and commerce behaviour, read the normalized brief and the recorded decisions before changing a campaign, treat the intent summary as orientation only, and ask the operator before saving brief answers."
|
|
6119
|
+
},
|
|
6120
|
+
{
|
|
6121
|
+
"class": "named_surface",
|
|
6122
|
+
"path": "docs/skills-revision.md",
|
|
6123
|
+
"surface_entry": "docs/skills-revision.md",
|
|
6124
|
+
"summary": "Use the current 1.53.0+skills.2 bundle in executable examples."
|
|
6125
|
+
},
|
|
6126
|
+
{
|
|
6127
|
+
"class": "skill",
|
|
6128
|
+
"path": "skills.json",
|
|
6129
|
+
"surface_entry": "skills.json",
|
|
6130
|
+
"summary": "Advance the bundled skill revision to 1.53.0+skills.2 and each skill version one patch."
|
|
6131
|
+
},
|
|
6132
|
+
{
|
|
6133
|
+
"class": "skill",
|
|
6134
|
+
"path": "skills/campaign-lifecycle-orientation/SKILL.md",
|
|
6135
|
+
"surface_entry": null,
|
|
6136
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision."
|
|
6137
|
+
},
|
|
6138
|
+
{
|
|
6139
|
+
"class": "skill",
|
|
6140
|
+
"path": "skills/campaign-readback-classification/SKILL.md",
|
|
6141
|
+
"surface_entry": null,
|
|
6142
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision."
|
|
6143
|
+
},
|
|
6144
|
+
{
|
|
6145
|
+
"class": "skill",
|
|
6146
|
+
"path": "skills/campaign-run-evidence/SKILL.md",
|
|
6147
|
+
"surface_entry": null,
|
|
6148
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision."
|
|
6149
|
+
},
|
|
6150
|
+
{
|
|
6151
|
+
"class": "skill",
|
|
6152
|
+
"path": "skills/contribution-intake/SKILL.md",
|
|
6153
|
+
"surface_entry": null,
|
|
6154
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision."
|
|
6155
|
+
},
|
|
6156
|
+
{
|
|
6157
|
+
"class": "skill",
|
|
6158
|
+
"path": "skills/next-campaigns-build/SKILL.md",
|
|
6159
|
+
"surface_entry": null,
|
|
6160
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision; read the normalized brief and the recorded decisions; rebuild after an input change and pass --deviation-reason to record build only on the operator's explicit decision, quoting their reason."
|
|
6161
|
+
},
|
|
6162
|
+
{
|
|
6163
|
+
"class": "skill",
|
|
6164
|
+
"path": "skills/next-campaigns-os-setup/SKILL.md",
|
|
6165
|
+
"surface_entry": null,
|
|
6166
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision; read the normalized brief and the recorded decisions."
|
|
6167
|
+
},
|
|
6168
|
+
{
|
|
6169
|
+
"class": "skill",
|
|
6170
|
+
"path": "skills/next-campaigns-os/SKILL.md",
|
|
6171
|
+
"surface_entry": null,
|
|
6172
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision; return the compact brief defined in references/session-intake.md instead of a second copy, rename the Intent and Proof depth fields to Work and Proof policy, save brief answers with record brief after asking the operator, and declare a detour with --deviation-reason only when the operator has decided on it in the conversation, quoting their reason, including on record build after an input change."
|
|
6173
|
+
},
|
|
6174
|
+
{
|
|
6175
|
+
"class": "skill",
|
|
6176
|
+
"path": "skills/next-campaigns-os/references/session-intake.md",
|
|
6177
|
+
"surface_entry": null,
|
|
6178
|
+
"summary": "The single compact brief: Intent becomes Work, a Campaign field takes the Campaign intent lines from next, Missing inputs covers only choices that affect this revision, and brief answers are saved with record brief after asking the operator."
|
|
6179
|
+
},
|
|
6180
|
+
{
|
|
6181
|
+
"class": "skill",
|
|
6182
|
+
"path": "skills/next-campaigns-polish/SKILL.md",
|
|
6183
|
+
"surface_entry": null,
|
|
6184
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision; read the normalized brief and the recorded decisions; record a skipped Polish only on the operator's decision, quoting their reason as skip_reason; report readability warnings and offer repairs inside the brand palette, accepting one only with the operator's refs, reason and name."
|
|
6185
|
+
},
|
|
6186
|
+
{
|
|
6187
|
+
"class": "skill",
|
|
6188
|
+
"path": "skills/next-campaigns-qa/SKILL.md",
|
|
6189
|
+
"surface_entry": null,
|
|
6190
|
+
"summary": "Publish the 1.53.0+skills.2 bundle revision; read the normalized brief and the recorded decisions; report readability warnings and offer repairs inside the brand palette, accepting one only with the operator's refs, reason and name."
|
|
6191
|
+
},
|
|
6192
|
+
{
|
|
6193
|
+
"class": "cli_surface",
|
|
6194
|
+
"path": "src/cli.mjs",
|
|
6195
|
+
"surface_entry": "next",
|
|
6196
|
+
"summary": "next carries intent_summary on every result and prints a Campaign intent section under the status; the setup, build, Polish and QA prompts start with the summary and the absolute normalized brief path, and the build prompt names record brief and record spec for refreshing a changed brief or CampaignSpec."
|
|
6197
|
+
}
|
|
6198
|
+
],
|
|
6199
|
+
"entry_sha256": "197929e76610b701b015cac7ee37f1f8a75b18e350a8268b679b8ca51a9b7f14"
|
|
4967
6200
|
}
|
|
4968
6201
|
]
|
|
4969
6202
|
}
|