You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[finding] The verify-lock slot mechanism is discoverable only from --help and an exit-99 message, so no agent will use it — the fix lands in skills-owned files #12341
Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as a cross-lane residue of #11363 / PR #12335. Raised by that card's dev in its report and deliberately not folded in, because the fix lands outside that dispatch's declared surface.
⛔ No domain:* set — this seat does not produce that label. Routing note for triage: the remedy lands in AGENTS.md and/or .claude/agents/os-dev.md, which are skills-owned governed surfaces, so the expected lane is domain:skills, not devx. Recorded here rather than acted on.
OS_VERIFY_LOCK_SLOT=<name> in scripts/pm/os-verify-lock.sh. A caller that waits on the shared verify lock and never acquires can park its place; the next call with the same name resumes it, keeping the original arrival stamp. Two invariants are pinned in the self-test: a parked place blocks nobody (parked tickets are excluded from the live queue, so the head is always a ticket with a live process behind it), and its priority ages out at SLOT_MAX_AGE_S from the original arrival.
It exists because obeying the foreground cap was the losing strategy: a ticket is removed when its process exits, so a caller that left came back with a fresh arrival stamp at the back of the queue, behind everyone who arrived while it was away.
The gap
Nothing tells an agent the variable exists. It is advertised by the wrapper's own --help and by the text printed on exit 99 — both of which a dev reads only after it has already lost its place. The dispatch protocol, AGENTS.md, and the os-dev agent definition say nothing about it.
⇒ A mechanism nobody sets is a mechanism that does nothing. The measured cost it exists to remove is real and current — from this shift, on this container:
A two-second gate waited 350 seconds behind a queue three deep. Separately, a foreground turn was killed at its ~10-minute ceiling about 210 s into a queued wait, and four of five devs in one earlier batch ended their turn while queued (#11463).
One-line executable criterion
An os-dev agent that runs a gate through scripts/pm/os-verify-lock.sh sets OS_VERIFY_LOCK_SLOT without having read the wrapper's --help — i.e. the instruction reaches it from its own agent definition or from AGENTS.md.
Why it is filed rather than fixed
AGENTS.md and .claude/agents/os-dev.md are (a) outside #11363's declared file surface, (b) governed surfaces requiring a draft PR and human merge, and (c) among the hottest merge-conflict files in the repo. A rider on a code PR is the wrong shape for all three reasons.
⚠️Do not treat this as landed work. PR #12335 is open at time of filing; if it does not merge, this card is void rather than merely blocked. Re-verify that OS_VERIFY_LOCK_SLOT is on main before dispatching.
Refs
#11363 (the contention card and its maintainer ruling) · PR #12335 (ships the mechanism) · #11463 (the "agent ends its turn while queued" half) · #12337 (the cold-closure-build-under-lock finding from the same measurement) · scripts/pm/os-verify-lock.sh
⚠️ The void-condition on this card has resolved: the premise is live
This card was filed with an explicit escape — "if PR #12335 does not merge, this card is void, not merely blocked. Re-verify that OS_VERIFY_LOCK_SLOT is on main before dispatching."
It merged. Verified on origin/main, with a control so the count means something:
PR #12335 MERGED c312a562e3 (1 parent, 3ddad51b5c)
occurrences of OS_VERIFY_LOCK_SLOT in scripts/pm/os-verify-lock.sh : 9
control — OS_VERIFY_LOCK_NONEXISTENT : 0
So the mechanism exists, and the gap this card records is real work rather than a hypothetical: nothing in AGENTS.md or .claude/agents/os-dev.md tells an agent to set it, and the two places that do advertise it — the wrapper's --help and its exit-99 text — are both read after a caller has already lost its place in the queue.
⛔ Still not this seat's to write: those are skills-owned governed surfaces. Filed unassigned and unlabelled for triage, and this note only closes the conditional.
Skills-lane self-triage: finding → promoted pm:queue, folded with #12188 (see the grading there — this card carries the instruction gap, #12188 carries the stall pattern the mechanism exists to retire). Premise re-verified live this round on origin/main: OS_VERIFY_LOCK_SLOT present ×9 in scripts/pm/os-verify-lock.sh (PR #12335 merged as c312a56), so the void-condition stays resolved. The executable criterion is the card's own: an os-dev agent sets the slot variable from its OWN instruction text, without having read --help or an exit-99 message first. Landing surface is the dev contract (+ AGENTS.md only if the dev measures that os-dev.md alone cannot reach the population). Joins the os-dev contract-reality family behind #12367.
Family-dispatch member (PM loop round R1 W3): this card is folded into the chain headed by #12123. The claim, shared branch claude/issue-12123-osdev-channel-reality, worktree and file surface live on the chain head — read the claim there before touching this card. Session: session_01JANH3y7qe3MD8aLaLXci8N.
Activity
yinlianghui commentedon Aug 25, 2026
This card was filed with an explicit escape — "if PR #12335 does not merge, this card is void, not merely blocked. Re-verify that
OS_VERIFY_LOCK_SLOTis onmainbefore dispatching."It merged. Verified on
origin/main, with a control so the count means something:So the mechanism exists, and the gap this card records is real work rather than a hypothetical: nothing in
AGENTS.mdor.claude/agents/os-dev.mdtells an agent to set it, and the two places that do advertise it — the wrapper's--helpand its exit-99 text — are both read after a caller has already lost its place in the queue.⛔ Still not this seat's to write: those are skills-owned governed surfaces. Filed unassigned and unlabelled for triage, and this note only closes the conditional.
Generated by Claude Code
os-steve commentedon Aug 26, 2026
Skills-lane self-triage:
finding→ promotedpm:queue, folded with #12188 (see the grading there — this card carries the instruction gap, #12188 carries the stall pattern the mechanism exists to retire). Premise re-verified live this round onorigin/main:OS_VERIFY_LOCK_SLOTpresent ×9 inscripts/pm/os-verify-lock.sh(PR #12335 merged asc312a56), so the void-condition stays resolved. The executable criterion is the card's own: an os-dev agent sets the slot variable from its OWN instruction text, without having read--helpor an exit-99 message first. Landing surface is the dev contract (+ AGENTS.md only if the dev measures that os-dev.md alone cannot reach the population). Joins the os-dev contract-reality family behind #12367.Generated by Claude Code
os-steve commentedon Aug 26, 2026
Family-dispatch member (PM loop round R1 W3): this card is folded into the chain headed by #12123. The claim, shared branch
claude/issue-12123-osdev-channel-reality, worktree and file surface live on the chain head — read the claim there before touching this card. Session:session_01JANH3y7qe3MD8aLaLXci8N.Generated by Claude Code