|
|
# form — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto)
|
|
|
|
|
|
- **Familia**: fields (orquestación) · **Método**: solo análisis; evidencia por dimensión · demos fuera
|
|
|
- **Capas leídas**: [morfo](../../../src/uix/morfo/components/form.ts) completo (1-90+) · [soma types](../../../src/uix/soma/components/form/types.ts) superficie de props · pack ✓
|
|
|
- **Máquina**: PASS limpio · tests ✓ · README ×2 ✓
|
|
|
|
|
|
## Dimensiones (evidencia leída)
|
|
|
|
|
|
| # | Dimensión | Estado | Evidencia |
|
|
|
| --- | -------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
| 1 | Composición | ✓ | Provider(`<form>` real)/Submit/Reset/ErrorSummary compositivos |
|
|
|
| 2 | Naming | **dato de censo** | **`isPending`/`data-pending`** para async-en-vuelo (morfo :75, types) mientras button/field usan `loading` — DOS nombres para el concepto → \_naming; `disableWhenPristine` en Reset ✓ expresivo; `submitCount` en snippet |
|
|
|
| 3 | Coherencia semántica | ✓ **referencia** | `commit-submit` con intent **fulfill** (:16-24 — el cierre terminal donde la doctrina de button dice que vive el intent fuerte ✓); **`signal-warn-invalid`** untilFix + `requiresFocusMove` + persistent-trace con §6.2 y §9.2 citados y el ciclo clearSignal/clearTarget documentado (:26-53) — CUARTO contrato de referencia de la familia; `commit-reset` neutral ✓ |
|
|
|
| 4 | API | ✓ | Standard-Schema (el adaptador always-async con `untrack` — antecedente de memoria); estados dirty/touched/submitted proyectados |
|
|
|
| 5 | Tokens | ✓ | Gaps por size vía recipe |
|
|
|
| 6 | Sema | ✓ | Pack ✓ — el submit ES el sitio del carácter |
|
|
|
| 7 | Animaciones | ✓ | Sin keyframes |
|
|
|
| 8 | Contrato morfo | ✓ | APG landmark form CORRECTO (:9); `data-{pending,dirty,touched,invalid,submitted}` + aria-busy condicional (:74-88) |
|
|
|
| 9 | A11y | ✓ ejemplar | El focus-move del warn aterriza en el form y `focusFirstInvalid()` perfora al primer campo inválido (documentado :43-48); ErrorSummary con títulos singular/plural interpolados (:12-13) |
|
|
|
| 10 | Theming | ✓ | Focus o1 contenedor |
|
|
|
| 11 | Composición interna | ✓ | ES el otro extremo del OR-merge: Field se registra y deriva dirty/touched/errors de aquí |
|
|
|
| 12 | Estados | ✓ | Ciclo completo submit/reset/pending |
|
|
|
| 13 | Runtime | ✓ | Validación async sin timers crudos (Standard-Schema) |
|
|
|
| 14 | Docs+tests | ✓ | README ×2, suite ✓ |
|
|
|
| 15 | i18n | ✓ | error-summary-title con `{{count}}` + variante singular |
|
|
|
|
|
|
## Hallazgos y propuestas
|
|
|
|
|
|
| ID | Hallazgo | Propuesta |
|
|
|
| ------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
| **F-1** | `isPending` vs `loading` (dos nombres para async-en-vuelo en el catálogo) | Veredicto \_naming: elegir uno (nota: `pending` es el término del form nativo/React 19; `loading` el de controles — puede ser DOS conceptos legítimos [form en vuelo vs control ocupado] — decidir si se unifica o se documenta la distinción) |
|
|
|
|
|
|
## Escalan al sistema
|
|
|
|
|
|
\_naming (pending vs loading).
|
|
|
|
|
|
## Veredictos
|
|
|
|
|
|
_(pendiente — checkpoint post-barrido)_
|