Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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.
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.
- Keep the required OpenCode bootstrap's Pingora policy step unconditional
within its pull-request-only workflow, so the static bootstrap contract does
not depend on event payload fields. (Ported from #1414, not yet merged, to
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