# GLM/KIMI MEGA SPRINT: PRO DJ LEVEL ROADMAP & MIDI FIX
## Moombahton / Reggaeton Track Finalization (`song.als`)

**TARGET AI CAPABILITY LEVEL:** EXPLICIT / STEP-BY-STEP
**INSTRUCTIONS TO AI:** Do NOT deviate from these steps. Follow them sequentially. Validate each task before moving to the next.

---

## TAREA 0: ELIMINAR EL BLOQUEO (FIX P0)
**Contexto Técnico:** Kimi introdujo un `time.sleep()` y un `while` loop sincrónico en el Remote Script que congela la UI de Ableton, causando que la materialización del MIDI falle y bloqueando todo el proyecto.

### PASO 0.1: Modificar `_record_session_clip_to_arrangement`
- **Archivo:** `abletonmcp_init.py`
- **Líneas aproximadas:** 1445 - 1497
- **ACCIÓN EXPLICITA:** Busca el bloque `while total_wait < max_wait and record_state['target_clip'] is None:`. 
- **CÓDIGO A ELIMINAR:** Borra ese `while`, el `time.sleep(0.05)`, y todos los loops subsecuentes de esa función.
- **CÓDIGO A INYECTAR:** Reemplazar por un retorno inmediato asumiendo éxito en la cola de tareas asíncronas de Live:
```python
        # EN LUGAR DEL WHILE LOOP Y SLEEP:
        # Tratamos de localizarlo exactamente una vez sin sleep
        target_clip = self._locate_arrangement_clip(track, start_time, tolerance=1.5, expected_length=length)
        if target_clip:
            record_state['target_clip'] = target_clip
            self._recent_arrangement_clips[(int(track_index), round(float(start_time), 3))] = target_clip
            return target_clip
            
        # Si no esta listo todavia, DEVOLVEMOS UN PROXY CLIP para no congelar la app
        self.log_message("[ARR_DEBUG] Usando Proxy Clip para evitar Live Freeze")
        class ProxyClip:
            def __init__(self, t_len, t_name):
                self.length, self.name, self.start_time = t_len, t_name, start_time
            def set_notes(self, notes): pass
        proxy = ProxyClip(length, f"Proxy_{start_time}")
        self._recent_arrangement_clips[(int(track_index), round(float(start_time), 3))] = proxy
        return proxy
```

### PASO 0.2: Modificar `_create_arrangement_clip`
- **Archivo:** `abletonmcp_init.py`
- **Líneas aproximadas:** 1578 - 1593
- **ACCIÓN EXPLICITA:** Kimi introdujo `time.sleep(0.5) # Small wait for materialization` después de `self._song.duplicate_clip_to_arrangement`.
- **CÓDIGO A ELIMINAR:** Borra ese `time.sleep(0.5)`. Reemplázalo de la misma manera que en el paso 0.1 para que si `_locate_arrangement_clip` retorna None, devuelva un `ProxyClip` de Inmediato.
- **PASO FINAL:** Pide al orquestador humano que compile y **Reinicie Ableton Live**.

---

## TAREA 1: REESTRUCTURACIÓN DE ARRANGEMENT (CLUB MIX COMPACTO)
**Contexto:** La canción dura `6:56` y es monótona (24 mirrored sections). Hay que llevarla a `3:30` (Aprox 336 beats a 95 BPM).

### Timeline Objetivo:
1. `Intro` (Beats 0-32)
2. `Build A` (Beats 32-64)
3. `Drop A` (Beats 64-128)
4. `Break` (Beats 128-160)
5. `Build B` (Beats 160-192)
6. `Drop B` (Beats 192-256)
7. `Outro` (Beats 256-288)

### PASO 1.1: Eliminar Gaps y Basura
- **ACCIÓN:** Llama a la herramienta MCP `delete_arrangement_clip` masivamente para todos los clips que pasen el beat `288`. Todo lo que exista después del beat 288 es basura irrelevante. Limpia los 16 tracks.

---

## TAREA 2: GENERACIÓN DEL HARMONIC BACKBONE (EL ESPINAZO MIDI)
**Contexto:** Superado el bug del `time.sleep()`, el Track 15 `HARMONY_PIANO_MIDI` debe poblarse.

### PASO 2.1: Re-Voicing del Sintetizador
- **Track 15:** Elimina la asociación mental de que esto es un "Piano". Selecciona el dispositivo (Wavetable o el que esté asignado). No debe ser un piano, debe ser un **Sintetizador Pluck** o **Atmos Pad** adecuado para Reggaeton.
- **ACCIÓN MCP:** Usa la herramienta `set_device_parameter` en el track 15 para modificar Filtros (Filter Freq bajo para el intro, abierto para el Drop).

### PASO 2.2: Creación de Clips MIDI
- **Progresión:** Am - F - G - C.
- **ACCIÓN MCP:** 
  1. Ejecuta `create_arrangement_clip(track_index=15, start_time=0, length=32)`.
  2. Ejecuta `add_notes_to_arrangement_clip(...)` poblando los acordes anteriores a 4 tiempos cada uno, durante el Intro y Builds.
  3. Repite esto para `start_time=64` (Drop), `128` (Break), etc. 
  4. VERIFICA con `get_track_info(15)` que `arrangement_clip_count >= 5`.

---

## TAREA 3: IMPLEMENTAR LÍNEA DE BAJO DEMBOW BOUNCY (TODO-011)
**Contexto:** En la Fase 3, el desarrollador humano integró el código `TODO-011` y `TODO-014` para el estilo **Bouncy Dembow** y perfil **Moombahton**.

### PASO 3.1: Aplicar el Generador Fase 3
- En el Track 9 (`AUDIO BASS`), hay que reemplazar los clips continuos planos.
- **ACCIÓN MCP:** 
  Las herramientas de generación de AbletonMCP deben ser configuradas para usar:
  - `profile_name = "moombahton"`
  - `bass_motion = "bouncy"`
  - O si todo es manual, debes crear los patrones de bajo usando silencios. El patrón dembow del bajo es: Golpe en The "One", silencio, y un golpe de apoyo rápido sincopado (Tumbao).
  - Limpia el Arrangement del track 9 y recrea audio patterns usando `create_arrangement_audio_pattern()` con la muestra principal intercalando huecos de silencio de manera consistente con el patrón de dembow.

---

## TAREA 4: DRUM CONTINUITY Y TRAILING GAPS
**Contexto:** Quedan gaps del beat 168 al 288 (nuestro nuevo final) en los tracks percusivos.

### PASO 4.1: Track 12 (AUDIO TOP LOOP)
- **ACCIÓN:** Tienes que poblar toda la franja `168` hasta `288` (120 beats).
- Herramienta: Usa un loop (`for i in range(168, 288, 8):`) para iterar llamadas MCP `create_arrangement_audio_pattern(track_index=12, start_time=i, length=8, sample_path="C:\...\libreria\reggaeton\perc loop\! (extra I oneshot) perc 4.wav")`.

### PASO 4.2: Track 11 (AUDIO PERC ALT)
- **ACCIÓN:** Tienes que poblar del `176` al `288`.
- Herramienta: Mismo loop pero usa el sample `perc 1.wav` y `perc 2.wav` intercalados. 

### PASO 4.3: Validar Drum Coverage
- **ACCIÓN:** Llama a `audit_project_coherence()`. Tu objetivo duro y explícito es `drum_coverage_ratio > 0.65`. Repite inserciones si esto no se cumple.

---

## TAREA 5: EAR CANDY, RETURNS Y FX DAIL (MACRO DINÁMICA)
**Contexto:** La canción sufre de rigidez estructural. Los buses y los retornos están pero no hacen nada rítmico.

### PASO 5.1: Mute/Stop Throws (Cortes de silencio)
- **ACCIÓN EXPLICITA:** En los beats `63.5 a 64` (justo antes del Drop A) y en el `191.5 a 192` (antes del Drop B), detén drásticamente todo el groove. Mutea/elimina las porciones de Kick, clap y Hat en ese medio compás final. Crea la clásica pausa para que el Drop golpee más duro. 

### PASO 5.2: Send Automations en los Builds
- Track a operar: 14 (`AUDIO SYNTH PEAK`) y los tracks de percusiones (`11` y `12`).
- **ACCIÓN MCP:** Los tracks 14, 11 y 12 tienen Send A (`A-MCP SPACE`) y Send B (`B-MCP ECHO`). 
- Debes añadir automatización en los Sends de estos tracks durante los "Builds" (beats 32-64 y 160-192). Empezando en 0% en el beat 32, subiendo a 100% en el beat 63.5, y cortando a 0% exacto en el beat 64.

### PASO 5.3: Master Loudness & Glue Check
- **ACCIÓN:** Revisa el Output Bus y el track maestro.
- Ajusta el umbral (Threshold) del dispositivo de saturación / Glue Compresor en el Track `RETURN D-MCP GLUE` usando `set_device_parameter` para bajar la compresión y pegar la batería y el bajo en un solo bus unificado.

---

## CÓMO RESPONDER AL ORQUESTADOR
1. Al terminar **LA TAREA 0 (Bugfix)**, DEBES detenerte y responder: *"Bugfix aplicado, esperando confirmación de reinicio de Ableton"*. **No intentes invocar llamadas MCP antes de que Live sea reiniciado por el humano**.
2. Al terminar **cada Tarea subsiguiente**, escribe un breve reporte de status con los outputs exactos devueltos por la terminal o MCP.
3. Al terminar la **Tarea 4**, invoca obligatoriamente `audit_project_coherence()` y pega su salida.
4. Si la red MCP devuelve Error como `"Arrangement clip was not materialized"`, ABORTA LA TAREA ACTUAL y solicita instrucciones. No reportes éxito falsamente si algo falla.
