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
A policy proposal for the babysit lane, plus one ruleset question only a maintainer can settle. Raised from the #1594 babysit run, which merged only by winning a 26-second race.
The structural problem
Two mechanisms are individually reasonable and jointly unbounded:
The branch ruleset requires every review thread resolved before merge.
The review bot (chatgpt-codex-connector) reviews per head commit, and its findings are prose-sensitive.
A babysit lane fixing findings writes prose. New prose draws new findings. Nothing in the loop is self-limiting, so a PR with an active reviewer can be held unmergeable for as long as the lane keeps cooperating. The lane's own diligence is the fuel.
A documentation-only PR touching one file, prompts/loops/loop-lane-prompts.md.
Round
Posted (UTC)
Head reviewed
Threads after
1
18:48:44
dddce901
7
2
20:01:47
81e5369d
7
3
21:28:29
372b9872
10
4
21:39:04
3ec45192
13
5
21:49:06
edd9cbfb
15
Merged 21:48:40Z. Round 5 posted 21:49:06Z — 26 seconds later. The merge succeeded only because it was issued synchronously the instant mergeStateStatus reported CLEAN, instead of arming --auto. With --auto, round 5's two threads would have blocked it and the lane would have reported success on a PR that never merged.
Three properties of that run matter more than the raw count:
Later rounds reviewed the fixes, not the original change. Two of round 3's three findings were against text written by round 2's fix. Round 4's dormant-trigger finding interacted with text from the same fix.
Every finding was individually valid. Zero were dismissed. This is not a bot-quality problem and would not be fixed by a better reviewer; the pathology is in the loop's termination condition, not in the findings.
Proposal
1. Bounded review rounds for the babysit lane. Cap fix-and-push cycles at 2 rounds per PR. Beyond the cap, the lane stops writing and switches to triage-and-track (below). The cap is a lane policy, not a ruleset change.
2. Resolve-by-tracking, as an explicit sanctioned disposition. The escape hatch that actually terminates the loop: resolving a thread does not require fixing it. A valid finding that is out of scope for the PR in hand is legitimately addressed by filing an issue capturing it with full evidence and resolving the thread against that issue. AGENTS.md currently says "an unresolved thread marks a finding that has not yet been addressed" — the proposal is to state plainly that addressed includes evaluated, judged out of scope, and tracked, so a lane is not forced to choose between scope creep and a stuck PR. This was used to close round 5 (see #1613, #1612) and is the only reason #1594 ever reached a terminal state.
3. Decide whether the ruleset and a per-commit reviewer are compatible as configured. This is the maintainer call and the reason this issue exists. Options, not mutually exclusive:
Keep as-is and rely on the synchronous-merge race. Not recommended — it is timing-dependent, undocumented, and silently defeats --auto for every lane.
Require thread resolution only for threads on the head being merged, if the ruleset can express it.
Scope the reviewer to the PR's first head, or to human-requested re-reviews, so a fix does not automatically draw a new round.
Keep the ruleset and forbid --auto in every babysit tier, documenting synchronous merge as the required path with the reason.
What a decision unblocks
Until item 3 is settled, every babysit lane inherits the same trap and each lane independently rediscovers the race. Items 1 and 2 are safe to adopt immediately and are cheap; item 3 changes either the ruleset or the reviewer's trigger and should not be done by a lane.
Cross-references: PR #1594 (the run this came from), #1612 and #1613 (findings filed via the resolve-by-tracking disposition being proposed here).
Filed by the autonomous babysit lane (fable-autopilot) from the #1594 run. It needs a maintainer judgment call on item 3 before anything ships — items 1 and 2 are a documentation change to lane policy.
A policy proposal for the babysit lane, plus one ruleset question only a maintainer can settle. Raised from the #1594 babysit run, which merged only by winning a 26-second race.
The structural problem
Two mechanisms are individually reasonable and jointly unbounded:
chatgpt-codex-connector) reviews per head commit, and its findings are prose-sensitive.A babysit lane fixing findings writes prose. New prose draws new findings. Nothing in the loop is self-limiting, so a PR with an active reviewer can be held unmergeable for as long as the lane keeps cooperating. The lane's own diligence is the fuel.
Evidence from #1594
A documentation-only PR touching one file,
prompts/loops/loop-lane-prompts.md.dddce90181e5369d372b98723ec45192edd9cbfbMerged 21:48:40Z. Round 5 posted 21:49:06Z — 26 seconds later. The merge succeeded only because it was issued synchronously the instant
mergeStateStatusreportedCLEAN, instead of arming--auto. With--auto, round 5's two threads would have blocked it and the lane would have reported success on a PR that never merged.Three properties of that run matter more than the raw count:
Proposal
1. Bounded review rounds for the babysit lane. Cap fix-and-push cycles at 2 rounds per PR. Beyond the cap, the lane stops writing and switches to triage-and-track (below). The cap is a lane policy, not a ruleset change.
2. Resolve-by-tracking, as an explicit sanctioned disposition. The escape hatch that actually terminates the loop: resolving a thread does not require fixing it. A valid finding that is out of scope for the PR in hand is legitimately addressed by filing an issue capturing it with full evidence and resolving the thread against that issue.
AGENTS.mdcurrently says "an unresolved thread marks a finding that has not yet been addressed" — the proposal is to state plainly that addressed includes evaluated, judged out of scope, and tracked, so a lane is not forced to choose between scope creep and a stuck PR. This was used to close round 5 (see #1613, #1612) and is the only reason #1594 ever reached a terminal state.3. Decide whether the ruleset and a per-commit reviewer are compatible as configured. This is the maintainer call and the reason this issue exists. Options, not mutually exclusive:
--autofor every lane.--autoin every babysit tier, documenting synchronous merge as the required path with the reason.What a decision unblocks
Until item 3 is settled, every babysit lane inherits the same trap and each lane independently rediscovers the race. Items 1 and 2 are safe to adopt immediately and are cheap; item 3 changes either the ruleset or the reviewer's trigger and should not be done by a lane.
Cross-references: PR #1594 (the run this came from), #1612 and #1613 (findings filed via the resolve-by-tracking disposition being proposed here).
Filed by the autonomous babysit lane (fable-autopilot) from the #1594 run. It needs a maintainer judgment call on item 3 before anything ships — items 1 and 2 are a documentation change to lane policy.