fix(scheduler): fail after summarized action errors - #1271
Conversation
|
Warning Review limit reachedNext included review available in 47 seconds. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (5)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
4cd10ce7e967bc1d2b1297716ee61e94584141c3. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/32659790911/job/97244088159)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/32659790911/job/97244088159)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: pr-review-merge-scheduler.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: pr-review-merge-scheduler.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: pr-review-merge-scheduler.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: pr-review-merge-scheduler.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
OpenCode Review Overview
Pull request overviewOpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed. Findings1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
Failed checks:
Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: pr-review-merge-scheduler.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: pr-review-merge-scheduler.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: pr-review-merge-scheduler.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: pr-review-merge-scheduler.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
|
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
4cd10ce7e967bc1d2b1297716ee61e94584141c3. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/32659790911/job/97244088159)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/32659790911/job/97244088159)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: pr-review-merge-scheduler.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: pr-review-merge-scheduler.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: pr-review-merge-scheduler.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: pr-review-merge-scheduler.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
|
Exact-head check RCA: Strix run 32659790911 failed after repeated NVIDIA NIM HTTP 429 rate-limit responses, then the direct fallback returned LLM Provider NOT provided; no vulnerability report artifact was produced. This is provider/backend infrastructure, not a source finding in the scheduler change. Keep the fail-closed result and revalidate after provider remediation. |
4cd10ce to
ff2549f
Compare
ff2549f to
dbdec1f
Compare
|
Exact-head failure triage for
Decision: |
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
8cb926fc31ca27e47192b37c968ea699fd9ecf2c. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/32713154941/job/97388707959)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/32713154941/job/97388707959)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: pr-review-merge-scheduler.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: pr-review-merge-scheduler.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: pr-review-merge-scheduler.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: pr-review-merge-scheduler.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script: pr_review_merge_scheduler.py"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: pr_review_merge_scheduler.py"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
…ain-replacement-20260824 # Conflicts: # CHANGELOG.md
Records the Strix free-pool diversity-evidence reconciliation (#1433), the gateway-preflight visibility fix, the direct-NIM cleanup, and the four parallel PR-triage agents' real fixes (noema#500, .github#1238/#1271, .github#1435, contextual-orchestrator#857's stale workflow removal) under section 5.1's next-increment list -- a different location than #1432's in-flight "2026-08-30 autonomous loop snapshot" append, to avoid colliding with that PR's own diff. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPmJErfkcHer4UVEgrQxUX
Merge-conflict triage: genuine architectural divergence (
|
…test-bug fix Follow-up to this same PR's original entry: this round's continued PR sweep found #1065 and #1681 conflicting on strix.yml/noema_review_gate.py (same pattern as the 7 PRs already documented), plus #1271 and #1231 conflicting on scripts/ci/pr_review_merge_scheduler.py -- confirming the #1803 facade/core split is now also an active collision surface (4,074-line monolith on each PR's branch vs. a 241-line facade + separately-evolving core file on main). Evidence-based comments were left on all 4; no guessed resolution was pushed. Also records one genuine pre-existing (not merge-caused) test bug found and fixed while merge-repairing #1655: a jq trailing-newline off-by-one in a new E2E test, and a coverage gap in opencode_review_normalize_output.py's new needs-info wrapper (branches only exercised via subprocess, invisible to coverage.py). Both fixes are test-only, pushed as part of #1655 itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…-20260824) Five blocks across four files. This PR's subject - a non-zero scheduler exit after a caught action_error - is relocated into the core module main split the monolith into; the rest of the conflicts are org-queue-sweep, which main removed. RELOCATED (the PR's subject): The branch adds scheduler_exit_code() next to print_summary and returns it from main() instead of 0. Both anchors exist in pr_review_merge_scheduler_core.py, so this is a move, not a rewrite: the function was inserted before core's print_summary and core's '_ACTIVE_ADMISSION_GATE = None; return 0' became 'return scheduler_exit_code(decisions)'. decisions is already in scope there (core passes it to print_summary on the line above). The branch's matching contract change in tests/test_pr_review_merge_scheduler.py (two 'assert sched.main(...) == 0' -> '== 1') merged cleanly outside every conflict, so the port and its oracle agree. TAKEN FROM MAIN: - scripts/ci/pr_review_merge_scheduler.py: main's 241-line facade, both blocks. - .github/workflows/pr-review-merge-scheduler.yml: main deleted org-queue-sweep (687 lines). The branch's own +8 lines on this file are entirely inside that job's sweep_output handling, so nothing separable is lost. - tests/test_required_workflow_queue_contract.py: main's scan-pr-queue timeout assertions; the branch's org-sweep rotation helpers go with the job. - CHANGELOG.md: kept both entries. ADAPTED, NOT DROPPED: test_scheduler_action_errors_propagate_after_structured_summary split the workflow on '\n org-queue-sweep:' and asserted on both halves. Kept the targeted half - which is this PR's contract - and removed the org-sweep half. Verified the surviving assertions still bind: main's workflow has one job, the Inspect step is its last step, and both '|| true' occurrences (lines 409 and 467) are before it, so 'not in targeted' is still a real constraint. test_scheduler_exit_policy_is_documented is kept unchanged. Evidence: - uvx ruff check --select F821 scripts/ci tests: All checks passed - full suite, branch head d9ec920 (unmerged): 1899 passed, 0 failed - full suite, this merge: 2905 passed, 0 failed - negative control: reverting core's main() to 'return 0' fails test_main_keeps_scanning_after_action_error and test_main_keeps_scanning_after_update_branch_403_and_422 by name - coverage: TOTAL 100%; interrogate: PASSED (minimum 100.0%) Note for the author: docs/doctoring/pr-review-merge-scheduler.md, added by this PR, still describes the organization sweep. That job no longer exists on main. test_scheduler_exit_policy_is_documented only greps for the phrase, so it still passes - the doc is stale, not broken. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
main 병합 완료 (
|
Root cause
The scheduler isolated per-PR mutation and dispatch failures into
action_errordecisions, emitted its complete human and JSON summaries, and then unconditionally returned success. The organization sweep also classified any 403-shaped output as an unreadable repository, even when the versioned scheduler payload proved that repository inspection succeeded and the 403 came from an attempted action.Change
action_errorexistswait,block,skip, and deferred-capacity outcomes successfulVerification
uv run --with pip pytest: 1,395 passed, 1 skippeduv run --with pip coverage run -m pytest -q && uv run --with pip coverage report --show-missing --fail-under=100: 8,348 statements and 3,214 branches at 100%uv run --with pip interrogate --fail-under=100 scripts/ci: 100%uv run --with pip python -m compileall -q scripts/ci testsactionlint .github/workflows/pr-review-merge-scheduler.ymlwith ShellCheck 0.11.0git diff --checkThe explicit
--with pipisolates the current-main fresh-uv bootstrap gap tracked separately by #1265; this change does not duplicate that boundary.Supersedes #899.
Closes #894.