omnibase_infra 0.2.6__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/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -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 +132 -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_consumer_group_purpose.py +92 -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 +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -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_kafka_acks.py +99 -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 +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -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 +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -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 +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -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 +693 -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/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -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 +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -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 +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -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 +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -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 +922 -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 +1051 -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 +109 -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/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -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 +2670 -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 +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -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 +330 -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 +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -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_materialized_dispatch.py +141 -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 +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -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/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -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 +591 -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 +68 -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_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -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 +49 -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 +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -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 +57 -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 +203 -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 +106 -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/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -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/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -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 +482 -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 +694 -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 +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -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 +220 -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 +112 -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 +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -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 +417 -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 +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -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 +1138 -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 +449 -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 +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -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 +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -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/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -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_contract_load_result.py +224 -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 +229 -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_notification_config.py +171 -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_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -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_security_config.py +109 -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/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -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 +1330 -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 +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -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 +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -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/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -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 +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -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 +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -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_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -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 +1514 -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 +2033 -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 +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,2033 @@
|
|
|
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
|
+
# ModelRuntimeContractConfig Exemptions (OMN-1519)
|
|
93
|
+
# ==========================================================================
|
|
94
|
+
# Data model with cohesive accessor properties for querying loaded contracts.
|
|
95
|
+
# All methods serve same purpose: querying contract_results collection.
|
|
96
|
+
# Properties: all_successful, success_rate, successful_results, failed_results,
|
|
97
|
+
# handler_routing_configs, operation_bindings_configs, error_messages
|
|
98
|
+
# Methods: get_routing_for_contract, get_bindings_for_contract, __bool__, __str__
|
|
99
|
+
- file_pattern: 'model_runtime_contract_config\.py'
|
|
100
|
+
class_pattern: "Class 'ModelRuntimeContractConfig'"
|
|
101
|
+
violation_pattern: 'has \d+ methods'
|
|
102
|
+
reason: >
|
|
103
|
+
Cohesive data model with accessor properties that all query the same contract_results collection. Properties provide convenient typed access to loaded configs, success metrics, and error details. Breaking into smaller classes would reduce cohesion without meaningful benefit.
|
|
104
|
+
|
|
105
|
+
documentation:
|
|
106
|
+
- OMN-1519 PR description
|
|
107
|
+
ticket: OMN-1519
|
|
108
|
+
# ==========================================================================
|
|
109
|
+
# EventBusKafka Exemptions (OMN-934, OMN-1305)
|
|
110
|
+
# ==========================================================================
|
|
111
|
+
# Event bus pattern requires many methods for lifecycle (start/stop/health),
|
|
112
|
+
# pub/sub (subscribe/unsubscribe/publish), circuit breaker, protocol compatibility.
|
|
113
|
+
# Complexity managed through mixin composition (MixinKafkaDlq, MixinKafkaBroadcast).
|
|
114
|
+
# See: event_bus_kafka.py class docstring, CLAUDE.md "Accepted Pattern Exceptions"
|
|
115
|
+
- file_pattern: 'event_bus_kafka\.py'
|
|
116
|
+
class_pattern: "Class 'EventBusKafka'"
|
|
117
|
+
violation_pattern: 'has \d+ methods'
|
|
118
|
+
reason: >
|
|
119
|
+
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.
|
|
120
|
+
|
|
121
|
+
documentation:
|
|
122
|
+
- CLAUDE.md (Accepted Pattern Exceptions - EventBusKafka Complexity)
|
|
123
|
+
- docs/patterns/circuit_breaker_implementation.md
|
|
124
|
+
ticket: OMN-1305
|
|
125
|
+
- file_pattern: 'event_bus_kafka\.py'
|
|
126
|
+
method_pattern: "Function '__init__'"
|
|
127
|
+
violation_pattern: 'has \d+ parameters'
|
|
128
|
+
reason: >
|
|
129
|
+
Configuration managed via ModelKafkaEventBusConfig. Init requires config model parameter.
|
|
130
|
+
|
|
131
|
+
documentation:
|
|
132
|
+
- CLAUDE.md (Accepted Pattern Exceptions - EventBusKafka Complexity)
|
|
133
|
+
ticket: OMN-1305
|
|
134
|
+
# ==========================================================================
|
|
135
|
+
# Protocol Plugin Architecture Exemptions
|
|
136
|
+
# ==========================================================================
|
|
137
|
+
# The 'execute' method name is a standard plugin architecture pattern.
|
|
138
|
+
# It's intentionally generic as it's the protocol-defined entry point.
|
|
139
|
+
# Design Doc: CLAUDE.md "ONEX Architecture" section - Protocol-based plugin execution pattern
|
|
140
|
+
- file_pattern: 'protocol_plugin_compute\.py'
|
|
141
|
+
violation_pattern: "Function name 'execute' is too generic"
|
|
142
|
+
reason: Standard plugin architecture pattern - execute is the protocol-defined entry point.
|
|
143
|
+
documentation:
|
|
144
|
+
- CLAUDE.md (ONEX Architecture - Protocol Resolution section)
|
|
145
|
+
ticket: null
|
|
146
|
+
- file_pattern: 'plugin_compute_base\.py'
|
|
147
|
+
violation_pattern: "Function name 'execute' is too generic"
|
|
148
|
+
reason: Base class implements protocol pattern - execute is the standard entry point.
|
|
149
|
+
documentation:
|
|
150
|
+
- CLAUDE.md (ONEX Architecture - Protocol Resolution section)
|
|
151
|
+
ticket: null
|
|
152
|
+
# ==========================================================================
|
|
153
|
+
# RuntimeHostProcess Exemptions (OMN-756)
|
|
154
|
+
# ==========================================================================
|
|
155
|
+
# Central coordinator class that legitimately requires multiple methods for:
|
|
156
|
+
# - Lifecycle management (start, stop, health_check)
|
|
157
|
+
# - Message handling (_on_message, _handle_envelope)
|
|
158
|
+
# - Graceful shutdown (shutdown_ready, drain logic)
|
|
159
|
+
# - Handler management (register_handler, get_handler)
|
|
160
|
+
- file_pattern: 'service_runtime_host_process\.py'
|
|
161
|
+
class_pattern: "Class 'RuntimeHostProcess'"
|
|
162
|
+
violation_pattern: 'has \d+ methods'
|
|
163
|
+
reason: >
|
|
164
|
+
Central coordinator pattern requires lifecycle management, message handling, graceful shutdown, and handler management methods.
|
|
165
|
+
|
|
166
|
+
documentation:
|
|
167
|
+
- docs/architecture/RUNTIME_HOST_IMPLEMENTATION_PLAN.md
|
|
168
|
+
- docs/adr/ADR-001-graceful-shutdown-drain-period.md
|
|
169
|
+
ticket: OMN-756
|
|
170
|
+
- file_pattern: 'service_runtime_host_process\.py'
|
|
171
|
+
method_pattern: "Function '__init__'"
|
|
172
|
+
violation_pattern: 'has \d+ parameters'
|
|
173
|
+
reason: >
|
|
174
|
+
Central coordinator requires multiple configuration parameters: event_bus, input_topic, output_topic, config, handler_registry.
|
|
175
|
+
|
|
176
|
+
documentation:
|
|
177
|
+
- docs/architecture/RUNTIME_HOST_IMPLEMENTATION_PLAN.md
|
|
178
|
+
ticket: OMN-756
|
|
179
|
+
# ==========================================================================
|
|
180
|
+
# PolicyRegistry Exemptions
|
|
181
|
+
# ==========================================================================
|
|
182
|
+
# Domain registry pattern requires comprehensive policy management operations.
|
|
183
|
+
# Design Doc: docs/patterns/container_dependency_injection.md - Registry patterns
|
|
184
|
+
- file_pattern: 'policy_registry\.py'
|
|
185
|
+
class_pattern: "Class 'PolicyRegistry'"
|
|
186
|
+
violation_pattern: 'has \d+ methods'
|
|
187
|
+
reason: >
|
|
188
|
+
Central registry pattern requires CRUD operations (register, get, update, remove), query operations (list, filter, search), and lifecycle operations (enable, disable, validate).
|
|
189
|
+
|
|
190
|
+
documentation:
|
|
191
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
192
|
+
- CLAUDE.md (Container-Based Dependency Injection section)
|
|
193
|
+
ticket: null
|
|
194
|
+
- file_pattern: 'registry_policy\.py'
|
|
195
|
+
method_pattern: "Function 'register_policy'"
|
|
196
|
+
violation_pattern: 'has \d+ parameters'
|
|
197
|
+
reason: Policy registration requires multiple fields for complete policy definition. ModelPolicyRegistration is available as the preferred API for new code.
|
|
198
|
+
documentation:
|
|
199
|
+
- docs/patterns/container_dependency_injection.md
|
|
200
|
+
ticket: null
|
|
201
|
+
- file_pattern: 'registry_policy\.py'
|
|
202
|
+
class_pattern: "Class 'RegistryPolicy'"
|
|
203
|
+
violation_pattern: 'has \d+ methods'
|
|
204
|
+
reason: >
|
|
205
|
+
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.
|
|
206
|
+
|
|
207
|
+
documentation:
|
|
208
|
+
- docs/patterns/container_dependency_injection.md
|
|
209
|
+
ticket: OMN-1305
|
|
210
|
+
# ==========================================================================
|
|
211
|
+
# Policy ID Exemptions (OMN-812)
|
|
212
|
+
# ==========================================================================
|
|
213
|
+
# policy_id is intentionally a human-readable string identifier (e.g., 'exponential_backoff'),
|
|
214
|
+
# NOT a UUID. The _id suffix triggers false positive UUID suggestions.
|
|
215
|
+
- file_pattern: 'model_policy_key\.py'
|
|
216
|
+
violation_pattern: "Field 'policy_id' should use UUID"
|
|
217
|
+
reason: >
|
|
218
|
+
policy_id is a human-readable string identifier (e.g., 'exponential_backoff'), not a UUID. The _id suffix triggers false positive.
|
|
219
|
+
|
|
220
|
+
documentation:
|
|
221
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
222
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
223
|
+
ticket: OMN-812
|
|
224
|
+
- file_pattern: 'model_policy_registration\.py'
|
|
225
|
+
violation_pattern: "Field 'policy_id' should use UUID"
|
|
226
|
+
reason: Same as ModelPolicyKey - semantic identifier, not UUID.
|
|
227
|
+
documentation:
|
|
228
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
229
|
+
ticket: OMN-812
|
|
230
|
+
# ==========================================================================
|
|
231
|
+
# Infrastructure Handler Exemptions (OMN-1092)
|
|
232
|
+
# ==========================================================================
|
|
233
|
+
# Infrastructure handlers require multiple methods for: connection lifecycle,
|
|
234
|
+
# operation dispatching, health checks, and protocol-specific operations.
|
|
235
|
+
- file_pattern: 'handler_consul\.py'
|
|
236
|
+
class_pattern: "Class 'HandlerConsul'"
|
|
237
|
+
violation_pattern: 'has \d+ methods'
|
|
238
|
+
reason: >
|
|
239
|
+
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.
|
|
240
|
+
|
|
241
|
+
documentation:
|
|
242
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
243
|
+
- CLAUDE.md (Infrastructure Patterns - Adapter Pattern)
|
|
244
|
+
ticket: OMN-1092
|
|
245
|
+
# ==========================================================================
|
|
246
|
+
# Projector Schema Model Exemptions (OMN-1168)
|
|
247
|
+
# ==========================================================================
|
|
248
|
+
# ModelProjectorSchema requires multiple methods for SQL generation, validation,
|
|
249
|
+
# and schema introspection operations.
|
|
250
|
+
- file_pattern: 'model_projector_schema\.py'
|
|
251
|
+
class_pattern: "Class 'ModelProjectorSchema'"
|
|
252
|
+
violation_pattern: 'has \d+ methods'
|
|
253
|
+
reason: >
|
|
254
|
+
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.
|
|
255
|
+
|
|
256
|
+
documentation:
|
|
257
|
+
- src/omnibase_infra/models/projectors/model_projector_schema.py (class docstring)
|
|
258
|
+
ticket: OMN-1168
|
|
259
|
+
# ==========================================================================
|
|
260
|
+
# Execution Shape Validator Exemptions (OMN-958)
|
|
261
|
+
# ==========================================================================
|
|
262
|
+
- file_pattern: 'enum_handler_type\.py'
|
|
263
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
264
|
+
reason: >
|
|
265
|
+
EnumHandlerType defines ONEX handler architectural roles (InfraHandler, NodeHandler, etc.) which are architectural concepts, not implementation classes.
|
|
266
|
+
|
|
267
|
+
documentation:
|
|
268
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
269
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
270
|
+
ticket: OMN-1092
|
|
271
|
+
- file_pattern: 'enum_handler_type_category\.py'
|
|
272
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
273
|
+
reason: >
|
|
274
|
+
EnumHandlerTypeCategory defines ONEX handler behavioral classification (Compute, Effect, NondeterministicCompute) which are architectural concepts for policy envelopes, not implementation classes.
|
|
275
|
+
|
|
276
|
+
documentation:
|
|
277
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
278
|
+
- CLAUDE.md (ONEX Architecture - Handler Classification)
|
|
279
|
+
ticket: OMN-1092
|
|
280
|
+
- file_pattern: 'validator_execution_shape\.py'
|
|
281
|
+
class_pattern: "Class name 'ModelDetectedNodeInfo'"
|
|
282
|
+
violation_pattern: "contains anti-pattern 'Model'"
|
|
283
|
+
reason: >
|
|
284
|
+
ModelDetectedNodeInfo is a validation data class for describing detected node information during AST analysis - follows Model* naming convention.
|
|
285
|
+
|
|
286
|
+
documentation:
|
|
287
|
+
- docs/validation/validator_reference.md
|
|
288
|
+
ticket: OMN-958
|
|
289
|
+
- file_pattern: 'validator_execution_shape\.py'
|
|
290
|
+
class_pattern: "Class 'ExecutionShapeValidator'"
|
|
291
|
+
violation_pattern: 'has \d+ methods'
|
|
292
|
+
reason: >
|
|
293
|
+
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.
|
|
294
|
+
|
|
295
|
+
documentation:
|
|
296
|
+
- docs/as_is/02_NODE_EXECUTION_SHAPES.md
|
|
297
|
+
- docs/validation/validator_reference.md
|
|
298
|
+
ticket: OMN-958
|
|
299
|
+
# ==========================================================================
|
|
300
|
+
# Any Type Validator Exemptions (OMN-1276)
|
|
301
|
+
# ==========================================================================
|
|
302
|
+
# AST-based validator for Any type usage enforcement. The class requires
|
|
303
|
+
# multiple visitor methods and helper methods for comprehensive detection.
|
|
304
|
+
- file_pattern: 'validator_any_type\.py'
|
|
305
|
+
class_pattern: "Class 'AnyTypeDetector'"
|
|
306
|
+
violation_pattern: 'has \d+ methods'
|
|
307
|
+
reason: >
|
|
308
|
+
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.
|
|
309
|
+
|
|
310
|
+
documentation:
|
|
311
|
+
- docs/decisions/adr-any-type-pydantic-workaround.md
|
|
312
|
+
- CLAUDE.md (Any Type CI Enforcement)
|
|
313
|
+
ticket: OMN-1276
|
|
314
|
+
- file_pattern: 'model_any_type_violation\.py'
|
|
315
|
+
violation_pattern: "Field 'context_name' might reference an entity"
|
|
316
|
+
reason: >
|
|
317
|
+
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.
|
|
318
|
+
|
|
319
|
+
documentation:
|
|
320
|
+
- docs/decisions/adr-any-type-pydantic-workaround.md
|
|
321
|
+
ticket: OMN-1276
|
|
322
|
+
# ==========================================================================
|
|
323
|
+
# RuntimeShapeValidator Exemptions
|
|
324
|
+
# ==========================================================================
|
|
325
|
+
# Design Doc: docs/patterns/error_handling_patterns.md - Validation error patterns
|
|
326
|
+
- file_pattern: 'validator_runtime_shape\.py'
|
|
327
|
+
method_pattern: "Function 'validate_handler_output'"
|
|
328
|
+
violation_pattern: 'has \d+ parameters'
|
|
329
|
+
reason: >
|
|
330
|
+
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.
|
|
331
|
+
|
|
332
|
+
documentation:
|
|
333
|
+
- docs/patterns/error_handling_patterns.md (Validation error hierarchy)
|
|
334
|
+
- CLAUDE.md (ONEX Architecture - Contract-Driven section)
|
|
335
|
+
ticket: null
|
|
336
|
+
- file_pattern: 'validator_runtime_shape\.py'
|
|
337
|
+
method_pattern: "Function 'validate_and_raise'"
|
|
338
|
+
violation_pattern: 'has \d+ parameters'
|
|
339
|
+
reason: Same rationale as validate_handler_output - requires distinct context params.
|
|
340
|
+
documentation:
|
|
341
|
+
- docs/patterns/error_handling_patterns.md
|
|
342
|
+
ticket: null
|
|
343
|
+
# ==========================================================================
|
|
344
|
+
# MixinNodeIntrospection Exemptions (OMN-958)
|
|
345
|
+
# ==========================================================================
|
|
346
|
+
- file_pattern: 'mixin_node_introspection\.py'
|
|
347
|
+
method_pattern: "Function 'initialize_introspection'"
|
|
348
|
+
violation_pattern: 'has \d+ parameters'
|
|
349
|
+
reason: >
|
|
350
|
+
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.
|
|
351
|
+
|
|
352
|
+
documentation:
|
|
353
|
+
- CLAUDE.md (Node Introspection Security Considerations)
|
|
354
|
+
ticket: OMN-958
|
|
355
|
+
- file_pattern: 'mixin_node_introspection\.py'
|
|
356
|
+
class_pattern: "Class 'MixinNodeIntrospection'"
|
|
357
|
+
violation_pattern: 'has \d+ methods'
|
|
358
|
+
reason: >
|
|
359
|
+
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).
|
|
360
|
+
|
|
361
|
+
documentation:
|
|
362
|
+
- CLAUDE.md (Node Introspection Security Considerations)
|
|
363
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
364
|
+
ticket: OMN-958
|
|
365
|
+
# ==========================================================================
|
|
366
|
+
# Message Dispatch Engine Exemptions (OMN-934, OMN-983)
|
|
367
|
+
# ==========================================================================
|
|
368
|
+
# Central dispatch coordinator pattern requires comprehensive routing capabilities.
|
|
369
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
370
|
+
class_pattern: "Class 'MessageDispatchEngine'"
|
|
371
|
+
violation_pattern: 'has \d+ methods'
|
|
372
|
+
reason: >
|
|
373
|
+
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.
|
|
374
|
+
|
|
375
|
+
documentation:
|
|
376
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
377
|
+
- docs/as_is/05_RUNTIME_DISPATCH_SHAPES.md
|
|
378
|
+
ticket: OMN-934
|
|
379
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
380
|
+
method_pattern: "Function '_build_log_context'"
|
|
381
|
+
violation_pattern: 'has \d+ parameters'
|
|
382
|
+
reason: >
|
|
383
|
+
Log context builder intentionally takes many optional parameters to build structured log context. Each parameter is a distinct log field.
|
|
384
|
+
|
|
385
|
+
documentation:
|
|
386
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
387
|
+
ticket: OMN-934
|
|
388
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
389
|
+
method_pattern: "Function '__init__'"
|
|
390
|
+
violation_pattern: 'has \d+ parameters'
|
|
391
|
+
reason: >
|
|
392
|
+
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.
|
|
393
|
+
|
|
394
|
+
documentation:
|
|
395
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
396
|
+
ticket: OMN-990
|
|
397
|
+
- file_pattern: 'service_message_dispatch_engine\.py'
|
|
398
|
+
method_pattern: "Function 'register_dispatcher'"
|
|
399
|
+
violation_pattern: 'has \d+ parameters'
|
|
400
|
+
reason: >
|
|
401
|
+
Dispatcher registration requires multiple parameters for complete routing configuration: dispatcher, category, node_kind, topic_patterns, priority. These are distinct routing configuration fields.
|
|
402
|
+
|
|
403
|
+
documentation:
|
|
404
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
405
|
+
ticket: OMN-990
|
|
406
|
+
# ==========================================================================
|
|
407
|
+
# RegistryDispatcher Exemptions (OMN-934)
|
|
408
|
+
# ==========================================================================
|
|
409
|
+
- file_pattern: 'registry_dispatcher\.py'
|
|
410
|
+
class_pattern: "Class 'RegistryDispatcher'"
|
|
411
|
+
violation_pattern: 'has \d+ methods'
|
|
412
|
+
reason: >
|
|
413
|
+
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.
|
|
414
|
+
|
|
415
|
+
documentation:
|
|
416
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
417
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
418
|
+
ticket: OMN-934
|
|
419
|
+
# ==========================================================================
|
|
420
|
+
# Dispatch Model Semantic Identifier Exemptions (OMN-983)
|
|
421
|
+
# ==========================================================================
|
|
422
|
+
# dispatcher_id, route_id are semantic identifiers (like policy_id), NOT UUIDs.
|
|
423
|
+
# They are human-readable strings that identify dispatchers/routes by name.
|
|
424
|
+
- file_pattern: 'model_dispatcher_registration\.py'
|
|
425
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
426
|
+
reason: >
|
|
427
|
+
dispatcher_id is a human-readable semantic identifier (e.g., "kafka-main-dispatcher"), not a UUID. Similar to policy_id pattern.
|
|
428
|
+
|
|
429
|
+
documentation:
|
|
430
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
431
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
432
|
+
ticket: OMN-983
|
|
433
|
+
- file_pattern: 'model_dispatcher_registration\.py'
|
|
434
|
+
violation_pattern: 'dispatcher_name.*entity'
|
|
435
|
+
reason: >
|
|
436
|
+
dispatcher_name is a display name for the dispatcher, paired with dispatcher_id as the semantic identifier. This follows the ID + display_name pattern.
|
|
437
|
+
|
|
438
|
+
documentation:
|
|
439
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
440
|
+
ticket: OMN-983
|
|
441
|
+
- file_pattern: 'model_dispatcher_metrics\.py'
|
|
442
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
443
|
+
reason: >
|
|
444
|
+
dispatcher_id is a human-readable semantic identifier, not a UUID. Consistent with model_dispatcher_registration.
|
|
445
|
+
|
|
446
|
+
documentation:
|
|
447
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
448
|
+
ticket: OMN-983
|
|
449
|
+
- file_pattern: 'model_dispatch_route\.py'
|
|
450
|
+
violation_pattern: "Field 'route_id' should use UUID"
|
|
451
|
+
reason: >
|
|
452
|
+
route_id is a human-readable semantic identifier (e.g., "default-route"), not a UUID.
|
|
453
|
+
|
|
454
|
+
documentation:
|
|
455
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
456
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
457
|
+
ticket: OMN-983
|
|
458
|
+
- file_pattern: 'model_dispatch_route\.py'
|
|
459
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
460
|
+
reason: >
|
|
461
|
+
dispatcher_id is a human-readable semantic identifier, consistent across dispatch models.
|
|
462
|
+
|
|
463
|
+
documentation:
|
|
464
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
465
|
+
ticket: OMN-983
|
|
466
|
+
- file_pattern: 'model_dispatch_metrics\.py'
|
|
467
|
+
method_pattern: "Function 'record_dispatch'"
|
|
468
|
+
violation_pattern: 'has \d+ parameters'
|
|
469
|
+
reason: >
|
|
470
|
+
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).
|
|
471
|
+
|
|
472
|
+
documentation:
|
|
473
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
474
|
+
ticket: OMN-983
|
|
475
|
+
# ==========================================================================
|
|
476
|
+
# RuntimeScheduler Semantic Identifier Exemptions (OMN-953)
|
|
477
|
+
# ==========================================================================
|
|
478
|
+
# scheduler_id is a human-readable semantic identifier set via environment variable
|
|
479
|
+
# (e.g., "runtime-scheduler-prod-1"), NOT a UUID. Follows same pattern as policy_id
|
|
480
|
+
# and dispatcher_id.
|
|
481
|
+
- file_pattern: 'model_runtime_scheduler_config\.py'
|
|
482
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
483
|
+
reason: >
|
|
484
|
+
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.
|
|
485
|
+
|
|
486
|
+
documentation:
|
|
487
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
488
|
+
ticket: OMN-953
|
|
489
|
+
- file_pattern: 'model_runtime_scheduler_metrics\.py'
|
|
490
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
491
|
+
reason: >
|
|
492
|
+
scheduler_id is a human-readable semantic identifier, consistent with model_runtime_scheduler_config.
|
|
493
|
+
|
|
494
|
+
documentation:
|
|
495
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
496
|
+
ticket: OMN-953
|
|
497
|
+
- file_pattern: 'model_runtime_tick\.py'
|
|
498
|
+
violation_pattern: "Field 'scheduler_id' should use UUID"
|
|
499
|
+
reason: >
|
|
500
|
+
scheduler_id identifies which runtime scheduler instance emitted the tick. Human-readable identifier, consistent across scheduler models.
|
|
501
|
+
|
|
502
|
+
documentation:
|
|
503
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
504
|
+
ticket: OMN-953
|
|
505
|
+
# ==========================================================================
|
|
506
|
+
# TransitionNotificationPublisher publisher_id Exemption (OMN-1139)
|
|
507
|
+
# ==========================================================================
|
|
508
|
+
# publisher_id is a human-readable semantic identifier similar to scheduler_id.
|
|
509
|
+
# It identifies the publisher instance and may be auto-generated or user-specified.
|
|
510
|
+
- file_pattern: 'model_transition_notification_publisher_metrics\.py'
|
|
511
|
+
violation_pattern: "Field 'publisher_id' should use UUID"
|
|
512
|
+
reason: >
|
|
513
|
+
publisher_id is a human-readable semantic identifier (e.g., "transition-publisher-<uuid>") that identifies the publisher instance. Follows the same pattern as scheduler_id.
|
|
514
|
+
|
|
515
|
+
documentation:
|
|
516
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
517
|
+
ticket: OMN-1139
|
|
518
|
+
# ==========================================================================
|
|
519
|
+
# ModelTransitionNotificationOutboxMetrics table_name Exemption (OMN-1139)
|
|
520
|
+
# ==========================================================================
|
|
521
|
+
# table_name is the database table name string, not an entity reference.
|
|
522
|
+
- file_pattern: 'model_transition_notification_outbox_metrics\.py'
|
|
523
|
+
violation_pattern: "Field 'table_name' might reference an entity"
|
|
524
|
+
reason: >
|
|
525
|
+
table_name is the database table name string (e.g., "transition_notification_outbox"), not an entity reference. It identifies the outbox table for metrics reporting and does not require ID + display_name pattern.
|
|
526
|
+
|
|
527
|
+
documentation:
|
|
528
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
529
|
+
ticket: OMN-1139
|
|
530
|
+
# ==========================================================================
|
|
531
|
+
# TransitionNotificationOutbox Method Count Exemption (OMN-1139)
|
|
532
|
+
# ==========================================================================
|
|
533
|
+
# Outbox pattern requires lifecycle (start/stop), storage (store/cleanup),
|
|
534
|
+
# processing (process_pending), and multiple config properties for observability.
|
|
535
|
+
# NOTE: Pattern anchored with src/omnibase_infra/runtime/ prefix to match only
|
|
536
|
+
# the production file, not test files.
|
|
537
|
+
- file_pattern: 'src/omnibase_infra/runtime/transition_notification_outbox\.py'
|
|
538
|
+
class_pattern: "Class 'TransitionNotificationOutbox'"
|
|
539
|
+
violation_pattern: 'has \d+ methods'
|
|
540
|
+
reason: >
|
|
541
|
+
Transactional outbox pattern inherently requires: lifecycle methods (start/stop), storage operations (store/cleanup_processed), processing (process_pending), background loop (_processor_loop), metrics (get_metrics), and configuration properties (table_name, batch_size, poll_interval, is_running, shutdown_timeout, notifications_stored/processed/failed, strict_transaction_mode). Method count is driven by pattern requirements, not poor design.
|
|
542
|
+
|
|
543
|
+
documentation:
|
|
544
|
+
- src/omnibase_infra/schemas/schema_transition_notification_outbox.sql
|
|
545
|
+
ticket: OMN-1139
|
|
546
|
+
# ==========================================================================
|
|
547
|
+
# ServiceTimeoutEmitter/Scanner Naming Exemptions (OMN-1055)
|
|
548
|
+
# ==========================================================================
|
|
549
|
+
# These service classes follow the CLAUDE.md Service<Name> naming convention.
|
|
550
|
+
# Service files use service_<name>.py with Service<Name> class names.
|
|
551
|
+
- file_pattern: 'service_timeout_emitter\.py'
|
|
552
|
+
class_pattern: "Class name 'ServiceTimeoutEmitter'"
|
|
553
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
554
|
+
reason: >
|
|
555
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
556
|
+
|
|
557
|
+
documentation:
|
|
558
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
559
|
+
ticket: OMN-1055
|
|
560
|
+
- file_pattern: 'service_timeout_scanner\.py'
|
|
561
|
+
class_pattern: "Class name 'ServiceTimeoutScanner'"
|
|
562
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
563
|
+
reason: >
|
|
564
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
565
|
+
|
|
566
|
+
documentation:
|
|
567
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
568
|
+
ticket: OMN-1055
|
|
569
|
+
# ==========================================================================
|
|
570
|
+
# ServiceHealth Exemptions (OMN-529)
|
|
571
|
+
# ==========================================================================
|
|
572
|
+
# ServiceHealth follows the CLAUDE.md Service<Name> naming convention and
|
|
573
|
+
# requires multiple __init__ parameters to support dual initialization modes
|
|
574
|
+
# (direct runtime injection and container-based DI).
|
|
575
|
+
- file_pattern: 'service_health\.py'
|
|
576
|
+
class_pattern: "Class name 'ServiceHealth'"
|
|
577
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
578
|
+
reason: >
|
|
579
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
580
|
+
|
|
581
|
+
documentation:
|
|
582
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
583
|
+
ticket: OMN-529
|
|
584
|
+
- file_pattern: 'service_dlq_tracking\.py'
|
|
585
|
+
class_pattern: "Class name 'ServiceDlqTracking'"
|
|
586
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
587
|
+
reason: >
|
|
588
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
589
|
+
|
|
590
|
+
documentation:
|
|
591
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
592
|
+
ticket: OMN-1270
|
|
593
|
+
- file_pattern: 'service_capability_query\.py'
|
|
594
|
+
class_pattern: "Class name 'ServiceCapabilityQuery'"
|
|
595
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
596
|
+
reason: >
|
|
597
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
598
|
+
|
|
599
|
+
documentation:
|
|
600
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
601
|
+
ticket: OMN-1135
|
|
602
|
+
- file_pattern: 'service_node_selector\.py'
|
|
603
|
+
class_pattern: "Class name 'ServiceNodeSelector'"
|
|
604
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
605
|
+
reason: >
|
|
606
|
+
Follows CLAUDE.md Service<Name> naming convention for service classes. Service files use service_<name>.py with Service<Name> class names.
|
|
607
|
+
|
|
608
|
+
documentation:
|
|
609
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
610
|
+
ticket: OMN-1135
|
|
611
|
+
- file_pattern: 'service_snapshot\.py'
|
|
612
|
+
class_pattern: "Class name 'ServiceSnapshot'"
|
|
613
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
614
|
+
reason: >
|
|
615
|
+
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.
|
|
616
|
+
|
|
617
|
+
documentation:
|
|
618
|
+
- CLAUDE.md (File & Class Naming - Service convention)
|
|
619
|
+
ticket: OMN-1246
|
|
620
|
+
- file_pattern: 'service_health\.py'
|
|
621
|
+
method_pattern: "Function '__init__'"
|
|
622
|
+
violation_pattern: 'has \d+ parameters'
|
|
623
|
+
reason: >
|
|
624
|
+
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.
|
|
625
|
+
|
|
626
|
+
documentation:
|
|
627
|
+
- CLAUDE.md (Container-Based Dependency Injection)
|
|
628
|
+
ticket: OMN-529
|
|
629
|
+
# ==========================================================================
|
|
630
|
+
# Consul Service ID Exemptions (OMN-889)
|
|
631
|
+
# ==========================================================================
|
|
632
|
+
# consul_service_id is a Consul-specific identifier that is a user-defined string,
|
|
633
|
+
# NOT a UUID. The Consul API accepts any string as a service ID. This field is
|
|
634
|
+
# named with the 'consul_' prefix to clarify it's a Consul concept.
|
|
635
|
+
- file_pattern: 'model_consul_register_payload\.py'
|
|
636
|
+
violation_pattern: "Field 'consul_service_id' should use UUID"
|
|
637
|
+
reason: >
|
|
638
|
+
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.
|
|
639
|
+
|
|
640
|
+
documentation:
|
|
641
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
642
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
643
|
+
ticket: OMN-889
|
|
644
|
+
- file_pattern: 'model_consul_deregister_payload\.py'
|
|
645
|
+
violation_pattern: "Field 'consul_service_id' should use UUID"
|
|
646
|
+
reason: >
|
|
647
|
+
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.
|
|
648
|
+
|
|
649
|
+
documentation:
|
|
650
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
651
|
+
ticket: OMN-889
|
|
652
|
+
# ==========================================================================
|
|
653
|
+
# MessageTypeRegistry Exemptions (OMN-983)
|
|
654
|
+
# ==========================================================================
|
|
655
|
+
- file_pattern: 'registry_message_type\.py'
|
|
656
|
+
class_pattern: "Class 'RegistryMessageType'"
|
|
657
|
+
violation_pattern: 'has \d+ methods'
|
|
658
|
+
reason: >
|
|
659
|
+
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.
|
|
660
|
+
|
|
661
|
+
documentation:
|
|
662
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
663
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
664
|
+
ticket: OMN-983
|
|
665
|
+
# ==========================================================================
|
|
666
|
+
# Idempotency Store Configuration Exemptions (OMN-945)
|
|
667
|
+
# ==========================================================================
|
|
668
|
+
# table_name is a database configuration field specifying the PostgreSQL table
|
|
669
|
+
# name for storing idempotency records. It is NOT an entity reference.
|
|
670
|
+
- file_pattern: 'model_postgres_idempotency_store_config\.py'
|
|
671
|
+
violation_pattern: "Field 'table_name' might reference an entity"
|
|
672
|
+
reason: >
|
|
673
|
+
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.
|
|
674
|
+
|
|
675
|
+
documentation:
|
|
676
|
+
- docs/patterns/retry_backoff_compensation_strategy.md (Idempotency patterns)
|
|
677
|
+
ticket: OMN-945
|
|
678
|
+
# ==========================================================================
|
|
679
|
+
# RegistryCompute Exemptions (OMN-811)
|
|
680
|
+
# ==========================================================================
|
|
681
|
+
# Central registry pattern for compute plugins follows same patterns as
|
|
682
|
+
# PolicyRegistry, MessageTypeRegistry, and RegistryDispatcher.
|
|
683
|
+
- file_pattern: 'registry_compute\.py'
|
|
684
|
+
class_pattern: "Class 'RegistryCompute'"
|
|
685
|
+
violation_pattern: 'has \d+ methods'
|
|
686
|
+
reason: >
|
|
687
|
+
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.
|
|
688
|
+
|
|
689
|
+
documentation:
|
|
690
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
691
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
692
|
+
ticket: OMN-811
|
|
693
|
+
- file_pattern: 'registry_compute\.py'
|
|
694
|
+
method_pattern: "Function 'register_plugin'"
|
|
695
|
+
violation_pattern: 'has \d+ parameters'
|
|
696
|
+
reason: >
|
|
697
|
+
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.
|
|
698
|
+
|
|
699
|
+
documentation:
|
|
700
|
+
- docs/patterns/container_dependency_injection.md
|
|
701
|
+
ticket: OMN-811
|
|
702
|
+
# ==========================================================================
|
|
703
|
+
# ComputeRegistryError Exemptions (OMN-811)
|
|
704
|
+
# ==========================================================================
|
|
705
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
706
|
+
- file_pattern: 'error_compute_registry\.py'
|
|
707
|
+
method_pattern: "Function '__init__'"
|
|
708
|
+
violation_pattern: 'has \d+ parameters'
|
|
709
|
+
reason: >
|
|
710
|
+
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.
|
|
711
|
+
|
|
712
|
+
documentation:
|
|
713
|
+
- docs/patterns/error_handling_patterns.md
|
|
714
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
715
|
+
ticket: OMN-811
|
|
716
|
+
# ==========================================================================
|
|
717
|
+
# EventBusRegistryError Exemptions (OMN-1276)
|
|
718
|
+
# ==========================================================================
|
|
719
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
720
|
+
- file_pattern: 'error_event_bus_registry\.py'
|
|
721
|
+
method_pattern: "Function '__init__'"
|
|
722
|
+
violation_pattern: 'has \d+ parameters'
|
|
723
|
+
reason: >
|
|
724
|
+
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.
|
|
725
|
+
|
|
726
|
+
documentation:
|
|
727
|
+
- docs/patterns/error_handling_patterns.md
|
|
728
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
729
|
+
ticket: OMN-1276
|
|
730
|
+
# ==========================================================================
|
|
731
|
+
# MessageTypeRegistryError Exemptions (OMN-983)
|
|
732
|
+
# ==========================================================================
|
|
733
|
+
# Error classes require multiple context parameters for comprehensive error reporting.
|
|
734
|
+
- file_pattern: 'error_message_type_registry\.py'
|
|
735
|
+
method_pattern: "Function '__init__'"
|
|
736
|
+
violation_pattern: 'has \d+ parameters'
|
|
737
|
+
reason: >
|
|
738
|
+
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.
|
|
739
|
+
|
|
740
|
+
documentation:
|
|
741
|
+
- docs/patterns/error_handling_patterns.md
|
|
742
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
743
|
+
ticket: OMN-983
|
|
744
|
+
# ==========================================================================
|
|
745
|
+
# Compute Plugin ID Exemptions (OMN-811)
|
|
746
|
+
# ==========================================================================
|
|
747
|
+
# plugin_id is a semantic identifier (e.g., 'json_normalizer'), NOT a UUID.
|
|
748
|
+
# Follows same pattern as policy_id, dispatcher_id, scheduler_id.
|
|
749
|
+
- file_pattern: 'model_compute_key\.py'
|
|
750
|
+
violation_pattern: "Field 'plugin_id' should use UUID"
|
|
751
|
+
reason: >
|
|
752
|
+
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.
|
|
753
|
+
|
|
754
|
+
documentation:
|
|
755
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
756
|
+
- docs/patterns/container_dependency_injection.md
|
|
757
|
+
ticket: OMN-811
|
|
758
|
+
- file_pattern: 'model_compute_registration\.py'
|
|
759
|
+
violation_pattern: "Field 'plugin_id' should use UUID"
|
|
760
|
+
reason: >
|
|
761
|
+
plugin_id is a human-readable semantic identifier, consistent with ModelComputeKey. Follows the policy_id/dispatcher_id pattern.
|
|
762
|
+
|
|
763
|
+
documentation:
|
|
764
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
765
|
+
ticket: OMN-811
|
|
766
|
+
# ==========================================================================
|
|
767
|
+
# Consul Intent Payload Exemptions (OMN-888)
|
|
768
|
+
# ==========================================================================
|
|
769
|
+
# service_name in ModelConsulIntentPayload is the Consul service name to register,
|
|
770
|
+
# NOT a reference to an internal entity. It is a Consul-specific configuration field.
|
|
771
|
+
- file_pattern: 'model_consul_intent_payload\.py'
|
|
772
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
773
|
+
reason: >
|
|
774
|
+
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.
|
|
775
|
+
|
|
776
|
+
documentation:
|
|
777
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
778
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
779
|
+
ticket: OMN-888
|
|
780
|
+
# ==========================================================================
|
|
781
|
+
# Private Class Naming Exemptions (OMN-811)
|
|
782
|
+
# ==========================================================================
|
|
783
|
+
# Private helper classes (prefixed with _) follow PascalCase after the underscore.
|
|
784
|
+
# The pattern validator's regex expects names to start with uppercase, but private
|
|
785
|
+
# classes correctly use underscore prefix + PascalCase (e.g., _MetricsTimer).
|
|
786
|
+
- file_pattern: 'registry_compute\.py'
|
|
787
|
+
class_pattern: "Class name '_MetricsTimer'"
|
|
788
|
+
violation_pattern: "should use PascalCase"
|
|
789
|
+
reason: >
|
|
790
|
+
_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.
|
|
791
|
+
|
|
792
|
+
documentation:
|
|
793
|
+
- PEP 8 - Naming Conventions (https://peps.python.org/pep-0008/#naming-conventions)
|
|
794
|
+
- CLAUDE.md (File & Class Naming Conventions)
|
|
795
|
+
ticket: OMN-811
|
|
796
|
+
# ==========================================================================
|
|
797
|
+
# Plugin Models Exemptions (OMN-811)
|
|
798
|
+
# ==========================================================================
|
|
799
|
+
# ModelPluginContext uses str for correlation_id for flexibility - plugins may
|
|
800
|
+
# receive correlation IDs from various sources as strings. This is intentional
|
|
801
|
+
# to support diverse plugin use cases without requiring UUID conversion.
|
|
802
|
+
- file_pattern: 'model_plugin_context\.py'
|
|
803
|
+
violation_pattern: "Field 'correlation_id' should use UUID"
|
|
804
|
+
reason: >
|
|
805
|
+
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.
|
|
806
|
+
|
|
807
|
+
documentation:
|
|
808
|
+
- docs/patterns/correlation_id_tracking.md
|
|
809
|
+
ticket: OMN-811
|
|
810
|
+
# ==========================================================================
|
|
811
|
+
# MCP Handler Model Exemptions (OMN-1288)
|
|
812
|
+
# ==========================================================================
|
|
813
|
+
# tool_name in ModelMcpToolCall is the MCP protocol identifier for the tool
|
|
814
|
+
# to invoke (e.g., "get_weather", "search_documents"). It is NOT an entity
|
|
815
|
+
# reference requiring UUID + display_name pattern - it's a protocol-level
|
|
816
|
+
# identifier defined by the MCP specification.
|
|
817
|
+
- file_pattern: 'model_mcp_tool_call\.py'
|
|
818
|
+
violation_pattern: "Field 'tool_name' might reference an entity"
|
|
819
|
+
reason: >
|
|
820
|
+
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.
|
|
821
|
+
|
|
822
|
+
documentation:
|
|
823
|
+
- Model Context Protocol Specification (https://modelcontextprotocol.io/)
|
|
824
|
+
ticket: OMN-1288
|
|
825
|
+
# ==========================================================================
|
|
826
|
+
# Corpus Capture Model Exemptions (OMN-1203)
|
|
827
|
+
# ==========================================================================
|
|
828
|
+
# corpus_display_name in ModelCaptureConfig is a user-provided label for the
|
|
829
|
+
# corpus (e.g., "regression-suite-v1"). It is NOT an entity reference - it's
|
|
830
|
+
# simply a human-readable display name for configuration.
|
|
831
|
+
- file_pattern: 'model_capture_config\.py'
|
|
832
|
+
violation_pattern: "Field 'corpus_display_name' might reference an entity"
|
|
833
|
+
reason: >
|
|
834
|
+
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.
|
|
835
|
+
|
|
836
|
+
documentation:
|
|
837
|
+
- src/omnibase_infra/models/corpus/model_capture_config.py (class docstring)
|
|
838
|
+
ticket: OMN-1203
|
|
839
|
+
# ==========================================================================
|
|
840
|
+
# Union Reduction Phase 2 Model Exemptions (OMN-1002)
|
|
841
|
+
# ==========================================================================
|
|
842
|
+
# These models use builder patterns with many convenience methods.
|
|
843
|
+
# Method counts exceed thresholds but provide valuable developer ergonomics.
|
|
844
|
+
# ModelLogContext - Structured logging context with builder pattern
|
|
845
|
+
- file_pattern: 'model_log_context\.py'
|
|
846
|
+
class_pattern: "Class 'ModelLogContext'"
|
|
847
|
+
violation_pattern: 'has \d+ methods'
|
|
848
|
+
reason: >
|
|
849
|
+
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.
|
|
850
|
+
|
|
851
|
+
documentation:
|
|
852
|
+
- docs/patterns/correlation_id_tracking.md
|
|
853
|
+
- CLAUDE.md (Type Annotation Conventions)
|
|
854
|
+
ticket: OMN-1002
|
|
855
|
+
- file_pattern: 'model_log_context\.py'
|
|
856
|
+
violation_pattern: "Field 'correlation_id' should use UUID"
|
|
857
|
+
reason: >
|
|
858
|
+
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.
|
|
859
|
+
|
|
860
|
+
documentation:
|
|
861
|
+
- docs/patterns/correlation_id_tracking.md
|
|
862
|
+
ticket: OMN-1002
|
|
863
|
+
- file_pattern: 'model_log_context\.py'
|
|
864
|
+
violation_pattern: "Field 'group_id' should use UUID"
|
|
865
|
+
reason: >
|
|
866
|
+
group_id is Kafka consumer group ID which is a string, not a UUID. This is infrastructure-specific and follows Kafka naming conventions.
|
|
867
|
+
|
|
868
|
+
documentation:
|
|
869
|
+
- Apache Kafka Consumer Group Configuration (https://kafka.apache.org/documentation/#consumerconfigs_group.id)
|
|
870
|
+
ticket: OMN-1002
|
|
871
|
+
- file_pattern: 'model_log_context\.py'
|
|
872
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
873
|
+
reason: >
|
|
874
|
+
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.
|
|
875
|
+
|
|
876
|
+
documentation:
|
|
877
|
+
- docs/patterns/correlation_id_tracking.md
|
|
878
|
+
ticket: OMN-1002
|
|
879
|
+
# ModelDispatchLogContext - Dispatch-specific logging
|
|
880
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
881
|
+
class_pattern: "Class 'ModelDispatchLogContext'"
|
|
882
|
+
violation_pattern: 'has \d+ methods'
|
|
883
|
+
reason: >
|
|
884
|
+
Builder pattern model for dispatch logging with factory methods for common patterns (for_dispatch_start, for_dispatch_complete, for_dispatch_error). Intentional API design.
|
|
885
|
+
|
|
886
|
+
documentation:
|
|
887
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
888
|
+
- docs/patterns/correlation_id_tracking.md
|
|
889
|
+
ticket: OMN-1002
|
|
890
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
891
|
+
violation_pattern: "Field 'dispatcher_id' should use UUID"
|
|
892
|
+
reason: >
|
|
893
|
+
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.
|
|
894
|
+
|
|
895
|
+
documentation:
|
|
896
|
+
- CLAUDE.md (Registry Naming Conventions)
|
|
897
|
+
ticket: OMN-1002
|
|
898
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
899
|
+
method_pattern: "Function 'for_dispatch_complete'"
|
|
900
|
+
violation_pattern: 'has \d+ parameters'
|
|
901
|
+
reason: >
|
|
902
|
+
Factory method that captures all dispatch completion context. Parameters are optional with defaults. Breaking into multiple calls would reduce usability.
|
|
903
|
+
|
|
904
|
+
documentation:
|
|
905
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
906
|
+
ticket: OMN-1002
|
|
907
|
+
- file_pattern: 'model_dispatch_log_context\.py'
|
|
908
|
+
method_pattern: "Function 'for_dispatch_error'"
|
|
909
|
+
violation_pattern: 'has \d+ parameters'
|
|
910
|
+
reason: >
|
|
911
|
+
Factory method that captures all dispatch error context. Parameters are optional with defaults. Breaking into multiple calls would reduce usability.
|
|
912
|
+
|
|
913
|
+
documentation:
|
|
914
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
915
|
+
ticket: OMN-1002
|
|
916
|
+
# ModelDispatchOutcome - Dispatcher output normalization
|
|
917
|
+
- file_pattern: 'model_dispatch_outcome\.py'
|
|
918
|
+
class_pattern: "Class 'ModelDispatchOutcome'"
|
|
919
|
+
violation_pattern: 'has \d+ methods'
|
|
920
|
+
reason: >
|
|
921
|
+
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.
|
|
922
|
+
|
|
923
|
+
documentation:
|
|
924
|
+
- docs/architecture/MESSAGE_DISPATCH_ENGINE.md
|
|
925
|
+
- docs/design/ADR_DISPATCHER_TYPE_SAFETY.md
|
|
926
|
+
ticket: OMN-1002
|
|
927
|
+
# ==========================================================================
|
|
928
|
+
# Failed Component Model Exemptions (OMN-1007)
|
|
929
|
+
# ==========================================================================
|
|
930
|
+
# component_name in ModelFailedComponent is a simple string identifier for
|
|
931
|
+
# the component that failed during shutdown (e.g., "KafkaEventBus", "VaultAdapter").
|
|
932
|
+
# It is NOT an entity reference requiring UUID + display_name pattern.
|
|
933
|
+
- file_pattern: 'model_failed_component\.py'
|
|
934
|
+
violation_pattern: "Field 'component_name' might reference an entity"
|
|
935
|
+
reason: >
|
|
936
|
+
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.
|
|
937
|
+
|
|
938
|
+
documentation:
|
|
939
|
+
- docs/adr/ADR-001-graceful-shutdown-drain-period.md
|
|
940
|
+
- CLAUDE.md (Model Field Naming - computed display names)
|
|
941
|
+
ticket: OMN-1007
|
|
942
|
+
# ==========================================================================
|
|
943
|
+
# ModelRegistryResponse Factory Method Exemptions (PR #79)
|
|
944
|
+
# ==========================================================================
|
|
945
|
+
# from_backend_results is a classmethod factory that requires all parameters
|
|
946
|
+
# to construct a response from individual backend results. Each parameter is
|
|
947
|
+
# a distinct required context for computing the response status.
|
|
948
|
+
- file_pattern: 'model_registry_response\.py'
|
|
949
|
+
method_pattern: "Function 'from_backend_results'"
|
|
950
|
+
violation_pattern: 'has \d+ parameters'
|
|
951
|
+
reason: >
|
|
952
|
+
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.
|
|
953
|
+
|
|
954
|
+
documentation:
|
|
955
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
956
|
+
- CLAUDE.md (Factory Method Patterns)
|
|
957
|
+
ticket: PR-79
|
|
958
|
+
# ==========================================================================
|
|
959
|
+
# Union Reduction Phase 3 Result Model Exemptions (OMN-1003)
|
|
960
|
+
# ==========================================================================
|
|
961
|
+
# Result models use comprehensive APIs with factory methods, computed properties,
|
|
962
|
+
# and convenience methods for developer ergonomics.
|
|
963
|
+
- file_pattern: 'model_execution_shape_validation_result\.py'
|
|
964
|
+
class_pattern: "Class 'ModelExecutionShapeValidationResult'"
|
|
965
|
+
violation_pattern: 'has \d+ methods'
|
|
966
|
+
reason: >
|
|
967
|
+
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.
|
|
968
|
+
|
|
969
|
+
documentation:
|
|
970
|
+
- docs/validation/validator_reference.md
|
|
971
|
+
- CLAUDE.md (Custom __bool__ for Result Models)
|
|
972
|
+
ticket: OMN-1003
|
|
973
|
+
# ==========================================================================
|
|
974
|
+
# OMN-1004: Union Reduction Phase 4 - New Model Exemptions
|
|
975
|
+
# ==========================================================================
|
|
976
|
+
# ModelCircuitBreakerConfig - service_name is a service identifier string
|
|
977
|
+
- file_pattern: 'model_circuit_breaker_config\.py'
|
|
978
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
979
|
+
reason: >
|
|
980
|
+
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.
|
|
981
|
+
|
|
982
|
+
documentation:
|
|
983
|
+
- CLAUDE.md (Circuit Breaker Pattern section)
|
|
984
|
+
ticket: OMN-1004
|
|
985
|
+
# ModelOperationContext - operation_name is an operation identifier string
|
|
986
|
+
- file_pattern: 'model_operation_context\.py'
|
|
987
|
+
violation_pattern: "Field 'operation_name' might reference an entity"
|
|
988
|
+
reason: >
|
|
989
|
+
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.
|
|
990
|
+
|
|
991
|
+
documentation:
|
|
992
|
+
- CLAUDE.md (Handler Refactoring section)
|
|
993
|
+
ticket: OMN-1004
|
|
994
|
+
# ModelValidationResult - field_name is the name of a validated field
|
|
995
|
+
- file_pattern: 'registration_reducer\.py'
|
|
996
|
+
violation_pattern: "Field 'field_name' might reference an entity"
|
|
997
|
+
reason: >
|
|
998
|
+
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.
|
|
999
|
+
|
|
1000
|
+
documentation:
|
|
1001
|
+
- docs/architecture/REGISTRATION_REDUCER.md
|
|
1002
|
+
ticket: OMN-1004
|
|
1003
|
+
# ==========================================================================
|
|
1004
|
+
# Handler Validation Error Model Exemptions (OMN-1091)
|
|
1005
|
+
# ==========================================================================
|
|
1006
|
+
# Handler validation error types are explicitly named per ticket requirements.
|
|
1007
|
+
# rule_id and handler_id are human-readable semantic identifiers, not UUIDs.
|
|
1008
|
+
- file_pattern: 'enum_handler_error_type\.py'
|
|
1009
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1010
|
+
reason: >
|
|
1011
|
+
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.
|
|
1012
|
+
|
|
1013
|
+
documentation:
|
|
1014
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1015
|
+
ticket: OMN-1091
|
|
1016
|
+
- file_pattern: 'enum_handler_source_type\.py'
|
|
1017
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1018
|
+
reason: >
|
|
1019
|
+
EnumHandlerSourceType is an enum for validation source types (CONTRACT, DESCRIPTOR, STATIC_ANALYSIS). The "Handler" name is intentional per OMN-1091 spec.
|
|
1020
|
+
|
|
1021
|
+
documentation:
|
|
1022
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1023
|
+
ticket: OMN-1091
|
|
1024
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1025
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
1026
|
+
reason: >
|
|
1027
|
+
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.
|
|
1028
|
+
|
|
1029
|
+
documentation:
|
|
1030
|
+
- docs/patterns/error_handling_patterns.md
|
|
1031
|
+
ticket: OMN-1091
|
|
1032
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1033
|
+
method_pattern: "Function 'from_contract_error'"
|
|
1034
|
+
violation_pattern: 'has \d+ parameters'
|
|
1035
|
+
reason: >
|
|
1036
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults. Breaking into multiple calls would reduce usability.
|
|
1037
|
+
|
|
1038
|
+
documentation:
|
|
1039
|
+
- docs/patterns/error_handling_patterns.md
|
|
1040
|
+
ticket: OMN-1091
|
|
1041
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1042
|
+
method_pattern: "Function 'from_security_violation'"
|
|
1043
|
+
violation_pattern: 'has \d+ parameters'
|
|
1044
|
+
reason: >
|
|
1045
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults. Breaking into multiple calls would reduce usability.
|
|
1046
|
+
|
|
1047
|
+
documentation:
|
|
1048
|
+
- docs/patterns/error_handling_patterns.md
|
|
1049
|
+
ticket: OMN-1091
|
|
1050
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1051
|
+
method_pattern: "Function 'from_descriptor_error'"
|
|
1052
|
+
violation_pattern: 'has \d+ parameters'
|
|
1053
|
+
reason: >
|
|
1054
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults.
|
|
1055
|
+
|
|
1056
|
+
documentation:
|
|
1057
|
+
- docs/patterns/error_handling_patterns.md
|
|
1058
|
+
ticket: OMN-1091
|
|
1059
|
+
- file_pattern: 'model_handler_validation_error\.py'
|
|
1060
|
+
method_pattern: "Function 'from_architecture_error'"
|
|
1061
|
+
violation_pattern: 'has \d+ parameters'
|
|
1062
|
+
reason: >
|
|
1063
|
+
Factory method with many optional parameters for complete error construction. Parameters have defaults.
|
|
1064
|
+
|
|
1065
|
+
documentation:
|
|
1066
|
+
- docs/patterns/error_handling_patterns.md
|
|
1067
|
+
ticket: OMN-1091
|
|
1068
|
+
- file_pattern: 'model_handler_identifier\.py'
|
|
1069
|
+
violation_pattern: "Field 'handler_id' should use UUID"
|
|
1070
|
+
reason: >
|
|
1071
|
+
handler_id is a human-readable semantic identifier (e.g., "http-handler", "db-handler") per existing patterns. Not a UUID.
|
|
1072
|
+
|
|
1073
|
+
documentation:
|
|
1074
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1075
|
+
ticket: OMN-1091
|
|
1076
|
+
# ==========================================================================
|
|
1077
|
+
# Handler Contract Source Exemptions (OMN-1097)
|
|
1078
|
+
# ==========================================================================
|
|
1079
|
+
# handler_contract_source.py contains legitimate handler discovery code.
|
|
1080
|
+
# The "Handler" in the class name refers to ONEX handler contracts, not an
|
|
1081
|
+
# anti-pattern manager/helper class.
|
|
1082
|
+
- file_pattern: 'handler_contract_source\.py'
|
|
1083
|
+
class_pattern: "Class name 'HandlerContractSource'"
|
|
1084
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1085
|
+
reason: >
|
|
1086
|
+
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.
|
|
1087
|
+
|
|
1088
|
+
documentation:
|
|
1089
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1090
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1091
|
+
ticket: OMN-1097
|
|
1092
|
+
# ==========================================================================
|
|
1093
|
+
# Handler Bootstrap Source Exemptions (OMN-1087)
|
|
1094
|
+
# ==========================================================================
|
|
1095
|
+
# HandlerBootstrapSource provides hardcoded handler descriptors for core
|
|
1096
|
+
# infrastructure handlers. The "Handler" in the name refers to ONEX handler
|
|
1097
|
+
# concepts, consistent with HandlerContractSource and HandlerPluginLoader.
|
|
1098
|
+
#
|
|
1099
|
+
# Pattern specificity note: Uses separate class_pattern + violation_pattern
|
|
1100
|
+
# (not combined "Class name .* contains...") for precise targeting. All three
|
|
1101
|
+
# patterns must match: exact filename, exact class name, and violation type.
|
|
1102
|
+
# This is consistent with HandlerContractSource/HandlerPluginLoader exemptions.
|
|
1103
|
+
- file_pattern: 'handler_bootstrap_source\.py'
|
|
1104
|
+
class_pattern: "Class name 'HandlerBootstrapSource'"
|
|
1105
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1106
|
+
reason: >
|
|
1107
|
+
HandlerBootstrapSource centralizes hardcoded handler registration for core infrastructure handlers (Consul, DB, HTTP, Vault). The "Handler" refers to ONEX handler concepts, consistent with HandlerContractSource. This is legitimate handler infrastructure code per OMN-1087.
|
|
1108
|
+
|
|
1109
|
+
documentation:
|
|
1110
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1111
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1112
|
+
ticket: OMN-1087
|
|
1113
|
+
# ==========================================================================
|
|
1114
|
+
# Handler Source Mode Exemptions (OMN-1095)
|
|
1115
|
+
# ==========================================================================
|
|
1116
|
+
# EnumHandlerSourceMode and HandlerSourceResolver are part of the handler
|
|
1117
|
+
# source mode feature flag implementation. The "Handler" in the names refers
|
|
1118
|
+
# to ONEX handler concepts (how handlers are discovered/loaded), consistent
|
|
1119
|
+
# with HandlerBootstrapSource and HandlerContractSource.
|
|
1120
|
+
- file_pattern: 'enum_handler_source_mode\.py'
|
|
1121
|
+
class_pattern: "Class name 'EnumHandlerSourceMode'"
|
|
1122
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1123
|
+
reason: >
|
|
1124
|
+
EnumHandlerSourceMode defines handler loading modes (BOOTSTRAP, CONTRACT, HYBRID). The "Handler" refers to ONEX handler concepts - how handlers are discovered and loaded at runtime. Consistent with HandlerBootstrapSource and HandlerContractSource naming.
|
|
1125
|
+
|
|
1126
|
+
documentation:
|
|
1127
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1128
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1129
|
+
ticket: OMN-1095
|
|
1130
|
+
- file_pattern: 'handler_source_resolver\.py'
|
|
1131
|
+
class_pattern: "Class name 'HandlerSourceResolver'"
|
|
1132
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1133
|
+
reason: >
|
|
1134
|
+
HandlerSourceResolver implements per-handler identity resolution between bootstrap and contract sources. The "Handler" refers to ONEX handler concepts - resolving which handler source takes precedence. Consistent with HandlerBootstrapSource and HandlerContractSource naming.
|
|
1135
|
+
|
|
1136
|
+
documentation:
|
|
1137
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1138
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1139
|
+
ticket: OMN-1095
|
|
1140
|
+
# ==========================================================================
|
|
1141
|
+
# Handler Plugin Loader Exemptions (OMN-1132)
|
|
1142
|
+
# ==========================================================================
|
|
1143
|
+
# HandlerPluginLoader discovers and loads ONEX handlers from contract YAML files.
|
|
1144
|
+
# The "Handler" in the name refers to ONEX handler contracts being loaded,
|
|
1145
|
+
# not an anti-pattern manager/helper class.
|
|
1146
|
+
- file_pattern: 'handler_plugin_loader\.py'
|
|
1147
|
+
class_pattern: "Class name 'HandlerPluginLoader'"
|
|
1148
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1149
|
+
reason: >
|
|
1150
|
+
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.
|
|
1151
|
+
|
|
1152
|
+
documentation:
|
|
1153
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1154
|
+
- CLAUDE.md (ONEX Architecture - Handler Types)
|
|
1155
|
+
ticket: OMN-1132
|
|
1156
|
+
- file_pattern: 'handler_plugin_loader\.py'
|
|
1157
|
+
class_pattern: "Class 'HandlerPluginLoader'"
|
|
1158
|
+
violation_pattern: 'has \d+ methods'
|
|
1159
|
+
reason: >
|
|
1160
|
+
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.
|
|
1161
|
+
|
|
1162
|
+
documentation:
|
|
1163
|
+
- docs/patterns/handler_plugin_loader.md
|
|
1164
|
+
- CLAUDE.md (Handler Plugin Loader Patterns)
|
|
1165
|
+
ticket: OMN-1132
|
|
1166
|
+
- file_pattern: 'protocol_handler_plugin_loader\.py'
|
|
1167
|
+
class_pattern: "Class name 'ProtocolHandlerPluginLoader'"
|
|
1168
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1169
|
+
reason: >
|
|
1170
|
+
ProtocolHandlerPluginLoader defines the interface for handler plugin loading. The "Handler" refers to ONEX handler contracts, consistent with HandlerPluginLoader.
|
|
1171
|
+
|
|
1172
|
+
documentation:
|
|
1173
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1174
|
+
ticket: OMN-1132
|
|
1175
|
+
- file_pattern: 'model_loaded_handler\.py'
|
|
1176
|
+
class_pattern: "Class name 'ModelLoadedHandler'"
|
|
1177
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1178
|
+
reason: >
|
|
1179
|
+
ModelLoadedHandler represents metadata about a loaded ONEX handler contract. The "Handler" refers to ONEX handler concepts, not an anti-pattern.
|
|
1180
|
+
|
|
1181
|
+
documentation:
|
|
1182
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1183
|
+
ticket: OMN-1132
|
|
1184
|
+
- file_pattern: 'model_handler_contract\.py'
|
|
1185
|
+
class_pattern: "Class name 'ModelHandlerContract'"
|
|
1186
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1187
|
+
reason: >
|
|
1188
|
+
ModelHandlerContract is the Pydantic schema for handler contract YAML files. The "Handler" refers to ONEX handler contracts, consistent with HandlerPluginLoader and ModelLoadedHandler.
|
|
1189
|
+
|
|
1190
|
+
documentation:
|
|
1191
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1192
|
+
ticket: OMN-1132
|
|
1193
|
+
- file_pattern: 'model_handler_contract\.py'
|
|
1194
|
+
violation_pattern: "Field 'handler_name' might reference an entity"
|
|
1195
|
+
reason: >
|
|
1196
|
+
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.
|
|
1197
|
+
|
|
1198
|
+
documentation:
|
|
1199
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers)
|
|
1200
|
+
ticket: OMN-1132
|
|
1201
|
+
# ==========================================================================
|
|
1202
|
+
# Contract Handler Discovery Exemptions (OMN-1133)
|
|
1203
|
+
# ==========================================================================
|
|
1204
|
+
# ContractHandlerDiscovery bridges HandlerPluginLoader with the BindingRegistry
|
|
1205
|
+
# for automatic handler discovery from contracts. The "Handler" in the name
|
|
1206
|
+
# refers to ONEX handler contracts being discovered, not an anti-pattern.
|
|
1207
|
+
- file_pattern: 'contract_handler_discovery\.py'
|
|
1208
|
+
class_pattern: "Class name 'ContractHandlerDiscovery'"
|
|
1209
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1210
|
+
reason: >
|
|
1211
|
+
ContractHandlerDiscovery discovers ONEX handler contracts and registers them with the runtime. The "Handler" refers to ONEX handler contracts being discovered, consistent with HandlerPluginLoader.
|
|
1212
|
+
|
|
1213
|
+
documentation:
|
|
1214
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1215
|
+
- CLAUDE.md (Handler Plugin Loader Patterns)
|
|
1216
|
+
ticket: OMN-1133
|
|
1217
|
+
- file_pattern: 'protocol_handler_discovery\.py'
|
|
1218
|
+
class_pattern: "Class name 'ProtocolHandlerDiscovery'"
|
|
1219
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1220
|
+
reason: >
|
|
1221
|
+
ProtocolHandlerDiscovery defines the interface for handler discovery services. The "Handler" refers to ONEX handler contracts, consistent with ProtocolHandlerPluginLoader.
|
|
1222
|
+
|
|
1223
|
+
documentation:
|
|
1224
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1225
|
+
ticket: OMN-1133
|
|
1226
|
+
- file_pattern: 'model_loaded_handler\.py'
|
|
1227
|
+
violation_pattern: "Field 'handler_name' might reference an entity"
|
|
1228
|
+
reason: >
|
|
1229
|
+
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.
|
|
1230
|
+
|
|
1231
|
+
documentation:
|
|
1232
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers)
|
|
1233
|
+
ticket: OMN-1132
|
|
1234
|
+
- file_pattern: 'model_handler_descriptor\.py'
|
|
1235
|
+
violation_pattern: "Field 'handler_id' should use UUID"
|
|
1236
|
+
reason: >
|
|
1237
|
+
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.
|
|
1238
|
+
|
|
1239
|
+
documentation:
|
|
1240
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1241
|
+
ticket: OMN-1097
|
|
1242
|
+
- file_pattern: 'model_handler_security_policy\.py'
|
|
1243
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1244
|
+
reason: >
|
|
1245
|
+
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).
|
|
1246
|
+
|
|
1247
|
+
documentation:
|
|
1248
|
+
- docs/architecture/HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md
|
|
1249
|
+
ticket: OMN-1098
|
|
1250
|
+
# LocalHandler validator models - OMN-743
|
|
1251
|
+
# These models validate LocalHandler import restrictions in production code.
|
|
1252
|
+
# The "Handler" in the name refers to the specific LocalHandler class being
|
|
1253
|
+
# validated, not an anti-pattern handler class.
|
|
1254
|
+
- file_pattern: 'model_localhandler_violation\.py'
|
|
1255
|
+
class_pattern: "Class name 'ModelLocalHandlerViolation'"
|
|
1256
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1257
|
+
reason: >
|
|
1258
|
+
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.
|
|
1259
|
+
|
|
1260
|
+
documentation:
|
|
1261
|
+
- CLAUDE.md (LocalHandler dev-only enforcement)
|
|
1262
|
+
ticket: OMN-743
|
|
1263
|
+
- file_pattern: 'model_localhandler_validation_result\.py'
|
|
1264
|
+
class_pattern: "Class name 'ModelLocalHandlerValidationResult'"
|
|
1265
|
+
violation_pattern: "contains anti-pattern 'Handler'"
|
|
1266
|
+
reason: >
|
|
1267
|
+
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.
|
|
1268
|
+
|
|
1269
|
+
documentation:
|
|
1270
|
+
- CLAUDE.md (LocalHandler dev-only enforcement)
|
|
1271
|
+
ticket: OMN-743
|
|
1272
|
+
- file_pattern: 'validation_aggregator\.py'
|
|
1273
|
+
class_pattern: "Class 'ValidationAggregator'"
|
|
1274
|
+
violation_pattern: 'has \d+ methods'
|
|
1275
|
+
reason: >
|
|
1276
|
+
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.
|
|
1277
|
+
|
|
1278
|
+
documentation:
|
|
1279
|
+
- docs/patterns/error_handling_patterns.md
|
|
1280
|
+
ticket: OMN-1091
|
|
1281
|
+
- file_pattern: 'validator_security\.py'
|
|
1282
|
+
method_pattern: "Function 'convert_to_validation_error'"
|
|
1283
|
+
violation_pattern: 'has \d+ parameters'
|
|
1284
|
+
reason: >
|
|
1285
|
+
Conversion function requires multiple context parameters for complete error construction. Parameters are distinct required contexts for error reporting.
|
|
1286
|
+
|
|
1287
|
+
documentation:
|
|
1288
|
+
- docs/patterns/security_patterns.md
|
|
1289
|
+
ticket: OMN-1091
|
|
1290
|
+
# ==========================================================================
|
|
1291
|
+
# Service Discovery Node Exemptions (OMN-1131)
|
|
1292
|
+
# ==========================================================================
|
|
1293
|
+
# The service discovery node is a domain-specific infrastructure component that
|
|
1294
|
+
# integrates with external service discovery systems (Consul, Kubernetes).
|
|
1295
|
+
# The term "Service" is fundamental to the service discovery domain and cannot
|
|
1296
|
+
# be replaced with alternative terminology without losing semantic clarity.
|
|
1297
|
+
# HashiCorp Consul, Kubernetes, and all major service discovery systems use
|
|
1298
|
+
# "service" as the canonical term for discoverable network endpoints.
|
|
1299
|
+
- file_pattern: 'node_service_discovery_effect/node\.py'
|
|
1300
|
+
class_pattern: "Class name 'NodeServiceDiscoveryEffect'"
|
|
1301
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1302
|
+
reason: >
|
|
1303
|
+
NodeServiceDiscoveryEffect is the ONEX node for service discovery operations. "Service" is the canonical domain term from HashiCorp Consul and Kubernetes service discovery APIs.
|
|
1304
|
+
|
|
1305
|
+
documentation:
|
|
1306
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1307
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1308
|
+
ticket: OMN-1131
|
|
1309
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_info\.py'
|
|
1310
|
+
class_pattern: "Class name 'ModelServiceInfo'"
|
|
1311
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1312
|
+
reason: >
|
|
1313
|
+
ModelServiceInfo represents service metadata from discovery systems. "Service" is the canonical domain term.
|
|
1314
|
+
|
|
1315
|
+
documentation:
|
|
1316
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1317
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1318
|
+
ticket: OMN-1131
|
|
1319
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_info\.py'
|
|
1320
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1321
|
+
reason: >
|
|
1322
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1323
|
+
|
|
1324
|
+
documentation:
|
|
1325
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1326
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1327
|
+
ticket: OMN-1131
|
|
1328
|
+
- file_pattern: 'node_service_discovery_effect/models/enum_service_discovery_operation\.py'
|
|
1329
|
+
class_pattern: "Class name 'EnumServiceDiscoveryOperation'"
|
|
1330
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1331
|
+
reason: >
|
|
1332
|
+
EnumServiceDiscoveryOperation defines operations for service discovery (REGISTER, DEREGISTER, DISCOVER). "Service" is the canonical domain term.
|
|
1333
|
+
|
|
1334
|
+
documentation:
|
|
1335
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1336
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1337
|
+
ticket: OMN-1131
|
|
1338
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_discovery_health_check_details\.py'
|
|
1339
|
+
class_pattern: "Class name 'ModelServiceDiscoveryHealthCheckDetails'"
|
|
1340
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1341
|
+
reason: >
|
|
1342
|
+
ModelServiceDiscoveryHealthCheckDetails contains health check configuration for service discovery. "Service" is the canonical domain term.
|
|
1343
|
+
|
|
1344
|
+
documentation:
|
|
1345
|
+
- HashiCorp Consul Health Checks (https://developer.hashicorp.com/consul/docs/services/usage/checks)
|
|
1346
|
+
- Kubernetes Probes (https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
|
|
1347
|
+
ticket: OMN-1131
|
|
1348
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_registration\.py'
|
|
1349
|
+
class_pattern: "Class name 'ModelServiceRegistration'"
|
|
1350
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1351
|
+
reason: >
|
|
1352
|
+
ModelServiceRegistration is the input model for registering services in discovery systems. "Service" is the canonical domain term.
|
|
1353
|
+
|
|
1354
|
+
documentation:
|
|
1355
|
+
- HashiCorp Consul Service Registration (https://developer.hashicorp.com/consul/api-docs/agent/service#register-service)
|
|
1356
|
+
- Kubernetes Service Discovery (https://kubernetes.io/docs/concepts/services-networking/service/)
|
|
1357
|
+
ticket: OMN-1131
|
|
1358
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_registration\.py'
|
|
1359
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1360
|
+
reason: >
|
|
1361
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1362
|
+
|
|
1363
|
+
documentation:
|
|
1364
|
+
- HashiCorp Consul Service Registration (https://developer.hashicorp.com/consul/api-docs/agent/service#register-service)
|
|
1365
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1366
|
+
ticket: OMN-1131
|
|
1367
|
+
- file_pattern: 'node_service_discovery_effect/models/model_service_discovery_health_check_result\.py'
|
|
1368
|
+
class_pattern: "Class name 'ModelServiceDiscoveryHealthCheckResult'"
|
|
1369
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1370
|
+
reason: >
|
|
1371
|
+
ModelServiceDiscoveryHealthCheckResult contains health check results from service discovery. "Service" is the canonical domain term.
|
|
1372
|
+
|
|
1373
|
+
documentation:
|
|
1374
|
+
- HashiCorp Consul Health Checks (https://developer.hashicorp.com/consul/docs/services/usage/checks)
|
|
1375
|
+
- Kubernetes Probes (https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
|
|
1376
|
+
ticket: OMN-1131
|
|
1377
|
+
- file_pattern: 'node_service_discovery_effect/registry/registry_infra_service_discovery\.py'
|
|
1378
|
+
class_pattern: "Class name 'RegistryInfraServiceDiscovery'"
|
|
1379
|
+
violation_pattern: "contains anti-pattern 'Service'"
|
|
1380
|
+
reason: >
|
|
1381
|
+
RegistryInfraServiceDiscovery is the DI registry for service discovery handlers. "Service" is the canonical domain term.
|
|
1382
|
+
|
|
1383
|
+
documentation:
|
|
1384
|
+
- docs/patterns/container_dependency_injection.md (Registry patterns)
|
|
1385
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1386
|
+
ticket: OMN-1131
|
|
1387
|
+
- file_pattern: 'handlers/registration_storage/handler_registration_storage_postgres\.py'
|
|
1388
|
+
method_pattern: "Function '__init__'"
|
|
1389
|
+
violation_pattern: 'has \d+ parameters'
|
|
1390
|
+
reason: >
|
|
1391
|
+
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.
|
|
1392
|
+
|
|
1393
|
+
documentation:
|
|
1394
|
+
- asyncpg Pool Configuration (https://magicstack.github.io/asyncpg/current/api/index.html#connection-pools)
|
|
1395
|
+
ticket: OMN-1131
|
|
1396
|
+
- file_pattern: 'handlers/service_discovery/handler_service_discovery_consul\.py'
|
|
1397
|
+
method_pattern: "Function '__init__'"
|
|
1398
|
+
violation_pattern: 'has \d+ parameters'
|
|
1399
|
+
reason: >
|
|
1400
|
+
Consul handler requires multiple configuration parameters: consul_client, token, scheme, host, port, dc, circuit_breaker_config. These are standard Consul connection parameters.
|
|
1401
|
+
|
|
1402
|
+
documentation:
|
|
1403
|
+
- HashiCorp Consul API Configuration (https://developer.hashicorp.com/consul/api-docs)
|
|
1404
|
+
ticket: OMN-1131
|
|
1405
|
+
- file_pattern: 'handlers/service_discovery/models/model_service_info\.py'
|
|
1406
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1407
|
+
reason: >
|
|
1408
|
+
service_name is the canonical Consul/K8s service identifier. This is infrastructure configuration, not an entity reference.
|
|
1409
|
+
|
|
1410
|
+
documentation:
|
|
1411
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1412
|
+
- CLAUDE.md (Model Field Naming - infrastructure identifiers)
|
|
1413
|
+
ticket: OMN-1131
|
|
1414
|
+
# ==========================================================================
|
|
1415
|
+
# Architecture Validator AST Exemptions (OMN-1099)
|
|
1416
|
+
# ==========================================================================
|
|
1417
|
+
# Python ast.NodeVisitor convention uses visit_ClassDef, visit_Call, visit_Name, etc.
|
|
1418
|
+
# These method names are REQUIRED by the ast module - they cannot be renamed.
|
|
1419
|
+
# Reference: https://docs.python.org/3/library/ast.html#ast.NodeVisitor
|
|
1420
|
+
#
|
|
1421
|
+
# This is a GENERAL exemption for ALL visit_* methods in ANY Python file,
|
|
1422
|
+
# as AST visitor patterns are used throughout the codebase for static analysis.
|
|
1423
|
+
- file_pattern: '.*\.py'
|
|
1424
|
+
violation_pattern: "Function name 'visit_\\w+' should use snake_case"
|
|
1425
|
+
reason: >
|
|
1426
|
+
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.
|
|
1427
|
+
|
|
1428
|
+
documentation:
|
|
1429
|
+
- Python ast.NodeVisitor (https://docs.python.org/3/library/ast.html)
|
|
1430
|
+
- PEP 8 - Exception for stdlib compatibility
|
|
1431
|
+
ticket: OMN-1099
|
|
1432
|
+
# HandlerPublishingVisitor is a class that validates handler publishing constraints.
|
|
1433
|
+
# The "Handler" name is appropriate because it IS validating handler behavior.
|
|
1434
|
+
- file_pattern: 'validator_no_handler_publishing\.py'
|
|
1435
|
+
violation_pattern: "Class name .* contains anti-pattern 'Handler'"
|
|
1436
|
+
reason: >
|
|
1437
|
+
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.
|
|
1438
|
+
|
|
1439
|
+
documentation:
|
|
1440
|
+
- CLAUDE.md (Handler No-Publish Constraint)
|
|
1441
|
+
- docs/patterns/security_patterns.md
|
|
1442
|
+
ticket: OMN-1099
|
|
1443
|
+
# ==========================================================================
|
|
1444
|
+
# Validation Result Model Exemptions (OMN-1104)
|
|
1445
|
+
# ==========================================================================
|
|
1446
|
+
# field_name in ModelValidationResult is a validation field path identifier,
|
|
1447
|
+
# not an entity reference. It represents which field in the validated object
|
|
1448
|
+
# failed validation (e.g., "node_id", "node_type").
|
|
1449
|
+
- file_pattern: 'model_validation_result\.py'
|
|
1450
|
+
violation_pattern: "Field 'field_name' might reference an entity"
|
|
1451
|
+
reason: >
|
|
1452
|
+
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.
|
|
1453
|
+
|
|
1454
|
+
documentation:
|
|
1455
|
+
- docs/patterns/error_handling_patterns.md
|
|
1456
|
+
ticket: OMN-1104
|
|
1457
|
+
# ==========================================================================
|
|
1458
|
+
# Consul Registration Payload Exemptions (OMN-1104)
|
|
1459
|
+
# ==========================================================================
|
|
1460
|
+
# service_id and service_name are Consul native formats (strings), not UUIDs
|
|
1461
|
+
# or entity references. Consul service registry uses string identifiers.
|
|
1462
|
+
- file_pattern: 'model_payload_consul_register\.py'
|
|
1463
|
+
violation_pattern: "Field 'service_id' should use UUID"
|
|
1464
|
+
reason: >
|
|
1465
|
+
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.
|
|
1466
|
+
|
|
1467
|
+
documentation:
|
|
1468
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1469
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1470
|
+
ticket: OMN-1104
|
|
1471
|
+
- file_pattern: 'model_payload_consul_register\.py'
|
|
1472
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1473
|
+
reason: >
|
|
1474
|
+
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.
|
|
1475
|
+
|
|
1476
|
+
documentation:
|
|
1477
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1478
|
+
- HashiCorp Consul Service Discovery API (https://developer.hashicorp.com/consul/api-docs/agent/service)
|
|
1479
|
+
ticket: OMN-1104
|
|
1480
|
+
# ==========================================================================
|
|
1481
|
+
# Architecture Validator Semantic ID Exemptions (OMN-1138)
|
|
1482
|
+
# ==========================================================================
|
|
1483
|
+
# Architecture validation rules use semantic string identifiers (e.g.,
|
|
1484
|
+
# 'NO_HANDLER_PUBLISHING', 'PURE_REDUCERS') rather than UUIDs. These are
|
|
1485
|
+
# human-readable rule codes similar to error codes, not database entity IDs.
|
|
1486
|
+
- file_pattern: 'model_rule_check_result\.py'
|
|
1487
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
1488
|
+
reason: >
|
|
1489
|
+
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.
|
|
1490
|
+
|
|
1491
|
+
documentation:
|
|
1492
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1493
|
+
ticket: OMN-1138
|
|
1494
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1495
|
+
violation_pattern: "Field 'rule_id' should use UUID"
|
|
1496
|
+
reason: >
|
|
1497
|
+
rule_id is a semantic identifier for architecture rules (e.g., 'NO_HANDLER_PUBLISHING'). These are human-readable rule codes, not database entity UUIDs.
|
|
1498
|
+
|
|
1499
|
+
documentation:
|
|
1500
|
+
- CLAUDE.md (Registry Naming Conventions - semantic identifiers vs UUIDs)
|
|
1501
|
+
ticket: OMN-1138
|
|
1502
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1503
|
+
violation_pattern: "Field 'rule_name' might reference an entity"
|
|
1504
|
+
reason: >
|
|
1505
|
+
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.
|
|
1506
|
+
|
|
1507
|
+
documentation:
|
|
1508
|
+
- CLAUDE.md (Model Field Naming - display names vs entity references)
|
|
1509
|
+
ticket: OMN-1138
|
|
1510
|
+
- file_pattern: 'model_architecture_violation\.py'
|
|
1511
|
+
violation_pattern: "Field 'target_name' might reference an entity"
|
|
1512
|
+
reason: >
|
|
1513
|
+
target_name is dynamically derived from type(target).__name__ during validation. It's a runtime-computed description for logging, not an entity reference.
|
|
1514
|
+
|
|
1515
|
+
documentation:
|
|
1516
|
+
- CLAUDE.md (Model Field Naming - computed display names)
|
|
1517
|
+
ticket: OMN-1138
|
|
1518
|
+
# ==========================================================================
|
|
1519
|
+
# ProjectorValidationError Exemptions (OMN-1168)
|
|
1520
|
+
# ==========================================================================
|
|
1521
|
+
# Validation error class requires multiple context parameters for complete
|
|
1522
|
+
# error information: error_type, contract_path, message, remediation_hint,
|
|
1523
|
+
# and correlation_id. These are distinct required contexts for error reporting.
|
|
1524
|
+
- file_pattern: 'model_projector_validation_error\.py'
|
|
1525
|
+
method_pattern: "Function '__init__'"
|
|
1526
|
+
violation_pattern: 'has \d+ parameters'
|
|
1527
|
+
reason: >
|
|
1528
|
+
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.
|
|
1529
|
+
|
|
1530
|
+
documentation:
|
|
1531
|
+
- docs/patterns/error_handling_patterns.md
|
|
1532
|
+
- CLAUDE.md (Infrastructure Error Patterns)
|
|
1533
|
+
ticket: OMN-1168
|
|
1534
|
+
# ==========================================================================
|
|
1535
|
+
# ProjectorPluginLoader Exemptions (OMN-1168)
|
|
1536
|
+
# ==========================================================================
|
|
1537
|
+
# Plugin loader pattern requires multiple discovery methods:
|
|
1538
|
+
# - load_from_contract, load_from_directory, discover_and_load
|
|
1539
|
+
# - Security validation methods (_validate_file_security, _sanitize_path)
|
|
1540
|
+
# - Contract parsing (_load_contract, _parse_yaml)
|
|
1541
|
+
# - Error handling (discover_with_errors, graceful mode support)
|
|
1542
|
+
- file_pattern: 'projector_plugin_loader\.py'
|
|
1543
|
+
class_pattern: "Class 'ProjectorPluginLoader'"
|
|
1544
|
+
violation_pattern: 'has \d+ methods'
|
|
1545
|
+
reason: >
|
|
1546
|
+
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.
|
|
1547
|
+
|
|
1548
|
+
documentation:
|
|
1549
|
+
- src/omnibase_infra/runtime/handler_contract_source.py (reference pattern)
|
|
1550
|
+
ticket: OMN-1168
|
|
1551
|
+
- file_pattern: 'projector_plugin_loader\.py'
|
|
1552
|
+
method_pattern: "Function '__init__'"
|
|
1553
|
+
violation_pattern: 'has \d+ parameters'
|
|
1554
|
+
reason: >
|
|
1555
|
+
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.
|
|
1556
|
+
|
|
1557
|
+
documentation:
|
|
1558
|
+
- src/omnibase_infra/runtime/handler_plugin_loader.py (reference pattern)
|
|
1559
|
+
- docs/patterns/handler_plugin_loader.md (security model)
|
|
1560
|
+
ticket: OMN-1316
|
|
1561
|
+
# ==========================================================================
|
|
1562
|
+
# ProjectorShell Exemptions (OMN-1169)
|
|
1563
|
+
# ==========================================================================
|
|
1564
|
+
# ProjectorShell implements ProtocolEventProjector protocol which requires:
|
|
1565
|
+
# - Protocol properties (projector_id, aggregate_type, consumed_events, contract, is_placeholder)
|
|
1566
|
+
# - Core methods (project, get_state, get_states, partial_update, upsert_partial)
|
|
1567
|
+
# - SQL execution modes handled by MixinProjectorSqlOperations
|
|
1568
|
+
# - Value extraction (_extract_values, _resolve_path, _get_event_type, _execute_projection)
|
|
1569
|
+
# - Notification integration (via MixinProjectorNotificationPublishing)
|
|
1570
|
+
# Total: 11 methods, all cohesive to the contract-driven projector pattern.
|
|
1571
|
+
# OMN-1139: Added notification publishing support via mixin composition.
|
|
1572
|
+
# NOTE: Pattern anchored with src/omnibase_infra/runtime/ prefix to match only
|
|
1573
|
+
# the production file at src/omnibase_infra/runtime/projector_shell.py.
|
|
1574
|
+
# This prevents matching test files in tests/unit/runtime/ or tests/integration/runtime/.
|
|
1575
|
+
- file_pattern: 'src/omnibase_infra/runtime/projector_shell\.py'
|
|
1576
|
+
class_pattern: "Class 'ProjectorShell'"
|
|
1577
|
+
violation_pattern: 'has \d+ methods'
|
|
1578
|
+
reason: >
|
|
1579
|
+
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.
|
|
1580
|
+
|
|
1581
|
+
documentation:
|
|
1582
|
+
- src/omnibase_infra/runtime/projector_shell.py (class docstring)
|
|
1583
|
+
- omnibase_spi/protocols/projectors/protocol_event_projector.py (protocol definition)
|
|
1584
|
+
ticket: OMN-1169
|
|
1585
|
+
# ==========================================================================
|
|
1586
|
+
# Qdrant Handler Model Exemptions (OMN-1142)
|
|
1587
|
+
# ==========================================================================
|
|
1588
|
+
# collection_name is a Qdrant-native identifier, not an entity reference.
|
|
1589
|
+
# Qdrant uses string collection names as the primary way to identify and
|
|
1590
|
+
# access vector collections. This matches the qdrant-client API design.
|
|
1591
|
+
- file_pattern: 'model_qdrant_upsert_payload\.py'
|
|
1592
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1593
|
+
reason: >
|
|
1594
|
+
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.
|
|
1595
|
+
|
|
1596
|
+
documentation:
|
|
1597
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1598
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1599
|
+
ticket: OMN-1142
|
|
1600
|
+
- file_pattern: 'model_qdrant_collection_payload\.py'
|
|
1601
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1602
|
+
reason: >
|
|
1603
|
+
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.
|
|
1604
|
+
|
|
1605
|
+
documentation:
|
|
1606
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1607
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1608
|
+
ticket: OMN-1142
|
|
1609
|
+
- file_pattern: 'model_qdrant_search_payload\.py'
|
|
1610
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1611
|
+
reason: >
|
|
1612
|
+
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.
|
|
1613
|
+
|
|
1614
|
+
documentation:
|
|
1615
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1616
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1617
|
+
ticket: OMN-1142
|
|
1618
|
+
- file_pattern: 'model_qdrant_delete_payload\.py'
|
|
1619
|
+
violation_pattern: "Field 'collection_name' might reference an entity"
|
|
1620
|
+
reason: >
|
|
1621
|
+
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.
|
|
1622
|
+
|
|
1623
|
+
documentation:
|
|
1624
|
+
- https://qdrant.tech/documentation/concepts/collections/
|
|
1625
|
+
- src/omnibase_infra/handlers/handler_qdrant.py
|
|
1626
|
+
ticket: OMN-1142
|
|
1627
|
+
# ==========================================================================
|
|
1628
|
+
# Projector Schema Model Exemptions (OMN-1168)
|
|
1629
|
+
# ==========================================================================
|
|
1630
|
+
# table_name is a standard database identifier, not an entity reference.
|
|
1631
|
+
# This pattern is ubiquitous in database-related models.
|
|
1632
|
+
# NOTE: Projector models are temporarily in omnibase_infra until omnibase_core
|
|
1633
|
+
# provides canonical projector model types.
|
|
1634
|
+
- file_pattern: 'model_projector_schema\.py'
|
|
1635
|
+
violation_pattern: "Field 'table_name' might reference an entity"
|
|
1636
|
+
reason: >
|
|
1637
|
+
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.
|
|
1638
|
+
|
|
1639
|
+
documentation:
|
|
1640
|
+
- PostgreSQL CREATE TABLE syntax
|
|
1641
|
+
- src/omnibase_infra/schemas/schema_registration_projection.sql (example usage)
|
|
1642
|
+
- src/omnibase_infra/models/projectors/model_projector_schema.py (ModelProjectorSchema defines table_name as identifier, temporary location in omnibase_infra)
|
|
1643
|
+
ticket: OMN-1168
|
|
1644
|
+
# ==========================================================================
|
|
1645
|
+
# SecretResolver Exemptions (OMN-764)
|
|
1646
|
+
# ==========================================================================
|
|
1647
|
+
# SecretResolver is a centralized secret resolution service with cohesive
|
|
1648
|
+
# functionality: sync/async resolution, caching, introspection, and refresh.
|
|
1649
|
+
# The 18 methods form a complete API for secret management:
|
|
1650
|
+
# - Primary API (4): get_secret, get_secrets, get_secret_async, get_secrets_async
|
|
1651
|
+
# - Cache management (3): refresh, refresh_all, get_cache_stats
|
|
1652
|
+
# - Introspection (2): list_configured_secrets, get_source_info
|
|
1653
|
+
# - Internal helpers (9): resolution, caching, path conversion
|
|
1654
|
+
- file_pattern: 'secret_resolver\.py'
|
|
1655
|
+
class_pattern: "Class 'SecretResolver'"
|
|
1656
|
+
violation_pattern: 'has \d+ methods'
|
|
1657
|
+
reason: >
|
|
1658
|
+
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.
|
|
1659
|
+
|
|
1660
|
+
documentation:
|
|
1661
|
+
- docs/patterns/secret_resolver.md
|
|
1662
|
+
- CLAUDE.md (Infrastructure Patterns - SecretResolver)
|
|
1663
|
+
ticket: OMN-764
|
|
1664
|
+
# logical_name is a secret identifier using dotted path convention (e.g., "database.postgres.password")
|
|
1665
|
+
# It is NOT an entity reference - it's a lookup key for secret resolution.
|
|
1666
|
+
- file_pattern: 'model_secret_source_info\.py'
|
|
1667
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1668
|
+
reason: >
|
|
1669
|
+
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.
|
|
1670
|
+
|
|
1671
|
+
documentation:
|
|
1672
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1673
|
+
ticket: OMN-764
|
|
1674
|
+
- file_pattern: 'model_secret_mapping\.py'
|
|
1675
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1676
|
+
reason: >
|
|
1677
|
+
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.
|
|
1678
|
+
|
|
1679
|
+
documentation:
|
|
1680
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1681
|
+
ticket: OMN-764
|
|
1682
|
+
- file_pattern: 'model_cached_secret\.py'
|
|
1683
|
+
violation_pattern: "Field 'logical_name' might reference an entity"
|
|
1684
|
+
reason: >
|
|
1685
|
+
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.
|
|
1686
|
+
|
|
1687
|
+
documentation:
|
|
1688
|
+
- docs/patterns/secret_resolver.md (Naming Conventions section)
|
|
1689
|
+
ticket: OMN-764
|
|
1690
|
+
# ==========================================================================
|
|
1691
|
+
# Observability Layer Exemptions (OMN-767)
|
|
1692
|
+
# ==========================================================================
|
|
1693
|
+
# The observability layer implements hot-path sinks and hooks that require
|
|
1694
|
+
# comprehensive interfaces for metrics, logging, and timing operations.
|
|
1695
|
+
# Per CLAUDE.md "Handlers own lifecycle, sinks own hot path" principle.
|
|
1696
|
+
- file_pattern: 'sink_logging_structured\.py'
|
|
1697
|
+
class_pattern: "Class 'SinkLoggingStructured'"
|
|
1698
|
+
violation_pattern: 'has \d+ methods'
|
|
1699
|
+
reason: >
|
|
1700
|
+
Hot-path logging sink requires comprehensive interface for ProtocolHotPathLoggingSink compliance: emit(), flush(), buffer management, and output formatting. Methods are protocol-mandated.
|
|
1701
|
+
|
|
1702
|
+
documentation:
|
|
1703
|
+
- CLAUDE.md (Observability Layer - Handlers own lifecycle, sinks own hot path)
|
|
1704
|
+
ticket: OMN-767
|
|
1705
|
+
- file_pattern: 'hook_observability\.py'
|
|
1706
|
+
class_pattern: "Class 'HookObservability'"
|
|
1707
|
+
violation_pattern: 'has \d+ methods'
|
|
1708
|
+
reason: >
|
|
1709
|
+
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.
|
|
1710
|
+
|
|
1711
|
+
documentation:
|
|
1712
|
+
- CLAUDE.md (Observability Layer - Handlers own lifecycle, sinks own hot path)
|
|
1713
|
+
ticket: OMN-767
|
|
1714
|
+
- file_pattern: 'model_metrics_handler_config\.py'
|
|
1715
|
+
violation_pattern: "Field 'job_name' might reference an entity"
|
|
1716
|
+
reason: >
|
|
1717
|
+
job_name is a Prometheus Pushgateway configuration value (human-readable string identifier), not an entity reference. It follows Prometheus naming conventions.
|
|
1718
|
+
|
|
1719
|
+
documentation:
|
|
1720
|
+
- Prometheus Pushgateway documentation
|
|
1721
|
+
ticket: OMN-767
|
|
1722
|
+
# ==========================================================================
|
|
1723
|
+
# BindingConfigResolver Exemptions (OMN-765)
|
|
1724
|
+
# ==========================================================================
|
|
1725
|
+
# BindingConfigResolver is a centralized configuration resolution service with
|
|
1726
|
+
# cohesive functionality: sync/async resolution, multi-source support, caching,
|
|
1727
|
+
# and environment overrides. Similar to SecretResolver, the methods form a
|
|
1728
|
+
# complete API for configuration management:
|
|
1729
|
+
# - Primary API (4): resolve, resolve_async, resolve_many, resolve_many_async
|
|
1730
|
+
# - Cache management (4): invalidate, invalidate_all, get_cache_stats, cleanup
|
|
1731
|
+
# - Internal helpers (13): source loading, env overrides, vault refs, validation
|
|
1732
|
+
- file_pattern: 'binding_config_resolver\.py'
|
|
1733
|
+
class_pattern: "Class 'BindingConfigResolver'"
|
|
1734
|
+
violation_pattern: 'has \d+ methods'
|
|
1735
|
+
reason: >
|
|
1736
|
+
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.
|
|
1737
|
+
|
|
1738
|
+
documentation:
|
|
1739
|
+
- docs/patterns/binding_config_resolver.md
|
|
1740
|
+
ticket: OMN-765
|
|
1741
|
+
# ==========================================================================
|
|
1742
|
+
# HandlerMCP Method Count Exemption (OMN-1282)
|
|
1743
|
+
# ==========================================================================
|
|
1744
|
+
# MCP handler is a complex infrastructure component requiring many methods:
|
|
1745
|
+
# - 4 ProtocolHandler methods (initialize, shutdown, execute, health_check)
|
|
1746
|
+
# - 2 factory methods for route handlers (_create_health_endpoint, _create_tools_list_endpoint)
|
|
1747
|
+
# - 2 server lifecycle methods (_start_http_server, _stop_http_server)
|
|
1748
|
+
# - 3 execution/operation methods (_run_server, _execute_tool_operation, _execute_describe)
|
|
1749
|
+
# Complexity is inherent to MCP protocol requirements and uvicorn server management.
|
|
1750
|
+
- file_pattern: 'handler_mcp\.py'
|
|
1751
|
+
class_pattern: "Class 'HandlerMCP'"
|
|
1752
|
+
violation_pattern: 'has \d+ methods'
|
|
1753
|
+
reason: >
|
|
1754
|
+
HandlerMCP is a complex infrastructure handler implementing MCP protocol with internal uvicorn server lifecycle. The 11 methods are cohesive: 4 ProtocolHandler interface methods, 2 factory methods for Starlette route handlers (explicit closure capture), 2 server lifecycle methods (start/stop), and 3 operation methods. Splitting would fragment the unified MCP server abstraction.
|
|
1755
|
+
|
|
1756
|
+
documentation:
|
|
1757
|
+
- CLAUDE.md (Handler Plugin Loader Patterns)
|
|
1758
|
+
ticket: OMN-1282
|
|
1759
|
+
# ==========================================================================
|
|
1760
|
+
# Registry API Models - service_name Exemptions (OMN-1278)
|
|
1761
|
+
# ==========================================================================
|
|
1762
|
+
# service_name in registry API models is the Consul service name for discovery,
|
|
1763
|
+
# NOT an entity reference. It's an external Consul identifier.
|
|
1764
|
+
- file_pattern: 'services/registry_api/models/model_registry_node_view\.py'
|
|
1765
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1766
|
+
reason: >
|
|
1767
|
+
service_name is the Consul service name for service discovery (e.g., "onex-effect-abc123"). This is an external Consul identifier, NOT an ONEX entity reference. The node_id field provides the UUID identifier; service_name is how the node appears in Consul's catalog.
|
|
1768
|
+
|
|
1769
|
+
documentation:
|
|
1770
|
+
- CLAUDE.md (Type Annotation Conventions)
|
|
1771
|
+
- Consul service discovery documentation
|
|
1772
|
+
ticket: OMN-1278
|
|
1773
|
+
- file_pattern: 'services/registry_api/models/model_registry_instance_view\.py'
|
|
1774
|
+
violation_pattern: "Field 'service_name' might reference an entity"
|
|
1775
|
+
reason: >
|
|
1776
|
+
service_name is the Consul service name for live instance discovery (e.g., "my-service"). This is an external Consul identifier, NOT an ONEX entity reference. The node_id and service_id fields provide UUID identifiers; service_name is the Consul catalog name.
|
|
1777
|
+
|
|
1778
|
+
documentation:
|
|
1779
|
+
- CLAUDE.md (Type Annotation Conventions)
|
|
1780
|
+
- Consul service discovery documentation
|
|
1781
|
+
ticket: OMN-1278
|
|
1782
|
+
# ==========================================================================
|
|
1783
|
+
# ==========================================================================
|
|
1784
|
+
# OperationBindingResolver.resolve() requires multiple parameters for binding
|
|
1785
|
+
# resolution: operation, bindings_subcontract, envelope, context, correlation_id.
|
|
1786
|
+
# These are distinct inputs required for the resolution process.
|
|
1787
|
+
- file_pattern: 'binding_resolver\.py'
|
|
1788
|
+
# Declarative Operation Bindings Exemptions (OMN-1518)
|
|
1789
|
+
|
|
1790
|
+
method_pattern: "Function 'resolve'"
|
|
1791
|
+
violation_pattern: 'has \d+ parameters'
|
|
1792
|
+
reason: >
|
|
1793
|
+
resolve() requires distinct parameters for binding resolution: operation name, bindings subcontract, envelope data, optional context, and correlation_id for error context. Breaking into multiple calls would require intermediate state or complex configuration objects that reduce API clarity.
|
|
1794
|
+
|
|
1795
|
+
documentation:
|
|
1796
|
+
- docs/decisions/adr-declarative-operation-bindings.md
|
|
1797
|
+
ticket: OMN-1518
|
|
1798
|
+
# parameter_name in binding models is the handler parameter name being bound,
|
|
1799
|
+
# NOT an entity reference. It's a simple string identifier for the target parameter.
|
|
1800
|
+
- file_pattern: 'model_operation_binding\.py'
|
|
1801
|
+
violation_pattern: "Field 'parameter_name' might reference an entity"
|
|
1802
|
+
reason: >
|
|
1803
|
+
parameter_name is the target handler input field name (e.g., "correlation_id", "sql"). This is a Python function parameter name, NOT an entity reference. It maps to the handler's function signature parameter.
|
|
1804
|
+
|
|
1805
|
+
documentation:
|
|
1806
|
+
- docs/decisions/adr-declarative-operation-bindings.md
|
|
1807
|
+
ticket: OMN-1518
|
|
1808
|
+
- file_pattern: 'model_parsed_binding\.py'
|
|
1809
|
+
violation_pattern: "Field 'parameter_name' might reference an entity"
|
|
1810
|
+
reason: >
|
|
1811
|
+
parameter_name is the target handler input field name (e.g., "correlation_id", "sql"). This is a Python function parameter name, NOT an entity reference. It maps to the handler's function signature parameter.
|
|
1812
|
+
|
|
1813
|
+
documentation:
|
|
1814
|
+
- docs/decisions/adr-declarative-operation-bindings.md
|
|
1815
|
+
ticket: OMN-1518
|
|
1816
|
+
# operation_name in ModelBindingResolutionResult is the operation that was
|
|
1817
|
+
# resolved (e.g., "db.query"), NOT an entity reference. It's a dispatch key.
|
|
1818
|
+
- file_pattern: 'model_binding_resolution_result\.py'
|
|
1819
|
+
violation_pattern: "Field 'operation_name' might reference an entity"
|
|
1820
|
+
reason: >
|
|
1821
|
+
operation_name is the dispatch operation key that was resolved (e.g., "db.query", "consul.register"). This is a routing identifier, NOT an entity reference. It identifies which operation's bindings were resolved.
|
|
1822
|
+
|
|
1823
|
+
documentation:
|
|
1824
|
+
- docs/decisions/adr-declarative-operation-bindings.md
|
|
1825
|
+
ticket: OMN-1518
|
|
1826
|
+
# ==========================================================================
|
|
1827
|
+
# ModelNodeIdentity node_name Exemption (OMN-1602)
|
|
1828
|
+
# ==========================================================================
|
|
1829
|
+
# node_name in ModelNodeIdentity is a canonical identifier for the node within
|
|
1830
|
+
# the ONEX infrastructure, NOT a foreign key reference to another entity.
|
|
1831
|
+
# It is one of the four dimensions (env, service, node_name, version) that
|
|
1832
|
+
# uniquely identify a node instance.
|
|
1833
|
+
- file_pattern: 'model_node_identity\.py'
|
|
1834
|
+
violation_pattern: "Field 'node_name' might reference an entity"
|
|
1835
|
+
reason: >
|
|
1836
|
+
node_name is a canonical identifier (e.g., "claude_hook_event_effect") that uniquely identifies a node within its service. It is NOT a foreign key reference - it is the node's own name from its contract. Combined with env, service, and version, it forms the node's identity.
|
|
1837
|
+
|
|
1838
|
+
documentation:
|
|
1839
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
1840
|
+
ticket: OMN-1602
|
|
1841
|
+
# ==========================================================================
|
|
1842
|
+
# Emit Daemon Field Type Exemptions (OMN-1610)
|
|
1843
|
+
# ==========================================================================
|
|
1844
|
+
# Fields that are intentionally str instead of UUID for specific reasons
|
|
1845
|
+
- file_pattern: 'emit_daemon/queue\.py'
|
|
1846
|
+
violation_pattern: "Field 'event_id' should use UUID type instead of str"
|
|
1847
|
+
reason: event_id is a string representation of a UUID for JSON serialization compatibility.
|
|
1848
|
+
documentation:
|
|
1849
|
+
- src/omnibase_infra/runtime/emit_daemon/queue.py
|
|
1850
|
+
ticket: OMN-1610
|
|
1851
|
+
- file_pattern: 'emit_daemon/model_daemon_response\.py'
|
|
1852
|
+
violation_pattern: "Field 'event_id' should use UUID type instead of str"
|
|
1853
|
+
reason: event_id is returned as a string in the daemon protocol for JSON serialization compatibility. Matches queue.py event_id.
|
|
1854
|
+
documentation:
|
|
1855
|
+
- src/omnibase_infra/runtime/emit_daemon/model_daemon_response.py
|
|
1856
|
+
ticket: OMN-1610
|
|
1857
|
+
- file_pattern: 'emit_daemon/config\.py'
|
|
1858
|
+
violation_pattern: "Field 'kafka_client_id' should use UUID type instead of str"
|
|
1859
|
+
reason: kafka_client_id is a Kafka client identifier string, not a UUID.
|
|
1860
|
+
documentation:
|
|
1861
|
+
- Kafka client.id documentation
|
|
1862
|
+
ticket: OMN-1610
|
|
1863
|
+
# ==========================================================================
|
|
1864
|
+
# Contract Registry Reducer Handler Exemptions (OMN-1653)
|
|
1865
|
+
# ==========================================================================
|
|
1866
|
+
# Pure reducer handlers follow the pattern: (self, state, event, topic, partition, offset)
|
|
1867
|
+
# This 6-parameter signature is standard for event-sourced reducers that need:
|
|
1868
|
+
# - state: immutable input state
|
|
1869
|
+
# - event: typed domain event
|
|
1870
|
+
# - topic/partition/offset: Kafka position for idempotency tracking
|
|
1871
|
+
- file_pattern: 'nodes/contract_registry_reducer/reducer\.py'
|
|
1872
|
+
method_pattern: '_on_contract_registered'
|
|
1873
|
+
violation_pattern: 'has 6 parameters'
|
|
1874
|
+
reason: >
|
|
1875
|
+
Standard reducer handler signature for event-sourced reducers. The 6 parameters provide: self, state (immutable input), event (typed domain event), and Kafka position (topic/partition/offset) for idempotency tracking. This is the canonical pattern for ONEX reducers.
|
|
1876
|
+
|
|
1877
|
+
documentation:
|
|
1878
|
+
- CLAUDE.md (Node Archetypes - NodeReducer)
|
|
1879
|
+
- docs/patterns/reducer_pattern.md
|
|
1880
|
+
ticket: OMN-1653
|
|
1881
|
+
- file_pattern: 'nodes/contract_registry_reducer/reducer\.py'
|
|
1882
|
+
method_pattern: '_on_contract_deregistered'
|
|
1883
|
+
violation_pattern: 'has 6 parameters'
|
|
1884
|
+
reason: Same as _on_contract_registered - standard reducer handler signature.
|
|
1885
|
+
documentation:
|
|
1886
|
+
- CLAUDE.md (Node Archetypes - NodeReducer)
|
|
1887
|
+
ticket: OMN-1653
|
|
1888
|
+
- file_pattern: 'nodes/contract_registry_reducer/reducer\.py'
|
|
1889
|
+
method_pattern: '_on_heartbeat'
|
|
1890
|
+
violation_pattern: 'has 6 parameters'
|
|
1891
|
+
reason: Same as _on_contract_registered - standard reducer handler signature.
|
|
1892
|
+
documentation:
|
|
1893
|
+
- CLAUDE.md (Node Archetypes - NodeReducer)
|
|
1894
|
+
ticket: OMN-1653
|
|
1895
|
+
- file_pattern: 'nodes/contract_registry_reducer/reducer\.py'
|
|
1896
|
+
method_pattern: '_on_runtime_tick'
|
|
1897
|
+
violation_pattern: 'has 6 parameters'
|
|
1898
|
+
reason: Same as _on_contract_registered - standard reducer handler signature.
|
|
1899
|
+
documentation:
|
|
1900
|
+
- CLAUDE.md (Node Archetypes - NodeReducer)
|
|
1901
|
+
ticket: OMN-1653
|
|
1902
|
+
# Contract ID is a derived natural key (node_name:major.minor.patch), not a UUID.
|
|
1903
|
+
# This is intentional per the contract registry design where contracts are identified
|
|
1904
|
+
# by their name and version, enabling human-readable queries and deduplication.
|
|
1905
|
+
- file_pattern: 'nodes/contract_registry_reducer/models/model_payload_.*\.py'
|
|
1906
|
+
violation_pattern: "Field 'contract_id' should use UUID"
|
|
1907
|
+
reason: >
|
|
1908
|
+
contract_id is a derived natural key (node_name:major.minor.patch), not a UUID. This design enables human-readable queries, version-based deduplication, and matches the contract.yaml identification pattern used throughout ONEX.
|
|
1909
|
+
|
|
1910
|
+
documentation:
|
|
1911
|
+
- CLAUDE.md (Intent Model Architecture - Contract Identity)
|
|
1912
|
+
ticket: OMN-1653
|
|
1913
|
+
# node_name is the contract's semantic name, not an entity reference requiring ID + display_name.
|
|
1914
|
+
- file_pattern: 'nodes/contract_registry_reducer/models/model_payload_.*\.py'
|
|
1915
|
+
violation_pattern: "Field 'node_name' might reference an entity"
|
|
1916
|
+
reason: >
|
|
1917
|
+
node_name is the contract's semantic identifier from contract.yaml, not a reference to a separate entity. Contracts are identified by name, making this a primary attribute not a foreign key.
|
|
1918
|
+
|
|
1919
|
+
documentation:
|
|
1920
|
+
- CLAUDE.md (Contract-Driven - node_name conventions)
|
|
1921
|
+
ticket: OMN-1653
|
|
1922
|
+
# Architecture validator exemptions
|
|
1923
|
+
# These handle one-model-per-file violations for domain-grouped protocols
|
|
1924
|
+
architecture_exemptions:
|
|
1925
|
+
# ==========================================================================
|
|
1926
|
+
# Emit Daemon Config Input Model Exemption (OMN-1610)
|
|
1927
|
+
# ==========================================================================
|
|
1928
|
+
# config.py contains ModelEmitDaemonConfigInput (intermediate input model)
|
|
1929
|
+
# and ModelEmitDaemonConfig (final validated config). The input model is
|
|
1930
|
+
# tightly coupled and only used internally by with_env_overrides() factory.
|
|
1931
|
+
- file_pattern: 'emit_daemon/config\.py'
|
|
1932
|
+
violation_pattern: '\d+ models in one file'
|
|
1933
|
+
reason: >
|
|
1934
|
+
ModelEmitDaemonConfigInput is an intermediate input model used only by ModelEmitDaemonConfig.with_env_overrides() factory method. It provides early validation for environment variable parsing and is tightly coupled with the main config model. Separating would add complexity without benefit.
|
|
1935
|
+
|
|
1936
|
+
documentation:
|
|
1937
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1938
|
+
ticket: OMN-1610
|
|
1939
|
+
# ==========================================================================
|
|
1940
|
+
# Emit Daemon Protocol Models Exemption (OMN-1610)
|
|
1941
|
+
# ==========================================================================
|
|
1942
|
+
# Request and response models form discriminated unions that are always used
|
|
1943
|
+
# together. Separating into individual files would break the cohesive API.
|
|
1944
|
+
- file_pattern: 'emit_daemon/model_daemon_request\.py'
|
|
1945
|
+
violation_pattern: '\d+ models in one file'
|
|
1946
|
+
reason: >
|
|
1947
|
+
ModelDaemonPingRequest and ModelDaemonEmitRequest form a discriminated union (ModelDaemonRequest) for the daemon protocol. These request types are always parsed together via parse_daemon_request(). Per CLAUDE.md domain-grouping convention for protocol messages.
|
|
1948
|
+
|
|
1949
|
+
documentation:
|
|
1950
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1951
|
+
ticket: OMN-1610
|
|
1952
|
+
- file_pattern: 'emit_daemon/model_daemon_response\.py'
|
|
1953
|
+
violation_pattern: '\d+ models in one file'
|
|
1954
|
+
reason: >
|
|
1955
|
+
ModelDaemonPingResponse, ModelDaemonQueuedResponse, and ModelDaemonErrorResponse form a discriminated union (ModelDaemonResponse) for the daemon protocol. These response types are always parsed together via parse_daemon_response(). Per CLAUDE.md domain-grouping convention for protocol messages.
|
|
1956
|
+
|
|
1957
|
+
documentation:
|
|
1958
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1959
|
+
ticket: OMN-1610
|
|
1960
|
+
# ==========================================================================
|
|
1961
|
+
# Contract Linter Models Exemption (PR #57)
|
|
1962
|
+
# ==========================================================================
|
|
1963
|
+
# linter_contract.py contains domain-grouped validation models and enums
|
|
1964
|
+
# that are cohesive and always used together. These define the complete
|
|
1965
|
+
# interface for contract linting results.
|
|
1966
|
+
- file_pattern: 'validation/linter_contract\.py'
|
|
1967
|
+
violation_pattern: '\d+ models in one file'
|
|
1968
|
+
reason: >
|
|
1969
|
+
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.
|
|
1970
|
+
|
|
1971
|
+
documentation:
|
|
1972
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
1973
|
+
- docs/validation/validator_reference.md
|
|
1974
|
+
ticket: PR-57
|
|
1975
|
+
- file_pattern: 'validation/linter_contract\.py'
|
|
1976
|
+
violation_pattern: 'Mixed types in one file'
|
|
1977
|
+
reason: >
|
|
1978
|
+
Contract linter module contains cohesive types (enum + models) for validation results. EnumContractViolationSeverity is tightly coupled with ModelContractViolation and ModelContractLintResult.
|
|
1979
|
+
|
|
1980
|
+
documentation:
|
|
1981
|
+
- CLAUDE.md (Protocol File Naming)
|
|
1982
|
+
- docs/validation/validator_reference.md
|
|
1983
|
+
ticket: PR-57
|
|
1984
|
+
# ==========================================================================
|
|
1985
|
+
# Domain-Grouped Protocol Exemptions (CLAUDE.md Convention)
|
|
1986
|
+
# ==========================================================================
|
|
1987
|
+
# Per CLAUDE.md "Protocol File Naming" section:
|
|
1988
|
+
# "Domain-grouped protocols: Use protocols.py when multiple cohesive protocols
|
|
1989
|
+
# belong to a specific domain or node module"
|
|
1990
|
+
- file_pattern: 'nodes/node_registration_orchestrator/protocols\.py'
|
|
1991
|
+
violation_pattern: '\d+ protocols in one file'
|
|
1992
|
+
reason: >
|
|
1993
|
+
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.
|
|
1994
|
+
|
|
1995
|
+
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
|
|
1996
|
+
|
|
1997
|
+
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
|
|
1998
|
+
|
|
1999
|
+
documentation:
|
|
2000
|
+
- docs/architecture/REGISTRATION_ORCHESTRATOR_ARCHITECTURE.md
|
|
2001
|
+
- docs/architecture/NODE_REGISTRATION_ORCHESTRATOR_PROTOCOLS.md
|
|
2002
|
+
ticket: OMN-888
|
|
2003
|
+
# ==========================================================================
|
|
2004
|
+
# ServiceTimeoutEmitter Models Exemption (OMN-932)
|
|
2005
|
+
# ==========================================================================
|
|
2006
|
+
# service_timeout_emitter.py contains domain-grouped models for timeout emission:
|
|
2007
|
+
# - ModelTimeoutEmissionResult: Result of timeout emission processing
|
|
2008
|
+
# - ModelTimeoutEmissionConfig: Configuration for the emitter
|
|
2009
|
+
# These are tightly coupled and always used together.
|
|
2010
|
+
- file_pattern: 'services/service_timeout_emitter\.py'
|
|
2011
|
+
violation_pattern: '\d+ models in one file'
|
|
2012
|
+
reason: >
|
|
2013
|
+
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.
|
|
2014
|
+
|
|
2015
|
+
documentation:
|
|
2016
|
+
- CLAUDE.md (Protocol File Naming - domain-grouping convention)
|
|
2017
|
+
- docs/patterns/timeout_scanner_emitter.md
|
|
2018
|
+
ticket: OMN-932
|
|
2019
|
+
# These handle complex union type violations
|
|
2020
|
+
union_exemptions:
|
|
2021
|
+
# ==========================================================================
|
|
2022
|
+
# ModelNodeCapabilities Config Field Exemption
|
|
2023
|
+
# ==========================================================================
|
|
2024
|
+
# Design Doc: CLAUDE.md "Type Annotation Conventions" section - Union patterns
|
|
2025
|
+
- file_pattern: 'model_node_capabilities\.py'
|
|
2026
|
+
violation_pattern: 'Union with 4\+ primitive types.*bool.*float.*int.*str'
|
|
2027
|
+
reason: >
|
|
2028
|
+
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.
|
|
2029
|
+
|
|
2030
|
+
documentation:
|
|
2031
|
+
- CLAUDE.md (Type Annotation Conventions - Union patterns)
|
|
2032
|
+
- Standard JSON config pattern (RFC 8259)
|
|
2033
|
+
ticket: null
|