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
loop-lane convention: blocked-lever protocol — a lane must execute in-authority levers, escalate out-of-authority ones, and signal blocked-idle before backing off #1220
Filed by AI on operator direction (attended feedback session, 2026-07-24).
Category: behavioral · Source: operator observation of a live babysit-loop lane, 2026-07-24
Problem — a lane that names its own levers, then pulls none of them
Observed cycle report from a running source-control:babysit-loop lane (standing mode):
Cycle 2 done — 0 deltas, 0 fixes, 0 merges, loop alive, next check-in 50 min. State unchanged since cycle 1. Queue = 11 human-gated PRs; #853 still the lone C2 candidate, still conflict-held. Lane cannot do anything autonomous until a lever moves: resolve #853's conflict in an isolated worktree, gate and merge; or classify more PRs so C2-mechanical become eligible; or stop.
The lane correctly diagnosed its levers — then executed none, escalated none, and backed off toward the idle ceiling. The operator returned hours later to a lane that had effectively given up minutes in. Three distinct defects:
In-authority lever left unexecuted. Conflict resolution is inside the wrapped mechanic's own authority (babysit-prs's fan-out and conflict-worker contract; the loop skill's Subagents section routes exactly this through it). A conflict-held merge-eligible PR is the textbook dispatch case. If a resolved autonomy dimension (e.g. barrier handling set to escalate-only) or tier flooring denied the dispatch, the cycle report must say WHICH config denied it — "cannot do anything" with the capability present and unexplained is a defect either way.
Out-of-authority levers never converted to escalations. "Classify more PRs" belongs to the triage/attended lanes — correct that the merge lane didn't do it. But the loop-lane convention's escalation contract (human-gated role label + machine-marked escalation comment) exists precisely so a blocking lever surfaces in the attended queue's attention view. The convention is explicit that telemetry is the report surface, never the escalation channel — yet the lever lived only as telemetry prose, invisible to the attended lane.
No blocked-state signal to the operator.Standing-idle (queue genuinely empty of in-authority work) and blocked-idle (work exists, every path gated) are different states with the same observed behavior today: silent backoff. Blocked-idle should be loud.
Direction — a blocked-lever protocol as a loop-layer invariant
Amend the loop-lane convention (owner of loop-layer invariants) and the lane bodies that hold it by citation. Before a cycle may back off, it must run the lever ladder:
Execute every identified lever inside the lane's resolved authority (tier, rung, dimension overrides). A lever the lane names in its own report is a work item for THIS cycle, not commentary.
Escalate every identified lever outside its authority through the escalation contract — one tracker escalation per lever (or one consolidated item where levers share a decision), so each lands in the attended queue. Re-escalation is idempotent: an already-escalated, still-open lever is referenced, not duplicated.
Classify the idle: only after 1–2 does the lane enter idle backoff, recording which state it is in — standing-idle (nothing to do) vs blocked-idle (everything gated, escalations filed) — in the durable telemetry state block.
Signal on blocked-idle entry: transitioning into blocked-idle fires a proactive operator notification (the harness push-notification surface where available; the escalation items themselves are the durable fallback), so an operator learns within minutes, not hours, that the lane is fully gated on human decisions.
Fail-closed remains: nothing here widens authority. The protocol changes what a lane DOES with the levers it already recognizes — act, escalate, then rest.
Filed by AI on operator direction (attended feedback session, 2026-07-24).
Category: behavioral · Source: operator observation of a live babysit-loop lane, 2026-07-24
Problem — a lane that names its own levers, then pulls none of them
Observed cycle report from a running
source-control:babysit-looplane (standing mode):The lane correctly diagnosed its levers — then executed none, escalated none, and backed off toward the idle ceiling. The operator returned hours later to a lane that had effectively given up minutes in. Three distinct defects:
Direction — a blocked-lever protocol as a loop-layer invariant
Amend the loop-lane convention (owner of loop-layer invariants) and the lane bodies that hold it by citation. Before a cycle may back off, it must run the lever ladder:
standing-idle(nothing to do) vsblocked-idle(everything gated, escalations filed) — in the durable telemetry state block.Fail-closed remains: nothing here widens authority. The protocol changes what a lane DOES with the levers it already recognizes — act, escalate, then rest.
Relations
docs/conventions/loop-lane/README.md) §2 escalation contract + §4 stop shapes (drain's terminal state is the analogous "all-gated" recognition; standing mode needs the same recognition without the stop), loops/skills: self-paced /loop idles between non-empty cycles — cadence should be work-state-driven (no delay when queue non-empty), not a guessed clock #500 (work-state-driven cadence — same family: pacing/behavior driven by queue state, not clock), source-control(babysit-prs): autopilot direct-gate route is inert under enabled tier — no actor runs the approver pass on zero-blocker PRs #738 (autopilot direct-gate route inert — same shape: capability present, no actor runs it), bug(source-control/babysit-prs): readiness gate resolves repo from CWD, silently scores wrong PR cross-repo #1086 (babysit readiness cross-repo defect), umbrella: SDLC lifecycle stage-gate contract — typed human/agent checkpoints, stage-state metadata on the tracker seam, forward-momentum pickup (Boris L2→L3) #1212 (lifecycle umbrella — forward-momentum invariant: an agent should always be doing what it is authorized to do), Lane telemetry: babysit-loop #1214-titled lane telemetry issues (where the state-block field lands).