12 KiB
Veredictos del checkpoint — auditoría de componentes (2026-07-07)
Checkpoint único post-barrido, resuelto ítem a ítem con el usuario. Este
documento es LA fuente de los veredictos; las fichas ({kebab}.md) y los
censos (_naming.md, _system.md) remiten aquí. Los fixes se ejecutan
DESPUÉS, por paquetes, sobre estas decisiones.
Progreso de ejecución (2026-07-08). P0–P3 ✅ · P4 (N1–N10) ✅ COMPLETO · P5 en curso: S1 ✅ · S5 ✅ · depth ✅ · touch-rows ✅ · S6 + S8 pendientes · P6/P7 ⬜. Detalle, decisiones de método y protocolo de verificación en el handoff
docs/process/continue-audit-fixes-2026-07.md. N9 se extendió a css-field (onInvalid(reason,value,msg?)con'parse'|'custom') por decisión del usuario; touch-rows fija--touch-target: 44px(AAA, sobre el ÁREA no el visual) tras comparar 5 frameworks.
Bloque N — Naming / API
| # | Veredicto |
|---|---|
| N1 | selectionMode en los de selección (migran select, combobox, calendar, toggle-group; listbox/tree-view ya). file-upload conserva multiple como espejo-nativo documentado (clase accept/name) |
| N2 | onValueCommit: OnChangeFn norma ÚNICA de callback terminal. pin-input renombra onComplete; search/password migran su onSubmit crudo; el trío date/time/color AÑADE el callback junto al evento sema |
| N3 | Regla "value salvo palabra de dominio universal" — page (pagination) y files (file-upload) se quedan; carousel corrige value→index/onIndexChange |
| N4 | Sufijo {eje}Value SOLO multi-eje (tree-view queda: selectedValue/expandedValue); mono-eje = value a secas |
| N5 | deselectable catálogo-completo (calendar migra preventDeselect) |
| N6 | openDelay/closeDelay (tooltip migra delayDuration; skipDelayDuration→groupSkipDelay) |
| N7 | Prefijos de capacidad: adjetivo plano > allowX > nunca allowsX (combobox → allowCustomValue; allowHalf queda) |
| N8 | defaultValue PODADO de editable y select — $bindable(inicial) cubre el caso |
| N9 | Validación nivelada a color-field: razón tipada + onInvalid único (tags-input migra validate-boolean y onValueInvalid) |
| N10 | pending (derivado, form) vs loading (prop del consumidor) — distinción documentada; data-attrs quedan |
Las reglas D1–D8 de _naming.md quedan ratificadas en consecuencia. B.11 (splitter sin par bindable) = verificación dirigida, no veredicto.
Bloque S — Sistema
| # | Veredicto |
|---|---|
| S1 | Hooks SIEMPRE data-{c}-{kebab} + guard anti-.eidos-* + codemod de los 22 (cropper 8, button 6, image-picker 6, toggle 1, image-adjustments 1) |
| S2 | Tests DENTRO del paquete de fixes de cada componente (goal-driven) |
| S3a | Criterio de pack canonizado en la doctrina sema: 3 categorías (pack / default-documentado / delegated) con citas + regla del "yet" (deuda declarada lleva plazo) |
| S3b | Ascensos a pack: LOS 10 (veredicto del usuario, más allá de la recomendación 1–7): time-field+color-field (1º), range-calendar, Picker genérico (eventos+carácter), clipboard, drag-drop, listbox, media-player (tras renombrar), onion-menu/menu-dial, month-grid/year-grid, table |
| S4 | README dos niveles ratificado: eidos = puerta del consumidor · soma = contrato headless (date-field plantilla) + component-guide + pass masivo (28 eidos + soma field-langs + doc capa spin-field) |
| S5 | CANONIZAR OUTLINE como el modelo de focus (tras comparativa: Radix Themes/MD3/Chakra v3/RAC = outline; box-shadow = generación Tailwind/Bootstrap). §32 se reescribe con la razón (forced-colors + flicker de segmentos) + nota fechada; el remanente box-shadow de field.css migra |
| S6 | Mandato Field composition CONFIRMADO; R-1.3/R-1.4 (readonly/invalid ×9+2) se resuelven DENTRO como tratamiento único; 6 fields matan alturas duplicadas; --field-segment-height aterriza |
| S7 | CAPA y ÁTOMO PASIVO definidos formalmente (component-guide + markers para la máquina); color-swatch y radio-cards citas canónicas |
| S8 | calendar-surface CONFIRMADO + tokens de rango como API PÚBLICA de la capa (drp deja de tunear --_calendar-range-* ajenos) |
| S9 | Cierre por paquetes de iniciativa (gradient-* junto; ntp integral; metrics+suite) + guard de embarque F-1.x bloqueante SOLO para componentes nuevos |
| S10 | PODAR el data-state muerto de field (los flags son la representación — anti-alias) + declarar enums donde hay unión viva (calendar data-type + los que salgan) |
| S11 | Delegación, LAS 4: (a) expression: 'delegated' en los 2 field-ranges · (b) A-3.1 afinada · (c) párrafo en CANON con la decisión 2026-05-26 + cita radio-cards · (d) guard coherencia pack↔expression (FAIL pack∧≠'pack'; WARN pack∧sin-expression) |
Bloque C — Censos doctrinales
| # | Veredicto |
|---|---|
| C1 | Matriz de intent del deshacer CANONIZADA tal cual (colección-unselect=affirm ×5 · binario-uncheck=neutral · reset/cancel=neutral) — solo doc |
| C2 | (reformulado tras corrección del usuario: los 8 verbos emerge son conjunto CERRADO del cap. 26 — eventos DISTINTOS, no drift) Pass de verificación verbo-a-verbo contra el cap. 26 en fixes; cada overlay justifica su elección con cita; accordion (open/close) ↔ collapsible (expand/collapse) primer caso a adjudicar |
| C3 | Regla de asignación de intent en toggles binarios ESCRITA: marcar-hecho = direccional estático (checkbox ejemplar) · conmutar-modo = fromProp default neutral (switch ejemplar) |
| C4 | QUITAR role='application' de los 4 (calendar/range-calendar/month-grid/year-grid) — línea bits/Radix/M3; verificar con lector de pantalla tras el cambio |
| C5 | Campo apg admite 'none — {rationale}' + A-1.4 exige URL o none-con-razón (ausente = flag SIEMPRE) + pass de declaración |
| C6 | getWeekInfo(locale) en $libs/days AHORA (fallback sáb/dom documentado); calendar deriva weekend + verificar firstDay en el mismo fix |
| C7 | D13: fix de textarea vía el measure del ActiveDom DEL CONTEXTO (precisión del usuario: nunca DOM directo ni import de $libs/dom — solo la instancia inyectada) + censo dirigido (scroll-area prioritario, cropper, splitter, float-panel, virtual-*, carousel) + sonda reflowDetector |
| C8 | Afinar las 4 reglas del script (A-3.1, A-1.4, A-3.6 nombre↔verbo, universo completo con Picker) + los escapados como fixtures de regresión del propio script |
Fixes obvios (aprobados sin veto durante el checkpoint)
aria-selected fuera del Day (calendar+range-calendar; month-grid referencia) ·
2 v.literal ingleses del drp → commonRef · pin-input: eventos + comentario
embustero · cropper (RETIRADO en P1: commit-crop→gramáticaapply es
verbo canónico — extensión de autor, verbs.ts :97 — y el nombre es etiqueta de
dominio autorizada por el libro cap. 8 §1; el vocab-check ya lo señala como
warn-de-descubribilidad, pulido opcional no mandato) · media-player 4
nombres → gramática (estos SÍ: enter-*/exit-* no parsean ni como familia
ni como verbo) · time-range-field apg: · touch-row coarse checkbox/switch
(patrón radio-row §37) · pass de depth (tooltip cierra Tier-A, toast,
float-panel, banner-overlay) · float-panel contrato de teclado (drawer
plantilla) · 9 cielos ntp anotados physically-fixed · literales line-height
anotados/tokenizados · errores de tipos baseline (editable, grid-list) ·
breadcrumb/link-preview línea de razón del silencio.
Lecciones de método registradas durante el checkpoint
- C2: anclar en CANON/libro ANTES de presentar cualquier ítem de vocabulario — presenté una "matriz hipótesis" cuando el cap. 26 ya definía los 8 verbos como eventos distintos (corrección del usuario).
- C7: "dom.measure" se dice completo — la instancia ActiveDom del contexto, nunca acceso directo (corrección del usuario).