Skip to content

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

Merged
jonahgabriel merged 3 commits into
devfrom
jonah/omn-12126-graduate-delegation-models
May 26, 2026
Merged

jonahgabriel merged 3 commits into
devfrom
jonah/omn-12126-graduate-delegation-models

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented May 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds canonical delegation wire DTOs to omnibase_core.models.delegation.wire subpackage, graduating them from omnibase_compat
  • Extracts EnumBudgetAction to omnibase_core.enums.enum_budget_action (satisfies single-class-per-file rule)
  • Adds 4 multi-class files to validator allowlist with inline rationale; adds 29 unit tests covering all new DTOs

Models added

File Classes
model_budget.py ModelBudgetLimits
model_delegation_wire_request.py ModelDelegationRequest (wire DTO, renamed to avoid conflict with hook DTO)
model_delegation_result.py ModelDelegationResult
model_quality_gate.py ModelQualityGateInput, ModelQualityGateResult
model_orchestrator_intents.py ModelRoutingIntent, ModelInferenceIntent, ModelQualityGateIntent, ModelBaselineIntent, ModelInferenceResponseData, ModelComplianceLoopResult
model_routing_config.py ModelTierModel, ModelRoutingTier, ModelDelegationConfig
model_bifrost_delegation_config.py 7 Bifrost gateway config DTOs
model_delegation_wire_envelope.py ModelDelegationEventEnvelope
model_task_delegated_event.py ModelTaskDelegatedEvent
enums/enum_budget_action.py EnumBudgetAction

Notes

  • model_delegation_wire_request.py renamed from model_delegation_request.py to avoid duplicate-model-filename conflict with models/delegation/model_delegation_request.py (hook DTO)
  • model_delegation_wire_envelope.py renamed from model_event_envelope.py to avoid conflict with models/events/model_event_envelope.py
  • EnumQualityGateCategory aliased to existing EnumQualityGateResult (satisfies enum governance, avoids duplication)
  • TASK_DELEGATED_TOPIC_V1 sourced from TopicBase.TASK_DELEGATED (no hardcoded topic strings)
  • All string-id and string-version fields annotated with bypass comments; ValueError in wire validator annotated with error-ok

DoD evidence

Summary by CodeRabbit

  • New Features

    • Added delegation request/response DTOs including budget limits, budget-action enum, acceptance-criteria validation, and quality-contract modes
    • Added routing, bifrost delegation configuration (fallbacks, circuit-breaker, failover, shadowing) and orchestration intents for routing/inference/quality/cost
    • Added durable "task delegated" events and an event envelope for delegation outcomes plus rich delegation result/metrics
  • Tests

    • Added comprehensive unit tests covering validation, defaults, constraints, and end-to-end delegation flows

Review Change Stack

Evidence-Source: OCC#1762
Evidence-Ticket: OMN-12126

…o 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
@coderabbitai

coderabbitai Bot commented May 26, 2026 •

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds frozen Pydantic delegation wire DTOs and an enum, routing/Bifrost configs, orchestrator intents, a package entrypoint that re-exports the wire types, unit tests covering validators/defaults, and updates the single-class-per-file validator to exclude legacy multi-class delegation model files.

Changes

Delegation Wire Protocol

Layer / File(s) Summary
Budget Action Enum and Budget Limits
src/omnibase_core/enums/enum_budget_action.py, src/omnibase_core/models/delegation/wire/model_budget.py
EnumBudgetAction defines compliance loop outcomes (CONTINUE, WARN, THROTTLE, ABORT). ModelBudgetLimits enforces positive ceilings for tokens, cost, and time.
Delegation Request DTO with Acceptance Criteria Validation
src/omnibase_core/models/delegation/wire/model_delegation_wire_request.py
ModelDelegationRequest captures prompt, task type, optional schema/compliance budget, quality contract mode, and acceptance_criteria. Includes validate_acceptance_criteria, SUPPORTED_ACCEPTANCE_CRITERIA, and MAX_WORDS_PER_SENTENCE_RE with validators enforcing criteria patterns and conditional budget requirement.
Delegation Result and Event Envelope Models
src/omnibase_core/models/delegation/wire/model_delegation_result.py, src/omnibase_core/models/delegation/wire/model_delegation_wire_envelope.py, src/omnibase_core/models/delegation/wire/model_task_delegated_event.py
ModelDelegationResult captures delegation outcome, accounting, escalation/compliance tracking, and aggregate metrics with a post-parse token-consistency validator. ModelTaskDelegatedEvent defines a durable event schema and topic constant. ModelDelegationEventEnvelope wraps a ModelDelegationResult with a topic.
Routing and Quality Gate Configuration DTOs
src/omnibase_core/models/delegation/wire/model_routing_config.py, src/omnibase_core/models/delegation/wire/model_quality_gate.py
ModelTierModel, ModelRoutingTier, ModelDelegationConfig model routing escalation tiers and candidates. ModelQualityGateInput and ModelQualityGateResult model quality-gate inputs and verdicts with constrained scoring and failure categories.
Orchestrator Intent and Response Models
src/omnibase_core/models/delegation/wire/model_orchestrator_intents.py
Defines discriminated orchestrator intent DTOs (ModelRoutingIntent, ModelInferenceIntent, ModelQualityGateIntent, ModelBaselineIntent), ModelInferenceResponseData, and ModelComplianceLoopResult (includes EnumBudgetAction usage).
Bifrost Delegation Configuration
src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py
Adds shadowing, fallback, routing rule, backend config, circuit-breaker, failover config DTOs, and top-level ModelBifrostDelegationConfig aggregating backends, routing rules, and policy defaults.
Wire Package Integration, Tests, and Validation
src/omnibase_core/models/delegation/wire/__init__.py, tests/unit/models/delegation/wire/*, scripts/validation/validate-single-class-per-file.py
wire/__init__.py centralizes and re-exports delegation wire DTOs and constants. Extensive pytest tests validate enums, DTO construction, defaults, nested configs, constraints, and acceptance-criteria behavior. Validation script updated to exclude four multi-class delegation model files from single-class-per-file checks.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

risk:high

Poem

🐰 Hopping through DTO fields with delight,
Frozen models snug, validators tight,
Budgets and routes, intents take flight,
Tests tumble in, all behaving right,
A rabbit cheers at the schema sight!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.12% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main change: graduating delegation wire DTOs from omnibase_compat to omnibase_core, which aligns with the file additions and the PR objectives.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-12126-graduate-delegation-models

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 16

🧹 Nitpick comments (1)
src/omnibase_core/models/delegation/wire/model_routing_config.py (1)

49-52: ⚡ Quick win

Clarify eval_model field requirement.

The description states "tier name required" but the field is typed as optional (str | None). Either the field should be required when eval_before_accept=True (which would need a model validator), or the description should clarify that it's only required when evaluation is enabled.

📝 Suggested description clarification
     eval_model: str | None = Field(
         default=None,
-        description="Model to use for eval scoring (tier name required).",
+        description="Model to use for eval scoring (required only when eval_before_accept is True).",
     )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/omnibase_core/models/delegation/wire/model_routing_config.py` around
lines 49 - 52, The eval_model Field is typed optional but the description says
"tier name required"; update the model so the requirement is enforced or the
description clarified: either implement a Pydantic validator (e.g., add a
`@root_validator` or `@validator` in the model class that checks eval_before_accept
and raises a ValueError if eval_before_accept is True and eval_model is
None/empty) to make eval_model required when evaluation is enabled, or change
the Field description to explicitly say "Required only when eval_before_accept
is True"; reference the eval_model Field and the eval_before_accept attribute
and ensure the validator produces a clear error message like "eval_model must be
set when eval_before_accept is True."
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py`:
- Around line 52-55: The action field currently typed as str should be
constrained to only the two allowed values; change the annotation on the action
attribute in the model (model_bifrost_delegation_config.py) to use
Literal['escalate_to_next_tier','return_error'] instead of str and add the
corresponding Literal import from typing so Pydantic v2 validates the wire
contract at model parse time; keep the existing Field(...) description and
required flag.
- Line 159: The 'tier' Field currently typed as plain str should be constrained
to allowed values using Literal; update the type annotation for the tier field
in model_bifrost_delegation_config (the tier: Field(...) declaration) to use
Literal['local', 'frontier_api'], and add the necessary import for Literal from
typing so Pydantic v2 will validate and reject any other string values at parse
time while keeping the existing Field(...) metadata.
- Around line 62-65: Replace the loose str type for the on_exhaust Field with a
constrained Literal so Pydantic v2 will validate allowed behaviors at parse
time: import Literal from typing and change the field signature from on_exhaust:
str = Field(...) to something like on_exhaust: Literal['return_error', 'retry',
'abort'] = Field(default='return_error', description=...), updating the allowed
string list to match your actual supported behaviors and adjusting any
tests/docs that rely on the prior unconstrained value.

In `@src/omnibase_core/models/delegation/wire/model_delegation_result.py`:
- Around line 35-43: The numeric metric fields in model_delegation_result.py
currently allow invalid values; update the Pydantic field constraints so
quality_score uses a constrained float in the documented range (e.g., ge=0.0,
le=1.0) and latency_ms, prompt_tokens, completion_tokens, and total_tokens
enforce non-negative values (e.g., ge=0) — modify the Field(...) declarations
for quality_score, latency_ms, prompt_tokens, completion_tokens, and
total_tokens accordingly (or switch to pydantic.confloat/conint with the same
bounds) so incoming wire data is validated against the documented ranges.
- Around line 41-43: Add a Pydantic v2 post-validation check in the model (the
class containing the total_tokens Field) that enforces total_tokens ==
prompt_tokens + completion_tokens; implement it as a
`@model_validator`(mode="after") method (e.g., validate_token_counts) that raises
ValueError (annotated with # error-ok:) when the invariant fails so
cross-process payloads cannot be contradictory, referencing the total_tokens,
prompt_tokens and completion_tokens attributes in the check.

In `@src/omnibase_core/models/delegation/wire/model_delegation_wire_envelope.py`:
- Around line 20-21: Replace the loose topic: str annotation with the contract
enum type used for delegation topics (i.e., use the cross-process contract Enum
instead of str). Locate the envelope dataclass/class that currently declares
"topic" alongside "payload: ModelDelegationResult", import the canonical
delegation topic Enum used by the contract boundary, and change the type
annotation from str to that Enum (and update any serializers/deserializers to
accept/emit the enum value if needed).

In `@src/omnibase_core/models/delegation/wire/model_orchestrator_intents.py`:
- Around line 92-94: The token count fields in ModelBaselineIntent and
ModelInferenceResponseData currently allow negative values; update the Field
definitions for prompt_tokens, completion_tokens, and total_tokens in both
classes to enforce non-negative values by adding ge=0 to each Field (e.g.,
change Field(default=0, description=...) to Field(default=0, ge=0,
description=...)) so Pydantic validation prevents negative token counts.
- Line 112: The latency_ms Field on the ModelOrchestrator intent model currently
allows negative values; update the Field definition for latency_ms in
model_orchestrator_intents.py to enforce a non-negative constraint by adding
ge=0 to the Field(...) call (so the Field includes default=0, ge=0,
description=...), ensuring the model validation rejects negative latency values.
- Line 26: Replace the plain str-typed discriminator fields named intent in the
intent models with Literal types: change intent: str =
Field(default="routing_reducer") (and the other intent declarations) to use
typing.Literal with the exact fixed value (e.g., intent:
Literal["routing_reducer"] = "routing_reducer"), and apply the same change for
the other intent models referenced (use Literal["llm_inference"],
Literal["quality_gate"], Literal["baseline_comparison"]) so Pydantic treats them
as constrained discriminators; ensure you import Literal from typing at the top
of the module if not already present and leave the default value equal to the
literal string.

In `@src/omnibase_core/models/delegation/wire/model_quality_gate.py`:
- Around line 41-44: min_response_length currently allows negative values;
update the Pydantic Field declaration for min_response_length to include a
non-negative constraint (e.g., ge=0 or ge=1 as appropriate) so negative integers
are rejected; locate the min_response_length Field in the model (the
min_response_length attribute in the quality gate model in
model_quality_gate.py) and add the ge parameter to the Field call (e.g.,
Field(default=60, ge=0, description=...)) to enforce the constraint.
- Line 88: The Field for quality_score currently only documents "Quality score
from 0.0 to 1.0" but lacks schema-level validation; update the quality_score
Field declaration (the quality_score attribute in this model) to include ge=0.0
and le=1.0 so Pydantic enforces the valid range (e.g., Field(...,
description="...", ge=0.0, le=1.0)).

In `@src/omnibase_core/models/delegation/wire/model_routing_config.py`:
- Around line 58-61: max_retries currently allows negative values; update the
Field definition for max_retries in model_routing_config.py to enforce a
non-negative constraint by adding ge=0 (e.g., max_retries: int =
Field(default=0, ge=0, description="Max retry attempts within this tier before
escalating.")); this ensures Pydantic validation fails on negative integers
(alternatively, use typing.conint(ge=0) if you prefer a type-level constraint).
- Around line 29-32: fast_path_threshold_tokens may be set to negative values;
constrain it to non-negative by adding a validation constraint to the Field.
Update the Field for fast_path_threshold_tokens in model_routing_config.py to
include a non-negative constraint (e.g., add ge=0 to Field(...) so the
declaration remains fast_path_threshold_tokens: int | None = Field(default=None,
ge=0, description="...")), or alternatively add a pydantic validator on the
ModelRoutingConfig class that raises if fast_path_threshold_tokens is not None
and < 0; reference the fast_path_threshold_tokens symbol and ModelRoutingConfig
when applying the change.
- Line 24: The max_context_tokens Field in model_routing_config (symbol:
max_context_tokens) lacks a non-negative constraint; update its Field
declaration to enforce a minimum of 1 (e.g., add ge=1 or gt=0) so values cannot
be zero or negative, keeping the description unchanged; make this change on the
Field for max_context_tokens in the model_routing_config definition/class.

In `@src/omnibase_core/models/delegation/wire/model_task_delegated_event.py`:
- Around line 51-62: The DTO currently allows negative values for cost_usd,
cost_savings_usd, and delegation_latency_ms; update their Pydantic Field
declarations in model_task_delegated_event.py to enforce non-negative values by
adding ge=0 (use ge=0.0 for floats and ge=0 for the int) so the Pydantic model
rejects negative inputs at validation time; adjust the Field(...) for cost_usd,
cost_savings_usd, and delegation_latency_ms accordingly and run tests/validators
to ensure the constraints are applied.
- Around line 22-25: Change the topic field from a plain string to an enum-typed
field: define or reuse an Enum (e.g., TaskDelegatedTopic) whose member includes
TASK_DELEGATED_TOPIC_V1, then change the model field signature from topic: str
to topic: TaskDelegatedTopic and keep default=TASK_DELEGATED_TOPIC_V1; import
Enum and the enum type, update Field usage (description stays the same), and if
using pydantic ensure the model config or field serialization handles enum
values (use_enum_values or similar) so wire messages still emit the string
topic.

---

Nitpick comments:
In `@src/omnibase_core/models/delegation/wire/model_routing_config.py`:
- Around line 49-52: The eval_model Field is typed optional but the description
says "tier name required"; update the model so the requirement is enforced or
the description clarified: either implement a Pydantic validator (e.g., add a
`@root_validator` or `@validator` in the model class that checks eval_before_accept
and raises a ValueError if eval_before_accept is True and eval_model is
None/empty) to make eval_model required when evaluation is enabled, or change
the Field description to explicitly say "Required only when eval_before_accept
is True"; reference the eval_model Field and the eval_before_accept attribute
and ensure the validator produces a clear error message like "eval_model must be
set when eval_before_accept is True."
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: de687a4e-fcd6-43f3-a1d4-c85ebaccb275

📥 Commits

Reviewing files that changed from the base of the PR and between 44406b7 and e7b1d5b.

📒 Files selected for processing (14)
  • scripts/validation/validate-single-class-per-file.py
  • src/omnibase_core/enums/enum_budget_action.py
  • src/omnibase_core/models/delegation/wire/__init__.py
  • src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py
  • src/omnibase_core/models/delegation/wire/model_budget.py
  • src/omnibase_core/models/delegation/wire/model_delegation_result.py
  • src/omnibase_core/models/delegation/wire/model_delegation_wire_envelope.py
  • src/omnibase_core/models/delegation/wire/model_delegation_wire_request.py
  • src/omnibase_core/models/delegation/wire/model_orchestrator_intents.py
  • src/omnibase_core/models/delegation/wire/model_quality_gate.py
  • src/omnibase_core/models/delegation/wire/model_routing_config.py
  • src/omnibase_core/models/delegation/wire/model_task_delegated_event.py
  • tests/unit/models/delegation/wire/__init__.py
  • tests/unit/models/delegation/wire/test_delegation_wire_models.py

Comment thread src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py Outdated
Comment thread src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py Outdated
Comment thread src/omnibase_core/models/delegation/wire/model_bifrost_delegation_config.py Outdated
Comment thread src/omnibase_core/models/delegation/wire/model_delegation_result.py Outdated
Comment thread src/omnibase_core/models/delegation/wire/model_delegation_result.py
Comment thread src/omnibase_core/models/delegation/wire/model_routing_config.py Outdated
Comment thread src/omnibase_core/models/delegation/wire/model_routing_config.py
Comment thread src/omnibase_core/models/delegation/wire/model_routing_config.py
Comment thread src/omnibase_core/models/delegation/wire/model_task_delegated_event.py Outdated
@jonahgabriel
jonahgabriel added this pull request to the merge queue May 26, 2026
Merged via the queue into dev with commit 5075849 May 26, 2026
43 of 50 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-12126-graduate-delegation-models branch May 26, 2026 23:59
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.

1 participant