devsquad 4.5.7__tar.gz → 4.5.8__tar.gz
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.
- {devsquad-4.5.7 → devsquad-4.5.8}/PKG-INFO +3 -3
- {devsquad-4.5.7 → devsquad-4.5.8}/README.md +2 -2
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/PKG-INFO +3 -3
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/SOURCES.txt +1 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/pyproject.toml +1 -1
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_module_activation.py +137 -2
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli.py +4 -0
- devsquad-4.5.8/scripts/cli_risks.py +503 -0
- devsquad-4.5.8/scripts/collaboration/_version.py +1 -0
- devsquad-4.5.8/scripts/collaboration/file_risk_store.py +416 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/risk_register.py +71 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/__init__.py +1 -1
- devsquad-4.5.7/scripts/cli_risks.py +0 -305
- devsquad-4.5.7/scripts/collaboration/_version.py +0 -1
- {devsquad-4.5.7 → devsquad-4.5.8}/LICENSE +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/dependency_links.txt +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/entry_points.txt +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/requires.txt +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/devsquad.egg-info/top_level.txt +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/models.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/rate_limit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/routes/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/routes/dispatch.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/routes/lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/routes/metrics.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/routes/metrics_gates.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api/security.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/api_server.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/auth.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/benchmark_async_dispatch.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/benchmark_ponytail_smart.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/benchmark_real_llm.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_async_coverage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_config_consistency.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_constructor_params.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_dependency_lock.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_dependency_sync.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_doc_consistency.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_hidden_content.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_test_pyramid.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_test_quality.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/check_version_consistency.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli/cli_visual.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_audit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_dispatch.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_doctor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_metrics.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_modules.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_sessions.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/cli_utils.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/adaptive_role_selector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/adversarial_verify.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/agent_briefing.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/agent_identity.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ai_semantic_matcher.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/anchor_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/anti_rationalization.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/approval_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/artifact_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/async_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/async_coeffect_resolver.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/async_coordinator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/async_llm_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/audit_logger.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/git_driver.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/loop_controller.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/notes_memory.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/run_state.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/sleep_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/autonomous/smart_confirmation.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/backend_config.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/backend_paths.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/batch_scheduler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/benchmark_regression_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/cache_interface.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ccr_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/checkpoint_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ci_feedback_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/cli_command_classifier.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/code_graph_query.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/code_graph_storage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/code_knowledge_graph.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/code_map_generator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/coeffect.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/concern_pack_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/confidence_score.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/config_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/connector_framework.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/consensus.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/consensus_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/constants.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/content_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/content_crusher.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/context_compressor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/coordinator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dashboard_live_mode.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/debt_collector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dependency_hallucination_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/deployment_compliance_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_audit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_component_factory.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_effect.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_hooks.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_models.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_performance.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_pre_steps.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_rbac.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_result_assembler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_services.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_quality_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_config.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_factory.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_intent_mapper.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_loop_controller.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_transaction.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dora_metrics_collector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/dual_layer_context.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/effect_registry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/enhanced_worker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/enterprise_feature.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/error_budget_tracker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/event_bus.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/execution_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/feature_usage_tracker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/feedback_control_loop.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/file_bundler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/five_axis_consensus.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/gap_analyzer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/gitlab_connector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/host_llm_bridge.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/host_llm_bridge_v2.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/input_validator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/intent_workflow_mapper.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/judge_agent.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/language_parsers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/learned_rule_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/lifecycle_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/lifecycle_protocol.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/lifecycle_templates.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_cache_async.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_cache_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_retry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_retry_async.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/llm_retry_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/discovery_probe.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/handoff_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/independent_evaluator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/kernel.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/loop_scheduler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/models.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/protocols.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/rollback_strategy.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/loop_engineering/unified_memory.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/mce_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_bridge.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_claw_source.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_forgetting.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_index.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_query.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_serializer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/memory_types.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/meta_skill_layering.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/micro_task_planner.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/models.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/models_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/models_dispatch.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/models_lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/module_fiber.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/moka_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/multi_host_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/multi_level_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/multi_tenant.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/null_providers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/operation_classifier.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/order_chain_detector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/output_slicer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/output_validator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/perf_baseline.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/performance_fingerprint.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/performance_monitor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/permission_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/plugins/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/plugins/hot_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ponytail_rule_injector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prometheus_metrics.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_formatting_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/prompt_dials.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/protocols.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/quality_calibration_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/quality_probe_slice.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/rbac_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/redesign_auditor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/redesign_checkers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/redis_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/report_formatter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/requirement_tracer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/retrospective.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/review_checkers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/role_matcher.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/role_skill_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/role_specific_mock_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/rule_collector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/scratchpad.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/scratchpad_history_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/secret_patterns.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/severity_router.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/similar_task_recommender.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skill_extractor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skill_provider_builtin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skill_provider_mcp.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skill_registry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skill_storage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/skillifier.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/standardized_role_template.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/task_completion_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/task_scale_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/tech_debt_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/test_quality_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/todo_drift_monitor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/two_stage_review_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_framework.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_framework_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/unified_gate_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/usage_tracker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/user_friendly_error.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/verification_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/viewpoint_registry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/warmup_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/worker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collaboration/yagni_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/collect_baseline.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/app.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/auth_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/components.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/dag_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/dispatch_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/i18n.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/lifecycle_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/metrics_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/state.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard/v43_panels.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/dashboard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/generate_benchmark_report.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/generate_quality_decision_report.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/history_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/mcp_server.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/deterministic_rule_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/models.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/taste_dials.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/uiux_analyzer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/uiux_subitems.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/qa/visual_regression.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/scan_pickle_payloads.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/utils/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/scripts/utils/_find_missing_hints.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/setup.cfg +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/_version.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/dispatch/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/intent/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/prototype/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/registry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/retrospective/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/retrospective/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/review/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/security/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/teach/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/test/__init__.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/skills/test/handler.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_4pt_grid.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_adaptive_role_selector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_adversarial_verify.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_agent_briefing.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_anchor_retrospective.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_anti_rationalization.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_antipattern_bans.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_api_budget_status_endpoint.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_api_security.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_api_server_v362.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_approval_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_artifact_effect_binding.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_artifact_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_async_coordinator.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_async_modules.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_audit_logger.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_auth_phase5.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_autonomous.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_backend_config.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_benchmark_ponytail_smart.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cache_interface.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_ccr_store.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_async_coverage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_config_consistency.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_constructor_params.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_dependency_lock.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_hidden_content.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_test_pyramid.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_test_quality.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_check_version_consistency.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_ci_feedback_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_audit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_command_classifier.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_deep_v362.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_doctor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_metrics.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_cli_phase5.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_code_knowledge_graph.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_claw_integration_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_context_compressor_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_core_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_dispatcher_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_e2e_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_llm_cache_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_llm_retry_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_mce_adapter_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_memory_bridge_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_performance_monitor_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_permission_guard_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_prompt_optimization_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_role_mapping_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_skillifier_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_test_quality_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_test_quality_guard_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_upstream_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_collaboration_warmup_manager_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_confidence_score.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_config_injection.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_consensus_dissent.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_consensus_fatigue.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_consensus_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_content_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_content_crusher.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_coordinator_smart_compression.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dag_views.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dashboard_live_mode.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dashboard_split.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dashboard_ui_e2e.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dashboard_v43_panels.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_data_backup.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_debt_collector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_deep_shallow.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_deletion_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dependency_hallucination_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dependency_lock.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_deployment_compliance_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_deterministic_rule_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatch_audit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatch_performance.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatch_rbac.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatch_steps.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatcher_intent_mapper.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatcher_loop_controller.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatcher_mixins.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatcher_phase5_core.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dispatcher_transaction.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_docker_deployment.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_dual_layer_context.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_effect_registry.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_enhanced_worker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_fallback_fuse.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_feedback_control_loop.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_five_axis_consensus.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_flow_standalone.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_full_lifecycle_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_git_guardrails.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_gitlab_connector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_glossary_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_grilling_mode.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_handoff_redaction.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_history_manager_v362.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_host_bridge_unit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_host_llm_bridge_v2.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_input_validator_phase5.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_input_validator_sensitive.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_intent_workflow_mapper.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_judge_agent.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_learned_rule_phase4.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_lifecycle_protocol.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_llm_auto_fallback.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_llm_backend_resolve.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_llm_cache_protocol.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_loop_engineering.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_loop_engineering_rollback.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_mcp_server_v362.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_memory_benchmarks.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_meta_skill_layering.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_micro_task_planner.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_moka_backend.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_multi_host_adapter.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_multi_tenant.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_multi_tenant_isolation_e2e.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_no_op_test.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_node_type_separation.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_null_providers.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_oklch_color.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_operation_classifier.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_order_chain_detector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_output_slicer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_output_validator_prompt_injection.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_perf_baseline.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_perf_baseline_ci_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_performance_benchmarks.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_performance_fingerprint.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_performance_monitor_protocol.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_permission_guard_human_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_permission_guard_phase5.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_phase4_ghost_feature_defense.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_pipeline_step19_20.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_plan_c_unified_architecture.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_plugins_hot_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_ponytail_rule_injector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_production_features.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_prometheus_metrics.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_prompt_dials.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_protocols.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_prototype_skill.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_qa_uiux_visual_regression.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_quick_bonus.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_rate_limit.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_rbac_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_rbac_fail_closed.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_red_capable_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_redesign_auditor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_redis_cache.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_requirement_tracer.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_retry_jitter_strategies.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_role_skill_loader.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_rule_collector.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_rule_injection_security.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_secret_patterns.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_severity_router.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_similar_task_recommender.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_skill_registry_coverage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_skill_security.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_sleep_guard.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_standardized_role_template.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_start_script.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_step_node_types.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_suggested_next_steps.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_task_completion_checker.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_task_scale_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_taste_dials.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_tautological_seams.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_teach_skill.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_tech_debt_manager.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_todo_drift_monitor.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_token_budget_compressed_scratchpad.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_triage_label.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_two_stage_review_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_ue_test_framework.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_uiux_subitems.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_usage_tracker_coverage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_v39_e2e.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_v39_performance.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_v411_security_hardening.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_verification_gate.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_version.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_vertical_slice.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_worker_artifact_integration.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_engine.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_engine_base.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_engine_lifecycle.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_engine_state.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_engine_transition.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_workflow_persistence_coverage.py +0 -0
- {devsquad-4.5.7 → devsquad-4.5.8}/tests/test_yagni_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsquad
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.8
|
|
4
4
|
Summary: Production-Ready Multi-Role AI Task Orchestrator
|
|
5
5
|
Author-email: DevSquad Team <devsquad@example.com>
|
|
6
6
|
License: MIT
|
|
@@ -96,14 +96,14 @@ Dynamic: license-file
|
|
|
96
96
|
<p align="center">
|
|
97
97
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
98
98
|
<br>
|
|
99
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
|
|
100
100
|
</p>
|
|
101
101
|
|
|
102
102
|
<p align="center">
|
|
103
103
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
104
104
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
105
105
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.8-success" />
|
|
107
107
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
108
108
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
109
109
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
5
5
|
<br>
|
|
6
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)
|
|
6
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
11
11
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
12
12
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
13
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
13
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.8-success" />
|
|
14
14
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
15
15
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
16
16
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsquad
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.8
|
|
4
4
|
Summary: Production-Ready Multi-Role AI Task Orchestrator
|
|
5
5
|
Author-email: DevSquad Team <devsquad@example.com>
|
|
6
6
|
License: MIT
|
|
@@ -96,14 +96,14 @@ Dynamic: license-file
|
|
|
96
96
|
<p align="center">
|
|
97
97
|
<strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
|
|
98
98
|
<br>
|
|
99
|
-
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
|
|
100
100
|
</p>
|
|
101
101
|
|
|
102
102
|
<p align="center">
|
|
103
103
|
<img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
|
|
104
104
|
<img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
|
|
105
105
|
<img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.5.
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.5.8-success" />
|
|
107
107
|
<img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
|
|
108
108
|
<img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
|
|
109
109
|
<img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
|
|
@@ -141,6 +141,7 @@ scripts/collaboration/execution_guard.py
|
|
|
141
141
|
scripts/collaboration/feature_usage_tracker.py
|
|
142
142
|
scripts/collaboration/feedback_control_loop.py
|
|
143
143
|
scripts/collaboration/file_bundler.py
|
|
144
|
+
scripts/collaboration/file_risk_store.py
|
|
144
145
|
scripts/collaboration/five_axis_consensus.py
|
|
145
146
|
scripts/collaboration/gap_analyzer.py
|
|
146
147
|
scripts/collaboration/gitlab_connector.py
|
|
@@ -21,6 +21,10 @@ V4.5.4 P12.3: Extended to include:
|
|
|
21
21
|
- CoeffectResolver (P12.3.2)
|
|
22
22
|
- ModulesCLI (P12.3.3)
|
|
23
23
|
|
|
24
|
+
V4.5.8: Extended to include:
|
|
25
|
+
- FileRiskStore (file-backed risk persistence)
|
|
26
|
+
- CliRisks mutators (add/mitigate/close/list --min-exposure)
|
|
27
|
+
|
|
24
28
|
Usage:
|
|
25
29
|
python3 scripts/check_module_activation.py
|
|
26
30
|
CI: python3 scripts/check_module_activation.py || exit 1
|
|
@@ -168,9 +172,17 @@ def main() -> int:
|
|
|
168
172
|
# V4.5.6 P12.4 activation (4 new modules)
|
|
169
173
|
_activate_v455_modules()
|
|
170
174
|
|
|
175
|
+
# V4.5.8 modules — touch counters in main scope
|
|
176
|
+
from scripts.collaboration.file_risk_store import (
|
|
177
|
+
get_call_counter_er as _get_file_risk_store_counter_er,
|
|
178
|
+
)
|
|
179
|
+
|
|
171
180
|
# V4.5.7 P12.5 activation (2 new modules)
|
|
172
181
|
_activate_v457_modules()
|
|
173
182
|
|
|
183
|
+
# V4.5.8 activation (FileRiskStore + CliRisks mutators)
|
|
184
|
+
_activate_v458_modules()
|
|
185
|
+
|
|
174
186
|
counters = {
|
|
175
187
|
"TaskScaleGate": tsg(),
|
|
176
188
|
"PerfBaseline": pb(),
|
|
@@ -197,9 +209,12 @@ def main() -> int:
|
|
|
197
209
|
# V4.5.7 P12.5 modules
|
|
198
210
|
"AsyncCoeffectResolver_P12.5.1": _get_async_coeffect_counter_er(),
|
|
199
211
|
"CliRisks_P12.5.2": _get_cli_risks_counter_er(),
|
|
212
|
+
# V4.5.8 modules
|
|
213
|
+
"FileRiskStore_V458.1": _get_file_risk_store_counter_er(),
|
|
214
|
+
"CliRisksMutators_V458.2": _get_cli_risks_counter_er(),
|
|
200
215
|
}
|
|
201
216
|
|
|
202
|
-
print("V4.5.
|
|
217
|
+
print("V4.5.8 Anti-Ghost Verification")
|
|
203
218
|
print("=" * 60)
|
|
204
219
|
failed = []
|
|
205
220
|
for name, count in counters.items():
|
|
@@ -215,10 +230,130 @@ def main() -> int:
|
|
|
215
230
|
print(f" - {name}")
|
|
216
231
|
return 1
|
|
217
232
|
|
|
218
|
-
print("All V4.5.
|
|
233
|
+
print("All V4.5.8 modules activated. Anti-ghost gate PASSED.")
|
|
219
234
|
return 0
|
|
220
235
|
|
|
221
236
|
|
|
237
|
+
def _activate_v458_modules() -> None:
|
|
238
|
+
"""Exercise V4.5.8 modules to bump their anti-ghost counters.
|
|
239
|
+
|
|
240
|
+
Touches:
|
|
241
|
+
- FileRiskStore — items_to_payload + transaction write + load
|
|
242
|
+
round-trip + lock_timeout lock acquisition failure
|
|
243
|
+
- CliRisks mutators — add + mitigate + close (no approval) +
|
|
244
|
+
list --min-exposure filtering
|
|
245
|
+
"""
|
|
246
|
+
import io
|
|
247
|
+
import tempfile
|
|
248
|
+
from argparse import Namespace
|
|
249
|
+
from contextlib import redirect_stdout
|
|
250
|
+
from pathlib import Path
|
|
251
|
+
|
|
252
|
+
# Wave 1: FileRiskStore — full persistence round-trip
|
|
253
|
+
from scripts.collaboration.file_risk_store import (
|
|
254
|
+
FileRiskStore,
|
|
255
|
+
RiskStoreLockError,
|
|
256
|
+
)
|
|
257
|
+
from scripts.collaboration.risk_register import (
|
|
258
|
+
ResponseStrategy,
|
|
259
|
+
RiskItem,
|
|
260
|
+
RiskStatus,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
264
|
+
root = Path(tmpdir)
|
|
265
|
+
store = FileRiskStore(root=root, lock_timeout=1.0)
|
|
266
|
+
item = RiskItem(
|
|
267
|
+
id="R-AG-1",
|
|
268
|
+
description="anti-ghost V4.5.8 risk",
|
|
269
|
+
probability=0.4,
|
|
270
|
+
impact=0.5,
|
|
271
|
+
response_strategy=ResponseStrategy.MITIGATE,
|
|
272
|
+
owner="anti-ghost",
|
|
273
|
+
status=RiskStatus.OPEN,
|
|
274
|
+
category="technical",
|
|
275
|
+
)
|
|
276
|
+
payload = store.items_to_payload("default", [item])
|
|
277
|
+
with store.transaction("default") as tx:
|
|
278
|
+
tx["items"] = payload["items"]
|
|
279
|
+
loaded = store.load("default")
|
|
280
|
+
assert loaded["version"] == 1
|
|
281
|
+
assert loaded["items"][0]["id"] == "R-AG-1"
|
|
282
|
+
|
|
283
|
+
# Lock timeout: a second store with lock_timeout=0.1 must fail while
|
|
284
|
+
# the transaction above holds the cross-process lock.
|
|
285
|
+
holder = FileRiskStore(root=root, lock_timeout=5.0)
|
|
286
|
+
with holder.transaction("default"):
|
|
287
|
+
tight = FileRiskStore(root=root, lock_timeout=0.1)
|
|
288
|
+
try:
|
|
289
|
+
tight.load("default")
|
|
290
|
+
except RiskStoreLockError:
|
|
291
|
+
pass
|
|
292
|
+
else:
|
|
293
|
+
raise AssertionError("expected RiskStoreLockError after 0.1s timeout")
|
|
294
|
+
|
|
295
|
+
# Wave 2+3: CliRisks mutators — add → mitigate → close → list filter
|
|
296
|
+
from scripts.cli_risks import (
|
|
297
|
+
cmd_risks_add,
|
|
298
|
+
cmd_risks_close,
|
|
299
|
+
cmd_risks_list,
|
|
300
|
+
cmd_risks_mitigate,
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
304
|
+
root = str(Path(tmpdir) / "risks")
|
|
305
|
+
buf = io.StringIO()
|
|
306
|
+
with redirect_stdout(buf):
|
|
307
|
+
add_rc = cmd_risks_add(Namespace(
|
|
308
|
+
description="anti-ghost CLI risk",
|
|
309
|
+
probability=0.6,
|
|
310
|
+
impact=0.5,
|
|
311
|
+
category="technical",
|
|
312
|
+
owner="anti-ghost",
|
|
313
|
+
register_id="default",
|
|
314
|
+
root=root,
|
|
315
|
+
))
|
|
316
|
+
assert add_rc == 0
|
|
317
|
+
|
|
318
|
+
# Recover the risk id from the persisted store.
|
|
319
|
+
reader = FileRiskStore(root=root)
|
|
320
|
+
risk_id = next(iter(reader.payload_to_items(reader.load("default"))))
|
|
321
|
+
|
|
322
|
+
with redirect_stdout(buf):
|
|
323
|
+
assert cmd_risks_mitigate(Namespace(
|
|
324
|
+
risk_id=risk_id,
|
|
325
|
+
strategy="mitigate",
|
|
326
|
+
owner="devops",
|
|
327
|
+
plan="anti-ghost plan",
|
|
328
|
+
register_id="default",
|
|
329
|
+
root=root,
|
|
330
|
+
)) == 0
|
|
331
|
+
|
|
332
|
+
# Close WITHOUT approval (require_approval=False → no gate).
|
|
333
|
+
with redirect_stdout(buf):
|
|
334
|
+
assert cmd_risks_close(Namespace(
|
|
335
|
+
risk_id=risk_id,
|
|
336
|
+
require_approval=False,
|
|
337
|
+
register_id="default",
|
|
338
|
+
root=root,
|
|
339
|
+
)) == 0
|
|
340
|
+
|
|
341
|
+
# --min-exposure filter: high threshold hides every row, zero shows it.
|
|
342
|
+
buf_hidden, buf_visible = io.StringIO(), io.StringIO()
|
|
343
|
+
with redirect_stdout(buf_hidden):
|
|
344
|
+
assert cmd_risks_list(Namespace(
|
|
345
|
+
register_id="default", root=root, format="md",
|
|
346
|
+
min_exposure=0.99, severity=None, category=None, limit=None,
|
|
347
|
+
)) == 0
|
|
348
|
+
assert "(none)" in buf_hidden.getvalue()
|
|
349
|
+
with redirect_stdout(buf_visible):
|
|
350
|
+
assert cmd_risks_list(Namespace(
|
|
351
|
+
register_id="default", root=root, format="md",
|
|
352
|
+
min_exposure=0.0, severity=None, category=None, limit=None,
|
|
353
|
+
)) == 0
|
|
354
|
+
assert "`R-" in buf_visible.getvalue()
|
|
355
|
+
|
|
356
|
+
|
|
222
357
|
def _activate_v454_modules() -> None:
|
|
223
358
|
"""Exercise V4.5.4 P12.3 modules to bump their anti-ghost counters.
|
|
224
359
|
|
|
@@ -616,6 +616,10 @@ Environment Variables (API keys are read from env vars only, never command line)
|
|
|
616
616
|
return cmd_roles(args)
|
|
617
617
|
elif args.command in ("sessions", "sess"):
|
|
618
618
|
return cmd_sessions(args)
|
|
619
|
+
elif args.command in ("risks", "risk"):
|
|
620
|
+
if hasattr(args, "func") and callable(args.func):
|
|
621
|
+
return args.func(args)
|
|
622
|
+
return 1
|
|
619
623
|
elif args.command == "doctor":
|
|
620
624
|
return cmd_doctor(args)
|
|
621
625
|
elif args.command == "backend":
|