fix(instrument_drop): narrow FX hotspot to tcp.fx/mcp.fx, not bare tcp/mcp (S-VIEW-BUG-1)

This commit is contained in:
2026-07-27 13:34:40 -04:00
parent fef595be91
commit 5870b18362
4 changed files with 48 additions and 37 deletions
+8 -4
View File
@@ -40,11 +40,15 @@ std::string buildInstrumentDropChunk(const std::string& sampleId) {
}
bool infoNamesFxHotspot(const std::string& info) {
// See the header contract. The FX-chain / floating-FX windows report "fx_*"; the track /
// mixer panel that carries the FX button reports "tcp*" / "mcp*". Prefix-match all three —
// the TCP/MCP surfaces are the fix for S-VIEW-BUG-1 (the "fx_"-only predicate missed them).
// See the header contract. Two documented FX-bearing surfaces (SDK §GetThingFromPoint):
// "fx_chain" / "fx_N" — the FX-chain and floating-FX windows.
// "tcp.fx" / "mcp.fx" — the TCP / MCP FX button specifically.
// Bare "tcp" / "mcp" and any other "tcp.*" / "mcp.*" sub-element (e.g. "tcp.mute",
// "tcp.vol") are track-panel hits that are NOT on the FX button — those must not trigger
// an instrument drop. Exact-string match for the two .fx tokens; prefix-match for fx_.
if (info == "tcp.fx" || info == "mcp.fx") return true;
auto startsWith = [&info](const char* p) { return info.rfind(p, 0) == 0; };
return startsWith("fx_") || startsWith("tcp") || startsWith("mcp");
return startsWith("fx_");
}
std::string encodeBase64(const std::vector<std::uint8_t>& bytes) {