# Task blame

The whole task, attributed. Every field and description line with recorded history points at the edit that set it, and the edit names the person or program behind it.

```sh
zinn task blame MDR-2
zinn task blame MDR-2 --json
```

```text
MDR-2 (01a1bb09-797e-73d6-aead-295f8f563adb)

Fields:
Title: Draft the release summary card [01a1bb09-797]
Column: Doing [01a1bb09-797]
Priority: High [01a1bb09-797]
Due: none [01a1bb09-797]
Labels: review [01a1bb09-797]
Parent: none [01a1bb09-797]

Description:
1 | [01a1bb09-797] | Summaries reach the board in one pass.
2 | [01a1bb09-79a] | Add the changelog link at the end.
3 | [01a1bb09-797] | Keep the byte count under 300.

Attribution:
01a1bb09-797
2026-11-07 09:22:10.750 +01:00
Helly R.
Kind: human
Email: helly.r@lumon.industries
Source: git-config
Session: null
Thread: null
Agent: null
Model: null
Effort: null
Client: zinn-cli/0.44.0

01a1bb09-79a
2026-11-07 09:31:48.882 +01:00
claude-code
Kind: agent
Email: null
Source: env:CLAUDECODE
Session: ses_01a1bb09-7c4f2e
Thread: null
Agent: claude-code
Model: opus-4.5
Effort: null
Client: zinn-cli/0.44.0 zinn-claude-code/0.2.0

```

- **01** `Fields:` Every field carries the event that last set it, and the event is the block named below.
- **02** `2 | [01a1bb09-79a] | Add the changelog link at the end.` One line, replaced by an agent. The lines around it keep the event that created them.
- **03** `Client: zinn-cli/0.44.0 zinn-claude-code/0.2.0` The event behind that line: the agent, its session and model, and the chain of programs that made the change.

## How it decides

### Whole lines, matched exactly

Description attribution compares complete lines, whitespace included. Blank lines are preserved.

### Shared lines keep their event

Lines the edit leaves alone keep their attribution. Lines it introduces belong to the edit.

### Missing history reads as unrecorded

A field or line without a recorded origin prints as unrecorded rather than guessing.

### Archived tasks still answer

Blame reads active and archived tasks, and records no activity of its own.

Gaps and mismatched history can leave lines unrecorded. The full rules, including comparison edge cases, are in the [CLI reference](https://zinn.sh/docs/cli#task-blame).

## JSON

With `--json`, the command returns the [`TaskBlame` result](https://zinn.sh/docs/core#task-blame-result). Each reference opens with `zinn activity view <activity-id>`.
