When detecting events from external processes by parsing their output, don’t rely on version-specific strings that could change:
# BAD: Will break if external system changes message format
cond do
line =~ "SuperCollider 3 server ready" -> handle_ready()
line =~ "SuperDirt: listening to Tidal on port" -> handle_superdirt()
end
Instead, emit your own custom markers that you control:
# Define markers in one place
@marker_server_ready "WAVEFORM_SERVER_READY"
@marker_superdirt_ready "WAVEFORM_SUPERDIRT_READY"
# Public accessors for other modules
def marker_server_ready, do: @marker_server_ready
def marker_superdirt_ready, do: @marker_superdirt_ready
# Detection is now version-independent
cond do
line =~ @marker_server_ready -> handle_ready()
line =~ @marker_superdirt_ready -> handle_superdirt()
end
Then emit these markers from the external system:
Server.default.waitForBoot({
"WAVEFORM_SERVER_READY".postln;
});
Keep fallback detection for backwards compatibility:
cond do
# Primary: our controlled markers
line =~ @marker_server_ready -> handle_ready()
# Fallback: original messages (backwards compatibility)
line =~ "SuperCollider 3 server ready" -> handle_ready()
end