Repository navigation
fix: give a path-prefixed domain its own UCP settings and no profile - #306
Merged
Dominik Grothaus (dgrothaus-sw) merged 3 commits intoOct 21, 2026
Merged
Conversation
Dominik Grothaus (dgrothaus-sw)
requested a review
from Björn Meyer (BrocksiNet)
October 19, 2026 13:47
Dominik Grothaus (dgrothaus-sw)
requested a review
from a team
as a code owner
October 19, 2026 13:47
The UCP profile, the UCP routes, the MCP proxy, the embedded pages and the storefront `service-meta` link looked up the sales channel from the request URI after core's `RequestTransformer` had removed the domain's path prefix. A domain such as `https://shop.example/de` therefore resolved to the host's root domain. They now resolve the sales channel from core's original request URI (`sw-original-request-uri`). The `service-meta` link now carries the domain's path. Request signatures are now verified against that original URI as well. The agent signs the path with the prefix, so under the `strict` signature policy every correctly signed request to such a domain was refused with `signature_invalid`. Added a decorator of the SDK's `HttpRequestContextFactoryInterface`, so the SDK receives the original URI. The acceptance spec for path-prefixed domains moved from `UcpKnownBlocked` to `UcpProtocol`. It covers the signature policy. Known blocker D8 was removed.
Dominik Grothaus (dgrothaus-sw)
force-pushed
the
fix-path-prefixed-domain-profile
branch
from
October 20, 2026 07:59
a445adb to
7fbe046
Compare
`ucp:config:validate` now reports the warning `path_prefixed_domain` when every storefront domain of a UCP sales channel has a path. Agents only discover a business profile at `/.well-known/ucp` on the root of an origin (RFC 8615, section 3). The UCP specification requires that URL for the profile a business names in its signed webhooks. The warning links RFC 8615. It asks for a domain without a path. The changelog entries for path-prefixed domains now say that such a sales channel gets its own UCP settings. They also say that agents only find such a sales channel on a domain without a path.
Dominik Grothaus (dgrothaus-sw)
force-pushed
the
fix-path-prefixed-domain-profile
branch
from
October 20, 2026 12:36
890cd88 to
304d240
Compare
A domain with a path, such as `https://shop.example/de`, no longer serves a UCP profile. `/de/.well-known/ucp` now answers `404`. Well-known URIs exist only at the root of an origin (RFC 8615, section 3). UCP requires a business profile URL to point to `/.well-known/ucp`. The new `UcpProfileLocator` decides where a domain's profile lives. The `service-meta` link, `api-catalog`, `ai-catalog.json`, `llms.txt`, `agents.md` and the summary of `ucp:setup` ask it. They leave the profile out for a domain with a path. Core passes a base URL only to `ai-catalog.json`, so the new Twig function `swag_agentic_commerce_ucp_profile_url` falls back to the requested domain for the other files. The acceptance specs for path-prefixed domains now expect no profile and no profile links.
Björn Meyer (BrocksiNet)
approved these changes
Oct 21, 2026
Contributor
|
LGTM 🎉 |
Johannes Berthel (joberthel)
approved these changes
Oct 21, 2026
Dominik Grothaus (dgrothaus-sw)
deleted the
fix-path-prefixed-domain-profile
branch
October 21, 2026 13:56
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requests under a sales channel domain with a path, such as
https://shop.example/de, now use that sales channel's own UCP settings. Until now they used the settings of the host's root domain. Under thestrictsignature policy, correctly signed requests to such a domain are no longer refused.A domain with a path no longer serves a UCP profile. Agents look for a business profile only at
/.well-known/ucpon the root of a domain, because well-known URIs exist only there (RFC 8615, section 3). The UCP specification also requires that URL for the profile a business names in its signed webhooks (signatures.md), so conformant platforms reject the webhooks of such a sales channel. Until now/de/.well-known/ucpserved the profile of the host's root domain. It now answers404. Storefront pages,llms.txt,agents.md,ai-catalog.jsonandapi-catalogof such a domain no longer link a profile.ucp:config:validatenow warns about a UCP sales channel whose domains all have a path. A standard way to publish profiles for path-based storefronts is proposed in UCP #937.Merchants who separate languages or markets by path on one host now get each sales channel's own UCP settings. For agents to find a sales channel, it needs a domain without a path, such as
https://de.shop.example.QA can check this with two storefront sales channels on one host, one on
/and one on/de, both with UCP activated./.well-known/ucpserves the profile of the/sales channel./de/.well-known/ucpanswers404. Storefront pages under/de/carry noservice-metalink./de/llms.txthas no UCP section. With the signature policystricton/de, a correctly signed request from an agent to/de/ucp/v1/…is accepted. Under the same policy, a request with a tampered signature is refused.bin/console ucp:config:validatereports the warningpath_prefixed_domainfor the/desales channel.Closes #264
# next versionin both changelogs.