Every interactive morfo now either anchors its W3C APG pattern or
documents that none exists. Real patterns (20): the picker family +
command + search-field anchor combobox (field/input + popup, the
pattern's own popup taxonomy); date-field mirrors time-field's
spinbutton (per-segment contract); rating-group -> radio;
navigation-menu -> disclosure (the APG's own site-nav guidance);
splitter -> windowsplitter; tag-group/tags-input/virtual-grid -> grid;
clipboard/file-upload -> button (the trigger IS the widget);
announce -> alert (live region); form -> the form landmark;
image-adjustments -> slider; table -> table.
The A-1.4 valve (documented exception) is wired like the R-x rules,
and five components whose widget has NO APG pattern say so in their
README instead of faking an anchor: cropper (2-D manipulation),
pagination (nav + composed Buttons), stepper, timeline (display list),
image-picker (media picker). Remaining warns are the four expected:
card/drag-drop/virtual-list host their note when C8 writes their
READMEs, media-player is foreign WIP.
Catalog: 83 PASS / 47 NEEDS-WORK / 0 BROKEN (was 75/50/5 at the
audit's start). npm run check at the 61-error baseline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| **C4** | **A-1.4 APG** (33 morfos) — URL del patrón W3C correspondiente; los sin patrón APG real → nota explícita | pendiente |
| **C4** | **A-1.4 APG HECHA 2026-07-03** — 20 morfos con patrón real (pickers/command/search→combobox · date-field→spinbutton espejo de time-field · rating→radio · nav-menu→disclosure · splitter→windowsplitter · tag-group/tags-input/virtual-grid→grid · file-upload/clipboard→button · announce→alert · form→landmark · image-adjustments→slider · table→table); válvula A-1.4 + notas en 5 READMEs (cropper·pagination·stepper·timeline·image-picker — sin patrón APG real). Restan 4 esperados: card/drag-drop/virtual-list (nota aterriza con su README en C8) + media-player (foráneo) | **HECHA** |
| **C5** | **Sema `expression:`** (~41 morfos con eventos sin declarar) — clasificar pack / family-default / delegated / none por componente (criterios D.4 de book-deviations); `persistence`/`a11ySemantic` donde el evento lo pida (tabla D.9 como referencia) | pendiente |
| **C6** | **Paleta universal** — `paletteScaleDecls` pasa de helper manual (7 usos) a paso del generador para toda recipe con tokens `palette-*` + regen + guard ("data-color sin cascade de paleta = error") | pendiente |
@ -97,3 +97,7 @@ wrapper (code-split) — intentionally NOT in `eidos/index.css`.
| Aspect exactly at a boundary | **diferir** | Edge clamping may relax the locked ratio at the very edge; drag inward restores it. |
| External-CORS images taint the canvas | **diferir** | Blob URLs (the ImagePicker flow) are fine; cross-origin `<img>` needs CORS headers to export. |
| Baking ImagePicker filter/rotation into the crop | **diferir** | v1 crops the source `src`; applying the upstream filter/rotation in the canvas is a pipeline follow-up. |
## Audit exceptions
- `A-1.4 exception:` no APG pattern exists for a 2-D crop/manipulation widget; the closest primitives (slider for the zoom, button for the actions) are composed and carry their own contracts.
@ -103,3 +103,7 @@ from the wrapper (code-split chunk) — intentionally NOT in `eidos/index.css`.
| `highlights` / `shadows` tone curves | **diferir** | Need canvas / SVG `feComponentTransfer`; tracked in ImageAdjustments. |
| Multiple images / gallery | **descartar** | Single image by design (`multiple={false}`); use `file-upload` directly for multi. |
| WAI-ARIA APG pattern | **diferir** | No single APG pattern covers a file-picker composite; the dropzone is a button, the root a labelled `group`. |
## Audit exceptions
- `A-1.4 exception:` no APG pattern covers a media picker (gallery + upload); its trigger/actions are composed `<Button>`s and the overlay follows the composed Popover/Dialog contract.
@ -115,3 +115,7 @@ page-size pertenece a Field/Select + app state, no al recipe de Pagination.
| Cobertura adicional de variantes visuales | **diferir** | El recipe cubre sm/md/lg + solid/outline/ghost. Más variantes requieren caso concreto. |
| Documentación per-prop exhaustiva | **implementar** | Cuando se cierre el ciclo de remediación de cada componente. |
| Tests browser-level del flujo completo (Playwright) | **implementar** | Cobertura visual + interacciones. Se hace en una pasada conjunta de tests. |
## Audit exceptions
- `A-1.4 exception:` the APG defines no pagination pattern; the component is a `nav` landmark whose page controls are composed `<Button>`s (button contract).
- `R-1.5 exception:` no focusable part of its own — items are display (`item` / `title` / `description`); anything focusable inside is consumer content that brings its own treatment.
- `A-1.4 exception:` the APG defines no timeline pattern; the component is a display list — anything interactive inside is consumer content with its own contract.