Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
322
docs/SPRINT_v0.1.21_NEXT_GLM.md
Normal file
322
docs/SPRINT_v0.1.21_NEXT_GLM.md
Normal file
@@ -0,0 +1,322 @@
|
||||
# Sprint v0.1.21 - GLM Runtime Truth, Anti-Loop Real, Zero Auto Vocals
|
||||
|
||||
**Owner:** GLM via OpenCode
|
||||
**Reviewer:** Codex
|
||||
**Fecha:** 2026-04-01
|
||||
**Baseline real vigente:** `a6a4cc87e493`
|
||||
**Estado de cierre v0.1.20:** no cerrado
|
||||
|
||||
---
|
||||
|
||||
## 1. Verdad operativa despues del review de Codex
|
||||
|
||||
El reporte [SPRINT_v0.1.20_VALIDATION_REPORT.md](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.20_VALIDATION_REPORT.md) fue mejor que varios reports previos en honestidad, pero sigue sin cerrar runtime.
|
||||
|
||||
Problemas concretos detectados por Codex:
|
||||
|
||||
1. no aporta una sesion nueva persistida que cierre el sprint
|
||||
2. sigue apoyandose demasiado en “claims verified against code”
|
||||
3. el fix anti-loop principal se hizo sobre una helper path que no esta demostrada como activa en runtime
|
||||
4. el sistema seguia mostrando vocals en manifests viejos y el report no cerraba esa fuga end-to-end
|
||||
|
||||
Codex ya dejo aplicados fixes reales en [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py):
|
||||
|
||||
- sanitizacion defensiva de capas vocales manual-only
|
||||
- inferencia de `role` desde nombres de layer
|
||||
- persistencia de `positions` en `audio_layers`
|
||||
- `repetition_metrics` robusto contra `sections[*].end = None`
|
||||
|
||||
Codex tambien endurecio tests en [test_piano_forward.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_piano_forward.py):
|
||||
|
||||
- purge de vocal layers
|
||||
- repeticion con sections sin `end`
|
||||
|
||||
Validado por Codex:
|
||||
|
||||
- `py_compile` pasa
|
||||
- `test_piano_forward.py` pasa
|
||||
- `test_selection_coherence.py` pasa
|
||||
|
||||
No hubo generacion nueva en este turno.
|
||||
|
||||
---
|
||||
|
||||
## 2. Hallazgos importantes que GLM tiene que tomar como constraints
|
||||
|
||||
### A. El anti-loop “implementado” no esta demostrado en el path activo
|
||||
|
||||
GLM toco `_apply_clip_consolidation()` en [server.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py), pero hoy ese helper no esta demostrado como parte del camino runtime que construye la cancion final.
|
||||
|
||||
Eso significa:
|
||||
|
||||
- el cambio puede ser correcto como idea
|
||||
- pero no cuenta como fix real hasta que se pruebe impacto en una sesion nueva
|
||||
|
||||
No quiero otro sprint donde:
|
||||
|
||||
- el helper mejora
|
||||
- el resultado audible sigue igual
|
||||
|
||||
### B. `repetition_metrics` existia pero estaba roto para manifests reales
|
||||
|
||||
En manifests reales recientes:
|
||||
|
||||
- `sections[*].end` viene como `None`
|
||||
- `audio_layers` viejos no siempre traen `positions`
|
||||
- `audio_layers` viejos no siempre traen `role`
|
||||
|
||||
Eso ya fue corregido por Codex para nuevas generaciones.
|
||||
GLM no debe reabrir ese bug.
|
||||
|
||||
### C. La fuga vocal era de punta a punta, no de una sola capa
|
||||
|
||||
La politica `manual-only` no se cerraba solo en `reference_listener.py`.
|
||||
Habia que defender tambien:
|
||||
|
||||
- materializacion
|
||||
- fallback
|
||||
- manifest
|
||||
- layer records
|
||||
|
||||
GLM debe asumir que cualquier fix vocal que no cierre esos cuatro puntos no sirve.
|
||||
|
||||
### D. Hay evidencia mixta sobre hook MIDI
|
||||
|
||||
No es correcto decir simplemente “hook materialization failing consistently”.
|
||||
|
||||
Verdad real observada en manifests:
|
||||
|
||||
- `4c697638bd3d`: hook materialized `true`
|
||||
- `ba306bd7575b`: hook materialized `true`
|
||||
- `a6a4cc87e493`: hook materialized `false`
|
||||
|
||||
La conclusion correcta no es “siempre falla”.
|
||||
La conclusion correcta es:
|
||||
|
||||
- el hook es inestable
|
||||
- no esta resuelto
|
||||
- requiere validacion sobre una sesion nueva
|
||||
|
||||
---
|
||||
|
||||
## 3. Objetivo real del sprint
|
||||
|
||||
Cerrar la brecha entre:
|
||||
|
||||
- fixes de codigo
|
||||
- y resultado musical real
|
||||
|
||||
La prioridad absoluta es esta:
|
||||
|
||||
1. cero vocals automaticas
|
||||
2. anti-loop real en el resultado final
|
||||
3. creatividad por seccion
|
||||
4. hibrido `library + MIDI + piano` verificable
|
||||
5. manifest que refleje verdad runtime
|
||||
|
||||
No quiero otro sprint centrado en helpers muertos o reportes “in progress”.
|
||||
|
||||
---
|
||||
|
||||
## 4. Reglas no negociables
|
||||
|
||||
1. Trabajar solo en el arbol canonico:
|
||||
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts`
|
||||
|
||||
2. No tocar wrappers/config MCP salvo bug concreto y demostrado.
|
||||
|
||||
3. Cero vocals automaticas:
|
||||
- no seleccion
|
||||
- no materializacion
|
||||
- no persistencia en `audio_layers`
|
||||
- no tracks `AUDIO VOCAL *`
|
||||
- no justificarlo como FX o “color”
|
||||
|
||||
4. No reportar anti-loop si no afecta el path runtime real.
|
||||
|
||||
5. No cerrar el sprint si no existe una sesion nueva persistida.
|
||||
|
||||
6. No aceptar `session_id` inventados o viejos como sustituto de validacion fresca.
|
||||
|
||||
7. No cerrar el sprint si cualquiera de estas falla:
|
||||
- `coherence_score < 6.5`
|
||||
- `mandatory_midi_hook.materialized != true`
|
||||
- `piano_presence.piano_layer_count < 1`
|
||||
- `repetition_metrics.verdict == repetitive`
|
||||
- `generation_mode != library-first-hybrid`
|
||||
- aparece cualquier vocal auto-generada
|
||||
|
||||
---
|
||||
|
||||
## 5. Trabajo obligatorio
|
||||
|
||||
### P0. Atacar el path activo, no helpers secundarios
|
||||
|
||||
Antes de tocar nada:
|
||||
|
||||
- identifica exactamente que funciones corren en la generacion real
|
||||
- no supongas que una helper afecta runtime solo porque existe
|
||||
|
||||
Pistas actuales del path activo:
|
||||
|
||||
- `song_generator.py` construye secciones, variantes, phrase plan y track specs
|
||||
- `reference_listener.py` construye `build_arrangement_plan()`
|
||||
- `server.py` materializa audio/midi y persiste el manifest
|
||||
- el anti-loop real hoy probablemente pasa mas por:
|
||||
- `song_generator.py`
|
||||
- `_build_audio_pattern_positions()`
|
||||
- `_materialize_reference_audio_layers()`
|
||||
- consolidacion de duplicados
|
||||
|
||||
No alcanza con tocar `_apply_clip_consolidation()` si no demostras que esa ruta corre.
|
||||
|
||||
### P1. Anti-loop real en musica, no solo en drums
|
||||
|
||||
Quiero foco en lo que el usuario oye como loop plano:
|
||||
|
||||
- synth_loop
|
||||
- synth_peak
|
||||
- perc_loop
|
||||
- top_loop
|
||||
- material melodico y armonico por seccion
|
||||
|
||||
Tenes que demostrar que:
|
||||
|
||||
- intro/build/drop/break no comparten la misma firma musical
|
||||
- el material melodico no se repite como copia casi exacta
|
||||
- los layers musicales no se reducen a un unico loop dominante toda la cancion
|
||||
|
||||
### P2. Creatividad por seccion
|
||||
|
||||
Revisar a fondo en [song_generator.py](C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py):
|
||||
|
||||
- `SectionVariationManager`
|
||||
- `PhrasePlan`
|
||||
- pattern banks
|
||||
- elecciones de variante por seccion
|
||||
|
||||
No me sirve que exista infraestructura si el audio final suena igual.
|
||||
|
||||
Objetivo:
|
||||
|
||||
- contraste real entre secciones
|
||||
- sin romper coherencia armonica
|
||||
|
||||
### P3. Hibrido real
|
||||
|
||||
No acepto una generacion que sea:
|
||||
|
||||
- solo loops
|
||||
- o solo pluck MIDI aislado
|
||||
- o piano solo en metadata
|
||||
|
||||
GLM tiene que cerrar:
|
||||
|
||||
- `mandatory_midi_hook.materialized = true`
|
||||
- `piano_presence.piano_layer_count >= 1`
|
||||
- `generation_mode = library-first-hybrid`
|
||||
|
||||
### P4. Vocal policy end-to-end
|
||||
|
||||
Verificar en una sesion nueva:
|
||||
|
||||
- no tracks `AUDIO VOCAL *`
|
||||
- no roles vocales en `audio_layers`
|
||||
- no roles vocales en `layer_selections`
|
||||
- no roles vocales en selected/layers del plan final
|
||||
|
||||
Si aparece uno solo, el sprint no cierra.
|
||||
|
||||
---
|
||||
|
||||
## 6. Casos de test obligatorios
|
||||
|
||||
Minimo tenes que dejar o endurecer tests para:
|
||||
|
||||
1. `repetition_metrics` con sections reales que tienen `end=None`
|
||||
2. layers vocales purgados de manifest
|
||||
3. ausencia de `AUDIO VOCAL *` en persistencia final
|
||||
4. preservacion de variacion por seccion en el path runtime que realmente corre
|
||||
5. hook MIDI materializado
|
||||
6. presencia real de piano o keys en el hibrido final
|
||||
|
||||
No borres tests de Codex.
|
||||
|
||||
---
|
||||
|
||||
## 7. Validacion final obligatoria
|
||||
|
||||
Al final del sprint tenes que hacer una generacion nueva real.
|
||||
|
||||
Parametros:
|
||||
|
||||
- `genre = reggaeton`
|
||||
- `style = perreo duro vieja escuela tipo safaera`
|
||||
- referencia:
|
||||
- `libreria\reggaeton\ejemplo.mp3`
|
||||
|
||||
Tenes que demostrar con `session_id` nuevo y persistido:
|
||||
|
||||
- `coherence_score >= 6.5`
|
||||
- `generation_mode = library-first-hybrid`
|
||||
- `mandatory_midi_hook.materialized = true`
|
||||
- `piano_presence.piano_layer_count >= 1`
|
||||
- `repetition_metrics.verdict != repetitive`
|
||||
- `repetition_metrics.harmonic_loop_reuse_ratio < 0.75`
|
||||
- `repetition_metrics.music_source_reuse_ratio < 0.80`
|
||||
- `layer_selections.summary.total_layers > 0`
|
||||
- cero vocals auto-generadas
|
||||
|
||||
Si no llegas:
|
||||
|
||||
- no declares “partial complete”
|
||||
- no declares “blocked” sin evidencia nueva
|
||||
- explica exactamente donde esta el cuello de botella
|
||||
|
||||
---
|
||||
|
||||
## 8. Formato obligatorio del validation report
|
||||
|
||||
El report final de GLM debe tener estas secciones:
|
||||
|
||||
1. `Executive Summary`
|
||||
2. `Claims Verified Against Code`
|
||||
3. `Fresh Session Validation`
|
||||
4. `Manifest Truth`
|
||||
5. `Coherence Metrics`
|
||||
6. `Repetition Metrics`
|
||||
7. `Hybrid Truth (MIDI + Piano + Library)`
|
||||
8. `Instrumental-Only Compliance`
|
||||
9. `Open Issues`
|
||||
10. `Verdict`
|
||||
|
||||
Y debe incluir:
|
||||
|
||||
- `session_id` real
|
||||
- extracto real de `generation_manifests.json`
|
||||
- archivos tocados
|
||||
- tests corridos
|
||||
- thresholds con PASS/FAIL
|
||||
|
||||
No acepto:
|
||||
|
||||
- “code complete”
|
||||
- “validation blocked”
|
||||
- “anti-loop implemented”
|
||||
|
||||
si no hay evidencia runtime fresca.
|
||||
|
||||
---
|
||||
|
||||
## 9. Criterio de cierre
|
||||
|
||||
Este sprint solo cierra si GLM demuestra simultaneamente:
|
||||
|
||||
- menos loop plano
|
||||
- mas creatividad real
|
||||
- coherencia mejor
|
||||
- hook y piano reales
|
||||
- cero vocals automaticas
|
||||
- y manifest alineado con runtime
|
||||
|
||||
Si falla uno solo de esos puntos, el sprint sigue abierto.
|
||||
Reference in New Issue
Block a user