# natural-time-picker — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: pickers (reloj natural: cielo/astros) · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/natural-time-picker.ts) COMPLETO (117 líneas) · delegación verificada en [picker](picker.md) genérico - **Máquina**: NEEDS-WORK — `A-1.4` (sin URL APG) · `R-2.1` (9 colores crudos) · `R-1.3`/`R-1.4` (readonly/invalid sin estilo) · `E-2.3` (sin README) · tests **0** - **CORRECCIÓN MAYOR sobre el pass superficial**: el "A-3.1 interactivo con 0 eventos = sema ciego por diseño roto" era INJUSTO. El header del morfo (:4-19) documenta la composición completa (Picker genérico = host transaccional Listo/Cancelar/Borrar + deferValue · TimeField segmentado · Slider banda · Button steppers/chips · PickerShell footer) y la razón: "Open/close are delegated to the composed Popover, so this morfo declares no dialog semantics **and no events**". `scope: ['soma','eidos']` (sin sema :23) — coherente. La delegación es REAL y está escrita… pero ver F-1: el eslabón transaccional delega en un Picker que AÚN no tiene eventos. ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | |---|---|---|---| | 1 | Composición | ✓ documentada | Header :10-15: solo el gradiente daylight es bespoke; todo lo demás compone primitivos del sistema — el espíritu "compose existing components" cumplido y ESCRITO | | 3 | Coherencia semántica | **gap heredado, no propio** | **F-1**: la cadena semántica tiene un eslabón hueco — el valor comete por TimeField (commit-set ✓ del embebido), pero Listo/Cancelar/Borrar fluyen por el Picker genérico cuyo morfo declara 0 eventos (deuda RECONOCIDA en picker :18-19 "candidate commit-* events for a later sema pass"). El "Listo" de un picker (el gesto más commit del patrón) suena a Button contact genérico | | 5 | Tokens | hallazgo matizado | Los 9 hex (R-2.1) son los CIELOS — la excepción *physically-fixed* existe justo para esto PERO exige anotación `/* literal: … */` línea a línea y no la llevan → F-2 (anotar, NO tokenizar) | | 8 | Contrato morfo | ✓ moderno | `data-state` CON values `['open','closed']` enumerados (:39,:75,:96 — el patrón que calendar F-3 pide) + `data-starting-style`/`data-ending-style` condicionales (:97-106, hooks de motion) + flags disabled/readonly/required/invalid | | 9 | A11y | gap menor | Trigger completo (haspopup dialog + expanded + label vía translationRef ✓ :76-85); Content con Escape/Tab trap (:109-113); **F-3**: sin cita APG (A-1.4) — la razón "Popover posee el diálogo" merece la cita del patrón compuesto como hace date-picker (apg ×2) | | 12 | Estados | hallazgo máquina | R-1.3/R-1.4 readonly/invalid sin materializar | | 14 | Docs+tests | **gap triple** | Sin README (ninguno de los dos niveles), sin tests | | 15 | i18n | ✓ | texts + translationRef localizados (:24-27,:82) | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | |---|---|---| | **F-1** | El footer transaccional no tiene semántica (deuda del Picker genérico, reconocida allí) | Resolver EN el Picker genérico (commit-set fulfill en Accept / commit-cancel neutral / commit-clear neutral) — ntp y los 5 pickers a migrar lo heredan gratis; NO declarar eventos propios aquí (rompería la delegación correcta) | | **F-2** | 9 hex sin anotación (R-2.1) | Anotar cada uno `/* literal: physically-fixed sky/astro color */`; NO tokenizar | | **F-3** | Sin cita APG (A-1.4) | Citar el patrón compuesto (dialog vía Popover) como date-picker; valorar además slider APG para la banda | | **F-4** | readonly/invalid sin estilo | Patrón familia | | **F-5** | Sin README ×2, sin tests | Paquete de estándares completo (SYS-9: iniciativa a medias) | ## Escalan al sistema SYS-2 · SYS-4 · SYS-9 · **corrección del censo A-3.1**: ntp EXONERADO con matiz (delegación documentada; la deuda vive en picker :18-19) — pin-input queda como el único caso desnudo · la máquina debe leer scope-sin-sema + header de composición antes de flaguear A-3.1. ## Veredictos *(pendiente — checkpoint post-barrido)*