fix(review): central pipeline reliability — hypothesis coverage toolchain + Strix submodule materialization - #656
Conversation
The central coverage-evidence sandbox installs a trusted offline Python test toolchain (coverage, interrogate, pytest, pytest-cov) and runs each target repo's 'pytest tests'. Repos with always-on Hypothesis property tests (contextual-orchestrator tests/fuzz/, fast-mlsirm, codec-carver, ...) fail collection with 'ModuleNotFoundError: No module named hypothesis' -> pytest exit 2 -> coverage-evidence FAIL -> OpenCode posts REQUEST_CHANGES and can never approve, permanently blocking those repos' PR queues. Add hypothesis (MPL-2.0, permissive test tool) to the toolchain so the sandbox can run those suites. .github's own tests do not import hypothesis, so its coverage-evidence and 100%-coverage gate on scripts/ci are unaffected. Regenerated the hash lock via ./scripts/ci/compile_opencode_review_lock.sh (hypothesis==6.163.0 + attrs, sortedcontainers). Evidence: contextual-orchestrator PR #75 coverage-evidence run 30470910566 attempts 1 and 2 both failed at 'ImportError: No module named hypothesis' while the repo's own 'Full unit and contract suite' passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016wtuYFp4E22QnEU1bFMhsr
|
Warning Review limit reached
Next review available in: 3 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
Comment |
Status: code-complete, blocked only on transient reviewer capacityAll of this PR's own required checks are green: The only thing gating merge is Coordination notes for other governance actors:
Generated by Claude Code |
Fix validated on the updated head — only transient model-pool capacity remainsUpdated this branch onto the recovered
So the code is complete and its own gate is green; the remaining wait is purely a transient model-capacity window that self-heals as the re-review backlog drains. No force-merge / bypass (per the maintainer's "self-heal, no bypass" decision); a monitoring backstop will re-check for a fresh capacity window rather than thrash re-triggers and deepen the exhaustion. Generated by Claude Code |
The org-wide merge queue keeps stalling on opencode-review OPENCODE_MODEL_POOL_OUTCOME=exhausted: the free anonymous Zen pool for public repos was only 3 models (nemotron-3-ultra-free, deepseek-v4-flash-free, north-mini-code-free), so concurrent org PRs saturate it and reviews fall through to the rate-limited paid providers. Double the free public-repo pool by adding the other 4 models the Zen catalog currently promotes as free-tier, tried after the 3 proven ones and before any paid github-models/openai/openrouter fallback: big-pickle, laguna-s-2.1-free, ling-3.0-flash-free, mimo-v2.5-free Exact ids verified against four independent sources that agree on the slugs and the free-tier set: the OpenCode Zen docs source (anomalyco/opencode packages/web/src/content/docs/zen.mdx), openclaw's provider catalog (which lists exactly these seven as the "currently promoted free-tier rows"), NousResearch/hermes-agent, and CodeWhale. All share the same https://opencode.ai/zen/v1 endpoint and @ai-sdk/openai- compatible driver already used by the pool. Each is added with tool_call: true (required by the review agent) and the same 256k/64k limit as deepseek/north; #662's free-provider 600s failover means a weaker candidate is skipped rather than stalling the run. Kept private repositories on paid providers only (the free anonymous models' data terms still forbid private code), and updated the test_opencode_agent_contract.py pool + tool_call assertions in lockstep. Verification: 115 opencode tests pass (tests/test_opencode_agent_contract.py 37, test_opencode_workflow_shell_syntax.py 5, plus model-pool/reasoning-effort/security/context/docker suites 73); workflow YAML re-parses. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016wtuYFp4E22QnEU1bFMhsr
…omlab-audit-governance-fb7470 # Conflicts: # .github/workflows/opencode-review-dispatch.yml # tests/test_opencode_agent_contract.py
build_pull_request_head_tree_scope_dir enumerates the entire PR-head tree with `git ls-tree -r --full-tree` and fails closed on any entry whose object type is not `blob`. A git submodule pointer (gitlink) lists as `160000 commit`, so any repository containing a submodule fails Strix whenever a PR takes the full-head-context path (e.g. a Dockerfile/compose change makes pull_request_changes_require_full_head_context true), even though the submodule is unchanged and carries no scannable blob content in this repository. Skip gitlink entries (mode 160000 / type commit) during full-tree materialization, mirroring the exclusion the changed-file scope path already applies to submodule pointers, instead of failing closed on a legitimately non-blob tree entry. Regression: run_full_head_scope_skips_gitlink_case exercises a Dockerfile-change PR (full-head context) in a repo with an unchanged submodule gitlink -- it fails closed (exit 2) without the skip and passes with it. Full strix gate suite green. Observed on gyeot#13 (changed server/Dockerfile in a repo with the services/contextual-orchestrator and services/fast-mlsirm submodules). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016wtuYFp4E22QnEU1bFMhsr
Two central review-pipeline reliability fixes, both verified against the full
.githubsuite.1. Add
hypothesisto thecoverage-evidencetrusted toolchainThe central
coverage-evidencesandbox (the OpenCode approval gate) installs a fixed offline Python test toolchain fromrequirements-opencode-review-ci-hashes.txtand runs each target repo'spytest tests. Repos whose suites include always-on Hypothesis property tests fail at collection:→
coverage-evidencefailure→ OpenCode postsREQUEST_CHANGES→ those PRs can never be approved. This addshypothesis(MPL-2.0, permissive; already a declared test dep across the org) torequirements-opencode-review-ci.txtand regenerates the hash lock.maindoes not carry it yet (verified). The 3→7 free-model expansion originally on this branch was dropped as redundant whenmaingained it via a sibling PR.2. Skip submodule gitlinks in full-tree PR-head materialization (Strix)
build_pull_request_head_tree_scope_dirinstrix_quick_gate.shenumerates the whole PR-head tree withgit ls-tree -r --full-treeand fails closed on any non-blobentry. A git submodule pointer (gitlink) lists as160000 commit, so any repository containing a submodule fails Strix whenever a PR takes the full-head-context path (e.g. a Dockerfile/compose change makespull_request_changes_require_full_head_contexttrue) — even though the submodule is unchanged and carries no scannable blob content here.Fix: skip gitlink entries (mode
160000/ typecommit) during full-tree materialization, mirroring the exclusion the changed-file scope path already applies to submodule pointers. Observed onContextualWisdomLab/gyeot#13(changedserver/Dockerfilein a repo withservices/contextual-orchestratorandservices/fast-mlsirmsubmodules).New regression
run_full_head_scope_skips_gitlink_case: a Dockerfile-change PR (full-head context) in a repo with an unchanged submodule gitlink — fails closed (exit 2) without the fix, passes with it.Safety / scope
scripts/cidomain logic, so the 100% coverage/docstring gates onscripts/ciare unaffected.160000/commitshort-circuit before the existing non-blob fail-closed; every other tree entry is handled exactly as before.Verification
.githubpytest suite: 710 passed.strix_quick_gateshell suite: green (exit 0), including the new gitlink regression case.Impact
Unblocks OpenCode approval for every hypothesis-using repo's PR queue, and stops Strix from spuriously failing closed on every submodule-bearing repo whose PR touches a container manifest.
Generated by Claude Code