fix(review): bind verified evidence in scripts/ci/opencode_review_normalize_output.py - #563
fix(review): bind verified evidence in scripts/ci/opencode_review_normalize_output.py#563seonghobae wants to merge 12 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head4ff50eca109bb1410275e024c92fef348f278147. -
Head SHA:
4ff50eca109bb1410275e024c92fef348f278147 -
Workflow run: 29404144238
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["CI script: opencode_review_normalize_output.py"]
S1 --> I1["review and security gate shell path"]
I1 --> R1["Review risk: CI script: opencode_review_normalize_output.py"]
R1 --> V1["bash -n plus Strix self-test"]
Evidence --> S2["Test (2 files)"]
S2 --> I2["regression suite"]
I2 --> R2["Review risk: Test (2 files)"]
R2 --> V2["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: opencode-review.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: opencode-review.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["CI script (2 files)"]
S2 --> I2["review and security gate shell path"]
I2 --> R2["Review risk: CI script (2 files)"]
R2 --> V2["bash -n plus Strix self-test"]
Evidence --> S3["Test: test_opencode_model_pool_runner.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_opencode_model_pool_runner.py"]
R3 --> V3["targeted test run"]
|
681447e to
0042e90
Compare
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head0042e9079990d5478294a369200101d88a2df79b. -
Head SHA:
0042e9079990d5478294a369200101d88a2df79b -
Workflow run: 29538997259
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["CI script: opencode_review_normalize_output.py"]
S1 --> I1["review and security gate shell path"]
I1 --> R1["Review risk: CI script: opencode_review_normalize_output.py"]
R1 --> V1["bash -n plus Strix self-test"]
Evidence --> S2["Test: test_opencode_model_pool_runner.py"]
S2 --> I2["regression suite"]
I2 --> R2["Review risk: Test: test_opencode_model_pool_runner.py"]
R2 --> V2["targeted test run"]
0042e90 to
099f538
Compare
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head099f538b7503288325077595a11eb1a7d8f016b4. -
Head SHA:
099f538b7503288325077595a11eb1a7d8f016b4 -
Workflow run: 29553130324
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 3
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["CI script: opencode_review_normalize_output.py"]
S1 --> I1["review and security gate shell path"]
I1 --> R1["Review risk: CI script: opencode_review_normalize_output.py"]
R1 --> V1["bash -n plus Strix self-test"]
Evidence --> S2["Test: test_opencode_model_pool_runner.py"]
S2 --> I2["regression suite"]
I2 --> R2["Review risk: Test: test_opencode_model_pool_runner.py"]
R2 --> V2["targeted test run"]
099f538 to
196c5a4
Compare
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
196c5a4c76dcbde28a374c55e975f9b45c74fc5a. - 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:
- scan-pr-queue check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/29706612581/job/88244598475)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["CI script: opencode_review_normalize_output.py"]
S1 --> I1["review and security gate shell path"]
I1 --> R1["Review risk: CI script: opencode_review_normalize_output.py"]
R1 --> V1["bash -n plus Strix self-test"]
Evidence --> S2["Test: test_opencode_model_pool_runner.py"]
S2 --> I2["regression suite"]
I2 --> R2["Review risk: Test: test_opencode_model_pool_runner.py"]
R2 --> V2["targeted test run"]
Superseded by current head 3b2255b, which adds the regression-tested REST fallback filter for the cancelled scheduler check cited by this old-head review.
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head55219f0b317a63a5effab6e19e38fc5e2ab639cf. -
Head SHA:
55219f0b317a63a5effab6e19e38fc5e2ab639cf -
Workflow run: 29728911432
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: opencode-review.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: opencode-review.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["CI script (2 files)"]
S2 --> I2["review and security gate shell path"]
I2 --> R2["Review risk: CI script (2 files)"]
R2 --> V2["bash -n plus Strix self-test"]
Evidence --> S3["Test: test_opencode_model_pool_runner.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_opencode_model_pool_runner.py"]
R3 --> V3["targeted test run"]
중복 구현 감사 결과current HEAD
#560의 current-head OpenCode review 실행 29745643580이 현재 진행 중입니다. 기능 유실을 막기 위해 #560이 병합될 때까지 이 PR은 열어 두고, 병합 직후 중복 PR로 정리하겠습니다. 오래된 |
Dismissed as stale: this review targets an older head; current-head evidence remains subject to independent review.
90f4c51 to
5bb40ac
Compare
There was a problem hiding this comment.
Pull request overview
Repairs fail-closed edge cases in the OpenCode review-output normalizer and approval-gate check classification so that only uniquely receipt-provable “redundant binding drift” is repaired, and a superseded cancelled scan-pr-queue check-run is ignored in the workflow-less REST fallback while preserving all other blocker semantics.
Changes:
- Add receipt-verified citation location inference and a tightly scoped probe-evidence repair pass (
repair_adversarial_probe_evidence_bindings) before adversarial validation is evaluated. - Extend the workflow-less commit check-runs REST fallback filter to ignore only cancelled
scan-pr-queue. - Add model-pool tests + cache isolation fixture to cover “restore missing redundant citation”, “rebind drifted structured fields when uniquely receipted”, and “remain fail-closed when ambiguous/unverifiable”.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
scripts/ci/opencode_review_normalize_output.py |
Adds receipt-verified evidence rebinding/repair logic and invokes it before adversarial validation gating. |
tests/test_opencode_model_pool_runner.py |
Adds focused tests for the new binding repair behavior and an autouse fixture to clear normalizer artifact caches between tests. |
.github/workflows/opencode-review.yml |
Updates the REST commit check-runs fallback filter to ignore only cancelled scan-pr-queue. |
scripts/ci/test_strix_quick_gate.sh |
Updates the workflow static-contract assertions to require the new REST fallback cancellation filter. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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
5bb40ac93c7e7e9b8ed5665d85e132a43e3f1219. - 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/29992467539/job/89158196905)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/29992467539/job/89158196905)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: opencode-review.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: opencode-review.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["CI script (2 files)"]
S2 --> I2["review and security gate shell path"]
I2 --> R2["Review risk: CI script (2 files)"]
R2 --> V2["bash -n plus Strix self-test"]
Evidence --> S3["Test: test_opencode_model_pool_runner.py"]
S3 --> I3["regression suite"]
I3 --> R3["Review risk: Test: test_opencode_model_pool_runner.py"]
R3 --> V3["targeted test run"]
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdversarial probe evidence를 검증된 source-line receipt와 current-head 소스에 맞춰 제한적으로 복구하고, 이를 ChangesProbe 증거 바인딩 복구
취소된 큐 체크 필터링
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant valid_control
participant repair_adversarial_probe_evidence_bindings
participant trusted_execution_receipts
participant current_changed_files
participant SourceTree
valid_control->>repair_adversarial_probe_evidence_bindings: value 전달
repair_adversarial_probe_evidence_bindings->>trusted_execution_receipts: 단일 receipt 검증
repair_adversarial_probe_evidence_bindings->>current_changed_files: 변경 파일 집합 조회
repair_adversarial_probe_evidence_bindings->>SourceTree: source-line SHA-256 재계산
SourceTree-->>repair_adversarial_probe_evidence_bindings: 일치하는 path와 line 반환
repair_adversarial_probe_evidence_bindings-->>valid_control: 보정된 value 반환
valid_control->>valid_control: adversarial_validation_error 검증
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
scripts/ci/opencode_review_normalize_output.py (1)
693-792: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winper-probe 복구 로직을 별도 헬퍼로 분리 검토
로직 자체는 fail-closed 이중검증까지 견고하게 구현되어 있으나, 필터링·receipt 검증·prepend/rebind 분기·최종 재검증이 하나의 for 루프에 모두 들어있어 가독성과 단위 테스트 용이성이 떨어집니다. 개별 probe 처리를
_repair_single_probe(probe, changed_files) -> tuple[Any, bool]로 분리하면 각 분기(특히 rebind 실패/성공 경로)를 독립적으로 단위 테스트하기 쉬워집니다.♻️ 리팩터 스케치
+def _repair_single_probe( + probe: Any, changed_files: frozenset[str] +) -> tuple[Any, bool]: + """Return a possibly repaired probe and whether it was modified.""" + if not isinstance(probe, dict): + return probe, False + # ... (기존 path/line/evidence 검증 및 prepend/rebind 로직을 이곳으로 이동) + return repaired_probe_or_original, changed_flag + + def repair_adversarial_probe_evidence_bindings(value: Any) -> dict[str, Any] | Any: ... changed_files = current_changed_files() repaired_probes: list[Any] = [] changed = False for probe in probes: - # 기존의 길고 중첩된 검증/복구 로직 + repaired_probe, probe_changed = _repair_single_probe(probe, changed_files) + repaired_probes.append(repaired_probe) + changed = changed or probe_changed🤖 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 - 792, Extract the per-probe filtering, receipt validation, prepend/rebind handling, and final revalidation from repair_adversarial_probe_evidence_bindings into a _repair_single_probe(probe, changed_files) -> tuple[Any, bool] helper. Preserve all existing fail-closed branches and return the repaired probe plus whether it changed; keep the outer function responsible only for iterating probes, collecting results, and returning the updated validation structure.tests/test_opencode_model_pool_runner.py (1)
247-351: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winrebind 분기의 최종 재검증 실패 케이스 테스트 추가 제안
현재
invalid_values는 prepend 분기(구조적 path/line이 receipt와 일치)에서 proof anchor 부재로 최종 거부되는 경우만 커버합니다("evidence": receipt케이스). 하지만receipt_verified_evidence_location이 구조적으로 유일한 매칭을 찾아 rebind에 성공한 뒤에도, evidence 전체에 proof anchor/observed-result 텍스트가 없으면 동일한 최종 재검증에서 거부되어야 하는 경로는 아직 테스트되지 않습니다. 이 최종 이중검증은 fail-closed 보장의 핵심이므로 rebind 경로에서도 명시적으로 검증할 가치가 있습니다.✅ 추가 제안 테스트 케이스
{ "adversarial_validation": { "probes": [ { "path": path, "line": line, # 구조적 line=1, receipt는 line 2를 가리켜 불일치 "evidence": ( f"{path}:2 source-line-sha256=" + hashlib.sha256(b"raise SystemExit(1)").hexdigest() ), } ] } },이 경우
receipt_verified_evidence_location은(path, 2)를 유일 매칭으로 반환하지만, evidence 전체에 proof anchor가 없어 최종adversarial_evidence_rejection_reason검사에서 거부되어 probe가 원본 그대로 유지되어야 합니다.🤖 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 247 - 351, Extend test_normalizer_probe_binding_repair_remains_fail_closed with a rebind-path case where the probe’s structural line differs from the uniquely verified receipt location, but the evidence lacks the required proof-anchor or observed-result text. Assert repair_adversarial_probe_evidence_bindings returns the original invalid mapping unchanged, covering final rejection after a successful receipt_verified_evidence_location rebind.
🤖 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:
- Line 6152: Update the REST fallback filter around the cancelled
“scan-pr-queue” selection so it excludes that check only when it belongs to “PR
Review Merge Scheduler” or “Required PR Review Merge Scheduler”; if scheduler
ownership cannot be verified, retain the check and fail closed. Add a regression
case proving a scheduler-owned cancelled check is excluded while a cancelled
check with the same name from a non-scheduler workflow remains a blocker.
In `@scripts/ci/test_strix_quick_gate.sh`:
- Line 1027: Update the assertion in the quick-gate test for the workflow-less
REST fallback to require the cancelled check name scan-pr-queue and workflow
name PR Review Merge Scheduler or Required PR Review Merge Scheduler, matching
collect_failed_check_evidence.sh. Add a regression assertion confirming a
cancelled scan-pr-queue check from any other workflow remains a blocker.
---
Nitpick comments:
In `@scripts/ci/opencode_review_normalize_output.py`:
- Around line 693-792: Extract the per-probe filtering, receipt validation,
prepend/rebind handling, and final revalidation from
repair_adversarial_probe_evidence_bindings into a _repair_single_probe(probe,
changed_files) -> tuple[Any, bool] helper. Preserve all existing fail-closed
branches and return the repaired probe plus whether it changed; keep the outer
function responsible only for iterating probes, collecting results, and
returning the updated validation structure.
In `@tests/test_opencode_model_pool_runner.py`:
- Around line 247-351: Extend
test_normalizer_probe_binding_repair_remains_fail_closed with a rebind-path case
where the probe’s structural line differs from the uniquely verified receipt
location, but the evidence lacks the required proof-anchor or observed-result
text. Assert repair_adversarial_probe_evidence_bindings returns the original
invalid mapping unchanged, covering final rejection after a successful
receipt_verified_evidence_location rebind.
🪄 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: b7488a11-378c-4e38-abe9-a49464de1006
📒 Files selected for processing (4)
.github/workflows/opencode-review.ymlscripts/ci/opencode_review_normalize_output.pyscripts/ci/test_strix_quick_gate.shtests/test_opencode_model_pool_runner.py
604ff0f to
6fdfed7
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (2)
scripts/ci/opencode_review_normalize_output.py (2)
688-700: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value인용된 라인마다 소스 파일을 두 번 전체 읽습니다.
adversarial_probe_location_error와adversarial_probe_source_line_digest가 각각read_bytes()로 파일 전체를 읽으므로, 같은 파일에 대한 인용이 여러 개면 읽기 횟수가 선형으로 증가합니다. path별로 한 번만 읽고 라인 배열을 재사용하거나 digest 결과를 메모이즈하면 I/O를 줄일 수 있습니다. 정확성/fail-closed 동작에는 영향이 없으므로 선택 사항입니다.🤖 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 688 - 700, Optimize the citation loop around adversarial_probe_location_error and adversarial_probe_source_line_digest so each path’s source data is read only once and reused across citations, or memoize the computed line digests per path and line. Preserve the existing matching behavior and fail-closed handling for invalid locations or unavailable digests.
758-759: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win거절 사유 문자열을 상수로 공유하세요.
scripts/ci/adversarial_evidence.py와 테스트도 같은 문구에 묶여 있어, 여기서 리터럴 비교를 유지하면 문구 변경 시 분기가 쉽게 어긋납니다.🤖 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 758 - 759, Share the rejection-reason string through a common constant from adversarial_evidence.py, and update the comparison in adversarial_evidence_rejection_reason handling plus related tests to reference that constant instead of duplicating the literal. Ensure all consumers remain aligned when the message changes.
🤖 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.
Nitpick comments:
In `@scripts/ci/opencode_review_normalize_output.py`:
- Around line 688-700: Optimize the citation loop around
adversarial_probe_location_error and adversarial_probe_source_line_digest so
each path’s source data is read only once and reused across citations, or
memoize the computed line digests per path and line. Preserve the existing
matching behavior and fail-closed handling for invalid locations or unavailable
digests.
- Around line 758-759: Share the rejection-reason string through a common
constant from adversarial_evidence.py, and update the comparison in
adversarial_evidence_rejection_reason handling plus related tests to reference
that constant instead of duplicating the literal. Ensure all consumers remain
aligned when the message changes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: bdbee8c9-2b70-4f5e-a7ec-033950f999d1
📒 Files selected for processing (3)
scripts/ci/opencode_review_normalize_output.pyscripts/ci/test_strix_quick_gate.shtests/test_opencode_model_pool_runner.py
🚧 Files skipped from review as they are similar to previous changes (2)
- scripts/ci/test_strix_quick_gate.sh
- tests/test_opencode_model_pool_runner.py
자동 리뷰 증거 계약
adversarial_validation의 각 probe는 구조화된path·양의line과 evidence의 정확한path:line을 서로 결합해야 합니다.source-line-sha256receipt는 같은 current-head 줄의 실제 바이트를 증명해야 합니다.Purpose
This pull request repairs three fail-closed review-process edge cases:
path:linetext in free-form evidence.scan-pr-queuecheck owned byPR Review Merge SchedulerorRequired PR Review Merge Scheduler.The normalizer restores or rebinds redundant location data only when a single current-head changed-file line is independently proven by the sealed source receipt. Ambiguous, missing, mismatched, circular, or unobserved evidence remains rejected.
Scheduler cancellation handling is ownership-aware:
scan-pr-queueonly when its workflow is one of the two trusted scheduler workflows.Fail-closed boundaries
Current-head verification
604ff0f9c8fb0274f43687609e494c5b267ffbfcgit diff --check: passedExpected review behavior
The protected-base normalizer may repair only redundant binding drift that is uniquely proven by the current-head changed-file manifest, sealed source tree, exact line bytes, and one source-line receipt. The approval gate may ignore only a superseded scheduler cancellation whose scheduler ownership is present in typed check evidence; the workflow-less REST fallback must retain same-named cancellations because ownership is unavailable.
Summary by CodeRabbit