Repository navigation
fix(dcs): start with no gateway starts and waits for the board instead of being refused - #165
Merged
Merged
Conversation
…d of being refused Bridge, and Replay driving the Gateway, refused Start with no board: the pill flipped back to Stopped and the reason never showed. Start now always starts; with no board the relay runs and shows the waiting reason a driven Replay already shows, and delivers once the Gateway connects. The startBlocked rule and fact are removed, with the pill's blocked "!" and callout and the greyed-out Start that only they used. A Replay with no capture is still refused. Closes #159
mottihoresh
force-pushed
the
fix/p159-start-waits
branch
from
October 18, 2026 02:21
a0b650a to
d0035d5
Compare
mottihoresh
added a commit
that referenced
this pull request
Oct 18, 2026
…s, paused log keeps rows, can state reads ok (#167) The four parked items kept from the fix track (#135), prioritized 2026-10-18. Item PRs squash-merged into `fix/parked`: - #163 — a healthy CAN state reads "OK" instead of "error-active". - #164 — Connection › Connected nodes says "N new board(s) on the bus — add it/them from the Cockpit." when boards are on the bus but none is in your cockpit, instead of "No nodes reported". - #165 — Start with no Gateway (Bridge, or Replay driving the board) starts and waits for the board with the waiting reason shown, instead of being silently refused; delivery begins when the Gateway connects. - #166 — Log › Stream holds rows that arrive while paused and shows them on Resume (within the row cap), like Events. Closes #159 Closes #160 Closes #161 Closes #162 BEGIN_COMMIT_OVERRIDE fix(nodes): healthy CAN state reads "OK" instead of error-active fix(nodes): connected nodes points to new boards on the bus instead of saying none are reported fix(dcs): start with no gateway starts and waits for the board instead of being refused fix(log): the stream keeps rows that arrive while paused and shows them on resume END_COMMIT_OVERRIDE
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.
What
In Bridge, and in Replay with Drive Gateway on, Start with no Gateway was refused (
startBlocked, enforced inDcsRelay.start()): the pill flipped back to Stopped and main's reason never showed.Start now always starts. With no board the relay runs and shows the waiting reason a driven Replay already shows after a drop: gold pill + "waiting for the Gateway" tooltip, the note under Start, the Overview's "relay waiting — resumes when it connects". When the Gateway connects, delivery begins with no further click.
Changes
src/main/dcs/dcs-relay.ts—start()no longer gated on the link; it just runs.src/main/dcs/relay-rules.ts—startBlocked()and thestartBlockedsurface fact removed.src/shared/dcs/ipc.ts—RelaySurfaces.startBlockedremoved (type change only; noted inipc.compat.test-d.tsheader).RelayPill.tsx— the "!" mark,aria-disabled, and the "Can't start the relay" callout + Connect button removed.RelayControls.tsx— Start is never disabled.relay-view.ts—startBlockedReason/startBlockedCalloutremoved;relayNotereturns the text only, since itsinfoflag was only set for the blocked reason.styles.css—.pill--blocked,.devpop__hint,.waitnote--inforemoved (only those used them).Tests
New (they fail on the old code):
pushed-rules.seam.test.ts— Bridge with no board: Start →running,waiting: 'device', Overviewwaiting; the board arrives →deliveringand export reaches the board. Same for a driven Replay with a capture.t15-relay-pill.test.tsx— Bridge / driven Replay with no board: a click starts, the pill goes gold with the waiting-for-Gateway tooltip; the board arriving clears it with no further click.Updated because they pinned the old refusal:
src/main/dcs/relay-rules.test.ts— "each side of the on/off": the stopped side carries nostartBlocked.src/main/app/app-services.test.ts— "refuses Start until the board is connected…" → "starts with no board … and waits for the board" (now also checks delivery once the board opens); "does not reconnect a released link on Start" now expectsok: true; the Monitor/Replay test expects a driven Replay to be refused only for having no capture.src/main/app/pushed-rules.seam.test.ts— "Bridge with no board: Start blocked…" replaced (above); "toggle: … a refused Start pushes no relay state" now refuses with a Replay that has no capture.src/renderer/src/gateway/link-view.test.ts—startBlocked/startBlockedReasondescribes removed;relayNoteexpectations are strings.src/renderer/test/t15-relay-pill.test.tsx— the three blocked/callout tests ("blocked with '!'…", "the board arriving lifts the block…", "Esc closes the callout…") replaced by the start-and-wait test;aria-disabledchecks removed.src/renderer/test/t28-connection-relay-controls.test.tsx— "Drive Gateway … without a board it blocks Start" and "Bridge without a board: Start is greyed out" now start and show the waiting note.Closes #159