@nextcommerce/campaigns-os 1.46.0 → 1.48.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +347 -3
  2. package/README.md +31 -4
  3. package/agents/claude/CLAUDE.md +2 -0
  4. package/agents/codex/AGENTS.md +1 -0
  5. package/agents/copilot/copilot-instructions.md +1 -0
  6. package/agents/cursor/campaigns-os.mdc +1 -1
  7. package/compatibility.json +1 -1
  8. package/contracts/commerce-surface-catalog.json +1204 -129
  9. package/contracts/effects.v1.json +3 -3
  10. package/contracts/release-ledger.json +803 -0
  11. package/contracts/supported-surface.json +2 -2
  12. package/contracts/template-brand-contract.shared-commerce.v0.json +3 -3
  13. package/docs/build-packet.md +23 -3
  14. package/docs/campaign-build-brief.md +25 -28
  15. package/docs/local-setup.md +13 -5
  16. package/docs/orientation-contract-reference.md +1 -1
  17. package/docs/qa-and-test-orders.md +68 -3
  18. package/docs/runtime-readiness.md +1 -1
  19. package/docs/sdk-storage-compatibility.md +1 -1
  20. package/docs/skills-revision.md +10 -10
  21. package/package.json +1 -1
  22. package/skills/campaign-lifecycle-orientation/SKILL.md +3 -3
  23. package/skills/campaign-readback-classification/SKILL.md +3 -3
  24. package/skills/campaign-run-evidence/SKILL.md +9 -4
  25. package/skills/contribution-intake/SKILL.md +3 -3
  26. package/skills/next-campaigns-build/SKILL.md +5 -4
  27. package/skills/next-campaigns-os/SKILL.md +3 -3
  28. package/skills/next-campaigns-os-setup/SKILL.md +3 -3
  29. package/skills/next-campaigns-polish/SKILL.md +4 -4
  30. package/skills/next-campaigns-qa/SKILL.md +4 -4
  31. package/skills.json +10 -10
  32. package/src/built-script-syntax.mjs +116 -15
  33. package/src/cli.mjs +6 -3
  34. package/src/content-residue.mjs +18 -90
  35. package/src/diagnostic.mjs +2 -1
  36. package/src/doctor/checks.mjs +21 -30
  37. package/src/doctor/inspect.mjs +13 -3
  38. package/src/doctor/next-step.mjs +4 -0
  39. package/src/gate-actions.mjs +8 -0
  40. package/src/local-preview-policy.mjs +92 -0
  41. package/src/page-kit-sdk-version.mjs +8 -1
  42. package/src/polish-node.mjs +26 -2
  43. package/src/progress-node.mjs +5 -1
  44. package/src/qa-analytics-parity.mjs +37 -2
  45. package/src/qa-binding-evidence.mjs +5 -3
  46. package/src/qa-browser.mjs +136 -25
  47. package/src/qa-node.mjs +33 -4
  48. package/src/readback.mjs +19 -10
  49. package/src/sdk-markup.mjs +6 -45
  50. package/src/sdk-storage-compatibility.mjs +3 -2
  51. package/src/source-prep.mjs +1 -1
  52. package/src/tooling-setup.mjs +9 -0
@@ -3828,6 +3828,809 @@
3828
3828
  }
3829
3829
  ],
3830
3830
  "entry_sha256": "5c5b4362711e980c81eab5e1b643c42de1d8bfd74684dd73596f036925bfbeef"
3831
+ },
3832
+ {
3833
+ "id": "RL-0191",
3834
+ "sequence": 183,
3835
+ "date": "2026-10-01",
3836
+ "kind": "release",
3837
+ "surface_version": null,
3838
+ "changelog_section": "1.46.0+agent.4",
3839
+ "changelog_sha256": "894c809bfbd9a3345cd56d5ff7664730b9fc3035ee9181f735dae1527f975e2b",
3840
+ "agent_impact": "Skill text only. The next-campaigns-qa and next-campaigns-build skills now state that a required checkout field bound only on a type=\"hidden\" input, a disabled control, a read-only input or read-only textarea, or an aria-disabled=\"true\" control does not count as bound for browser-commerce-structure, and QA reports it in fields_bound.missing. Bundled skills carry revision 1.46.0+skills.2: an agent that loaded 1.46.0+skills.1 text should start a fresh session. QA behaviour is unchanged.",
3841
+ "compatibility": "compatible",
3842
+ "migration": "none",
3843
+ "changes": [
3844
+ {
3845
+ "class": "named_surface",
3846
+ "path": "docs/skills-revision.md",
3847
+ "surface_entry": "docs/skills-revision.md",
3848
+ "summary": "Use the current 1.46.0+skills.2 bundle in executable examples."
3849
+ },
3850
+ {
3851
+ "class": "skill",
3852
+ "path": "skills.json",
3853
+ "surface_entry": "skills.json",
3854
+ "summary": "Advance the bundled skill revision to 1.46.0+skills.2 and each skill version one patch."
3855
+ },
3856
+ {
3857
+ "class": "skill",
3858
+ "path": "skills/campaign-lifecycle-orientation/SKILL.md",
3859
+ "surface_entry": null,
3860
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3861
+ },
3862
+ {
3863
+ "class": "skill",
3864
+ "path": "skills/campaign-readback-classification/SKILL.md",
3865
+ "surface_entry": null,
3866
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3867
+ },
3868
+ {
3869
+ "class": "skill",
3870
+ "path": "skills/campaign-run-evidence/SKILL.md",
3871
+ "surface_entry": null,
3872
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3873
+ },
3874
+ {
3875
+ "class": "skill",
3876
+ "path": "skills/contribution-intake/SKILL.md",
3877
+ "surface_entry": null,
3878
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3879
+ },
3880
+ {
3881
+ "class": "skill",
3882
+ "path": "skills/next-campaigns-build/SKILL.md",
3883
+ "surface_entry": null,
3884
+ "summary": "State that a checkout field bound only on a hidden, disabled, read-only or aria-disabled control does not count as bound for QA; publish the 1.46.0+skills.2 bundle revision."
3885
+ },
3886
+ {
3887
+ "class": "skill",
3888
+ "path": "skills/next-campaigns-os-setup/SKILL.md",
3889
+ "surface_entry": null,
3890
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3891
+ },
3892
+ {
3893
+ "class": "skill",
3894
+ "path": "skills/next-campaigns-os/SKILL.md",
3895
+ "surface_entry": null,
3896
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3897
+ },
3898
+ {
3899
+ "class": "skill",
3900
+ "path": "skills/next-campaigns-polish/SKILL.md",
3901
+ "surface_entry": null,
3902
+ "summary": "Publish the 1.46.0+skills.2 bundle revision."
3903
+ },
3904
+ {
3905
+ "class": "skill",
3906
+ "path": "skills/next-campaigns-qa/SKILL.md",
3907
+ "surface_entry": null,
3908
+ "summary": "State that a required checkout field bound only on a hidden, disabled, read-only or aria-disabled control is not bound and is reported in fields_bound.missing; publish the 1.46.0+skills.2 bundle revision."
3909
+ }
3910
+ ],
3911
+ "entry_sha256": "8e891f36ce261c325f0837bf4c37ca145f60dbdd3ef55ab0ac9c4c4f3f92de7c"
3912
+ },
3913
+ {
3914
+ "id": "RL-0192",
3915
+ "sequence": 184,
3916
+ "date": "2026-10-01",
3917
+ "kind": "release",
3918
+ "surface_version": null,
3919
+ "changelog_section": "1.46.0+agent.5",
3920
+ "changelog_sha256": "16cbe0246a154be864bf97c671e3f82d4118aa8d7ed64722168fb756492c69a7",
3921
+ "agent_impact": "doctor no longer reports built_output.sdk_markup.checkout_bump_is_upsell. A selected checkout order bump is a line item on the checkout order; data-next-is-upsell=\"true\" tags that line as an upsell so platform order reports show upsell items apart from core items, and that is the intended default. Do not remove the attribute, and do not advise anyone to: it would report the bump as a core item. A bump include opts out with is_upsell: false. A run that recorded the warning under an earlier version can disregard it.",
3922
+ "compatibility": "compatible",
3923
+ "migration": "none",
3924
+ "changes": [
3925
+ {
3926
+ "class": "cli_surface",
3927
+ "path": "src/doctor/checks.mjs",
3928
+ "surface_entry": "doctor",
3929
+ "summary": "Stop passing each built page type to the SDK markup check, which no longer reads it now that built_output.sdk_markup.checkout_bump_is_upsell is retired."
3930
+ }
3931
+ ],
3932
+ "entry_sha256": "5f833a760aad0eada255118b29c4b2098fff4bfa4d364d31be121e7655a135ef"
3933
+ },
3934
+ {
3935
+ "id": "RL-0193",
3936
+ "sequence": 185,
3937
+ "date": "2026-10-01",
3938
+ "kind": "amendment",
3939
+ "amends": "RL-0187",
3940
+ "amendment_reason": "RL-0187 and its 1.45.0+agent.5 section told users to remove data-next-is-upsell=\"true\" from checkout bump includes. Tagging a checkout bump line as an upsell is the intended default, so order reports separate upsell items from core items; removing the attribute would report the bump as a core item. The section now says the advice was wrong and that the warning is retired in 1.46.0+agent.5; this amendment carries the corrected section hash.",
3941
+ "surface_version": null,
3942
+ "changelog_section": "1.45.0+agent.5",
3943
+ "changelog_sha256": "74564091423695f83383d296ce664656bc84cb9d21f7f044daffc0315d87110e",
3944
+ "agent_impact": "Disregard RL-0187's advice to remove data-next-is-upsell=\"true\" from a checkout bump. The upsell tag on the bump line is the intended default and the warning that recommended removing it is retired (RL-0192). RL-0187's theme generate and brand-theme-bridge changes stand.",
3945
+ "compatibility": "compatible",
3946
+ "migration": "none",
3947
+ "changes": [
3948
+ {
3949
+ "class": "cli_surface",
3950
+ "path": null,
3951
+ "surface_entry": "doctor",
3952
+ "summary": "Correct the recorded repair advice for built_output.sdk_markup.checkout_bump_is_upsell: the attribute is intended, and the warning is retired."
3953
+ }
3954
+ ],
3955
+ "entry_sha256": "ba5bdb8718c7b405c7cc60e1129f76ebe10011f099aa151bf893d617cc0c4270"
3956
+ },
3957
+ {
3958
+ "id": "RL-0194",
3959
+ "sequence": 186,
3960
+ "date": "2026-10-01",
3961
+ "kind": "release",
3962
+ "surface_version": null,
3963
+ "changelog_section": "1.46.0+agent.6",
3964
+ "changelog_sha256": "8cb11f8b85a7b9abe6791d75a7b7915491477bbe2d3e2f01dae2fb5ca458943a",
3965
+ "agent_impact": "sdk storage-check now accepts a release manifest whose SDK version is above its supported range, such as Campaign Cart v0.4.40 (range 0.4.38 only). Targets outside the declared range still report unknown; a manifest whose SDK version is below its supported maximum is still refused.",
3966
+ "compatibility": "compatible",
3967
+ "migration": "none",
3968
+ "changes": [
3969
+ {
3970
+ "class": "named_surface",
3971
+ "path": "docs/sdk-storage-compatibility.md",
3972
+ "surface_entry": "docs/sdk-storage-compatibility.md",
3973
+ "summary": "A release manifest covers the range it declares, which may end below its own SDK version; targets outside it report unknown."
3974
+ }
3975
+ ],
3976
+ "entry_sha256": "f064edf5031f8fd36197984145f5cbcfca3efd78a76982d3132e254b81964884"
3977
+ },
3978
+ {
3979
+ "id": "RL-0195",
3980
+ "sequence": 187,
3981
+ "date": "2026-10-01",
3982
+ "kind": "release",
3983
+ "surface_version": null,
3984
+ "changelog_section": "1.46.0+agent.8",
3985
+ "changelog_sha256": "c3aa9f4e74bac6c2dbeb05fea5bf7da84bebdb556244c7aafe8481a4248149e6",
3986
+ "agent_impact": "Install next-campaign-page-kit without --save-dev: the documented setup command now installs it with --save-exact as a runtime dependency and the toolkit with --save-dev --save-exact. tooling setup warns, and still proceeds, when page-kit is declared only in devDependencies.",
3987
+ "compatibility": "compatible",
3988
+ "migration": "none",
3989
+ "changes": [
3990
+ {
3991
+ "class": "named_surface",
3992
+ "path": "docs/local-setup.md",
3993
+ "surface_entry": "docs/local-setup.md",
3994
+ "summary": "Split the copy-paste install so page-kit is installed with --save-exact and stays in dependencies, while the toolkit keeps --save-dev --save-exact; note the setup warning for a dev-only page-kit."
3995
+ }
3996
+ ],
3997
+ "entry_sha256": "d13bc2cf8c66ea894b8929b103455153e2a7465e316e71d817ac310aabd58526"
3998
+ },
3999
+ {
4000
+ "id": "RL-0196",
4001
+ "sequence": 188,
4002
+ "date": "2026-10-01",
4003
+ "kind": "release",
4004
+ "surface_version": null,
4005
+ "changelog_section": "1.46.0+agent.9",
4006
+ "changelog_sha256": "6e2850725b14b051323f4a75652c02536ca7aafcd6771d317a07614fae6f6b4b",
4007
+ "agent_impact": "When qa run analytics parity picks its candidate automatically (no --analytics-candidate) and that page is not a receipt, a missing Purchase is now analytics-parity:purchase-present MANUAL_REVIEW/WARN with evidence.page_mismatch, not a blocker. Read page_mismatch and pass the candidate receipt with --analytics-candidate to compare Purchase. An explicit candidate still blocks on a missing Purchase.",
4008
+ "compatibility": "compatible",
4009
+ "migration": "none",
4010
+ "changes": [
4011
+ {
4012
+ "class": "named_surface",
4013
+ "path": "docs/qa-and-test-orders.md",
4014
+ "surface_entry": "docs/qa-and-test-orders.md",
4015
+ "summary": "Describe how the automatic parity candidate reports purchase-present when it is not a receipt page, and the page_mismatch evidence."
4016
+ }
4017
+ ],
4018
+ "entry_sha256": "044a9de53405d944e05045dc62f6f4575b0ebe387225b176904bdd8b02ddcf09"
4019
+ },
4020
+ {
4021
+ "id": "RL-0197",
4022
+ "sequence": 189,
4023
+ "date": "2026-10-01",
4024
+ "kind": "release",
4025
+ "surface_version": null,
4026
+ "changelog_section": "1.46.0+agent.11",
4027
+ "changelog_sha256": "28896ab18e07b78d21437c9b397dee67adb8bbc7791bb53ed1507113d638c5e1",
4028
+ "agent_impact": "Doctor's script syntax gate gives one built_output.script_syntax.missing_script warning per resolved URL, not per raw src spelling. A <script> left unclosed at end of file is no longer parsed by doctor or QA and cannot block; doctor warns under built_output.script_syntax.unclosed_script. A script symlink resolving outside the site root is not read; doctor warns under built_output.script_syntax.symlink_outside_site and lists it in scripts_outside_site[]. Symlinks inside the site root are read as before.",
4029
+ "compatibility": "additive",
4030
+ "migration": "none",
4031
+ "changes": [
4032
+ {
4033
+ "class": "named_surface",
4034
+ "path": "docs/build-packet.md",
4035
+ "surface_entry": "docs/build-packet.md",
4036
+ "summary": "The script syntax gate section records resolved-URL grouping of missing-script warnings, the unclosed-script rule and warning, and the symlink rule: followed inside the site root, warned about and not read outside it."
4037
+ }
4038
+ ],
4039
+ "entry_sha256": "9320297f8b6ea5866e56063b8dc4a364025e15d8963207d43e72396bd7eaf13b"
4040
+ },
4041
+ {
4042
+ "id": "RL-0198",
4043
+ "sequence": 190,
4044
+ "date": "2026-10-01",
4045
+ "kind": "release",
4046
+ "surface_version": "1.47.0",
4047
+ "changelog_section": "1.47.0",
4048
+ "changelog_sha256": "e8ea6bd06d018dd35b8f154c05e395034be3fb6a5476ab17ae00e511fabe16b8",
4049
+ "agent_impact": "Surface 1.47.0. The effects contract's --force notes on start, prepare-build and build now name the regeneration of a stale Design Source Package the intake synthesized itself (writes unchanged). compatibility.json names the package version, guarded by a test. Bundled skills carry revision 1.47.0+skills.1 with unchanged text: an agent that loaded 1.46.0+skills.2 should start a fresh session. Install the 1.47.0 package with the documented local setup command.",
4050
+ "compatibility": "compatible",
4051
+ "migration": "none",
4052
+ "changes": [
4053
+ {
4054
+ "class": "compatibility_policy",
4055
+ "path": "compatibility.json",
4056
+ "surface_entry": null,
4057
+ "summary": "Name the package version (1.47.0) instead of the stale 1.34.0."
4058
+ },
4059
+ {
4060
+ "class": "compatibility_policy",
4061
+ "path": "contracts/effects.v1.json",
4062
+ "surface_entry": "contracts/effects.v1.json",
4063
+ "summary": "Name the regeneration of a stale self-synthesized Design Source Package in the --force notes of start, prepare-build and build."
4064
+ },
4065
+ {
4066
+ "class": "compatibility_policy",
4067
+ "path": "contracts/supported-surface.json",
4068
+ "surface_entry": "contracts/supported-surface.json",
4069
+ "summary": "Advance the supported surface to 1.47.0 and refresh the effects contract hash."
4070
+ },
4071
+ {
4072
+ "class": "named_surface",
4073
+ "path": "docs/local-setup.md",
4074
+ "surface_entry": "docs/local-setup.md",
4075
+ "summary": "Pin the local setup install command to the 1.47.0 package."
4076
+ },
4077
+ {
4078
+ "class": "documentation",
4079
+ "path": "docs/orientation-contract-reference.md",
4080
+ "surface_entry": "docs/orientation-contract-reference.md",
4081
+ "summary": "Regenerate the orientation reference for surface 1.47.0."
4082
+ },
4083
+ {
4084
+ "class": "named_surface",
4085
+ "path": "docs/runtime-readiness.md",
4086
+ "surface_entry": "docs/runtime-readiness.md",
4087
+ "summary": "Regenerate the runtime readiness reference for surface 1.47.0."
4088
+ },
4089
+ {
4090
+ "class": "named_surface",
4091
+ "path": "docs/skills-revision.md",
4092
+ "surface_entry": "docs/skills-revision.md",
4093
+ "summary": "Use the current 1.47.0+skills.1 bundle in executable examples."
4094
+ },
4095
+ {
4096
+ "class": "generated_runtime",
4097
+ "path": "package-lock.json",
4098
+ "surface_entry": null,
4099
+ "summary": "Update release metadata for 1.47.0."
4100
+ },
4101
+ {
4102
+ "class": "package_export",
4103
+ "path": "package.json",
4104
+ "surface_entry": null,
4105
+ "summary": "Release 1.47.0."
4106
+ },
4107
+ {
4108
+ "class": "skill",
4109
+ "path": "skills.json",
4110
+ "surface_entry": "skills.json",
4111
+ "summary": "Advance the bundled skill revision to 1.47.0+skills.1 and each skill version one patch."
4112
+ },
4113
+ {
4114
+ "class": "skill",
4115
+ "path": "skills/campaign-lifecycle-orientation/SKILL.md",
4116
+ "surface_entry": null,
4117
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4118
+ },
4119
+ {
4120
+ "class": "skill",
4121
+ "path": "skills/campaign-readback-classification/SKILL.md",
4122
+ "surface_entry": null,
4123
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4124
+ },
4125
+ {
4126
+ "class": "skill",
4127
+ "path": "skills/campaign-run-evidence/SKILL.md",
4128
+ "surface_entry": null,
4129
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4130
+ },
4131
+ {
4132
+ "class": "skill",
4133
+ "path": "skills/contribution-intake/SKILL.md",
4134
+ "surface_entry": null,
4135
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4136
+ },
4137
+ {
4138
+ "class": "skill",
4139
+ "path": "skills/next-campaigns-build/SKILL.md",
4140
+ "surface_entry": null,
4141
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4142
+ },
4143
+ {
4144
+ "class": "skill",
4145
+ "path": "skills/next-campaigns-os-setup/SKILL.md",
4146
+ "surface_entry": null,
4147
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4148
+ },
4149
+ {
4150
+ "class": "skill",
4151
+ "path": "skills/next-campaigns-os/SKILL.md",
4152
+ "surface_entry": null,
4153
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4154
+ },
4155
+ {
4156
+ "class": "skill",
4157
+ "path": "skills/next-campaigns-polish/SKILL.md",
4158
+ "surface_entry": null,
4159
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4160
+ },
4161
+ {
4162
+ "class": "skill",
4163
+ "path": "skills/next-campaigns-qa/SKILL.md",
4164
+ "surface_entry": null,
4165
+ "summary": "Publish the 1.47.0+skills.1 bundle revision."
4166
+ }
4167
+ ],
4168
+ "entry_sha256": "cc03e502869034a55209958ac02cce0c2b637b12e3e678646c93cfc7aa3a4eeb"
4169
+ },
4170
+ {
4171
+ "id": "RL-0199",
4172
+ "sequence": 191,
4173
+ "date": "2026-10-01",
4174
+ "kind": "release",
4175
+ "surface_version": null,
4176
+ "changelog_section": "1.47.0+agent.1",
4177
+ "changelog_sha256": "f0ba2dff1852537f82cac078ccc8b74d78c433476ed72be8814ff3aa4271cc1f",
4178
+ "agent_impact": "Start a new campaign folder with npm init -y: the documented one-line setup command now creates the folder's own package.json first, so npm cannot install page-kit and the toolkit into a parent project.",
4179
+ "compatibility": "compatible",
4180
+ "migration": "none",
4181
+ "changes": [
4182
+ {
4183
+ "class": "named_surface",
4184
+ "path": "docs/local-setup.md",
4185
+ "surface_entry": "docs/local-setup.md",
4186
+ "summary": "Prefix the copy-paste setup command with npm init -y and say why: without a package.json npm installs into the nearest parent folder that has one or a node_modules."
4187
+ }
4188
+ ],
4189
+ "entry_sha256": "d2b022241969d22dbe4e5865f24f34d1a7883e000b62218bbe3f82c0d958b24d"
4190
+ },
4191
+ {
4192
+ "id": "RL-0204",
4193
+ "sequence": 192,
4194
+ "date": "2026-10-01",
4195
+ "kind": "release",
4196
+ "surface_version": null,
4197
+ "changelog_section": "1.47.0+agent.6",
4198
+ "changelog_sha256": "ce5b04b70f31282319d2974ffaeb6352ecb96e89c136e72c7f6f8a32332afab4",
4199
+ "agent_impact": "Help for start, prepare-build and build now lists --deploy-target, --preview-url and --production-url, which intake already accepted; a Start page or docs command using them matches --help.",
4200
+ "compatibility": "compatible",
4201
+ "migration": "none",
4202
+ "changes": [
4203
+ {
4204
+ "class": "cli_surface",
4205
+ "path": "src/cli.mjs",
4206
+ "surface_entry": "start",
4207
+ "summary": "List --deploy-target, --preview-url and --production-url on the start, prepare-build and build usage lines; intake already writes them to the Build Packet deploy block."
4208
+ }
4209
+ ],
4210
+ "entry_sha256": "bbf5c759e5518a3025a0e5f6db6b732e8960721ce45bb4be3821cb58096319e8"
4211
+ },
4212
+ {
4213
+ "id": "RL-0200",
4214
+ "sequence": 193,
4215
+ "date": "2026-10-01",
4216
+ "kind": "release",
4217
+ "surface_version": null,
4218
+ "changelog_section": "1.47.0+agent.7",
4219
+ "changelog_sha256": "b97164cb0efb6b87ee04d95e28679d731173b0998b2f92ddf308e333127ff8e3",
4220
+ "agent_impact": "doctor no longer emits content_residue.anti_pattern or content_residue.urgency_unattested: do not wait for, or act on, a review of the merchant's proof and urgency copy. Reproduce the source design's own reviews, labels, popups, stock counters and countdowns as designed. Bundled skills carry revision 1.47.0+skills.2: an agent that loaded 1.47.0+skills.1 should start a fresh session.",
4221
+ "compatibility": "compatible",
4222
+ "migration": "none",
4223
+ "changes": [
4224
+ {
4225
+ "class": "named_surface",
4226
+ "path": "docs/campaign-build-brief.md",
4227
+ "surface_entry": "docs/campaign-build-brief.md",
4228
+ "summary": "Replace the content-claims section: the merchant's own proof and urgency content is not reviewed and is reproduced as designed; list the content checks that remain."
4229
+ },
4230
+ {
4231
+ "class": "named_surface",
4232
+ "path": "docs/skills-revision.md",
4233
+ "surface_entry": "docs/skills-revision.md",
4234
+ "summary": "Use the current 1.47.0+skills.2 bundle in executable examples."
4235
+ },
4236
+ {
4237
+ "class": "skill",
4238
+ "path": "skills.json",
4239
+ "surface_entry": "skills.json",
4240
+ "summary": "Advance the bundled skill revision to 1.47.0+skills.2 and each skill version one patch."
4241
+ },
4242
+ {
4243
+ "class": "skill",
4244
+ "path": "skills/campaign-lifecycle-orientation/SKILL.md",
4245
+ "surface_entry": null,
4246
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4247
+ },
4248
+ {
4249
+ "class": "skill",
4250
+ "path": "skills/campaign-readback-classification/SKILL.md",
4251
+ "surface_entry": null,
4252
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4253
+ },
4254
+ {
4255
+ "class": "skill",
4256
+ "path": "skills/campaign-run-evidence/SKILL.md",
4257
+ "surface_entry": null,
4258
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4259
+ },
4260
+ {
4261
+ "class": "skill",
4262
+ "path": "skills/contribution-intake/SKILL.md",
4263
+ "surface_entry": null,
4264
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4265
+ },
4266
+ {
4267
+ "class": "skill",
4268
+ "path": "skills/next-campaigns-build/SKILL.md",
4269
+ "surface_entry": null,
4270
+ "summary": "Say to reproduce the source design's own proof and urgency elements as designed; publish the 1.47.0+skills.2 bundle revision."
4271
+ },
4272
+ {
4273
+ "class": "skill",
4274
+ "path": "skills/next-campaigns-os-setup/SKILL.md",
4275
+ "surface_entry": null,
4276
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4277
+ },
4278
+ {
4279
+ "class": "skill",
4280
+ "path": "skills/next-campaigns-os/SKILL.md",
4281
+ "surface_entry": null,
4282
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4283
+ },
4284
+ {
4285
+ "class": "skill",
4286
+ "path": "skills/next-campaigns-polish/SKILL.md",
4287
+ "surface_entry": null,
4288
+ "summary": "Say that proof and urgency copy the source supplies is not residue and is not recorded as an issue; publish the 1.47.0+skills.2 bundle revision."
4289
+ },
4290
+ {
4291
+ "class": "skill",
4292
+ "path": "skills/next-campaigns-qa/SKILL.md",
4293
+ "surface_entry": null,
4294
+ "summary": "Publish the 1.47.0+skills.2 bundle revision."
4295
+ },
4296
+ {
4297
+ "class": "cli_surface",
4298
+ "path": "src/doctor/checks.mjs",
4299
+ "surface_entry": "doctor",
4300
+ "summary": "Stop emitting content_residue.anti_pattern and content_residue.urgency_unattested; the merchant's proof and urgency copy is no longer scanned."
4301
+ }
4302
+ ],
4303
+ "entry_sha256": "396746eab5577268a1eef6e76fa3cffeb989da503c7bb898bf3c80d56d31164b"
4304
+ },
4305
+ {
4306
+ "id": "RL-0201",
4307
+ "sequence": 194,
4308
+ "date": "2026-10-01",
4309
+ "kind": "release",
4310
+ "surface_version": null,
4311
+ "changelog_section": "1.47.0+agent.8",
4312
+ "changelog_sha256": "5dca52cee13425480a82fc46b88aead96c6eb8a293519d11a502a247455538aa",
4313
+ "agent_impact": "A skipped pricing.checkout_price_visible row whose actual names an empty cart and no package selection is expected on a checkout filled from the landing page; do not remove forcePackageId links or add a selector to make it pass. Page-binding evidence on starter-template pages now reads dynamic_unresolved instead of script_unavailable_or_limit.",
4314
+ "compatibility": "compatible",
4315
+ "migration": "none",
4316
+ "changes": [
4317
+ {
4318
+ "class": "named_surface",
4319
+ "path": "docs/qa-and-test-orders.md",
4320
+ "surface_entry": "docs/qa-and-test-orders.md",
4321
+ "summary": "Say when pricing.checkout_price_visible is skipped (empty cart, no package selection on the checkout) and name the Campaign Cart loader paths the page-binding reader skips, including dist/loader.js."
4322
+ }
4323
+ ],
4324
+ "entry_sha256": "4352e041bcffb1cc329abba198d11523a45b94d37572831a1679c20618d2e78c"
4325
+ },
4326
+ {
4327
+ "id": "RL-0202",
4328
+ "sequence": 195,
4329
+ "date": "2026-10-01",
4330
+ "kind": "release",
4331
+ "surface_version": null,
4332
+ "changelog_section": "1.47.0+agent.9",
4333
+ "changelog_sha256": "5d93e171ffd6b8ffeb1ffc8973cc9b23d1e38042c8223ed5f1c5d650f5fe2ffc",
4334
+ "agent_impact": "When resuming a campaign, run readback and next before reading artifacts by hand. Read typed-card proof from the committed sidecar's browser-test-order:<path> assertions; its test_orders array is always empty. readback now prints warn and manual_review rows as such. Bundled skills carry revision 1.47.0+skills.3: an agent that loaded an earlier 1.47.0 revision should start a fresh session.",
4335
+ "compatibility": "compatible",
4336
+ "migration": "none",
4337
+ "changes": [
4338
+ {
4339
+ "class": "documentation",
4340
+ "path": "agents/claude/CLAUDE.md",
4341
+ "surface_entry": "agents/claude/CLAUDE.md",
4342
+ "summary": "Tell a resuming session to run readback and next first, and that the committed QA sidecar's browser-test-order assertions are the typed-card proof."
4343
+ },
4344
+ {
4345
+ "class": "documentation",
4346
+ "path": "agents/codex/AGENTS.md",
4347
+ "surface_entry": "agents/codex/AGENTS.md",
4348
+ "summary": "Tell a resuming session to run readback and next first, and that the committed QA sidecar's browser-test-order assertions are the typed-card proof."
4349
+ },
4350
+ {
4351
+ "class": "documentation",
4352
+ "path": "agents/copilot/copilot-instructions.md",
4353
+ "surface_entry": "agents/copilot/copilot-instructions.md",
4354
+ "summary": "Tell a resuming session to run readback and next first, and that the committed QA sidecar's browser-test-order assertions are the typed-card proof."
4355
+ },
4356
+ {
4357
+ "class": "documentation",
4358
+ "path": "agents/cursor/campaigns-os.mdc",
4359
+ "surface_entry": "agents/cursor/campaigns-os.mdc",
4360
+ "summary": "Tell a resuming session to run readback and next first, and that the committed QA sidecar's browser-test-order assertions are the typed-card proof."
4361
+ },
4362
+ {
4363
+ "class": "named_surface",
4364
+ "path": "docs/skills-revision.md",
4365
+ "surface_entry": "docs/skills-revision.md",
4366
+ "summary": "Use the current 1.47.0+skills.3 bundle in executable examples."
4367
+ },
4368
+ {
4369
+ "class": "skill",
4370
+ "path": "skills.json",
4371
+ "surface_entry": "skills.json",
4372
+ "summary": "Advance the bundled skill revision to 1.47.0+skills.3 and each skill version two patches."
4373
+ },
4374
+ {
4375
+ "class": "skill",
4376
+ "path": "skills/campaign-lifecycle-orientation/SKILL.md",
4377
+ "surface_entry": null,
4378
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4379
+ },
4380
+ {
4381
+ "class": "skill",
4382
+ "path": "skills/campaign-readback-classification/SKILL.md",
4383
+ "surface_entry": null,
4384
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4385
+ },
4386
+ {
4387
+ "class": "skill",
4388
+ "path": "skills/campaign-run-evidence/SKILL.md",
4389
+ "surface_entry": null,
4390
+ "summary": "Say the committed QA sidecar always empties test_orders and URL fields, and that its browser-test-order assertions carry the typed-card proof; publish the 1.47.0+skills.3 bundle revision."
4391
+ },
4392
+ {
4393
+ "class": "skill",
4394
+ "path": "skills/contribution-intake/SKILL.md",
4395
+ "surface_entry": null,
4396
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4397
+ },
4398
+ {
4399
+ "class": "skill",
4400
+ "path": "skills/next-campaigns-build/SKILL.md",
4401
+ "surface_entry": null,
4402
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4403
+ },
4404
+ {
4405
+ "class": "skill",
4406
+ "path": "skills/next-campaigns-os-setup/SKILL.md",
4407
+ "surface_entry": null,
4408
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4409
+ },
4410
+ {
4411
+ "class": "skill",
4412
+ "path": "skills/next-campaigns-os/SKILL.md",
4413
+ "surface_entry": null,
4414
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4415
+ },
4416
+ {
4417
+ "class": "skill",
4418
+ "path": "skills/next-campaigns-polish/SKILL.md",
4419
+ "surface_entry": null,
4420
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4421
+ },
4422
+ {
4423
+ "class": "skill",
4424
+ "path": "skills/next-campaigns-qa/SKILL.md",
4425
+ "surface_entry": null,
4426
+ "summary": "Publish the 1.47.0+skills.3 bundle revision."
4427
+ }
4428
+ ],
4429
+ "entry_sha256": "4780bf77ca1a5ec8bc8728318237eeeff1e88c81a31fcaece6e1a6b4fc6b6d7b"
4430
+ },
4431
+ {
4432
+ "id": "RL-0203",
4433
+ "sequence": 196,
4434
+ "date": "2026-10-01",
4435
+ "kind": "release",
4436
+ "surface_version": null,
4437
+ "changelog_section": "1.47.0+agent.10",
4438
+ "changelog_sha256": "b4bbba3f0ec3aacfe704b5f4690b867ea62d50aa9e41eb911c997bec20872d89",
4439
+ "agent_impact": "A browser-test-order row that says order create rejected: HTTP 400: Duplicate order detected … (duplicate_order …) means the platform refused a repeat order from the same test customer: re-run with a different --test-email-prefix or wait, and do not change the address or the funnel to get past it.",
4440
+ "compatibility": "compatible",
4441
+ "migration": "none",
4442
+ "changes": [
4443
+ {
4444
+ "class": "named_surface",
4445
+ "path": "docs/qa-and-test-orders.md",
4446
+ "surface_entry": "docs/qa-and-test-orders.md",
4447
+ "summary": "Explain the platform's duplicate-order refusal for a reused test customer, how QA names it, and the remedy."
4448
+ }
4449
+ ],
4450
+ "entry_sha256": "22e451d62b473dab8907cfd897028f5add642614c10476fc2138b81657ac23d9"
4451
+ },
4452
+ {
4453
+ "id": "RL-0206",
4454
+ "sequence": 197,
4455
+ "date": "2026-10-01",
4456
+ "kind": "release",
4457
+ "surface_version": null,
4458
+ "changelog_section": "1.47.0+agent.11",
4459
+ "changelog_sha256": "f7a8e2aa340f1dbffcaffe18db69556b5fb1b42a1834fa2749231b99497431ac",
4460
+ "agent_impact": "Pin global_config.sdk_version to the SDK doctor names for the selected template family when the spec has none. To record a standalone page whole, use --wrapper-policy preserve_document_wrappers. A source_hash drift warning is cleared only by re-running intake with --force, not by editing the manifest; make post-build revisions under src/<route>/.",
4461
+ "compatibility": "compatible",
4462
+ "migration": "none",
4463
+ "changes": [
4464
+ {
4465
+ "class": "named_surface",
4466
+ "path": "docs/build-packet.md",
4467
+ "surface_entry": "docs/build-packet.md",
4468
+ "summary": "Say the source_hash drift warning compares the packet's recorded hash, that intake with --force refreshes it, and where post-build revisions belong."
4469
+ },
4470
+ {
4471
+ "class": "cli_surface",
4472
+ "path": "src/doctor/checks.mjs",
4473
+ "surface_entry": "doctor",
4474
+ "summary": "Name the selected family's verified SDK in page_kit.sdk_version.spec_missing, and name the packet hash and intake refresh in source_html.pages.source_hash."
4475
+ }
4476
+ ],
4477
+ "entry_sha256": "9eafe4976eaef63b7b684dcfed146deb010a92482da4f4e83cf04c1322b87073"
4478
+ },
4479
+ {
4480
+ "id": "RL-0205",
4481
+ "sequence": 198,
4482
+ "date": "2026-10-01",
4483
+ "kind": "release",
4484
+ "surface_version": null,
4485
+ "changelog_section": "1.47.0+agent.12",
4486
+ "changelog_sha256": "2569d0ed5531ce2fbc5732e64038f4e6fd793eecdf136455c61f21f00331b164",
4487
+ "agent_impact": "On a local-serve packet served from loopback, a gate with status carried_forward is missing evidence that does not block: follow next past polish to deploy and QA, and expect warn rows and at best ready_with_exceptions. Do not waive or hand-author polish evidence to get there. Hosted and production packets keep the strict gates. polish.hidden_eager_media.no_capturable_routes replaces capture_malformed for an all-template-stock packet.",
4488
+ "compatibility": "compatible",
4489
+ "migration": "none",
4490
+ "changes": [
4491
+ {
4492
+ "class": "named_surface",
4493
+ "path": "docs/qa-and-test-orders.md",
4494
+ "surface_entry": "docs/qa-and-test-orders.md",
4495
+ "summary": "Document the local preview policy: which checks are carried forward, how doctor, next and QA report them, and what stays strict."
4496
+ },
4497
+ {
4498
+ "class": "cli_surface",
4499
+ "path": "src/doctor/inspect.mjs",
4500
+ "surface_entry": "doctor",
4501
+ "summary": "Apply the local preview policy to the polish gate and page-load checkpoint and report carried-forward gates as warnings."
4502
+ },
4503
+ {
4504
+ "class": "cli_surface",
4505
+ "path": "src/doctor/next-step.mjs",
4506
+ "surface_entry": "next",
4507
+ "summary": "Move past the polish stage when its gate is carried forward on the local preview."
4508
+ }
4509
+ ],
4510
+ "entry_sha256": "d29250e168a1a4270672d9426c1fda0670bd29eccefe7fe70c9a1a0f445c0bfe"
4511
+ },
4512
+ {
4513
+ "id": "RL-0207",
4514
+ "sequence": 199,
4515
+ "date": "2026-10-02",
4516
+ "kind": "release",
4517
+ "surface_version": "1.48.0",
4518
+ "changelog_section": "1.48.0",
4519
+ "changelog_sha256": "4ec8df27478899217d11f925983fc17e558aa7c91e0ed9d13c88fb0a26315c39",
4520
+ "agent_impact": "Surface 1.48.0. Ships the same-surface changes 1.47.0+agent.1 through +agent.13 (setup command starts with npm init -y, intake usage lines list the deploy flags, local-preview evidence carried forward as warnings, QA and readback fixes, starter catalog pinned to 37a8d94). The bundled SDK support policy's latest_known_release returns to 0.4.38; freshness results are unchanged because the catalog's verification records name 0.4.40. Bundled skills carry revision 1.48.0+skills.1 with unchanged text: an agent that loaded 1.47.0+skills.3 should start a fresh session. Install the 1.48.0 package with the documented local setup command.",
4521
+ "compatibility": "compatible",
4522
+ "migration": "none",
4523
+ "changes": [
4524
+ {
4525
+ "class": "compatibility_policy",
4526
+ "path": "compatibility.json",
4527
+ "surface_entry": null,
4528
+ "summary": "Name the package version (1.48.0)."
4529
+ },
4530
+ {
4531
+ "class": "compatibility_policy",
4532
+ "path": "contracts/supported-surface.json",
4533
+ "surface_entry": "contracts/supported-surface.json",
4534
+ "summary": "Advance the supported surface to 1.48.0."
4535
+ },
4536
+ {
4537
+ "class": "named_surface",
4538
+ "path": "docs/local-setup.md",
4539
+ "surface_entry": "docs/local-setup.md",
4540
+ "summary": "Pin the local setup install command to the 1.48.0 package."
4541
+ },
4542
+ {
4543
+ "class": "documentation",
4544
+ "path": "docs/orientation-contract-reference.md",
4545
+ "surface_entry": "docs/orientation-contract-reference.md",
4546
+ "summary": "Regenerate the orientation reference for surface 1.48.0."
4547
+ },
4548
+ {
4549
+ "class": "named_surface",
4550
+ "path": "docs/runtime-readiness.md",
4551
+ "surface_entry": "docs/runtime-readiness.md",
4552
+ "summary": "Regenerate the runtime readiness reference for surface 1.48.0."
4553
+ },
4554
+ {
4555
+ "class": "named_surface",
4556
+ "path": "docs/skills-revision.md",
4557
+ "surface_entry": "docs/skills-revision.md",
4558
+ "summary": "Use the current 1.48.0+skills.1 bundle in executable examples."
4559
+ },
4560
+ {
4561
+ "class": "generated_runtime",
4562
+ "path": "package-lock.json",
4563
+ "surface_entry": null,
4564
+ "summary": "Update release metadata for 1.48.0."
4565
+ },
4566
+ {
4567
+ "class": "package_export",
4568
+ "path": "package.json",
4569
+ "surface_entry": null,
4570
+ "summary": "Release 1.48.0."
4571
+ },
4572
+ {
4573
+ "class": "skill",
4574
+ "path": "skills.json",
4575
+ "surface_entry": "skills.json",
4576
+ "summary": "Advance the bundled skill revision to 1.48.0+skills.1 and each skill version one patch."
4577
+ },
4578
+ {
4579
+ "class": "skill",
4580
+ "path": "skills/campaign-lifecycle-orientation/SKILL.md",
4581
+ "surface_entry": null,
4582
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4583
+ },
4584
+ {
4585
+ "class": "skill",
4586
+ "path": "skills/campaign-readback-classification/SKILL.md",
4587
+ "surface_entry": null,
4588
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4589
+ },
4590
+ {
4591
+ "class": "skill",
4592
+ "path": "skills/campaign-run-evidence/SKILL.md",
4593
+ "surface_entry": null,
4594
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4595
+ },
4596
+ {
4597
+ "class": "skill",
4598
+ "path": "skills/contribution-intake/SKILL.md",
4599
+ "surface_entry": null,
4600
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4601
+ },
4602
+ {
4603
+ "class": "skill",
4604
+ "path": "skills/next-campaigns-build/SKILL.md",
4605
+ "surface_entry": null,
4606
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4607
+ },
4608
+ {
4609
+ "class": "skill",
4610
+ "path": "skills/next-campaigns-os-setup/SKILL.md",
4611
+ "surface_entry": null,
4612
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4613
+ },
4614
+ {
4615
+ "class": "skill",
4616
+ "path": "skills/next-campaigns-os/SKILL.md",
4617
+ "surface_entry": null,
4618
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4619
+ },
4620
+ {
4621
+ "class": "skill",
4622
+ "path": "skills/next-campaigns-polish/SKILL.md",
4623
+ "surface_entry": null,
4624
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4625
+ },
4626
+ {
4627
+ "class": "skill",
4628
+ "path": "skills/next-campaigns-qa/SKILL.md",
4629
+ "surface_entry": null,
4630
+ "summary": "Publish the 1.48.0+skills.1 bundle revision."
4631
+ }
4632
+ ],
4633
+ "entry_sha256": "abc8749936f439d33b92b3bfdc1c954d0b38df24e5a80a2e3862123494b47f07"
3831
4634
  }
3832
4635
  ]
3833
4636
  }