Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/bandscope-hourly-review-repair.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ jobs:
with:
target_repository: ContextualWisdomLab/bandscope
base_branch: develop
max_prs: "50"
# The scheduler enumerates oldest-first; cover the current full queue so
# older draft PRs cannot hide newer non-draft work from the heartbeat.
max_prs: "200"
Comment thread
seonghobae marked this conversation as resolved.
Outdated
max_dispatches: "1"
# Music, browser, Rust, and NVIDIA-backed review work can exceed one hour.
retry_hours: "2"
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ this file. The format follows Keep a Changelog, and versioned releases follow
Semantic Versioning where the repository publishes a release.

## [Unreleased]
- Raise the BandScope hourly review-repair scan bound to 200 so the
oldest-first scheduler covers the current open queue and does not hide newer
non-draft pull requests behind older drafts; the one-writer and retry bounds
remain unchanged.
- Give stacked pull requests a separately bounded organization-sweep
OpenCode dispatch budget, so default-branch review traffic cannot leave a
stacked PR at `OpenCode review absent` without changing the protected merge
Expand Down
13 changes: 8 additions & 5 deletions docs/doctoring/bandscope-hourly-review-caller.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,14 @@ without crossing product ownership boundaries.
The caller runs at minute 53 of every hour and invokes the sealed central
`pr-review-fix-scheduler.yml` with protected base `develop`. Minute 53 avoids the
established product-specific heartbeat minutes already present on protected
central `main`. Each heartbeat scans at most 50 open pull requests and dispatches
at most one writer. The two-hour same-head retry floor prevents a later heartbeat
from duplicating a legitimate OpenCode, Strix, Noema, browser, Rust, or
NVIDIA-backed investigation. The non-cancelling concurrency contract preserves
root-cause analysis already in progress.
central `main`. Each heartbeat scans at most 200 open pull requests and dispatches
at most one writer. The scheduler enumerates oldest-first, so the 200-entry bound
covers the current 136-open-PR queue while preventing older draft PRs from hiding
newer non-draft work. If the queue approaches that bound, operators must raise it
deliberately and recheck the bounded runtime. The two-hour same-head retry floor
prevents a later heartbeat from duplicating a legitimate OpenCode, Strix, Noema,
browser, Rust, or NVIDIA-backed investigation. The non-cancelling concurrency
contract preserves root-cause analysis already in progress.

A writer may edit only after it establishes the first causal boundary, compares
bounded remediation candidates, proves remediation feasibility, verifies writer
Expand Down
2 changes: 1 addition & 1 deletion tests/test_bandscope_hourly_review_caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def test_bandscope_caller_is_hourly_bounded_and_non_cancelling() -> None:
assert "uses: ./.github/workflows/pr-review-fix-scheduler.yml" in caller
assert "target_repository: ContextualWisdomLab/bandscope" in caller
assert "base_branch: develop" in caller
assert 'max_prs: "50"' in caller
assert 'max_prs: "200"' in caller
assert 'max_dispatches: "1"' in caller
assert 'retry_hours: "2"' in caller

Expand Down
Loading