docs(OMN-13198): remove ModelOnexEnvelope docstring ref in omniintelligence - #715
Conversation
…ntEnvelope ModelEventBusConfig docstring referenced the legacy ModelOnexEnvelope class (deleted in B4/OMN-13196). The event bus wraps Kafka messages into the canonical ModelEventEnvelope. Docstring-only edit; no behavior changed.
|
Warning Review limit reached
More reviews will be available in 6 minutes and 18 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?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 credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. 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, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…4.0) (#749) * feat(OMN-11881): normalize version field in all 63 contracts (#672) Replaces `contract_version: {major: X, minor: Y, patch: Z}` dict format with top-level `version: "X.Y.Z"` string in all 63 omniintelligence contracts. Updates test_contract_validation.py to enforce the new string format. * fix(OMN-12165): Fix datetime.now() in omniintelligence handler (#674) Replace naive datetime.now() with datetime.now(timezone.utc) for last_updated and generated_at fields in handler_onextree_generator.py. * fix(OMN-12167): Add contract.yaml for 4 omniintelligence nodes (#675) Adds contract.yaml for four nodes missing topology coverage: - node_tcb_generation_compute (COMPUTE_GENERIC): TCB intent normalization and candidate scoring - node_intent_graph_reducer (REDUCER_GENERIC): directed intent transition graph accumulator with state_machine - node_anti_gaming_alerter_effect (EFFECT_GENERIC): Kafka alert publisher, Kafka event bus declared - node_objective_ab_framework_compute (COMPUTE_GENERIC): multi-variant A/B objective evaluation All contracts validated: zero new test failures vs main (52 pre-existing failures unchanged). * chore(OMN-12169): Delete high-confidence dead code in omniintelligence (#676) - Remove 3 orphaned introspection.py files (609 lines): node_pattern_demotion_effect, node_pattern_extraction_compute, node_pattern_storage_effect — not imported anywhere - Remove 4 unused create_empty_* factory functions (118 lines) from node_pattern_extraction_compute/handlers/protocols.py and scrub them from __all__ Pre-existing RL test failures (test_contracts, test_unified_train_cli) confirmed on main before changes. * fix(OMN-12174): Eliminate hardcoded paths in omniintelligence (#677) Replace machine-specific /Volumes/PRO-G40 and /Users/jonah paths in test fixtures and .pre-commit-config.yaml error message with portable alternatives. - test_debounce_state.py: _SOURCE → /omninode/code/omniintelligence - test_handler_crawl_scheduler.py: _SOURCE → /omninode/code/omniintelligence - node_crawl_scheduler_effect/conftest.py: source_ref fixture → /omninode/code/omniintelligence - test_handler_context_item_writer.py: /Users/jonah/.claude → /home/user/.claude - .pre-commit-config.yaml: error message → $OMNI_HOME/docs/plans/ * test(OMN-12179): add unit tests for handler_claude_event payload extractors and DLQ routing (#678) Covers previously untested helpers in the highest-CCN file (score 1.8, CCN 21): - _extract_file_path_from_payload: top-level and nested tool_input paths, truncation, non-string guards - _extract_tool_name_from_payload: key priority, truncation, empty/non-string guards - _determine_processing_status: all three status branches (SUCCESS emitted, SUCCESS no-config, PARTIAL failed) - _route_to_dlq: DLQ topic suffix, payload structure, metadata annotation, swallowed failures, envelope sanitization * refactor(OMN-12185): Convert boundary @DataClass to Pydantic in omniintelligence (#679) Convert the three mutable accumulator classes in node_intent_graph_reducer to frozen=False Pydantic BaseModel. Preserves in-place mutation semantics required by the graph update handlers; uses ConfigDict(arbitrary_types_allowed=True) for the tuple-keyed edges dict in ModelIntentGraphState. All 49 existing unit tests pass without modification. * feat(OMN-11577, OMN-11581): implement CiErrorClassifier + DebugRetrieval compute nodes (#673) - NodeCiErrorClassifierCompute: add handle_classify_ci_error handler that parses raw failure_output (JSON or plain-text), normalizes via _parse_llm_response, and delegates from node.py thin shell; add handler_routing to contract.yaml - NodeDebugRetrievalCompute: replace empty stub with store-injected constructor that delegates to query_fix_records_with_decay; node accepts ProtocolDebugStore at construction time; add handler_routing to contract.yaml - Tests: 14 new tests for handler_classifier (JSON input, plain-text fallback, confidence clamping, end-to-end), 14 tests for handler_retrieval (time-decay math, store delegation, record annotation) - Both contracts gain handler_routing sections, removing them from the test_all_nodes_have_handler_routing_or_exemption failure list (8→6 remaining) * feat(OMN-12280): wire dispatch_worker-completed bridge handlers in dispatch engine (#684) * chore: release v0.24.0 — bump all dependency pins * feat(OMN-12280): wire dispatch_worker-completed bridge handlers in dispatch engine Add two missing bridge handlers to create_intelligence_dispatch_engine: 1. create_dispatch_outcome_eval_dispatch_handler: routes onex.evt.omniclaude.dispatch_worker-completed.v1 → handle_dispatch_outcome() and publishes onex.evt.omniintelligence.dispatch-outcome-evaluated.v1 2. create_dispatch_outcome_record_dispatch_handler: routes onex.evt.omniintelligence.dispatch-outcome-evaluated.v1 → record_dispatch_outcome() → writes dispatch_eval_results rows Previously PluginIntelligence wired the Kafka consumer (via contract.yaml subscribe_topics) but MessageDispatchEngine had no handler registered for these topics, causing "No handler found" nacks on every message. * fix(OMN-12280): lowercase verdict and fix ModelCostProvenance construction (#685) - EnumDispatchVerdict values are lowercase (pass/fail/error); the eval handler publishes PASS/FAIL/ERROR uppercase from ModelOutput.verdict - ModelCostProvenance validator forbids source_payload_hash for non-measured usage; only pass it when usage_source == "measured" * fix(OMN-12250): restore RewardSignal contract schema and extend train CLI (#686) - rl/contracts/rewards.py: replace re-export with proper per-channel RewardSignal (latency_reward, success_reward, cost_reward, quality_reward, weight fields, to_scalar()) frozen Pydantic model. The shaper-based RewardSignal in rl/rewards.py has a different shape; the contract model is used by RL training loops and must remain independent. - rl/train.py: add --all, --min-episodes, --manifest, --schedule flags; add pipeline and team surface support; exit code 2 when all skipped; print maturity class in output. Fixes 19 unit test failures. * test(OMN-12250): use EnumUsageSource in GPU event test (#688) * refactor(OMN-11584): restructure tools/ and clients/ to ONEX taxonomy (#689) Reclassifies two bare-noun directories into proper ONEX taxonomy names: - tools/ → validators/ (contract linter, validation models — these are validators in ONEX taxonomy; all internal imports updated) - clients/ → merged into adapters/ (LLM/API clients are adapters per ONEX taxonomy; file names preserved, all cross-package imports updated) Deferred: runtime/ (50+ files, plugin entrypoint — separate PR needed), audit/ (CLI entrypoint, tightly coupled to test markers), protocols/ (already valid ONEX taxonomy name for protocol definitions). 407 targeted tests pass; 0 new failures vs pre-existing baseline. * fix(OMN-11584): align dependency lock after taxonomy merge (#690) * ci(OMN-11584): align CI with validators taxonomy (#691) * ci(OMN-7466): rescue omniintelligence main target guard (#693) * ci(OMN-12243): add main target guard (#683) * chore: release v0.24.0 (OMN-12245) (#681) * feat(OMN-11881): normalize version field in all 63 contracts (#672) Replaces `contract_version: {major: X, minor: Y, patch: Z}` dict format with top-level `version: "X.Y.Z"` string in all 63 omniintelligence contracts. Updates test_contract_validation.py to enforce the new string format. * fix(OMN-12165): Fix datetime.now() in omniintelligence handler (#674) Replace naive datetime.now() with datetime.now(timezone.utc) for last_updated and generated_at fields in handler_onextree_generator.py. * fix(OMN-12167): Add contract.yaml for 4 omniintelligence nodes (#675) Adds contract.yaml for four nodes missing topology coverage: - node_tcb_generation_compute (COMPUTE_GENERIC): TCB intent normalization and candidate scoring - node_intent_graph_reducer (REDUCER_GENERIC): directed intent transition graph accumulator with state_machine - node_anti_gaming_alerter_effect (EFFECT_GENERIC): Kafka alert publisher, Kafka event bus declared - node_objective_ab_framework_compute (COMPUTE_GENERIC): multi-variant A/B objective evaluation All contracts validated: zero new test failures vs main (52 pre-existing failures unchanged). * chore(OMN-12169): Delete high-confidence dead code in omniintelligence (#676) - Remove 3 orphaned introspection.py files (609 lines): node_pattern_demotion_effect, node_pattern_extraction_compute, node_pattern_storage_effect — not imported anywhere - Remove 4 unused create_empty_* factory functions (118 lines) from node_pattern_extraction_compute/handlers/protocols.py and scrub them from __all__ Pre-existing RL test failures (test_contracts, test_unified_train_cli) confirmed on main before changes. * fix(OMN-12174): Eliminate hardcoded paths in omniintelligence (#677) Replace machine-specific /Volumes/PRO-G40 and /Users/jonah paths in test fixtures and .pre-commit-config.yaml error message with portable alternatives. - test_debounce_state.py: _SOURCE → /omninode/code/omniintelligence - test_handler_crawl_scheduler.py: _SOURCE → /omninode/code/omniintelligence - node_crawl_scheduler_effect/conftest.py: source_ref fixture → /omninode/code/omniintelligence - test_handler_context_item_writer.py: /Users/jonah/.claude → /home/user/.claude - .pre-commit-config.yaml: error message → $OMNI_HOME/docs/plans/ * test(OMN-12179): add unit tests for handler_claude_event payload extractors and DLQ routing (#678) Covers previously untested helpers in the highest-CCN file (score 1.8, CCN 21): - _extract_file_path_from_payload: top-level and nested tool_input paths, truncation, non-string guards - _extract_tool_name_from_payload: key priority, truncation, empty/non-string guards - _determine_processing_status: all three status branches (SUCCESS emitted, SUCCESS no-config, PARTIAL failed) - _route_to_dlq: DLQ topic suffix, payload structure, metadata annotation, swallowed failures, envelope sanitization * refactor(OMN-12185): Convert boundary @DataClass to Pydantic in omniintelligence (#679) Convert the three mutable accumulator classes in node_intent_graph_reducer to frozen=False Pydantic BaseModel. Preserves in-place mutation semantics required by the graph update handlers; uses ConfigDict(arbitrary_types_allowed=True) for the tuple-keyed edges dict in ModelIntentGraphState. All 49 existing unit tests pass without modification. * feat(OMN-11577, OMN-11581): implement CiErrorClassifier + DebugRetrieval compute nodes (#673) - NodeCiErrorClassifierCompute: add handle_classify_ci_error handler that parses raw failure_output (JSON or plain-text), normalizes via _parse_llm_response, and delegates from node.py thin shell; add handler_routing to contract.yaml - NodeDebugRetrievalCompute: replace empty stub with store-injected constructor that delegates to query_fix_records_with_decay; node accepts ProtocolDebugStore at construction time; add handler_routing to contract.yaml - Tests: 14 new tests for handler_classifier (JSON input, plain-text fallback, confidence clamping, end-to-end), 14 tests for handler_retrieval (time-decay math, store delegation, record annotation) - Both contracts gain handler_routing sections, removing them from the test_all_nodes_have_handler_routing_or_exemption failure list (8→6 remaining) * chore: release v0.24.0 — bump all dependency pins * ci: re-trigger CI for release promotion PR * evidence(OMN-12245): add release promotion receipts * evidence(OMN-12245): allowlist receipt commit shas * ci(OMN-12245): rerun after dependency publish * fix(OMN-12245): remove product-local release receipts * ci(OMN-12245): rerun after OCC main evidence * fix(OMN-12245): refresh omniintelligence release locks * fix(OMN-12245): satisfy omniintelligence release gates * fix(OMN-12245): allowlist release pin secret scan * chore(auto-ship): rescue uncommitted work from canonical omniintelligence Rescue uncommitted canonical work (auto-ship node undeployed). Rescued files: - training_manifest.yaml * ci(OMN-7466): refresh auto-ship rescue gates * fix(OMN-7466): keep omniintelligence rescue scoped * docs(OMN-7466): satisfy strict README diff gate * ci(OMN-12477): remove hotfix/* bypass from main-target-guard (#694) Main now accepts only dev/promotion PRs (with promotion-receipt: OCC-N). Deletes the hotfix/* allow-block and updates error messaging to drop hotfix references. OMN-12477 * chore(deps): update omnibase-core requirement (#698) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.43.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.43.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(deps): refresh aiohttp lock and stabilize baseline tests (#699) * chore(deps): bump starlette from 0.49.3 to 1.0.1 (#700) * chore(deps): bump starlette from 0.49.3 to 1.0.1 Bumps [starlette](https://github.com/Kludex/starlette) from 0.49.3 to 1.0.1. - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@0.49.3...1.0.1) --- updated-dependencies: - dependency-name: starlette dependency-version: 1.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * fix: keep starlette dependency PR green --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com> * chore(deps): update omnibase-core requirement (#703) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.44.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.44.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci(OMN-12825): wire receipt-honesty gate (queue-safe ratchet) (#702) Add `.github/workflows/receipt-honesty.yml` — the OMN-12791 receipt-honesty validator wired as a CI workflow. Triggers on pull_request + merge_group so it is queue-safe for a later additive flip to required status check. The gate is a no-op (PASS) on omniintelligence since the repo carries no committed drift/dod_receipts/ files; it activates automatically if a PR introduces receipt YAMLs and will catch gamed probes before merge. Evidence-Source: b4a423efb853fdfdfb821ae6af5c7a694a585e36 Evidence-Ticket: OMN-12825 * chore(deps): bump the actions group with 2 updates (#706) Bumps the actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv). Updates `actions/checkout` from 4 to 6 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) Updates `astral-sh/setup-uv` from 4 to 7 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](astral-sh/setup-uv@v4...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: astral-sh/setup-uv dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs(OMN-13180): refresh omniintelligence documentation (#711) - AGENT.md: corrected Qdrant claim — patterns stored in PostgreSQL, not Qdrant - README.md: corrected node type counts (Compute 35+→24, Effect 14+→30) - CLAUDE.md: Runtime Module table updated — dispatch_handlers.py now 31 handlers / 40 routes; all 14 dispatch_handler_*.py modules noted - docs/architecture/ONEX_FOUR_NODE_ARCHITECTURE.md: updated Four Node Types counts; added validate_handshake as bootstrap step 2.5; corrected dispatch engine route claim; replaced stale inline inventory with pointer to NODE_INVENTORY.md - docs/reference/NODE_INVENTORY.md: added node_dispatch_outcome_eval_effect (OMN-12280); documented 7 unregistered node directories; updated last-verified date - docs/reference/EVENT_SURFACE.md: pattern-scored.v1 moved from deprecated to produced (live since OMN-8161); added dispatch_worker-completed.v1 (consumed) and dispatch-outcome-evaluated.v1 (produced) from OMN-12280; updated last-verified date Parent: OMN-13172 * chore(OMN-13187): refresh omniintelligence dependencies (#712) * chore(deps): bump cryptography from 46.0.7 to 48.0.1 Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.7 to 48.0.1. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](pyca/cryptography@46.0.7...48.0.1) --- updated-dependencies: - dependency-name: cryptography dependency-version: 48.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps-dev): bump python-multipart from 0.0.27 to 0.0.31 Bumps [python-multipart](https://github.com/Kludex/python-multipart) from 0.0.27 to 0.0.31. - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md) - [Commits](Kludex/python-multipart@0.0.27...0.0.31) --- updated-dependencies: - dependency-name: python-multipart dependency-version: 0.0.31 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump starlette from 1.0.1 to 1.3.1 Bumps [starlette](https://github.com/Kludex/starlette) from 1.0.1 to 1.3.1. - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@1.0.1...1.3.1) --- updated-dependencies: - dependency-name: starlette dependency-version: 1.3.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump aiohttp from 3.14.0 to 3.14.1 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.14.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(OMN-13187): refresh dependency evidence event * fix(OMN-13187): route unreachable model fallback to codex * test(OMN-13187): stabilize default review model test --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(OMN-13187): bump pyjwt in omniintelligence (#714) * docs(OMN-13198): retarget ModelOnexEnvelope docstring ref to ModelEventEnvelope (#715) ModelEventBusConfig docstring referenced the legacy ModelOnexEnvelope class (deleted in B4/OMN-13196). The event bus wraps Kafka messages into the canonical ModelEventEnvelope. Docstring-only edit; no behavior changed. * fix: split intelligence subscription startup (#716) * feat(OMN-13298): wire url-authority gate (pre-commit + CI) (#719) * feat(OMN-13298): wire url-authority gate (pre-commit + CI) Wires the existing check-url-authority remote hook from omnibase_core and adds url-authority-gate.yml CI workflow. Existing violations are grandfathered in the shared baseline (seeded via omnibase_core PR #1264). Only NEW hardcoded URL fingerprints will fail the gate going forward. - pre-commit hook: check-url-authority (ratchet, burn-down baseline) - CI workflow: url-authority-gate.yml (REQUIRED STATUS CHECK) - Baseline: seeded in omnibase_core#1264 (OMN-13298) Child of OMN-12803. * fix(OMN-13298): pin url authority validator source * fix(OMN-13298): run pinned url authority validator in CI * feat(OMN-13296): add reject-deploy-gate-skip-token pre-commit hook (#717) * feat(OMN-13296): add reject-deploy-gate-skip-token pre-commit hook Adds skip-token rejection gate (OMN-10414 parity) to local pre-commit: - .pre-commit-hooks/reject-deploy-gate-skip-token.sh (hook script) - reject-deploy-gate-skip-token (pre-commit stage) - reject-deploy-gate-skip-token-commit-msg (commit-msg stage) CI mirror call-reject-skip.yml was already present; this adds the local enforcement layer so bypass tokens are caught at commit time, not only in CI. CLAUDE.md Rule #10. Fail-closed proof: stage a file with [skip-deploy-gate: x] → hook exits 1 naming OMN-10414; remove token → hook exits 0. * chore(OMN-13296): refresh skip-token checks * fix(OMN-13296): place skip-token hooks in pre-commit repos * fix(OMN-13296): move skip-token hook under validation scripts * feat(OMN-13297): wire runtime-profiles gate into omniintelligence (#718) * feat(OMN-13297): wire runtime-profiles gate into omniintelligence W3 from the validator standardization remediation plan (GAP-7). Verification (F1 pre-file grep confirmed absent before this change): - `rg "runtime_profile" .pre-commit-config.yaml` → ABSENT (before) - 67 node contracts, 0 with runtime_profiles Changes: - Add validation/runtime_profiles_allowlist.yaml (baseline-freezing 15 pre-existing command-consuming nodes without runtime_profiles) - Add scripts/ci/run_runtime_profiles_validator.py (wrapper script that loads the repo-local allowlist — mirrors OMN-12955 pattern from omnimarket) - Add onex-validate-runtime-profiles pre-commit hook to .pre-commit-config.yaml - Add .github/workflows/validator-runtime-profiles.yml CI gate Fail-closed proof: planting a cmd-consuming contract without runtime_profiles not in the allowlist exits non-zero with the specific error message. Gate blocks NEW orphans; pre-existing ones are allowlisted for drain via OMN-12982. Evidence-Source: OCC#TBD Evidence-Ticket: OMN-13297 * fix(OMN-13297): keep runtime profiles allowlist under scripts validation * fix(OMN-13297): raise runtime profiles uv timeout * feat(OMN-13249): wire canonical-inference gate (pre-commit + CI) (#720) Fleet rollout of OMN-13219 to omniintelligence: consume the remotely-exposed check-canonical-inference hook from omnibase_core (pinned to export commit 940d2f2a) as a pre-commit hook + add the Canonical Inference Gate required CI workflow. The gate rejects NEW non-canonical model-inference surfaces (shelled codex/claude/gemini/opencode CLIs, *_MODEL/*_PROVIDER env reads). The 1 existing omniintelligence violation is grandfathered in the shared baseline (canonical_inference_baseline.json, seeded by core#1265); burn-down only. Fail-closed proof (verifier = core@940d2f2a validator): clean full-repo scan -> exit 0 (0 new, 1 grandfathered). (cross-repo plant proof captured on omnimarket; same validator + baseline.) Evidence-Source: OCC#2757 Evidence-Ticket: OMN-13249 * feat(OMN-13291): wire validate-validator-requirements fleet gate (omniintelligence) (W0) (#721) * feat(OMN-13291): wire validate-validator-requirements fleet gate (omniintelligence) W0 of the validator-standardization remediation plan (§3 W0). Wires the validate-validator-requirements meta-gate into omniintelligence as a remote pre-commit hook + CI workflow, so omniintelligence proves it carries its required validator gate-set declared in omnibase_core's architecture-handshakes/validator-requirements.yaml. - Add the omnibase_core remote pre-commit hook (validate-validator-requirements), pinned to the core export commit; re-pin to merged-dev once core lands. - Add .github/workflows/validate-validator-requirements.yml (checks out core, runs the consumer against omniintelligence's spec copy + baseline). Reports ALL missing gates per run (never fail-on-first). - Add architecture-handshakes/validator-requirements-baseline.yaml: structured schema recording the current accepted gaps (19); shrinks as W1-W10 land. - Vendor architecture-handshakes/validator-requirements.yaml (spec copy) so the pre-commit hook resolves the spec from this repo root (mirrors onex_change_control). Fail-closed proof captured in the omnibase_core export PR body (verifier != runner). Parent epic: OMN-9048. * ci(OMN-13291): satisfy validator requirements hook formatting * feat(OMN-13283): consume core transport-import + node-purity hooks, delete local io-audit scanner (#722) * feat(OMN-13283): consume core transport-import + node-purity hooks, delete local io-audit scanner Consolidates omniintelligence's transport/purity gates into the canonical omnibase_core remote hooks (OMN-13283 / GAP-8a, under OMN-9048): - Delete the scanner: src/omniintelligence/audit/io_audit.py + __main__.py and scripts/validate_no_transport_imports.py, plus tests/audit/test_io_violations.py, its io fixtures, tests/audit/io_audit_whitelist.yaml, and the transport-import test. - KEEP the shared audit data models (enum_io_audit_rule, model_audit_result/metrics/ violation, model_inline_pragma, model_whitelist_*) — they are consumed by the runtime node node_context_audit_aggregator_compute, not the scanner. __init__ trims the scanner exports. - Wire core remote hooks 'validate-no-transport-imports' + 'node-purity' (scoped to src/omniintelligence/nodes) in .pre-commit-config.yaml; node-purity excludes mirror the former io_audit_whitelist file-scoped exemptions (effect-node handlers, __main__ entry points, documented compute exemption). - Repoint the io-audit CI job to run the core node-purity validator with matching excludes. No behavioral regression: both hooks pass clean; audit models still import; fail-closed proof captured. Pin advances to the core merge SHA once omnibase_core#1272 lands. Part of OMN-9048 validator-standardization. * docs(OMN-13283): retarget stale audit links * ci(OMN-13283): align audit selector with core purity hook * fix(OMN-9536): drop legacy routing.feedback bare-topic drain in node_routing_feedback_effect (#724) * fix(OMN-9536): drop legacy routing.feedback bare-topic drain The bare topic "routing.feedback" was re-added by OMN-8157 (PR #610) as a no-op drain subscription, explicitly gated: "Remove after topic is confirmed empty and purged from Redpanda." Both gating conditions are now met: - No producer emits to the bare topic anywhere across all repos. The omniclaude registration (event_registry.py routing.feedback EventRegistration) fans out to TopicBase.ROUTING_FEEDBACK = onex.evt.omniclaude.routing-feedback.v1 (the canonical topic), not the bare topic. - Live Redpanda probe on 192.168.86.201 across all four lanes (dev, stability-test, prod, judge): bare routing.feedback topic is ABSENT in every lane; canonical onex.evt.omniclaude.routing-feedback.v1 is present. Removes the bare topic from subscribe_topics, the legacy drain dispatch handler + route, handle_legacy_routing_feedback_drain(), the TOPIC_LEGACY_ROUTING_FEEDBACK_BARE constant, and the drain-only test. Updates dispatch-engine handler/route count assertions (baseline 30->29 handlers, 37->36 routes) and removes the legacy topic from the contract-topics expected set. Bumps node_routing_feedback_effect contract 1.2.0 -> 1.2.1. * ci(OMN-9536): use reachable url authority core pin * refactor(OMN-13349): decompose claude hook check extraction (#723) * docs(OMN-13455): refresh architecture docs verified against code (#725) * chore(deps): update omnibase-core requirement (#729) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.45.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.45.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(OMN-13495): bump actions/checkout from 6 to 7 (#728) * chore(deps): bump actions/checkout from 6 to 7 in the actions group Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> * test(OMN-13495): align dispatch counts for no-LLM env * fix(OMN-13495): address checkout v7 review hardening --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump pydantic-settings from 2.14.0 to 2.14.2 (#731) Bumps [pydantic-settings](https://github.com/pydantic/pydantic-settings) from 2.14.0 to 2.14.2. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.0...v2.14.2) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * refactor(OMN-13561): remove scattered os.environ endpoint reads from navigation-retriever docs (Wave 1) (#734) Epic OMN-13556 Wave 1 (endpoints, OVERLAY seam) for omniintelligence. The url-authority gate flagged three `os.environ["LLM_EMBEDDING_URL"]` / `os.environ["QDRANT_URL"]` reads inside docstring/Field-description text of node_navigation_retriever_effect. These are NOT live env reads — the node is a pure declarative shell and the endpoints are caller-injected via the input model (already the correct DI pattern). The docstring literals were the only thing tripping the env-url-read rule. Reworded to describe overlay/routing- authority resolution without showing a raw env read. This burns down 3 grandfathered url-authority findings (baseline shrink in the paired omnibase_core PR). Gate stays green: 0 new violations. Live integration-endpoint migrations in this repo (QDRANT_URL in the gmail evaluator handler; MEMGRAPH_URI in dispatch_handler_graph_storage) require the sanctioned overlay boundary `omnibase_infra.runtime.overlay.contract_env_ref. expand_contract_env_refs` (OMN-13247). That module is on omnibase_infra dev only — it is NOT in any released tag (latest v0.38.3 lacks it) and omniintelligence pins omnibase-infra <0.38.0. Those migrations are deferred until the resolver ships in a release this repo can pin; vendoring/shimming the resolver is prohibited (duplication of the sanctioned boundary). LLM_*_URL reads are Bifrost-owned (OMN-12803/12815) and out of scope. Wave-1 ticket: OMN-13561. Epic: OMN-13556. * docs(OMN-13570): sanitize omniintelligence documentation (local-env + OMN-XXXX + renames) (#735) Removes all local-environment traces and Linear ticket references from the public documentation surface of omniintelligence. Task 1 — local-env sanitization: - deployment/docker/README.md: replace 192.168.86.200 with <onex-host>/ ${ONEX_HOST}, replace ".201" host shorthand with "the runtime host" - README.md: replace "on .201" with "on the runtime host" - CLAUDE.md: replace "on .201" with "on the runtime host" Task 2 — OMN-XXXX ticket ref removal (15 files): - CHANGELOG.md: strip OMN-XXXX from all feat/fix/test/ci prefixes, inline tags, and parenthetical refs across full version history - CLAUDE.md: remove (OMN-12280) dispatch count annotation; rewrite (OMN-2253)/(OMN-2058) API purpose prose; replace TODO(OMN-1234) illustrative code with generic TICKET-123 placeholder - docs/architecture/ONEX_FOUR_NODE_ARCHITECTURE.md: remove (OMN-13455) from last-updated footer - docs/architecture/contract-package-spec.md: remove **Ticket**: OMN-7142 header - docs/INDEX.md: remove (OMN-13455) from status table - docs/reference/NODE_INVENTORY.md: remove (OMN-13455) + (OMN-12280) annotations - docs/reference/EVENT_SURFACE.md: rewrite four OMN-tagged descriptions - docs/reference/DASH_INTEGRATION_TRUTH_BOUNDARY.md: remove (OMN-2366) drain tag - docs/standards/STANDARD_DOC_LAYOUT.md: rename plans/OMN-1757-* example path - deployment/database/FK_SCAN_REPORT.md: remove **Ticket**/**Parent** header fields - scripts/validation/topic_naming_baseline.txt: remove (OMN-3259) from comment - src/omniintelligence/audit/README.md: replace OMN-123/456 in YAML examples - src/omniintelligence/review_pairing/TOPICS.md: remove (OMN-2353) subsystem ref + OMN-2535 reference footer No source code, contracts, or CI yaml touched. Evidence-Ticket: OMN-13570 Evidence-Source: 87fb618f0273a5694123aed70aa25e4f8a3d1953 * chore(ci): propagate normalization-symmetry-hook [bot] (#738) Co-authored-by: onex-propagate-bot <bot@omninode.ai> * chore(OMN-13162): bump actions/cache to v6 (#740) * chore(deps): bump tuf from 6.0.0 to 7.0.0 (#741) Bumps [tuf](https://github.com/theupdateframework/python-tuf) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/theupdateframework/python-tuf/releases) - [Changelog](https://github.com/theupdateframework/python-tuf/blob/develop/docs/CHANGELOG.md) - [Commits](theupdateframework/python-tuf@v6.0.0...v7.0.0) --- updated-dependencies: - dependency-name: tuf dependency-version: 7.0.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump omnibase_core to 0.46.1 (#743) * feat(OMN-13802): add Cursor hook event effect (#744) * Add Cursor hook-event consumer + agent_source seam Surface the OmniCursor dispatcher backend draft for OmniNode review (ask H.1 of the 2026-06-23 response to OMNICURSOR_DISPATCHER_PLAN), rebased onto current dev (ask H.2). - node_cursor_hook_event_effect: peer of node_claude_hook_event_effect (route_cursor_hook_event), with handler, models, registry and tests - agent_source seam on route_hook_event (defaults to "claude"; additive, Claude path unchanged) threaded onto emitted events - CURSOR_HOOK_EVENT topic + dispatch/wiring/message-type registration Rebase reconciliation against live dev (H.2): - merged DISPATCH_ALIAS_CURSOR_HOOK into __all__ alongside dev's new DISPATCH_OUTCOME_EVALUATED / DISPATCH_WORKER_COMPLETED aliases - corrected the dispatch-engine assertions: with the cursor node wired onto dev's baseline the true counts are 30 handlers / 37 routes (dev's 29/36 + 1 cursor each). The pre-rebase draft asserted 29/36, which only passed by number-collision with dev's cursor-less totals. Verified: full node_claude_hook_event_effect suite + dispatch + cursor + topic/registration tests all green (317 passed) with the W1 omnibase_core cursor models present. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(OMN-13802): add cursor hook event effect * chore(OMN-13802): format cursor hook contract --------- Co-authored-by: andywu42 <awu42@dons.usfca.edu> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * feat(OMN-13877): dep-provenance gate — omniintelligence (+OMN-13878 escape tokens) (#745) * feat(OMN-13877): dep-provenance gate — omniintelligence (+OMN-13878 escape tokens) Add the dep-provenance gate (OMN-13873) to omniintelligence: forbid first-party git-source overrides of omnibase-core / omnibase-spi / omnibase-compat in [tool.uv.sources]. Copied verbatim from omnibase_infra: - scripts/check_dep_provenance.py - .github/workflows/dep-provenance-gate.yml - tests/scripts/test_check_dep_provenance.py Wire the check-dep-provenance local hook into .pre-commit-config.yaml. This repo currently violates the gate (omnibase-core rev=, omnibase-spi tag=). Escape-token both existing lines to OMN-13878 so the gate lands green without changing any pin value; the drain of those overrides is tracked by OMN-13878. * test(OMN-13877): allowlist fixture git-rev hashes for detect-secrets The verbatim-copied dep-provenance test fixtures embed example git rev SHAs (omnibase_infra #2184 reproduction + occ-only allow case). This repo's Detect Secrets CI gate flags them as Hex High Entropy Strings. Annotate the three fixture lines with '# pragma: allowlist secret' (comment on an implicitly-concatenated string piece — no behavior change; all 11 tests still pass). omnibase_infra's own secrets baseline already allowlisted these; this repo scans tests/scripts/ so needs the inline mark. * ci(OMN-13875): Quality Gate actually evaluates contract-compliance (#746) * ci(OMN-13875): Quality Gate actually evaluates contract-compliance contract-compliance was in quality-gate's needs: but its .result was never read — a decorative dependency, so a Contract Compliance Check failure did not block merge. Read it and fail the gate on failure. Success-or-skipped tolerance only applies to non-gating events; on pull_request/merge_group it always runs, so nothing slips via skipped. quality-gate feeds the required CI Summary (requires quality==success), so the fix propagates. Evidence-Source: workflow-logic fix, no Python touched. * test(OMN-13885): bump handler/route baselines +1 for OMN-13802 cursor-hook OMN-13802 (#744) added the cursor-hook event effect: +1 baseline handler (intelligence-cursor-hook-handler) and +1 baseline route (intelligence-cursor-hook-route), plus a new node dir node_cursor_hook_event_effect. The drift-detector baselines were not bumped, turning omniintelligence dev red on Unit Tests -> CI Summary (blocks all dev PRs). Confirmed live counts locally (env -u PYTHONPATH, pinned core rev 5698f6f): - with projection: handler_count=31, route_count=40 - without projection: handler_count=30, route_count=37 Updated: - test_pattern_stored_triggers_projection.py: 30->31 / 39->40 (proj), 29->30 (base) - test_projection_handler_registration.py: 29->30, 36->37 - test_plugin_dispatch.py: 39->40, 30->31 - test_package_installability.py: EXPECTED_NODE_DIRS += node_cursor_hook_event_effect Full tests/unit green (5562+ passed). Unblocks OMN-13875 PR #746. * fix(OMN-13887): migrate omniintelligence dispatch off removed core MessageDispatchEngine + repin to PyPI (OMN-13878) (#748) omnibase_core removed runtime.runtime_message_dispatch.MessageDispatchEngine in 0.46.x. Migrate the Intelligence runtime onto the canonical successor (omnibase_infra.runtime.message_dispatch_engine.MessageDispatchEngine, the same engine omnimarket uses) via a single envelope-rehydration adapter seam so all ~30 domain handlers stay behavior-preserving and untouched. - dispatch_handlers.py: add _rehydrate_dispatch_envelope + _adapt_context_dispatcher + _register_dispatcher_adapted. The infra engine materializes every envelope to a JSON-safe dict at the dispatch boundary (OMN-1518) and treats a non-None str return as an output topic; the adapter restores a ModelEventEnvelope view (payload/correlation_id/event_type/timestamp from __debug_trace) and normalizes status-sentinel returns ("ok"/"skip"/...) to None. - plugin.py + dispatch_handlers.py: register_handler->register_dispatcher, handler_count->dispatcher_count, result.handler_id->result.dispatcher_id. - add tests/unit/runtime/test_dispatch_envelope_adapter.py (12 cases) covering the new boundary seam. - pyproject/uv.lock: repin omnibase-core 0.46.3 + omnibase-spi 0.23.1 from PyPI, bump infra to the core-0.46 dev rev, delete both raw-override-ok:OMN-13878 tokens and the core/spi git sources; ceilings <0.47.0 / <0.24.0. Closes the omniintelligence lane of OMN-13878 (4/4 token-free). Full CI-scoped suite (tests/ --ignore=tests/integration, matching ci.yml): 5675 passed, 0 failed. The 12 integration failures + e2e errors reproduce identically on clean origin/dev (service/pytest-asyncio, excluded from CI) — no regression. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: onex-propagate-bot <bot@omninode.ai> Co-authored-by: andywu42 <awu42@dons.usfca.edu> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* ci(OMN-12243): add main target guard (OmniNode-ai#683) * chore: release v0.24.0 (OMN-12245) (OmniNode-ai#681) * feat(OMN-11881): normalize version field in all 63 contracts (OmniNode-ai#672) Replaces `contract_version: {major: X, minor: Y, patch: Z}` dict format with top-level `version: "X.Y.Z"` string in all 63 omniintelligence contracts. Updates test_contract_validation.py to enforce the new string format. * fix(OMN-12165): Fix datetime.now() in omniintelligence handler (OmniNode-ai#674) Replace naive datetime.now() with datetime.now(timezone.utc) for last_updated and generated_at fields in handler_onextree_generator.py. * fix(OMN-12167): Add contract.yaml for 4 omniintelligence nodes (OmniNode-ai#675) Adds contract.yaml for four nodes missing topology coverage: - node_tcb_generation_compute (COMPUTE_GENERIC): TCB intent normalization and candidate scoring - node_intent_graph_reducer (REDUCER_GENERIC): directed intent transition graph accumulator with state_machine - node_anti_gaming_alerter_effect (EFFECT_GENERIC): Kafka alert publisher, Kafka event bus declared - node_objective_ab_framework_compute (COMPUTE_GENERIC): multi-variant A/B objective evaluation All contracts validated: zero new test failures vs main (52 pre-existing failures unchanged). * chore(OMN-12169): Delete high-confidence dead code in omniintelligence (OmniNode-ai#676) - Remove 3 orphaned introspection.py files (609 lines): node_pattern_demotion_effect, node_pattern_extraction_compute, node_pattern_storage_effect — not imported anywhere - Remove 4 unused create_empty_* factory functions (118 lines) from node_pattern_extraction_compute/handlers/protocols.py and scrub them from __all__ Pre-existing RL test failures (test_contracts, test_unified_train_cli) confirmed on main before changes. * fix(OMN-12174): Eliminate hardcoded paths in omniintelligence (OmniNode-ai#677) Replace machine-specific /Volumes/PRO-G40 and /Users/jonah paths in test fixtures and .pre-commit-config.yaml error message with portable alternatives. - test_debounce_state.py: _SOURCE → /omninode/code/omniintelligence - test_handler_crawl_scheduler.py: _SOURCE → /omninode/code/omniintelligence - node_crawl_scheduler_effect/conftest.py: source_ref fixture → /omninode/code/omniintelligence - test_handler_context_item_writer.py: /Users/jonah/.claude → /home/user/.claude - .pre-commit-config.yaml: error message → $OMNI_HOME/docs/plans/ * test(OMN-12179): add unit tests for handler_claude_event payload extractors and DLQ routing (OmniNode-ai#678) Covers previously untested helpers in the highest-CCN file (score 1.8, CCN 21): - _extract_file_path_from_payload: top-level and nested tool_input paths, truncation, non-string guards - _extract_tool_name_from_payload: key priority, truncation, empty/non-string guards - _determine_processing_status: all three status branches (SUCCESS emitted, SUCCESS no-config, PARTIAL failed) - _route_to_dlq: DLQ topic suffix, payload structure, metadata annotation, swallowed failures, envelope sanitization * refactor(OMN-12185): Convert boundary @DataClass to Pydantic in omniintelligence (OmniNode-ai#679) Convert the three mutable accumulator classes in node_intent_graph_reducer to frozen=False Pydantic BaseModel. Preserves in-place mutation semantics required by the graph update handlers; uses ConfigDict(arbitrary_types_allowed=True) for the tuple-keyed edges dict in ModelIntentGraphState. All 49 existing unit tests pass without modification. * feat(OMN-11577, OMN-11581): implement CiErrorClassifier + DebugRetrieval compute nodes (OmniNode-ai#673) - NodeCiErrorClassifierCompute: add handle_classify_ci_error handler that parses raw failure_output (JSON or plain-text), normalizes via _parse_llm_response, and delegates from node.py thin shell; add handler_routing to contract.yaml - NodeDebugRetrievalCompute: replace empty stub with store-injected constructor that delegates to query_fix_records_with_decay; node accepts ProtocolDebugStore at construction time; add handler_routing to contract.yaml - Tests: 14 new tests for handler_classifier (JSON input, plain-text fallback, confidence clamping, end-to-end), 14 tests for handler_retrieval (time-decay math, store delegation, record annotation) - Both contracts gain handler_routing sections, removing them from the test_all_nodes_have_handler_routing_or_exemption failure list (8→6 remaining) * chore: release v0.24.0 — bump all dependency pins * ci: re-trigger CI for release promotion PR * evidence(OMN-12245): add release promotion receipts * evidence(OMN-12245): allowlist receipt commit shas * ci(OMN-12245): rerun after dependency publish * fix(OMN-12245): remove product-local release receipts * ci(OMN-12245): rerun after OCC main evidence * fix(OMN-12245): refresh omniintelligence release locks * fix(OMN-12245): satisfy omniintelligence release gates * fix(OMN-12245): allowlist release pin secret scan * release(OMN-13828): promote omniintelligence dev→main (adoption + 0.24.0) (OmniNode-ai#749) * feat(OMN-11881): normalize version field in all 63 contracts (OmniNode-ai#672) Replaces `contract_version: {major: X, minor: Y, patch: Z}` dict format with top-level `version: "X.Y.Z"` string in all 63 omniintelligence contracts. Updates test_contract_validation.py to enforce the new string format. * fix(OMN-12165): Fix datetime.now() in omniintelligence handler (OmniNode-ai#674) Replace naive datetime.now() with datetime.now(timezone.utc) for last_updated and generated_at fields in handler_onextree_generator.py. * fix(OMN-12167): Add contract.yaml for 4 omniintelligence nodes (OmniNode-ai#675) Adds contract.yaml for four nodes missing topology coverage: - node_tcb_generation_compute (COMPUTE_GENERIC): TCB intent normalization and candidate scoring - node_intent_graph_reducer (REDUCER_GENERIC): directed intent transition graph accumulator with state_machine - node_anti_gaming_alerter_effect (EFFECT_GENERIC): Kafka alert publisher, Kafka event bus declared - node_objective_ab_framework_compute (COMPUTE_GENERIC): multi-variant A/B objective evaluation All contracts validated: zero new test failures vs main (52 pre-existing failures unchanged). * chore(OMN-12169): Delete high-confidence dead code in omniintelligence (OmniNode-ai#676) - Remove 3 orphaned introspection.py files (609 lines): node_pattern_demotion_effect, node_pattern_extraction_compute, node_pattern_storage_effect — not imported anywhere - Remove 4 unused create_empty_* factory functions (118 lines) from node_pattern_extraction_compute/handlers/protocols.py and scrub them from __all__ Pre-existing RL test failures (test_contracts, test_unified_train_cli) confirmed on main before changes. * fix(OMN-12174): Eliminate hardcoded paths in omniintelligence (OmniNode-ai#677) Replace machine-specific /Volumes/PRO-G40 and /Users/jonah paths in test fixtures and .pre-commit-config.yaml error message with portable alternatives. - test_debounce_state.py: _SOURCE → /omninode/code/omniintelligence - test_handler_crawl_scheduler.py: _SOURCE → /omninode/code/omniintelligence - node_crawl_scheduler_effect/conftest.py: source_ref fixture → /omninode/code/omniintelligence - test_handler_context_item_writer.py: /Users/jonah/.claude → /home/user/.claude - .pre-commit-config.yaml: error message → $OMNI_HOME/docs/plans/ * test(OMN-12179): add unit tests for handler_claude_event payload extractors and DLQ routing (OmniNode-ai#678) Covers previously untested helpers in the highest-CCN file (score 1.8, CCN 21): - _extract_file_path_from_payload: top-level and nested tool_input paths, truncation, non-string guards - _extract_tool_name_from_payload: key priority, truncation, empty/non-string guards - _determine_processing_status: all three status branches (SUCCESS emitted, SUCCESS no-config, PARTIAL failed) - _route_to_dlq: DLQ topic suffix, payload structure, metadata annotation, swallowed failures, envelope sanitization * refactor(OMN-12185): Convert boundary @DataClass to Pydantic in omniintelligence (OmniNode-ai#679) Convert the three mutable accumulator classes in node_intent_graph_reducer to frozen=False Pydantic BaseModel. Preserves in-place mutation semantics required by the graph update handlers; uses ConfigDict(arbitrary_types_allowed=True) for the tuple-keyed edges dict in ModelIntentGraphState. All 49 existing unit tests pass without modification. * feat(OMN-11577, OMN-11581): implement CiErrorClassifier + DebugRetrieval compute nodes (OmniNode-ai#673) - NodeCiErrorClassifierCompute: add handle_classify_ci_error handler that parses raw failure_output (JSON or plain-text), normalizes via _parse_llm_response, and delegates from node.py thin shell; add handler_routing to contract.yaml - NodeDebugRetrievalCompute: replace empty stub with store-injected constructor that delegates to query_fix_records_with_decay; node accepts ProtocolDebugStore at construction time; add handler_routing to contract.yaml - Tests: 14 new tests for handler_classifier (JSON input, plain-text fallback, confidence clamping, end-to-end), 14 tests for handler_retrieval (time-decay math, store delegation, record annotation) - Both contracts gain handler_routing sections, removing them from the test_all_nodes_have_handler_routing_or_exemption failure list (8→6 remaining) * feat(OMN-12280): wire dispatch_worker-completed bridge handlers in dispatch engine (OmniNode-ai#684) * chore: release v0.24.0 — bump all dependency pins * feat(OMN-12280): wire dispatch_worker-completed bridge handlers in dispatch engine Add two missing bridge handlers to create_intelligence_dispatch_engine: 1. create_dispatch_outcome_eval_dispatch_handler: routes onex.evt.omniclaude.dispatch_worker-completed.v1 → handle_dispatch_outcome() and publishes onex.evt.omniintelligence.dispatch-outcome-evaluated.v1 2. create_dispatch_outcome_record_dispatch_handler: routes onex.evt.omniintelligence.dispatch-outcome-evaluated.v1 → record_dispatch_outcome() → writes dispatch_eval_results rows Previously PluginIntelligence wired the Kafka consumer (via contract.yaml subscribe_topics) but MessageDispatchEngine had no handler registered for these topics, causing "No handler found" nacks on every message. * fix(OMN-12280): lowercase verdict and fix ModelCostProvenance construction (OmniNode-ai#685) - EnumDispatchVerdict values are lowercase (pass/fail/error); the eval handler publishes PASS/FAIL/ERROR uppercase from ModelOutput.verdict - ModelCostProvenance validator forbids source_payload_hash for non-measured usage; only pass it when usage_source == "measured" * fix(OMN-12250): restore RewardSignal contract schema and extend train CLI (OmniNode-ai#686) - rl/contracts/rewards.py: replace re-export with proper per-channel RewardSignal (latency_reward, success_reward, cost_reward, quality_reward, weight fields, to_scalar()) frozen Pydantic model. The shaper-based RewardSignal in rl/rewards.py has a different shape; the contract model is used by RL training loops and must remain independent. - rl/train.py: add --all, --min-episodes, --manifest, --schedule flags; add pipeline and team surface support; exit code 2 when all skipped; print maturity class in output. Fixes 19 unit test failures. * test(OMN-12250): use EnumUsageSource in GPU event test (OmniNode-ai#688) * refactor(OMN-11584): restructure tools/ and clients/ to ONEX taxonomy (OmniNode-ai#689) Reclassifies two bare-noun directories into proper ONEX taxonomy names: - tools/ → validators/ (contract linter, validation models — these are validators in ONEX taxonomy; all internal imports updated) - clients/ → merged into adapters/ (LLM/API clients are adapters per ONEX taxonomy; file names preserved, all cross-package imports updated) Deferred: runtime/ (50+ files, plugin entrypoint — separate PR needed), audit/ (CLI entrypoint, tightly coupled to test markers), protocols/ (already valid ONEX taxonomy name for protocol definitions). 407 targeted tests pass; 0 new failures vs pre-existing baseline. * fix(OMN-11584): align dependency lock after taxonomy merge (OmniNode-ai#690) * ci(OMN-11584): align CI with validators taxonomy (OmniNode-ai#691) * ci(OMN-7466): rescue omniintelligence main target guard (OmniNode-ai#693) * ci(OMN-12243): add main target guard (OmniNode-ai#683) * chore: release v0.24.0 (OMN-12245) (OmniNode-ai#681) * feat(OMN-11881): normalize version field in all 63 contracts (OmniNode-ai#672) Replaces `contract_version: {major: X, minor: Y, patch: Z}` dict format with top-level `version: "X.Y.Z"` string in all 63 omniintelligence contracts. Updates test_contract_validation.py to enforce the new string format. * fix(OMN-12165): Fix datetime.now() in omniintelligence handler (OmniNode-ai#674) Replace naive datetime.now() with datetime.now(timezone.utc) for last_updated and generated_at fields in handler_onextree_generator.py. * fix(OMN-12167): Add contract.yaml for 4 omniintelligence nodes (OmniNode-ai#675) Adds contract.yaml for four nodes missing topology coverage: - node_tcb_generation_compute (COMPUTE_GENERIC): TCB intent normalization and candidate scoring - node_intent_graph_reducer (REDUCER_GENERIC): directed intent transition graph accumulator with state_machine - node_anti_gaming_alerter_effect (EFFECT_GENERIC): Kafka alert publisher, Kafka event bus declared - node_objective_ab_framework_compute (COMPUTE_GENERIC): multi-variant A/B objective evaluation All contracts validated: zero new test failures vs main (52 pre-existing failures unchanged). * chore(OMN-12169): Delete high-confidence dead code in omniintelligence (OmniNode-ai#676) - Remove 3 orphaned introspection.py files (609 lines): node_pattern_demotion_effect, node_pattern_extraction_compute, node_pattern_storage_effect — not imported anywhere - Remove 4 unused create_empty_* factory functions (118 lines) from node_pattern_extraction_compute/handlers/protocols.py and scrub them from __all__ Pre-existing RL test failures (test_contracts, test_unified_train_cli) confirmed on main before changes. * fix(OMN-12174): Eliminate hardcoded paths in omniintelligence (OmniNode-ai#677) Replace machine-specific /Volumes/PRO-G40 and /Users/jonah paths in test fixtures and .pre-commit-config.yaml error message with portable alternatives. - test_debounce_state.py: _SOURCE → /omninode/code/omniintelligence - test_handler_crawl_scheduler.py: _SOURCE → /omninode/code/omniintelligence - node_crawl_scheduler_effect/conftest.py: source_ref fixture → /omninode/code/omniintelligence - test_handler_context_item_writer.py: /Users/jonah/.claude → /home/user/.claude - .pre-commit-config.yaml: error message → $OMNI_HOME/docs/plans/ * test(OMN-12179): add unit tests for handler_claude_event payload extractors and DLQ routing (OmniNode-ai#678) Covers previously untested helpers in the highest-CCN file (score 1.8, CCN 21): - _extract_file_path_from_payload: top-level and nested tool_input paths, truncation, non-string guards - _extract_tool_name_from_payload: key priority, truncation, empty/non-string guards - _determine_processing_status: all three status branches (SUCCESS emitted, SUCCESS no-config, PARTIAL failed) - _route_to_dlq: DLQ topic suffix, payload structure, metadata annotation, swallowed failures, envelope sanitization * refactor(OMN-12185): Convert boundary @DataClass to Pydantic in omniintelligence (OmniNode-ai#679) Convert the three mutable accumulator classes in node_intent_graph_reducer to frozen=False Pydantic BaseModel. Preserves in-place mutation semantics required by the graph update handlers; uses ConfigDict(arbitrary_types_allowed=True) for the tuple-keyed edges dict in ModelIntentGraphState. All 49 existing unit tests pass without modification. * feat(OMN-11577, OMN-11581): implement CiErrorClassifier + DebugRetrieval compute nodes (OmniNode-ai#673) - NodeCiErrorClassifierCompute: add handle_classify_ci_error handler that parses raw failure_output (JSON or plain-text), normalizes via _parse_llm_response, and delegates from node.py thin shell; add handler_routing to contract.yaml - NodeDebugRetrievalCompute: replace empty stub with store-injected constructor that delegates to query_fix_records_with_decay; node accepts ProtocolDebugStore at construction time; add handler_routing to contract.yaml - Tests: 14 new tests for handler_classifier (JSON input, plain-text fallback, confidence clamping, end-to-end), 14 tests for handler_retrieval (time-decay math, store delegation, record annotation) - Both contracts gain handler_routing sections, removing them from the test_all_nodes_have_handler_routing_or_exemption failure list (8→6 remaining) * chore: release v0.24.0 — bump all dependency pins * ci: re-trigger CI for release promotion PR * evidence(OMN-12245): add release promotion receipts * evidence(OMN-12245): allowlist receipt commit shas * ci(OMN-12245): rerun after dependency publish * fix(OMN-12245): remove product-local release receipts * ci(OMN-12245): rerun after OCC main evidence * fix(OMN-12245): refresh omniintelligence release locks * fix(OMN-12245): satisfy omniintelligence release gates * fix(OMN-12245): allowlist release pin secret scan * chore(auto-ship): rescue uncommitted work from canonical omniintelligence Rescue uncommitted canonical work (auto-ship node undeployed). Rescued files: - training_manifest.yaml * ci(OMN-7466): refresh auto-ship rescue gates * fix(OMN-7466): keep omniintelligence rescue scoped * docs(OMN-7466): satisfy strict README diff gate * ci(OMN-12477): remove hotfix/* bypass from main-target-guard (OmniNode-ai#694) Main now accepts only dev/promotion PRs (with promotion-receipt: OCC-N). Deletes the hotfix/* allow-block and updates error messaging to drop hotfix references. OMN-12477 * chore(deps): update omnibase-core requirement (OmniNode-ai#698) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.43.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.43.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(deps): refresh aiohttp lock and stabilize baseline tests (OmniNode-ai#699) * chore(deps): bump starlette from 0.49.3 to 1.0.1 (OmniNode-ai#700) * chore(deps): bump starlette from 0.49.3 to 1.0.1 Bumps [starlette](https://github.com/Kludex/starlette) from 0.49.3 to 1.0.1. - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@0.49.3...1.0.1) --- updated-dependencies: - dependency-name: starlette dependency-version: 1.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * fix: keep starlette dependency PR green --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jonahgabriel <jonah.gabriel@gmail.com> * chore(deps): update omnibase-core requirement (OmniNode-ai#703) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.44.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.44.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci(OMN-12825): wire receipt-honesty gate (queue-safe ratchet) (OmniNode-ai#702) Add `.github/workflows/receipt-honesty.yml` — the OMN-12791 receipt-honesty validator wired as a CI workflow. Triggers on pull_request + merge_group so it is queue-safe for a later additive flip to required status check. The gate is a no-op (PASS) on omniintelligence since the repo carries no committed drift/dod_receipts/ files; it activates automatically if a PR introduces receipt YAMLs and will catch gamed probes before merge. Evidence-Source: b4a423efb853fdfdfb821ae6af5c7a694a585e36 Evidence-Ticket: OMN-12825 * chore(deps): bump the actions group with 2 updates (OmniNode-ai#706) Bumps the actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv). Updates `actions/checkout` from 4 to 6 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) Updates `astral-sh/setup-uv` from 4 to 7 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](astral-sh/setup-uv@v4...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: astral-sh/setup-uv dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs(OMN-13180): refresh omniintelligence documentation (OmniNode-ai#711) - AGENT.md: corrected Qdrant claim — patterns stored in PostgreSQL, not Qdrant - README.md: corrected node type counts (Compute 35+→24, Effect 14+→30) - CLAUDE.md: Runtime Module table updated — dispatch_handlers.py now 31 handlers / 40 routes; all 14 dispatch_handler_*.py modules noted - docs/architecture/ONEX_FOUR_NODE_ARCHITECTURE.md: updated Four Node Types counts; added validate_handshake as bootstrap step 2.5; corrected dispatch engine route claim; replaced stale inline inventory with pointer to NODE_INVENTORY.md - docs/reference/NODE_INVENTORY.md: added node_dispatch_outcome_eval_effect (OMN-12280); documented 7 unregistered node directories; updated last-verified date - docs/reference/EVENT_SURFACE.md: pattern-scored.v1 moved from deprecated to produced (live since OMN-8161); added dispatch_worker-completed.v1 (consumed) and dispatch-outcome-evaluated.v1 (produced) from OMN-12280; updated last-verified date Parent: OMN-13172 * chore(OMN-13187): refresh omniintelligence dependencies (OmniNode-ai#712) * chore(deps): bump cryptography from 46.0.7 to 48.0.1 Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.7 to 48.0.1. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](pyca/cryptography@46.0.7...48.0.1) --- updated-dependencies: - dependency-name: cryptography dependency-version: 48.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps-dev): bump python-multipart from 0.0.27 to 0.0.31 Bumps [python-multipart](https://github.com/Kludex/python-multipart) from 0.0.27 to 0.0.31. - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md) - [Commits](Kludex/python-multipart@0.0.27...0.0.31) --- updated-dependencies: - dependency-name: python-multipart dependency-version: 0.0.31 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump starlette from 1.0.1 to 1.3.1 Bumps [starlette](https://github.com/Kludex/starlette) from 1.0.1 to 1.3.1. - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](Kludex/starlette@1.0.1...1.3.1) --- updated-dependencies: - dependency-name: starlette dependency-version: 1.3.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump aiohttp from 3.14.0 to 3.14.1 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.14.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(OMN-13187): refresh dependency evidence event * fix(OMN-13187): route unreachable model fallback to codex * test(OMN-13187): stabilize default review model test --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(OMN-13187): bump pyjwt in omniintelligence (OmniNode-ai#714) * docs(OMN-13198): retarget ModelOnexEnvelope docstring ref to ModelEventEnvelope (OmniNode-ai#715) ModelEventBusConfig docstring referenced the legacy ModelOnexEnvelope class (deleted in B4/OMN-13196). The event bus wraps Kafka messages into the canonical ModelEventEnvelope. Docstring-only edit; no behavior changed. * fix: split intelligence subscription startup (OmniNode-ai#716) * feat(OMN-13298): wire url-authority gate (pre-commit + CI) (OmniNode-ai#719) * feat(OMN-13298): wire url-authority gate (pre-commit + CI) Wires the existing check-url-authority remote hook from omnibase_core and adds url-authority-gate.yml CI workflow. Existing violations are grandfathered in the shared baseline (seeded via omnibase_core PR #1264). Only NEW hardcoded URL fingerprints will fail the gate going forward. - pre-commit hook: check-url-authority (ratchet, burn-down baseline) - CI workflow: url-authority-gate.yml (REQUIRED STATUS CHECK) - Baseline: seeded in omnibase_core#1264 (OMN-13298) Child of OMN-12803. * fix(OMN-13298): pin url authority validator source * fix(OMN-13298): run pinned url authority validator in CI * feat(OMN-13296): add reject-deploy-gate-skip-token pre-commit hook (OmniNode-ai#717) * feat(OMN-13296): add reject-deploy-gate-skip-token pre-commit hook Adds skip-token rejection gate (OMN-10414 parity) to local pre-commit: - .pre-commit-hooks/reject-deploy-gate-skip-token.sh (hook script) - reject-deploy-gate-skip-token (pre-commit stage) - reject-deploy-gate-skip-token-commit-msg (commit-msg stage) CI mirror call-reject-skip.yml was already present; this adds the local enforcement layer so bypass tokens are caught at commit time, not only in CI. CLAUDE.md Rule OmniNode-ai#10. Fail-closed proof: stage a file with [skip-deploy-gate: x] → hook exits 1 naming OMN-10414; remove token → hook exits 0. * chore(OMN-13296): refresh skip-token checks * fix(OMN-13296): place skip-token hooks in pre-commit repos * fix(OMN-13296): move skip-token hook under validation scripts * feat(OMN-13297): wire runtime-profiles gate into omniintelligence (OmniNode-ai#718) * feat(OMN-13297): wire runtime-profiles gate into omniintelligence W3 from the validator standardization remediation plan (GAP-7). Verification (F1 pre-file grep confirmed absent before this change): - `rg "runtime_profile" .pre-commit-config.yaml` → ABSENT (before) - 67 node contracts, 0 with runtime_profiles Changes: - Add validation/runtime_profiles_allowlist.yaml (baseline-freezing 15 pre-existing command-consuming nodes without runtime_profiles) - Add scripts/ci/run_runtime_profiles_validator.py (wrapper script that loads the repo-local allowlist — mirrors OMN-12955 pattern from omnimarket) - Add onex-validate-runtime-profiles pre-commit hook to .pre-commit-config.yaml - Add .github/workflows/validator-runtime-profiles.yml CI gate Fail-closed proof: planting a cmd-consuming contract without runtime_profiles not in the allowlist exits non-zero with the specific error message. Gate blocks NEW orphans; pre-existing ones are allowlisted for drain via OMN-12982. Evidence-Source: OCC#TBD Evidence-Ticket: OMN-13297 * fix(OMN-13297): keep runtime profiles allowlist under scripts validation * fix(OMN-13297): raise runtime profiles uv timeout * feat(OMN-13249): wire canonical-inference gate (pre-commit + CI) (OmniNode-ai#720) Fleet rollout of OMN-13219 to omniintelligence: consume the remotely-exposed check-canonical-inference hook from omnibase_core (pinned to export commit 940d2f2a) as a pre-commit hook + add the Canonical Inference Gate required CI workflow. The gate rejects NEW non-canonical model-inference surfaces (shelled codex/claude/gemini/opencode CLIs, *_MODEL/*_PROVIDER env reads). The 1 existing omniintelligence violation is grandfathered in the shared baseline (canonical_inference_baseline.json, seeded by core#1265); burn-down only. Fail-closed proof (verifier = core@940d2f2a validator): clean full-repo scan -> exit 0 (0 new, 1 grandfathered). (cross-repo plant proof captured on omnimarket; same validator + baseline.) Evidence-Source: OCC#2757 Evidence-Ticket: OMN-13249 * feat(OMN-13291): wire validate-validator-requirements fleet gate (omniintelligence) (W0) (OmniNode-ai#721) * feat(OMN-13291): wire validate-validator-requirements fleet gate (omniintelligence) W0 of the validator-standardization remediation plan (§3 W0). Wires the validate-validator-requirements meta-gate into omniintelligence as a remote pre-commit hook + CI workflow, so omniintelligence proves it carries its required validator gate-set declared in omnibase_core's architecture-handshakes/validator-requirements.yaml. - Add the omnibase_core remote pre-commit hook (validate-validator-requirements), pinned to the core export commit; re-pin to merged-dev once core lands. - Add .github/workflows/validate-validator-requirements.yml (checks out core, runs the consumer against omniintelligence's spec copy + baseline). Reports ALL missing gates per run (never fail-on-first). - Add architecture-handshakes/validator-requirements-baseline.yaml: structured schema recording the current accepted gaps (19); shrinks as W1-W10 land. - Vendor architecture-handshakes/validator-requirements.yaml (spec copy) so the pre-commit hook resolves the spec from this repo root (mirrors onex_change_control). Fail-closed proof captured in the omnibase_core export PR body (verifier != runner). Parent epic: OMN-9048. * ci(OMN-13291): satisfy validator requirements hook formatting * feat(OMN-13283): consume core transport-import + node-purity hooks, delete local io-audit scanner (OmniNode-ai#722) * feat(OMN-13283): consume core transport-import + node-purity hooks, delete local io-audit scanner Consolidates omniintelligence's transport/purity gates into the canonical omnibase_core remote hooks (OMN-13283 / GAP-8a, under OMN-9048): - Delete the scanner: src/omniintelligence/audit/io_audit.py + __main__.py and scripts/validate_no_transport_imports.py, plus tests/audit/test_io_violations.py, its io fixtures, tests/audit/io_audit_whitelist.yaml, and the transport-import test. - KEEP the shared audit data models (enum_io_audit_rule, model_audit_result/metrics/ violation, model_inline_pragma, model_whitelist_*) — they are consumed by the runtime node node_context_audit_aggregator_compute, not the scanner. __init__ trims the scanner exports. - Wire core remote hooks 'validate-no-transport-imports' + 'node-purity' (scoped to src/omniintelligence/nodes) in .pre-commit-config.yaml; node-purity excludes mirror the former io_audit_whitelist file-scoped exemptions (effect-node handlers, __main__ entry points, documented compute exemption). - Repoint the io-audit CI job to run the core node-purity validator with matching excludes. No behavioral regression: both hooks pass clean; audit models still import; fail-closed proof captured. Pin advances to the core merge SHA once omnibase_core#1272 lands. Part of OMN-9048 validator-standardization. * docs(OMN-13283): retarget stale audit links * ci(OMN-13283): align audit selector with core purity hook * fix(OMN-9536): drop legacy routing.feedback bare-topic drain in node_routing_feedback_effect (OmniNode-ai#724) * fix(OMN-9536): drop legacy routing.feedback bare-topic drain The bare topic "routing.feedback" was re-added by OMN-8157 (PR OmniNode-ai#610) as a no-op drain subscription, explicitly gated: "Remove after topic is confirmed empty and purged from Redpanda." Both gating conditions are now met: - No producer emits to the bare topic anywhere across all repos. The omniclaude registration (event_registry.py routing.feedback EventRegistration) fans out to TopicBase.ROUTING_FEEDBACK = onex.evt.omniclaude.routing-feedback.v1 (the canonical topic), not the bare topic. - Live Redpanda probe on 192.168.86.201 across all four lanes (dev, stability-test, prod, judge): bare routing.feedback topic is ABSENT in every lane; canonical onex.evt.omniclaude.routing-feedback.v1 is present. Removes the bare topic from subscribe_topics, the legacy drain dispatch handler + route, handle_legacy_routing_feedback_drain(), the TOPIC_LEGACY_ROUTING_FEEDBACK_BARE constant, and the drain-only test. Updates dispatch-engine handler/route count assertions (baseline 30->29 handlers, 37->36 routes) and removes the legacy topic from the contract-topics expected set. Bumps node_routing_feedback_effect contract 1.2.0 -> 1.2.1. * ci(OMN-9536): use reachable url authority core pin * refactor(OMN-13349): decompose claude hook check extraction (OmniNode-ai#723) * docs(OMN-13455): refresh architecture docs verified against code (OmniNode-ai#725) * chore(deps): update omnibase-core requirement (OmniNode-ai#729) Updates the requirements on [omnibase-core](https://github.com/OmniNode-ai/omnibase_core) to permit the latest version. - [Release notes](https://github.com/OmniNode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@v0.42.0...v0.45.0) --- updated-dependencies: - dependency-name: omnibase-core dependency-version: 0.45.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(OMN-13495): bump actions/checkout from 6 to 7 (OmniNode-ai#728) * chore(deps): bump actions/checkout from 6 to 7 in the actions group Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> * test(OMN-13495): align dispatch counts for no-LLM env * fix(OMN-13495): address checkout v7 review hardening --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump pydantic-settings from 2.14.0 to 2.14.2 (OmniNode-ai#731) Bumps [pydantic-settings](https://github.com/pydantic/pydantic-settings) from 2.14.0 to 2.14.2. - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.14.0...v2.14.2) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.14.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * refactor(OMN-13561): remove scattered os.environ endpoint reads from navigation-retriever docs (Wave 1) (OmniNode-ai#734) Epic OMN-13556 Wave 1 (endpoints, OVERLAY seam) for omniintelligence. The url-authority gate flagged three `os.environ["LLM_EMBEDDING_URL"]` / `os.environ["QDRANT_URL"]` reads inside docstring/Field-description text of node_navigation_retriever_effect. These are NOT live env reads — the node is a pure declarative shell and the endpoints are caller-injected via the input model (already the correct DI pattern). The docstring literals were the only thing tripping the env-url-read rule. Reworded to describe overlay/routing- authority resolution without showing a raw env read. This burns down 3 grandfathered url-authority findings (baseline shrink in the paired omnibase_core PR). Gate stays green: 0 new violations. Live integration-endpoint migrations in this repo (QDRANT_URL in the gmail evaluator handler; MEMGRAPH_URI in dispatch_handler_graph_storage) require the sanctioned overlay boundary `omnibase_infra.runtime.overlay.contract_env_ref. expand_contract_env_refs` (OMN-13247). That module is on omnibase_infra dev only — it is NOT in any released tag (latest v0.38.3 lacks it) and omniintelligence pins omnibase-infra <0.38.0. Those migrations are deferred until the resolver ships in a release this repo can pin; vendoring/shimming the resolver is prohibited (duplication of the sanctioned boundary). LLM_*_URL reads are Bifrost-owned (OMN-12803/12815) and out of scope. Wave-1 ticket: OMN-13561. Epic: OMN-13556. * docs(OMN-13570): sanitize omniintelligence documentation (local-env + OMN-XXXX + renames) (OmniNode-ai#735) Removes all local-environment traces and Linear ticket references from the public documentation surface of omniintelligence. Task 1 — local-env sanitization: - deployment/docker/README.md: replace 192.168.86.200 with <onex-host>/ ${ONEX_HOST}, replace ".201" host shorthand with "the runtime host" - README.md: replace "on .201" with "on the runtime host" - CLAUDE.md: replace "on .201" with "on the runtime host" Task 2 — OMN-XXXX ticket ref removal (15 files): - CHANGELOG.md: strip OMN-XXXX from all feat/fix/test/ci prefixes, inline tags, and parenthetical refs across full version history - CLAUDE.md: remove (OMN-12280) dispatch count annotation; rewrite (OMN-2253)/(OMN-2058) API purpose prose; replace TODO(OMN-1234) illustrative code with generic TICKET-123 placeholder - docs/architecture/ONEX_FOUR_NODE_ARCHITECTURE.md: remove (OMN-13455) from last-updated footer - docs/architecture/contract-package-spec.md: remove **Ticket**: OMN-7142 header - docs/INDEX.md: remove (OMN-13455) from status table - docs/reference/NODE_INVENTORY.md: remove (OMN-13455) + (OMN-12280) annotations - docs/reference/EVENT_SURFACE.md: rewrite four OMN-tagged descriptions - docs/reference/DASH_INTEGRATION_TRUTH_BOUNDARY.md: remove (OMN-2366) drain tag - docs/standards/STANDARD_DOC_LAYOUT.md: rename plans/OMN-1757-* example path - deployment/database/FK_SCAN_REPORT.md: remove **Ticket**/**Parent** header fields - scripts/validation/topic_naming_baseline.txt: remove (OMN-3259) from comment - src/omniintelligence/audit/README.md: replace OMN-123/456 in YAML examples - src/omniintelligence/review_pairing/TOPICS.md: remove (OMN-2353) subsystem ref + OMN-2535 reference footer No source code, contracts, or CI yaml touched. Evidence-Ticket: OMN-13570 Evidence-Source: 87fb618f0273a5694123aed70aa25e4f8a3d1953 * chore(ci): propagate normalization-symmetry-hook [bot] (OmniNode-ai#738) Co-authored-by: onex-propagate-bot <bot@omninode.ai> * chore(OMN-13162): bump actions/cache to v6 (OmniNode-ai#740) * chore(deps): bump tuf from 6.0.0 to 7.0.0 (OmniNode-ai#741) Bumps [tuf](https://github.com/theupdateframework/python-tuf) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/theupdateframework/python-tuf/releases) - [Changelog](https://github.com/theupdateframework/python-tuf/blob/develop/docs/CHANGELOG.md) - [Commits](theupdateframework/python-tuf@v6.0.0...v7.0.0) --- updated-dependencies: - dependency-name: tuf dependency-version: 7.0.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump omnibase_core to 0.46.1 (OmniNode-ai#743) * feat(OMN-13802): add Cursor hook event effect (OmniNode-ai#744) * Add Cursor hook-event consumer + agent_source seam Surface the OmniCursor dispatcher backend draft for OmniNode review (ask H.1 of the 2026-06-23 response to OMNICURSOR_DISPATCHER_PLAN), rebased onto current dev (ask H.2). - node_cursor_hook_event_effect: peer of node_claude_hook_event_effect (route_cursor_hook_event), with handler, models, registry and tests - agent_source seam on route_hook_event (defaults to "claude"; additive, Claude path unchanged) threaded onto emitted events - CURSOR_HOOK_EVENT topic + dispatch/wiring/message-type registration Rebase reconciliation against live dev (H.2): - merged DISPATCH_ALIAS_CURSOR_HOOK into __all__ alongside dev's new DISPATCH_OUTCOME_EVALUATED / DISPATCH_WORKER_COMPLETED aliases - corrected the dispatch-engine assertions: with the cursor node wired onto dev's baseline the true counts are 30 handlers / 37 routes (dev's 29/36 + 1 cursor each). The pre-rebase draft asserted 29/36, which only passed by number-collision with dev's cursor-less totals. Verified: full node_claude_hook_event_effect suite + dispatch + cursor + topic/registration tests all green (317 passed) with the W1 omnibase_core cursor models present. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(OMN-13802): add cursor hook event effect * chore(OMN-13802): format cursor hook contract --------- Co-authored-by: andywu42 <awu42@dons.usfca.edu> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * feat(OMN-13877): dep-provenance gate — omniintelligence (+OMN-13878 escape tokens) (OmniNode-ai#745) * feat(OMN-13877): dep-provenance gate — omniintelligence (+OMN-13878 escape tokens) Add the dep-provenance gate (OMN-13873) to omniintelligence: forbid first-party git-source overrides of omnibase-core / omnibase-spi / omnibase-compat in [tool.uv.sources]. Copied verbatim from omnibase_infra: - scripts/check_dep_provenance.py - .github/workflows/dep-provenance-gate.yml - tests/scripts/test_check_dep_provenance.py Wire the check-dep-provenance local hook into .pre-commit-config.yaml. This repo currently violates the gate (omnibase-core rev=, omnibase-spi tag=). Escape-token both existing lines to OMN-13878 so the gate lands green without changing any pin value; the drain of those overrides is tracked by OMN-13878. * test(OMN-13877): allowlist fixture git-rev hashes for detect-secrets The verbatim-copied dep-provenance test fixtures embed example git rev SHAs (omnibase_infra #2184 reproduction + occ-only allow case). This repo's Detect Secrets CI gate flags them as Hex High Entropy Strings. Annotate the three fixture lines with '# pragma: allowlist secret' (comment on an implicitly-concatenated string piece — no behavior change; all 11 tests still pass). omnibase_infra's own secrets baseline already allowlisted these; this repo scans tests/scripts/ so needs the inline mark. * ci(OMN-13875): Quality Gate actually evaluates contract-compliance (OmniNode-ai#746) * ci(OMN-13875): Quality Gate actually evaluates contract-compliance contract-compliance was in quality-gate's needs: but its .result was never read — a decorative dependency, so a Contract Compliance Check failure did not block merge. Read it and fail the gate on failure. Success-or-skipped tolerance only applies to non-gating events; on pull_request/merge_group it always runs, so nothing slips via skipped. quality-gate feeds the required CI Summary (requires quality==success), so the fix propagates. Evidence-Source: workflow-logic fix, no Python touched. * test(OMN-13885): bump handler/route baselines +1 for OMN-13802 cursor-hook OMN-13802 (OmniNode-ai#744) added the cursor-hook event effect: +1 baseline handler (intelligence-cursor-hook-handler) and +1 baseline route (intelligence-cursor-hook-route), plus a new node dir node_cursor_hook_event_effect. The drift-detector baselines were not bumped, turning omniintelligence dev red on Unit Tests -> CI Summary (blocks all dev PRs). Confirmed live counts locally (env -u PYTHONPATH, pinned core rev 5698f6f): - with projection: handler_count=31, route_count=40 - without projection: handler_count=30, route_count=37 Updated: - test_pattern_stored_triggers_projection.py: 30->31 / 39->40 (proj), 29->30 (base) - test_projection_handler_registration.py: 29->30, 36->37 - test_plugin_dispatch.py: 39->40, 30->31 - test_package_installability.py: EXPECTED_NODE_DIRS += node_cursor_hook_event_effect Full tests/unit green (5562+ passed). Unblocks OMN-13875 PR OmniNode-ai#746. * fix(OMN-13887): migrate omniintelligence dispatch off removed core MessageDispatchEngine + repin to PyPI (OMN-13878) (OmniNode-ai#748) omnibase_core removed runtime.runtime_message_dispatch.MessageDispatchEngine in 0.46.x. Migrate the Intelligence runtime onto the canonical successor (omnibase_infra.runtime.message_dispatch_engine.MessageDispatchEngine, the same engine omnimarket uses) via a single envelope-rehydration adapter seam so all ~30 domain handlers stay behavior-preserving and untouched. - dispatch_handlers.py: add _rehydrate_dispatch_envelope + _adapt_context_dispatcher + _register_dispatcher_adapted. The infra engine materializes every envelope to a JSON-safe dict at the dispatch boundary (OMN-1518) and treats a non-None str return as an output topic; the adapter restores a ModelEventEnvelope view (payload/correlation_id/event_type/timestamp from __debug_trace) and normalizes status-sentinel returns ("ok"/"skip"/...) to None. - plugin.py + dispatch_handlers.py: register_handler->register_dispatcher, handler_count->dispatcher_count, result.handler_id->result.dispatcher_id. - add tests/unit/runtime/test_dispatch_envelope_adapter.py (12 cases) covering the new boundary seam. - pyproject/uv.lock: repin omnibase-core 0.46.3 + omnibase-spi 0.23.1 from PyPI, bump infra to the core-0.46 dev rev, delete both raw-override-ok:OMN-13878 tokens and the core/spi git sources; ceilings <0.47.0 / <0.24.0. Closes the omniintelligence lane of OMN-13878 (4/4 token-free). Full CI-scoped suite (tests/ --ignore=tests/integration, matching ci.yml): 5675 passed, 0 failed. The 12 integration failures + e2e errors reproduce identically on clean origin/dev (service/pytest-asyncio, excluded from CI) — no regression. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: onex-propagate-bot <bot@omninode.ai> Co-authored-by: andywu42 <awu42@dons.usfca.edu> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * chore(deps): bump omnibase_core to 0.46.4 Automated dependency cascade from OmniNode-ai/omnibase_core release v0.46.4. Triggered-by: https://github.com/OmniNode-ai/omnibase_core/actions/runs/28660603530 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: onex-propagate-bot <bot@omninode.ai> Co-authored-by: andywu42 <awu42@dons.usfca.edu> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
OMN-13198 — B5 docstring cleanup (omniintelligence)
Phase B5 of the envelope-dedup / platform-debt workstream. Removes the residual
ModelOnexEnvelopedocstring reference. The legacy class is deleted by B4(OMN-13196); the event bus wraps Kafka messages into the canonical
ModelEventEnvelope. Docstring-only; no behavior changed.Change
src/omniintelligence/runtime/model_event_bus_config.py—ModelEventBusConfigdocstring: "wraps them into ModelOnexEnvelope" → "ModelEventEnvelope".
Acceptance
grep -rn ModelOnexEnvelopeover*.md/*.py(excluding.venv) on this branch → 0.Gates (dod_evidence)
dod_evidence: OCC receipt
drift/dod_receipts/OMN-13198/pr-omniintelligence/command.yaml(status PASS, verifier=receipt-gate-local != runner) in onex_change_control; contract
contracts/OMN-13198.yaml.Part of OMN-13198 (with OMN-13204).
Evidence-Source: OCC#2697
Evidence-Ticket: OMN-13198