Repository navigation
fix(android): bind dashboard auth to connection-owned routes - #566
Merged
Codename-11 merged 2 commits intoSep 10, 2026
Merged
Conversation
trevornk
marked this pull request as ready for review
September 9, 2026 18:10
|
🤖 Hermes-Relay automated PR intake Thanks for the focused Android fix and thorough intake details! The PR targets One item needs reconciliation before review: the Verification section identifies A maintainer will review the implementation and current CI once that verification provenance is clear. |
This was referenced Sep 10, 2026
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
Refs #565.
Keep an outgoing connection's stale resolver endpoint from becoming the Dashboard destination for an incoming connection's saved native credentials. Target:
dev, basedf0fe59b0b11b5b1646b62b9d2c23ef791194984.Changes
activeDashboardUrl()from the synchronous active ID/list instead of a lagging combined StateFlow.Verification
Exact tested source tree:
c5bea7b0b7b2157d3d8eb9cdeaf9706e9a961e85.Fresh
:app:testSideloadDebugUnitTestand:app:testGooglePlayDebugUnitTestruns each passed 79 tests, with zero failures, errors, or skips. Both used explicit--testsselectors for all six classes below; copied JUnit XML was independently checked for complete class membership and counts:com.hermesandroid.relay.viewmodel.MultiGatewayAuthPersistenceTestcom.hermesandroid.relay.viewmodel.EffectiveDashboardRouteTestcom.hermesandroid.relay.viewmodel.ConnectionSwitchTestcom.hermesandroid.relay.viewmodel.connection.UpstreamTransportControllerRoutePoolTestcom.hermesandroid.relay.network.upstream.NativeDashboardAuthTestcom.hermesandroid.relay.network.upstream.NativeDashboardSignInCoordinatorTestThe successful flavor runs used separate Gradle JVMs with
--max-workers=1, a 3 GiB heap, and in-process Kotlin. An earlier combined-flavor attempt was stopped at the memory bound before producing test results; it is not counted as a pass.Passed:
git diff --check, exact patch/tree verification, independent correctness/security review, full public-payload privacy review, and all five repository checks:python scripts/check-android-locales.pypython scripts/check-user-docs-locales.pypython scripts/check-android-collection-apis.pypython scripts/check-android-release-notes.pypython scripts/check-version-tracks.pyBoth Android lint tasks (
:app:lintGooglePlayDebugand:app:lintSideloadDebug) completed successfully on the same source tree. Required upstream CI remains separate from these local results and must be checked before integration.Not certified by these tests: Android Keystore, browser callback/PKCE handling, OS process death, rendered lifecycle behavior, or physical-device behavior of this exact pruned export. The persistence fixture uses production serialization and real loopback HTTP with a file-backed substitute for the raw secure-store backend. No emulator, instrumentation, current-upstream conformance, or full Android suite is claimed.
Screenshots
No visual change. No screenshots or private operational evidence are attached.
Compatibility / risk
The standard Dashboard/Gateway path remains upstream-owned and needs no Relay plugin or server patch. TLS policy, connection/origin credential fences, token schema, cookie scope, PKCE/state/callback ownership, refresh rotation, revocation, and explicit sign-out are unchanged. Already-erased or revoked credentials still require legitimate sign-in.
Related #513, #515, and #541 concern separate scopes; this PR does not claim to resolve them. Open #559 also touches
ConnectionViewModel.ktfor hosted rooms, so integration should be rechecked before merging.Lineage / contributor credit
Checklist
dev.CHANGELOG.mdcontains the user-visible fix.