Skip to content

source-control/pull-request: probe the Monitor timeout cap in -p runs and fix a re-emit on poll 2 #6877

Closed
1 of 1 issue completed

Description

@kyle-sexton

Context

Two monitor issues:

  1. The pull-request monitor guidance is moving to a Monitor timeout_ms of 1800000. The tools reference caps a watch at a lower value in a single-prompt -p run. Whether Claude Code clamps or rejects the larger value is unprobed, and an unattended lane would rely on it.
  2. When the first poll's fetch fails, poll 2 re-emits checks that had already finished.

Proposed work

  • Probe a -p run with timeout_ms: 1800000 and record clamp versus reject.
  • Fix the poll state so a failed first fetch does not re-emit finished checks.

Acceptance criteria

References

Found during the Claude Code v2.1.265..v2.1.296 changelog apply.

The remaining work is the probe: a run makes the -p Monitor call itself (its own session is a -p run) and records clamp versus reject in plugins/source-control/skills/pull-request/reference/monitor.md.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 10, 2026
  2. added theissue type on Oct 10, 2026
  3. github-actions commented on Oct 10, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Low
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: the failed-first-fetch re-emit fix and its test are already done (#8150). What remains is a probe. A -p run makes a Monitor call with timeout_ms: 1800000 and records whether Claude Code clamps or rejects it. The result goes into plugins/source-control/skills/pull-request/reference/monitor.md with the Claude Code version. The probe needs a claude run, which this lane can't do, so it waits for an attended session. Nothing is missing from the issue. I found no likely duplicates.

    Automated triage, applied by the lanes App.

  4. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 10, 2026
  5. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  6. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    Owner batch-ratified this admission in an attended session on 2026-10-12: work-class: scoped. The owner held it until the laptop's auto-merge plan (Poteto Workflow) confirmed no phase touches the PR monitor poll code, and it has now confirmed that. Rebase on main before working it.

  7. added
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 13, 2026
  8. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    Implementation note from the verification pass (.work/backlog-strategy/verify/v-13.jsonl in the main checkout): changing the baseline file alone does not stop the re-emit. The monitor's check fetch uses 2>/dev/null ... || true, so a failed poll empties the baseline and the next good poll re-emits every finished check. The fix must keep the previous baseline when a fetch fails, and the first arm has no full-iteration snapshot to seed from. Rebase on main first: #7338 changed the monitor.md push paragraph.

  9. added
    priority: lowNice-to-have, cosmetic, or speculative; opportunistic.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 14, 2026
  10. kyle-sexton commented on Oct 18, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI during backlog shaping.

    This issue is split into 2 pieces, each sized for one lane PR. Owner ratified scoped (2026-10-13 comment). The poll fix is lane work and its premise holds on origin/main. The -p timeout probe needs a live claude -p run the lane cannot make.

    Filed pieces are sub-issues of this one, and the paced queue admits them to the lane. Unfiled pieces wait on the blocker shown. The owner approved this split in an attended backlog-shaping session on 2026-10-18.

  11. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 19, 2026
  12. 9 remaining items

  13. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 25, 2026
  14. melodic-automation-lanes commented on Oct 25, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Why, in the run's own words:

    The only open acceptance criterion needs a live probe: one Monitor call with timeout_ms 1800000 in a single-prompt claude -p run, plus the Claude Code version it ran on. This lane session has no Monitor tool, and its Bash may run only the lane wrappers, so it cannot run claude --version or a nested claude -p. The docs state the 10-minute cap for -p runs but not whether a larger value is clamped or rejected, so the behavior cannot be recorded from a source. The issue's own 2026-10-18, 2026-10-19 and 2026-10-24 comments already say this probe needs a live claude run on the operator machine. No files were changed.

    What the run says it did not do:

    • Probe a single-prompt claude -p run calling Monitor with timeout_ms 1800000, then record clamp versus reject and the Claude Code version in plugins/source-control/skills/pull-request/reference/monitor.md. This lane has no Monitor tool and cannot run claude, so it needs a person or an operator-machin
    • PR prep (review, build/test, lint): skipped because nothing changed.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40208783221

    To retry, remove needs-human and add agent-ready again.

  15. changed the issue type fromtoon Oct 26, 2026
  16. kyle-sexton commented on Oct 26, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI.

    Routed to the host runner, not the owner. The poll fix shipped (#7986). Left: one claude -p Monitor call with timeout_ms 1800000 and the version it ran on; the issue lane cannot run it (https://github.com/melodic-software/claude-code-plugins/actions/runs/40208783221).

    Under the owner's 2026-10-26 stop rule, a person is needed only for a change in intent or vision, an implementation finding that changes the intent or primary design, or a high or critical security issue; host, attended and eval runs are agent work. So needs-human comes off. It moves to the host-run label, and the host runner takes it.

  17. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 27, 2026
  18. kyle-sexton commented on Oct 28, 2026

    @kyle-sexton
    MemberAuthor

    Host run. One single-prompt claude -p session made a Monitor call with timeout_ms: 1800000 to see whether Claude Code clamps or rejects the value.

    What ran:

    • claude -p "<one Monitor call: timeout_ms 1800000, command 'echo armed; sleep 1700'; report the result and the deadline notice>" --permission-mode auto --output-format stream-json --verbose. Each stream line was timestamped. Run in a throwaway directory.
    • Claude Code version: 2.1.312.

    Result against the open acceptance criterion ("the monitor guidance states the -p behavior with the probe's Claude Code version"):

    • Clamped, not rejected. The Monitor call went in with timeout_ms: 1800000. The tool result said the watch "expires in 10m", and the structured result carried timeoutMs: 600000.
    • The watch was armed at 14s and its expiry notice ("Monitor expired after 10m with 1 event delivered") came at 614s. The -p session stayed up to receive the notice, then exited 0 at 617s.
    • No guidance change is needed: the arming call and the re-arm-on-deadline rule work as written in a -p run. The behavior and version are recorded in plugins/source-control/skills/pull-request/reference/monitor.md §3.0.1, as a probe pointer record.
    • The other criterion (a failed first fetch does not re-emit finished checks) was already done by fix(source-control): keep the PR monitor's check baseline when a check read fails #8150.

    PR (opened as a draft, not marked ready): #10604

    Target labels: add none; remove host-run.

  19. removed
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Oct 28, 2026
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

    priority: lowNice-to-have, cosmetic, or speculative; opportunistic.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions