Skip to content

Commit edd8103

Browse files
authored
Merge branch 'main' into feat/semrush-market
2 parents cb8d8a8 + 9973085 commit edd8103

30 files changed

Lines changed: 2128 additions & 527 deletions

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
# [1.656.0](https://github.com/adobe/spacecat-api-service/compare/v1.655.2...v1.656.0) (2026-07-16)
2+
3+
4+
### Features
5+
6+
* **serenity:** edit prompts in place — id-stable rename and tag update with 409 conflict mapping ([#2833](https://github.com/adobe/spacecat-api-service/issues/2833)) ([5f7a1bf](https://github.com/adobe/spacecat-api-service/commit/5f7a1bf088a57945cd8656436c44dfbad8c9296d)), closes [Hi#level](https://github.com/Hi/issues/level)
7+
8+
## [1.655.2](https://github.com/adobe/spacecat-api-service/compare/v1.655.1...v1.655.2) (2026-07-16)
9+
10+
11+
### Bug Fixes
12+
13+
* **edge-optimize:** derive CloudFront connector externalId from org (server-side), drop client-supplied model ([#2804](https://github.com/adobe/spacecat-api-service/issues/2804)) ([cd77f7a](https://github.com/adobe/spacecat-api-service/commit/cd77f7a5b540b3f5c46bb950c4b1fd6ddf92ccf7))
14+
15+
## [1.655.1](https://github.com/adobe/spacecat-api-service/compare/v1.655.0...v1.655.1) (2026-07-16)
16+
17+
18+
### Bug Fixes
19+
20+
* **llmo-akamai:** apply Optimize-at-Edge rules via JSON Patch, not full-tree PUT ([#2820](https://github.com/adobe/spacecat-api-service/issues/2820)) ([e88e7a9](https://github.com/adobe/spacecat-api-service/commit/e88e7a92744cf59ce44a283454f682c85cfe792e)), closes [adobe/spacecat-shared#1813](https://github.com/adobe/spacecat-shared/issues/1813) [#2407](https://github.com/adobe/spacecat-api-service/issues/2407)
21+
22+
# [1.655.0](https://github.com/adobe/spacecat-api-service/compare/v1.654.4...v1.655.0) (2026-07-16)
23+
24+
25+
### Features
26+
27+
* **aso-overlay:** CloudWatch EMF instrumentation for READ path (SITES-48140) ([#2822](https://github.com/adobe/spacecat-api-service/issues/2822)) ([4606c73](https://github.com/adobe/spacecat-api-service/commit/4606c7395aab9bd214ee5a506e0df770fb3ccd7b)), closes [adobe/spacecat-infrastructure#675](https://github.com/adobe/spacecat-infrastructure/issues/675)
28+
29+
## [1.654.4](https://github.com/adobe/spacecat-api-service/compare/v1.654.3...v1.654.4) (2026-07-16)
30+
31+
32+
### Bug Fixes
33+
34+
* **serenity:** enable bounded-backoff retry on the Semrush REST transport ([#2766](https://github.com/adobe/spacecat-api-service/issues/2766)) ([c923da3](https://github.com/adobe/spacecat-api-service/commit/c923da369ff554f4469056082d026cb8c35231a2))
35+
36+
## [1.654.3](https://github.com/adobe/spacecat-api-service/compare/v1.654.2...v1.654.3) (2026-07-15)
37+
38+
39+
### Bug Fixes
40+
41+
* **aso-overlay:** add Surrogate-Key header for Fastly targeted purge (SITES-48140) ([#2826](https://github.com/adobe/spacecat-api-service/issues/2826)) ([9c1fa79](https://github.com/adobe/spacecat-api-service/commit/9c1fa79f9f03920007a8c24a08c42e25db6f5284)), closes [experience-platform/mystique#3381](https://github.com/experience-platform/mystique/issues/3381) [experience-platform/mystique-deploy#568](https://github.com/experience-platform/mystique-deploy/issues/568) [mystique#3381](https://github.com/mystique/issues/3381) [mystique#3381](https://github.com/mystique/issues/3381) [adobe/spacecat-api-service#2822](https://github.com/adobe/spacecat-api-service/issues/2822)
42+
143
## [1.654.2](https://github.com/adobe/spacecat-api-service/compare/v1.654.1...v1.654.2) (2026-07-15)
244

345

docs/index.html

Lines changed: 43 additions & 35 deletions
Large diffs are not rendered by default.

docs/openapi/llmo-api.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6141,6 +6141,23 @@ site-llmo-akamai-plan:
61416141
items:
61426142
type: string
61436143
description: Top-level rule names after the merge.
6144+
validated:
6145+
type: boolean
6146+
description: >-
6147+
Whether the dry-run PAPI validation ran. When false, it could not be performed
6148+
and errors/warnings fall back to the base version's own warnings.
6149+
errors:
6150+
type: array
6151+
items:
6152+
type: object
6153+
additionalProperties: true
6154+
description: PAPI validation errors for the change deploy would make (empty if none).
6155+
warnings:
6156+
type: array
6157+
items:
6158+
type: object
6159+
additionalProperties: true
6160+
description: PAPI validation warnings for the change deploy would make.
61446161
merged:
61456162
type: object
61466163
additionalProperties: true

docs/openapi/schemas.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10976,7 +10976,7 @@ SerenityPrompt:
1097610976
properties:
1097710977
semrushPromptId:
1097810978
type: string
10979-
description: Upstream prompt id. Changes whenever the prompt is re-created (e.g. on PATCH).
10979+
description: Upstream prompt id. Stable across edits — PATCH updates the prompt in place and echoes the same id.
1098010980
geoTargetId:
1098110981
type: integer
1098210982
minimum: 1
@@ -11133,13 +11133,13 @@ SerenityCreatePromptsResponse:
1113311133
SerenityUpdatePromptRequest:
1113411134
type: object
1113511135
description: |
11136-
Replace the prompt's text and tags. Carries the owning slice in
11136+
Edit the prompt's text and tags in place. Carries the owning slice in
1113711137
`geoTargetId` + `languageCode` so the server can resolve the upstream
1113811138
project without scanning. `geoTargetId`, `languageCode`, and `text` are
11139-
always required — the upstream provider's API has no in-place update or
11140-
GET-by-id, so the server runs DELETE-old + POST-new and treats the body
11141-
as the full next state. `tagIds` (non-empty) is required; tags are addressed
11142-
by upstream id and never by name, so a `tags` key is rejected with 400.
11139+
always required — the upstream provider's API has no GET-by-id, so the
11140+
body is treated as the full next state. `tagIds` (non-empty) is required;
11141+
tags are addressed by upstream id and never by name, so a `tags` key is
11142+
rejected with 400.
1114311143
required: [geoTargetId, languageCode, text, tagIds]
1114411144
properties:
1114511145
geoTargetId:
@@ -11153,7 +11153,7 @@ SerenityUpdatePromptRequest:
1115311153
type: array
1115411154
items: { type: string }
1115511155
minItems: 1
11156-
description: Upstream tag ids to attach to the replacement prompt.
11156+
description: Upstream tag ids the prompt carries after the edit (full replacement set).
1115711157

1115811158
SerenityBulkDeletePromptsRequest:
1115911159
type: object

docs/openapi/serenity-api.yaml

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -154,21 +154,22 @@ v2-serenity-prompt-by-id:
154154
tags: [serenity]
155155
summary: Update a Serenity prompt
156156
description: |
157-
Body carries `{geoTargetId, languageCode, text}` plus exactly one of
158-
`tags` (names) or `tagIds` (upstream ids, the id-based write path —
159-
serenity-docs#24). `geoTargetId`/`languageCode`/`text` are always
160-
required — the upstream provider has no in-place update (and no
161-
GET-by-id), so the implementation is DELETE-old + POST-new + publish
162-
and the payload is treated as the full next state. Clients always
163-
have the current text/tags(-ids) available locally (from the list
164-
call that rendered the edit form), which keeps this endpoint a
165-
single straight line and avoids the per-request pagination
166-
"preserve-on-omit" semantics would force.
157+
Body carries `{geoTargetId, languageCode, text, tagIds}` — all
158+
required; tags are addressed by upstream id, never by name
159+
(serenity-docs#24), and the payload is treated as the full next
160+
state. Clients always have the current text/tagIds available
161+
locally (from the list call that rendered the edit form), which
162+
keeps this endpoint a single straight line and avoids the
163+
per-request pagination "preserve-on-omit" semantics would force.
167164
168-
An explicit empty `tags: []` clears tags (not applicable to
169-
`tagIds`, which must be non-empty when present). The response
170-
carries the new `semrushPromptId` (the value changes on every
171-
upstream re-create).
165+
The edit is applied IN PLACE upstream (serenity-docs#63): the text
166+
and the tag set are written without deleting the prompt, so the
167+
response echoes the UNCHANGED `semrushPromptId` and anything keyed
168+
to that id survives the edit. A `text` that exactly matches a
169+
DIFFERENT prompt's text in the same slice is refused with 409
170+
`conflict`, with nothing changed upstream. The edit lands in the
171+
upstream draft layer and is published as part of the request (same
172+
publish contract as create).
172173
operationId: updateSerenityPrompt
173174
security:
174175
- ims_key: []
@@ -186,6 +187,11 @@ v2-serenity-prompt-by-id:
186187
'400': { $ref: './responses.yaml#/400' }
187188
'404':
188189
description: Organization, brand, slice, or prompt not found, or serenity is not active for the organization.
190+
'409':
191+
description: The new text exactly matches a different prompt's text in this slice; nothing was changed upstream.
192+
content:
193+
application/json:
194+
schema: { $ref: './schemas.yaml#/SerenityErrorResponse' }
189195
'502':
190196
description: Upstream returned a non-2xx response.
191197
content:

0 commit comments

Comments
 (0)