Skip to content

babysit-prs: merge-step no-monitor STOP, bare-wrapper pipe rule, snapshot exit-code taxonomy, cross-PR dependency channel #373

Description

@kyle-sexton

Scope

Four enhancements to the babysit-prs skill (plugins/source-control/skills/babysit-prs/), from
the autopilot retrospective (.work/handoffs/babysit-autopilot-retro.md §1.5 / §1.8 / §1.9 / §3).
One PR; bump the source-control plugin version + CHANGELOG. Keep every edit pointer-style — point
at the existing rule, do not restate it.

(a) No-monitor hard STOP at the merge step (retro §1.5)

The no-background-monitor clause already exists in the Worker Contract, the Worker Prompt Template,
and the two-stall rule (reference/orchestration.md). It is NOT restated at the merge /
gate-completion point — which is where finishers repeatedly armed a CI watch after proving a PR
ready. Add a hard STOP there: SKILL.md Guarded mutations + reference/safety.md
Pinned-Command Degradation — once a PR is ready, or its merge is deferred to a human, report and
stop; never arm a watch. Point at the existing clause.

(b) Wrapper invoked bare, JSON parsed separately (retro §1.9)

reference/safety.md Guarded Mutation Wrappers already says invoke the wrapper by its bare pinned
name. Add one sentence: parse the wrapper's JSON in a SEPARATE step — never wrapper | python /
| jq. Piping the wrapper into an interpreter trips the auto-mode classifier
(interpreter-in-pipeline) and blocks the call.

(c) Snapshot exit-code taxonomy (retro §1.9)

scripts/pr_queue_snapshot.py:main() returns 2 on a fatal exception (no state written) and 1 on
ANY snapshot["errors"] (state still written) — so a purely-advisory head-ref alias-check error is
indistinguishable from a substantive per-PR hydration failure. Split exit 1 so an advisory-only,
valid-snapshot run is distinguishable from substantive per-PR errors. Add tests under
scripts/tests/. Finalize the exact code taxonomy in implementation.

(d) Worker→main cross-PR dependency channel (retro §3)

reference/orchestration.md documents main→worker SendMessage. Add a section formalizing the
sanctioned worker→main signalling of a discovered cross-PR dependency (e.g. medley#1567↔#1597,
#224#356 coupling) as the coordination channel.

Plus: self-blocking-CI-check bootstrap gotcha (retro §1.8)

Record the self-blocking-CI-check class — a check whose own fix PR carries the same check, so it
can't be gate-merged and needs a one-time admin bootstrap — as a reference/safety.md / SKILL.md
Gotchas entry. The concurrent-same-identity yield rationale (§1.7) is already covered by the
Checkout/Push invariants — confirm, do not duplicate.

Verification

scripts/tests/ unit tests for the exit-code split; markdown lint + link check for the doc edits;
plugin version + CHANGELOG entry present.

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