# mask-field — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: fields (Tier-1, decisiones LOCKED 07-05) · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/mask-field.ts) completo (1-110+) · [soma types](../../../src/uix/soma/components/mask-field/types.ts) completo · pack ✓ · engine propio (`mask-engine`, tests ×2 ✓) - **Máquina**: PASS con `R-1.3` · tests **2** ✓✓ · README ×2 ✓ ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | | --- | -------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | Composición | ✓ | Single-input compositivo; el morfo RAZONA por qué NO se fragmenta en fake-segments (eso es de Date/Time — :18-20) | | 2 | Naming | ✓ con dato nuevo | `value/onValueChange` ✓ + **`onValueCommit: OnChangeFn`** para blur/Enter (types :75-76) — TERCER patrón de callback terminal del catálogo (vs `onSubmit` crudo de search/password) → fila clave en \_naming; `showMask/placeholderChar/definitions` (decisiones locked); `unmaskedValue` como derivado read-only en snippet (:19-20) | | 3 | Coherencia semántica | ✓ | `commit-set` solo en confirmación — la doctrina teclear≠commit citada y alineada (morfo :43-47); `expression: 'pack'` + pack ✓ | | 4 | API | ✓ ejemplar | Alfabeto de tokens documentado con escape y cola opcional (`\9`, `[ ... ]` — types :47-53); `definitions` merge-over con RegExp por slot (:55-60); modelo de valor = string enmascarado con la convención de la industria citada (morfo :25-28) | | 5 | Tokens | ✓ con dup | `height-{k}` duplicada (SYS-6); tokens 9-A-\* del engine per decisión | | 6 | Sema | ✓ | Pack ✓ | | 7 | Animaciones | ✓ | `showMask` revela esqueleto sin keyframes | | 8 | Contrato morfo | ✓ | APG textbox CORRECTO (:41 — un solo textbox, no combobox como search); `data-complete` con razón (intrínseco a máscara, gate de submit sin re-derivar — :74-77); flags focused/empty ✓ | | 9 | A11y | ✓ con doctrina propia | **Valor anunciado siempre veraz**: los keystrokes rechazados REVIERTEN visiblemente en vez de tragarse en silencio (el lector siempre relee el valor comprometido — morfo :21-23) — doctrina exportable a cualquier input con formateo | | 10 | Theming | hallazgo | R-1.3 readonly sin estilo (patrón familia) | | 11 | Composición interna | ✓ documentada | Field integration EXPLÍCITA: el Input se registra en `Field.inputId` → Label/Helper/Error se auto-cablean (types :35-38) — de lo poco de la familia que documenta el wiring | | 12 | Estados | ✓ | complete/focused/empty + OR-merge; `name` envía el valor ENMASCARADO (documentado :89) | | 13 | Runtime | ✓ | Engine puro con suite propia; sin timers/DOM crudo | | 14 | Docs+tests | ✓ el mejor de la familia | 2 suites (engine + provider) | | 15 | i18n | ✓ | translationRef en aria-label; texts morfo | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------ | | **F-1** | readonly sin estilo (R-1.3) | Tratamiento único de familia | | **F-2** | `height-{k}` duplicada | SYS-6 | | **Nota ✓** | `onValueCommit` (OnChangeFn) es candidato a CANON del callback terminal (vs `onSubmit` crudo) — coincide con la convención Radix/bits del slider | Veredicto \_naming: unificar el trío de patrones | ## Escalan al sistema \_naming (callback terminal: onValueCommit vs onSubmit vs solo-evento) · SYS-5 · SYS-6 · doctrina "valor anunciado veraz" exportable. ## Veredictos _(pendiente — checkpoint post-barrido)_