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,1710 @@
|
|
|
1
|
+
# Validation Exemption Patterns
|
|
2
|
+
# ============================================================================
|
|
3
|
+
# These patterns exempt specific code from validation rules.
|
|
4
|
+
#
|
|
5
|
+
# Why exemptions exist:
|
|
6
|
+
# Infrastructure code often has legitimate architectural reasons to exceed
|
|
7
|
+
# default thresholds (method counts, parameter counts, etc.). Rather than
|
|
8
|
+
# raising global thresholds or suppressing warnings entirely, we document
|
|
9
|
+
# specific exemptions with their rationale.
|
|
10
|
+
#
|
|
11
|
+
# How exemptions work:
|
|
12
|
+
# - Uses regex-based matching to handle code evolution gracefully
|
|
13
|
+
# - All specified pattern fields must match for exemption to apply
|
|
14
|
+
# - Unspecified optional fields are not checked (match everything)
|
|
15
|
+
# - Uses re.search() for flexible substring matching
|
|
16
|
+
#
|
|
17
|
+
# Pattern fields:
|
|
18
|
+
# - file_pattern: Regex matching the filename (required in practice)
|
|
19
|
+
# - class_pattern: Optional regex for class name context
|
|
20
|
+
# - method_pattern: Optional regex for method name context
|
|
21
|
+
# - violation_pattern: Regex matching the violation type
|
|
22
|
+
#
|
|
23
|
+
# Adding new exemptions:
|
|
24
|
+
# 1. Identify the exact violation message from validator output
|
|
25
|
+
# 2. Create minimal patterns to match only that specific case
|
|
26
|
+
# 3. Document the rationale and link to relevant tickets
|
|
27
|
+
# 4. Run tests to verify the exemption works
|
|
28
|
+
# ============================================================================
|
|
29
|
+
# Schema version for future compatibility
|
|
30
|
+
schema_version: "1.0.0"
|
|
31
|
+
# ==============================================================================
|
|
32
|
+
# Skip Directories Configuration
|
|
33
|
+
# ==============================================================================
|
|
34
|
+
# Directories to exclude from validation scans. Uses EXACT name matching
|
|
35
|
+
# (case-sensitive) to prevent false positives from substring matching.
|
|
36
|
+
#
|
|
37
|
+
# Matching behavior:
|
|
38
|
+
# - Only parent directories are checked (filenames are NOT checked)
|
|
39
|
+
# - Matching is case-sensitive (Linux standard)
|
|
40
|
+
# - Uses set membership for O(1) lookup performance
|
|
41
|
+
# - A path is skipped if ANY parent directory matches exactly
|
|
42
|
+
#
|
|
43
|
+
# Examples of what IS skipped:
|
|
44
|
+
# - /src/archive/foo.py (has "archive" directory)
|
|
45
|
+
# - /src/__pycache__/bar.pyc (has "__pycache__" directory)
|
|
46
|
+
# - /src/.venv/lib/baz.py (has ".venv" directory)
|
|
47
|
+
#
|
|
48
|
+
# Examples of what is NOT skipped (no false positives):
|
|
49
|
+
# - /src/archived_feature/foo.py ("archived_feature" != "archived")
|
|
50
|
+
# - /src/my_archive/bar.py ("my_archive" != "archive")
|
|
51
|
+
# - /src/Archive/baz.py (case-sensitive: "Archive" != "archive")
|
|
52
|
+
# - /src/archive.py (filename not checked, only directories)
|
|
53
|
+
#
|
|
54
|
+
# To add new skip directories:
|
|
55
|
+
# 1. Add to the appropriate category below
|
|
56
|
+
# 2. Document why this directory should be skipped
|
|
57
|
+
# 3. Run tests to verify (tests/unit/validation/test_path_skipping.py)
|
|
58
|
+
# ==============================================================================
|
|
59
|
+
skip_directories:
|
|
60
|
+
# Historical/demo code - not subject to current validation rules
|
|
61
|
+
historical:
|
|
62
|
+
- archive # Historical code preserved for reference
|
|
63
|
+
- archived # Alternative naming for archived code
|
|
64
|
+
- examples # Demo code that may intentionally show anti-patterns
|
|
65
|
+
# Python bytecode and caches - generated files, not source code
|
|
66
|
+
caches:
|
|
67
|
+
- __pycache__ # Python bytecode cache
|
|
68
|
+
- .mypy_cache # mypy type checking cache
|
|
69
|
+
- .pytest_cache # pytest cache directory
|
|
70
|
+
# Virtual environments - third-party code, not project code
|
|
71
|
+
virtual_environments:
|
|
72
|
+
- .venv # Standard virtual environment directory
|
|
73
|
+
- venv # Alternative virtual environment directory
|
|
74
|
+
# Build outputs - generated during build, not source code
|
|
75
|
+
build_outputs:
|
|
76
|
+
- build # Python build output directory
|
|
77
|
+
- dist # Distribution packages output
|
|
78
|
+
- .eggs # setuptools eggs directory
|
|
79
|
+
# Version control - repository metadata, not project code
|
|
80
|
+
version_control:
|
|
81
|
+
- .git # Git repository metadata
|
|
82
|
+
# Testing infrastructure - testing tool directories
|
|
83
|
+
testing:
|
|
84
|
+
- .tox # Tox testing directory
|
|
85
|
+
# Node.js - JavaScript/Node dependencies (if any JS in repo)
|
|
86
|
+
nodejs:
|
|
87
|
+
- node_modules # Node.js package dependencies
|
|
88
|
+
# Pattern validator exemptions
|
|
89
|
+
# These handle method count, parameter count, naming, and style violations
|
|
90
|
+
pattern_exemptions:
|
|
91
|
+
# ==========================================================================
|
|
92
|
+
# EventBusKafka Exemptions (OMN-934, OMN-1305)
|
|
93
|
+
# ==========================================================================
|
|
94
|
+
# Event bus pattern requires many methods for lifecycle (start/stop/health),
|
|
95
|
+
# pub/sub (subscribe/unsubscribe/publish), circuit breaker, protocol compatibility.
|
|
96
|
+
# Complexity managed through mixin composition (MixinKafkaDlq, MixinKafkaBroadcast).
|
|
97
|
+
# See: event_bus_kafka.py class docstring, CLAUDE.md "Accepted Pattern Exceptions"
|
|
98
|
+
- file_pattern: 'event_bus_kafka\.py'
|
|
99
|
+
class_pattern: "Class 'EventBusKafka'"
|
|
100
|
+
violation_pattern: 'has \d+ methods'
|
|
101
|
+
reason: >
|
|
102
|
+
Event bus pattern requires lifecycle (start/stop/health), pub/sub (subscribe/unsubscribe/publish), circuit breaker, and protocol compatibility methods. DLQ and broadcast methods extracted to mixins. Core class has 12+ methods for protocol compliance.
|
|
103
|
+
|
|
104
|
+
documentation:
|
|
105
|
+
- CLAUDE.md (Accepted Pattern Exceptions - EventBusKafka Complexity)
|
|
106
|
+
- docs/patterns/circuit_breaker_implementation.md
|
|
107
|
+
ticket: OMN-1305
|
|
108
|
+
- file_pattern: 'event_bus_kafka\.py'
|
|
109
|
+
method_pattern: "Function '__init__'"
|
|
110
|
+
violation_pattern: 'has \d+ parameters'
|
|
111
|
+
reason: >
|
|
112
|
+
Configuration managed via ModelKafkaEventBusConfig. Init requires config model parameter.
|
|
113
|
+
|
|
114
|
+
documentation:
|
|
115
|
+
- CLAUDE.md (Accepted Pattern Exceptions - EventBusKafka Complexity)
|
|
116
|
+
ticket: OMN-1305
|
|
117
|
+
# ==========================================================================
|
|
118
|
+
# Protocol Plugin Architecture Exemptions
|
|
119
|
+
# ==========================================================================
|
|
120
|
+
# The 'execute' method name is a standard plugin architecture pattern.
|
|
121
|
+
# It's intentionally generic as it's the protocol-defined entry point.
|
|
122
|
+
# Design Doc: CLAUDE.md "ONEX Architecture" section - Protocol-based plugin execution pattern
|
|
123
|
+
- file_pattern: 'protocol_plugin_compute\.py'
|
|
124
|
+
violation_pattern: "Function name 'execute' is too generic"
|
|
125
|
+
reason: Standard plugin architecture pattern - execute is the protocol-defined entry point.
|
|
126
|
+
documentation:
|
|
127
|
+
- CLAUDE.md (ONEX Architecture - Protocol Resolution section)
|
|
128
|
+
ticket: null
|
|
129
|
+
- file_pattern: 'plugin_compute_base\.py'
|
|
130
|
+
violation_pattern: "Function name 'execute' is too generic"
|
|
131
|
+
reason: Base class implements protocol pattern - execute is the standard entry point.
|
|
132
|
+
documentation:
|
|
133
|
+
- CLAUDE.md (ONEX Architecture - Protocol Resolution section)
|
|
134
|
+
ticket: null
|
|
135
|
+
# ==========================================================================
|
|
136
|
+
# RuntimeHostProcess Exemptions (OMN-756)
|
|
137
|
+
# ==========================================================================
|
|
138
|
+
# Central coordinator class that legitimately requires multiple methods for:
|
|
139
|
+
# - Lifecycle management (start, stop, health_check)
|
|
140
|
+
# - Message handling (_on_message, _handle_envelope)
|
|
141
|
+
# - Graceful shutdown (shutdown_ready, drain logic)
|
|
142
|
+
# - Handler management (register_handler, get_handler)
|
|
143
|
+
- file_pattern: 'service_runtime_host_process\.py'
|
|
144
|
+
class_pattern: "Class 'RuntimeHostProcess'"
|
|
145
|
+
violation_pattern: 'has \d+ methods'
|
|
146
|
+
reason: >
|
|
147
|
+
Central coordinator pattern requires lifecycle management, message handling, graceful shutdown, and handler management methods.
|
|
148
|
+
|
|
149
|
+
documentation:
|
|
150
|
+
- docs/architecture/RUNTIME_HOST_IMPLEMENTATION_PLAN.md
|
|
151
|
+
- docs/adr/ADR-001-graceful-shutdown-drain-period.md
|
|
152
|
+
ticket: OMN-756
|
|
153
|
+
- file_pattern: 'service_runtime_host_process\.py'
|
|
154
|
+
method_pattern: "Function '__init__'"
|
|
155
|
+
violation_pattern: 'has \d+ parameters'
|
|
156
|
+
reason: >
|
|
157
|
+
Central coordinator requires multiple configuration parameters: event_bus, input_topic, output_topic, config, handler_registry.
|
|
158
|
+
|
|
159
|
+
documentation:
|
|
160
|
+
- docs/architecture/RUNTIME_HOST_IMPLEMENTATION_PLAN.md
|
|
161
|
+
ticket: OMN-756
|
|
162
|
+
# ==========================================================================
|
|
163
|
+
# PolicyRegistry Exemptions
|
|
164
|
+
# ==========================================================================
|
|
165
|
+
# Domain registry pattern requires comprehensive policy management operations.
|
|
166
|
+
# Design Doc: docs/patterns/container_dependency_injection.md - Registry patterns
|
|
167
|
+
- file_pattern: 'policy_registry\.py'
|
|
168
|
+
class_pattern: "Class 'PolicyRegistry'"
|
|
169
|
+
violation_pattern: 'has \d+ methods'
|
|
170
|
+
reason: >
|
|
171
|
+
Central registry pattern requires CRUD operations (register, get, update, remove), query operations (list, filter, search), and lifecycle operations (enable, disable, validate).
|
|
172
|
+
|
|
173
|
+
documentation:
|
|
174
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
175
|
+
- CLAUDE.md (Container-Based Dependency Injection section)
|
|
176
|
+
ticket: null
|
|
177
|
+
- file_pattern: 'registry_policy\.py'
|
|
178
|
+
method_pattern: "Function 'register_policy'"
|
|
179
|
+
violation_pattern: 'has \d+ parameters'
|
|
180
|
+
reason: Policy registration requires multiple fields for complete policy definition. ModelPolicyRegistration is available as the preferred API for new code.
|
|
181
|
+
documentation:
|
|
182
|
+
- docs/patterns/container_dependency_injection.md
|
|
183
|
+
ticket: null
|
|
184
|
+
- file_pattern: 'registry_policy\.py'
|
|
185
|
+
class_pattern: "Class 'RegistryPolicy'"
|
|
186
|
+
violation_pattern: 'has \d+ methods'
|
|
187
|
+
reason: >
|
|
188
|
+
Registry pattern after mixin extraction (MixinPolicyValidation, MixinSemverCache). Core class has 12 methods for CRUD, query, and lifecycle operations. This is at the threshold and acceptable per CLAUDE.md registry patterns.
|
|
189
|
+
|
|
190
|
+
documentation:
|
|
191
|
+
- docs/patterns/container_dependency_injection.md
|
|
192
|
+
ticket: OMN-1305
|
|
193
|
+
# ==========================================================================
|
|
194
|
+
# Policy ID Exemptions (OMN-812)
|
|
195
|
+
# ==========================================================================
|
|
196
|
+
# policy_id is intentionally a human-readable string identifier (e.g., 'exponential_backoff'),
|
|
197
|
+
# NOT a UUID. The _id suffix triggers false positive UUID suggestions.
|
|
198
|
+
- file_pattern: 'model_policy_key\.py'
|
|
199
|
+
violation_pattern: "Field 'policy_id' should use UUID"
|
|
200
|
+
reason: >
|
|
201
|
+
policy_id is a human-readable string identifier (e.g., 'exponential_backoff'), not a UUID. The _id suffix triggers false positive.
|
|
202
|
+
|
|
203
|
+
documentation:
|
|
204
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
205
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
206
|
+
ticket: OMN-812
|
|
207
|
+
- file_pattern: 'model_policy_registration\.py'
|
|
208
|
+
violation_pattern: "Field 'policy_id' should use UUID"
|
|
209
|
+
reason: Same as ModelPolicyKey - semantic identifier, not UUID.
|
|
210
|
+
documentation:
|
|
211
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
212
|
+
ticket: OMN-812
|
|
213
|
+
# ==========================================================================
|
|
214
|
+
# Infrastructure Handler Exemptions (OMN-1092)
|
|
215
|
+
# ==========================================================================
|
|
216
|
+
# Infrastructure handlers require multiple methods for: connection lifecycle,
|
|
217
|
+
# operation dispatching, health checks, and protocol-specific operations.
|
|
218
|
+
- file_pattern: 'handler_consul\.py'
|
|
219
|
+
class_pattern: "Class 'HandlerConsul'"
|
|
220
|
+
violation_pattern: 'has \d+ methods'
|
|
221
|
+
reason: >
|
|
222
|
+
Infrastructure handler pattern requires multiple methods: connection lifecycle (connect, disconnect), operation dispatch (handle_operation, handle_kv_*, handle_service_*), properties (handler_type, handler_category), and health/describe methods. This is standard for infrastructure handlers.
|
|
223
|
+
|
|
224
|
+
documentation:
|
|
225
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
226
|
+
- CLAUDE.md (Infrastructure Patterns - Adapter Pattern)
|
|
227
|
+
ticket: OMN-1092
|
|
228
|
+
# ==========================================================================
|
|
229
|
+
# Projector Schema Model Exemptions (OMN-1168)
|
|
230
|
+
# ==========================================================================
|
|
231
|
+
# ModelProjectorSchema requires multiple methods for SQL generation, validation,
|
|
232
|
+
# and schema introspection operations.
|
|
233
|
+
- file_pattern: 'model_projector_schema\.py'
|
|
234
|
+
class_pattern: "Class 'ModelProjectorSchema'"
|
|
235
|
+
violation_pattern: 'has \d+ methods'
|
|
236
|
+
reason: >
|
|
237
|
+
Schema model requires SQL generation methods (to_create_table_sql, to_full_migration_sql), schema introspection (get_column_names, get_primary_key_columns), validation methods, and identifier quoting for complete projector schema management.
|
|
238
|
+
|
|
239
|
+
documentation:
|
|
240
|
+
- src/omnibase_infra/models/projectors/model_projector_schema.py (class docstring)
|
|
241
|
+
ticket: OMN-1168
|
|
242
|
+
# ==========================================================================
|
|
243
|
+
# Execution Shape Validator Exemptions (OMN-958)
|
|
244
|
+
# ==========================================================================
|
|
245
|
+
- file_pattern: 'enum_handler_type\.py'
|
|
246
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
247
|
+
reason: >
|
|
248
|
+
EnumHandlerType defines ONEX handler architectural roles (InfraHandler, NodeHandler, etc.) which are architectural concepts, not implementation classes.
|
|
249
|
+
|
|
250
|
+
documentation:
|
|
251
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
252
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
253
|
+
ticket: OMN-1092
|
|
254
|
+
- file_pattern: 'enum_handler_type_category\.py'
|
|
255
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
256
|
+
reason: >
|
|
257
|
+
EnumHandlerTypeCategory defines ONEX handler behavioral classification (Compute, Effect, NondeterministicCompute) which are architectural concepts for policy envelopes, not implementation classes.
|
|
258
|
+
|
|
259
|
+
documentation:
|
|
260
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
261
|
+
- CLAUDE.md (ONEX Architecture - Handler Classification)
|
|
262
|
+
ticket: OMN-1092
|
|
263
|
+
- file_pattern: 'validator_execution_shape\.py'
|
|
264
|
+
class_pattern: "Class name 'ModelDetectedNodeInfo'"
|
|
265
|
+
violation_pattern: "contains anti-pattern 'Model'"
|
|
266
|
+
reason: >
|
|
267
|
+
ModelDetectedNodeInfo is a validation data class for describing detected node information during AST analysis - follows Model* naming convention.
|
|
268
|
+
|
|
269
|
+
documentation:
|
|
270
|
+
- docs/validation/validator_reference.md
|
|
271
|
+
ticket: OMN-958
|
|
272
|
+
- file_pattern: 'validator_execution_shape\.py'
|
|
273
|
+
class_pattern: "Class 'ExecutionShapeValidator'"
|
|
274
|
+
violation_pattern: 'has \d+ methods'
|
|
275
|
+
reason: >
|
|
276
|
+
Validator class requires multiple methods for comprehensive AST analysis: validate_file, validate_directory, _extract_handlers, _find_handler_type, _detect_return_type, _analyze_return_statement, _check_forbidden_calls, _categorize_output. Cohesive validator pattern.
|
|
277
|
+
|
|
278
|
+
documentation:
|
|
279
|
+
- docs/as_is/02_NODE_EXECUTION_SHAPES.md
|
|
280
|
+
- docs/validation/validator_reference.md
|
|
281
|
+
ticket: OMN-958
|
|
282
|
+
# ==========================================================================
|
|
283
|
+
# Any Type Validator Exemptions (OMN-1276)
|
|
284
|
+
# ==========================================================================
|
|
285
|
+
# AST-based validator for Any type usage enforcement. The class requires
|
|
286
|
+
# multiple visitor methods and helper methods for comprehensive detection.
|
|
287
|
+
- file_pattern: 'validator_any_type\.py'
|
|
288
|
+
class_pattern: "Class 'AnyTypeDetector'"
|
|
289
|
+
violation_pattern: 'has \d+ methods'
|
|
290
|
+
reason: >
|
|
291
|
+
AST visitor class after mixin extraction (MixinAnyTypeClassification, MixinAnyTypeExemption, MixinAnyTypeReporting). Core class has 12 methods for visit methods and annotation checking. This is at the threshold and acceptable per standard AST visitor pattern.
|
|
292
|
+
|
|
293
|
+
documentation:
|
|
294
|
+
- docs/decisions/adr-any-type-pydantic-workaround.md
|
|
295
|
+
- CLAUDE.md (Any Type CI Enforcement)
|
|
296
|
+
ticket: OMN-1276
|
|
297
|
+
- file_pattern: 'model_any_type_violation\.py'
|
|
298
|
+
violation_pattern: "Field 'context_name' might reference an entity"
|
|
299
|
+
reason: >
|
|
300
|
+
context_name is descriptive metadata (e.g., "process_event(payload)") showing where the violation occurred, not an entity reference requiring ID + display_name. It provides human-readable context for error messages.
|
|
301
|
+
|
|
302
|
+
documentation:
|
|
303
|
+
- docs/decisions/adr-any-type-pydantic-workaround.md
|
|
304
|
+
ticket: OMN-1276
|
|
305
|
+
# ==========================================================================
|
|
306
|
+
# RuntimeShapeValidator Exemptions
|
|
307
|
+
# ==========================================================================
|
|
308
|
+
# Design Doc: docs/patterns/error_handling_patterns.md - Validation error patterns
|
|
309
|
+
- file_pattern: 'validator_runtime_shape\.py'
|
|
310
|
+
method_pattern: "Function 'validate_handler_output'"
|
|
311
|
+
violation_pattern: 'has \d+ parameters'
|
|
312
|
+
reason: >
|
|
313
|
+
Validation requires multiple context parameters for proper violation reporting: handler_type, output, output_category, source_file, line_number, correlation_id. These are distinct required contexts, not candidates for a model wrapper.
|
|
314
|
+
|
|
315
|
+
documentation:
|
|
316
|
+
- docs/patterns/error_handling_patterns.md (Validation error hierarchy)
|
|
317
|
+
- CLAUDE.md (ONEX Architecture - Contract-Driven section)
|
|
318
|
+
ticket: null
|
|
319
|
+
- file_pattern: 'validator_runtime_shape\.py'
|
|
320
|
+
method_pattern: "Function 'validate_and_raise'"
|
|
321
|
+
violation_pattern: 'has \d+ parameters'
|
|
322
|
+
reason: Same rationale as validate_handler_output - requires distinct context params.
|
|
323
|
+
documentation:
|
|
324
|
+
- docs/patterns/error_handling_patterns.md
|
|
325
|
+
ticket: null
|
|
326
|
+
# ==========================================================================
|
|
327
|
+
# MixinNodeIntrospection Exemptions (OMN-958)
|
|
328
|
+
# ==========================================================================
|
|
329
|
+
- file_pattern: 'mixin_node_introspection\.py'
|
|
330
|
+
method_pattern: "Function 'initialize_introspection'"
|
|
331
|
+
violation_pattern: 'has \d+ parameters'
|
|
332
|
+
reason: >
|
|
333
|
+
Flexible initialization interface. The preferred method initialize_introspection_from_config() takes ModelIntrospectionConfig with parameter count of 2. Direct parameters method provides fine-grained control when needed.
|
|
334
|
+
|
|
335
|
+
documentation:
|
|
336
|
+
- CLAUDE.md (Node Introspection Security Considerations)
|
|
337
|
+
ticket: OMN-958
|
|
338
|
+
- file_pattern: 'mixin_node_introspection\.py'
|
|
339
|
+
class_pattern: "Class 'MixinNodeIntrospection'"
|
|
340
|
+
violation_pattern: 'has \d+ methods'
|
|
341
|
+
reason: >
|
|
342
|
+
Introspection mixin legitimately requires multiple methods: lifecycle (initialize_introspection, start/stop tasks), capability discovery (get_capabilities, get_endpoints, get_current_state), caching (invalidate_introspection_cache), publishing (publish_introspection), and background tasks (heartbeat, registry listener).
|
|
343
|
+
|
|
344
|
+
documentation:
|
|
345
|
+
- CLAUDE.md (Node Introspection Security Considerations)
|
|
346
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
347
|
+
ticket: OMN-958
|
|
348
|
+
# ==========================================================================
|
|
349
|
+
# Message Dispatch Engine Exemptions (OMN-934, OMN-983)
|
|
350
|
+
# ==========================================================================
|
|
351
|
+
# Central dispatch coordinator pattern requires comprehensive routing capabilities.
|
|
352
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
353
|
+
class_pattern: "Class 'MessageDispatchEngine'"
|
|
354
|
+
violation_pattern: 'has \d+ methods'
|
|
355
|
+
reason: >
|
|
356
|
+
Central dispatch coordinator requires: registration (register_dispatcher, register_route), routing (dispatch, get_dispatchers_for_message), metrics (get_dispatcher_metrics, get_dispatch_metrics), lifecycle (start, stop, health_check). This is a central coordinator pattern.
|
|
357
|
+
|
|
358
|
+
documentation:
|
|
359
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
360
|
+
- docs/as_is/05_RUNTIME_DISPATCH_SHAPES.md
|
|
361
|
+
ticket: OMN-934
|
|
362
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
363
|
+
method_pattern: "Function '_build_log_context'"
|
|
364
|
+
violation_pattern: 'has \d+ parameters'
|
|
365
|
+
reason: >
|
|
366
|
+
Log context builder intentionally takes many optional parameters to build structured log context. Each parameter is a distinct log field.
|
|
367
|
+
|
|
368
|
+
documentation:
|
|
369
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
370
|
+
ticket: OMN-934
|
|
371
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
372
|
+
method_pattern: "Function '__init__'"
|
|
373
|
+
violation_pattern: 'has \d+ parameters'
|
|
374
|
+
reason: >
|
|
375
|
+
Central dispatch coordinator requires multiple configuration parameters: context_enforcer, topic_parser, default_node_kind, logger, topic_to_dispatcher_map, category_dispatchers. These are distinct required contexts for dispatch orchestration.
|
|
376
|
+
|
|
377
|
+
documentation:
|
|
378
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
379
|
+
ticket: OMN-990
|
|
380
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
381
|
+
method_pattern: "Function 'register_dispatcher'"
|
|
382
|
+
violation_pattern: 'has \d+ parameters'
|
|
383
|
+
reason: >
|
|
384
|
+
Dispatcher registration requires multiple parameters for complete routing configuration: dispatcher, category, node_kind, topic_patterns, priority. These are distinct routing configuration fields.
|
|
385
|
+
|
|
386
|
+
documentation:
|
|
387
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
388
|
+
ticket: OMN-990
|
|
389
|
+
# ==========================================================================
|
|
390
|
+
# RegistryDispatcher Exemptions (OMN-934)
|
|
391
|
+
# ==========================================================================
|
|
392
|
+
- file_pattern: 'registry_dispatcher\.py'
|
|
393
|
+
class_pattern: "Class 'RegistryDispatcher'"
|
|
394
|
+
violation_pattern: 'has \d+ methods'
|
|
395
|
+
reason: >
|
|
396
|
+
Domain registry pattern requires CRUD + query operations: registration (register, unregister), lookup (get_by_id, get_by_type, get_all), metrics (get_metrics). This is an established domain registry pattern.
|
|
397
|
+
|
|
398
|
+
documentation:
|
|
399
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
400
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
401
|
+
ticket: OMN-934
|
|
402
|
+
# ==========================================================================
|
|
403
|
+
# Dispatch Model Semantic Identifier Exemptions (OMN-983)
|
|
404
|
+
# ==========================================================================
|
|
405
|
+
# dispatcher_id, route_id are semantic identifiers (like policy_id), NOT UUIDs.
|
|
406
|
+
# They are human-readable strings that identify dispatchers/routes by name.
|
|
407
|
+
- file_pattern: 'model_dispatcher_registration\.py'
|
|
408
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
409
|
+
reason: >
|
|
410
|
+
dispatcher_id is a human-readable semantic identifier (e.g., "kafka-main-dispatcher"), not a UUID. Similar to policy_id pattern.
|
|
411
|
+
|
|
412
|
+
documentation:
|
|
413
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
414
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
415
|
+
ticket: OMN-983
|
|
416
|
+
- file_pattern: 'model_dispatcher_registration\.py'
|
|
417
|
+
violation_pattern: 'dispatcher_name.*entity'
|
|
418
|
+
reason: >
|
|
419
|
+
dispatcher_name is a display name for the dispatcher, paired with dispatcher_id as the semantic identifier. This follows the ID + display_name pattern.
|
|
420
|
+
|
|
421
|
+
documentation:
|
|
422
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
423
|
+
ticket: OMN-983
|
|
424
|
+
- file_pattern: 'model_dispatcher_metrics\.py'
|
|
425
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
426
|
+
reason: >
|
|
427
|
+
dispatcher_id is a human-readable semantic identifier, not a UUID. Consistent with model_dispatcher_registration.
|
|
428
|
+
|
|
429
|
+
documentation:
|
|
430
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
431
|
+
ticket: OMN-983
|
|
432
|
+
- file_pattern: 'model_dispatch_route\.py'
|
|
433
|
+
violation_pattern: "Field 'route_id' should use UUID"
|
|
434
|
+
reason: >
|
|
435
|
+
route_id is a human-readable semantic identifier (e.g., "default-route"), not a UUID.
|
|
436
|
+
|
|
437
|
+
documentation:
|
|
438
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
439
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
440
|
+
ticket: OMN-983
|
|
441
|
+
- file_pattern: 'model_dispatch_route\.py'
|
|
442
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
443
|
+
reason: >
|
|
444
|
+
dispatcher_id is a human-readable semantic identifier, consistent across dispatch models.
|
|
445
|
+
|
|
446
|
+
documentation:
|
|
447
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
448
|
+
ticket: OMN-983
|
|
449
|
+
- file_pattern: 'model_dispatch_metrics\.py'
|
|
450
|
+
method_pattern: "Function 'record_dispatch'"
|
|
451
|
+
violation_pattern: 'has \d+ parameters'
|
|
452
|
+
reason: >
|
|
453
|
+
Metrics recording requires multiple parameters for complete dispatch tracking: identifiers (dispatcher_id, route_id, topic, message_type), timing (start_time, end_time, duration_ms), status (success, error_code, error_message).
|
|
454
|
+
|
|
455
|
+
documentation:
|
|
456
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
457
|
+
ticket: OMN-983
|
|
458
|
+
# ==========================================================================
|
|
459
|
+
# RuntimeScheduler Semantic Identifier Exemptions (OMN-953)
|
|
460
|
+
# ==========================================================================
|
|
461
|
+
# scheduler_id is a human-readable semantic identifier set via environment variable
|
|
462
|
+
# (e.g., "runtime-scheduler-prod-1"), NOT a UUID. Follows same pattern as policy_id
|
|
463
|
+
# and dispatcher_id.
|
|
464
|
+
- file_pattern: 'model_runtime_scheduler_config\.py'
|
|
465
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
466
|
+
reason: >
|
|
467
|
+
scheduler_id is a human-readable semantic identifier (e.g., "runtime-scheduler-prod-1") set via RUNTIME_SCHEDULER_ID environment variable. Not a UUID - follows policy_id/dispatcher_id pattern.
|
|
468
|
+
|
|
469
|
+
documentation:
|
|
470
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
471
|
+
ticket: OMN-953
|
|
472
|
+
- file_pattern: 'model_runtime_scheduler_metrics\.py'
|
|
473
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
474
|
+
reason: >
|
|
475
|
+
scheduler_id is a human-readable semantic identifier, consistent with model_runtime_scheduler_config.
|
|
476
|
+
|
|
477
|
+
documentation:
|
|
478
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
479
|
+
ticket: OMN-953
|
|
480
|
+
- file_pattern: 'model_runtime_tick\.py'
|
|
481
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
482
|
+
reason: >
|
|
483
|
+
scheduler_id identifies which runtime scheduler instance emitted the tick. Human-readable identifier, consistent across scheduler models.
|
|
484
|
+
|
|
485
|
+
documentation:
|
|
486
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
487
|
+
ticket: OMN-953
|
|
488
|
+
# ==========================================================================
|
|
489
|
+
# ServiceTimeoutEmitter/Scanner Naming Exemptions (OMN-1055)
|
|
490
|
+
# ==========================================================================
|
|
491
|
+
# These service classes follow the CLAUDE.md Service<Name> naming convention.
|
|
492
|
+
# Service files use service_<name>.py with Service<Name> class names.
|
|
493
|
+
- file_pattern: 'service_timeout_emitter\.py'
|
|
494
|
+
class_pattern: "Class name 'ServiceTimeoutEmitter'"
|
|
495
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
496
|
+
reason: >
|
|
497
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
498
|
+
|
|
499
|
+
documentation:
|
|
500
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
501
|
+
ticket: OMN-1055
|
|
502
|
+
- file_pattern: 'service_timeout_scanner\.py'
|
|
503
|
+
class_pattern: "Class name 'ServiceTimeoutScanner'"
|
|
504
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
505
|
+
reason: >
|
|
506
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
507
|
+
|
|
508
|
+
documentation:
|
|
509
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
510
|
+
ticket: OMN-1055
|
|
511
|
+
# ==========================================================================
|
|
512
|
+
# ServiceHealth Exemptions (OMN-529)
|
|
513
|
+
# ==========================================================================
|
|
514
|
+
# ServiceHealth follows the CLAUDE.md Service<Name> naming convention and
|
|
515
|
+
# requires multiple __init__ parameters to support dual initialization modes
|
|
516
|
+
# (direct runtime injection and container-based DI).
|
|
517
|
+
- file_pattern: 'service_health\.py'
|
|
518
|
+
class_pattern: "Class name 'ServiceHealth'"
|
|
519
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
520
|
+
reason: >
|
|
521
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
522
|
+
|
|
523
|
+
documentation:
|
|
524
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
525
|
+
ticket: OMN-529
|
|
526
|
+
- file_pattern: 'service_dlq_tracking\.py'
|
|
527
|
+
class_pattern: "Class name 'ServiceDlqTracking'"
|
|
528
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
529
|
+
reason: >
|
|
530
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
531
|
+
|
|
532
|
+
documentation:
|
|
533
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
534
|
+
ticket: OMN-1270
|
|
535
|
+
- file_pattern: 'service_capability_query\.py'
|
|
536
|
+
class_pattern: "Class name 'ServiceCapabilityQuery'"
|
|
537
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
538
|
+
reason: >
|
|
539
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
540
|
+
|
|
541
|
+
documentation:
|
|
542
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
543
|
+
ticket: OMN-1135
|
|
544
|
+
- file_pattern: 'service_node_selector\.py'
|
|
545
|
+
class_pattern: "Class name 'ServiceNodeSelector'"
|
|
546
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
547
|
+
reason: >
|
|
548
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
549
|
+
|
|
550
|
+
documentation:
|
|
551
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
552
|
+
ticket: OMN-1135
|
|
553
|
+
- file_pattern: 'service_snapshot\.py'
|
|
554
|
+
class_pattern: "Class name 'ServiceSnapshot'"
|
|
555
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
556
|
+
reason: >
|
|
557
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. ServiceSnapshot provides generic snapshot infrastructure for state persistence. File renamed from snapshot_repository.py per PR review feedback.
|
|
558
|
+
|
|
559
|
+
documentation:
|
|
560
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
561
|
+
ticket: OMN-1246
|
|
562
|
+
- file_pattern: 'service_health\.py'
|
|
563
|
+
method_pattern: "Function '__init__'"
|
|
564
|
+
violation_pattern: 'has \d+ parameters'
|
|
565
|
+
reason: >
|
|
566
|
+
ServiceHealth supports dual initialization modes (direct runtime injection and container-based DI) requiring multiple optional parameters. This is intentional to support migration from legacy patterns to ONEX-compliant container injection.
|
|
567
|
+
|
|
568
|
+
documentation:
|
|
569
|
+
- CLAUDE.md (Container-Based Dependency Injection)
|
|
570
|
+
ticket: OMN-529
|
|
571
|
+
# ==========================================================================
|
|
572
|
+
# Consul Service ID Exemptions (OMN-889)
|
|
573
|
+
# ==========================================================================
|
|
574
|
+
# consul_service_id is a Consul-specific identifier that is a user-defined string,
|
|
575
|
+
# NOT a UUID. The Consul API accepts any string as a service ID. This field is
|
|
576
|
+
# named with the 'consul_' prefix to clarify it's a Consul concept.
|
|
577
|
+
- file_pattern: 'model_consul_register_payload\.py'
|
|
578
|
+
violation_pattern: "Field 'consul_service_id' should use UUID"
|
|
579
|
+
reason: >
|
|
580
|
+
consul_service_id is a Consul-specific identifier that is a user-defined string, not a UUID. The Consul API accepts any string as a service ID.
|
|
581
|
+
|
|
582
|
+
documentation:
|
|
583
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
584
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
585
|
+
ticket: OMN-889
|
|
586
|
+
- file_pattern: 'model_consul_deregister_payload\.py'
|
|
587
|
+
violation_pattern: "Field 'consul_service_id' should use UUID"
|
|
588
|
+
reason: >
|
|
589
|
+
consul_service_id is a Consul-specific identifier that is a user-defined string, not a UUID. The Consul API accepts any string as a service ID.
|
|
590
|
+
|
|
591
|
+
documentation:
|
|
592
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
593
|
+
ticket: OMN-889
|
|
594
|
+
# ==========================================================================
|
|
595
|
+
# MessageTypeRegistry Exemptions (OMN-983)
|
|
596
|
+
# ==========================================================================
|
|
597
|
+
- file_pattern: 'registry_message_type\.py'
|
|
598
|
+
class_pattern: "Class 'RegistryMessageType'"
|
|
599
|
+
violation_pattern: 'has \d+ methods'
|
|
600
|
+
reason: >
|
|
601
|
+
Domain registry pattern after mixin extraction (MixinMessageTypeRegistration, MixinMessageTypeQuery). Core class has 11 methods for domain registry operations. This is below the threshold and acceptable per established domain registry pattern.
|
|
602
|
+
|
|
603
|
+
documentation:
|
|
604
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
605
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
606
|
+
ticket: OMN-983
|
|
607
|
+
# ==========================================================================
|
|
608
|
+
# Idempotency Store Configuration Exemptions (OMN-945)
|
|
609
|
+
# ==========================================================================
|
|
610
|
+
# table_name is a database configuration field specifying the PostgreSQL table
|
|
611
|
+
# name for storing idempotency records. It is NOT an entity reference.
|
|
612
|
+
- file_pattern: 'model_postgres_idempotency_store_config\.py'
|
|
613
|
+
violation_pattern: "Field 'table_name' might reference an entity"
|
|
614
|
+
reason: >
|
|
615
|
+
table_name is a database configuration parameter specifying the PostgreSQL table name for storing idempotency records (default: "idempotency_records"). This is infrastructure configuration, not an entity reference.
|
|
616
|
+
|
|
617
|
+
documentation:
|
|
618
|
+
- docs/patterns/retry_backoff_compensation_strategy.md (Idempotency patterns)
|
|
619
|
+
ticket: OMN-945
|
|
620
|
+
# ==========================================================================
|
|
621
|
+
# RegistryCompute Exemptions (OMN-811)
|
|
622
|
+
# ==========================================================================
|
|
623
|
+
# Central registry pattern for compute plugins follows same patterns as
|
|
624
|
+
# PolicyRegistry, MessageTypeRegistry, and RegistryDispatcher.
|
|
625
|
+
- file_pattern: 'registry_compute\.py'
|
|
626
|
+
class_pattern: "Class 'RegistryCompute'"
|
|
627
|
+
violation_pattern: 'has \d+ methods'
|
|
628
|
+
reason: >
|
|
629
|
+
Central registry pattern requires comprehensive plugin management: CRUD operations (register, unregister, get), query operations (list_keys, list_plugins, get_all), version resolution (get_latest_version, _parse_version), validation (protocol compliance, async detection), and container integration. This is an established domain registry pattern consistent with PolicyRegistry, MessageTypeRegistry.
|
|
630
|
+
|
|
631
|
+
documentation:
|
|
632
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
633
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
634
|
+
ticket: OMN-811
|
|
635
|
+
- file_pattern: 'registry_compute\.py'
|
|
636
|
+
method_pattern: "Function 'register_plugin'"
|
|
637
|
+
violation_pattern: 'has \d+ parameters'
|
|
638
|
+
reason: >
|
|
639
|
+
Plugin registration requires multiple parameters for complete registration: plugin_id, plugin_class, version, description, deterministic_async. This is a convenience method; the model-based register() method is the preferred API.
|
|
640
|
+
|
|
641
|
+
documentation:
|
|
642
|
+
- docs/patterns/container_dependency_injection.md
|
|
643
|
+
ticket: OMN-811
|
|
644
|
+
# ==========================================================================
|
|
645
|
+
# ComputeRegistryError Exemptions (OMN-811)
|
|
646
|
+
# ==========================================================================
|
|
647
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
648
|
+
- file_pattern: 'error_compute_registry\.py'
|
|
649
|
+
method_pattern: "Function '__init__'"
|
|
650
|
+
violation_pattern: 'has \d+ parameters'
|
|
651
|
+
reason: >
|
|
652
|
+
Error class requires multiple contextual parameters for debugging: message, plugin_id, version, registered_plugins, context, and **extra_context. These are distinct error context fields needed for comprehensive error reporting.
|
|
653
|
+
|
|
654
|
+
documentation:
|
|
655
|
+
- docs/patterns/error_handling_patterns.md
|
|
656
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
657
|
+
ticket: OMN-811
|
|
658
|
+
# ==========================================================================
|
|
659
|
+
# EventBusRegistryError Exemptions (OMN-1276)
|
|
660
|
+
# ==========================================================================
|
|
661
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
662
|
+
- file_pattern: 'error_event_bus_registry\.py'
|
|
663
|
+
method_pattern: "Function '__init__'"
|
|
664
|
+
violation_pattern: 'has \d+ parameters'
|
|
665
|
+
reason: >
|
|
666
|
+
Error class requires multiple contextual parameters for debugging: message, bus_kind, bus_class, available_kinds, existing_class, context, and **extra_context. These are distinct error context fields needed for comprehensive error reporting.
|
|
667
|
+
|
|
668
|
+
documentation:
|
|
669
|
+
- docs/patterns/error_handling_patterns.md
|
|
670
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
671
|
+
ticket: OMN-1276
|
|
672
|
+
# ==========================================================================
|
|
673
|
+
# MessageTypeRegistryError Exemptions (OMN-983)
|
|
674
|
+
# ==========================================================================
|
|
675
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
676
|
+
- file_pattern: 'error_message_type_registry\.py'
|
|
677
|
+
method_pattern: "Function '__init__'"
|
|
678
|
+
violation_pattern: 'has \d+ parameters'
|
|
679
|
+
reason: >
|
|
680
|
+
Error class requires multiple contextual parameters for debugging: message, message_type, domain, category, context, and **extra_context. These are distinct error context fields needed for comprehensive error reporting.
|
|
681
|
+
|
|
682
|
+
documentation:
|
|
683
|
+
- docs/patterns/error_handling_patterns.md
|
|
684
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
685
|
+
ticket: OMN-983
|
|
686
|
+
# ==========================================================================
|
|
687
|
+
# Compute Plugin ID Exemptions (OMN-811)
|
|
688
|
+
# ==========================================================================
|
|
689
|
+
# plugin_id is a semantic identifier (e.g., 'json_normalizer'), NOT a UUID.
|
|
690
|
+
# Follows same pattern as policy_id, dispatcher_id, scheduler_id.
|
|
691
|
+
- file_pattern: 'model_compute_key\.py'
|
|
692
|
+
violation_pattern: "Field 'plugin_id' should use UUID"
|
|
693
|
+
reason: >
|
|
694
|
+
plugin_id is a human-readable semantic identifier (e.g., 'json_normalizer'), not a UUID. This follows the same pattern as policy_id, dispatcher_id, and scheduler_id.
|
|
695
|
+
|
|
696
|
+
documentation:
|
|
697
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
698
|
+
- docs/patterns/container_dependency_injection.md
|
|
699
|
+
ticket: OMN-811
|
|
700
|
+
- file_pattern: 'model_compute_registration\.py'
|
|
701
|
+
violation_pattern: "Field 'plugin_id' should use UUID"
|
|
702
|
+
reason: >
|
|
703
|
+
plugin_id is a human-readable semantic identifier, consistent with ModelComputeKey. Follows the policy_id/dispatcher_id pattern.
|
|
704
|
+
|
|
705
|
+
documentation:
|
|
706
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
707
|
+
ticket: OMN-811
|
|
708
|
+
# ==========================================================================
|
|
709
|
+
# Consul Intent Payload Exemptions (OMN-888)
|
|
710
|
+
# ==========================================================================
|
|
711
|
+
# service_name in ModelConsulIntentPayload is the Consul service name to register,
|
|
712
|
+
# NOT a reference to an internal entity. It is a Consul-specific configuration field.
|
|
713
|
+
- file_pattern: 'model_consul_intent_payload\.py'
|
|
714
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
715
|
+
reason: >
|
|
716
|
+
service_name is the Consul service name to register in service discovery (e.g., "node-effect-123"). This is Consul-specific configuration, not an entity reference. The field specifies how the node appears in Consul's service catalog.
|
|
717
|
+
|
|
718
|
+
documentation:
|
|
719
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
720
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
721
|
+
ticket: OMN-888
|
|
722
|
+
# ==========================================================================
|
|
723
|
+
# Private Class Naming Exemptions (OMN-811)
|
|
724
|
+
# ==========================================================================
|
|
725
|
+
# Private helper classes (prefixed with _) follow PascalCase after the underscore.
|
|
726
|
+
# The pattern validator's regex expects names to start with uppercase, but private
|
|
727
|
+
# classes correctly use underscore prefix + PascalCase (e.g., _MetricsTimer).
|
|
728
|
+
- file_pattern: 'registry_compute\.py'
|
|
729
|
+
class_pattern: "Class name '_MetricsTimer'"
|
|
730
|
+
violation_pattern: "should use PascalCase"
|
|
731
|
+
reason: >
|
|
732
|
+
_MetricsTimer IS valid PascalCase for a private class. The underscore prefix indicates private visibility, and "MetricsTimer" follows PascalCase. The validator regex doesn't account for underscore-prefixed private classes.
|
|
733
|
+
|
|
734
|
+
documentation:
|
|
735
|
+
- PEP 8 - Naming Conventions (https://peps.python.org/pep-0008/#naming-conventions)
|
|
736
|
+
- CLAUDE.md (File & Class Naming Conventions)
|
|
737
|
+
ticket: OMN-811
|
|
738
|
+
# ==========================================================================
|
|
739
|
+
# Plugin Models Exemptions (OMN-811)
|
|
740
|
+
# ==========================================================================
|
|
741
|
+
# ModelPluginContext uses str for correlation_id for flexibility - plugins may
|
|
742
|
+
# receive correlation IDs from various sources as strings. This is intentional
|
|
743
|
+
# to support diverse plugin use cases without requiring UUID conversion.
|
|
744
|
+
- file_pattern: 'model_plugin_context\.py'
|
|
745
|
+
violation_pattern: "Field 'correlation_id' should use UUID"
|
|
746
|
+
reason: >
|
|
747
|
+
Plugin context accepts correlation_id as string for flexibility. Plugins may receive correlation IDs from various sources that are not UUIDs. String type allows compatibility with diverse plugin input sources.
|
|
748
|
+
|
|
749
|
+
documentation:
|
|
750
|
+
- docs/patterns/correlation_id_tracking.md
|
|
751
|
+
ticket: OMN-811
|
|
752
|
+
# ==========================================================================
|
|
753
|
+
# MCP Handler Model Exemptions (OMN-1288)
|
|
754
|
+
# ==========================================================================
|
|
755
|
+
# tool_name in ModelMcpToolCall is the MCP protocol identifier for the tool
|
|
756
|
+
# to invoke (e.g., "get_weather", "search_documents"). It is NOT an entity
|
|
757
|
+
# reference requiring UUID + display_name pattern - it's a protocol-level
|
|
758
|
+
# identifier defined by the MCP specification.
|
|
759
|
+
- file_pattern: 'model_mcp_tool_call\.py'
|
|
760
|
+
violation_pattern: "Field 'tool_name' might reference an entity"
|
|
761
|
+
reason: >
|
|
762
|
+
tool_name is an MCP protocol identifier for the tool to invoke (e.g., "get_weather"). This is a protocol-level identifier from the Model Context Protocol specification, not an entity reference.
|
|
763
|
+
|
|
764
|
+
documentation:
|
|
765
|
+
- Model Context Protocol Specification (https://modelcontextprotocol.io/)
|
|
766
|
+
ticket: OMN-1288
|
|
767
|
+
# ==========================================================================
|
|
768
|
+
# Corpus Capture Model Exemptions (OMN-1203)
|
|
769
|
+
# ==========================================================================
|
|
770
|
+
# corpus_display_name in ModelCaptureConfig is a user-provided label for the
|
|
771
|
+
# corpus (e.g., "regression-suite-v1"). It is NOT an entity reference - it's
|
|
772
|
+
# simply a human-readable display name for configuration.
|
|
773
|
+
- file_pattern: 'model_capture_config\.py'
|
|
774
|
+
violation_pattern: "Field 'corpus_display_name' might reference an entity"
|
|
775
|
+
reason: >
|
|
776
|
+
corpus_display_name is a user-provided display label for the corpus (e.g., "regression-suite-v1"). This is a configuration display name, not an entity reference requiring UUID + display_name pattern.
|
|
777
|
+
|
|
778
|
+
documentation:
|
|
779
|
+
- src/omnibase_infra/models/corpus/model_capture_config.py (class docstring)
|
|
780
|
+
ticket: OMN-1203
|
|
781
|
+
# ==========================================================================
|
|
782
|
+
# Union Reduction Phase 2 Model Exemptions (OMN-1002)
|
|
783
|
+
# ==========================================================================
|
|
784
|
+
# These models use builder patterns with many convenience methods.
|
|
785
|
+
# Method counts exceed thresholds but provide valuable developer ergonomics.
|
|
786
|
+
# ModelLogContext - Structured logging context with builder pattern
|
|
787
|
+
- file_pattern: 'model_log_context\.py'
|
|
788
|
+
class_pattern: "Class 'ModelLogContext'"
|
|
789
|
+
violation_pattern: 'has \d+ methods'
|
|
790
|
+
reason: >
|
|
791
|
+
Builder pattern model for structured logging with fluent interface. Many methods provide convenience factories (for_event_bus, for_dispatch, for_error) and builder methods (with_*). This is intentional API design for developer ergonomics.
|
|
792
|
+
|
|
793
|
+
documentation:
|
|
794
|
+
- docs/patterns/correlation_id_tracking.md
|
|
795
|
+
- CLAUDE.md (Type Annotation Conventions)
|
|
796
|
+
ticket: OMN-1002
|
|
797
|
+
- file_pattern: 'model_log_context\.py'
|
|
798
|
+
violation_pattern: "Field 'correlation_id' should use UUID"
|
|
799
|
+
reason: >
|
|
800
|
+
correlation_id is stored as str for logging compatibility. Log formatters expect string values. The correlation ID is typically stringified from UUID before logging anyway.
|
|
801
|
+
|
|
802
|
+
documentation:
|
|
803
|
+
- docs/patterns/correlation_id_tracking.md
|
|
804
|
+
ticket: OMN-1002
|
|
805
|
+
- file_pattern: 'model_log_context\.py'
|
|
806
|
+
violation_pattern: "Field 'group_id' should use UUID"
|
|
807
|
+
reason: >
|
|
808
|
+
group_id is Kafka consumer group ID which is a string, not a UUID. This is infrastructure-specific and follows Kafka naming conventions.
|
|
809
|
+
|
|
810
|
+
documentation:
|
|
811
|
+
- Apache Kafka Consumer Group Configuration (https://kafka.apache.org/documentation/#consumerconfigs_group.id)
|
|
812
|
+
ticket: OMN-1002
|
|
813
|
+
- file_pattern: 'model_log_context\.py'
|
|
814
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
815
|
+
reason: >
|
|
816
|
+
service_name is a logging field for identifying the service (e.g., "kafka", "consul"). It is NOT an entity reference but a simple label for log correlation.
|
|
817
|
+
|
|
818
|
+
documentation:
|
|
819
|
+
- docs/patterns/correlation_id_tracking.md
|
|
820
|
+
ticket: OMN-1002
|
|
821
|
+
# ModelDispatchLogContext - Dispatch-specific logging
|
|
822
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
823
|
+
class_pattern: "Class 'ModelDispatchLogContext'"
|
|
824
|
+
violation_pattern: 'has \d+ methods'
|
|
825
|
+
reason: >
|
|
826
|
+
Builder pattern model for dispatch logging with factory methods for common patterns (for_dispatch_start, for_dispatch_complete, for_dispatch_error). Intentional API design.
|
|
827
|
+
|
|
828
|
+
documentation:
|
|
829
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
830
|
+
- docs/patterns/correlation_id_tracking.md
|
|
831
|
+
ticket: OMN-1002
|
|
832
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
833
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
834
|
+
reason: >
|
|
835
|
+
dispatcher_id is a user-defined string identifier for dispatchers, not a UUID. Dispatchers are registered with string IDs for readability in logs and configuration.
|
|
836
|
+
|
|
837
|
+
documentation:
|
|
838
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
839
|
+
ticket: OMN-1002
|
|
840
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
841
|
+
method_pattern: "Function 'for_dispatch_complete'"
|
|
842
|
+
violation_pattern: 'has \d+ parameters'
|
|
843
|
+
reason: >
|
|
844
|
+
Factory method that captures all dispatch completion context. Parameters are optional with defaults. Breaking into multiple calls would reduce usability.
|
|
845
|
+
|
|
846
|
+
documentation:
|
|
847
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
848
|
+
ticket: OMN-1002
|
|
849
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
850
|
+
method_pattern: "Function 'for_dispatch_error'"
|
|
851
|
+
violation_pattern: 'has \d+ parameters'
|
|
852
|
+
reason: >
|
|
853
|
+
Factory method that captures all dispatch error context. Parameters are optional with defaults. Breaking into multiple calls would reduce usability.
|
|
854
|
+
|
|
855
|
+
documentation:
|
|
856
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
857
|
+
ticket: OMN-1002
|
|
858
|
+
# ModelDispatchOutcome - Dispatcher output normalization
|
|
859
|
+
- file_pattern: 'model_dispatch_outcome\.py'
|
|
860
|
+
class_pattern: "Class 'ModelDispatchOutcome'"
|
|
861
|
+
violation_pattern: 'has \d+ methods'
|
|
862
|
+
reason: >
|
|
863
|
+
Model with multiple factory methods (none, single, multiple, from_legacy_output) and convenience properties (is_empty, has_topics, single_topic, has_single_topic). Provides comprehensive API for handling dispatcher outputs.
|
|
864
|
+
|
|
865
|
+
documentation:
|
|
866
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
867
|
+
- docs/design/ADR_DISPATCHER_TYPE_SAFETY.md
|
|
868
|
+
ticket: OMN-1002
|
|
869
|
+
# ==========================================================================
|
|
870
|
+
# Failed Component Model Exemptions (OMN-1007)
|
|
871
|
+
# ==========================================================================
|
|
872
|
+
# component_name in ModelFailedComponent is a simple string identifier for
|
|
873
|
+
# the component that failed during shutdown (e.g., "KafkaEventBus", "VaultAdapter").
|
|
874
|
+
# It is NOT an entity reference requiring UUID + display_name pattern.
|
|
875
|
+
- file_pattern: 'model_failed_component\.py'
|
|
876
|
+
violation_pattern: "Field 'component_name' might reference an entity"
|
|
877
|
+
reason: >
|
|
878
|
+
component_name is a simple string identifier for the failed component (e.g., "KafkaEventBus"). This is a shutdown tracking field, not an entity reference. The component is identified by its type name, not by a UUID.
|
|
879
|
+
|
|
880
|
+
documentation:
|
|
881
|
+
- docs/adr/ADR-001-graceful-shutdown-drain-period.md
|
|
882
|
+
- CLAUDE.md (Model Field Naming - computed display names)
|
|
883
|
+
ticket: OMN-1007
|
|
884
|
+
# ==========================================================================
|
|
885
|
+
# ModelRegistryResponse Factory Method Exemptions (PR #79)
|
|
886
|
+
# ==========================================================================
|
|
887
|
+
# from_backend_results is a classmethod factory that requires all parameters
|
|
888
|
+
# to construct a response from individual backend results. Each parameter is
|
|
889
|
+
# a distinct required context for computing the response status.
|
|
890
|
+
- file_pattern: 'model_registry_response\.py'
|
|
891
|
+
method_pattern: "Function 'from_backend_results'"
|
|
892
|
+
violation_pattern: 'has \d+ parameters'
|
|
893
|
+
reason: >
|
|
894
|
+
Classmethod factory requires all parameters to construct response from backend results: node_id, correlation_id, consul_result, postgres_result, timestamp. These are distinct required inputs for computing status, processing_time, and error_summary.
|
|
895
|
+
|
|
896
|
+
documentation:
|
|
897
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
898
|
+
- CLAUDE.md (Factory Method Patterns)
|
|
899
|
+
ticket: PR-79
|
|
900
|
+
# ==========================================================================
|
|
901
|
+
# Union Reduction Phase 3 Result Model Exemptions (OMN-1003)
|
|
902
|
+
# ==========================================================================
|
|
903
|
+
# Result models use comprehensive APIs with factory methods, computed properties,
|
|
904
|
+
# and convenience methods for developer ergonomics.
|
|
905
|
+
- file_pattern: 'model_execution_shape_validation_result\.py'
|
|
906
|
+
class_pattern: "Class 'ModelExecutionShapeValidationResult'"
|
|
907
|
+
violation_pattern: 'has \d+ methods'
|
|
908
|
+
reason: >
|
|
909
|
+
Result model with comprehensive API: computed properties (has_blocking, violation_count, blocking_count, warning_count), factory methods (from_violations, success, from_legacy_result), utility methods (to_legacy_result, format_for_ci), and dunder methods (__bool__, __str__). This is intentional API design for CI integration and developer ergonomics.
|
|
910
|
+
|
|
911
|
+
documentation:
|
|
912
|
+
- docs/validation/validator_reference.md
|
|
913
|
+
- CLAUDE.md (Custom __bool__ for Result Models)
|
|
914
|
+
ticket: OMN-1003
|
|
915
|
+
# ==========================================================================
|
|
916
|
+
# OMN-1004: Union Reduction Phase 4 - New Model Exemptions
|
|
917
|
+
# ==========================================================================
|
|
918
|
+
# ModelCircuitBreakerConfig - service_name is a service identifier string
|
|
919
|
+
- file_pattern: 'model_circuit_breaker_config\.py'
|
|
920
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
921
|
+
reason: >
|
|
922
|
+
service_name is a string identifier for circuit breaker monitoring (e.g., "kafka.producer", "consul.client"). It is NOT an entity reference but a simple label for observability and logging purposes.
|
|
923
|
+
|
|
924
|
+
documentation:
|
|
925
|
+
- CLAUDE.md (Circuit Breaker Pattern section)
|
|
926
|
+
ticket: OMN-1004
|
|
927
|
+
# ModelOperationContext - operation_name is an operation identifier string
|
|
928
|
+
- file_pattern: 'model_operation_context\.py'
|
|
929
|
+
violation_pattern: "Field 'operation_name' might reference an entity"
|
|
930
|
+
reason: >
|
|
931
|
+
operation_name is a string identifier for handler operations (e.g., "connect", "publish", "query"). It is NOT an entity reference but a simple label for operation tracking and timeout context.
|
|
932
|
+
|
|
933
|
+
documentation:
|
|
934
|
+
- CLAUDE.md (Handler Refactoring section)
|
|
935
|
+
ticket: OMN-1004
|
|
936
|
+
# ModelValidationResult - field_name is the name of a validated field
|
|
937
|
+
- file_pattern: 'registration_reducer\.py'
|
|
938
|
+
violation_pattern: "Field 'field_name' might reference an entity"
|
|
939
|
+
reason: >
|
|
940
|
+
field_name is a string containing the name of a field being validated (e.g., "node_id", "name"). It is NOT an entity reference but metadata about validation errors for debugging purposes.
|
|
941
|
+
|
|
942
|
+
documentation:
|
|
943
|
+
- docs/architecture/REGISTRATION_REDUCER.md
|
|
944
|
+
ticket: OMN-1004
|
|
945
|
+
# ==========================================================================
|
|
946
|
+
# Handler Validation Error Model Exemptions (OMN-1091)
|
|
947
|
+
# ==========================================================================
|
|
948
|
+
# Handler validation error types are explicitly named per ticket requirements.
|
|
949
|
+
# rule_id and handler_id are human-readable semantic identifiers, not UUIDs.
|
|
950
|
+
- file_pattern: 'enum_handler_error_type\.py'
|
|
951
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
952
|
+
reason: >
|
|
953
|
+
EnumHandlerErrorType is an enum for handler validation error types (CONTRACT_PARSE_ERROR, SECURITY_VALIDATION_ERROR, etc.). The "Handler" name is intentional per OMN-1091 spec.
|
|
954
|
+
|
|
955
|
+
documentation:
|
|
956
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
957
|
+
ticket: OMN-1091
|
|
958
|
+
- file_pattern: 'enum_handler_source_type\.py'
|
|
959
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
960
|
+
reason: >
|
|
961
|
+
EnumHandlerSourceType is an enum for validation source types (CONTRACT, DESCRIPTOR, STATIC_ANALYSIS). The "Handler" name is intentional per OMN-1091 spec.
|
|
962
|
+
|
|
963
|
+
documentation:
|
|
964
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
965
|
+
ticket: OMN-1091
|
|
966
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
967
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
968
|
+
reason: >
|
|
969
|
+
rule_id is a human-readable semantic identifier (e.g., "CONTRACT-001", "SECURITY-002") per ticket spec. Used for CI output and developer reference. Not a UUID.
|
|
970
|
+
|
|
971
|
+
documentation:
|
|
972
|
+
- docs/patterns/error_handling_patterns.md
|
|
973
|
+
ticket: OMN-1091
|
|
974
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
975
|
+
method_pattern: "Function 'from_contract_error'"
|
|
976
|
+
violation_pattern: 'has \d+ parameters'
|
|
977
|
+
reason: >
|
|
978
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults. Breaking into multiple calls would reduce usability.
|
|
979
|
+
|
|
980
|
+
documentation:
|
|
981
|
+
- docs/patterns/error_handling_patterns.md
|
|
982
|
+
ticket: OMN-1091
|
|
983
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
984
|
+
method_pattern: "Function 'from_security_violation'"
|
|
985
|
+
violation_pattern: 'has \d+ parameters'
|
|
986
|
+
reason: >
|
|
987
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults. Breaking into multiple calls would reduce usability.
|
|
988
|
+
|
|
989
|
+
documentation:
|
|
990
|
+
- docs/patterns/error_handling_patterns.md
|
|
991
|
+
ticket: OMN-1091
|
|
992
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
993
|
+
method_pattern: "Function 'from_descriptor_error'"
|
|
994
|
+
violation_pattern: 'has \d+ parameters'
|
|
995
|
+
reason: >
|
|
996
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults.
|
|
997
|
+
|
|
998
|
+
documentation:
|
|
999
|
+
- docs/patterns/error_handling_patterns.md
|
|
1000
|
+
ticket: OMN-1091
|
|
1001
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1002
|
+
method_pattern: "Function 'from_architecture_error'"
|
|
1003
|
+
violation_pattern: 'has \d+ parameters'
|
|
1004
|
+
reason: >
|
|
1005
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults.
|
|
1006
|
+
|
|
1007
|
+
documentation:
|
|
1008
|
+
- docs/patterns/error_handling_patterns.md
|
|
1009
|
+
ticket: OMN-1091
|
|
1010
|
+
- file_pattern: 'model_handler_identifier\.py'
|
|
1011
|
+
violation_pattern: "Field 'handler_id' should use UUID"
|
|
1012
|
+
reason: >
|
|
1013
|
+
handler_id is a human-readable semantic identifier (e.g., "http-handler", "db-handler") per existing patterns. Not a UUID.
|
|
1014
|
+
|
|
1015
|
+
documentation:
|
|
1016
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1017
|
+
ticket: OMN-1091
|
|
1018
|
+
# ==========================================================================
|
|
1019
|
+
# Handler Contract Source Exemptions (OMN-1097)
|
|
1020
|
+
# ==========================================================================
|
|
1021
|
+
# handler_contract_source.py contains legitimate handler discovery code.
|
|
1022
|
+
# The "Handler" in the class name refers to ONEX handler contracts, not an
|
|
1023
|
+
# anti-pattern manager/helper class.
|
|
1024
|
+
- file_pattern: 'handler_contract_source\.py'
|
|
1025
|
+
class_pattern: "Class name 'HandlerContractSource'"
|
|
1026
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1027
|
+
reason: >
|
|
1028
|
+
HandlerContractSource discovers handler contract YAML files from the filesystem. The "Handler" refers to ONEX handler contracts being discovered, not an anti-pattern manager class. This is legitimate handler infrastructure code.
|
|
1029
|
+
|
|
1030
|
+
documentation:
|
|
1031
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1032
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1033
|
+
ticket: OMN-1097
|
|
1034
|
+
# ==========================================================================
|
|
1035
|
+
# Handler Plugin Loader Exemptions (OMN-1132)
|
|
1036
|
+
# ==========================================================================
|
|
1037
|
+
# HandlerPluginLoader discovers and loads ONEX handlers from contract YAML files.
|
|
1038
|
+
# The "Handler" in the name refers to ONEX handler contracts being loaded,
|
|
1039
|
+
# not an anti-pattern manager/helper class.
|
|
1040
|
+
- file_pattern: 'handler_plugin_loader\.py'
|
|
1041
|
+
class_pattern: "Class name 'HandlerPluginLoader'"
|
|
1042
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1043
|
+
reason: >
|
|
1044
|
+
HandlerPluginLoader loads ONEX handler contracts from YAML files. The "Handler" refers to ONEX handler contracts being discovered and loaded, not an anti-pattern manager class. This is legitimate handler infrastructure code.
|
|
1045
|
+
|
|
1046
|
+
documentation:
|
|
1047
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1048
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1049
|
+
ticket: OMN-1132
|
|
1050
|
+
- file_pattern: 'handler_plugin_loader\.py'
|
|
1051
|
+
class_pattern: "Class 'HandlerPluginLoader'"
|
|
1052
|
+
violation_pattern: 'has \d+ methods'
|
|
1053
|
+
reason: >
|
|
1054
|
+
Plugin loader pattern requires multiple discovery methods (load_from_contract, load_from_directory, discover_and_load), security validation (_validate_namespace, _validate_file_security), contract parsing (_load_contract, _import_handler_class), and error handling methods. This is the standard plugin loader pattern consistent with ProjectorPluginLoader.
|
|
1055
|
+
|
|
1056
|
+
documentation:
|
|
1057
|
+
- docs/patterns/handler_plugin_loader.md
|
|
1058
|
+
- CLAUDE.md (Handler Plugin Loader Patterns)
|
|
1059
|
+
ticket: OMN-1132
|
|
1060
|
+
- file_pattern: 'protocol_handler_plugin_loader\.py'
|
|
1061
|
+
class_pattern: "Class name 'ProtocolHandlerPluginLoader'"
|
|
1062
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1063
|
+
reason: >
|
|
1064
|
+
ProtocolHandlerPluginLoader defines the interface for handler plugin loading. The "Handler" refers to ONEX handler contracts, consistent with HandlerPluginLoader.
|
|
1065
|
+
|
|
1066
|
+
documentation:
|
|
1067
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1068
|
+
ticket: OMN-1132
|
|
1069
|
+
- file_pattern: 'model_loaded_handler\.py'
|
|
1070
|
+
class_pattern: "Class name 'ModelLoadedHandler'"
|
|
1071
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1072
|
+
reason: >
|
|
1073
|
+
ModelLoadedHandler represents metadata about a loaded ONEX handler contract. The "Handler" refers to ONEX handler concepts, not an anti-pattern.
|
|
1074
|
+
|
|
1075
|
+
documentation:
|
|
1076
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1077
|
+
ticket: OMN-1132
|
|
1078
|
+
- file_pattern: 'model_handler_contract\.py'
|
|
1079
|
+
class_pattern: "Class name 'ModelHandlerContract'"
|
|
1080
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1081
|
+
reason: >
|
|
1082
|
+
ModelHandlerContract is the Pydantic schema for handler contract YAML files. The "Handler" refers to ONEX handler contracts, consistent with HandlerPluginLoader and ModelLoadedHandler.
|
|
1083
|
+
|
|
1084
|
+
documentation:
|
|
1085
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1086
|
+
ticket: OMN-1132
|
|
1087
|
+
- file_pattern: 'model_handler_contract\.py'
|
|
1088
|
+
violation_pattern: "Field 'handler_name' might reference an entity"
|
|
1089
|
+
reason: >
|
|
1090
|
+
handler_name is a human-readable identifier from the contract YAML (e.g., "auth-handler"). It's a semantic identifier, not an entity reference. Consistent with ModelLoadedHandler.
|
|
1091
|
+
|
|
1092
|
+
documentation:
|
|
1093
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers)
|
|
1094
|
+
ticket: OMN-1132
|
|
1095
|
+
# ==========================================================================
|
|
1096
|
+
# Contract Handler Discovery Exemptions (OMN-1133)
|
|
1097
|
+
# ==========================================================================
|
|
1098
|
+
# ContractHandlerDiscovery bridges HandlerPluginLoader with the BindingRegistry
|
|
1099
|
+
# for automatic handler discovery from contracts. The "Handler" in the name
|
|
1100
|
+
# refers to ONEX handler contracts being discovered, not an anti-pattern.
|
|
1101
|
+
- file_pattern: 'contract_handler_discovery\.py'
|
|
1102
|
+
class_pattern: "Class name 'ContractHandlerDiscovery'"
|
|
1103
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1104
|
+
reason: >
|
|
1105
|
+
ContractHandlerDiscovery discovers ONEX handler contracts and registers them with the runtime. The "Handler" refers to ONEX handler contracts being discovered, consistent with HandlerPluginLoader.
|
|
1106
|
+
|
|
1107
|
+
documentation:
|
|
1108
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1109
|
+
- CLAUDE.md (Handler Plugin Loader Patterns)
|
|
1110
|
+
ticket: OMN-1133
|
|
1111
|
+
- file_pattern: 'protocol_handler_discovery\.py'
|
|
1112
|
+
class_pattern: "Class name 'ProtocolHandlerDiscovery'"
|
|
1113
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1114
|
+
reason: >
|
|
1115
|
+
ProtocolHandlerDiscovery defines the interface for handler discovery services. The "Handler" refers to ONEX handler contracts, consistent with ProtocolHandlerPluginLoader.
|
|
1116
|
+
|
|
1117
|
+
documentation:
|
|
1118
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1119
|
+
ticket: OMN-1133
|
|
1120
|
+
- file_pattern: 'model_loaded_handler\.py'
|
|
1121
|
+
violation_pattern: "Field 'handler_name' might reference an entity"
|
|
1122
|
+
reason: >
|
|
1123
|
+
handler_name is a human-readable identifier for the handler from the contract (e.g., "auth-handler"). It's a semantic identifier, not an entity reference.
|
|
1124
|
+
|
|
1125
|
+
documentation:
|
|
1126
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers)
|
|
1127
|
+
ticket: OMN-1132
|
|
1128
|
+
- file_pattern: 'model_handler_descriptor\.py'
|
|
1129
|
+
violation_pattern: "Field 'handler_id' should use UUID"
|
|
1130
|
+
reason: >
|
|
1131
|
+
handler_id in ModelHandlerDescriptor is a human-readable semantic identifier from handler contracts (e.g., "auth.handler"). Consistent with ModelHandlerIdentifier and other handler models. Not a UUID.
|
|
1132
|
+
|
|
1133
|
+
documentation:
|
|
1134
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1135
|
+
ticket: OMN-1097
|
|
1136
|
+
- file_pattern: 'model_handler_security_policy\.py'
|
|
1137
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1138
|
+
reason: >
|
|
1139
|
+
ModelHandlerSecurityPolicy defines security policies for ONEX handlers. The "Handler" refers to ONEX handler security constraints, not an anti-pattern manager class. Part of the two-layer security validation system (OMN-1098).
|
|
1140
|
+
|
|
1141
|
+
documentation:
|
|
1142
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1143
|
+
ticket: OMN-1098
|
|
1144
|
+
# LocalHandler validator models - OMN-743
|
|
1145
|
+
# These models validate LocalHandler import restrictions in production code.
|
|
1146
|
+
# The "Handler" in the name refers to the specific LocalHandler class being
|
|
1147
|
+
# validated, not an anti-pattern handler class.
|
|
1148
|
+
- file_pattern: 'model_localhandler_violation\.py'
|
|
1149
|
+
class_pattern: "Class name 'ModelLocalHandlerViolation'"
|
|
1150
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1151
|
+
reason: >
|
|
1152
|
+
ModelLocalHandlerViolation is a validation result model for detecting forbidden LocalHandler imports. The "Handler" refers to the omnibase_core.handlers.LocalHandler class being validated against, not an anti-pattern manager class.
|
|
1153
|
+
|
|
1154
|
+
documentation:
|
|
1155
|
+
- CLAUDE.md (LocalHandler dev-only enforcement)
|
|
1156
|
+
ticket: OMN-743
|
|
1157
|
+
- file_pattern: 'model_localhandler_validation_result\.py'
|
|
1158
|
+
class_pattern: "Class name 'ModelLocalHandlerValidationResult'"
|
|
1159
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1160
|
+
reason: >
|
|
1161
|
+
ModelLocalHandlerValidationResult is the aggregate validation result for LocalHandler import checking. The "Handler" refers to the omnibase_core.handlers.LocalHandler class being validated against, not an anti-pattern manager class.
|
|
1162
|
+
|
|
1163
|
+
documentation:
|
|
1164
|
+
- CLAUDE.md (LocalHandler dev-only enforcement)
|
|
1165
|
+
ticket: OMN-743
|
|
1166
|
+
- file_pattern: 'validation_aggregator\.py'
|
|
1167
|
+
class_pattern: "Class 'ValidationAggregator'"
|
|
1168
|
+
violation_pattern: 'has \d+ methods'
|
|
1169
|
+
reason: >
|
|
1170
|
+
Aggregator class requires multiple methods for comprehensive error management: collection (add_error, add_errors), properties (has_errors, has_blocking_errors, counts), grouping (by_type, by_source), formatting (console, ci, summary), and lifecycle (raise_if_blocking, clear). This is an established aggregator pattern.
|
|
1171
|
+
|
|
1172
|
+
documentation:
|
|
1173
|
+
- docs/patterns/error_handling_patterns.md
|
|
1174
|
+
ticket: OMN-1091
|
|
1175
|
+
- file_pattern: 'validator_security\.py'
|
|
1176
|
+
method_pattern: "Function 'convert_to_validation_error'"
|
|
1177
|
+
violation_pattern: 'has \d+ parameters'
|
|
1178
|
+
reason: >
|
|
1179
|
+
Conversion function requires multiple context parameters for complete error construction. Parameters are distinct required contexts for error reporting.
|
|
1180
|
+
|
|
1181
|
+
documentation:
|
|
1182
|
+
- docs/patterns/security_patterns.md
|
|
1183
|
+
ticket: OMN-1091
|
|
1184
|
+
# ==========================================================================
|
|
1185
|
+
# Service Discovery Node Exemptions (OMN-1131)
|
|
1186
|
+
# ==========================================================================
|
|
1187
|
+
# The service discovery node is a domain-specific infrastructure component that
|
|
1188
|
+
# integrates with external service discovery systems (Consul, Kubernetes).
|
|
1189
|
+
# The term "Service" is fundamental to the service discovery domain and cannot
|
|
1190
|
+
# be replaced with alternative terminology without losing semantic clarity.
|
|
1191
|
+
# HashiCorp Consul, Kubernetes, and all major service discovery systems use
|
|
1192
|
+
# "service" as the canonical term for discoverable network endpoints.
|
|
1193
|
+
- file_pattern: 'node_service_discovery_effect/node\.py'
|
|
1194
|
+
class_pattern: "Class name 'NodeServiceDiscoveryEffect'"
|
|
1195
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1196
|
+
reason: >
|
|
1197
|
+
NodeServiceDiscoveryEffect is the ONEX node for service discovery operations. "Service" is the canonical domain term from HashiCorp Consul and Kubernetes service discovery APIs.
|
|
1198
|
+
|
|
1199
|
+
documentation:
|
|
1200
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1201
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1202
|
+
ticket: OMN-1131
|
|
1203
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_info\.py'
|
|
1204
|
+
class_pattern: "Class name 'ModelServiceInfo'"
|
|
1205
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1206
|
+
reason: >
|
|
1207
|
+
ModelServiceInfo represents service metadata from discovery systems. "Service" is the canonical domain term.
|
|
1208
|
+
|
|
1209
|
+
documentation:
|
|
1210
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1211
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1212
|
+
ticket: OMN-1131
|
|
1213
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_info\.py'
|
|
1214
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1215
|
+
reason: >
|
|
1216
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1217
|
+
|
|
1218
|
+
documentation:
|
|
1219
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1220
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1221
|
+
ticket: OMN-1131
|
|
1222
|
+
- file_pattern: 'node_service_discovery_effect/models/enum_service_discovery_operation\.py'
|
|
1223
|
+
class_pattern: "Class name 'EnumServiceDiscoveryOperation'"
|
|
1224
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1225
|
+
reason: >
|
|
1226
|
+
EnumServiceDiscoveryOperation defines operations for service discovery (REGISTER, DEREGISTER, DISCOVER). "Service" is the canonical domain term.
|
|
1227
|
+
|
|
1228
|
+
documentation:
|
|
1229
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1230
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1231
|
+
ticket: OMN-1131
|
|
1232
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_discovery_health_check_details\.py'
|
|
1233
|
+
class_pattern: "Class name 'ModelServiceDiscoveryHealthCheckDetails'"
|
|
1234
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1235
|
+
reason: >
|
|
1236
|
+
ModelServiceDiscoveryHealthCheckDetails contains health check configuration for service discovery. "Service" is the canonical domain term.
|
|
1237
|
+
|
|
1238
|
+
documentation:
|
|
1239
|
+
- HashiCorp Consul Health Checks (https://developer.hashicorp.com/consul/docs/services/usage/checks)
|
|
1240
|
+
- Kubernetes Probes (https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
|
|
1241
|
+
ticket: OMN-1131
|
|
1242
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_registration\.py'
|
|
1243
|
+
class_pattern: "Class name 'ModelServiceRegistration'"
|
|
1244
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1245
|
+
reason: >
|
|
1246
|
+
ModelServiceRegistration is the input model for registering services in discovery systems. "Service" is the canonical domain term.
|
|
1247
|
+
|
|
1248
|
+
documentation:
|
|
1249
|
+
- HashiCorp Consul Service Registration (https://developer.hashicorp.com/consul/api-docs/agent/service#register-service)
|
|
1250
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1251
|
+
ticket: OMN-1131
|
|
1252
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_registration\.py'
|
|
1253
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1254
|
+
reason: >
|
|
1255
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1256
|
+
|
|
1257
|
+
documentation:
|
|
1258
|
+
- HashiCorp Consul Service Registration (https://developer.hashicorp.com/consul/api-docs/agent/service#register-service)
|
|
1259
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1260
|
+
ticket: OMN-1131
|
|
1261
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_discovery_health_check_result\.py'
|
|
1262
|
+
class_pattern: "Class name 'ModelServiceDiscoveryHealthCheckResult'"
|
|
1263
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1264
|
+
reason: >
|
|
1265
|
+
ModelServiceDiscoveryHealthCheckResult contains health check results from service discovery. "Service" is the canonical domain term.
|
|
1266
|
+
|
|
1267
|
+
documentation:
|
|
1268
|
+
- HashiCorp Consul Health Checks (https://developer.hashicorp.com/consul/docs/services/usage/checks)
|
|
1269
|
+
- Kubernetes Probes (https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
|
|
1270
|
+
ticket: OMN-1131
|
|
1271
|
+
- file_pattern: 'node_service_discovery_effect/registry/registry_infra_service_discovery\.py'
|
|
1272
|
+
class_pattern: "Class name 'RegistryInfraServiceDiscovery'"
|
|
1273
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1274
|
+
reason: >
|
|
1275
|
+
RegistryInfraServiceDiscovery is the DI registry for service discovery handlers. "Service" is the canonical domain term.
|
|
1276
|
+
|
|
1277
|
+
documentation:
|
|
1278
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
1279
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1280
|
+
ticket: OMN-1131
|
|
1281
|
+
- file_pattern: 'handlers/registration_storage/handler_registration_storage_postgres\.py'
|
|
1282
|
+
method_pattern: "Function '__init__'"
|
|
1283
|
+
violation_pattern: 'has \d+ parameters'
|
|
1284
|
+
reason: >
|
|
1285
|
+
PostgreSQL handler requires multiple configuration parameters: pool, host, port, database, user, password, min_size, max_size, timeout, circuit_breaker_config. These are standard database connection parameters.
|
|
1286
|
+
|
|
1287
|
+
documentation:
|
|
1288
|
+
- asyncpg Pool Configuration (https://magicstack.github.io/asyncpg/current/api/index.html#connection-pools)
|
|
1289
|
+
ticket: OMN-1131
|
|
1290
|
+
- file_pattern: 'handlers/service_discovery/handler_service_discovery_consul\.py'
|
|
1291
|
+
method_pattern: "Function '__init__'"
|
|
1292
|
+
violation_pattern: 'has \d+ parameters'
|
|
1293
|
+
reason: >
|
|
1294
|
+
Consul handler requires multiple configuration parameters: consul_client, token, scheme, host, port, dc, circuit_breaker_config. These are standard Consul connection parameters.
|
|
1295
|
+
|
|
1296
|
+
documentation:
|
|
1297
|
+
- HashiCorp Consul API Configuration (https://developer.hashicorp.com/consul/api-docs)
|
|
1298
|
+
ticket: OMN-1131
|
|
1299
|
+
- file_pattern: 'handlers/service_discovery/models/model_service_info\.py'
|
|
1300
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1301
|
+
reason: >
|
|
1302
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1303
|
+
|
|
1304
|
+
documentation:
|
|
1305
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1306
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1307
|
+
ticket: OMN-1131
|
|
1308
|
+
# ==========================================================================
|
|
1309
|
+
# Architecture Validator AST Exemptions (OMN-1099)
|
|
1310
|
+
# ==========================================================================
|
|
1311
|
+
# Python ast.NodeVisitor convention uses visit_ClassDef, visit_Call, visit_Name, etc.
|
|
1312
|
+
# These method names are REQUIRED by the ast module - they cannot be renamed.
|
|
1313
|
+
# Reference: https://docs.python.org/3/library/ast.html#ast.NodeVisitor
|
|
1314
|
+
#
|
|
1315
|
+
# This is a GENERAL exemption for ALL visit_* methods in ANY Python file,
|
|
1316
|
+
# as AST visitor patterns are used throughout the codebase for static analysis.
|
|
1317
|
+
- file_pattern: '.*\.py'
|
|
1318
|
+
violation_pattern: "Function name 'visit_\\w+' should use snake_case"
|
|
1319
|
+
reason: >
|
|
1320
|
+
Python ast.NodeVisitor convention. visit_* methods (visit_ClassDef, visit_Call, visit_Name, etc.) are standard AST visitor method names that the ast module dispatches to. They cannot be renamed without breaking the visitor pattern.
|
|
1321
|
+
|
|
1322
|
+
documentation:
|
|
1323
|
+
- Python ast.NodeVisitor (https://docs.python.org/3/library/ast.html)
|
|
1324
|
+
- PEP 8 - Exception for stdlib compatibility
|
|
1325
|
+
ticket: OMN-1099
|
|
1326
|
+
# HandlerPublishingVisitor is a class that validates handler publishing constraints.
|
|
1327
|
+
# The "Handler" name is appropriate because it IS validating handler behavior.
|
|
1328
|
+
- file_pattern: 'validator_no_handler_publishing\.py'
|
|
1329
|
+
violation_pattern: "Class name .* contains anti-pattern 'Handler'"
|
|
1330
|
+
reason: >
|
|
1331
|
+
HandlerPublishingVisitor is an AST visitor class that validates handler publishing constraints. The "Handler" name is intentional and appropriate because it validates that handlers do NOT have direct event bus access. This is a validator class, not a handler implementation.
|
|
1332
|
+
|
|
1333
|
+
documentation:
|
|
1334
|
+
- CLAUDE.md (Handler No-Publish Constraint)
|
|
1335
|
+
- docs/patterns/security_patterns.md
|
|
1336
|
+
ticket: OMN-1099
|
|
1337
|
+
# ==========================================================================
|
|
1338
|
+
# Validation Result Model Exemptions (OMN-1104)
|
|
1339
|
+
# ==========================================================================
|
|
1340
|
+
# field_name in ModelValidationResult is a validation field path identifier,
|
|
1341
|
+
# not an entity reference. It represents which field in the validated object
|
|
1342
|
+
# failed validation (e.g., "node_id", "node_type").
|
|
1343
|
+
- file_pattern: 'model_validation_result\.py'
|
|
1344
|
+
violation_pattern: "Field 'field_name' might reference an entity"
|
|
1345
|
+
reason: >
|
|
1346
|
+
field_name is a validation field path (e.g., "node_id"), not an entity reference. It indicates which field in the validated object failed validation.
|
|
1347
|
+
|
|
1348
|
+
documentation:
|
|
1349
|
+
- docs/patterns/error_handling_patterns.md
|
|
1350
|
+
ticket: OMN-1104
|
|
1351
|
+
# ==========================================================================
|
|
1352
|
+
# Consul Registration Payload Exemptions (OMN-1104)
|
|
1353
|
+
# ==========================================================================
|
|
1354
|
+
# service_id and service_name are Consul native formats (strings), not UUIDs
|
|
1355
|
+
# or entity references. Consul service registry uses string identifiers.
|
|
1356
|
+
- file_pattern: 'model_payload_consul_register\.py'
|
|
1357
|
+
violation_pattern: "Field 'service_id' should use UUID"
|
|
1358
|
+
reason: >
|
|
1359
|
+
service_id is Consul's native string format for service identifiers. Consul does not use UUIDs for service identification - it uses human-readable string IDs.
|
|
1360
|
+
|
|
1361
|
+
documentation:
|
|
1362
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1363
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1364
|
+
ticket: OMN-1104
|
|
1365
|
+
- file_pattern: 'model_payload_consul_register\.py'
|
|
1366
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1367
|
+
reason: >
|
|
1368
|
+
service_name is a display string for the Consul service catalog, not an entity reference. It's the human-readable name shown in Consul's UI.
|
|
1369
|
+
|
|
1370
|
+
documentation:
|
|
1371
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1372
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1373
|
+
ticket: OMN-1104
|
|
1374
|
+
# ==========================================================================
|
|
1375
|
+
# Architecture Validator Semantic ID Exemptions (OMN-1138)
|
|
1376
|
+
# ==========================================================================
|
|
1377
|
+
# Architecture validation rules use semantic string identifiers (e.g.,
|
|
1378
|
+
# 'NO_HANDLER_PUBLISHING', 'PURE_REDUCERS') rather than UUIDs. These are
|
|
1379
|
+
# human-readable rule codes similar to error codes, not database entity IDs.
|
|
1380
|
+
- file_pattern: 'model_rule_check_result\.py'
|
|
1381
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
1382
|
+
reason: >
|
|
1383
|
+
rule_id is a semantic identifier for architecture rules (e.g., 'NO_HANDLER_PUBLISHING'). These are human-readable rule codes like error codes, not database entity UUIDs.
|
|
1384
|
+
|
|
1385
|
+
documentation:
|
|
1386
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1387
|
+
ticket: OMN-1138
|
|
1388
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1389
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
1390
|
+
reason: >
|
|
1391
|
+
rule_id is a semantic identifier for architecture rules (e.g., 'NO_HANDLER_PUBLISHING'). These are human-readable rule codes, not database entity UUIDs.
|
|
1392
|
+
|
|
1393
|
+
documentation:
|
|
1394
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1395
|
+
ticket: OMN-1138
|
|
1396
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1397
|
+
violation_pattern: "Field 'rule_name' might reference an entity"
|
|
1398
|
+
reason: >
|
|
1399
|
+
rule_name is a human-readable display name for the rule (e.g., 'No Handler Publishing'). It's a static description, not a reference to a named entity.
|
|
1400
|
+
|
|
1401
|
+
documentation:
|
|
1402
|
+
- CLAUDE.md (Model Field Naming - display names vs entity references)
|
|
1403
|
+
ticket: OMN-1138
|
|
1404
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1405
|
+
violation_pattern: "Field 'target_name' might reference an entity"
|
|
1406
|
+
reason: >
|
|
1407
|
+
target_name is dynamically derived from type(target).__name__ during validation. It's a runtime-computed description for logging, not an entity reference.
|
|
1408
|
+
|
|
1409
|
+
documentation:
|
|
1410
|
+
- CLAUDE.md (Model Field Naming - computed display names)
|
|
1411
|
+
ticket: OMN-1138
|
|
1412
|
+
# ==========================================================================
|
|
1413
|
+
# ProjectorValidationError Exemptions (OMN-1168)
|
|
1414
|
+
# ==========================================================================
|
|
1415
|
+
# Validation error class requires multiple context parameters for complete
|
|
1416
|
+
# error information: error_type, contract_path, message, remediation_hint,
|
|
1417
|
+
# and correlation_id. These are distinct required contexts for error reporting.
|
|
1418
|
+
- file_pattern: 'model_projector_validation_error\.py'
|
|
1419
|
+
method_pattern: "Function '__init__'"
|
|
1420
|
+
violation_pattern: 'has \d+ parameters'
|
|
1421
|
+
reason: >
|
|
1422
|
+
Validation error class requires multiple contextual parameters for debugging: error_type, contract_path, message, remediation_hint, correlation_id. These are distinct error context fields needed for comprehensive error reporting and graceful mode error collection.
|
|
1423
|
+
|
|
1424
|
+
documentation:
|
|
1425
|
+
- docs/patterns/error_handling_patterns.md
|
|
1426
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
1427
|
+
ticket: OMN-1168
|
|
1428
|
+
# ==========================================================================
|
|
1429
|
+
# ProjectorPluginLoader Exemptions (OMN-1168)
|
|
1430
|
+
# ==========================================================================
|
|
1431
|
+
# Plugin loader pattern requires multiple discovery methods:
|
|
1432
|
+
# - load_from_contract, load_from_directory, discover_and_load
|
|
1433
|
+
# - Security validation methods (_validate_file_security, _sanitize_path)
|
|
1434
|
+
# - Contract parsing (_load_contract, _parse_yaml)
|
|
1435
|
+
# - Error handling (discover_with_errors, graceful mode support)
|
|
1436
|
+
- file_pattern: 'projector_plugin_loader\.py'
|
|
1437
|
+
class_pattern: "Class 'ProjectorPluginLoader'"
|
|
1438
|
+
violation_pattern: 'has \d+ methods'
|
|
1439
|
+
reason: >
|
|
1440
|
+
Plugin loader pattern requires multiple discovery methods (load_from_contract, load_from_directory, discover_and_load), security validation, contract parsing, and error handling methods. Mirrors handler_contract_source.py pattern.
|
|
1441
|
+
|
|
1442
|
+
documentation:
|
|
1443
|
+
- src/omnibase_infra/runtime/handler_contract_source.py (reference pattern)
|
|
1444
|
+
ticket: OMN-1168
|
|
1445
|
+
- file_pattern: 'projector_plugin_loader\.py'
|
|
1446
|
+
method_pattern: "Function '__init__'"
|
|
1447
|
+
violation_pattern: 'has \d+ parameters'
|
|
1448
|
+
reason: >
|
|
1449
|
+
ProjectorPluginLoader.__init__ requires multiple configuration parameters for security controls (allowed_namespaces), observability (correlation_id), and plugin discovery settings. Mirrors HandlerPluginLoader pattern which has similar constructor signature.
|
|
1450
|
+
|
|
1451
|
+
documentation:
|
|
1452
|
+
- src/omnibase_infra/runtime/handler_plugin_loader.py (reference pattern)
|
|
1453
|
+
- docs/patterns/handler_plugin_loader.md (security model)
|
|
1454
|
+
ticket: OMN-1316
|
|
1455
|
+
# ==========================================================================
|
|
1456
|
+
# ProjectorShell Exemptions (OMN-1169)
|
|
1457
|
+
# ==========================================================================
|
|
1458
|
+
# ProjectorShell implements ProtocolEventProjector protocol which requires:
|
|
1459
|
+
# - Protocol properties (projector_id, aggregate_type, consumed_events, is_placeholder)
|
|
1460
|
+
# - Core methods (project, get_state)
|
|
1461
|
+
# - SQL execution modes (_upsert, _insert, _append, _execute_projection)
|
|
1462
|
+
# - Value extraction (_extract_values, _resolve_path, _get_event_type)
|
|
1463
|
+
# - Utility (_parse_row_count)
|
|
1464
|
+
# Total: 11 methods, all cohesive to the projector contract pattern.
|
|
1465
|
+
# NOTE: Pattern anchored with omnibase_infra/runtime/ prefix and $ suffix to
|
|
1466
|
+
# match only the production file at src/omnibase_infra/runtime/projector_shell.py.
|
|
1467
|
+
# This prevents matching test files in tests/unit/runtime/ or tests/integration/runtime/.
|
|
1468
|
+
- file_pattern: 'omnibase_infra/runtime/projector_shell\.py$'
|
|
1469
|
+
class_pattern: "Class 'ProjectorShell'"
|
|
1470
|
+
violation_pattern: 'has \d+ methods'
|
|
1471
|
+
reason: >
|
|
1472
|
+
Implements ProtocolEventProjector protocol requiring protocol properties (projector_id, aggregate_type, consumed_events, is_placeholder), core methods (project, get_state), three SQL execution modes (_upsert, _insert, _append), value extraction helpers (_extract_values, _resolve_path, _get_event_type), and utility method (_parse_row_count). All methods are cohesive to the contract-driven projector pattern.
|
|
1473
|
+
|
|
1474
|
+
documentation:
|
|
1475
|
+
- src/omnibase_infra/runtime/projector_shell.py (class docstring)
|
|
1476
|
+
- omnibase_spi/protocols/projectors/protocol_event_projector.py (protocol definition)
|
|
1477
|
+
ticket: OMN-1169
|
|
1478
|
+
# ==========================================================================
|
|
1479
|
+
# Qdrant Handler Model Exemptions (OMN-1142)
|
|
1480
|
+
# ==========================================================================
|
|
1481
|
+
# collection_name is a Qdrant-native identifier, not an entity reference.
|
|
1482
|
+
# Qdrant uses string collection names as the primary way to identify and
|
|
1483
|
+
# access vector collections. This matches the qdrant-client API design.
|
|
1484
|
+
- file_pattern: 'model_qdrant_upsert_payload\.py'
|
|
1485
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1486
|
+
reason: >
|
|
1487
|
+
collection_name is a Qdrant collection identifier (e.g., 'embeddings', 'documents'). Qdrant uses string collection names as the primary API identifier, not UUIDs. This matches the qdrant-client library design.
|
|
1488
|
+
|
|
1489
|
+
documentation:
|
|
1490
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1491
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1492
|
+
ticket: OMN-1142
|
|
1493
|
+
- file_pattern: 'model_qdrant_collection_payload\.py'
|
|
1494
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1495
|
+
reason: >
|
|
1496
|
+
collection_name is a Qdrant collection identifier (e.g., 'embeddings', 'documents'). Qdrant uses string collection names as the primary API identifier, not UUIDs. This matches the qdrant-client library design.
|
|
1497
|
+
|
|
1498
|
+
documentation:
|
|
1499
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1500
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1501
|
+
ticket: OMN-1142
|
|
1502
|
+
- file_pattern: 'model_qdrant_search_payload\.py'
|
|
1503
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1504
|
+
reason: >
|
|
1505
|
+
collection_name is a Qdrant collection identifier (e.g., 'embeddings', 'documents'). Qdrant uses string collection names as the primary API identifier, not UUIDs. This matches the qdrant-client library design.
|
|
1506
|
+
|
|
1507
|
+
documentation:
|
|
1508
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1509
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1510
|
+
ticket: OMN-1142
|
|
1511
|
+
- file_pattern: 'model_qdrant_delete_payload\.py'
|
|
1512
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1513
|
+
reason: >
|
|
1514
|
+
collection_name is a Qdrant collection identifier (e.g., 'embeddings', 'documents'). Qdrant uses string collection names as the primary API identifier, not UUIDs. This matches the qdrant-client library design.
|
|
1515
|
+
|
|
1516
|
+
documentation:
|
|
1517
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1518
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1519
|
+
ticket: OMN-1142
|
|
1520
|
+
# ==========================================================================
|
|
1521
|
+
# Projector Schema Model Exemptions (OMN-1168)
|
|
1522
|
+
# ==========================================================================
|
|
1523
|
+
# table_name is a standard database identifier, not an entity reference.
|
|
1524
|
+
# This pattern is ubiquitous in database-related models.
|
|
1525
|
+
# NOTE: Projector models are temporarily in omnibase_infra until omnibase_core
|
|
1526
|
+
# provides canonical projector model types.
|
|
1527
|
+
- file_pattern: 'model_projector_schema\.py'
|
|
1528
|
+
violation_pattern: "Field 'table_name' might reference an entity"
|
|
1529
|
+
reason: >
|
|
1530
|
+
table_name is a PostgreSQL table identifier (e.g., 'node_registrations'), not an entity reference. Standard database schema pattern. Note: Projector models are temporarily located in omnibase_infra until omnibase_core provides canonical projector model types.
|
|
1531
|
+
|
|
1532
|
+
documentation:
|
|
1533
|
+
- PostgreSQL CREATE TABLE syntax
|
|
1534
|
+
- src/omnibase_infra/schemas/schema_registration_projection.sql (example usage)
|
|
1535
|
+
- src/omnibase_infra/models/projectors/model_projector_schema.py (ModelProjectorSchema defines table_name as identifier, temporary location in omnibase_infra)
|
|
1536
|
+
ticket: OMN-1168
|
|
1537
|
+
# ==========================================================================
|
|
1538
|
+
# SecretResolver Exemptions (OMN-764)
|
|
1539
|
+
# ==========================================================================
|
|
1540
|
+
# SecretResolver is a centralized secret resolution service with cohesive
|
|
1541
|
+
# functionality: sync/async resolution, caching, introspection, and refresh.
|
|
1542
|
+
# The 18 methods form a complete API for secret management:
|
|
1543
|
+
# - Primary API (4): get_secret, get_secrets, get_secret_async, get_secrets_async
|
|
1544
|
+
# - Cache management (3): refresh, refresh_all, get_cache_stats
|
|
1545
|
+
# - Introspection (2): list_configured_secrets, get_source_info
|
|
1546
|
+
# - Internal helpers (9): resolution, caching, path conversion
|
|
1547
|
+
- file_pattern: 'secret_resolver\.py'
|
|
1548
|
+
class_pattern: "Class 'SecretResolver'"
|
|
1549
|
+
violation_pattern: 'has \d+ methods'
|
|
1550
|
+
reason: >
|
|
1551
|
+
SecretResolver provides centralized secret resolution with sync/async APIs, caching with TTL, and safe introspection. The 18 methods are cohesive: 4 primary API methods, 3 cache management, 2 introspection, and 9 internal helpers. Splitting would fragment a unified secret management interface.
|
|
1552
|
+
|
|
1553
|
+
documentation:
|
|
1554
|
+
- docs/patterns/secret_resolver.md
|
|
1555
|
+
- CLAUDE.md (Infrastructure Patterns - SecretResolver)
|
|
1556
|
+
ticket: OMN-764
|
|
1557
|
+
# logical_name is a secret identifier using dotted path convention (e.g., "database.postgres.password")
|
|
1558
|
+
# It is NOT an entity reference - it's a lookup key for secret resolution.
|
|
1559
|
+
- file_pattern: 'model_secret_source_info\.py'
|
|
1560
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1561
|
+
reason: >
|
|
1562
|
+
logical_name is a secret identifier using dotted path convention (e.g., "database.postgres.password"), not an entity reference. It's a lookup key for the SecretResolver, similar to how env var names or Vault paths identify secrets.
|
|
1563
|
+
|
|
1564
|
+
documentation:
|
|
1565
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1566
|
+
ticket: OMN-764
|
|
1567
|
+
- file_pattern: 'model_secret_mapping\.py'
|
|
1568
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1569
|
+
reason: >
|
|
1570
|
+
logical_name is a secret identifier using dotted path convention (e.g., "database.postgres.password"), not an entity reference. It's a lookup key for mapping secrets to their sources.
|
|
1571
|
+
|
|
1572
|
+
documentation:
|
|
1573
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1574
|
+
ticket: OMN-764
|
|
1575
|
+
- file_pattern: 'model_cached_secret\.py'
|
|
1576
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1577
|
+
reason: >
|
|
1578
|
+
logical_name is a secret identifier using dotted path convention (e.g., "database.postgres.password"), not an entity reference. It's stored in the cache to track which secret this cached value represents.
|
|
1579
|
+
|
|
1580
|
+
documentation:
|
|
1581
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1582
|
+
ticket: OMN-764
|
|
1583
|
+
# ==========================================================================
|
|
1584
|
+
# Observability Layer Exemptions (OMN-767)
|
|
1585
|
+
# ==========================================================================
|
|
1586
|
+
# The observability layer implements hot-path sinks and hooks that require
|
|
1587
|
+
# comprehensive interfaces for metrics, logging, and timing operations.
|
|
1588
|
+
# Per CLAUDE.md "Handlers own lifecycle, sinks own hot path" principle.
|
|
1589
|
+
- file_pattern: 'sink_logging_structured\.py'
|
|
1590
|
+
class_pattern: "Class 'SinkLoggingStructured'"
|
|
1591
|
+
violation_pattern: 'has \d+ methods'
|
|
1592
|
+
reason: >
|
|
1593
|
+
Hot-path logging sink requires comprehensive interface for ProtocolHotPathLoggingSink compliance: emit(), flush(), buffer management, and output formatting. Methods are protocol-mandated.
|
|
1594
|
+
|
|
1595
|
+
documentation:
|
|
1596
|
+
- CLAUDE.md (Observability Layer - Handlers own lifecycle, sinks own hot path)
|
|
1597
|
+
ticket: OMN-767
|
|
1598
|
+
- file_pattern: 'hook_observability\.py'
|
|
1599
|
+
class_pattern: "Class 'HookObservability'"
|
|
1600
|
+
violation_pattern: 'has \d+ methods'
|
|
1601
|
+
reason: >
|
|
1602
|
+
Pipeline observability hook requires comprehensive interface for cross-cutting concerns: before/after operation tracking, metrics integration, context management, retry tracking, and circuit breaker state changes.
|
|
1603
|
+
|
|
1604
|
+
documentation:
|
|
1605
|
+
- CLAUDE.md (Observability Layer - Handlers own lifecycle, sinks own hot path)
|
|
1606
|
+
ticket: OMN-767
|
|
1607
|
+
- file_pattern: 'model_metrics_handler_config\.py'
|
|
1608
|
+
violation_pattern: "Field 'job_name' might reference an entity"
|
|
1609
|
+
reason: >
|
|
1610
|
+
job_name is a Prometheus Pushgateway configuration value (human-readable string identifier), not an entity reference. It follows Prometheus naming conventions.
|
|
1611
|
+
|
|
1612
|
+
documentation:
|
|
1613
|
+
- Prometheus Pushgateway documentation
|
|
1614
|
+
ticket: OMN-767
|
|
1615
|
+
# ==========================================================================
|
|
1616
|
+
# BindingConfigResolver Exemptions (OMN-765)
|
|
1617
|
+
# ==========================================================================
|
|
1618
|
+
# BindingConfigResolver is a centralized configuration resolution service with
|
|
1619
|
+
# cohesive functionality: sync/async resolution, multi-source support, caching,
|
|
1620
|
+
# and environment overrides. Similar to SecretResolver, the methods form a
|
|
1621
|
+
# complete API for configuration management:
|
|
1622
|
+
# - Primary API (4): resolve, resolve_async, resolve_many, resolve_many_async
|
|
1623
|
+
# - Cache management (4): invalidate, invalidate_all, get_cache_stats, cleanup
|
|
1624
|
+
# - Internal helpers (13): source loading, env overrides, vault refs, validation
|
|
1625
|
+
- file_pattern: 'binding_config_resolver\.py'
|
|
1626
|
+
class_pattern: "Class 'BindingConfigResolver'"
|
|
1627
|
+
violation_pattern: 'has \d+ methods'
|
|
1628
|
+
reason: >
|
|
1629
|
+
BindingConfigResolver provides centralized configuration resolution with sync/async APIs, TTL-based caching, and multi-source support (file, env, vault). Similar to SecretResolver, the 21 methods are cohesive: 4 primary resolution API methods, 4 cache management, and 13 internal helpers for source loading, environment overrides, vault reference resolution, and validation. Splitting would fragment a unified configuration management interface.
|
|
1630
|
+
|
|
1631
|
+
documentation:
|
|
1632
|
+
- docs/patterns/binding_config_resolver.md
|
|
1633
|
+
ticket: OMN-765
|
|
1634
|
+
# Architecture validator exemptions
|
|
1635
|
+
# These handle one-model-per-file violations for domain-grouped protocols
|
|
1636
|
+
architecture_exemptions:
|
|
1637
|
+
# ==========================================================================
|
|
1638
|
+
# Contract Linter Models Exemption (PR #57)
|
|
1639
|
+
# ==========================================================================
|
|
1640
|
+
# linter_contract.py contains domain-grouped validation models and enums
|
|
1641
|
+
# that are cohesive and always used together. These define the complete
|
|
1642
|
+
# interface for contract linting results.
|
|
1643
|
+
- file_pattern: 'validation/linter_contract\.py'
|
|
1644
|
+
violation_pattern: '\d+ models in one file'
|
|
1645
|
+
reason: >
|
|
1646
|
+
Domain-grouped validation result models for contract linting. ModelContractViolation and ModelContractLintResult define the complete interface for contract validation results. Per CLAUDE.md domain-grouping convention for cohesive models that are always used together.
|
|
1647
|
+
|
|
1648
|
+
documentation:
|
|
1649
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1650
|
+
- docs/validation/validator_reference.md
|
|
1651
|
+
ticket: PR-57
|
|
1652
|
+
- file_pattern: 'validation/linter_contract\.py'
|
|
1653
|
+
violation_pattern: 'Mixed types in one file'
|
|
1654
|
+
reason: >
|
|
1655
|
+
Contract linter module contains cohesive types (enum + models) for validation results. EnumContractViolationSeverity is tightly coupled with ModelContractViolation and ModelContractLintResult.
|
|
1656
|
+
|
|
1657
|
+
documentation:
|
|
1658
|
+
- CLAUDE.md (Protocol File Naming)
|
|
1659
|
+
- docs/validation/validator_reference.md
|
|
1660
|
+
ticket: PR-57
|
|
1661
|
+
# ==========================================================================
|
|
1662
|
+
# Domain-Grouped Protocol Exemptions (CLAUDE.md Convention)
|
|
1663
|
+
# ==========================================================================
|
|
1664
|
+
# Per CLAUDE.md "Protocol File Naming" section:
|
|
1665
|
+
# "Domain-grouped protocols: Use protocols.py when multiple cohesive protocols
|
|
1666
|
+
# belong to a specific domain or node module"
|
|
1667
|
+
- file_pattern: 'nodes/node_registration_orchestrator/protocols\.py'
|
|
1668
|
+
violation_pattern: '\d+ protocols in one file'
|
|
1669
|
+
reason: >
|
|
1670
|
+
Domain-grouped protocols for registration orchestrator workflow. ProtocolReducer and ProtocolEffect define the complete interface for the reducer-effect pattern in node registration. Per CLAUDE.md convention.
|
|
1671
|
+
|
|
1672
|
+
Architectural documentation included in module: - Concurrency safety requirements (lines 13-24): Implementations MUST be coroutine-safe - Error sanitization guidelines (lines 26-52): NEVER include credentials in errors - Protocol contracts with examples in docstrings
|
|
1673
|
+
|
|
1674
|
+
Full architectural documentation: - Node architecture: docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md - Protocol design: docs/architecture/NODE_REGISTRATION_ORCHESTRATOR_PROTOCOLS.md - Node README: src/omnibase_infra/nodes/node_registration_orchestrator/README.md
|
|
1675
|
+
|
|
1676
|
+
documentation:
|
|
1677
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1678
|
+
- docs/architecture/NODE_REGISTRATION_ORCHESTRATOR_PROTOCOLS.md
|
|
1679
|
+
ticket: OMN-888
|
|
1680
|
+
# ==========================================================================
|
|
1681
|
+
# ServiceTimeoutEmitter Models Exemption (OMN-932)
|
|
1682
|
+
# ==========================================================================
|
|
1683
|
+
# service_timeout_emitter.py contains domain-grouped models for timeout emission:
|
|
1684
|
+
# - ModelTimeoutEmissionResult: Result of timeout emission processing
|
|
1685
|
+
# - ModelTimeoutEmissionConfig: Configuration for the emitter
|
|
1686
|
+
# These are tightly coupled and always used together.
|
|
1687
|
+
- file_pattern: 'services/service_timeout_emitter\.py'
|
|
1688
|
+
violation_pattern: '\d+ models in one file'
|
|
1689
|
+
reason: >
|
|
1690
|
+
Domain-grouped models for timeout emission. ModelTimeoutEmissionResult and ModelTimeoutEmissionConfig define the complete interface for the ServiceTimeoutEmitter. Per CLAUDE.md domain-grouping convention for cohesive models that are always used together.
|
|
1691
|
+
|
|
1692
|
+
documentation:
|
|
1693
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1694
|
+
- docs/patterns/timeout_scanner_emitter.md
|
|
1695
|
+
ticket: OMN-932
|
|
1696
|
+
# These handle complex union type violations
|
|
1697
|
+
union_exemptions:
|
|
1698
|
+
# ==========================================================================
|
|
1699
|
+
# ModelNodeCapabilities Config Field Exemption
|
|
1700
|
+
# ==========================================================================
|
|
1701
|
+
# Design Doc: CLAUDE.md "Type Annotation Conventions" section - Union patterns
|
|
1702
|
+
- file_pattern: 'model_node_capabilities\.py'
|
|
1703
|
+
violation_pattern: 'Union with 4\+ primitive types.*bool.*float.*int.*str'
|
|
1704
|
+
reason: >
|
|
1705
|
+
The config field uses dict[str, int | str | bool | float] for nested configuration values. This is a standard JSON-like config pattern where values can be any primitive type. Creating a ModelConfigValue wrapper would add unnecessary complexity without real benefit for this infrastructure domain.
|
|
1706
|
+
|
|
1707
|
+
documentation:
|
|
1708
|
+
- CLAUDE.md (Type Annotation Conventions - Union patterns)
|
|
1709
|
+
- Standard JSON config pattern (RFC 8259)
|
|
1710
|
+
ticket: null
|