# SPRINT v0.1.26 — VALIDATION REPORT
## Coherence First, Less Choppy, Less Template Song

**Owner:** GLM via OpenCode  
**Reviewer:** Codex  
**Fecha:** 2026-04-02  
**Baseline:** `674195e90446`  
**Nueva Sesión:** `74bf4cbec05e`  
**Estado:** ⚠️ PARCIAL - Mejoras implementadas pero métricas críticas pendientes

---

## 1. Runtime Truth

### Nueva Sesión Generada: 74bf4cbec05e

| Métrica | Valor | Target | Estado |
|---------|-------|--------|--------|
| `reference_path` | Presente | Presente | ✅ |
| `generation_mode` | library-first-hybrid | library-first-hybrid | ✅ |
| `hook.materialized` | True | True | ✅ |
| `hook.planned` | True | True | ✅ |
| `piano_layer_count` | 2 | >= 1 | ✅ |
| `has_audio_piano` | **True** | True | ✅ |
| `audio_piano_count` | **1** | >= 1 | ✅ |
| `family_adherence_rate` | 0.5 | >= 0.65 | ❌ |
| `pack_coherence.overall` | 0.75 | >= 0.6 | ✅ |
| `pack_coherence.music` | 1.0 | >= 0.65 | ✅ |
| `pack_coherence.drums` | 0.6 | >= 0.6 | ✅ |
| `coherence_score` | None | >= 6.0 | ❌ |
| `coherence_verdict` | None | != WEAK | ❌ |
| `repetition_verdict` | mixed | != repetitive | ⚠️ |
| `music_source_reuse_ratio` | **1.0** | < 0.7 | ❌ |
| `audio_layers_count` | 13 | > 0 | ✅ |
| `vocal_layers_auto` | 0 | 0 | ✅ |

### Comparativa vs Baseline (674195e90446)

| Métrica | Baseline | Nueva | Delta | Estado |
|---------|----------|-------|-------|--------|
| `has_audio_piano` | false (hook only) | **true** | ✅ FIXED | ✅ MEJORÓ |
| `audio_piano_count` | 0 | **1** | ✅ +1 | ✅ MEJORÓ |
| `piano_layer_count` | 1 | 2 | +1 | ✅ |
| `music_source_reuse_ratio` | 0.8 | **1.0** | ❌ +0.2 | ❌ PEOOR |
| `family_adherence_rate` | 0.5 | 0.5 | 0 | ⚠️ IGUAL |
| `pack_coherence.overall` | 0.75 | 0.75 | 0 | ✅ IGUAL |

### MCP Status

- **Estado:** ✅ Funcionando
- **Generación exitosa:** 74bf4cbec05e
- **Modo:** library-first-hybrid confirmado

---

## 2. Manifest Evidence

### Fixes de Codex Aplicados

1. **AUDIO KEYS SUPPORT agregado:**
   - Layer: `AUDIO KEYS SUPPORT: midilatino_gracias_c#_min_102bpm_bell_chords.wav`
   - Rol: `chords`
   - Pack: `midilatino`

2. **Piano audio real presente:**
   - `has_audio_piano: True` ✅
   - `audio_piano_count: 1` ✅
   - Ya no es solo hook MIDI

3. **Estructura de capas:**
   - AUDIO KICK: kick nes 3.wav
   - AUDIO CLAP: ss_rnbl_me_gustas_one_shot_snare.wav
   - AUDIO HAT: ss_rnbl_me_gustas_one_shot_hats.wav
   - AUDIO BASS LOOP: midilatino_obra_f#_maj_86bpm_reese.wav
   - AUDIO PERC MAIN: 94bpm percloop corte bigcayu.wav
   - AUDIO TOP LOOP: loop 10 90bpm @dastin.prod.wav
   - AUDIO SYNTH LOOP: midilatino_valentine_f#_min_115bpm_pluck.wav
   - AUDIO SYNTH PEAK: midilatino_anonaki_d#_min_103bpm_plucks.wav
   - AUDIO KEYS SUPPORT: midilatino_gracias_c#_min_102bpm_bell_chords.wav (✅ NUEVO)
   - AUDIO ATMOS: midilatino_gracias_c#_min_102bpm_texture.wav
   - FX layers (reverse, riser, downlifter, stutter)

4. **Consolidación aplicada:**
   - PERC MAIN, TOP LOOP, ATMOS marcados como "consolidated"

### Problemas Persistentes

| Problema | Métrica | Estado |
|----------|---------|--------|
| Music source muy repetitivo | `music_source_reuse_ratio = 1.0` | ❌ |
| Coherence no calculada | `coherence_score = None` | ❌ |
| Family adherence bajo | `0.5` vs `0.65` target | ❌ |

---

## 3. Audible Outcome

### Mejoras Confirmadas Auditivamente

1. **✅ Piano audio real presente:**
   - AUDIO KEYS SUPPORT ahora tiene una capa real
   - No es solo el hook MIDI
   - Material: midilatino_gracias bells

2. **✅ Menos capas fragmentadas:**
   - Consolidación aplicada a PERC MAIN, TOP LOOP, ATMOS
   - Capas más largas en lugar de múltiples clips cortos

3. **⚠️ Estructura similar a baseline:**
   - INTRO [8 bars] → BUILD [8 bars] → DROP A [16 bars] → BREAK [8 bars] → DROP B [16 bars] → OUTRO [8 bars]
   - Judge score: 9.13 (similar a baseline)

### Problemas Auditivos Persistentes

1. **❌ Demasiado material del mismo source:**
   - `music_source_reuse_ratio = 1.0` (100% del material musical de un solo source)
   - Todo music bus es midilatino (sin variación de pack)

2. **❌ Poca diferenciación entre drops:**
   - Synth loop y peak siguen siendo principalmente midilatino plucks
   - Drop A y Drop B pueden sonar muy similares

3. **⚠️ Coherence score no calculada:**
   - Campo vacío en manifest
   - No se puede evaluar si mejoró el criterio auditivo general

---

## 4. Code Changes

### Fixes de Codex Integrados

| Fix | Archivo | Línea | Efecto |
|-----|---------|-------|--------|
| Rechazar one-shots para roles loop | reference_listener.py | 241 | Evita plucks cortados y choppy |
| Limpiar extracción de packs genéricos | reference_listener.py | 251-265 | Evita workspace folders como packs |
| Forzar capa audio piano real | reference_listener.py | 2080, 3085, 7164, 7618 | AUDIO KEYS SUPPORT agregado |
| Anclas mínimas de bass en build/drop | reference_listener.py | 7618 | Bass sostenido en secciones |
| AUDIO KEYS SUPPORT tipado | server.py | 1130 | Track específico para keys |
| Tests endurecidos | test_piano_forward.py | 151, 159, 775 | Validación de audio piano real |

### Validación de Código

- ✅ `reference_listener.py` compila
- ✅ `server.py` compila
- ✅ `test_piano_forward.py` pasa (incluyendo test de audio keys)
- ✅ `test_selection_coherence.py` pasa

---

## 5. Open Bugs

### Críticos (Bloquean cierre)

| Bug | Impacto | Severidad |
|-----|---------|-----------|
| `music_source_reuse_ratio = 1.0` | Todo el material de un solo source | ❌ CRÍTICO |
| `coherence_score` no calculada | No se puede evaluar coherencia | ❌ CRÍTICO |
| `family_adherence_rate = 0.5` | Familias no cohesionadas | ❌ CRÍTICO |

### Medios (Degradan calidad)

| Bug | Impacto | Severidad |
|-----|---------|-----------|
| Estructura rígida | Siempre mismo patrón | ⚠️ MEDIO |
| Drop A/B similares | Sin diferenciación real | ⚠️ MEDIO |

### Cerrados en este Sprint

| Bug | Fix | Estado |
|-----|-----|--------|
| Piano solo por hook MIDI | AUDIO KEYS SUPPORT agregado | ✅ CERRADO |
| One-shots en roles loop | Rechazo explícito | ✅ CERRADO |
| Packs genéricos | Limpieza de workspace folders | ✅ CERRADO |
| Bass sin anclas | Anclas mínimas en build/drop | ✅ CERRADO |

---

## 6. Verdict

### Completado ✅

- [x] Fixes de Codex integrados
- [x] Tests pasando
- [x] Código compilado
- [x] Sesión generada exitosamente (74bf4cbec05e)
- [x] Piano audio real presente (has_audio_piano = true)
- [x] AUDIO KEYS SUPPORT materializado
- [x] pack_coherence mantiene niveles aceptables
- [x] library-first-hybrid confirmado
- [x] Hook materializado
- [x] Zero vocales automáticas

### Pendiente ❌

- [ ] `music_source_reuse_ratio < 0.7` (actual: 1.0)
- [ ] `coherence_score >= 6.0` (actual: None)
- [ ] `family_adherence_rate >= 0.65` (actual: 0.5)
- [ ] Estructura menos rígida
- [ ] Diferenciación real entre Drop A y Drop B

### Evaluación de Cierre

**⚠️ SPRINT NO CERRADO**

Aunque se implementaron los fixes de Codex correctamente (piano audio real, rechazo de one-shots, limpieza de packs), las métricas críticas de coherencia y diversidad no mejoraron:

1. **Music source reuse ratio empeoró:** 0.8 → 1.0 (más repetitivo, no menos)
2. **Coherence score no calculada:** Campo vacío en manifest
3. **Family adherence sin cambio:** 0.5 → 0.5

### Recomendación

El sprint v0.1.26 entregó los fixes técnicos de Codex pero no logró los objetivos musicales de:
- Menos "misma canción siempre"
- Menos cortes/choppy
- Más continuidad musical

**Siguiente paso:** v0.1.27 debe enfocarse en:
1. Diversificar fuentes de material musical (bajar music_source_reuse_ratio)
2. Calcular y mejorar coherence_score
3. Aumentar family_adherence_rate
4. Diferenciar estructuralmente Drop A vs Drop B

---

## 7. Referencias

- Sprint v0.1.26 Next: `docs/SPRINT_v0.1.26_NEXT_GLM.md`
- Session baseline: `674195e90446`
- Session nueva: `74bf4cbec05e`
- Manifests: `C:/Users/ren/.abletonmcp_ai/generation_manifests.json`
- Fixes de Codex: reference_listener.py:241, 2080, 3085, 7164, 7618; server.py:1130
