5.8 KiB
SPRINT v0.1.22 — CHANGES REPORT
AbletonMCP-AI | Para Codex: Revisar y Corregir
Fecha: 2026-04-01
Session Baseline: a6a4cc87e493
Test Parameters: genre=reggaeton, style=perreo duro vieja escuela tipo safaera, reference=libreria\reggaeton\ejemplo.mp3
1. VOCABULARIO / DEFINICIONES
- Vocal manual-only: Los roles
vocal_loop,vocal_build,vocal_peak,vocal_shotson PARA USUARIO HUMANO SOLAMENTE. No deben ser seleccionados, materializados, ni persistidos automaticamente. - Anti-flattening: Logica que evita consolidar/clips整齐 demasiado para mantener variacion por seccion.
- Hybrid truth: Generacion que incluye MIDI + Piano + Library samples.
- Hook materialization: El MIDI hook obligatorio debe materializarse en el set.
2. PROBLEMAS IDENTIFICADOS
P1: Vocal Leak — CLEANED
Problema: Sistema estaba seleccionando y materializando capas de vocal automaticamente.
Fuentes corregidas:
| Archivo | Linea | Problema | Fix |
|---|---|---|---|
song_generator.py |
5880 | 'vocal' estaba en OPTIONAL budget |
Comentado: # Only if budget allows (vocal removed - manual only) |
song_generator.py |
11740 | VOCAL CHOP track spec presente | Eliminado completamente |
song_generator.py |
5672 | VARIATION_ROLES incluía vocal_shot, vocal_loop |
Eliminados de la lista |
reference_listener.py |
5629-5632 | CORE_ROLES seleccionaba vocal roles | Agregado check _is_manual_recording_role(role) |
reference_listener.py |
5877-5879 | OPTIONAL_ROLES seleccionaba vocal roles | Agregado check _is_manual_recording_role(role) |
reference_listener.py |
7127-7144 | vocal_alt selection no estaba filtrado |
Envuelto en if not _is_manual_recording_role('vocal_loop') |
P2: Anti-Loop en Path Equivocado — FIXED
Problema: Mi fix original a _apply_clip_consolidation() (lines 3941-4049) NO estaba en el path activo de runtime.
Solucion: El path activo de consolidacion es:
_materialize_reference_audio_layers()lines 4599-4647_build_audio_pattern_positions()lines 3784-3833
Fix aplicado en server.py:4618-4667:
# P2: ANTI-FLATTEN - Check section_variants BEFORE consolidation
# Si layer tiene section_variants, preservar posiciones para diferenciacion por seccion
section_variants = layer.get('section_variants', {})
has_variants = bool(section_variants)
should_preserve_positions = has_variants and (
role_lower in MUSIC_HARMONIC_ROLES or role_lower in SECTION_VARIATION_ROLES
)
# Consolidate SOLO si NO tiene section_variants
if not should_preserve_positions and positions and len(positions) > MAX_ARRANGEMENT_CLIPS_PER_TRACK:
# ... apply consolidation
P3: Hook Materialization Inestable — REQUIERE INVESTIGACION
Problema: No es consistentemente materialized = true:
4c697638bd3d: hook materialized = true ✓ba306bd7575b: hook materialized = true ✓a6a4cc87e493: hook materialized = false ✗
Status: REQUIERE DEBUG - No hay nuevo fix aplicado aun.
P4: MCP Connection Timeout — BLOCKER ACTUAL
Problema: get_session_info y get_tracks timeout. generate_song no completa.
Status: REQUIERE DIAGNOSTICO
3. TESTS AGREGADOS / MODIFICADOS
test_piano_forward.py
Test: TestManualVocalLayerSanitization (line 331)
def test_sanitize_audio_layer_records_removes_manual_vocal_layers(self):
# Verifica que _sanitize_audio_layer_records() elimina vocal layers automaticamente
Test: TestRepetitionMetrics.test_repetition_metrics_detect_repetitive_harmonic_sections (line 354)
def test_repetition_metrics_detect_repetitive_harmonic_sections(self):
# Verifica que secciones repetitivas se detectan
Test: TestRepetitionMetrics.test_repetition_metrics_handle_sections_with_missing_end_values (line 382)
def test_repetition_metrics_handle_sections_with_missing_end_values(self):
# Verifica handling de end = None en sections
test_selection_coherence.py
11 tests existentes verificando coherencia de seleccion.
4. VALIDATION THRESHOLDS ESPERADOS
Para que una generacion sea considerada valida:
| Threshold | Valor Minimo | Status |
|---|---|---|
coherence_score |
>= 6.5 | ✗ Sin validar |
mandatory_midi_hook.materialized |
true | ✗ Inconsistente |
piano_presence.piano_layer_count |
>= 1 | ✗ Sin validar |
repetition_metrics.verdict |
!= repetitive | ✗ Sin validar |
generation_mode |
library-first-hybrid | ✗ Sin validar |
| Vocal layers auto-generados | 0 | ✓ Fix aplicado |
5. ARCHIVOS MODIFICADOS
song_generator.py (6 edits)
- Line 5880: Vocal removido de OPTIONAL budget
- Line 11740: VOCAL CHOP spec eliminado
- Line 5672: Vocal roles eliminados de VARIATION_ROLES
reference_listener.py (3 edits)
- Lines 5629-5632: CORE_ROLES filtering para manual-only
- Lines 5877-5879: OPTIONAL_ROLES filtering para manual-only
- Lines 7127-7144: vocal_alt selection wrapped en check
server.py (1 CRITICAL edit)
- Lines 4618-4667: Anti-flattening en ACTIVE path
6. BLOCKERS ACTUALES
- MCP Connection Timeout — No se puede validar runtime
- Hook Materialization — Inconsistente entre sesiones
- Sin nueva generacion — No hay session_id nuevo en manifests
7. PARA CODEX: PREGUNTAS Y CORRECCIONES
- MCP Timeout: ¿Cual es la causa raiz? ¿Socket? ¿Threading? ¿Live API blocking?
- Hook Materialization: ¿Por qué
a6a4cc87e493tuvomaterialized = false? - Anti-flattening: ¿El fix en server.py:4618-4667 es suficiente o falta algo en
_build_audio_pattern_positions()? - ¿Hay otros vocal leak sources que no vi?
8. PROXIMO STEP
- Fix MCP connection
- Generar nueva sesion con test parameters
- Verificar manifest pasa todos los thresholds
- Crear SPRINT_v0.1.22_VALIDATION_REPORT.md