You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
source-control/pull-request: probe the Monitor timeout cap in -p runs and fix a re-emit on poll 2 #6877
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.
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
The monitor guidance states the -p behavior with the probe's Claude Code version.
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.
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.
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.
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.
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.
not filed: docs(source-control): record how claude -p handles a Monitor timeout_ms of 1800000: paid-run: needs a live claude -p Monitor probe with timeout_ms 1800000
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.
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.
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.
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.
Activity
github-actions commentedon Oct 10, 2026
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
-prun makes a Monitor call withtimeout_ms: 1800000and records whether Claude Code clamps or rejects it. The result goes intoplugins/source-control/skills/pull-request/reference/monitor.mdwith the Claude Code version. The probe needs aclauderun, 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.
kyle-sexton commentedon Oct 13, 2026
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.
kyle-sexton commentedon Oct 13, 2026
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.kyle-sexton commentedon Oct 18, 2026
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
-ptimeout probe needs a live claude -p run the lane cannot make.claude -pMonitor probe with timeout_ms 1800000Filed 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.
9 remaining items
melodic-automation-lanes commentedon Oct 25, 2026
The work-resolve-issue lane stopped partway through this issue and needs a person.
Why, in the run's own words:
What the run says it did not do:
Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40208783221
To retry, remove
needs-humanand addagent-readyagain.kyle-sexton commentedon Oct 26, 2026
This was generated by AI.
Routed to the host runner, not the owner. The poll fix shipped (#7986). Left: one
claude -pMonitor call withtimeout_ms1800000 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-humancomes off. It moves to thehost-runlabel, and the host runner takes it.kyle-sexton commentedon Oct 28, 2026
Host run. One single-prompt
claude -psession made a Monitor call withtimeout_ms: 1800000to 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.Result against the open acceptance criterion ("the monitor guidance states the
-pbehavior with the probe's Claude Code version"):timeout_ms: 1800000. The tool result said the watch "expires in 10m", and the structured result carriedtimeoutMs: 600000.-psession stayed up to receive the notice, then exited 0 at 617s.-prun. The behavior and version are recorded inplugins/source-control/skills/pull-request/reference/monitor.md§3.0.1, as a probe pointer record.PR (opened as a draft, not marked ready): #10604
Target labels: add none; remove host-run.
docs(source-control): keep the -p Monitor probe behavior behind its p…
docs(source-control): state that -p clamps the Monitor deadline rathe…