11 KiB
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
- [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:
- el
last_generation_idvigente esccb998a08796 - los manifests recientes siguen sin reflejar cierre real de coherencia
generation_modesigue viniendoNoneen sesiones recientespiano_presence.piano_layer_countsigue en0en sesiones recientesrepetition_metricssigue ausente en sesiones recientes- el hook MIDI no falla siempre, pero sigue siendo inestable
- 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_ROLESexiste- el bloque de
section_samplesenbuild_arrangement_plan()aplica variacion real solo a:percperc_alttop_loopsynth_peakatmos
Pero los roles que mas identidad musical fijan siguen casi globales:
bass_loopsynth_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:
INTRODROP ABREAKDOWNBUILD BDROP 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_shotdelrole_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_altqueda forzado aNonevocal_shotfue removido del mapa de variacion por seccion
test_piano_forward.py
- test endurecido para verificar que:
plan["layers"]no contenga roles vocalesplan["section_samples"]no contenga claves vocales
GLM no debe revertir estos cambios.
4. Objetivo real del sprint
Recuperar dos cosas al mismo tiempo:
- coherencia real
- 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
-
Trabajar solo en el arbol canonico:
C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts
-
No tocar wrappers ni config MCP salvo bug concreto reproducido.
-
No reabrir vocals automaticas:
- no seleccion
- no section plan
- no materializacion
- no persistencia
- no tracks
AUDIO VOCAL *
-
No declarar anti-loop resuelto si el cambio esta en una helper no probada en runtime.
-
No cerrar el sprint con manifests viejos o inventados.
-
No cerrar el sprint sin una sesion nueva persistida y verificable.
-
No aceptar como "creatividad" cambiar solo perc/fills/FX.
-
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_samplesSECTION_VARIATION_ROLES- logica de
bass_positions - logica de
synth_positions
Objetivo:
synth_loopno puede quedar fijo globalmente durante toda la cancionbass_loopno 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_BLUEPRINTSSECTION_BLUEPRINT_VARIANTS_build_sections()SectionVariationManagerPhrasePlan
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 = Nonepiano_presence = 0repetition_metrics = None
Eso no puede seguir.
GLM tiene que cerrar el wiring real para que la sesion nueva persistida refleje:
generation_modepiano_presencerepetition_metricscoherence_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:
- variacion seccional de
synth_loopo material armonico principal en el path activo - variacion seccional de
bass_loopo bajo principal en el path activo - ausencia total de roles vocales en
section_samples - ausencia total de roles vocales en
layers - persistencia real de
repetition_metrics - persistencia real de
generation_mode - persistencia real de
piano_presence - 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 = reggaetonstyle = perreo duro vieja escuela tipo safaera- referencia:
libreria\reggaeton\ejemplo.mp3
Y tenes que demostrar con session_id nuevo y persistido:
coherence_score >= 6.5generation_mode = library-first-hybridmandatory_midi_hook.materialized = truepiano_presence.piano_layer_count >= 1repetition_metrics.verdict != repetitive- cero vocals automaticas
- 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:
Runtime TruthCode ChangesCode Review Findings AddressedFresh Session EvidenceManifest MetricsAnti-Same-Song ValidationManual Vocal Policy ValidationOpen IssuesVerdict
Reglas del report
- No usar
session_idviejos. - No usar frases tipo
should now. - No escribir
fixedsi no hay evidencia en sesion nueva. - Si algo no cerro, ponerlo como
OPEN. - Si la creatividad sigue floja, decirlo.
10. Definicion de done real
Este sprint solo cierra si:
- la cancion deja de sentirse como la misma estructura con los mismos sonidos
- la creatividad vuelve al material principal, no solo a adornos
- la coherencia sube en vez de bajar
- no hay ninguna vocal automatica
- el manifest final refleja la verdad real del runtime
Si falta cualquiera de esos cinco puntos, el sprint no esta cerrado.