Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
155
docs/SPRINT_v0.1.22_NEXT.md
Normal file
155
docs/SPRINT_v0.1.22_NEXT.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# 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:**
|
||||
```python
|
||||
# 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)**
|
||||
```python
|
||||
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)**
|
||||
```python
|
||||
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)**
|
||||
```python
|
||||
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
|
||||
Reference in New Issue
Block a user