An operator claim is recorded in .git/vllm-cpp-operators/ and keyed to the claiming worktree's gitdir. Removing the worktree does not remove the record, so the store accumulates claims naming paths that no longer exist.
Measured on this checkout at 2026-08-23T10:08Z:
.git/vllm-cpp-operators/1230fc284365a412.json -> .../.git/worktrees/wt-mlx EXISTS: False
.git/vllm-cpp-operators/623b8b1c982c9f86.json -> .../.git EXISTS: True
.git/vllm-cpp-operators/db7e6328c942843b.json -> .../.git/worktrees/wt-16831 EXISTS: False
Two of three records are stale, written at 08:11 and 08:49 the same day, so this is minutes-to-hours old rather than long-abandoned residue. scripts/agent-role.py and scripts/check-device-leakage.py both read this store.
Why it matters
AGENTS.md says a worktree is removed when its work merges, closes, or is abandoned — the ordinary end of every unit of work. So the ordinary path produces a stale record every time, and the store's accuracy degrades monotonically with normal use.
Consequences depend on what reads it. agent-role.py show lists the other coordinators, which is how a session decides whether it is alone; a listing padded with dead claims makes a busy checkout look busier and a coordinating session's own view of the fleet wrong. Anything that treats a claim as a live lock inherits the same error, and a lock that cannot expire when its holder disappears is the shape #777 and #998 already record twice in this repository — a resource that looks per-worktree and is per-repository.
How it surfaced
While reviewing PR #1776, an agent-ready.py traceback printed a path /home/mudler/_git/vllm.cpp-wt/row-1073/ that does not exist. That parent directory does exist and holds five live worktrees; row-1073 is not among them, has no .git/worktrees/ entry, no gitdir file, and does not appear in git worktree prune --dry-run. agent-ready.py:15 resolves ROOT = Path(__file__).resolve().parents[1] and never enumerates worktrees, so it cannot have invented the path — it was run from a worktree that has since been reaped. The role store above is the reproducible instance of the same class.
Owed
- Decide the record's lifetime. Candidates: prune on read when the gitdir is gone; a TTL; or removal by whatever reaps the worktree. Note that
AGENTS.md ## Records forbids a surface every change must edit, and a per-claim file read with a glob is already the right SHAPE — only its expiry is missing.
- Check whether any consumer treats a claim as exclusive.
agent-role.py claim operator is documented as never refusing because another operator exists, so the impact may be confined to reporting; confirm rather than assume.
- Decide whether a reaper should distinguish "worktree gone" from "worktree temporarily unavailable" — #1602's lesson is that a liveness probe which deletes live state is worse than a stale record.
Found during the fresh review of #1776 and not fixed in flow: it is orthogonal to that row's subject, and choosing the expiry rule is a decision rather than a typo.
An operator claim is recorded in
.git/vllm-cpp-operators/and keyed to the claiming worktree's gitdir. Removing the worktree does not remove the record, so the store accumulates claims naming paths that no longer exist.Measured on this checkout at 2026-08-23T10:08Z:
Two of three records are stale, written at 08:11 and 08:49 the same day, so this is minutes-to-hours old rather than long-abandoned residue.
scripts/agent-role.pyandscripts/check-device-leakage.pyboth read this store.Why it matters
AGENTS.mdsays a worktree is removed when its work merges, closes, or is abandoned — the ordinary end of every unit of work. So the ordinary path produces a stale record every time, and the store's accuracy degrades monotonically with normal use.Consequences depend on what reads it.
agent-role.py showlists the other coordinators, which is how a session decides whether it is alone; a listing padded with dead claims makes a busy checkout look busier and a coordinating session's own view of the fleet wrong. Anything that treats a claim as a live lock inherits the same error, and a lock that cannot expire when its holder disappears is the shape #777 and #998 already record twice in this repository — a resource that looks per-worktree and is per-repository.How it surfaced
While reviewing PR #1776, an
agent-ready.pytraceback printed a path/home/mudler/_git/vllm.cpp-wt/row-1073/that does not exist. That parent directory does exist and holds five live worktrees;row-1073is not among them, has no.git/worktrees/entry, no gitdir file, and does not appear ingit worktree prune --dry-run.agent-ready.py:15resolvesROOT = Path(__file__).resolve().parents[1]and never enumerates worktrees, so it cannot have invented the path — it was run from a worktree that has since been reaped. The role store above is the reproducible instance of the same class.Owed
AGENTS.md## Recordsforbids a surface every change must edit, and a per-claim file read with a glob is already the right SHAPE — only its expiry is missing.agent-role.py claim operatoris documented as never refusing because another operator exists, so the impact may be confined to reporting; confirm rather than assume.Found during the fresh review of #1776 and not fixed in flow: it is orthogonal to that row's subject, and choosing the expiry rule is a decision rather than a typo.