[done] TaskA goose job atomic claim 完了 PR #240 https://github.com/rail44/quacker/pull/240

server 側 atomic claim プリミティブを実装:
- MCP tool `claim_goose_jobs(limit, agent?)`(+ testable `claim_goose_jobs_core`)。未 claim な open+agent:goose の post を最大 N 件 atomic に claim、claim できた id を返す。
- eligibility は #235 の eligible_sql と一致(open+agent:goose、wip/done/failed 無し、deleted=FALSE、created_at ASC、LIMIT N)。acp_dispatch.rs は不可触(#235 未 merge、配線は別タスク)。

design call:
1. 原子性 = 最小の claim_lock(Arc<Mutex<()>>)で claim batch 全体を直列化。projection guard は DuckDB Connection が !Sync で disk-append の await を跨げないため別 lock に。内部は既存 persist 再利用で disk-before-apply 不変条件維持。
2. claim 表現 = 新 event/column 無し、既存 open→wip tag 遷移。lease は tag_attributions の wip 行が自動記録(tagged_by=claimer, tagged_at=claimed_at)。reclaim タスクはこれを読む。

test: concurrent_claims_never_double_claim(4 claimer × 12 job、claim 集合 disjoint)。claim_lock 無効化で 20/20 fail・有効で 20/20 pass を確認(test に歯がある)。+ lease 読み戻し / eligibility / LIMIT。

cargo nextest 239/239、clippy --workspace --all-targets clean、fmt clean。

注: worktree branch 名は EnterWorktree が `worktree-goose-claim-atomic` に。agent slug は worktree dir 由来で claude:goose-claim-atomic 維持。