Repository navigation
fix: end-to-end service flow bug pass (add → poll → display) - #148
Merged
Merged
Conversation
- Bitcoin: subscribe to zmqRawtxEndpoint (read-only tx counter, shared socket when it matches hashblock); rpcUser help says health needs credentials too - Tor ControlPort mode: emit bandwidthCurrent (busier direction) and relayType - Homebridge: missing server-info fields are null, not empty strings - Synology: null instead of 0 for missing SNMP values, DSM fallbacks for temperature/model/version, dsmError metric, unreadable status is Unknown - DSM client: remember a rejected login for 5 minutes (no retry every poll) - Hue: re-seed lights after the event stream recovers; 401/403 says the application key was rejected - Raspberry Pi: model and revision from /proc/cpuinfo over direct SSH - Mac mini: CPU usage from the second top sample - DuckDB timestamps read back as UTC instead of host local time - WebSocket: reachable:false health raises one alert per transition - Circuit breaker: an open lane keeps returning the UNAUTHORIZED/VALIDATION error that opened it instead of CIRCUIT_OPEN - qBittorrent: dedupe log entries across overlapping polls; a 403 no longer discards a cookie a parallel request just obtained - Config: null on update clears a saved secret
- Shared healthStatus: tiles and the detail sheet show warning when a tier is down, matching the top bar count - Bitcoin sync progress formatted as a fraction (was 100x too small) - Alby Hub warns when the hub is not running; Synology warns on dsmError and charts byte rates instead of cumulative counters - IPFS WebUI quick link derived from apiUrl - Dashboard: 'Nothing active in this profile' state, backend-unreachable banner with stale data, connection dot at all widths - Service editor: saved-secret placeholder only for saved secrets, and a Clear control that removes a saved secret
Coverage Report
File Coverage
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EraPartner
marked this pull request as ready for review
October 28, 2026 10:23
EraPartner
added a commit
that referenced
this pull request
Oct 28, 2026
…144) * docs: add per-service setup guides with least-privilege credentials Add docs/guides/service-setup/ with an index and one guide for each of the 13 service kinds: what to enable on the service, which read-only or least-privilege credentials to create, what to enter in Watchman, and troubleshooting keyed to the error messages in the code. Link the guides from the integration pages and indexes, and fix doc drift found while checking against the code: AdGuard no longer claims toggle control, the Homebridge health probe path, Bitcoin's Tor claim, and the unused zmqRawtxEndpoint. * docs: drop Test connection caveat, fix useServiceHealth hook doc #146 made Test connection report an unreachable service as Failed, so the setup guides no longer need the known-issue callout. docs/components/use-service-health.md described a protection-toggle mutation hook and a cache-clear hook that don't exist; rewrite it from apps/frontend/src/hooks/useServiceHealth.ts (read-only, ADR-032). * docs: update setup guides for the service bug fixes on main Rebased onto #145/#147/#148: document SSH host-key pinning (Mac Mini, Pi), the DSM certificate fingerprint and DSM-only health, the now-used Bitcoin rawtx ZMQ endpoint, Roon pairing state in DATA_DIR, and the new error messages and login backoffs. --------- Co-authored-by: Claude <noreply@anthropic.com>
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.
Requested by EraPartner · project thread
Method
Four read-only agents traced the whole flow (adding a service → building/polling it → REST/WS → UI) for all 13 services and the shared path, and reported findings with file:line evidence. Separate agents fixed the confirmed ones, each with a regression test, and a further read-only pass reviewed the diff for CI breakers. Nothing touches SSH host-key checking or Synology TLS (owned by #147). Watchman stays read-only toward services: the only new network activity is a ZMQ
rawtxsubscription, which only counts messages.Tests: nothing has run locally, because the cloud environment can't reach the npm registry. CI is the first run.
Backend fixes
zmqRawtxEndpointwas stored but never used. It now subscribes torawtxand reportszmqTxCount/zmqRawtxConnected/zmqRawtxError, sharing one socket when the endpoint matches hashblock. The rpcUser help text now says that health also needs credentials.bandwidthCurrent(max(bwRead, bwWritten)) andrelayType. Before this, the tile headline was "—".null. They were"", which showed as blank rows.null. They were 0 (0 °C, 0 B).dsmErrormetric.Unknown. It wasWarning, which made the tile critical.getStatsreturnsUnauthorizedError.piModelandhwRevisionnow come from/proc/cpuinfo. Before, it showed "Unknown" without pigpiod.top -l 2 -n 0 -s 1and parses the last sample. The first sample isn't a current reading (macOS behaviour, unverified).fromTs. Before, createdAt, updatedAt and audittswere shifted by the host's timezone.reachable:falsehealth result now raises one alert per transition, and recovery is sent on the next reachable result. Before, the Events tab and toasts never showed ordinary outages.nullon update clears a saved secret, for example the routersnmpCommunity. Blank,***and an omitted field still keep it.Frontend fixes
lib/healthStatus.ts: the tile and detail sheet show warning when the service is reachable but one of its checks (host or service) is down, matching the top bar's count. This also covers Tor ControlPort with a dead daemon.running === false.dsmError.apiUrl. It never showed before.Docs
Integration pages, component pages, API config, error codes, real-time updates, the flow visualizer and CHANGELOG were synced with the changes above. The pages also had pre-existing drift, now corrected: the Homebridge methods and routes that don't exist, the "service tier skipped" claim on AdGuard and Bitcoin, the Hue probe path, and Synology "SNMP required".
Decisions (chosen per the project's pick-the-best-option rule)
zmqRawtxEndpoint: implemented as a read-only counter rather than removing the field. Reason: the rule is never to cut functionality, and it is subscribe-only.bandwidthCurrent: set to the busier direction, not the sum. Reason: that is comparable to Onionoo's observed bandwidth.getStats. Reason: a shared in-flight promise would let one caller's abort fail the other's result.nullon PUT, with no schema change (ServiceInstanceInputalready allows extra properties). Required secrets get no Clear button.nullwithout DSM, because 0 would mean an empty disk.Not changed
Compatibility
nullfor a secret field used to get a 400. It now clears the field. Everything else is unchanged.alertframes: one pair per outage.Generated by Claude Code