Skip to content

Fix Three Defects in the Handoff and Burndown Skills Raised on a Downstream Carry #1847

Description

@ptr727

Raised by CodeRabbit and Qodo on ptr727/PlexCleaner#999, a resync carrying .github/skills/** byte-identical from hub main at 4566946. Each was verified against the hub's .agents/skills/ source at that commit. The fix belongs here, followed by a regeneration, so the downstream copy is left as carried. No open issue or PR covered these when this was filed.

A. Handoff commands shown without the required --repo

scripts/handoff.py makes --repo required with no default (around line 976). Several command forms in the skills leave it out:

  • .agents/skills/unattended-handoff/SKILL.md:153: handoff.py chain --track "auto-<issue>" --limit 1. Line 154 turns "any other refusal" into STOP, so a picker that runs this as written stops on the argparse refusal instead of answering the eligibility question.
  • .agents/skills/unattended-handoff/SKILL.md:180 (handoff.py new) and :189 (handoff.py resume). The worker step has no pointer to session-handoff "Running the Chain", which is the only place that says every subcommand takes --repo.
  • .agents/skills/session-handoff/SKILL.md:146 and .agents/skills/unattended-handoff/SKILL.md:190: gh issue view "<n>" --comments without --repo. A session running from the hub checkout it needs for handoff.py reads the hub's issue <n> instead of the target repository's.

Expected: every documented invocation carries --repo "<owner>/<repo>", or states once, where the command appears, that it does.

B. Handoff pickers rank a list truncated at 100

.agents/skills/unattended-handoff/SKILL.md:167 and .agents/skills/session-handoff/SKILL.md:172 read open handoffs with gh issue list --label handoff --state open --limit 100 and then pick oldest-first or newest-update. Past 100 open handoffs, a candidate outside the window is invisible, so the picker can choose the wrong lane or return NONE while eligible work remains. This is far off in practice. Expected: paginate, or detect a full page and refuse rather than rank a truncated list.

C. backlog-burndown gives no precedence for an issue labeled both handoff and blocked

.agents/skills/backlog-burndown/SKILL.md:112-119: the handoff rule excludes an issue from "every count", while the blocked rule counts it while its blocker stands. The fleet's own parking flow (unattended-handoff) puts blocked on a handoff issue, so both rules apply, and the backlog count can be off by one per parked lane. Expected: state which rule controls.

Declined on the PR, recorded for context

  • Qodo on GOVERNANCE.md "Workflow YAML Conventions": the claim that $/ is not a valid self-repository uses: form is false. The hub uses it at .github/workflows/build-release-task.yml:115.
  • CodeRabbit on the .github/copilot-instructions.md coverage carry-forward: the review itself must still cover the current head. Only the file-count coverage statement carries forward, and only while the changed-file set is identical (see A ccr-overview-v2 Round States No File Coverage, and the Exit-45 Remedy Cannot Clear It #1692).
  • CodeRabbit on check-this-repo flagging a detached checkout: working as designed, since a detached checkout cannot track main.
  • CodeRabbit on unattended-handoff retained state omitting <owner>/<repo>: a wording preference, since the value is fixed for the run and every brief consumes it.
  • CodeRabbit on check-jsonschema@latest in workflow-ci-contract: fleet policy. GOVERNANCE.md "Running the Linters Locally" floats lint tools deliberately. Reopening that is a policy call for the maintainer.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions