Planning only: proposal, delta specs, design and tasks for replacing the
store surfaces. No code yet.
The batch adds a public shop read (profile + products) so the store directory,
store home and product-page store card stop reading MOCK_STORES, and so the
cart, payment and order surfaces can name a shop instead of printing "Shop".
Decisions recorded in the design:
- a `shop_profiles` table beside `shops`, so the existing admin and
shop-admin contracts are untouched
- the four store scores stay stored profile values, because there is no review
model and deriving them would dress fabricated numbers as computed ones
- `distanceKm` is dropped rather than faked: there is no geo model behind it
- profiles are filled by seed-demo.mjs, since they hang off shops that script
creates
- order surfaces resolve names from one cached shop read rather than growing a
denormalised shop name on every order payload
openspec validate --strict passes and the change is ready to apply.