Lane: babysit. Self-caught orchestration error, session 2026-07-20.
The orchestrator (me) reported #567 as MERGE-READY at the end of cycle 1, based on: (a) a dispatched worker's live thread cross-check, and (b) babysit-readiness-gate.sh reporting a (known-#465-inflated) finding count. Neither of those checks the actual GitHub merge gate. On cycle 2, running the real merge-readiness script (skills/babysit-prs/scripts/babysit_merge.py, read-only, no --merge) revealed #567 was never mergeable: the repo's "base" ruleset sets required_review_thread_resolution: true, and #567 had 2 deliberately-open review threads (intentional author-policy deferrals, tracked as #594/#595) — GitHub mechanically blocks merge on ANY unresolved thread regardless of severity or whether a human has already "handled" it via reply.
Root cause: the skill has two separately-named scripts that both produce a "readiness" verdict for a PR, and nothing in SKILL.md or the per-PR checklist explicitly says which one is authoritative for a MERGE-READY human-facing report:
Every worker this session was briefed to run babysit-readiness-gate.sh for its readiness=OK/BLOCKED field; none were told to run babysit_merge.py. That's partly an orchestrator briefing gap, but the skill's own docs use "readiness gate" for both without disambiguating, which invites exactly this mistake.
Expected: SKILL.md (or reference/orchestration.md / reference/cadence.md) should explicitly state that any MERGE-READY determination — human-facing or autonomous — must come from babysit_merge.py's ready field, never from babysit-readiness-gate.sh alone.
Category: bug (process/doc gap) — no code defect, no incorrect merge occurred (gate was ON, nothing was actually merged off the bad report), but it produced an inaccurate human-facing deliverable.
Work-class: C2 (mechanical) — attended triage 2026-07-23, operator-ratified. 🤖
Lane: babysit. Self-caught orchestration error, session 2026-07-20.
The orchestrator (me) reported #567 as
MERGE-READYat the end of cycle 1, based on: (a) a dispatched worker's live thread cross-check, and (b)babysit-readiness-gate.shreporting a (known-#465-inflated) finding count. Neither of those checks the actual GitHub merge gate. On cycle 2, running the real merge-readiness script (skills/babysit-prs/scripts/babysit_merge.py, read-only, no--merge) revealed #567 was never mergeable: the repo's "base" ruleset setsrequired_review_thread_resolution: true, and #567 had 2 deliberately-open review threads (intentional author-policy deferrals, tracked as #594/#595) — GitHub mechanically blocks merge on ANY unresolved thread regardless of severity or whether a human has already "handled" it via reply.Root cause: the skill has two separately-named scripts that both produce a "readiness" verdict for a PR, and nothing in
SKILL.mdor the per-PR checklist explicitly says which one is authoritative for aMERGE-READYhuman-facing report:babysit-readiness-gate.sh— counts/classifies findings (over-counts per source-control:babysit-prs: babysit-readiness-gate.sh over-counts lifetime P-badges as 'findings', false READINESS_BLOCKED reason=under-decomposed on fully-classified PRs #465), says nothing about thread-resolution or branch-ruleset state.babysit_merge.py(akasource-control-babysit-merge) — the actual GitHub mergeability check (branch rules, thread resolution, required checks, head match).Every worker this session was briefed to run
babysit-readiness-gate.shfor itsreadiness=OK/BLOCKEDfield; none were told to runbabysit_merge.py. That's partly an orchestrator briefing gap, but the skill's own docs use "readiness gate" for both without disambiguating, which invites exactly this mistake.Expected: SKILL.md (or reference/orchestration.md / reference/cadence.md) should explicitly state that any
MERGE-READYdetermination — human-facing or autonomous — must come frombabysit_merge.py'sreadyfield, never frombabysit-readiness-gate.shalone.Category: bug (process/doc gap) — no code defect, no incorrect merge occurred (gate was ON, nothing was actually merged off the bad report), but it produced an inaccurate human-facing deliverable.
Work-class: C2 (mechanical) — attended triage 2026-07-23, operator-ratified. 🤖