@ -418,13 +418,50 @@ accionable son **decisiones de diseño** (como el dual-API de stepper que el
usuario decidió consolidar), 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).
adjudicación documentada.
### THM-4 · color-picker (29) + avatar (28) + time-range-picker (26) ✅ ADJUDICADOS 2026-07-12 — 0 deuda
- **color-picker (29)** → 0 deuda: `data-state='open/closed'` (root/content/
trigger) = **composición** (de-dialoged, `color-picker-content.svelte` compone
`PopoverContent` — el estado lo pinta el Popover) · `data-last-action=*` =
**sema/dismissal** (escrito por prewrites close-commit/cancel/dismiss, lo
consumen sema packs) · `data-format` /`data-disabled/invalid/readonly/required`
+ area/channel-slider/swatch = behavioral + composición (Sliders/Field
compuestos).
- **avatar (28)** → 0 deuda: `[data-avatar][data-color='ROLE']` × 8 = **artefacto
de capa compartida** — mi migración THM-2 movió el color al forward
`[data-avatar][data-color]` presence-guarded, así que los per-rol dejaron de
vivir en avatar.css (viven en la capa) → el count SUBIÓ por una MEJORA, no
deuda · `data-variant='soft/solid'` = lo consume el **recipe token** (generado,
verificado 2 hits) — punto ciego del lint per-fichero (solo ve avatar.css) ·
badge `[data-color='ROLE']` × 8 = el matrix consume la forma compuesta
`[variant][color]` , no la per-rol suelta · `data-status=*` = estado de carga
behavioral (loading/idle SÍ se usan; loaded/error = default).
- **time-range-picker (26)** → 0 deuda: `data-state='open/closed'` = composición
(Popover) · `data-last-action` /`data-starting-style`/`data-ending-style` =
sema + motion @starting -style · `*-slider[data-endpoint/disabled]` +
day-period-toggle = composición (Sliders/Toggle) + behavioral (endpoint) ·
`data-disabled/required` = form-state.
### THM-4 — CONCLUSIÓN (5 hotspots adjudicados)
Los 5 mayores hotspots (156 `unused` juntos) están adjudicados: **media-player,
color-picker, avatar, trp = 0 deuda** (composición + behavioral + capa
compartida); **stepper = 1 redundancia de API, consolidada** (`75fa9400`).
**Deuda real total en los 5 mayores = 1 ítem** (arreglado). Esto CONFIRMA la
doctrina ("la mayoría son legítimos") y sella la decisión: **la columna `unused`
se queda informativa, sin severidad/regla de máquina** — la tasa de deuda no la
justifica. El resto del catálogo (~1140) es la cola larga de las mismas
categorías legítimas. Hallazgo colateral: migrar un componente a la capa
compartida (avatar) SUBE su `unused` (los per-rol pasan a artefacto de capa) —
el count alto no es señal de deuda. **THM-4 CERRADO.**
### Cola pendiente (sin orden fijo — algunas requieren decisión de usuario)
- **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).
- **THM-4 hotspots** — **CERRADO** : 5 hotspots adjudicados (media-player/color-
picker/avatar/trp = 0 deuda · stepper = 1 redundancia consolidada `75fa9400` ).
Columna `unused` = informativa, sin regla. Dossiers arriba.
- **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]`