You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/audit/components/_veredictos.md

87 lines
7.9 KiB

feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
# 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).

Powered by TurnKey Linux.