Skip to content

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

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

fix(review): 특권 OpenCode PR 소스 격리#579
seonghobae wants to merge 31 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: 4d5832305cb7a2f059b0769b76e9a61db9331b3b
  • Workflow run: 29964744722
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode reviewed the current-head mergeability evidence and changed-file flow before approval, then found merge conflicts on the affected path.

Findings

1. HIGH Merge Conflict Guidance - Resolve the PR branch against the latest base branch

  • Problem: GitHub reports mergeStateStatus DIRTY for this pull request.
  • Root cause: Branch agent/fix-opencode-untrusted-checkout cannot be merged cleanly into main; the changed-file flow below shows which review/runtime path is blocked by the conflict.
  • Fix: Merge or rebase the latest main into agent/fix-opencode-untrusted-checkout, resolve conflict markers in the PR branch, rerun the focused checks, and push the same branch.
  • Repair commands:
gh pr checkout 579 --repo ContextualWisdomLab/.github
git fetch origin main
git merge --no-ff origin/main  # or: git rebase origin/main
git status --short
# resolve files, then git add <resolved-files>
# merge path: git commit
# rebase path: git rebase --continue
git push origin HEAD:agent/fix-opencode-untrusted-checkout
# rebase path only: git push --force-with-lease origin HEAD:agent/fix-opencode-untrusted-checkout
  • Regression test: Keep OpenCode approval gated on mergeability so model-output failures cannot approve a conflicted PR.

Merge Conflict Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: requirements-strix-ci-hashes.txt"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["CI script (15 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (13 files)"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["targeted test run"]
Loading
  • Result: REQUEST_CHANGES
  • Reason: mergeStateStatus is DIRTY; mergeable is CONFLICTING.
  • Head SHA: 4d5832305cb7a2f059b0769b76e9a61db9331b3b
  • Workflow run: 29964744722
  • Workflow attempt: 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 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: requirements-strix-ci-hashes.txt"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["CI script (15 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (13 files)"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["targeted test run"]
Loading

Merge Conflict Guidance

  • Current merge state: DIRTY
  • Base branch: main
  • Head branch: agent/fix-opencode-untrusted-checkout
  • Fix direction: merge or rebase origin/main into agent/fix-opencode-untrusted-checkout, resolve conflict markers in the changed files, rerun the focused checks, then push the same branch.
  • Repair commands:
gh pr checkout 579 --repo ContextualWisdomLab/.github
git fetch origin main
git merge --no-ff origin/main  # or: git rebase origin/main
git status --short
# resolve files, then git add <resolved-files>
# merge path: git commit
# rebase path: git rebase --continue
git push origin HEAD:agent/fix-opencode-untrusted-checkout
# rebase path only: git push --force-with-lease origin HEAD:agent/fix-opencode-untrusted-checkout

@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 승인을 별도로 요구합니다.

Copilot AI review requested due to automatic review settings July 22, 2026 12:53

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 32 out of 32 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

scripts/ci/strix_quick_gate.sh:260

  • report_path_predates_snapshot uses [[ "$candidate" == "$existing/"* ]], which is Bash pattern matching. If a preexisting report directory name contains glob metacharacters (e.g. *, ?, [ ... ]), $existing will be treated as a pattern and can cause unrelated paths to be considered “preexisting”, potentially skipping failure-signal / vulnerability detection. Use a literal prefix comparison instead of pattern matching.
	while IFS= read -r existing; do
		if [[ "$candidate" == "$existing" || "$candidate" == "$existing/"* ]]; then
			return 0
		fi
	done <"$snapshot_file"

@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 bb5585016015de5213b8d1b2ba1e4ce8b375f24f.

  • Head SHA: bb5585016015de5213b8d1b2ba1e4ce8b375f24f

  • Workflow run: 29923661874

  • 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["Changed file: requirements-strix-ci-hashes.txt"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: requirements-strix-ci-hashes.txt"]
  R2 --> V2["required checks"]
  Evidence --> S3["CI script (15 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script (15 files)"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (12 files)"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test (12 files)"]
  R4 --> V4["targeted test run"]
Loading

Copilot AI review requested due to automatic review settings July 22, 2026 13:58

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 33 out of 33 changed files in this pull request and generated 1 comment.

Comment thread scripts/ci/opencode_existing_approval_gate.py Outdated
Copilot AI review requested due to automatic review settings July 22, 2026 14:17

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 33 out of 33 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 22, 2026 14: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

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

Comment thread scripts/ci/pr_review_fix_scheduler.py
Copilot AI review requested due to automatic review settings July 22, 2026 15:00

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 33 out of 33 changed files in this pull request and generated no new comments.

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review July 22, 2026 17:24

Obsolete on current head 6a6e5d4: the exact-head OpenCode coverage-source-tree and coverage-evidence jobs both completed successfully in run 29931756435. The current-head model-pool review remains in progress and is not being bypassed.

Copilot AI review requested due to automatic review settings July 22, 2026 18:03

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 33 out of 33 changed files in this pull request and generated 1 comment.

Comment thread scripts/ci/pr_review_fix_scheduler.py
Copilot AI review requested due to automatic review settings July 22, 2026 18:34

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 33 out of 33 changed files in this pull request and generated no new comments.

@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 reviewed the current-head mergeability evidence and changed-file flow before approval, then found merge conflicts on the affected path.

Findings

1. HIGH Merge Conflict Guidance - Resolve the PR branch against the latest base branch

  • Problem: GitHub reports mergeStateStatus DIRTY for this pull request.
  • Root cause: Branch agent/fix-opencode-untrusted-checkout cannot be merged cleanly into main; the changed-file flow below shows which review/runtime path is blocked by the conflict.
  • Fix: Merge or rebase the latest main into agent/fix-opencode-untrusted-checkout, resolve conflict markers in the PR branch, rerun the focused checks, and push the same branch.
  • Repair commands:
gh pr checkout 579 --repo ContextualWisdomLab/.github
git fetch origin main
git merge --no-ff origin/main  # or: git rebase origin/main
git status --short
# resolve files, then git add <resolved-files>
# merge path: git commit
# rebase path: git rebase --continue
git push origin HEAD:agent/fix-opencode-untrusted-checkout
# rebase path only: git push --force-with-lease origin HEAD:agent/fix-opencode-untrusted-checkout
  • Regression test: Keep OpenCode approval gated on mergeability so model-output failures cannot approve a conflicted PR.

Merge Conflict Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow (4 files)"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: requirements-strix-ci-hashes.txt"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["CI script (15 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (13 files)"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["targeted test run"]
Loading
  • Result: REQUEST_CHANGES
  • Reason: mergeStateStatus is DIRTY; mergeable is CONFLICTING.
  • Head SHA: 4d5832305cb7a2f059b0769b76e9a61db9331b3b
  • Workflow run: 29964744722
  • Workflow attempt: 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 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: requirements-strix-ci-hashes.txt"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["CI script (15 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (13 files)"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["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.

2 participants