Repository navigation
Tidy the Providers dialog and confirm a reconnect - #2134
Merged
Merged
Conversation
ppXD
changed the base branch from
fix/let-connections-to-one-host-take-over-each-others-repositories
to
main
October 19, 2026 23:55
Every Disconnect leaves a dead credential row behind, so a person who
reconnected a few times saw four rows for one account. Reconnect on the
working row re-authorizes in place and changes nothing visible (the row
still read "connected 1 min ago"), so it looked like it did nothing.
Dialog:
- A disconnected credential nothing leans on folds into one quiet
"N earlier connections - disconnected" line, which expands to rows with
Remove. The list reports dependentCount (repositories, in-service group
hooks, act-as identities); a server that sends none keeps the old list.
A folded sign-in keeps Reconnect: re-authorizing one's own dead sign-in
in place is the only way back for a Member, who cannot start a plain
connect.
- A dead or refused credential that still holds repositories or group
hooks says what holds it ("2 repositories and 1 group hook still use
it") and leads with "Move them to <your working connection>"
(relink-bindings), Reconnect / Replace token second. The offer is read
from the existing relink suggestions, never filtered by instance on the
client, and only shown to a caller who may relink. The list also
reports the hook and act-as identity counts on their own, so a row held
by nothing but a hook still gives its reason.
- Every row says "authorized X ago" (the provider's last confirmation,
lastValidatedDate), with the connected date in the tooltip.
- A working sign-in's Reconnect moves into its overflow menu as
Re-authorize; it stays a button for refused and expiring rows.
- A landed Reconnect or Replace token says so in the row, and the note is
dropped when the credential is disconnected or its token is replaced
again; a refused reconnect shows the callback's own sentence,
not only its code. A refused Remove reads the list again, so a row
that changed under the person stops reading as history.
Server: DELETE /api/credentials/{id} (RemoveDisconnectedCredentialCommand)
soft-deletes a disconnected credential nothing leans on, as a departed
member's retired credential is. Own person on membership, anyone else
credentials.manage. A live row, one with dependents, and one a reconnect
revived mid-removal are refused; the write is a compare-and-swap.
ppXD
force-pushed
the
fix/tidy-the-providers-dialog-and-confirm-a-reconnect
branch
from
October 19, 2026 23:55
bea3099 to
fdbb5f0
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.
Summary
YourConnectionthe relink-suggestions endpoint returns and is never filtered by instance on the client, so the server-side same-host widening applies as soon as it ships.DELETE /api/credentials/{id}(RemoveDisconnectedCredentialCommand) soft-deletes a disconnected credential nothing leans on. The owner needs only membership; anyone else needscredentials.manage. It refuses a live row, a row with dependents, and one a reconnect revived mid-removal (compare-and-swap write). A refused Remove re-reads the list, so a row that changed under the person stops reading as history.GET /api/credentialsgains additivedependentCount,boundConnectionWebhookCountandactAsIdentityCount. An older server that sends none keeps the old unfolded list with no Remove.Test plan
CredentialRemovalrefusal rule;credentialHealth(isHistory,canMoveBindingsOffincluding hook-only and identity-only,dependentsLabelcombinations)credentials.manage, reconnect mid-removal); the list's per-kind counts equal the dependents readpnpm lint0 errors,tsc --noEmit,pnpm build