fix: keep failed-check mapping failures out of findings - #58
Conversation
There was a problem hiding this comment.
Pull request overview
This PR tightens the OpenCode failed-check fallback experience so evidence-to-source mapping failures stay an internal/tooling state (not user-facing Findings content), while also extending scheduler coverage for an auto-merge + outdated-branch regression case.
Changes:
- Reworded failed-check fallback failure logs in the OpenCode review workflow and helper script to frame “no source-backed mapping” as a rerunnable tooling/evidence state.
- Updated governance audit documentation to remove the previously cited generic failed-check sentence and refreshed the live repo inventory / traces.
- Added a scheduler regression test ensuring
mergeStateStatus=BEHIND+ current-head OpenCode approval still triggersupdate_brancheven if auto-merge is already enabled.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
tests/test_pr_review_merge_scheduler.py |
Adds regression coverage for BEHIND + current-head approval behavior when auto-merge is already enabled. |
scripts/ci/test_strix_quick_gate.sh |
Updates string assertions to match the revised failed-check fallback log phrasing in the workflow. |
scripts/ci/emit_opencode_failed_check_fallback_findings.sh |
Rewords the “no source-backed match” failure message emitted when no deterministic finding can be produced. |
PR_GOVERNANCE_AUDIT.md |
Removes the previously-banned generic sentence example and refreshes inventory + evidence narrative. |
.github/workflows/opencode-review.yml |
Rewords failed-check fallback helper failure logs to avoid implying user-facing Findings on mapping failure. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
OpenCode Review Overview
Pull request overviewOpenCode reviewed the current-head bounded evidence and found no blocking issues. FindingsNo blocking findings. SummaryInspected changed files and found no actionable issues. Verification posture: Linter/static: Not applicable (no source changes), TDD/regression: Not applicable (no test changes), Coverage: Not applicable (no source changes), Docstring coverage: Not applicable (no source changes), DAG: Not applicable (no execution path changes), PoC/execution: Not applicable (no executable changes), DDD/domain: Not applicable (no domain changes), CDD/context: Not applicable (no context changes), Similar issues: Not applicable (no issue references), Claim/concept check: Not applicable (no conceptual changes), Standards search: Not applicable (no standard references), Compatibility/convention: Not applicable (no compatibility changes), Breaking-change/backcompat: Not applicable (no breaking changes), Performance: Not applicable (no performance changes), Developer experience: Improved (updated CI scripts), User experience: Not applicable (no user-facing changes), Security/privacy: Not applicable (no security changes). Verification posture: CodeGraph evidence was initialized and bounded current-head evidence reviewed for changed-file evidence including .github/workflows/opencode-review.yml, .github/workflows/strix.yml, PR_GOVERNANCE_AUDIT.md, README.md, scripts/ci/emit_opencode_failed_check_fallback_findings.sh, and 5 more.
Change Flow DAGflowchart 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["CI script (4 files)"]
S3 --> I3["review and security gate shell path"]
I3 --> R3["Review risk: CI script (4 files)"]
R3 --> V3["bash -n plus Strix self-test"]
Evidence --> S4["Test (2 files)"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test (2 files)"]
R4 --> V4["targeted test run"]
|
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head evidence but cannot approve because required coverage evidence did not pass.
Findings
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove 100% test and docstring coverage
-
Problem: The OpenCode approval path reached an APPROVE control result while the separate coverage-evidence job result was
failure. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves both test coverage and docstring coverage at 100%; missing, failed, skipped, unavailable, not-applicable, or partial coverage evidence is a blocker.
-
Fix: Install or configure the repository coverage/docstring coverage tooling, rerun the current-head coverage-evidence job, and approve only after it reports
successwith 100% evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so 100% test/docstring coverage was not proven for current headbf66ce2fcf47caa4546cefae65ce0de76e425ccc. -
Head SHA:
bf66ce2fcf47caa4546cefae65ce0de76e425ccc -
Workflow run: 28149145616
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
bf66ce2fcf47caa4546cefae65ce0de76e425ccc - Required test coverage: 100%
- Required docstring coverage: 100%
Python test coverage
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0
rootdir: /home/runner/work/.github/.github
configfile: pyproject.toml
collected 26 items
tests/test_opencode_review_normalize_output.py ............. [ 50%]
tests/test_pr_review_merge_scheduler.py ............. [100%]
============================== 26 passed in 0.45s ==============================
- Result: PASS
Python coverage threshold
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------
scripts/ci/opencode_review_normalize_output.py 267 0 100%
scripts/ci/pr_review_merge_scheduler.py 360 3 99% 492, 639, 644
------------------------------------------------------------------------------
TOTAL 627 3 99%
Coverage failure: total of 99 is less than fail-under=100
- Result: FAIL (exit 2)
Python docstring coverage
RESULT: PASSED (minimum: 100.0%, actual: 100.0%)
- Result: PASS
Coverage Decision
- Result: FAIL
- Test coverage: not proven 100%
- Docstring coverage: not proven 100%
- Failure count: 1
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head bounded evidence and found no blocking issues.
Findings
No blocking findings.
Summary
Inspected changed files and found no actionable issues. Verification posture: Linter/static: Not applicable (no source changes), TDD/regression: Not applicable (no test changes), Coverage: Not applicable (no source changes), Docstring coverage: Not applicable (no source changes), DAG: Not applicable (no execution path changes), PoC/execution: Not applicable (no executable changes), DDD/domain: Not applicable (no domain changes), CDD/context: Not applicable (no context changes), Similar issues: Not applicable (no issue references), Claim/concept check: Not applicable (no conceptual changes), Standards search: Not applicable (no standard references), Compatibility/convention: Not applicable (no compatibility changes), Breaking-change/backcompat: Not applicable (no breaking changes), Performance: Not applicable (no performance changes), Developer experience: Improved (updated CI scripts), User experience: Not applicable (no user-facing changes), Security/privacy: Not applicable (no security changes).
Verification posture: CodeGraph evidence was initialized and bounded current-head evidence reviewed for changed-file evidence including .github/workflows/opencode-review.yml, .github/workflows/strix.yml, PR_GOVERNANCE_AUDIT.md, README.md, scripts/ci/emit_opencode_failed_check_fallback_findings.sh, and 5 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 proves 100% test coverage.
Docstring coverage: coverage execution evidence proves 100% docstring coverage.
DAG: Change Flow DAG maps .github/workflows/opencode-review.yml through bounded evidence, review risk, 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, and current-head workflow evidence were used for claims.
Standards search: standards and external-source checks are delegated to configured OpenCode web_search/Context7/DeepWiki sources when applicable; no evidence-backed standards blocker is present in bounded evidence.
Compatibility/convention: changed workflow/script conventions and compatibility 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, and maintenance surfaces were checked for helpful or obstructive DX impact in bounded evidence.
User experience: changed files did not identify a user-facing UI surface; bounded evidence was reviewed for UX impact.
Security/privacy: workflow-token, review-gate, and repository-automation security/privacy boundaries were checked in bounded evidence.
- Result: APPROVE
- Reason: No blockers found
- Head SHA:
464ce2eca601cbcd7e8f42dd84f80e21ea822427 - Workflow run: 28149765548
- Workflow attempt: 1
Summary
Stop OpenCode failed-check mapping failures from becoming user-facing
Findingsblocks.Changes
BEHIND+ current-head OpenCode approval must request a branch update even when auto-merge is already enabled.bandscopelive trace that exposed stale scheduler behavior.Related rollout
Opened ContextualWisdomLab/bandscope#450 after live run 28134181171 showed the repo-local scheduler waiting on already-enabled auto-merge instead of updating an outdated approved PR. The first head of that PR reproduced the generic failed-check Findings text; the follow-up head patches that path and dismissed the stale review.
Verification
PYTHONPATH=$PWD pytest -q tests/test_pr_review_merge_scheduler.py tests/test_opencode_review_normalize_output.pypython3 scripts/ci/pr_review_merge_scheduler.py --self-testactionlint .github/workflows/pr-review-merge-scheduler.ymlbash -n scripts/ci/emit_opencode_failed_check_fallback_findings.sh scripts/ci/validate_opencode_failed_check_review.sh scripts/ci/test_strix_quick_gate.shNote: full
scripts/ci/test_strix_quick_gate.shwas not used as the final signal in this workspace because it hit unrelated pre-existing fixture failures in Strix model fallback cases before this change.