# Sprint v0.1.21 - GLM Runtime Truth, Anti-Loop Real, Zero Auto Vocals **Owner:** GLM via OpenCode **Reviewer:** Codex **Fecha:** 2026-04-01 **Baseline real vigente:** `a6a4cc87e493` **Estado de cierre v0.1.20:** no cerrado --- ## 1. Verdad operativa despues del review de Codex El reporte [SPRINT_v0.1.20_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.20_VALIDATION_REPORT.md) fue mejor que varios reports previos en honestidad, pero sigue sin cerrar runtime. Problemas concretos detectados por Codex: 1. no aporta una sesion nueva persistida que cierre el sprint 2. sigue apoyandose demasiado en “claims verified against code” 3. el fix anti-loop principal se hizo sobre una helper path que no esta demostrada como activa en runtime 4. el sistema seguia mostrando vocals en manifests viejos y el report no cerraba esa fuga end-to-end Codex ya dejo aplicados fixes reales en [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py): - sanitizacion defensiva de capas vocales manual-only - inferencia de `role` desde nombres de layer - persistencia de `positions` en `audio_layers` - `repetition_metrics` robusto contra `sections[*].end = None` Codex tambien endurecio tests en [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): - purge de vocal layers - repeticion con sections sin `end` Validado por Codex: - `py_compile` pasa - `test_piano_forward.py` pasa - `test_selection_coherence.py` pasa No hubo generacion nueva en este turno. --- ## 2. Hallazgos importantes que GLM tiene que tomar como constraints ### A. El anti-loop “implementado” no esta demostrado en el path activo GLM toco `_apply_clip_consolidation()` en [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py), pero hoy ese helper no esta demostrado como parte del camino runtime que construye la cancion final. Eso significa: - el cambio puede ser correcto como idea - pero no cuenta como fix real hasta que se pruebe impacto en una sesion nueva No quiero otro sprint donde: - el helper mejora - el resultado audible sigue igual ### B. `repetition_metrics` existia pero estaba roto para manifests reales En manifests reales recientes: - `sections[*].end` viene como `None` - `audio_layers` viejos no siempre traen `positions` - `audio_layers` viejos no siempre traen `role` Eso ya fue corregido por Codex para nuevas generaciones. GLM no debe reabrir ese bug. ### C. La fuga vocal era de punta a punta, no de una sola capa La politica `manual-only` no se cerraba solo en `reference_listener.py`. Habia que defender tambien: - materializacion - fallback - manifest - layer records GLM debe asumir que cualquier fix vocal que no cierre esos cuatro puntos no sirve. ### D. Hay evidencia mixta sobre hook MIDI No es correcto decir simplemente “hook materialization failing consistently”. Verdad real observada en manifests: - `4c697638bd3d`: hook materialized `true` - `ba306bd7575b`: hook materialized `true` - `a6a4cc87e493`: hook materialized `false` La conclusion correcta no es “siempre falla”. La conclusion correcta es: - el hook es inestable - no esta resuelto - requiere validacion sobre una sesion nueva --- ## 3. Objetivo real del sprint Cerrar la brecha entre: - fixes de codigo - y resultado musical real La prioridad absoluta es esta: 1. cero vocals automaticas 2. anti-loop real en el resultado final 3. creatividad por seccion 4. hibrido `library + MIDI + piano` verificable 5. manifest que refleje verdad runtime No quiero otro sprint centrado en helpers muertos o reportes “in progress”. --- ## 4. Reglas no negociables 1. Trabajar solo en el arbol canonico: - `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts` 2. No tocar wrappers/config MCP salvo bug concreto y demostrado. 3. Cero vocals automaticas: - no seleccion - no materializacion - no persistencia en `audio_layers` - no tracks `AUDIO VOCAL *` - no justificarlo como FX o “color” 4. No reportar anti-loop si no afecta el path runtime real. 5. No cerrar el sprint si no existe una sesion nueva persistida. 6. No aceptar `session_id` inventados o viejos como sustituto de validacion fresca. 7. No cerrar el sprint si cualquiera de estas falla: - `coherence_score < 6.5` - `mandatory_midi_hook.materialized != true` - `piano_presence.piano_layer_count < 1` - `repetition_metrics.verdict == repetitive` - `generation_mode != library-first-hybrid` - aparece cualquier vocal auto-generada --- ## 5. Trabajo obligatorio ### P0. Atacar el path activo, no helpers secundarios Antes de tocar nada: - identifica exactamente que funciones corren en la generacion real - no supongas que una helper afecta runtime solo porque existe Pistas actuales del path activo: - `song_generator.py` construye secciones, variantes, phrase plan y track specs - `reference_listener.py` construye `build_arrangement_plan()` - `server.py` materializa audio/midi y persiste el manifest - el anti-loop real hoy probablemente pasa mas por: - `song_generator.py` - `_build_audio_pattern_positions()` - `_materialize_reference_audio_layers()` - consolidacion de duplicados No alcanza con tocar `_apply_clip_consolidation()` si no demostras que esa ruta corre. ### P1. Anti-loop real en musica, no solo en drums Quiero foco en lo que el usuario oye como loop plano: - synth_loop - synth_peak - perc_loop - top_loop - material melodico y armonico por seccion Tenes que demostrar que: - intro/build/drop/break no comparten la misma firma musical - el material melodico no se repite como copia casi exacta - los layers musicales no se reducen a un unico loop dominante toda la cancion ### P2. Creatividad por seccion Revisar a fondo en [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py): - `SectionVariationManager` - `PhrasePlan` - pattern banks - elecciones de variante por seccion No me sirve que exista infraestructura si el audio final suena igual. Objetivo: - contraste real entre secciones - sin romper coherencia armonica ### P3. Hibrido real No acepto una generacion que sea: - solo loops - o solo pluck MIDI aislado - o piano solo en metadata GLM tiene que cerrar: - `mandatory_midi_hook.materialized = true` - `piano_presence.piano_layer_count >= 1` - `generation_mode = library-first-hybrid` ### P4. Vocal policy end-to-end Verificar en una sesion nueva: - no tracks `AUDIO VOCAL *` - no roles vocales en `audio_layers` - no roles vocales en `layer_selections` - no roles vocales en selected/layers del plan final Si aparece uno solo, el sprint no cierra. --- ## 6. Casos de test obligatorios Minimo tenes que dejar o endurecer tests para: 1. `repetition_metrics` con sections reales que tienen `end=None` 2. layers vocales purgados de manifest 3. ausencia de `AUDIO VOCAL *` en persistencia final 4. preservacion de variacion por seccion en el path runtime que realmente corre 5. hook MIDI materializado 6. presencia real de piano o keys en el hibrido final No borres tests de Codex. --- ## 7. Validacion final obligatoria Al final del sprint tenes que hacer una generacion nueva real. Parametros: - `genre = reggaeton` - `style = perreo duro vieja escuela tipo safaera` - referencia: - `libreria\reggaeton\ejemplo.mp3` Tenes que demostrar con `session_id` nuevo y persistido: - `coherence_score >= 6.5` - `generation_mode = library-first-hybrid` - `mandatory_midi_hook.materialized = true` - `piano_presence.piano_layer_count >= 1` - `repetition_metrics.verdict != repetitive` - `repetition_metrics.harmonic_loop_reuse_ratio < 0.75` - `repetition_metrics.music_source_reuse_ratio < 0.80` - `layer_selections.summary.total_layers > 0` - cero vocals auto-generadas Si no llegas: - no declares “partial complete” - no declares “blocked” sin evidencia nueva - explica exactamente donde esta el cuello de botella --- ## 8. Formato obligatorio del validation report El report final de GLM debe tener estas secciones: 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 real de `generation_manifests.json` - archivos tocados - tests corridos - thresholds con PASS/FAIL No acepto: - “code complete” - “validation blocked” - “anti-loop implemented” si no hay evidencia runtime fresca. --- ## 9. Criterio de cierre Este sprint solo cierra si GLM demuestra simultaneamente: - menos loop plano - mas creatividad real - coherencia mejor - hook y piano reales - cero vocals automaticas - y manifest alineado con runtime Si falla uno solo de esos puntos, el sprint sigue abierto.