Repository navigation
ci(OMN-15241): wire reject-required-check-skip-vector pre-commit hook in onex_change_control - #5143
Conversation
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 2 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 (3)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
What
Wires the OMN-14854 Required-Check Skip-Vector Guard as a local pre-commit hook in
onex_change_control.Two files:
.pre-commit-hooks/reject-required-check-skip-vector.sh(new) and the hook entry in.pre-commit-config.yaml.onex_change_controlalready calls the guard in CI via.github/workflows/required-check-skip-guard-caller.ymlbut had no local hook, so a skip-vector violation committed with every local hook GREEN and was
caught CI-only — detection without local enforcement, the class root CLAUDE.md Rule #5 exists to kill.
Second file in this PR —
.github/workflows/ci.yml. onex_change_control is the only one of the five that runspre-commit run --all-filesinside CI. The new hook is a LOCAL shift-left wrapper that resolves the canonical validator from$OMNI_HOME/omniclaude, which does not exist on a GitHub-hosted runner — left unhandled it would hard-error in CI for a missing sibling clone, not for a real skip vector. It is therefore added to the existingSKIP=list on the three pre-commit invocations, with an inline comment. Zero enforcement is lost: the identical validator already runs in this repo's CI on every PR via.github/workflows/required-check-skip-guard-caller.yml(required-check-skip-guard / check-skip-vectors). This removes a duplicate invocation, it is not a gate bypass — and the hook is deliberately NOT weakened with a CI-detectingexit 0branch, which would have been the false-green shape the fail-loud meta-gate exists to reject.Proof it runs where it should: this PR's own commit staged
ci.yml, so the new hook fired at commit time and reportedReject skip vectors on required-check workflows (OMN-15241) ... Passed— an in-commit GREEN, not a(no files to check) Skipped.How — DRY, not a re-implementation
The wrapper follows the
omnibase_infrafan-out pattern (OMN-14865), not theomnibase_corevendoring pattern: it executes the same
validate_no_required_check_skip_vectors.pythat the CIreusable workflow executes, resolved from
$OMNI_HOME/omniclaude. No validator logic is copied, solocal and CI verdicts cannot diverge on logic. Zero new detection surface, zero allowlist, no
skip-token.
Fail-loud (Rule #8 and the fail-loud pre-commit meta-gate): unset
OMNI_HOME, a missing validator, orno PyYAML-capable interpreter each exit 1 with remediation. There is no
exit 0degrade pathanywhere in the script.
One deliberate improvement over the
omnibase_infracopy: interpreter resolution is$PYTHON_BIN-> apython3that can actuallyimport yaml->uv run --no-project --with pyyaml python-> hard error. A barepython3on PATH is not guaranteed to have PyYAML (a uv-managed shimcommonly does not — reproduced on
.200this session), and a gate that hard-errors on everyworkflow-touching commit for a missing third-party import is a gate developers rip out.
Proof — seeded RED then clean GREEN (local,
.200)Seeded an OMN-15057 vector-5 violation (
needs:with noif:that provably runs regardless of theneeds result) into the required context
verify / verify— jobverifyincall-receipt-gate.yml— then ranthe hook through the pre-commit framework against this repo's real config:
Seed reverted, same command on the clean tree:
The commit-refusal path was additionally proven end-to-end in
omnibase_compat: with the seed staged,git commitran the full hook set, this hook reportedFailed, andHEADstayed at the base commit —the commit was refused, not merely warned about.
Baseline check before wiring: the canonical validator was run against all five target repos' current
devand returnedPASS: no required-check skip vectors foundin every one, so this hook lands GREENand blocks nothing that exists today.
Audit re-verification (ticket wording corrected)
OMN-15241 describes the five repos as carrying "the required guard". Re-probed live 2026-07-27 —
that is true for the caller workflow, not for the required status check:
modedevonex_change_control's own row ismode: ADVISORY. This does not weaken the hook: the validator iterates everymode: REQUIREDrow in.github/required-checks.yaml, and each of these repos has many otherREQUIRED contexts (the seeded RED above fired on one of them). It does mean the guard's own context
becomes load-bearing here only when the ADVISORY->REQUIRED branch-protection flip lands.
Scope / risk
Source-only. No lane mutation, no runtime touch, no branch-protection change, no merge.
proof_class: code-only+ local receipt-bound RED/GREEN.Gates were run on
.200(stickybeatz-studio) per CLAUDE.md rule 11a, remote-only mode: everymutation in this branch was made over
ssh, never with a localEdit/Write, so there is noedit-locality mismatch. Commit ran the repo's real pre-commit hook set; push originated on
.200.Evidence-Ticket: OMN-15241
Evidence-Source: 0ff7713