Files
ableton-mcp-ai/docs/SPRINT_v0.1.2_NEXT.md

6.5 KiB

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