devsquad 4.5.7__tar.gz → 4.5.9__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 (517) hide show
  1. {devsquad-4.5.7 → devsquad-4.5.9}/PKG-INFO +3 -3
  2. {devsquad-4.5.7 → devsquad-4.5.9}/README.md +2 -2
  3. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/PKG-INFO +3 -3
  4. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/SOURCES.txt +2 -0
  5. {devsquad-4.5.7 → devsquad-4.5.9}/pyproject.toml +1 -1
  6. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/routes/dispatch.py +15 -5
  7. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_module_activation.py +174 -2
  8. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli.py +4 -0
  9. devsquad-4.5.9/scripts/cli_risks.py +503 -0
  10. devsquad-4.5.9/scripts/collaboration/_version.py +1 -0
  11. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/async_coordinator.py +28 -44
  12. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/coordinator.py +68 -29
  13. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps.py +2 -0
  14. devsquad-4.5.9/scripts/collaboration/file_risk_store.py +416 -0
  15. devsquad-4.5.9/scripts/collaboration/gather_core.py +118 -0
  16. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/risk_register.py +71 -0
  17. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/worker.py +219 -104
  18. {devsquad-4.5.7 → devsquad-4.5.9}/skills/__init__.py +1 -1
  19. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_performance_benchmarks.py +21 -7
  20. devsquad-4.5.7/scripts/cli_risks.py +0 -305
  21. devsquad-4.5.7/scripts/collaboration/_version.py +0 -1
  22. {devsquad-4.5.7 → devsquad-4.5.9}/LICENSE +0 -0
  23. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/dependency_links.txt +0 -0
  24. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/entry_points.txt +0 -0
  25. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/requires.txt +0 -0
  26. {devsquad-4.5.7 → devsquad-4.5.9}/devsquad.egg-info/top_level.txt +0 -0
  27. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/__init__.py +0 -0
  28. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/__init__.py +0 -0
  29. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/models.py +0 -0
  30. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/rate_limit.py +0 -0
  31. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/routes/__init__.py +0 -0
  32. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/routes/lifecycle.py +0 -0
  33. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/routes/metrics.py +0 -0
  34. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/routes/metrics_gates.py +0 -0
  35. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api/security.py +0 -0
  36. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/api_server.py +0 -0
  37. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/auth.py +0 -0
  38. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/benchmark_async_dispatch.py +0 -0
  39. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/benchmark_ponytail_smart.py +0 -0
  40. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/benchmark_real_llm.py +0 -0
  41. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_async_coverage.py +0 -0
  42. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_config_consistency.py +0 -0
  43. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_constructor_params.py +0 -0
  44. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_dependency_lock.py +0 -0
  45. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_dependency_sync.py +0 -0
  46. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_doc_consistency.py +0 -0
  47. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_hidden_content.py +0 -0
  48. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_test_pyramid.py +0 -0
  49. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_test_quality.py +0 -0
  50. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/check_version_consistency.py +0 -0
  51. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli/__init__.py +0 -0
  52. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli/cli_visual.py +0 -0
  53. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_audit.py +0 -0
  54. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_backend.py +0 -0
  55. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_dispatch.py +0 -0
  56. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_doctor.py +0 -0
  57. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_lifecycle.py +0 -0
  58. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_metrics.py +0 -0
  59. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_modules.py +0 -0
  60. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_sessions.py +0 -0
  61. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/cli_utils.py +0 -0
  62. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/__init__.py +0 -0
  63. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/adaptive_role_selector.py +0 -0
  64. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/adversarial_verify.py +0 -0
  65. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/agent_briefing.py +0 -0
  66. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/agent_identity.py +0 -0
  67. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ai_semantic_matcher.py +0 -0
  68. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/anchor_checker.py +0 -0
  69. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/anti_rationalization.py +0 -0
  70. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/approval_gate.py +0 -0
  71. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/artifact_store.py +0 -0
  72. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/async_adapter.py +0 -0
  73. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/async_coeffect_resolver.py +0 -0
  74. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/async_llm_backend.py +0 -0
  75. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/audit_logger.py +0 -0
  76. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/__init__.py +0 -0
  77. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/git_driver.py +0 -0
  78. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/loop_controller.py +0 -0
  79. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/notes_memory.py +0 -0
  80. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/run_state.py +0 -0
  81. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/sleep_guard.py +0 -0
  82. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/autonomous/smart_confirmation.py +0 -0
  83. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/backend_config.py +0 -0
  84. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/backend_paths.py +0 -0
  85. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/batch_scheduler.py +0 -0
  86. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/benchmark_regression_checker.py +0 -0
  87. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/cache_interface.py +0 -0
  88. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ccr_store.py +0 -0
  89. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/checkpoint_manager.py +0 -0
  90. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ci_feedback_adapter.py +0 -0
  91. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/cli_command_classifier.py +0 -0
  92. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/code_graph_query.py +0 -0
  93. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/code_graph_storage.py +0 -0
  94. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/code_knowledge_graph.py +0 -0
  95. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/code_map_generator.py +0 -0
  96. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/coeffect.py +0 -0
  97. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/concern_pack_loader.py +0 -0
  98. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/confidence_score.py +0 -0
  99. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/config_manager.py +0 -0
  100. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/connector_framework.py +0 -0
  101. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/consensus.py +0 -0
  102. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/consensus_gate.py +0 -0
  103. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/constants.py +0 -0
  104. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/content_cache.py +0 -0
  105. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/content_crusher.py +0 -0
  106. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/context_compressor.py +0 -0
  107. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dashboard_live_mode.py +0 -0
  108. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/debt_collector.py +0 -0
  109. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dependency_hallucination_checker.py +0 -0
  110. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/deployment_compliance_checker.py +0 -0
  111. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_audit.py +0 -0
  112. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_component_factory.py +0 -0
  113. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_effect.py +0 -0
  114. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_hooks.py +0 -0
  115. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_lifecycle.py +0 -0
  116. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_models.py +0 -0
  117. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_performance.py +0 -0
  118. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_pre_steps.py +0 -0
  119. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_rbac.py +0 -0
  120. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_result_assembler.py +0 -0
  121. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_services.py +0 -0
  122. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_base.py +0 -0
  123. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_consensus_mixin.py +0 -0
  124. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_feedback_mixin.py +0 -0
  125. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_mixins.py +0 -0
  126. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_quality_mixin.py +0 -0
  127. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatch_steps_services_mixin.py +0 -0
  128. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher.py +0 -0
  129. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_async_mixin.py +0 -0
  130. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_audit_mixin.py +0 -0
  131. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_base.py +0 -0
  132. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_config.py +0 -0
  133. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_error_mixin.py +0 -0
  134. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_factory.py +0 -0
  135. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_intent_mapper.py +0 -0
  136. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_lifecycle_mixin.py +0 -0
  137. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_loop_controller.py +0 -0
  138. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_mixins.py +0 -0
  139. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_status_mixin.py +0 -0
  140. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_transaction.py +0 -0
  141. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dispatcher_utils_mixin.py +0 -0
  142. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dora_metrics_collector.py +0 -0
  143. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/dual_layer_context.py +0 -0
  144. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/effect_registry.py +0 -0
  145. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/enhanced_worker.py +0 -0
  146. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/enterprise_feature.py +0 -0
  147. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/error_budget_tracker.py +0 -0
  148. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/event_bus.py +0 -0
  149. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/execution_guard.py +0 -0
  150. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/feature_usage_tracker.py +0 -0
  151. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/feedback_control_loop.py +0 -0
  152. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/file_bundler.py +0 -0
  153. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/five_axis_consensus.py +0 -0
  154. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/gap_analyzer.py +0 -0
  155. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/gitlab_connector.py +0 -0
  156. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/host_llm_bridge.py +0 -0
  157. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/host_llm_bridge_v2.py +0 -0
  158. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/input_validator.py +0 -0
  159. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/intent_workflow_mapper.py +0 -0
  160. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/judge_agent.py +0 -0
  161. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/language_parsers.py +0 -0
  162. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/learned_rule_store.py +0 -0
  163. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/lifecycle_gate.py +0 -0
  164. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/lifecycle_protocol.py +0 -0
  165. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/lifecycle_shortcut_adapter.py +0 -0
  166. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/lifecycle_shortcut_helpers.py +0 -0
  167. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/lifecycle_templates.py +0 -0
  168. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_backend.py +0 -0
  169. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_cache.py +0 -0
  170. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_cache_async.py +0 -0
  171. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_cache_base.py +0 -0
  172. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_retry.py +0 -0
  173. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_retry_async.py +0 -0
  174. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/llm_retry_base.py +0 -0
  175. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/__init__.py +0 -0
  176. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/discovery_probe.py +0 -0
  177. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/handoff_adapter.py +0 -0
  178. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/independent_evaluator.py +0 -0
  179. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/kernel.py +0 -0
  180. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/loop_scheduler.py +0 -0
  181. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/models.py +0 -0
  182. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/protocols.py +0 -0
  183. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/rollback_strategy.py +0 -0
  184. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/loop_engineering/unified_memory.py +0 -0
  185. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/mce_adapter.py +0 -0
  186. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_bridge.py +0 -0
  187. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_claw_source.py +0 -0
  188. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_forgetting.py +0 -0
  189. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_index.py +0 -0
  190. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_query.py +0 -0
  191. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_serializer.py +0 -0
  192. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/memory_types.py +0 -0
  193. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/meta_skill_layering.py +0 -0
  194. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/micro_task_planner.py +0 -0
  195. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/models.py +0 -0
  196. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/models_base.py +0 -0
  197. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/models_dispatch.py +0 -0
  198. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/models_lifecycle.py +0 -0
  199. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/module_fiber.py +0 -0
  200. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/moka_backend.py +0 -0
  201. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/multi_host_adapter.py +0 -0
  202. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/multi_level_cache.py +0 -0
  203. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/multi_tenant.py +0 -0
  204. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/null_providers.py +0 -0
  205. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/operation_classifier.py +0 -0
  206. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/order_chain_detector.py +0 -0
  207. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/output_slicer.py +0 -0
  208. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/output_validator.py +0 -0
  209. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/perf_baseline.py +0 -0
  210. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/performance_fingerprint.py +0 -0
  211. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/performance_monitor.py +0 -0
  212. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/permission_guard.py +0 -0
  213. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/plugins/__init__.py +0 -0
  214. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/plugins/hot_loader.py +0 -0
  215. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ponytail_rule_injector.py +0 -0
  216. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prometheus_metrics.py +0 -0
  217. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler.py +0 -0
  218. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_base.py +0 -0
  219. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_formatting_mixin.py +0 -0
  220. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_mixins.py +0 -0
  221. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_substitution_mixin.py +0 -0
  222. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_template_mixin.py +0 -0
  223. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_assembler_validation_mixin.py +0 -0
  224. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/prompt_dials.py +0 -0
  225. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/protocols.py +0 -0
  226. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/quality_calibration_gate.py +0 -0
  227. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/quality_probe_slice.py +0 -0
  228. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/rbac_engine.py +0 -0
  229. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/redesign_auditor.py +0 -0
  230. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/redesign_checkers.py +0 -0
  231. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/redis_cache.py +0 -0
  232. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/report_formatter.py +0 -0
  233. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/requirement_tracer.py +0 -0
  234. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/retrospective.py +0 -0
  235. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/review_checkers.py +0 -0
  236. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/role_matcher.py +0 -0
  237. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/role_skill_loader.py +0 -0
  238. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/role_specific_mock_backend.py +0 -0
  239. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/rule_collector.py +0 -0
  240. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/scratchpad.py +0 -0
  241. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/scratchpad_history_store.py +0 -0
  242. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/secret_patterns.py +0 -0
  243. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/severity_router.py +0 -0
  244. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/similar_task_recommender.py +0 -0
  245. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skill_extractor.py +0 -0
  246. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skill_provider_builtin.py +0 -0
  247. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skill_provider_mcp.py +0 -0
  248. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skill_registry.py +0 -0
  249. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skill_storage.py +0 -0
  250. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/skillifier.py +0 -0
  251. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/standardized_role_template.py +0 -0
  252. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/task_completion_checker.py +0 -0
  253. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/task_scale_gate.py +0 -0
  254. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/tech_debt_manager.py +0 -0
  255. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/test_quality_guard.py +0 -0
  256. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/todo_drift_monitor.py +0 -0
  257. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/two_stage_review_gate.py +0 -0
  258. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_accessibility_mixin.py +0 -0
  259. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_framework.py +0 -0
  260. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_framework_base.py +0 -0
  261. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_heuristic_mixin.py +0 -0
  262. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_journey_mixin.py +0 -0
  263. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_mixins.py +0 -0
  264. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/ue_test_persona_mixin.py +0 -0
  265. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/unified_gate_engine.py +0 -0
  266. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/usage_tracker.py +0 -0
  267. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/user_friendly_error.py +0 -0
  268. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/verification_gate.py +0 -0
  269. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/viewpoint_registry.py +0 -0
  270. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/warmup_manager.py +0 -0
  271. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine.py +0 -0
  272. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_base.py +0 -0
  273. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_lifecycle_mixin.py +0 -0
  274. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_mixins.py +0 -0
  275. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_persistence_mixin.py +0 -0
  276. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_state_mixin.py +0 -0
  277. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/workflow_engine_transition_mixin.py +0 -0
  278. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collaboration/yagni_checker.py +0 -0
  279. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/collect_baseline.py +0 -0
  280. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/__init__.py +0 -0
  281. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/app.py +0 -0
  282. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/auth_views.py +0 -0
  283. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/components.py +0 -0
  284. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/dag_views.py +0 -0
  285. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/dispatch_views.py +0 -0
  286. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/i18n.py +0 -0
  287. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/lifecycle_views.py +0 -0
  288. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/metrics_views.py +0 -0
  289. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/state.py +0 -0
  290. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard/v43_panels.py +0 -0
  291. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/dashboard.py +0 -0
  292. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/generate_benchmark_report.py +0 -0
  293. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/generate_quality_decision_report.py +0 -0
  294. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/history_manager.py +0 -0
  295. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/mcp_server.py +0 -0
  296. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/__init__.py +0 -0
  297. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/deterministic_rule_engine.py +0 -0
  298. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/models.py +0 -0
  299. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/taste_dials.py +0 -0
  300. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/uiux_analyzer.py +0 -0
  301. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/uiux_subitems.py +0 -0
  302. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/qa/visual_regression.py +0 -0
  303. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/scan_pickle_payloads.py +0 -0
  304. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/utils/__init__.py +0 -0
  305. {devsquad-4.5.7 → devsquad-4.5.9}/scripts/utils/_find_missing_hints.py +0 -0
  306. {devsquad-4.5.7 → devsquad-4.5.9}/setup.cfg +0 -0
  307. {devsquad-4.5.7 → devsquad-4.5.9}/skills/_version.py +0 -0
  308. {devsquad-4.5.7 → devsquad-4.5.9}/skills/dispatch/handler.py +0 -0
  309. {devsquad-4.5.7 → devsquad-4.5.9}/skills/intent/handler.py +0 -0
  310. {devsquad-4.5.7 → devsquad-4.5.9}/skills/prototype/handler.py +0 -0
  311. {devsquad-4.5.7 → devsquad-4.5.9}/skills/registry.py +0 -0
  312. {devsquad-4.5.7 → devsquad-4.5.9}/skills/retrospective/__init__.py +0 -0
  313. {devsquad-4.5.7 → devsquad-4.5.9}/skills/retrospective/handler.py +0 -0
  314. {devsquad-4.5.7 → devsquad-4.5.9}/skills/review/handler.py +0 -0
  315. {devsquad-4.5.7 → devsquad-4.5.9}/skills/security/handler.py +0 -0
  316. {devsquad-4.5.7 → devsquad-4.5.9}/skills/teach/handler.py +0 -0
  317. {devsquad-4.5.7 → devsquad-4.5.9}/skills/test/__init__.py +0 -0
  318. {devsquad-4.5.7 → devsquad-4.5.9}/skills/test/handler.py +0 -0
  319. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_4pt_grid.py +0 -0
  320. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_adaptive_role_selector.py +0 -0
  321. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_adversarial_verify.py +0 -0
  322. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_agent_briefing.py +0 -0
  323. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_anchor_retrospective.py +0 -0
  324. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_anti_rationalization.py +0 -0
  325. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_antipattern_bans.py +0 -0
  326. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_api_budget_status_endpoint.py +0 -0
  327. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_api_security.py +0 -0
  328. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_api_server_v362.py +0 -0
  329. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_approval_gate.py +0 -0
  330. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_artifact_effect_binding.py +0 -0
  331. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_artifact_store.py +0 -0
  332. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_async_coordinator.py +0 -0
  333. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_async_modules.py +0 -0
  334. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_audit_logger.py +0 -0
  335. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_auth_phase5.py +0 -0
  336. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_autonomous.py +0 -0
  337. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_backend_config.py +0 -0
  338. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_benchmark_ponytail_smart.py +0 -0
  339. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cache_interface.py +0 -0
  340. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_ccr_store.py +0 -0
  341. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_async_coverage.py +0 -0
  342. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_config_consistency.py +0 -0
  343. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_constructor_params.py +0 -0
  344. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_dependency_lock.py +0 -0
  345. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_hidden_content.py +0 -0
  346. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_test_pyramid.py +0 -0
  347. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_test_quality.py +0 -0
  348. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_check_version_consistency.py +0 -0
  349. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_ci_feedback_adapter.py +0 -0
  350. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_audit.py +0 -0
  351. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_command_classifier.py +0 -0
  352. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_deep_v362.py +0 -0
  353. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_doctor.py +0 -0
  354. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_lifecycle.py +0 -0
  355. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_metrics.py +0 -0
  356. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_cli_phase5.py +0 -0
  357. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_code_knowledge_graph.py +0 -0
  358. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_claw_integration_test.py +0 -0
  359. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_context_compressor_test.py +0 -0
  360. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_core_test.py +0 -0
  361. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_dispatcher_test.py +0 -0
  362. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_dispatcher_ux_test.py +0 -0
  363. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_e2e_test.py +0 -0
  364. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_enhanced_e2e_test.py +0 -0
  365. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_llm_cache_test.py +0 -0
  366. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_llm_retry_test.py +0 -0
  367. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_mce_adapter_test.py +0 -0
  368. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_memory_bridge_test.py +0 -0
  369. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_performance_monitor_test.py +0 -0
  370. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_permission_guard_test.py +0 -0
  371. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_prompt_optimization_test.py +0 -0
  372. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_role_mapping_test.py +0 -0
  373. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_skillifier_test.py +0 -0
  374. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_test_quality_guard.py +0 -0
  375. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_test_quality_guard_test.py +0 -0
  376. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_upstream_test.py +0 -0
  377. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_collaboration_warmup_manager_test.py +0 -0
  378. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_confidence_score.py +0 -0
  379. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_config_injection.py +0 -0
  380. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_consensus_dissent.py +0 -0
  381. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_consensus_fatigue.py +0 -0
  382. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_consensus_gate.py +0 -0
  383. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_content_cache.py +0 -0
  384. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_content_crusher.py +0 -0
  385. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_coordinator_smart_compression.py +0 -0
  386. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dag_views.py +0 -0
  387. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dashboard_live_mode.py +0 -0
  388. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dashboard_split.py +0 -0
  389. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dashboard_ui_e2e.py +0 -0
  390. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dashboard_v43_panels.py +0 -0
  391. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_data_backup.py +0 -0
  392. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_debt_collector.py +0 -0
  393. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_deep_shallow.py +0 -0
  394. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_deletion_test.py +0 -0
  395. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dependency_hallucination_checker.py +0 -0
  396. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dependency_lock.py +0 -0
  397. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_deployment_compliance_checker.py +0 -0
  398. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_deterministic_rule_engine.py +0 -0
  399. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatch_audit.py +0 -0
  400. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatch_performance.py +0 -0
  401. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatch_rbac.py +0 -0
  402. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatch_steps.py +0 -0
  403. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatcher_intent_mapper.py +0 -0
  404. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatcher_loop_controller.py +0 -0
  405. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatcher_mixins.py +0 -0
  406. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatcher_phase5_core.py +0 -0
  407. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dispatcher_transaction.py +0 -0
  408. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_docker_deployment.py +0 -0
  409. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_dual_layer_context.py +0 -0
  410. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_effect_registry.py +0 -0
  411. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_enhanced_worker.py +0 -0
  412. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_fallback_fuse.py +0 -0
  413. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_feedback_control_loop.py +0 -0
  414. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_five_axis_consensus.py +0 -0
  415. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_flow_standalone.py +0 -0
  416. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_full_lifecycle_adapter.py +0 -0
  417. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_git_guardrails.py +0 -0
  418. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_gitlab_connector.py +0 -0
  419. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_glossary_loader.py +0 -0
  420. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_grilling_mode.py +0 -0
  421. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_handoff_redaction.py +0 -0
  422. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_history_manager_v362.py +0 -0
  423. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_host_bridge_unit.py +0 -0
  424. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_host_llm_bridge_v2.py +0 -0
  425. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_input_validator_phase5.py +0 -0
  426. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_input_validator_sensitive.py +0 -0
  427. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_intent_workflow_mapper.py +0 -0
  428. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_judge_agent.py +0 -0
  429. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_learned_rule_phase4.py +0 -0
  430. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_lifecycle_protocol.py +0 -0
  431. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_llm_auto_fallback.py +0 -0
  432. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_llm_backend_resolve.py +0 -0
  433. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_llm_cache_protocol.py +0 -0
  434. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_loop_engineering.py +0 -0
  435. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_loop_engineering_rollback.py +0 -0
  436. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_mcp_server_v362.py +0 -0
  437. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_memory_benchmarks.py +0 -0
  438. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_meta_skill_layering.py +0 -0
  439. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_micro_task_planner.py +0 -0
  440. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_moka_backend.py +0 -0
  441. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_multi_host_adapter.py +0 -0
  442. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_multi_tenant.py +0 -0
  443. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_multi_tenant_isolation_e2e.py +0 -0
  444. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_no_op_test.py +0 -0
  445. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_node_type_separation.py +0 -0
  446. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_null_providers.py +0 -0
  447. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_oklch_color.py +0 -0
  448. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_operation_classifier.py +0 -0
  449. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_order_chain_detector.py +0 -0
  450. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_output_slicer.py +0 -0
  451. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_output_validator_prompt_injection.py +0 -0
  452. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_perf_baseline.py +0 -0
  453. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_perf_baseline_ci_gate.py +0 -0
  454. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_performance_fingerprint.py +0 -0
  455. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_performance_monitor_protocol.py +0 -0
  456. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_permission_guard_human_gate.py +0 -0
  457. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_permission_guard_phase5.py +0 -0
  458. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_phase4_ghost_feature_defense.py +0 -0
  459. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_pipeline_step19_20.py +0 -0
  460. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_plan_c_unified_architecture.py +0 -0
  461. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_plugins_hot_loader.py +0 -0
  462. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_ponytail_rule_injector.py +0 -0
  463. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_production_features.py +0 -0
  464. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_prometheus_metrics.py +0 -0
  465. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_prompt_dials.py +0 -0
  466. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_protocols.py +0 -0
  467. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_prototype_skill.py +0 -0
  468. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_qa_uiux_visual_regression.py +0 -0
  469. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_quick_bonus.py +0 -0
  470. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_rate_limit.py +0 -0
  471. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_rbac_engine.py +0 -0
  472. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_rbac_fail_closed.py +0 -0
  473. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_red_capable_gate.py +0 -0
  474. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_redesign_auditor.py +0 -0
  475. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_redis_cache.py +0 -0
  476. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_requirement_tracer.py +0 -0
  477. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_retry_jitter_strategies.py +0 -0
  478. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_role_skill_loader.py +0 -0
  479. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_rule_collector.py +0 -0
  480. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_rule_injection_security.py +0 -0
  481. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_secret_patterns.py +0 -0
  482. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_severity_router.py +0 -0
  483. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_similar_task_recommender.py +0 -0
  484. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_skill_registry_coverage.py +0 -0
  485. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_skill_security.py +0 -0
  486. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_sleep_guard.py +0 -0
  487. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_standardized_role_template.py +0 -0
  488. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_start_script.py +0 -0
  489. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_step_node_types.py +0 -0
  490. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_suggested_next_steps.py +0 -0
  491. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_task_completion_checker.py +0 -0
  492. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_task_scale_gate.py +0 -0
  493. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_taste_dials.py +0 -0
  494. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_tautological_seams.py +0 -0
  495. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_teach_skill.py +0 -0
  496. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_tech_debt_manager.py +0 -0
  497. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_todo_drift_monitor.py +0 -0
  498. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_token_budget_compressed_scratchpad.py +0 -0
  499. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_triage_label.py +0 -0
  500. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_two_stage_review_gate.py +0 -0
  501. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_ue_test_framework.py +0 -0
  502. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_uiux_subitems.py +0 -0
  503. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_usage_tracker_coverage.py +0 -0
  504. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_v39_e2e.py +0 -0
  505. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_v39_performance.py +0 -0
  506. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_v411_security_hardening.py +0 -0
  507. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_verification_gate.py +0 -0
  508. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_version.py +0 -0
  509. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_vertical_slice.py +0 -0
  510. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_worker_artifact_integration.py +0 -0
  511. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_engine.py +0 -0
  512. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_engine_base.py +0 -0
  513. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_engine_lifecycle.py +0 -0
  514. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_engine_state.py +0 -0
  515. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_engine_transition.py +0 -0
  516. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_workflow_persistence_coverage.py +0 -0
  517. {devsquad-4.5.7 → devsquad-4.5.9}/tests/test_yagni_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsquad
3
- Version: 4.5.7
3
+ Version: 4.5.9
4
4
  Summary: Production-Ready Multi-Role AI Task Orchestrator
5
5
  Author-email: DevSquad Team <devsquad@example.com>
6
6
  License: MIT
@@ -96,14 +96,14 @@ Dynamic: license-file
96
96
  <p align="center">
97
97
  <strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
98
98
  <br>
99
- <em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
99
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.5.9 (Unified Gather Execution Core + Native Async Worker: 执行层统一 gather 化 + Worker 原生异步) | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
100
100
  </p>
101
101
 
102
102
  <p align="center">
103
103
  <img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
104
104
  <img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
105
105
  <img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
106
- <img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
106
+ <img alt="Version" src="https://img.shields.io/badge/V4.5.9-success" />
107
107
  <img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
108
108
  <img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
109
109
  <img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
@@ -3,14 +3,14 @@
3
3
  <p align="center">
4
4
  <strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
5
5
  <br>
6
- <em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
6
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.5.9 (Unified Gather Execution Core + Native Async Worker: 执行层统一 gather 化 + Worker 原生异步) | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
10
  <img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
11
11
  <img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
12
12
  <img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
13
- <img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
13
+ <img alt="Version" src="https://img.shields.io/badge/V4.5.9-success" />
14
14
  <img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
15
15
  <img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
16
16
  <img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsquad
3
- Version: 4.5.7
3
+ Version: 4.5.9
4
4
  Summary: Production-Ready Multi-Role AI Task Orchestrator
5
5
  Author-email: DevSquad Team <devsquad@example.com>
6
6
  License: MIT
@@ -96,14 +96,14 @@ Dynamic: license-file
96
96
  <p align="center">
97
97
  <strong>🎯 把「单个 AI 助手」升级成「7 人 AI 专业团队」</strong>
98
98
  <br>
99
- <em>One task → Multi-role AI collaboration → One conclusion | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills) | V4.4.0 (5 enhancement modules)</em>
99
+ <em>One task → Multi-role AI collaboration → One conclusion | V4.5.9 (Unified Gather Execution Core + Native Async Worker: 执行层统一 gather 化 + Worker 原生异步) | V4.5.8 (FileRiskStore persistence + risks add/assess/mitigate/close + exposure filters) | V4.5.7 (Coeffect Async + Risk Register UX CLI) | V4.5.6 (Module Fiber + Coeffect: 6-state FSM + topological activation + modules CLI) | V4.5.3 (Artifacts + Effect — ArtifactStore + DispatchEffect + EffectRegistry + Audit CLI) | V4.5.2 (Experience polish: MOKA + Metrics + GitLab + Doctor + BackendConfig) | V4.5.0 (cross-session continuity + protocol-native skills)</em>
100
100
  </p>
101
101
 
102
102
  <p align="center">
103
103
  <img alt="Python" src="https://img.shields.io/badge/Python-3.10+-blue?logo=python&logoColor=white" />
104
104
  <img alt="License" src="https://img.shields.io/badge/License-MIT-green" />
105
105
  <img alt="Tests" src="https://img.shields.io/badge/Tests-8996%2B%20passing-brightgreen" />
106
- <img alt="Version" src="https://img.shields.io/badge/V4.5.7-success" />
106
+ <img alt="Version" src="https://img.shields.io/badge/V4.5.9-success" />
107
107
  <img alt="CI" src="https://img.shields.io/badge/CI-GitHub_Actions-blue?logo=githubactions" />
108
108
  <img alt="Quality" src="https://img.shields.io/badge/Code%20Quality-4.3%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%86-blue" />
109
109
  <img alt="Security" src="https://img.shields.io/badge/Security-5%2F5%20%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-success" />
@@ -141,8 +141,10 @@ scripts/collaboration/execution_guard.py
141
141
  scripts/collaboration/feature_usage_tracker.py
142
142
  scripts/collaboration/feedback_control_loop.py
143
143
  scripts/collaboration/file_bundler.py
144
+ scripts/collaboration/file_risk_store.py
144
145
  scripts/collaboration/five_axis_consensus.py
145
146
  scripts/collaboration/gap_analyzer.py
147
+ scripts/collaboration/gather_core.py
146
148
  scripts/collaboration/gitlab_connector.py
147
149
  scripts/collaboration/host_llm_bridge.py
148
150
  scripts/collaboration/host_llm_bridge_v2.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devsquad"
7
- version = "4.5.7"
7
+ version = "4.5.9"
8
8
  description = "Production-Ready Multi-Role AI Task Orchestrator"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -13,6 +13,8 @@ Endpoints:
13
13
 
14
14
  from __future__ import annotations
15
15
 
16
+ import asyncio
17
+ import functools
16
18
  import logging
17
19
  import os
18
20
  import sys
@@ -216,11 +218,19 @@ async def dispatch_task(
216
218
  logger.warning("Failed to create LLM backend '%s': %s, using default", request.backend, backend_err)
217
219
  pass
218
220
 
219
- result = dispatcher.dispatch(
220
- task_description=request.task,
221
- roles=request.roles,
222
- mode=request.mode,
223
- dry_run=request.dry_run,
221
+ # V4.5.9: dispatch() is synchronous and its Coordinator raises
222
+ # RuntimeError inside a running event loop (fail-fast sync bridge,
223
+ # see PRD V4.5.9 R3). Move the blocking call off the event loop.
224
+ loop = asyncio.get_running_loop()
225
+ result = await loop.run_in_executor(
226
+ None,
227
+ functools.partial(
228
+ dispatcher.dispatch,
229
+ task_description=request.task,
230
+ roles=request.roles,
231
+ mode=request.mode,
232
+ dry_run=request.dry_run,
233
+ ),
224
234
  )
225
235
 
226
236
  response_data = _convert_dispatch_result(result)
@@ -21,6 +21,13 @@ V4.5.4 P12.3: Extended to include:
21
21
  - CoeffectResolver (P12.3.2)
22
22
  - ModulesCLI (P12.3.3)
23
23
 
24
+ V4.5.8: Extended to include:
25
+ - FileRiskStore (file-backed risk persistence)
26
+ - CliRisks mutators (add/mitigate/close/list --min-exposure)
27
+
28
+ V4.5.9: Extended to include:
29
+ - GatherCore (shared asyncio.gather execution core, _call_counter_gather)
30
+
24
31
  Usage:
25
32
  python3 scripts/check_module_activation.py
26
33
  CI: python3 scripts/check_module_activation.py || exit 1
@@ -168,9 +175,25 @@ def main() -> int:
168
175
  # V4.5.6 P12.4 activation (4 new modules)
169
176
  _activate_v455_modules()
170
177
 
178
+ # V4.5.8 modules — touch counters in main scope
179
+ from scripts.collaboration.file_risk_store import (
180
+ get_call_counter_er as _get_file_risk_store_counter_er,
181
+ )
182
+
183
+ # V4.5.9 modules — touch counters in main scope
184
+ from scripts.collaboration.gather_core import (
185
+ get_call_counter_gather as _get_gather_counter,
186
+ )
187
+
171
188
  # V4.5.7 P12.5 activation (2 new modules)
172
189
  _activate_v457_modules()
173
190
 
191
+ # V4.5.8 activation (FileRiskStore + CliRisks mutators)
192
+ _activate_v458_modules()
193
+
194
+ # V4.5.9 activation (GatherCore — shared asyncio.gather execution core)
195
+ _activate_v459_modules()
196
+
174
197
  counters = {
175
198
  "TaskScaleGate": tsg(),
176
199
  "PerfBaseline": pb(),
@@ -197,9 +220,14 @@ def main() -> int:
197
220
  # V4.5.7 P12.5 modules
198
221
  "AsyncCoeffectResolver_P12.5.1": _get_async_coeffect_counter_er(),
199
222
  "CliRisks_P12.5.2": _get_cli_risks_counter_er(),
223
+ # V4.5.8 modules
224
+ "FileRiskStore_V458.1": _get_file_risk_store_counter_er(),
225
+ "CliRisksMutators_V458.2": _get_cli_risks_counter_er(),
226
+ # V4.5.9 modules
227
+ "GatherCore_V459.1": _get_gather_counter(),
200
228
  }
201
229
 
202
- print("V4.5.7 Anti-Ghost Verification")
230
+ print("V4.5.9 Anti-Ghost Verification")
203
231
  print("=" * 60)
204
232
  failed = []
205
233
  for name, count in counters.items():
@@ -215,10 +243,154 @@ def main() -> int:
215
243
  print(f" - {name}")
216
244
  return 1
217
245
 
218
- print("All V4.5.7 modules activated. Anti-ghost gate PASSED.")
246
+ print("All V4.5.9 modules activated. Anti-ghost gate PASSED.")
219
247
  return 0
220
248
 
221
249
 
250
+ def _activate_v459_modules() -> None:
251
+ """Exercise the V4.5.9 gather core to bump its anti-ghost counter.
252
+
253
+ Runs one minimal execute_batch_gather() batch — the same entry point a
254
+ parallel dispatch hits — so ``_call_counter_gather`` reflects real usage.
255
+ """
256
+ import asyncio
257
+
258
+ from scripts.collaboration.gather_core import execute_batch_gather
259
+ from scripts.collaboration.models import TaskDefinition, WorkerResult
260
+
261
+ async def _run_one(task: TaskDefinition) -> WorkerResult:
262
+ return WorkerResult(worker_id="anti-ghost", task_id=task.task_id, success=True)
263
+
264
+ async def _drive() -> list[WorkerResult]:
265
+ return await execute_batch_gather(
266
+ [TaskDefinition(description="anti-ghost check", role_id="architect")],
267
+ _run_one,
268
+ 1,
269
+ )
270
+
271
+ asyncio.run(_drive())
272
+
273
+
274
+ def _activate_v458_modules() -> None:
275
+ """Exercise V4.5.8 modules to bump their anti-ghost counters.
276
+
277
+ Touches:
278
+ - FileRiskStore — items_to_payload + transaction write + load
279
+ round-trip + lock_timeout lock acquisition failure
280
+ - CliRisks mutators — add + mitigate + close (no approval) +
281
+ list --min-exposure filtering
282
+ """
283
+ import io
284
+ import tempfile
285
+ from argparse import Namespace
286
+ from contextlib import redirect_stdout
287
+ from pathlib import Path
288
+
289
+ # Wave 1: FileRiskStore — full persistence round-trip
290
+ from scripts.collaboration.file_risk_store import (
291
+ FileRiskStore,
292
+ RiskStoreLockError,
293
+ )
294
+ from scripts.collaboration.risk_register import (
295
+ ResponseStrategy,
296
+ RiskItem,
297
+ RiskStatus,
298
+ )
299
+
300
+ with tempfile.TemporaryDirectory() as tmpdir:
301
+ root = Path(tmpdir)
302
+ store = FileRiskStore(root=root, lock_timeout=1.0)
303
+ item = RiskItem(
304
+ id="R-AG-1",
305
+ description="anti-ghost V4.5.8 risk",
306
+ probability=0.4,
307
+ impact=0.5,
308
+ response_strategy=ResponseStrategy.MITIGATE,
309
+ owner="anti-ghost",
310
+ status=RiskStatus.OPEN,
311
+ category="technical",
312
+ )
313
+ payload = store.items_to_payload("default", [item])
314
+ with store.transaction("default") as tx:
315
+ tx["items"] = payload["items"]
316
+ loaded = store.load("default")
317
+ assert loaded["version"] == 1
318
+ assert loaded["items"][0]["id"] == "R-AG-1"
319
+
320
+ # Lock timeout: a second store with lock_timeout=0.1 must fail while
321
+ # the transaction above holds the cross-process lock.
322
+ holder = FileRiskStore(root=root, lock_timeout=5.0)
323
+ with holder.transaction("default"):
324
+ tight = FileRiskStore(root=root, lock_timeout=0.1)
325
+ try:
326
+ tight.load("default")
327
+ except RiskStoreLockError:
328
+ pass
329
+ else:
330
+ raise AssertionError("expected RiskStoreLockError after 0.1s timeout")
331
+
332
+ # Wave 2+3: CliRisks mutators — add → mitigate → close → list filter
333
+ from scripts.cli_risks import (
334
+ cmd_risks_add,
335
+ cmd_risks_close,
336
+ cmd_risks_list,
337
+ cmd_risks_mitigate,
338
+ )
339
+
340
+ with tempfile.TemporaryDirectory() as tmpdir:
341
+ root = str(Path(tmpdir) / "risks")
342
+ buf = io.StringIO()
343
+ with redirect_stdout(buf):
344
+ add_rc = cmd_risks_add(Namespace(
345
+ description="anti-ghost CLI risk",
346
+ probability=0.6,
347
+ impact=0.5,
348
+ category="technical",
349
+ owner="anti-ghost",
350
+ register_id="default",
351
+ root=root,
352
+ ))
353
+ assert add_rc == 0
354
+
355
+ # Recover the risk id from the persisted store.
356
+ reader = FileRiskStore(root=root)
357
+ risk_id = next(iter(reader.payload_to_items(reader.load("default"))))
358
+
359
+ with redirect_stdout(buf):
360
+ assert cmd_risks_mitigate(Namespace(
361
+ risk_id=risk_id,
362
+ strategy="mitigate",
363
+ owner="devops",
364
+ plan="anti-ghost plan",
365
+ register_id="default",
366
+ root=root,
367
+ )) == 0
368
+
369
+ # Close WITHOUT approval (require_approval=False → no gate).
370
+ with redirect_stdout(buf):
371
+ assert cmd_risks_close(Namespace(
372
+ risk_id=risk_id,
373
+ require_approval=False,
374
+ register_id="default",
375
+ root=root,
376
+ )) == 0
377
+
378
+ # --min-exposure filter: high threshold hides every row, zero shows it.
379
+ buf_hidden, buf_visible = io.StringIO(), io.StringIO()
380
+ with redirect_stdout(buf_hidden):
381
+ assert cmd_risks_list(Namespace(
382
+ register_id="default", root=root, format="md",
383
+ min_exposure=0.99, severity=None, category=None, limit=None,
384
+ )) == 0
385
+ assert "(none)" in buf_hidden.getvalue()
386
+ with redirect_stdout(buf_visible):
387
+ assert cmd_risks_list(Namespace(
388
+ register_id="default", root=root, format="md",
389
+ min_exposure=0.0, severity=None, category=None, limit=None,
390
+ )) == 0
391
+ assert "`R-" in buf_visible.getvalue()
392
+
393
+
222
394
  def _activate_v454_modules() -> None:
223
395
  """Exercise V4.5.4 P12.3 modules to bump their anti-ghost counters.
224
396
 
@@ -616,6 +616,10 @@ Environment Variables (API keys are read from env vars only, never command line)
616
616
  return cmd_roles(args)
617
617
  elif args.command in ("sessions", "sess"):
618
618
  return cmd_sessions(args)
619
+ elif args.command in ("risks", "risk"):
620
+ if hasattr(args, "func") and callable(args.func):
621
+ return args.func(args)
622
+ return 1
619
623
  elif args.command == "doctor":
620
624
  return cmd_doctor(args)
621
625
  elif args.command == "backend":