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,287 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Validation outcome model for representing validation results.
|
|
4
|
+
|
|
5
|
+
This model replaces the tuple pattern `tuple[bool, str | None]` that was used
|
|
6
|
+
for validation result returns. By using a single model type, we eliminate
|
|
7
|
+
the tuple+union pattern while providing richer validation context.
|
|
8
|
+
|
|
9
|
+
Note:
|
|
10
|
+
The ``error_message`` field uses an empty string sentinel value instead
|
|
11
|
+
of None to eliminate the ``str | None`` union. Use the ``has_error``
|
|
12
|
+
property to check if an error message exists before accessing it.
|
|
13
|
+
|
|
14
|
+
.. versionadded:: 0.6.0
|
|
15
|
+
Created as part of Union Reduction Phase 2 (OMN-1002).
|
|
16
|
+
|
|
17
|
+
.. versionchanged:: 0.6.1
|
|
18
|
+
Changed ``error_message`` from ``str | None`` to ``str`` with empty string
|
|
19
|
+
sentinel for complete union reduction (OMN-1002).
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from uuid import uuid4
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
27
|
+
|
|
28
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
29
|
+
from omnibase_infra.errors.error_infra import ProtocolConfigurationError
|
|
30
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
31
|
+
ModelInfraErrorContext,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ModelValidationOutcome(BaseModel):
|
|
36
|
+
"""Outcome of a validation operation.
|
|
37
|
+
|
|
38
|
+
This model normalizes validation results into a consistent structure,
|
|
39
|
+
replacing the `tuple[bool, str | None]` pattern with a more expressive
|
|
40
|
+
model that can carry additional context.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
is_valid: Whether the validation passed.
|
|
44
|
+
error_message: Error message if validation failed, empty string if passed.
|
|
45
|
+
Use the ``has_error`` property to check if an error message exists.
|
|
46
|
+
|
|
47
|
+
Example:
|
|
48
|
+
>>> # Successful validation
|
|
49
|
+
>>> outcome = ModelValidationOutcome.success()
|
|
50
|
+
>>> outcome.is_valid
|
|
51
|
+
True
|
|
52
|
+
>>> outcome.has_error
|
|
53
|
+
False
|
|
54
|
+
>>> outcome.error_message
|
|
55
|
+
''
|
|
56
|
+
|
|
57
|
+
>>> # Failed validation
|
|
58
|
+
>>> outcome = ModelValidationOutcome.failure("Invalid category")
|
|
59
|
+
>>> outcome.is_valid
|
|
60
|
+
False
|
|
61
|
+
>>> outcome.has_error
|
|
62
|
+
True
|
|
63
|
+
>>> outcome.error_message
|
|
64
|
+
'Invalid category'
|
|
65
|
+
|
|
66
|
+
.. versionadded:: 0.6.0
|
|
67
|
+
.. versionchanged:: 0.6.1
|
|
68
|
+
Changed ``error_message`` from ``str | None`` to ``str`` with empty string
|
|
69
|
+
sentinel value. Added ``has_error`` property.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
model_config = ConfigDict(
|
|
73
|
+
frozen=True,
|
|
74
|
+
extra="forbid",
|
|
75
|
+
strict=True,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
is_valid: bool = Field(
|
|
79
|
+
description="Whether the validation passed.",
|
|
80
|
+
)
|
|
81
|
+
error_message: str = Field(
|
|
82
|
+
default="",
|
|
83
|
+
description="Error message if validation failed, empty string if passed. "
|
|
84
|
+
"Use has_error property to check if an error exists.",
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def has_error(self) -> bool:
|
|
89
|
+
"""Check if an error message exists.
|
|
90
|
+
|
|
91
|
+
This property should be used to check for an error before accessing
|
|
92
|
+
``error_message`` to ensure meaningful results.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
True if error_message is non-empty, False otherwise.
|
|
96
|
+
|
|
97
|
+
Example:
|
|
98
|
+
>>> ModelValidationOutcome.success().has_error
|
|
99
|
+
False
|
|
100
|
+
>>> ModelValidationOutcome.failure("Error").has_error
|
|
101
|
+
True
|
|
102
|
+
|
|
103
|
+
.. versionadded:: 0.6.1
|
|
104
|
+
Added as part of union reduction (OMN-1002) to complement
|
|
105
|
+
the ``error_message`` field's change from ``str | None`` to ``str``.
|
|
106
|
+
"""
|
|
107
|
+
return bool(self.error_message)
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def success(cls) -> ModelValidationOutcome:
|
|
111
|
+
"""Create a successful validation outcome.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
ModelValidationOutcome with is_valid=True and empty error message.
|
|
115
|
+
|
|
116
|
+
Example:
|
|
117
|
+
>>> outcome = ModelValidationOutcome.success()
|
|
118
|
+
>>> outcome.is_valid
|
|
119
|
+
True
|
|
120
|
+
>>> outcome.has_error
|
|
121
|
+
False
|
|
122
|
+
|
|
123
|
+
.. versionadded:: 0.6.0
|
|
124
|
+
.. versionchanged:: 0.6.1
|
|
125
|
+
Returns empty string instead of None for error_message.
|
|
126
|
+
"""
|
|
127
|
+
return cls(is_valid=True, error_message="")
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def failure(cls, error_message: str) -> ModelValidationOutcome:
|
|
131
|
+
"""Create a failed validation outcome.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
error_message: Description of why validation failed. Must be non-empty.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
ModelValidationOutcome with is_valid=False and the error message.
|
|
138
|
+
|
|
139
|
+
Raises:
|
|
140
|
+
ProtocolConfigurationError: If error_message is empty.
|
|
141
|
+
|
|
142
|
+
Example:
|
|
143
|
+
>>> outcome = ModelValidationOutcome.failure("Missing required field")
|
|
144
|
+
>>> outcome.is_valid
|
|
145
|
+
False
|
|
146
|
+
>>> outcome.has_error
|
|
147
|
+
True
|
|
148
|
+
>>> outcome.error_message
|
|
149
|
+
'Missing required field'
|
|
150
|
+
|
|
151
|
+
.. versionadded:: 0.6.0
|
|
152
|
+
.. versionchanged:: 0.6.1
|
|
153
|
+
Added validation that error_message must be non-empty.
|
|
154
|
+
"""
|
|
155
|
+
if not error_message:
|
|
156
|
+
context = ModelInfraErrorContext(
|
|
157
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
158
|
+
operation="failure",
|
|
159
|
+
correlation_id=uuid4(),
|
|
160
|
+
)
|
|
161
|
+
raise ProtocolConfigurationError(
|
|
162
|
+
"error_message must be non-empty for failure outcomes", context=context
|
|
163
|
+
)
|
|
164
|
+
return cls(is_valid=False, error_message=error_message)
|
|
165
|
+
|
|
166
|
+
@classmethod
|
|
167
|
+
def from_legacy_result(
|
|
168
|
+
cls, result: tuple[bool, str | None]
|
|
169
|
+
) -> ModelValidationOutcome:
|
|
170
|
+
"""Create from legacy tuple-based validation result.
|
|
171
|
+
|
|
172
|
+
This factory method handles the conversion from the old tuple pattern
|
|
173
|
+
to the new model structure. None values in the error_message are
|
|
174
|
+
converted to empty strings.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
result: Legacy validation result as (is_valid, error_message).
|
|
178
|
+
None error_message values are converted to empty strings.
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
ModelValidationOutcome with equivalent values.
|
|
182
|
+
|
|
183
|
+
Example:
|
|
184
|
+
>>> ModelValidationOutcome.from_legacy_result((True, None)).is_valid
|
|
185
|
+
True
|
|
186
|
+
>>> ModelValidationOutcome.from_legacy_result((True, None)).has_error
|
|
187
|
+
False
|
|
188
|
+
>>> ModelValidationOutcome.from_legacy_result(
|
|
189
|
+
... (False, "Error")
|
|
190
|
+
... ).error_message
|
|
191
|
+
'Error'
|
|
192
|
+
|
|
193
|
+
.. versionadded:: 0.6.0
|
|
194
|
+
.. versionchanged:: 0.6.1
|
|
195
|
+
Converts None error_message to empty string.
|
|
196
|
+
"""
|
|
197
|
+
is_valid, error_message = result
|
|
198
|
+
return cls(is_valid=is_valid, error_message=error_message or "")
|
|
199
|
+
|
|
200
|
+
def to_legacy_result(self) -> tuple[bool, str | None]:
|
|
201
|
+
"""Convert back to legacy tuple format.
|
|
202
|
+
|
|
203
|
+
This method enables gradual migration by allowing conversion back
|
|
204
|
+
to the original format where needed. Empty string error_message is
|
|
205
|
+
converted back to None.
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Tuple of (is_valid, error_message). Empty string is converted to None.
|
|
209
|
+
|
|
210
|
+
Example:
|
|
211
|
+
>>> ModelValidationOutcome.success().to_legacy_result()
|
|
212
|
+
(True, None)
|
|
213
|
+
>>> ModelValidationOutcome.failure("Error").to_legacy_result()
|
|
214
|
+
(False, 'Error')
|
|
215
|
+
|
|
216
|
+
.. versionadded:: 0.6.0
|
|
217
|
+
.. versionchanged:: 0.6.1
|
|
218
|
+
Converts empty string error_message to None for backwards compatibility.
|
|
219
|
+
"""
|
|
220
|
+
return (self.is_valid, self.error_message or None)
|
|
221
|
+
|
|
222
|
+
def __bool__(self) -> bool:
|
|
223
|
+
"""Allow using outcome in boolean context.
|
|
224
|
+
|
|
225
|
+
Warning:
|
|
226
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
227
|
+
return ``True`` only when ``is_valid`` is True. This differs from typical
|
|
228
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
229
|
+
any valid model instance.
|
|
230
|
+
|
|
231
|
+
This design enables idiomatic conditional checks for validation results::
|
|
232
|
+
|
|
233
|
+
if outcome:
|
|
234
|
+
# Validation passed - proceed
|
|
235
|
+
continue_processing()
|
|
236
|
+
else:
|
|
237
|
+
# Validation failed - handle error
|
|
238
|
+
print(outcome.error_message)
|
|
239
|
+
|
|
240
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
241
|
+
|
|
242
|
+
# Check for validation success (uses __bool__)
|
|
243
|
+
if outcome:
|
|
244
|
+
...
|
|
245
|
+
|
|
246
|
+
# Check model is valid (always True for constructed instance)
|
|
247
|
+
if outcome is not None:
|
|
248
|
+
...
|
|
249
|
+
|
|
250
|
+
# Explicit validation check (preferred for clarity)
|
|
251
|
+
if outcome.is_valid:
|
|
252
|
+
...
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
True if validation passed, False otherwise.
|
|
256
|
+
|
|
257
|
+
Example:
|
|
258
|
+
>>> if ModelValidationOutcome.success():
|
|
259
|
+
... print("Valid!")
|
|
260
|
+
Valid!
|
|
261
|
+
|
|
262
|
+
.. versionadded:: 0.6.0
|
|
263
|
+
"""
|
|
264
|
+
return self.is_valid
|
|
265
|
+
|
|
266
|
+
def raise_if_invalid(self, exception_type: type[Exception] = ValueError) -> None:
|
|
267
|
+
"""Raise an exception if validation failed.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
exception_type: Type of exception to raise. Defaults to ValueError.
|
|
271
|
+
|
|
272
|
+
Raises:
|
|
273
|
+
exception_type: If validation failed, with error_message as the message.
|
|
274
|
+
|
|
275
|
+
Example:
|
|
276
|
+
>>> outcome = ModelValidationOutcome.failure("Bad value")
|
|
277
|
+
>>> outcome.raise_if_invalid() # doctest: +IGNORE_EXCEPTION_DETAIL
|
|
278
|
+
Traceback (most recent call last):
|
|
279
|
+
...
|
|
280
|
+
ValueError: Bad value
|
|
281
|
+
|
|
282
|
+
.. versionadded:: 0.6.0
|
|
283
|
+
"""
|
|
284
|
+
if not self.is_valid:
|
|
285
|
+
# Use the error_message directly; has_error will be True for
|
|
286
|
+
# properly constructed failure outcomes
|
|
287
|
+
raise exception_type(self.error_message)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ONEX Infrastructure Nodes Module.
|
|
4
|
+
|
|
5
|
+
This module provides node implementations for the ONEX 4-node architecture:
|
|
6
|
+
- EFFECT_GENERIC: External I/O operations (Kafka, Consul, Vault, PostgreSQL adapters)
|
|
7
|
+
- COMPUTE_GENERIC: Pure data transformations (compute plugins)
|
|
8
|
+
- REDUCER_GENERIC: State aggregation from multiple sources
|
|
9
|
+
- ORCHESTRATOR_GENERIC: Workflow coordination across nodes
|
|
10
|
+
|
|
11
|
+
Available Submodules:
|
|
12
|
+
- effects: Effect nodes for external I/O operations
|
|
13
|
+
- reducers: Reducer nodes for state aggregation
|
|
14
|
+
- node_registration_reducer: Declarative FSM-driven registration reducer
|
|
15
|
+
- node_registration_orchestrator: Registration workflow orchestrator
|
|
16
|
+
|
|
17
|
+
Available Classes:
|
|
18
|
+
- NodeRegistrationReducer: Declarative FSM-driven reducer (ONEX pattern)
|
|
19
|
+
- RegistrationReducer: Pure function reducer implementation
|
|
20
|
+
- NodeRegistryEffect: Effect node for dual-backend registration execution
|
|
21
|
+
- NodeRegistrationOrchestrator: Workflow orchestrator for registration
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from omnibase_infra.nodes.effects import (
|
|
25
|
+
ModelBackendResult,
|
|
26
|
+
ModelRegistryRequest,
|
|
27
|
+
ModelRegistryResponse,
|
|
28
|
+
NodeRegistryEffect,
|
|
29
|
+
)
|
|
30
|
+
from omnibase_infra.nodes.node_registration_orchestrator import (
|
|
31
|
+
NodeRegistrationOrchestrator,
|
|
32
|
+
)
|
|
33
|
+
from omnibase_infra.nodes.node_registration_reducer import (
|
|
34
|
+
NodeRegistrationReducer,
|
|
35
|
+
RegistryInfraNodeRegistrationReducer,
|
|
36
|
+
)
|
|
37
|
+
from omnibase_infra.nodes.reducers import RegistrationReducer
|
|
38
|
+
|
|
39
|
+
__all__: list[str] = [
|
|
40
|
+
"ModelBackendResult",
|
|
41
|
+
"ModelRegistryRequest",
|
|
42
|
+
"ModelRegistryResponse",
|
|
43
|
+
"NodeRegistrationOrchestrator",
|
|
44
|
+
"NodeRegistrationReducer",
|
|
45
|
+
"NodeRegistryEffect",
|
|
46
|
+
"RegistrationReducer",
|
|
47
|
+
"RegistryInfraNodeRegistrationReducer",
|
|
48
|
+
]
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Architecture Validator Node Package.
|
|
4
|
+
|
|
5
|
+
This package provides architecture validation COMPUTE_GENERIC nodes for validating
|
|
6
|
+
ONEX architecture patterns and compliance rules.
|
|
7
|
+
|
|
8
|
+
Available Validators:
|
|
9
|
+
NodeArchitectureValidator (OMN-1099):
|
|
10
|
+
Validates three core architecture rules:
|
|
11
|
+
- ARCH-001: No Direct Handler Dispatch
|
|
12
|
+
- ARCH-002: No Handler Publishing Events
|
|
13
|
+
- ARCH-003: No Workflow FSM in Orchestrators
|
|
14
|
+
|
|
15
|
+
NodeArchitectureValidatorCompute (OMN-1138):
|
|
16
|
+
Generic architecture validator supporting pluggable rules via
|
|
17
|
+
ProtocolArchitectureRule implementations.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
>>> from omnibase_core.models.container import ModelONEXContainer
|
|
21
|
+
>>> from omnibase_infra.nodes.architecture_validator import (
|
|
22
|
+
... NodeArchitectureValidatorCompute,
|
|
23
|
+
... ModelArchitectureValidationRequest,
|
|
24
|
+
... )
|
|
25
|
+
>>>
|
|
26
|
+
>>> # Create validator with rules
|
|
27
|
+
>>> container = ModelONEXContainer()
|
|
28
|
+
>>> validator = NodeArchitectureValidatorCompute(container, rules=my_rules)
|
|
29
|
+
>>>
|
|
30
|
+
>>> # Validate architecture
|
|
31
|
+
>>> result = validator.compute(ModelArchitectureValidationRequest(
|
|
32
|
+
... nodes=my_nodes,
|
|
33
|
+
... handlers=my_handlers,
|
|
34
|
+
... ))
|
|
35
|
+
>>> if result.valid:
|
|
36
|
+
... print("Validation passed")
|
|
37
|
+
|
|
38
|
+
.. versionadded:: 0.8.0
|
|
39
|
+
Added NodeArchitectureValidatorCompute as part of OMN-1138.
|
|
40
|
+
Added NodeArchitectureValidator as part of OMN-1099.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
# Canonical severity enum
|
|
44
|
+
from omnibase_infra.enums import EnumValidationSeverity
|
|
45
|
+
|
|
46
|
+
# Models
|
|
47
|
+
from omnibase_infra.nodes.architecture_validator.models import (
|
|
48
|
+
ModelArchitectureValidationRequest,
|
|
49
|
+
ModelArchitectureValidationResult,
|
|
50
|
+
ModelArchitectureViolation,
|
|
51
|
+
ModelRuleCheckResult,
|
|
52
|
+
)
|
|
53
|
+
from omnibase_infra.nodes.architecture_validator.node import NodeArchitectureValidator
|
|
54
|
+
from omnibase_infra.nodes.architecture_validator.node_architecture_validator import (
|
|
55
|
+
SUPPORTED_RULE_IDS,
|
|
56
|
+
NodeArchitectureValidatorCompute,
|
|
57
|
+
)
|
|
58
|
+
from omnibase_infra.nodes.architecture_validator.protocols import (
|
|
59
|
+
ProtocolArchitectureRule,
|
|
60
|
+
)
|
|
61
|
+
from omnibase_infra.nodes.architecture_validator.registry import (
|
|
62
|
+
RegistryInfraArchitectureValidator,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
__all__ = [
|
|
66
|
+
# OMN-1138: NodeArchitectureValidatorCompute
|
|
67
|
+
"NodeArchitectureValidatorCompute",
|
|
68
|
+
"SUPPORTED_RULE_IDS",
|
|
69
|
+
"EnumValidationSeverity",
|
|
70
|
+
"ModelRuleCheckResult",
|
|
71
|
+
"ProtocolArchitectureRule",
|
|
72
|
+
# OMN-1099: NodeArchitectureValidator
|
|
73
|
+
"NodeArchitectureValidator",
|
|
74
|
+
"RegistryInfraArchitectureValidator",
|
|
75
|
+
# Shared models
|
|
76
|
+
"ModelArchitectureValidationRequest",
|
|
77
|
+
"ModelArchitectureValidationResult",
|
|
78
|
+
"ModelArchitectureViolation",
|
|
79
|
+
]
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
#
|
|
4
|
+
# ONEX Node Contract - Architecture Validator (COMPUTE)
|
|
5
|
+
#
|
|
6
|
+
# This contract defines the interface for the Architecture Validator node,
|
|
7
|
+
# which validates ONEX architecture patterns and conventions.
|
|
8
|
+
#
|
|
9
|
+
# =============================================================================
|
|
10
|
+
# ARCHITECTURE RULES VALIDATED
|
|
11
|
+
# =============================================================================
|
|
12
|
+
# This COMPUTE node validates three critical architecture rules:
|
|
13
|
+
#
|
|
14
|
+
# ARCH-001: No Direct Handler Dispatch
|
|
15
|
+
# Handlers MUST NOT be invoked directly bypassing the RuntimeHost.
|
|
16
|
+
# All event routing MUST go through the MessageDispatchEngine.
|
|
17
|
+
#
|
|
18
|
+
# ARCH-002: No Handler Publishing Events
|
|
19
|
+
# Handlers MUST NOT have direct event bus access. Only orchestrators
|
|
20
|
+
# may publish events. Handlers return events; orchestrators publish.
|
|
21
|
+
#
|
|
22
|
+
# ARCH-003: No Workflow FSM in Orchestrators
|
|
23
|
+
# Orchestrators MUST NOT duplicate reducer FSM transitions in workflow
|
|
24
|
+
# steps. Reducers own FSM; orchestrators coordinate workflow execution.
|
|
25
|
+
#
|
|
26
|
+
# =============================================================================
|
|
27
|
+
# Contract identifiers
|
|
28
|
+
name: "architecture_validator"
|
|
29
|
+
contract_name: "architecture_validator"
|
|
30
|
+
node_name: "architecture_validator"
|
|
31
|
+
# Version (semantic versioning)
|
|
32
|
+
contract_version:
|
|
33
|
+
major: 1
|
|
34
|
+
minor: 0
|
|
35
|
+
patch: 0
|
|
36
|
+
node_version: "0.1.0"
|
|
37
|
+
# Node type - COMPUTE for pure validation logic
|
|
38
|
+
node_type: "COMPUTE_GENERIC"
|
|
39
|
+
# Description
|
|
40
|
+
description: >
|
|
41
|
+
COMPUTE node for validating ONEX architecture patterns. Analyzes Python source code and module structures to detect architecture violations. Validates three core rules: ARCH-001 (no direct handler dispatch), ARCH-002 (no handler publishing events), and ARCH-003 (no workflow FSM in orchestrators duplicating reducer transitions). Returns a structured validation result with violations grouped by rule and severity.
|
|
42
|
+
|
|
43
|
+
# Strongly typed I/O models
|
|
44
|
+
input_model:
|
|
45
|
+
name: "ModelArchitectureValidationRequest"
|
|
46
|
+
module: "omnibase_infra.nodes.architecture_validator.models"
|
|
47
|
+
description: >
|
|
48
|
+
Input containing paths to validate, optional rule filters, and validation configuration (strict mode, ignore patterns, etc.).
|
|
49
|
+
|
|
50
|
+
output_model:
|
|
51
|
+
name: "ModelArchitectureValidationResult"
|
|
52
|
+
module: "omnibase_infra.nodes.architecture_validator.models"
|
|
53
|
+
description: >
|
|
54
|
+
Output containing validation results: overall pass/fail status, violations grouped by rule (ARCH-001, ARCH-002, ARCH-003), severity levels, and suggested fixes for each violation.
|
|
55
|
+
|
|
56
|
+
# =============================================================================
|
|
57
|
+
# SEVERITY RATIONALE
|
|
58
|
+
# =============================================================================
|
|
59
|
+
# The severity levels align with EnumValidationSeverity enum values:
|
|
60
|
+
# - ERROR: Blocks validation, serious architectural violation
|
|
61
|
+
# - WARNING: Non-blocking, flags potential issues for review
|
|
62
|
+
# - INFO: Informational only
|
|
63
|
+
#
|
|
64
|
+
# ARCH-001 uses WARNING because AST-based pattern detection may produce
|
|
65
|
+
# false positives for legitimate patterns (test mocks, debugging code).
|
|
66
|
+
# Non-blocking validation still flags issues while allowing review.
|
|
67
|
+
#
|
|
68
|
+
# ARCH-002 and ARCH-003 use ERROR because they represent serious
|
|
69
|
+
# architectural violations that should block validation:
|
|
70
|
+
# - Handlers publishing events breaks the orchestrator ownership model
|
|
71
|
+
# - Orchestrators with FSM duplicates reducer responsibilities
|
|
72
|
+
# =============================================================================
|
|
73
|
+
|
|
74
|
+
# Validation rules with detection strategies
|
|
75
|
+
validation_rules:
|
|
76
|
+
- rule_id: "ARCH-001"
|
|
77
|
+
name: "No Direct Handler Dispatch"
|
|
78
|
+
description: >
|
|
79
|
+
Handlers MUST NOT be invoked directly bypassing the RuntimeHost. All event routing MUST go through the MessageDispatchEngine.
|
|
80
|
+
|
|
81
|
+
# WARNING severity: AST pattern matching may produce false positives for
|
|
82
|
+
# legitimate patterns like test mocks or debugging code. Using WARNING
|
|
83
|
+
# allows non-blocking validation while still flagging potential issues.
|
|
84
|
+
severity: "WARNING"
|
|
85
|
+
detection_strategy:
|
|
86
|
+
type: "ast_pattern"
|
|
87
|
+
patterns:
|
|
88
|
+
- "direct_handler_call"
|
|
89
|
+
- "handler_instance_invoke"
|
|
90
|
+
excluded_contexts:
|
|
91
|
+
- "test_files"
|
|
92
|
+
- "unit_test_mocks"
|
|
93
|
+
suggested_fix: >
|
|
94
|
+
Route events through RuntimeHost.process_event() or MessageDispatchEngine.dispatch() instead of calling handlers directly.
|
|
95
|
+
|
|
96
|
+
- rule_id: "ARCH-002"
|
|
97
|
+
name: "No Handler Publishing Events"
|
|
98
|
+
description: >
|
|
99
|
+
Handlers MUST NOT have direct event bus access. Only orchestrators may publish events. Handlers return events; orchestrators publish.
|
|
100
|
+
|
|
101
|
+
# ERROR severity: Serious architectural violation. Handlers with bus access
|
|
102
|
+
# breaks the orchestrator ownership model and event lifecycle management.
|
|
103
|
+
severity: "ERROR"
|
|
104
|
+
detection_strategy:
|
|
105
|
+
type: "signature_analysis"
|
|
106
|
+
checks:
|
|
107
|
+
- no_bus_in_init_params
|
|
108
|
+
- no_bus_instance_attributes
|
|
109
|
+
- no_publish_method_calls
|
|
110
|
+
target_classes:
|
|
111
|
+
- "Handler*"
|
|
112
|
+
- "*Handler"
|
|
113
|
+
suggested_fix: >
|
|
114
|
+
Remove event bus injection from handler. Return events from handle() method; let the orchestrator publish them.
|
|
115
|
+
|
|
116
|
+
- rule_id: "ARCH-003"
|
|
117
|
+
name: "No Workflow FSM in Orchestrators"
|
|
118
|
+
description: >
|
|
119
|
+
Orchestrators MUST NOT duplicate reducer FSM transitions in workflow steps. Reducers own FSM; orchestrators coordinate workflow execution.
|
|
120
|
+
|
|
121
|
+
# ERROR severity: Serious architectural violation. Orchestrators with FSM
|
|
122
|
+
# duplicates reducer responsibilities and violates separation of concerns.
|
|
123
|
+
severity: "ERROR"
|
|
124
|
+
detection_strategy:
|
|
125
|
+
type: "contract_analysis"
|
|
126
|
+
checks:
|
|
127
|
+
- no_state_transitions_in_workflow
|
|
128
|
+
- no_fsm_definitions_in_orchestrator
|
|
129
|
+
target_files:
|
|
130
|
+
- "contract.yaml"
|
|
131
|
+
- "node.py"
|
|
132
|
+
suggested_fix: >
|
|
133
|
+
Remove state transition logic from orchestrator. State transitions belong exclusively to reducer nodes. Orchestrators should call reducers for FSM decisions.
|
|
134
|
+
|
|
135
|
+
# Dependencies (protocols this node requires)
|
|
136
|
+
dependencies:
|
|
137
|
+
- name: "protocol_ast_analyzer"
|
|
138
|
+
type: "protocol"
|
|
139
|
+
description: "Python AST analysis for pattern detection"
|
|
140
|
+
optional: true
|
|
141
|
+
- name: "protocol_contract_parser"
|
|
142
|
+
type: "protocol"
|
|
143
|
+
description: "YAML contract parsing and validation"
|
|
144
|
+
optional: true
|
|
145
|
+
# Capabilities provided by this node
|
|
146
|
+
capabilities:
|
|
147
|
+
- name: "architecture_validation"
|
|
148
|
+
description: "Validate architecture patterns across codebase"
|
|
149
|
+
- name: "violation_detection"
|
|
150
|
+
description: "Detect and report architecture violations"
|
|
151
|
+
- name: "rule_based_analysis"
|
|
152
|
+
description: "Extensible rule-based code analysis"
|
|
153
|
+
- name: "fix_suggestions"
|
|
154
|
+
description: "Provide actionable fix suggestions for violations"
|
|
155
|
+
# Model definitions (schema reference)
|
|
156
|
+
definitions:
|
|
157
|
+
ModelArchitectureValidationRequest:
|
|
158
|
+
type: object
|
|
159
|
+
description: "Input model for architecture validation"
|
|
160
|
+
properties:
|
|
161
|
+
paths:
|
|
162
|
+
type: array
|
|
163
|
+
items:
|
|
164
|
+
type: string
|
|
165
|
+
description: "Paths to validate (files or directories)"
|
|
166
|
+
rules:
|
|
167
|
+
type: array
|
|
168
|
+
items:
|
|
169
|
+
type: string
|
|
170
|
+
description: "Specific rules to check (ARCH-001, ARCH-002, ARCH-003). Empty = all rules."
|
|
171
|
+
strict_mode:
|
|
172
|
+
type: boolean
|
|
173
|
+
default: false
|
|
174
|
+
description: "If true, treat WARNING as ERROR (all violations block validation)"
|
|
175
|
+
ignore_patterns:
|
|
176
|
+
type: array
|
|
177
|
+
items:
|
|
178
|
+
type: string
|
|
179
|
+
description: "Glob patterns to ignore (e.g., '**/tests/**')"
|
|
180
|
+
correlation_id:
|
|
181
|
+
type: string
|
|
182
|
+
description: "Request correlation ID for tracing"
|
|
183
|
+
required:
|
|
184
|
+
- paths
|
|
185
|
+
- correlation_id
|
|
186
|
+
ModelArchitectureValidationResult:
|
|
187
|
+
type: object
|
|
188
|
+
description: "Output model for architecture validation"
|
|
189
|
+
properties:
|
|
190
|
+
passed:
|
|
191
|
+
type: boolean
|
|
192
|
+
description: "True if no ERROR-level violations found"
|
|
193
|
+
total_violations:
|
|
194
|
+
type: integer
|
|
195
|
+
description: "Total number of violations found"
|
|
196
|
+
violations_by_rule:
|
|
197
|
+
type: object
|
|
198
|
+
description: "Violations grouped by rule ID"
|
|
199
|
+
additionalProperties:
|
|
200
|
+
type: array
|
|
201
|
+
items:
|
|
202
|
+
$ref: "#/definitions/ModelArchitectureViolation"
|
|
203
|
+
summary:
|
|
204
|
+
type: string
|
|
205
|
+
description: "Human-readable summary of validation results"
|
|
206
|
+
correlation_id:
|
|
207
|
+
type: string
|
|
208
|
+
description: "Request correlation ID for tracing"
|
|
209
|
+
required:
|
|
210
|
+
- passed
|
|
211
|
+
- total_violations
|
|
212
|
+
- correlation_id
|
|
213
|
+
ModelArchitectureViolation:
|
|
214
|
+
type: object
|
|
215
|
+
description: "Single architecture violation"
|
|
216
|
+
properties:
|
|
217
|
+
rule_id:
|
|
218
|
+
type: string
|
|
219
|
+
description: "Rule that was violated (ARCH-001, ARCH-002, ARCH-003)"
|
|
220
|
+
severity:
|
|
221
|
+
type: string
|
|
222
|
+
enum: ["ERROR", "WARNING", "INFO"]
|
|
223
|
+
description: "Violation severity (ERROR blocks validation, WARNING non-blocking)"
|
|
224
|
+
file_path:
|
|
225
|
+
type: string
|
|
226
|
+
description: "Path to file containing violation"
|
|
227
|
+
line_number:
|
|
228
|
+
type: integer
|
|
229
|
+
description: "Line number of violation (if applicable)"
|
|
230
|
+
description:
|
|
231
|
+
type: string
|
|
232
|
+
description: "Description of the violation"
|
|
233
|
+
suggested_fix:
|
|
234
|
+
type: string
|
|
235
|
+
description: "Suggested fix for the violation"
|
|
236
|
+
required:
|
|
237
|
+
- rule_id
|
|
238
|
+
- severity
|
|
239
|
+
- file_path
|
|
240
|
+
- description
|
|
241
|
+
# Metadata
|
|
242
|
+
metadata:
|
|
243
|
+
author: "OmniNode Team"
|
|
244
|
+
license: "MIT"
|
|
245
|
+
created: "2025-01-07"
|
|
246
|
+
ticket: "OMN-1099"
|
|
247
|
+
tags:
|
|
248
|
+
- compute
|
|
249
|
+
- validation
|
|
250
|
+
- architecture
|
|
251
|
+
- linting
|
|
252
|
+
- onex-compliance
|