uncovr

Claude writes in

uncovr is the lamp. It lights up the lines Claude wrote that no test runs.

Free, open source, warn-only.

src/orders/checkout.ts Claude wrote it and no test runs it

Claude writes.

A hook notes every line, the moment it is written.

You push.

The notes ride along to a hidden ref. Never in a branch, commit or diff.

CI lights it up.

Every Claude line no test ran, marked on the pull request.

On your PR. Right on the line.

src/orders/checkout.ts +12
10+ const charge = await stripe.charges.create({ amount: total, source: card.token });
11+ if (charge.status === "failed") {
12+ await refundPartial(order);
13+ return { status: "retry", orderId: order.id };
uncovr · warning · lines 12 to 13
Untested AI-authored code in a high-risk area (payments)

2 AI-authored lines added in this PR are not executed by any test.

Why high-risk area (payments): imports stripe; line 10 uses stripe.charges.create from stripe.

14+ }
  • Never fails the build
  • Payments, auth and migrations first
  • lcov, Cobertura, coverage.py

It never guesses.

  1. It is source code.
  2. This PR added it.
  3. Claude wrote it, and nobody rewrote it since.
  4. No test ran it.

All four, or silence.

Set up in a minute. No app. No token.

1Each developer, once

$ npm install -g uncovr
Node 22+, git, Claude Code.

2Each repository

$ uncovr init
Commit .claude/settings.json. The team is covered.

3Your workflow, after tests

- uses: uncovrhq/uncovr@v1
  with:
    coverage: coverage/lcov.info

The ink stays with your code.

  • Pushed only to your own remote.
  • Untracked files like .env never leave your machine.
  • Worth knowing: the notes keep snapshots of files from Claude's edits. A secret typed into a tracked file during one is in there.

Remove everything, local and remote:

$ uncovr uninstall
$ rm -rf .ai-provenance
$ git push origin --delete \
    refs/uncovr/ledgers/$(git config uncovr.id)