vbhanuchander-lang opened a new issue, #9050:
URL: https://github.com/apache/devlake/issues/9050

   ### Search before asking
   
   - [x] I had searched in the 
[issues](https://github.com/apache/devlake/issues?q=is%3Aissue) and found no 
similar issues.
   
   ### What happened
   
   `ConnectUserAccountsExact` links users to accounts by exact map lookup, so 
the email comparison is
   case-sensitive. A user imported from `users.csv` with the address 
`[email protected]` is not
   linked to an account whose email is `[email protected]`, and the 
account is silently left
   unlinked.
   
   In 
[`backend/plugins/org/tasks/user_account.go`](https://github.com/apache/devlake/blob/main/backend/plugins/org/tasks/user_account.go)
   the map is keyed on the raw address (line 49):
   
   ```go
   emails[user.Email] = user.Id
   ```
   
   and looked up with the raw account address (line 79):
   
   ```go
   if userId, ok := emails[account.Email]; account.Email != "" && ok {
   ```
   
   Email addresses are treated case-insensitively in practice, and the two 
sides of this comparison
   come from different systems: a corporate git config, a provider profile, and 
a hand-maintained CSV
   routinely disagree on capitalisation of the same address. When they do, the 
link is dropped with no
   warning — the subtask reports success and the account simply never appears 
in `user_accounts`.
   
   The consequence is not cosmetic. Once an account is unlinked, everything 
that attributes through it
   stops being counted for that user, so the account's activity is missing from 
work logs and from any
   team-level metric built on `user_accounts`.
   
   There is also no second chance: the scan is restricted to
   `id NOT IN (SELECT account_id FROM user_accounts)` (line 58), so a later run 
will not revisit an
   account that failed to match, and the name-based fallbacks (lines 87 and 95) 
only help when the
   display name or login happens to equal the user's name exactly.
   
   ### What do you expect to happen
   
   Two addresses that differ only in capitalisation should be treated as the 
same address and linked.
   
   ### How to reproduce
   
   1. Import a user via `PUT /plugins/org/users.csv` whose email is `E6` (any 
mixed case value).
   2. Have an account whose email is `e6`, with a name and login that do not 
match the user's name.
   3. Run the `connectUserAccountsExact` subtask.
   4. No `user_accounts` row is created for that account.
   
   I added exactly this case to the existing `org` e2e fixtures; it fails 
before the change and passes
   after.
   
   ### Anything else
   
   Found while investigating #8698, where a reporter's GitHub account was never 
linked and only commit
   activities appeared in work logs. Case sensitivity is **not** the cause of 
that issue — I posted the
   root cause there separately — but it is the same class of silent linkage 
failure and it turned up
   while reading this code.
   
   ### Version
   
   main
   
   ### Are you willing to submit PR?
   
   - [x] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://www.apache.org/foundation/policies/conduct)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to