323 lines
9.6 KiB
Markdown
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`
|