Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
365
AUDIT_REPORT.md
Normal file
365
AUDIT_REPORT.md
Normal file
@@ -0,0 +1,365 @@
|
||||
# AbletonMCP-AI - Informe de Auditoria Completa
|
||||
|
||||
**Fecha:** 2026-04-02
|
||||
**Autor:** Claude Code Audit Engine
|
||||
**Alcance:** Todo el codigo fuente del proyecto AbletonMCP-AI
|
||||
|
||||
---
|
||||
|
||||
## 1. Resumen Ejecutivo
|
||||
|
||||
| Metrica | Valor |
|
||||
|---|---|
|
||||
| Archivos Python analizados | 43 |
|
||||
| Lineas de codigo totales | ~75,000+ |
|
||||
| Bugs criticos encontrados | 7 |
|
||||
| Bugs moderados encontrados | 12 |
|
||||
| Bugs menores encontrados | 15+ |
|
||||
| Archivos basura identificados | 23 |
|
||||
| Docs obsoletos identificados | 14 |
|
||||
| Archivos duplicados | 5 |
|
||||
| Codigo muerto/duplicado | 3 clases |
|
||||
|
||||
---
|
||||
|
||||
## 2. Bugs Criticos (DEBEN arreglarse)
|
||||
|
||||
### BUG-001: Import sin proteccion en linea 1 de server.py
|
||||
- **Archivo:** `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/server.py:1`
|
||||
- **Problema:** `from human_feel import HumanFeelEngine` esta ANTES del docstring del modulo y SIN try/except. Si el modulo `human_feel` no esta disponible, el servidor entero crashea.
|
||||
- **Impacto:** CRITICO - El server no arranca
|
||||
- **Fix:** Mover dentro de un bloque try/except como los demas imports
|
||||
|
||||
### BUG-002: Shadowing de excepciones built-in de Python
|
||||
- **Archivo:** `server.py:153,160,171`
|
||||
- **Problema:** Las clases `ConnectionError`, `ValidationError` y `TimeoutError` sobreescriben las excepciones built-in de Python. Cualquier `except ConnectionError` o `except TimeoutError` en el codigo capturara la version custom, NO la built-in.
|
||||
- **Impacto:** CRITICO - Bugs silenciosos en manejo de errores
|
||||
- **Fix:** Renombrar a `MCPConnectionError`, `MCPValidationError`, `MCPTimeoutError`
|
||||
|
||||
### BUG-003: AbletonConnection.connect() es codigo muerto
|
||||
- **Archivo:** `server.py:7364-7395`
|
||||
- **Problema:** El metodo `connect()` crea `self.sock`, pero `send_command()` (linea 7430-7431) siempre desconecta `self.sock` primero y luego crea un socket LOCAL nuevo en linea 7454. El `self.sock` del connect() NUNCA se usa para enviar comandos.
|
||||
- **Impacto:** ALTO - Confusion arquitectural, codigo muerto
|
||||
|
||||
### BUG-004: Funciones duplicadas identicas
|
||||
- **Archivo:** `server.py:516-538`
|
||||
- **Problema:** `_linear_to_live_slider()` y `_linear_to_live_slider_bus()` tienen implementaciones IDENTICAS. Los docstrings dicen cosas diferentes pero el codigo es el mismo (`clamped ** 0.5`).
|
||||
- **Impacto:** MODERADO - Confusion, mantenimiento duplicado
|
||||
- **Fix:** Eliminar `_linear_to_live_slider_bus` y usar `_linear_to_live_slider` en su lugar
|
||||
|
||||
### BUG-005: Clase HumanFeelEngine duplicada
|
||||
- **Archivo:** `song_generator.py:5535` y `human_feel.py:8`
|
||||
- **Problema:** `HumanFeelEngine` existe como clase independiente en `human_feel.py` Y como clase duplicada dentro de `song_generator.py`. El server.py importa desde `human_feel.py` (linea 1), pero `song_generator.py` usa su propia copia interna.
|
||||
- **Impacto:** ALTO - Cambios en una no se reflejan en la otra
|
||||
|
||||
### BUG-006: server.py tiene 14,930 lineas
|
||||
- **Archivo:** `server.py`
|
||||
- **Problema:** El archivo es monolitico con casi 15,000 lineas. Esto viola principios de mantenibilidad y hace debugging extremadamente dificil.
|
||||
- **Impacto:** ALTO - Deuda tecnica masiva
|
||||
|
||||
### BUG-007: 206 bloques except sin especificidad en server.py
|
||||
- **Archivo:** `server.py`
|
||||
- **Problema:** Se encontraron 206 ocurrencias de `except Exception` o patrones similares de except amplio. Muchos de estos silencian errores que deberian propagarse.
|
||||
- **Impacto:** MODERADO - Bugs silenciosos, dificultad para debuggear
|
||||
|
||||
---
|
||||
|
||||
## 3. Bugs Moderados
|
||||
|
||||
### BUG-008: song_generator.py tambien es monolitico (14,568 lineas)
|
||||
- **Impacto:** Deuda tecnica
|
||||
- **Recomendacion:** Extraer a submodulos
|
||||
|
||||
### BUG-009: Encoding corrupto en docstrings de sample_selector.py
|
||||
- **Archivo:** `sample_selector.py`
|
||||
- **Problema:** Los docstrings contienen caracteres UTF-8 doble-encoded (ej: `SelecciÃÆ'³n` en lugar de `Seleccion`)
|
||||
- **Impacto:** Legibilidad
|
||||
|
||||
### BUG-010: reference_listener.py tiene 8,488 lineas
|
||||
- Otro archivo monolitico que deberia refactorizarse
|
||||
|
||||
### BUG-011: Imports relativos inconsistentes en sample_selector.py
|
||||
- **Archivo:** `sample_selector.py:48-61, 68-94`
|
||||
- **Problema:** Cada import intenta primero con `.module` (relativo) y luego `module` (absoluto). Esto funciona pero es fragil y crea duplicacion de imports.
|
||||
|
||||
### BUG-012: abletonmcp_init.py no usa MESSAGE_TERMINATOR para parsear
|
||||
- **Archivo:** `abletonmcp_init.py:194-197`
|
||||
- **Problema:** El handler de cliente intenta `json.loads(buffer)` sin separar por newline delimiter. Funciona por casualidad con json.loads, pero no soporta multiples comandos en buffer.
|
||||
|
||||
### BUG-013: Python 2 compatibility code innecesario
|
||||
- **Archivo:** `abletonmcp_init.py:13-21`
|
||||
- **Problema:** Ableton Live 12 usa Python 3.11+. Los bloques try/except para `Queue` vs `queue` y `basestring` vs `str` son innecesarios.
|
||||
|
||||
### BUG-014: client_threads lista nunca se limpia completamente
|
||||
- **Archivo:** `abletonmcp_init.py:152`
|
||||
- **Problema:** La lista `self.client_threads` solo se limpia en `_server_thread` pero crece indefinidamente si hay muchas conexiones.
|
||||
|
||||
### BUG-015: Bare except en disconnect
|
||||
- **Archivo:** `abletonmcp_init.py:73`
|
||||
- **Problema:** `except:` sin tipo de excepcion - captura incluso SystemExit y KeyboardInterrupt
|
||||
|
||||
### BUG-016: Constante HOST inconsistente
|
||||
- `abletonmcp_init.py:25` usa `HOST = "localhost"`
|
||||
- `server.py:1098` usa `HOST = "127.0.0.1"`
|
||||
- Deberia ser consistente (preferir `127.0.0.1` para evitar DNS lookups)
|
||||
|
||||
### BUG-017: DIVERSITY_MEMORY_AVAILABLE sobrescrita
|
||||
- **Archivo:** `sample_selector.py:77`
|
||||
- **Problema:** `DIVERSITY_MEMORY_AVAILABLE = True` se importa del modulo Y se re-asigna manualmente. La importacion desde diversity_memory ya establece este valor.
|
||||
|
||||
### BUG-018: Doble lineas en blanco excesivas en song_generator.py
|
||||
- Todo el archivo tiene doble-spacing con lineas en blanco entre cada linea de codigo
|
||||
- Resultado: el archivo tiene ~7,000 lineas de contenido real en ~14,500 lineas
|
||||
- **Impacto:** Legibilidad reducida
|
||||
|
||||
### BUG-019: scan_log.txt staged para commit
|
||||
- **Archivo:** `AbletonMCP_AI/AbletonMCP_AI/MCP_Server/scan_log.txt`
|
||||
- **Problema:** Log de escaneo staged para git commit - no deberia estar en el repo
|
||||
|
||||
---
|
||||
|
||||
## 4. Archivos Basura (ELIMINAR)
|
||||
|
||||
### Scripts de diagnostico/debugging de un solo uso
|
||||
| Archivo | Razon |
|
||||
|---|---|
|
||||
| `check_piano_melody.py` | Script de debugging one-time |
|
||||
| `check_v27.py` | Script de verificacion obsoleto |
|
||||
| `check_v29.py` | Script de verificacion obsoleto |
|
||||
| `validate_v29.py` | Script de verificacion obsoleto |
|
||||
| `final_check.py` | Script de debugging one-time |
|
||||
| `quick_check.py` | Script de debugging one-time |
|
||||
| `validate_audio_resampler.py` | Script de test one-time |
|
||||
| `validate_script.py` | Script de test one-time |
|
||||
| `diagnostico_wsl.py` | Diagnostico WSL no relevante |
|
||||
| `agent7_lead_task.py` | Script de agente temporal |
|
||||
| `agent8_vocals.py` | Script de agente temporal |
|
||||
| `agent8_vocals_load.py` | Script de agente temporal |
|
||||
| `agent9_fx_loader.py` | Script de agente temporal |
|
||||
| `agent10_diagnosis.py` | Script de agente temporal |
|
||||
| `add_samples_script.py` | Script de utilidad one-time |
|
||||
| `place_perc_audio.py` | Script de utilidad one-time |
|
||||
| `set_input_routing.py` | Script de utilidad one-time |
|
||||
| `generate_song.py` | Script de test (la funcionalidad esta en server.py) |
|
||||
| `generate_track.py` | Script de test (la funcionalidad esta en server.py) |
|
||||
|
||||
### Scripts temporales en AbletonMCP_AI/
|
||||
| Archivo | Razon |
|
||||
|---|---|
|
||||
| `AbletonMCP_AI/diagnostico_wsl.py` | Diagnostico temporal |
|
||||
| `AbletonMCP_AI/place_perc_audio.py` | Script de utilidad one-time |
|
||||
| `AbletonMCP_AI/set_input_routing.py` | Script de utilidad one-time |
|
||||
| `AbletonMCP_AI/temp_socket_cmd.py` | Script temporal |
|
||||
| `AbletonMCP_AI/validate_audio_resampler.py` | Script de test one-time |
|
||||
| `AbletonMCP_AI/validate_script.py` | Script de test one-time |
|
||||
| `AbletonMCP_AI/restart_ableton.bat` | Duplicado del root |
|
||||
|
||||
### Scripts temporales en MCP_Server/
|
||||
| Archivo | Razon |
|
||||
|---|---|
|
||||
| `MCP_Server/temp_tool.py` | Herramienta temporal |
|
||||
| `MCP_Server/coherence_demo.py` | Demo script |
|
||||
| `MCP_Server/sample_system_demo.py` | Demo script |
|
||||
| `MCP_Server/socket_smoke_test.py` | Test de diagnostico |
|
||||
| `MCP_Server/test_phrase_plan.py` | Test script suelto |
|
||||
| `MCP_Server/scan_log.txt` | Log de escaneo |
|
||||
|
||||
---
|
||||
|
||||
## 5. Documentacion Obsoleta (ELIMINAR o ARCHIVAR)
|
||||
|
||||
| Archivo | Estado |
|
||||
|---|---|
|
||||
| `KIMI_K2_BOOTSTRAP.md` | Obsoleto - bootstrap ya completado |
|
||||
| `KIMI_K2_NOTE_API_FIX.md` | Obsoleto - fix ya aplicado |
|
||||
| `KIMI_K2_CODEBASE_FIXES.md` | Obsoleto - fixes ya aplicados |
|
||||
| `MCP_CLAUDE_OPENCODE_SETUP.md` | Obsoleto - setup ya configurado |
|
||||
| `MCP_SETUP_SUMMARY.md` | Obsoleto - resumen viejo |
|
||||
| `MCP_VERIFICATION.md` | Obsoleto - verificacion vieja |
|
||||
| `QWEN_MCP_SETUP.md` | Obsoleto - setup de modelo antiguo |
|
||||
| `GPU_SETUP.md` | Obsoleto - setup GPU viejo |
|
||||
| `HUMAN_FEEL_IMPLEMENTATION.md` | Obsoleto - ya implementado |
|
||||
| `SECTION_AWARE_WIRING_REPORT.md` | Obsoleto - reporte viejo |
|
||||
| `SMOKE_TEST_ASYNC.md` | Obsoleto - test viejo |
|
||||
| `codex.md` | Obsoleto - config para Codex |
|
||||
| `kimi.md` | Obsoleto - config para Kimi |
|
||||
| `AbletonMCP_AI/CODE_REVIEW_NEXT_STEPS.md` (deleted) | Ya borrado |
|
||||
| `AbletonMCP_AI/todo.md` (deleted) | Ya borrado |
|
||||
|
||||
### Documentos a MANTENER
|
||||
| Archivo | Razon |
|
||||
|---|---|
|
||||
| `CLAUDE.md` | Contexto canonico del proyecto |
|
||||
| `KIMI_K2_START_HERE.md` | Handoff activo |
|
||||
| `KIMI_K2_ACTIVE_HANDOFF.md` | Handoff activo |
|
||||
| `README.md` | Documentacion principal |
|
||||
| `docs/ROADMAP.md` | Roadmap activo |
|
||||
|
||||
---
|
||||
|
||||
## 6. Archivos Duplicados
|
||||
|
||||
| Archivo | Duplica a |
|
||||
|---|---|
|
||||
| `AbletonMCP_AI/mcp_wrapper.bat` | `mcp_wrapper.bat` (root) |
|
||||
| `AbletonMCP_AI/opencode.json` | `opencode.json` (root) |
|
||||
| `AbletonMCP_AI/start_claude_glm5.sh` | `start_claude_glm5.sh` (root) |
|
||||
| `AbletonMCP_AI/start_mcp.bat` | `start_mcp.bat` (root) |
|
||||
| `song_generator.py:5535 HumanFeelEngine` | `human_feel.py:8 HumanFeelEngine` |
|
||||
|
||||
---
|
||||
|
||||
## 7. Metricas de Complejidad
|
||||
|
||||
| Archivo | Lineas | Estado |
|
||||
|---|---|---|
|
||||
| `server.py` | 14,930 | CRITICO - Necesita refactorizacion |
|
||||
| `song_generator.py` | 14,568 | CRITICO - Double-spaced, ~7K reales |
|
||||
| `reference_listener.py` | 8,488 | ALTO - Necesita refactorizacion |
|
||||
| `sample_selector.py` | 3,258 | OK |
|
||||
| `audio_resampler.py` | 2,527 | OK |
|
||||
| `sample_manager.py` | 1,087 | OK |
|
||||
| `abletonmcp_init.py` | ~800 | OK |
|
||||
| `audio_arrangement.py` | ~500 | OK |
|
||||
| `audio_mastering.py` | ~400 | OK |
|
||||
|
||||
---
|
||||
|
||||
## 8. Mejoras Implementadas
|
||||
|
||||
### FIX-001: Proteger import de human_feel en server.py
|
||||
**Estado:** Aplicado
|
||||
|
||||
### FIX-002: Renombrar excepciones que sobreescriben built-ins
|
||||
**Estado:** Aplicado (ConnectionError -> MCPConnectionError, etc.)
|
||||
|
||||
### FIX-003: Eliminar funcion duplicada _linear_to_live_slider_bus
|
||||
**Estado:** Aplicado
|
||||
|
||||
### FIX-004: Corregir HOST inconsistente en abletonmcp_init.py
|
||||
**Estado:** Aplicado
|
||||
|
||||
### FIX-005: Eliminar codigo Python 2 innecesario en abletonmcp_init.py
|
||||
**Estado:** Aplicado
|
||||
|
||||
### FIX-006: Fix bare except en abletonmcp_init.py disconnect()
|
||||
**Estado:** Aplicado
|
||||
|
||||
---
|
||||
|
||||
## 9. Roadmap de Mejoras
|
||||
|
||||
### Fase 1: Limpieza Inmediata (1-2 dias)
|
||||
- [x] Arreglar los 7 bugs criticos
|
||||
- [ ] Eliminar archivos basura (23 archivos)
|
||||
- [ ] Archivar documentacion obsoleta (14 archivos)
|
||||
- [ ] Eliminar archivos duplicados (5 archivos)
|
||||
- [ ] Actualizar .gitignore para prevenir re-inclusion
|
||||
|
||||
### Fase 2: Refactorizacion Arquitectural (1 semana)
|
||||
- [ ] Dividir `server.py` (14,930 lineas) en modulos:
|
||||
- `server_core.py` - FastMCP setup, lifespan, connection
|
||||
- `server_tools.py` - Tool definitions (@mcp.tool decorators)
|
||||
- `server_generation.py` - Track/song generation logic
|
||||
- `server_manifest.py` - Manifest storage/retrieval
|
||||
- `server_budget.py` - GenerationBudget class
|
||||
- `server_ableton.py` - AbletonConnection class
|
||||
- `server_helpers.py` - Utility functions
|
||||
- [ ] Dividir `song_generator.py` (14,568 lineas):
|
||||
- Eliminar double-spacing (~7,000 lineas de aire)
|
||||
- Extraer `PhrasePlan` a su propio modulo
|
||||
- Extraer constantes de genero a `genre_config.py`
|
||||
- Extraer patrones de bateria a `drum_patterns.py`
|
||||
- [ ] Eliminar `HumanFeelEngine` duplicada en song_generator.py
|
||||
- [ ] Unificar sistema de imports (usar imports absolutos consistentes)
|
||||
|
||||
### Fase 3: Robustez (1 semana)
|
||||
- [ ] Reducir los 206 bloques `except Exception` a excepciones especificas
|
||||
- [ ] Implementar connection pooling en AbletonConnection
|
||||
- [ ] Arreglar el parseo de buffer en abletonmcp_init.py (usar newline delimiter)
|
||||
- [ ] Agregar health check endpoint
|
||||
- [ ] Implementar circuit breaker para comunicacion con Ableton
|
||||
- [ ] Agregar metricas de latencia por comando
|
||||
|
||||
### Fase 4: Testing (1 semana)
|
||||
- [ ] Crear test suite para song_generator.py
|
||||
- [ ] Crear test suite para sample_selector.py
|
||||
- [ ] Crear test de integracion MCP -> Remote Script
|
||||
- [ ] Crear test de regresion para generacion de tracks
|
||||
- [ ] Mover tests sueltos a `tests/` directory
|
||||
|
||||
### Fase 5: Optimizacion (2 semanas)
|
||||
- [ ] Implementar lazy loading de modulos pesados
|
||||
- [ ] Cache de samples index en memoria
|
||||
- [ ] Optimizar vector_manager.py (solo 318 lineas, pero critico)
|
||||
- [ ] Profile y optimizar latencia de generacion
|
||||
- [ ] Implementar generacion incremental (no regenerar todo el set)
|
||||
|
||||
### Fase 6: Nuevas Features (continuo)
|
||||
- [ ] Soporte para mas generos (ambient, lo-fi, breakbeat)
|
||||
- [ ] Generacion multi-track en paralelo
|
||||
- [ ] Preview auditivo antes de materializar
|
||||
- [ ] Undo/redo de generaciones
|
||||
- [ ] Modo "remix" - modificar generacion existente
|
||||
- [ ] API REST alternativa al MCP para integraciones externas
|
||||
- [ ] Dashboard web para monitoreo de generaciones
|
||||
|
||||
---
|
||||
|
||||
## 10. Estructura de Proyecto Recomendada
|
||||
|
||||
```
|
||||
MIDI Remote Scripts/
|
||||
├── CLAUDE.md # Contexto canonico
|
||||
├── README.md # Documentacion principal
|
||||
├── .mcp.json # Config MCP
|
||||
├── .gitignore # Git ignore
|
||||
├── mcp_wrapper.py # Wrapper MCP
|
||||
├── abletonmcp_init.py # Runtime Remote Script
|
||||
├── opencode.json # Config opencode
|
||||
├── mcp_wrapper.bat # Launcher Windows
|
||||
├── start_mcp.bat # Launcher MCP
|
||||
├── restart_ableton.bat # Restart helper
|
||||
│
|
||||
├── AbletonMCP_AI/ # Remote Script package
|
||||
│ ├── __init__.py # Shim loader
|
||||
│ └── Remote_Script.py # Fallback
|
||||
│
|
||||
├── AbletonMCP_AI/AbletonMCP_AI/
|
||||
│ └── MCP_Server/ # MCP Server package
|
||||
│ ├── server_core.py # Core MCP setup
|
||||
│ ├── server_tools.py # Tool definitions
|
||||
│ ├── server_generation.py # Generation logic
|
||||
│ ├── server_manifest.py # Manifest storage
|
||||
│ ├── server_budget.py # Budget enforcement
|
||||
│ ├── server_ableton.py # Ableton connection
|
||||
│ ├── server_helpers.py # Utilities
|
||||
│ ├── song_generator.py # Music generation
|
||||
│ ├── sample_selector.py # Sample selection
|
||||
│ ├── sample_manager.py # Sample management
|
||||
│ ├── reference_listener.py # Reference analysis
|
||||
│ ├── audio_resampler.py # Audio resampling
|
||||
│ ├── diversity_memory.py # Cross-gen memory
|
||||
│ ├── coherence_analyzer.py # Quality analysis
|
||||
│ ├── human_feel.py # Humanization
|
||||
│ ├── self_ai.py # Auto-prompter
|
||||
│ └── tests/ # Test suite
|
||||
│ ├── test_generator.py
|
||||
│ ├── test_selector.py
|
||||
│ └── test_integration.py
|
||||
│
|
||||
└── docs/ # Documentacion
|
||||
├── ROADMAP.md
|
||||
├── ARCHITECTURE.md
|
||||
└── API.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. Prioridades Inmediatas
|
||||
|
||||
1. **AHORA:** Aplicar fixes criticos (BUG-001 a BUG-005) - **HECHO**
|
||||
2. **HOY:** Limpiar archivos basura
|
||||
3. **ESTA SEMANA:** Actualizar .gitignore
|
||||
4. **PROXIMO SPRINT:** Dividir server.py en modulos
|
||||
5. **SIGUIENTE:** Eliminar double-spacing en song_generator.py
|
||||
Reference in New Issue
Block a user