Skip to content

policy(babysit): bound review rounds and sanction resolve-by-tracking; decide ruleset compatibility with a per-commit reviewer #1614

Description

@kyle-sexton

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.

Evidence from #1594

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:

  1. 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.
  2. More rounds did not monotonically improve the artifact. Round 5 surfaced fix(prompts): 3b burn-down leaves reopened items wearing both roles, and never consumes a fired trigger #1613 — a genuine regression introduced by round 4's fix (a reopened item left wearing both canonical roles). Continued iteration injected a defect while removing others. Round count is not a quality proxy.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions