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
44 changes: 24 additions & 20 deletions .github/workflows/opencode-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1801,6 +1801,7 @@ jobs:
ContextualWisdomLab/.github:tests/test_javascript_coverage_gate.py | \
ContextualWisdomLab/.github:tests/test_opencode_agent_contract.py | \
ContextualWisdomLab/.github:tests/test_opencode_model_pool_runner.py | \
ContextualWisdomLab/.github:tests/test_opencode_review_normalize_output.py | \
ContextualWisdomLab/.github:tests/test_pr_head_replay_guard.py | \
ContextualWisdomLab/.github:tests/test_pr_review_fix_scheduler_coverage.py | \
ContextualWisdomLab/.github:tests/test_pr_review_merge_scheduler.py | \
Expand Down Expand Up @@ -3368,7 +3369,7 @@ jobs:
- name: Run OpenCode PR Review model pool
id: opencode_review_model_pool
if: needs.coverage-evidence.result == 'success'
timeout-minutes: 65
timeout-minutes: 205
continue-on-error: true
env:
STRIX_GITHUB_MODELS_TOKEN: ${{ secrets.STRIX_GITHUB_MODELS_TOKEN || github.token }}
Expand All @@ -3395,13 +3396,16 @@ jobs:
# the SAME model 5x let a rate-limited/hung leader consume the whole
# step, so the pool never reached a healthy fallback model.
OPENCODE_MODEL_ATTEMPTS: "1"
# Keep stale providers from pinning required review jobs for hours.
# Adversarial validation needs enough room to read the evidence, but
# dynamic cadence and the outer watchdog still bound each current-head run.
OPENCODE_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_EXPORT_TIMEOUT_SECONDS: "120"
OPENCODE_TOTAL_RETRY_BUDGET_SECONDS: "3600"
OPENCODE_POOL_STEP_TIMEOUT_SECONDS: "2100"
# Preserve reviews that legitimately need tens of minutes to inspect a
# large repository. Small changes get 30 minutes per model; medium,
# large, unknown, and central-governance changes can use 90 minutes so
# repositories that need a full hour are not cut off at the boundary.
# The 195-minute pool budget leaves room for a second substantial
# candidate, while provider 5xx errors fail over immediately.
OPENCODE_RUN_TIMEOUT_SECONDS: "5400"
OPENCODE_EXPORT_TIMEOUT_SECONDS: "180"
OPENCODE_TOTAL_RETRY_BUDGET_SECONDS: "11700"
OPENCODE_POOL_STEP_TIMEOUT_SECONDS: "12000"
# Keep cycling through the high-sensitivity candidate catalog until
# the retry budget or step timeout is exhausted; a single invalid
# cycle can be all provider formatting noise rather than review
Expand All @@ -3410,16 +3414,16 @@ jobs:
OPENCODE_DYNAMIC_REVIEW_CADENCE: "true"
OPENCODE_SMALL_CHANGE_FILE_THRESHOLD: "3"
OPENCODE_MEDIUM_CHANGE_FILE_THRESHOLD: "20"
OPENCODE_SMALL_CHANGE_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_SMALL_CHANGE_TOTAL_BUDGET_SECONDS: "3600"
OPENCODE_MEDIUM_CHANGE_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_MEDIUM_CHANGE_TOTAL_BUDGET_SECONDS: "3600"
OPENCODE_LARGE_CHANGE_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_LARGE_CHANGE_TOTAL_BUDGET_SECONDS: "3600"
OPENCODE_UNKNOWN_CHANGE_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_UNKNOWN_CHANGE_TOTAL_BUDGET_SECONDS: "3600"
OPENCODE_DYNAMIC_RUN_TIMEOUT_CAP_SECONDS: "600"
OPENCODE_DYNAMIC_TOTAL_BUDGET_CAP_SECONDS: "1800"
OPENCODE_SMALL_CHANGE_RUN_TIMEOUT_SECONDS: "1800"
OPENCODE_SMALL_CHANGE_TOTAL_BUDGET_SECONDS: "4200"
OPENCODE_MEDIUM_CHANGE_RUN_TIMEOUT_SECONDS: "3600"
OPENCODE_MEDIUM_CHANGE_TOTAL_BUDGET_SECONDS: "7800"
OPENCODE_LARGE_CHANGE_RUN_TIMEOUT_SECONDS: "5400"
OPENCODE_LARGE_CHANGE_TOTAL_BUDGET_SECONDS: "11700"
OPENCODE_UNKNOWN_CHANGE_RUN_TIMEOUT_SECONDS: "5400"
OPENCODE_UNKNOWN_CHANGE_TOTAL_BUDGET_SECONDS: "11700"
OPENCODE_DYNAMIC_RUN_TIMEOUT_CAP_SECONDS: "5400"
OPENCODE_DYNAMIC_TOTAL_BUDGET_CAP_SECONDS: "11700"
OPENCODE_DYNAMIC_MAX_CYCLES_CAP: "0"
# This installation currently reports a 4k request-body limit for
# GitHub Models GPT-5 endpoints even though the public catalog is
Expand All @@ -3429,8 +3433,8 @@ jobs:
OPENCODE_DYNAMIC_MAX_CYCLES: "0"
CENTRAL_REVIEW_PROCESS_FALLBACK_ELIGIBLE: ${{ steps.central_review_process_fallback_scope.outputs.eligible || 'false' }}
CENTRAL_REVIEW_PROCESS_FALLBACK_SCOPE_LABEL: ${{ steps.central_review_process_fallback_scope.outputs.scope_label || 'unsupported' }}
OPENCODE_CENTRAL_REVIEW_PROCESS_FALLBACK_RUN_TIMEOUT_SECONDS: "600"
OPENCODE_CENTRAL_REVIEW_PROCESS_FALLBACK_TOTAL_BUDGET_SECONDS: "3600"
OPENCODE_CENTRAL_REVIEW_PROCESS_FALLBACK_RUN_TIMEOUT_SECONDS: "5400"
OPENCODE_CENTRAL_REVIEW_PROCESS_FALLBACK_TOTAL_BUDGET_SECONDS: "11700"
OPENCODE_CENTRAL_REVIEW_PROCESS_FALLBACK_MAX_CYCLES: "1"
OPENCODE_BACKOFF_INITIAL_SECONDS: "30"
OPENCODE_BACKOFF_MAX_SECONDS: "30"
Expand Down
23 changes: 23 additions & 0 deletions ci-review-prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,29 @@ current-head line bytes without its line ending, and whether the hypothesis was
material code/workflow/config/package/test changes and one for non-code changes;
REQUEST_CHANGES needs a confirmed probe anchored to a published finding.

The `evidence` string itself must literally repeat that probe's declared path and
positive line as `path:line`; the separate `path` and `line` fields do not satisfy
this binding. The same string must also name the independent proof anchor actually
used (for example source trace, test/assertion, executed command, log/check/SARIF,
diff, or CodeGraph) and an observed-result word such as confirmed, rejected,
returned, passed, or failed.

For this central-review bootstrap revision, do not guess a cryptographic receipt.
The trusted current-head source provides these two verified source-line anchors;
copy one receipt exactly only after confirming the cited source trace, and remember
that the receipt is a binding rather than proof by itself:

- `Source trace at scripts/ci/run_opencode_review_model_pool.sh:95 confirmed
the dynamic timeout cap defaults to 5400 seconds;
source-line-sha256=8e8933a12547802d7bc9ff7cd99915808de9d4f27559d83783a6506d3ff94118`.
- `Source trace at scripts/ci/run_opencode_review_model_pool.sh:287 confirmed
a detected provider outage is classified as service-unavailable;
source-line-sha256=4f6509bb2883da6b849c2eb5949e4844ec209e5eaa7ab6b60396b4c2fd065e31`.

Evidence using either anchor must still state what source trace was checked and
what it confirmed or rejected. These bootstrap anchors may be removed once the
trusted normalizer derives receipts directly from validated `path:line` fields.

Execution provenance is mandatory. Never claim that React DevTools, Chrome
DevTools, browser DevTools, Playwright, Cypress, or Selenium ran, passed,
confirmed, verified, or observed behavior unless bounded evidence contains a
Expand Down
Loading
Loading