# Sprint v0.1.2 - Continuacion Para Kimi Fecha: 2026-03-30 Actualizado: 2026-03-30 (post-verificacion) Este documento es el sprint activo despues de revisar `docs/SPRINT_v0.1.1_CHANGES.md` y los diffs reales. **ADVERTENCIA**: Este documento ahora incluye estado REAL verificado, no aspiraciones. Si eres Kimi K2: - lee este archivo despues de `KIMI_K2_ACTIVE_HANDOFF.md` - usa este documento como plan operativo actual - valida todo con codigo y runtime, no con prose ## Estado de Tareas v0.1.2 (VERIFICADO) ### Tarea 1 - Validar `clear_all_tracks` con runtime real **Estado: PARCIALMENTE COMPLETADO** ⚠️ Codigo existe y compila: - Ubicacion: `abletonmcp_init.py:2664-2698` - Implementacion: Loop while + delete_track + clear ultimo track - Logica: Mantiene 1 track (requirement de Ableton), limpia clips y devices **Problema conocido (sin resolver):** - Al finalizar limpieza, puede devolver error blando "Couldn't delete track." - Documentado en CLAUDE.md linea 35 - Aun asi deja la sesion limpia **Validacion pendiente:** - [ ] 3 limpiezas consecutivas sin error en Live real - [ ] Verificar que quede exactamente 1 track limpio - [ ] Confirmar no hay crash de Audio queue timeout **Archivos si falla:** - `abletonmcp_init.py` - `AbletonMCP_AI/abletonmcp_runtime.py` --- ### Tarea 2 - Hacer end-to-end real del camino async **Estado: INFRAESTRUCTURA COMPLETA, FALTA VALIDACION EN LIVE** ⚠️ **Implementado (verificado en codigo):** - `generate_track_async()` - server.py:6503-6535 - `generate_song_async()` - server.py:6539-6575 - `get_generation_job_status()` - server.py:6579-6588 - `cancel_generation_job()` - server.py:6592-6614 - `_submit_generation_job()` - server.py:5084-5101 - `_generation_jobs` dict con threading.RLock() - server.py:4734-4735 - ThreadPoolExecutor para jobs en background **Estructura de jobs:** - Estados: queued -> running -> completed/failed - Retorna: job_id, session_id, status, params - Polling via get_generation_job_status(job_id) **Smoke test disponible:** - `temp\smoke_test_async.py` - importa server.py directamente - Usa `MCPServerClient` para llamar tools async - Soporta --use-track para probar generate_track_async **Validacion pendiente:** - [ ] Ejecutar temp\smoke_test_async.py con Live abierto - [ ] Verificar job queued -> running -> completed - [ ] Confirmar tracks creados en Live - [ ] Validar manifest util retornado **Si falla:** - Corregir `server.py` - No parchar smoke test para esconder fallo --- ### Tarea 3 - Expandir el corpus de groove real **Estado: IMPLEMENTADO, FALTA CORNISA REAL** ⚠️ **Implementado (verificado):** - `groove_extractor.py` - existe y compila - `DembowGrooveExtractor` class - linea 65 - Soporte multiple directorios: drumloops, perc loop, oneshots - Ignora: .sample_cache, .segment_rag, temp, docs, etc. - Templates con: kick/snare/hat positions, velocities, timing_variance_ms - Cache en: `~/.abletonmcp_ai/dembow_groove_templates.json` **Problema actual:** - Depende de `libreria/reggaeton/drumloops/*.wav` - Si no hay loops reales, fallback a patron default - Necesita mas templates para variedad real **Validacion pendiente:** - [ ] Escaneo real de libreria/reggaeton - [ ] Contar templates extraidos - [ ] Verificar no estan default/todos iguales **Archivos:** - `groove_extractor.py` - `audio_analyzer.py` (usa beat_duration corregido) --- ### Tarea 4 - Subir el nivel del selector por seccion **Estado: COMPLETADO** ✅ **Implementado (verificado en sample_selector.py):** 1. **Same-pack estricto para roles clave:** - Lineas 1222-1243: atmos_fx, vocal_shot, fill_fx, snare_roll - `_calculate_same_pack_strict_bonus()` - lineas 1578-1632 - Peso adicional: +0.25 para same-pack - Tipos: "same_pack", "same_parent", "fallback" 2. **Scoring conjunto:** - `same_parent: 1.3` (sibling folders) - `exact folder match: 2.0` - `subfolder of main pack: 1.8` 3. **Coherence scoring:** - `vocal_fx_group`: vocal_loop, vocal_shot, atmos_fx, fill_fx - Section-aware selection (intro, build, drop, break, outro) **Resultado:** - Menos mezcla de carpetas sin relacion - Mas consistencia entre secciones - atmos_fx y vocal_shot vienen del mismo pack que elementos principales --- ### Tarea 5 - Backoff, retry y cache para Z.ai **Estado: COMPLETADO** ✅ **Implementado (verificado en zai_judges.py):** 1. **Exponential backoff:** - `MAX_RETRIES = 3` - linea 33 - `BACKOFF_DELAYS = [1.0, 2.0, 4.0]` - linea 34 - Reintenta en 429 (Too Many Requests) - Total max wait: ~7 segundos 2. **Local cache con TTL:** - `CACHE_TTL_SECONDS = 300` (5 minutos) - linea 29 - `_cache: Dict[str, Tuple[result, timestamp]]` - `_generate_cache_key()` con SHA256 - lineas 37-53 - Cache hit evita llamada API - lineas 126-129 3. **Fallback heuristico:** - Si API no disponible: selecciona top candidate - Modo: "heuristic_fallback" - Directivas default para rhythm, bass, arrangement - lineas 225-242 **Retry loop:** lineas 155-205 - Maneja HTTPError 429, URLError, TimeoutError - Loguea warnings en cada retry - Retorna {} si todos fallan (trigger fallback) --- ## Validaciones ya hechas (Pre-sprint) - `python test_same_pack_selection.py` pasa - `temp\smoke_test_async.py --help` funciona - Import directo de `server.py` con tools async funciona - Chequeo de sintaxis local pasa para: - `audio_analyzer.py` - `song_generator.py` - `temp\smoke_test_async.py` - `groove_extractor.py` - `zai_judges.py` ## Metricas del Server (Verificado) - `server.py` tiene 89 tools registradas - 89 nombres unicos (no duplicados) - Async tools incluidas: generate_track_async, generate_song_async, get_generation_job_status, cancel_generation_job ## Reglas duras para Kimi (vigentes) - no edites archivos legacy solo porque el nombre te suena correcto - no confundas tool MCP con comando del socket runtime - no uses segundos donde el codigo espera beats - no des por valido un groove solo porque hay onsets detectados - **no cierres el sprint sin una validacion real con Live** - **no escribas "arreglado" sin prueba de runtime** ## Proximo trabajo (Recomendado) 1. **Alta prioridad:** Validar clear_all_tracks en Live real (3 repeticiones) 2. **Alta prioridad:** Ejecutar temp\smoke_test_async.py con Live abierto 3. **Media prioridad:** Verificar templates de groove extraidos de libreria/ 4. **Documentar:** Resultados de validacion en este archivo ## Notas sobre documentacion - CLAUDE.md linea 35: "clear_all_tracks still has a soft failure at the end of cleanup" - Este sprint documenta REALIDAD, no aspiraciones - Si una tarea no esta marcada con ✅, necesita prueba de runtime