- natural-time-picker: expression 'delegated' (canon S11; composed children
own every event — clears A-3.1 truthfully; the Picker-generico event debt
stays tracked in its dossier Gaps for the S9 package).
- s-text-virtual-list: drop archetype 'item' from Row (0-event display
surface; item pulled cursor/user-select/hover + a height floor fighting
the canvas-computed row heights, and flipped the classifier to
interactive -> spurious R-1.5). Verified live: rows keep canvas heights,
no overlap, text selectable. Machine now classifies passive (F-1.5
justification already in the dossier).
- time-range-field / field-langs / link-preview: apg declared (spinbutton /
C5 'none — rationale' x2) — clears the three A-1.4 warns.
- button: soma README realigned to the real types (loading/intent/color —
the old pending/pressed/expanded/href surface no longer exists) + the two
stale docblocks from the audit ficha (types aria-label layer leak, wrapper
data-state mention).
- password-field: morfo StrengthMeter comment aligned with types (default
$libs/secs scoring, overridable) + index.ts example updated to the
post-S6 Control composition.
- Affected dossiers' Gaps tables updated (implemented rows removed).
Verified: component-audit 102 PASS (A-3.1/R-1.5-artifact/A-1.4 x3 cleared),
vocab guard exit 0, type baseline 57, eidos contract tests 7/7, stvl checked
in browser. Note: compile.test.ts 'hoists role into staticAttrs' (dialog)
fails on HEAD pre-existing — unrelated to this pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| `Spinner` declara `archetype: 'item'` siendo parte display (ficha F-1: item arrastra estilo interactivo) | **implementar** | Quitar el archetype (doctrina de partes display) + verificación visual de los 3 placements. |
| README soma drifted (documenta `pending`/`pressed`/`expanded`/`href`; los types reales son `loading`/`intent`/`color`/…) + docblocks stale (soma `aria-label` cita `iconOnly` de eidos — F-2; wrapper cita `data-state` — F-3) | **implementar** | Realinear README soma + los 2 docblocks a los types actuales. |
| Cero tests de provider/wrapper (ficha F-7: el buque insignia sin suite) | **implementar** | Suite browser: click→contact-activate, gate disabled/loading, Field-merge, cascada intent/color, placements del spinner — pasada SYS-2. |
| API extendida sobre las referencias (más variantes, `href`→`<a>`) | **diferir** | `Link` posee la navegación; más variantes requieren caso real. |
@ -66,7 +66,6 @@ Referencias: [Bits UI Link Preview](https://bits-ui.com/docs/components/link-pre
| Gap | Disposición | Detalle |
| --- | --- | --- |
| Sin cita `apg:` (warn A-1.4) | **implementar** | One-liner en forma C5: `apg: 'none — pointer-only enhancement; the anchor carries the link semantics'` — mismo cajón que el apg de trf. |
| Fetch/caché de metadatos de URL integrado | **descartar** | El contenido del preview es del consumidor; UIX no hace red. |
| Touch (long-press para abrir) | **diferir** | En coarse el preview no aplica hoy (hover-only); esperar caso real. |
@ -97,7 +97,7 @@ Referencias: [MUI X TimePicker](https://mui.com/x/react-date-pickers/time-picker
| Gap | Disposición | Detalle |
| --- | --- | --- |
| El footer transaccional no tiene semántica propia: delega en el `Picker` genérico cuyo morfo declara 0 eventos (deuda RECONOCIDA in-place en `picker.ts`) — el "Listo" de un picker suena a Button genérico (A-3.1 de la máquina) | **implementar** (en el Picker genérico, iniciativa S9 "ntp integral" + veredicto picker) | `commit-set` fulfill en Accept / `commit-cancel` neutral / `commit-clear` neutral EN el Picker; ntp y los 5 pickers a migrar lo heredan gratis. NO declarar eventos propios aquí — rompería la delegación correcta. Mientras: valorar el one-liner `expression: 'delegated'` (canon S11) que silenciaría A-3.1 diciendo la verdad. |
| El footer transaccional no tiene semántica propia: delega en el `Picker` genérico cuyo morfo declara 0 eventos (deuda RECONOCIDA in-place en `picker.ts`) — el "Listo" de un picker suena a Button genérico | **implementar** (en el Picker genérico, iniciativa S9 "ntp integral" + veredicto picker) | `commit-set` fulfill en Accept / `commit-cancel` neutral / `commit-clear` neutral EN el Picker; ntp y los 5 pickers a migrar lo heredan gratis. NO declarar eventos propios aquí — rompería la delegación correcta. (El morfo ya declara `expression: 'delegated'` — canon S11, 2026-07-10 — así que A-3.1 ya no flaggea; la deuda de fondo sigue siendo del Picker.) |
| 9 hex sin anotación (R-2.1) — los cielos physically-fixed | **implementar** (S9 ntp integral) | Anotar cada línea `/* literal: physically-fixed sky/astro color */`; NO tokenizar (ficha F-2). |
| `data-readonly`/`data-invalid` declarados sin estilo (R-1.3/R-1.4) | **implementar** | Censo de familia pickers. |
| README soma ausente + 0 tests | **implementar** (S9 ntp integral — "iniciativa a medias", SYS-9) | Contrato headless + suite (banda↔valor, chips, defer commit/cancel). |
@ -114,8 +114,6 @@ Input.Password (survey del morfo).
| Gap | Disposición | Detalle |
| --- | --- | --- |
| Cero tests del contrato más rico de la familia (stateBound del caps + clearSignal, toggle+aria-pressed, strength plugable) | **implementar** | Suite prioritaria (pasada SYS-2): el stateBound del caps es exactamente lo que una regresión rompería en silencio. |
| Comentario del morfo stale ("UIX does not bundle a strength algorithm" — los types documentan default `$libs/secs`) | **implementar** | Alinear el comentario del morfo con los types (una línea). |
| Docblock de `index.ts` pre-S6 (ejemplo sin `Control`; el morfo lo declara `optional: false`) | **implementar** | Actualizar el ejemplo al canónico con `Control` (como la demo). |
| API extendida sobre las referencias | **diferir** | Superficie estable; consenso 5-refs ya cubierto. |
| `Row` declara `archetype: 'item'` siendo display (`role="listitem"`, 0 eventos) — el gotcha conocido: item arrastra estilo interactivo Y vuelca el clasificador de la máquina a "interactive", lo que a su vez exige el focus R-1.5 que un display no tiene | **implementar** | One-liner: quitar el archetype de Row (doctrina de partes display). Con ello la clasificación pasa a passive (este README ya trae la justification) y el R-1.5 deja de aplicar. Decisión de morfo — mismo cajón que los one-liners de trf/ntp. |
| Selección/copia de filas (log viewer) | **diferir** | Convertiría la superficie en interactiva de verdad — sería otro componente o una composición; esperar caso. |
| Sticky headers de sección | **diferir** | Con virtual-list (pass conjunto si llega). |
@ -102,7 +102,6 @@ delegación per-endpoint, misma Label compartida, mismo separador.
| Gap | Disposición | Detalle |
| --- | --- | --- |
| El `data-invalid` de RANGO no pinta (end <startvalidaensomaymarcaelroot,perolosendpointssoloreciben`disabled/readonly/required`—noelinvalidderango)|**implementar**|Espejodelgapdelgemelodrf("per-endpointcoloring"):propagarelinvalidderangoalosendpointsotintardesdeelroot.Mismofixparaambosranges(fichaF-3/F-1).|
| Sin cita `apg:` en el morfo (el gemelo y el single citan spinbutton) — warn A-1.4 | **implementar** | Una línea: `apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/'`. |
| Sin evento de rango-completo (ambos endpoints fijados) | **diferir** | Decisión conjunta con date-range-field (ficha F-1 compartida); hoy el commit per-endpoint es el contrato. |
| Tests del wrapper de composición | **implementar** | Pasada SYS-2 (rango inválido, readonly segments por endpoint, placeholder compartido). |
// The switch-press tap comes from the composed ToggleGroup's own pack — no
// per-component tuning needed here.
expression:'family-default',
apg:'none — composite CMS pattern with no single APG entry; the composed Field carries textbox and the switcher is a WAI-ARIA radiogroup in both modes',
// would be noise. The trigger is a native anchor — its semantics (and any
// Link expression) own the interaction (checkpoint fix, 2026-07-07).
expression:'delegated',
apg:'none — pointer-only enhancement with no APG pattern (hover card); the native anchor carries the link semantics and stays fully functional without the preview',
Single-action `<button type="button">` (or `<a>` when `href` is provided) with pressed / loading / disabled state and pending UI helpers. Soma owns behavior; the eidos wrapper layers icons + visual recipes on top.
Single-press action surface — a native `<button>` with loading / disabled
state, a click flow gated on both, and the `contact-activate` perceptual