Frontend Projection Compatibility¶
Status: CURRENT Last consolidated by: BC-068D This document describes the current frontend projection compatibility boundary.
BC-064C¶
BC-064C keeps the historical frontend payloads unchanged while moving concrete composition out of src/ReadService.
ProductModelsFrontendReadServicenow depends on injected contracts:CatalogItemProjectionMapperFacetProjectionMapperProductViewProjectionMapper- the WordPress frontend wrapper builds the service with the legacy adapters;
PublicNavigationReadServicenow returnsNavigationProjection;FrontendProjectionArrayShimstays in the WordPress wrapper, where the historical menu array is produced.
This keeps:
- route behavior unchanged;
- legacy payload keys unchanged;
- frontend rendering unchanged;
- SQL and WordPress concerns outside
src/ReadService.
BC-064D3A / BC-064D3B¶
The frontend compatibility boundary stays unchanged while DTO ownership moves:
- Catalog DTO ownership moved to
Contracts\Projection\Catalog - Product DTO ownership moved to
Contracts\Projection\Product - Offer DTO ownership moved to
Contracts\Projection\Offer
The frontend still receives the same projection shapes and the same historical array payloads through explicit adapter shims.
BC-064D3C applies the same compatibility rule to public navigation:
- canonical Navigation DTO ownership moved to
Contracts\Projection\Navigation - the public frontend still consumes the same legacy tree arrays through
FrontendProjectionArrayShim - no menu ordering, labels, URLs or fallback shape changed
BC-064D3D keeps the Product Models composition identical while finishing mapper-contract decoupling:
- facet mappers still produce the same facet payloads
- product view mappers still produce the same product payloads
- no extra shim or array conversion is introduced into
src/ReadService
BC-064D4 adds the final certification point:
- the frontend still consumes the same projection wrappers and the same legacy arrays;
- wrapper FQCNs remain source-compatible, but canonical ownership is now
Contracts\Projection; - no frontend adapter now depends on
src/ReadService -> Adaptershortcuts or on directContracts -> Projectionimports.