Skip to content

fix(review): 오프라인 커버리지와 증거 결합을 통합 - #604

Open
seonghobae wants to merge 32 commits into
mainfrom
agent/opencode-gpt-first-bootstrap
Open

fix(review): 오프라인 커버리지와 증거 결합을 통합#604
seonghobae wants to merge 32 commits into
mainfrom
agent/opencode-gpt-first-bootstrap

Conversation

@seonghobae

@seonghobae seonghobae commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

변경 사항

  • 사주 CalDAV 저장소의 Python 테스트·docstring 커버리지 증거가 네트워크 없이 재현되도록 전용 해시 잠금 파일과 계약 테스트를 추가합니다.
  • 모델 출력의 구조화된 위치를 검증된 source-line receipt에만 결합하고, 모호하거나 증명되지 않은 보정은 fail-closed로 유지합니다.
  • coverage source와 review artifact의 symlink, git history, 로그 명령 채널 경계를 강화합니다.
  • 현재 main의 DeepSeek 우선·GPT-5.6 Luna·유료 OpenRouter fallback 순서는 그대로 보존합니다.
  • workflow-less REST fallback의 취소된 scan-pr-queue 예외를 jq select 전체 구문으로 검증합니다.
  • Strix의 pyasn1 보안 고정과 잠금 파일 일관성 검증을 포함합니다.

통합 범위

  • 기존 #604의 증거·artifact 경계 강화
  • #563의 receipt 기반 위치 결합과 취소된 scheduler check 처리
  • #594의 사주 CalDAV 오프라인 커버리지 의존성 잠금
  • 최신 main의 모델 풀 변경과 충돌 해결

검증

  • Python 오프라인 의존성·에이전트 계약: 46 passed
  • 모델 풀 회귀 테스트: 28 passed
  • 변경된 셸 스크립트 bash 문법 검사 통과
  • actionlint 순수 Actions 문법 검사 통과
  • git diff --check 통과

전체 Strix 셸 하네스는 로컬 pyenv shim 재생성 경합 때문에 별도 환경 실패가 발생했으며, PR CI의 격리된 러너에서 다시 검증합니다.

Summary by CodeRabbit

  • 보안 및 안정성 개선

    • 커버리지 아티팩트, 워크트리, 심볼릭 링크 및 경로 무결성 검증을 강화했습니다.
    • 리뷰 증거의 파일·라인 인용을 신뢰할 수 있는 소스 기준으로 검증하고 안전하게 보정합니다.
    • 로그 재생 시 명령어 실행과 토큰 충돌 위험을 차단했습니다.
  • CI 및 커버리지 개선

    • 기준·대상 스냅샷을 명확히 사용해 변경 범위 기반 커버리지 검사를 안정화했습니다.
    • 모델별 실행 시간 제한과 재시도 예산 처리를 개선했습니다.
  • 의존성 및 테스트

    • 오프라인 테스트에 필요한 의존성과 해시 잠금을 확장했습니다.
    • 보안 경계, 아티팩트 무결성 및 리뷰 계약 검증을 강화했습니다.

@seonghobae
seonghobae enabled auto-merge (squash) July 20, 2026 18:02
@seonghobae seonghobae changed the title fix(review): GPT-4.1을 첫 리뷰 후보로 사용 fix(review): GPT-4.1 승인 후보 제거 Jul 20, 2026
@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head governance correction: 871db61579d7ed2652af2fba00fb225b32427278 removes GPT-4.1 from the OpenCode approval candidate pool instead of promoting it. The contract now bans openai/gpt-4.1; full central pytest is 634 passed and the focused model-pool contract is 37 passed. Hosted current-head Checks/reviews are pending.

@seonghobae seonghobae changed the title fix(review): GPT-4.1 승인 후보 제거 fix(review): GPT-4.1을 첫 승인 후보로 우선 Jul 20, 2026
Copilot AI review requested due to automatic review settings July 21, 2026 01:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

This PR reprioritizes the OpenCode review model candidate order to try GPT-4.1 first (based on observed reliability/performance), while keeping other models as ordered fallbacks, and aligns this ordering across workflow + Python + Strix contracts. It also hardens trusted execution boundaries by preventing GitHub Actions command injection from coverage logs and by failing closed on non-regular or symlink entries in the materialized PR worktree.

Changes:

  • Reorders OPENCODE_MODEL_CANDIDATES to start with github-models/openai/gpt-4.1 and updates corresponding assertions.
  • Adds stop-command enveloping for replaying untrusted coverage summaries (collision-safe token).
  • Adds fail-closed validation of tracked file modes and symlink presence in the PR worktree; cleans .codegraph state before indexing.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
tests/test_opencode_agent_contract.py Updates ordering expectations and adds regression tests for stop-command replay + symlink rejection contracts.
scripts/ci/test_strix_quick_gate.sh Updates Strix gate assertions to match the new model candidate ordering.
.github/workflows/opencode-review.yml Reorders model candidates and introduces new security checks (stop-commands envelope, worktree entry validation, .codegraph cleanup).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/opencode-review.yml Outdated
Comment thread tests/test_opencode_agent_contract.py
Comment thread .github/workflows/opencode-review.yml Outdated
Copilot AI review requested due to automatic review settings July 21, 2026 03:42
@seonghobae
seonghobae enabled auto-merge (squash) July 21, 2026 03:45
@opencode-agent
opencode-agent Bot disabled auto-merge July 21, 2026 03:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread .github/workflows/opencode-review.yml Outdated
Copilot AI review requested due to automatic review settings July 21, 2026 04:16
@opencode-agent
opencode-agent Bot disabled auto-merge July 22, 2026 07:31
@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review July 22, 2026 19:50

Dismissed as stale: this review targets an older head; current-head evidence remains subject to independent review.

…quence-after-604

# Conflicts:
#	.github/workflows/opencode-review.yml
#	requirements-strix-ci.txt
#	scripts/ci/test_strix_quick_gate.sh
#	tests/test_opencode_agent_contract.py
Copilot AI review requested due to automatic review settings July 26, 2026 07:27
@seonghobae seonghobae changed the title fix(review): GPT-4.1을 첫 승인 후보로 우선 fix(review): 오프라인 커버리지와 증거 결합을 통합 Jul 26, 2026
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8c17260b-defa-459a-bf3c-311383c5c474

📥 Commits

Reviewing files that changed from the base of the PR and between 5b9a8b1 and 0e15a23.

📒 Files selected for processing (6)
  • .github/workflows/opencode-review.yml
  • scripts/ci/opencode_review_normalize_output.py
  • scripts/ci/run_opencode_review_model_pool.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_opencode_agent_contract.py
  • tests/test_opencode_model_pool_runner.py
📝 Walkthrough

Walkthrough

커버리지 소스의 ref·아카이브·워크트리 검증이 강화되고, 재구성된 SHA가 측정과 게이트에 사용됩니다. 증거 citation 복구, 로그 replay 보호, 모델 타임아웃, 의존성 해시 잠금 및 관련 계약 테스트가 추가되었습니다.

Changes

Coverage source materialization

Layer / File(s) Summary
Trusted coverage source materialization
.github/workflows/opencode-review.yml, tests/test_opencode_agent_contract.py
Trusted replay guard ref를 확인하고, coverage 아카이브·워크트리의 모드, 심볼릭 링크, Git 메타데이터, 경로 및 루트 범위를 검증한 뒤 base/head snapshot SHA를 생성합니다.

Coverage execution and protected output

Layer / File(s) Summary
Coverage execution and protected output
.github/workflows/opencode-review.yml, scripts/ci/test_strix_quick_gate.sh, tests/test_opencode_agent_contract.py
Coverage diff와 JavaScript/TypeScript threshold가 재구성된 SHA를 사용하며, 로그 delimiter·stop-token·PR worktree·CodeGraph 출력 및 queue filtering 검증이 강화됩니다.

Receipt-verified evidence rebinding

Layer / File(s) Summary
Receipt-verified evidence rebinding
scripts/ci/opencode_review_normalize_output.py, tests/test_opencode_model_pool_runner.py
Trusted source-line receipt와 유일하게 일치하는 citation만 adversarial probe 위치로 복구하며, 모호하거나 검증되지 않은 입력은 원본을 유지합니다.

Provider timeout and retry-budget controls

Layer / File(s) Summary
Provider timeout and retry-budget controls
scripts/ci/run_opencode_review_model_pool.sh, .github/workflows/opencode-review.yml, tests/test_opencode_model_pool_runner.py, tests/test_opencode_agent_contract.py
DeepSeek provider cap을 추가하고, retry deadline 계산을 첫 provider 호출 직전으로 이동하며 관련 로그와 테스트를 갱신합니다.

Trusted runtime dependency locking

Layer / File(s) Summary
Trusted runtime dependency locking
requirements-opencode-review-ci.txt, requirements-opencode-review-ci-hashes.txt, requirements-strix-ci.txt, tests/test_opencode_python_dependency_lock.py
Coverage 런타임 의존성과 SHA256 lock stanza를 확장하고, 생성 메타데이터와 trusted package lock 일관성을 검증합니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 79.17% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 오프라인 커버리지와 증거 결합 강화라는 핵심 변경을 잘 요약하며, 변경 범위와도 관련이 있습니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/opencode-gpt-first-bootstrap

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

.github/workflows/opencode-review.yml:2061

  • The PR worktree symlink scan is implemented as find | grep inside an if condition. With set -euo pipefail, failures in condition lists still do not terminate the step, so an unexpected find error would skip this guard and allow trusted processing to continue. Since this check is explicitly a trust-boundary validation, fail closed on any scan error and only accept when the scan succeeds and finds no symlinks.
          if find -P "$OPENCODE_SOURCE_WORKDIR" -mindepth 1 -type l -print -quit | grep -q .; then
            echo "::error::PR worktree contains a symbolic link; refusing trusted review processing."
            exit 1
          fi

Comment thread .github/workflows/opencode-review.yml Outdated
Copilot AI review requested due to automatic review settings July 26, 2026 07:34

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/ci/run_opencode_review_model_pool.sh (1)

552-552: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

모든 후보가 skip되면 즉시 종료해야 합니다.
should_skip_model_candidate가 전부 걸러지면 dead_candidate_reasons가 비어 alive_candidates가 0이 되지 않고, deadline도 0인 채로 남습니다. 이 상태에서 max_cycles=0이면 cycle이 계속 반복될 수 있으니, 실제 실행 가능한 후보가 0개인 경우에는 바로 종료하거나 skip된 후보를 종료 판단에 포함해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/ci/run_opencode_review_model_pool.sh` at line 552, Update the
candidate-selection and termination flow around should_skip_model_candidate,
alive_candidates, dead_candidate_reasons, and deadline so that when every
candidate is skipped, the run immediately exits instead of continuing cycles
with max_cycles=0 and deadline=0; include skipped candidates in the
no-runnable-candidates decision or terminate directly when alive_candidates is
zero.
🧹 Nitpick comments (5)
scripts/ci/test_strix_quick_gate.sh (2)

617-617: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

들여쓰기 10칸에 고정된 정규식은 재포맷 시 검사가 무력화됩니다.

^[[:space:]]{10}cat "\$CODEGRAPH_EVIDENCE_FILE"[[:space:]]*$는 워크플로 스텝의 현재 들여쓰기 깊이에 의존합니다. 스텝이 다른 블록으로 이동하거나 재들여쓰기되면 금지 패턴이 다시 도입되어도 조용히 통과합니다. ^[[:space:]]*cat "\$CODEGRAPH_EVIDENCE_FILE"[[:space:]]*$처럼 깊이에 무관한 형태를 권합니다.

♻️ 제안 수정
-	assert_file_not_matches "$workflow_file" '^[[:space:]]{10}cat "\$CODEGRAPH_EVIDENCE_FILE"[[:space:]]*$' "opencode review does not replay assembled PR-derived CodeGraph evidence into the command channel"
+	assert_file_not_matches "$workflow_file" '^[[:space:]]*cat "\$CODEGRAPH_EVIDENCE_FILE"[[:space:]]*$' "opencode review does not replay assembled PR-derived CodeGraph evidence into the command channel"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/ci/test_strix_quick_gate.sh` at line 617, Update the regular
expression in the assert_file_not_matches check for "$CODEGRAPH_EVIDENCE_FILE"
to allow any amount of leading whitespace instead of requiring exactly 10
spaces, while preserving the existing command and end-of-line matching.

90-98: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

파일이 없으면 조용히 통과합니다.

assert_file_not_matches[ -f "$file_path" ]가 거짓일 때 아무 것도 기록하지 않으므로, 경로 오타나 파일 이름 변경이 있으면 금지 패턴 검사가 사라진 줄 모르고 게이트가 통과합니다. 부정 어서션에서는 대상 파일 부재 자체를 실패로 처리하는 편이 안전합니다.

♻️ 제안 수정
 assert_file_not_matches() {
 	local file_path="$1"
 	local pattern="$2"
 	local message="$3"
 
-	if [ -f "$file_path" ] && grep -Eq -- "$pattern" "$file_path"; then
+	if [ ! -f "$file_path" ]; then
+		record_failure "$message (missing file '$file_path')"
+		return
+	fi
+	if grep -Eq -- "$pattern" "$file_path"; then
 		record_failure "$message (unexpected pattern '$pattern')"
 	fi
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/ci/test_strix_quick_gate.sh` around lines 90 - 98, Update
assert_file_not_matches so a missing target file records a failure instead of
silently passing, using record_failure with a clear missing-file message;
preserve the existing unexpected-pattern failure behavior when the file exists.
.github/workflows/opencode-review.yml (1)

174-212: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

동일한 trusted-ref 결정 로직이 3중 복제되었습니다.

이 블록은 470-508행, 1855-1893행과 논리가 동일하지만 이번 사본만 /usr/bin/python3 -I를 쓰고 나머지 둘은 python3를 사용합니다. 신뢰 경계 로직이 갈라질 위험이 있으니 composite action이나 공유 스크립트로 추출하고 인터프리터 호출 방식을 통일하는 것을 권합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/opencode-review.yml around lines 174 - 212, Extract the
duplicated trusted-ref resolution logic from the three workflow blocks,
including the step identified by coverage_source_trusted, into one shared
composite action or script. Update all callers to use that shared implementation
and standardize the interpreter invocation, replacing the inconsistent
/usr/bin/python3 -I versus python3 usage while preserving the existing
validation and fallback behavior.
scripts/ci/opencode_review_normalize_output.py (1)

693-793: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

파일 간 매직 스트링 결합으로 인한 잠재적 취약점.

Line 746의 rejection == "must cite the exact probe path and positive line" 비교가 scripts/ci/adversarial_evidence.pyadversarial_evidence_rejection_reason이 반환하는 정확한 문자열에 하드코딩으로 결합되어 있습니다. 현재는 if path and path_citation is None: suffix = " and positive line" if line is not None else "" return f"must cite the exact probe path{suffix}" 조합으로 값이 정확히 일치하지만, 향후 adversarial_evidence.py의 메시지 문구가 변경되면 이 조건이 조용히(예외 없이) 매칭되지 않게 되어 재바인딩 기능이 fail-closed 상태로 영구히 비활성화됩니다. 보안 상 fail-closed라 즉각적인 위험은 아니지만, 회귀를 조기에 잡기 어렵습니다.

adversarial_evidence.py에 sentinel 상수(또는 판별 헬퍼 함수)를 정의해 두 파일이 이를 공유하도록 리팩터링을 권장합니다.

♻️ 제안 리팩터링
# scripts/ci/adversarial_evidence.py
+MISSING_PATH_AND_LINE_CITATION = "must cite the exact probe path and positive line"
+
 def adversarial_evidence_rejection_reason(
     evidence: str,
     path: str,
     line: int | None = None,
 ) -> str | None:
     ...
     if path and path_citation is None:
         suffix = " and positive line" if line is not None else ""
-        return f"must cite the exact probe path{suffix}"
+        return (
+            MISSING_PATH_AND_LINE_CITATION
+            if suffix
+            else "must cite the exact probe path"
+        )
# scripts/ci/opencode_review_normalize_output.py
-        rejection = adversarial_evidence_rejection_reason(repaired_evidence, path, line)
-        if rejection == "must cite the exact probe path and positive line":
+        rejection = adversarial_evidence_rejection_reason(repaired_evidence, path, line)
+        if rejection == adversarial_evidence.MISSING_PATH_AND_LINE_CITATION:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/ci/opencode_review_normalize_output.py` around lines 693 - 793,
Replace the literal rejection-string comparison in
repair_adversarial_probe_evidence_bindings with a shared sentinel constant or
predicate defined by adversarial_evidence.py and imported here. Ensure the
shared symbol identifies the “must cite the exact probe path and positive line”
condition, preserving the existing repair and fail-closed behavior while
preventing silent coupling to message wording.
tests/test_opencode_model_pool_runner.py (1)

1050-1077: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

GPT-5/DeepSeek runtime cap 테스트 중복.

test_github_deepseek_runtime_cap_preserves_queue_budget이 기존 test_github_gpt5_runtime_cap_preserves_queue_budget(1024-1047)과 provider 이름·env 변수명만 다를 뿐 구조가 거의 동일합니다. PR 목표상 향후 DeepSeek V3·GPT-5.6 Luna·GPT-5/o3·DeepSeek R1 등 추가 provider별 유사 테스트가 늘어날 가능성이 높으므로, pytest.mark.parametrize로 통합하면 유지보수가 쉬워집니다.

♻️ 제안 리팩터링
-def test_github_gpt5_runtime_cap_preserves_queue_budget(tmp_path: Path) -> None:
-    ...
-def test_github_deepseek_runtime_cap_preserves_queue_budget(tmp_path: Path) -> None:
-    ...
+@pytest.mark.parametrize(
+    ("model_candidate", "cap_env", "cap_seconds"),
+    [
+        ("github-models/openai/gpt-5", "OPENCODE_GITHUB_GPT5_RUN_TIMEOUT_SECONDS", 3),
+        (
+            "github-models/deepseek/deepseek-v3-0324",
+            "OPENCODE_GITHUB_DEEPSEEK_RUN_TIMEOUT_SECONDS",
+            2,
+        ),
+    ],
+)
+def test_provider_runtime_cap_preserves_queue_budget(
+    tmp_path: Path, model_candidate: str, cap_env: str, cap_seconds: int
+) -> None:
+    result = run_failed_model(
+        tmp_path,
+        model_candidates=model_candidate,
+        extra_env={cap_env: str(cap_seconds), "OPENCODE_RUN_TIMEOUT_SECONDS": "9"},
+    )
+    assert result.returncode == 1
+    ...
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_opencode_model_pool_runner.py` around lines 1050 - 1077, 통합된
provider별 runtime cap 테스트로 중복을 제거하세요. 기존
test_github_gpt5_runtime_cap_preserves_queue_budget와
test_github_deepseek_runtime_cap_preserves_queue_budget를 pytest.mark.parametrize
기반의 단일 테스트로 합치고, 모델 후보와 provider별 환경 변수명 및 기대 로그를 매개변수화해 각 provider에 대한 동일한 검증을
유지하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/opencode-review.yml:
- Around line 3802-3804: Update the DeepSeek timeout configuration used by
cap_model_run_timeout() so the 300-second cap applies only to endpoints known to
return no usable provider detail, not the primary
github-models/deepseek/deepseek-v3-0324 reviewer. Preserve the primary
candidate’s normal 5400-second cadence or assign it a more generous limit, while
retaining bounded fallback behavior for the affected endpoints.

---

Outside diff comments:
In `@scripts/ci/run_opencode_review_model_pool.sh`:
- Line 552: Update the candidate-selection and termination flow around
should_skip_model_candidate, alive_candidates, dead_candidate_reasons, and
deadline so that when every candidate is skipped, the run immediately exits
instead of continuing cycles with max_cycles=0 and deadline=0; include skipped
candidates in the no-runnable-candidates decision or terminate directly when
alive_candidates is zero.

---

Nitpick comments:
In @.github/workflows/opencode-review.yml:
- Around line 174-212: Extract the duplicated trusted-ref resolution logic from
the three workflow blocks, including the step identified by
coverage_source_trusted, into one shared composite action or script. Update all
callers to use that shared implementation and standardize the interpreter
invocation, replacing the inconsistent /usr/bin/python3 -I versus python3 usage
while preserving the existing validation and fallback behavior.

In `@scripts/ci/opencode_review_normalize_output.py`:
- Around line 693-793: Replace the literal rejection-string comparison in
repair_adversarial_probe_evidence_bindings with a shared sentinel constant or
predicate defined by adversarial_evidence.py and imported here. Ensure the
shared symbol identifies the “must cite the exact probe path and positive line”
condition, preserving the existing repair and fail-closed behavior while
preventing silent coupling to message wording.

In `@scripts/ci/test_strix_quick_gate.sh`:
- Line 617: Update the regular expression in the assert_file_not_matches check
for "$CODEGRAPH_EVIDENCE_FILE" to allow any amount of leading whitespace instead
of requiring exactly 10 spaces, while preserving the existing command and
end-of-line matching.
- Around line 90-98: Update assert_file_not_matches so a missing target file
records a failure instead of silently passing, using record_failure with a clear
missing-file message; preserve the existing unexpected-pattern failure behavior
when the file exists.

In `@tests/test_opencode_model_pool_runner.py`:
- Around line 1050-1077: 통합된 provider별 runtime cap 테스트로 중복을 제거하세요. 기존
test_github_gpt5_runtime_cap_preserves_queue_budget와
test_github_deepseek_runtime_cap_preserves_queue_budget를 pytest.mark.parametrize
기반의 단일 테스트로 합치고, 모델 후보와 provider별 환경 변수명 및 기대 로그를 매개변수화해 각 provider에 대한 동일한 검증을
유지하세요.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4d2ec5a4-3914-4115-b8cd-d4dae89e5217

📥 Commits

Reviewing files that changed from the base of the PR and between b613873 and 5b9a8b1.

📒 Files selected for processing (10)
  • .github/workflows/opencode-review.yml
  • requirements-opencode-review-ci-hashes.txt
  • requirements-opencode-review-ci.txt
  • requirements-strix-ci.txt
  • scripts/ci/opencode_review_normalize_output.py
  • scripts/ci/run_opencode_review_model_pool.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_opencode_agent_contract.py
  • tests/test_opencode_model_pool_runner.py
  • tests/test_opencode_python_dependency_lock.py

Comment thread .github/workflows/opencode-review.yml Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment thread scripts/ci/test_strix_quick_gate.sh
Copilot AI review requested due to automatic review settings July 26, 2026 07:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 26, 2026 07:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 26, 2026 08:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants