Method

v1 · applies to re audit in every 0.1.x release · this page changes only when the method does

Causari publishes counts about repositories that are not ours. The only honest way to do that is to publish, next to every number, exactly how it was obtained, what it cannot see, and how to reproduce or contest it. This page is that.

1. What is counted

For a repository at a given HEAD, re audit walks git log --no-merges and classifies each commit from machine-readable metadata only: the commit message trailers and the author identity. No model, no heuristic on the diff, no guess from style. Merge commits are excluded.

SignalClass
git-ai note under refs/notes/aiVERIFIED
Trailers Drafted-With, Executed-By, AI-Model, AI-Agent, AI-Tool, AI-Assisted: yes and the AI-* family with a positive valueVERIFIED
Co-Authored-By naming a known agent identity (Claude, Copilot, aider, Codex, ChatGPT, OpenHands; Devin, Jules, Gemini and Cursor only with a bot identity or vendor domain)VERIFIED
Author identity of a known agent (aider, noreply@anthropic.com, devin-ai, openhands, cursoragent, google-labs-jules)VERIFIED
Message contains (aider) or Generated with Claude CodePROBABLE
Anything elseUNKNOWN · never counted

VERIFIED and PROBABLE are never summed. Published measurements use VERIFIED only.

2. How survival is computed

Introduced = lines added by each classified commit (git log --numstat), text files only, excluding lockfiles, vendored and generated paths. Still at HEAD = for every tracked file, git blame --line-porcelain HEAD; a line counts for the commit blame attributes it to, capped at that commit's introduced count. The ratio is the sum over all classified commits, so it is line-weighted.

3. What it cannot see

4. Known ways the number misleads (method v1)

Bulk commits dominate. Because the ratio is line-weighted, one commit that vendors a tree, snapshots documentation or checks in a generated bundle can hold nearly every introduced line of a repository. The published row then measures that commit's fate, not the project's. Example in the current data: one documentation-versioning commit of 3.2 million lines determines a repository's entire ratio. We publish it with the mark "one agent ≥ 90 %" because hiding it would be worse than showing it, and because the fix belongs in the method, not in the table.

Formatting and moves count as death. git blame runs without -w, -M, -C: a formatter pass, a re-indent, or moving a function to another file re-attributes those lines.

Small samples. Below 5 AI-tagged commits no ratio is published.

Age. Survival decays with time since the commit. Early adopters look worse than last week's adopters. Method v1 does not normalise for age.

Method v2 (in progress) caps per-commit weight, reports medians and bootstrap intervals alongside the line-weighted ratio, runs blame with -w -M -C, parses the trailer block with git's own rules, reads Assisted-by: and Agent Trace records, and refuses shallow clones. Every published row will carry the method version that produced it.

5. Reproduce or contest any number

curl -fsSL https://causari.dev/install.sh | sh
re audit owner/repo --json      # the exact bytes behind the row

If your reproduction differs, or a row is wrong, open an issue with the JSON. Corrections are made in public and recorded in the data history. Maintainers who do not want their repository measured add one line to .github/survival-optout.txt; the next weekly run drops the row and it is not re-added.

6. What we do not do

Context: "Will It Survive?", arXiv 2601.16809 measures the same question on 201 projects with a different detector and finds agent-authored code is modified less often than human code. Our counts should be read next to it, not instead of it.