# Sprint v0.1.24 - GLM Runtime Truth, Hybrid Recovery, Anti-Same-Song Real

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

---

## 1. Verdad operativa despues del review de Codex

El reporte [SPRINT_v0.1.23_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.23_VALIDATION_REPORT.md) no cierra el sprint y quedo desactualizado en dos puntos importantes:

1. el claim de `MCP timeout` no es valido como blocker general
2. hoy si existe una sesion nueva persistida: `6df5c445aa1e`

Codex verifico runtime real:

- `get_session_info()` responde bien contra Live
- no hay bloqueo general del MCP

Codex verifico la sesion nueva `6df5c445aa1e` en [generation_manifests.json](C:\Users\ren\.abletonmcp_ai\generation_manifests.json):

- `genre = reggaeton`
- `style = perreo duro vieja escuela tipo safaera`
- `reference_path = None`
- `generation_mode = midi-first`
- `mandatory_midi_hook.materialized = false`
- `piano_presence.piano_layer_count = 0`
- `repetition_metrics = None`
- `coherence_metrics = None`
- `tracks_blueprint = 0`

Conclusion:

- GLM no valido el flujo pedido con referencia
- la sesion nueva no demuestra el path `library-first-hybrid`
- el trabajo en `reference_listener.py` por si solo no alcanza si el runtime cae otra vez a `midi-first`

---

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

### A. El reporte confunde ausencia de validacion con bloqueo real

GLM dejo `MCP timeout` como explicacion principal, pero Codex comprobo que el MCP si responde.

Regla nueva:

- no volver a usar `MCP timeout` como excusa general sin comando reproducible, timestamp y evidencia concreta

### B. GLM mejoro el path activo, pero dejo dos bugs reales en la variacion armonica

GLM agrego variacion para `synth_loop` y `bass_loop` en [reference_listener.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py). La idea iba en la direccion correcta, pero habia dos bugs:

1. la variacion seccional seguia usando el `step` del sample global, no el del sample alternativo real
2. si solo quedaba un sample alternativo en `positions_by_sample`, `add_layer()` seguia atribuyendo el layer al asset global en vez del sample realmente usado

Eso hace que:

- la variacion pueda quedar mal cuantizada
- el manifest pueda mentir sobre que sample sono realmente

Codex ya dejo corregido esto.

### C. Los tests nuevos de GLM eran demasiado debiles

GLM agrego tests que verificaban principalmente:

- que existan constantes
- que ciertas secciones esten en un set

Eso no prueba comportamiento runtime.

Codex ya endurecio la suite con un test que valida el path real:

- `build_arrangement_plan()` debe usar el sample armonico alternativo
- y debe respetar su `loop_step` real

### D. La sesion nueva demuestra otro problema mas importante

La sesion `6df5c445aa1e` no uso referencia:

- `reference_path = None`
- `reference_name = None`

Entonces:

- no valida el caso pedido por el sprint
- no prueba anti-same-song sobre el flujo referenciado
- no prueba coherencia de libreria
- no prueba el hibrido con hook + piano + libreria

### E. La regresion estructural sigue abierta

Aunque GLM agrego blueprints nuevos en [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py), no hay evidencia de que el usuario este escuchando eso en el path real.

Hasta que no exista una sesion nueva persistida que:

- use referencia
- quede en `library-first-hybrid`
- y materialice diferencias seccionales reales

no se puede dar por cerrada la recuperacion de creatividad.

---

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

### reference_listener.py

Codex corrigio dos bugs de la variacion armonica:

1. el `step` ahora se resuelve desde el sample realmente usado por seccion
2. `add_layer()` ya no adjudica automaticamente el layer al asset global cuando el sample real era otro

Esto afecta el path activo de `build_arrangement_plan()`.

### test_piano_forward.py

Codex agrego un test real de comportamiento:

- valida que `build_arrangement_plan()` materialice variacion armonica con `loop_step` del sample alternativo

GLM no debe revertir estos cambios.

---

## 4. Objetivo real del sprint

Cerrar la brecha entre:

- cambios en `reference_listener.py`
- y el resultado real que escucha el usuario

La prioridad absoluta ahora es:

1. volver al flujo `library-first-hybrid`
2. usar referencia real
3. recuperar creatividad sin perder coherencia
4. persistir metricas reales en manifest

No quiero otro sprint con mejoras locales correctas pero validadas sobre una sesion que no usa referencia.

---

## 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 usar sesiones sin referencia para cerrar un sprint de coherencia referenciada.

4. No usar `midi-first` como cierre valido para este objetivo.

5. No cerrar el sprint si la sesion nueva no cumple:
   - `reference_path != None`
   - `generation_mode = library-first-hybrid`
   - `mandatory_midi_hook.materialized = true`
   - `piano_presence.piano_layer_count >= 1`

6. No declarar creatividad recuperada si la diferencia sigue estando solo en adornos.

7. No aceptar tests que solo validen constantes o listas.

---

## 6. Trabajo obligatorio para GLM

### P0. Recuperar el path correcto de generacion

Tenes que identificar por que la sesion nueva `6df5c445aa1e` cayo en:

- `reference_path = None`
- `generation_mode = midi-first`
- `tracks_blueprint = 0`

Eso es prioridad maxima.

Hay que cerrar el wiring desde:

- request de generacion
- lectura de referencia
- `build_arrangement_plan()`
- materializacion
- persistencia de manifest

Hasta que eso no cierre, el resto de los claims musicales sigue en el aire.

### P1. Anti-same-song en el path que realmente escucha el usuario

Una vez recuperado el flujo referenciado:

- demostrar que `synth_loop` y/o `bass_loop` varian por seccion
- demostrar que la estructura no cae siempre en el mismo blueprint percibido
- demostrar que la creatividad vuelve al material principal

No alcanza con:

- cambiar fills
- cambiar perc loops
- cambiar FX

### P2. Persistencia real de metricas

Tenes que dejar funcionando de verdad en la sesion nueva:

- `coherence_metrics`
- `repetition_metrics`
- `generation_mode`
- `piano_presence`

No como `None`.
No como placeholder.
No como objeto vacio.

### P3. Hibrido real

Quiero evidencia real de:

- referencia cargada
- libreria usada
- hook MIDI creado
- piano/keys presentes
- audio y MIDI conviviendo

Si sigue saliendo `midi-first`, el sprint no cierra.

### P4. Validacion de verdad del manifest

Comparar la sesion nueva contra el set real y asegurar:

- que el manifest no miente sobre los samples usados
- que los layers armonicos reflejan el sample realmente materializado
- que la variacion seccional no queda perdida al persistir

---

## 7. Casos de test obligatorios

Minimo tenes que dejar o endurecer tests para:

1. flujo con referencia que no termine en `reference_path = None`
2. `generation_mode = library-first-hybrid` cuando hay referencia y plan hibrido
3. persistencia real de `coherence_metrics`
4. persistencia real de `repetition_metrics`
5. persistencia real de `piano_presence`
6. materializacion real del hook MIDI
7. variacion armonica seccional usando el sample real, no el asset global

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. `repetition_metrics.verdict != repetitive`
6. `coherence_score >= 6.5`
7. cero vocals automaticas

### Criterio auditivo obligatorio

En el report final tenes que explicar:

1. que cambio en intro/build/drop/break
2. que material principal dejo de repetirse igual
3. como se mantuvo coherencia sin volver a la misma cancion

Si no podes explicarlo con precision, no esta cerrado.

---

## 9. Formato obligatorio del validation report

El archivo final debe llamarse:

- `SPRINT_v0.1.24_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. `Hybrid Validation`
7. `Anti-Same-Song Validation`
8. `Manual Vocal Policy Validation`
9. `Open Issues`
10. `Verdict`

### Reglas del report

1. No usar `MCP timeout` sin evidencia reproducible.
2. No usar sesiones sin referencia para cerrar este sprint.
3. No usar lenguaje hipotetico tipo `should now`.
4. Si algo sigue abierto, poner `OPEN`.
5. Si la sesion cae en `midi-first`, decirlo explicitamente.

---

## 10. Definicion de done real

Este sprint solo cierra si:

1. el flujo vuelve a usar referencia real
2. el resultado vuelve a ser `library-first-hybrid`
3. la creatividad se recupera en el material principal
4. la coherencia sube en vez de bajar
5. el manifest refleja la verdad runtime

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