# field-langs — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: fields (campo localizado; recién embarcado `0522efe0`) · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/field-langs.ts) completo (1-90+) · [soma types](../../../src/uix/soma/components/field-langs/types.ts) superficie · sema: `family-default` RAZONADO in-place - **Máquina**: PASS con `R-2.7` (*`line-height: 1.2` literal sin anotar*) · tests **0** · README soma **✗** / eidos ✓ - **Corrección sobre el pass superficial**: el antiguo F-4 ("semántica del conmutador sin declarar") era FALSO — el morfo la declara y razona (abajo). La ficha superficial no había leído el contrato. ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | |---|---|---|---| | 1 | Composición | ✓ ejemplar | Patrón picker A27 citado (morfo :9-13): compone el eidos `` + conmutador in-control cuya FORMA se adapta (segmented ≤3 idiomas · Select ghost >3 o forzado); **Switcher `kind: 'private'`** con razón doble (:77-84): el `commit-toggle` del ToggleGroup es semántica EQUIVOCADA para navegación de contexto + su chrome se colaría en el control — radiogroup propio en segmented | | 2 | Naming | ✓ | `LangSpec = code \| {code,label?,dir?}` (RTL por idioma ✓); `values: Record` bindable; `switcherSide: start\|end` lógico; `switcherMode: auto\|segmented\|select` | | 3 | Coherencia semántica | ✓ **declarada y razonada** | `shift-navigate` con cap. 27 citado (cambio de régimen entre valores por-idioma, NO fijación — :39-52); `expression: 'family-default'` RAZONADO (:29-33): el settle visual es la base de shift, el tap del press lo pone el pack del ToggleGroup compuesto — decisión sema COMPOSICIONAL documentada (modelo para el veredicto SYS-3: family-default puede ser elección arquitectural, no hueco) | | 4 | API | ✓ | `languages` + `required: LangCode[]` + `missingRequired` derivado en snippet (validación por idioma) | | 5 | Tokens | hallazgo | **F-1**: `line-height: 1.2` literal (R-2.7) | | 6 | Sema | ✓ | Ver dim 3 — el caso canónico de default-por-composición | | 7 | Animaciones | ✓ | Sin keyframes | | 8 | Contrato morfo | ✓ | `data-active-lang` emit value + `data-switcher-side` enum + flags; switcher-label localizado | | 9 | A11y | ✓ a verificar en fixes | Radiogroup del switcher (roles por verificar en las partes restantes al ejecutar) | | 10-12 | | ✓ | Compone Field DE VERDAD (el recién llegado hace lo que el mandato SYS-6 pide a los veteranos) | | 13 | Runtime | ✓ | Sin señales de indisciplina en lo leído | | 14 | Docs+tests | **gap doble** | **Cero tests** (draft por idioma, missingRequired, switch de contexto) + README soma ausente (el contrato headless sin doc) | | 15 | i18n | ✓ | Su razón de ser; texts + switcher-label | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | |---|---|---| | **F-1** | `line-height: 1.2` literal (R-2.7) | `var(--leading-ui)` o anotación `/* literal: razón */` | | **F-2** | Cero tests | Suite: valores por idioma (persistencia del borrador al conmutar), missingRequired, modos del switcher — SYS-2 | | **F-3** | README soma ausente (patrón invertido) | Crearlo — SYS-4 | | **Nota ✓✓** | La razón escrita del `family-default` composicional (:29-33) es EL modelo para el veredicto SYS-3 | Citarla en el checkpoint: "default legítimo cuando el carácter lo aporta el compuesto" | ## Escalan al sistema SYS-2 · SYS-4 · **SYS-3 gana su segundo criterio documentado** (composición aporta el carácter → default legítimo). ## Veredictos *(pendiente — checkpoint post-barrido)*