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

427 lines
13 KiB
Markdown

# 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.