# 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`](../../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](_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 `commit-crop`→gramática~~ **(RETIRADO en P1: `apply` 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).