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
# editable — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto)
- **Familia**: fields (texto in-place preview↔edit) · **Método** : solo análisis; evidencia por dimensión · demos fuera
- **Capas leídas**: [morfo ](../../../src/uix/morfo/components/editable.ts ) completo (1-110+) · [soma types ](../../../src/uix/soma/components/editable/types.ts ) completo · provider dirigido (autoResize :30,:374-377) · pack ✓
- **Máquina**: PASS limpio · tests ✓ (con 1 error de tipos en la línea base de `check` — `data-editing` indexado, a absorber en fixes) · README × 2 ✓
## Dimensiones (evidencia leída)
| # | Dimensión | Estado | Evidencia |
| --- | -------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Composición | ✓ | Area/Control/Preview/Input/EditTrigger(+Submit/Cancel) compositivos |
| 2 | Naming | **4 datos de censo** | ** `defaultValue` ** (types :16-21 — PRIMER uncontrolled-initial del catálogo, doc React-style "read once at mount") → ¿canon o redundante con `$bindable(inicial)` ? · par `onValueChange` (cambia el comprometido) + `onValueCommit` (cada commit) :60-63 — distinción sutil que el resto no hace · ** `onValueRevert: () => void` ** crudo SIN payload (:64-65 — encaja la regla "crudo solo señal sin dato" ✓) · `editing/onEditingChange` par bindable ✓ |
| 3 | Coherencia semántica | ✓ | `shift-enter-mode` (shift, sin intent — cambio de contexto ✓) · `commit-save` affirm · `commit-cancel` **neutral** (commit exige intent por política de familia; neutral es correcto — verificado contra la doctrina) |
| 4 | API | ✓ rica | `activationMode: focus\|click\|dblclick\|none` + `submitMode: enter\|blur\|both\|none` (:32-49); `selectOnFocus` ; hidden-input por `name` (:26-27) |
| 5 | Tokens | ✓ | Recipe canónico |
| 6 | Sema | ✓ | Pack ✓ (enter/save/cancel con carácter) |
| 7 | Animaciones | ✓ | Sin keyframes |
| 8 | Contrato morfo | ✓ | Preview `role='textbox'` en div (patrón Chakra/Ark del valor-como-textbox-readonly, :102-110); `data-editing/empty/placeholder-shown` flags; aria-required/invalid condicionales |
| 9 | A11y | ✓ | Activación por foco accesible por defecto; triggers con textos |
| 10 | Theming | ✓ | Focus o5 → censo SYS-5; state-hover preview ✓ tier neutro |
| 11 | Composición interna | verificar | Como tags-input: sin mención de OR-merge con Field en types → verificación dirigida (pass SYS-6) |
| 12 | Estados | ✓ con gap menor | editing/empty/disabled/readonly/invalid ✓; **F-1** : `maxLength` (:54-55) SIN señal de overflow (0 hits) — textarea tiene el contrato `signal-warn-count-overflow` untilFix para lo mismo |
| 13 | Runtime | ✓ **por diseño** | `autoResize` dimensiona por `ch` desde el valor + `min-width: 2ch` (provider :374-377) — **cero medición de DOM** (evita la clase de reflow de textarea F-1 por construcción); el contraste correcto: ch para una línea, medición-diferida para multilínea |
| 14 | Docs+tests | ✓ | README × 2, suite ✓ (+ el error de tipos baseline a absorber) |
| 15 | i18n | ✓ | texts morfo |
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
## Hallazgos y propuestas
| ID | Hallazgo | Propuesta |
| ------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **F-1** | `maxLength` sin contrato de overflow (asimetría con textarea) | Adoptar `signal-warn-count-overflow` del hermano (untilFix + persistent-trace) o documentar por qué no aplica al in-place |
| **F-2** | `defaultValue` — patrón uncontrolled único en el catálogo | Veredicto \_naming: ¿se canoniza (y entonces quién más lo necesita) o se poda (el `$bindable(inicial)` de Svelte 5 cubre el caso)? |
| **F-3** | Error de tipos preexistente en su suite (baseline check) | Fix trivial en fase de fixes |
| **F-4** | Participación Field sin documentar | Verificación dirigida (con tags-input) |
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
## Escalan al sistema
\_naming (defaultValue · el par Change/Commit · Revert crudo ✓ como regla) · patrón "ch-sizing vs medición-diferida" como doctrina de autoResize (exportable).
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
_(pendiente — checkpoint post-barrido)_