Claim
The committed lease by which exactly one agent holds a story. A claim is a commit, not a comment: the claimant's story-file edit is pushed, and the first successful push wins. The claim carries a lease (four hours by default), heartbeats that extend it, and a claim generation that fences it — a reclaim after a lapsed lease increments the generation, and pushes built on a stale base are refused by the staleness guard.
Estate surface
Claim fields live in the story file's frontmatter: claimed_by,
claim_id, claimed_at, heartbeat_at, lease_until,
claim_generation. They are changed only by kanban.py commands,
never by hand.
Relations
- A claim is asserted on a story — one claim holds exactly one story, and a story carries at most one active claim.
Notes
The claim is the fleet's mutual-exclusion primitive for board work: two agents never hold the same story, and an expired claim is reclaimed through the protocol, never silently taken.