Refolk
TeardownEngineering and open source

Tracing a Candidate's Real Role in the Project They Claim

Given one candidate and one claimed project, you can produce an evidence-backed verdict on how much they personally built, with the queries and counts to defend it.

17 min readLast reviewed September 12, 2026Read as Markdown

A candidate tells the panel they built or led a specific system. Before you spend a full interview loop on them, you want to know from public evidence how much of that system was actually theirs. This guide is for engineering managers, technical founders, developer-relations leads, and technical sourcers, and it carries one real ownership claim from resume line to verdict: the exact git queries, the intermediate commit counts, the forks where a plausible claim falls apart, and the fork where a modest-looking profile turns out to be the real author.

The output is a verdict in one of four bands - sole author, core contributor, marginal, or riding someone else's work - backed by counts you can defend to the panel.

What "they built it" actually has to survive

A claim of authorship survives only if the git history names the candidate as the author of the load-bearing commits, and the corroborating artifacts agree. Everything in this guide is a way to test that one sentence.

The trap is that the obvious move - open their GitHub, glance at the contributor graph, count the green squares - measures the wrong thing. Two structural facts break naive counting. First, every commit carries two identities, not one: the author, who wrote the change, and the committer, who applied it to the repository, each with its own name, email, and timestamp. Second, common repository operations rewrite one identity and leave the other, so the surface count you see is often an artifact of process, not effort.

Here is the shape of the whole job before the detail.

From resume line to defensible verdict

  1. Fix identity
    Resolve every alias to one GitHub login so a namesake cannot inflate or dilute the count
  2. Scope the claim
    Pin one repo, one feature path, one date range
  3. Clean
    Strip vendored and generated code before any number is taken
  4. Count three ways
    Commit share, churn, and file-expert status
  5. Read author vs committer
    Recover true authorship on the anchor commits
  6. Corroborate
    PR reviews, issues, release notes, CODEOWNERS, talks
Each stage rejects a specific way the claim could be false, in order.

The rest of this document works one example through that flow: a candidate who claims they "led the authentication service" on a public data platform with more than fifty contributors. I will show the counts I got, the two wrong turns I took, and where the verdict landed.

The two identities on every commit, and why the count lies

Every git commit stores an author and a committer separately, and ordinary operations update one while preserving the other. If you count without knowing which field you are reading, the number is unsafe.

Git stores the name and email of two people per commit. The author is the person who wrote the changes; the committer is the person who applied them to the repository. View both with git log --format=fuller. The fields diverge routinely:

  • Cherry-pick keeps the author and author date unchanged, but rewrites the committer and commit date to whoever ran the cherry-pick.
  • Rebase and git am (patch application) behave the same way.
  • git commit --amend changes the committer, not the author.

None of those is malicious. The load-bearing corruption is different, and it runs the opposite direction from what most reviewers expect.

That inversion matters. Naive advice assumes fakery inflates a small contributor. In practice, the most common false positive is a maintainer on a squash-heavy repo whose shortlog count reflects merge access, not authorship. On my example repo, this was exactly the first wrong turn.

There is partial mitigation. GitHub introduced squashing in 2016 and co-authors in 2018, and now tries to credit every commit author in a PR as a co-author on the squash commit. But the community thread is clear that co-author attribution "is not happening every time," so you cannot rely on it to recover the original author automatically.

2016
The year GitHub added squash-merge, the operation that reassigns authorship to the merging account
Co-authors arrived in 2018 as a partial fix, but the community reports it does not fire on every squash.

Wrong turn one: the shortlog said sole author

My first pass on the example took the claim almost at face value. I cloned the repo and ran the standard commit-share command:

First-pass commit share (do not trust yet)
git shortlog -sne --no-merges | head -20

Run this, but treat a high number on a squash-heavy repo as suspect until you check author vs committer.

The candidate came back second overall, with 41% of commits touching the auth/ directory across the claimed window. On its own that reads like a core contributor at least, possibly the lead they claimed.

Then I ran git log --format=fuller on the ten foundational commits in auth/ - the ones that introduced the token flow and the session store. On seven of them the candidate was the committer, and the author was three other logins. The repo squash-merges every PR, and the candidate had merge rights. Their 41% was mostly other people's work, applied through their account.

This is the single most valuable check in the whole procedure, so it earns its own detail. --format=fuller prints both identities:

commit a1b2c3d
Author:     Priya Nair <priya@...>
AuthorDate: ...
Commit:     candidate <cand@...>
CommitDate: ...

When Author and Commit differ on the commits that define the feature, the count you took in step one is measuring merge access. That was the fork where the plausible-looking claim started to fall apart.

Three ways to count, and what each one lies about

There are three families of contribution measure. Each gives a real number and each introduces one predictable distortion, so you run all three and read them against each other, never one alone.

MethodCommand or modelMain failure it introduces
Commit sharegit shortlog -sneBot, squash, and namesake inflation
Churn / linesgit log --numstatMass-rename and vendored inflation
Weighted ownershipDegree of Authorship / truck factorNeeds a file-expert threshold

Commit share is the fastest and the least trustworthy for the reasons above. Churn - lines added and deleted - is computed per author like this:

Per-author churn on the feature path
git log --author="Full Name" --pretty=tformat: --numstat -w -- auth/ \
  | awk '{a+=$1; d+=$2} END {print "added",a,"deleted",d}'

Swap in the candidate's canonical name and the feature directory; add -w to discount whitespace-only changes.

Weighted ownership is where the real signal lives. The dominant method is the Degree of Authorship (DOA) model used by Avelino's truck-factor algorithm. DOA estimates who the expert is for each file from three factors: whether the developer originally created the file, how many times they modified it, and how much the file has changed since their last edit. The truck-factor algorithm then iteratively removes the developer who is the file expert for the largest number of files.

DOA gives you the two anchors worth citing in a verdict:

  • Sole file expert, or more than 50% of file-level DOA on the feature, reads as sole-author evidence.
  • The truck-factor smell: a project has the smell if the departure of two or fewer contributors abandons more than 40% of its files. If the candidate is one of those two, they own a real share.

Bus factor is the same idea from the other end: list everyone who committed, sort by contribution, and count how many people you need to cover half the codebase.

The four false signals, and the one command that catches each

The verdict fails in predictable ways. Each false signal has a concrete check, and knowing them is the difference between a defensible verdict and a confident wrong one. This is the most important section in the guide.

False signalWhat it looks likeThe check
Squash misattributionMerger appears to author every featuregit log --format=fuller and read co-author trailers
Vendored / imported code"Wrote 200k lines" that is really jQueryExclude vendor/, node_modules/, dist/, minified files
Namesake / shared emailShare inflated or split across identities.mailmap, count by GitHub login
AI co-author trailersPadded contributor listgit shortlog -sn --group=trailer:co-authored-by

Squash misattribution is the one I hit on the example. It is a false positive: the maintainer looks like they wrote every feature. The check is --format=fuller on the anchor commits, plus reading the Co-authored-by trailers the squash may have preserved.

Vendored and imported code. Checking in code you did not write, such as JavaScript libraries, is common and inflates language stats. Linguist treats paths listed in vendor.yml as vendored and excludes them, and .gitattributes can mark paths linguist-vendored or linguist-generated. Inspect that file first and exclude the vendor and generated paths before any count.

Namesake or shared email. A single person can commit under different names or emails and look like several contributors, or two people can collapse into one identity. Counting by name or email both diverge; counting by GitHub username is the most accurate. Build a .mailmap and resolve to the login.

AI co-author trailers. AI coding tools now append Co-authored-by trailers automatically, and when the PR is squash-merged the trailers propagate into the merge commit. Claude Code, for example, adds a Co-Authored-By trailer and a line in the PR description by default. This poisons the co-author field the same way squash poisoned the author field, so removing trailers before counting is now a required step.

Two more failure modes deserve naming because they run the opposite direction and cost you good candidates:

  • Mass-rename or reformat commits read as authorship: high churn, zero design. Discount them with git log --follow -M -C -w.
  • VCS-only tunnel vision is the false negative. Fritz et al. showed that repository information alone is not enough to capture code ownership, and for roughly a third of projects some real key engineers contributed through code-related activity not captured in the repo at all. A genuine lead can look marginal in the commit log.
Squash poisoned the author field and AI poisoned the co-author field; a count taken before you clean both is not evidence.

The adversarial re-check exists for exactly these. Re-run your counts excluding co-author trailers and merge commits, and confirm no single AI, bot, or squash artifact is carrying the claim.

Resolving one candidate's aliases, pinning the exact repo, and pulling their non-commit artifacts by hand is the slow part of this job. Refolk collapses the sourcing side into a plain-English request, so you arrive at step three with the repo and the login already fixed and can spend your time on the git history instead of the lookup.

Corroborating artifacts: what the commit log cannot see

VCS data alone is documented as insufficient, so a verdict that rests only on commits is incomplete. You need at least two non-commit artifacts that agree or disagree with the commit verdict before you classify.

Developers' interactions that are not logged in version control are relevant to ownership and, importantly, uncorrelated with the VCS data - they carry information the commit log does not. The artifacts worth pulling, and what each one proves:

  • PR review threads and issue authorship. Shows design direction and who set the shape of the feature, which never appears in the author field.
  • Release-note and changelog credits. Generate the same list the maintainers used with git shortlog v1.0..v2.0. Authoring the release notes for the feature is a strong lead signal.
  • CODEOWNERS. A candidate listed there has write permission and is auto-requested for review on PRs touching their paths.
  • Conference talks. A talk on a system the candidate also has merged PRs for is corroboration that they can speak to the design, not just the diff.

CODEOWNERS deserves a caution, because it looks like an authorship signal and is not.

Wrong turn two: the modest profile that was the real author

On the same example, a second engineer had only 6% of commits in auth/ and no CODEOWNERS entry. On a pure commit read they were marginal. But --format=fuller showed they were the author on six of the ten foundational commits - the ones the candidate had merely committed. The DOA pass confirmed it: this engineer was the sole file expert on the token flow and the session store. They authored the release notes for the two versions that shipped the feature, and had given a public talk about it.

That is the fork most reviewers miss. A modest-looking profile turned out to be the true author, and a high-count profile turned out to be riding it. The verdict on my candidate landed at marginal, trending toward riding others' work: real merge and review activity, but not the authorship they claimed. It survived the adversarial re-check, and I could defend every band with a specific count.

The procedure, start to verdict

Run these eight steps in order for one candidate and one claimed project. The times are rough; the whole teardown is about two focused hours.

Trace one ownership claim to a verdict

  1. Fix the identity
    Confirm the candidate's real GitHub login and every name and email they commit under, and build a .mailmap. Done when one canonical identity maps every alias.
  2. Locate the repo and claim scope
    Pin the repository, the named subsystem or feature, and the time window. Done when you hold one repo path, one directory or file set, and one date range.
  3. Clone and clean
    Clone, then strip vendored, generated, and documentation paths using the repo's .gitattributes. Filter first. Done when only true source files remain in scope.
  4. Count three ways
    Run git shortlog -sne --no-merges, git log --author=... --numstat for churn, and a DOA / truck-factor pass. Done when you have commit share, churn share, and file-expert status.
  5. Read author vs committer
    Run git log --format=fuller on the foundational commits and check whether the candidate is author or merely committer, and whether squash collapsed authorship. Done when each anchor commit's true author is known.
  6. Pull corroborating artifacts
    Gather PR authorship and reviews, issue authorship, release-note credits via git shortlog vX..vY, CODEOWNERS entries, and talks. Done when at least two non-commit artifacts agree or disagree with the commit verdict.
  7. Classify
    Assign sole author, core contributor, marginal, or riding others' work against the DOA and 40% smell thresholds. Done when the verdict cites specific counts.
  8. Adversarial re-check
    Re-run counts excluding co-author trailers and merge commits. Done when the verdict survives removal of the noise.

The classification step is a judgement call on two axes: how much the candidate personally authored, and how much of the feature that authorship covers. Read it as a grid.

The four verdict bands

Authored itAuthored little
Marginal
One or two commits, no file-expert status; report as marginal
Core contributor
Real authorship on a real slice; credit it and probe depth in the loop
Riding others' work
High count from merges, low DOA; flag the claim as overstated
Sole author
Sole file expert or >50% DOA; the claim holds, calibrate difficulty up
Narrow slice of the featureMost of the feature
Personal authorship on the vertical axis, share of the feature covered on the horizontal.

Why verification rigor scales with how thin the market is

The cost of one misattributed profile is not constant across markets; it rises as the talent pool shrinks. In a thin market, a single verification error is a much larger fraction of your shortlist, so the teardown is not optional overhead - it is what keeps the list honest.

Refolk's index makes the scale concrete. Staff Software Engineers are dramatically more common in the US than in Germany.

MarketCountTop employer (in sample)Top hub
US32,700DatabricksSan Francisco
Germany1,135Delivery HeroBerlin
US : Germany ratio28.8x (derived)--
28.8x
How much more common Staff Software Engineers are in the US than Germany, in Refolk's index
32,700 in the US against 1,135 in Germany; in the thin market, one bad profile moves the shortlist far more.

The same reasoning applies across title bands. The pool of people you can afford to burn a loop on is finite, and the manager pool that reviews them is finite too.

TitleCountTop employer (in sample)
Engineering Manager42,111Datadog
Staff Software Engineer32,700Databricks
EM : Staff ratio1.29x (derived)-

There is one more time-bound trap. A one-time contributor from years ago can read as an owner if you do not bound the window - Calefato et al. found that 45% of core developers fully disengage from a project for at least a year. Bound every count with --since and --before so old commits are not mistaken for ongoing ownership.

Before you take the verdict to the panel

Run this checklist against your write-up. If any item fails, the verdict is not yet defensible and you should not seat the loop on it.

Verdict readiness

  • One .mailmap resolves every alias the candidate commits under, and counts are by GitHub login.
  • Vendored, generated, and documentation paths were excluded before any number was taken.
  • The feature's foundational commits were read with --format=fuller and the true author of each is known.
  • Squash-merge was ruled in or out, and co-author trailers were checked on the squash commits.
  • Counts were bounded with --since and --before to the claimed window.
  • At least two non-commit artifacts (PR reviews, issues, release notes, CODEOWNERS, talks) were pulled.
  • A CODEOWNERS entry, if present, was cross-checked against blame or DOA rather than counted as authorship.
  • Counts were re-run without co-author trailers and merge commits, and the verdict survived.
  • The final band cites specific numbers, not adjectives.

Keeping the read current

An ownership read has a shelf life, so re-run the anchor checks rather than trusting a verdict from last quarter. Commit history is append-only, but the corroborating artifacts move: CODEOWNERS entries change as people gain or lose write access, and release-note authorship shifts version to version. When a candidate resurfaces for a different role, re-pull the CODEOWNERS file, regenerate the release-note credits for any versions shipped since your last read, and re-bound the commit window to the current claim.

The mechanisms that corrupt these counts also drift. Squash-merge and AI co-author trailers are both live and both getting more common, so the adversarial re-check earns its place permanently: if a new class of automated attribution appears, add it to the list of trailers you strip before counting. The verdict is only ever as good as the last time you cleaned the input.

Questions practitioners ask

Can I tell who really wrote a feature if the repo squash-merges every PR?

Partly. Squash-and-merge reassigns authorship of every squashed commit to the account that merged them, which GitHub calls intentional, so shortlog will overcredit the maintainer. Read the Co-authored-by trailers on the squash commits, since GitHub tries to credit the PR author as a co-author, though the community reports this does not happen every time. When trailers are missing, fall back to the original PR pages and review threads to recover the true author.

What commit share proves someone owns a project?

No single share is universally published as proof of ownership. The usable anchors are the Degree of Authorship model, where being the sole file expert or holding more than half of file-level authorship reads as sole-author evidence, and the truck-factor smell, where losing two or fewer contributors abandons more than 40% of files. Cite the specific file-expert status and the smell rather than a bare percentage.

How do I keep vendored code from inflating a candidate's line count?

Filter before you count. GitHub Linguist treats paths listed in vendor.yml as vendored and excludes them, and .gitattributes can mark paths as linguist-vendored or linguist-generated. Inspect .gitattributes and exclude vendor/, node_modules/, dist/, and minified files before running numstat. Counting first and filtering later, which some tools do, risks a 200k-line claim that is really jQuery.

Does a CODEOWNERS entry prove the candidate wrote the code?

No. Listing in CODEOWNERS requires write permission and triggers automatic review requests when someone opens a PR touching those paths, so it proves stewardship and review routing, not authorship. Treat it as an access signal and always cross-check the entry against git blame or a Degree-of-Authorship pass before you count it toward the claim.

What if the candidate is a genuine lead but has a thin commit profile?

This is a documented false negative. For roughly a third of projects, key engineers contributed through code-related activity not captured in the repository, and VCS data alone is known to miss real ownership. Pull PR reviews, issue authorship, release-note credits, and conference talks. If two non-commit artifacts corroborate design and direction, a modest commit count can still support a core-contributor or lead verdict.

Try it on the search you came here for

Stop building boolean strings. Just describe the person.

Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.

  1. 01Describe them

    One plain sentence. Role, city, stack, stage, whatever matters to you.

  2. 02I read the web live

    GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.

  3. 03You read the shortlist

    Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.

  • No boolean, no filters, no seat to buy. One box.
  • Read at search time, so a profile updated yesterday counts today.
  • Every step visible as it runs, every name with its reason.

500 free credits on sign-up. No card, no demo call. See real searches.

Read next