Vista generada de dec-0084: r58 — Styx Experience Contract (renderer-agnostic) + Raspberry Pi 3 como `reference efficiency platform`
docs/decisions/dec-0084-experience-contract-pi3-reference.mdVista generada desde
docs/decisions/dec-0084-experience-contract-pi3-reference.md. No se edita a mano:bun run docs:genla regenera ybun run docs:checkfalla si difiere. El estado aquí es el del model: si discrepa con otra página, manda el model.
| Campo | Valor |
|---|---|
| Estado | LOCKED (migrado de un rNN por gate-3: el fichero no declara estado) |
| Referencia legada | r58-experience-contract-pi3-reference-2026-07-15 |
| Fichero | docs/decisions/dec-0084-experience-contract-pi3-reference.md |
Nodos del roadmap que lo citan en refs: ninguno.
Páginas de la documentación que lo citan: ninguna todavía.
Leído de docs/decisions/dec-0084-experience-contract-pi3-reference.md, el fichero canónico.
reference efficiency platformstyx-platform-player-executable-2026-07-15.zip)docs/design/styx-platform-player-executable-2026-07-15/adr-candidates/ADR-CANDIDATE-experience-contract-pi3-reference.mddocs/design/ux-direction-v0.md)Existirá un Styx Experience Contract renderer-agnostic. La web es la autoridad inicial de diseño y prototipado. Raspberry Pi 3 es la reference efficiency platform, NO un cliente degradado. React y QML implementarán el mismo contrato con renderers distintos. Paridad medida en semántica, motion, visual, performance y resiliencia — no pixel-exact cross-rasterizer.
| Categoría | Ejemplos |
|---|---|
| Design tokens | colores, spacing, radii, elevation, focus |
| Typography intent | font families + scales + weights semantics |
| Spacing/radii/elevation/focus | system-wide, lockeados |
| Motion tokens | durations, easings, choreography |
| Navigation semantics | stack, modal, replace, swap |
| Shared-element identities | cross-screen continuity |
| Motion graphs | LibraryCard → DetailHero → PlayerBackdrop → FullscreenVideo → MiniPlayer → LibraryCard |
| Asset contracts | derivatives, sizes, formats, budget per asset |
| Performance budgets | frame time, memory, IO |
| Golden screenshots/keyframes | reference artifacts |
| Reference recordings | canonical journeys |
| Canonical journeys | home → focus → detail → back |
| Semantic traces | state IDs + transition order |
| Allowed renderer-specific tolerances | font rasterization, blur implementation |
1. Home initial render
2. Horizontal and vertical navigation
3. Focus animation
4. Card → detail shared transition
5. Detail → player
6. Player controls
7. Scrubbing/previews
8. Fullscreen → mini-player
9. Back
10. Original card and exact focus restorationAcción inmediata:
execution/02-WEB-PI3-PARITY-GATES.md).Compartir componentes React entre plataformas no es viable ni deseable. Sin un contrato independiente del renderer, la web se convierte en una autoridad implícita imposible de verificar (anti-patrón que r28 §3 prohíbe), y la Pi 3 tendería a degradarse visualmente para cumplir budgets (anti-patrón r25 §0 de "owned e2e").
Waxin tiene UX direction v0 (APROBADA 2026-07-12, vocab LOCKED 12/12) en memoria de proyecto (f-ui-ux-direction-v0.md → docs/design/ux-direction-v0.md). Ese doc cubre:
Pero NO cubre (huecos que este ADR cierra):
Este ADR absorbe UX v0 como input y añade las 4 capas formales que faltan. F-UI owner + Pi 3 renderer co-firman el contract; F-UI produce contrato Y reference artifacts (no sólo componentes — ampliación honesta de la scope actual).
Existirá un Styx Experience Contract documentado en docs/design/experience-contract/ con las 14 categorías enumeradas arriba. Versión semver. Cambios = ADR (o amend a este).
La web es donde el contract se explora e itera primero, porque:
Web NO es autoridad de implementación para otras plataformas — sólo de exploración. La implementación final cross-platform se valida en gate P4 (F-APPLIANCE-PI3).
reference efficiency platform, NO cliente degradadoRaspberry Pi 3 sirve como vara de medir eficiencia:
El contract se firma por:
Discrepancias se resuelven en AskUserQuestion con previews cross-renderer.
| Gate | Scope | Test |
|---|---|---|
G-PI3-SEM | Semantic parity | 100% canonical journeys produce semantic traces equivalentes entre Web y Pi 3 |
G-PI3-MOTION | Motion parity | input→first frame ≤50ms; duration ±10% motion token; elementos/start-end geometry consistentes; sin teleport/blank/loader; interruption/reversal definidos |
G-PI3-VIS | Visual parity | named regions (poster, backdrop, title, actions, focus, player surface, progress, mini-player) cross-renderer |
G-PI3-PERF | Performance | UI frame p95 ≤16.7ms @1920x1080; p99 ≤25ms; input→first ≤50ms; 0 blank frames; 0 sync I/O durante motion medido; detail open/close ×100 sin slope creciente; player open/close ×100 → near baseline; 0 stale-generation append/presentation; 0 focus mismatch post-Back; thermal soak 30min sin progressive degradation |
G-PI3-RES | Resilience | missing/corrupt asset; slow network; disconnect/reconnect; seek storm; close durante pending append; item switch durante preload; CEC/controller repeat storm; thermal throttling; background/resume |
| ID | Riesgo | Probabilidad | Impacto | Mitigación |
|---|---|---|---|---|
| R-D6.1 | Web se vuelve autoridad de implementación | alta | alto | D6.2 explícito: web = autoridad de exploración + prototipado, NO de port de shaders a QML |
| R-D6.2 | Pi 3 pierde identidad Styx (UI "embedded-lite") | media | alto | D6.3 forbidden degradation list + G-PI3-VIS gate |
| R-D6.3 | Performance budgets Pi 3 no honrados | alta | medio | P0 hardware characterization ANTES de fijar budgets; G-PI3-PERF obligatorio |
| R-D6.4 | Discrepancia Web↔Pi 3 no se resuelve con datos | media | alto | D6.4 co-firma + AskUserQuestion con previews; traces semánticas + keyframes como evidencia |
| R-D6.5 | UX v0 (12 vocab LOCKED) entra en conflicto con nuevas capas formales | baja | bajo | D6 = "absorbe como input"; las 4 capas formales (motion graphs + asset contracts + golden artifacts + G-PI3-*) SON ADITIVAS |
| R-D6.6 | Derivatives + asset budgets forzados antes de tener consumidores (speculative) | baja | medio | r28 §3: cada layer termina en consumer real; production/back-end consume antes de inventar |
docs/design/experience-contract/00-INDEX.md existe con las 14 categorías.LibraryCard → ... → LibraryCard) implementado en Web Y en Pi 3 QML.docs/design/styx-platform-player-executable-2026-07-15/adr-candidates/ADR-CANDIDATE-experience-contract-pi3-reference.mddocs/design/styx-platform-player-executable-2026-07-15/00-CANONICAL-DECISIONS-AND-SUPERSESSION.md §6 ("se difiere" Pi 3 chronology)docs/design/styx-platform-player-executable-2026-07-15/execution/02-WEB-PI3-PARITY-GATES.mddocs/design/ui-architecture-proposal.md (F-UI locked 2026-07-06), docs/design/ux-direction-v0.md (UX v0 APROBADA 2026-07-12), docs/handoffs/next-prompt-f-ui-fable-focus.mdf-ui-ux-direction-v0.md, f-ui-deferred-to-prototype.md, f-ui-vendor-components.md, f-ui-facelift-dock-library.md, f-ui-session-14c-ship.md