feat: public profile of an Account at /players/<username> #531
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
spec
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
amaurycoudr/chess-project!531
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/profile-366"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #366
Closes #389
Closes #390
Closes #391
Summary
Every Account gets a public profile at
/players/<username>: username, join month, decided Games newest first. ADR 0042 supersedes 0034: an Account's decided Games are listed publicly; a Game with no Account owner stays listed only to its owners.Evidence
profilerouter;/players/aliceis the router's 404.After:
rpc-profiles.integration.test.ts(claimed Guest Games before and after the claim, Guest-vs-Guest on no profile, self-game once, no email, same answer with/without Session or Guest, paging edges, decided-between-reads);profile.test.tsx,profile-route.test.tsx,site-navigation.test.tsx,game-page.test.tsx; new e2eprofile.spec.ts: a signed-out third context reads the username, join month and a row "won" by Resignation, then opens the Game page. Gate green on Node 24; e2e 42/42.Merge Danger
Door: two-way for the code; the listing is one-way in effect. Once a profile is public, people can have seen and cached it.
Blast Radius: front-wide row markup
::after), so the opponent's link can sit inside it. The e2eopenMyGameshelper changed with it.<title>moved fromuseShownLocaleto the root route, so the profile can set its own.game.listnow refuses a cursor it never minted withUNREADABLE_CURSOR, where it used to answer an empty last page.For the owner to rule on
noneapart, but the front folds it into "Guest". #390 says "a row with no opponent reads as such".Proposed rule changes
apps/front/src/routes/players.$username.tsxto ADR 0042's Governs column.auth.usernameAvailabilitystill takes a plainz.string()username. Contracts rule 3 calls for the brandedAnyUsernameSchemaintroduced here.pnpm lint:adrdoesn't check the ADR word limit.Noticed in passing:
src/auth/sign-up.test.tsxis flaky. A pathname check right after navigation failed once in a commit hook and passed on rerun.Screenshots
Before is production, after is this merge request's review app at
4623f0b.Desktop
Mobile
added 1 commit
4623f0b0- fix(front): render My games rows only in the chosen filter's panelCompare with previous version