# Sprint v0.1.25 - GLM Coherence Recovery on Top of Working Hybrid

**Owner:** GLM via OpenCode  
**Reviewer:** Codex  
**Fecha:** 2026-04-02  
**Baseline real vigente:** `8b43f096f954`  
**Estado de cierre v0.1.24:** no cerrado

---

## 1. Verdad operativa despues del review de Codex

El reporte [SPRINT_v0.1.24_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.24_VALIDATION_REPORT.md) quedo desactualizado durante el mismo ciclo.

Codex verifico contra:

- [generation_manifests.json](C:\Users\ren\.abletonmcp_ai\generation_manifests.json)
- [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py)
- [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py)
- OpenCode real via `opencode mcp list --print-logs`

Verdad real observada hoy:

1. OpenCode MCP si funciona:
   - `ableton-mcp-ai connected`
   - `toolCount = 77`

2. Existe una sesion nueva real y persistida:
   - `session_id = 8b43f096f954`

3. El flujo hibrido volvio a aparecer en esa sesion:
   - `reference_path` presente
   - `generation_mode = library-first-hybrid`
   - `mandatory_midi_hook.materialized = true`
   - `piano_presence.piano_layer_count = 1`
   - cero vocales automaticas en `audio_layers`

4. Pero la coherencia sigue abierta:
   - `family_adherence_rate = 0.5`
   - `pack_coherence.overall = 0.375`
   - `repetition_metrics.verdict = mixed`
   - `music_source_reuse_ratio` sigue alto

Conclusion:

- v0.1.24 recupero parte del wiring correcto
- no recupero todavia la coherencia que escucha el usuario

---

## 2. Code Review de Codex sobre lo que hizo GLM

### A. El report de GLM siguio tratando al MCP como blocker cuando ya no lo era

El report afirmaba:

- cliente MCP no conectado
- validacion runtime bloqueada por OpenCode

Codex lo reprodujo y hoy OpenCode responde bien.

Regla nueva:

- no volver a usar `MCP blocker` como conclusion sin evidencia fresca del cliente y del wrapper

### B. GLM si recupero el hibrido, pero no lo reconocio bien en su propio report

La sesion `8b43f096f954` demuestra:

- referencia real
- modo hibrido real
- hook MIDI real
- piano via hook

Entonces el problema ya no es "volver a salir de midi-first".
El problema ahora es:

- mejorar coherencia
- dejar de repetir material
- hacer que las metricas reflejen mejor esa realidad

### C. Habia dos bugs reales en la variacion armonica seccional

Codex ya corrigio:

1. el `loop_step` se calculaba con el sample global en vez del sample alternativo real
2. el layer podia quedar persistido como si hubiera usado el asset global aunque el sample real fuese otro

Eso quedo cubierto con test real.

### D. Habia dos bugs reales en las metricas de coherencia/repeticion

Codex ya corrigio:

1. `repetition_metrics` agrupaba demasiadas fuentes como `unknown`
2. la extraccion de `pack` en `reference_listener.py` devolvia valores basura como:
   - `snare`
   - `pad`
   - `perc_loop`

Eso hacia que:

- `dominant_packs` quedara contaminado
- la coherencia por buses fuera poco confiable
- el analisis anti-loop perdiera precision

### E. El foco correcto ya cambio

No quiero otro sprint centrado en:

- reference fallback
- hook inexistente
- MCP blocker

Eso ya no es el cuello principal.

Ahora el cuello principal es:

- coherencia musical real
- coherencia de packs real
- reducir la sensacion de misma cancion

---

## 3. Fixes ya aplicados por Codex en este turno

### server.py

Codex agrego `_extract_music_source_key()` y lo conecto a `repetition_metrics` para que use metadata real de source/pack/path en vez de agrupar todo como `unknown`.

### reference_listener.py

Codex unifico la extraccion de pack hacia `_extract_pack_from_path()` y corrigio heuristicas para reconocer mejor:

- `ss_rnbl`
- `midilatino`
- `sentimientolatino2025`
- `reggaeton 3`
- `bigcayu`
- `dastin`
- `drumloops`

Ademas elimino la degradacion a nombres de rol como `snare`, `kick`, `pad`, `perc_loop`.

### test_piano_forward.py

Codex endurecio tests para verificar:

1. variacion armonica usando el sample real
2. extraccion de source key desde paths reales
3. extraccion de pack desde paths reales

GLM no debe revertir estos cambios.

---

## 4. Objetivo real del sprint

Con el hibrido ya recuperado, el objetivo ahora es elevar coherencia real y reducir la sensacion de track repetido.

Prioridades:

1. mejorar coherencia armonica
2. mejorar coherencia de packs por bus
3. mantener creatividad sin volver al mismo tema
4. conservar el flujo `library-first-hybrid`
5. mantener cero vocales automaticas

---

## 5. Reglas no negociables

1. Trabajar solo en el arbol canonico:
   - `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts`

2. No reabrir vocals automaticas.

3. No romper el flujo recuperado:
   - `reference_path` presente
   - `generation_mode = library-first-hybrid`
   - `mandatory_midi_hook.materialized = true`

4. No usar `MCP blocker` como comodin.

5. No cerrar el sprint si las metricas mejoran solo por parsing pero el audio sigue igual.

6. No aceptar `dominant_packs` con nombres de rol o placeholders.

---

## 6. Trabajo obligatorio para GLM

### P0. Mejorar coherencia sobre el flujo hibrido que ya funciona

Tomar `8b43f096f954` como baseline real.

Objetivos minimos:

- `family_adherence_rate` subir de `0.5` a `>= 0.75`
- `pack_coherence.overall` subir de `0.375` a `>= 0.6`
- mantener `library-first-hybrid`

### P1. Arreglar coherencia de packs por bus de verdad

Usando los fixes de Codex ya integrados, GLM tiene que revisar por que:

- drums
- music
- fx

siguen mezclando material de forma poco consistente.

Quiero especial foco en:

- `dominant_packs`
- `pack_coherence`
- seleccion de drum layers
- seleccion de material armonico principal

No me sirve una cancion donde:

- el hook esta bien
- pero drums/music/fx parecen venir de mundos distintos

### P2. Reducir sensacion de misma cancion sin destruir coherencia

Ahora que `synth_loop` y `bass_loop` ya pueden variar:

- validar que la diversidad se escuche en el material principal
- no solo en FX y adornos

Tenes que demostrar contraste real entre:

- intro
- build
- drop
- break

pero sin bajar la coherencia armonica.

### P3. Validar con metricas que ya no sean ciegas

Con los fixes de Codex, el proximo report ya no puede decir:

- `unknown` para casi todo
- `dominant_pack` inventado por rol

Tenes que mostrar:

- `source_distribution` util
- `dominant_packs` plausibles
- `pack_coherence` consistente con el material seleccionado

### P4. OpenCode / MCP

No hay que rediseñar la config.
OpenCode hoy conecta.

Solo si vuelve a fallar, documenta:

- comando exacto
- hora
- salida real
- si `opencode mcp list --print-logs` conecta o no

Sin eso, no lo uses como blocker.

---

## 7. Casos de test obligatorios

Minimo tenes que dejar o endurecer tests para:

1. `dominant_packs` no use nombres de rol como pack
2. `_extract_pack_from_path()` resuelva tokens reales de libreria
3. `repetition_metrics.source_distribution` no colapse en `unknown`
4. `pack_coherence` mantenga shape correcto
5. el flujo con referencia siga en `library-first-hybrid`
6. el hook MIDI siga materializandose
7. cero vocales automaticas siga estable

No borres tests de Codex.

---

## 8. Validacion final obligatoria

Al final del sprint tenes que generar una sesion nueva real con:

- `genre = reggaeton`
- `style = perreo duro vieja escuela tipo safaera`
- referencia:
  - `libreria\reggaeton\ejemplo.mp3`

Y demostrar con `session_id` nuevo y persistido:

1. `reference_path` presente
2. `generation_mode = library-first-hybrid`
3. `mandatory_midi_hook.materialized = true`
4. `piano_presence.piano_layer_count >= 1`
5. `family_adherence_rate >= 0.75`
6. `pack_coherence.overall >= 0.6`
7. `repetition_metrics.verdict != repetitive`
8. cero vocals automaticas

### Criterio auditivo obligatorio

En el report final tenes que explicar:

1. que mejoro en coherencia respecto de `8b43f096f954`
2. que material principal dejo de sonar tan repetido
3. por que la cancion sigue siendo una misma obra coherente y no un collage

Si no podes justificar eso claramente, no esta cerrado.

---

## 9. Formato obligatorio del validation report

El archivo final debe llamarse:

- `SPRINT_v0.1.25_VALIDATION_REPORT.md`

Y debe tener estas secciones, en este orden:

1. `Runtime Truth`
2. `Code Changes`
3. `Bugs Fixed From Codex Review`
4. `Fresh Session Evidence`
5. `Manifest Metrics`
6. `Coherence Delta vs 8b43f096f954`
7. `Anti-Same-Song Validation`
8. `Manual Vocal Policy Validation`
9. `Open Issues`
10. `Verdict`

### Reglas del report

1. No decir que OpenCode esta bloqueado sin evidencia reproducible.
2. No usar una sesion vieja si ya existe una mas nueva.
3. No usar lenguaje hipotetico tipo `should now`.
4. Si la coherencia sigue floja, decirlo.
5. Si algun dominant pack sale con nombre de rol, marcarlo como bug.

---

## 10. Definicion de done real

Este sprint solo cierra si:

1. el flujo hibrido sigue estable
2. la coherencia sube de forma medible
3. las metricas dejan de mentir sobre packs y fuentes
4. la cancion deja de sentirse como la misma de siempre
5. no reaparecen vocals automaticas

Si falla cualquiera de esos cinco puntos, no esta cerrado.
