8.8 KiB
SPRINT v0.1.26 — NEXT (GLM)
Coherence First, Less Choppy, Less Template Song
Owner: GLM via OpenCode
Reviewer: Codex
Fecha: 2026-04-02
Baseline real: 674195e90446
Estado actual: library-first-hybrid funciona, pero auditivamente sigue WEAK
1. Runtime Truth
No cerrar este sprint con métricas cosméticas.
La sesión 674195e90446 confirma:
generation_mode = library-first-hybridmandatory_midi_hook.materialized = truecoherence_score = 4.7coherence_verdict = WEAKfamily_adherence_rate = 0.5piano_presence.has_piano = truepero era casi todo por hook MIDIrepetition_metrics.verdict = mixedmusic_source_reuse_ratio = 0.8
Conclusión:
- el sistema ya no está roto
- el problema ahora es musical y de planificación
- la canción sigue sonando demasiado segmentada, demasiado rígida y demasiado parecida a sí misma
2. Code Review
2.1 Qué estaba mal en v0.1.25
-
reference_listener.pyLos roles loop armónicos todavía podían aceptar material desde carpetasone shots. Eso empuja plucks cortados y variantes choppy que rompen continuidad musical. -
reference_listener.pyEl piano estaba siendo contado casi sólo por el hook MIDI. Eso permitía un falso positivo depiano_presencesin una capa audio real de keys/rhodes sosteniendo intro/build/break. -
reference_listener.pyEl bajo podía quedar sin anclas suficientes enbuild/drop, dejando huecos grandes aunque el rol estuviera “seleccionado”. -
reference_listener.pyLa extracción de packs seguía aceptando carpetas genéricas del workspace como si fueran packs reales. Eso inflaba o contaminaba la lectura de coherencia. -
song_generator.py+reference_listener.pyLa macro-estructura sigue demasiado determinística. No está “rota”, pero sí demasiado rígida:intro -> build -> drop -> break -> drop -> outrocon reglas de entrada/salida muy parecidas entre corridas.
2.2 Qué ya corrigió Codex antes de este sprint
- rechazo de
one shotspara roles loop (synth_loop,bass_loop,perc_loop,top_loop,vocal_loop) - inyección de una capa audio real de piano/keys cuando el sistema sólo tenía hook MIDI
- anclas mínimas de bass en
build/drop - limpieza adicional de extracción de pack para no tomar carpetas genéricas del workspace
Eso ya está en código. No lo rehagas ni lo reviertas.
3. Objetivo Real de v0.1.26
Recuperar coherencia + musicalidad + estructura usable sin volver al caos.
La salida buscada no es:
- una pista vacía
- una pista hiper-cortada
- una pista que repite 3 sonidos todo el tema
- una pista “ordenada” pero muerta
La salida buscada sí es:
- estructura clara
- identidad coherente
- más continuidad musical entre secciones
- más vida interna dentro de esa estructura
- audio piano/keys real, no sólo hook MIDI
4. Trabajo Obligatorio
P0. Romper el “same song syndrome” sin romper coherencia
Atacar el problema en el path activo, no con métricas inventadas.
Objetivo:
- que dos generaciones consecutivas con misma referencia no caigan en la misma silueta exacta de densidad y capas
- que
intro/build/drop/break/drop/outrono suene siempre al mismo guion mecánico
Reglas:
- no agregues randomización ciega
- la variación tiene que ser controlada por sección y por rol
- no mezcles packs sin función clara sólo para “diversificar”
Implementación esperada:
- introducir variación real de densidad por sección en
music bus - desacoplar parcialmente el patrón de entrada de
synth_loop,top_loopyperc_loop - evitar que
drop Aydrop Bsean casi el mismo bloque con mínimos cambios cosméticos
P0. Menos cortes, menos huecos muertos
El reggaeton actual está demasiado “picado”.
Problema audible:
- cortes bruscos
- demasiados espacios donde debería seguir el groove
- layers que entran una vez y desaparecen
Objetivo:
- continuidad rítmica y armónica mejor sostenida
- sin convertir todo en una pared constante
Validar especialmente:
bass_loopperc_looptop_loopsynth_loopAUDIO KEYS SUPPORT
No aceptes:
- capas musicales con 1 o 2 placements en toda la canción salvo justificación muy clara
- drops donde el bajo no sostiene el cuerpo principal
- breaks vacíos por accidente
P0. Piano audio real, no sólo “piano_presence” de manifest
Nuevo estándar:
piano_presence.has_audio_piano = true- al menos una capa audio
piano/keys/rhodesreal enintro,buildobreak - el hook MIDI puede seguir existiendo, pero ya no alcanza por sí solo
Qué buscar:
rhodeskeyspianoepiano
Qué no hacer:
- meter piano brillante arriba de todo el drop si rompe el ancla principal
- reemplazar el primary family del tema
La regla musical es:
pluck/leadpuede seguir siendo la identidad principalpiano/keystiene que funcionar como soporte coherente, no como parche decorativo
P1. Más riqueza tímbrica sin perder identidad
El sistema se encierra en 3-4 sonidos.
Necesitamos:
- más contraste útil
- menos reciclado del mismo material
- sin abrir demasiados packs
Objetivo:
- 1 pack dominante por bus
- 1 secundario sólo si tiene función clara
- más de un color musical dentro del bus music
No aceptes:
music_source_reuse_ratio >= 0.8synth_loopysynth_peaksonando como el mismo gesto todo el tema- variantes que sólo cambian filename pero no función musical
P1. Coherencia, no plantilla rígida
La crítica del usuario es correcta:
- quiere estructura
- no quiere escuchar siempre la misma canción
Eso significa:
- no eliminar la estructura
- sí hacer que cada sección tenga una función musical real
Ejemplos de función real:
- intro: presentación y espacio
- build: empuje y preparación
- drop A: statement principal
- break: respiro con soporte armónico útil
- drop B: regreso con diferencia perceptible
- outro: salida lógica
5. Restricciones
No tocar sin necesidad
- no reviertas fixes de Codex
- no reabras vocals automáticas
- no metas samples vocales “porque quedan bien”
- no vuelvas a permitir
one shotscomosynth_looppor accidente
No maquillar métricas
No cierres el sprint si:
coherence_scoresigueWEAK- el audio sigue sonando vacío o excesivamente cortado
- el piano sigue siendo sólo MIDI
- el report dice
SUCCESSpero la canción sigue auditivamente pobre
No usar el report como sustituto del manifest
Toda afirmación tiene que salir de:
generation_manifests.json- manifest nuevo persistido
- session id real
- validación audible del resultado
6. Criterios de Salida
Para considerar este sprint cerrado, el nuevo manifest debe cumplir:
generation_mode = library-first-hybridmandatory_midi_hook.materialized = truepiano_presence.has_audio_piano = truepiano_presence.audio_piano_count >= 1coherence_score >= 6.0family_adherence_rate >= 0.65pack_coherence.overall >= 0.6repetition_metrics.verdict != repetitivemusic_source_reuse_ratio < 0.7vocal_layers_auto = 0
Y además, auditivamente:
- no debe sonar “trozada”
- no debe sonar como 3 sonidos repitiéndose toda la pista
drop Bdebe diferenciarse dedrop Abreakdebe tener función musical y no ser sólo vacío
7. Validación Obligatoria
Código
python -m py_compilesobre archivos tocadostests/test_piano_forward.pytests/test_selection_coherence.py
Runtime
Generar una sesión nueva real con referencia:
- género:
reggaeton - estilo:
perreo duro vieja escuela tipo safaera - referencia:
libreria\\reggaeton\\ejemplo.mp3 - bpm:
95 - key:
Am
Revisión del manifest
Reportar explícitamente:
session_idcoherence_scorefamily_adherence_ratepack_coherence.overallpack_coherence.musicpiano_presencerepetition_metricsaudio_layerspor rol- qué layer de audio hace el soporte piano/keys
- diferencia real entre
drop Aydrop B
8. Formato del Validation Report
Crear:
docs/SPRINT_v0.1.26_VALIDATION_REPORT.md
Estructura obligatoria:
Runtime TruthManifest EvidenceAudible OutcomeCode ChangesOpen BugsVerdict
Reglas:
- no uses
SPRINT CERRADO CON ÉXITOsicoherence_scoresigue enWEAK - no ocultes métricas malas
- no digas “piano presente” si sigue siendo sólo hook MIDI
- si el audio sigue muy cortado o muy parecido a la corrida anterior, escribirlo explícitamente
9. Resumen para GLM
Tu trabajo no es “hacer más variación”.
Tu trabajo es este:
- conservar coherencia
- reducir lo choppy
- recuperar musicalidad
- meter piano audio real
- evitar la sensación de “misma canción siempre”
- no reabrir vocals
Si la nueva corrida sigue sonando rígida, vacía o demasiado loopeada, el sprint no está cerrado.