Skip to content

fix(review): 특권 OpenCode PR 소스 격리#579

Open
seonghobae wants to merge 16 commits into
mainfrom
agent/fix-opencode-untrusted-checkout
Open

fix(review): 특권 OpenCode PR 소스 격리#579
seonghobae wants to merge 16 commits into
mainfrom
agent/fix-opencode-untrusted-checkout

Conversation

@seonghobae

@seonghobae seonghobae commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

배경

main의 CodeQL alerts #182-#185 (actions/untrusted-checkout/critical)는 특권 pull_request_target OpenCode job이 신뢰된 workflow checkout 안으로 PR 객체를 fetch한 뒤 PR head를 실행 가능한 worktree로 materialize하는 경로를 지적합니다. 이후 current-head 감사에서 모델 풀 큐 독점, 불완전 Strix 증거, 교차 저장소 상태 게시, 정확하지 않은 coverage runner 및 Python 프로젝트 의존성 부재도 확인했습니다.

변경

  • PR base/head 객체를 runner.temp의 격리된 bare Git 저장소로 fetch하고, 검증된 tree/blob만 inert source directory로 materialize합니다.
  • symlink·executable mode·예약된 .git/.codegraph 메타데이터, 경로 순회, 비 UTF-8 경로, 지원하지 않는 tree mode, 겹치는 출력 경로와 크기/파일 수 초과를 fail-closed로 거절합니다.
  • current head/base/run/attempt와 digest로 OpenCode·Noema 증거를 결속하고, 불완전한 Strix 스캔 및 재사용 불가능한 approval을 차단합니다.
  • 조직 queue sweep과 모델 풀 재시도 범위를 제한하고 provider 실패 이유를 bounded log로 남깁니다.
  • coverage image에 검증된 Node v22.14.0과 pnpm 11.5.3 아카이브를 SHA-256으로 고정하고, mutable Corepack activation이나 npm fallback을 금지합니다.
  • Python coverage는 PR이 선택한 manifest를 해석하지 않습니다. 정확한 target base SHA에서 regular requirements-hashes.txt만 최대 8개/20 MiB로 추출하고, pinned name==version + SHA-256 형식만 허용합니다.
  • 각 base lock을 별도 root-owned virtualenv에 --require-hashes --only-binary=:all:로 설치하고, networkless current-head 테스트에는 해당 프로젝트 환경만 제공합니다. 경로·형식·hash·wheel이 불명확하면 로그에 원인을 남기고 실패합니다.
  • 락이 없는 프로젝트의 기존 trusted-toolchain 경로는 보존하며, 외부에서 주입한 Python environment 경로는 /opt/base-python-envs의 root-owned read-only 경계가 아니면 거절합니다.

검증

  • 중앙 Python 테스트: 681 passed (장기 실행 파일은 동일 환경에서 분할 실행)
  • coverage/보안 계약 집중 테스트: 83 passed
  • scripts/ci/test_strix_quick_gate.sh: passed
  • Ruff 및 actionlint: passed
  • git diff --check: passed
  • 실제 Naruon #1078 base 58d19ee90b34c9cf18c163c03f1f8f05bbce2dce:
    • backend/requirements-hashes.txtconnector/requirements-hashes.txt를 exact base blob OID·크기·SHA-256과 함께 추출
    • 해시 락 설치 후 fastapi==0.139.0, pytest==9.1.1, pip check 통과
    • backend/tests/test_auth_real.py: 100 passed
  • 로컬 Docker 호환 계층은 arm64/rootless Podman이라 GitHub의 --network=default를 생성하지 못했습니다. 동일 해시 락 설치·테스트 경로는 위와 같이 로컬 Python 환경에서 재현했으며, hosted Ubuntu current-head run을 최종 권위 증거로 유지합니다.

리뷰 계약

보안 workflow 변경이므로 exact current head에 대해 OpenCode와 Noema의 독립 리뷰가 모두 필요합니다. unresolved thread, current-head CodeQL/SARIF, Strix와 필수 체크가 모두 통과하기 전에는 병합하지 않습니다.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 61f4389f043921c566ed5394c844b9689a4537d1.

  • Head SHA: 61f4389f043921c566ed5394c844b9689a4537d1

  • Workflow run: 29543971639

  • 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["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 (2 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (2 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 1a826b7d3e218e999a60f28562728a0cdd5d90ae
  • Workflow run: 29799147016
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 1a826b7d3e218e999a60f28562728a0cdd5d90ae.

  • Head SHA: 1a826b7d3e218e999a60f28562728a0cdd5d90ae

  • Workflow run: 29799147016

  • 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 (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (14 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (14 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (12 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (12 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 9548f668e725630a018d8369863fec791a20e848.

  • Head SHA: 9548f668e725630a018d8369863fec791a20e848

  • Workflow run: 29545462958

  • 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["Workflow (2 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (2 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (7 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (7 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (7 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (7 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 461ddf25d49c680b99a72ffc4b8aaedc90057bf3.

  • Head SHA: 461ddf25d49c680b99a72ffc4b8aaedc90057bf3

  • Workflow run: 29547114295

  • 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["Workflow (3 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (3 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (7 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (7 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 8702d861abf9564b5f46caa49231fbac992d26a6.

  • Head SHA: 8702d861abf9564b5f46caa49231fbac992d26a6

  • Workflow run: 29548883079

  • 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["Workflow (3 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (3 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (7 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (7 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 448b42d0acfec98fc32095d85adff2f7d3332149.

  • Head SHA: 448b42d0acfec98fc32095d85adff2f7d3332149

  • Workflow run: 29550081953

  • 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["Workflow (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (8 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (8 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 448b42d0acfec98fc32095d85adff2f7d3332149.

  • Head SHA: 448b42d0acfec98fc32095d85adff2f7d3332149

  • Workflow run: 29550108517

  • 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["Workflow (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (8 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (8 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 0496b9c2e2018601b18eb6c7718ce7842194c244.

  • Head SHA: 0496b9c2e2018601b18eb6c7718ce7842194c244

  • Workflow run: 29551817393

  • 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["Workflow (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (8 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (8 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head e7e4ffdaae469e29dd82ad3774ca8e6afe76d3b4.

  • Head SHA: e7e4ffdaae469e29dd82ad3774ca8e6afe76d3b4

  • Workflow run: 29554291237

  • 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 (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (8 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (8 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (8 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (8 files)"]
  R3 --> V3["targeted test run"]
Loading

@cwl-noema-review cwl-noema-review 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.

Noema PydanticAI review

Approval blocked: required coverage evidence not run or proven for this head. No dependency/SARIF issues, no workflow failures, no security findings, but test/docstring evidence is missing, so approval is not possible.

Findings

  • [high] .github/workflows/opencode-review.yml:1: Rerun the workflow ensuring 'coverage-evidence' is run and passes for the current head, or explain why coverage is not required for this repo. Approval cannot proceed without required test/docstring evidence. (coverage-evidence: skipped (present in current check conclusions), and all prior OpenCode review comments indicate 'coverage-evidence' job was not run or published for this head or prior heads (see OpenCode agent comments).)

  • Result: REQUEST_CHANGES

  • Verdict: request_changes

  • Confidence: high

  • Head SHA: f538d6dd7c0f824a05f9ddc24893e5d490a896a1

  • Reviewer credential: noema-github-app

@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot], opencode-agent[bot], opencode-agent[bot], and opencode-agent[bot] July 20, 2026 11:20

이전 HEAD의 coverage 실패 판정이며 current HEAD 0acf47fb에서는 coverage-evidence가 성공하고 exact-head OpenCode가 재실행 중입니다. stale review만 정리하고 current-head 승인을 별도로 요구합니다.

@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot], opencode-agent[bot], opencode-agent[bot], opencode-agent[bot], and cwl-noema-review[bot] July 20, 2026 11:20

이전 HEAD의 coverage 실패 판정이며 current HEAD 0acf47fb에서는 coverage-evidence가 성공하고 exact-head OpenCode가 재실행 중입니다. stale review만 정리하고 current-head 승인을 별도로 요구합니다.

@seonghobae

Copy link
Copy Markdown
Contributor Author

current HEAD 검증 — e3c8d45f76cbb291f74af8496cfcde343f76c904

완료된 동일 PR 이전 HEAD OpenCode 실행(29729484519)의 실제 로그를 기준으로 모델 풀 큐 독점을 수정했습니다.

  • GitHub Models GPT-4.1을 첫 후보로 이동했습니다. 이전 실행에서 약 21초 내 실질 리뷰를 반환했으나 adversarial receipt 한 필드 형식 때문에 거부됐습니다.
  • 유효 응답의 형식 검증 실패에는 두 번째 시도를 허용합니다.
  • timeout(124/137)은 동일 모델을 재시도하지 않고 다음 후보로 즉시 넘깁니다.
  • GitHub Models DeepSeek 후보는 각각 600초로 제한합니다. 이전 실행의 90분 무응답 2회를 반복하지 않습니다.
  • 전체 pool 예산은 3,600초, 외부 step guard는 3,900초, cycle은 1회로 제한합니다.

로컬 검증:

  • python3 -m pytest -q: 669 passed
  • 대상 계약 테스트: 56 passed
  • Bash 구문, Ruff, PyYAML parse, git diff --check: 통과
  • CodeGraph sync/explore로 cap_model_run_timeout -> run_one_model_attempt -> 후보/attempt loop 경로 재확인
  • 로컬 actionlint는 진단 출력 없이 60초 watchdog에 도달해 종료했으며, current HEAD hosted workflow 검증을 계속 추적합니다.
  • current HEAD code-scanning open alert: 0
  • unresolved review thread: 0

@seonghobae

Copy link
Copy Markdown
Contributor Author

추가 current-head 실증입니다. 중앙 PR #590의 exact head 5686854 대상 review run 29734027190은 coverage와 모든 저장소 검사를 통과한 뒤 모델 풀에서만 실패했습니다. DeepSeek V3와 R1은 각각 5,400초 timeout, Luna는 quota, GPT-5 계열은 context-window, o3는 권한 오류였습니다. 특히 GPT-4.1은 26초 안에 리뷰 출력을 만들었지만 adversarial probe의 exact path/positive line 형식 한 항목 때문에 CONTROL_REJECTED 되었고 동일 모델 형식 재시도가 없었습니다. 최종 publish는 MODEL_OUTPUT_UNAVAILABLE로 fail-closed 했습니다. 이 실행은 본 PR의 모델별 짧은 상한, Luna 후순위 배치, DeepSeek fallback, 형식 전용 재시도 2회의 필요성을 직접 입증합니다. 실패 실행: https://github.com/ContextualWisdomLab/.github/actions/runs/29734027190

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-HEAD governance repair pushed at 8b575e5c1d36cff95047a34be164e9b20dbafd1e.

This head closes the observed central review gaps:

  • Adversarial evidence now treats the structured changed-file path/line plus recomputed line digest as authoritative, without requiring fragile prose duplication.
  • Strix excludes gate-owned logs from report parsing, snapshots pre-attempt report directories so stale provider artifacts do not poison a later clean attempt, preserves fail-closed vulnerability handling, and builds large PR scopes from one normalized path cache rather than invoking Python once per path.
  • Coverage evidence pins Node 22.14.0 (archive SHA-256 69b09dba…e80437ec, bundled npm 10.9.2) and pnpm 11.5.3 (tarball SHA-256 238d639a…de7b51f) in the sandbox image, then requires exact runtime-version agreement with packageManager; it never activates PR-selected Corepack code or silently falls back. This directly addresses Naruon #1049 current-head run 29762452636, job 88420278286, which failed because pnpm 11.5.3 was not preinstalled.

Independent local verification on the committed files:

  • 673 passed in the full Python suite
  • test_strix_quick_gate: PASS in the complete timeout/provider/fallback/large-PR shell suite
  • isolated timeout-disabled, large full-set scope, hallucinated-endpoint fallback, default source-dir, and non-recoverable cases passed during diagnosis
  • shell syntax, actionlint, and git diff --check passed
  • workflow YAML parsed successfully
  • CodeGraph synced and explored against the final current-head call paths

All new GitHub checks shown on the PR are for 8b575e5c…; old-head checks are not being used as approval evidence.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head hosted evidence classification

Audited exact head 8b575e5c1d36cff95047a34be164e9b20dbafd1e and the completed trusted-base logs.

  • Strix run 29775891804 is not valid clean security evidence despite its green check. Every configured model failed with 403/rate-limit/provider errors, no structured vulnerability report was produced, and the current main@050e6d59 wrapper printed Treating as a neutral skip before returning success. External provider unavailability is non-blocking, but false-green conversion is the repo-local governance defect tracked by fix(security): Strix provider 장애를 fail-closed로 유지 #587.
  • Noema run 29775891801 successfully minted the scoped app token but printed Current head does not have a primary OpenCode approval; Noema review skipped. Its green check is orchestration success, not a second approval.
  • Completed dependency-review, Semgrep, gitleaks, SBOM, Scorecard, OSV action, and scheduler checks have no current-head failure. Remaining OpenCode metadata, CodeQL, Python Security, OSV, and Trivy jobs are still queued and must be evaluated when terminal.

Merge/review decisions must exclude the false-green Strix and skipped Noema verdict until real current-head evidence exists.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head evidence for 1a826b7d3e218e999a60f28562728a0cdd5d90ae:

  • #1078 root cause was central coverage collection without target dependencies (ModuleNotFoundError: fastapi), not a failing Naruon test.
  • Exact target base SHA hash locks are now bounded, strictly parsed, provenance-recorded, installed wheel-only into per-project root-owned environments, and consumed with the PR source still networkless.
  • #1049 remains covered by this PR’s separately pinned Node v22.14.0 / pnpm 11.5.3 path.
  • Central tests: 681 passed; focused coverage/security contracts: 83 passed; Naruon #1078 tests/test_auth_real.py: 100 passed from the materialized base lock environment; Ruff, Strix quick gate, actionlint, and diff check passed.
  • Current-head code-scanning PR alerts: 0. Active unresolved review threads: 0. No old-head active workflow runs remain.

The cross-repository status publication error still requires PR_REVIEW_MERGE_TOKEN or OPENCODE_APPROVE_TOKEN; the workflow continues to fail closed and expose that external configuration gap.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before 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 head 1a826b7d3e218e999a60f28562728a0cdd5d90ae.

  • Head SHA: 1a826b7d3e218e999a60f28562728a0cdd5d90ae

  • Workflow run: 29799147016

  • 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 (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow (4 files)"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["CI script (14 files)"]
  S2 --> I2["review and security gate shell path"]
  I2 --> R2["Review risk: CI script (14 files)"]
  R2 --> V2["bash -n plus Strix self-test"]
  Evidence --> S3["Test (12 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (12 files)"]
  R3 --> V3["targeted test run"]
Loading

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

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

1 participant