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