# TAP v0.2: Now Your Commits Tell the Truth

_2026-07-18_

> TAP v0.2 adds Git and File profiles. Your commits now record which model did what, at which version, in which role - not just "Co-Authored-By Claude."

Every AI-assisted commit on GitHub today looks the same:

```
Fix parser edge case

Co-Authored-By: Claude <noreply@anthropic.com>
```

Opus 4.8 or Sonnet 5 - same line. Architect or typist - same line. One model or three - same line. The human who directed everything is invisible.

This is what TAP v0.2 fixes.

## What changed

TAP v0.1 covered web pages - bylines, `data-*` attributes, JSON-LD. It answered "who wrote this article."

v0.2 extends TAP to **code**:

- **Profile: Git** - provenance in commit trailers (`TAP-Human`, `TAP-Model`), parsed by standard `git interpret-trailers`, greppable, aggregable.
- **Profile: File** - provenance in file headers (YAML frontmatter for `.md`, comments for `.py`/`.sh`).
- **Timestamp & Immutability** - three tiers from free (git timestamps) through recommended (Archive.org Save Page Now) to cryptographic (OpenTimestamps).
- **Core vocabulary** formalized - `model`, `provider`, `role`, `human`, `confidence` defined once, carried by every profile.

## Before and after

**Default Claude Code commit:**

```
Fix parser edge case

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
```

Lost: which Claude, what role, who directed. Every model version collapses into one GitHub account.

**Same commit, with TAP:**

```
Fix parser edge case

Co-Authored-By: Alex <sh@shelly.im>
TAP-Human: Alex <sh@shelly.im>; handle=@shelly-im; role=ideation,review
Co-Authored-By: Claude <noreply@anthropic.com>
TAP-Model: Claude Opus 4.8 <noreply@anthropic.com>; model=claude-opus-4-8; provider=anthropic; platform=claude-code; role=drafting
```

GitHub renders the same avatars. But now every party is typed, every model versioned, roles explicit.

## Multi-model: the real power

When Opus architects and Sonnet writes, the default commit flattens both into one "Claude" line. With TAP:

```
Refactor auth middleware

Co-Authored-By: Alex <sh@shelly.im>
TAP-Human: Alex <sh@shelly.im>; handle=@shelly-im; role=ideation,review
Co-Authored-By: Claude <noreply@anthropic.com>
TAP-Model: Claude Opus 4.8 <noreply@anthropic.com>; model=claude-opus-4-8; provider=anthropic; role=review,synthesis,architecture
TAP-Model: Claude Sonnet 5 <noreply@anthropic.com>; model=claude-sonnet-5; provider=anthropic; role=drafting
```

One `Co-Authored-By` (one avatar), two `TAP-Model` lines. Architect vs worker visible.

## What this unlocks

Standard git tools, zero infrastructure:

```bash
# All commits where Opus 4.8 contributed
git log --grep='TAP-Model:.*claude-opus-4-8'

# Contribution breakdown by model
git shortlog --group=trailer:tap-model

# Who reviewed what
git log --grep='TAP-.*role=.*review'
```

No plugins. No platforms. Just trailers and grep.

## Why it matters

Code is where the authorship question is most acute and least addressed. Every developer using Cursor, Claude Code, Copilot, or Windsurf is generating AI-assisted commits. Almost none record which model, which version, which role.

Six months from now, when a codebase has 10,000 commits from three different model generations, that provenance is gone. TAP keeps it, at the cost of two extra lines per commit.

## Try it

The full spec is on [GitHub](https://github.com/liza-emergence/TAP/blob/main/SPEC.md). The visual before/after is on [emergenti.dev](https://emergenti.dev/#git). The protocol is CC BY 4.0 - use it, fork it, improve it.