Skip to content

fix(strix): fail closed on incomplete provider scans - #1153

Merged
opencode-agent[bot] merged 50 commits into
mainfrom
codex/pr1138-current-main-successor
Aug 23, 2026
Merged

fix(strix): fail closed on incomplete provider scans#1153
opencode-agent[bot] merged 50 commits into
mainfrom
codex/pr1138-current-main-successor

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Buyer-surface incident

Strix provider scans must never publish a successful result when scope evidence is incomplete, stale, or written outside the trusted report boundary. This PR repairs the fail-closed boundary while preserving useful provider diagnostics and the existing scan contract.

Change

  • Classify incomplete, stale, provider-failure, and unavailable scan evidence as typed non-passing instead of allowing false success.
  • Keep report publication restricted to sanitized cumulative artifacts; do not overwrite published evidence with an unsanitized scope tree.
  • Bind provider/model-behavior classification and dependency context to the exact PR head.
  • Keep external scan working-directory and report discovery inside the trusted workspace boundary.
  • Preserve the Strix output contract and explicit failure signals.
  • Redact organization-readiness diagnostics without masking actionable operator evidence.
  • Maintain the canonical docs/doctoring/strix-model-behavior-error.md record and its executable quality/test references.
  • Preserve protected main's repository-dispatch/workflow-run deduplication contract while keeping provider outages non-passing.
  • Keep the workflow without merge, release, protection, or credential-authority changes.

Exact current identity

  • protected base: main@9ad0ad50409561292b424d6f35a95d670a277e77
  • current head: codex/pr1138-current-main-successor@09c34396244fa105d6fdab38a0b7ec05d13f0c1d
  • changed surface: 17 Strix-owned files
  • branch is open, non-Draft, mergeable, and was advanced without force-push

The pip-audit lock change is excluded from this owner lane and remains owned by #1198.

Verification

  • protected-main conflict RED: full Strix quick-gate rejected the stale per-run scheduler assertions after main introduced stable repository-scoped deduplication.
  • focused current Strix provider/classifier contracts: 34 passed.
  • exact synchronized tree: 1,393 tests passed, 1 skipped, and 16 subtests passed.
  • exact synchronized full Strix quick-gate: PASS.
  • compileall, Bash syntax, and git diff --check: passed.
  • predecessor Strix tree coverage: 8,129/8,129 statements and 3,144/3,144 branches (100%); this is historical supporting evidence, not a substitute for current hosted checks.
  • all currently observed inline threads are addressed; predecessor-head review/check evidence is not reused.

Hosted gate and next action

Hosted workflows must regenerate for 09c34396244fa105d6fdab38a0b7ec05d13f0c1d; pending, queued, skipped, cancelled, absent, neutral, or stale predecessor evidence is non-passing. No qualifying exact-current-head independent formal verdict exists.

Merge only after every required exact-head check is terminal-success, all valid threads are resolved, and independent approval is present. No self-approval, guarded bypass, direct protected-branch push, force-push, release, or ruleset change is requested.


Open in Devin Review

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-main successor for #1138: head 27abd83821081a48a2de4e196a8ad3f50ac4de88 is based on main bbedc1a51ec1a2421f129955c629b3cd0507a4ec. Fresh local evidence: Strix fallback/required-queue tests 63 passed; actionlint, compileall, and diff-check pass. Protected current-head checks and review-thread resolution remain required.

@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 45 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 335ba821-03b4-46aa-b963-370dcbd71ae1

📥 Commits

Reviewing files that changed from the base of the PR and between ab0f179 and 412370e.

📒 Files selected for processing (15)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • .github/workflows/strix.yml
  • CHANGELOG.md
  • docs/doctoring/strix-model-behavior-error.md
  • docs/doctoring/strix-pr-head-context-boundary.md
  • organization_commercial_readiness_fixtures.py
  • scripts/ci/organization_commercial_readiness_loop.py
  • scripts/ci/strix_quick_gate.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_required_workflow_queue_contract.py
  • tests/test_strix_backend_unavailable_after_exempted_finding.py
  • tests/test_strix_local_proxy_bootstrap_failure_is_classified.py
  • tests/test_strix_model_behavior_error.py
  • tests/test_strix_nvidia_nim_not_found_fallback.py
  • tests/test_strix_quality_timeout_fixture_budget.py

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 200cca1d-362e-47c8-9bd9-03c4a7e9d753

📥 Commits

Reviewing files that changed from the base of the PR and between e21951d and ab0f179.

📒 Files selected for processing (10)
  • .github/workflows/strix.yml
  • CHANGELOG.md
  • docs/doctoring/strix-nvidia-nim-not-found-fallback.md
  • docs/doctoring/strix-pr-head-context-boundary.md
  • docs/doctoring/strix-scan-working-boundary.md
  • organization_commercial_readiness_fixtures.py
  • scripts/ci/organization_commercial_readiness_loop.py
  • scripts/ci/strix_quick_gate.sh
  • scripts/ci/test_strix_quick_gate.sh
  • tests/test_required_workflow_queue_contract.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/strix.yml
  • CHANGELOG.md

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


📝 Walkthrough

Walkthrough

Strix에 PR-head 컨텍스트 수집과 격리된 작업 디렉터리 실행이 추가되었습니다. ModelBehaviorError, 로컬 연결 실패, 검증된 HTTP 410 신호가 분류됩니다. 불완전한 스캔과 provider 고갈은 STRIX_PROVIDER_UNAVAILABLE 오류와 실패 코드로 처리됩니다.

Changes

Strix 스캔 경계와 컨텍스트

Layer / File(s) Summary
PR-head 컨텍스트와 격리 실행
scripts/ci/strix_quick_gate.sh, scripts/ci/test_strix_quick_gate.sh, docs/doctoring/strix-pr-head-context-boundary.md, docs/doctoring/strix-scan-working-boundary.md
backend/app, contextual_orchestrator, PostgreSQL introspection 컨텍스트를 PR-head에서 수집합니다. Strix는 별도 작업 디렉터리에서 절대 경로 대상을 스캔합니다.
Provider 장애 및 fallback 판정
.github/workflows/strix.yml, scripts/ci/strix_quick_gate.sh, tests/test_strix_nvidia_nim_not_found_fallback.py
ModelBehaviorError, 로컬 연결 실패, NVIDIA 404를 취약점 결과와 함께 판정합니다. 검증된 GitHub Models HTTP 410만 fallback을 허용합니다.
회귀 계약 검증
scripts/ci/test_strix_quick_gate.sh, tests/test_required_workflow_queue_contract.py
취약점이 있는 provider 오류와 잘못된 오류 신호를 provider 장애로 분류하지 않습니다. fallback 고갈과 불완전한 스캔은 비통과로 검증합니다.
진단 정제와 문서 갱신
scripts/ci/organization_commercial_readiness_loop.py, CHANGELOG.md, organization_commercial_readiness_fixtures.py, docs/doctoring/*
허용되지 않은 HTTP 메서드를 [REDACTED_METHOD]로 표시합니다. Strix 동작과 관련 보안 경계를 문서화합니다.

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

Merge Risk: ⚪ Minimal · up to ab0f1

The change is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 85.71% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 56 functions across 5 files. (6 skipped: 5 unsupported, 1 too large.)
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 제목은 불완전한 Strix provider 스캔을 fail-closed로 처리하는 PR의 핵심 변경을 정확하고 간결하게 설명합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/pr1138-current-main-successor

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

Current-head review request for PR #1153:

  • Exact head: 27abd83821081a48a2de4e196a8ad3f50ac4de88.
  • The Strix outer gate now recognizes the qualified agents.exceptions.ModelBehaviorError: backend-failure signal only when no numbered vulnerability or severity: finding is present; findings remain fail-closed.
  • The doctoring note and changelog document the operational boundary, and regression tests cover the qualified signal, unqualified signal, zero findings, and reported findings.
  • Local evidence: focused Strix/required-workflow tests 63 passed; actionlint .github/workflows/strix.yml, compileall, and diff-check passed.

Please provide a fresh independent review for this exact head. Protected current-head checks and qualifying approval remain required before merge.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head verification for 6d34e457 against live main@c47bee59: Strix model-behavior-error fallback tests and required-workflow contracts passed (63 passed); compile and diff checks passed. The fallback remains fail-closed for any Vulnerabilities [1-9] evidence and neutralizes only the qualified provider exception; review this exact head only.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review exact current head 6d34e457 against main@c47bee59. Inspect Strix NVIDIA NIM/ModelBehaviorError classification, positive vulnerability preservation, workflow regex boundaries, and hosted checks. Do not reuse predecessor evidence.

Keep Vulnerabilities [1-9] fail-closed. A scanner-model error without a
numbered finding is infrastructure noise, not a security result.
@seonghobae
seonghobae force-pushed the codex/pr1138-current-main-successor branch from 998ad7b to 51c3815 Compare August 20, 2026 04:06
@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review exact current head 51c3815 against main@2cce96f8. Rebased the Strix ModelBehaviorError classifier onto current main; only a qualified exception with no numbered vulnerability/severity finding neutralizes a backend flake, while real findings remain fail-closed. Verified: 63 focused Strix/queue tests, actionlint, compileall, and git diff --check passed.

Copy link
Copy Markdown
Contributor Author

Exact-head control-plane contradiction on 51c38152a1950f6b815b36b5e37bb804f4ef1475: this diff adds agents\.exceptions\.ModelBehaviorError to backend_unavailable_signal, and the outer workflow then exits neutral-success when no numbered finding was emitted.

A scanner turn that terminated with ModelBehaviorError did not produce authoritative complete-scan evidence; Vulnerabilities 0 is not equivalent to a completed no-finding scan. Neutralizing it recreates the required-check false-green where backend failure is reported but GitHub concludes success.

Deterministic counter-evidence is preserved at commit 998ad7ba5cc301c029852fb8d8138ce87a23c8ca, workflow run 32330527041, job 96310140066: the exact contract suite failed only on test_strix_provider_outage_without_findings_is_neutralized (1 failed, 1235 passed, 16 subtests passed) when the regression asserted that ModelBehaviorError must not enter the neutral classifier.

Please keep this PR unmerged unless incomplete provider/model execution returns an explicit typed non-passing result. A genuine complete zero-finding scan can still pass; actual findings remain independently fail-closed.

@seonghobae seonghobae changed the title fix(strix): treat ModelBehaviorError with zero findings as backend flake fix(strix): fail closed on incomplete provider scans Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review exact current head 86c262cd9385bc9b39cf9b93fabb081f3f07bbc5 against protected main@2cce96f8671bfde7e354effef931c14a5928c23b. Verify that provider exhaustion and agents.exceptions.ModelBehaviorError emit typed STRIX_PROVIDER_UNAVAILABLE evidence and preserve a nonzero required result; complete no-finding scans must still pass and genuine findings must remain fail-closed. Hosted exact-head GREEN: run 32333811954, job 96319358533, 1236 passed, 16 subtests passed, test_strix_quick_gate: PASS. Do not reuse predecessor verdicts.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review current exact head 86c262cd9385bc9b39cf9b93fabb081f3f07bbc5. Verify that the bounded provider classifier is diagnostic only: exact agents.exceptions.ModelBehaviorError: and existing provider-exhaustion signals may emit STRIX_PROVIDER_UNAVAILABLE only when no Vulnerabilities [1-9] or finding-severity evidence exists, and the original nonzero scanner result must remain the required-check exit. Confirm complete no-finding scans still pass, genuine findings and all incomplete scans remain fail-closed, target-source text cannot spoof the qualified exception family, and no neutral-skip wording or behavior survives. Reacquire exact-head Strix quality, full tests, security, SAST, CodeQL/Python, SBOM and docstring evidence, then submit the formal review. Do not alter or merge the branch.

@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 05:09
@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review exact current head SHA 86c262c. Confirm the typed STRIX_PROVIDER_UNAVAILABLE evidence, nonzero required result, current checks, and test/coverage evidence. Return a formal structured current-head verdict.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Review the current exact head as the sole current-main successor to #1138. Verify the classifier only treats trusted Strix-process ModelBehaviorError evidence as backend unavailable when the same bounded evidence reports zero vulnerabilities; numbered vulnerabilities, severity evidence, incomplete artifacts, and unrelated target text must remain fail-closed. Reacquire exact-head quality, security, CodeQL, SAST, dependency/SBOM, and formal review evidence. Do not alter the branch or bypass protection.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review exact current head 86c262cd9385bc9b39cf9b93fabb081f3f07bbc5 against independently resolved protected main@2cce96f8671bfde7e354effef931c14a5928c23b. Validate the fail-closed provider result contract: only a complete authoritative no-finding scan may pass; governed provider exhaustion, backend unavailability, malformed/incomplete evidence, or failed fallback must remain typed non-passing without fabricated source findings. The exact-head RED/GREEN lineage in the PR body is test evidence only; required acceptance is a substantive formal Reviews API verdict bound to this SHA.

@opencode-agent
opencode-agent Bot disabled auto-merge August 20, 2026 07:28
@seonghobae

Copy link
Copy Markdown
Contributor Author

Integrated current main normally and restored the unrelated main-document merge artifacts; current PR diff is scoped to the Strix workflow, doctoring, changelog, and two contract-test files at 119d563. Focused Strix/queue suite passed (77 tests, 16 subtests), actionlint, ruff, and diff checks passed. Re-review this exact HEAD.

@OpenCode review this exact HEAD and report only current-head findings.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review this exact current HEAD. Use the current commit SHA, current Checks, and current diff; do not reuse prior approvals or prior-head evidence.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head repair pushed as c1bac0a from 1f8878d.

Root cause: the PR branch still pinned pip 26.1.2 in the hashed audit lock, reproducing the known PYSEC-2026-3721 failure. Updated only that lock to pip 26.2.1 with exact hashes.

Verification: 79 focused Strix and required-workflow tests passed; pip-audit reported no known vulnerabilities; compileall and git diff check passed. Hosted checks and exact-head independent approval must be re-evaluated for c1bac0a. No force merge or bypass was used.

Copy link
Copy Markdown
Contributor Author

@claude Please perform a review-only formal review of exact head 0bf6874f4e8a986cdbc5edaf11f2e7775043c73d. The foreign pip-audit lock was restored to protected-main content; this PR now contains only the 15 Strix-owned paths. Do not mutate branches, merge state, rulesets, or releases. Submit the substantive verdict through the Reviews API and bind it to this exact head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

pip-audit reported PYSEC-2026-3721 against pip 26.1.2. Updated the exact pinned lock to pip 26.2.1 with both release hashes. Local validation passed: 53 queue-contract tests, locked pip-audit, and diff checks. Hosted Checks and an exact-head independent approval remain required.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head maintainer audit

  • Current exact head: ab1b5de
  • Exact base: 0156282
  • The current-head review comments were read. The provider fail-closed path is intentional; the remaining observations are informational or describe behavior already covered by the current tests. No new source defect requiring a change was found in this pass.
  • Hosted security/review lanes are queued or in progress; no independent formal approval is present.
  • Decision: WAIT_AND_REMEDIATE. No bypass, direct protected push, or force-push was used.

@opencode-agent opencode-agent Bot added merge: urgent-review Central or critical pull request requiring immediate review attention status: blocked Blocked by conflict, dependency, or required prerequisite type: bug Defect or incorrect behavior labels Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

Exact-head Strix fail-closed repair regenerated at 09c34396244fa105d6fdab38a0b7ec05d13f0c1d after non-force synchronization with protected main@9ad0ad50409561292b424d6f35a95d670a277e77.

Fresh causal verification:

  • stale neutral-success regressions were RED because backend/provider exhaustion after an exempted baseline finding could still be expected to pass
  • current workflow retains the newest-attempt tail classifier but emits typed STRIX_PROVIDER_UNAVAILABLE and preserves the nonzero gate result
  • standalone brownout phrases and broad provider-looking output remain insufficient; authenticated provider signals and genuine findings stay fail-closed
  • protected main's backend/app/auth.py scan context from fix(strix): include app auth in backend PR scope #1248 is preserved
  • focused provider/classifier tests: 34 passed
  • full central tests: 1,393 passed, 1 skipped, 16 subtests passed
  • full scripts/ci/test_strix_quick_gate.sh: PASS
  • exact tree: fc55f47293b2f62978b5065cdea170fce20b3904

Hosted checks and a substantive exact-current-head Reviews API verdict are now required. Do not reuse predecessor evidence or merge through a bypass.

@opencode-agent review this exact head only. Review-only: do not mutate branches, merge state, rulesets, or releases.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Exact-head regression-harness repair:

  • current head: 412370e16c51b2b21d5de27092089590d5efb425
  • protected base: main@9ad0ad50409561292b424d6f35a95d670a277e77
  • exact tree: 56f7db1c7d4dbdeb20e7fa99403a5a950241f036
  • causal RED: four fail-closed scenarios returned shell syntax error 2 because the extractor stopped at the new inner exit "$strix_rc"; exact exit 1 assertions failed
  • repair: anchor extraction after the terminal non-backend failure message, execute the complete if ... fi block, and require exact exit 1 for provider outage and genuine findings
  • terminology: renamed the local-proxy regression from “neutral” to diagnostic “classified”; incomplete scans remain non-passing
  • focused: 8 passed
  • full central: 1393 passed, 1 skipped, 16 subtests passed

The production Strix workflow/gate bytes are unchanged by this follow-up. A repeated standalone quick-gate invocation was stopped after an environment-only hang with no new output; the previously published exact production tree had already completed that suite, while this head's hosted evidence is regenerating and remains non-passing until terminal.

@opencode-agent review this exact head only. Review-only; do not mutate or merge the branch.

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 412370e16c51b2b21d5de27092089590d5efb425
  • Workflow run: 32629388594
  • 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["Changed file (2 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (2 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs (4 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (4 files)"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script (3 files)"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script (3 files)"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (6 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (6 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode reviewed the current-head bounded evidence and found no blocking issues.

Findings

No blocking findings.

Summary

Approval sufficiency: affirmative current-head evidence (focused hunks of .github/workflows/strix.yml and .github/workflows/strix-changed-path-quality-ci.yml, CHANGELOG.md entry, diff stat, receipts) supports the fail-closed intent beyond absence of blockers. Verification posture: CodeGraph current-head index (213 files, up to date) plus focused changed hunks reviewed; direct opencode-pr-head reads blocked by runtime policy, recorded as a review source limitation. Linter/static: no completed failed GitHub Checks at this head; quality lane runs bash -n, compileall, git diff --exit-code, and actionlint-covered workflows. TDD/regression: behavior flip is pinned by renamed tests/test_strix_local_proxy_bootstrap_failure_is_classified.py, extended tests/test_strix_backend_unavailable_after_exempted_finding.py, and new tests/test_strix_model_behavior_error.py wired into the quality trigger. Coverage: Coverage execution evidence Result: PASS — supported repository test suites passed (coverage_commands contract python3 -m coverage run -m pytest tests). Docstring coverage: Coverage execution evidence records configured repository docstring gates passed or advisory (interrogate contract present). DAG: Mermaid flowchart maps the base-to-head changed flow from scripts/ci/strix_quick_gate.sh rc=1 through the strix.yml classification branch to fail-closed exits and the quality-CI rerun path. PoC/execution: trusted source-trace/diff probes only; no browser/runtime-tool receipts claimed because none exist in bounded evidence. DDD/domain: scanner-evidence trust boundary kept authoritative — incomplete scans never become passing security evidence. CDD/context: Strix owner lane consolidated; changed-path policy keeps trigger and compileall sets aligned. Similar issues: no unresolved peer threads (Other unresolved review thread evidence empty); historical Devin/CodeRabbit comments reconciled against current-head sections with no corroborated active defect. Claim/concept check: CHANGELOG claim matches executable branch (::error STRIX_PROVIDER_UNAVAILABLE, nonzero exit). Standards search: no external standard claim required; shell/regex behavior verified from hunks. Compatibility/convention: identifiers STRIX_PROVIDER_UNAVAILABLE, model_behavior_error_signal, strix_neutralization_scope_log are multi-word and convention-consistent; no schema/API/name-bearing objects changed. Breaking-change/backcompat: intentional required-check semantics change from neutral skip to failing; changelog documents it and consumers treat nonzero as failure, preserving exit-code vocabulary (0/1/2). Implementation completeness: no placeholder bodies introduced; removed neutral-skip branch fully replaced by classified hard-failure branch. Performance: grep/awk over bounded run logs only; budgets unchanged. Developer experience: typed ::error annotation improves outage triage versus generic warning. User experience: merge-blocking on provider outages is the intended buyer-surface safety trade-off; artifacts and run log remain published via always() collection step. Visual/DOM: non-web interaction surface reviewed (workflow logs, status-check annotations, CLI gate output); no web UI changed. Accessibility/i18n: no UI surface; annotation titles are plain ASCII English consistent with existing annotations. Supply-chain/license: hash-pinned --require-hashes install retained; permissions contents: read unchanged. Packaging: pyproject-driven pytest/coverage/interrogate contracts apply and Coverage execution evidence reports supported suites passed. Security/privacy: fail-closed direction strengthens the security boundary; no secrets, ids, or tenant surfaces touched.

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-changed-path-quality-ci.yml, .github/workflows/strix.yml, CHANGELOG.md, docs/doctoring/strix-model-behavior-error.md, docs/doctoring/strix-nvidia-nim-not-found-fallback.md, and 12 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-changed-path-quality-ci.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":906,"hypothesis":"A provider/backend-exhausted scan with zero findings still converts to a neutral passing result (exit 0), regressing the buyer-surface incident.","attack_or_counterexample":"Simulated gate exit 1 whose console-log tail after 'allowing pipeline continuation' contains 'LLM CONNECTION FAILED' and no Vulnerabilities/severity markers.","evidence":"Trusted focused-hunk source trace at .github/workflows/strix.yml:906 observed the classification branch close immediately after '::error title=STRIX_PROVIDER_UNAVAILABLE...' and 'exit \"$strix_rc\"' with strix_rc=1, yielding step exit code 1; the previous 'exit 0' neutral-skip line is absent from the head hunk, and the renamed regression test tests/test_strix_local_proxy_bootstrap_failure_is_classified.py plus Coverage execution evidence Result: PASS corroborate the classified non-passing outcome. Trusted current-head source binding at .github/workflows/strix.yml:906; source-line-sha256=8759fc7a2ae8ae286889cd4dcbf142fc7ed5f87a93b7437debeecfec17311c53","outcome":"falsified"},{"path":".github/workflows/strix.yml","line":856,"hypothesis":"The patch relabels provider failure as benign infrastructure noise that does not affect the required check, contradicting the stated fail-closed intent.","attack_or_counterexample":"Compare the head comment block claiming provider failure 'remains non-passing because no authoritative complete vulnerability result exists' against the executable branch for a rate-limit ('RateLimitError') tail with zero findings.","evidence":"Trusted focused-hunk source trace at .github/workflows/strix.yml:856 observed the head comment block declaring provider failure non-passing, and the executable branch it describes (lines 901-906 of the same hunk) terminates every signal-matched exit-1 outcome in 'exit \"$strix_rc\"'; documentation and code agree with no passing path for incomplete scans. Trusted current-head source binding at .github/workflows/strix.yml:856; source-line-sha256=3e0eab738bf434551a00c6a7f78d861a44c96bfd0e883f92660515364bb6dc81","outcome":"falsified"},{"path":".github/workflows/strix-changed-path-quality-ci.yml","line":8,"hypothesis":"Changes to .github/workflows/strix.yml and the new Strix test/doc files escape exact-head quality verification because the focused quality workflow does not trigger on them.","attack_or_counterexample":"Open a PR touching only .github/workflows/strix.yml, docs/doctoring/strix-model-behavior-error.md, tests/test_strix_model_behavior_error.py, and tests/test_strix_nvidia_nim_not_found_fallback.py and evaluate path-filter matching.","evidence":"Trusted focused-hunk source trace at .github/workflows/strix-changed-path-quality-ci.yml:8 observed '.github/workflows/strix.yml' added to the pull_request paths filter alongside the new doc and test paths, and the companion hunk at line 73 added the two new test modules to the exact-head compileall set after 'bash scripts/ci/test_strix_quick_gate.sh', so every listed surface reruns the exact-head policy job. Trusted current-head source binding at .github/workflows/strix-changed-path-quality-ci.yml:8; source-line-sha256=5c27be631f78e8b8379d9c8eab1d3cb0e615bfec4b316b6936d49312419fe602","outcome":"falsified"}],"residual_risk":"Signal classification is wording-based over scanner console logs; unrecognized provider failure phrasings fall through to the generic hard-failure branch, so residual exposure is limited to diagnostic mislabeling, not to a passing incomplete scan. Direct reads of the PR head tree were blocked by runtime directory policy, leaving out-of-hunk changed files verified via repeated current-head evidence sections, receipts, diff stat, and trusted Coverage PASS rather than byte-level model inspection."}
  • Result: APPROVE
  • Reason: The provider-outage path in .github/workflows/strix.yml now fails closed with typed STRIX_PROVIDER_UNAVAILABLE evidence; adversarial probes on downgrade, finding-suppression, and verification-escape hypotheses were falsified against current-head hunks and trusted Coverage PASS evidence.
  • Head SHA: 412370e16c51b2b21d5de27092089590d5efb425
  • Workflow run: 32629388594
  • Workflow attempt: 1

@opencode-agent
opencode-agent Bot enabled auto-merge (squash) August 23, 2026 09:33
@opencode-agent
opencode-agent Bot merged commit 885f2cd into main Aug 23, 2026
62 of 64 checks passed
@opencode-agent
opencode-agent Bot deleted the codex/pr1138-current-main-successor branch August 23, 2026 09:33
@github-project-automation github-project-automation Bot moved this from In Progress to Done in naruon Platform Roadmap Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge: urgent-review Central or critical pull request requiring immediate review attention priority: critical Immediate blocker, P0, urgent deadlock, or critical incident status: blocked Blocked by conflict, dependency, or required prerequisite type: bug Defect or incorrect behavior

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant