Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs

This commit is contained in:
renato97
2026-04-08 17:58:47 -03:00
parent c9d3528900
commit 6d080d43b3
372 changed files with 189715 additions and 8590 deletions

View File

@@ -0,0 +1,246 @@
# SPRINT v0.1.27 - NEXT (GLM)
## Continuity First, Piano Melodies, Smarter Drum Coherence
**Owner:** GLM via OpenCode
**Reviewer:** Codex
**Fecha:** 2026-04-02
**Baseline report:** `74bf4cbec05e`
**Baseline real vigente:** `0345711a8749`
**Estado actual:** estructura menos clonada, pero sigue `WEAK` y demasiado cortada
---
## 1. Runtime Truth
No cierres este sprint con el md de validacion solamente.
La verdad persistida actual es la sesion `0345711a8749` en `C:\Users\ren\.abletonmcp_ai\generation_manifests.json`.
Hechos reales hoy:
- `generation_mode = library-first-hybrid`
- `mandatory_midi_hook.materialized = true`
- `coherence_score = 4.6`
- `coherence_verdict = WEAK`
- `family_adherence_rate = 0.5`
- `piano_presence.has_audio_piano = true`
- el audio piano sigue entrando como `chords`, no como melodia real dominante
- el sistema ya no cae siempre en la misma estructura exacta
- pero sigue sonando demasiado picado, con huecos y entradas tardias innecesarias
Importante:
- el report `docs/SPRINT_v0.1.26_VALIDATION_REPORT.md` quedo desfasado
- habla de `74bf4cbec05e`, pero el `last_generation_id` real ya es `0345711a8749`
- no uses el report como source of truth si no coincide con el manifest real
---
## 2. Code Review
### 2.1 Que estaba mal en v0.1.26
1. `reference_listener.py`
La variacion de Drop B se logro quitando material:
- perc mas espaciada
- top loop entrando tarde
- synth entrando tarde y con step alterado
Eso daba "diferencia", pero por subtraction. Auditivamente suena mas cortado, no mas creativo.
2. `reference_listener.py`
El filtro `MIN_PLACEMENTS_FOR_MUSICAL_LAYERS` estaba aplicado por sample-path, no por presencia total del layer.
Eso es un bug serio:
- las variantes seccionales de synth/bass/top_loop podian tener 1-2 placements cada una
- el filtro las borraba individualmente
- el resultado final quedaba con huecos o con un solo fragmento sobreviviente
3. `reference_listener.py`
El piano habia mejorado, pero seguia casi siempre como `AUDIO KEYS SUPPORT` con rol `chords`.
Eso sirve para soporte armonico.
No sirve para responder al pedido actual del usuario:
"quiero que el piano haga melodias"
4. `server.py`
`music_source_reuse_ratio` seguia midiendo casi al nivel de pack, no al nivel de sample real.
Eso podia dar `1.0` aunque el sistema estuviera usando varios archivos distintos del mismo pack.
Ese numero no era confiable para juzgar monotonia real.
5. `reference_listener.py`
El `section_character_bonus` estaba siendo llamado con argumentos invertidos en el path de matching.
Eso contamina la selectividad de caracter, incluyendo drums.
Era un bug real de runtime, no de logs.
### 2.2 Que ya corrigio Codex en este turno
- se elimino la diferenciacion por vaciado artificial en Drop B
- se preservan variantes seccionales sin borrarlas por tener pocos placements por sample-path
- se agrego `AUDIO PIANO MELODY` cuando hay material piano/keys melodico disponible
- `music_source_reuse_ratio` ahora usa keys de source a nivel sample, no solo pack
- se corrigio el call-order roto de `section_character_bonus`
- se agrego selectividad contextual para `snare/clap` en secciones mas suaves
Eso ya esta en codigo.
No lo reviertas.
---
## 3. Nuevo Criterio Del Usuario
Hay una observacion especifica que a partir de ahora es obligatoria:
`SS_RNBL_Me_Gustas_One_Shot_Snare.wav`
No hard-banear este sample.
No hacer un if bruto para excluirlo.
Lo correcto es:
- entender por que el scorer lo deja entrar
- volver mas selectiva la coherencia de drums
- permitirlo solo cuando el contexto del tema realmente pida ese snare agresivo
Interpretacion senior:
- si una seccion tiene energia media, brillo moderado y no esta pidiendo un clap/snare tan duro, ese sample debe perder ranking
- si la seccion es realmente agresiva y el contexto percutivo lo soporta, puede seguir siendo elegible
No conviertas este punto en una blacklist. Convertilo en selectividad contextual real.
---
## 4. Objetivo Real de v0.1.27
Recuperar continuidad musical sin volver a la cancion clonada.
La salida buscada es:
- estructura clara
- identidad coherente
- menos huecos absurdos
- menos entradas tardias solo para "simular variacion"
- piano melodico audible
- drums mas selectivos y contextuales
La salida NO buscada es:
- volver a la misma cancion siempre
- volver a un tema vaciado por silencios
- meter piano solo como relleno de acordes
- hardcodear excludes por sample
---
## 5. Trabajo Obligatorio
### P0. Validar el nuevo path de continuidad real
Hay que probar con generacion nueva y confirmar que los fixes de continuidad realmente se vean en el manifest y en el audio:
- Drop B no debe diferenciarse solo por silencio o ausencia
- `synth_loop`, `top_loop`, `bass_loop` no deben desaparecer por filtros internos
- si hay variacion entre secciones, que sea por material, densidad util o articulacion; no por vaciar media barra
Que revisar:
- `audio_layers[*].positions`
- secciones `build/drop/break`
- si el mismo rol aparece con variantes seccionales, que no se pierdan por filtrado
### P0. Piano melodico real
No alcanza con `AUDIO KEYS SUPPORT`.
Objetivo:
- validar que `AUDIO PIANO MELODY` aparezca cuando haya material apto
- que el piano melodico no quede solo en el break o como detalle marginal
- que aporte fraseo/motivo, no solo cama armonica
Reglas:
- no reemplazar toda la identidad pluck del tema
- el piano melodico debe convivir con la familia primaria, no romperla
- usar piano/keys/rhodes melodico solo cuando el sample realmente sea melodico
### P0. Repeticion real medida por sample, no por pack
Con el fix nuevo, `music_source_reuse_ratio` debe reevaluarse con una sesion nueva.
Objetivo:
- medir monotonia real
- no castigar injustamente el uso coherente de un mismo pack
Que revisar:
- `repetition_metrics.source_distribution`
- `music_source_reuse_ratio`
- cuantas fuentes musicales distintas hay realmente
### P1. Selectividad de snare/clap por contexto
No hacer blacklist de `SS_RNBL_Me_Gustas_One_Shot_Snare.wav`.
Trabajo esperado:
- validar que el call-order corregido de `section_character_bonus` ya cambie el ranking
- revisar si hace falta endurecer la selectividad tambien en `sample_selector.py`
- demostrar con evidencia de ranking o manifest que snares muy agresivos no ganan por default en secciones que no lo piden
Si tocas scoring:
- hacelo generico y explicable
- basado en brillo/transient/contexto
- no basado en un nombre de archivo puntual
---
## 6. Exit Criteria
No cierres el sprint si no se cumple todo esto con una sesion nueva persistida:
- `generation_mode = library-first-hybrid`
- `mandatory_midi_hook.materialized = true`
- `coherence_score >= 6.0`
- `family_adherence_rate >= 0.65`
- `pack_coherence.overall >= 0.6`
- `piano_presence.has_audio_piano = true`
- `AUDIO PIANO MELODY` presente o evidencia clara de piano melodico equivalente
- `repetition_metrics.verdict != repetitive`
- `music_source_reuse_ratio < 0.8` con la nueva metrica por sample real
- `vocal_layers_auto = 0`
Criterio auditivo obligatorio:
- menos cortes y huecos que `0345711a8749`
- el piano debe escucharse como recurso melodico, no solo armonico
- Drop A y Drop B deben diferenciarse sin vaciar artificialmente el groove
---
## 7. Validation Report Obligatorio
GLM tiene que dejar:
`docs/SPRINT_v0.1.27_VALIDATION_REPORT.md`
Y ese md debe incluir:
1. `session_id` real nuevo
2. comparativa contra `0345711a8749`
3. manifest evidence real, no logs sueltos
4. `audio_layers` relevantes con positions de:
- `AUDIO SYNTH LOOP`
- `AUDIO BASS LOOP`
- `AUDIO TOP LOOP`
- `AUDIO KEYS SUPPORT`
- `AUDIO PIANO MELODY`
5. `repetition_metrics.source_distribution`
6. evidencia de que el snare agresivo no esta entrando por default si no corresponde
Si el md no compara contra el manifest real mas nuevo, el sprint no cuenta.