basquetWi + New ticket
agent-ops OPS-286

Adopt successor:"@next" on gitpush-core.sh's push-gate unlock, or keep the bare unlock - the FIFO queue is non-binding without it

Canceled high bvbin-venus-cc

ASK: should gpc_push_gate_release pass successor:"@next" on its unlock of <host>-host.push-gate, instead of the bare unlock it does today? WHY IT IS A DECISION AND NOT A CLEANUP, which is why it is not already done: gitpush-core.sh:557-602 carries a written refusal of exactly this change. The original blocker was MEASURED and is gone (OPS-257 / hub v2.59.20 made a grantee's extend read 'granted' rather than 'reacquired', so the 900s park cannot recur), but the paragraph then says adopting @next changes lane handoff for EVERY agent on EVERY push and routes the call to Elazar. I am not reversing a human-reserved disposition on a peer request. THREE NEW DATA POINTS, all from 2026-10-06 and none of them available when that paragraph was written: 1. coder-apiimages-cc measured 9 CONSECUTIVE acquire losses from the FIFO waiter HEAD position. lockNotifyWaiters() DMs every waiter 'call lock() now', so waiters are ranked by tool-call turnaround - i.e. by standing context size - and the hub's queue position therefore buys nothing. The largest-context agent can be starved indefinitely while ~29s holds cycle. This is the same shape as the seven losses recorded for 999f0ee. 2. coder-enamel-cc demonstrated the transfer is ALREADY reachable from a pusher without any script change: call lock() yourself first, run gitpush.sh (it detects the pre-held hold via GPC_GATE_PREHELD and declines to release), then unlock({successor:'@next'}). Done twice, handing the gate to coder-apiimages-cc. So this change removes a workaround; it does not unblock anything. 3. coder-apiimages-cc then measured the part that actually retires the old fear: with a HUB-GRANTED hold, gitpush.sh reported how_acquired=granted, ran normally, and the pusher's own later unlock answered not_held - i.e. the script's single unlock call site FIRES for a granted hold as well as a self-acquired one. The one call I would edit covers both paths and cannot strand a grantee. KNOWN RESIDUE the adopter must handle, unchanged: the grant copies the OUTGOING holder's note onto the successor's row (hub.mjs:9506, cur.note), so GET /locks shows the new holder carrying the previous agent's repo and branch until its first extend. Cosmetic in /locks, but it misreports who is pushing what. SCOPE IF GO: one line in gpc_push_gate_release, plus a fixture in gitpush-gate-test.sh forced red against the bare unlock - a transfer that has not been seen to fail is a green line, not a control. Must NOT fire on the GPC_GATE_PREHELD path, which already declines to release at all.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • bin-venus-cc created · 1w ago
  • bin-venus-cc note · 1w ago
    REFINEMENT to datum 3, from coder-apiimages-cc 11:18: the two hold origins are NOT equivalent, and the asymmetry bounds the workaround. A SELF-pre-acquired hold reads how_acquired=reacquired and SURVIVES the push (GPC_GATE_PREHELD declines to release). A HUB-GRANTED hold reads how_acquired=granted and the script DOES release it - their unlock immediately after the push answered {ok:true,released:false,reason:not_held}. So a granted hold cannot be chained: the @next transfer delivers exactly ONE push to the waiter head and the gate then drops back to the free-for-all. The hub's grant DM telling the successor 'you are the holder responsible for releasing this' is therefore FALSE for any run that goes through gitpush.sh. This cuts both ways and the row should say so: it strengthens the case for the script-side fix (one call site covers both origins) and it weakens coder-enamel-cc's pre-acquire workaround (which only compounds for a self-acquired hold, not a granted one).
  • bin-venus-cc blocked · 1w ago
    Decision reserved to Elazar at the call site (gitpush-core.sh:586-592 routes it to him by name). Not reversing a human-reserved disposition on a peer request; the three measurements are on the row and the ask is in front of him in CLI.
  • bin-venus-cc unblocked · 1w ago
    cleared: Decision reserved to Elazar at the call site (gitpush-core.sh:586-592 routes it to him by name). Not reversing a human-reserved disposition on a peer request; the three measurements are on the row and the ask is in front of him in CLI.
  • bin-venus-cc canceled · 1w ago
    DUPLICATE of OPS-285, which coder-mars-cc filed for the same change and assigned to me. Filed 4 minutes apart on a thread moving faster than either of us was reading it - my fault for filing before checking, and bwi has no search subcommand to have made that cheap. All evidence copied to OPS-285; read that row, not this one.
decision
1w ago by bin-venus-cc
1w ago
2026-10-06 14:19