478 lines
11 KiB
Markdown
478 lines
11 KiB
Markdown
# SPRINT v0.1.37 - NEXT FOR GLM
|
|
## Close The Real Project-Editing Runtime Path On `song.als`
|
|
|
|
**Owner:** GLM via OpenCode
|
|
**Reviewer:** Codex
|
|
**Fecha:** 2026-04-02
|
|
**Mode:** Project editing, not new-song generation
|
|
|
|
Primary benchmark project:
|
|
|
|
- `C:\Users\ren\Desktop\song Project\song.als`
|
|
|
|
Reference docs:
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\PROJECT_AUDIT_song_2026-04-03.md`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.36_IMPLEMENTATION_REPORT.md`
|
|
|
|
---
|
|
|
|
## 1. Reviewer Summary
|
|
|
|
GLM did useful work in `server.py`: the public MCP surface for project editing is now much larger.
|
|
|
|
But the report was **not** accurate enough to mark the sprint complete.
|
|
|
|
Codex review found this real state:
|
|
|
|
- the report said `COMPLETED`
|
|
- the code actually had a **partial MCP layer / partial runtime layer** split
|
|
- `get_clips` was exposed publicly but not routed in the runtime
|
|
- arrangement MIDI editing still depended on `track.create_clip(...)`, which is not available in this Live install
|
|
- `set_device_parameter` was exposed publicly, but the public tool did not expose the runtime's `parameter_name` path
|
|
- the report mentioned a temp file `sprint_036_tools.py`, but that file is not present in the active tree
|
|
|
|
So the correct interpretation of v0.1.36 is:
|
|
|
|
- **good direction**
|
|
- **not closed**
|
|
|
|
---
|
|
|
|
## 2. What Codex Fixed After GLM
|
|
|
|
These are already fixed in code and must be treated as the new baseline.
|
|
|
|
### 2.1 `server.py`
|
|
|
|
Codex fixed:
|
|
|
|
- `set_device_parameter(...)` now supports both:
|
|
- `parameter_index`
|
|
- `parameter_name`
|
|
- `audit_current_project()` now reports `repeated_clip_overuse`
|
|
|
|
### 2.2 `abletonmcp_init.py`
|
|
|
|
Codex fixed:
|
|
|
|
- runtime routing for `get_clips`
|
|
- runtime routing now passes `track_type` to:
|
|
- `get_clip_info`
|
|
- `create_arrangement_clip`
|
|
- `add_notes_to_arrangement_clip`
|
|
- `duplicate_clip_to_arrangement`
|
|
- arrangement clip creation no longer depends only on direct `track.create_clip(...)`
|
|
- fallback now attempts **session-clip-to-arrangement recording**
|
|
- arrangement clip lookup is more robust via cached/retrieved clips near `start_time`
|
|
|
|
### 2.3 `abletonmcp_runtime.py`
|
|
|
|
Codex applied the same parity fixes there:
|
|
|
|
- `get_clips` routing
|
|
- `track_type` propagation
|
|
- `parameter_name` support in `set_device_parameter`
|
|
- same arrangement fallback strategy
|
|
|
|
### 2.4 Tests added/updated by Codex
|
|
|
|
Codex added/extended tests for:
|
|
|
|
- public `set_device_parameter` by `parameter_name`
|
|
- `audit_current_project()` repeated clip overuse reporting
|
|
|
|
Current validated tests:
|
|
|
|
- `test_runtime_truth.py`
|
|
- `test_selection_coherence.py`
|
|
- `test_piano_forward.py`
|
|
|
|
All pass locally.
|
|
|
|
---
|
|
|
|
## 3. Current Truth After Review
|
|
|
|
You must start from this truth, not from the v0.1.36 report text.
|
|
|
|
### 3.1 What is now true in code
|
|
|
|
- public editing tools exist in `server.py`
|
|
- runtime now has `get_clips` routing
|
|
- runtime now has an arrangement creation fallback path instead of only `track.create_clip(...)`
|
|
- the public `set_device_parameter` API is no longer index-only
|
|
|
|
### 3.2 What is still NOT proven
|
|
|
|
These fixes are **not** proven complete until you restart Live/OpenCode and test them against the real benchmark project:
|
|
|
|
- `create_arrangement_clip`
|
|
- `add_notes_to_arrangement_clip`
|
|
- `duplicate_clip_to_arrangement`
|
|
- `get_clips`
|
|
|
|
Reason:
|
|
|
|
- those paths depend on the loaded Ableton runtime, not just Python compilation
|
|
|
|
So this sprint is a **runtime validation + stabilization sprint**, not another layer of speculative wrapper code.
|
|
|
|
---
|
|
|
|
## 4. Code Review Findings You Must Respect
|
|
|
|
### 4.1 Do not overclaim completion
|
|
|
|
This was the biggest process failure in v0.1.36.
|
|
|
|
Wrong pattern:
|
|
|
|
- public MCP wrapper exists
|
|
- compile passes
|
|
- report says `COMPLETED`
|
|
|
|
Correct pattern:
|
|
|
|
- public wrapper exists
|
|
- runtime command exists
|
|
- Ableton loaded the new runtime
|
|
- tool works against `song.als`
|
|
- evidence is included
|
|
|
|
If any of those is missing:
|
|
|
|
- the sprint is **not complete**
|
|
|
|
### 4.2 Do not count dead or missing files as implementation evidence
|
|
|
|
The report cited:
|
|
|
|
- `sprint_036_tools.py`
|
|
|
|
That file is not present in the active tree.
|
|
|
|
Do not cite temp artifacts as evidence unless they exist and matter.
|
|
|
|
### 4.3 Do not confuse “tool exists” with “editing workflow exists”
|
|
|
|
The product goal is not “more MCP tools”.
|
|
|
|
The goal is:
|
|
|
|
- open project
|
|
- inspect project
|
|
- edit project
|
|
- validate project
|
|
|
|
on a real `.als`
|
|
|
|
### 4.4 Do not invent a black-box `refine_existing_song()` yet
|
|
|
|
Not until the primitives are proven.
|
|
|
|
Right now the correct priority is:
|
|
|
|
1. clip inspection works
|
|
2. arrangement MIDI writing works
|
|
3. device parameter editing works
|
|
4. audit metrics work on real project
|
|
|
|
Only after that should you add orchestration.
|
|
|
|
---
|
|
|
|
## 5. Main Goal Of v0.1.37
|
|
|
|
Prove that the MCP can **inspect and edit an already-open project** in a real Ableton session.
|
|
|
|
The benchmark remains:
|
|
|
|
- `C:\Users\ren\Desktop\song Project\song.als`
|
|
|
|
This sprint is complete only if the MCP can perform real edit actions on that project.
|
|
|
|
---
|
|
|
|
## 6. P0 Tasks
|
|
|
|
## P0.1 Restart and validate the actual loaded runtime
|
|
|
|
Mandatory before any conclusion:
|
|
|
|
1. Restart Ableton Live
|
|
2. Restart OpenCode
|
|
3. Reconnect MCP
|
|
4. Confirm the editing tools are visible and callable
|
|
|
|
Minimum evidence:
|
|
|
|
- `opencode mcp list --print-logs`
|
|
- proof that the tool list includes the editing tools
|
|
|
|
If OpenCode shows stale tools or stale failures:
|
|
|
|
- do not continue “testing”
|
|
- restart again and prove the loaded runtime is current
|
|
|
|
---
|
|
|
|
## P0.2 Validate the inspection tools on `song.als`
|
|
|
|
Using the real loaded project, prove:
|
|
|
|
- `get_tracks()`
|
|
- `get_clips(track_index=...)`
|
|
- `get_devices(track_index=...)`
|
|
- `get_clip_info(track_index=..., clip_index=...)`
|
|
- `audit_current_project()`
|
|
|
|
### Required target tracks
|
|
|
|
At minimum inspect:
|
|
|
|
- `HARMONY_PIANO_MIDI`
|
|
- `AUDIO BASS`
|
|
- one percussion track
|
|
- one synth/music track
|
|
|
|
### Required evidence
|
|
|
|
For each tested tool, include:
|
|
|
|
- exact MCP call
|
|
- exact result
|
|
- whether it matches the real project seen in Live
|
|
|
|
Do not summarize vaguely.
|
|
|
|
---
|
|
|
|
## P0.3 Validate arrangement MIDI editing on the real project
|
|
|
|
This is the real blocker.
|
|
|
|
Using the already-open `song.als`, prove these work:
|
|
|
|
### 1. `create_arrangement_clip(...)`
|
|
|
|
Create a short test clip on `HARMONY_PIANO_MIDI`.
|
|
|
|
Requirements:
|
|
|
|
- clip appears in Arrangement
|
|
- it is on the expected track
|
|
- it is at the expected start time
|
|
|
|
### 2. `add_notes_to_arrangement_clip(...)`
|
|
|
|
Add a small note set to that clip.
|
|
|
|
Requirements:
|
|
|
|
- notes are visible in the created clip
|
|
- notes are audible when the track/device is valid
|
|
|
|
### 3. `duplicate_clip_to_arrangement(...)`
|
|
|
|
Take one existing Session clip and materialize it into Arrangement.
|
|
|
|
Requirements:
|
|
|
|
- duplicated result appears in Arrangement
|
|
- clip length is sensible
|
|
- it lands near the requested `start_time`
|
|
|
|
If any of these fail:
|
|
|
|
- capture the exact error
|
|
- inspect Ableton log / MCP response
|
|
- patch the runtime
|
|
- retest
|
|
|
|
Do not declare the sprint done if these remain unproven.
|
|
|
|
---
|
|
|
|
## P0.4 Validate `set_device_parameter(...)` by name
|
|
|
|
This was incomplete in GLM's public API and Codex fixed it.
|
|
|
|
Now you must prove it works end-to-end.
|
|
|
|
On a real device in the loaded project:
|
|
|
|
- call `get_devices(...)`
|
|
- choose a real device index
|
|
- use `set_device_parameter(..., parameter_name="...")`
|
|
|
|
Required evidence:
|
|
|
|
- exact parameter changed
|
|
- before/after value
|
|
- confirmation in Live if visible
|
|
|
|
---
|
|
|
|
## P0.5 Validate `audit_current_project()` against the benchmark
|
|
|
|
The audit must now report:
|
|
|
|
- longest drum gap
|
|
- longest harmonic gap
|
|
- empty arrangement tracks
|
|
- harmonic MIDI tracks with devices but no clips
|
|
- structure mismatch
|
|
- repeated clip overuse
|
|
|
|
You must verify that its output is directionally correct against:
|
|
|
|
- `PROJECT_AUDIT_song_2026-04-03.md`
|
|
- the real loaded set
|
|
|
|
This does **not** need perfect musical intelligence yet.
|
|
It does need to be honest and useful.
|
|
|
|
---
|
|
|
|
## 7. P1 Tasks
|
|
|
|
## P1.1 Improve `get_clip_info(...)` semantics
|
|
|
|
Right now `get_clip_info(...)` is still session-slot-centric.
|
|
|
|
That is acceptable as an intermediate state, but you must decide and document one of these directions:
|
|
|
|
1. keep `get_clip_info(...)` explicitly session-only and rename/scope it accordingly
|
|
2. add a second tool for arrangement clip info
|
|
3. extend the current API with a `view` or `clip_kind` argument
|
|
|
|
Do not leave it semantically ambiguous.
|
|
|
|
This is a product/API cleanup task, not the main blocker.
|
|
|
|
---
|
|
|
|
## P1.2 Design the first safe editing orchestration
|
|
|
|
Only after P0 works.
|
|
|
|
Candidate:
|
|
|
|
- `refine_existing_song(...)`
|
|
|
|
But it must:
|
|
|
|
- call public editing tools internally
|
|
- return an action log
|
|
- be inspectable, not magical
|
|
|
|
Do **not** implement this first.
|
|
|
|
---
|
|
|
|
## 8. Non-Goals
|
|
|
|
Do not spend this sprint on:
|
|
|
|
- new generation features
|
|
- reggaeton coherence tuning
|
|
- piano-forward logic
|
|
- new sample-selection heuristics
|
|
- cosmetic report writing
|
|
|
|
This sprint is specifically about the **editing runtime path**.
|
|
|
|
---
|
|
|
|
## 9. Required Files
|
|
|
|
Primary:
|
|
|
|
- `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`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\abletonmcp_runtime.py`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_runtime_truth.py`
|
|
|
|
Benchmark:
|
|
|
|
- `C:\Users\ren\Desktop\song Project\song.als`
|
|
|
|
---
|
|
|
|
## 10. Required Validation Commands
|
|
|
|
Minimum:
|
|
|
|
```powershell
|
|
python -m py_compile "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" "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\abletonmcp_runtime.py"
|
|
python "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\tests\test_runtime_truth.py"
|
|
```
|
|
|
|
And then real MCP validation in OpenCode against the loaded project.
|
|
|
|
---
|
|
|
|
## 11. Deliverable Format
|
|
|
|
Write:
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs\SPRINT_v0.1.37_VALIDATION_REPORT.md`
|
|
|
|
The report must contain:
|
|
|
|
### A. Runtime truth
|
|
|
|
- did you restart Ableton
|
|
- did you restart OpenCode
|
|
- did MCP reconnect successfully
|
|
|
|
### B. Tool-by-tool results
|
|
|
|
For each tool tested:
|
|
|
|
- exact call
|
|
- exact result
|
|
- pass/fail
|
|
|
|
### C. Benchmark evidence
|
|
|
|
- what changed in `song.als`
|
|
- what you inspected
|
|
- what you successfully edited
|
|
|
|
### D. Failures
|
|
|
|
For every remaining failure:
|
|
|
|
- exact command
|
|
- exact error
|
|
- root cause
|
|
- whether it is code, MCP, or Live API limitation
|
|
|
|
### E. Reviewer-grade conclusion
|
|
|
|
One of only:
|
|
|
|
- `COMPLETED`
|
|
- `PARTIAL`
|
|
- `BLOCKED`
|
|
|
|
Do not write `COMPLETED` unless arrangement MIDI editing was proven on the live project.
|
|
|
|
---
|
|
|
|
## 12. Final Rule
|
|
|
|
If the runtime still cannot write/edit Arrangement MIDI on the live benchmark project after restart and retest:
|
|
|
|
- do not hide it
|
|
- do not soften it
|
|
- do not declare success because wrappers exist
|
|
|
|
The whole point of this sprint is to close the gap between:
|
|
|
|
- MCP surface
|
|
- actual project editing in Ableton
|
|
|