tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,336 +1,336 @@
|
|
|
1
|
-
"""
|
|
2
|
-
NFR Validator - Validates non-functional requirements in design phase.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from dataclasses import dataclass, field
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@dataclass
|
|
13
|
-
class NFRValidationResult:
|
|
14
|
-
"""Result of NFR validation."""
|
|
15
|
-
|
|
16
|
-
is_valid: bool
|
|
17
|
-
security_score: float = 0.0 # 0-100
|
|
18
|
-
performance_score: float = 0.0 # 0-100
|
|
19
|
-
reliability_score: float = 0.0 # 0-100
|
|
20
|
-
maintainability_score: float = 0.0 # 0-100
|
|
21
|
-
overall_score: float = 0.0 # Weighted average
|
|
22
|
-
|
|
23
|
-
security_issues: list[str] = field(default_factory=list)
|
|
24
|
-
performance_issues: list[str] = field(default_factory=list)
|
|
25
|
-
reliability_issues: list[str] = field(default_factory=list)
|
|
26
|
-
maintainability_issues: list[str] = field(default_factory=list)
|
|
27
|
-
recommendations: list[str] = field(default_factory=list)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class NFRValidator:
|
|
31
|
-
"""Validates non-functional requirements in architecture and design."""
|
|
32
|
-
|
|
33
|
-
SECURITY_WEIGHT = 0.30
|
|
34
|
-
PERFORMANCE_WEIGHT = 0.25
|
|
35
|
-
RELIABILITY_WEIGHT = 0.25
|
|
36
|
-
MAINTAINABILITY_WEIGHT = 0.20
|
|
37
|
-
|
|
38
|
-
def validate_architecture_nfr(
|
|
39
|
-
self, architecture: dict[str, Any], nfr_requirements: dict[str, Any]
|
|
40
|
-
) -> NFRValidationResult:
|
|
41
|
-
"""
|
|
42
|
-
Validate architecture against NFR requirements.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
architecture: Architecture document
|
|
46
|
-
nfr_requirements: NFR requirements dict with categories
|
|
47
|
-
|
|
48
|
-
Returns:
|
|
49
|
-
NFRValidationResult
|
|
50
|
-
"""
|
|
51
|
-
result = NFRValidationResult(is_valid=True)
|
|
52
|
-
|
|
53
|
-
arch_text = str(architecture).lower()
|
|
54
|
-
security_reqs = nfr_requirements.get("security", [])
|
|
55
|
-
performance_reqs = nfr_requirements.get("performance", [])
|
|
56
|
-
reliability_reqs = nfr_requirements.get("reliability", [])
|
|
57
|
-
maintainability_reqs = nfr_requirements.get("maintainability", [])
|
|
58
|
-
|
|
59
|
-
# Validate Security
|
|
60
|
-
result.security_score, result.security_issues = self._validate_security(
|
|
61
|
-
architecture, security_reqs, arch_text
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
# Validate Performance
|
|
65
|
-
result.performance_score, result.performance_issues = self._validate_performance(
|
|
66
|
-
architecture, performance_reqs, arch_text
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Validate Reliability
|
|
70
|
-
result.reliability_score, result.reliability_issues = self._validate_reliability(
|
|
71
|
-
architecture, reliability_reqs, arch_text
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
# Validate Maintainability
|
|
75
|
-
result.maintainability_score, result.maintainability_issues = self._validate_maintainability(
|
|
76
|
-
architecture, maintainability_reqs, arch_text
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
# Calculate overall score
|
|
80
|
-
result.overall_score = (
|
|
81
|
-
result.security_score * self.SECURITY_WEIGHT
|
|
82
|
-
+ result.performance_score * self.PERFORMANCE_WEIGHT
|
|
83
|
-
+ result.reliability_score * self.RELIABILITY_WEIGHT
|
|
84
|
-
+ result.maintainability_score * self.MAINTAINABILITY_WEIGHT
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
# Determine validity (threshold: 70%)
|
|
88
|
-
result.is_valid = result.overall_score >= 70.0
|
|
89
|
-
|
|
90
|
-
# Generate recommendations
|
|
91
|
-
if result.security_score < 70.0:
|
|
92
|
-
result.recommendations.append("Improve security architecture - address security requirements")
|
|
93
|
-
if result.performance_score < 70.0:
|
|
94
|
-
result.recommendations.append("Address performance requirements in architecture")
|
|
95
|
-
if result.reliability_score < 70.0:
|
|
96
|
-
result.recommendations.append("Enhance reliability measures in architecture")
|
|
97
|
-
if result.maintainability_score < 70.0:
|
|
98
|
-
result.recommendations.append("Improve maintainability considerations")
|
|
99
|
-
|
|
100
|
-
return result
|
|
101
|
-
|
|
102
|
-
def validate_api_nfr(self, api_design: dict[str, Any], nfr_requirements: dict[str, Any]) -> NFRValidationResult:
|
|
103
|
-
"""
|
|
104
|
-
Validate API design against NFR requirements.
|
|
105
|
-
|
|
106
|
-
Args:
|
|
107
|
-
api_design: API design document
|
|
108
|
-
nfr_requirements: NFR requirements dict
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
NFRValidationResult
|
|
112
|
-
"""
|
|
113
|
-
result = NFRValidationResult(is_valid=True)
|
|
114
|
-
|
|
115
|
-
api_text = str(api_design).lower()
|
|
116
|
-
security_reqs = nfr_requirements.get("security", [])
|
|
117
|
-
performance_reqs = nfr_requirements.get("performance", [])
|
|
118
|
-
|
|
119
|
-
# Validate Security
|
|
120
|
-
result.security_score, result.security_issues = self._validate_api_security(
|
|
121
|
-
api_design, security_reqs, api_text
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
# Validate Performance
|
|
125
|
-
result.performance_score, result.performance_issues = self._validate_api_performance(
|
|
126
|
-
api_design, performance_reqs, api_text
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
# Reliability and Maintainability less critical for API design
|
|
130
|
-
result.reliability_score = 80.0 # Default
|
|
131
|
-
result.maintainability_score = 80.0 # Default
|
|
132
|
-
|
|
133
|
-
# Calculate overall score
|
|
134
|
-
result.overall_score = (
|
|
135
|
-
result.security_score * self.SECURITY_WEIGHT
|
|
136
|
-
+ result.performance_score * self.PERFORMANCE_WEIGHT
|
|
137
|
-
+ result.reliability_score * self.RELIABILITY_WEIGHT
|
|
138
|
-
+ result.maintainability_score * self.MAINTAINABILITY_WEIGHT
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
result.is_valid = result.overall_score >= 70.0
|
|
142
|
-
|
|
143
|
-
if result.security_score < 70.0:
|
|
144
|
-
result.recommendations.append("Add security measures to API design (authentication, authorization)")
|
|
145
|
-
if result.performance_score < 70.0:
|
|
146
|
-
result.recommendations.append("Address performance requirements in API design (caching, pagination)")
|
|
147
|
-
|
|
148
|
-
return result
|
|
149
|
-
|
|
150
|
-
def _validate_security(
|
|
151
|
-
self, architecture: dict[str, Any], security_reqs: list[str], arch_text: str
|
|
152
|
-
) -> tuple[float, list[str]]:
|
|
153
|
-
"""Validate security NFRs."""
|
|
154
|
-
score = 100.0
|
|
155
|
-
issues = []
|
|
156
|
-
|
|
157
|
-
if not security_reqs:
|
|
158
|
-
return 80.0, [] # No security requirements = assume basic security
|
|
159
|
-
|
|
160
|
-
# Check for authentication
|
|
161
|
-
if "authentication" in " ".join(security_reqs).lower():
|
|
162
|
-
if "auth" not in arch_text and "login" not in arch_text:
|
|
163
|
-
score -= 30.0
|
|
164
|
-
issues.append("Authentication not addressed in architecture")
|
|
165
|
-
|
|
166
|
-
# Check for authorization
|
|
167
|
-
if "authorization" in " ".join(security_reqs).lower() or "access control" in " ".join(security_reqs).lower():
|
|
168
|
-
if "authorization" not in arch_text and "permission" not in arch_text and "role" not in arch_text:
|
|
169
|
-
score -= 25.0
|
|
170
|
-
issues.append("Authorization/access control not addressed")
|
|
171
|
-
|
|
172
|
-
# Check for data encryption
|
|
173
|
-
if "encryption" in " ".join(security_reqs).lower() or "encrypt" in " ".join(security_reqs).lower():
|
|
174
|
-
if "encrypt" not in arch_text:
|
|
175
|
-
score -= 20.0
|
|
176
|
-
issues.append("Data encryption not specified")
|
|
177
|
-
|
|
178
|
-
# Check for secure communication
|
|
179
|
-
if "tls" in " ".join(security_reqs).lower() or "ssl" in " ".join(security_reqs).lower() or "https" in " ".join(security_reqs).lower():
|
|
180
|
-
if "tls" not in arch_text and "ssl" not in arch_text and "https" not in arch_text:
|
|
181
|
-
score -= 15.0
|
|
182
|
-
issues.append("Secure communication (TLS/SSL) not specified")
|
|
183
|
-
|
|
184
|
-
return max(0.0, score), issues
|
|
185
|
-
|
|
186
|
-
def _validate_performance(
|
|
187
|
-
self, architecture: dict[str, Any], performance_reqs: list[str], arch_text: str
|
|
188
|
-
) -> tuple[float, list[str]]:
|
|
189
|
-
"""Validate performance NFRs."""
|
|
190
|
-
score = 100.0
|
|
191
|
-
issues = []
|
|
192
|
-
|
|
193
|
-
if not performance_reqs:
|
|
194
|
-
return 80.0, [] # No performance requirements = assume acceptable
|
|
195
|
-
|
|
196
|
-
perf_text = " ".join(performance_reqs).lower()
|
|
197
|
-
|
|
198
|
-
# Check for response time requirements
|
|
199
|
-
if "response time" in perf_text or "latency" in perf_text:
|
|
200
|
-
if "response" not in arch_text and "latency" not in arch_text and "performance" not in arch_text:
|
|
201
|
-
score -= 25.0
|
|
202
|
-
issues.append("Response time/latency not addressed")
|
|
203
|
-
|
|
204
|
-
# Check for throughput requirements
|
|
205
|
-
if "throughput" in perf_text or "requests per second" in perf_text:
|
|
206
|
-
if "throughput" not in arch_text and "rps" not in arch_text:
|
|
207
|
-
score -= 20.0
|
|
208
|
-
issues.append("Throughput requirements not addressed")
|
|
209
|
-
|
|
210
|
-
# Check for caching strategy
|
|
211
|
-
if "cache" in perf_text:
|
|
212
|
-
if "cache" not in arch_text:
|
|
213
|
-
score -= 15.0
|
|
214
|
-
issues.append("Caching strategy not specified")
|
|
215
|
-
|
|
216
|
-
# Check for scalability
|
|
217
|
-
if "scalability" in perf_text or "scale" in perf_text:
|
|
218
|
-
if "scal" not in arch_text and "scale" not in arch_text:
|
|
219
|
-
score -= 20.0
|
|
220
|
-
issues.append("Scalability approach not defined")
|
|
221
|
-
|
|
222
|
-
return max(0.0, score), issues
|
|
223
|
-
|
|
224
|
-
def _validate_reliability(
|
|
225
|
-
self, architecture: dict[str, Any], reliability_reqs: list[str], arch_text: str
|
|
226
|
-
) -> tuple[float, list[str]]:
|
|
227
|
-
"""Validate reliability NFRs."""
|
|
228
|
-
score = 100.0
|
|
229
|
-
issues = []
|
|
230
|
-
|
|
231
|
-
if not reliability_reqs:
|
|
232
|
-
return 80.0, [] # No reliability requirements = assume acceptable
|
|
233
|
-
|
|
234
|
-
rel_text = " ".join(reliability_reqs).lower()
|
|
235
|
-
|
|
236
|
-
# Check for error handling
|
|
237
|
-
if "error handling" in rel_text or "error" in rel_text:
|
|
238
|
-
if "error" not in arch_text and "exception" not in arch_text:
|
|
239
|
-
score -= 25.0
|
|
240
|
-
issues.append("Error handling not addressed")
|
|
241
|
-
|
|
242
|
-
# Check for availability/uptime
|
|
243
|
-
if "availability" in rel_text or "uptime" in rel_text:
|
|
244
|
-
if "availability" not in arch_text and "uptime" not in arch_text and "redundancy" not in arch_text:
|
|
245
|
-
score -= 25.0
|
|
246
|
-
issues.append("Availability/redundancy not addressed")
|
|
247
|
-
|
|
248
|
-
# Check for backup/recovery
|
|
249
|
-
if "backup" in rel_text or "recovery" in rel_text:
|
|
250
|
-
if "backup" not in arch_text and "recovery" not in arch_text:
|
|
251
|
-
score -= 20.0
|
|
252
|
-
issues.append("Backup/recovery strategy not specified")
|
|
253
|
-
|
|
254
|
-
return max(0.0, score), issues
|
|
255
|
-
|
|
256
|
-
def _validate_maintainability(
|
|
257
|
-
self, architecture: dict[str, Any], maintainability_reqs: list[str], arch_text: str
|
|
258
|
-
) -> tuple[float, list[str]]:
|
|
259
|
-
"""Validate maintainability NFRs."""
|
|
260
|
-
score = 100.0
|
|
261
|
-
issues = []
|
|
262
|
-
|
|
263
|
-
if not maintainability_reqs:
|
|
264
|
-
return 80.0, [] # No maintainability requirements = assume acceptable
|
|
265
|
-
|
|
266
|
-
# Check for documentation
|
|
267
|
-
if "documentation" not in arch_text and "docs" not in arch_text:
|
|
268
|
-
score -= 20.0
|
|
269
|
-
issues.append("Documentation not addressed")
|
|
270
|
-
|
|
271
|
-
# Check for modularity
|
|
272
|
-
if "modular" not in arch_text and "module" not in arch_text and "component" not in arch_text:
|
|
273
|
-
score -= 15.0
|
|
274
|
-
issues.append("Modularity not emphasized")
|
|
275
|
-
|
|
276
|
-
# Check for code quality
|
|
277
|
-
if "quality" not in arch_text and "standard" not in arch_text:
|
|
278
|
-
score -= 10.0
|
|
279
|
-
issues.append("Code quality standards not mentioned")
|
|
280
|
-
|
|
281
|
-
return max(0.0, score), issues
|
|
282
|
-
|
|
283
|
-
def _validate_api_security(
|
|
284
|
-
self, api_design: dict[str, Any], security_reqs: list[str], api_text: str
|
|
285
|
-
) -> tuple[float, list[str]]:
|
|
286
|
-
"""Validate API security."""
|
|
287
|
-
score = 100.0
|
|
288
|
-
issues = []
|
|
289
|
-
|
|
290
|
-
if not security_reqs:
|
|
291
|
-
return 80.0, []
|
|
292
|
-
|
|
293
|
-
# Check for authentication in API
|
|
294
|
-
if "authentication" in " ".join(security_reqs).lower():
|
|
295
|
-
endpoints = api_design.get("endpoints", [])
|
|
296
|
-
has_auth = any("auth" in str(e).lower() for e in endpoints) or "auth" in api_text
|
|
297
|
-
if not has_auth:
|
|
298
|
-
score -= 30.0
|
|
299
|
-
issues.append("API authentication not specified")
|
|
300
|
-
|
|
301
|
-
# Check for HTTPS
|
|
302
|
-
if "https" in " ".join(security_reqs).lower() or "tls" in " ".join(security_reqs).lower():
|
|
303
|
-
if "https" not in api_text and "tls" not in api_text:
|
|
304
|
-
score -= 20.0
|
|
305
|
-
issues.append("HTTPS/TLS not specified for API")
|
|
306
|
-
|
|
307
|
-
return max(0.0, score), issues
|
|
308
|
-
|
|
309
|
-
def _validate_api_performance(
|
|
310
|
-
self, api_design: dict[str, Any], performance_reqs: list[str], api_text: str
|
|
311
|
-
) -> tuple[float, list[str]]:
|
|
312
|
-
"""Validate API performance."""
|
|
313
|
-
score = 100.0
|
|
314
|
-
issues = []
|
|
315
|
-
|
|
316
|
-
if not performance_reqs:
|
|
317
|
-
return 80.0, []
|
|
318
|
-
|
|
319
|
-
# Check for pagination
|
|
320
|
-
if "pagination" not in api_text and "page" not in api_text:
|
|
321
|
-
score -= 15.0
|
|
322
|
-
issues.append("Pagination not specified for list endpoints")
|
|
323
|
-
|
|
324
|
-
# Check for rate limiting
|
|
325
|
-
if "rate limit" in " ".join(performance_reqs).lower():
|
|
326
|
-
if "rate limit" not in api_text:
|
|
327
|
-
score -= 20.0
|
|
328
|
-
issues.append("Rate limiting not specified")
|
|
329
|
-
|
|
330
|
-
# Check for caching headers
|
|
331
|
-
if "cache" in " ".join(performance_reqs).lower():
|
|
332
|
-
if "cache" not in api_text:
|
|
333
|
-
score -= 15.0
|
|
334
|
-
issues.append("Caching strategy not specified")
|
|
335
|
-
|
|
336
|
-
return max(0.0, score), issues
|
|
1
|
+
"""
|
|
2
|
+
NFR Validator - Validates non-functional requirements in design phase.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class NFRValidationResult:
|
|
14
|
+
"""Result of NFR validation."""
|
|
15
|
+
|
|
16
|
+
is_valid: bool
|
|
17
|
+
security_score: float = 0.0 # 0-100
|
|
18
|
+
performance_score: float = 0.0 # 0-100
|
|
19
|
+
reliability_score: float = 0.0 # 0-100
|
|
20
|
+
maintainability_score: float = 0.0 # 0-100
|
|
21
|
+
overall_score: float = 0.0 # Weighted average
|
|
22
|
+
|
|
23
|
+
security_issues: list[str] = field(default_factory=list)
|
|
24
|
+
performance_issues: list[str] = field(default_factory=list)
|
|
25
|
+
reliability_issues: list[str] = field(default_factory=list)
|
|
26
|
+
maintainability_issues: list[str] = field(default_factory=list)
|
|
27
|
+
recommendations: list[str] = field(default_factory=list)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class NFRValidator:
|
|
31
|
+
"""Validates non-functional requirements in architecture and design."""
|
|
32
|
+
|
|
33
|
+
SECURITY_WEIGHT = 0.30
|
|
34
|
+
PERFORMANCE_WEIGHT = 0.25
|
|
35
|
+
RELIABILITY_WEIGHT = 0.25
|
|
36
|
+
MAINTAINABILITY_WEIGHT = 0.20
|
|
37
|
+
|
|
38
|
+
def validate_architecture_nfr(
|
|
39
|
+
self, architecture: dict[str, Any], nfr_requirements: dict[str, Any]
|
|
40
|
+
) -> NFRValidationResult:
|
|
41
|
+
"""
|
|
42
|
+
Validate architecture against NFR requirements.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
architecture: Architecture document
|
|
46
|
+
nfr_requirements: NFR requirements dict with categories
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
NFRValidationResult
|
|
50
|
+
"""
|
|
51
|
+
result = NFRValidationResult(is_valid=True)
|
|
52
|
+
|
|
53
|
+
arch_text = str(architecture).lower()
|
|
54
|
+
security_reqs = nfr_requirements.get("security", [])
|
|
55
|
+
performance_reqs = nfr_requirements.get("performance", [])
|
|
56
|
+
reliability_reqs = nfr_requirements.get("reliability", [])
|
|
57
|
+
maintainability_reqs = nfr_requirements.get("maintainability", [])
|
|
58
|
+
|
|
59
|
+
# Validate Security
|
|
60
|
+
result.security_score, result.security_issues = self._validate_security(
|
|
61
|
+
architecture, security_reqs, arch_text
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Validate Performance
|
|
65
|
+
result.performance_score, result.performance_issues = self._validate_performance(
|
|
66
|
+
architecture, performance_reqs, arch_text
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Validate Reliability
|
|
70
|
+
result.reliability_score, result.reliability_issues = self._validate_reliability(
|
|
71
|
+
architecture, reliability_reqs, arch_text
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Validate Maintainability
|
|
75
|
+
result.maintainability_score, result.maintainability_issues = self._validate_maintainability(
|
|
76
|
+
architecture, maintainability_reqs, arch_text
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# Calculate overall score
|
|
80
|
+
result.overall_score = (
|
|
81
|
+
result.security_score * self.SECURITY_WEIGHT
|
|
82
|
+
+ result.performance_score * self.PERFORMANCE_WEIGHT
|
|
83
|
+
+ result.reliability_score * self.RELIABILITY_WEIGHT
|
|
84
|
+
+ result.maintainability_score * self.MAINTAINABILITY_WEIGHT
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Determine validity (threshold: 70%)
|
|
88
|
+
result.is_valid = result.overall_score >= 70.0
|
|
89
|
+
|
|
90
|
+
# Generate recommendations
|
|
91
|
+
if result.security_score < 70.0:
|
|
92
|
+
result.recommendations.append("Improve security architecture - address security requirements")
|
|
93
|
+
if result.performance_score < 70.0:
|
|
94
|
+
result.recommendations.append("Address performance requirements in architecture")
|
|
95
|
+
if result.reliability_score < 70.0:
|
|
96
|
+
result.recommendations.append("Enhance reliability measures in architecture")
|
|
97
|
+
if result.maintainability_score < 70.0:
|
|
98
|
+
result.recommendations.append("Improve maintainability considerations")
|
|
99
|
+
|
|
100
|
+
return result
|
|
101
|
+
|
|
102
|
+
def validate_api_nfr(self, api_design: dict[str, Any], nfr_requirements: dict[str, Any]) -> NFRValidationResult:
|
|
103
|
+
"""
|
|
104
|
+
Validate API design against NFR requirements.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
api_design: API design document
|
|
108
|
+
nfr_requirements: NFR requirements dict
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
NFRValidationResult
|
|
112
|
+
"""
|
|
113
|
+
result = NFRValidationResult(is_valid=True)
|
|
114
|
+
|
|
115
|
+
api_text = str(api_design).lower()
|
|
116
|
+
security_reqs = nfr_requirements.get("security", [])
|
|
117
|
+
performance_reqs = nfr_requirements.get("performance", [])
|
|
118
|
+
|
|
119
|
+
# Validate Security
|
|
120
|
+
result.security_score, result.security_issues = self._validate_api_security(
|
|
121
|
+
api_design, security_reqs, api_text
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Validate Performance
|
|
125
|
+
result.performance_score, result.performance_issues = self._validate_api_performance(
|
|
126
|
+
api_design, performance_reqs, api_text
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Reliability and Maintainability less critical for API design
|
|
130
|
+
result.reliability_score = 80.0 # Default
|
|
131
|
+
result.maintainability_score = 80.0 # Default
|
|
132
|
+
|
|
133
|
+
# Calculate overall score
|
|
134
|
+
result.overall_score = (
|
|
135
|
+
result.security_score * self.SECURITY_WEIGHT
|
|
136
|
+
+ result.performance_score * self.PERFORMANCE_WEIGHT
|
|
137
|
+
+ result.reliability_score * self.RELIABILITY_WEIGHT
|
|
138
|
+
+ result.maintainability_score * self.MAINTAINABILITY_WEIGHT
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
result.is_valid = result.overall_score >= 70.0
|
|
142
|
+
|
|
143
|
+
if result.security_score < 70.0:
|
|
144
|
+
result.recommendations.append("Add security measures to API design (authentication, authorization)")
|
|
145
|
+
if result.performance_score < 70.0:
|
|
146
|
+
result.recommendations.append("Address performance requirements in API design (caching, pagination)")
|
|
147
|
+
|
|
148
|
+
return result
|
|
149
|
+
|
|
150
|
+
def _validate_security(
|
|
151
|
+
self, architecture: dict[str, Any], security_reqs: list[str], arch_text: str
|
|
152
|
+
) -> tuple[float, list[str]]:
|
|
153
|
+
"""Validate security NFRs."""
|
|
154
|
+
score = 100.0
|
|
155
|
+
issues = []
|
|
156
|
+
|
|
157
|
+
if not security_reqs:
|
|
158
|
+
return 80.0, [] # No security requirements = assume basic security
|
|
159
|
+
|
|
160
|
+
# Check for authentication
|
|
161
|
+
if "authentication" in " ".join(security_reqs).lower():
|
|
162
|
+
if "auth" not in arch_text and "login" not in arch_text:
|
|
163
|
+
score -= 30.0
|
|
164
|
+
issues.append("Authentication not addressed in architecture")
|
|
165
|
+
|
|
166
|
+
# Check for authorization
|
|
167
|
+
if "authorization" in " ".join(security_reqs).lower() or "access control" in " ".join(security_reqs).lower():
|
|
168
|
+
if "authorization" not in arch_text and "permission" not in arch_text and "role" not in arch_text:
|
|
169
|
+
score -= 25.0
|
|
170
|
+
issues.append("Authorization/access control not addressed")
|
|
171
|
+
|
|
172
|
+
# Check for data encryption
|
|
173
|
+
if "encryption" in " ".join(security_reqs).lower() or "encrypt" in " ".join(security_reqs).lower():
|
|
174
|
+
if "encrypt" not in arch_text:
|
|
175
|
+
score -= 20.0
|
|
176
|
+
issues.append("Data encryption not specified")
|
|
177
|
+
|
|
178
|
+
# Check for secure communication
|
|
179
|
+
if "tls" in " ".join(security_reqs).lower() or "ssl" in " ".join(security_reqs).lower() or "https" in " ".join(security_reqs).lower():
|
|
180
|
+
if "tls" not in arch_text and "ssl" not in arch_text and "https" not in arch_text:
|
|
181
|
+
score -= 15.0
|
|
182
|
+
issues.append("Secure communication (TLS/SSL) not specified")
|
|
183
|
+
|
|
184
|
+
return max(0.0, score), issues
|
|
185
|
+
|
|
186
|
+
def _validate_performance(
|
|
187
|
+
self, architecture: dict[str, Any], performance_reqs: list[str], arch_text: str
|
|
188
|
+
) -> tuple[float, list[str]]:
|
|
189
|
+
"""Validate performance NFRs."""
|
|
190
|
+
score = 100.0
|
|
191
|
+
issues = []
|
|
192
|
+
|
|
193
|
+
if not performance_reqs:
|
|
194
|
+
return 80.0, [] # No performance requirements = assume acceptable
|
|
195
|
+
|
|
196
|
+
perf_text = " ".join(performance_reqs).lower()
|
|
197
|
+
|
|
198
|
+
# Check for response time requirements
|
|
199
|
+
if "response time" in perf_text or "latency" in perf_text:
|
|
200
|
+
if "response" not in arch_text and "latency" not in arch_text and "performance" not in arch_text:
|
|
201
|
+
score -= 25.0
|
|
202
|
+
issues.append("Response time/latency not addressed")
|
|
203
|
+
|
|
204
|
+
# Check for throughput requirements
|
|
205
|
+
if "throughput" in perf_text or "requests per second" in perf_text:
|
|
206
|
+
if "throughput" not in arch_text and "rps" not in arch_text:
|
|
207
|
+
score -= 20.0
|
|
208
|
+
issues.append("Throughput requirements not addressed")
|
|
209
|
+
|
|
210
|
+
# Check for caching strategy
|
|
211
|
+
if "cache" in perf_text:
|
|
212
|
+
if "cache" not in arch_text:
|
|
213
|
+
score -= 15.0
|
|
214
|
+
issues.append("Caching strategy not specified")
|
|
215
|
+
|
|
216
|
+
# Check for scalability
|
|
217
|
+
if "scalability" in perf_text or "scale" in perf_text:
|
|
218
|
+
if "scal" not in arch_text and "scale" not in arch_text:
|
|
219
|
+
score -= 20.0
|
|
220
|
+
issues.append("Scalability approach not defined")
|
|
221
|
+
|
|
222
|
+
return max(0.0, score), issues
|
|
223
|
+
|
|
224
|
+
def _validate_reliability(
|
|
225
|
+
self, architecture: dict[str, Any], reliability_reqs: list[str], arch_text: str
|
|
226
|
+
) -> tuple[float, list[str]]:
|
|
227
|
+
"""Validate reliability NFRs."""
|
|
228
|
+
score = 100.0
|
|
229
|
+
issues = []
|
|
230
|
+
|
|
231
|
+
if not reliability_reqs:
|
|
232
|
+
return 80.0, [] # No reliability requirements = assume acceptable
|
|
233
|
+
|
|
234
|
+
rel_text = " ".join(reliability_reqs).lower()
|
|
235
|
+
|
|
236
|
+
# Check for error handling
|
|
237
|
+
if "error handling" in rel_text or "error" in rel_text:
|
|
238
|
+
if "error" not in arch_text and "exception" not in arch_text:
|
|
239
|
+
score -= 25.0
|
|
240
|
+
issues.append("Error handling not addressed")
|
|
241
|
+
|
|
242
|
+
# Check for availability/uptime
|
|
243
|
+
if "availability" in rel_text or "uptime" in rel_text:
|
|
244
|
+
if "availability" not in arch_text and "uptime" not in arch_text and "redundancy" not in arch_text:
|
|
245
|
+
score -= 25.0
|
|
246
|
+
issues.append("Availability/redundancy not addressed")
|
|
247
|
+
|
|
248
|
+
# Check for backup/recovery
|
|
249
|
+
if "backup" in rel_text or "recovery" in rel_text:
|
|
250
|
+
if "backup" not in arch_text and "recovery" not in arch_text:
|
|
251
|
+
score -= 20.0
|
|
252
|
+
issues.append("Backup/recovery strategy not specified")
|
|
253
|
+
|
|
254
|
+
return max(0.0, score), issues
|
|
255
|
+
|
|
256
|
+
def _validate_maintainability(
|
|
257
|
+
self, architecture: dict[str, Any], maintainability_reqs: list[str], arch_text: str
|
|
258
|
+
) -> tuple[float, list[str]]:
|
|
259
|
+
"""Validate maintainability NFRs."""
|
|
260
|
+
score = 100.0
|
|
261
|
+
issues = []
|
|
262
|
+
|
|
263
|
+
if not maintainability_reqs:
|
|
264
|
+
return 80.0, [] # No maintainability requirements = assume acceptable
|
|
265
|
+
|
|
266
|
+
# Check for documentation
|
|
267
|
+
if "documentation" not in arch_text and "docs" not in arch_text:
|
|
268
|
+
score -= 20.0
|
|
269
|
+
issues.append("Documentation not addressed")
|
|
270
|
+
|
|
271
|
+
# Check for modularity
|
|
272
|
+
if "modular" not in arch_text and "module" not in arch_text and "component" not in arch_text:
|
|
273
|
+
score -= 15.0
|
|
274
|
+
issues.append("Modularity not emphasized")
|
|
275
|
+
|
|
276
|
+
# Check for code quality
|
|
277
|
+
if "quality" not in arch_text and "standard" not in arch_text:
|
|
278
|
+
score -= 10.0
|
|
279
|
+
issues.append("Code quality standards not mentioned")
|
|
280
|
+
|
|
281
|
+
return max(0.0, score), issues
|
|
282
|
+
|
|
283
|
+
def _validate_api_security(
|
|
284
|
+
self, api_design: dict[str, Any], security_reqs: list[str], api_text: str
|
|
285
|
+
) -> tuple[float, list[str]]:
|
|
286
|
+
"""Validate API security."""
|
|
287
|
+
score = 100.0
|
|
288
|
+
issues = []
|
|
289
|
+
|
|
290
|
+
if not security_reqs:
|
|
291
|
+
return 80.0, []
|
|
292
|
+
|
|
293
|
+
# Check for authentication in API
|
|
294
|
+
if "authentication" in " ".join(security_reqs).lower():
|
|
295
|
+
endpoints = api_design.get("endpoints", [])
|
|
296
|
+
has_auth = any("auth" in str(e).lower() for e in endpoints) or "auth" in api_text
|
|
297
|
+
if not has_auth:
|
|
298
|
+
score -= 30.0
|
|
299
|
+
issues.append("API authentication not specified")
|
|
300
|
+
|
|
301
|
+
# Check for HTTPS
|
|
302
|
+
if "https" in " ".join(security_reqs).lower() or "tls" in " ".join(security_reqs).lower():
|
|
303
|
+
if "https" not in api_text and "tls" not in api_text:
|
|
304
|
+
score -= 20.0
|
|
305
|
+
issues.append("HTTPS/TLS not specified for API")
|
|
306
|
+
|
|
307
|
+
return max(0.0, score), issues
|
|
308
|
+
|
|
309
|
+
def _validate_api_performance(
|
|
310
|
+
self, api_design: dict[str, Any], performance_reqs: list[str], api_text: str
|
|
311
|
+
) -> tuple[float, list[str]]:
|
|
312
|
+
"""Validate API performance."""
|
|
313
|
+
score = 100.0
|
|
314
|
+
issues = []
|
|
315
|
+
|
|
316
|
+
if not performance_reqs:
|
|
317
|
+
return 80.0, []
|
|
318
|
+
|
|
319
|
+
# Check for pagination
|
|
320
|
+
if "pagination" not in api_text and "page" not in api_text:
|
|
321
|
+
score -= 15.0
|
|
322
|
+
issues.append("Pagination not specified for list endpoints")
|
|
323
|
+
|
|
324
|
+
# Check for rate limiting
|
|
325
|
+
if "rate limit" in " ".join(performance_reqs).lower():
|
|
326
|
+
if "rate limit" not in api_text:
|
|
327
|
+
score -= 20.0
|
|
328
|
+
issues.append("Rate limiting not specified")
|
|
329
|
+
|
|
330
|
+
# Check for caching headers
|
|
331
|
+
if "cache" in " ".join(performance_reqs).lower():
|
|
332
|
+
if "cache" not in api_text:
|
|
333
|
+
score -= 15.0
|
|
334
|
+
issues.append("Caching strategy not specified")
|
|
335
|
+
|
|
336
|
+
return max(0.0, score), issues
|