Skip to content

fix(osv): preserve immutable direct-source provenance - #1158

Open
seonghobae wants to merge 61 commits into
mainfrom
fix/osv-direct-source-provenance-1096
Open

fix(osv): preserve immutable direct-source provenance#1158
seonghobae wants to merge 61 commits into
mainfrom
fix/osv-direct-source-provenance-1096

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Tracks #1096; do not close until protected-main integration and fresh Inkspan canary acceptance.

Problem and fail-closed contract

The reusable Security Scan previously passed OSV's npm name/version result to the reporter without preserving direct-tarball URL and integrity evidence. Open-ended npm ranges could therefore attribute already-remediated advisories to an official immutable vendor release.

This repair:

  • retains genuine affected xlsx releases, including 0.18.x, 0.19.2, and 0.20.1;
  • reconciles only exact official immutable xlsx@0.20.3 provenance whose authoritative affected range excludes it;
  • retains unknown, malformed, ambiguous, or conflicting provenance as typed SCANNER_METADATA_CONFLICT evidence;
  • preserves advisory IDs and severities;
  • reads required provenance through descriptor-bound O_NOFOLLOW and regular-file validation;
  • parses only pnpm's authoritative packages map, not provenance-free snapshot duplicates;
  • binds every reconciliation decision to the exact OSV source.path for the governed root lockfile;
  • treats exit-1 plus complete vulnerability JSON as an authoritative completed scan, while missing, malformed, empty-on-failure, symlinked, or stale output remains non-passing;
  • preserves base scan evidence outside the head checkout trust boundary; and
  • binds trusted policy checkout to the governed workflow revision.

Exact identity and evidence

  • Exact head: 97361089cab8c16bb94ecaa0ea01db9c6aed56b4.
  • Exact base: protected main@0c6b9a6459c9dbdf5e23fb01df7a32a8a14964b3.
  • Non-force merge sync preserves the OSV provenance owner tree and live protected-main ancestry.
  • Latest RED: an atomic evidence-write OSError escaped main() as an unstructured traceback.
  • Narrow repair: compute the provenance-conflict reason once and route atomic results/audit write failures through typed ::error:: non-passing diagnostics.
  • Focused GREEN: 20 tests and 54 subtests.
  • Local full GREEN: 1,422 tests and 70 subtests; reconciler 292 statements/100 branches at 100%.
  • Hosted exact-head GREEN: OSV Direct Source Quality run 32694464776, job 97333898737, checked out exact 9736108, passed 1,422 tests·70 subtests, and measured 100% statements/branches.
  • Current Security Scan, OSV, CodeQL, SAST, SBOM and remaining workflows are queued and therefore non-passing.
  • Unresolved review threads: 0; exact-current-head formal Reviews API verdict is absent.
  • Inkspan fix(review): put contract-reliable reasoning models first, flagships last #318 remains unchanged at fce8fe72ebf4d438c17a7c889dd37c92118c6204; its historical Security Scan failure is not acceptance evidence.

Decision: WAIT_FOR_TERMINAL_EXACT_HEAD_CHECKS_FORMAL_REVIEW_MAIN_INTEGRATION_AND_INKSPAN_CANARY.

@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Review Change Stack

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a1a08579-db40-4a36-9e08-d9aad9406bcc

✨ 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 fix/osv-direct-source-provenance-1096

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

@opencode-agent review exact current head f2a94192cba86e661ed3c5fd22a8b6ffa44cd3f0 against protected base 2cce96f8671bfde7e354effef931c14a5928c23b. Verified 6 provenance tests, compileall, interrogate, actionlint, and diff --check. The reconciler retains findings unless exact direct-source identity, SHA-512 integrity, and authoritative GitHub-reviewed affected bounds all prove them disproven; the audit is append-only and the security workflow reconciles before the reporter verdict. Do not approve from queued or status-only evidence.

@seonghobae
seonghobae marked this pull request as ready for review August 20, 2026 05:03

Copy link
Copy Markdown
Contributor Author

@opencode-agent Keep this PR Draft and repair the current exact head 29af209ed2e0ecdf57e54a04d04969fb544061a6 test-first. Two fail-closed defects remain in the bounded provenance contract:

  1. reconcile_payload() selects candidates[0]. Two same-package/version direct-source records can therefore disagree while the first valid record suppresses the finding. Add a RED regression with conflicting duplicate xlsx records, then require exactly one unambiguous matching source; zero or multiple/conflicting candidates must retain the vulnerability and emit SCANNER_METADATA_CONFLICT.
  2. The production reconciler accepts every canonical SheetJS version and removes any finding whenever version >= exclusive upper bound. The declared contract is intentionally limited to the exact official immutable xlsx@0.20.3 exception. Add RED controls for 0.20.2/0.20.4 and other versions outside an advisory bound, then prevent those versions from being reconciled without a separately reviewed policy expansion.

Also remove the self-trust exception in security-scan.yml: the required gate must not execute scripts/ci/osv_direct_source_reconcile.py from the pull-request head merely because the target repository is .github. Bind runtime policy to the governed workflow/default-branch source, and use the dedicated quality workflow—not PR-controlled policy execution—to test candidate changes. Preserve advisory IDs/severities in append-only audit evidence, exact URL/tarball/integrity checks, affected-version positive controls, and existing 100% statement/branch/docstring gates. Reacquire all exact-head checks and formal review after the repair; do not mark Ready or enable merge before then.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent

Revalidated PR #1158 after repairing the current-head provenance contract.
Current head: c573b35

Root-cause fixes:

  • Only one direct-source record may match a package/version; zero or multiple matches retain every finding and emit SCANNER_METADATA_CONFLICT.
  • The reconciliation exception is restricted to immutable SheetJS xlsx@0.20.3. Other official versions remain findings and cannot be silently reconciled.
  • The central security policy checkout now always uses github.workflow_sha; the .github PR cannot execute its own head policy as trusted runtime policy.

Exact-head proof:

  • 1249 tests passed with 63 subtests.
  • scripts/ci/osv_direct_source_reconcile.py: 226 statements / 84 branches at 100% coverage.
  • interrogate 100%, ruff clean, actionlint passed for security-scan.yml and the provenance quality workflow, compileall and git diff --check passed.

Please rerun independent review and all protected Checks for this exact head. The PR remains subject to branch protection; no merge is claimed.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review exact current head c573b35648fd424337ca2897095673a52c0be1d4 against independently resolved protected main@2cce96f8671bfde7e354effef931c14a5928c23b. This supersedes the predecessor-head request for f2a94192cba86e661ed3c5fd22a8b6ffa44cd3f0. Required acceptance is a substantive formal Reviews API verdict bound to this SHA. Preserve the fail-closed provenance contract: exact official direct-source identity/version/resolved URL/integrity and authoritative affected bounds may disprove a finding; affected or unverifiable provenance remains non-passing. Queued, status-only, and predecessor evidence are not acceptance.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Integrated current main normally at c3636cc. Focused provenance suite passed (15 tests, 47 subtests), actionlint, ruff, and diff checks passed. Re-run the exact-head security/OSV checks and review this current 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.

Copy link
Copy Markdown
Contributor Author

Inkspan downstream canary is ready for this existing owner lane; no consumer-side suppression/workaround has been introduced.

Fresh bindings before this note:

  • central protected base: .github/main@aa8503f4383e8328d89104796bc3e9f7da810376;
  • this PR is Ready/open/mergeable at exact head c3636cc2962a24e50e0f1b545f22fed824df26f8 against that base;
  • exact-head owner evidence currently includes OSV Direct Source Quality CI 32347266926 success, Security Scan 32347266784 success, OSV-Scanner PR 32347267550 success, SAST Semgrep 32347267061 success, Secret Scan 32347266807 success, Scorecard 32347266777 success, and SBOM Generation 32347266875 success; Python Security 32347266788 and CodeQL PR 32347266808 are still queued/non-passing, with no formal reviews or unresolved review threads yet. Do not promote predecessor evidence or merge while those live gates/then-current governance remain incomplete.
  • consumer protected base: ContextualWisdomLab/inkspan main@3b38ead2d00f44eb578d0689087b9293b3dabe1e;
  • consumer canary: Inkspan Draft fix(review): put contract-reliable reasoning models first, flagships last #318 exact unchanged head fce8fe72ebf4d438c17a7c889dd37c92118c6204;
  • current consumer Security Scan 32144783558 fails only at OSV job 95735816267 after exact base/head checkout and successful base/head scans; debug artifact 9328396543, digest sha256:594d8a8551017a78c98a33b6574bfbb9ce945f8b202988788ab96b224c3cfd3d, is bound to that run/head. CI 32144783586 and SAST 32144783644 are success.

After this exact owner repair integrates into protected .github/main under live governance, rerun required Security Scan on the then-unchanged Inkspan #318 head rather than transferring this PR's or predecessor consumer evidence. GREEN means the official integrity-bound direct xlsx@0.20.3 artifact no longer inherits the two npm-registry false positives while the npm-registry vulnerable controls, malformed/unknown provenance, and unrelated advisories remain fail-closed. If either owner or consumer head moves, refresh the binding before canary acceptance.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Security root-cause fix at current head e2c0031: malformed UTF-8 is now rejected at the shared text-input boundary with an explicit fail-closed ValueError, covering lockfile and JSON audit/results inputs. Added regression coverage; local 15 tests, Ruff, compileall, and diff checks passed. Please run the independent current-head review and required checks for this exact SHA.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent please review current HEAD e2c0031 for PR #1158; focus on malformed input handling, fail-closed provenance, and security regressions.

@opencode-agent opencode-agent Bot added the type: bug Defect or incorrect behavior label Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

Fresh consumer-owner revalidation identifies a live exact-identity contradiction that must be corrected on this existing central writer before Inkspan can reuse it.

GitHub PR metadata currently resolves #1158 as head 4e1102ba720ab5ef43296d17ca49b2a227fa58c0 / base main@4c33442021d63b09f35a874c5e7a779dd46ef8f2 / mergeable=false, while the PR body still claims exact head c45a776f9ec3be8b35ee105e966100c80b95c2cc and base fce028b4c3bf8e2e5e4819c1c5622e90cfa6ab39. Protected central main has independently advanced to signed/protected 9fd60f2c8c33f11a030fe7528adb1e686a993fb1, so neither body identity nor the PR's current base metadata is protected-main current truth.

Exact-head workflow evidence for actual head 4e1102ba720ab5ef43296d17ca49b2a227fa58c0 is mixed and therefore non-passing: Organization Commercial Readiness 32529497613, Rust Coverage Toolchain 32529497553, OSV Direct Source Quality 32529497646, Exact Artifact SBOM Quality 32529497588, and Security Scan 32529497692 succeeded; Secret Scan 32529497518, Python Security 32529497676, Strix 32529497559, CodeQL PR 32529497547, SAST 32529497654, OSV-Scanner PR 32529497951, SBOM Generation 32529497565, and Scorecard PR 32529497666 are terminal cancelled. The current review surface also still has one unresolved trust-boundary thread on valid_sha512_integrity: it proves only SHA-512 syntax/decoded length, not artifact-byte equality.

Consumer remains Inkspan #318 at unchanged fce8fe72ebf4d438c17a7c889dd37c92118c6204: CI 32144783586 and SAST 32144783644 pass, Security 32144783558 fails at OSV job 95735816267. There is no correct Inkspan-local suppression or provenance workaround.

Smallest owner action remains on this existing #1158 branch: reconcile non-destructively onto the then-live protected central base, resolve the integrity trust boundary with a falsifiable regression that distinguishes a merely well-formed forged digest from artifact-byte-verified provenance (or narrow the reconciliation claim so it cannot rely on unverified integrity), regenerate all required exact-head central workflows to terminal success, then update the PR's exact identity/evidence prose to the actual head/base. Only after protected integration should Inkspan #318 receive a fresh Security Scan; predecessor central or Inkspan results must not transfer.

Copy link
Copy Markdown
Contributor Author

Fresh Inkspan consumer revalidation for this existing OSV owner lane; no Inkspan suppression, dependency rename, or competing central writer was created.

Consumer identity is unchanged: ContextualWisdomLab/inkspan#318 remains Draft/mergeable at exact head fce8fe72ebf4d438c17a7c889dd37c92118c6204 against protected inkspan/main@3b38ead2d00f44eb578d0689087b9293b3dabe1e. Exact-current-head runs remain CI 32144783586 success, SAST 32144783644 success, and Security Scan 32144783558 failure. In that failing run, base/head OSV scans and output validation all succeed; job 95735816267 fails specifically at Report PR-introduced OSV findings, while Trivy 95735816261, Scorecard 95735816309, and dependency-review 95735816431 are successful. This continues to reproduce the attribution boundary rather than an OSV transport/output outage.

Fresh owner-state refetch supersedes this PR body's older identity: .github#1158 is now exact head 4e1102ba720ab5ef43296d17ca49b2a227fa58c0, with PR metadata base SHA 4c33442021d63b09f35a874c5e7a779dd46ef8f2; GitHub currently reports the PR non-mergeable while protected .github/main has advanced to 23a776ed37027d8ab8ab2aefcf81fac586352e2f. Exact-head OSV Direct Source Quality CI 32529497646, Security Scan 32529497692, organization-readiness 32529497613, OpenCode Rust coverage quality 32529497553, and exact-artifact SBOM quality 32529497588 are success, but same-head Secret Scan, Python Security, Strix Changed Path, CodeQL, SAST, OSV-Scanner, SBOM Generation, and Scorecard generations are cancelled and therefore non-passing. Formal reviews are COMMENTED only; the current thread set also still contains one unresolved informational integrity-boundary thread. Do not transfer predecessor success or rerun the Inkspan consumer yet.

The smallest safe owner action remains dependency-order repair of #1158 against then-current protected central main without force-push/destructive history, preserving its eight-path OSV ownership boundary and excluding the separate pip-audit writer. Then regenerate the complete exact-head central gate/review set. Only after an accepted equivalent repair is protected-main truth should Inkspan #318 rerun Security Scan on unchanged/descendant exact head. Consumer GREEN acceptance is specific: the reporter must no longer classify official immutable xlsx@0.20.3 from the governed root pnpm lock as a PR-introduced affected npm-registry package, while genuine affected/unknown/conflicting provenance remains fail-closed.

Preserve the immutable direct-source reconciler while adopting the protected-main cross-fork checkout boundary. Bind base and head provenance to source/pnpm-lock.yaml so scan and reconciliation identities remain coherent.

Copy link
Copy Markdown
Contributor Author

Protected main is now integrated non-destructively at exact head 2cc5427b3d3a8185618fb07cf25b587c03662aa0 (tree dd35ad7095648cede10876395d57b303881f86ab, parents 4e1102ba… + 885f2cd…).

The conflict exposed a real cross-fork provenance boundary: protected main confines both checkouts/scans to source/, while the OSV reconciler still referenced root pnpm-lock.yaml. The narrow repair binds both scan roots and provenance to source/pnpm-lock.yaml, preserves base evidence outside the replaceable checkout directory, and keeps supported --output-file arguments/fail-closed result classification.

RED: focused merge contract failed because the old broad source/ substring count included provenance paths.
GREEN:

  • focused OSV + required-workflow contract: 89 passed, 53 subtests passed
  • full central pytest: 1418 passed, 1 skipped, 69 subtests passed
  • exact candidate tree matched the remote Git tree byte-for-byte; git diff --check clean

Fresh hosted workflows are queued and remain non-passing until terminal. Inkspan #318 stays the downstream acceptance canary; no consumer source was changed. Exact-current-head formal review remains required.

@opencode-agent review

devin-ai-integration[bot]

This comment was marked as resolved.

Require the exact SHA-512 receipt for the governed SheetJS 0.20.3 tarball. A merely well-formed but unrelated digest now fails closed instead of authorizing advisory reconciliation.
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Exact-head evidence for e61fb11fbd5c7464d34cc8bedc3a7177fbdcade2:

  • TDD trust-boundary repair: .github self-PR policy checkout is pinned to protected pull_request.base.sha; consumer required workflows retain trusted github.workflow_sha.
  • Bootstrap is fail-safe: when the protected base predates the reconciler, the workflow retains raw OSV results unchanged rather than executing PR-owned reconciliation or turning absence into success.
  • RED reproduced the missing trusted-policy bootstrap failure. Focused GREEN: 107 tests + 54 subtests. Full central GREEN: 1,418 passed, 1 skipped, 70 subtests. git diff --check and compileall pass.
  • Hosted Security Scan run 32636947107 checked out protected policy base 885f2cd251999f21cf562cab3e2d9cc3cc3ec737; its OSV, Trivy, dependency-review, and Scorecard jobs passed. OSV quality, CodeQL, SAST, Python Security, Secret Scan, OSV Scanner, SBOM, exact SBOM, organization readiness, OpenCode coverage, Scorecard, and Strix path quality are all terminal success on this exact head.
  • The one unresolved thread is intentionally operational: confirm the exact OSV source.path on the pnpm-lock consumer after protected-main integration. Unknown shapes remain SCANNER_METADATA_CONFLICT and non-passing.

Please provide a formal Reviews API verdict bound to this exact head. Predecessor reviews/checks are not counted.

Copy link
Copy Markdown
Contributor Author

Inkspan #318 dependency revalidation on the current owner state:

  • Live owner identity is base 885f2cd251999f21cf562cab3e2d9cc3cc3ec737 / head e61fb11fbd5c7464d34cc8bedc3a7177fbdcade2, mergeable=true. The PR body still names predecessor c45a776f9ec3be8b35ee105e966100c80b95c2cc / fce028b4c3bf8e2e5e4819c1c5622e90cfa6ab39 and says unresolved threads are zero; those exact-identity/current-evidence claims are stale and must not be used as passing evidence.
  • Exact-head workflows are terminal success: OSV-Scanner PR 32636947315; OSV Direct Source Quality 32636947064; Security 32636947107; SBOM 32636947094; Exact Artifact SBOM 32636947149; Organization Readiness 32636947045; Scorecard 32636947163; Secret Scan 32636947034; SAST 32636947113; Python Security 32636947099; CodeQL 32636947121; Strix 32636947072; OpenCode Rust Coverage 32636947093. Skipped helper 32636947097 is not treated as passing evidence.
  • One review thread remains unresolved. Exact current Security Scan 32636947107, osv-scan job 97188031544, checks out protected base 885f2cd251999f21cf562cab3e2d9cc3cc3ec737 as the trusted central policy and logs trusted provenance policy is not yet present; retaining raw OSV evidence without reconciliation. That green status therefore does not prove the new path-binding reconciler acceptance on this PR head. Keep the thread open until exact-head owner evidence and formal review converge.
  • First causal boundary for Inkspan fix(review): put contract-reliable reasoning models first, flagships last #318 is the reusable central direct-source provenance reconciliation. There is no correct Inkspan-local suppression: suppressing the consumer finding would weaken the fail-closed genuine-advisory path.
  • Consumer GREEN remains: integrate this central repair under live central governance, then rerun a fresh Security Scan on unchanged/descendant Inkspan fix(review): put contract-reliable reasoning models first, flagships last #318. Predecessor fix(review): put contract-reliable reasoning models first, flagships last #318 failures and central predecessor evidence do not transfer.

No duplicate source writer or redispatch is needed; converge the existing owner PR's live identity, evidence, and unresolved-thread state before lifecycle action.

Copy link
Copy Markdown
Contributor Author

@opencode-agent please perform a fresh formal review of exact head e61fb11fbd5c7464d34cc8bedc3a7177fbdcade2 against protected base 885f2cd251999f21cf562cab3e2d9cc3cc3ec737. All materialized exact-head PR workflows are terminal success. Review the actual OSV direct-source provenance and trusted-base bootstrap contract; do not count prior comments or status-only evidence as a verdict. The one remaining operational thread intentionally stays unresolved until a protected-main Inkspan canary proves the scanner's actual source.path binding.

@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 could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for e61fb11fbd5c7464d34cc8bedc3a7177fbdcade2.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

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: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: osv-direct-source-provenance.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: osv-direct-source-provenance.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: osv_direct_source_reconcile.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: osv_direct_source_reconcile.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 88b6859f2edabfb65f2bbac32460b5341c3980c0
  • Workflow run: 32746016862
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 88b6859f2edabfb65f2bbac32460b5341c3980c0.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

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: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: osv-direct-source-provenance.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: osv-direct-source-provenance.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: osv_direct_source_reconcile.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: osv_direct_source_reconcile.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 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 could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for e61fb11fbd5c7464d34cc8bedc3a7177fbdcade2.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

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: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: osv-direct-source-provenance.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: osv-direct-source-provenance.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: osv_direct_source_reconcile.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: osv_direct_source_reconcile.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Exact head 97361089cab8c16bb94ecaa0ea01db9c6aed56b4 addresses both current informational findings. The duplicate candidates/no-candidates reason is computed once, removing the unreachable inner ternary. Atomic results/audit write OSError now follows the typed ::error:: non-passing path instead of escaping as an unstructured traceback. RED reproduced the escaping OSError: write failed; GREEN: focused 20 tests·54 subtests, full 1,422 tests·70 subtests, reconciler 292 statements/100 branches at 100%. Current hosted runs are fresh and predecessor evidence is non-passing until they complete.

@seonghobae
seonghobae enabled auto-merge (squash) August 24, 2026 06:44

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Please publish an independent substantive formal Reviews API verdict for exact current head 88b6859f2edabfb65f2bbac32460b5341c3980c0 against protected main@613a33e0cb1c6db9790fae99f6253445712ac37a. All 13 substantive exact-head workflows are terminal-success and unresolved review threads are 0. Older CHANGES_REQUESTED, COMMENTED, check/status, and predecessor-head evidence is historical. Inspect the complete current diff and bind APPROVED or CHANGES_REQUESTED only to this SHA; do not reuse an older verdict.

@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 could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 88b6859f2edabfb65f2bbac32460b5341c3980c0.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

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: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: osv-direct-source-provenance.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: osv-direct-source-provenance.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: osv_direct_source_reconcile.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: osv_direct_source_reconcile.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 24, 2026 17:52

@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 could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for 88b6859f2edabfb65f2bbac32460b5341c3980c0.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

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: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: osv-direct-source-provenance.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: osv-direct-source-provenance.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["CI script: osv_direct_source_reconcile.py"]
  S4 --> I4["review and security gate shell path"]
  I4 --> R4["Review risk: CI script: osv_direct_source_reconcile.py"]
  R4 --> V4["bash -n plus Strix self-test"]
  Evidence --> S5["Test (2 files)"]
  S5 --> I5["regression suite"]
  I5 --> R5["Review risk: Test (2 files)"]
  R5 --> V5["targeted test run"]
Loading

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

Labels

area: ci-cd CI, GitHub Actions, checks, release, or supply chain priority: medium Normal-priority or P2 work status: blocked Blocked by conflict, dependency, or required prerequisite type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant