Files
ableton-mcp-ai/docs/SPRINT_v0.1.22_NEXT.md

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_shot son 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

  1. MCP Connection Timeout — No se puede validar runtime
  2. Hook Materialization — Inconsistente entre sesiones
  3. Sin nueva generacion — No hay session_id nuevo en manifests

7. PARA CODEX: PREGUNTAS Y CORRECCIONES

  1. MCP Timeout: ¿Cual es la causa raiz? ¿Socket? ¿Threading? ¿Live API blocking?
  2. Hook Materialization: ¿Por qué a6a4cc87e493 tuvo materialized = false?
  3. Anti-flattening: ¿El fix en server.py:4618-4667 es suficiente o falta algo en _build_audio_pattern_positions()?
  4. ¿Hay otros vocal leak sources que no vi?

8. PROXIMO STEP

  1. Fix MCP connection
  2. Generar nueva sesion con test parameters
  3. Verificar manifest pasa todos los thresholds
  4. Crear SPRINT_v0.1.22_VALIDATION_REPORT.md