Repository navigation
[Review pipeline] Zero PRs mergeable in fast-mlsirm/LineageWeave: hash-pinning, cross-repo status 403, dispatch throughput #1212
Description
Problem
Zero PRs are currently mergeable in ContextualWisdomLab/fast-mlsirm (60 open) or ContextualWisdomLab/LineageWeave (12 open) because the required branch-protection review (required_approving_review_count: 1) has not been satisfied by any bot on any current-head PR in either repo (reviewDecision is REVIEW_REQUIRED, CHANGES_REQUESTED, or empty on every open PR — none APPROVED). PR authors cannot self-approve (GitHub platform rule), so this is a hard blocker on the whole PR backlog in both repos, not a per-PR defect.
Investigated via gh run view/gh api .../check-runs/.../annotations on recent opencode-review-dispatch.yml and *-hourly-review-repair.yml runs. Three independent, concrete root causes found:
1. LineageWeave's uv.lock cannot be hash-pinned because two dependencies are git-sourced
scripts/ci/materialize_base_python_requirements.py requires the base branch's uv.lock to export as a fully hash-pinned requirements closure before the sandboxed coverage-evidence job (and therefore the whole approval decision) can run. LineageWeave's uv.lock pins fast-mlsirm and RankWeave via source = { git = "https://github.com/ContextualWisdomLab/....git?rev=<sha>#<sha>" }. uv export cannot emit a --hash=sha256:... for a git dependency (there is no fixed sdist/wheel artifact to hash — installing from git means running the package's build backend), so every export of LineageWeave's main lock fails _is_fully_hash_pinned_requirement, and _export_uv_lock raises "uv export for tracked base lock uv.lock was not fully hash-pinned". Every dispatch run against a LineageWeave PR fails at the coverage-evidence job for this reason (confirmed on PR #373, #387, #258, #349 dispatch runs 2026-08-21 21:3x UTC), regardless of what the PR itself changes.
Reproduced: LineageWeave's pinned fast-mlsirm commit (5006c38...) is 477 commits ahead of the latest tagged release (v0.6.0), and fast-mlsirm's release-tag.yml only runs gh release create — it does not build or attach an installable sdist/wheel asset, and the package is not published to PyPI (pypi.org/pypi/fast-mlsirm/json → 404) despite the org's PYPI_API_KEY secret already being available. Same shape of problem likely applies to RankWeave.
Recommended fix (do not relax the sandbox's hash-pinning requirement — that requirement is a real supply-chain control, since installing an unpinned/unhashed git dependency in an untrusted-PR sandbox means running arbitrary build-backend code from a mutable ref class):
- Add a
maturin build --release(or equivalent) step tofast-mlsirm's andRankWeave's release workflow that builds sdist + wheels and attaches them as GitHub Release assets (or publishes to PyPI using the existingPYPI_API_KEY). - Cut a release close to the commit LineageWeave currently depends on.
- Switch LineageWeave's
pyproject.tomlentries forfast-mlsirm/RankWeavefromgitsources to a versioned PyPI dependency (or a direct release-asset URL dependency, whichuvcan hash), then regenerateuv.lock.
2. Cross-repo opencode-review status publish always fails with 403
In opencode-review-dispatch.yml, the step that publishes the optional opencode-review commit status back to the target repo (e.g. repos/ContextualWisdomLab/LineageWeave/statuses/<sha>) using the opencode-app exchanged token fails every time with gh: Resource not accessible by integration (HTTP 403) (confirmed on runs against appguardrail#969, LineageWeave#373). The OpenCode GitHub App does not appear to have statuses:write granted on these target repos, or is not installed there with that permission. This step is non-authoritative (the doc string says "the exact-head formal review remains authoritative") but it fails loudly on every run and wastes a job step; either grant the App the permission on all org repos it dispatches to, or drop the step.
3. Review-dispatch throughput is far below the PR creation rate
fast-mlsirm-hourly-review-repair.yml (and the generic pr-review-merge-scheduler.yml) invoke scripts/ci/pr_review_fix_scheduler.py / pr_review_merge_scheduler.py with MAX_DISPATCHES: 1 per run, i.e. at most ~1 new review dispatch per repo per scheduled run. Against a backlog of 60 open PRs in fast-mlsirm alone, this cannot keep the queue current even before accounting for root cause #1 above. Separately, the scheduler's own GitHub GraphQL calls (listing open PRs) intermittently fail after only 3 retries with a 1s/2s/4s backoff (Transient GitHub GraphQL error on attempt 1..3/4), aborting the entire scheduled run with no partial progress (confirmed failures at 2026-08-21T22:00 and 21:01 UTC for fast-mlsirm). Recommend widening the retry budget/backoff for transient GraphQL errors before concluding failure, and revisiting MAX_DISPATCHES once root cause #1 is fixed and the backlog is under control (raising throughput without fixing #1 would just burn compute on runs that fail at coverage-evidence anyway).
Evidence
gh run view 32529248149 --repo ContextualWisdomLab/.github(LineageWeave#373 dispatch,coverage-evidencefailure annotation:Could not materialize base Python locks: uv export for tracked base lock uv.lock was not fully hash-pinned)gh run view 32531069679 --repo ContextualWisdomLab/.github(fast-mlsirm-hourly-review-repair,Transient GitHub GraphQL errorx3 then abort)gh run view 32536566379 --repo ContextualWisdomLab/.github(cross-repo status 403 againstappguardrail#969)gh pr list --repo ContextualWisdomLab/fast-mlsirm --state open --json reviewDecision/ same forLineageWeave: zeroAPPROVEDamong 72 combined open PRs.
Suggested scope for follow-up PRs (do not bundle into one PR)
fast-mlsirm,RankWeave: add release-asset (or PyPI) publishing to the release workflow.LineageWeave: once (1) ships a release, switch the two git-sourcedpyproject.tomlentries to the released, hash-pinnable versions and regenerateuv.lock..github: fix or remove the cross-repoopencode-reviewstatus-publish step (403)..github: widen the scheduler's GraphQL retry budget; revisitMAX_DISPATCHESafter (1)-(2) land.
Activity
seonghobae commentedon Aug 22, 2026
Progress on recommended-fix item 1 (fast-mlsirm/RankWeave release-asset publishing): opened ContextualWisdomLab/fast-mlsirm#1207, which adds a
publish-pypi.ymlworkflow (sdist + linux/macos/windows wheels via maturin-action, published to PyPI + attached as release assets onrelease: published).This PR is itself blocked by the exact gate this issue describes — it can't get the required bot approval until the pipeline is fixed, which is exactly the chicken-and-egg this issue flags. Flagging here so it's visible to whoever reviews/repairs the pipeline: merging #1207 (or applying it directly) unblocks a real fix path rather than just working around the symptom.
Once #1207 lands and a release is cut, LineageWeave's
fast-mlsirm/RankWeavegit-sourceuv.lockentries can switch to the released PyPI versions (item in the original recommended-fix scope), which resolves root cause #1 for every LineageWeave PR at once.RankWeavestill needs the equivalent workflow — not done yet, tracking as follow-up.seonghobae commentedon Aug 22, 2026
Checked RankWeave separately (the other git-sourced dependency in LineageWeave's
uv.lock): unlike fast-mlsirm, RankWeave is already on PyPI and already has a workingpublish.yml(trusted-publisher/OIDC based, no token secrets needed) — but PyPI currently only has0.1.0published while LineageWeave's git pin is exact-identical to RankWeave'sv0.18.0tag (0 commits ahead/behind). The last publish attempt (2026-08-06, run 31067753363) failed at the trusted-publishing OIDC exchange:This is a PyPI project-settings problem (Trusted Publisher config on the
rankweavePyPI project no longer matches the repo/workflow/environment claims RankWeave's Actions run presents) — not something fixable from the GitHub side or viagh/git. It needs whoever administers therankweavePyPI project to fix/re-add the trusted publisher at https://pypi.org/manage/project/rankweave/settings/publishing/ (matching repoContextualWisdomLab/RankWeave, workflowpublish.yml, environmentpypi), then re-runpublish.yml(workflow_dispatch withrelease_tag=v0.18.0) to catch PyPI up.Once that's done, LineageWeave's
RankWeavegit-sourceuv.lockentry can switch torankweave==0.18.0from PyPI immediately (no code/build work needed on RankWeave's side, unlike fast-mlsirm).seonghobae commentedon Aug 22, 2026
New finding via static analysis (
actionlint):pr-review-fix-scheduler.yml's "Resolve immutable called-workflow source" step references a nonexistent context, unconditionally failsRan
actionlint(v1.7.12) against the review-pipeline workflows in this repo to look for issues the runtime logs hadn't already surfaced. It flagged.github/workflows/pr-review-fix-scheduler.yml:225-228:job.workflow_repository/job.workflow_sha/job.workflow_ref/job.workflow_file_pathare not properties of the GitHub Actionsjobcontext (which only exposescontainer,services, andstatus). Each of these${{ }}expressions evaluates to an empty string at runtime rather than erroring — so the four env vars the "Resolve immutable called-workflow source" step (line 221) sets are always empty, unconditionally, on every run that reaches this step.That step immediately does:
Since
$WORKFLOW_REPOSITORYis always""and$expected_repositoryis"ContextualWisdomLab/.github", this check can never pass — the step fails every single time it executes.Confirmed against real runs, not just static analysis: this step doesn't appear at all in
pr-review-fix-scheduler.ymlruns from 2026-08-16 (older workflow revision, before this step existed — job logs show onlypr_review_fix_scheduler.py --self-test, no "Resolve immutable..." step). The step first appears in the 2026-08-20repository_dispatch-triggered runs (32360044573failure, 32360412990cancelled) — i.e. every run that has hit this code path since it was added has failed here.pr-review-merge-scheduler.yml,opencode-review-dispatch.yml,pr-review-autofix.yml, andpr-auto-rebase.ymldo not contain this pattern (checked via the sameactionlint/grep pass) — the blast radius looks isolated topr-review-fix-scheduler.yml'srepository_dispatch(auto-repair-dispatch) path specifically, not the main review/approval/merge flow this issue already tracks.Likely intended fix (not applied — this is a security-relevant workflow-identity check and I don't want to guess-patch it): GitHub Actions doesn't expose "which exact commit of the currently-executing workflow file is running" under
job.*. The relevant built-ins aregithub.workflow_ref/github.workflow_sha(current workflow file's ref/SHA) and, for a workflow invoked as a reusable workflow viauses:,github.job_workflow_ref/github.job_workflow_shaon the caller's side. Whoever owns this script should confirm which of those (or a different mechanism entirely, e.g. parsinggithub.workflow_refserver-side) was actually intended before changing it, since the four-way split (repository/sha/ref/file_path) suggests the author meant to parse a combinedowner/repo/.github/workflows/file.yml@refstring rather than read four separate fields.Evidence commands:
actionlint -shellcheck= -pyflakes= pr-review-fix-scheduler.yml(reproduces the four warnings above)gh run list --repo ContextualWisdomLab/.github --workflow pr-review-fix-scheduler.yml --json databaseId,conclusion,event,createdAtgh api repos/ContextualWisdomLab/.github/actions/jobs/95141441945/logs(2026-08-16 success — step absent) vs the 2026-08-20 failing run logs (step present, fails)seonghobae commentedon Aug 22, 2026
Opened #1221 for root cause #3 (the actionlint-caught nonexistent
job.workflow_*context references inpr-review-fix-scheduler.yml). Also found and fixed the same broken pattern inexact-artifact-sbom-attestation.yml(3 occurrences) while I was in there — its trusted-verifier checkout and signer-repository resolution had the identical bug, though it happened to fail closed downstream viagh attestation verifyrather than silently bypassing signer verification. Full test suite green (1330 passed / 1 skipped, unrelated env-only failure).fix(review-pipeline): replace nonexistent job.workflow_* context refs (…
seonghobae commentedon Aug 22, 2026
Root cause #3 landed: #1221 merged. Note this ended up being a two-part fix — the original PR only replaced the nonexistent
job.workflow_*context references withgithub.workflow_ref/github.workflow_sha, but those still don't identify a called reusable workflow's own file (they reflect the top-level caller inside aworkflow_calltarget), so the scheduler's identity guard would have kept failing closed on every real hourly-caller invocation even after that first push. Caught via Devin review and fixed properly before merge: validategithub.repositoryinstead, since every current caller uses a local same-repouses: ./.... Watching fast-mlsirm#1207 and TEPP#153 as bellwethers for whether main-branch PRs start getting real bot APPROVE decisions now.seonghobae commentedon Aug 22, 2026
New finding after #1214/#1235/#1236/#1240/#1241 (all merged, confirmed working end-to-end in production)
Every GitHub-API-layer issue in the mention-dispatch pipeline is now fixed: retry-with-backoff on the shared installation-token rate limit (scoped safely to avoid resending non-idempotent writes), a wall-clock time budget so the sweep job exits cleanly instead of hitting its 15-minute Actions timeout, unbuffered output so diagnostics actually reach the log, and isolation so one repo's listing failure doesn't crash the whole cycle. Confirmed live: a recent sweep run cleanly logged
"Agent mention sweep stopped before its time budget (480s)...; 0 dispatch(es) and 7 isolated failure(s) so far."and exited in 9m21s instead of hanging or crashing.But the org-wide dispatch budget (1 per 5-minute cycle) is still dominated by a small set of repos (bandscope, pg-erd-cloud, newsdom-api) that get re-dispatched repeatedly, while fast-mlsirm/TEPP/LineageWeave never reach the front of the queue.
Checked one repeat target closely — bandscope#895: dispatched at least 3 times in ~4 hours (its
updatedAtkeeps refreshing), yetgh api repos/ContextualWisdomLab/bandscope/pulls/895/reviewsshows zeroopencode-agentreviews ever posted — only 2 unrelatedgithub-advanced-securitycomments from 2026-08-17.agent-mention-opencode-dispatch.ymlonly forwards the request to an external service (api.opencode.ai) via a 5-secondvalidate-and-forwardjob. The actual review-generation happens entirely outside GitHub Actions — opaque togh/anything I can inspect from here. If that external service is silently failing or never completing for some PRs while the dispatch step still reports success (consuming a budget slot each time regardless), that would explain the queue starvation even with a fully healthy dispatch mechanism.This isn't diagnosable or fixable with the tools available to me — flagging for whoever has access to OpenCode's own service-side dashboard/logs to check why bandscope#895 (and similar repeat-dispatch targets) never receive a posted review verdict despite repeated dispatch.
seonghobae commentedon Aug 23, 2026
Root cause for the remaining gap is now identified — it's
.github#624, not opaqueCheckpoint at 2026-08-22T19:19:30Z above diagnosed the remaining gap after #1214/#1235/#1236/#1240/#1241 as an opaque external-service failure: dispatch reaches
api.opencode.aisuccessfully but a posted review never follows for some PRs (e.g.bandscope#895, dispatched repeatedly with zeroopencode-agentreviews ever posted).Another investigation thread (
.github#624, "Migrate OpenCode review model pool off GitHub Models before 2026-07-30 retirement") root-causes exactly this symptom precisely — not opaque, just tracked in a different issue:insufficient_quota; OpenRouter returns HTTP 402 (credit-exhausted). With GitHub Models also dead, the entire configured model pool foropencode-reviewis exhausted org-wide →OPENCODE_MODEL_POOL_OUTCOME: exhausted→MODEL_OUTPUT_UNAVAILABLE. No review can be produced, so no approval evidence, so every main-targeted PR org-wide staysREVIEW_REQUIRED/blocked regardless of how healthy the dispatch/scheduler mechanism is.nvidia-nim/nvidia/llama-3.3-nemotron-super-49b-v1.5candidate fails, but via a different failure mode —CONTROL_REJECTED: no top-level current-run control JSON object was found→NO_CONCLUSION(a content-shape/schema-validation rejection, not a billing/reachability error). This means restoring OpenRouter credit or OpenAI quota alone may not be sufficient if the default NVIDIA NIM candidates keep failing the anti-replay control-JSON schema check first and burn most of the 30-attempt ceiling before ever reaching a paid fallback.Combined with the dispatch-mechanism fixes already landed here (#1214/#1235/#1236/#1240/#1241), the full picture is now: the dispatch/scheduler layer is healthy end-to-end; the sole remaining blocker is the model-pool exhaustion + a possible secondary control-JSON schema-rejection bug on the default candidate, both tracked in #624. Not attempting a fix from this thread either — no NVIDIA NIM/OpenAI credentials to reproduce locally, and #624's own investigator already correctly declined to guess-and-check on this deliberately hardened, actively-maintained shared scheduler logic. Recording the cross-link here so anyone reading either issue gets the complete picture without re-deriving it.
seonghobae commentedon Aug 23, 2026
Follow-up to the cross-link comment above: opened #1246 fixing the content-shape/schema-rejection half of #624's newest finding (int-typed
run_id/run_attemptin a model's control JSON always failing the anti-replay identity check, regardless of billing). Full evidence (tests proven to fail pre-fix, 100% coverage/docstring, safety reasoning) in the PR. The billing/model-pool-exhaustion half still needs a human with OpenRouter/OpenAI billing access — this PR alone won't fully unblock main-targeted approvals.feat(release): build and publish sdist/wheels on GitHub Release (#1207)
seonghobae commentedon Aug 24, 2026
New root cause found: Strix's own benign MODEL QUALITY WARNING startup banner false-fails every clean scan on the org's configured default model
Independent of the review-approval gap this issue tracks, the required
strixcheck itself was blocking merges via a separate false positive. Strix prints a box-drawnMODEL QUALITY WARNINGbanner at startup whenever the configured model isn't on its own hardcoded "recommended frontier model" list — a static disclaimer about model choice, unrelated to the scan's outcome. Its literalWARNINGtext satisfiesstrix_quick_gate.sh's genericFatal|Denied|Warn|Warninginfra-failure matcher, so any clean, 0-vulnerability scan on the org's configured default model (nvidia_nim/nvidia/nemotron-3-super-120b-a12b, not on Strix's recommended list) fails closed even though the scan itself succeeded with zero findings.Reproduced directly: TEPP#214's
strixcheck failed withStrix run emitted provider infrastructure or failure-signal output; failing closed.while its own transcript shows a complete pentest summary reporting "Low" risk and "Vulnerabilities 0". The same banner (6 occurrences across fallback attempts) also appears in fast-mlsirm#1237'sstrixjob log, so this isn't TEPP-specific — it fires wherever the org's default model resolves to a non-"frontier" model, i.e. broadly.Fix opened: #1311 — sanitizes the banner out of both the console transcript and report-artifact logs before the infra-failure matchers run (does not touch vulnerability-severity classification; a real finding still fails closed as before). New regression test reproduces the exact TEPP#214 failure on the pre-fix script and passes post-fix.
seonghobae commentedon Aug 27, 2026
Fresh downstream canary after #1002 integration shows a fail-open review-evidence regression that belongs to the central review pipeline, not OriginWeave product code.
ContextualWisdomLab/OriginWeave#37at exact heade1fca7c65ce738de3406b0e408708e08c283552e/ live basemain@f658f329c83a106b68385e17cb714c4147c12f49has centralcoverage-evidencecheck run98391429201= success andopencode-reviewcheck run98391443246= success (workflow run33033609031). The same-head Reviews API has no qualifyingAPPROVEDorCHANGES_REQUESTEDOpenCode verdict; the newest current-head formal review activity is COMMENTED/Devin only. Live organization ruleset18156473still requires one approval.That is the exact consumer failure #1002 was intended to prevent: a green
opencode-reviewcheck exists without a substantive exact-head Reviews API verdict. Please treat this as a current regression canary, reproduce it at the first central causal boundary, add a RED contract that forbids success without the exact-head formal verdict, then repair/revalidate the central workflow without adding a leaf OriginWeave workaround or synthesizing approval. The OriginWeave lane will remain non-mergeable-by-policy until real exact-head approval exists.seonghobae commentedon Aug 28, 2026
Orgmetra exact-head canary: required OpenCode context fails only because no current-head verdict materialized
Fresh downstream evidence from
ContextualWisdomLab/Orgmetra#100isolates the first failing boundary to the central review-verdict path, after required-workflow bootstrap and coverage evidence have already succeeded.ContextualWisdomLab/Orgmetra#100@57cb9e461bf594e96c0b125349325f35cba95d20develop@9e3e4847510e1e612b48474ba42b177b8ed824df33139299589required-workflow-bootstrapjob98746318056: terminal SUCCESScoverage-source-treejob98746532800: terminal SUCCESScoverage-evidencejob98746587038: terminal SUCCESSopencode-reviewjob98746893380: terminal FAILUREFail closed without a current-head OpenCode verdictThis canary does not prove whether the missing verdict is caused by dispatch throughput, mention/router concurrency, model/provider availability, Reviews API publication, or another central control-plane boundary. It does prove that no Orgmetra source/test/coverage repair is justified for this failure: the central required context reaches its explicit no-current-head-verdict fail-closed branch after evidence jobs succeed.
RED acceptance: an exact target head with successful bootstrap/source-tree/coverage-evidence must never be represented as review-passing without a qualifying formal Reviews API verdict for that same SHA, but the owner path must produce a durable, machine-readable causal failure when that verdict cannot be materialized rather than leaving the leaf to guess or mutate product code.
Required GREEN: identify and repair the first central dispatch/review-publication boundary that prevented a verdict; preserve reviewer identity, exact-head binding, fail-closed behavior, and coverage requirements; then rerun unchanged/current Orgmetra #100 and require a formal current-head OpenCode verdict plus terminal-success required context. Do not use a status-only substitute, stale review, self-approval, or downstream workflow shim.
This comment advances the existing central review-pipeline owner path only. No
.githubsource/ref/workflow/settings/PR state was mutated from the Orgmetra loop.seonghobae commentedon Aug 28, 2026
Fresh Inkspan canary adds a current consumer failure to the existing review-dispatch throughput lane without asserting a provider failure that has not yet been reached.
Affected target:
ContextualWisdomLab/inkspan#391128a239f8b71ca16add4b9e15e21752d1ad63ff03edd7495a20f96b91eee97afa0f0dd62a8adc55c3314695927198771103570Observed sequence: the required OpenCode workflow started at 06:08:51Z. Its source/coverage placeholder jobs completed successfully, then the
opencode-reviewverifier ran at 06:17:55Z and failed at 06:18:02Z with the exact messageNo APPROVED or CHANGES_REQUESTED from opencode-agent on the current head. This required check is not a review and must not succeed until the authenticated dispatch posts a current-head verdict.The PR's current review inventory has noopencode-agentverdict for3edd7495.... A fresh inspection of the 100 most recent centralrepository_dispatchruns after the verifier failure contained active OpenCode dispatches for other targets (including.github#897@4a5f29f...) but no dispatch titled forContextualWisdomLab/inkspan#391@3edd7495...; the Inkspan PR comment stream likewise has no durable OpenCode receipt marker for this head.First causal boundary for this canary is therefore dispatch admission/throughput/receipt before model execution, not application source and not yet a demonstrated model-provider failure. This is falsifiable: if an authenticated dispatch for this exact target/head exists, record its run id/receipt and move the boundary to that run's first failing job; otherwise the scheduler must ensure an eligible exact-current head is dispatched early enough that the required verifier cannot expire first.
Smallest acceptance: preserve fail-closed verifier semantics; do not synthesize a review/status. For the unchanged or successor Inkspan head, require a durable authenticated dispatch receipt + central run id bound to exact repository/PR/head, followed by an actual formal
opencode-agentAPPROVEDorCHANGES_REQUESTEDreview on that same head before the required verifier can pass. Queue/backlog handling must not silently starve a current required head.seonghobae commentedon Aug 28, 2026
DiskSage exact-head canary for the central OpenCode dispatch/throughput lane (owner handoff only; no foreign source mutation):
ContextualWisdomLab/disksage#267is currently at exact headccb395ed5b3ceb7ec3180012b06a3d30c2000dbbon basemain@79067c1160ddedf7fc962cbf8067ce7e83c4564a. Required-workflow run33187827737, job98906719264(opencode-review) failed closed. The first failing boundary isFail closed without a current-head OpenCode verdict: the job queried Reviews API foropencode-agent/opencode-agent[bot]on the exact SHA and found noAPPROVEDorCHANGES_REQUESTED. Fresh/pulls/267/reviewslikewise contains no OpenCode review for this head. Same-head centralcoverage-evidenceandcoverage-source-treeare successful, so this is not a DiskSage source/coverage failure. Acceptance: authenticated central dispatch submits a non-synthetic OpenCodeAPPROVEDorCHANGES_REQUESTEDreview bound toccb395ed…; then the unchanged-headopencode-reviewgate is rerun and reaches terminal success only for a valid verdict. Please preserve the exact-head/fail-closed semantics; no leaf status synthesis or gate relaxation is requested.seonghobae commentedon Aug 31, 2026
Fresh downstream canary from
ContextualWisdomLab/Orgmetra#55shows the review-pipeline throughput/liveness problem can now consume the target required-check lifetime even when exact-head coverage is already green and the central scheduler eventually accepts the same-head dispatch.Exact evidence:
Orgmetra#55@27f09897507182f8ddcb090dd7273dcbaf182e36opencode-reviewjob99631473020: started2026-08-31T21:33:14Z, polled for an exact-current-headopencode-agent[bot]APPROVED/CHANGES_REQUESTEDverdict every 30s for 180 attempts, then failed closed at2026-08-31T23:04:28Z; exact-headcoverage-evidencewas already SUCCESS and no qualifying OpenCode formal review appeared33441942494: created2026-08-31T21:33:19Z, butscan-pr-queuejob99651996585did not start until2026-08-31T22:51:12Z(~78 min of Actions queue delay)22:52:04ZThis is not repairable by an Orgmetra source change or a no-op head churn. The first causal boundary is the central review scheduler/required-check liveness contract: the consumer wait budget starts before the central dispatch worker may actually be scheduled under organization Actions contention.
RED acceptance: reproduce a same-head consumer where central queue latency consumes most of the target polling window, central dispatch is eventually accepted, but the target gate expires without a formal verdict.
Required GREEN semantics: preserve fail-closed exact-head review requirements, but decouple the substantive verdict wait budget from pre-dispatch scheduler queue delay (for example by exposing durable accepted-dispatch state/timestamp that the target can observe and budgeting from that boundary, or an equivalent owner design). On the unchanged Orgmetra #55 head above, a post-repair run must obtain a formal current-head OpenCode verdict and let the required target gate reflect that verdict without branch churn, synthetic status, predecessor evidence, or relaxed review requirements.
#1150is useful read-only Actions queue-health evidence for this class of delay, but it intentionally does not repair review-scheduler liveness; this comment is routed here because this issue already owns OpenCode dispatch throughput/retry behavior.seonghobae commentedon Aug 31, 2026
A second fresh Orgmetra canary narrows the same review-pipeline liveness defect further: the fixed target OpenCode wait budget is consumed not only by central Actions queue latency, but by the scheduler's intentional prerequisite ordering before OpenCode can even be dispatched.
Exact evidence:
ContextualWisdomLab/Orgmetra#57@6ca554791595d925a76587378b543e7dbc3dc20bopencode-reviewjob99636447752: started2026-08-31T21:42:06Z, then polled every 30s for 180 attempts for an exact-headopencode-agent[bot]APPROVED/CHANGES_REQUESTED; it failed closed at2026-08-31T23:13:24Zwith no formal current-head verdict. Exact-headcoverage-source-treeandcoverage-evidencewere already SUCCESS.33442679292: created about2026-08-31T21:42:15Z; itsscan-pr-queuejob99654383906did not obtain a runner until2026-08-31T22:53:25Z(~71 minutes later).22:53:39Zmade this explicit decision:security_dispatch: current head has no completed Strix evidence; same-head Strix dispatched,contract_decision: WAIT.33448297677was created at22:53:41Zfor exactlyOrgmetra#57@6ca554...; a fresh refetch still reports that Strix run aspending, with no target exact-head Strix check materialized yet.This rules out an Orgmetra source repair: the target OpenCode timer is already running while the central owner deliberately sequences missing Strix ahead of OpenCode, and organization queue delay can consume most of that timer before prerequisite security work even starts. With a 90-minute target polling budget, a correct fail-closed scheduler can therefore cause OpenCode failure before substantive OpenCode review has had a viable start boundary.
RED acceptance: exact head has no completed Strix; target OpenCode waiter starts; delayed central scheduler eventually runs and correctly dispatches Strix-only/WAIT; target OpenCode wait budget expires before a formal OpenCode review can be dispatched and published.
Required GREEN semantics: preserve exact-head fail-closed security and review requirements, but do not consume the substantive OpenCode verdict budget before prerequisite security evidence and an accepted OpenCode-dispatch phase make that verdict achievable. A durable phase/receipt boundary or equivalent owner design is acceptable; absent/cancelled/neutral/stale Strix and absent/stale/model-only OpenCode evidence must remain non-passing. After the owner repair reaches protected main, the unchanged #57 head should be able to progress through exact-head Strix and then obtain a formal current-head OpenCode verdict without branch churn, synthetic status, predecessor evidence, or relaxed gates.
seonghobae commentedon Sep 1, 2026
Fresh independent downstream canary from
ContextualWisdomLab/Orgmetra#56reproduces the same central review-liveness defect with a prerequisite WAIT, not an Orgmetra source failure.Exact evidence:
Orgmetra#56@68af42cb80807b6638d745d1687fd3c6a814d64f, live basedevelop@9e3e4847510e1e612b48474ba42b177b8ed824df33262099911, attempt 2, job99630478791: started2026-08-31T21:21:25Z; authenticated OIDC/app-token dispatch succeeded, then the verifier polled Reviews API every 30s for 180 attempts and failed closed at22:52:30Zbecause no exact-headopencode-agent[bot]APPROVED/CHANGES_REQUESTEDverdict existed33440932661was created at21:21:29Z, butscan-pr-queuejob99648671891did not start until22:42:07Z(~80m38s control-plane queue delay)22:42:22Zcorrectly returnedWAIT:current head has no completed Strix evidence; same-head Strix dispatched.githubrun33447442798; it is currentlyin_progress, hence non-passing and not a reason to synthesize an OpenCode verdictFirst causal boundary: the required-check lifetime is consumed while the central worker is queued and while exact-head prerequisites are legitimately unresolved. There is no correct Orgmetra-local code change or no-op head churn that can repair this ordering/liveness contract.
Smallest GREEN acceptance: preserve fail-closed exact-head semantics; record a durable authenticated dispatch/phase receipt bound to repository/PR/head, do not consume the substantive OpenCode-verdict budget before the central worker has actually started and prerequisite state can be evaluated, and require a real formal
opencode-agentAPPROVEDorCHANGES_REQUESTEDreview on that same exact head before the target required verifier can pass. A prerequisiteWAIT, status-only record, or synthetic fallback must remain non-passing.seonghobae commentedon Sep 1, 2026
Orgmetra #59 independent RED: target waiter exhausted while its accepted central scheduler dispatch never left queue
Fresh unchanged-head evidence from
ContextualWisdomLab/Orgmetra#59@f361012212d4c90e20acb9edaa5302850a340573isolates the liveness failure before any substantive OpenCode execution.Target required workflow
33279409143, attempt 2, job99688748116started at2026-09-01T01:30:03Z. Its authenticatedRequest current-head OpenCode review executionstep succeeded at01:30:06Z, POSTing themerge-schedulerrepository dispatch. The target then polled the Reviews API for a real exact-headopencode-agentAPPROVEDorCHANGES_REQUESTEDverdict for 180 × 30 seconds and failed at03:02:01Zbecause none materialized.The corresponding central dispatch window materialized
Required PR Review Merge Schedulerruns33458985379(created01:30:08Z) and33458986030(created01:30:09Z) on central policy SHA1186a9f4e5eda7683b23ae63d2c806831743432a. Fresh refetch after the target waiter had already failed still shows both runsqueued; in each run the causalscan-pr-queuejob (99704928025/99704929696) is itself stillqueued, while the other jobs are skipped. In other words, an accepted target dispatch had no opportunity to inspect exact-head Strix/prerequisite state or dispatch substantive OpenCode before the target's entire ~90-minute verdict window expired.This is stronger than a model/provider failure and independently reproduces the phase-budget defect already captured by the #56/#57 canaries: the target verifier's substantive-verdict timeout is not coupled to an actually-started central worker or prerequisite-ready phase. There is no correct Orgmetra-local source repair or no-op head change for this.
RED acceptance: target exact-head dispatch succeeds; central scheduler run/job remains queued past the target verdict budget; no exact-head formal review can possibly materialize; target fails closed.
Smallest GREEN semantics remain: preserve fail-closed exact-head Strix and formal-review requirements, but bind the required-check lifetime to durable authenticated phase/receipt state so queue/prerequisite time does not consume the substantive OpenCode verdict budget. A target may pass only after a real exact-head formal
opencode-agentverdict exists; queued/pending/WAIT/status-only/model-only evidence stays non-passing. After the owner repair reaches protected centralmain, validate with a fresh central event on unchanged Orgmetra #59 head rather than rerunning an old trusted workflow snapshot.seonghobae commentedon Sep 1, 2026
Fresh independent canary from
ContextualWisdomLab/Orgmetra#40removes the earlier coverage ambiguity from this review-delivery lane.6917e41f9053fab6f7e99f8185f2137e8fc5fca5; live base:develop@9e3e4847510e1e612b48474ba42b177b8ed824dfcoverage-source-treecheck99422518429: SUCCESScoverage-evidencecheck99422518803: SUCCESS99422517837: FAILUREopencode-agentAPPROVEDorCHANGES_REQUESTEDverdict arrived before the window expiredCOMMENTED/COVERAGE_BLOCKEDreview is therefore stale as a diagnosis and remains non-authoritative; Orgmetra's current coverage evidence itself is greenThis is not an Orgmetra source/coverage repair candidate. Please use this unchanged-head canary for the scheduler/verdict-delivery acceptance already tracked here: prerequisite/queue time must not consume the substantive verdict window, and GREEN requires a qualifying authenticated formal verdict on the same
6917e41f…head without a no-op consumer commit or gate weakening.seonghobae commentedon Sep 1, 2026
Fresh independent unchanged-head canary from
ContextualWisdomLab/Orgmetra#42confirms the current OpenCode failure is no longer the earlier coverage-wrapper diagnosis.fb03c0837b38424412fa774576a8ded0f9847896; live base:develop@9e3e4847510e1e612b48474ba42b177b8ed824dfcoverage-source-treecheck99423491065: SUCCESScoverage-evidencecheck99423453333: SUCCESS99423452804: FAILUREopencode-agentAPPROVEDorCHANGES_REQUESTEDformal review arrivedCOMMENTED/COVERAGE_BLOCKEDreview remains non-authoritative and its coverage diagnosis is stale on this unchanged headNo correct Orgmetra source/coverage repair remains at this boundary. Please include #42 as another RED→GREEN acceptance canary for the existing scheduler/verdict-delivery contract: prerequisite/queue time must not consume the substantive verdict window, and GREEN requires a qualifying authenticated formal verdict on this same exact head without a no-op consumer commit, gate weakening, or predecessor evidence.