Files
cleveragents-core/features/services_init_coverage_r3.feature
T
HAL9000 5e89f1016c refactor(subplans): Centralize subplan errors per v3.3.0 spec (#8725)
Move SubplanSpawnError from local subplan_service definition to centralized
cleveragents.core.exceptions alongside four new spec-defined error types:
SubplanExecutionError, MaxParallelExceededError, and SubplanDepthLimitError.

Per the v3.3.0 specification (AUTO-ARCH-6), all subplan-related errors are
defined in exceptions.py with proper inheritance hierarchy under DomainError/
PlanError/BusinessRuleViolation. The old local SpawnValidationError class has
been replaced with SubplanSpawnError(PlanError) with a simplified constructor
API (message string instead of validation_errors list).

Updates:
- exceptions.py: Added 4 subplan error classes + __all__ entries
- subplan_service.py: Remove local SpawnValidationError, import SubplanSpawnError from exceptions
- services/__init__.py: Update TYPE_CHECKING stub and _LAZY_IMPORTS for new location
- vulture_whitelist.py: Replace old entry with new error class names
- docs/reference/subplan_service.md: Update to reference SubplanSpawnError (v3.3.0)
- features/*.feature + steps: Update test references from SpawnValidationError to SubplanSpawnError
2026-06-02 19:50:41 -04:00

671 lines
29 KiB
Gherkin

Feature: Services __init__ lazy-import coverage (round 3)
Exercise the lazy-loading __getattr__ in
cleveragents.application.services.__init__ so that the previously
uncovered lines (561-562, 564-565, 567-569) and the AttributeError
branch are executed at runtime.
# ---------- acms_advanced_strategies submodule ----------
Scenario: svcov3 lazy-load ArceStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ArceStrategy"
Then svcov3 the attribute "ArceStrategy" should be resolved
Scenario: svcov3 lazy-load PlanDecisionContextStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PlanDecisionContextStrategy"
Then svcov3 the attribute "PlanDecisionContextStrategy" should be resolved
Scenario: svcov3 lazy-load TemporalArchaeologyStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "TemporalArchaeologyStrategy"
Then svcov3 the attribute "TemporalArchaeologyStrategy" should be resolved
# ---------- acms_phase2 submodule ----------
Scenario: svcov3 lazy-load ContentHashDeduplicator
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ContentHashDeduplicator"
Then svcov3 the attribute "ContentHashDeduplicator" should be resolved
Scenario: svcov3 lazy-load GreedyKnapsackPacker
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "GreedyKnapsackPacker"
Then svcov3 the attribute "GreedyKnapsackPacker" should be resolved
Scenario: svcov3 lazy-load MaxDepthResolver
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "MaxDepthResolver"
Then svcov3 the attribute "MaxDepthResolver" should be resolved
Scenario: svcov3 lazy-load ScorerWeights
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ScorerWeights"
Then svcov3 the attribute "ScorerWeights" should be resolved
Scenario: svcov3 lazy-load WeightedCompositeScorer
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "WeightedCompositeScorer"
Then svcov3 the attribute "WeightedCompositeScorer" should be resolved
# ---------- acms_phase3 submodule ----------
Scenario: svcov3 lazy-load ProvenancePreambleGenerator
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ProvenancePreambleGenerator"
Then svcov3 the attribute "ProvenancePreambleGenerator" should be resolved
Scenario: svcov3 lazy-load RelevanceCoherenceOrderer
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "RelevanceCoherenceOrderer"
Then svcov3 the attribute "RelevanceCoherenceOrderer" should be resolved
# ---------- audit_event_subscriber ----------
Scenario: svcov3 lazy-load AuditEventSubscriber
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "AuditEventSubscriber"
Then svcov3 the attribute "AuditEventSubscriber" should be resolved
# ---------- autonomy_controller ----------
Scenario: svcov3 lazy-load AutonomyController
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "AutonomyController"
Then svcov3 the attribute "AutonomyController" should be resolved
# ---------- autonomy_guardrail_service ----------
Scenario: svcov3 lazy-load AutonomyGuardrailService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "AutonomyGuardrailService"
Then svcov3 the attribute "AutonomyGuardrailService" should be resolved
# ---------- config_service ----------
Scenario: svcov3 lazy-load ConfigEntry
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ConfigEntry"
Then svcov3 the attribute "ConfigEntry" should be resolved
Scenario: svcov3 lazy-load ConfigLevel
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ConfigLevel"
Then svcov3 the attribute "ConfigLevel" should be resolved
Scenario: svcov3 lazy-load ConfigService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ConfigService"
Then svcov3 the attribute "ConfigService" should be resolved
Scenario: svcov3 lazy-load ResolvedValue
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ResolvedValue"
Then svcov3 the attribute "ResolvedValue" should be resolved
# ---------- context_strategies ----------
Scenario: svcov3 lazy-load BreadthDepthNavigatorStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "BreadthDepthNavigatorStrategy"
Then svcov3 the attribute "BreadthDepthNavigatorStrategy" should be resolved
Scenario: svcov3 lazy-load SemanticEmbeddingStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticEmbeddingStrategy"
Then svcov3 the attribute "SemanticEmbeddingStrategy" should be resolved
Scenario: svcov3 lazy-load SimpleKeywordStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SimpleKeywordStrategy"
Then svcov3 the attribute "SimpleKeywordStrategy" should be resolved
# ---------- correction_service ----------
Scenario: svcov3 lazy-load CorrectionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "CorrectionService"
Then svcov3 the attribute "CorrectionService" should be resolved
# ---------- cost_budget_service ----------
Scenario: svcov3 lazy-load CostBudgetService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "CostBudgetService"
Then svcov3 the attribute "CostBudgetService" should be resolved
# ---------- cross_plan_correction_service ----------
Scenario: svcov3 lazy-load CrossPlanCorrectionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "CrossPlanCorrectionService"
Then svcov3 the attribute "CrossPlanCorrectionService" should be resolved
# ---------- decision_service ----------
Scenario: svcov3 lazy-load DecisionNotFoundError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecisionNotFoundError"
Then svcov3 the attribute "DecisionNotFoundError" should be resolved
Scenario: svcov3 lazy-load DecisionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecisionService"
Then svcov3 the attribute "DecisionService" should be resolved
Scenario: svcov3 lazy-load DuplicateDecisionError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DuplicateDecisionError"
Then svcov3 the attribute "DuplicateDecisionError" should be resolved
Scenario: svcov3 lazy-load SequenceConflictError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SequenceConflictError"
Then svcov3 the attribute "SequenceConflictError" should be resolved
Scenario: svcov3 lazy-load SnapshotStore
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SnapshotStore"
Then svcov3 the attribute "SnapshotStore" should be resolved
# ---------- decomposition_clustering ----------
Scenario: svcov3 lazy-load ClusteringStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ClusteringStrategy"
Then svcov3 the attribute "ClusteringStrategy" should be resolved
# ---------- decomposition_graph ----------
Scenario: svcov3 lazy-load DependencyClosureComputer
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DependencyClosureComputer"
Then svcov3 the attribute "DependencyClosureComputer" should be resolved
# ---------- decomposition_models ----------
Scenario: svcov3 lazy-load ClusterStrategy
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ClusterStrategy"
Then svcov3 the attribute "ClusterStrategy" should be resolved
Scenario: svcov3 lazy-load DecompositionConfig
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecompositionConfig"
Then svcov3 the attribute "DecompositionConfig" should be resolved
Scenario: svcov3 lazy-load DecompositionNode
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecompositionNode"
Then svcov3 the attribute "DecompositionNode" should be resolved
Scenario: svcov3 lazy-load DecompositionResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecompositionResult"
Then svcov3 the attribute "DecompositionResult" should be resolved
Scenario: svcov3 lazy-load DependencyEdge
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DependencyEdge"
Then svcov3 the attribute "DependencyEdge" should be resolved
Scenario: svcov3 lazy-load DependencyGraph
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DependencyGraph"
Then svcov3 the attribute "DependencyGraph" should be resolved
Scenario: svcov3 lazy-load DependencyType
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DependencyType"
Then svcov3 the attribute "DependencyType" should be resolved
# ---------- decomposition_service ----------
Scenario: svcov3 lazy-load DecompositionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DecompositionService"
Then svcov3 the attribute "DecompositionService" should be resolved
# ---------- execution_environment_resolver ----------
Scenario: svcov3 lazy-load ContainerUnavailableError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ContainerUnavailableError"
Then svcov3 the attribute "ContainerUnavailableError" should be resolved
Scenario: svcov3 lazy-load ExecutionEnvironmentResolver
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ExecutionEnvironmentResolver"
Then svcov3 the attribute "ExecutionEnvironmentResolver" should be resolved
# ---------- fix_then_revalidate ----------
Scenario: svcov3 lazy-load FixAttemptRecord
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FixAttemptRecord"
Then svcov3 the attribute "FixAttemptRecord" should be resolved
Scenario: svcov3 lazy-load FixThenRevalidateOrchestrator
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FixThenRevalidateOrchestrator"
Then svcov3 the attribute "FixThenRevalidateOrchestrator" should be resolved
Scenario: svcov3 lazy-load FixThenRevalidateResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FixThenRevalidateResult"
Then svcov3 the attribute "FixThenRevalidateResult" should be resolved
# ---------- fusion_engine ----------
Scenario: svcov3 lazy-load FusionConfig
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FusionConfig"
Then svcov3 the attribute "FusionConfig" should be resolved
Scenario: svcov3 lazy-load FusionEngine
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FusionEngine"
Then svcov3 the attribute "FusionEngine" should be resolved
Scenario: svcov3 lazy-load FusionResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FusionResult"
Then svcov3 the attribute "FusionResult" should be resolved
# ---------- invariant_service ----------
Scenario: svcov3 lazy-load InvariantService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "InvariantService"
Then svcov3 the attribute "InvariantService" should be resolved
# ---------- multi_project_service ----------
Scenario: svcov3 lazy-load MultiProjectService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "MultiProjectService"
Then svcov3 the attribute "MultiProjectService" should be resolved
# ---------- permission_service ----------
Scenario: svcov3 lazy-load PermissionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PermissionService"
Then svcov3 the attribute "PermissionService" should be resolved
Scenario: svcov3 lazy-load enforce_permission
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "enforce_permission"
Then svcov3 the attribute "enforce_permission" should be resolved
Scenario: svcov3 lazy-load get_default_permission_service
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "get_default_permission_service"
Then svcov3 the attribute "get_default_permission_service" should be resolved
Scenario: svcov3 lazy-load set_default_permission_service
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "set_default_permission_service"
Then svcov3 the attribute "set_default_permission_service" should be resolved
# ---------- plan_execution_context ----------
Scenario: svcov3 lazy-load PlanExecutionContext
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PlanExecutionContext"
Then svcov3 the attribute "PlanExecutionContext" should be resolved
Scenario: svcov3 lazy-load RuntimeExecuteActor
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "RuntimeExecuteActor"
Then svcov3 the attribute "RuntimeExecuteActor" should be resolved
Scenario: svcov3 lazy-load RuntimeExecuteResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "RuntimeExecuteResult"
Then svcov3 the attribute "RuntimeExecuteResult" should be resolved
# ---------- prompt_sanitizer ----------
Scenario: svcov3 lazy-load PromptInjectionDetected
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PromptInjectionDetected"
Then svcov3 the attribute "PromptInjectionDetected" should be resolved
Scenario: svcov3 lazy-load PromptSanitizer
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PromptSanitizer"
Then svcov3 the attribute "PromptSanitizer" should be resolved
Scenario: svcov3 lazy-load SanitizationResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SanitizationResult"
Then svcov3 the attribute "SanitizationResult" should be resolved
# ---------- repo_indexing_service ----------
Scenario: svcov3 lazy-load RepoIndexingService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "RepoIndexingService"
Then svcov3 the attribute "RepoIndexingService" should be resolved
# ---------- semantic_validation_rules ----------
Scenario: svcov3 lazy-load APIMisuseRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "APIMisuseRule"
Then svcov3 the attribute "APIMisuseRule" should be resolved
Scenario: svcov3 lazy-load BrokenReferenceRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "BrokenReferenceRule"
Then svcov3 the attribute "BrokenReferenceRule" should be resolved
Scenario: svcov3 lazy-load DependencyCycleRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DependencyCycleRule"
Then svcov3 the attribute "DependencyCycleRule" should be resolved
Scenario: svcov3 lazy-load DuplicateImportRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DuplicateImportRule"
Then svcov3 the attribute "DuplicateImportRule" should be resolved
Scenario: svcov3 lazy-load MissingImportRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "MissingImportRule"
Then svcov3 the attribute "MissingImportRule" should be resolved
Scenario: svcov3 lazy-load MissingSymbolRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "MissingSymbolRule"
Then svcov3 the attribute "MissingSymbolRule" should be resolved
Scenario: svcov3 lazy-load SemanticCheckResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticCheckResult"
Then svcov3 the attribute "SemanticCheckResult" should be resolved
Scenario: svcov3 lazy-load SemanticValidationSeverity
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticValidationSeverity"
Then svcov3 the attribute "SemanticValidationSeverity" should be resolved
Scenario: svcov3 lazy-load SyntaxCheckRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SyntaxCheckRule"
Then svcov3 the attribute "SyntaxCheckRule" should be resolved
# ---------- semantic_validation_service ----------
Scenario: svcov3 lazy-load NormalisedOutputDict
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "NormalisedOutputDict"
Then svcov3 the attribute "NormalisedOutputDict" should be resolved
Scenario: svcov3 lazy-load PipelineResultDict
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PipelineResultDict"
Then svcov3 the attribute "PipelineResultDict" should be resolved
Scenario: svcov3 lazy-load SemanticRuleRegistry
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticRuleRegistry"
Then svcov3 the attribute "SemanticRuleRegistry" should be resolved
Scenario: svcov3 lazy-load SemanticValidationCache
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticValidationCache"
Then svcov3 the attribute "SemanticValidationCache" should be resolved
Scenario: svcov3 lazy-load SemanticValidationRule
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticValidationRule"
Then svcov3 the attribute "SemanticValidationRule" should be resolved
Scenario: svcov3 lazy-load SemanticValidationService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SemanticValidationService"
Then svcov3 the attribute "SemanticValidationService" should be resolved
Scenario: svcov3 lazy-load create_default_registry
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "create_default_registry"
Then svcov3 the attribute "create_default_registry" should be resolved
Scenario: svcov3 lazy-load map_severity_to_mode
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "map_severity_to_mode"
Then svcov3 the attribute "map_severity_to_mode" should be resolved
Scenario: svcov3 lazy-load resolve_severity
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "resolve_severity"
Then svcov3 the attribute "resolve_severity" should be resolved
# ---------- service_retry_wiring ----------
Scenario: svcov3 lazy-load ServiceRetryWiring
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ServiceRetryWiring"
Then svcov3 the attribute "ServiceRetryWiring" should be resolved
# ---------- session_service ----------
Scenario: svcov3 lazy-load PersistentSessionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "PersistentSessionService"
Then svcov3 the attribute "PersistentSessionService" should be resolved
# ---------- skeleton_compressor ----------
Scenario: svcov3 lazy-load SkeletonCompressorService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SkeletonCompressorService"
Then svcov3 the attribute "SkeletonCompressorService" should be resolved
# ---------- skill_registry_service ----------
Scenario: svcov3 lazy-load SkillRegistryService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SkillRegistryService"
Then svcov3 the attribute "SkillRegistryService" should be resolved
# ---------- strategy_coordinator ----------
Scenario: svcov3 lazy-load CoordinationResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "CoordinationResult"
Then svcov3 the attribute "CoordinationResult" should be resolved
Scenario: svcov3 lazy-load CoordinatorConfig
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "CoordinatorConfig"
Then svcov3 the attribute "CoordinatorConfig" should be resolved
Scenario: svcov3 lazy-load StrategyCoordinator
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "StrategyCoordinator"
Then svcov3 the attribute "StrategyCoordinator" should be resolved
# ---------- strategy_registry ----------
Scenario: svcov3 lazy-load StrategyNotFoundError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "StrategyNotFoundError"
Then svcov3 the attribute "StrategyNotFoundError" should be resolved
Scenario: svcov3 lazy-load StrategyRegistrationError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "StrategyRegistrationError"
Then svcov3 the attribute "StrategyRegistrationError" should be resolved
Scenario: svcov3 lazy-load StrategyRegistry
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "StrategyRegistry"
Then svcov3 the attribute "StrategyRegistry" should be resolved
# ---------- subplan_execution_service ----------
Scenario: svcov3 lazy-load SubplanExecutionOutput
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanExecutionOutput"
Then svcov3 the attribute "SubplanExecutionOutput" should be resolved
Scenario: svcov3 lazy-load SubplanExecutionResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanExecutionResult"
Then svcov3 the attribute "SubplanExecutionResult" should be resolved
Scenario: svcov3 lazy-load SubplanExecutionService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanExecutionService"
Then svcov3 the attribute "SubplanExecutionService" should be resolved
# ---------- subplan_merge_service ----------
Scenario: svcov3 lazy-load FileMergeOutcome
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "FileMergeOutcome"
Then svcov3 the attribute "FileMergeOutcome" should be resolved
Scenario: svcov3 lazy-load MergeConflictError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "MergeConflictError"
Then svcov3 the attribute "MergeConflictError" should be resolved
Scenario: svcov3 lazy-load SubplanMergeResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanMergeResult"
Then svcov3 the attribute "SubplanMergeResult" should be resolved
Scenario: svcov3 lazy-load SubplanMergeService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanMergeService"
Then svcov3 the attribute "SubplanMergeService" should be resolved
# ---------- subplan_service ----------
Scenario: svcov3 lazy-load SpawnEntry
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SpawnEntry"
Then svcov3 the attribute "SpawnEntry" should be resolved
Scenario: svcov3 lazy-load SpawnMetadata
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SpawnMetadata"
Then svcov3 the attribute "SpawnMetadata" should be resolved
Scenario: svcov3 lazy-load SpawnResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SpawnResult"
Then svcov3 the attribute "SpawnResult" should be resolved
Scenario: svcov3 lazy-load SubplanSpawnError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanSpawnError"
Then svcov3 the attribute "SubplanSpawnError" should be resolved
Scenario: svcov3 lazy-load SpawnValidationResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SpawnValidationResult"
Then svcov3 the attribute "SpawnValidationResult" should be resolved
Scenario: svcov3 lazy-load SubplanService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "SubplanService"
Then svcov3 the attribute "SubplanService" should be resolved
# ---------- temporal_service ----------
Scenario: svcov3 lazy-load TemporalService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "TemporalService"
Then svcov3 the attribute "TemporalService" should be resolved
# ---------- tool_registry_service ----------
Scenario: svcov3 lazy-load ToolRegistryService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ToolRegistryService"
Then svcov3 the attribute "ToolRegistryService" should be resolved
# ---------- trace_service ----------
Scenario: svcov3 lazy-load TraceService
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "TraceService"
Then svcov3 the attribute "TraceService" should be resolved
# ---------- uko_indexer ----------
Scenario: svcov3 lazy-load UKOIndexer
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "UKOIndexer"
Then svcov3 the attribute "UKOIndexer" should be resolved
# ---------- uko_indexer_protocols ----------
Scenario: svcov3 lazy-load ContentReader
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ContentReader"
Then svcov3 the attribute "ContentReader" should be resolved
Scenario: svcov3 lazy-load DefaultLifecycleHook
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DefaultLifecycleHook"
Then svcov3 the attribute "DefaultLifecycleHook" should be resolved
Scenario: svcov3 lazy-load IndexLifecycleHook
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "IndexLifecycleHook"
Then svcov3 the attribute "IndexLifecycleHook" should be resolved
Scenario: svcov3 lazy-load LocationContentReader
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "LocationContentReader"
Then svcov3 the attribute "LocationContentReader" should be resolved
# ---------- uko_loader ----------
Scenario: svcov3 lazy-load UKOLoader
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "UKOLoader"
Then svcov3 the attribute "UKOLoader" should be resolved
Scenario: svcov3 lazy-load UKOValidationError
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "UKOValidationError"
Then svcov3 the attribute "UKOValidationError" should be resolved
# ---------- validation_apply ----------
Scenario: svcov3 lazy-load ApplyValidationGate
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ApplyValidationGate"
Then svcov3 the attribute "ApplyValidationGate" should be resolved
Scenario: svcov3 lazy-load ApplyValidationResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ApplyValidationResult"
Then svcov3 the attribute "ApplyValidationResult" should be resolved
Scenario: svcov3 lazy-load ApplyValidationSummary
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ApplyValidationSummary"
Then svcov3 the attribute "ApplyValidationSummary" should be resolved
Scenario: svcov3 lazy-load AttachmentScope
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "AttachmentScope"
Then svcov3 the attribute "AttachmentScope" should be resolved
Scenario: svcov3 lazy-load DefaultValidationRunner
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "DefaultValidationRunner"
Then svcov3 the attribute "DefaultValidationRunner" should be resolved
Scenario: svcov3 lazy-load ValidationAttachment
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationAttachment"
Then svcov3 the attribute "ValidationAttachment" should be resolved
Scenario: svcov3 lazy-load ValidationRunner
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationRunner"
Then svcov3 the attribute "ValidationRunner" should be resolved
# ---------- validation_pipeline ----------
Scenario: svcov3 lazy-load ValidationCommand
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationCommand"
Then svcov3 the attribute "ValidationCommand" should be resolved
Scenario: svcov3 lazy-load ValidationPipeline
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationPipeline"
Then svcov3 the attribute "ValidationPipeline" should be resolved
Scenario: svcov3 lazy-load ValidationResult
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationResult"
Then svcov3 the attribute "ValidationResult" should be resolved
Scenario: svcov3 lazy-load ValidationSummary
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ValidationSummary"
Then svcov3 the attribute "ValidationSummary" should be resolved
# ---------- error / edge-case paths ----------
Scenario: svcov3 unknown attribute raises AttributeError
Given svcov3 a fresh services module
When svcov3 I access an unknown attribute "NoSuchSymbol_xyzzy"
Then svcov3 an AttributeError should be stored for "NoSuchSymbol_xyzzy"
Scenario: svcov3 __all__ matches _LAZY_IMPORTS keys
Given svcov3 a fresh services module
Then svcov3 __all__ should equal sorted _LAZY_IMPORTS keys
Scenario: svcov3 cached attribute skips __getattr__ on second access
Given svcov3 a fresh services module
When svcov3 I access lazy attribute "ConfigEntry"
And svcov3 I access lazy attribute "ConfigEntry" again
Then svcov3 the attribute "ConfigEntry" should be resolved