# Sprint v0.1.20 - GLM Coherence Recovery, No Vocals, Anti-Loop

**Owner:** GLM via OpenCode  
**Reviewer:** Codex  
**Fecha:** 2026-04-01  
**Baseline real vigente:** `a6a4cc87e493`  
**Estado de cierre v0.1.19:** rechazado

---

## 1. Verdad operativa despues del review de Codex

El reporte [SPRINT_v0.1.19_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.19_VALIDATION_REPORT.md) no se acepta como verdad final del sistema.

Motivos concretos:

1. declara bloqueo total por jobs `5b6a3df6e04a` y `cff063342422`, pero hoy existe un manifest mas nuevo persistido:
   - `a6a4cc87e493`
2. declara `instrumental-only compliant`, pero la verdad persistida sigue mostrando capas con nombre vocal en manifests recientes
3. declara `anti-loop metrics implemented`, pero el manifest seguia ciego en dos puntos:
   - no siempre persistia `positions`
   - no siempre persistia `role`

Codex ya corrigio 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 consistente de `role` desde nombres de layer
- persistencia de `positions` en `audio_layers`
- repeticion calculada sobre layers ya sanitizados
- purge defensivo tambien en materializacion y fallback layer records

Codex tambien endurecio [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) con tests nuevos para:

- `manual-only vocal layers`
- `repetition_metrics`
- schema estable de coherencia

Validado por Codex en este turno:

- `py_compile` pasa
- `test_piano_forward.py` pasa
- `test_selection_coherence.py` pasa

No hubo generacion nueva en este turno.
La verdad runtime vigente sigue viniendo de manifests ya existentes y del feedback auditivo del usuario.

---

## 2. Feedback de producto que manda este sprint

El usuario ya dio el veredicto auditivo y hay que tomarlo como dato de producto, no como opinion accesoria:

- la cancion sigue demasiado loopeada
- sigue siendo poco creativa
- sigue sintiendose demasiado parecida a otras generaciones
- sigue metiendo vocals, aunque la politica del producto es manual-only

Eso significa que v0.1.19 no resolvio lo importante.

No quiero otro sprint de “code deployed, validation blocked”.
Quiero una mejora real en el resultado musical.

---

## 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 MCP ni config salvo bug concreto y demostrado.

3. Politica de vocals:
   - `vocal_loop`, `vocal_build`, `vocal_peak`, `vocal_shot` siguen siendo `manual-only`
   - no se seleccionan
   - no se materializan
   - no se persisten en `audio_layers`
   - no se justifican como “fx”
   - no se usan para levantar color o energia

4. No mejorar coherencia matando creatividad.

5. No mejorar creatividad abriendo caos de packs.

6. No cerrar el sprint si cualquiera de estas falla:
   - `coherence_score < 6.5`
   - `generation_mode != library-first-hybrid`
   - `mandatory_midi_hook.materialized != true`
   - `layer_selections.summary.total_layers <= 0`
   - `piano_presence.piano_layer_count < 1`
   - `repetition_metrics.verdict == repetitive`
   - aparece cualquier layer o track vocal auto-generado

7. No uses session ids inventados.
   - todo `session_id` citado debe existir en:
     - `C:\Users\ren\.abletonmcp_ai\generation_manifests.json`

---

## 4. Problemas reales abiertos

### P0. Reportes que no reflejan la verdad actual

Problema:

- GLM no puede volver a basarse en reports que dicen “bloqueado” mientras ya existe una nueva sesion persistida
- eso genera debugging sobre fantasmas

Que hacer:

- usar como baseline real el ultimo `session_id` persistido
- si hay una generacion nueva en Live pero no en manifest, no la cuentes como cierre
- en el report final incluir extracto real del manifest

### P1. Fuga vocal todavia abierta a nivel producto

Problema:

- aunque parte del pipeline ya filtra vocals, el usuario sigue viendo resultado con vocals
- eso indica que el bloqueo no estaba cerrado end-to-end

Estado despues de Codex:

- `server.py` ya sanea layers vocales en:
  - materializacion
  - manifest
  - fallback layer records
- `_build_audio_pattern_positions()` ya no agrega posiciones vocales de forma activa

Lo que GLM tiene que hacer:

1. revisar si queda fuga vocal en:
   - `reference_listener.py`
   - `song_generator.py`
   - cualquier path de report o manifest secundario
2. asegurar que ningun track vocal automatico aparezca ni por nombre ni por rol
3. revisar que `clear/reset` de sesion no deje tracks vocales residuales que luego parezcan parte de la generacion nueva

### P2. Anti-loop de verdad, no solo metrica decorativa

Problema:

- la cancion sigue demasiado plana y repetitiva
- `repetition_metrics` por si solo no arregla nada si el pipeline sigue generando el mismo material

Lo que GLM tiene que hacer:

1. revisar la cadena completa:
   - `song_generator.py`
   - `PhrasePlan`
   - `MusicalTheme`
   - pattern banks
   - consolidacion en `server.py`
2. verificar que intro/build/drop/break no queden con la misma firma musical real
3. medir reuse real de:
   - motivo armonico
   - source file musical
   - firma de seccion
4. no conformarse con logs
   - demostrarlo en manifest

### P3. Creatividad recuperada sin perder identidad

Problema:

- hubo un retroceso: antes habia mas sensacion de tema, ahora parece “la misma pista” con cambios menores

Hipotesis principal:

- demasiada consolidacion
- demasiado cierre del bus `music`
- demasiado reuse de un unico material musical

Objetivo:

- una base coherente
- pero con contraste real entre secciones
- sin volver a mezclar packs arbitrarios

### P4. Hibrido instrumental todavia flojo

Problema:

- el sistema sigue olvidandose de:
  - armonias MIDI
  - presencia real de piano/keys
  - hook materializado

No quiero:

- solo audio loops
- solo pluck suelto
- piano solo en metadata

Quiero:

- libreria del usuario
- soporte armonico MIDI real
- piano/keys/rhodes cuando sumen
- hook materializado y verificable

---

## 5. Trabajo obligatorio

### A. No romper los fixes de Codex

No reabras ni simplifiques:

- sanitizacion de vocal layers
- inferencia de `role`
- persistencia de `positions`
- schema estable de `coherence_metrics`

Si vas a tocar eso, tiene que ser para mejorarlo con evidencia.

### B. Auditar creatividad en el codigo real

Tenes que leer y verificar:

- `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py`
- `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py`
- `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py`

Busco especialmente:

- donde se repite exactamente el mismo motivo
- donde se consolidan capas que deberian seguir separadas
- donde una capa musical de soporte queda igual en todas las secciones
- donde el sistema vuelve a elegir el mismo material aunque existan variantes validas

### C. Endurecer la verdad del manifest

El manifest final de una generacion valida debe dejar clarisimo:

- que capas armonicas hubo realmente
- si hubo hook MIDI materializado
- si hubo piano real
- cuanta repeticion hubo
- cuanta variacion real hubo
- que roles se omitieron por politica `manual-only`

Si el manifest no puede mostrar eso, el sprint no esta cerrado.

### D. Mantener instrumental-only estricto

GLM no puede “resolver creatividad” con voces.

Si necesitas subir energia o memoria:

- usa armonia
- usa contraste de seccion
- usa textura instrumental
- usa mejor variacion ritmica

No vocals.

---

## 6. Casos de test obligatorios

Como minimo, tenes que dejar o endurecer tests para:

1. capas vocales manual-only purgadas de `audio_layers`
2. `repetition_metrics` detectando secciones repetitivas reales
3. `generation_mode` hibrido no degradado
4. `coherence_metrics` estable
5. ausencia de vocals auto-generadas en fallback
6. presencia real de variacion entre secciones armonicas

No borres los tests que Codex agrego.
Si cambias el comportamiento, actualizalos con criterio senior y explicacion en el report.

---

## 7. Validacion final obligatoria

Al final del sprint tenes que hacer una validacion real con una generacion nueva.

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`
- `piano_presence.piano_layer_count >= 1`
- `layer_selections.summary.total_layers > 0`
- `repetition_metrics.verdict != repetitive`
- `repetition_metrics.harmonic_loop_reuse_ratio < 0.75`
- `repetition_metrics.music_source_reuse_ratio < 0.80`
- `variant_summary.total_layers_with_variants >= 3`
- `variant_summary.total_variants >= 6`
- `auto_vocal_layers_enabled = false`
- cero layers vocales auto-generados

Si no llegas:

- no cierres el sprint
- no lo maquilles como “blocked”
- explicita exactamente si fallo por:
  - creatividad
  - coherencia
  - hook
  - piano
  - vocals
  - materializacion

---

## 8. Formato obligatorio del validation report

El md final de GLM 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 real de `generation_manifests.json`
- archivos tocados
- tests corridos
- thresholds con PASS/FAIL

No acepto:

- “validation blocked” sin probar el codigo actual
- “instrumental-only compliant” si aparecen vocals en tracks o manifest
- “anti-loop implemented” si la cancion sigue igual de plana
- “sin regresiones” sin evidencia

---

## 9. Archivos probables a tocar

- `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py`
- `AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.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 no esquives `song_generator.py` si ahi esta el origen real del aplanado musical.

---

## 10. Criterio de cierre

Este sprint solo cierra si GLM demuestra simultaneamente:

- mas coherencia
- menos loop plano
- mas creatividad real por seccion
- hibrido instrumental verdadero
- cero vocals automaticas
- y sin romper MCP ni runtime

Si mejora solo una parte, el sprint sigue abierto.
