docs(direction): el dir vacio era el shorthand {dir} de Svelte, y el diagnostico del html lang

9.10 cierra el dir=\\` que 6.5 dejo sin investigar: el shorthand emite una
asignacion de PROPIEDAD ademas del atributo, y con undefined queda la cadena
vacia. No estaba en el SSR — lo escribia el cliente al hidratar.

9.11 deja el html lang diagnosticado pero NO ejecutado: la causa es
app.html con lang=en hardcodeado, el arreglo seria corto (la shell ya
registra language en prefs) pero cambia el contrato ownsAttrs de la
proyeccion, y hay un argumento en contra — en apps con i18n por routing el
lang lo fija el servidor. Decision de arquitectura, pendiente de criterio.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-dir-prefs
dev 2 months ago
parent b906dd4077
commit 23d2e94783

@ -1057,3 +1057,60 @@ RTL arrastre derecha 1 → 2 avanza RTL izquierda 2 → 1 retrocede
no la magnitud. Y verifica la dirección ANTES de cada gesto: mi primera pasada
midió creyendo estar en LTR cuando el toggle estaba en RTL, y el resultado
parecía un defecto que no existía.
### 9.10 · El `dir=""` vacío — CERRADO, y era el shorthand de Svelte
Commit `b906dd407`. §6.5 lo había visto en `sidebar` y `tree-view` «sin
investigar de dónde sale». Sale del shorthand **`{dir}`**: para `dir` Svelte
emite una asignación de PROPIEDAD además del atributo, y con `undefined` el
resultado es la cadena vacía en vez de la omisión.
Cazado con un trap sobre `setAttribute` + el descriptor de la propiedad: **dos
escrituras desde el mismo componente compilado**, la segunda por propiedad. Y
**no estaba en el SSR** — `dir=""` no aparece ni una vez en el HTML servido, lo
escribía el cliente al hidratar.
Un valor inválido HEREDA, así que nada pintaba mal; pero contradice la letra
del contrato y hace que `[dir]` matchee.
```svelte
{dir} → {...dir ? { dir } : {}}
```
- **`tree-view` (eidos)**: el wrapper LO NECESITA cuando el valor es concreto —
el recipe selecciona con `[data-tree-view-root]:dir(rtl)` y ese div es el
ANCESTRO del provider que estampa el attr. Ausente, hereda: correcto.
- **26 demos**: el arnés estándar (`data-uix-stage-area` / `-canvas-inner`).
Verificado: en `auto` sólo quedan `<html>` (la proyección) y el provider con su
valor resuelto — cero `dir=""`; en `rtl` los tres lo reciben concreto; al
volver a `auto` desaparece. Las 26 rutas sirven 200 y ninguna trae `dir=""`.
⚠️ **MÉTODO**: mi primer regex también matcheaba dentro de `dir={dir}` y dejó
`dir={...}` — dos ficheros con parse error, que `check` cazó (76 vs 74).
**Contar ficheros modificados NO basta; hay que mirar el diff.**
### 9.11 · `html lang` — diagnóstico completo, decisión PENDIENTE
Causa raíz: **`src/app.html:2` tiene `<html lang="en">` hardcodeado y nadie lo
actualiza nunca.** El `dir` sí se actualiza porque `ActivePrefsDomProjection`
lo proyecta (`PREFS_DOM_ATTRS.DIR`); `lang` no está en esa lista.
Medido con árabe seleccionado: `<html dir="rtl">` ✓ · `<html lang="en">` ✗.
📌 **El `<main lang="en">` NO es el defecto y debe quedarse** — es el residuo
deliberado de §6.4 y es correcto: la prosa de las demos ESTÁ en inglés. Lo que
falla es el `lang` del DOCUMENTO, que debería seguir al idioma de la shell.
El arreglo sería simétrico y corto —la shell ya registra `language` en prefs
(`es·en·fr·de·ar`), que es justo de donde prefs deriva la dirección, así que
`slots.language` ya está disponible en la proyección— pero **cambia un
contrato declarado**: `contracts.ts` fija
`prefsDomProjection.ownsAttrs = ['dir','data-motion','data-sound','data-haptic']`
con su guard en `contracts.test.ts`, más los tests de `dom-projection` y el
README de prefs.
Y hay un argumento real EN CONTRA: en apps con i18n por routing el `lang` lo
fija el servidor, y una proyección de cliente lo pisaría. Es decisión de
arquitectura, no una corrección obvia — por eso §3 lo clasificó «NO de este
hilo». Queda planteada, no ejecutada.

Loading…
Cancel
Save

Powered by TurnKey Linux.