devsquad 4.3.0__tar.gz → 4.4.0__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.3.0 → devsquad-4.4.0}/PKG-INFO +4 -4
- {devsquad-4.3.0 → devsquad-4.4.0}/README.md +3 -3
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/PKG-INFO +4 -4
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/SOURCES.txt +10 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/pyproject.toml +1 -1
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_version_consistency.py +183 -1
- devsquad-4.4.0/scripts/collaboration/_version.py +1 -0
- devsquad-4.4.0/scripts/collaboration/benchmark_regression_checker.py +378 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_models.py +9 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher.py +79 -0
- devsquad-4.4.0/scripts/collaboration/dora_metrics_collector.py +254 -0
- devsquad-4.4.0/scripts/collaboration/error_budget_tracker.py +245 -0
- devsquad-4.4.0/scripts/collaboration/gap_analyzer.py +335 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/output_validator.py +93 -1
- devsquad-4.4.0/scripts/collaboration/quality_calibration_gate.py +163 -0
- devsquad-4.4.0/scripts/collaboration/quality_probe_slice.py +301 -0
- devsquad-4.4.0/scripts/collaboration/risk_register.py +343 -0
- devsquad-4.4.0/scripts/collaboration/role_specific_mock_backend.py +156 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/unified_gate_engine.py +186 -1
- devsquad-4.4.0/scripts/collaboration/viewpoint_registry.py +327 -0
- devsquad-4.4.0/scripts/generate_quality_decision_report.py +114 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/__init__.py +1 -1
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_version_consistency.py +318 -4
- devsquad-4.3.0/scripts/collaboration/_version.py +0 -1
- {devsquad-4.3.0 → devsquad-4.4.0}/LICENSE +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/dependency_links.txt +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/entry_points.txt +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/requires.txt +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/top_level.txt +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/models.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/rate_limit.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/dispatch.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/metrics.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/metrics_gates.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/security.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api_server.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/auth.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_async_dispatch.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_ponytail_smart.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_real_llm.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_async_coverage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_config_consistency.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_constructor_params.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_dependency_lock.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_dependency_sync.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_hidden_content.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_test_pyramid.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_test_quality.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli/cli_visual.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_dispatch.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_utils.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/adaptive_role_selector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/adversarial_verify.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/agent_briefing.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ai_semantic_matcher.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/anchor_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/anti_rationalization.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_coordinator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_llm_backend.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/audit_logger.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/git_driver.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/loop_controller.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/notes_memory.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/run_state.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/sleep_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/smart_confirmation.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/batch_scheduler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/cache_interface.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ccr_store.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/checkpoint_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ci_feedback_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/cli_command_classifier.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_graph_query.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_graph_storage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_knowledge_graph.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_map_generator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/concern_pack_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/confidence_score.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/config_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/consensus.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/consensus_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/constants.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/content_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/content_crusher.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/context_compressor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/coordinator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dashboard_live_mode.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/debt_collector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dependency_hallucination_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/deployment_compliance_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_audit.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_component_factory.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_hooks.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_performance.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_pre_steps.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_rbac.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_result_assembler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_services.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_quality_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_config.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_factory.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dual_layer_context.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/enhanced_worker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/enterprise_feature.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/event_bus.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/execution_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/feature_usage_tracker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/feedback_control_loop.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/five_axis_consensus.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/input_validator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/intent_workflow_mapper.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/judge_agent.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/language_parsers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/learned_rule_store.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_protocol.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_templates.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_backend.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache_async.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry_async.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/discovery_probe.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/handoff_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/independent_evaluator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/kernel.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/loop_scheduler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/models.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/protocols.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/rollback_strategy.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/unified_memory.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/mce_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_bridge.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_claw_source.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_forgetting.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_index.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_query.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_serializer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_types.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/meta_skill_layering.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/micro_task_planner.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_dispatch.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_host_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_level_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_tenant.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/null_providers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/operation_classifier.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/output_slicer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/performance_fingerprint.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/performance_monitor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/permission_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/plugins/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/plugins/hot_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ponytail_rule_injector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prometheus_metrics.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_formatting_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_dials.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/protocols.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/rbac_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redesign_auditor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redesign_checkers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redis_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/report_formatter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/requirement_tracer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/retrospective.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/review_checkers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/role_matcher.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/role_skill_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/rule_collector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/scratchpad.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/secret_patterns.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/severity_router.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/similar_task_recommender.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_extractor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_registry.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_storage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skillifier.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/standardized_role_template.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/task_completion_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/tech_debt_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/test_quality_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/todo_drift_monitor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/two_stage_review_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_framework.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_framework_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/usage_tracker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/user_friendly_error.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/verification_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/warmup_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/worker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/yagni_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/app.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/auth_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/components.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/dag_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/dispatch_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/i18n.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/lifecycle_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/metrics_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/state.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/v43_panels.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/generate_benchmark_report.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/history_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/mcp_server.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/deterministic_rule_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/models.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/taste_dials.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/uiux_analyzer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/uiux_subitems.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/visual_regression.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/scan_pickle_payloads.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/utils/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/scripts/utils/_find_missing_hints.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/setup.cfg +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/_version.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/dispatch/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/intent/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/prototype/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/registry.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/retrospective/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/retrospective/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/review/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/security/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/teach/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/test/__init__.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/skills/test/handler.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_4pt_grid.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_adaptive_role_selector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_adversarial_verify.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_agent_briefing.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_anchor_retrospective.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_anti_rationalization.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_antipattern_bans.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_budget_status_endpoint.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_security.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_server_v362.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_async_coordinator.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_async_modules.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_audit_logger.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_auth_phase5.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_autonomous.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_benchmark_ponytail_smart.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cache_interface.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ccr_store.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_async_coverage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_config_consistency.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_constructor_params.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_dependency_lock.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_hidden_content.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_test_pyramid.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_test_quality.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ci_feedback_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_command_classifier.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_deep_v362.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_phase5.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_code_knowledge_graph.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_claw_integration_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_context_compressor_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_core_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_dispatcher_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_e2e_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_llm_cache_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_llm_retry_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_mce_adapter_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_memory_bridge_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_performance_monitor_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_permission_guard_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_prompt_optimization_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_role_mapping_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_skillifier_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_test_quality_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_test_quality_guard_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_upstream_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_warmup_manager_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_confidence_score.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_config_injection.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_dissent.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_fatigue.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_content_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_content_crusher.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_coordinator_smart_compression.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dag_views.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_live_mode.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_split.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_ui_e2e.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_v43_panels.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_data_backup.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_debt_collector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deep_shallow.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deletion_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dependency_hallucination_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dependency_lock.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deployment_compliance_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deterministic_rule_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_audit.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_performance.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_rbac.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_steps.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatcher_mixins.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatcher_phase5_core.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_docker_deployment.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dual_layer_context.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_enhanced_worker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_feedback_control_loop.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_five_axis_consensus.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_flow_standalone.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_full_lifecycle_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_git_guardrails.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_glossary_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_grilling_mode.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_handoff_redaction.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_history_manager_v362.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_input_validator_phase5.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_input_validator_sensitive.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_intent_workflow_mapper.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_judge_agent.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_learned_rule_phase4.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_lifecycle_protocol.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_llm_auto_fallback.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_llm_cache_protocol.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_loop_engineering.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_loop_engineering_rollback.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_mcp_server_v362.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_memory_benchmarks.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_meta_skill_layering.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_micro_task_planner.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_host_adapter.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_tenant.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_tenant_isolation_e2e.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_no_op_test.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_node_type_separation.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_null_providers.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_oklch_color.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_operation_classifier.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_output_slicer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_output_validator_prompt_injection.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_benchmarks.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_fingerprint.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_monitor_protocol.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_permission_guard_human_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_permission_guard_phase5.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_phase4_ghost_feature_defense.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_pipeline_step19_20.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_plan_c_unified_architecture.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_plugins_hot_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ponytail_rule_injector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_production_features.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prometheus_metrics.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prompt_dials.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_protocols.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prototype_skill.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_qa_uiux_visual_regression.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_quick_bonus.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rate_limit.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rbac_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rbac_fail_closed.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_red_capable_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_redesign_auditor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_redis_cache.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_requirement_tracer.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_retry_jitter_strategies.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_role_skill_loader.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rule_collector.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rule_injection_security.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_secret_patterns.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_severity_router.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_similar_task_recommender.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_skill_registry_coverage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_skill_security.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_sleep_guard.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_standardized_role_template.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_start_script.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_step_node_types.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_suggested_next_steps.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_task_completion_checker.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_taste_dials.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_tautological_seams.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_teach_skill.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_tech_debt_manager.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_todo_drift_monitor.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_token_budget_compressed_scratchpad.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_triage_label.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_two_stage_review_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ue_test_framework.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_uiux_subitems.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_usage_tracker_coverage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v39_e2e.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v39_performance.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v411_security_hardening.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_verification_gate.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_version.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_vertical_slice.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_base.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_lifecycle.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_state.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_transition.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_persistence_coverage.py +0 -0
- {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_yagni_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsquad
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
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.
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.4.0 (5 new enhancement modules)</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
|
-
<img alt="Tests" src="https://img.shields.io/badge/Tests-
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.
|
|
105
|
+
<img alt="Tests" src="https://img.shields.io/badge/Tests-8136%20passing-brightgreen" />
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.4.0-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.
|
|
6
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.4.0 (5 new enhancement modules)</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
|
-
<img alt="Tests" src="https://img.shields.io/badge/Tests-
|
|
13
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.
|
|
12
|
+
<img alt="Tests" src="https://img.shields.io/badge/Tests-8136%20passing-brightgreen" />
|
|
13
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.4.0-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.
|
|
3
|
+
Version: 4.4.0
|
|
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.
|
|
99
|
+
<em>One task → Multi-role AI collaboration → One conclusion | V4.4.0 (5 new enhancement modules)</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
|
-
<img alt="Tests" src="https://img.shields.io/badge/Tests-
|
|
106
|
-
<img alt="Version" src="https://img.shields.io/badge/V4.
|
|
105
|
+
<img alt="Tests" src="https://img.shields.io/badge/Tests-8136%20passing-brightgreen" />
|
|
106
|
+
<img alt="Version" src="https://img.shields.io/badge/V4.4.0-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" />
|
|
@@ -28,6 +28,7 @@ scripts/cli_lifecycle.py
|
|
|
28
28
|
scripts/cli_utils.py
|
|
29
29
|
scripts/dashboard.py
|
|
30
30
|
scripts/generate_benchmark_report.py
|
|
31
|
+
scripts/generate_quality_decision_report.py
|
|
31
32
|
scripts/history_manager.py
|
|
32
33
|
scripts/mcp_server.py
|
|
33
34
|
scripts/scan_pickle_payloads.py
|
|
@@ -55,6 +56,7 @@ scripts/collaboration/async_coordinator.py
|
|
|
55
56
|
scripts/collaboration/async_llm_backend.py
|
|
56
57
|
scripts/collaboration/audit_logger.py
|
|
57
58
|
scripts/collaboration/batch_scheduler.py
|
|
59
|
+
scripts/collaboration/benchmark_regression_checker.py
|
|
58
60
|
scripts/collaboration/cache_interface.py
|
|
59
61
|
scripts/collaboration/ccr_store.py
|
|
60
62
|
scripts/collaboration/checkpoint_manager.py
|
|
@@ -106,14 +108,17 @@ scripts/collaboration/dispatcher_lifecycle_mixin.py
|
|
|
106
108
|
scripts/collaboration/dispatcher_mixins.py
|
|
107
109
|
scripts/collaboration/dispatcher_status_mixin.py
|
|
108
110
|
scripts/collaboration/dispatcher_utils_mixin.py
|
|
111
|
+
scripts/collaboration/dora_metrics_collector.py
|
|
109
112
|
scripts/collaboration/dual_layer_context.py
|
|
110
113
|
scripts/collaboration/enhanced_worker.py
|
|
111
114
|
scripts/collaboration/enterprise_feature.py
|
|
115
|
+
scripts/collaboration/error_budget_tracker.py
|
|
112
116
|
scripts/collaboration/event_bus.py
|
|
113
117
|
scripts/collaboration/execution_guard.py
|
|
114
118
|
scripts/collaboration/feature_usage_tracker.py
|
|
115
119
|
scripts/collaboration/feedback_control_loop.py
|
|
116
120
|
scripts/collaboration/five_axis_consensus.py
|
|
121
|
+
scripts/collaboration/gap_analyzer.py
|
|
117
122
|
scripts/collaboration/input_validator.py
|
|
118
123
|
scripts/collaboration/intent_workflow_mapper.py
|
|
119
124
|
scripts/collaboration/judge_agent.py
|
|
@@ -166,6 +171,8 @@ scripts/collaboration/prompt_assembler_template_mixin.py
|
|
|
166
171
|
scripts/collaboration/prompt_assembler_validation_mixin.py
|
|
167
172
|
scripts/collaboration/prompt_dials.py
|
|
168
173
|
scripts/collaboration/protocols.py
|
|
174
|
+
scripts/collaboration/quality_calibration_gate.py
|
|
175
|
+
scripts/collaboration/quality_probe_slice.py
|
|
169
176
|
scripts/collaboration/rbac_engine.py
|
|
170
177
|
scripts/collaboration/redesign_auditor.py
|
|
171
178
|
scripts/collaboration/redesign_checkers.py
|
|
@@ -174,8 +181,10 @@ scripts/collaboration/report_formatter.py
|
|
|
174
181
|
scripts/collaboration/requirement_tracer.py
|
|
175
182
|
scripts/collaboration/retrospective.py
|
|
176
183
|
scripts/collaboration/review_checkers.py
|
|
184
|
+
scripts/collaboration/risk_register.py
|
|
177
185
|
scripts/collaboration/role_matcher.py
|
|
178
186
|
scripts/collaboration/role_skill_loader.py
|
|
187
|
+
scripts/collaboration/role_specific_mock_backend.py
|
|
179
188
|
scripts/collaboration/rule_collector.py
|
|
180
189
|
scripts/collaboration/scratchpad.py
|
|
181
190
|
scripts/collaboration/secret_patterns.py
|
|
@@ -202,6 +211,7 @@ scripts/collaboration/unified_gate_engine.py
|
|
|
202
211
|
scripts/collaboration/usage_tracker.py
|
|
203
212
|
scripts/collaboration/user_friendly_error.py
|
|
204
213
|
scripts/collaboration/verification_gate.py
|
|
214
|
+
scripts/collaboration/viewpoint_registry.py
|
|
205
215
|
scripts/collaboration/warmup_manager.py
|
|
206
216
|
scripts/collaboration/worker.py
|
|
207
217
|
scripts/collaboration/workflow_engine.py
|
|
@@ -89,6 +89,12 @@ class FileSpec:
|
|
|
89
89
|
# Each spec defines: (relative_path, regex_pattern, description)
|
|
90
90
|
# The regex MUST have a single capturing group for the version string.
|
|
91
91
|
FILES_TO_CHECK: list[FileSpec] = [
|
|
92
|
+
FileSpec(
|
|
93
|
+
relative_path="VERSION",
|
|
94
|
+
pattern=re.compile(r"^(\d+\.\d+\.\d+)", re.MULTILINE),
|
|
95
|
+
description="VERSION file (canonical raw version)",
|
|
96
|
+
check_mode="first_match",
|
|
97
|
+
),
|
|
92
98
|
FileSpec(
|
|
93
99
|
relative_path="pyproject.toml",
|
|
94
100
|
pattern=re.compile(r'^version\s*=\s*"(\d+\.\d+\.\d+)"', re.MULTILINE),
|
|
@@ -241,6 +247,167 @@ def get_canonical_version() -> str | None:
|
|
|
241
247
|
return None
|
|
242
248
|
|
|
243
249
|
|
|
250
|
+
# === Content diff pairs (V4.3.1 enhancement) ===
|
|
251
|
+
# Pairs of (source_file, cache_file) that must be byte-identical.
|
|
252
|
+
# Catches the V4.3.1 bug where only the `version:` field was synced to TRAE
|
|
253
|
+
# caches but the SKILL.md body remained stale (V4.3.0 description, old test
|
|
254
|
+
# counts). Version-field-only checks gave 30/30 PASS while users saw stale
|
|
255
|
+
# content in the TRAE skill panel.
|
|
256
|
+
@dataclass
|
|
257
|
+
class ContentDiffSpec:
|
|
258
|
+
"""Specification for a content diff check between source and cache file.
|
|
259
|
+
|
|
260
|
+
source_path:
|
|
261
|
+
Project-relative path of the canonical source file.
|
|
262
|
+
cache_path:
|
|
263
|
+
Absolute path of the cache file to compare against.
|
|
264
|
+
description:
|
|
265
|
+
Human-readable label shown in the report.
|
|
266
|
+
optional:
|
|
267
|
+
If True, a missing cache file is OK (reported as SKIP, not FAIL).
|
|
268
|
+
Used for L1/L2 TRAE caches that don't exist in CI environments.
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
source_path: str
|
|
272
|
+
cache_path: Path
|
|
273
|
+
description: str
|
|
274
|
+
optional: bool = False
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
CONTENT_DIFF_PAIRS: list[ContentDiffSpec] = [
|
|
278
|
+
# L1: User-level TRAE CN cache (China edition)
|
|
279
|
+
ContentDiffSpec(
|
|
280
|
+
source_path="SKILL.md",
|
|
281
|
+
cache_path=Path.home() / ".trae-cn" / "skills" / "devsquad" / "SKILL.md",
|
|
282
|
+
description="TRAE L1 cache (~/.trae-cn) SKILL.md content",
|
|
283
|
+
optional=True,
|
|
284
|
+
),
|
|
285
|
+
# L2: User-level TRAE cache (International edition)
|
|
286
|
+
ContentDiffSpec(
|
|
287
|
+
source_path="SKILL.md",
|
|
288
|
+
cache_path=Path.home() / ".trae" / "skills" / "devsquad" / "SKILL.md",
|
|
289
|
+
description="TRAE L2 cache (~/.trae) SKILL.md content",
|
|
290
|
+
optional=True,
|
|
291
|
+
),
|
|
292
|
+
# L3: TRAE workspace root .trae (TRAE actually reads from here!)
|
|
293
|
+
# This is /Users/lin/trae_projects/.trae/, NOT DevSquad/.trae/.
|
|
294
|
+
# Discovered 2026-07-27: Skill panel showed V4.1.7 even after DevSquad/.trae
|
|
295
|
+
# was synced, because TRAE reads from workspace root .trae, not project .trae.
|
|
296
|
+
ContentDiffSpec(
|
|
297
|
+
source_path="SKILL.md",
|
|
298
|
+
cache_path=REPO_ROOT.parent / ".trae" / "skills" / "devsquad" / "SKILL.md",
|
|
299
|
+
description="TRAE L3 cache (workspace root .trae) SKILL.md content",
|
|
300
|
+
optional=True,
|
|
301
|
+
),
|
|
302
|
+
# L4: DevSquad project .trae (historical/backup, not read by TRAE directly)
|
|
303
|
+
ContentDiffSpec(
|
|
304
|
+
source_path="SKILL.md",
|
|
305
|
+
cache_path=REPO_ROOT / ".trae" / "skills" / "devsquad" / "SKILL.md",
|
|
306
|
+
description="TRAE L4 cache (DevSquad .trae) SKILL.md content",
|
|
307
|
+
optional=True,
|
|
308
|
+
),
|
|
309
|
+
# skill-manifest.yaml (same 4 layers)
|
|
310
|
+
ContentDiffSpec(
|
|
311
|
+
source_path="skill-manifest.yaml",
|
|
312
|
+
cache_path=Path.home() / ".trae-cn" / "skills" / "devsquad" / "skill-manifest.yaml",
|
|
313
|
+
description="TRAE L1 cache (~/.trae-cn) skill-manifest.yaml content",
|
|
314
|
+
optional=True,
|
|
315
|
+
),
|
|
316
|
+
ContentDiffSpec(
|
|
317
|
+
source_path="skill-manifest.yaml",
|
|
318
|
+
cache_path=Path.home() / ".trae" / "skills" / "devsquad" / "skill-manifest.yaml",
|
|
319
|
+
description="TRAE L2 cache (~/.trae) skill-manifest.yaml content",
|
|
320
|
+
optional=True,
|
|
321
|
+
),
|
|
322
|
+
ContentDiffSpec(
|
|
323
|
+
source_path="skill-manifest.yaml",
|
|
324
|
+
cache_path=REPO_ROOT.parent / ".trae" / "skills" / "devsquad" / "skill-manifest.yaml",
|
|
325
|
+
description="TRAE L3 cache (workspace root .trae) skill-manifest.yaml content",
|
|
326
|
+
optional=True,
|
|
327
|
+
),
|
|
328
|
+
ContentDiffSpec(
|
|
329
|
+
source_path="skill-manifest.yaml",
|
|
330
|
+
cache_path=REPO_ROOT / ".trae" / "skills" / "devsquad" / "skill-manifest.yaml",
|
|
331
|
+
description="TRAE L4 cache (DevSquad .trae) skill-manifest.yaml content",
|
|
332
|
+
optional=True,
|
|
333
|
+
),
|
|
334
|
+
]
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def check_content_diff(spec: ContentDiffSpec) -> VersionCheck:
|
|
338
|
+
"""Verify that cache file is byte-identical to source file.
|
|
339
|
+
|
|
340
|
+
Returns a VersionCheck-like result. ``expected`` carries the source path
|
|
341
|
+
and ``found`` carries "identical" / "differs" / None for missing files.
|
|
342
|
+
"""
|
|
343
|
+
source = REPO_ROOT / spec.source_path
|
|
344
|
+
if not source.exists():
|
|
345
|
+
return VersionCheck(
|
|
346
|
+
file=spec.description,
|
|
347
|
+
expected=spec.source_path,
|
|
348
|
+
found=None,
|
|
349
|
+
passed=False,
|
|
350
|
+
detail=f"source file missing: {spec.source_path}",
|
|
351
|
+
)
|
|
352
|
+
if not spec.cache_path.exists():
|
|
353
|
+
if spec.optional:
|
|
354
|
+
return VersionCheck(
|
|
355
|
+
file=spec.description,
|
|
356
|
+
expected=spec.source_path,
|
|
357
|
+
found=None,
|
|
358
|
+
passed=True,
|
|
359
|
+
detail=f"SKIP (optional cache, not found): {spec.description}",
|
|
360
|
+
)
|
|
361
|
+
return VersionCheck(
|
|
362
|
+
file=spec.description,
|
|
363
|
+
expected=spec.source_path,
|
|
364
|
+
found=None,
|
|
365
|
+
passed=False,
|
|
366
|
+
detail=f"cache file missing: {spec.cache_path}",
|
|
367
|
+
)
|
|
368
|
+
try:
|
|
369
|
+
source_content = source.read_text(encoding="utf-8")
|
|
370
|
+
cache_content = spec.cache_path.read_text(encoding="utf-8")
|
|
371
|
+
except OSError as exc:
|
|
372
|
+
return VersionCheck(
|
|
373
|
+
file=spec.description,
|
|
374
|
+
expected=spec.source_path,
|
|
375
|
+
found=None,
|
|
376
|
+
passed=False,
|
|
377
|
+
detail=f"read error: {exc}",
|
|
378
|
+
)
|
|
379
|
+
if source_content == cache_content:
|
|
380
|
+
return VersionCheck(
|
|
381
|
+
file=spec.description,
|
|
382
|
+
expected=spec.source_path,
|
|
383
|
+
found="identical",
|
|
384
|
+
passed=True,
|
|
385
|
+
detail=f"{spec.description}: identical to source OK",
|
|
386
|
+
)
|
|
387
|
+
# Compute first diverging line for actionable diagnostics
|
|
388
|
+
source_lines = source_content.splitlines()
|
|
389
|
+
cache_lines = cache_content.splitlines()
|
|
390
|
+
first_diff_line = 0
|
|
391
|
+
max_lines = max(len(source_lines), len(cache_lines))
|
|
392
|
+
for i in range(max_lines):
|
|
393
|
+
s = source_lines[i] if i < len(source_lines) else "<EOF>"
|
|
394
|
+
c = cache_lines[i] if i < len(cache_lines) else "<EOF>"
|
|
395
|
+
if s != c:
|
|
396
|
+
first_diff_line = i + 1
|
|
397
|
+
break
|
|
398
|
+
return VersionCheck(
|
|
399
|
+
file=spec.description,
|
|
400
|
+
expected=spec.source_path,
|
|
401
|
+
found="differs",
|
|
402
|
+
passed=False,
|
|
403
|
+
detail=(
|
|
404
|
+
f"{spec.description}: content differs from source "
|
|
405
|
+
f"(source={len(source_lines)}L, cache={len(cache_lines)}L, "
|
|
406
|
+
f"first diff at line {first_diff_line})"
|
|
407
|
+
),
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
|
|
244
411
|
def check_file(spec: FileSpec, expected: str) -> VersionCheck:
|
|
245
412
|
"""Check a single file for version consistency."""
|
|
246
413
|
content = spec.read_text()
|
|
@@ -415,6 +582,11 @@ def _print_results(results: list[VersionCheck]) -> dict[str, list[VersionCheck]]
|
|
|
415
582
|
def main() -> int:
|
|
416
583
|
parser = argparse.ArgumentParser(description="Check version consistency across project files.")
|
|
417
584
|
parser.add_argument("--strict", action="store_true", help="fail on warnings too")
|
|
585
|
+
parser.add_argument(
|
|
586
|
+
"--no-content-diff",
|
|
587
|
+
action="store_true",
|
|
588
|
+
help="skip TRAE cache content diff checks (only run version-field checks)",
|
|
589
|
+
)
|
|
418
590
|
args = parser.parse_args()
|
|
419
591
|
|
|
420
592
|
expected = get_canonical_version()
|
|
@@ -432,6 +604,16 @@ def main() -> int:
|
|
|
432
604
|
prd_results = _check_prd_files()
|
|
433
605
|
results.extend(prd_results)
|
|
434
606
|
|
|
607
|
+
# V4.3.1: TRAE cache content diff (catches stale body even when version
|
|
608
|
+
# field is synced). Print a separator so the new section is visually
|
|
609
|
+
# distinguishable from the version-field checks above.
|
|
610
|
+
if not args.no_content_diff:
|
|
611
|
+
print("-" * 70)
|
|
612
|
+
print(f"Content diff checks ({len(CONTENT_DIFF_PAIRS)} TRAE cache pair(s))...")
|
|
613
|
+
print("-" * 70)
|
|
614
|
+
diff_results = [check_content_diff(spec) for spec in CONTENT_DIFF_PAIRS]
|
|
615
|
+
results.extend(diff_results)
|
|
616
|
+
|
|
435
617
|
buckets = _print_results(results)
|
|
436
618
|
failed = buckets["failed"]
|
|
437
619
|
warnings = buckets["warnings"]
|
|
@@ -439,7 +621,7 @@ def main() -> int:
|
|
|
439
621
|
skipped = buckets["skipped"]
|
|
440
622
|
|
|
441
623
|
if failed:
|
|
442
|
-
print("\nVersion mismatches detected:")
|
|
624
|
+
print("\nVersion/content mismatches detected:")
|
|
443
625
|
for r in failed:
|
|
444
626
|
print(f" - {r.file}: expected {r.expected}, found {r.found}")
|
|
445
627
|
print(f" {r.detail}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "4.4.0"
|