|
|
|
|
@ -20,6 +20,21 @@
|
|
|
|
|
> 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»).
|
|
|
|
|
|
|
|
|
|
> ⚠️ **REHECHO (`461be12d9`).** Los 3 chunks de abajo (mapa `Record<LangCode,
|
|
|
|
|
> PalabrasDocument>` + historia por idioma) permitían que la ESTRUCTURA divergiera
|
|
|
|
|
> (borrar un bloque en un idioma no lo borraba en otros). El usuario lo señaló:
|
|
|
|
|
> **estructura COMPARTIDA, solo el TEXTO por idioma**. Modelo definitivo (Camino A):
|
|
|
|
|
> UN solo `PalabrasDocument` con `block.i18n?: Record<LangCode,Inline[]>` (idiomas
|
|
|
|
|
> inactivos) + `block.children` (activo) + `doc.activeLang`. Hay UN árbol → ops
|
|
|
|
|
> estructurales aplican a todos los idiomas GRATIS (el i18n viaja vía spread; normalize
|
|
|
|
|
> lo preserva), undo automático. Switch = swap `children↔i18n` (`switchDocumentLanguage`).
|
|
|
|
|
> `value` vuelve a `PalabrasDocument` (uno, no mapa); helpers `foldPalabrasLanguages` /
|
|
|
|
|
> `projectPalabrasLanguage`; `engine/i18n.ts` NUEVO. El SWITCHER y la UBICACIÓN (chunks
|
|
|
|
|
> 2-3) intactos. 60/60 provider (test clave: borrar 4→3 en es Y en) · 570/570 motor ·
|
|
|
|
|
> verificado Playwright. Solo texto INLINE por-idioma; alt/caption/code.language/
|
|
|
|
|
> callout.title COMPARTIDOS en v1. ⚠️ `replaceDocument` (importContent) descarta el i18n
|
|
|
|
|
> — relevante para F-B (el agente que rellena). Detalle abajo es HISTÓRICO (1er intento).
|
|
|
|
|
|
|
|
|
|
### F-A — multilenguaje (todo en `alpha-0.1-sec-dom` → `gita`)
|
|
|
|
|
|
|
|
|
|
- **Chunk 1 · motor — `090b27391`**: contrato detrás de `languages` (retrocompatible). `value:
|
|
|
|
|
|