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

9.7 KiB

Sprint v0.1.17 - Persisted Validation and Hybrid Coherence Closure

Owner: Kimi via OpenCode
Reviewer: Codex
Fecha: 2026-04-01
Baseline real vigente: e3c3691cc922
Estado de cierre v0.1.16: no aceptado como validación real


1. Resultado del review de v0.1.16

El archivo [SPRINT_v0.1.16_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.16_VALIDATION_REPORT.md) no cierra el sprint. Es un informe de implementación, no una validación real.

Verdades confirmadas por Codex:

  • Kimi sí implementó piezas bus-aware en reference_listener.py.
  • Kimi sí agregó verdad híbrida en _calculate_piano_presence() y consolidación de duplicados en server.py.
  • El reporte no aporta una generación persistida nueva con métricas reales.
  • La última verdad persistida sigue siendo e3c3691cc922.

Regresiones reales encontradas y corregidas por Codex en reference_listener.py:

  1. build_arrangement_plan() rompía si select_dominant_palette() devolvía str legacy en vez de dict.
  2. verify_pack_coherence(...) se llamaba con primary_harmonic_family, variable inexistente en ese scope.
  3. palette_info["dominant_pack"] escribía una variable dominant_pack inexistente.

Además se endureció test_piano_forward.py para fijar:

  • normalización legacy -> bus-aware de dominant_packs
  • persistencia de palette_info.dominant_pack
  • persistencia de palette_info.dominant_packs.music

Estado real después del review:

  • py_compile pasa
  • test_piano_forward.py pasa
  • test_selection_coherence.py pasa
  • no existe todavía una nueva sesión validada que reemplace e3c3691cc922

2. Verdad operativa hoy

Lo último realmente persistido y verificable sigue siendo e3c3691cc922:

  • generation_mode = library-first-hybrid
  • mandatory_midi_hook.materialized = true
  • hook materializado como HARMONY_PIANO_MIDI
  • primary_harmonic_anchor = pluck
  • coherence_score = 4.6
  • pack_coherence_ratio = 0.25
  • piano_presence quedó desfasado respecto del hook híbrido en esa sesión vieja

Hallazgo adicional importante:

  • durante este review se intentó una nueva generación real
  • Live siguió ejecutando comandos
  • el wrapper/MCP terminó en timeout
  • no quedó una nueva sesión persistida en C:\Users\ren\.abletonmcp_ai\generation_manifests.json

Conclusión senior:

  • v0.1.16 mejoró wiring y tests
  • v0.1.16 no cerró la validación end-to-end
  • el sistema todavía no prueba de forma confiable que la nueva coherencia por bus mejore una generación real persistida

3. Objetivo del sprint

Cerrar la transición de:

  • bus-aware implementation present

a:

  • bus-aware generation realmente persistida
  • library-first hybrid con hook MIDI + piano truth + librería del usuario
  • coherence_score >= 6.5 con manifest real

Este sprint no es para inventar features laterales. Es para cerrar verdad de runtime y coherencia útil.


4. Reglas no negociables

  1. Trabajar solo sobre el árbol canónico:

    • C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts
  2. No tocar wrappers/config MCP salvo que rompas algo concreto.

    • OpenCode y Codex deben seguir usando el wrapper canónico.
  3. No reportar COMPLETE sin una sesión nueva persistida en:

    • C:\Users\ren\.abletonmcp_ai\generation_manifests.json
  4. No cerrar con PASS si cualquiera de estas falla:

    • coherence_score < 6.5
    • mandatory_midi_hook.materialized != true
    • generation_mode != library-first-hybrid
    • pack_coherence.music < 0.65
    • pack_coherence.overall < 0.50
  5. No “mejorar coherencia” eliminando el híbrido.

    • La salida debe seguir siendo library-first.
    • El hook MIDI debe seguir existiendo como soporte armónico cuando haya hints/phrase plan.
  6. No “mejorar piano” mintiendo con audio inexistente.

    • Si el soporte piano viene del hook MIDI, el manifest debe decirlo.
    • Si aparece audio piano adicional, debe venir de la librería y tener función musical clara.
  7. Si generate_track o el tool MCP hacen timeout:

    • no declarar ni éxito ni fracaso por el timeout solo
    • revisar log de Live
    • revisar persistencia en generation_manifests.json
    • revisar estado real del set antes de escribir el reporte

5. Trabajo obligatorio

P0. Cerrar el gap entre generación real y manifest persistido

Problema:

  • Hoy el runtime puede dejar Live ocupado y el tool puede vencer por timeout sin dejar una sesión persistida nueva.
  • Eso bloquea una validación senior real.

Qué tenés que hacer:

  • revisar el camino:
    • generate_track_async
    • get_generation_job_status
    • persistencia final en generation_manifests.json
  • asegurar que una generación completada deje una sesión nueva persistida
  • si la generación sigue en progreso al superar el timeout del cliente, el sistema debe dejar trazabilidad suficiente para recuperarla

No quiero:

  • otro reporte “todo implementado” sin session_id nuevo
  • ni un sistema que haga música en Live pero no la persista

P1. Validar el híbrido real en una sesión nueva

Tenés que producir una sesión nueva y demostrar en manifest:

  • mandatory_midi_hook.materialized = true
  • track_name o embedded_track_name del hook
  • familia del hook
  • piano_presence.has_piano = true
  • piano_presence.has_hybrid_piano = true cuando el soporte venga del hook
  • si hay audio piano adicional:
    • piano_presence.has_audio_piano = true
    • listar las capas reales de audio

No acepto:

  • volver a piano_presence = 0 con hook piano materializado
  • ni reportes sin citar el manifest persistido

P2. Subir la coherencia musical sin romper library-first

Problema real hoy:

  • drums pueden mezclar razonablemente
  • music/harmonic sigue dispersándose demasiado
  • la verdad persistida sigue siendo 4.6/10

Qué tenés que hacer:

  • endurecer la selección del bus music
  • permitir como máximo:
    • 1 pack dominante principal en music
    • 1 pack secundario justificable para soporte
  • reducir dispersión en vocal/fx si destruye el score general
  • mantener libertad relativa en drums, pero no meter clutter innecesario

Objetivo de salida:

  • pack_coherence.music >= 0.65
  • pack_coherence.overall >= 0.50
  • family_adherence_rate >= 0.60 sobre capas armónicas

P3. No olvidar armonía MIDI + piano + librería

Esto es central porque el usuario lo marcó explícitamente.

La sesión final debe conservar los tres elementos:

  • ancla armónica principal
  • soporte MIDI híbrido real
  • audio real de la librería del usuario

Política esperada:

  • anchor principal claro, probablemente pluck o equivalente según referencia
  • 1 hook MIDI de soporte armónico
  • 0 o 1 capa secundaria piano/keys/rhodes si mejora musicalidad real
  • no llenar el arreglo de capas armónicas redundantes

No quiero:

  • sesiones donde el sistema “olvide” el hook MIDI
  • sesiones donde el sistema “olvide” el piano support
  • sesiones donde el sistema vuelva a puro loop genérico sin identidad de librería

P4. Reducir fragmentación útil vs ruido

Revisar si los duplicados consolidados en server.py realmente ayudan.

Debés validar:

  • no más duplicados arbitrarios por rol
  • no más capas repetidas solo por nombre distinto
  • no más cientos de clips cortos sin justificación

Si una duplicación queda:

  • justificar qué contraste musical aporta

P5. Validación final senior real

Generar con:

  • genre = reggaeton
  • style = perreo duro vieja escuela tipo safaera
  • bpm = 95
  • key = Am
  • referencia:
    • libreria\reggaeton\ejemplo.mp3

Validar obligatoriamente:

  • session_id nuevo
  • presencia del session_id en generation_manifests.json
  • coherence_score
  • pack_coherence.overall
  • pack_coherence.music
  • mandatory_midi_hook
  • piano_presence
  • primary_harmonic_family
  • audio_layers reales con source path
  • track count real del set

Además:

  • correr validate_set
  • correr diagnose_generated_set
  • si algún tool timeoutea, recuperar la verdad por log/manifest antes de concluir

6. Archivos probables a tocar

  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py
  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py
  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_piano_forward.py
  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_selection_coherence.py
  • opcionalmente tooling de smoke/validación en temp\ si sirve para recuperar session ids reales

7. Casos de test obligatorios

  1. Un test donde select_dominant_palette() devuelva string legacy y build_arrangement_plan() siga construyendo palette_info bus-aware correcto.
  2. Un test donde verify_pack_coherence() no rompa por variables mal cableadas y use la familia primaria real.
  3. Un test donde un hook piano materializado deje has_hybrid_piano = true.
  4. Un test donde music use un pack dominante y drums otro, sin castigo global inválido.

8. Formato de entrega

Archivo obligatorio:

  • docs/SPRINT_v0.1.17_VALIDATION_REPORT.md

Ese md debe incluir:

  • cambios reales
  • bugs encontrados durante la validación
  • session_id real nuevo
  • extracto de métricas del manifest persistido
  • qué quedó abierto si no llegás a umbral

No acepto:

  • “status: implementado” como sustituto de validación
  • session_id inexistentes
  • claims auditivos sin respaldo del manifest
  • ocultar un WEAK o un timeout en una nota menor

9. Criterio de cierre

Solo podés cerrar v0.1.17 si:

  • existe una sesión nueva persistida
  • el sistema mantiene library-first hybrid
  • el manifest cuenta la verdad del hook MIDI y del piano support
  • la coherencia sube de forma real, no cosmética
  • la validación no depende de adivinar qué pasó después de un timeout

Si no llegás, dejá el sistema mejor, pero no lo declares terminado.