Repository navigation
fix(frontend): UI bug pass (enable toggle, test result, detail sheet, nav, errors) - #146
Merged
Merged
Conversation
Coverage Report for backend
File CoverageNo changed files found. |
EraPartner
marked this pull request as ready for review
October 28, 2026 08:17
EraPartner
enabled auto-merge (squash)
October 28, 2026 08:17
…rrors)
- Enable/Disable resends the stored config; PUT replaces the config, so a
bare { enabled } failed validation or dropped optional fields.
- Test connection reads snapshot.reachable; ok:true alone showed "OK" for
an unreachable service.
- Detail sheet: clear live events when another tile opens; keep the last
service while the sheet closes (no "No renderer" flash).
- Tile: Enter on the quick link follows the link; per-instance aria-label.
- TopNav: links wrap to their own row below md instead of disappearing;
labelled status counts.
- Toast failed profile switch / auto-switch / capture network.
- Import refreshes profiles and load errors; service_config_changed
refreshes the Settings list and load errors.
- Kinds/schema load failure shows an error with Retry.
- Mutations are not retried (the API client retries only GET/HEAD).
vcgencmd's since-boot bits (16-19) stay set until reboot, so one brown-out kept the tile amber. Use throttledNow when the backend sends it, else the current bits (0-3) of throttled.
EraPartner
force-pushed
the
claude/project-thread-rrq59f
branch
from
October 28, 2026 08:19
db62f24 to
7f6935b
Compare
EraPartner
pushed a commit
that referenced
this pull request
Oct 28, 2026
#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).
EraPartner
pushed a commit
that referenced
this pull request
Oct 28, 2026
#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).
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
Frontend bug pass. I found these by reading the code, and each fix has a regression test. Nothing ran locally because the cloud env can't reach npm, so CI is the first run. I also skipped the visual check (no browser build possible).
Fixes
Services.tsx,ServiceDetailSheet.tsx).PUT /config/services/:idreplaces the config and only carries over secrets plus the base fields (ConfigStore.mergeSecretsWithExisting). The toggle sent just{ enabled }, so the save failed validation or wiped optional fields. It now resends the stored config through the newlib/serviceInput.ts. The Settings button is also disabled while a save is pending.ServiceEditor.tsx,ConfigPanel.tsx).ok: truewithsnapshot.reachable: falsewas shown as success. The newlib/connectionTest.tschecks both. It also works once fix(backend): service data-collection bugs across all 13 integrations #145 makes the endpoint returnok:false/UNREACHABLE.BentoDashboard.tsx). The tile context was cleared on close, during the exit animation. The open flag is now separate from the context.ServiceTile.tsx). The tile's key handler now ignores keys from child elements.main.TopNav.tsx). The nav washidden md:flex. On small screens it now wraps to its own scrollable row. The status counts get anaria-labeland the WebSocket dot getsrole="img".useProfileQueries.tsnow shows an error toast.useImportConfig).service_config_changeddidn't refresh the Settings list or load errors (useWebSocket.ts, newqueryKeys.configServices/configLoadErrors).KindPickerStep.tsx,ServiceEditor.tsx). These now show an error with a Retry button.App.tsx). See Decisions.raspberryPi.ts). vcgencmd's since-boot bits (16-19) stay set until reboot. The tone now usesthrottledNowwhen the backend sends it (fix(backend): service data-collection bugs across all 13 integrations #145), and otherwise bits 0-3 ofthrottled.Decisions (standing rule: take the recommended option, record it)
retry: false. Other options were keepingretry: 1, or skipping retries on 4xx only.ApiClientCoredeliberately retries only GET/HEAD. A retried create after a lost response fails as a duplicate, and a retried 4xx repeats the same error a second later. Users still see the error and can retry by hand.Not changed
docs/components/use-service-health.mddocuments auseAdGuardProtectionTogglewrite hook that doesn't exist in code (stale doc, read-only rule). I left it for the docs thread.null(fix(backend): service data-collection bugs across all 13 integrations #145) already render as "—":toNumberandgetNumreject null, and the formatters tests cover null.Files
App.tsx,components/dashboard/{BentoDashboard,TopNav}.tsx,components/detail/{ConfigPanel,ServiceDetailSheet}.tsx,components/tile/ServiceTile.tsx,hooks/useWebSocket.ts,lib/queryKeys.ts, newlib/{serviceInput,connectionTest}.ts,pages/Settings/{ServiceEditor,Services,useConfigQueries,useProfileQueries}.ts(x),pages/setup/steps/KindPickerStep.tsx,services/renderers/raspberryPi.ts. Tests: newlib/{serviceInput,connectionTest}.test.ts,pages/Settings/useProfileQueries.test.tsx,components/detail/ServiceDetailSheet.events.test.tsx, plus additions to existing test files. Docs:CHANGELOG.md,docs/architecture/frontend-architecture.md.Generated by Claude Code