From d9c3d03f7d92dc5c196e9a5686fe3b5d6bf5feec Mon Sep 17 00:00:00 2001 From: dev Date: Sun, 12 Jul 2026 03:24:18 +0200 Subject: [PATCH] =?UTF-8?q?docs(theming):=20THM-4=20dossier=20=E2=80=94=20?= =?UTF-8?q?media-player=20+=20stepper=20adjudicated,=20low=20debt=20rate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Burn the two biggest THM-4 hotspots. media-player (47 unused): 0 real debt — all composition artifacts (composed Buttons/Sliders), behavioral state mirrors of the media element, default-state enum values, or documented-v2 roadmap surfaces (settings-button, custom captions). stepper (30 unused): mostly legit + one API redundancy — every step part declares both data-state (enum) and data-current/complete/incomplete (booleans), used inconsistently (enum on trigger/indicator, boolean on separator). Consolidating is a public-API design decision, not a prune. Emerging read (2 batches): hotspots are mostly legitimate; genuine declared-for-nothing debt is rare, confirming the doctrine — the debt rate does not justify a machine rule. THM-4 is mostly documented adjudication. Co-Authored-By: Claude Opus 4.8 --- .../continue-cleanroom-fixes-2026-07.md | 67 +++++++++++++++++-- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/docs/process/continue-cleanroom-fixes-2026-07.md b/docs/process/continue-cleanroom-fixes-2026-07.md index f7e08307c..09ca1ae0b 100644 --- a/docs/process/continue-cleanroom-fixes-2026-07.md +++ b/docs/process/continue-cleanroom-fixes-2026-07.md @@ -352,12 +352,69 @@ track paralelo, probado con git stash). Registrado en `docs/next-features.md §6 > **Cierre en el guard**: `soma-attr-audit.test.ts` gana `'media-player': 0` > con dossier de por qué es 0; el comentario "Still UNMIGRATED" retirado. +### THM-4 · media-player ✅ ADJUDICADO 2026-07-12 — 0 deuda real + +Dossier de los **47 `unused`** (columna de `eidos-lint media-player`) contra la +doctrina `eidos.md §unused` (comportamiento/composición = legítimo; "declarado +para un eje visual que nadie consume, sin razón" = deuda). Clasificación +completa — **cero deuda silenciosa**: +- **21 · estados de botón** (play/mute/fullscreen/pip/caption/seek/settings × + `data-state`/`data-disabled`/`data-direction`) → **composición legítima**: el + cromo del botón (state-layer, disabled, focus) vive en el `` + compuesto; `data-state` conduce el swap de glifo en Svelte (JS), no en CSS. +- **7 · sliders** (time/volume × `data-orientation`/`data-disabled`/`data-seeking`) + → **composición**: el visual es el `[data-slider]` compuesto. +- **11 · flags de estado del root** (`data-paused`/`muted`/`seeking`/`ended`/ + `error`/`fullscreen`/`pip`/`live`/`can-play`/`captions` + `controls='visible'`) + → **espejos de comportamiento** del elemento media (el morfo declara toda la + superficie behavioral; `controls='visible'` es el estado por defecto — solo + `hidden` se estiliza). +- **6 · resto** (media-part `data-media` [lo estiliza el padre], time + `data-type='current'/'remaining'` [default; solo `duration` distingue], + captions/buffering/controls `data-*` propios [driven por el padre / superficie + opcional]) → legítimo. +- **2 (nota) · superficies v2 documentadas**: `settings-button` (data-state + open/closed + disabled) y el custom `captions` NO tienen provider/CSS/render — + son **roadmap v2 declarado a propósito** (ambos READMEs lo marcan v2). No es + deuda silenciosa; es superficie futura documentada. Candidatas a poda SOLO si + se abandona el v2. + +**Conclusión**: el count alto es porque media-player es un composite grande (10 +partes + 10 espejos de engine), no porque tenga deuda. Nada que consumir/podar +sin decisión de feature (p.ej. un badge LIVE o un overlay de error serían +diseño nuevo, no THM-4). **media-player adjudicado, 0 deuda.** + +### THM-4 · stepper ✅ ADJUDICADO 2026-07-12 — mayoría legítima + 1 redundancia de API + +De los **30 `unused`**: ~la mitad legítimos (`data-state='incomplete'` = estado +base; `data-orientation='horizontal'` = default; estados de content). El +hallazgo: el morfo declara en CADA parte (item/trigger/indicator/separator) +**DOS representaciones del mismo estado** — `data-state` (enum complete/current/ +incomplete) **Y** los booleanos `data-current`/`data-complete`/`data-incomplete` +(`propRef`, severity optional). El propio CSS las usa **inconsistentemente**: +enum en trigger/indicator, booleano `data-complete` en el separator. Así que NO +es deuda-sin-consumidor (la forma booleana SÍ se consume en el separator) — +es **redundancia**: cada parte declara ambas formas y usa una. Consolidar en +`data-state` (canónico) + migrar el separator a `data-state='complete'` + podar +los booleanos limpiaría la inconsistencia, PERO es **cambio de API pública** +(un consumidor podría estilizar `[data-complete]`) → **decisión de diseño**, no +poda unilateral. + +### THM-4 — lectura emergente (2 lotes) + +media-player (0 deuda) + stepper (0 deuda-real, 1 redundancia de API): los +hotspots son **mayormente legítimos** (composites grandes + superficie +behavioral); la deuda-sin-consumidor genuina es **rara**. Lo accionable son +**decisiones de diseño** (dual-API de stepper), no podas mecánicas. Esto +CONFIRMA la predicción de la doctrina ("la mayoría son legítimos") y sugiere que +**la tasa de deuda NO justifica una regla de máquina** — THM-4 es sobre todo +adjudicación documentada. Restan color-picker/avatar/trp por adjudicar +(probablemente mismo patrón: mayoría legítima + alguna redundancia/decisión). + ### Cola pendiente (sin orden fijo — algunas requieren decisión de usuario) -- **THM-2 rollout** — 12 superficies restantes (tracker en §THM-2 arriba): - privadas-forward-ready [toggle-group/tag-group/tags-input/stepper] vs - rol-directo-mini-diseño [badge/card/avatar/…]. Lote estilo S4. -- **THM-4 hotspots** — quema de selectores sin consumidor (media-player 47 · - stepper 30 · color-picker 29 · avatar 28 · trp 26), dossier por componente. +- **THM-2 rollout** — CERRADO (ver §THM-2; `Avatar.Badge` fuera por diseño). +- **THM-4 hotspots** — **media-player ✅ adjudicado (0 deuda, dossier arriba)**. + Restan: stepper 30 · color-picker 29 · avatar 28 · trp 26 (dossier c/u). - **F4-D GAP-\*** — menú de personalización (§7): pendiente de SCOPING del usuario (qué se arranca vs qué se registra como límite deliberado). - **cascada-vs-firmas** (motion) — cola lateral: las reglas `[data-stagger]`