323 lines
9.0 KiB
Markdown
323 lines
9.0 KiB
Markdown
# 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.
|