diff --git a/.github/workflows/opencode-review-dispatch.yml b/.github/workflows/opencode-review-dispatch.yml index ade10b37c4..fca5bfc907 100644 --- a/.github/workflows/opencode-review-dispatch.yml +++ b/.github/workflows/opencode-review-dispatch.yml @@ -3984,6 +3984,7 @@ jobs: id: opencode_review_model_pool if: needs.coverage-evidence.result == 'success' continue-on-error: true + timeout-minutes: 15 env: SHARE: "false" NPM_CONFIG_IGNORE_SCRIPTS: "true" diff --git a/scripts/ci/test_strix_quick_gate.sh b/scripts/ci/test_strix_quick_gate.sh index 2cbca0c42a..a5da588e3c 100755 --- a/scripts/ci/test_strix_quick_gate.sh +++ b/scripts/ci/test_strix_quick_gate.sh @@ -780,7 +780,7 @@ assert_opencode_review_uses_codegraph_and_contextual_orchestrator() { assert_file_contains "$REPO_ROOT/scripts/ci/strix_quick_gate.sh" "billing details" "strix quick gate classifies provider quota starvation as infrastructure" assert_file_not_contains "$workflow_file" 'timeout-minutes: 325' "opencode review target must not cap inference" assert_file_contains "$workflow_file" 'timeout-minutes: 12' "opencode evidence preparation fails closed before it ties up the review queue" - assert_file_not_contains "$workflow_file" 'timeout-minutes: 205' "opencode model pool step must not cap inference" + assert_file_contains "$workflow_file" 'timeout-minutes: 15' "opencode model pool returns its shared runner after 900 seconds" assert_file_contains "$workflow_file" 'timeout-minutes: 34' "opencode fast approval publication is bounded around the dynamic image and package/GPU check wait" assert_file_contains "$workflow_file" 'continue-on-error: true' "opencode approval gate still runs after model-pool failure to publish a reason" assert_file_not_contains "$workflow_file" 'OPENCODE_RUN_TIMEOUT_SECONDS:' "opencode primary review has no inference timeout" @@ -1320,7 +1320,7 @@ assert_opencode_review_uses_codegraph_and_contextual_orchestrator() { assert_file_contains "$workflow_file" "collect_failed_check_evidence.sh" "opencode review workflow collects failed check logs and annotations" assert_file_contains "$workflow_file" 'HEAD_SHA: ${{ needs.validate-pr-metadata.outputs.head_sha }}' "opencode evidence step passes the live validated HEAD_SHA to failed-check evidence collection" assert_file_contains "$workflow_file" "FAILED_CHECK_EVIDENCE_ATTEMPTS" "opencode review workflow bounds waiting for peer check failures before model review" - assert_file_not_contains "$workflow_file" 'timeout-minutes: 205' "opencode model stage has no inference timeout" + assert_file_contains "$workflow_file" 'timeout-minutes: 15' "opencode model stage has a 900-second inference timeout" assert_file_contains "$workflow_file" 'timeout-minutes: 12' "opencode evidence preparation has a bounded peer-check wait timeout" assert_file_contains "$workflow_file" 'FAILED_CHECK_EVIDENCE_ATTEMPTS: "6"' "opencode review workflow keeps pre-model peer-check waiting bounded for required workflow DX" assert_file_contains "$workflow_file" 'FAILED_CHECK_EVIDENCE_SLEEP_SECONDS: "5"' "opencode review workflow retries peer-check evidence without stalling the model stage for Strix-scale durations" diff --git a/tests/test_opencode_agent_contract.py b/tests/test_opencode_agent_contract.py index 72a8b44e56..a832514d29 100644 --- a/tests/test_opencode_agent_contract.py +++ b/tests/test_opencode_agent_contract.py @@ -1962,6 +1962,9 @@ def test_workflow_provisions_sandbox_tool_and_reviewer_agent(): assert not re.search( r"Run OpenCode PR Review model pool[\s\S]{0,240}timeout-minutes: 205", workflow ) + assert re.search( + r"Run OpenCode PR Review model pool[\s\S]{0,240}timeout-minutes: 15", workflow + ) assert 'OPENCODE_RUN_TIMEOUT_SECONDS: "5400"' not in workflow assert 'OPENCODE_TOTAL_RETRY_BUDGET_SECONDS: "11700"' not in workflow assert 'OPENCODE_POOL_STEP_TIMEOUT_SECONDS: "12000"' not in workflow