Skip to content

babysit-prs: codify the decide-and-defer non-convergence resolution playbook (own-once, no duplication of safety.md) #375

Description

@kyle-sexton

Problem

When a PR's review threads keep regenerating DISTINCT findings of the same class (an inherently
leaky fix surface), patching never converges. The playbook that cleared these PRs:

  1. Verify genuine non-convergence, not legitimate per-finding depth.
  2. Make the scope/architecture call.
  3. Ship-if-strictly-better + file a tracked follow-up (residual gaps + durable root-cause approach).
  4. Resolve the threads on that decided-and-tracked basis.
  5. Merge.

Done ad-hoc via Opus agents each time; codify it. Evidence: dotfiles#213, #224; follow-ups
dotfiles#232, plugins #365 / #366 / #367. Retrospective
.work/handoffs/babysit-autopilot-retro.md §1.6 / §2.2.

Recommended shape (re-derived blind to the original "skill" framing)

NOT a skill, NOT an engine signal. Extend the existing references — almost entirely pointers.
The constituent parts already exist across three owners; a new skill would restate them and drift:

  1. Verify genuine non-convergence → owned by reference/safety.md "Verify Before Escalating
    Non-Convergence". Point, do not restate the (a)/(b) test.
  2. Ship-if-strictly-better + tracked follow-up → the fix-now-or-ticket rule already owned by the
    pull-request skill's reference/monitor.md ("never merge past a confirmed-valid finding with
    neither a fix nor a tracked issue"). Point — ideally lift it to the shared plugin
    reference/review-discipline.md so both skills point at one copy.
  3. Durable disposition so later snapshots don't re-flag the deferred finding → owned by
    reference/feedback.md "Feedback Dispositions" (dispose --reason …). Decide-and-defer is
    mechanically a new deferred disposition reason (one reason line + a new accepted --reason
    value in the ledger).
  4. Resolve-on-decided-basis + gate-proven merge → guarded wrappers already owned by safety.md +
    SKILL.md autopilot widening.

New content — one home

The only genuinely new content is the thin sequencing playbook + the autopilot authorization. Home:
a new subsection under safety.md's "Verify Before Escalating Non-Convergence" (the most-pointed-at
owner of the non-convergence flow; the resolution is a mutation-authorization nuance = safety's
domain), plus the deferred reason line in feedback.md. orchestration.md Fix-Round-Cap and
SKILL.md autopilot each gain one pointer to it. Each fact stays owned once.

Load-bearing reconciliation (verified)

The babysit merge gate blocks on ANY unresolved thread unconditionally
(scripts/babysit_merge.py:253 if threads: → blocker; independent of GitHub's
requireThreadResolution, which it tracks separately). So — unlike the human-judgment merge in the
pull-request skill's monitor.md, where you can merge-past-with-a-ticket and leave the thread open —
reaching a babysit gate-proven merge REQUIRES resolving the deferred threads. This is not a new
invariant: it applies autopilot's existing "addressed → resolve" widening to a new "addressed" class
= decided-and-deferred-to-a-tracked-follow-up. Reconcile explicitly with safety.md's "never resolve
a thread over a live, unaddressed finding" and feedback.md's "a disposition never overrides
structured CHANGES_REQUESTED". Therefore: autopilot-only; applies to bot/AI-review threads and
(under the human widening) addressed human threads; never an unaddressed live CHANGES_REQUESTED.

Files

  • reference/safety.md — new "Decide-and-Defer Resolution (autopilot)" subsection
  • reference/feedback.md — new deferred disposition reason

Rejected shapes

Separate skill (restates safety.md + monitor.md = 2nd/3rd copies, drift), engine signal/script
(genuine non-convergence is a content judgment the engine is explicitly forbidden to make from
metadata — round count alone is insufficient by design), subagent (the verify step can reuse the
existing review-discipline extractor; the decide-and-defer call is orchestrator judgment, not
fan-out).

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.wayfind: designWayfind decision item: design-space or domain-model decision; human in the loop.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions