docs(palabras): handoff · F-A multilenguaje HECHA; F-B siguiente

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
alpha-0.1-sec-dom
dev 3 months ago
parent b2ca761e15
commit 7702784cdc

@ -9,6 +9,46 @@
---
## ESTADO 2026-07-21 — F-A multilenguaje ✅ (à la field-langs) + warnings resueltos
> Dos features nuevas pedidas por el usuario: **F-A** (multilenguaje del CONTENIDO à la
> field-langs) y **F-B** (soporte agentivo — un agente rellena el contenido). F-A HECHA en 3 chunks;
> F-B es lo siguiente (forma sin firmar: ¿qué emite el agente · one-shot vs streaming · dónde entra ·
> doc entero vs caret/rango?). Antes de esto: los dos **warnings** que reportó el usuario resueltos —
> `state_proxy_equality_mismatch` (mi fast-path comparaba proxy↔raw en `syncExternalState`; ahora
> cachea `publishedExternal`, proxy↔proxy; `81dca0f14`) y el ruido de langs (`ts` de engine desalineado
> con `t`/mono; gate del emit a `depth>0`, framework; `45543ab95`). FD.4 (firma perceptual) POSPUESTA a
> futuro por el usuario («complicado para un editor»).
### F-A — multilenguaje (todo en `alpha-0.1-sec-dom` → `gita`)
- **Chunk 1 · motor — `090b27391`**: contrato detrás de `languages` (retrocompatible). `value:
PalabrasDocument | Record<LangCode,PalabrasDocument>`; `languages: LangSpec[]` (1º=activo);
`requiredLangs` (⚠️ NO `required`, colisión con el field bool); `activeLang` bindable + `onLangChange`.
Provider: **historia POR IDIOMA** (`langHistories` Map; el activo es `this.history`, los inactivos en
el mapa; seed en construcción desde `$state.snapshot` del value map; switch nunca cruza pilas de undo).
`writeExternalValue` escribe el mapa ENTERO (raw) en multi. `syncExternalState` resuelve el doc activo
del value (doc|map). Api: `multilingual`/`activeLang`/`setActiveLang`/`languageSpecs`/`missingRequiredLangs`/
`langFilled`; requiredLangs→isInvalid. **58/58** provider (5 nuevos: modo, switch+writeback, historia
por idioma, validez, mono retrocompatible).
- **Chunk 2 · switcher — `fb90bd140`**: `palabras-lang-switcher.svelte` (segmentado ≤3 / Popover-select
>3, punto de completitud por idioma vía `langFilled`, teclado de radiogroup). Lee la `api`. `languageSpecs`
expuesto para honrar etiquetas de LangSpec; `LangCode`/`LangSpec`/`PalabrasLangValues` re-exportados.
- **Chunk 3 · ubicación+CSS+demo — `b2ca761e1`**: switcher por modo (spec del usuario): menubar→fin de
barra (antes de la papelera); flotante/drawer→migas tras «Documento». Prop `langSwitcher` en el
breadcrumb (lo suprime en menubar). **FIX UX**: `setActiveLang` limpia el bloque activo (el id viejo no
vive en el nuevo doc) → el breadcrumb se ocultaba y el switcher desaparecía tras el 1er cambio; ahora,
si es multilenguaje, el breadcrumb muestra siempre al menos «Documento» + switcher (crumbs sintéticos).
CSS sobrio (tokens del chrome, 0 hex). Demo = es/en. **Verificado Playwright**: flotante=1 switcher
(miga, persiste, es↔en cambia el contenido y lo preserva), menubar=1 (barra, sin duplicado), 0 errores.
### Próximo (F-B agentivo) — decisión de forma pendiente
Base existente: `api.importContent(content, format)` + `insertBlockOfType`. Sin firmar: (1) qué emite el
agente (JSON PalabrasDocument nativo · markdown · schema agent-friendly), (2) one-shot vs streaming (bloque
a bloque en vivo), (3) dónde entra (API del host · `/ai` en el slash · botón), (4) doc entero vs caret/rango.
---
## ESTADO 2026-07-19 — UI de F4 CERRADA (listas · merge/split · count/TOC · resize)
> El usuario eligió «las tres en orden» de la **UI de F4** (el MOTOR ya estaba desde 2026-07-14).

Loading…
Cancel
Save

Powered by TurnKey Linux.