Shared upstream

Finding the common ancestor that explains an overlap.

Many pairs that look copied are two forks of a third project. ForkReason looks for that third project, and prefers it as an explanation when it fits better.

How a candidate is found

  1. GitHub's own fork metadata. A declared parent outranks any heuristic, because it is a recorded fact rather than an inference.
  2. Distinctive module and content vocabulary shared by both sides, which survives a rename.
  3. An ancestry constraint: a candidate must have existed *before* the later of the two repositories. A common ancestor that appeared afterwards is not an ancestor.

Why it wins when it fits

If a plausible ancestor explains the shared signals better than derivation does, the honest verdict is SHARED_UPSTREAM. Reporting LIKELY_DERIVED in that situation would be accusing a fork of something it did not do.

Shared upstream · ForkReason