Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
110
docs/SPRINT_v0.1.12_NEXT.md
Normal file
110
docs/SPRINT_v0.1.12_NEXT.md
Normal file
@@ -0,0 +1,110 @@
|
||||
Sprint v0.1.12 - Reference Selection Coherence
|
||||
|
||||
Fecha: 2026-04-01
|
||||
Estado: pendiente
|
||||
Objetivo: cerrar la coherencia total de los sonidos elegidos en la seleccion real de capas, no solo en el blueprint melodico
|
||||
|
||||
## Contexto
|
||||
|
||||
En el cierre anterior quedaron resueltos estos puntos:
|
||||
|
||||
- `song_generator.py` ya persiste y restaura `primary_harmonic_family`.
|
||||
- `reference_listener.py` ya devuelve `primary_harmonic_family` y usa `genre` real en la seleccion con budget.
|
||||
- `server.py` ya propaga `primary_harmonic_family`, arregla el bloque hibrido, reserva slot fisico para `HOOK_MIDI` y deja de simular un "make room" que no removia tracks reales.
|
||||
- `test_phrase_plan.py` ahora usa `assert` real y cubre roundtrip del family lock.
|
||||
- la skill `ableton-mcp` ya refleja el layout y el workflow actual del repo.
|
||||
|
||||
Eso cierra la coherencia del lado de:
|
||||
|
||||
`reference_listener.py` -> `server.py` -> `song_generator.py` -> hook obligatorio -> manifest
|
||||
|
||||
Pero todavia queda abierto el problema central de este frente:
|
||||
|
||||
- la seleccion de capas de audio reales puede seguir derivando por heuristicas parciales
|
||||
- `JOINT_SCORE` existe en `sample_selector.py`, pero no gobierna de forma contractual la seleccion principal por referencia
|
||||
- el manifest no explica con suficiente detalle por que una capa armonica gano frente a otra
|
||||
- no hay validacion fuerte que compare las familias/roles elegidos contra la familia dominante de referencia
|
||||
|
||||
## Regla de trabajo
|
||||
|
||||
Este sprint no se considera cerrado si solo mejora logs o scoring aislado.
|
||||
Tiene que endurecer la seleccion real de sonidos y dejar trazabilidad suficiente para explicar cada decision.
|
||||
|
||||
## Tareas
|
||||
|
||||
### 1. Convertir `JOINT_SCORE` en fuente de verdad de la seleccion por referencia
|
||||
|
||||
Hacer que `reference_listener.py` use el scoring conjunto de `sample_selector.py` como ranking principal para capas harmonicas y variantes relevantes.
|
||||
|
||||
Minimo esperado:
|
||||
|
||||
- integrar el score conjunto en `_select_layers_with_budget(...)`
|
||||
- no dejar caminos paralelos donde el ranking final ignore ese score
|
||||
- registrar el score ganador y los factores principales que lo explican
|
||||
|
||||
### 2. Agregar contrato de coherencia para capas harmonicas reales
|
||||
|
||||
La familia dominante de referencia ya existe; ahora debe influir de verdad en la seleccion de audio.
|
||||
|
||||
Agregar una capa de validacion/penalizacion que considere:
|
||||
|
||||
- `primary_harmonic_family`
|
||||
- `dominant_pack`
|
||||
- compatibilidad tonal basica con `key`
|
||||
- rol musical de la capa (`chords`, `lead`, `pad`, `hook`, etc.)
|
||||
|
||||
No alcanza con "preferir".
|
||||
Las capas claramente incoherentes tienen que perder ranking o quedar fuera.
|
||||
|
||||
### 3. Exponer razones de seleccion en el manifest
|
||||
|
||||
El manifest final debe permitir auditar por que quedaron esos sonidos.
|
||||
|
||||
Agregar por capa seleccionada, al menos:
|
||||
|
||||
- `role`
|
||||
- `family`
|
||||
- `source_path`
|
||||
- `joint_score`
|
||||
- `family_score` o equivalente
|
||||
- `palette_score` o bonus relevante
|
||||
- razon textual corta del ganador
|
||||
|
||||
### 4. Endurecer validacion y tests de seleccion
|
||||
|
||||
Agregar tests que fallen si el flujo principal vuelve a perder coherencia.
|
||||
|
||||
Casos minimos:
|
||||
|
||||
- una referencia dominada por `pluck` no debe terminar eligiendo sistematicamente `pad` o `lead` incompatibles si existen opciones `pluck/keys` validas
|
||||
- si dos candidatos compiten, el ranking final debe reflejar `JOINT_SCORE` y no ignorarlo en el ultimo tramo
|
||||
- el manifest de una generacion con referencia debe incluir `primary_harmonic_family` y razones de seleccion por capa
|
||||
|
||||
### 5. Ejecutar una validacion end-to-end real en Ableton
|
||||
|
||||
No alcanza con compile/tests.
|
||||
|
||||
Hacer una corrida con referencia real y verificar:
|
||||
|
||||
- `mandatory_midi_hook` sigue existiendo
|
||||
- `budget_real` no diverge del runtime
|
||||
- las capas harmonicas elegidas reflejan la familia dominante de referencia
|
||||
- el manifest deja evidencia suficiente para revisar la coherencia sin releer logs completos
|
||||
|
||||
## Archivos foco
|
||||
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\sample_selector.py`
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py`
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py`
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests`
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs`
|
||||
|
||||
## Criterio de salida
|
||||
|
||||
El sprint cierra solo si:
|
||||
|
||||
1. el ranking principal por referencia usa `JOINT_SCORE` o un wrapper explicito sobre ese score
|
||||
2. las capas harmonicas seleccionadas quedan alineadas con `primary_harmonic_family`
|
||||
3. el manifest explica por que gano cada capa importante
|
||||
4. hay al menos un test que falle si la seleccion principal vuelve a ignorar la coherencia de familia
|
||||
5. hay una validacion real en Ableton o, si no fue posible correrla, queda documentado exactamente que falto verificar
|
||||
Reference in New Issue
Block a user