Repository navigation
fix: hide settings channels from the publishers pane - #11
Merged
Merged
Conversation
A unit with dynamic settings gets a publisher on `<unit>/INPUT_SETTINGS`, created lazily the first time one of its settings is patched. It is a control-plane endpoint: it carries settings updates and publishes nothing the rest of the time, so it sits in the publishers list at 0.0 Hz looking exactly like a data publisher -- including offering a profiling trace that can never produce a sample, which reads as a broken trace rather than an idle topic. Hide them by default, with `Show settings channels in Publishers (debug)` in global settings to bring them back. Found on a live pipeline where one of 88 publishers was a settings channel: `HUB1/SDA/INPUT_SETTINGS`, created twenty minutes after the process it belongs to, at the moment SDA was first patched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rebuilt so `src/ezmsg/dashboard/_web` carries the settings-channel filter. The staleness check added in #6 is now on dev and fails without this, which is exactly the drift it was added to catch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
cboulay
force-pushed
the
fix/hide-settings-publishers
branch
from
August 14, 2026 23:16
5e8f8c5 to
255693e
Compare
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.
Targets
dev.Why
INPUT_SETTINGSshows up as a publisherA unit that exposes dynamic settings gets a publisher on
<unit>/INPUT_SETTINGS, created lazily the first time one of its settings is patched — ezmsg routes the patch to the owning backend process, applies it, and publishes the result to that topic. After that one message it is idle forever.It is a control-plane endpoint, but the publishers pane can't tell it apart from a data publisher. It sits there at
0.0 Hz, offering a profiling trace that can never produce a sample — which reads as a broken trace rather than an idle topic. That is exactly how it was found: someone attached a trace toINTENT_FEATURES/HUB1/SDA/INPUT_SETTINGSand got an indefinite "Waiting for trace samples on this publisher endpoint."On the live pipeline that surfaced this, exactly one of 88 publishers was a settings channel, and the v1 UUIDs date it precisely:
SDA/OUTPUT_SIGNALSDA/INPUT_SETTINGS61 components had dynamic settings enabled; only the one that had actually been patched had the extra publisher.
Change
Hide topics ending in
/INPUT_SETTINGSfrom the publishers pane, withShow settings channels in Publishers (debug)in global settings to bring them back (persisted with the rest of the global settings, so it survives reloads).The predicate lives in
utils/settingsChannel.tsso it is unit-testable and there is one place to extend if other control-plane topics turn up.Verification
npm test: 30 passed, including the new predicate tests (it must not match.../INPUT_SETTINGS_2orINPUT_SETTINGS_MONITOR).npm run test:e2e: 25 passed, including two new tests driving the same fixture — the settings publisher is absent by default and visible with the toggle on, so neither can pass vacuously.tscreports nothing new (the two pre-existingtopologyFlowData.tsxerrors ondevare fixed separately in fix: repair the frontend type build and check it in CI #6).What I dropped, and why
I had proposed bundling a "reset trace state on reconnect" fix, on the theory that a dashboard restart leaves the dock falsely claiming
capturing. I built it, then tested the premise, and it was wrong. With a live trace running I killed the dashboard and started a new one under the same browser session:The capture lives in the ezmsg unit process, not the dashboard, and
ttl_secondsis null — so the trace keeps running across a dashboard restart and any new connection picks the samples straight back up. The dock was telling the truth. I removed the code rather than ship a fix for a problem that doesn't exist.There is a narrower case where the dock can lie: something else disables the capture (another dashboard client, or a stray trace-control request), and this client keeps showing
capturingwith no samples. A reconnect fix would not help there — detecting "no samples while capturing" would. Happy to add that if you want it, but it's the idle-publisher warning idea in another guise, which we agreed to skip.Note on packaged assets
Source only —
src/ezmsg/dashboard/_webis untouched here. It is rebuilt in #5/#8, and #6 adds a CI check that fails when it drifts. Rebuild it after this merges (cd frontend && npm run build && cd .. && uv run python -m ezmsg.dashboard.build_frontend) or let the stack carry it.🤖 Generated with Claude Code