Repository navigation
fix(OMN-15117): close call-receipt-gate.yml verify skip-vector + manifest blind spot on main - #1942
Conversation
…manifest blind spot on main `verify` job in call-receipt-gate.yml had a bare `needs: occ-preflight` with no `if:` at all (OMN-15057 vector-5 shape) — GitHub's implicit job-level `if:` is `success()` over `needs:`, so an occ-preflight failure/cancellation SKIPS `verify`, and a skipped job satisfies branch protection. `verify / verify` is live-required on `main` (the dev->main promotion boundary), absent from `dev`'s required set, and had zero row in required-checks.yaml -- the reason OMN-15057's remediation (#1931) never touched this file: the guard only walks manifest REQUIRED rows and had nothing to check here. Adds `if: always()` to `verify` (the full if:always()+explicit-check-step pattern from omnibase_core#1499 is not possible here -- a job whose body is `uses:` cannot also declare `steps:`; same constraint #1499 itself hit on its own `deploy-gate`/`verify` jobs). Real enforcement still rests on the separately-required `occ-preflight / eligibility` context, produced unconditionally by call-occ-preflight.yml. Adds the missing `verify / verify` row to required-checks.yaml with a new optional `branch:` field (and reconcile_manifest_vs_live.py support for it) so a main-only required context can be represented without corrupting the dev-only required-check-manifest-reconcile.yml job. RED->GREEN proof (validate_no_required_check_skip_vectors.py): - manifest row added, workflow untouched: 1 vector-5 finding on `verify / verify` - workflow fixed: 0 findings - reconcile against dev: PASS (no regression) - reconcile against main: verify/verify resolved (pre-existing unrelated gaps remain, out of scope) OMN-15117
📝 WalkthroughWalkthroughThe reconciliation tool now supports optional branch filtering for required gates. The manifest adds the main-only ChangesRequired-check reconciliation and verification
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
…4834) * evidence: OCC companion pass 1 for OmniNode-ai/omniclaude#1942 * evidence: OCC companion self-bind for #4834 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai>
|
| Verdict | Meaning | Blocks merge? |
|---|---|---|
passed |
No critical/error findings | No |
blocked |
CRITICAL or ERROR findings found | Yes |
degraded |
All models unavailable (infra) | No (pilot) |
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524)
Summary
omniclaudemain-branch verify: verify job incall-receipt-gate.ymlhas a bareneeds: occ-preflightwith noif:— GitHub's implicit job-levelif:issuccess()overneeds:, so an occ-preflight failure/cancellation SKIPSverify, and a skipped job satisfies branch protection.verify / verifyis live-required onmain(the dev→main promotion boundary) and absent fromdev's required set. It had zero row in.github/required-checks.yaml, which is why OMN-15057's own remediation (#1931) — which fixed the identical vector-5 shape in 7 other files — never touched this one: the guard only walks manifest REQUIRED rows.verifyjob: addedif: always(). The full two-partif: always()+ explicitneeds.occ-preflight.result != 'success' -> exit 1guard-step pattern from omnibase_core#1499 is not achievable here — a job whose body isuses:(calls a reusable workflow) cannot also declaresteps:(GHA constraint; feat(launchd): add cron-closeout + nightly-merge-sweep plists [OMN-7842] #1499 hit the identical wall on its owndeploy-gate/verifyjobs and used the sameif: always()-only fix there). Real enforcement doesn't depend on this job's own result:occ-preflight / eligibilityis separately REQUIRED on this repo's dev+main branch protection, produced unconditionally (noneeds/if) bycall-occ-preflight.yml.verify / verifyrow to.github/required-checks.yaml, with a new optionalbranch: mainfield (this manifest is otherwise dev-scoped per its header). Added matching support inreconcile_manifest_vs_live.py(reconcile()now takes abranchkwarg and excludes rows scoped to a different branch) so this main-only row doesn't corrupt the dev-onlyrequired-check-manifest-reconcile.ymljob — verified both directions.Proof (RED before GREEN, quoted from live runs)
RED — manifest row added, workflow untouched:
GREEN — after the workflow fix:
Reconcile regression check (privileged, push/schedule-only script, run manually against both branches):
(
verify / verifyno longer appears in main'smissing_from_manifestlist — the remaining 4 lines are pre-existing, unrelated gaps, explicitly out of scope for this PR.)New unit tests added for the
branch:scoping behavior (tests/ci/test_reconcile_manifest_vs_live.py, 5 new cases). 30/30 tests intests/ci/test_reconcile_manifest_vs_live.py+tests/ci/test_validate_no_required_check_skip_vectors.pypass. Full localpre-commit run --files <changed>green, including the live "Reject skip vectors on required-check workflows (OMN-14854)" hook.Fleet-wide manifest-gap measurement (context, not fixed here)
Ran
reconcile_manifest_vs_live.pyagainst every repo/branch that ships arequired-checks.yaml(only omniclaude ships the reconcile script; ran it manually pointed at each repo's own manifest file):missing_from_manifestmissing_from_manifestSecurity Gate)occ-preflight / eligibility)Sum where a manifest exists on that branch: 2+1+56+5 = 64. Sum of branches with zero manifest coverage at all: 17+17+28+23+17 = 102. Combined blind spot before this PR: 166 live-required-context/branch pairs with zero skip-vector-guard coverage. This PR closes exactly 1 (omniclaude
mainverify / verify); the rest (esp. omnibase_coremainat 56) are separate follow-ups, not in scope here.Non-goals
maingap (Security Gatecontext, plus 3 dev-only rows reported stale against main) is NOT fixed — out of scope.OMN-15117
Summary by CodeRabbit
New Features
verify / verifyrequired check for themainbranch.Bug Fixes
verifycheck from being silently treated as successful when its prerequisite is skipped.Tests
Evidence-Ticket: OMN-15117
Evidence-Source: OCC#4834
Evidence-Commit: 76441b2aa157a87ae38a86c011b031575da36a58