443 lines
11 KiB
Markdown
443 lines
11 KiB
Markdown
# SPRINT v0.1.30 - NEXT FOR KIMI
|
|
## Arrangement-backed Harmonic MIDI, Selective Snare, Fewer Empty Gaps
|
|
|
|
**Owner:** Kimi via OpenCode
|
|
**Reviewer:** Codex
|
|
**Fecha:** 2026-04-02
|
|
**Baseline session:** `7b65596ef69a`
|
|
**Reference for production quality:** Ableton demo project reviewed live by Codex via MCP
|
|
|
|
---
|
|
|
|
## 1. Runtime Truth
|
|
|
|
Do not trust only `docs/SPRINT_v0.1.29_VALIDATION_REPORT.md`.
|
|
Validate against:
|
|
|
|
- `C:\Users\ren\.abletonmcp_ai\generation_manifests.json`
|
|
- current Live session via MCP
|
|
- active code in:
|
|
- `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\song_generator.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_init.py`
|
|
|
|
Baseline truth:
|
|
|
|
- `session_id = 7b65596ef69a`
|
|
- `generation_mode = library-first-hybrid`
|
|
- `coherence_score = 4.9`
|
|
- `family_adherence_rate = 0.5`
|
|
- `repetition_metrics.verdict = repetitive`
|
|
- `music_source_reuse_ratio = 1.0`
|
|
- `mandatory_midi_hook.track_name = HARMONY_PIANO_MIDI`
|
|
|
|
Critical runtime truth found by Codex in Live:
|
|
|
|
- `HARMONY_PIANO_MIDI` exists
|
|
- it has `device_count = 1`
|
|
- but in the current Live session it has `session_clip_count = 1`
|
|
- and `arrangement_clip_count = 0`
|
|
|
|
That means:
|
|
|
|
- the report over-read the hook as solved
|
|
- the harmonic MIDI exists as a concept
|
|
- but in Arrangement playback it is not actually carrying the song
|
|
|
|
This matches the user's audible complaint:
|
|
|
|
- the MIDI does not really sound in the song
|
|
- the song still has good 4-second islands followed by empty space
|
|
|
|
---
|
|
|
|
## 2. What Codex Fixed In This Turn
|
|
|
|
These fixes are already in code and must not be reverted.
|
|
|
|
### 2.1 Snare selectivity bug
|
|
|
|
The snare penalty logic in `reference_listener.py` had a real bug:
|
|
|
|
- aggressive snare penalty was computed
|
|
- but the final return clamped the multiplier to minimum `1.0`
|
|
- so penalties never actually applied
|
|
|
|
Codex fixed:
|
|
|
|
- penalties can now go below `1.0`
|
|
- `snare/clap` section context is now aggregated across intro/build/drop/break instead of only reading the first energetic section
|
|
|
|
Interpretation:
|
|
|
|
- `SS_RNBL_Me_Gustas_One_Shot_Snare.wav` is no longer protected by a math bug
|
|
- do not reintroduce that clamp
|
|
|
|
### 2.2 Harmonic MIDI hook planning bug
|
|
|
|
The hook planner was too section-local.
|
|
|
|
Codex fixed `song_generator.py` so the hook plan now stores:
|
|
|
|
- per-section hook notes for the role itself
|
|
- plus `arrangement_notes`
|
|
- plus `arrangement_length_beats`
|
|
|
|
Meaning:
|
|
|
|
- `HARMONY_PIANO_MIDI` can now be materialized as a song-long harmonic line
|
|
- not only as a local section clip
|
|
|
|
### 2.3 Arrangement MIDI materialization bug
|
|
|
|
Codex fixed the path in `server.py` to:
|
|
|
|
- prefer `arrangement_notes`
|
|
- create a long arrangement clip
|
|
- retry note insertion instead of falling back immediately
|
|
|
|
Also fixed the runtime in:
|
|
|
|
- `abletonmcp_init.py`
|
|
- `AbletonMCP_AI/abletonmcp_runtime.py`
|
|
|
|
The runtime now caches newly created arrangement clips so `add_notes_to_arrangement_clip` can find them reliably.
|
|
|
|
### 2.4 Manifest / validation truth bugs
|
|
|
|
Codex fixed:
|
|
|
|
- `mandatory_midi_hook.materialization_mode` was lying with `"created"` instead of the real mode
|
|
- `actual_runtime` was missing totals
|
|
- senior validation was under-reading `family_adherence_rate` from stale paths
|
|
|
|
Do not undo these fixes.
|
|
|
|
### 2.5 Tests added / hardened
|
|
|
|
Codex added or tightened tests for:
|
|
|
|
- snare penalty below `1.0` in soft context
|
|
- hook planning across the full phrase plan
|
|
|
|
---
|
|
|
|
## 3. Read This User Clarification Correctly
|
|
|
|
The user comes from FL Studio and says:
|
|
|
|
- `piano roll`
|
|
- `piano armonico`
|
|
|
|
In this project that means:
|
|
|
|
- harmonic MIDI content
|
|
- `HARMONY_PIANO_MIDI`
|
|
- song-wide harmonic support or phrase identity
|
|
|
|
It does **not** mean:
|
|
|
|
- only `AUDIO PIANO MELODY`
|
|
- only piano loops from the library
|
|
|
|
The correct product goal is:
|
|
|
|
- `HARMONY_PIANO_MIDI` across the song
|
|
- blended with library audio
|
|
- used to fill and unify harmonic space
|
|
|
|
---
|
|
|
|
## 4. Code Review Of v0.1.29
|
|
|
|
### 4.1 What Kimi improved
|
|
|
|
Kimi did improve one real thing:
|
|
|
|
- Arrangement structure is less cloned than older versions
|
|
- visually it looks more like a song and less like the exact same layout every time
|
|
|
|
That improvement is real and should be preserved.
|
|
|
|
### 4.2 What remained wrong
|
|
|
|
1. The hook was reported as solved too early.
|
|
In runtime it was still Session-backed, not Arrangement-backed.
|
|
|
|
2. The snare issue was not really solved.
|
|
The code had a penalty path, but the math clamp cancelled it.
|
|
|
|
3. The song still relies too much on clip islands.
|
|
It creates a nice fragment, then leaves too much empty space.
|
|
|
|
4. The MIDI harmony is still under-used in audible continuity.
|
|
This is the main missing glue.
|
|
|
|
5. The report still leaned too much toward "need piano audio melody".
|
|
That is not the main blocker.
|
|
|
|
### 4.3 Main design failure now
|
|
|
|
The current generator still behaves too much like:
|
|
|
|
- one good loop
|
|
- then space
|
|
- then another good loop
|
|
|
|
Instead of:
|
|
|
|
- one coherent harmonic spine
|
|
- with audio layers entering and leaving around it
|
|
|
|
That is the central issue of v0.1.30.
|
|
|
|
---
|
|
|
|
## 5. Production Target From Ableton Demo
|
|
|
|
Copy the production discipline, not the genre.
|
|
|
|
What the demo showed:
|
|
|
|
- long phrases
|
|
- role clarity
|
|
- MIDI carrying a lot of identity
|
|
- atmosphere and support tracks keeping continuity
|
|
- section evolution by arrangement, not by constant reset
|
|
|
|
Translate that into our generator:
|
|
|
|
- `HARMONY_PIANO_MIDI` must behave like a structural role
|
|
- not like a decorative extra
|
|
- the song should stay alive between loops because harmonic content remains present
|
|
|
|
---
|
|
|
|
## 6. Required Work In v0.1.30
|
|
|
|
### P0. Restart Live before validating
|
|
|
|
Codex changed:
|
|
|
|
- `abletonmcp_init.py`
|
|
- `AbletonMCP_AI/abletonmcp_runtime.py`
|
|
|
|
These runtime changes require reloading Live.
|
|
|
|
Do not validate v0.1.30 against a Live session that still has the old runtime loaded.
|
|
|
|
### P0. Make `HARMONY_PIANO_MIDI` Arrangement-backed and audible
|
|
|
|
This is the top priority.
|
|
|
|
Required outcome:
|
|
|
|
- `HARMONY_PIANO_MIDI` must have arrangement clips
|
|
- it must not be only a Session clip
|
|
- it must cover the song in musically useful form
|
|
|
|
Required evidence:
|
|
|
|
- MCP `get_track_info()` for `HARMONY_PIANO_MIDI`
|
|
- `arrangement_clip_count > 0`
|
|
- report actual clip spans or arrangement note coverage
|
|
|
|
Not acceptable:
|
|
|
|
- `session_clip_count = 1` and `arrangement_clip_count = 0`
|
|
- calling that "materialized"
|
|
|
|
### P0. Use the harmonic MIDI to reduce empty spaces
|
|
|
|
The user explicitly said:
|
|
|
|
- there are still holes
|
|
- it feels like 4 seconds of something good and then 3 seconds empty
|
|
|
|
Required logic:
|
|
|
|
- `HARMONY_PIANO_MIDI` should fill continuity gaps
|
|
- it must survive across intro/build/drop/break in transformed form
|
|
- it should act as glue when audio loops thin out
|
|
|
|
Acceptable transformations:
|
|
|
|
- lower density
|
|
- higher density
|
|
- voicing changes
|
|
- register changes
|
|
- shorter response version in breaks
|
|
|
|
Not acceptable:
|
|
|
|
- disappearing for long stretches without replacement
|
|
|
|
### P0. Add continuity metrics for harmonic coverage
|
|
|
|
The current metrics are not enough.
|
|
Add at least one of these, preferably both:
|
|
|
|
- `harmonic_coverage_ratio`
|
|
- `max_harmonic_gap_beats`
|
|
|
|
Definition:
|
|
|
|
- evaluate the union of active harmonic support across:
|
|
- `HARMONY_PIANO_MIDI`
|
|
- `AUDIO KEYS SUPPORT`
|
|
- `AUDIO SYNTH LOOP`
|
|
- `AUDIO SYNTH PEAK`
|
|
- any other harmonic layer
|
|
|
|
Goal:
|
|
|
|
- detect whether the song has long empty harmonic holes
|
|
|
|
Suggested threshold:
|
|
|
|
- `max_harmonic_gap_beats <= 8`
|
|
|
|
If there is a section with a longer gap, Kimi must justify it musically.
|
|
|
|
### P1. Keep the aggressive snare selective, not banned
|
|
|
|
Target sample:
|
|
|
|
- `SS_RNBL_Me_Gustas_One_Shot_Snare.wav`
|
|
|
|
Rules:
|
|
|
|
- do not blacklist it
|
|
- do not filename-ban it
|
|
- do not special-case it with a hard if
|
|
|
|
Required:
|
|
|
|
- prove that contextual scoring now makes it lose in softer contexts
|
|
- if it still wins, show the ranking and explain why
|
|
|
|
This time the evidence must be from the actual ranking flow, not just from a helper.
|
|
|
|
### P1. Do not solve continuity by adding random sounds
|
|
|
|
Do not react to monotony by making the music bus noisy.
|
|
|
|
The right fix is:
|
|
|
|
- stronger harmonic spine
|
|
- more phrase variation
|
|
- fewer dead gaps
|
|
|
|
Not:
|
|
|
|
- more unrelated layers
|
|
- more random packs
|
|
|
|
### P1. Keep auto vocals disabled
|
|
|
|
Still mandatory:
|
|
|
|
- no vocal layers auto-generated
|
|
- no vocal fallback
|
|
- no vocal shots
|
|
|
|
The user will record vocals manually.
|
|
|
|
---
|
|
|
|
## 7. Files Kimi Must Review
|
|
|
|
Required:
|
|
|
|
1. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py`
|
|
2. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py`
|
|
3. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py`
|
|
4. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\abletonmcp_init.py`
|
|
5. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\abletonmcp_runtime.py`
|
|
6. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.29_VALIDATION_REPORT.md`
|
|
|
|
Optional but recommended:
|
|
|
|
7. `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.29_NEXT_KIMI.md`
|
|
|
|
---
|
|
|
|
## 8. Exit Criteria
|
|
|
|
Do not close the sprint without a new persisted session.
|
|
|
|
Required:
|
|
|
|
- `generation_mode = library-first-hybrid`
|
|
- `mandatory_midi_hook.track_name = HARMONY_PIANO_MIDI`
|
|
- `mandatory_midi_hook.materialized = true`
|
|
- `mandatory_midi_hook.materialization_mode = arrangement` or `embedded`
|
|
- `mandatory_midi_hook.arrangement_backed = true`
|
|
- `coherence_score > 4.9`
|
|
- `family_adherence_rate > 0.5`
|
|
- `music_source_reuse_ratio <= 1.0` with honest explanation
|
|
- `vocal_layers_auto = 0`
|
|
|
|
Continuity criteria:
|
|
|
|
- `HARMONY_PIANO_MIDI` is audible through the song
|
|
- fewer empty harmonic gaps than `7b65596ef69a`
|
|
- no obvious "good loop then empty hole" behavior
|
|
|
|
Snare criteria:
|
|
|
|
- aggressive snare no longer wins by default
|
|
- if it wins, evidence must show why the context justified it
|
|
|
|
---
|
|
|
|
## 9. Validation Report Required
|
|
|
|
Kimi must produce:
|
|
|
|
`C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.30_VALIDATION_REPORT.md`
|
|
|
|
It must include:
|
|
|
|
1. real `session_id`
|
|
2. comparison against `7b65596ef69a`
|
|
3. MCP evidence for `HARMONY_PIANO_MIDI`
|
|
4. `get_track_info()` summary for `HARMONY_PIANO_MIDI`
|
|
5. `arrangement_clip_count`
|
|
6. `session_clip_count`
|
|
7. `mandatory_midi_hook.materialization_mode`
|
|
8. `mandatory_midi_hook.arrangement_backed`
|
|
9. `piano_presence`
|
|
10. `harmonic_coverage_ratio` and/or `max_harmonic_gap_beats`
|
|
11. `repetition_metrics`
|
|
12. snare/clap ranking evidence
|
|
13. explicit confirmation that automatic vocals remain disabled
|
|
|
|
The report is invalid if it says:
|
|
|
|
- hook solved while it is still Session-only
|
|
- "missing piano" while `HARMONY_PIANO_MIDI` exists
|
|
- "snare selectivity implemented" without ranking evidence
|
|
|
|
---
|
|
|
|
## 10. Final Instruction To Kimi
|
|
|
|
Think like a senior producer-engineer.
|
|
|
|
The next improvement is not:
|
|
|
|
- more audio clutter
|
|
- more random variation
|
|
- more empty breaks
|
|
|
|
It is:
|
|
|
|
- Arrangement-backed harmonic MIDI
|
|
- less silence as fake variation
|
|
- more continuity
|
|
- more disciplined snare context
|
|
|
|
If the next result still sounds like one good loop followed by empty space, the sprint is not closed.
|