# Sprint v0.1.5 - Revision de Codex Fecha: 2026-03-30 Este documento reemplaza la version anterior de `SPRINT_v0.1.5_CHANGES.md`, que mezclaba avances reales con conclusiones demasiado fuertes. ## Resumen honesto Kimi si dejo trabajo util en este sprint, pero no quedo cerrado como el documento original sugeria. Lo que si existe en codigo: - `server.py` ahora guarda mas estado en `_generation_jobs` - `server.py` tiene cache de routing y se usa en al menos 3 callsites reales - `zai_judges.py` redujo backoff y aumento TTL de cache - `reference_listener.py` sigue mostrando que el `section-aware` esta solo parcialmente integrado Lo que no quedo demostrado: - que el timeout async ya este resuelto - que el timeout sea definitivamente `O(n^2)` por routing y nada mas - que `JOINT_SCORE` participe de la generacion real end-to-end - que las ultimas generaciones sean musicalmente coherentes ## Lo que Codex verifico ### Codigo - `server.py` compila - `reference_listener.py` compila - `zai_judges.py` compila - `temp\smoke_test_async.py` compila - `test_sample_selector.py` sigue pasando `25/25` ### Evidencia runtime disponible Archivo revisado: - `temp\smoke_test_async_report.json` Estado real del ultimo reporte disponible: - `connection_check`: PASS - `launch_async_job`: PASS - `verify_tracks_created`: PASS - `poll_job_status`: FAIL por timeout a `300s` Dato importante: - durante ese timeout la cuenta de tracks subio de `122` a `165` Eso demuestra que el job estaba haciendo trabajo real. No demuestra por si solo cual es el root cause exacto del timeout. ## Correccion del diagnostico async La version anterior del documento afirmaba demasiado: - que el timeout ya estaba diagnosticado con precision completa - que el problema era definitivamente `O(n^2)` por routing - que las optimizaciones aplicadas deberian dejar el job por debajo de `300s` Eso hoy no esta probado. Lo correcto es: - el routing repetido es un candidato fuerte a cuello de botella - los retries de `ZAIJudges` tambien pueden estar inflando la duracion - el sistema async sigue necesitando mejor instrumentacion para mostrar progreso real mientras corre ## Correccion del diagnostico section-aware La observacion importante de Kimi fue buena: - `reference_listener.py` selecciona roles principales antes del loop de secciones - en esa seleccion global no se pasa contexto por seccion - `_select_candidate()` sigue usando logica local hardcoded Pero el fix sugerido en el documento original no es correcto tal como estaba escrito. No sirve simplemente pasar `current_kind` o `current_energy` en la linea donde se seleccionan roles principales, porque esa seleccion ocurre antes del loop de secciones y no existe una seccion actual unica en ese punto. La conclusion correcta es: - el flujo necesita rediseƱo, no solo un parametro extra - si queremos section-aware real, hay que: - mover mas seleccion dentro del loop de secciones - o derivar las variantes de seccion desde un palette global coherente - o ambas ## Problema de producto mas importante El problema principal ya no es solo tecnico. Segun las ultimas pruebas del usuario: - el sistema genera pistas - pero el resultado suena como sonidos tirados al azar - falta coherencia melodica, armonica y de arreglo Eso cambia la prioridad del proyecto. La siguiente etapa no debe enfocarse solo en "que termine" o "que cree tracks". Debe enfocarse en: - coherencia por pack - coherencia tonal - coherencia de hook/motivo - presupuesto de tracks - mutacion por seccion a partir de un mismo tema ## Estado real al cerrar esta revision - avances utiles: SI - sprint 0.1.5 totalmente cerrado: NO - siguiente prioridad: coherencia musical real ## Archivos relevantes - `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/server.py` - `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/reference_listener.py` - `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/zai_judges.py` - `temp\smoke_test_async.py` - `temp\smoke_test_async_report.json` ## Siguiente sprint El sprint activo a partir de ahora es: - `docs/SPRINT_v0.1.6_NEXT.md`