Skip to content

fix(dispatch): skip stale dispatches for closed PRs or superseded heads - #2382

Open
seonghobae wants to merge 8 commits into
mainfrom
fix/dispatch-skip-stale-head
Open

seonghobae wants to merge 8 commits into
mainfrom
fix/dispatch-skip-stale-head

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Current authority — 2026-10-07

Ready / Proposed for review admission at exact head e6eb1eb4564e3fb1f754a91b51161033d7ced1b1. This is not merge authorization.

Ordinary-forward convergence

  • Protected base: main@7554587c2e3106a388998bcad048a3d7121de25e
  • Preserved predecessor: d9e31329e2e0361e904aef3072984ec1b4e076cd
  • Published two-parent convergence commit: ca3fe966c0508a0274be7435ad4642756db2ac49
  • RED contract: d7d82dbf23abd03e9fa2a073053219114934138f
  • GREEN source repair: f7de3e2ce5d7d5e8a4937d39b99856a03624fab4
  • Evidence head: e6eb1eb4564e3fb1f754a91b51161033d7ced1b1
  • Verified exact tree: 645a80c2e9cf9bb4f94cb765b000d14c8d18536a
  • No Force Push, destructive rebase, bypass, close, blind rerun, or synthetic status was used.

Root cause and repair

A moved PR head whose compare result proved strict ancestry was retired before the validator checked the live base SHA/ref and head ref. A payload could therefore combine a genuinely superseded head with unrelated identity drift and exit successfully as stale.

Both CodeQL and OpenCode validators now:

  1. validate the live PR metadata shape and repository boundary;
  2. fail closed on base ref, base SHA, or head-ref disagreement;
  3. only then allow the head-SHA exception when compare proves the dispatched head is a strict ancestor of the live head.

Closed-PR retirement, authorization, lookup-failure, API-lag, divergence, and non-dispatch behavior remain covered. The reviewed OpenCode workflow blob pin is 5e609e0699cedb9aeeb0158d28e66dd4e4da8fca.

Exact-tree verification

  • RED: the two mixed moved-head/base-SHA cases failed because both workflows returned stale success.
  • Focused workflow/shell/blob-pin contracts: 132 passed, 1 skipped.
  • The same focused set with GITHUB_ACTIONS=true: 132 passed, 1 skipped.
  • Final warnings-as-errors repository suite: 5177 passed, 11 skipped, 40 subtests passed.

Hosted evidence and merge hold

Fresh exact-head admission again failed before any executable step was created:

  • Runtime Quality run 37599526918, job 112720207385
  • CodeQL run 37599526923, detect job 112720207358
  • SAST run 37599527089, job 112720208201
  • Python Security run 37599526953, detect job 112720208129
  • Security run 37599527117, gitleaks job 112720208668 and scope job 112720208975

Every failing job reports steps=null and logs_url=null; dependent jobs were skipped. This is fresh exact-head runner/admission evidence, not a source finding, and no blind rerun is justified. There are zero unresolved review threads and zero qualifying approvals.

Ready / Proposed / merge HOLD. Ready admits review; terminal exact-head GREEN Checks, no unresolved actionable review, and a qualifying independent approval remain merge gates. No bypass, auto-merge, or merge is authorized.

Stack note

Open PR #2363 also edits opencode-review-dispatch.yml and its immutable pin. It must be reconciled non-destructively against whichever canonical owner state lands first.

Summary by CodeRabbit

  • 기능 개선
    • 닫힌 PR이나 디스패치 이후 최신 커밋이 추가된 PR의 오래된 CodeQL 및 OpenCode 작업은 오류 대신 안내를 표시하고 성공적으로 건너뜁니다.
    • 오래된 작업에서는 스캔, 커버리지 및 리뷰 단계도 실행되지 않습니다. 변경 사항이 최신인지 확인할 수 없는 경우에는 기존 검증에 따라 처리됩니다.

…tead of failures

A dispatch whose target PR is closed, or whose live head has moved strictly
past the dispatched head, ends validate with a ::notice:: and stale=true;
later jobs are gated on that output so the run concludes success.

A head mismatch alone is not treated as stale: GitHub can briefly serve the
previous head right after a push. Retirement requires the compare API
(repos/{target}/compare/{dispatched}...{live}) to answer status "ahead" with
behind_by 0 and ahead_by >= 1. Behind (API lag), diverged (force-push), or a
failed/malformed compare keeps the original fail-closed head_sha mismatch.

The OpenCode side keeps its EVENT_NAME == repository_dispatch guard because
its authorization and supplied-head binding are nested under that check;
CodeQL triggers only on repository_dispatch and authorizes unconditionally,
so it needs no guard. Tests pin both premises. Draft PRs are not stale.
@coderabbitai

coderabbitai Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 480bdf74-3199-4b53-b742-a1a3459c2820
📥 Commits

Reviewing files that changed from the base of the PR and between d9e3132 and e1257f7.

📒 Files selected for processing (5)
  • .github/workflows/codeql-scan-dispatch.yml
  • .github/workflows/opencode-review-dispatch.yml
  • docs/product-technical-gap-baseline.md
  • tests/test_codeql_scan_dispatch_workflow_contract.py
  • tests/test_pr_review_autofix_nvidia_nim_contract.py

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

CodeQL과 OpenCode dispatch 검증은 PR이 닫혔거나 live head가 dispatched head의 후손임이 확인되면 실행을 stale로 표시합니다. 해당 실행은 성공적으로 종료되며, scan 또는 coverage 및 review 후속 작업은 건너뜁니다. 그 밖의 검증 불일치와 compare 실패는 기존처럼 실패 처리됩니다.

Changes

Stale dispatch 처리

Layer / File(s) Summary
CodeQL stale 검증 및 scan 제어
.github/workflows/codeql-scan-dispatch.yml, tests/test_codeql_scan_dispatch_workflow_contract.py, CHANGELOG.d/20260926-dispatch-stale-head-skip.md
닫힌 PR 또는 compare API가 dispatched head의 strict ancestor 관계를 확인한 경우 stale=true를 출력합니다. Stale 실행에서는 scan과 dependent settlement가 건너뛰어집니다. 테스트는 현재 head, compare 실패, 인증 실패 및 다른 메타데이터 불일치도 검증합니다.
OpenCode stale 검증 및 후속 작업 제어
.github/workflows/opencode-review-dispatch.yml, tests/test_opencode_review_dispatch_stale_skip.py, tests/test_pr_review_autofix_nvidia_nim_contract.py, docs/product-technical-gap-baseline.md
repository_dispatch에서 닫힌 PR 또는 확인된 strict ancestor 관계를 stale로 표시합니다. Stale 실행에서는 coverage token 교환, merge-tree 생성 및 업로드, coverage-evidence와 review 작업을 건너뜁니다. 테스트는 stale 판정과 기존 fail-closed 조건을 확인하며, workflow blob SHA 계약값과 스택 조정 기록도 갱신합니다.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant Dispatch as repository_dispatch
  participant ValidateDispatch as CodeQL validate-dispatch
  participant CompareAPI as GitHub compare API
  participant Scan as CodeQL scan 및 settlement
  Dispatch->>ValidateDispatch: PR 식별 정보와 dispatched head 전달
  ValidateDispatch->>CompareAPI: head 불일치 시 두 SHA 비교
  CompareAPI-->>ValidateDispatch: compare 결과 반환
  ValidateDispatch-->>Scan: stale가 아니면 scan 실행 허용
  ValidateDispatch-->>Scan: stale이면 scan 건너뜀
Loading
sequenceDiagram
  participant Dispatch as repository_dispatch
  participant ValidateMetadata as OpenCode validate-pr-metadata
  participant CompareAPI as GitHub compare API
  participant OpenCodeJobs as coverage 및 review 작업
  Dispatch->>ValidateMetadata: PR 메타데이터와 dispatched head 전달
  ValidateMetadata->>CompareAPI: head 불일치 시 두 SHA 비교
  CompareAPI-->>ValidateMetadata: compare 결과 반환
  ValidateMetadata-->>OpenCodeJobs: stale가 아니면 후속 작업 허용
  ValidateMetadata-->>OpenCodeJobs: stale이면 후속 작업 건너뜀
Loading

Merge Risk: ⚪ Minimal · up to e1257

The change retires stale CodeQL and OpenCode dispatches successfully while keeping mismatches and lookup failures as failures. No actionable merge-blocking risk was found. Normal hosted checks and independent approval still apply.

Security Architecture Review

Security architecture risk: 🔵 Low · up to d9e31

The dispatch paths now skip only closed PRs or heads proven superseded, while other mismatches continue through validation. No introduced security finding was established. Some upstream authorization and deployment details remain unverified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The security-relevant reach is the authorized target-repository dispatch path, its CI credentials, coverage execution, and downstream review publication. The changed stale gates reduce work on proven obsolete heads; they do not establish a broader target scope.

Trust Boundaries and Controls

  • observed — Dispatch actor and sender checks and live PR metadata binding precede downstream work. A differing head is retired only on a strict-ancestor comparison; other disagreements continue to validation rather than becoming successful stale results.
  • observed — Coverage lock validation and installation precede its image build. The privileged OpenCode review job requires non-stale validation and non-cancelled coverage, with a later live-head check before publication.

Resilience and Maintainability Implications

  • inferred — The fail-closed comparison path, credential-read probe, and downstream stale conditions limit the effect of malformed or superseded dispatch data. Protection of allowlist variables and behavior of external dispatch producers remain outside the established evidence.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 77.27% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 66 functions across 16 files. (3 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 닫힌 PR 또는 최신 head로 대체된 오래된 디스패치를 건너뛰는 핵심 변경을 명확하고 간결하게 설명합니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 77.27% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 66 functions across 16 files. (3 skipped: 3 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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 seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

P1 dependency / single-writer repair — current exact head 3d0352198303ad055e751f1f5580313a687a2638 cannot be accepted on protected main@e6334e22….

Exact-log RCA for Python Security run 36220837176, job 108362326873, shows the hard gate audited requirements-strix-ci-hashes.txt and found AnyIO 4.14.0 vulnerable to CVE-2026-63374, CVE-2026-64847, and CVE-2026-63349; all require 4.14.2. This is a real dependency finding, not queue saturation or transport failure.

Canonical lock/source repair already exists in #2385@8e1aba9c: it adds anyio==4.14.2 to the source requirements, updates the hashed lock, and pins source↔lock parity. Do not copy a second lock repair here. The heads are diverged at main@e6334e22…: this PR is ahead 1 / behind 25 relative to #2385, and both modify .github/workflows/opencode-review-dispatch.yml.

Required order: settle #2385 first, then ordinary/non-force restack this branch on its accepted head while preserving only the unique stale-dispatch retirement delta and reconciling the shared OpenCode workflow. Re-run every exact-head gate after reconciliation; predecessor receipts do not transfer. Runtime Quality 36220837157, SAST 36220837165, and Security 36220837182 passed, but Python Security failed and CodeQL 36220837170 remains queued. Ready is review admission only; no merge, auto-merge, bypass, synthetic status, or blind rerun is authorized.

Copy link
Copy Markdown
Contributor Author

Exact-head admission correction for 3d0352198303ad055e751f1f5580313a687a2638.

Exact-head Python Security run 36220837176, job 108362326873, found AnyIO 4.14.0 vulnerable to CVE-2026-63374, CVE-2026-64847, and CVE-2026-63349 (fixed in 4.14.2). The canonical source/lock convergence is .github#2385; this leaf is not allowed to copy or bypass it.

The PR stays open with its complete delta and review evidence preserved. Draft is Proposed/not merge-admissible, not completion. No rerun, bypass, synthetic status, force update, review dismissal, or Close is performed.

@seonghobae
seonghobae marked this pull request as draft September 26, 2026 10:00
@seonghobae
seonghobae changed the base branch from main to fix/codeql-dispatch-unblock September 26, 2026 18:55
@seonghobae
seonghobae changed the base branch from fix/codeql-dispatch-unblock to main September 26, 2026 18:55

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-head/base dependency finding for 3d0352198303ad055e751f1f5580313a687a2638.

Canonical foundation parent #2385 is still open at 8e1aba9ce1d52acb36f095da32511da06958733f. A direct base retarget was tested and GitHub reported the child unmergeable. The cause is concrete three-path ownership overlap:

  • .github/workflows/codeql-scan-dispatch.yml
  • .github/workflows/opencode-review-dispatch.yml
  • tests/test_pr_review_autofix_nvidia_nim_contract.py

The child’s six-path stale-dispatch delta remains preserved: the base was restored to protected main@e6334e229581a918e2f22de18733b76fa65d7e71, the head was never moved or rewritten, and GitHub recomputed the PR as mergeable on that original base. Pre-parent Checks cannot be used as post-convergence evidence.

Required order: settle #2385 normally; then create an ordinary non-force successor/restack that resolves the three overlapping paths while preserving both the foundation and stale-dispatch contracts; finally acquire fresh exact-head/base Checks and independent review. Do not force-push, drop the child delta, or treat #2385 evidence as inherited passing proof.

@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 product diff. Coverage is a separate gate.

Changed files

  • .github/workflows/codeql-scan-dispatch.yml — GitHub Actions review job
  • .github/workflows/opencode-review-dispatch.yml — GitHub Actions review job
  • CHANGELOG.d/20260926-dispatch-stale-head-skip.md — repository behavior
  • tests/test_codeql_scan_dispatch_workflow_contract.py — regression suite
  • tests/test_opencode_review_dispatch_stale_skip.py — regression suite
  • tests/test_pr_review_autofix_nvidia_nim_contract.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: codeql-scan-dispatch.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: codeql-scan-dispatch.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: opencode-review-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> R2["Review risk: Workflow: opencode-review-dispatch.yml"]
  R2 --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: 20260926-dispatch-stale-head-skip.md"]
  S3 --> I3["repository behavior"]
  I3 --> R3["Review risk: Repository file: 20260926-dispatch-stale-head-skip.md"]
  R3 --> V3["required checks"]
  Evidence --> S4["Test: test_codeql_scan_dispatch_workflow_contract.py (3 files)"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_codeql_scan_dispatch_workflow_contract.py (3 files)"]
  R4 --> V4["targeted test run"]
Loading

Findings

No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.

  • Head SHA: 3d0352198303ad055e751f1f5580313a687a2638
  • Workflow run: 36234093075
  • Workflow attempt: 1
  • Coverage gate: failure

Review outcome

Coverage is a gate, not the review. This body reviews the changed product files.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: codeql-scan-dispatch.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: codeql-scan-dispatch.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: opencode-review-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> R2["Review risk: Workflow: opencode-review-dispatch.yml"]
  R2 --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: 20260926-dispatch-stale-head-skip.md"]
  S3 --> I3["repository behavior"]
  I3 --> R3["Review risk: Repository file: 20260926-dispatch-stale-head-skip.md"]
  R3 --> V3["required checks"]
  Evidence --> S4["Test: test_codeql_scan_dispatch_workflow_contract.py (3 files)"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_codeql_scan_dispatch_workflow_contract.py (3 files)"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment.

Ordinary-forward integrates PR #2385 into draft PR #2382 so the canonical Noema coverage build-context repair and the stale-dispatch retirement remain one reviewable lineage. The only textual conflict was the workflow blob identity contract; it is pinned to the computed merged workflow blob b22750e.

Copy link
Copy Markdown
Contributor Author

Ordinary-forward convergence evidence for exact head d9e31329e2e0361e904aef3072984ec1b4e076cd (tree 1e07dc0fd4b4b676931834d25059a6c0a889b8e6):

  • Parents are preserved in order: child 3d0352198303ad055e751f1f5580313a687a2638, canonical foundation repair(foundation): unblock coverage and CodeQL control plane #2385 8e1aba9ce1d52acb36f095da32511da06958733f.
  • RED reproduced before integration: the OpenCode coverage build context copied requirements-noema-document-ci-hashes.txt without materializing that trusted lock.
  • GREEN after integration: the trusted file is validated, installed into the isolated build context, and its contract test is present.
  • The only merge conflict was the immutable OpenCode workflow blob constant; it now equals the computed merged blob b22750e16ca5bb4765436d7bd4479e6591d59052.
  • Successor comparison against repair(foundation): unblock coverage and CodeQL control plane #2385 contains exactly the original six stale-dispatch paths.
  • Focused integrated contracts: 541 passed, 2 skipped.
  • Full Python suite: 3402 passed, 28 skipped, 40 subtests passed.
  • compileall, git diff --check, no-conflict, tree identity, and two-parent identity checks passed.
  • Local coverage is explicitly not promoted as complete: this runner has no cargo, so 25 Rust materializer tests skip and coverage reports 99%; interrogate is also unavailable. Fresh hosted exact-head evidence is required.
  • New current-head runs are queued: Runtime Quality 36279546322, Security 36279546333, Python Security 36279546248, SAST 36279546335, CodeQL 36279546340.
  • Review threads: 0. The earlier CHANGES_REQUESTED review is bound to predecessor head 3d035219… and is not treated as current-head evidence.

The PR remains Draft / Proposed. No Force Push, destructive rebase, rerun, self-approval, bypass, or merge was used.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-head review for d9e31329e2e0361e904aef3072984ec1b4e076cd (COMMENT, not approval).

The ordinary-forward successor preserves canonical #2385 exact 8e1aba9c… and leaves only the six stale-dispatch paths as the effective delta: ahead 2 / behind 0. The two dispatch validators retire only a closed PR or a head mismatch proven by GitHub compare as ahead with behind_by: 0 and ahead_by >= 1; API lag (behind), force-push divergence, contradictory/malformed compare evidence, lookup failure, unauthorized sender, and other identity mismatches remain fail closed. Current exact remote verification: Python AST 3/3, workflow YAML 2/2, and bash -n for both changed validation shell blocks 2/2.

The prior OpenCode CHANGES_REQUESTED review is anchored to predecessor 3d035219… / run 36234093075 and explicitly reports no source-backed product finding; it is stale after the non-force #2385 convergence. Dismissing it does not satisfy coverage, hosted Checks, or independent approval. Current exact Runtime Quality, Security, Python Security, SAST, and CodeQL runs remain queued, so this PR stays Draft/Proposed and is not merge-authorized.

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review September 26, 2026 23:52

Dismissed as stale exact-head evidence after ordinary-forward convergence. This review is anchored to predecessor 3d03521 / run 36234093075 and explicitly states that no source-backed product finding was synthesized. Current exact d9e3132 has a fresh COMMENT review; queued hosted Checks, coverage, and independent approval remain mandatory.

@seonghobae
seonghobae marked this pull request as ready for review September 27, 2026 00:16

Copy link
Copy Markdown
Contributor Author

Ready / Proposed admission correction for unchanged exact head d9e31329e2e0361e904aef3072984ec1b4e076cd (2026-09-27): the ordinary-forward successor already preserves #2385 and the six-path stale-dispatch delta, is mergeable, has 0 unresolved threads, and the fresh exact-head COMMENT review reports no additional source-backed finding. Keeping Draft while waiting for hosted Checks and independent approval would make those review gates circular. Ready admits review only; #2385 settlement, current-head terminal Checks, and qualifying independent approval remain merge gates. No rerun, merge, auto-merge, self-approval, dismissal, or protection bypass was used.

@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 product diff. Coverage is a separate gate.

Changed files

  • .github/workflows/codeql-scan-dispatch.yml — GitHub Actions review job
  • .github/workflows/opencode-review-dispatch.yml — GitHub Actions review job
  • CHANGELOG.d/20260926-dispatch-stale-head-skip.md — repository behavior
  • CHANGELOG.md — repository behavior
  • docs/product-technical-gap-baseline.md — operator or user guidance
  • requirements-strix-ci-hashes.txt — repository behavior
  • requirements-strix-ci.txt — repository behavior
  • scripts/ci/actions_queue_health.py — review and security gate shell path
  • scripts/ci/actions_queue_health_core.py — review and security gate shell path
  • tests/test_actions_queue_health_cancelled_before_runner.py — regression suite
  • tests/test_actions_queue_health_post_evidence_retry.py — regression suite
  • tests/test_actions_queue_health_snapshot_consistency.py — regression suite
  • tests/test_actions_queue_health_terminal_preexecution.py — regression suite
  • tests/test_codeql_scan_dispatch_ghas_credential_contract.py — regression suite
  • tests/test_codeql_scan_dispatch_workflow_contract.py — regression suite
  • tests/test_noema_document_review_context.py — regression suite
  • tests/test_noema_review_document_boundaries.py — regression suite
  • tests/test_opencode_agent_contract.py — regression suite
  • tests/test_opencode_review_dispatch_stale_skip.py — regression suite
  • tests/test_organization_commercial_readiness_loop_receipt_contract.py — regression suite
  • tests/test_pr_review_autofix_nvidia_nim_contract.py — regression suite
  • tests/test_pr_review_merge_scheduler.py — regression suite
  • tests/test_strix_runtime_dependencies.py — regression suite

Changed behavior

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: codeql-scan-dispatch.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: codeql-scan-dispatch.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: opencode-review-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> R2["Review risk: Workflow: opencode-review-dispatch.yml"]
  R2 --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: 20260926-dispatch-stale-head-skip.md"]
  S3 --> I3["repository behavior"]
  I3 --> R3["Review risk: Repository file: 20260926-dispatch-stale-head-skip.md"]
  R3 --> V3["required checks"]
  Evidence --> S4["Repository file: CHANGELOG.md"]
  S4 --> I4["repository behavior"]
  I4 --> R4["Review risk: Repository file: CHANGELOG.md"]
  R4 --> V4["required checks"]
  Evidence --> S5["Docs: product-technical-gap-baseline.md"]
  S5 --> I5["operator or user guidance"]
  I5 --> R5["Review risk: Docs: product-technical-gap-baseline.md"]
  R5 --> V5["docs review"]
  Evidence --> S6["Repository file: requirements-strix-ci-hashes.txt"]
  S6 --> I6["repository behavior"]
  I6 --> R6["Review risk: Repository file: requirements-strix-ci-hashes.txt"]
  R6 --> V6["required checks"]
  Evidence --> S7["Repository file: requirements-strix-ci.txt"]
  S7 --> I7["repository behavior"]
  I7 --> R7["Review risk: Repository file: requirements-strix-ci.txt"]
  R7 --> V7["required checks"]
  Evidence --> S8["CI script: actions_queue_health.py"]
  S8 --> I8["review and security gate shell path"]
  I8 --> R8["Review risk: CI script: actions_queue_health.py"]
  R8 --> V8["bash -n plus Strix self-test"]
  Evidence --> S9["CI script: actions_queue_health_core.py"]
  S9 --> I9["review and security gate shell path"]
  I9 --> R9["Review risk: CI script: actions_queue_health_core.py"]
  R9 --> V9["bash -n plus Strix self-test"]
  Evidence --> S10["Test: test_actions_queue_health_cancelled_before_runner.py (14 files)"]
  S10 --> I10["regression suite"]
  I10 --> R10["Review risk: Test: test_actions_queue_health_cancelled_before_runner.py (14 files)"]
  R10 --> V10["targeted test run"]
Loading

Findings

No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.

  • Head SHA: d9e31329e2e0361e904aef3072984ec1b4e076cd
  • Workflow run: 36308944761
  • Workflow attempt: 1
  • Coverage gate: failure

Review outcome

Coverage is a gate, not the review. This body reviews the changed product files.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: codeql-scan-dispatch.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: codeql-scan-dispatch.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Workflow: opencode-review-dispatch.yml"]
  S2 --> I2["GitHub Actions review job"]
  I2 --> R2["Review risk: Workflow: opencode-review-dispatch.yml"]
  R2 --> V2["actionlint plus required checks"]
  Evidence --> S3["Repository file: 20260926-dispatch-stale-head-skip.md"]
  S3 --> I3["repository behavior"]
  I3 --> R3["Review risk: Repository file: 20260926-dispatch-stale-head-skip.md"]
  R3 --> V3["required checks"]
  Evidence --> S4["Repository file: CHANGELOG.md"]
  S4 --> I4["repository behavior"]
  I4 --> R4["Review risk: Repository file: CHANGELOG.md"]
  R4 --> V4["required checks"]
  Evidence --> S5["Docs: product-technical-gap-baseline.md"]
  S5 --> I5["operator or user guidance"]
  I5 --> R5["Review risk: Docs: product-technical-gap-baseline.md"]
  R5 --> V5["docs review"]
  Evidence --> S6["Repository file: requirements-strix-ci-hashes.txt"]
  S6 --> I6["repository behavior"]
  I6 --> R6["Review risk: Repository file: requirements-strix-ci-hashes.txt"]
  R6 --> V6["required checks"]
  Evidence --> S7["Repository file: requirements-strix-ci.txt"]
  S7 --> I7["repository behavior"]
  I7 --> R7["Review risk: Repository file: requirements-strix-ci.txt"]
  R7 --> V7["required checks"]
  Evidence --> S8["CI script: actions_queue_health.py"]
  S8 --> I8["review and security gate shell path"]
  I8 --> R8["Review risk: CI script: actions_queue_health.py"]
  R8 --> V8["bash -n plus Strix self-test"]
  Evidence --> S9["CI script: actions_queue_health_core.py"]
  S9 --> I9["review and security gate shell path"]
  I9 --> R9["Review risk: CI script: actions_queue_health_core.py"]
  R9 --> V9["bash -n plus Strix self-test"]
  Evidence --> S10["Test: test_actions_queue_health_cancelled_before_runner.py (14 files)"]
  S10 --> I10["regression suite"]
  I10 --> R10["Review risk: Test: test_actions_queue_health_cancelled_before_runner.py (14 files)"]
  R10 --> V10["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

Exact-head admission correction — d9e31329e2e0361e904aef3072984ec1b4e076cd

Ready is review admission only. Fresh audit against base e6334e229581a918e2f22de18733b76fa65d7e71 found:

  • mergeability=false on current base
  • latest terminal workflow blockers: CodeQL PR 36282016222=failure
  • CHANGES_REQUESTED: opencode-agent

This PR is moved to Draft/Proposed until the causal owner repair is present on a successor exact head and re-audited. Queued/pending work is neither an additional blocker nor passing evidence. No Close, force push, destructive rebase, manual rerun, synthetic status/approval, merge, auto-merge, or bypass was performed.

@seonghobae
seonghobae marked this pull request as draft September 30, 2026 05:14
@seonghobae
seonghobae marked this pull request as ready for review October 7, 2026 04:16

Copy link
Copy Markdown
Contributor Author

Current authority — exact head e1257f7070f5d3e31855851c44b9f62a1a7f4934 / base 7554587c2e3106a388998bcad048a3d7121de25e (2026-10-07)

The prerequisite stack conflict is repaired by published ordinary two-parent convergence commit ca3fe966c0508a0274be7435ad4642756db2ac49 with verified tree 521da4d721ca0023a57a90f8b79bd1b4ac14ed83. The PR is mechanically mergeable, has zero unresolved threads, and exact-tree verification passed (focused 207/1 skip; full 5175/11 skip/40 subtests; Gap contracts 196/4 subtests).

This exact head is now Ready solely to admit CodeQL and independent review. Its earlier hosted attempts ended before job steps/logs existed, while CodeQL was skipped because the PR was Draft. Terminal exact-head GREEN Checks and qualifying independent approval remain merge gates. No rerun, merge, auto-merge, dismissal, protection bypass, Force Push, destructive rebase, or Close was performed.

Copy link
Copy Markdown
Contributor Author

Exact-head runner-admission evidence — #2382 e1257f7070f5d3e31855851c44b9f62a1a7f4934 after Ready admission (2026-10-07)

The Ready transition generated a fresh event generation without any new commit:

  • SAST 37570713438 / job 112628455724: failure, steps=null
  • CodeQL 37570713441 / detect job 112628455657: failure, steps=null; downstream jobs skipped
  • Python Security 37570713440 / detect job 112628455998: failure, steps=null; downstream jobs skipped
  • Security 37570713424 / jobs 112628455790, 112628455900: failure, steps=null; downstream jobs skipped
  • representative job log download returns 404 BlobNotFound

This reproduces the same pre-execution admission defect on the unchanged exact head. No source step ran, so it is not a product/test finding and does not justify Draft. It remains a merge blocker because it is not passing evidence. No rerun, wake-only commit, bypass, merge, or auto-merge was used.

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review October 7, 2026 04:43

이 CHANGES_REQUESTED는 predecessor d9e31329e2e0361e904aef3072984ec1b4e076cd / run 36308944761에 고정되어 있고 review 본문 자체가 source-backed product finding이 없다고 명시합니다. 현재 exact head e1257f7070f5d3e31855851c44b9f62a1a7f4934는 ordinary-forward convergence와 새 exact-head 검증을 갖습니다. 이 dismiss는 승인이나 merge 우회가 아니며, 최신 hosted Checks와 qualifying independent approval은 계속 별도 merge gate입니다.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-head COMMENT for e1257f7070f5d3e31855851c44b9f62a1a7f4934.

Fresh Ready admission on 2026-10-07 produced terminal pre-execution failures: SAST run 37570713438 job 112628455724; CodeQL run 37570713441 detect job 112628455657; Python Security run 37570713440 detect job 112628455998; Security run 37570713424 jobs 112628455790 and 112628455900. Each failing job has steps=null and logs_url=null; dependent jobs were skipped. This is runner/admission evidence, not a source finding, so no blind rerun or wake commit is justified.

The only CHANGES_REQUESTED review was anchored to predecessor d9e31329… and explicitly said no source-backed product finding existed. It is now dismissed as stale after the ordinary-forward convergence. This dismissal is neither approval nor merge authorization.

Current state: Ready / Proposed / merge HOLD; mechanically mergeable, zero unresolved threads, zero qualifying approvals, and no terminal exact-head GREEN required Checks.

Copy link
Copy Markdown
Contributor Author

Exact-head repair published at e6eb1eb4564e3fb1f754a91b51161033d7ced1b1 (tree 645a80c2e9cf9bb4f94cb765b000d14c8d18536a) by expected-head, non-force fast-forward from e1257f7070f5d3e31855851c44b9f62a1a7f4934.

RCA: proven head ancestry was evaluated before stable base/ref identity, so a moved head plus changed base SHA could exit 0 as stale. RED d7d82dbf fixes the contract; GREEN f7de3e2c validates live shape, base ref/SHA, and head ref before allowing the head-SHA stale exception. Final local evidence: focused 132 passed / 1 skipped in normal and Actions mode; full warnings-as-errors suite 5177 passed / 11 skipped / 40 subtests.

@coderabbitai review

Ready / Proposed / merge HOLD until this exact head has source-executing terminal GREEN required Checks, no actionable unresolved review, and qualifying independent approval.

@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ 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.

Copy link
Copy Markdown
Contributor Author

Fresh exact-head hosted admission for e6eb1eb4564e3fb1f754a91b51161033d7ced1b1 completed as runner/pre-execution failure, not a source finding: Runtime Quality 37599526918/112720207385; CodeQL 37599526923/112720207358; SAST 37599527089/112720208201; Python Security 37599526953/112720208129; Security 37599527117/112720208668 and 112720208975. Every failing job has steps=null and logs_url=null; dependents skipped. No rerun, bypass, auto-merge, or merge was attempted.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-head COMMENT for e6eb1eb4564e3fb1f754a91b51161033d7ced1b1 (not approval).

Independent three-dot review of the new effective delta found no additional source-backed finding. The repair correctly validates live base ref, base SHA, and head ref before allowing the strict-ancestor moved-head retirement exception in both CodeQL and OpenCode dispatch paths. Focused independent verification passed 116 tests normally and 116 with GITHUB_ACTIONS=true; git diff --check passed. These are an independent subset of the broader 132-passed author evidence already bound in the PR body.

Exact-head hosted admission remains failed before executable steps: Runtime Quality 37599526918/112720207385, CodeQL 37599526923/112720207358, SAST 37599527089/112720208201, Python Security 37599526953/112720208129, and Security 37599527117/112720208668,112720208975 all reported steps=null and logs_url=null; dependents skipped. There are zero unresolved threads and zero qualifying approvals. Ready remains review admission only: merge HOLD, with no blind rerun, bypass, auto-merge, or merge.

This branch has not been deployed

No deployments
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