TAP v0.2: Now Your Commits Tell the Truth
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 standardgit 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,confidencedefined 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:
# 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. The visual before/after is on emergenti.dev. The protocol is CC BY 4.0 - use it, fork it, improve it.