Split Hyper Engineers into identified/unidentified groups - #203
Merged
Conversation
Even after grouping by identity (#202), some people still can't be merged automatically — GitHub's commits-by-author-email API (iris/cli.py's _resolve_emails_via_repo) only resolves an email to a login when that email is linked and verified on the person's GitHub account. When it isn't, that identity falls back to its email's local part as a key, which won't match any other alias for the same person — so they can still show up as a second, unlinked entry alongside their properly-resolved one. Rather than show a name with no way to confirm identity or link to a profile, computeHyperEngineers now omits engineers with no resolved github. It's also the entries most likely to be an unresolved duplicate in the first place, since github is the strongest identity signal grouping already prefers. Co-Authored-By: claude-code_2-1-238_agent <claude-code_2-1-238_agent@iris.invalid>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…tead of hiding Revises the previous commit on this branch: instead of filtering out engineers with no resolved GitHub username, computeHyperEngineers goes back to returning everyone (github left undefined when unresolved), and HyperEngineers.tsx splits the display into two labeled groups — "Identified" (has a linkable GitHub profile) and "Unidentified (no linked GitHub account)". Nobody's dropped from the view; the split just makes clear which entries are a confirmed identity versus one iris/cli.py couldn't tie to a GitHub account. The "Identified" header itself only renders when there's an unidentified group too, so orgs where everyone resolved cleanly don't get punished with an extra empty-feeling label. Co-Authored-By: claude-code_2-1-238_agent <claude-code_2-1-238_agent@iris.invalid>
3 tasks
clickmatos
added a commit
that referenced
this pull request
Aug 27, 2026
…er unidentified people) (#204) Root cause of the "same person shows up as two separate Hyper Engineers" gap (#202/#203): the per-email resolution step (gh api repos/{repo}/commits?author=<email>) misses real matches — verified live: a real work email GitHub does tie to an account failed that filtered query, while GitHub's own commit-list endpoint resolves it fine via the .author.login field it already attaches to every listed commit. Adds a bulk, date-bounded resolution step (one paginated commit-list scan, bounded to the same lookback window already used locally for git log) as the primary path for non-noreply emails, ahead of the old per-email API call, which now only runs as a fallback for whatever the bulk scan didn't cover. The free noreply-email regex extraction is unchanged. Also extracts this logic out of nested closures inside _run_single_repo's push block into iris/platform/identity.py, making it independently unit-testable (mocked subprocess, no network) instead of only reachable through a full analysis+push run. Verified live against RocketBus/iris: renato.guimaraes@clickbus.com -> renatoguimaraescb (the exact case reported) resolves via the bulk scan; marcos.carvalho@clickbus.com -> codermarcos likewise, confirmed by directly running resolve_active_users() against this repo's real commit history. Co-authored-by: claude-code_2-1-238_agent <claude-code_2-1-238_agent@iris.invalid>
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
Follow-up to #202 (group by identity, not display name). Reported: even after that fix, "Renato Guimaraes" (7 repos) and "renatoguimaraescb" (6 repos) still show up as two separate entries for the same person.
Root cause traced to
iris/cli.py's identity resolution (_resolve_emails_via_repo,iris/cli.py:792-806): it resolves a commit email to a GitHub login viagh api repos/{repo}/commits?author={email}, which only succeeds when that email is linked and verified on the person's GitHub account. "renatoguimaraescb" resolves easily (noreply email or a name that already matches the login); "Renato Guimaraes" apparently uses a personal/work email GitHub can't tie back to his account, so it falls back to that email's local part as its identity key — which never matches the other alias. This is an external-data limitation (his GitHub account's linked emails), not something the resolution code can force to work.Fix (revised on this branch)
First pass just hid engineers with no resolved GitHub username. Per follow-up direction: don't hide them, split into two labeled groups instead —
computeHyperEngineers(platform/lib/queries/org-summary.ts) goes back to returning everyone (no filter),githubleftundefinedwhen unresolved.HyperEngineers.tsxnow splits the list into "Identified" (has a linkable GitHub profile) and "Unidentified (no linked GitHub account)", rendered as two separate labeled groups. The "Identified" header only shows when there's an unidentified group too, so orgs where everyone resolved cleanly aren't shown an extra empty-feeling label.Test plan
platform/tests/org-summary.test.ts: identity merging via resolved GitHub username; merging via a shared noreply email; genuinely different people stay separate; an engineer with no resolved GitHub is still included in the result (github leftundefined) rather than droppednpx tsc --noEmit/npx eslint— cleannpx vitest run— 273 passednpm run build— compiles successfully🤖 Generated with Claude Code