Skip to content

fix(scheduler): require approved aggregate review state - #937

Closed
seonghobae wants to merge 22 commits into
mainfrom
codex/aggregate-review-merge-gate
Closed

fix(scheduler): require approved aggregate review state#937
seonghobae wants to merge 22 commits into
mainfrom
codex/aggregate-review-merge-gate

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary\n- block direct merge and auto-merge unless GitHub aggregate reviewDecision is APPROVED for the same current-head OpenCode approval\n- disable an already queued auto-merge when aggregate review evidence is REVIEW_REQUIRED or CHANGES_REQUESTED\n- preserve review/security dispatch for PRs that have not reached merge readiness\n- add scheduler self-test and pytest coverage for both unsafe aggregate states\n\n## Validation\n- python3 scripts/ci/pr_review_merge_scheduler.py --self-test\n- uvx --from pytest pytest -q tests/test_pr_review_merge_scheduler.py (112 passed)\n- python3 -m py_compile scripts/ci/pr_review_merge_scheduler.py tests/test_pr_review_merge_scheduler.py\n\n## Related\n- https://github.com/ContextualWisdomLab/contextual-orchestrator/pull/109\n- https://github.com/ContextualWisdomLab/contextual-orchestrator/blob/d5122b2/docs/planning/adrs/0004-pr-review-merge-loop.md

Summary by CodeRabbit

  • 버그 수정

    • 현재 커밋에 연결된 체크 결과만 병합 판단에 반영합니다.
    • 오래된 체크, 실행 중인 체크 또는 누락된 검증 증거가 있으면 병합을 차단합니다.
    • 전체 리뷰 승인이 아니면 병합을 진행하지 않고 자동 병합도 비활성화합니다.
    • Strix 및 공급자 장애로 검증이 완료되지 않으면 중립 처리 대신 실패로 표시합니다.
  • 개선 사항

    • 환경에 관계없이 명령 실행 시간 제한과 프로세스 종료를 안정적으로 처리합니다.
    • 보안 검증 결과의 완료 상태와 대상 커밋 정보를 확인합니다.
  • 테스트

    • 리뷰 상태, 체크 커밋, 실행 중 검사 및 Strix 검증 누락 시나리오를 보강했습니다.
    • 다양한 환경에서 제한 시간과 프로세스 종료 동작을 검증합니다.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

체크런에 현재 head SHA를 연결하고, 현재 head 체크만 병합 증거로 사용합니다. inspect_pr는 aggregate reviewDecision, 실행 중 체크, Strix 증거를 검증합니다. Strix 장애와 불완전한 증거는 실패로 처리합니다. Portable timeout 실행기를 추가합니다.

Changes

병합 검증과 Strix 게이트

Layer / File(s) Summary
현재 head 체크 증거 판정
scripts/ci/pr_review_merge_scheduler.py, tests/test_pr_review_merge_scheduler.py
GraphQL 및 REST 체크런의 커밋 SHA를 보존합니다. 현재 head 체크만 증거로 사용합니다. stale 또는 unbound 체크를 차단 상태로 유지합니다.
Aggregate 리뷰 및 병합 게이트
scripts/ci/pr_review_merge_scheduler.py, tests/test_pr_review_merge_scheduler.py
inspect_pr가 aggregate reviewDecision, 실행 중 체크, Strix 증거를 검사합니다. 조건이 충족되지 않으면 병합을 차단하고 auto-merge를 비활성화합니다.
Strix fail-closed 처리
.github/workflows/strix.yml, .github/workflows/strix-workflow-contract.yml, scripts/ci/strix_quick_gate.sh, scripts/ci/test_strix_quick_gate.sh, tests/test_required_workflow_queue_contract.py, tests/test_strix_nvidia_nim_not_found_fallback.py, tests/test_strix_workflow_dependency_hashes.py, docs/doctoring/*, docs/org-required-workflow-rollout.md
provider 또는 LLM 장애의 중립 성공 처리를 제거합니다. 현재 head에 연결된 provenance와 evidence를 검증합니다. dependency lock 검증을 추가합니다.
Portable timeout 실행
scripts/ci/portable_timeout.py, scripts/ci/run_opencode_review_model_pool.sh, tests/test_portable_timeout.py, tests/test_opencode_agent_contract.py, tests/test_opencode_model_pool_runner.py, docs/doctoring/strix-quality-timeout-fixtures.md
GNU timeout 대체 실행기를 추가합니다. 프로세스 그룹 신호, 종료 유예, 시간 초과 코드, 실행 오류를 처리합니다.
테스트 환경 검증
tests/test_materialize_base_python_requirements.py
관련 테스트의 캐시를 초기화하고 실행 플랫폼을 Linux x86_64로 고정합니다.

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

Sequence Diagram(s)

sequenceDiagram
  participant GitHub
  participant StrixWorkflow
  participant EvidenceBinding
  participant inspect_pr
  participant MergeScheduler
  GitHub->>StrixWorkflow: 현재 PR head에서 Strix 실행
  StrixWorkflow->>EvidenceBinding: 완료된 run.json과 보고서 검증
  EvidenceBinding->>inspect_pr: head SHA와 evidence provenance 제공
  inspect_pr->>GitHub: aggregate reviewDecision 및 CheckRun 조회
  inspect_pr->>MergeScheduler: 병합 가능 여부 결정
  MergeScheduler->>GitHub: 병합 또는 auto-merge 비활성화
Loading

Possibly related issues

  • ContextualWisdomLab/.github issue 771: aggregate reviewDecision == APPROVED와 현재 head 리뷰 증거를 병합 조건에 반영하는 변경과 직접 연결됩니다.
  • ContextualWisdomLab/.github issue 892: 병합 스케줄러의 head-bound 증거와 Strix fail-closed 게이트를 다룹니다.

Possibly related PRs

Suggested reviewers: opencode-agent

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 51.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 스케줄러가 병합 전에 aggregate review state의 APPROVED 상태를 요구하도록 변경한 핵심 목적을 명확하게 설명합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/aggregate-review-merge-gate

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.

❤️ Share

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

@seonghobae

Copy link
Copy Markdown
Contributor Author

Audit evidence for this scheduler fix: fast-mlsirm PR #742 merged as 933ce6c at 2026-08-11T16:55:05Z while exact head ad5600d had no formal reviews (reviewDecision empty) and required strix was still IN_PROGRESS; fast main protection had required_approving_review_count=0 and enforce_admins=false. This confirms the aggregate-review/in-progress-check gate must be enforced before any merge mutation. No bypass or self-approval is used for this PR.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Trusted-review evidence update: repository_dispatch run 31514989573 targeted exact head dd8f59d and failed closed. The run recorded COVERAGE_EVIDENCE_RESULT=failure, an empty model-pool outcome, and OPENCODE_REVIEW_IDENTITY_UNAVAILABLE; no formal review was published. I will not substitute a GitHub Actions/PAT identity or treat the opencode-review check as approval. The linked contextual ADR records this as a required follow-up; merge remains held until authorized App identity, coverage/model evidence, structured same-head review, aggregate APPROVED, and all required checks are present.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Follow-up pushed at exact head 12e3d1f: added regression coverage for the real fast-mlsirm incident shape reviewDecision="", which must be treated as aggregate state MISSING. Local evidence: 114 scheduler tests passed, scheduler self-test passed, py_compile and diff check passed. The new head still requires a fresh authorized same-head review and structured security evidence; no merge or self-approval.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@tests/test_pr_review_merge_scheduler.py`:
- Around line 4145-4171: Extend
test_inspect_pr_requires_approved_aggregate_review to cover a PR whose
reviewDecision key is absent, distinct from the existing None case. Create the
PR with make_pr, remove the reviewDecision key using pop, and assert that
inspect returns block without auto-merge and disable_auto_merge with auto-merge
enabled, using the expected MISSING reason in both cases.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 03fb4e34-6c75-47a2-957e-3037e2ddf933

📥 Commits

Reviewing files that changed from the base of the PR and between 6eb06cd and 12e3d1f.

📒 Files selected for processing (2)
  • scripts/ci/pr_review_merge_scheduler.py
  • tests/test_pr_review_merge_scheduler.py

Comment thread tests/test_pr_review_merge_scheduler.py
@seonghobae

Copy link
Copy Markdown
Contributor Author

Status follow-up for exact head 12e3d1f: some checks have completed, but required child jobs remain queued and Strix is still in progress; no formal authorized approval is present. Treat queued, in-progress, missing, or unreported evidence as non-passing. Do not merge or enable auto-merge until the exact head has complete required checks, structured same-head Strix evidence, an authorized independent review with aggregate approval, and a final re-fetch immediately before mutation. The OpenCode identity/coverage/model-pool failure recorded earlier remains unresolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head update: 2756cd3 adds the pre-merge guard that blocks an approved head while any status context is queued/in progress and blocks missing same-head Strix evidence, with regression tests. Local scheduler suite: 115 passed, self-test passed; full suite: 964 passed and 18 environment/provider-dependent failures already tracked in the linked ADR. This push is not merge evidence: obtain an authorized independent review, complete exact-head required CI and structured Strix, then re-fetch immediately before any merge mutation. GitHub also reported 5 default-branch vulnerabilities on push; do not dismiss them until Dependabot graph reconciliation is complete.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head update: 5856151 removes the Strix workflow's backend-outage neutral-pass branch. A provider outage or missing/no-report result now exits the required check nonzero and publishes failure/inconclusive status; scheduler tests and workflow contracts enforce this fail-closed boundary. Earlier CI/review/Strix evidence is stale again. Do not merge until this full SHA has authorized independent review, complete required checks, structured same-head Strix evidence, aggregate approval, and a final re-fetch.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@scripts/ci/pr_review_merge_scheduler.py`:
- Around line 1117-1121: Update strix_evidence_state handling in
scripts/ci/pr_review_merge_scheduler.py at lines 1117-1121 so a current-head
Strix CheckRun is treated as completed evidence only when status is COMPLETED
and conclusion is SUCCESS; classify all other conclusions, including None,
NEUTRAL, and SKIPPED, as blocking. Add regression coverage in
tests/test_pr_review_merge_scheduler.py at lines 4220-4252 verifying those
conclusions return block and disable auto-merge.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 09fb5a04-f4af-4c5c-be43-d51cf01be291

📥 Commits

Reviewing files that changed from the base of the PR and between 12e3d1f and 9a05f03.

📒 Files selected for processing (7)
  • .github/workflows/strix.yml
  • scripts/ci/pr_review_merge_scheduler.py
  • scripts/ci/strix_required_workflow_smoke.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_pr_review_merge_scheduler.py
  • tests/test_required_workflow_queue_contract.py
  • tests/test_strix_nvidia_nim_not_found_fallback.py
💤 Files with no reviewable changes (1)
  • scripts/ci/strix_required_workflow_smoke.sh

Comment thread scripts/ci/pr_review_merge_scheduler.py
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head status update: current head is 9a05f03f964133b3d8da4df30baa28c78cdefbee. The scheduler now binds GraphQL CheckRuns through checkSuite.commit.oid and REST fallback through head_sha, and blocks stale/unbound evidence. Targeted scheduler tests: 172 passed; self-test, required-workflow smoke, bash syntax, and diff checks passed. Remote required checks are still queued/in progress/pending, and no authorized APPROVED review exists. No merge or auto-merge will be attempted until current-head checks complete and an authorized review is present.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head status update: current head is 170b98e453292dd0eb63be5ec99160504252ed21. The macOS portability remediation is verified by the central full suite (980 passed, 16 subtests passed), model-pool tests (28 passed), uv/portable-timeout tests (39 passed), shell syntax, and diff checks. Current remote checks are freshly queued after this push; aggregate review is empty and no authorized APPROVED review exists. No merge or auto-merge will be attempted until exact-head checks complete and an authorized review is present.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head update: current head is ed666c7c (full SHA in the PR). Added a regression contract requiring both Strix requirement locks to retain patched aiohttp==3.14.3 and cryptography==50.0.0; central full suite is 981 passed, 16 subtests passed. Current remote checks restarted after this push; aggregate review is empty and no authorized APPROVED review exists. Do not merge or auto-merge until exact-head checks are terminal and an authorized review is present.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head external-status note: current head remains ed666c7c96e1954f6c7c627e690b6080de0b2c27. GitHub Status API still reports the minor GraphQL API Requests incident as monitoring with mitigation reported; this is recorded only as temporal context, not as CI/review evidence or a causal explanation for queued jobs. Current exact-head checks remain terminal-skipped plus queued, aggregate review is empty, and no authorized independent approval exists. No merge or auto-merge will be attempted until exact-head required checks, structured same-head Strix evidence, aggregate approval, independent authorization, and final re-fetch all pass.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head remediation update for 7750253:

  • Previous exact head ed666c7 had two real failures: Python quality tests passed but coverage was 99% because portable_timeout subprocess-only tests did not cover child code and scheduler duplicate/stale branches were untested; Strix smoke used the trusted-base contract and could not find the NVIDIA provider marker in the PR-head workflow.
  • This head adds in-process portable timeout branch tests while retaining subprocess integration tests, covers the scheduler exact-head branches, keeps the Strix workflow fail-closed, and documents the trusted-base smoke compatibility marker. The stale documentation claiming neutral provider-outage success is corrected.
  • Local exact-head evidence: 985 tests passed, 16 subtests passed; coverage report 100% statements and branches; trusted Strix required-workflow smoke passed; Python compile and Bash syntax checks passed.
  • Remote merge remains prohibited until all required checks are terminal and successful, aggregate review is APPROVED, an independent authorized current-head approval exists, structured same-head Strix evidence is present, and the final re-fetch confirms every SHA. No bypass or self-approval is used.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

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

Inline comments:
In `@scripts/ci/portable_timeout.py`:
- Around line 17-40: Add concise docstrings to _seconds, _signal_process_group,
_terminate, and main documenting their inputs, return or exit status, and signal
behavior. Keep the existing implementations unchanged, and ensure the new
scripts/ci helper code satisfies the required docstring coverage.

In `@scripts/ci/run_opencode_review_model_pool.sh`:
- Line 490: Update the background execution around run_with_timeout so $!
captures the actual timeout launcher PID rather than the shell subshell created
for the function. Separate the launcher path for timeout, gtimeout, or
portable_timeout.py, and update the cleanup at the opencode_pid termination
point to terminate the launcher's entire process group, ensuring child opencode
processes also stop.

In `@tests/test_pr_review_merge_scheduler.py`:
- Around line 1675-1705: Update the equal_timestamp_duplicates fixture so both
CheckRun nodes have the same startedAt value, while keeping the CANCELLED
CheckRun as the second node. Preserve the existing assertion verifying that
sched.failed_status_checks selects “scan-pr-queue”.

In `@tests/test_strix_workflow_dependency_hashes.py`:
- Around line 44-52: Update the docstring of
test_strix_requirement_locks_keep_dependabot_patch_floors to describe the actual
exact-pin contract: each Strix lock must pin every patched dependency exactly
once to its specified version, rather than merely meeting a minimum
patched-version floor.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 74c7863f-cca4-4608-8460-d718be7b3655

📥 Commits

Reviewing files that changed from the base of the PR and between 9a05f03 and 7750253.

📒 Files selected for processing (11)
  • .github/workflows/strix.yml
  • docs/doctoring/strix-nvidia-nim-not-found-fallback.md
  • docs/doctoring/strix-quality-timeout-fixtures.md
  • scripts/ci/portable_timeout.py
  • scripts/ci/run_opencode_review_model_pool.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_materialize_base_python_requirements.py
  • tests/test_opencode_agent_contract.py
  • tests/test_portable_timeout.py
  • tests/test_pr_review_merge_scheduler.py
  • tests/test_strix_workflow_dependency_hashes.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/strix.yml
  • scripts/ci/test_strix_quick_gate.sh

Comment thread scripts/ci/portable_timeout.py
Comment thread scripts/ci/run_opencode_review_model_pool.sh Outdated
Comment thread tests/test_pr_review_merge_scheduler.py Outdated
Comment thread tests/test_strix_workflow_dependency_hashes.py
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head protection follow-up (2026-08-12 Asia/Seoul):

  • PR fix(scheduler): require approved aggregate review state #937 remains at head 7750253; no source push occurred.
  • The central repository local remediation evidence remains: 985 tests and 16 subtests passed, 100 percent statement and branch coverage, Strix required-workflow smoke passed, Python compile and shell syntax checks passed.
  • Protected central main was re-read and hardened without changing required check names: required_approving_review_count=1, enforce_admins=true, stale-review dismissal and last-push approval remain enabled, force pushes/deletions remain disabled.
  • Current remote evidence is still non-terminal: aggregate reviewDecision is empty, no independent current-head approval is present, and required/related checks remain queued or otherwise incomplete.

No merge is authorized until every required check concludes successfully on this exact SHA, aggregate reviewDecision is APPROVED, an independent current-head approval exists, structured same-head Strix evidence is present, and the final protection/check/review re-fetch passes. No self-approval, bypass, or force push.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head status for central .github PR #937: current head 249ba9864eaa2309f40f947ba61fd1d126d31af. The six CodeRabbit findings from the previous central head were fixed; replies were posted and all review threads are now resolved. Local evidence: 991 tests and 16 subtests passed, 100 percent statement and branch coverage, Strix required-workflow smoke passed, Python compile and Bash syntax passed. Branch protection remains strict with one required approval, enforce_admins true, force pushes/deletions false. Remote exact-head scan-pr-queue and strix are still queued, other required checks remain pending, aggregate reviewDecision is REVIEW_REQUIRED, and no independent authorized approval exists. No merge or auto-merge will be attempted; re-fetch exact head immediately before any future mutation.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Perform a fresh read-only semantic review of exact current head 249ba9864e9aa2309f40f947ba61fd1d126d31af against independently resolved live protected main 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. The branch is Ready, mergeable, one commit ahead and zero behind; all observed exact-head quality/security/supply-chain workflows are terminal-success, the current CodeRabbit findings were addressed, and zero review threads remain unresolved.

Focus on aggregate reviewDecision == APPROVED enforcement, missing/null GraphQL fields, current-head independent-review identity, portable timeout launcher/process-tree termination, fail-closed mutation behavior, and prevention of self/model/status-only approval inference. Do not mutate the branch, self-approve, enable auto-merge, or merge. Model output remains distinct from qualifying independent human approval.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In @.github/workflows/strix-workflow-contract.yml:
- Around line 33-39: The Strix workflow contract currently trusts marker strings
and must instead validate the complete workflow’s immutable digest or a
structured policy that proves the security gate is reachable and fail-closed.
Update `.github/workflows/strix-workflow-contract.yml` lines 33-39 accordingly,
and add an adversarial regression test in `scripts/ci/test_strix_quick_gate.sh`
lines 180-186 that rejects required markers appearing only in comments or
unreachable blocks.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4e962388-269c-4d2f-a3ae-514cda9ff330

📥 Commits

Reviewing files that changed from the base of the PR and between ab2a1ae and 8726df1.

📒 Files selected for processing (7)
  • .github/workflows/strix-workflow-contract.yml
  • .github/workflows/strix.yml
  • docs/doctoring/strix-workflow-version-evidence.md
  • docs/org-required-workflow-rollout.md
  • scripts/ci/run_opencode_review_model_pool.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_opencode_model_pool_runner.py

Comment thread .github/workflows/strix-workflow-contract.yml Outdated
@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review the exact current head 8726df1. Inspect the separate data-only Strix workflow contract, base-workflow versus PR-head evidence boundary, provenance validation, fail-closed provider handling, and changed docs/tests. Report actionable findings only; do not treat a check, comment, or status-only result as approval.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@cwl-noema-review

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 67d834f510fe044dd9d53cd4f4b9783353e303bd
  • Workflow run: 31564613829
  • Workflow attempt: 1
  • Gate result: APPROVE (exit 0)

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["Docs (4 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (4 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["CI script (6 files)"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script (6 files)"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test (8 files)"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test (8 files)"]
  R4 --> V4["targeted test run"]
Loading

opencode-agent[bot]
opencode-agent Bot previously approved these changes Aug 12, 2026

@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 bounded evidence and found no blocking issues.

Findings

No blocking findings.

Summary

Approval sufficiency: APPROVE; positive evidence at head 67d834f supports PR intent: .github/workflows/strix.yml fails closed (neutral-skip branch removed; ::error title=Strix evidence incomplete + exit $strix_rc for every non-zero gate exit) and writes PR_HEAD_SHA to $RUNNER_TEMP/strix_scan_head_sha; the new .github/workflows/strix-workflow-contract.yml enforces that policy per PR; pr_review_merge_scheduler.py aggregate reviewDecision APPROVED gating is backed by tests/test_pr_review_merge_scheduler.py (+370 lines). Changed-file evidence inspected: .github/workflows/strix-workflow-contract.yml (full new-file diff), .github/workflows/strix.yml (gate hunk), tests/test_portable_timeout.py (verbatim CodeGraph source). Verification posture: Failed GitHub Check evidence lists no completed failed checks at head; Other unresolved review thread evidence is empty; Coverage execution evidence PASS. Linter/static: lint_commands cover only hadolint on an untouched Dockerfile; bash -n/actionlint appear only in historical comments, not current-head receipts. TDD/regression: tests assert exact exit codes 2/124/127/143, completion passthrough (status 0, stdout ok), duration validation, signal forwarding, and the fail-closed workflow policy; scripts/ci/test_strix_quick_gate.sh extended (+164). Coverage: Coverage execution evidence Result PASS - supported repository test suites passed (coverage_commands require --fail-under=100). Docstring coverage: Coverage execution evidence - configured repository docstring gates passed or advisory (interrogate --fail-under=100). DAG: Mermaid flowchart (head flow) in the body maps strix.yml gate step -> strix_quick_gate.sh exit -> fail-closed ::error exit -> report collect/validate/upload with head binding -> pr_review_merge_scheduler.py aggregate APPROVED gate -> merge decision, with contract-workflow and test-verification edges. PoC/execution: no OPENCODE_EXECUTION_RECEIPT lines in bounded evidence; non-web repo, no browser E2E applies; behavioral evidence is Coverage PASS plus verbatim source/diff traces. DDD/domain: scheduler merge-gate domain consistent with intent - aggregate reviewDecision APPROVED bound to current-head evidence; queued auto-merge disabled on REVIEW_REQUIRED/CHANGES_REQUESTED; no domain-model drift observed. CDD/context: workflow contract codifies the fail-closed Strix policy at the PR/head boundary. Similar issues: no similar-issue or PR-precedent evidence supplied. Claim/concept check: PR body claims (block merge without aggregate APPROVED; fail closed on missing security evidence; preserve review/security dispatch pre-merge-readiness) match diff, tests, and docs updated in-tree (docs/doctoring/strix-workflow-version-evidence.md, docs/org-required-workflow-rollout.md). Standards search: no external standards material in bounded evidence; workflow runtimes follow workflow_versions evidence (strix.yml python 3.13); no Node 24/Python 3.14 rollback issue raised. Compatibility/convention: new identifiers are multi-word idiomatic names (portable_timeout.py, strix-workflow-contract.yml, workflow-contract job, strix_scan_head_sha, _signal_process_group); no single-word/reserved identifiers and no new DB/API objects. Breaking-change/backcompat: fail-closed required-check semantics is the intended contract change documented in docs/org-required-workflow-rollout.md; portable_timeout preserves GNU-timeout CLI semantics (duration parsing, exit 124). Implementation completeness: no placeholder bodies; gate/collect/validate/upload steps and portable_timeout main/_terminate/_signal_process_group are concrete and tested. Performance: contract workflow adds one read-only gh api contents call per PR event; negligible. Developer experience: CI authoring surface - self-validating workflow contract, portable timeout for macOS/Linux parity, and extended smoke suite reduce cross-platform drift and silent-evidence regressions. User experience: non-web interaction surface reviewed - required-check annotations now fail closed (::error title=Strix evidence incomplete) and the scheduler surfaces aggregate reviewDecision state; no web UI. Visual/DOM: no web UI changes; reviewed CLI/workflow/check-annotation output surface instead (web_app_review_requirements empty). Accessibility/i18n: not applicable to CI scripts; docs remain English. Supply-chain/license: no new dependencies (portable_timeout.py stdlib-only; Ruby psych preinstalled on ubuntu-latest); Strix wheel-hash and dependency-floor contracts extended in tests/test_strix_workflow_dependency_hashes.py. Packaging: pyproject.toml pytest/coverage/interrogate contracts present; no unpackaged_source_surfaces flagged. Security/privacy: fail-closed gate removes the missing-evidence neutral-pass downgrade; contract regex-validates HEAD_REPOSITORY and HEAD_SHA before gh api interpolation, uses only contents: read + github.token, and never executes decoded content; Nvidia_nimException marker retained for the trusted smoke contract; no new secrets or sequential-id surfaces.

Approval sufficiency: bounded evidence supplied affirmative approval evidence for changed files, coverage/docstring posture, risk surfaces, and current-head verification; approval is not based merely on the absence of known blockers.
Verification posture: CodeGraph evidence was initialized and bounded current-head evidence reviewed for changed-file evidence including .github/workflows/strix-workflow-contract.yml, .github/workflows/strix.yml, docs/doctoring/strix-nvidia-nim-not-found-fallback.md, docs/doctoring/strix-quality-timeout-fixtures.md, docs/doctoring/strix-workflow-version-evidence.md, and 15 more.
Linter/static: workflow/static review evidence is bounded by the current-head GitHub Checks gate and changed-file evidence.
TDD/regression: coverage execution evidence and focused changed hunks were reviewed from bounded-review-evidence.md.
Coverage: coverage execution evidence reports supported repository test suites passed.
Docstring coverage: coverage execution evidence reports configured repository docstring gates passed or docstring coverage was advisory.
DAG: CodeGraph/source-backed behavior map connects .github/workflows/strix-workflow-contract.yml to the affected review, runtime, or workflow path and required checks.
PoC/execution: coverage-evidence job executed on the current head and reported PASS.
DDD/domain: workflow and repository-governance invariants were reviewed against changed files in bounded evidence.
CDD/context: CodeGraph evidence, changed-file history, and focused hunks were reviewed from bounded-review-evidence.md.
Similar issues: changed-file history evidence was reviewed for comparable local precedents.
Claim/concept check: bounded evidence, repository source, current-head workflow evidence, and, where numeric, scientific, statistical, or literature-backed claims are affected, original-paper/formula evidence and parameter-recovery expectations were used for claims.
Standards search: standards and external-source claims require trusted bounded source evidence prepared outside the isolated model process; no evidence-backed standards blocker is present in bounded evidence.
Compatibility/convention: changed workflow/script conventions, object naming, and reserved-word safety for schema/API/config/code surfaces were checked in bounded evidence.
Breaking-change/backcompat: deployment evidence and changed-file history were checked for backward-compatibility risk.
Performance: changed surfaces were checked for performance risk in bounded evidence.
Developer experience: changed automation, review, test, setup, and maintenance surfaces were checked for helpful or obstructive DX impact in bounded evidence.
User experience: connected user, operator, API, CLI, documentation, review-comment, status-check, rendering, and workflow-reader behavior was checked for contradictions against code, docs, and tests in bounded evidence.
Visual/DOM: deterministic repair does not infer browser runtime execution; source-backed DOM/UI evidence and trusted workflow receipts were reviewed when present, and non-web surfaces used API/CLI/log/docs/workflow evidence instead.
Accessibility/i18n: accessibility, localization, and human-readable text surfaces were checked where UI, CLI, API message, docs, logs, or review text changed.
Supply-chain/license: dependency, package, model, container, and external-tool changes were checked in bounded evidence.
Packaging: package, build, test, lint, and security contracts were checked in bounded evidence.
Security/privacy: workflow-token, review-gate, and repository-automation security/privacy boundaries were checked in bounded evidence.

Adversarial validation

{"status":"passed","probes":[{"path":".github/workflows/strix.yml","line":837,"hypothesis":"The head Strix gate still passes missing security evidence through a backend-unavailability neutral path, so a provider outage yields a green required check.","attack_or_counterexample":"Gate exits 1 with backend-unavailable signals (RateLimitError, RESOURCE_EXHAUSTED, Nvidia_nimException 404) and no vulnerability report - the exact scenario the old code converted to a neutral exit 0.","evidence":"Trusted diff trace at .github/workflows/strix.yml:837: the head hunk deletes the backend_unavailable_signal/reported_vulnerability_signal classification and the neutral exit 0 skip; every non-zero gate exit now reaches echo ::error title=Strix evidence incomplete and exit \"$strix_rc\", so rc=1 backend outages and rc=2 config errors both fail the required check, and PR_HEAD_SHA is bound to the scan via $RUNNER_TEMP/strix_scan_head_sha. Outcome: the neutral-pass path is absent at head; hypothesis falsified. source-line-sha256=f74d540a16a223f5d8744e674937386b56b2f68cfe4717782ca16b13a3c58959","outcome":"falsified"},{"path":"tests/test_portable_timeout.py","line":163,"hypothesis":"portable_timeout.py returns a fabricated or inverted child status, so a timed-out step could pass or a completed step could fail the CI step.","attack_or_counterexample":"Child that finishes instantly (status 0) versus child that exceeds the deadline (kill -> 124); SIGTERM-forward handler; malformed duration/argument input.","evidence":"Verbatim current-head test source at tests/test_portable_timeout.py:163 asserts module.main([\"0.1\", \"0.1\", \"--\", \"echo\"]) == 124 after the deadline kill; the completing-child branch (lines 151-157) asserts return 0 and the subprocess case (lines 40-59) asserts returncode 0 with stdout ok; SIGTERM forwarding asserts SystemExit 143 (lines 144-146); argument/start failures return 2/127 (lines 111-123). Coverage execution evidence (current-head authority) reports PASS - supported repository test suites passed. Outcome: completion, timeout-kill, signal, and argument branches are each asserted to exact exit codes; fabricated-status hypothesis falsified. source-line-sha256=d673315356b60699a70fcc370297c4289fcba9fa83a49e1c5d9c6ca9991b18d2","outcome":"falsified"},{"path":".github/workflows/strix-workflow-contract.yml","line":119,"hypothesis":"The new contract workflow is a decoy: it does not actually reject a strix.yml that restores evidence neutralization or drops the provenance steps.","attack_or_counterexample":"Re-add the neutral marker or remove the Validate Strix report provenance step in a future PR head and observe whether the Ruby validation program passes it.","evidence":"Source trace of the full new-file diff: the Ruby validation program ending at .github/workflows/strix-workflow-contract.yml:119 rejects the neutral marker anywhere in executable workflow source, requires the fail-closed gate fragments (if [ \"$strix_rc\" -eq 0 ]; then, ::error title=Strix evidence incomplete::, exit \"$strix_rc\") in a statically reachable step, requires named Collect/Validate/Upload steps in strict order, and requires nine provenance fragments (scan_stage_head_sha, candidate metadata conflict rejection, completed-successful-run jq selection, non-empty report, evidence-binding.json, report_sha256 digest, completed binding flag, provider fail-closed guard, candidate report path); any absence calls reject! which warns ::error and exits 1, and the head strix.yml hunk confirms all fragments exist. Outcome: restored neutralization or dropped provenance steps would be rejected with exit 1; decoy hypothesis contradicted. source-line-sha256=96b2813274364da4defe0a77f746120c470938b4565fcbcffce9aa71f3167fd2","outcome":"falsified"}],"residual_risk":"Contract enforcement uses exact string fragments and static reachability checks that obfuscated future edits could evade; scheduler gating depends on GitHub aggregate reviewDecision and check-run head-binding semantics; fail-closed Strix means provider outages can temporarily block merges (intended availability tradeoff)."}
  • Result: APPROVE
  • Reason: Fail-closed Strix gate, per-PR workflow contract, scheduler aggregate-review approval gating, and portable-timeout regression tests all match PR intent; no failed checks, no unresolved threads, Coverage execution evidence PASS at head 67d834f.
  • Head SHA: 67d834f510fe044dd9d53cd4f4b9783353e303bd
  • Workflow run: 31564613829
  • Workflow attempt: 1

@opencode-agent
opencode-agent Bot enabled auto-merge (squash) August 12, 2026 06:01

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review

Review exact current head 65d4b0812792a3e1fca4d534cfe2e5b7e4075137 only. All twelve exact-head workflow surfaces are terminal-success and all prior inline findings are resolved. Validate aggregate reviewDecision == APPROVED plus same-head OpenCode approval before merge/auto-merge, auto-merge disablement on missing/review-required/changes-requested evidence, successful completed current-head Strix requirement, immutable Strix provenance binding, structural workflow contract, portable timeout process-group cleanup, and unchanged credentials/protections. Treat every predecessor approval as stale. Review only; do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ContextualWisdomLab/.github"
head="65d4b0812792a3e1fca4d534cfe2e5b7e4075137"

printf '%s\n' '== Checked-out commit =='
git rev-parse HEAD
git status --short
git show -s --format='%H%n%P%n%s' HEAD

printf '%s\n' '== Changed files against PR base =='
git diff --name-status "$(git merge-base HEAD origin/main)" HEAD

printf '%s\n' '== Relevant symbol outlines =='
ast-grep outline scripts/ci/pr_review_merge_scheduler.py --items all --match 'inspect_pr|current_head_check_runs|running_status_checks|rest_check_node|check_run_head_sha' --view expanded || true
ast-grep outline scripts/ci/portable_timeout.py --items all --view expanded || true
ast-grep outline scripts/ci/run_opencode_review_model_pool.sh --items all --view expanded || true

printf '%s\n' '== PR metadata and exact-head review/check evidence =='
gh pr view 937 --repo "$repo" --json number,headRefOid,baseRefOid,reviewDecision,mergeStateStatus,isDraft,reviews,statusCheckRollup,url
gh api "repos/$repo/pulls/937/reviews?per_page=100"
gh api "repos/$repo/commits/$head/check-runs?per_page=100"

printf '%s\n' '== Main protection =='
gh api "repos/$repo/branches/main/protection" || true

Length of output: 201685


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ContextualWisdomLab/.github"
head="65d4b0812792a3e1fca4d534cfe2e5b7e4075137"
base="$(git merge-base HEAD origin/main)"

printf '%s\n' '== Commit and changed files =='
git rev-parse HEAD
git diff --name-only "$base" HEAD

printf '%s\n' '== Scheduler approval and mutation paths =='
rg -n -C 12 \
  'def (inspect_pr|current_head_check_runs|running_status_checks|check_run_head_sha|rest_check_node)|reviewDecision|review_decision|disable.*auto|auto.?merge|enablePullRequestAutoMerge|mergePullRequest|final.*fetch|refetch|OpenCode|opencode' \
  scripts/ci/pr_review_merge_scheduler.py

printf '%s\n' '== Scheduler regression tests =='
rg -n -C 8 \
  'reviewDecision|review_decision|MISSING|REVIEW_REQUIRED|CHANGES_REQUESTED|auto.?merge|OpenCode|opencode|current.?head|in.?progress|Strix|strix' \
  tests/test_pr_review_merge_scheduler.py

printf '%s\n' '== Strix provenance and contract =='
rg -n -C 10 \
  'PR_HEAD_SHA|scan_stage_head_sha|evidence_head_sha|candidate|run\.json|penetration_test_report|evidence-binding|report_sha256|Strix evidence incomplete|exit.*strix_rc' \
  .github/workflows/strix.yml
rg -n -C 10 \
  'reject!|reachable|fail.closed|neutral|provenance|Collect|Validate|Upload|workflow.*digest|Psych|YAML' \
  .github/workflows/strix-workflow-contract.yml
rg -n -C 8 \
  'adversarial|comment|unreachable|workflow-contract|provenance|candidate' \
  scripts/ci/test_strix_quick_gate.sh

printf '%s\n' '== Process-group cleanup and regression tests =='
rg -n -C 12 \
  'process_group|capture_process|signal_captured|signal_process|SIGTERM|SIGKILL|run_with_timeout|portable_timeout' \
  scripts/ci/run_opencode_review_model_pool.sh
rg -n -C 10 \
  'TERM|KILL|process.group|child|overlap|fatal|timeout' \
  tests/test_opencode_model_pool_runner.py tests/test_portable_timeout.py

printf '%s\n' '== Exact-head aggregate decision and reviews =='
gh api graphql -F owner="ContextualWisdomLab" -F name=".github" -F number=937 -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      headRefOid
      reviewDecision
      mergeStateStatus
      isDraft
      reviews(last: 100) {
        nodes {
          state
          submittedAt
          commit { oid }
          author { login __typename }
        }
      }
    }
  }
}' --jq '.data.repository.pullRequest'

Length of output: 202861


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Workflow contract policy =='
nl -ba .github/workflows/strix-workflow-contract.yml | sed -n '33,125p'

printf '%s\n' '== Workflow contract adversarial fixtures =='
nl -ba scripts/ci/test_strix_quick_gate.sh | sed -n '115,230p'

printf '%s\n' '== Scheduler implementation: evidence and mutation =='
rg -n '^(def (inspect_pr|current_head_check_runs|running_status_checks|review_decision|has_current_head|disable_auto_merge|merge_pr)|[[:space:]]*(if |return |disable_auto_merge|merge_pr|enable_auto_merge))' \
  scripts/ci/pr_review_merge_scheduler.py | head -n 300
nl -ba scripts/ci/pr_review_merge_scheduler.py | sed -n '1040,1420p'

printf '%s\n' '== Scheduler tests for aggregate review and final refetch =='
rg -n -C 5 \
  'aggregate|reviewDecision|MISSING|REVIEW_REQUIRED|CHANGES_REQUESTED|final.*fetch|refetch|disable.*auto|current.?head' \
  tests/test_pr_review_merge_scheduler.py | head -n 500

Length of output: 1325


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Workflow contract policy =='
cat -n .github/workflows/strix-workflow-contract.yml | sed -n '33,125p'

printf '%s\n' '== Workflow contract adversarial fixtures =='
cat -n scripts/ci/test_strix_quick_gate.sh | sed -n '115,230p'

printf '%s\n' '== Scheduler implementation symbols =='
rg -n -C 4 \
  '^def (inspect_pr|current_head_check_runs|running_status_checks|review_decision|has_current_head|disable_auto_merge|merge_pr)\b|reviewDecision|review_decision|disable_auto_merge|enable_auto_merge|merge_pr\(' \
  scripts/ci/pr_review_merge_scheduler.py

printf '%s\n' '== Scheduler implementation mutation region =='
cat -n scripts/ci/pr_review_merge_scheduler.py | sed -n '1040,1420p'

printf '%s\n' '== Scheduler tests for aggregate review and final re-fetch =='
rg -n -C 5 \
  'aggregate|reviewDecision|MISSING|REVIEW_REQUIRED|CHANGES_REQUESTED|final.*fetch|refetch|disable.*auto|current.?head' \
  tests/test_pr_review_merge_scheduler.py | head -n 500

Length of output: 78686


@seonghobae I found one blocking issue.

P1 — The Strix workflow contract accepts a fail-open gate.
.github/workflows/strix-workflow-contract.yml Lines 78-84 require only the presence of the strix_rc condition, error message, and exit "$strix_rc" fragments. The contract does not verify that strix_rc remains non-zero after a failed scan.

The accepted fixture in scripts/ci/test_strix_quick_gate.sh Lines 142-147 demonstrates the bypass:

  • It enters the non-zero path.
  • It assigns strix_rc=0.
  • It emits the required error text.
  • It exits with "$strix_rc", which is now success.
  • Lines 166-168 require the contract to accept this fixture.

A PR-head strix.yml can preserve the required fragments while converting incomplete Strix evidence into a successful required check. The contract must reject reassignment or otherwise verify the non-zero failure path semantically. Add an adversarial fixture for this case and require that the policy rejects it.

The scheduler review confirms that reviewDecision != APPROVED blocks direct merge and disables queued auto-merge. Live GitHub state for this exact head is still REVIEW_REQUIRED and BLOCKED. No exact-head qualifying approval was found. Successful check runs are not approval evidence.

Branch-protection settings were not verified because the GitHub integration received HTTP 403 from the branch-protection endpoint. No mutation, approval, auto-merge operation, or merge was performed.


🧠 Learnings used
Learnt from: seonghobae
Repo: ContextualWisdomLab/.github PR: 0
File: :0-0
Timestamp: 2026-08-05T13:44:10.007Z
Learning: For PR `#782`, only successful checks associated with the exact current head are valid merge evidence. Do not treat queued, in-progress, cancelled, predecessor-head, temporary-workflow, or administrative-bypass results as passing evidence. Before a formal approval, verify that the direct security and supply-chain workflows, the permanent hourly NVIDIA NIM contract, current-head reviews, unresolved-thread checks, and an independent approval have completed successfully.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review
@coderabbitai review

Review exact current head 65d4b0812792a3e1fca4d534cfe2e5b7e4075137 against live protected base 6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba. Every prior formal verdict is stale or dismissed. Validate the complete current scope: aggregate reviewDecision == APPROVED as a necessary merge/auto-merge gate; disabling queued auto-merge for missing/review-required/changes-requested aggregate state; current-head successful Strix evidence only; fail-closed Strix report/head provenance; structured reachable workflow-contract validation; portable timeout/process-group cleanup including TERM-ignoring descendants; deterministic duplicate-check ordering; and unchanged reviewer credentials/merge authority. All exact-head quality, security, supply-chain and workflow-contract runs observed are terminal-success, and all inline threads are resolved. Review only; do not mutate, merge, release, or bypass protection.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 34 minutes and 2 seconds before sending another message.

@seonghobae
seonghobae enabled auto-merge (squash) August 12, 2026 10:51

Copy link
Copy Markdown
Contributor Author

Exact-current-head semantic review request for 65d4b0812792a3e1fca4d534cfe2e5b7e4075137 over protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba.

This head is broader than the original aggregate-review slice. Review the complete 31-file current diff, including: aggregate reviewDecision == APPROVED merge gating and auto-merge disarm; current-head CheckRun success/conclusion binding; fail-closed Strix evidence and provenance binding; structured Strix workflow contract; portable timeout and TERM-ignoring child cleanup; exact dependency-lock contracts; trusted uv and mention-router prerequisites. All twelve directly observed exact-head quality/security workflows are terminal-success and all published inline findings are resolved. The prior OpenCode approval is dismissed and bound to an earlier head, so it is non-authorizing.

Keep this exact head unchanged. Do not transfer predecessor approval, synthesize author approval, update the branch, merge, release, neutralize missing security evidence, or weaken protection.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 24 minutes and 25 seconds before sending another message.

Copy link
Copy Markdown
Contributor Author

Closing as a stale, over-broad integration branch superseded by independently reviewable current-main slices.

Fresh comparison of this exact head 65d4b0812792a3e1fca4d534cfe2e5b7e4075137 against canonical approval-policy head #828 33b84e20c97fc30b367bbdbe92c888c51e5aa0ff is diverged (22 commits ahead, 17 behind; merge base is protected main@6eb06cdd08c79a06f7b390069d4ffa49e2eb7dba). This PR changes 31 paths spanning the scheduler, mention routers, trusted dependency materialization, portable timeout/process handling, model-pool routing, Strix execution, required-workflow policy, documentation, and tests. Those are materially separate trust boundaries and cannot share one stale exact-head acceptance claim.

The stated aggregate-review repair is already implemented more narrowly by #828: GitHub reviewDecision == APPROVED, authoritative PR-author identity, exact-current-head OpenCode approval, an independent non-author/non-OpenCode exact-head formal approval, and stale auto-merge disarming. Other bundled slices now have canonical current-main owners, including #840/#938 for mention dispatch and sweeps, #939 for trusted-uv and cross-repository evidence, #942 for the bounded model pool, #933 for Strix provider-tool failover, and #821 for fatal-provider/process-group portability.

Keeping #937 open would duplicate those branches, create conflicting implementations, and permit one slice's checks to obscure another slice's review and operational requirements. No check, review, or approval from this branch transfers to any successor. Preserve this PR as historical RCA only; merge the bounded successors in their dependency order under their own exact-head gates.

@seonghobae seonghobae closed this Aug 12, 2026
auto-merge was automatically disabled August 12, 2026 11:43

Pull request was closed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant