# password-field — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: fields · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/password-field.ts) completo (1-130+; eventos íntegros) · [soma types](../../../src/uix/soma/components/password-field/types.ts) completo (1-110+) · pack sema ✓ existe · css (censo familia: focus outline, alturas, strength 6px) - **Máquina**: NEEDS-WORK — `E-2.3` (sin README eidos) · `R-1.3` (readonly sin estilo) · tests **0** ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | | --- | -------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | Composición | ✓ | Surface consensuada contra 5 refs (Ark/Chakra/Mantine/Prime/Ant — documentado morfo :13-20); partes Input/VisibilityTrigger/CapsLockIndicator/StrengthMeter compositivas | | 2 | Naming | ✓ conforme | `value/onValueChange` ✓; `visible/onVisibilityChange` (par bindable ✓, types :56-59); `onSubmit` crudo (mismo F-4 de search → \_naming); `purpose: 'current'\|'new'` → autocomplete (types :61-66 — API password-manager-aware); `strength` pluggable con default `$libs/secs` (:95-110) | | 3 | Coherencia semántica | ✓ **DOCTRINA DE REFERENCIA** | El morfo documenta con INCIDENTE por qué teclear NO es commit (`commit-input` por tecla disparaba pulse 260ms + beep por letra; alineado con editable/number/search/combobox — :40-47); `commit-toggle-visibility` = commit.toggle + affirm con cita cap. 23 (:59-72); **`signal-notify-caps-state` con `persistence: 'stateBound'`** + ciclo clearSignal razonado (el indicador seguiría 240ms y moriría con CapsLock aún activo — :73-93) | | 4 | API | ✓ | min/maxLength; strength con resultado estructurado (score/label/warnings) y override zxcvbn/OWASP documentado; snippetProps completos (:17-30) | | 5 | Tokens | ✓ con dup | `height-{k}` duplicada (SYS-6); strength-segment 6px = geometría del meter | | 6 | Sema | ✓ | Pack ✓ + el contrato de eventos más fino del catálogo | | 7 | Animaciones | ✓ | Sin keyframes; el settle del commit lo evitó la doctrina de :40-47 | | 8 | Contrato morfo | ✓ ejemplar | APG textbox + ARIA toggle-button del trigger — citas CORRECTAS (:38, :10-11); innovación CapsLock documentada como gap 10/10 refs (:22-26); flags visible/caps-active/focused/empty (:118-121) | | 9 | A11y | ✓ resuelto a nivel contrato | **`a11ySemantic: { requiresLiveRegion: true, reducedMotionFallback: 'text' }`** en el evento de caps (:99-102) — el anuncio para AT es parte del CONTRATO, no un extra; aria-label↔Field.Label documentado | | 10 | Theming | hallazgo | R-1.3 readonly sin estilo (patrón familia) | | 11 | Composición interna | ✓ | OR-merge con Field documentado (types :38-40, :73) | | 12 | Estados | ✓ | visible/caps/focused/empty proyectados; purpose para autofill | | 13 | Runtime | ✓ | Caps vía `getModifierState` en keydown del propio input (documentado :24-26) — sin listeners globales | | 14 | Docs+tests | **gap doble** | Sin README eidos (E-2.3) y **cero tests** — el contrato más rico de la familia sin suite que lo proteja | | 15 | i18n | ✓ | texts show/hide/caps-warning localizados (:32-37); warnings del meter traducibles vía langs (documentado types :103-105) | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **F-1** | Cero tests para el contrato más fino de la familia (toggle+aria, caps stateBound+clearSignal, strength plugable, debounce n/a) | Suite prioritaria en fase de fixes (SYS-2): el stateBound del caps es EXACTAMENTE lo que una regresión rompería en silencio | | **F-2** | Sin README eidos | SYS-4 | | **F-3** | readonly sin estilo (R-1.3) | Tratamiento único de familia | | **F-4** | `onSubmit` crudo (tipado heterogéneo) | Veredicto \_naming | | **F-5** | `height-{k}` duplicada | SYS-6 | | **Nota ✓✓** | La doctrina teclear≠commit (:40-47) y el a11ySemantic del caps son CANON exportable | Citarlos como referencia en el veredicto de field F-2 (Field.Input debe adoptar `commit-submit` al Enter, el patrón que este morfo documenta) y en la doctrina sema | ## Escalan al sistema SYS-2 · SYS-4 · SYS-6 · \_naming (onSubmit crudo) · **la doctrina de :40-47 resuelve el field F-2 a nivel de familia** (commit-submit-en-Enter como patrón de inputs de texto). ## Veredictos _(pendiente — checkpoint post-barrido)_