Repository navigation
fix(OMN-15532): exempt structurally-unreportable external contexts by PR author — Dependabot PRs wedge on absent 'gate / CodeRabbit Thread Check' - #2574
Conversation
… PR author OMN-15496 (#2569, merged 2026-07-30T18:14:35Z) made CI Summary assert 17 cross-workflow contexts fail-closed. One of them, "gate / CodeRabbit Thread Check", is structurally absent on Dependabot PRs: cr-thread-gate-caller.yml skips the caller job when github.actor == dependabot[bot], and because the context is the caller-job/reusable-job form, the inner job never materialises so NO check-run is created. Absent burns the 90 min poll deadline and then fails closed against the SOLE required context on infra dev. The OMN-15496 seed measured this context 16/16 present over #2546-#2567 -- a window containing no Dependabot PR, which is how a 16/16 context can still be absent in production. Fixed consumer-side via a declared ACTOR_CONDITIONAL_CONTEXTS registry, not by removing the producer skip: OMN-10276 took the producer route on omnimemory, but omnimemory calls a LOCAL reusable and passes no secrets, whereas this caller invokes omniclaude reusable with secrets: CROSS_REPO_PAT. Dependabot pull_request runs do not receive regular repo secrets, so dropping the skip here risks trading an absent-wedge for a red-wedge. This is an applicability rule, not a bypass: the context stays fail-closed for every author not named in the registry, and a missing --pr-author drops nothing. RED-before/GREEN-after on the real #2522 payload (98 unedited check-run rows): pre-change gate -> PENDING (deadline FAILURE) naming the CR context; post-change with dependabot[bot] -> SUCCESS; post-change with jonahgabriel -> still PENDING. Replaying the whole Dependabot batch #2515-#2522 at merge time: 5/8 blocked before, 2/8 after, and both survivors are genuine URL Authority Gate reds that are correctly preserved -- zero residual blocks attributable to the CR context. Bound in ci.yml in the same change (--pr-author), pinned by a test.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 6 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: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
Comment |
#5646) * evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#2574 * evidence: OCC companion self-bind for #5646 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai>
|
| Verdict | Meaning | Blocks merge? |
|---|---|---|
passed |
No critical findings | No |
blocked |
CRITICAL findings found | Yes |
degraded |
All models unavailable (infra) | No (pilot) |
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8468/OMN-8524)
|
Recovery (lane-recover-0730): close+reopen to force GitHub to recompute |
|
Recovery pass 2 (lane-recover-0730): the previous cycle's |
|
Recovery pass 3 (lane-recover-0730), final: this head now carries TWO |
OMN-15532 — regression introduced by OMN-15496 (#2569)
#2569(merged 2026-07-30T18:14:35Z) taught theCI Summarypoller to assert 17 cross-workflow contexts againstcommits/{sha}/check-runs, fail-closed. One admitted context —gate / CodeRabbit Thread Check— is structurally absent on Dependabot PRs, so every untouched Dependabot PR on infra dev now burns the 90-minute poll deadline and then fails the sole required context.Root cause
.github/workflows/cr-thread-gate-caller.ymlgates thegatejob on(github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'). The context name is thecaller-job / reusable-jobform, so when the caller job skips, the reusable's inner job never materialises and no check-run is created at all — the context is absent, notskipped.scripts/ci/ci_summary_gate.py:193already stated the hazard: "a permanently-absent entry burns the poll deadline and then fails closed."ci.ymlsetsDEADLINE_MINUTES: "90".Why the seed measurement missed it
OMN-15496 admitted this context after measuring it 16/16 present over #2546–#2567. That window contains no Dependabot PR (the last batch was #2515–#2522 on 2026-07-28). A context can be 16/16 present and still absent in production if the sample never covered the PR shape.
Live readback — the actor is the discriminator (all
pull_request,run_attempt=1):2cdf352ddependabot[bot]skipped841c292fdependabot[bot]skippedfeb6627bjonahgabriel08e356ccjonahgabriele2d38605jonahgabrielCI Summaryitself does run and report on Dependabot PRs (success on #2522/#2521 pre-#2569), so the poller reaches the assertion and fails on it. Same class already live on a sibling repo: rolling ledger 2026-07-29T06:20Z recordsomnibase_core#1522/#1523blocked as "missing required contextsgate / CodeRabbit Thread Check".Fix — consumer-side, and why not producer-side
A declared
ACTOR_CONDITIONAL_CONTEXTSregistry drops a context only for the authors whose PRs structurally cannot produce it. This is an applicability rule, not a bypass: the context stays fail-closed for every other author, and a missing--pr-authordrops nothing (forgotten argument enforces).OMN-10276 fixed this on
omnimemoryby removing the producer skip. That is not portable here: omnimemory calls a local reusable and passes no secrets, whereas this caller invokes omniclaude's reusable withsecrets: CROSS_REPO_PAT. Dependabotpull_requestruns do not receive regular repo secrets, so dropping the skip here risks trading an absent-wedge for a red-wedge. Stated as a premise to verify, not assumed.RED-before / GREEN-after against the real #2522 payload (98 unedited check-run rows, fixture
tests/ci/fixtures/omn15532_dependabot_pr2522_check_runs.json) — "exists but wrong", not an ImportError:AC6 no-wedge replay, whole Dependabot batch #2515–#2522 at merge time:
#2517/#2518, genuineURL Authority Gatereds, correctly preservedZero residual blocks attributable to the CR context; no real failure was suppressed.
The fixture is also asserted to isolate the case:
gate / CodeRabbit Thread Checkis the only admitted context absent on that head; the other 16 are all present+success.Acceptance criteria
test_dependabot_pr_is_not_wedgedtest_same_payload_still_blocks_a_human_authortest_exemption_entry_is_load_bearingtest_registry_keys_are_asserted_contexts,test_registry_actors_are_concrete_loginsci.ymlin the same change →test_ci_yml_passes_pr_author--pr-authorenforces the full set.Gates (run on
.200, patch-transfer; per-file sha256 verified identical local↔remote before gates ran)ruff format+ruff check --fix— cleanmypy scripts/ci/ci_summary_gate.py— Success, no issuespytest tests/ci/test_ci_summary_gate.py— 51 passed (41 pre-existing + 10 new)pre-commit run --files <4 changed>— rc=0Scope
No branch-protection mutation — dev's required set stays
["CI Summary"]. Does not touch OMN-15484 hold-gate fan-out. Theomnibase_coreinstance of the same wedge is called out on the ticket as a separate fan-out.Disclosure
I did not author the OCC companion for this PR (implementer must not author its own evidence).
occ-preflight / eligibilityand its cascade will be red until an independent evidence author supplies theEvidence-Source:line — the standing OCC-companion jam class, not a defect in this change.dod_evidence: OMN-15532 — RED-before/GREEN-after against the real #2522 check-runs payload; 8-PR merge-time batch replay 5/8→2/8 with both real reds preserved; 4 gates green on
.200with sha256 parity verified pre-gate.Closes OMN-15532
Evidence-Ticket: OMN-15532
Evidence-Source: OCC#5646