189 lines
6.3 KiB
Markdown
189 lines
6.3 KiB
Markdown
# Sprint v0.1.20 Validation Report
|
|
|
|
**Owner:** GLM via OpenCode
|
|
**Date:** 2026-04-01 (Updated)
|
|
**Baseline Session:** `a6a4cc87e493`
|
|
**Status:** IN PROGRESS - MCP Connection Timed Out
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
This sprint focused on fixing critical issues identified in v0.1.19:
|
|
1. **P1: Vocal Leak** - Vocal roles were being auto-generated despite manual-only policy
|
|
2. **P2: Anti-Loop** - Section variation was being flattened during consolidation
|
|
3. **P4: Hybrid Truth** - MIDI hook materialization failing
|
|
|
|
### CRITICAL FINDING: Anti-Loop Fix Was in WRONG Path
|
|
|
|
**Discovery:** The anti-loop fix added to `_apply_clip_consolidation()` was NOT in the active runtime path. The ACTUAL consolidation happens in:
|
|
- `_materialize_reference_audio_layers()` lines 4599-4647
|
|
- `_build_audio_pattern_positions()` lines 3784-3833
|
|
|
|
**Fix Applied:** Added anti-flattening logic to `_materialize_reference_audio_layers()` at lines 4618-4667:
|
|
- Check `section_variants` BEFORE consolidation
|
|
- Skip consolidation for music/harmonic roles with section variants
|
|
- Skip consolidation for SECTION_VARIATION_ROLES
|
|
|
|
### Changes Implemented (v0.1.20 FINAL)
|
|
|
|
#### P1: Vocal Leak Fixes (COMPLETED)
|
|
|
|
| File | Line | Change |
|
|
|------|------|--------|
|
|
| `song_generator.py` | 5880 | Removed `'vocal'` from `OPTIONAL` track budget |
|
|
| `song_generator.py` | 11741 | Removed `('VOCAL CHOP', 'vocal', ...)` from reggaeton track specs |
|
|
| `song_generator.py` | 11843 | Removed `('VOCAL CHOP', 'vocal', ...)` insert for house/tech-house/trance |
|
|
| `song_generator.py` | 11867 | Removed `('VOCAL', 'vocal', ...)` from drum-and-bass track specs |
|
|
| `song_generator.py` | 5672 | Removed `'vocal_shot'` and `'vocal_loop'` from `VARIATION_ROLES` |
|
|
| `reference_listener.py` | 5626-5632 | Added `_is_manual_recording_role()` filter in CORE_ROLES selection loop |
|
|
| `reference_listener.py` | 5874-5880 | Added `_is_manual_recording_role()` filter in OPTIONAL_ROLES selection loop |
|
|
| `reference_listener.py` | 7125-7138 | Added conditional skip for vocal_alt selection when manual-only |
|
|
|
|
#### P2: Anti-Loop Fixes (COMPLETED - IN ACTIVE PATH)
|
|
|
|
| File | Line | Change |
|
|
|------|------|--------|
|
|
| `server.py` | 4618-4667 | Added anti-flattening check BEFORE consolidation in `_materialize_reference_audio_layers()` |
|
|
|
|
**Key Code Added:**
|
|
```python
|
|
# P2: ANTI-FLATTEN - Check section_variants BEFORE consolidation
|
|
section_variants = layer.get('section_variants', {})
|
|
has_variants = bool(section_variants)
|
|
|
|
MUSIC_HARMONIC_ROLES = {"chords", "synth_loop", "pad", "lead", "pluck", "arp", "drone", "texture", "ambient"}
|
|
SECTION_VARIATION_ROLES = {"perc_loop", "top_loop", "perc_alt", "synth_peak", "atmos_fx", "fill_fx"}
|
|
|
|
should_preserve_positions = has_variants and (
|
|
role_lower in MUSIC_HARMONIC_ROLES or role_lower in SECTION_VARIATION_ROLES
|
|
)
|
|
|
|
if should_preserve_positions:
|
|
logger.info("[P2_ANTI_FLATTEN] Role '%s' (%s) has section_variants - preserving %d positions",
|
|
role_lower, track_name, len(positions))
|
|
```
|
|
|
|
---
|
|
|
|
## Test Results
|
|
|
|
All tests PASS:
|
|
|
|
```
|
|
Ran 23 tests in 0.004s - OK (test_piano_forward.py)
|
|
Ran 11 tests in 1.546s - OK (test_selection_coherence.py)
|
|
```
|
|
|
|
Tests include:
|
|
- `test_sanitize_audio_layer_records_removes_manual_vocal_layers` - OK
|
|
- `test_repetition_metrics_detect_repetitive_harmonic_sections` - OK
|
|
- `test_repetition_metrics_handle_sections_with_missing_end_values` - OK (end=None bug fixed by Codex)
|
|
|
|
---
|
|
|
|
## Runtime Validation Attempt
|
|
|
|
**Status:** MCP CONNECTION TIMED OUT
|
|
|
|
Attempted to generate using:
|
|
```
|
|
generate_song(
|
|
genre="reggaeton",
|
|
style="perreo duro vieja escuela tipo safaera",
|
|
reference="libreria/reggaeton/ejemplo.mp3"
|
|
)
|
|
```
|
|
|
|
Result: `MCP error -32001: Request timed out`
|
|
|
|
**Diagnosis:**
|
|
- MCP server is listening on port 9877
|
|
- Ableton is running
|
|
- But commands are timing out (both get_session_info and generate_song)
|
|
- Likely a stale connection or blocking operation
|
|
|
|
**last_generation_id remains:** `a6a4cc87e493`
|
|
|
|
---
|
|
|
|
## Baseline Session Analysis (`a6a4cc87e493`)
|
|
|
|
### Threshold Failures Found
|
|
|
|
| Threshold | Expected | Actual | Status |
|
|
|-----------|----------|--------|--------|
|
|
| `coherence_score` | ≥6.5 | 5.5 | ❌ FAIL |
|
|
| `mandatory_midi_hook.materialized` | true | false | ❌ FAIL |
|
|
| `piano_presence.piano_layer_count` | ≥1 | 0 | ❌ FAIL |
|
|
| `layer_selections.summary.total_layers` | >0 | 0 | ❌ FAIL |
|
|
| `repetition_metrics.verdict` | ≠ repetitive | N/A | ⚠️ NOT FOUND |
|
|
|
|
### Vocal Leak Confirmed
|
|
|
|
The baseline manifest showed **3 vocal tracks** auto-generated:
|
|
- AUDIO VOCAL BUILD
|
|
- AUDIO VOCAL PEAK
|
|
- AUDIO VOCAL SHOT
|
|
|
|
---
|
|
|
|
## Files Modified
|
|
|
|
1. **`AbletonMCP_AI/AbletonMCP_AI/MCP_Server/song_generator.py`**
|
|
- Vocal removed from track budget (line 5880)
|
|
- Vocal track specs removed for all genres (lines 11741, 11843, 11867)
|
|
- VARIATION_ROLES cleaned (line 5672)
|
|
|
|
2. **`AbletonMCP_AI/AbletonMCP_AI/MCP_Server/reference_listener.py`**
|
|
- Manual-only role filtering added to CORE_ROLES loop (lines 5626-5632)
|
|
- Manual-only role filtering added to OPTIONAL_ROLES loop (lines 5874-5880)
|
|
- Vocal_alt selection skipped for manual-only roles (lines 7125-7138)
|
|
|
|
3. **`AbletonMCP_AI/AbletonMCP_AI/MCP_Server/server.py`**
|
|
- **CRITICAL:** Anti-flattening check added BEFORE consolidation (lines 4618-4667)
|
|
- This is the ACTIVE runtime path, not a helper function
|
|
|
|
---
|
|
|
|
## Open Issues
|
|
|
|
### 1. MCP Connection Timeout
|
|
|
|
**Status:** Requires investigation
|
|
|
|
**Symptoms:**
|
|
- `get_session_info` times out
|
|
- `generate_song` times out
|
|
- `netstat` shows MCP listening but connections in TIME_WAIT
|
|
|
|
**Potential Causes:**
|
|
- Stale connection blocking new requests
|
|
- Previous generate request still running
|
|
- Ableton main thread blocked
|
|
|
|
### 2. Hook Materialization
|
|
|
|
**Status:** Unstable (not consistently failing)
|
|
|
|
Evidence from manifests:
|
|
- `4c697638bd3d`: hook materialized = true
|
|
- `ba306bd7575b`: hook materialized = true
|
|
- `a6a4cc87e493`: hook materialized = false
|
|
|
|
---
|
|
|
|
## Verdict
|
|
|
|
**Status: CODE COMPLETE - RUNTIME VALIDATION BLOCKED**
|
|
|
|
- ✅ P1: Vocal leak fixes implemented (all layers cleaned)
|
|
- ✅ P2: Anti-loop fix placed in ACTIVE runtime path
|
|
- ✅ Tests pass (23 + 11 = 34 tests)
|
|
- ❌ Runtime validation: MCP connection timed out
|
|
|
|
**Cannot close sprint without:**
|
|
1. New session_id persisted
|
|
2. Thresholds verified on new generation
|
|
|
|
**Recommendation:** Investigate MCP connection timeout before proceeding with P4 investigation. |