docs(theming): THM-4 dossier — media-player + stepper adjudicated, low debt rate

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 <noreply@anthropic.com>
menubar-v4-safe
dev 3 months ago
parent 0a5aa387b9
commit d9c3d03f7d

@ -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 `<IconButton>`
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]`

Loading…
Cancel
Save

Powered by TurnKey Linux.