371 lines
11 KiB
Markdown
371 lines
11 KiB
Markdown
# Sprint v0.1.23 - GLM Coherence-First, Anti-Same-Song, Zero Auto Vocals
|
|
|
|
**Owner:** GLM via OpenCode
|
|
**Reviewer:** Codex
|
|
**Fecha:** 2026-04-01
|
|
**Baseline real vigente:** `ccb998a08796`
|
|
**Estado de cierre v0.1.22:** no cerrado
|
|
|
|
---
|
|
|
|
## 1. Verdad operativa despues del review de Codex
|
|
|
|
El archivo [SPRINT_v0.1.22_NEXT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.22_NEXT.md) que dejo Minimax no es un handoff correcto de sprint. Es mas bien un changes report parcial con conclusiones inestables y con preguntas abiertas que no estaban cerradas en codigo ni en runtime.
|
|
|
|
Codex verifico contra:
|
|
|
|
- [generation_manifests.json](C:\Users\ren\.abletonmcp_ai\generation_manifests.json)
|
|
- [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py)
|
|
- [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py)
|
|
- [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py)
|
|
|
|
Verdad real observada hoy:
|
|
|
|
1. el `last_generation_id` vigente es `ccb998a08796`
|
|
2. los manifests recientes siguen sin reflejar cierre real de coherencia
|
|
3. `generation_mode` sigue viniendo `None` en sesiones recientes
|
|
4. `piano_presence.piano_layer_count` sigue en `0` en sesiones recientes
|
|
5. `repetition_metrics` sigue ausente en sesiones recientes
|
|
6. el hook MIDI no falla siempre, pero sigue siendo inestable
|
|
7. la sensacion auditiva del usuario es correcta: el sistema esta cayendo otra vez en la misma cancion
|
|
|
|
No generes otra sesion hasta que cierres las causas de codigo de esa repeticion.
|
|
|
|
---
|
|
|
|
## 2. Code Review de Codex: causas probables de "misma cancion siempre"
|
|
|
|
### A. La variacion por seccion esta sesgada a roles secundarios
|
|
|
|
En [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py):
|
|
|
|
- `SECTION_VARIATION_ROLES` existe
|
|
- el bloque de `section_samples` en `build_arrangement_plan()` aplica variacion real solo a:
|
|
- `perc`
|
|
- `perc_alt`
|
|
- `top_loop`
|
|
- `synth_peak`
|
|
- `atmos`
|
|
|
|
Pero los roles que mas identidad musical fijan siguen casi globales:
|
|
|
|
- `bass_loop`
|
|
- `synth_loop`
|
|
|
|
Eso hace que el track cambie adornos, pero no cambie el nucleo musical.
|
|
Resultado audible: misma cancion, misma paleta, mismo centro melodico.
|
|
|
|
### B. La macro-estructura sigue demasiado templada
|
|
|
|
En [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py):
|
|
|
|
- `_build_sections()` sigue trabajando sobre blueprints muy repetidos
|
|
- reaparecen constantemente patrones tipo:
|
|
- `INTRO`
|
|
- `DROP A`
|
|
- `BREAKDOWN`
|
|
- `BUILD B`
|
|
- `DROP B`
|
|
|
|
Aunque exista `variant_seed`, el esqueleto alto nivel sigue demasiado similar entre generaciones.
|
|
Resultado audible: el usuario percibe que la estructura siempre vuelve al mismo guion.
|
|
|
|
### C. El anti-loop no puede declararse resuelto si toca helpers no demostradas como activas
|
|
|
|
Minimax dio demasiado peso a cambios en helpers y a claims tipo "active path fixed", pero Codex verifico que:
|
|
|
|
- `_apply_clip_consolidation()` sigue sin demostrar uso real en el path runtime final
|
|
- tocar una helper sin probar efecto en la sesion final no cuenta como cierre
|
|
|
|
GLM tiene que demostrar con trazabilidad que el fix que haga corre en la generacion real.
|
|
|
|
### D. La politica vocal seguia ambigua en el plan
|
|
|
|
Aunque ya habia filtros y purgas posteriores, [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py) seguia construyendo posiciones vocales dentro de `build_arrangement_plan()`.
|
|
|
|
Codex ya cerro ese leak adicional:
|
|
|
|
- se bloquea `vocal_loop`
|
|
- se bloquea `vocal_shot`
|
|
- se fuerza `vocal_alt = None`
|
|
- se saca `vocal_shot` del `role_match_map`
|
|
|
|
Eso ya no debe reabrirse.
|
|
|
|
### E. La creatividad se movio del material principal a los bordes
|
|
|
|
Hoy el sistema puede variar:
|
|
|
|
- fills
|
|
- percusiones secundarias
|
|
- atmos
|
|
- algun peak synth
|
|
|
|
Pero no esta variando suficiente:
|
|
|
|
- la armonia principal
|
|
- el loop musical dominante
|
|
- el bajo dominante
|
|
- la distribucion de motivos entre secciones
|
|
|
|
Eso no es creatividad estructural.
|
|
Es decoracion.
|
|
|
|
---
|
|
|
|
## 3. Fixes ya aplicados por Codex en este turno
|
|
|
|
Codex dejo fixes concretos antes de entregarte este sprint:
|
|
|
|
### reference_listener.py
|
|
|
|
- bloqueo adicional de vocals dentro de `build_arrangement_plan()`
|
|
- ya no se deja pasar `selected["vocal_loop"]`
|
|
- ya no se deja pasar `selected["vocal_shot"]`
|
|
- `vocal_alt` queda forzado a `None`
|
|
- `vocal_shot` fue removido del mapa de variacion por seccion
|
|
|
|
### test_piano_forward.py
|
|
|
|
- test endurecido para verificar que:
|
|
- `plan["layers"]` no contenga roles vocales
|
|
- `plan["section_samples"]` no contenga claves vocales
|
|
|
|
GLM no debe revertir estos cambios.
|
|
|
|
---
|
|
|
|
## 4. Objetivo real del sprint
|
|
|
|
Recuperar dos cosas al mismo tiempo:
|
|
|
|
1. coherencia real
|
|
2. creatividad real
|
|
|
|
Y hacerlo sin reabrir:
|
|
|
|
- vocals automaticas
|
|
- manifests mentirosos
|
|
- helpers no activas disfrazadas de fix
|
|
|
|
La meta no es "hacer mas compleja la generacion".
|
|
La meta es que deje de sonar al mismo tema con ropa distinta.
|
|
|
|
---
|
|
|
|
## 5. 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 reproducido.
|
|
|
|
3. No reabrir vocals automaticas:
|
|
- no seleccion
|
|
- no section plan
|
|
- no materializacion
|
|
- no persistencia
|
|
- no tracks `AUDIO VOCAL *`
|
|
|
|
4. No declarar anti-loop resuelto si el cambio esta en una helper no probada en runtime.
|
|
|
|
5. No cerrar el sprint con manifests viejos o inventados.
|
|
|
|
6. No cerrar el sprint sin una sesion nueva persistida y verificable.
|
|
|
|
7. No aceptar como "creatividad" cambiar solo perc/fills/FX.
|
|
|
|
8. No degradar coherencia armonica por buscar variedad.
|
|
|
|
---
|
|
|
|
## 6. Trabajo obligatorio para GLM
|
|
|
|
### P0. Atacar la identidad musical principal, no solo adornos
|
|
|
|
Revisar en [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py):
|
|
|
|
- `build_arrangement_plan()`
|
|
- `section_samples`
|
|
- `SECTION_VARIATION_ROLES`
|
|
- logica de `bass_positions`
|
|
- logica de `synth_positions`
|
|
|
|
Objetivo:
|
|
|
|
- `synth_loop` no puede quedar fijo globalmente durante toda la cancion
|
|
- `bass_loop` no puede quedar fijo globalmente durante toda la cancion
|
|
- tiene que existir variacion musical principal por seccion, no solo por FX
|
|
|
|
No significa randomizar sin control.
|
|
Significa introducir contraste controlado y coherente.
|
|
|
|
### P1. Recuperar creatividad estructural en song_generator.py
|
|
|
|
Revisar en [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py):
|
|
|
|
- `SECTION_BLUEPRINTS`
|
|
- `SECTION_BLUEPRINT_VARIANTS`
|
|
- `_build_sections()`
|
|
- `SectionVariationManager`
|
|
- `PhrasePlan`
|
|
|
|
Objetivo:
|
|
|
|
- bajar la repeticion de la macro-estructura
|
|
- ampliar diversidad real de blueprints para reggaeton/perreo
|
|
- evitar que todas las generaciones vuelvan al eje:
|
|
- intro
|
|
- drop a
|
|
- breakdown
|
|
- build b
|
|
- drop b
|
|
|
|
Quiero variedad controlada de:
|
|
|
|
- duraciones
|
|
- orden de break/build
|
|
- distribucion de densidad
|
|
- rol del piano/keys entre intro, break y build
|
|
|
|
### P2. Variacion armonica coherente, no caos
|
|
|
|
Tenes que reforzar la coherencia sin aplanar creatividad.
|
|
|
|
Objetivo musical:
|
|
|
|
- una familia primaria clara
|
|
- familias secundarias compatibles
|
|
- mas presencia de `piano/keys/rhodes`
|
|
- menos sensación de "mismo loop completo pegado en todas las secciones"
|
|
|
|
Pero:
|
|
|
|
- no rompas la tonalidad
|
|
- no rompas el hook
|
|
- no metas sonidos que parezcan de otro track
|
|
|
|
### P3. Persistencia y metricas de verdad
|
|
|
|
Hoy los manifests recientes siguen viniendo flojos:
|
|
|
|
- `generation_mode = None`
|
|
- `piano_presence = 0`
|
|
- `repetition_metrics = None`
|
|
|
|
Eso no puede seguir.
|
|
|
|
GLM tiene que cerrar el wiring real para que la sesion nueva persistida refleje:
|
|
|
|
- `generation_mode`
|
|
- `piano_presence`
|
|
- `repetition_metrics`
|
|
- `coherence_metrics`
|
|
|
|
No como metadata de papel.
|
|
Como verdad del resultado generado.
|
|
|
|
### P4. Cero vocals automaticas end-to-end
|
|
|
|
Verificar otra vez todo el path:
|
|
|
|
- seleccion
|
|
- arrangement plan
|
|
- materializacion
|
|
- manifest
|
|
|
|
Si aparece una sola capa vocal auto-generada, el sprint no cierra.
|
|
|
|
---
|
|
|
|
## 7. Casos de test obligatorios
|
|
|
|
Minimo tenes que dejar o endurecer tests para:
|
|
|
|
1. variacion seccional de `synth_loop` o material armonico principal en el path activo
|
|
2. variacion seccional de `bass_loop` o bajo principal en el path activo
|
|
3. ausencia total de roles vocales en `section_samples`
|
|
4. ausencia total de roles vocales en `layers`
|
|
5. persistencia real de `repetition_metrics`
|
|
6. persistencia real de `generation_mode`
|
|
7. persistencia real de `piano_presence`
|
|
8. no regresion de coherencia basica
|
|
|
|
No borres tests de Codex.
|
|
No reemplaces tests concretos por asserts vagos.
|
|
|
|
---
|
|
|
|
## 8. Validacion final obligatoria
|
|
|
|
Al final del sprint tenes que hacer una generacion nueva real con:
|
|
|
|
- `genre = reggaeton`
|
|
- `style = perreo duro vieja escuela tipo safaera`
|
|
- referencia:
|
|
- `libreria\reggaeton\ejemplo.mp3`
|
|
|
|
Y tenes que demostrar con `session_id` nuevo y persistido:
|
|
|
|
1. `coherence_score >= 6.5`
|
|
2. `generation_mode = library-first-hybrid`
|
|
3. `mandatory_midi_hook.materialized = true`
|
|
4. `piano_presence.piano_layer_count >= 1`
|
|
5. `repetition_metrics.verdict != repetitive`
|
|
6. cero vocals automaticas
|
|
7. evidencia audible de que no es la misma cancion que la anterior
|
|
|
|
### Criterio auditivo obligatorio
|
|
|
|
En el report final no alcanza con metrics.
|
|
Tenes que describir con precision:
|
|
|
|
- que cambio entre intro/build/drop/break
|
|
- que material principal varia
|
|
- que sonidos dejaron de repetirse igual
|
|
- por que ya no suena al mismo track de siempre
|
|
|
|
Si no podes explicarlo claramente, no esta cerrado.
|
|
|
|
---
|
|
|
|
## 9. Formato obligatorio del validation report
|
|
|
|
El archivo final debe llamarse:
|
|
|
|
- `SPRINT_v0.1.23_VALIDATION_REPORT.md`
|
|
|
|
Y debe tener estas secciones, en este orden:
|
|
|
|
1. `Runtime Truth`
|
|
2. `Code Changes`
|
|
3. `Code Review Findings Addressed`
|
|
4. `Fresh Session Evidence`
|
|
5. `Manifest Metrics`
|
|
6. `Anti-Same-Song Validation`
|
|
7. `Manual Vocal Policy Validation`
|
|
8. `Open Issues`
|
|
9. `Verdict`
|
|
|
|
### Reglas del report
|
|
|
|
1. No usar `session_id` viejos.
|
|
2. No usar frases tipo `should now`.
|
|
3. No escribir `fixed` si no hay evidencia en sesion nueva.
|
|
4. Si algo no cerro, ponerlo como `OPEN`.
|
|
5. Si la creatividad sigue floja, decirlo.
|
|
|
|
---
|
|
|
|
## 10. Definicion de done real
|
|
|
|
Este sprint solo cierra si:
|
|
|
|
1. la cancion deja de sentirse como la misma estructura con los mismos sonidos
|
|
2. la creatividad vuelve al material principal, no solo a adornos
|
|
3. la coherencia sube en vez de bajar
|
|
4. no hay ninguna vocal automatica
|
|
5. el manifest final refleja la verdad real del runtime
|
|
|
|
Si falta cualquiera de esos cinco puntos, el sprint no esta cerrado.
|