New Feature·Pushed May 1, 2026·M
GitHub handles now resolve for direct-push commits
Direct-push commits can now display verified GitHub usernames with working profile links instead of falling back to plain display names.
When commits are pushed directly to a branch—bypassing the pull request merge flow—gitpulse previously had no way to connect those commits to GitHub accounts. The tool fell back to the git committer's display name, which carries no linkable information.
A small GraphQL extension changes this. The query that fetches PR data for merged commits now also requests [[code ref=1]]Commit.author.user[[/code]], and GitHub resolves this field automatically when the committer's email matches a verified email on a GitHub account. For direct-push commits, this means gitpulse can now display @handles with working profile URLs.
The author resolution follows a clear priority: PR author when available, then the commit's verified GitHub login, and finally the raw git display name with no link. This ensures the best available attribution for every commit type.
Existing committed stories retain their old data and will show updated information only when regenerated.
Technical description
The [[code ref=1]]COMMIT_CONTEXT_QUERY[[/code]] GraphQL query in [[code]]action/src/github.ts[[/code]] now requests two fields from the Commit object: the existing [[code ref=2]]associatedPullRequests[[/code]] nodes and a new [[code ref=3]]author.user[[/code]] lookup. The [[code ref=4]]fetchPRForCommit[[/code]] method is renamed to [[code ref=5]]fetchCommitContext[[/code]] and returns a [[code ref=6]]CommitContext[[/code]] object containing both the PR data and a resolved [[code ref=7]]CommitAuthor[[/code]] with login and URL.
In [[code]]action/src/render.ts[[/code]], the [[code ref=8]]buildStoryFromCommit[[/code]] function now accepts [[code ref=9]]context: CommitContext[[/code]] instead of [[code ref=10]]pr: PRData | null[[/code]]. The author resolution logic updates its fallback chain from one step (PR author or git name) to three: [[code ref=11]]pr.authorLogin[[/code]], then [[code ref=12]]commitAuthor?.login[[/code]], then [[code ref=13]]commit.authorName[[/code]]. Similarly, [[code ref=14]]authorUrl[[/code]] gains a second fallback to [[code ref=15]]commitAuthor?.url[[/code]].
The wiring in [[code]]action/src/index.ts[[/code]] calls [[code ref=16]]fetchCommitContext[[/code]] and passes the result as [[code ref=17]]context[[/code]] through to [[code ref=18]]buildStoryFromCommit[[/code]].
````mermaid
graph LR
A[Commit SHA] --> B[fetchCommitContext]
B --> C{associatedPullRequests?}
B --> D{author.user?}
C --> E[PR author + URL]
D --> F[GitHub login + URL]
E & F --> G[Story with attribution]
````
Files at a Glance:
- [[code]]action/src/github.ts[[/code]] — GraphQL query extended, return type restructured
- [[code]]action/src/render.ts[[/code]] — author resolution priority updated to three tiers
- [[code]]action/src/index.ts[[/code]] — new CommitContext wired through processing pipeline
Categories
- New Feature (85%) — Primary purpose is adding new GitHub handle resolution for direct-push commits, enabling working profile links where none existed before
- Refactoring (15%) — Function renamed (fetchPRForCommit → fetchCommitContext) and return type restructured to include commitAuthor alongside pr