Attribution and version control

Cards records each write to a card under a distinct Git author identity, and projects a card's commits as a visual attribution tree.

Contributor identities

Every write to a card repository is committed under one of three Git author identities — a name and email address that says who made the change:

  • user <user@cards.local>: Commits initiated by a human developer.
  • agent <agent@cards.local>: Commits generated by the AI agent during an active session. This is the default identity.
  • system <system@cards.local>: Automated commits created by the Cards platform (e.g., status transitions or metadata updates).

Because each commit carries its own author identity, you can read directly from a card's history who was responsible for any given change.

The attribution tree

The attribution tree is a separate view: it projects a card's workspace commits against your active worktree, so you can see the net changes a card has made to your files. As you work, commits made against a card are tracked for that card, and the tree renders the combined result.

The tree is opened from the Compare icon in the Activity Bar (the left-hand rail of icons in VS Code). Selecting that icon opens the Compare view; pick a card and expand its tree to see the files the card has touched. Click any file to open a side-by-side diff: the editor compares the current state (right pane) against the pre-card state (left pane).

How each file opens depends on its state:

  • Uncommitted working tree edits stay editable — you are looking at the live file and can change it.
  • Files that match the card's tip commit (unchanged since then) are also editable.
  • Files that have changed since the card's tip commit open as read-only, so you do not accidentally overwrite concurrent work.
  • Deleted files are always read-only.

Limitations

The attribution tree operates at the file level. It does not provide line-by-line git blame attribution if multiple cards or contributors edit the same file.