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

8.9 KiB

Sprint v0.1.16 - Bus-Aware Coherence and Piano Hybrid Truth

Owner: Kimi via OpenCode
Reviewer: Codex
Fecha: 2026-04-01
Baseline real: e3c3691cc922
Estado de cierre v0.1.15: runtime corregido parcialmente, no cerrado en coherencia


1. Verdad operativa hoy

Lo que quedó realmente validado por Codex:

  • library-first ya materializa audio real de librería en Arrangement.
  • El hook armónico híbrido ya se materializa de verdad antes de agotar budget.
  • En la última validación real, el hook quedó como HARMONY_PIANO_MIDI y mandatory_midi_hook.materialized = true.
  • El parser de familias ya no devuelve nombres de pack como familia armónica para pluck/pad/piano.
  • La métrica de piano_presence ya fue corregida para poder contar un hook MIDI piano materializado.

Lo que sigue abierto:

  • coherence_score sigue bajo. Última sesión real: e3c3691cc922, score 4.6, verdict WEAK.
  • pack_coherence_ratio sigue pobre porque el sistema sigue intentando resolver coherencia con un dominant_pack global.
  • El selector sigue mezclando drums de un pack, armonía de otro y vocals/FX de terceros sin una política bus-aware explícita.
  • La auditoría histórica de Kimi volvió a inflar claims: SPRINT_v0.1.15_VALIDATION_REPORT.md cita a74bc42ec332, pero ese session id no existe en generation_manifests.json.

Conclusión senior:

  • No se puede seguir reportando COMPLETE mientras el manifest real quede WEAK.
  • El bug principal ya no es “no genera nada”.
  • El bug principal ahora es “genera, pero no decide con criterio de palette/coherence por bus”.

2. Objetivo del sprint

Cerrar la siguiente transición:

  • De library-first-hybrid que ya suena
  • A library-first-hybrid coherente por buses, con armonía principal clara, soporte piano real cuando corresponde y menos mezcla arbitraria de packs

Este sprint no es para agregar features nuevas. Es para corregir criterio de selección.


3. 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.

    • toolCount=77 en OpenCode debe seguir intacto.
  3. No reportar session ids inexistentes.

    • Toda validación debe cruzarse contra C:\Users\ren\.abletonmcp_ai\generation_manifests.json.
  4. No cerrar el sprint con PASS si:

    • coherence_score < 6.5
    • o mandatory_midi_hook.materialized != true en library-first-hybrid
    • o pack_coherence_ratio sigue siendo claramente pobre sin explicación bus-aware
  5. No “resolver” coherencia matando la librería del usuario.

    • La salida sigue siendo library-first.
    • El MIDI hook es soporte armónico, no reemplazo del audio library-first.
  6. No forzar piano audio si la librería/reference no lo soporta.

    • Sí es obligatorio mantener un soporte armónico MIDI piano/keys cuando preferred_secondary_families lo prioriza y el hook híbrido existe.

4. Problemas concretos a resolver

P0. Reemplazar coherencia global por coherencia por bus

Problema:

  • select_dominant_palette() sigue intentando resolver un solo dominant_pack para todo.
  • En reggaetón real eso es una abstracción pobre:
    • drums pueden venir de drumloops / 16bloody / ss_rnbl
    • music/harmony de midilatino_*
    • FX/vocals de un subconjunto distinto

Qué tenés que hacer:

  • Diseñar y aplicar una política bus-aware pack coherence.
  • Mínimo esperado:
    • drums se evalúan contra un grupo dominante de drum packs
    • music/harmonic se evalúan contra un grupo dominante musical
    • fx/vocals no pueden destruir el score general por venir de un tercer pack si son pocos y justificables

No quiero:

  • un solo dominant_pack global maquillado con bonuses
  • ni un sistema que castigue kicks por no pertenecer al mismo pack que el synth loop

Entregable técnico:

  • manifest con métricas por bus, no solo globales
  • ejemplo:
    • pack_coherence.drums
    • pack_coherence.music
    • pack_coherence.fx
    • pack_coherence.overall

P1. Hacer que la auditoría mida coherencia útil

Problema:

  • Ya corregimos que no se mida familia armónica sobre kick/snare/hat, pero la auditoría sigue siendo pobre como instrumento de decisión final.

Qué hacer:

  • endurecer SelectionAuditor para que diferencie:

    • roles armónicos
    • roles rítmicos
    • roles de apoyo/FX
  • family_adherence_rate debe seguir midiendo solo capas armónicas.

  • pack_coherence_ratio debe tener lectura por bus y no castigar igual un kick y un vocal build.

P2. Política explícita de “piano hybrid truth”

Problema:

  • El sistema ya materializa HARMONY_PIANO_MIDI, pero todavía puede quedar piano_presence bajo si no hay audio piano.
  • Eso es aceptable solo si el manifest lo explica bien.

Qué hacer:

  • Formalizar que en library-first-hybrid hay dos maneras válidas de cumplir “piano support”:

    • midi_support_family in {piano, keys}
    • o una capa armónica de audio piano/keys real
  • Manifest esperado:

    • distinguir audio_piano_presence de hybrid_piano_presence
    • si el soporte piano viene del hook MIDI, tiene que verse explícito

No quiero:

  • un piano_presence = 0 cuando el set sí tiene HARMONY_PIANO_MIDI

P3. Añadir una única capa armónica secundaria cuando tenga sentido

Problema:

  • Hoy el híbrido puede quedar con pluck/lead audio + piano MIDI, pero sin una capa secundaria clara de apoyo.

Qué hacer:

  • Si preferred_secondary_families incluye piano o keys y hay material usable en librería, permitir como máximo 1 capa secundaria armónica adicional.
  • Debe ser una capa con justificación musical, no un relleno KPI.

Restricciones:

  • máximo 1 capa secundaria nueva
  • no duplicar familias sin función
  • no degradar el hook principal ni la claridad del pluck anchor

P4. Bajar redundancia y fragmentación sin perder intención

Problema:

  • En e3c3691cc922 la sesión sonó, pero apareció redundancia:
    • dos PERC MAIN
    • dos TOP LOOP
    • dos SYNTH PEAK
    • vocals duplicadas

Qué hacer:

  • revisar si esas duplicaciones agregan contraste real o solo suman clutter
  • si no agregan contraste claro, consolidar o eliminar

Salida esperada:

  • menos layers repetidas con distinto nombre
  • más intención estructural

P5. Verificación senior real

No alcanza con “generate_track devolvió success”.

Tenés que validar:

  • manifest persistido existe
  • session id existe en generation_manifests.json
  • mandatory_midi_hook.materialized == true
  • generation_mode == library-first-hybrid
  • coherence_score >= 6.5
  • pack_coherence.overall >= 0.50
  • pack_coherence.music >= 0.65
  • harmonic_layers_evaluated >= 2
  • family_adherence_rate >= 0.60 en capas armónicas

Si no llegás a esos umbrales:

  • no pongas COMPLETE
  • documentá exactamente por qué

5. Archivos probables a tocar

  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py
  • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py
  • tests nuevos o extendidos en:
    • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_selection_coherence.py
    • AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_piano_forward.py

6. Casos de test obligatorios

  1. Un test donde drums y music usen packs distintos pero coherentes por bus, y el sistema no los castigue como si fuera incoherencia total.
  2. Un test donde HARMONY_PIANO_MIDI materializado cuente como soporte piano híbrido válido.
  3. Un test donde pack_coherence.music suba aunque pack_coherence.drums venga de otro pack dominante.
  4. Un test donde el manifest no permita cerrar con session id inexistente.

7. Validación final obligatoria

Generar una canción real usando:

  • género: reggaeton
  • style: perreo duro vieja escuela tipo safaera
  • referencia: libreria\reggaeton\ejemplo.mp3

Tenés que reportar:

  • session_id
  • coherence_score
  • pack_coherence.overall
  • pack_coherence.drums
  • pack_coherence.music
  • mandatory_midi_hook
  • primary_harmonic_anchor
  • piano_presence
  • lista real de audio layers y fuente

Y además:

  • confirmar que el session_id existe realmente en generation_manifests.json

8. Formato de entrega

Archivo obligatorio:

  • docs/SPRINT_v0.1.16_VALIDATION_REPORT.md

Ese md debe incluir:

  • qué arreglaste realmente
  • qué no cerró
  • session id real
  • métricas reales
  • citas literales de logs solo si son relevantes

No acepto:

  • reportes con “todo ok” y sin session persistida
  • reportes con claims auditivos sin manifest real
  • reportes donde WEAK queda escondido en una nota menor

9. Criterio de cierre

Solo podés cerrar el sprint si:

  • la generación real queda persistida
  • el híbrido library-first mantiene librería + soporte MIDI piano/keys
  • la coherencia deja de depender de un único pack global
  • el manifest cuenta la verdad de lo que pasó

Si no llegás a eso, dejá el sistema mejor que hoy, pero no lo declares terminado.