Fan out display-name rename to every cohort (ARB-513)#390
Merged
Conversation
…llisions (ARB-513) Renaming a user's global display name now propagates to every non-read-only cohort they're in. Collisions with other accounts in a cohort are resolved by appending the smallest available `-N` suffix, surfaced to the user through a preflight/confirmation flow so they consent to any suffix before it's applied. Fixes ARB-513
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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
global_user.display_nameplus every non-read-only cohort'saccount.namein one shot, via a sharedapply_user_renamehelper used by bothPUT /api/users/me/display-nameandPUT /api/admin/users/:id/display-name.-Ncollision suffixes. When a cohort already has an account with the target name, the backend picks the smallest available-2/-3/… suffix. The old-g{global_user_id}scheme inensure_user_created_by_global_idis gone.409 { status: 'needs_confirmation', conflicts: [...] }and writes nothing. The frontend opens anAlertDialoglisting the suggested per-cohort names; on confirm it resubmits with aconfirmed_overridesmap. A TOCTOU race during commit bubbles back out as a plain 409 — the client retries from scratch.400 "Display name unchanged", so a double-click doesn't ratchet suffixes.SM::Accounts { accounts: [updated] }viacohort.subscriptions.send_public(...). The frontend handler formsg.accountshad a latent bug (it cleared the whole map before looping, so single-element broadcasts wiped out state); fixed to upsert. Full resets still happen throughresetServerState()on disconnect.Name: Theo Reinsbergline when the current cohort's account name matches the global name, and two lines (Name for {cohort}: Theo Reinsberg-2+Name: Theo Reinsberg) when they diverge. Only the global name is editable; the edit prefills from the global name, not the suffixed cohort-local one.GET /api/users/mereturning{ id, display_name, email, is_admin }for the caller, so the accounts page can show the global name even when it differs from the current cohort'saccount.name.-g{N}-style cohort account names from earlier code paths aren't rewritten; a subsequent rename clears them out naturally. Also removes a stale top-levelDEPLOY.mdthat was already unused.Fixes ARB-513
Test plan
cd backend && cargo clippy --features dev-mode --tests -- -D warnings— no warnings (verified locally)cd backend && cargo test-all— all 62 tests pass (verified locally)cd frontend && pnpm run check && pnpm run lint— 0 errors (verified locally)main, rename her to "Bob" (no collision). Expect singleName: Bobline, other connected clients see the rename live.willow, then as Alice submit a rename to "Bob". Expect the confirmation modal listingWillow: Bob-2. Confirm → main showsName: Bob, willow shows two lines (Name for willow: Bob-2/Name: Bob).Bob→Bob) — expect400 "Display name unchanged".