Add the experience service with sites through analytics/AI hooks, migrations through 0011, and phase docs/manifests marking the track complete. Co-authored-by: Cursor <cursoragent@cursor.com>
4.3 KiB
4.3 KiB
Phase: Experience Localization, RTL/LTR & Media (11.5)
| Field | Value |
|---|---|
| Identifier | experience-11.5 |
| Status | Complete |
| Owner | Platform |
| Module(s) | Site Locale Bindings, Localizations, Media Refs |
| Service(s) | experience (Torbat Pages) |
| Depends On | experience-11.4 |
| ADR(s) | ADR-016, ADR-008 |
| Manifest | phase-manifest.yaml |
Enterprise Phase Discovery Record
| Input | Finding |
|---|---|
| Roadmap / manifest | Next unfinished Experience phase = experience-11.5 Localization, RTL/LTR & Media |
| Prior handover | phase-11-4.md — templates complete; no localization/media pipeline |
| Boundaries | Experience owns locale bindings + localization shells + media refs; binaries only via File Storage; no Core DB access |
| Existing codebase | Foundation ExperienceLocaleProfile (11.0) provides language/direction catalogs; themes already expose DirectionMode shells; StorageProvider contract exists |
| Missing vs DoD | No site↔locale bindings, no target localizations, no media-ref aggregates/APIs, capabilities still at 11.4 |
Derived capabilities: bind locale profiles (with concrete RTL/LTR) to sites; upsert multi-locale content shells for experience targets; attach media via Storage file refs only. Not forms, surveys, appointments, SEO/PWA — those remain Phase 11.6+.
Objective
Deliver Localization, first-class RTL/LTR directionality beyond foundation locale profiles, and media references that store Storage refs only (no binaries in experience_db) on the Experience Platform.
Scope
In Scope
SiteLocaleBinding(site ↔ locale profile, locale_code, text_direction rtl/ltr, default flag)ExperienceLocalization(target_type/target_id/locale/text_direction + title/summary/content_json shells)ExperienceMediaRef(storage_file_refonly; kind/alt/caption/locale; reject data-URI / binary metadata keys)- Policies, specifications, commands, queries
- Pagination / filter / sort / search on list APIs
- Permissions
experience.locales.*andexperience.media_refs.* - Events
experience.site_locale.*/experience.localization.*/experience.media_ref.* - Alembic
0006_phase_115_localization_media(head); version0.11.5.0 /capabilitiesflags:site_locale_bindings,localizations,rtl_ltr,media_refs,storage_media_refs_only
Out of Scope
- Forms / surveys / appointment page shells — Phase 11.6
- SEO metadata / sitemap / PWA — Phase 11.7
- Owning File Storage blobs or binary columns in
experience_db - Form submission / booking engines
Models
| Entity | Soft delete | Audit | Tenant | Optimistic lock |
|---|---|---|---|---|
| SiteLocaleBinding | Yes | Yes | Yes | Yes |
| ExperienceLocalization | Yes | Yes | Yes | Yes |
| ExperienceMediaRef | Yes | Yes | Yes | Yes |
Permissions
experience.locales.view|create|update|delete|manage
experience.media_refs.view|create|update|delete|manage
Events
experience.site_locale.assigned|updated|replaced|unassigned
experience.localization.upserted|updated|archived
experience.media_ref.created|updated|archived
APIs
| Method | Path |
|---|---|
| * | /api/v1/site-locale-bindings |
| * | /api/v1/localizations (upsert + list/get/patch/delete) |
| * | /api/v1/media-refs |
Artifact coverage (DoD)
| Artifact | Status |
|---|---|
| Discovery | This record |
| Policies / Specs / Commands / Queries | Implemented |
| Soft delete / Optimistic lock / Audit / Tenant | Yes |
| Pagination / Filter / Sort / Search | Yes |
| Background jobs | N/A |
| Forms / Surveys | Explicitly out of scope |
Tests
- Health / capabilities reflect phase 11.5
- Site locale binding + localization upsert lifecycle
- Media ref create + reject data-URI / binary metadata
- Tenant isolation + no binary columns on media model
- Architecture / permission / migration / docs
Completion Criteria
- Localization and media-ref APIs + isolation tests green
- No form/survey/appointment engines
- Docs + handover + manifests updated to
0.11.5.0