Repository navigation
fix(OMN-16998): classifier names the observed provider status class - #2287
Conversation
✅ Architectural Review — PASSEDErrors: 0 What this checks
No architectural violations found. Static architectural lint — no model inference (OMN-14176). |
✅ Hostile Reviewer — PASSEDBlocking findings (critical/error): 0 Gate semantics
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524) |
…imarket#2287 (#8153) * evidence: OCC companion pass 1 for OmniNode-ai/omnimarket#2287 * evidence: OCC companion self-bind for #8153 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai>
The fallback was a single regex alternating between 429 and quota wording, so quota wording ALONE was sufficient to claim a capacity refusal — and with only one enum member, an HTTP 401 fell through to that same quota label. Status and body are now separate patterns that must corroborate within a single reported failure: a 429 on one rung and quota wording on another are not one event. Resolution order is typed failure_class, then observed status (401/403 to auth_failed, 429 with quota body to provider_quota_exhausted), then provider_error for any other observed failure, and None only when nothing was observed at all. One invariant overrides the typed path: the DoD says NO classifier path may emit a quota cause without a 429, so an uncorroborated typed quota claim degrades to provider_error. That narrows a documented contract and is asserted explicitly. Held from PR until core 0.47.2 publishes and an infra release repins to it — the new enum members are not visible to omnimarket before then.
90cb8f8 to
3bc0b6e
Compare
|
No OCC evidence companion was minted for this PR. this PR is already bound to OCC#8153; its evidence companion exists and nothing needs authoring To clear this: Nothing to do — the companion already exists. Reported by |
|
Close-out for OMN-16998. Jonah merged this as There were no review points. The Architectural Review and the Hostile Reviewer both passed with 0 findings. The companion bot only noted that OCC#8153 was already bound. What landed: How it was verified: CI run 33829777959 passed on head Two corrections to the description:
DoD 3, which the description left out, was proven on 2026-09-23. Jonah's lane did a clean install from the package index and set an invalid GLM key. GLM returned a real 401, and the run reported Thank you! |
What
resolve_terminal_failure_causenow reports the cause the provider's own status class implies. A live HTTP 401 classifies asauth_failed; it previously reportedprovider_quota_exhausted.Ticket: https://linear.app/omninode/issue/OMN-16998
Why it matters beyond the label
terminal_failure_causeis the field beta criterion B7 ("zero over-quota refusals") is measured from. While a 401 classified as a quota event, auth failures were being counted as quota exhaustion — so the metric read as capacity pressure when the real cause was a credential. Audit G4/H15 found the live payload carryingterminal_failure_cause: provider_quota_exhaustedwhilequality_gates_failed[0]was the verbatimHTTP 401 Authentication Failed.A quota cause now requires a corroborating 429: status and body must agree within one reported failure before the classifier will name quota.
.201:17952 passed, 214 skipped, 3 deselected, 1 xfailed, 0 failedin 7m32s,[prepush-smart-tests] impacted tests passed; allowing push.PREPUSH_*variables, noENABLE_SMART_TESTS=off, no--no-verify, nothing hand-installed.The core half of this change is already merged as omnibase_core#1632 (
EnumTerminalFailureCausegainsAUTH_FAILEDandPROVIDER_ERROR, with the vocabulary asserted closed). This is the omnimarket consumer half.Definition of done
auth_failedend to endTestQuotaCauseRequires429DoD 3 is deliberately absent. A live-401 probe on the collaborator lane consumed a prior run's terminal event and reported success without calling an LLM; the OMN-17295 correlation-join guard caught it and refused the receipt. That is OMN-15660 (RuntimeLocal shares terminal consumer groups and never filters by correlation_id), which is unmerged. Per the operator ruling the probe is not to be retried until it lands, so this PR carries the classifier and its tests only.
Not included
No lock or pin changes. An earlier relock commit was dropped during rebase because
devalready carries that work via #2274 — verified both declaration sites (pyproject.toml:71and the resolver override at:638) already pinomnibase-infra>=0.38.16/omnibase-core>=0.47.2, anduv.lockresolves to them.Evidence-Ticket: OMN-16998
Evidence-Source: OCC#8153