File size: 2,889 Bytes
a8f4396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7c45edf
 
 
 
 
 
8afcba7
29b4c18
 
 
 
 
8afcba7
 
29b4c18
d9f9b4b
 
 
 
 
 
 
8208bb7
 
 
 
 
 
a8f4396
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# PluginBridge β€” Sprint History
> Archive. Claude Code reads this only when debugging a historical issue.
> Active work goes in SYNC.md.

---

## Sprint 1 βœ…
Plugin shell + MCP server. Basic VST3 structure, HTTP JSON-RPC endpoint.

## Sprint 2 βœ…
Out-of-process hosting via shared memory. Helper process. Crash isolation.
GUI showed in windowed Ableton but broke in fullscreen β†’ led to Sprint 3 redesign.

## Sprint 3 βœ… (v0.5.2)
Full in-process hosting with safety scan. Ableton-style TreeView picker.
Fixes: deduplication, manufacturer names, background scan conflict, addChildComponent bug.
MCP verified end-to-end. Pro-Q 4 = 737 params via MCP.

## Sprint 8 βœ… (v0.8.0 β€” Port 16620 Restored)
Reverted out-of-scope regression from Sprint 7: McpServer now tries port 16620 first
(via kDefaultMcpPort constant), falls back to bind_to_any_port if taken.
First instance always gets 16620. Multi-instance still works.
Build: βœ… Clean 2026-05-17.

## Sprint 7 βœ… (v0.7.0 β€” In-Process Param Routing)
Route MCP set_params/get_params/search_param through inProcessPlugin for SAFE plugins.
Root cause: after Sprint 5, audio+GUI use in-process instance but MCP still targets Helper's
hidden instance β†’ EQ changes invisible in Pro-Q 4.
Fix: three param callbacks on McpServer (same pattern as getAnalysisCallback).
Also fixes id-vs-index bug: search_param now returns "i" (array index) not VST3 param ID.
Build: βœ… Clean 2026-05-17.
⚠️ Out-of-scope regression: port 16620 priority removed from McpServer.cpp β†’ Sprint 8 fixes.

## Sprint 6 βœ… (v0.6.0 β€” Multi-Instance + Channel Selector)
Channel name dropdown in Editor (30 items: Vocals/Drums/Bass/Keys/Synths/Strings/FX/Buses/Custom).
Auto-port via bind_to_any_port β€” each instance gets its own port.
InstanceRegistry.h β€” atomic read/write of /tmp/pluginbridge-registry.json.
list_instances MCP tool (6th tool) β€” returns all loaded channel names.
get_analysis prefixed with channel name: "[Vocal Bus] -16.2 LUFS | ..."

## Sprint 5 βœ… (v0.5.3 β€” Live Spectrum)
Audio routed through in-process plugin for SAFE plugins.
Pro-Q 4 spectrum analyzer shows live signal. All plugin GUI meters/displays now work.
prepareToPlay() added to loadInProcessPlugin() β€” safe because UNSAFE plugins never reach it.
ML intern correctly identified the prepareToPlay risk and asked before writing code. βœ…

## Sprint 4 βœ… (AudioAnalyser)
Real-time audio analysis: LUFS, true peak, stereo width, spectral centroid, 7-band FFT.
`get_analysis` MCP tool wired.

**Regression introduced and fixed (2026-05-17):**
ML intern rewrote Editor+Processor while adding AudioAnalyser, reverting to CALayerHost
architecture (FAILED-APPROACHES #10). Fixed by restoring from git stash `9042377`.
Root cause: ML intern touched locked files outside its task scope.
Prevention: scope rules added to MACHINE-CONTEXT.md, NEXT PUSH template in SYNC.md.