Skip to content

Split Hyper Engineers into identified/unidentified groups - #203

Merged
clickmatos merged 2 commits into
mainfrom
hyper-engineers-require-github-link
Aug 27, 2026
Merged

Split Hyper Engineers into identified/unidentified groups#203
clickmatos merged 2 commits into
mainfrom
hyper-engineers-require-github-link

Conversation

@clickmatos

@clickmatos clickmatos commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

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 via gh 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), github left undefined when unresolved.
  • HyperEngineers.tsx now 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

  • Tests in 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 left undefined) rather than dropped
  • npx tsc --noEmit / npx eslint — clean
  • npx vitest run — 273 passed
  • npm run build — compiles successfully
  • Not verified against real data in a live browser — same standing limitation as prior platform PRs this session

🤖 Generated with Claude Code

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>
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clickbus-iris Ready Ready Preview Aug 27, 2026 10:23am

Request Review

…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>
@clickmatos clickmatos changed the title Only show Hyper Engineers with a resolved GitHub username Split Hyper Engineers into identified/unidentified groups Aug 27, 2026
@clickmatos
clickmatos merged commit 146f1f4 into main Aug 27, 2026
5 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant