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.
Files changed (457) hide show
  1. {devsquad-4.3.0 → devsquad-4.4.0}/PKG-INFO +4 -4
  2. {devsquad-4.3.0 → devsquad-4.4.0}/README.md +3 -3
  3. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/PKG-INFO +4 -4
  4. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/SOURCES.txt +10 -0
  5. {devsquad-4.3.0 → devsquad-4.4.0}/pyproject.toml +1 -1
  6. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_version_consistency.py +183 -1
  7. devsquad-4.4.0/scripts/collaboration/_version.py +1 -0
  8. devsquad-4.4.0/scripts/collaboration/benchmark_regression_checker.py +378 -0
  9. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_models.py +9 -0
  10. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher.py +79 -0
  11. devsquad-4.4.0/scripts/collaboration/dora_metrics_collector.py +254 -0
  12. devsquad-4.4.0/scripts/collaboration/error_budget_tracker.py +245 -0
  13. devsquad-4.4.0/scripts/collaboration/gap_analyzer.py +335 -0
  14. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/output_validator.py +93 -1
  15. devsquad-4.4.0/scripts/collaboration/quality_calibration_gate.py +163 -0
  16. devsquad-4.4.0/scripts/collaboration/quality_probe_slice.py +301 -0
  17. devsquad-4.4.0/scripts/collaboration/risk_register.py +343 -0
  18. devsquad-4.4.0/scripts/collaboration/role_specific_mock_backend.py +156 -0
  19. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/unified_gate_engine.py +186 -1
  20. devsquad-4.4.0/scripts/collaboration/viewpoint_registry.py +327 -0
  21. devsquad-4.4.0/scripts/generate_quality_decision_report.py +114 -0
  22. {devsquad-4.3.0 → devsquad-4.4.0}/skills/__init__.py +1 -1
  23. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_version_consistency.py +318 -4
  24. devsquad-4.3.0/scripts/collaboration/_version.py +0 -1
  25. {devsquad-4.3.0 → devsquad-4.4.0}/LICENSE +0 -0
  26. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/dependency_links.txt +0 -0
  27. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/entry_points.txt +0 -0
  28. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/requires.txt +0 -0
  29. {devsquad-4.3.0 → devsquad-4.4.0}/devsquad.egg-info/top_level.txt +0 -0
  30. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/__init__.py +0 -0
  31. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/__init__.py +0 -0
  32. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/models.py +0 -0
  33. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/rate_limit.py +0 -0
  34. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/__init__.py +0 -0
  35. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/dispatch.py +0 -0
  36. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/lifecycle.py +0 -0
  37. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/metrics.py +0 -0
  38. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/routes/metrics_gates.py +0 -0
  39. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api/security.py +0 -0
  40. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/api_server.py +0 -0
  41. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/auth.py +0 -0
  42. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_async_dispatch.py +0 -0
  43. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_ponytail_smart.py +0 -0
  44. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/benchmark_real_llm.py +0 -0
  45. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_async_coverage.py +0 -0
  46. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_config_consistency.py +0 -0
  47. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_constructor_params.py +0 -0
  48. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_dependency_lock.py +0 -0
  49. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_dependency_sync.py +0 -0
  50. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_hidden_content.py +0 -0
  51. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_test_pyramid.py +0 -0
  52. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/check_test_quality.py +0 -0
  53. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli/__init__.py +0 -0
  54. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli/cli_visual.py +0 -0
  55. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli.py +0 -0
  56. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_dispatch.py +0 -0
  57. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_lifecycle.py +0 -0
  58. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/cli_utils.py +0 -0
  59. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/__init__.py +0 -0
  60. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/adaptive_role_selector.py +0 -0
  61. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/adversarial_verify.py +0 -0
  62. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/agent_briefing.py +0 -0
  63. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ai_semantic_matcher.py +0 -0
  64. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/anchor_checker.py +0 -0
  65. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/anti_rationalization.py +0 -0
  66. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_adapter.py +0 -0
  67. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_coordinator.py +0 -0
  68. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/async_llm_backend.py +0 -0
  69. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/audit_logger.py +0 -0
  70. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/__init__.py +0 -0
  71. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/git_driver.py +0 -0
  72. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/loop_controller.py +0 -0
  73. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/notes_memory.py +0 -0
  74. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/run_state.py +0 -0
  75. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/sleep_guard.py +0 -0
  76. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/autonomous/smart_confirmation.py +0 -0
  77. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/batch_scheduler.py +0 -0
  78. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/cache_interface.py +0 -0
  79. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ccr_store.py +0 -0
  80. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/checkpoint_manager.py +0 -0
  81. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ci_feedback_adapter.py +0 -0
  82. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/cli_command_classifier.py +0 -0
  83. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_graph_query.py +0 -0
  84. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_graph_storage.py +0 -0
  85. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_knowledge_graph.py +0 -0
  86. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/code_map_generator.py +0 -0
  87. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/concern_pack_loader.py +0 -0
  88. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/confidence_score.py +0 -0
  89. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/config_manager.py +0 -0
  90. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/consensus.py +0 -0
  91. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/consensus_gate.py +0 -0
  92. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/constants.py +0 -0
  93. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/content_cache.py +0 -0
  94. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/content_crusher.py +0 -0
  95. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/context_compressor.py +0 -0
  96. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/coordinator.py +0 -0
  97. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dashboard_live_mode.py +0 -0
  98. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/debt_collector.py +0 -0
  99. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dependency_hallucination_checker.py +0 -0
  100. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/deployment_compliance_checker.py +0 -0
  101. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_audit.py +0 -0
  102. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_component_factory.py +0 -0
  103. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_hooks.py +0 -0
  104. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_lifecycle.py +0 -0
  105. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_performance.py +0 -0
  106. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_pre_steps.py +0 -0
  107. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_rbac.py +0 -0
  108. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_result_assembler.py +0 -0
  109. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_services.py +0 -0
  110. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps.py +0 -0
  111. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_base.py +0 -0
  112. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
  113. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
  114. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_mixins.py +0 -0
  115. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_quality_mixin.py +0 -0
  116. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
  117. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
  118. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
  119. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_base.py +0 -0
  120. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_config.py +0 -0
  121. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
  122. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_factory.py +0 -0
  123. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
  124. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_mixins.py +0 -0
  125. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
  126. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
  127. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/dual_layer_context.py +0 -0
  128. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/enhanced_worker.py +0 -0
  129. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/enterprise_feature.py +0 -0
  130. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/event_bus.py +0 -0
  131. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/execution_guard.py +0 -0
  132. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/feature_usage_tracker.py +0 -0
  133. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/feedback_control_loop.py +0 -0
  134. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/five_axis_consensus.py +0 -0
  135. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/input_validator.py +0 -0
  136. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/intent_workflow_mapper.py +0 -0
  137. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/judge_agent.py +0 -0
  138. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/language_parsers.py +0 -0
  139. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/learned_rule_store.py +0 -0
  140. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_gate.py +0 -0
  141. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_protocol.py +0 -0
  142. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
  143. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
  144. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/lifecycle_templates.py +0 -0
  145. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_backend.py +0 -0
  146. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache.py +0 -0
  147. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache_async.py +0 -0
  148. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_cache_base.py +0 -0
  149. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry.py +0 -0
  150. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry_async.py +0 -0
  151. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/llm_retry_base.py +0 -0
  152. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/__init__.py +0 -0
  153. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/discovery_probe.py +0 -0
  154. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/handoff_adapter.py +0 -0
  155. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/independent_evaluator.py +0 -0
  156. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/kernel.py +0 -0
  157. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/loop_scheduler.py +0 -0
  158. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/models.py +0 -0
  159. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/protocols.py +0 -0
  160. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/rollback_strategy.py +0 -0
  161. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/loop_engineering/unified_memory.py +0 -0
  162. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/mce_adapter.py +0 -0
  163. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_bridge.py +0 -0
  164. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_claw_source.py +0 -0
  165. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_forgetting.py +0 -0
  166. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_index.py +0 -0
  167. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_query.py +0 -0
  168. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_serializer.py +0 -0
  169. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/memory_types.py +0 -0
  170. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/meta_skill_layering.py +0 -0
  171. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/micro_task_planner.py +0 -0
  172. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models.py +0 -0
  173. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_base.py +0 -0
  174. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_dispatch.py +0 -0
  175. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/models_lifecycle.py +0 -0
  176. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_host_adapter.py +0 -0
  177. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_level_cache.py +0 -0
  178. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/multi_tenant.py +0 -0
  179. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/null_providers.py +0 -0
  180. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/operation_classifier.py +0 -0
  181. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/output_slicer.py +0 -0
  182. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/performance_fingerprint.py +0 -0
  183. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/performance_monitor.py +0 -0
  184. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/permission_guard.py +0 -0
  185. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/plugins/__init__.py +0 -0
  186. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/plugins/hot_loader.py +0 -0
  187. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ponytail_rule_injector.py +0 -0
  188. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prometheus_metrics.py +0 -0
  189. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler.py +0 -0
  190. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_base.py +0 -0
  191. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_formatting_mixin.py +0 -0
  192. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_mixins.py +0 -0
  193. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
  194. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
  195. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
  196. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/prompt_dials.py +0 -0
  197. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/protocols.py +0 -0
  198. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/rbac_engine.py +0 -0
  199. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redesign_auditor.py +0 -0
  200. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redesign_checkers.py +0 -0
  201. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/redis_cache.py +0 -0
  202. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/report_formatter.py +0 -0
  203. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/requirement_tracer.py +0 -0
  204. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/retrospective.py +0 -0
  205. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/review_checkers.py +0 -0
  206. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/role_matcher.py +0 -0
  207. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/role_skill_loader.py +0 -0
  208. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/rule_collector.py +0 -0
  209. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/scratchpad.py +0 -0
  210. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/secret_patterns.py +0 -0
  211. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/severity_router.py +0 -0
  212. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/similar_task_recommender.py +0 -0
  213. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_extractor.py +0 -0
  214. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_registry.py +0 -0
  215. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skill_storage.py +0 -0
  216. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/skillifier.py +0 -0
  217. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/standardized_role_template.py +0 -0
  218. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/task_completion_checker.py +0 -0
  219. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/tech_debt_manager.py +0 -0
  220. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/test_quality_guard.py +0 -0
  221. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/todo_drift_monitor.py +0 -0
  222. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/two_stage_review_gate.py +0 -0
  223. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
  224. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_framework.py +0 -0
  225. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_framework_base.py +0 -0
  226. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
  227. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
  228. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_mixins.py +0 -0
  229. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
  230. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/usage_tracker.py +0 -0
  231. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/user_friendly_error.py +0 -0
  232. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/verification_gate.py +0 -0
  233. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/warmup_manager.py +0 -0
  234. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/worker.py +0 -0
  235. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine.py +0 -0
  236. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_base.py +0 -0
  237. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
  238. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_mixins.py +0 -0
  239. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
  240. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
  241. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
  242. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/collaboration/yagni_checker.py +0 -0
  243. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/__init__.py +0 -0
  244. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/app.py +0 -0
  245. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/auth_views.py +0 -0
  246. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/components.py +0 -0
  247. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/dag_views.py +0 -0
  248. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/dispatch_views.py +0 -0
  249. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/i18n.py +0 -0
  250. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/lifecycle_views.py +0 -0
  251. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/metrics_views.py +0 -0
  252. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/state.py +0 -0
  253. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard/v43_panels.py +0 -0
  254. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/dashboard.py +0 -0
  255. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/generate_benchmark_report.py +0 -0
  256. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/history_manager.py +0 -0
  257. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/mcp_server.py +0 -0
  258. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/__init__.py +0 -0
  259. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/deterministic_rule_engine.py +0 -0
  260. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/models.py +0 -0
  261. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/taste_dials.py +0 -0
  262. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/uiux_analyzer.py +0 -0
  263. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/uiux_subitems.py +0 -0
  264. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/qa/visual_regression.py +0 -0
  265. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/scan_pickle_payloads.py +0 -0
  266. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/utils/__init__.py +0 -0
  267. {devsquad-4.3.0 → devsquad-4.4.0}/scripts/utils/_find_missing_hints.py +0 -0
  268. {devsquad-4.3.0 → devsquad-4.4.0}/setup.cfg +0 -0
  269. {devsquad-4.3.0 → devsquad-4.4.0}/skills/_version.py +0 -0
  270. {devsquad-4.3.0 → devsquad-4.4.0}/skills/dispatch/handler.py +0 -0
  271. {devsquad-4.3.0 → devsquad-4.4.0}/skills/intent/handler.py +0 -0
  272. {devsquad-4.3.0 → devsquad-4.4.0}/skills/prototype/handler.py +0 -0
  273. {devsquad-4.3.0 → devsquad-4.4.0}/skills/registry.py +0 -0
  274. {devsquad-4.3.0 → devsquad-4.4.0}/skills/retrospective/__init__.py +0 -0
  275. {devsquad-4.3.0 → devsquad-4.4.0}/skills/retrospective/handler.py +0 -0
  276. {devsquad-4.3.0 → devsquad-4.4.0}/skills/review/handler.py +0 -0
  277. {devsquad-4.3.0 → devsquad-4.4.0}/skills/security/handler.py +0 -0
  278. {devsquad-4.3.0 → devsquad-4.4.0}/skills/teach/handler.py +0 -0
  279. {devsquad-4.3.0 → devsquad-4.4.0}/skills/test/__init__.py +0 -0
  280. {devsquad-4.3.0 → devsquad-4.4.0}/skills/test/handler.py +0 -0
  281. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_4pt_grid.py +0 -0
  282. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_adaptive_role_selector.py +0 -0
  283. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_adversarial_verify.py +0 -0
  284. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_agent_briefing.py +0 -0
  285. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_anchor_retrospective.py +0 -0
  286. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_anti_rationalization.py +0 -0
  287. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_antipattern_bans.py +0 -0
  288. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_budget_status_endpoint.py +0 -0
  289. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_security.py +0 -0
  290. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_api_server_v362.py +0 -0
  291. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_async_coordinator.py +0 -0
  292. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_async_modules.py +0 -0
  293. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_audit_logger.py +0 -0
  294. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_auth_phase5.py +0 -0
  295. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_autonomous.py +0 -0
  296. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_benchmark_ponytail_smart.py +0 -0
  297. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cache_interface.py +0 -0
  298. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ccr_store.py +0 -0
  299. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_async_coverage.py +0 -0
  300. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_config_consistency.py +0 -0
  301. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_constructor_params.py +0 -0
  302. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_dependency_lock.py +0 -0
  303. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_hidden_content.py +0 -0
  304. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_test_pyramid.py +0 -0
  305. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_check_test_quality.py +0 -0
  306. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ci_feedback_adapter.py +0 -0
  307. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_command_classifier.py +0 -0
  308. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_deep_v362.py +0 -0
  309. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_lifecycle.py +0 -0
  310. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_cli_phase5.py +0 -0
  311. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_code_knowledge_graph.py +0 -0
  312. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_claw_integration_test.py +0 -0
  313. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_context_compressor_test.py +0 -0
  314. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_core_test.py +0 -0
  315. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_dispatcher_test.py +0 -0
  316. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
  317. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_e2e_test.py +0 -0
  318. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
  319. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_llm_cache_test.py +0 -0
  320. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_llm_retry_test.py +0 -0
  321. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_mce_adapter_test.py +0 -0
  322. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_memory_bridge_test.py +0 -0
  323. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_performance_monitor_test.py +0 -0
  324. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_permission_guard_test.py +0 -0
  325. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_prompt_optimization_test.py +0 -0
  326. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_role_mapping_test.py +0 -0
  327. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_skillifier_test.py +0 -0
  328. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_test_quality_guard.py +0 -0
  329. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_test_quality_guard_test.py +0 -0
  330. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_upstream_test.py +0 -0
  331. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_collaboration_warmup_manager_test.py +0 -0
  332. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_confidence_score.py +0 -0
  333. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_config_injection.py +0 -0
  334. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_dissent.py +0 -0
  335. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_fatigue.py +0 -0
  336. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_consensus_gate.py +0 -0
  337. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_content_cache.py +0 -0
  338. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_content_crusher.py +0 -0
  339. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_coordinator_smart_compression.py +0 -0
  340. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dag_views.py +0 -0
  341. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_live_mode.py +0 -0
  342. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_split.py +0 -0
  343. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_ui_e2e.py +0 -0
  344. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dashboard_v43_panels.py +0 -0
  345. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_data_backup.py +0 -0
  346. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_debt_collector.py +0 -0
  347. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deep_shallow.py +0 -0
  348. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deletion_test.py +0 -0
  349. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dependency_hallucination_checker.py +0 -0
  350. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dependency_lock.py +0 -0
  351. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deployment_compliance_checker.py +0 -0
  352. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_deterministic_rule_engine.py +0 -0
  353. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_audit.py +0 -0
  354. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_performance.py +0 -0
  355. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_rbac.py +0 -0
  356. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatch_steps.py +0 -0
  357. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatcher_mixins.py +0 -0
  358. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dispatcher_phase5_core.py +0 -0
  359. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_docker_deployment.py +0 -0
  360. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_dual_layer_context.py +0 -0
  361. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_enhanced_worker.py +0 -0
  362. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_feedback_control_loop.py +0 -0
  363. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_five_axis_consensus.py +0 -0
  364. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_flow_standalone.py +0 -0
  365. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_full_lifecycle_adapter.py +0 -0
  366. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_git_guardrails.py +0 -0
  367. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_glossary_loader.py +0 -0
  368. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_grilling_mode.py +0 -0
  369. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_handoff_redaction.py +0 -0
  370. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_history_manager_v362.py +0 -0
  371. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_input_validator_phase5.py +0 -0
  372. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_input_validator_sensitive.py +0 -0
  373. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_intent_workflow_mapper.py +0 -0
  374. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_judge_agent.py +0 -0
  375. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_learned_rule_phase4.py +0 -0
  376. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_lifecycle_protocol.py +0 -0
  377. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_llm_auto_fallback.py +0 -0
  378. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_llm_cache_protocol.py +0 -0
  379. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_loop_engineering.py +0 -0
  380. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_loop_engineering_rollback.py +0 -0
  381. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_mcp_server_v362.py +0 -0
  382. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_memory_benchmarks.py +0 -0
  383. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_meta_skill_layering.py +0 -0
  384. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_micro_task_planner.py +0 -0
  385. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_host_adapter.py +0 -0
  386. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_tenant.py +0 -0
  387. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_multi_tenant_isolation_e2e.py +0 -0
  388. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_no_op_test.py +0 -0
  389. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_node_type_separation.py +0 -0
  390. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_null_providers.py +0 -0
  391. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_oklch_color.py +0 -0
  392. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_operation_classifier.py +0 -0
  393. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_output_slicer.py +0 -0
  394. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_output_validator_prompt_injection.py +0 -0
  395. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_benchmarks.py +0 -0
  396. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_fingerprint.py +0 -0
  397. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_performance_monitor_protocol.py +0 -0
  398. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_permission_guard_human_gate.py +0 -0
  399. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_permission_guard_phase5.py +0 -0
  400. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_phase4_ghost_feature_defense.py +0 -0
  401. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_pipeline_step19_20.py +0 -0
  402. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_plan_c_unified_architecture.py +0 -0
  403. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_plugins_hot_loader.py +0 -0
  404. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ponytail_rule_injector.py +0 -0
  405. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_production_features.py +0 -0
  406. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prometheus_metrics.py +0 -0
  407. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prompt_dials.py +0 -0
  408. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_protocols.py +0 -0
  409. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_prototype_skill.py +0 -0
  410. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_qa_uiux_visual_regression.py +0 -0
  411. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_quick_bonus.py +0 -0
  412. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rate_limit.py +0 -0
  413. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rbac_engine.py +0 -0
  414. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rbac_fail_closed.py +0 -0
  415. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_red_capable_gate.py +0 -0
  416. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_redesign_auditor.py +0 -0
  417. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_redis_cache.py +0 -0
  418. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_requirement_tracer.py +0 -0
  419. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_retry_jitter_strategies.py +0 -0
  420. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_role_skill_loader.py +0 -0
  421. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rule_collector.py +0 -0
  422. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_rule_injection_security.py +0 -0
  423. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_secret_patterns.py +0 -0
  424. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_severity_router.py +0 -0
  425. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_similar_task_recommender.py +0 -0
  426. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_skill_registry_coverage.py +0 -0
  427. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_skill_security.py +0 -0
  428. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_sleep_guard.py +0 -0
  429. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_standardized_role_template.py +0 -0
  430. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_start_script.py +0 -0
  431. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_step_node_types.py +0 -0
  432. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_suggested_next_steps.py +0 -0
  433. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_task_completion_checker.py +0 -0
  434. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_taste_dials.py +0 -0
  435. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_tautological_seams.py +0 -0
  436. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_teach_skill.py +0 -0
  437. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_tech_debt_manager.py +0 -0
  438. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_todo_drift_monitor.py +0 -0
  439. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_token_budget_compressed_scratchpad.py +0 -0
  440. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_triage_label.py +0 -0
  441. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_two_stage_review_gate.py +0 -0
  442. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_ue_test_framework.py +0 -0
  443. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_uiux_subitems.py +0 -0
  444. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_usage_tracker_coverage.py +0 -0
  445. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v39_e2e.py +0 -0
  446. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v39_performance.py +0 -0
  447. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_v411_security_hardening.py +0 -0
  448. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_verification_gate.py +0 -0
  449. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_version.py +0 -0
  450. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_vertical_slice.py +0 -0
  451. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine.py +0 -0
  452. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_base.py +0 -0
  453. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_lifecycle.py +0 -0
  454. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_state.py +0 -0
  455. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_engine_transition.py +0 -0
  456. {devsquad-4.3.0 → devsquad-4.4.0}/tests/test_workflow_persistence_coverage.py +0 -0
  457. {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.0
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.3.0 Pre-release (V4.3.0 candidate pending user approval)</em>
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-7681%20passing-brightgreen" />
106
- <img alt="Version" src="https://img.shields.io/badge/V4.3.0-success" />
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.3.0 Pre-release (V4.3.0 candidate pending user approval)</em>
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-7681%20passing-brightgreen" />
13
- <img alt="Version" src="https://img.shields.io/badge/V4.3.0-success" />
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.0
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.3.0 Pre-release (V4.3.0 candidate pending user approval)</em>
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-7681%20passing-brightgreen" />
106
- <img alt="Version" src="https://img.shields.io/badge/V4.3.0-success" />
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devsquad"
7
- version = "4.3.0"
7
+ version = "4.4.0"
8
8
  description = "Production-Ready Multi-Role AI Task Orchestrator"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -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"