feat: OSC debugger in Advanced, a doctor probe that can actually fail, and BEYOND on 8000 - #110
Merged
Merged
Conversation
Contributor
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three things that came out of debugging the real BEYOND machine, where
doctorreported OSC healthy while nothing was listening.The doctor check was structurally unable to fail. It only asserted that a target was configured. It now probes it: a connected UDP socket sends a zero-length datagram and classifies the outcome, since UDP has no handshake and honest states are the most it can offer.
no-rejectiondeliberately does not claim health — it says no refusal was observed. The timer is what keeps an unroutable show-network host from hangingdoctor;udp-probe.test.tsasserts that directly.BEYOND's default is 8000, not 7001. Screenshots of the venue's
BEYOND.inishow[OSC] PortIn=8000, which is BEYOND's factory port; 7001 was our invention and cost real debugging time.DEFAULT_BEYOND_PORT/DEFAULT_FB4_PORTnow live in@wavegrid/layoutand everything (desktop target,projects osc,signals, receiver env, deploy generator, docs) reads them. Fixtures that use 7001 as an explicitly configured port stay as they are — only default-asserting ones moved.Where BEYOND is installed locally,
doctornow readsBEYOND.ini(override withWAVEGRID_BEYOND_INI) and reports whether its OSC server is on, which port it binds, whether we're aiming at that port, and whetherShowRGBAPanel=0— the setting that makes white render as red. Unknown keys produce no check rather than a false negative, and the whole thing is skipped when BEYOND isn't present, so nothing assumes Windows paths on Linux/macOS.Advanced → OSC is the operator-facing half, so a diagnosis over chat is "read me what the panel says": resolved target, probe verdict in plain words, BEYOND.ini findings with remedies, and a bounded tail of every message in and out (direction, address, args, peer). It sends too — blackout / full white / full amber on one zone or all fixtures, plus a free-form address with typed args (
255,i:3,f:1.0,s:text) — always single one-shot messages through the existing encoders, never a show loop, and it can optionally listen locally to watch what arrives. All main-process IPC: no API key, no external service.Presets reuse
encodeBeyondMessages/encodeFB4Messagesso the panel can't drift from what the receiver sends;OscMessage.valueisnumber | number[], hence the normalize before typing each argument as a float.Link to Devin session: https://app.devin.ai/sessions/ec43152136134467a853ec0bbf783ea9
Requested by: @pyramation