Skip to content

evidence(OMN-14135): OCC companion for omnibase_infra#2285 — handler dispatch-entrypoint gate - #4074

Merged
jonahgabriel merged 3 commits into
devfrom
jonah/omn-14135-occ-infra-2285-dispatch-entrypoint-gate
Jul 13, 2026
Merged

jonahgabriel merged 3 commits into
devfrom
jonah/omn-14135-occ-infra-2285-dispatch-entrypoint-gate

Conversation

@jonahgabriel

Copy link
Copy Markdown
Contributor

Evidence-Source: OmniNode-ai/omnibase_infra#2285
Evidence-Ticket: OMN-14135

OCC evidence companion for omnibase_infra#2285 (OMN-14135).

What the product PR fixes

A handler can be contract-declared, auto-wired, instantiated, boot clean, and GREEN in CI — and still have NO dispatch entrypoint at all. _make_dispatch_callback resolves handle_async, then handle; finding neither it binds _missing_handle, which raises ModelOnexError on the first real dispatch.

Registration and routing do NOT imply executability. The dispatcher still registers and the payload still routes to it, so contract validation, auto-wiring, boot, and the dispatch-selection oracle all stay green. That is exactly why the OMN-14488 route-coverage gates are structurally blind here (a _missing_handle-bound dispatcher registers and routes normally, and that gate's fake handler has a handle), and why contract tests never saw it — they prove INGRESS, never DISPATCH.

HandlerA2ATask shipped this way (OMN-14489/#2280, merged). It is not alone: a census found 40 of 153 distinct contract-declared handlers have no entrypoint.

#2285 ships the fail-closed wiring-time guard the ticket asks for, wired as both a required CI step and a pre-commit hook.

Evidence items (4 product-observing + 1 self-bind)

All four product-observing check_values read product content at the pinned product head 29c92ef2 via gh api .../contents/...?ref=<sha>. None self-polls this companion PR — no gh pr checks $PR_NUMBER. Each was executed before being recorded (two were found wrong on first run and corrected: one grep did not survive a ruff line-wrap, and one ! grep was matching the baseline's own header comment rather than a data row).

Item Asserts
dod-verify-2285-runtime-predicate The validator reuses the exact auto-wiring predicate (callable(handle_async) or callable(handle), same resolution order as _make_dispatch_callback) and names _missing_handle — it tests the DISPATCH BIND, so it describes the runtime rather than itself.
dod-verify-2285-enforcement-ci-precommit The same validator module runs as a step in the already-required ci.yml lint job and as pre-commit hook handler-dispatch-entrypoint. Enforcement, not detection. Deliberately not pytest-only — the change-aware selector could narrow a pytest gate away on the very PR that adds a bad handler.
dod-verify-2285-red-exists-but-wrong HandlerA2ATask has no data row in the baseline, and test_a2a_task_is_not_baselined forbids ever granting it one; the ratchet additionally fails a FIXED handler left listed (stale = baseline - live), so the list can never rot.
dod-verify-2285-non-vacuity A collapsed contract scan fails closed (MIN_EXPECTED_DECLARED_HANDLERS); the predicate is proven to discriminate (a submit()-only class is rejected, def-B handle/handle_async accepted); and the pytest gate imports the shipped validator and drives its main() rather than re-implementing the scan.
dod-occ-self-commit Binding-only self-bind for this companion branch.

RED proofs recorded in the receipts

Run against the shipped validator (python -m omnibase_infra.validators.handler_dispatch_entrypoint), the exact command CI and pre-commit invoke — not a surrogate:

  • HandlerA2ATask reverted to submit()/watch()-only → exit 1, names the handler
  • HandlerLedgerProjection de-baselined, source untouched → exit 1 under both its contracts
  • a fixed handler left in the baseline → exit 1 (stale-ratchet guard)
  • clean tree → exit 0

This is RED against EXISTS-but-WRONG, not against absence. No assertion in either PR is green because the system is broken — the gap is never encoded as a passing check.

Local validation

  • validate-yaml contracts/OMN-14135.yaml → OK
  • check_receipt_hardening.py → 0 violations (all 5 receipts carry contract_entry_sha256)
  • pre-commit clean on all companion files

…dispatch-entrypoint gate

Evidence-Source: OmniNode-ai/omnibase_infra#2285
Evidence-Ticket: OMN-14135

Companion evidence for the fail-closed wiring-time guard OMN-14135 asks for. A handler
can be contract-declared, auto-wired, boot clean and GREEN in CI while exposing NO
dispatch entrypoint: _make_dispatch_callback resolves handle_async then handle, and
finding neither binds _missing_handle, which raises on the FIRST real dispatch.
Registration and routing do NOT imply executability, which is why the OMN-14488
route-coverage gates are structurally blind to it and why contract tests (which prove
INGRESS, never DISPATCH) never saw it. HandlerA2ATask shipped this way; a census found
40 of 153 distinct contract-declared handlers have no entrypoint.

Four product-observing evidence items, each pinned to PR head 29c92ef2 and each executed
before being recorded:
- runtime-predicate: the validator reuses the EXACT auto-wiring predicate (describes the
  runtime, not itself)
- enforcement-ci-precommit: same validator wired as a required CI step AND a pre-commit
  hook (enforcement, not detection)
- red-exists-but-wrong: HandlerA2ATask is NOT baselined and a test forbids ever
  baselining it; the ratchet also fails a FIXED handler left listed, so it cannot rot
- non-vacuity: a collapsed scan fails closed, the predicate is proven to discriminate,
  and the test drives the SHIPPED validator rather than a re-implemented copy

No check_value self-polls the companion PR; every one reads product content at the pinned
product SHA.
@coderabbitai

coderabbitai Bot commented Jul 13, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 4 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e8d6c2cf-ca6f-4d63-9b21-8a970ab34a80

📥 Commits

Reviewing files that changed from the base of the PR and between 39cf65e and 95afdd4.

📒 Files selected for processing (7)
  • contracts/OMN-14135.yaml
  • drift/dod_receipts/OMN-14135/dod-occ-self-commit/command.yaml
  • drift/dod_receipts/OMN-14135/dod-rebind-2285-head-c0798e63/command.yaml
  • drift/dod_receipts/OMN-14135/dod-verify-2285-enforcement-ci-precommit/command.yaml
  • drift/dod_receipts/OMN-14135/dod-verify-2285-non-vacuity/command.yaml
  • drift/dod_receipts/OMN-14135/dod-verify-2285-red-exists-but-wrong/command.yaml
  • drift/dod_receipts/OMN-14135/dod-verify-2285-runtime-predicate/command.yaml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-14135-occ-infra-2285-dispatch-entrypoint-gate

Comment @coderabbitai help to get the list of available commands.

…ket_mismatch fix)

occ-preflight requires at least one PASS receipt per ticket to bind to the OCC PR under
check (or one of its commit SHAs). All five receipts bound to product PR #2285, so
eligibility failed with reason=pr_ticket_mismatch. The self-bind item is the one that is
supposed to carry the OCC-side binding; the four product-observing items correctly stay
bound to #2285 and keep reading product content at the pinned product SHA.
@jonahgabriel
jonahgabriel merged commit 61f2845 into dev Jul 13, 2026
48 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-14135-occ-infra-2285-dispatch-entrypoint-gate branch July 13, 2026 04:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant