fix: keep cross-repo OpenCode evidence healthy - #939
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughOpenCode는 정확한 PR HEAD의 공식 리뷰가 있을 때만 교차 저장소 상태 공개 생략을 허용합니다. Strix는 provider 장애를 실패로 처리합니다. 필수 큐 실행은 취소하지 않습니다. 내부 PR 지침 전달과 Base requirement lock 탐색 계약을 추가했습니다. Changes보안 증거와 CI 실행 계약
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🟡 Moderate · up to The PR changes cross-repository review evidence and workflow enforcement, but the current head still permits ambiguous reviewer-author acceptance and does not reliably verify the scheduler’s cancellation setting; together with the unresolved requirements-lock discovery concern, these concrete gate and dependency-discovery risks should be fixed or explicitly accepted before merge. Possibly related PRs
Sequence Diagram(s)sequenceDiagram
participant Workflow as opencode-review-dispatch.yml
participant ReviewsAPI as GitHub Reviews API
participant StatusAPI as GitHub Status API
Workflow->>ReviewsAPI: PR_HEAD_SHA의 리뷰 조회
ReviewsAPI-->>Workflow: 공식 OpenCode 리뷰 상태 반환
Workflow->>StatusAPI: 검증된 리뷰가 있을 때 상태 공개 생략
Workflow-->>Workflow: 조회 실패 또는 불일치 시 exit 1
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@opencode-agent review Perform a fresh read-only semantic review of exact current head Focus on the static fixed-URL/fixed-User-Agent uv request boundary, no-proxy/no-redirect behavior, bounded download/checksum/version enforcement, and the cross-repository OpenCode App status-publication guard. Verify that optional status publication cannot substitute for exact-head formal review or weaken branch protection. Review only; do not mutate, self-approve, enable auto-merge, or merge. |
|
@coderabbitai review Please perform a fresh read-only semantic review of exact current head Focus on the new fail-closed cross-repository status guard: unavailable |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head_sha='f97b9a44201633d2a94bf73c6bb7fde900135553'
base_sha='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
repo='ContextualWisdomLab/.github'
pr_number='939'
echo '== Commit identity and ancestry =='
git cat-file -e "${head_sha}^{commit}"
git cat-file -e "${base_sha}^{commit}"
printf 'HEAD parent/base relationship: '
git merge-base --is-ancestor "$base_sha" "$head_sha" && echo yes || echo no
printf 'merge-base: '
git merge-base "$base_sha" "$head_sha"
printf 'checked-out HEAD: '
git rev-parse HEAD
echo '== Changed files and exact diff =='
git diff --name-status "$base_sha" "$head_sha"
git diff --unified=80 "$base_sha" "$head_sha" -- \
.github/workflows/opencode-review-dispatch.yml \
tests/test_opencode_agent_contract.py
echo '== Workflow outline and relevant control-flow context =='
ast-grep outline .github/workflows/opencode-review-dispatch.yml --items all || true
rg -n -C 12 --glob 'opencode-review-dispatch.yml' \
'github\.token|opencode-app|commit.status|statuses|reviews|pulls|PR_HEAD_SHA|APPROVED|CHANGES_REQUESTED|exit 1|exit 0|repository_dispatch' \
.github/workflows/opencode-review-dispatch.yml
echo '== Contract-test context =='
ast-grep outline tests/test_opencode_agent_contract.py --items all || true
rg -n -C 10 \
'github\.token|opencode-app|commit.status|statuses|reviews|PR_HEAD_SHA|APPROVED|CHANGES_REQUESTED|exit.?1|exit.?0' \
tests/test_opencode_agent_contract.py
echo '== Live PR identity, reviews, and check rollup =='
gh pr view "$pr_number" --repo "$repo" \
--json number,state,isDraft,mergeable,headRefOid,baseRefOid,reviews,statusCheckRollup \
--jq '{number,state,isDraft,mergeable,headRefOid,baseRefOid,reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid}],checks:[.statusCheckRollup[]|{name,conclusion,status,workflowName}]}'Length of output: 161212 🏁 Script executed: #!/bin/bash
set -euo pipefail
head_sha='f97b9a44201633d2a94bf73c6bb7fde900135553'
base_sha='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
repo='ContextualWisdomLab/.github'
pr_number='939'
echo '== Commit ancestry =='
printf 'base ancestor of head: '
git merge-base --is-ancestor "$base_sha" "$head_sha" && echo yes || echo no
printf 'merge-base: '; git merge-base "$base_sha" "$head_sha"
printf 'current checkout: '; git rev-parse HEAD
echo '== Exact changed hunks: status-publication guard =='
git diff --unified=30 "$base_sha" "$head_sha" -- .github/workflows/opencode-review-dispatch.yml |
sed -n '/Publish repository_dispatch OpenCode status/,+130p'
echo '== Exact changed hunks: regression contract =='
git diff --unified=30 "$base_sha" "$head_sha" -- tests/test_opencode_agent_contract.py |
sed -n '1,260p'
echo '== Guard source with line numbers =='
nl -ba .github/workflows/opencode-review-dispatch.yml |
sed -n '7828,7895p'
echo '== Exact-head Strix workflow runs =='
gh run list --repo "$repo" --workflow strix.yml --commit "$head_sha" --limit 20 \
--json databaseId,event,status,conclusion,headSha,url,workflowName \
--jq '.[] | {databaseId,event,status,conclusion,headSha,url,workflowName}'
echo '== Current branch-protection requirements =='
gh api "repos/${repo}/branches/main/protection" \
--jq '{required_status_checks,required_pull_request_reviews,required_linear_history,allow_force_pushes,allow_deletions}' \
|| trueLength of output: 13167 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='ContextualWisdomLab/.github'
head_sha='f97b9a44201633d2a94bf73c6bb7fde900135553'
echo '== Current exact-head Strix runs =='
gh run list --repo "$repo" --workflow strix.yml --commit "$head_sha" --limit 20 \
--json databaseId,event,status,conclusion,headSha,url,workflowName \
--jq '.[] | {databaseId,event,status,conclusion,headSha,url,workflowName}'
echo '== Branch protection: required checks and reviews =='
gh api "repos/${repo}/branches/main/protection" |
jq '{
required_status_check_contexts: (.required_status_checks.contexts // []),
strict_required_status_checks: (.required_status_checks.strict // null),
required_approving_review_count: (.required_pull_request_reviews.required_approving_review_count // 0),
dismiss_stale_reviews: (.required_pull_request_reviews.dismiss_stale_reviews // false),
require_code_owner_reviews: (.required_pull_request_reviews.require_code_owner_reviews // false),
require_last_push_approval: (.required_pull_request_reviews.require_last_push_approval // false),
enforce_admins: (.enforce_admins.enabled // false)
}'
echo '== Current live PR review and check state =='
gh pr view 939 --repo "$repo" --json headRefOid,reviews,statusCheckRollup \
--jq '{
head: .headRefOid,
reviews: [.reviews[] | {author:.author.login,state,commit:.commit.oid}],
active_or_non_success_checks: [
.statusCheckRollup[]
| select(.status != "COMPLETED" or ((.conclusion // "") | ascii_upcase | IN("SUCCESS","SKIPPED","NEUTRAL") | not))
| {name,status,conclusion,workflowName}
]
}'Length of output: 2589
I found no source-level defect in the new cross-repository status-publication guard.
The regression contract checks the required guard structure and failure path. It is static coverage. It does not execute mocked API failure or review-payload cases. Live verification is incomplete:
Therefore, the statement that all exact-head checks are terminal-success is not supported by the live data. I did not approve, merge, enable auto-merge, or modify repository state. I applied the existing exact-current-head evidence rule during this review. 🧠 Learnings used
|
|
@opencode-agent review Perform a fresh read-only semantic review of exact current head Review the fail-closed exact-head formal-review guard and the subsequent Strix outage-gate changes as one current tree. Keep source-review evidence distinct from workflow/provider evidence. Do not mutate, self-approve, enable auto-merge, dismiss reviews, weaken gates, or merge. |
|
@coderabbitai review Review exact current head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='ContextualWisdomLab/.github'
pr='939'
head='ac5665148bb113f92e97d2fc49a729bca2f050b5'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
echo '== Exact commit identity =='
git cat-file -e "${head}^{commit}"
git cat-file -e "${base}^{commit}"
printf 'checked-out head: '; git rev-parse HEAD
printf 'base is ancestor: '; git merge-base --is-ancestor "$base" "$head" && echo yes || echo no
printf 'merge base: '; git merge-base "$base" "$head"
echo '== Changed files =='
git diff --name-status "$base" "$head"
echo '== Focused exact diff =='
git diff --unified=45 "$base" "$head" -- \
scripts/ci/materialize_base_python_requirements.py \
tests/test_trusted_uv_download_contract.py \
.github/workflows/opencode-review-dispatch.yml \
tests/test_opencode_agent_contract.py
echo '== Python module outline =='
ast-grep outline scripts/ci/materialize_base_python_requirements.py --items all || true
echo '== Trusted uv request and enforcement context =='
rg -n -C 14 --glob 'materialize_base_python_requirements.py' \
'TRUSTED_UV_DOWNLOAD|Request\(|urlopen\(|ProxyHandler|HTTPRedirectHandler|timeout|read\(|sha256|checksum|version|extract' \
scripts/ci/materialize_base_python_requirements.py
echo '== Trusted uv contract context =='
ast-grep outline tests/test_trusted_uv_download_contract.py --items all || true
rg -n -C 10 \
'Request|urlopen|User-Agent|TRUSTED_UV_DOWNLOAD|ProxyHandler|HTTPRedirectHandler|timeout|sha256|version' \
tests/test_trusted_uv_download_contract.py
echo '== Status-publication guard context =='
rg -n -C 16 --glob 'opencode-review-dispatch.yml' \
'Publish repository_dispatch OpenCode status|github\.token|opencode-app|reviews|PR_HEAD_SHA|opencode-agent|APPROVED|CHANGES_REQUESTED|exit 1|exit 0|statuses|commit.status' \
.github/workflows/opencode-review-dispatch.yml
echo '== Status-guard contract context =='
rg -n -C 10 \
'github\.token|opencode-app|reviews|PR_HEAD_SHA|opencode-agent|APPROVED|CHANGES_REQUESTED|exit.?1|exit.?0|status' \
tests/test_opencode_agent_contract.py
echo '== Live PR exact-head state =='
gh pr view "$pr" --repo "$repo" \
--json number,state,isDraft,mergeable,headRefOid,baseRefOid,reviews,statusCheckRollup \
--jq '{
number,state,isDraft,mergeable,headRefOid,baseRefOid,
reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid}],
checks:[.statusCheckRollup[]|{name,status,conclusion,workflowName,headSha}]
}'
echo '== Branch protection, if readable =='
gh api "repos/${repo}/branches/main/protection" \
--jq '{
required_status_checks: (.required_status_checks // null),
required_pull_request_reviews: (.required_pull_request_reviews // null),
enforce_admins: (.enforce_admins.enabled // null)
}' || echo 'Branch-protection query was unavailable.'Length of output: 156484 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='ac5665148bb113f92e97d2fc49a729bca2f050b5'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
echo '== Checkout and ancestry =='
printf 'checkout='; git rev-parse HEAD
printf 'merge_base='; git merge-base "$base" "$head"
printf 'base_ancestor='; git merge-base --is-ancestor "$base" "$head" && echo yes || echo no
echo '== Changed paths at exact revisions =='
git diff --name-status "$base" "$head"
echo '== Exact trusted uv diff =='
git diff --unified=25 "$base" "$head" -- \
scripts/ci/materialize_base_python_requirements.py \
tests/test_trusted_uv_download_contract.py
echo '== Exact trusted uv implementation =='
git show "${head}:scripts/ci/materialize_base_python_requirements.py" |
nl -ba |
sed -n '/TRUSTED_UV_DOWNLOAD/,/^[[:space:]]*def /p'
echo '== Exact trusted uv contract functions =='
git show "${head}:tests/test_trusted_uv_download_contract.py" |
nl -ba |
sed -n '/test_urlopen_receives_one_static_release_request/,/^[[:space:]]*def /p'
echo '== Exact status guard diff =='
git diff --unified=28 "$base" "$head" -- \
.github/workflows/opencode-review-dispatch.yml \
tests/test_opencode_agent_contract.py |
sed -n '/Publish repository_dispatch OpenCode status/,+180p'
echo '== Exact status guard implementation =='
git show "${head}:.github/workflows/opencode-review-dispatch.yml" |
nl -ba |
sed -n '7828,7918p'
echo '== Exact status guard contract =='
git show "${head}:tests/test_opencode_agent_contract.py" |
nl -ba |
sed -n '1997,2053p'Length of output: 12650 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='ac5665148bb113f92e97d2fc49a729bca2f050b5'
base='6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba'
numbered_range() {
start="$1"
end="$2"
awk -v start="$start" -v end="$end" 'NR >= start && NR <= end { printf "%6d %s\n", NR, $0 }'
}
echo '== Trusted uv downloader and enforcement =='
git show "${head}:scripts/ci/materialize_base_python_requirements.py" |
numbered_range 55 285
echo '== Trusted uv request contract =='
git show "${head}:tests/test_trusted_uv_download_contract.py" |
numbered_range 1 180
echo '== Exact cross-repository status guard =='
git show "${head}:.github/workflows/opencode-review-dispatch.yml" |
numbered_range 7828 7918
echo '== Exact cross-repository status contract =='
git show "${head}:tests/test_opencode_agent_contract.py" |
numbered_range 1997 2053
echo '== Strix exact diff and contracts =='
git diff --unified=30 "$base" "$head" -- \
.github/workflows/strix.yml \
tests/test_required_workflow_queue_contract.py \
tests/test_strix_nvidia_nim_not_found_fallback.pyLength of output: 48876
I found no blocking source-level defect.
Trusted
Cross-repository commit-status limitation
Strix outage gate
Live evidence
I applied the existing exact-current-head evidence rule during this review. I did not modify repository state, approve, merge, release, dismiss reviews, or change protections. 🧠 Learnings usedYou are interacting with an AI system. |
seonghobae
left a comment
There was a problem hiding this comment.
Exact-current-head read-only review request for ac5665148bb113f92e97d2fc49a729bca2f050b5 against protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.
This is now the canonical repair after closing superseded #943. Review the combined causal boundaries: fixed-origin static User-Agent for trusted uv bootstrap; proof of an exact-head formal OpenCode review before tolerating unavailable cross-repository status publication; and fail-closed Strix behavior when provider evidence is incomplete. Nine directly observed exact-head hosted workflows, including Trusted uv Materializer Quality CI, are terminal-success and no inline thread exists.
Do not transfer #943 evidence, update this branch, synthesize author approval, neutralize missing security evidence, or bypass protection.
|
Canonical exact-current-head review dispatch for Review the combined root-cause repair only: fixed-origin static Keep this request read-only. Do not update the branch, synthesize author approval, merge, release, neutralize missing security evidence, or weaken protection. @coderabbitai review |
Rate Limit Exceeded
|
|
@opencode-agent review Review exact current head |
Rate Limit Exceeded
|
|
Reviewed. CHANGELOG + APA 7th doctoring for User-Agent pin, exact-head review proof before skipping cross-repo status, and fail-closed Strix outage. Local suite 976 passed x2. Auto-merge armed. |
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
56dbb09ec79e2d4bb2df3ef6e84edb57ecf5783e. - 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:
- Bandit (Python SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505440204)
- Close Empty PR/close-empty: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281675/job/94505075547)
- CodeQL PR/Detect CodeQL languages: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281490/job/94505075022)
- Detect CodeQL languages check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281490/job/94505075022)
- Detect Python check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505075009)
- OSV-Scanner PR/osv-scan / osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717282211/job/94505077927)
- Python 3.10 compatibility contract check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281517/job/94505075231)
- Python 3.14 full quality gate check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281517/job/94505075229)
- Python Security/Bandit (Python SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505440204)
- Python Security/Detect Python: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505075009)
- Python Security/pip-audit (Python dependency audit): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505439669)
- SAST Semgrep/Semgrep (multi-language SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281567/job/94505075405)
- SBOM Generation/generate-sbom: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281497/job/94505075128)
- Scorecard PR/Scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281508/job/94505075267)
- Scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281508/job/94505075267)
- Secret Scan/gitleaks (secret scan): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281502/job/94505074959)
- Security Scan/dependency-review: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075237)
- Security Scan/osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075270)
- Security Scan/scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075245)
- Security Scan/trivy-fs: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075186)
- Semgrep (multi-language SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281567/job/94505075405)
- Strix Changed Path Quality CI/exact-head-path-policy: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281548/job/94505075437)
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281619/job/94614148699)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281619/job/94614148699)
- Trusted uv Materializer Quality CI/Python 3.10 compatibility contract: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281517/job/94505075231)
- Trusted uv Materializer Quality CI/Python 3.14 full quality gate: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281517/job/94505075229)
- close-empty check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281675/job/94505075547)
- coverage-source-tree check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281589/job/94505457265)
- dependency-review check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075237)
- exact-head-path-policy check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281548/job/94505075437)
- generate-sbom check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281497/job/94505075128)
- gitleaks (secret scan) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281502/job/94505074959)
- osv-scan / osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717282211/job/94505077927)
- osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075270)
- pip-audit (Python dependency audit) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281512/job/94505439669)
- required-workflow-bootstrap check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281589/job/94505075947)
- scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075245)
- trivy-fs check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31717281509/job/94505075186)
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["Changed file (2 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (2 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: cross-repo-opencode-evidence.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: cross-repo-opencode-evidence.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script: materialize_base_python_requirements.py"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script: materialize_base_python_requirements.py"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (5 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (5 files)"]
R5 --> V5["targeted test run"]
OpenCode Review Overview
|
|
@coderabbitai review current head a0b48d2, including the trusted uv bootstrap, exact-head formal-review authority, and bounded Strix sandbox-scope guidance. |
|
Updated the exact-head Strix path-policy contract after the PR intentionally changed the required merge scheduler to cancel-in-progress: false. The assertion now checks the documented required-check behavior: avoid cancelled conclusions remaining in the rollup. Exact-head commit: 2d267d4847b49e0c7d5e2e3d294f0a687bfc30e1 |
There was a problem hiding this comment.
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
DIRTYfor this pull request. - Root cause: Branch
codex/fix-cross-repo-opencode-evidencecannot be merged cleanly intomain; the changed-file flow below shows which review/runtime path is blocked by the conflict. - Fix: Merge or rebase the latest
mainintocodex/fix-cross-repo-opencode-evidence, resolve conflict markers in the PR branch, rerun the focused checks, and push the same branch. - Repair commands:
gh pr checkout 939 --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:codex/fix-cross-repo-opencode-evidence
# rebase path only: git push --force-with-lease origin HEAD:codex/fix-cross-repo-opencode-evidence- 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: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> Conflict["Merge conflict blocks this path"]
Conflict --> V2["required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> Conflict["Merge conflict blocks this path"]
Conflict --> V3["docs review"]
Evidence --> S4["CI script (2 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> Conflict["Merge conflict blocks this path"]
Conflict --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (6 files)"]
S5 --> I5["regression suite"]
I5 --> Conflict["Merge conflict blocks this path"]
Conflict --> V5["targeted test run"]
- Result: REQUEST_CHANGES
- Reason: mergeStateStatus is
DIRTY; mergeable isCONFLICTING. - Head SHA:
2d267d48ab78b0cf8621604ff49839b6f795e610 - Workflow run: 32681932642
- 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: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> Conflict["Merge conflict blocks this path"]
Conflict --> V2["required checks"]
Evidence --> S3["Docs (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> Conflict["Merge conflict blocks this path"]
Conflict --> V3["docs review"]
Evidence --> S4["CI script (2 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> Conflict["Merge conflict blocks this path"]
Conflict --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (6 files)"]
S5 --> I5["regression suite"]
I5 --> Conflict["Merge conflict blocks this path"]
Conflict --> V5["targeted test run"]
|
Fresh downstream reproduction for this PR’s bounded Strix dependency/context-closure boundary — ScopeWeave required Strix run Please use this as another RED acceptance fixture for the same class already documented here from Inkspan: a changed-file-only scan must not convert an omitted unchanged runtime dependency into authoritative source judgment. Smallest acceptable outcome remains bounded authenticated repository-local dependency/context closure sufficient to execute/validate the changed surface, or an explicit context-insufficient/abstain non-passing state. Preserve exact-head provenance, fail-closed behavior, and bounded scope; do not synthesize a clean result or broaden to an unbounded checkout. After owner repair integrates, rerun the unchanged ScopeWeave #602 head (or its then-current descendant) and require the Strix evidence to include the runtime dependency context before treating the scan as authoritative. |
|
Triage (2026-09-02): base history is orphaned, not a resolvable merge conflict This PR's base commit
Given this PR's own scope is already large (cross-repo OpenCode evidence handling, trusted uv materialization, requirements-lock discovery, bounded Strix scope, plus three separate downstream Inkspan contradiction writeups), and it explicitly documents dependency ordering against #933 and #1009, I'm not attempting a mechanical rebuild here — that's exactly the kind of large design decision step 4 says to flag rather than guess through. Next action (needs a human/design call): this needs to be re-cut from current Generated by Claude Code |
|
Retraction — the "main history splice" diagnosis was wrong. An earlier comment on this PR claimed Root cause: the analysis was run from a shallow git clone in the analysis sandbox ( This PR should be triaged the ordinary way: fetch a full (non-shallow) clone, Apologies for the incorrect guidance. See #1722 for the corrected writeup. Generated by Claude Code |
Merge-conflict triage: main has already independently shipped an equivalent/superset mechanism for part of this PR's scopeAttempted the standard Sampled the
This is architecture-level divergence, not a text collision: reconciling requires deciding whether this PR's own retry/classification contribution is now redundant with main's already-shipped version, needs to be composed with it, or whether main's version should absorb anything this PR still adds beyond it (e.g. this PR's requirements-lock discovery and the three documented Inkspan #197/#246/#141 downstream-evidence-contradiction fixes, which are unrelated to the Strix retry mechanism and may still be this PR's real remaining contribution). Guessing a text-level resolution on a required security gate risks silently dropping either side's fail-closed behavior. Per this repo's own standard for this exact situation (see Related note left on Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com Generated by Claude Code |
Resolved 7 conflicting files against current main. - CHANGELOG.md: kept both sides' distinct additions. - opencode-review.yml: took main's evolved job-level concurrency design (needs: chains, ubuntu-24.04, permissions block, the documented cancel-in-progress deadlock fix from 2026-09-03) over this branch's much older, unscoped runs-on: ubuntu-latest jobs with no dependency chain. - strix.yml: took main's more complete backend/model-behavior-error classifier (checks both backend_unavailable_signal and model_behavior_error_signal, excludes reported_vulnerability_signal, scopes classification to the tail after any 'allowing pipeline continuation' marker) over this branch's simpler, narrower classifier. - strix_quick_gate.sh: merged additively -- kept both this branch's STRIX_CHILD_INSTRUCTION (PR-scope instruction) support AND main's STRIX_SCAN_WORKING_DIR isolation (keeps scanner state out of the untrusted scan target); both features are independent and compose. - test_pr_review_autofix_nvidia_nim_contract.py: recomputed REVIEW_DISPATCH_BLOB_SHA against the post-merge opencode-review-dispatch.yml (auto-merged cleanly; verified matching main's job/step topology first). - test_required_workflow_queue_contract.py: took main's assertions matching the merged strix.yml classifier; separately found and removed one HEAD-only test (test_opencode_bootstrap_required_checks_do_not_serialize_runner_waits) asserting "needs: not in jobs" -- a design main has since deliberately reversed (the documented concurrency-deadlock fix requires the needs: chain). - test_strix_nvidia_nim_not_found_fallback.py: took main's fully-updated version entire, since every conflict hunk here tested the same superseded classifier logic resolved above, and a method-name diff confirmed HEAD's 3 unique tests either test a superseded model-routing scheme or assert the literal opposite of the merged classifier's intended behavior. Independently confirmed (via a from-scratch git worktree of unmodified origin/main) that scripts/ci/test_strix_quick_gate.sh has 10 pre-existing, unrelated FAILs from #1803's facade/core scheduler split leaving several assertions pointed at the now-98-line facade file instead of pr_review_merge_scheduler_core.py -- identical FAIL set on this merged tree and on clean main, confirming this PR neither causes nor worsens it. Flagged separately for a dedicated fix. Verified post-merge: coverage run -m pytest tests -q (2780 passed, 1 skipped, 21 subtests), coverage report --fail-under=100 (100%), interrogate (100%). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Resolved the merge conflict against current `main` (previous CHANGES_REQUESTED was `mergeStateStatus: DIRTY` only). New head `4e3bfba5` merges cleanly — 7 files had real content conflicts. Key decisions: took main's evolved `opencode-review.yml` job-level concurrency design (needs: chains, the documented 2026-09-03 deadlock fix) and main's more complete Strix backend/model-behavior-error classifier over this branch's much older, superseded versions of both. Merged `strix_quick_gate.sh` additively — this branch's `STRIX_CHILD_INSTRUCTION` (PR-scope instruction) support and main's `STRIX_SCAN_WORKING_DIR` isolation are independent features that both needed to survive. Found and removed one stale HEAD-only test asserting a `needs:`-chain design main has since deliberately reversed for the documented concurrency fix, and took main's fully-updated version of `test_strix_nvidia_nim_not_found_fallback.py` since every conflict there tested the same superseded classifier logic. Also found, independently confirmed (against a from-scratch clean `origin/main` worktree), and separately flagged (not fixed here — out of this PR's scope): `scripts/ci/test_strix_quick_gate.sh` has 10 pre-existing FAILs left over from the #1803 facade/core scheduler split, with several assertions still pointed at the now-thin `pr_review_merge_scheduler.py` facade instead of `pr_review_merge_scheduler_core.py`. Identical FAIL set on this merged tree and on clean main — confirms this PR neither causes nor worsens it. Post-merge verification: `coverage run -m pytest tests -q` → 2780 passed, 1 skipped, 21 subtests; `coverage report --fail-under=100` → 100%; `interrogate` → 100%. 🤖 Generated with Claude Code |
|
Fresh downstream coverage-evidence owner-path evidence from
Owner acceptance for the central lane: reproduce with an R package whose declared package imports are not present in the source-only review sandbox; classify missing unchanged dependency/runtime closure separately from a source test failure; materialize only a bounded authenticated dependency environment or emit a typed non-passing/deferred evidence state that cannot be mistaken for product test failure. Keep exact-head binding and fail closed—do not synthesize PASS from repository CI, install mutable sibling source, broaden network access, or weaken the approval prerequisite. After protected integration, rerun unchanged |
|
Fleet read-only evidence for the central workflow owner; no Fresh cross-repository observation shows a broad required-check queue, so this is now a work-conservation/runner-admission acceptance item rather than a lane-local wait:
The xtrm specimen also exposes a concrete duplicate-trigger candidate rather than just aggregate queue pressure: protected This does not by itself prove that the organization-wide 60-job ceiling is the cause. Please diagnose central admission/runner/concurrency telemetry before changing workflow semantics. Exact owner acceptance:
Current #939 head observed by fleet is |
|
Fresh downstream exact-head evidence to feed the central review/re-dispatch owner path:
Current Owner acceptance:
I left |
|
Fleet read-only owner-path evidence — do not treat this as a leaf-source failure. Downstream target: After a real source/test/docs descendant, every newly materialized exact-head hosted gate remained non-terminal on a fresh reread: tests Owner RED: an authenticated, mergeable consumer exact head can materialize all required runs yet obtain no terminal exact-head build/security evidence, so repository-local source correctness cannot advance to protected merge/release evidence. Owner GREEN acceptance: on the unchanged target SHA above, central scheduling/materialization must progress through runner assignment and exact checkout to terminal results (or a typed fail-closed infrastructure conclusion identifying the causal control-plane limitation). Preserve required checks and exact-head provenance; do not solve this with leaf no-op commits, blind reruns, gate weakening, synthetic PASS, or provider/model fallback. If the current central branch has intervened, adopt it and prove the repair with the same immutable downstream SHA before claiming the queue class fixed. |
Blocked on a policy contradiction, not a merge mechanic — not resolving it unilaterallyThis PR is The contradiction
Both sides carry contract tests asserting their version — Both failure modes are real, and today's measurements confirm bothThis is what stopped me, because the day's evidence supports each side:
Why I am not just picking oneResolving toward The likely correct answer is neither as written: cancel to protect the queue and stop a cancelled required conclusion from persisting as a false red. That is a change to the gate's semantics, not a conflict resolution. What would unblock thisA direction on one question: was the cancelled-conclusion cost accepted when the conditional landed on The other four conflicts here are mechanical and I will take them with whichever direction is chosen — including a One methodology noteI picked this PR because it measured as small: 5 conflicts, 76 conflicted lines, zero unresolved review threads. Line count turned out to be a poor proxy for difficulty — the smallest hunk in the set was the one carrying a policy decision, while a 2,900-line conflict elsewhere was mostly mechanical. Worth remembering when triaging conflicts by size. Generated by Claude Code |
Five conflicts. Main's side taken throughout, because this branch's central change — `cancel-in-progress: false` on the merge scheduler — is against a file main has since rewritten and a design main deliberately replaced: merge-base 07d9ec2 (2026-09-04) main's delta to .github/workflows/pr-review-merge-scheduler.yml: +36 / -785 the conditional came from 26cfc33, "ci(scheduler): stop required-check completion fanout" (#1840) This branch's rationale — a CANCELLED required `scan-pr-queue` stays red in the rollup after a later same-head success — is real, but #1840 is main's answer to that class and it is the newer one. The matching pins in `scripts/ci/test_strix_quick_gate.sh` and `tests/test_opencode_agent_contract.py` follow the same choice. `tests/test_required_workflow_queue_contract.py` also went to main's side: this branch's `test_close_empty_pr_metadata_lookup_retries_and_fails_open` reads `.github/workflows/close-empty-pr.yml`, which main deleted after moving that cleanup into the scheduler's existing metadata-only job — the exact change main's replacement test records. REVIEW_DISPATCH_BLOB_SHA recomputed against the merged dispatch workflow: c03c5ae… Two repairs the conflict markers did not surface: - `tests/test_opencode_agent_contract.py` — four assertions referencing `concurrency_match` auto-merged in from this branch while the block that defined that name went to main's side, leaving undefined names (caught by `ruff --select F821`). Main's version of that test ends before them, so they were removed with it. - `tests/test_required_workflow_queue_contract.py` — the automatic merge built a chimera of `test_merge_scheduler_uses_native_auto_merge_after_required_checks`: main's `def` line with this branch's body asserting `cancel-in-progress: false`. The branch does not contain that test at all (it renamed it), so no conflict was raised. Restored main's function verbatim. Verified against this branch's unmerged head, comparing failure names rather than counts — which mattered here, since a first pass showed 1 failed on both sides while having swapped which test failed: unmerged head 1 failed, 2780 passed after merge 0 failed, 2897 passed introduced: 0 fixed: 1 (test_opencode_bootstrap_required_checks_do_not_serialize_runner_waits) coverage 100%, interrogate 100%, `ruff check --select F821` clean, zero conflict markers. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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
0db992904dd4be91e1faae01bab3a6ff8ba01e3d. - 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:
- CodeQL PR/CodeQL compatibility analysis (actions): FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/33999853078/job/101403887252)
- CodeQL PR/CodeQL compatibility analysis (python): FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/33999853078/job/101403887259)
- CodeQL compatibility analysis (actions) check run: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/33999853078/job/101403887252)
- CodeQL compatibility analysis (python) check run: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/33999853078/job/101403887259)
- Required Noema Review/noema-review: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/33999851963/job/101403962593)
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/33999851983/job/101403703229)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/33999851983/job/101403703229)
- noema-review check run: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/33999851963/job/101403962593)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: opencode-review-dispatch.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: opencode-review-dispatch.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Workflow: strix.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: strix.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Repository file: CHANGELOG.md"]
S3 --> I3["repository behavior"]
I3 --> R3["Review risk: Repository file: CHANGELOG.md"]
R3 --> V3["required checks"]
Evidence --> S4["Docs: base-requirements-lock-discovery.md (3 files)"]
S4 --> I4["operator or user guidance"]
I4 --> R4["Review risk: Docs: base-requirements-lock-discovery.md (3 files)"]
R4 --> V4["docs review"]
Evidence --> S5["CI script: strix_quick_gate.sh"]
S5 --> I5["review and security gate shell path"]
I5 --> R5["Review risk: CI script: strix_quick_gate.sh"]
R5 --> V5["bash -n plus Strix self-test"]
Evidence --> S6["CI script: test_strix_quick_gate.sh"]
S6 --> I6["review and security gate shell path"]
I6 --> R6["Review risk: CI script: test_strix_quick_gate.sh"]
R6 --> V6["bash -n plus Strix self-test"]
Evidence --> S7["Test: test_materialize_base_python_requirement_paths.py (4 files)"]
S7 --> I7["regression suite"]
I7 --> R7["Review risk: Test: test_materialize_base_python_requirement_paths.py (4 files)"]
R7 --> V7["targeted test run"]
Summary
This PR repairs central cross-repository review evidence without weakening a gate.
requirements*.txtlocks and direct.txtchildren of repository-relativerequirements/directories from the authenticated exact base commit while keeping lock validation separate from path eligibility.Existing test-first evidence
31784776654established the bounded-scope contract and passed the focused/complete central harness after repair.31787913977established the missing requirements-lock paths before repair and then passed focused validation.Downstream contradiction 1 — Inkspan #197: omitted repository-local dependency became a synthetic HIGH
Exact downstream evidence:
ContextualWisdomLab/inkspan#197exact target headb13209ff9832c6ac0c8239b29e12720a9895eab4;31906069281, attempt 2, job95151082222;office/src/inkspan_office/cli.py;Missing Safe Renderer Component Leading to Potential Office Document Rendering Vulnerabilities;ModuleNotFoundError: No module named 'inkspan_office.safe_renderer'because the bounded workspace did not contain that unchanged dependency;office/src/inkspan_office/safe_renderer.py; repository CI31906069634, Security Scan31906069670, and SAST Semgrep31906069692all succeeded.This is a central evidence contradiction: a deliberately omitted unchanged dependency was converted into a source vulnerability. Repair acceptance is a bounded trusted repository-local dependency closure from authenticated source identity, or an explicit context-insufficiency/abstention classification when scope omission prevents source-backed judgment. Do not broaden to an unbounded checkout, execute target code to discover imports, synthesize a clean result, or weaken the required gate. Add a regression shaped like
cli.py -> .safe_rendererand preserve exact-head/source provenance.Downstream contradiction 2 — Inkspan #246: scanner invented host authorization authority
Exact downstream evidence:
ContextualWisdomLab/inkspan#246predecessor target head9eebccbd95008d1ac25fec7bd730d92654d3cf07;31843901859, job94906388922;office/src/inkspan_office/safe_renderer.py;Path Traversal in write_office_document Function;base_directoryparameter.That proposed invariant conflicts with Inkspan's accepted authority boundary:
write_office_document()publishes to a caller-selected path while the embedding host owns directory authorization, tenant path isolation, quotas, retention, encryption, and distribution. Central acceptance is to provide bounded authenticated authority/context when available or abstain/classify context insufficiency when exploitability depends on an authorization boundary absent from the scanned component. Preserve detection of genuine symlink/race/extension/publication failures; do not fabricate a host policy, mutate product code to satisfy scanner-authored authority, synthesize a clean result, or weaken Strix.Downstream contradiction 3 — Inkspan #141: delegated DOCX hyperlink validation was omitted and reported as missing
Exact downstream evidence:
ContextualWisdomLab/inkspan#141exact target headd1148b4980c689e1a1a0fb6e7dc092f17ac60225;31872469049, Strix job94983150711;9244047394, digestsha256:d8252393e302cccf568d57b27bdffd7e6c86cfc55c3f10c3b3f34c0ef0d5bfbf;Missing DOCX Input Validation in Inkspan Office Renderer Leading to Potential SSRF and Data Exfiltration;safe_renderer.pylacked DOCX-specific rich-runhrefvalidation and proposed duplicating a DOCX validator in that facade;safe_renderer.pydelegates deterministic rendering torenderer.render_office_document()after facade-level cross-format safety checks;renderer.pyalready implements_validate_docx_hyperlink_target()with a 4096-character ceiling, printable-ASCII/backslash rejection, strict absolute HTTP(S) scheme/host checks, credential rejection, and invokes it from_add_docx_rich_paragraph()before creating the external relationship;31872470055, Security Scan31872470056, and SAST Semgrep31872470050all succeeded on that exact head.This is the same dependency-closure failure class as #197, but with a delegated security invariant rather than a missing import. The bounded workspace omitted the unchanged module that actually owns the validation, then the model interpreted omitted dependency context as missing product validation.
Central acceptance for this class:
safe_renderer.render_office_document -> renderer._render_docx -> _add_docx_rich_paragraph -> _validate_docx_hyperlink_target;Until this exact central contradiction is repaired and proven by downstream reruns, the affected historical Strix failures remain non-passing evidence but are not source-backed Inkspan vulnerabilities.
Current exact-head evidence
Current exact head remains
6213f1e9c64186c08cffb6df8cad1b3c6f47c2a6. Previous prose naming predecessor38cb3b9c4dd9febc475ecdc2f71c0c354032be5cas current is superseded.Fresh exact-head observations previously established Security Scan, OSV-Scanner PR, Hourly NVIDIA NIM Review Repair, Strix Changed Path Quality CI, Scorecard PR, SAST Semgrep, Secret Scan, Trusted uv Materializer Quality CI, and SBOM Generation success. Python Security and CodeQL PR were still queued at that observation and therefore non-passing. Formal review state included one current APPROVED review from
cursor; older predecessor review evidence is not transferred.Merge boundary
Live repository rules require two approving reviews, stale-review dismissal after push, latest-push approval by someone other than the pusher, and review-thread resolution. Merge only after the unchanged current head has every applicable exact-head workflow terminal-success, two qualifying independent approvals satisfying the latest-push condition, and no unresolved review thread. Do not push merely to retrigger approval, transfer predecessor evidence, weaken policy, or use administrator bypass.
Summary by CodeRabbit
버그 수정
개선
문서