# Sprint v0.1.19 - Coherence First, Anti-Loop, Creativity Recovery **Owner:** Kimi via OpenCode **Reviewer:** Codex **Fecha:** 2026-04-01 **Baseline real vigente:** `2f53f3574d2d` **Estado de cierre v0.1.18:** no cerrado --- ## 1. Verdad operativa despues del review de Codex El reporte [SPRINT_v0.1.18_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.18_VALIDATION_REPORT.md) no puede usarse como verdad final del sistema por tres razones: 1. toma como bloqueo principal una sesion `5b6a3df6e04a` que no existe hoy en: - `C:\Users\ren\.abletonmcp_ai\generation_manifests.json` 2. ignora que el baseline persistido real hoy es: - `2f53f3574d2d` 3. da por implementado el schema de coherencia, pero el wiring en `server.py` seguia leyendo shapes viejos del manifest Codex ya corrigio dos problemas reales en codigo: - [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py) ahora: - resuelve `generation_mode` por intencion de pipeline y no solo por hook creado - consolida `coherence_metrics` desde el shape real de `layer_selections.summary` / `pack_coherence` - persiste `manual_vocals_enabled=true` y `auto_vocal_layers_enabled=false` de forma estable - [test_piano_forward.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_piano_forward.py) ahora fija: - el mode `library-first-hybrid` aunque el hook aun no se haya materializado - el schema estable de `coherence_metrics` Validado por Codex en este turno: - `py_compile` pasa - `test_piano_forward.py` pasa - `test_selection_coherence.py` pasa Lo que sigue abierto y es la prioridad real: - coherencia insuficiente - exceso de loop/repeticion - perdida de creatividad entre secciones - tracks demasiado parecidos entre generaciones - hibrido `MIDI + piano + libreria` demasiado flojo o intermitente --- ## 2. Problema de producto real La regresion actual no es solo de coherencia. El sistema se volvio mas: - loopeado - conservador - repetitivo - similar entre generaciones Y menos: - expresivo - seccional - contrastado - musicalmente memorable En otras palabras: - v0.1.18 intento subir coherencia endureciendo seleccion y consolidacion - pero parte de esa dureza esta aplanando la cancion - el resultado no es una produccion mas solida, sino una produccion mas monotona No quiero que resuelvas esto soltando todo de nuevo. No quiero volver al caos. Quiero: - coherencia alta - pero con variacion real por seccion - con una identidad armonica clara - y sin que todas las canciones suenen al mismo template --- ## 3. Reglas no negociables 1. Trabajar solo en el arbol canonico: - `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts` 2. No tocar wrappers ni config MCP salvo bug concreto y demostrado. 3. Mantener modo instrumental: - `auto_vocal_layers_enabled = false` - no seleccionar vocals automaticas - no materializar vocals automaticas - no usar voces grabadas como chops, textura o truco de color 4. No mejorar coherencia a costa de matar variacion. - si una mejora sube `pack_coherence` pero aplana secciones, no sirve 5. No aceptar como “creatividad” meter mas tracks. - primero variar mejor - despues densidad, solo si hace falta 6. No aceptar como “coherencia” repetir el mismo loop 8 veces con otro nombre. 7. No cerrar el sprint si cualquiera de estas falla: - `coherence_score < 6.5` - `generation_mode != library-first-hybrid` - `mandatory_midi_hook.materialized != true` - `auto_vocal_layers_enabled != false` - `layer_selections.summary.total_layers == 0` - `variant_summary.total_layers_with_variants < 3` - `variant_summary.total_variants < 6` - `piano_presence.piano_layer_count < 1` 8. No inventar session ids. - todo `session_id` citado debe existir en: - `C:\Users\ren\.abletonmcp_ai\generation_manifests.json` --- ## 4. Hipotesis tecnica principal Hoy el retroceso hacia tracks mas loopeados probablemente viene de la combinacion de estos factores: ### A. Consolidacion demasiado agresiva En [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py) hay varios puntos que reducen fragmentacion: - `_build_audio_pattern_positions(..., consolidate=True)` - `_consolidate_positions_to_loops(...)` - `_apply_clip_consolidation(...)` - `_consolidate_duplicate_layers(...)` Eso esta bien como idea, pero hoy puede estar: - reduciendo demasiado los cambios por seccion - convirtiendo patrones con intencion en loops largos demasiado uniformes - borrando micro-contrastes entre intro/build/drop/break ### B. Hardening del bus `music` demasiado cerrado En [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py) el endurecimiento de pack para `music` puede estar logrando coherencia a costa de diversidad funcional. El objetivo no es volver a mezclar tres packs musicales. El objetivo es permitir: - un pack dominante claro - un secundario justificado - pero con funciones distintas reales por seccion y por rol ### C. Variacion seccional insuficientemente materializada En [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py) existen: - `PhrasePlan` - `MusicalThemeGenerator` - bancos de variantes para drums, bass y melodic - `SectionVariationManager` Pero hoy hay que verificar si eso se traduce en: - diferencias reales entre secciones - o solo en metadata / nombres de variant mientras el audio final sigue siendo casi igual --- ## 5. Objetivo del sprint Recuperar creatividad sin romper coherencia. La salida esperada no es “mas random”. La salida esperada es: - una identidad armonica clara - variacion real entre secciones - menos sensacion de loop reciclado - menos sensacion de “la misma pista todas las veces” - hibrido instrumental consistente: - libreria del usuario - armonia MIDI - presencia de piano/keys cuando suma - sin vocals automaticas --- ## 6. Trabajo obligatorio ### P0. No romper lo que Codex ya dejo estable No reabras estas piezas salvo bug demostrado: - schema estable de `coherence_metrics` - politica `manual-only` de vocals - resolucion de `generation_mode` Antes de tocar nada: - lee el codigo real en `server.py` - lee los tests nuevos en `test_piano_forward.py` - no reintroduzcas lecturas desde shapes viejos del manifest ### P1. Anti-loop real, no cosmetico Quiero que analices y corrijas la cadena de consolidacion para que siga reduciendo basura, pero no mate variacion musical. Tareas: 1. Auditar: - `_build_audio_pattern_positions` - `_consolidate_positions_to_loops` - `_apply_clip_consolidation` - `_consolidate_duplicate_layers` 2. Separar reglas por tipo de rol: - drums anchor pueden tolerar mas loop - bass necesita repeticion controlada, no clonacion plana - music/harmonic layers no deben quedar reducidas a un unico loop largo por toda la cancion - FX deben mantener timing expresivo 3. Introducir guardrails anti-aplanado: - no consolidar si la capa ya tiene `section_variants` reales - no consolidar si al hacerlo intro/build/drop/break quedan con la misma firma musical - no consolidar dos layers si la “duplicacion” en realidad representa contraste por seccion o registro 4. Persistir metricas de repeticion en el manifest: - `repetition_metrics.identical_section_signatures` - `repetition_metrics.harmonic_loop_reuse_ratio` - `repetition_metrics.music_source_reuse_ratio` - `repetition_metrics.verdict` No quiero opinion subjetiva solamente. Quiero metricas concretas para detectar si la cancion quedo monotona. ### P2. Recuperar creatividad por seccion Tenes que verificar que la variacion no quede solo en el plan sino tambien en el material final. Tareas: 1. Revisar en `song_generator.py`: - `PhrasePlan` - `MusicalThemeGenerator` - `SectionVariationManager` - pattern banks de drums, bass y melodic 2. Verificar que: - intro, build, drop, break y outro no compartan exactamente la misma firma armonica - las variantes de bass y melodic cambien de verdad - las frases MIDI no sean solo el mismo motivo duplicado sin mutacion relevante 3. Si hace falta, endurecer: - `variant_summary` - `section_variant_summary` - deteccion de secciones identicas 4. Agregar una regla de producto: - una pista coherente puede repetir anclas - pero no puede tener la misma capa musical dominante resolviendo igual en todas las secciones ### P3. Coherencia sin convertir todo al mismo template Revisar el hardening del bus `music` en `reference_listener.py`. Objetivo: - mantener coherencia - pero evitar que el sistema siempre caiga en la misma solucion facil Tenes que evaluar: 1. si el secundario musical esta demasiado penalizado 2. si el criterio de complementariedad esta demasiado angosto 3. si la seleccion same-pack esta premiando repeticion del mismo tipo de layer 4. si el rerank final termina favoreciendo siempre el mismo pack / misma familia / mismo rol de soporte Regla: - no quiero 3 packs musicales - pero tampoco quiero un bus `music` tan cerrado que mate contraste funcional ### P4. Hibrido instrumental verdadero El usuario remarco un problema concreto: - el sistema “se olvida” de generar armonias MIDI + piano + libreria Quiero que lo tomes como requisito de producto. La salida correcta es: - base desde libreria del usuario - una capa armonica MIDI real - piano/keys/rhodes cuando sumen coherencia - hook o ancla armonica materializada No acepto: - solo loops de audio - o solo MIDI generico - o piano falso solo en metadata Tenes que demostrar en codigo y manifest: - `mandatory_midi_hook.materialized = true` - `piano_presence.piano_layer_count >= 1` - `layer_selections.summary.total_layers > 0` - `generation_mode = library-first-hybrid` ### P5. Modo instrumental sigue estricto Esto no se negocia: - vocals automaticas siguen prohibidas - no uses folders vocales para “levantar creatividad” - no uses `vocal_shot` como FX encubierto Si necesitas placeholders: - solo placeholders vacios - nunca retrieval ni materializacion automatica --- ## 7. Casos de test obligatorios Minimo tenes que agregar o endurecer tests para esto: 1. Un test donde una capa con `section_variants` reales no sea consolidada como si fuera redundante. 2. Un test donde dos secciones no terminen con la misma firma musical despues de consolidacion. 3. Un test donde `generation_mode` siga saliendo `library-first-hybrid` aunque el hook este planificado pero todavia no creado. 4. Un test donde `coherence_metrics` siga estable y no dependa de shapes ambiguos. 5. Un test donde `manual-only vocals` siga firme. 6. Un test donde `PhrasePlan` o las variantes seccionales produzcan diferencia real entre al menos dos secciones armonicas. --- ## 8. Validacion final obligatoria Al final del sprint tenes que hacer una validacion real. Parametros: - `genre = reggaeton` - `style = perreo duro vieja escuela tipo safaera` - referencia: - `libreria\reggaeton\ejemplo.mp3` Tenes que demostrar con `session_id` real persistido: - `coherence_score >= 6.5` - `generation_mode = library-first-hybrid` - `mandatory_midi_hook.materialized = true` - `auto_vocal_layers_enabled = false` - `layer_selections.summary.total_layers > 0` - `piano_presence.piano_layer_count >= 1` - `variant_summary.total_layers_with_variants >= 3` - `variant_summary.total_variants >= 6` - `repetition_metrics.verdict != repetitive` - `repetition_metrics.identical_section_signatures <= 2` - `repetition_metrics.harmonic_loop_reuse_ratio < 0.75` Si no llegas a esos thresholds: - no cierres el sprint - no lo dibujes como PASS - explica exactamente donde sigue el cuello de botella --- ## 9. Formato obligatorio del validation report El md final de cierre debe tener estas secciones, en este orden: 1. `Executive Summary` 2. `Claims Verified Against Code` 3. `Fresh Session Validation` 4. `Manifest Truth` 5. `Coherence Metrics` 6. `Repetition Metrics` 7. `Hybrid Truth (MIDI + Piano + Library)` 8. `Instrumental-Only Compliance` 9. `Open Issues` 10. `Verdict` Y debe incluir: - `session_id` real - extracto de `generation_manifests.json` - lista exacta de archivos tocados - tests corridos - resultado de cada threshold No acepto: - “todo bien” - “parece mejor” - “sin regresiones” sin evidencia - reportes apoyados en sessions inexistentes --- ## 10. Archivos probables a tocar - `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py` - `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py` - `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py` - tests: - `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_piano_forward.py` - `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_selection_coherence.py` Toca menos archivos si podes. Pero si el problema real esta en `song_generator.py`, no lo esquives tocando solo docs o logging. --- ## 11. Criterio de cierre Este sprint se cierra solo si Kimi demuestra simultaneamente: - coherencia mejor - menos loop plano - mas variacion real - hibrido instrumental verdadero - sin vocals automaticas - y sin romper MCP ni runtime Si mejoras solo uno de esos ejes, el sprint no esta cerrado.