omnibase_infra 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Architecture Validator Node - Declarative COMPUTE_GENERIC node for architecture validation.
|
|
4
|
+
|
|
5
|
+
This COMPUTE_GENERIC node follows the ONEX declarative pattern:
|
|
6
|
+
- DECLARATIVE node driven by contract.yaml
|
|
7
|
+
- Zero custom routing logic - all behavior from validation_rules
|
|
8
|
+
- Lightweight shell that delegates to validator implementations
|
|
9
|
+
- Pattern: "Contract-driven, validators wired externally"
|
|
10
|
+
|
|
11
|
+
Extends NodeCompute from omnibase_core for pure computation.
|
|
12
|
+
All validation rules are 100% driven by contract.yaml, not Python code.
|
|
13
|
+
|
|
14
|
+
Validation Rules:
|
|
15
|
+
ARCH-001: No Direct Handler Dispatch
|
|
16
|
+
Handlers MUST NOT be invoked directly bypassing the RuntimeHost.
|
|
17
|
+
All event routing MUST go through the MessageDispatchEngine.
|
|
18
|
+
|
|
19
|
+
ARCH-002: No Handler Publishing Events
|
|
20
|
+
Handlers MUST NOT have direct event bus access. Only orchestrators
|
|
21
|
+
may publish events. Handlers return events; orchestrators publish.
|
|
22
|
+
|
|
23
|
+
ARCH-003: No Workflow FSM in Orchestrators
|
|
24
|
+
Orchestrators MUST NOT duplicate reducer FSM transitions in workflow
|
|
25
|
+
steps. Reducers own FSM; orchestrators coordinate workflow execution.
|
|
26
|
+
|
|
27
|
+
Design Decisions:
|
|
28
|
+
- 100% Contract-Driven: All validation rules in YAML, not Python
|
|
29
|
+
- Zero Custom Routing: Validators selected based on rule_id
|
|
30
|
+
- Declarative Execution: Rule definitions in validation_rules section
|
|
31
|
+
- Pure Computation: No I/O operations in this node
|
|
32
|
+
|
|
33
|
+
Related Modules:
|
|
34
|
+
- contract.yaml: Validation rule definitions
|
|
35
|
+
- validators/: Rule-specific validator implementations
|
|
36
|
+
- models/: Input/output model definitions
|
|
37
|
+
|
|
38
|
+
Ticket: OMN-1099
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from __future__ import annotations
|
|
42
|
+
|
|
43
|
+
from collections.abc import Callable
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
from typing import TYPE_CHECKING
|
|
46
|
+
|
|
47
|
+
from omnibase_core.nodes.node_compute import NodeCompute
|
|
48
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
49
|
+
from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
|
|
50
|
+
from omnibase_infra.nodes.architecture_validator.models.model_architecture_violation import (
|
|
51
|
+
ModelArchitectureViolation,
|
|
52
|
+
)
|
|
53
|
+
from omnibase_infra.nodes.architecture_validator.models.model_validation_request import (
|
|
54
|
+
ModelArchitectureValidationRequest,
|
|
55
|
+
)
|
|
56
|
+
from omnibase_infra.nodes.architecture_validator.models.model_validation_result import (
|
|
57
|
+
ModelFileValidationResult,
|
|
58
|
+
)
|
|
59
|
+
from omnibase_infra.nodes.architecture_validator.validators import (
|
|
60
|
+
validate_no_direct_dispatch,
|
|
61
|
+
validate_no_handler_publishing,
|
|
62
|
+
validate_no_orchestrator_fsm,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
if TYPE_CHECKING:
|
|
66
|
+
from omnibase_core.models.container.model_onex_container import ModelONEXContainer
|
|
67
|
+
|
|
68
|
+
# Type alias for validator functions
|
|
69
|
+
_ValidatorFunc = Callable[[str], ModelFileValidationResult]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class NodeArchitectureValidator(NodeCompute):
|
|
73
|
+
"""Architecture Validator - COMPUTE_GENERIC node for architecture pattern validation.
|
|
74
|
+
|
|
75
|
+
This node validates ONEX architecture patterns by analyzing Python source
|
|
76
|
+
code and contract files. It detects violations of three core rules:
|
|
77
|
+
- ARCH-001: No direct handler dispatch bypassing runtime
|
|
78
|
+
- ARCH-002: No handler publishing events (only orchestrators may publish)
|
|
79
|
+
- ARCH-003: No workflow FSM in orchestrators duplicating reducer transitions
|
|
80
|
+
|
|
81
|
+
All validation logic, rule definitions, and detection strategies are handled
|
|
82
|
+
by the contract.yaml configuration and pluggable validators.
|
|
83
|
+
|
|
84
|
+
Example YAML Contract:
|
|
85
|
+
```yaml
|
|
86
|
+
validation_rules:
|
|
87
|
+
- rule_id: "ARCH-001"
|
|
88
|
+
name: "No Direct Handler Dispatch"
|
|
89
|
+
severity: "CRITICAL"
|
|
90
|
+
detection_strategy:
|
|
91
|
+
type: "ast_pattern"
|
|
92
|
+
patterns:
|
|
93
|
+
- "direct_handler_call"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Usage:
|
|
97
|
+
```python
|
|
98
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
99
|
+
|
|
100
|
+
# Create and initialize
|
|
101
|
+
container = ModelONEXContainer()
|
|
102
|
+
validator = NodeArchitectureValidator(container)
|
|
103
|
+
|
|
104
|
+
# Validate paths
|
|
105
|
+
request = ModelArchitectureValidationRequest(
|
|
106
|
+
paths=["src/omnibase_infra/"],
|
|
107
|
+
)
|
|
108
|
+
result = await validator.compute(request)
|
|
109
|
+
print(f"Validation passed: {result.valid}")
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Attributes:
|
|
113
|
+
_validators: List of (rule_id, validator_func) tuples for each rule.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
def __init__(self, container: ModelONEXContainer) -> None:
|
|
117
|
+
"""Initialize the architecture validator.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
container: ONEX dependency injection container.
|
|
121
|
+
|
|
122
|
+
Note:
|
|
123
|
+
All three validators are wired at initialization:
|
|
124
|
+
- ARCH-001: validate_no_direct_dispatch
|
|
125
|
+
- ARCH-002: validate_no_handler_publishing
|
|
126
|
+
- ARCH-003: validate_no_orchestrator_fsm
|
|
127
|
+
"""
|
|
128
|
+
super().__init__(container)
|
|
129
|
+
self._validators: list[tuple[str, _ValidatorFunc]] = [
|
|
130
|
+
("ARCH-001", validate_no_direct_dispatch),
|
|
131
|
+
("ARCH-002", validate_no_handler_publishing),
|
|
132
|
+
("ARCH-003", validate_no_orchestrator_fsm),
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
def compute(
|
|
136
|
+
self,
|
|
137
|
+
request: ModelArchitectureValidationRequest,
|
|
138
|
+
) -> ModelFileValidationResult:
|
|
139
|
+
"""Compute architecture validation results.
|
|
140
|
+
|
|
141
|
+
Analyzes the specified paths for architecture violations based on
|
|
142
|
+
the rules defined in contract.yaml. Returns a structured result
|
|
143
|
+
with validation status and any violations found.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
request: Validation request containing paths to analyze,
|
|
147
|
+
optional rule filters, and configuration options.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
ModelArchitectureValidationResult with valid status,
|
|
151
|
+
violations list, files checked count, and rules applied.
|
|
152
|
+
|
|
153
|
+
Raises:
|
|
154
|
+
OnexError: If validation encounters an unrecoverable error.
|
|
155
|
+
|
|
156
|
+
Algorithm:
|
|
157
|
+
1. Collect Python files from paths (files, directories, globs)
|
|
158
|
+
2. Filter validators by requested rule_ids (if specified)
|
|
159
|
+
3. Run each validator on each file
|
|
160
|
+
4. Aggregate violations and track file/rule counts
|
|
161
|
+
5. If fail_fast=True, stop on first violation
|
|
162
|
+
"""
|
|
163
|
+
all_violations: list[ModelArchitectureViolation] = []
|
|
164
|
+
rules_checked: list[str] = []
|
|
165
|
+
|
|
166
|
+
# Collect Python files from paths
|
|
167
|
+
files_to_check = self._collect_files(request.paths)
|
|
168
|
+
|
|
169
|
+
# Count files once, not per validator
|
|
170
|
+
files_checked = len(files_to_check)
|
|
171
|
+
|
|
172
|
+
# Determine which rules to run
|
|
173
|
+
validators_to_run = self._validators
|
|
174
|
+
if request.rule_ids:
|
|
175
|
+
validators_to_run = [
|
|
176
|
+
(rule_id, validator)
|
|
177
|
+
for rule_id, validator in self._validators
|
|
178
|
+
if rule_id in request.rule_ids
|
|
179
|
+
]
|
|
180
|
+
|
|
181
|
+
# Run validators
|
|
182
|
+
for rule_id, validator in validators_to_run:
|
|
183
|
+
rules_checked.append(rule_id)
|
|
184
|
+
|
|
185
|
+
for file_path in files_to_check:
|
|
186
|
+
result = validator(str(file_path))
|
|
187
|
+
all_violations.extend(result.violations)
|
|
188
|
+
|
|
189
|
+
# Fail fast if requested
|
|
190
|
+
if request.fail_fast and all_violations:
|
|
191
|
+
return ModelFileValidationResult(
|
|
192
|
+
valid=False,
|
|
193
|
+
violations=all_violations,
|
|
194
|
+
files_checked=files_checked,
|
|
195
|
+
rules_checked=rules_checked,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
return ModelFileValidationResult(
|
|
199
|
+
valid=len(all_violations) == 0,
|
|
200
|
+
violations=all_violations,
|
|
201
|
+
files_checked=files_checked,
|
|
202
|
+
rules_checked=rules_checked,
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
def _collect_files(self, paths: list[str]) -> list[Path]:
|
|
206
|
+
"""Collect Python files from paths.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
paths: List of file paths, directory paths, or glob patterns.
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
List of Python file paths to validate.
|
|
213
|
+
|
|
214
|
+
Raises:
|
|
215
|
+
ProtocolConfigurationError: If path attempts directory traversal or is absolute outside cwd.
|
|
216
|
+
|
|
217
|
+
Examples:
|
|
218
|
+
- File: "src/module/file.py" -> [Path("src/module/file.py")]
|
|
219
|
+
- Directory: "src/" -> [all .py files recursively]
|
|
220
|
+
- Glob: "src/**/*.py" -> [matched files]
|
|
221
|
+
"""
|
|
222
|
+
files: list[Path] = []
|
|
223
|
+
cwd = Path.cwd().resolve()
|
|
224
|
+
|
|
225
|
+
for path_str in paths:
|
|
226
|
+
# Security: reject path traversal attempts
|
|
227
|
+
if ".." in path_str:
|
|
228
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
229
|
+
transport_type=EnumInfraTransportType.FILESYSTEM,
|
|
230
|
+
operation="collect_files",
|
|
231
|
+
)
|
|
232
|
+
raise ProtocolConfigurationError(
|
|
233
|
+
f"Path traversal not allowed: {path_str}",
|
|
234
|
+
context=context,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
path = Path(path_str)
|
|
238
|
+
|
|
239
|
+
# Security: resolve and verify path is within cwd or is relative
|
|
240
|
+
resolved = path.resolve() if path.exists() else (cwd / path).resolve()
|
|
241
|
+
if path.is_absolute() and not str(resolved).startswith(str(cwd)):
|
|
242
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
243
|
+
transport_type=EnumInfraTransportType.FILESYSTEM,
|
|
244
|
+
operation="collect_files",
|
|
245
|
+
)
|
|
246
|
+
raise ProtocolConfigurationError(
|
|
247
|
+
f"Absolute path outside working directory not allowed: {path_str}",
|
|
248
|
+
context=context,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
if path.is_file() and path.suffix == ".py":
|
|
252
|
+
files.append(path)
|
|
253
|
+
elif path.is_dir():
|
|
254
|
+
files.extend(path.rglob("*.py"))
|
|
255
|
+
elif "*" in path_str:
|
|
256
|
+
# Glob pattern
|
|
257
|
+
files.extend(Path().glob(path_str))
|
|
258
|
+
|
|
259
|
+
return files
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
__all__ = ["NodeArchitectureValidator"]
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""COMPUTE_GENERIC node for validating architecture compliance.
|
|
4
|
+
|
|
5
|
+
This module implements NodeArchitectureValidatorCompute, a pure transformation node
|
|
6
|
+
that validates nodes and handlers against architecture rules. The validator can be
|
|
7
|
+
invoked at startup (pre-runtime), during runtime (via orchestrator), or from CI/CD.
|
|
8
|
+
|
|
9
|
+
Design Pattern:
|
|
10
|
+
NodeArchitectureValidatorCompute follows the COMPUTE_GENERIC node pattern from the
|
|
11
|
+
ONEX 4-node architecture. As a COMPUTE_GENERIC node:
|
|
12
|
+
- Pure transformation: input -> output, no side effects
|
|
13
|
+
- Deterministic: same input always produces same output
|
|
14
|
+
- Stateless validation: rules are injected, not stored
|
|
15
|
+
- Thread-safe: can be invoked concurrently with different requests
|
|
16
|
+
|
|
17
|
+
Thread Safety:
|
|
18
|
+
The validator is thread-safe when used with immutable rules. Each invocation
|
|
19
|
+
of compute() is independent and does not modify shared state.
|
|
20
|
+
|
|
21
|
+
Related:
|
|
22
|
+
- OMN-1138: Architecture Validator for omnibase_infra
|
|
23
|
+
- OMN-1099: Validators implementing ProtocolArchitectureRule
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
>>> from omnibase_core.models.container import ModelONEXContainer
|
|
27
|
+
>>> from omnibase_infra.nodes.architecture_validator import (
|
|
28
|
+
... NodeArchitectureValidatorCompute,
|
|
29
|
+
... ModelArchitectureValidationRequest,
|
|
30
|
+
... )
|
|
31
|
+
>>>
|
|
32
|
+
>>> # Create validator with rules
|
|
33
|
+
>>> container = ModelONEXContainer()
|
|
34
|
+
>>> validator = NodeArchitectureValidatorCompute(
|
|
35
|
+
... container=container,
|
|
36
|
+
... rules=(no_handler_publishing_rule, no_workflow_in_reducer_rule),
|
|
37
|
+
... )
|
|
38
|
+
>>>
|
|
39
|
+
>>> # Validate nodes and handlers
|
|
40
|
+
>>> request = ModelArchitectureValidationRequest(
|
|
41
|
+
... nodes=(my_orchestrator, my_reducer),
|
|
42
|
+
... handlers=(my_handler,),
|
|
43
|
+
... )
|
|
44
|
+
>>> result = validator.compute(request)
|
|
45
|
+
>>> if result.valid:
|
|
46
|
+
... print("All architecture rules passed")
|
|
47
|
+
... else:
|
|
48
|
+
... for v in result.violations:
|
|
49
|
+
... print(f"Violation: {v.format_for_logging()}")
|
|
50
|
+
|
|
51
|
+
.. versionadded:: 0.8.0
|
|
52
|
+
Created as part of OMN-1138 Architecture Validator implementation.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
from __future__ import annotations
|
|
56
|
+
|
|
57
|
+
from typing import TYPE_CHECKING
|
|
58
|
+
|
|
59
|
+
from omnibase_core.nodes import NodeCompute
|
|
60
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
61
|
+
from omnibase_infra.errors import ProtocolConfigurationError
|
|
62
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
63
|
+
ModelInfraErrorContext,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
if TYPE_CHECKING:
|
|
67
|
+
from omnibase_core.models.container.model_onex_container import ModelONEXContainer
|
|
68
|
+
|
|
69
|
+
from omnibase_infra.nodes.architecture_validator.models import (
|
|
70
|
+
ModelArchitectureValidationRequest,
|
|
71
|
+
ModelArchitectureValidationResult,
|
|
72
|
+
ModelArchitectureViolation,
|
|
73
|
+
ModelRuleCheckResult,
|
|
74
|
+
)
|
|
75
|
+
from omnibase_infra.nodes.architecture_validator.protocols import (
|
|
76
|
+
ProtocolArchitectureRule,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# Supported rule IDs from contract_architecture_validator.yaml
|
|
80
|
+
# These are the only rules that this validator node is designed to handle.
|
|
81
|
+
# Any rule not in this set indicates a misconfiguration or version mismatch.
|
|
82
|
+
SUPPORTED_RULE_IDS: frozenset[str] = frozenset(
|
|
83
|
+
{
|
|
84
|
+
"NO_HANDLER_PUBLISHING",
|
|
85
|
+
"PURE_REDUCERS",
|
|
86
|
+
"NO_FSM_IN_ORCHESTRATORS",
|
|
87
|
+
"NO_WORKFLOW_IN_REDUCERS",
|
|
88
|
+
"NO_DIRECT_HANDLER_DISPATCH",
|
|
89
|
+
"NO_LOCAL_ONLY_PATHS",
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
__all__ = ["NodeArchitectureValidatorCompute", "SUPPORTED_RULE_IDS"]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class NodeArchitectureValidatorCompute(
|
|
97
|
+
NodeCompute[ModelArchitectureValidationRequest, ModelArchitectureValidationResult]
|
|
98
|
+
):
|
|
99
|
+
"""COMPUTE_GENERIC node for validating architecture compliance.
|
|
100
|
+
|
|
101
|
+
Validates nodes and handlers against architecture rules. This is a pure
|
|
102
|
+
transformation node: input -> output, no side effects.
|
|
103
|
+
|
|
104
|
+
Can be called:
|
|
105
|
+
- At startup (direct call, pre-runtime validation)
|
|
106
|
+
- During runtime (via orchestrator for dynamic validation)
|
|
107
|
+
- From CI/CD (standalone validation in test/build pipelines)
|
|
108
|
+
|
|
109
|
+
Attributes:
|
|
110
|
+
_rules: Tuple of architecture rules to enforce during validation.
|
|
111
|
+
|
|
112
|
+
Thread Safety:
|
|
113
|
+
This node is thread-safe when:
|
|
114
|
+
- Rules are stateless (recommended)
|
|
115
|
+
- Request objects are not shared across threads
|
|
116
|
+
- Each compute() call operates independently
|
|
117
|
+
|
|
118
|
+
Example:
|
|
119
|
+
>>> # Pre-runtime validation
|
|
120
|
+
>>> validator = NodeArchitectureValidatorCompute(container, rules=rules)
|
|
121
|
+
>>> result = validator.compute(request)
|
|
122
|
+
>>> if not result:
|
|
123
|
+
... from omnibase_infra.enums import EnumInfraTransportType
|
|
124
|
+
... from omnibase_infra.errors import (
|
|
125
|
+
... ModelInfraErrorContext,
|
|
126
|
+
... ProtocolConfigurationError,
|
|
127
|
+
... )
|
|
128
|
+
... context = ModelInfraErrorContext.with_correlation(
|
|
129
|
+
... transport_type=EnumInfraTransportType.RUNTIME,
|
|
130
|
+
... operation="architecture_validation",
|
|
131
|
+
... )
|
|
132
|
+
... raise ProtocolConfigurationError(
|
|
133
|
+
... f"Validation failed: {result.violation_count} violations",
|
|
134
|
+
... context=context,
|
|
135
|
+
... code="ARCHITECTURE_VALIDATION_FAILED",
|
|
136
|
+
... violations=[v.to_structured_dict() for v in result.violations],
|
|
137
|
+
... )
|
|
138
|
+
|
|
139
|
+
>>> # CI/CD pipeline validation
|
|
140
|
+
>>> result = validator.compute(ModelArchitectureValidationRequest(
|
|
141
|
+
... nodes=discovered_nodes,
|
|
142
|
+
... handlers=discovered_handlers,
|
|
143
|
+
... fail_fast=True, # Stop on first violation for fast feedback
|
|
144
|
+
... ))
|
|
145
|
+
|
|
146
|
+
.. versionadded:: 0.8.0
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
def __init__(
|
|
150
|
+
self,
|
|
151
|
+
container: ModelONEXContainer,
|
|
152
|
+
rules: tuple[ProtocolArchitectureRule, ...] = (),
|
|
153
|
+
) -> None:
|
|
154
|
+
"""Initialize validator with container and rules.
|
|
155
|
+
|
|
156
|
+
Args:
|
|
157
|
+
container: ONEX dependency injection container for node infrastructure.
|
|
158
|
+
rules: Architecture rules to enforce. These should implement
|
|
159
|
+
ProtocolArchitectureRule. Rules from OMN-1099 validators can be
|
|
160
|
+
passed directly.
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
>>> from omnibase_core.models.container import ModelONEXContainer
|
|
164
|
+
>>> from my_rules import NoHandlerPublishingRule, NoWorkflowInReducerRule
|
|
165
|
+
>>>
|
|
166
|
+
>>> container = ModelONEXContainer()
|
|
167
|
+
>>> validator = NodeArchitectureValidatorCompute(
|
|
168
|
+
... container=container,
|
|
169
|
+
... rules=(NoHandlerPublishingRule(), NoWorkflowInReducerRule()),
|
|
170
|
+
... )
|
|
171
|
+
|
|
172
|
+
.. versionadded:: 0.8.0
|
|
173
|
+
"""
|
|
174
|
+
super().__init__(container)
|
|
175
|
+
self._validate_rules_against_contract(rules)
|
|
176
|
+
self._rules = rules
|
|
177
|
+
|
|
178
|
+
def _validate_rules_against_contract(
|
|
179
|
+
self,
|
|
180
|
+
rules: tuple[ProtocolArchitectureRule, ...],
|
|
181
|
+
) -> None:
|
|
182
|
+
"""Validate that all provided rules are in the contract's supported_rules.
|
|
183
|
+
|
|
184
|
+
This validation ensures that only rules defined in the contract's
|
|
185
|
+
supported_rules list can be used with this validator. Using unsupported
|
|
186
|
+
rules would indicate a misconfiguration or version mismatch between
|
|
187
|
+
the validator and the rules being passed.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
rules: Tuple of architecture rules to validate against the contract.
|
|
191
|
+
|
|
192
|
+
Raises:
|
|
193
|
+
ProtocolConfigurationError: If any rule has a rule_id not in
|
|
194
|
+
SUPPORTED_RULE_IDS. The error message includes the unsupported
|
|
195
|
+
rule_id and the list of supported rules for debugging.
|
|
196
|
+
Includes ModelInfraErrorContext with RUNTIME transport type.
|
|
197
|
+
|
|
198
|
+
Example:
|
|
199
|
+
>>> # This is called automatically in __init__
|
|
200
|
+
>>> validator._validate_rules_against_contract((
|
|
201
|
+
... NoHandlerPublishingRule(), # Valid: in supported_rules
|
|
202
|
+
... PureReducersRule(), # Valid: in supported_rules
|
|
203
|
+
... ))
|
|
204
|
+
>>> # No error raised
|
|
205
|
+
|
|
206
|
+
>>> # Invalid rule raises ProtocolConfigurationError
|
|
207
|
+
>>> validator._validate_rules_against_contract((
|
|
208
|
+
... UnknownRule(), # rule_id="UNKNOWN_RULE"
|
|
209
|
+
... ))
|
|
210
|
+
ProtocolConfigurationError: Rule 'UNKNOWN_RULE' is not in contract...
|
|
211
|
+
|
|
212
|
+
.. versionadded:: 0.8.0
|
|
213
|
+
"""
|
|
214
|
+
for rule in rules:
|
|
215
|
+
if rule.rule_id not in SUPPORTED_RULE_IDS:
|
|
216
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
217
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
218
|
+
operation="validate_rules_against_contract",
|
|
219
|
+
)
|
|
220
|
+
raise ProtocolConfigurationError(
|
|
221
|
+
f"Rule '{rule.rule_id}' is not in contract supported_rules. "
|
|
222
|
+
f"Supported rules: {sorted(SUPPORTED_RULE_IDS)}",
|
|
223
|
+
context=context,
|
|
224
|
+
rule_id=rule.rule_id,
|
|
225
|
+
supported_rules=sorted(SUPPORTED_RULE_IDS),
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
def compute(
|
|
229
|
+
self,
|
|
230
|
+
request: ModelArchitectureValidationRequest,
|
|
231
|
+
) -> ModelArchitectureValidationResult:
|
|
232
|
+
"""Validate architecture compliance.
|
|
233
|
+
|
|
234
|
+
Applies all registered rules to the nodes and handlers in the request.
|
|
235
|
+
Returns a result containing any violations found and summary statistics.
|
|
236
|
+
|
|
237
|
+
This is a pure transformation with no side effects:
|
|
238
|
+
- Same input always produces same output
|
|
239
|
+
- Does not modify request, rules, or external state
|
|
240
|
+
- Safe to call concurrently from multiple threads
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
request: Validation request containing:
|
|
244
|
+
- nodes: Nodes to validate
|
|
245
|
+
- handlers: Handlers to validate
|
|
246
|
+
- rule_ids: Optional filter for specific rules
|
|
247
|
+
- fail_fast: Whether to stop on first violation
|
|
248
|
+
- correlation_id: For distributed tracing
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
ModelArchitectureValidationResult with:
|
|
252
|
+
- violations: All violations found (empty if validation passed)
|
|
253
|
+
- rules_checked: IDs of rules that were evaluated
|
|
254
|
+
- nodes_checked: Count of nodes validated
|
|
255
|
+
- handlers_checked: Count of handlers validated
|
|
256
|
+
- correlation_id: Propagated from request
|
|
257
|
+
|
|
258
|
+
Example:
|
|
259
|
+
>>> # Check all rules
|
|
260
|
+
>>> result = validator.compute(ModelArchitectureValidationRequest(
|
|
261
|
+
... nodes=all_nodes,
|
|
262
|
+
... handlers=all_handlers,
|
|
263
|
+
... ))
|
|
264
|
+
>>> print(f"Checked {result.nodes_checked} nodes, {result.handlers_checked} handlers")
|
|
265
|
+
>>> print(f"Found {result.violation_count} violations")
|
|
266
|
+
|
|
267
|
+
>>> # Check specific rules only
|
|
268
|
+
>>> result = validator.compute(ModelArchitectureValidationRequest(
|
|
269
|
+
... nodes=all_nodes,
|
|
270
|
+
... rule_ids=("NO_HANDLER_PUBLISHING", "PURE_REDUCERS"),
|
|
271
|
+
... fail_fast=True,
|
|
272
|
+
... ))
|
|
273
|
+
|
|
274
|
+
.. versionadded:: 0.8.0
|
|
275
|
+
"""
|
|
276
|
+
violations: list[ModelArchitectureViolation] = []
|
|
277
|
+
rules_to_check = self._get_rules_to_check(request.rule_ids)
|
|
278
|
+
|
|
279
|
+
# Validate nodes
|
|
280
|
+
for node in request.nodes:
|
|
281
|
+
for rule in rules_to_check:
|
|
282
|
+
result = rule.check(node)
|
|
283
|
+
if not result.passed:
|
|
284
|
+
violation = self._create_violation(rule, node, result)
|
|
285
|
+
violations.append(violation)
|
|
286
|
+
if request.fail_fast:
|
|
287
|
+
return self._build_result(violations, rules_to_check, request)
|
|
288
|
+
|
|
289
|
+
# Validate handlers
|
|
290
|
+
for handler in request.handlers:
|
|
291
|
+
for rule in rules_to_check:
|
|
292
|
+
result = rule.check(handler)
|
|
293
|
+
if not result.passed:
|
|
294
|
+
violation = self._create_violation(rule, handler, result)
|
|
295
|
+
violations.append(violation)
|
|
296
|
+
if request.fail_fast:
|
|
297
|
+
return self._build_result(violations, rules_to_check, request)
|
|
298
|
+
|
|
299
|
+
return self._build_result(violations, rules_to_check, request)
|
|
300
|
+
|
|
301
|
+
def _get_rules_to_check(
|
|
302
|
+
self,
|
|
303
|
+
rule_ids: tuple[str, ...] | None,
|
|
304
|
+
) -> tuple[ProtocolArchitectureRule, ...]:
|
|
305
|
+
"""Get rules to check based on request filter.
|
|
306
|
+
|
|
307
|
+
Args:
|
|
308
|
+
rule_ids: Optional tuple of rule IDs to filter by.
|
|
309
|
+
If None, all registered rules are returned.
|
|
310
|
+
|
|
311
|
+
Returns:
|
|
312
|
+
Tuple of rules to check. If rule_ids is provided, only
|
|
313
|
+
rules with matching IDs are included.
|
|
314
|
+
|
|
315
|
+
Example:
|
|
316
|
+
>>> # No filter - returns all rules
|
|
317
|
+
>>> rules = validator._get_rules_to_check(None)
|
|
318
|
+
>>> len(rules) == len(validator._rules)
|
|
319
|
+
True
|
|
320
|
+
|
|
321
|
+
>>> # Filter by IDs
|
|
322
|
+
>>> rules = validator._get_rules_to_check(("RULE_A", "RULE_B"))
|
|
323
|
+
>>> all(r.rule_id in ("RULE_A", "RULE_B") for r in rules)
|
|
324
|
+
True
|
|
325
|
+
"""
|
|
326
|
+
if rule_ids is None:
|
|
327
|
+
return self._rules
|
|
328
|
+
return tuple(r for r in self._rules if r.rule_id in rule_ids)
|
|
329
|
+
|
|
330
|
+
def _create_violation(
|
|
331
|
+
self,
|
|
332
|
+
rule: ProtocolArchitectureRule,
|
|
333
|
+
target: object,
|
|
334
|
+
result: ModelRuleCheckResult,
|
|
335
|
+
) -> ModelArchitectureViolation:
|
|
336
|
+
"""Create violation from rule check result.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
rule: The rule that was violated.
|
|
340
|
+
target: The node or handler that violated the rule.
|
|
341
|
+
result: The check result with violation details.
|
|
342
|
+
|
|
343
|
+
Returns:
|
|
344
|
+
ModelArchitectureViolation with full context for debugging
|
|
345
|
+
and remediation.
|
|
346
|
+
|
|
347
|
+
Note:
|
|
348
|
+
Uses getattr for target_name to handle both class types
|
|
349
|
+
(with __name__) and instances (fallback to str()).
|
|
350
|
+
"""
|
|
351
|
+
return ModelArchitectureViolation(
|
|
352
|
+
rule_id=rule.rule_id,
|
|
353
|
+
rule_name=rule.name,
|
|
354
|
+
severity=rule.severity,
|
|
355
|
+
target_type=type(target).__name__,
|
|
356
|
+
target_name=getattr(target, "__name__", str(target)),
|
|
357
|
+
message=result.message or rule.description,
|
|
358
|
+
details=result.details,
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
def _build_result(
|
|
362
|
+
self,
|
|
363
|
+
violations: list[ModelArchitectureViolation],
|
|
364
|
+
rules_checked: tuple[ProtocolArchitectureRule, ...],
|
|
365
|
+
request: ModelArchitectureValidationRequest,
|
|
366
|
+
) -> ModelArchitectureValidationResult:
|
|
367
|
+
"""Build final validation result.
|
|
368
|
+
|
|
369
|
+
Args:
|
|
370
|
+
violations: All violations found during validation.
|
|
371
|
+
rules_checked: Rules that were evaluated.
|
|
372
|
+
request: Original validation request (for counts and correlation_id).
|
|
373
|
+
|
|
374
|
+
Returns:
|
|
375
|
+
ModelArchitectureValidationResult with complete validation summary.
|
|
376
|
+
"""
|
|
377
|
+
return ModelArchitectureValidationResult(
|
|
378
|
+
violations=tuple(violations),
|
|
379
|
+
rules_checked=tuple(r.rule_id for r in rules_checked),
|
|
380
|
+
nodes_checked=len(request.nodes),
|
|
381
|
+
handlers_checked=len(request.handlers),
|
|
382
|
+
correlation_id=request.correlation_id,
|
|
383
|
+
)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocols for architecture validator node."""
|
|
4
|
+
|
|
5
|
+
from omnibase_infra.nodes.architecture_validator.protocols.protocol_architecture_rule import (
|
|
6
|
+
ProtocolArchitectureRule,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
__all__ = ["ProtocolArchitectureRule"]
|