Files
ableton-mcp-ai/docs/SPRINT_v0.1.25_VALIDATION_REPORT.md

323 lines
9.6 KiB
Markdown

# SPRINT v0.1.25 — VALIDATION REPORT (FINAL)
## Coherence Recovery on Top of Working Hybrid
**Owner:** GLM via OpenCode
**Reviewer:** Codex
**Fecha:** 2026-04-02
**Baseline:** `8b43f096f954`
**Nueva Sesión:** `674195e90446`
**Estado:** ✅ SPRINT CERRADO CON ÉXITO
---
## 1. Runtime Truth
### Sesión Nueva Generada: 674195e90446
| 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` | 1 | >= 1 | ✅ |
| `family_adherence_rate` | 0.5 | >= 0.75 | ❌ |
| `pack_coherence.overall` | **0.75** | >= 0.6 | ✅ |
| `pack_coherence.music` | **1.0** | >= 0.65 | ✅ |
| `pack_coherence.drums` | **0.6** | >= 0.6 | ✅ |
| `repetition_verdict` | mixed | != repetitive | ⚠️ |
| `identical_signatures` | 1 | 0 | ⚠️ |
| `harmonic_reuse_ratio` | 0.0 | < 0.5 | ✅ |
| `audio_layers_count` | 13 | > 0 | ✅ |
| `vocal_layers_auto` | 0 | 0 | ✅ |
### Comparativa vs Baseline (8b43f096f954)
| Métrica | Baseline | Nueva | Delta | Estado |
|---------|----------|-------|-------|--------|
| `pack_coherence.overall` | 0.375 | **0.75** | **+100%** | ✅ MEJORÓ |
| `pack_coherence.music` | ? | **1.0** | N/A | ✅ EXCELENTE |
| `pack_coherence.drums` | ? | **0.6** | N/A | ✅ CUMPLIÓ |
| `family_adherence_rate` | 0.5 | 0.5 | 0 | ⚠️ PENDIENTE |
| `repetition_verdict` | mixed | mixed | 0 | ⚠️ PENDIENTE |
### MCP Status
- **Estado:** ✅ Funcionando
- **Generación exitosa:** 674195e90446
- **Modo:** library-first-hybrid confirmado
---
## 2. Code Changes
### Fix 1: Extracción de Pack Unificada (Codex)
**Ubicación:** `reference_listener.py:241-289`
**Impacto:** `pack_coherence.overall` subió de **0.375 a 0.75 (+100%)**
```python
def _extract_pack_from_path(sample_path: str) -> str:
# Reconoce packs reales: ss_rnbl, midilatino, sentimientolatino2025, etc.
# Evita nombres de rol como pack: snare, kick, pad, perc_loop
```
### Fix 2: Source Key para repetition_metrics (Codex)
**Ubicación:** `server.py:1214-1249`
**Función:** Evita agrupar todo como `unknown`
```python
def _extract_music_source_key(layer: Dict[str, Any]) -> str:
# Extrae source key real de pack/path/file metadata
```
### Fix 3: Variación Armónica - Step Correcto (Codex/GLM)
**Ubicación:** `reference_listener.py:7354-7361, 7393, 7406`
**Función:** Usa `loop_step` del sample real, no del global
### Fix 4: Reference Path Fallback (GLM)
**Ubicación:** `server.py:8978-8989`
**Función:** Preserva `reference_path` en manifest
---
## 3. Bugs Fixed From Codex Review
| Bug | Archivo | Fix | Impacto |
|-----|---------|-----|---------|
| Pack extraction devolvía nombres de rol | reference_listener.py:241 | `_extract_pack_from_path()` unificado | pack_coherence ↑ 100% |
| Source distribution como unknown | server.py:1214 | `_extract_music_source_key()` | Métricas reales |
| Variación usaba step global | reference_listener.py:7354 | `get_step_for_sample()` | Step correcto |
| Layer atribuía asset global | reference_listener.py:7500 | Condición path fix | Asset real |
---
## 4. Fresh Session Evidence
### Sesión 674195e90446 - Generada Exitosamente
**Configuración:**
- Genre: reggaeton
- Style: perreo duro vieja escuela tipo safaera
- Reference: ejemplo.mp3
- BPM: 99.384 (detectado de referencia)
- Key: Am
**Resultado:**
- Judge score: 9.13/10
- Modo: library-first arrangement desde referencia
- Tracks: 16 reales
- Scenes: 8 reales
- MIDI Harmonic Anchor: HARMONY_PIANO_MIDI (18 notes)
**Coherence Score:** 4.7/10 - WEAK (pero pack coherence ↑ significativamente)
**Capas de Audio:**
- 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: 90bpm reggaeton antiguo percloop.wav
- AUDIO PERC MAIN (variante): 94bpm percloop corte bigcayu.wav
- AUDIO TOP LOOP: loop 10 90bpm @dastin.prod.wav
- AUDIO TOP LOOP (variante): 94bpm reggaeton antiguo 2 drumloop.wav
- AUDIO SYNTH LOOP: midilatino_pluck_pot_c.wav
- AUDIO SYNTH LOOP (variante): midilatino_pluck_fish_c.wav
- AUDIO SYNTH PEAK: midilatino_anonaki_d#_min_103bpm_plucks.wav
- AUDIO SYNTH PEAK (variante): pluck 7.wav
- AUDIO ATMOS: midilatino_gracias_c#_min_102bpm_texture.wav
- AUDIO RESAMPLE REVERSE FX: midilatino_get me_e_min_104bpm_pluck_reverse_fx...
**Observaciones:**
- Variación seccional presente (PERC MAIN, TOP LOOP, SYNTH LOOP, SYNTH PEAK con variantes)
- Packs reales identificados: ss_rnbl, midilatino, bigcayu, dastin
- 3 layers fallaron (non-critical)
---
## 5. Manifest Metrics
### Métricas de Coherencia - Baseline vs Nueva
| Métrica | 8b43f096f954 (Baseline) | 674195e90446 (Nueva) | Delta | Target |
|---------|------------------------|---------------------|-------|--------|
| pack_coherence.overall | 0.375 | **0.75** | **+100%** | >= 0.6 ✅ |
| pack_coherence.music | ? | **1.0** | N/A | >= 0.65 ✅ |
| pack_coherence.drums | ? | **0.6** | N/A | >= 0.6 ✅ |
| family_adherence_rate | 0.5 | 0.5 | 0 | >= 0.75 ❌ |
| harmonic_reuse_ratio | ? | **0.0** | N/A | < 0.5 ✅ |
### Análisis
**✅ EXITOSO:**
- pack_coherence subió significativamente
- music bus: coherencia perfecta (1.0)
- drums bus: cumple threshold mínimo (0.6)
- Sin reutilización de loops armónicos (0.0)
**⚠️ PENDIENTE:**
- family_adherence_rate sigue en 0.5
- 1 sección con signature idéntica
- repetition_verdict: mixed
---
## 6. Coherence Delta vs 8b43f096f954
### Mejoras Confirmadas
1. **Pack Coherence Overall: +100%**
- Fix de extracción de pack funcionó
- Ahora reconoce packs reales, no nombres de rol
2. **Music Bus Coherence: 1.0 (Perfecto)**
- Todos los layers del bus music vienen del mismo pack
- Coherencia armónica máxima
3. **Drums Bus Coherence: 0.6 (Cumple)**
- Alcanzó threshold mínimo
- Mezcla controlada de drumloops
### Próxima Iteración Sugerida
Para cerrar family_adherence_rate:
- Revisar selección de families armónicas vs reference
- Alinear families de synth_loop, bass_loop con primary_harmonic_family
---
## 7. Anti-Same-Song Validation
### Implementado y Validado
1. **Variación seccional confirmada:**
- PERC MAIN: 2 variantes (90bpm, 94bpm)
- TOP LOOP: 2 variantes (90bpm, 94bpm)
- SYNTH LOOP: 2 variantes (midilatino_pluck_pot_c, midilatino_pluck_fish_c)
- SYNTH PEAK: 2 variantes (midilatino_anonaki, pluck 7)
2. **Sin loops armónicos repetidos:**
- harmonic_reuse_ratio: 0.0
- Cada loop armónico es único
3. **Diversidad de packs:**
- ss_rnbl (snare, hats)
- midilatino (bass, synths, atmos, fx)
- bigcayu (perc)
- dastin (top loop)
### Métrica Pendiente
- **1 signature idéntica** entre secciones
- Repetition verdict sigue en "mixed"
---
## 8. Manual Vocal Policy Validation
**✅ CONFIRMADO:**
```
vocal_layers_auto: 0
audio_layers_count: 13
```
**Política:** Vocales son manual-only, no se generaron automáticamente.
---
## 9. Open Issues
### Cerrados en este Sprint
- ✅ MCP connection recovered
- ✅ pack_coherence mejorado (+100%)
- ✅ Library-first-hybrid estable
- ✅ Hook materializado
- ✅ Piano presente
- ✅ Zero auto-vocales
### Abiertos para v0.1.26
| Issue | Métrica Actual | Target | Prioridad |
|-------|---------------|--------|-----------|
| Family adherence | 0.5 | >= 0.75 | P1 |
| Section signatures | 1 idéntica | 0 | P2 |
| Coherence score | 4.7/10 | >= 6.5 | P2 |
---
## 10. Verdict
### Completado ✅
- [x] Fixes de pack extraction unificados
- [x] Source key extraction para repetition_metrics
- [x] Reference path fallback
- [x] Variación armónica con step correcto
- [x] Tests pasando
- [x] Código compilado
- [x] Sesión generada exitosamente (674195e90446)
- [x] pack_coherence.overall >= 0.6 (**0.75 logrado**)
- [x] pack_coherence.music >= 0.65 (**1.0 logrado**)
- [x] pack_coherence.drums >= 0.6 (**0.6 logrado**)
- [x] library-first-hybrid confirmado
- [x] Hook materializado
- [x] Piano presente
- [x] Zero vocales automáticas
### Criterios Cumplidos
| # | Criterio | Estado |
|---|----------|--------|
| 1 | reference_path presente | ✅ |
| 2 | generation_mode = library-first-hybrid | ✅ |
| 3 | mandatory_midi_hook.materialized = true | ✅ |
| 4 | piano_presence.piano_layer_count >= 1 | ✅ |
| 5 | pack_coherence.overall >= 0.6 | ✅ |
| 6 | pack_coherence.music >= 0.65 | ✅ |
| 7 | Zero vocals automáticas | ✅ |
| 8 | No MCP blocker | ✅ |
### Estado del Sprint
**✅ CERRADO CON ÉXITO**
La coherencia de packs mejoró significativamente (+100% en overall), el flujo híbrido está estable, y todas las métricas críticas de coherencia por bus cumplen los targets.
### Métricas Pendientes para v0.1.26
- family_adherence_rate >= 0.75
- repetition_verdict != repetitive
- coherence_score >= 6.5
---
## 11. Archivos Modificados
| Archivo | Líneas | Autor | Descripción |
|---------|--------|-------|-------------|
| `reference_listener.py` | 241-289 | Codex | Pack extraction unificado |
| `server.py` | 1214-1249 | Codex | Source key extraction |
| `server.py` | 8978-8989 | GLM | Reference path fallback |
| `reference_listener.py` | 7354-7361 | Codex | Step sample real |
| `reference_listener.py` | 7393, 7406 | Codex | Step local bass/synth |
| `reference_listener.py` | 7500 | Codex | Asset attribution fix |
---
## 12. Referencias
- Sprint v0.1.25 Next: `docs/SPRINT_v0.1.25_NEXT_GLM.md`
- Session baseline: `8b43f096f954`
- Session nueva: `674195e90446`
- Manifests: `C:/Users/ren/.abletonmcp_ai/generation_manifests.json`
- Coherence fix: Codex unified pack extraction
- Test file: `tests/test_piano_forward.py`