code-coordinator 0.5.310__tar.gz → 0.5.311__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 (819) hide show
  1. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.311/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/drive_queue.py +100 -31
  5. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/wedged_drive_queue.py +37 -15
  6. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_drive_queue.py +43 -0
  7. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue.py +97 -0
  8. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_wedged_drive_queue.py +49 -0
  9. code_coordinator-0.5.310/code_coordinator.egg-info/scm_version.json +0 -8
  10. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/.gitignore +0 -0
  23. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/GOAL.md +0 -0
  25. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/LICENSE +0 -0
  26. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/README.md +0 -0
  28. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/client.py +0 -0
  62. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/machine.py +0 -0
  77. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/pr.py +0 -0
  83. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/store_migrate.py +0 -0
  92. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/config.py +0 -0
  97. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/db.py +0 -0
  107. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/decomposition_chat.py +0 -0
  109. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-failure-notify.service +0 -0
  117. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-fleet-watchdog.service +0 -0
  118. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  119. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-notify.service +0 -0
  120. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-notify.timer +0 -0
  121. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-release-propagate.service +0 -0
  122. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-release-propagate.timer +0 -0
  123. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-release-window.service +0 -0
  124. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-release-window.timer +0 -0
  125. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-serve.service +0 -0
  126. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-web-dist-build.service +0 -0
  127. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-web-dist-build.timer +0 -0
  128. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy/coord-web.service +0 -0
  129. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy_manifest.py +0 -0
  130. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deploy_units.py +0 -0
  131. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deprecation_telemetry.py +0 -0
  132. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/deps.py +0 -0
  133. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/diagnose.py +0 -0
  134. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dispatch.py +0 -0
  135. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/dist_name.py +0 -0
  136. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/drive.py +0 -0
  137. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/events.py +0 -0
  139. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/github_ops.py +0 -0
  149. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/github_throttle.py +0 -0
  150. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/goal.py +0 -0
  151. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/graph_health.py +0 -0
  152. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/__init__.py +0 -0
  153. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/aggregate.py +0 -0
  154. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/__init__.py +0 -0
  155. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/_ci_pin.py +0 -0
  156. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/agent_install.py +0 -0
  157. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/cargo_targets.py +0 -0
  158. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/claude_binary.py +0 -0
  159. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  160. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/issues_sync_staleness.py +0 -0
  171. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/plan_usage.py +0 -0
  172. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/release_cordon.py +0 -0
  173. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/repo_state.py +0 -0
  174. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/spawned_coord.py +0 -0
  175. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/stalled_pipeline.py +0 -0
  176. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/issues_sync_status.py +0 -0
  194. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/liveness_auditor.py +0 -0
  195. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/machine_onboard.py +0 -0
  196. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/machine_pause.py +0 -0
  197. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/merge_queue.py +0 -0
  198. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/milestone_chat.py +0 -0
  199. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/milestone_dispatch.py +0 -0
  200. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/milestone_gate.py +0 -0
  201. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/milestone_order.py +0 -0
  202. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/mock_author.py +0 -0
  203. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/models.py +0 -0
  204. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/network.py +0 -0
  205. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/new_issue_chat.py +0 -0
  206. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/__init__.py +0 -0
  207. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/baseline.py +0 -0
  208. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/cli.py +0 -0
  209. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/collect.py +0 -0
  210. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/digest.py +0 -0
  211. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/models.py +0 -0
  212. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/predicate.py +0 -0
  213. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/service.py +0 -0
  214. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/store.py +0 -0
  215. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notifier/transport.py +0 -0
  216. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/notify.py +0 -0
  217. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/openapi.py +0 -0
  218. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/overlap_fence.py +0 -0
  219. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/overlap_predict.py +0 -0
  220. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/parentage.py +0 -0
  221. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/parentage_github.py +0 -0
  222. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/pipeline.py +0 -0
  223. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/plan_parser.py +0 -0
  224. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/plans.py +0 -0
  225. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/platform_paths.py +0 -0
  226. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/portal_bridge.py +0 -0
  227. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/portal_store.py +0 -0
  228. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/portal_sync.py +0 -0
  229. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/pr_body_lint.py +0 -0
  230. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/prereqs.py +0 -0
  231. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/reconcile.py +0 -0
  239. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/reconcile_tick.py +0 -0
  240. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/refine_chat.py +0 -0
  241. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/release_cordon.py +0 -0
  242. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/release_propagate.py +0 -0
  243. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/release_verify.py +0 -0
  244. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/release_window.py +0 -0
  245. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/repo_edit.py +0 -0
  246. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/repo_onboard.py +0 -0
  247. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/reports.py +0 -0
  248. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/rest_schema.py +0 -0
  249. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/revalidate.py +0 -0
  250. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/review.py +0 -0
  251. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/scorecard.py +0 -0
  252. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/self_health.py +0 -0
  253. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/serve_app.py +0 -0
  254. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  255. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  256. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  257. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/portal-followup/SKILL.md +0 -0
  260. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/release-now/SKILL.md +0 -0
  261. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  262. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  263. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/skills/update-issue/SKILL.md +0 -0
  264. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/smoke.py +0 -0
  265. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/spend_ceiling.py +0 -0
  266. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/split_work.py +0 -0
  267. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/sql.py +0 -0
  268. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/stage_projection.py +0 -0
  269. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/state.py +0 -0
  270. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/store_migrate.py +0 -0
  271. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/test_author.py +0 -0
  272. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/test_chat.py +0 -0
  273. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/test_orchestrator.py +0 -0
  274. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/test_report.py +0 -0
  275. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/tui_release.py +0 -0
  276. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/usage.py +0 -0
  277. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/usage_limits.py +0 -0
  278. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/usage_rollup.py +0 -0
  279. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coord/worker_events.py +0 -0
  280. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/coordinator.example.yml +0 -0
  281. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-agent.service +0 -0
  282. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-db-backup.service +0 -0
  283. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-db-backup.sh +0 -0
  284. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-db-backup.timer +0 -0
  285. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-drive-queue.service +0 -0
  286. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-drive-queue.timer +0 -0
  287. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-failure-notify.service +0 -0
  288. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-failure-notify.sh +0 -0
  289. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-fleet-watchdog.service +0 -0
  290. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-fleet-watchdog.timer +0 -0
  291. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-notify.service +0 -0
  292. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-notify.timer +0 -0
  293. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-release-propagate.service +0 -0
  294. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-release-propagate.timer +0 -0
  295. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-release-window.service +0 -0
  296. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-release-window.timer +0 -0
  297. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-serve.service +0 -0
  298. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-web-dist-build.service +0 -0
  299. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-web-dist-build.sh +0 -0
  300. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-web-dist-build.timer +0 -0
  301. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-web-rollback.sh +0 -0
  302. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/coord-web.service +0 -0
  303. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/deploy/node-shim.sh +0 -0
  304. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ADR_COORD_TUI_CI.md +0 -0
  305. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  306. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ADR_COORD_WEB_CI.md +0 -0
  307. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ADR_COORD_WEB_DIST.md +0 -0
  308. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  309. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/AGENT_OPERATIONS.md +0 -0
  310. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ARCHITECTURE.md +0 -0
  311. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ARCH_SECURITY_GATES.md +0 -0
  312. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/COCKPIT.md +0 -0
  313. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/CONTROL_CENTER.md +0 -0
  314. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/COST_DISCIPLINE.md +0 -0
  315. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/CROSS_PLATFORM.md +0 -0
  316. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/CUSTOMER_FACING_APPS.md +0 -0
  317. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/CUSTOMER_PORTAL.md +0 -0
  318. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/DRIVE_QUEUE.md +0 -0
  319. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/EPHEMERAL_WORKERS.md +0 -0
  320. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/FORGE_MIGRATION.md +0 -0
  321. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/GRAPHIFY_SETUP.md +0 -0
  322. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ISSUE_GUIDANCE.md +0 -0
  323. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/MAC_MINI.md +0 -0
  324. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  325. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/NOTIFIER.md +0 -0
  326. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/OPENCODE_VERIFICATION.md +0 -0
  327. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/OPERATING_GOTCHAS.md +0 -0
  328. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/OPERATOR_GUIDES.md +0 -0
  329. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/ORACLE_LOOP.md +0 -0
  330. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/PHONE_WEBAPP.md +0 -0
  331. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/PIPELINE_V2.md +0 -0
  332. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/PLATFORM_EVOLUTION.md +0 -0
  333. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/SECOND_BACKEND.md +0 -0
  334. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/STORE_SERVICE.md +0 -0
  335. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  336. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/WEB_CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/WSL_WINDOWS_WORKER.md +0 -0
  338. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/mocks/web/README.md +0 -0
  339. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/mocks/web/_tokens.css +0 -0
  340. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/mocks/web/issue-detail.html +0 -0
  341. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/mocks/web/pipeline-narrow.html +0 -0
  342. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/docs/mocks/web/pipeline-wide.html +0 -0
  343. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/graphify-out/.gitignore +0 -0
  344. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/install-agent.sh +0 -0
  345. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/pyproject.toml +0 -0
  346. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/audit_review_verdict_overrides.py +0 -0
  347. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  348. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/build-worker-image.sh +0 -0
  349. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/coordinator-machine.py +0 -0
  350. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/epic-down.sh +0 -0
  351. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/epic-up.sh +0 -0
  352. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/preflight.sh +0 -0
  353. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/provision-worker.sh +0 -0
  354. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  355. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  356. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/azure-workers/verify-github-token.sh +0 -0
  357. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/check_gh_argv_containment.py +0 -0
  358. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/codegen.py +0 -0
  359. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-test-runner.sh +0 -0
  360. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  361. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  362. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  363. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  364. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/extract-coord-tui.sh +0 -0
  367. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/fleet_watchdog.py +0 -0
  368. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/gen_board_fixture.py +0 -0
  369. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/gen_mock_index.py +0 -0
  370. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/next_release_tag.py +0 -0
  371. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/run_tests_in_populated_home.sh +0 -0
  372. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/run_tests_without_gh.sh +0 -0
  373. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/smoke_437_interactive.py +0 -0
  374. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/verify_878_review_capture.py +0 -0
  375. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/verify_release_published.py +0 -0
  376. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/scripts/verify_release_wheel.py +0 -0
  377. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/setup.cfg +0 -0
  378. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/SMOKE_SET.md +0 -0
  379. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/__init__.py +0 -0
  380. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-37/conftest.py +0 -0
  381. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-37/contract.md +0 -0
  382. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-37/manifest.yml +0 -0
  383. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  384. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  385. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/contract.md +0 -0
  386. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  387. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  388. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/manifest.yml +0 -0
  389. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-51/tsconfig.json +0 -0
  391. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/backends.py +0 -0
  393. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/conftest.py +0 -0
  394. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/board-pipeline-basic.json +0 -0
  395. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  396. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  397. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  398. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  399. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/all_pass.json +0 -0
  400. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  401. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/mixed_fail.json +0 -0
  402. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  403. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  404. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/skip.json +0 -0
  405. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/playwright/truncated.json +0 -0
  406. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  407. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  408. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  409. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  410. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  411. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  412. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  413. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  414. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_acceptance.py +0 -0
  415. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_acceptance_drivers.py +0 -0
  416. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent.py +0 -0
  417. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_api_error.py +0 -0
  418. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_app.py +0 -0
  419. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_branch_base.py +0 -0
  420. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_branch_capture.py +0 -0
  421. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_config_free_1712.py +0 -0
  422. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_deploy_units_endpoint.py +0 -0
  423. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_dirty_worktree.py +0 -0
  424. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  425. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_graph_self_heal.py +0 -0
  426. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_health_h3.py +0 -0
  427. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_idle_restart.py +0 -0
  428. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_push_failure.py +0 -0
  429. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_reap.py +0 -0
  430. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_repos_and_pull.py +0 -0
  431. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_restart_services_endpoint.py +0 -0
  432. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_skills_self_heal.py +0 -0
  433. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_startup_diagnostics.py +0 -0
  434. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_update.py +0 -0
  435. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_update_bluegreen.py +0 -0
  436. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_usage_limit.py +0 -0
  437. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_agent_zero_commit.py +0 -0
  438. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ambient_home_isolation.py +0 -0
  439. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_approve_dependency_busy_2804.py +0 -0
  440. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_approve_reject_plan.py +0 -0
  441. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_approve_usage_gate.py +0 -0
  442. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_approved_work_2532.py +0 -0
  443. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_assignment_already_recorded_daemon.py +0 -0
  444. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_audit_log.py +0 -0
  445. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_audit_outcome.py +0 -0
  446. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_audit_query.py +0 -0
  447. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_auto_loop.py +0 -0
  448. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_auto_release_publish_2035.py +0 -0
  449. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_backend_selection.py +0 -0
  450. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_base_checkout_restore.py +0 -0
  451. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_block_log.py +0 -0
  452. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_cap_762.py +0 -0
  453. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_fixture.py +0 -0
  454. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_read_path.py +0 -0
  455. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_schema.py +0 -0
  456. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_service.py +0 -0
  457. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_state.py +0 -0
  458. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_board_wire.py +0 -0
  459. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_brain.py +0 -0
  460. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_branch_model.py +0 -0
  461. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_bug_intake.py +0 -0
  462. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_build_worker_image_env_update.py +0 -0
  463. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cargo_cache.py +0 -0
  464. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_check_gh_argv_containment.py +0 -0
  465. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ci_acceptance_gate_1950.py +0 -0
  466. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ci_fix.py +0 -0
  467. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ci_gitlab.py +0 -0
  468. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ci_parity_2091.py +0 -0
  469. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_ci_store.py +0 -0
  470. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_claim.py +0 -0
  471. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_claude_md_budget.py +0 -0
  472. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_acceptance.py +0 -0
  473. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_assign.py +0 -0
  474. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  475. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_assign_interactive_remote.py +0 -0
  476. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_assign_provider.py +0 -0
  477. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  478. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_audit.py +0 -0
  479. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_chat_continue.py +0 -0
  480. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_decide.py +0 -0
  481. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_capability_rules.py +0 -0
  482. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_config_provenance.py +0 -0
  483. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_forge_availability.py +0 -0
  484. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_graph.py +0 -0
  485. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_self.py +0 -0
  486. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_diagnose_test_coverage.py +0 -0
  487. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_doctor.py +0 -0
  488. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_doctor_config_free_1801.py +0 -0
  489. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  490. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_drive.py +0 -0
  491. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_escalate.py +0 -0
  492. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_fix_headless_review.py +0 -0
  493. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_gate_a.py +0 -0
  494. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_install_drift.py +0 -0
  495. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_install_skills.py +0 -0
  496. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_issue_comment.py +0 -0
  497. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_issue_create_label.py +0 -0
  498. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_issue_reopen.py +0 -0
  499. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_issue_view_list.py +0 -0
  500. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_pr.py +0 -0
  515. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  524. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_contested_tag.py +0 -0
  528. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_merge_queue.py +0 -0
  529. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_provider.py +0 -0
  530. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_review_finalizing.py +0 -0
  531. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_test_failed_tag.py +0 -0
  532. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_status_usage_limit.py +0 -0
  533. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_sync_comments_873.py +0 -0
  534. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_test_plan.py +0 -0
  535. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_track.py +0 -0
  536. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_tui_update.py +0 -0
  537. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cli_wait.py +0 -0
  538. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_client_base_install.py +0 -0
  539. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_client_resource_migration_1946.py +0 -0
  540. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_commands_common.py +0 -0
  541. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_comments.py +0 -0
  542. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_completion_summary.py +0 -0
  543. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config.py +0 -0
  544. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config_acceptance.py +0 -0
  545. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config_audit.py +0 -0
  546. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config_pricing.py +0 -0
  547. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  548. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_config_usage_gate.py +0 -0
  549. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_confirm_test.py +0 -0
  550. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_conflict_fix.py +0 -0
  551. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_conflict_fix_semantic.py +0 -0
  552. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  553. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test.py +0 -0
  554. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  555. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test_runner_baseline.py +0 -0
  556. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test_runner_populated_home.py +0 -0
  557. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test_runner_routing.py +0 -0
  558. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_test_runner_toolchain.py +0 -0
  559. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_uat.py +0 -0
  560. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coord_web_sse_restart_live.py +0 -0
  561. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_coordinator_machine.py +0 -0
  562. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_cross_platform_imports.py +0 -0
  563. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dao.py +0 -0
  564. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dashboard.py +0 -0
  565. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dashboard_fixture.py +0 -0
  566. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dashboard_terminal.py +0 -0
  567. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dashboard_terminal_live.py +0 -0
  568. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_db.py +0 -0
  569. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dead_end.py +0 -0
  570. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_decomposition_chat.py +0 -0
  571. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_coord_db_backup.py +0 -0
  572. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_coord_web_dist.py +0 -0
  573. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_coord_web_rollback.py +0 -0
  574. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_drive_queue_unit.py +0 -0
  575. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_failure_notify_unit.py +0 -0
  576. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_manifest.py +0 -0
  577. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_notify_unit.py +0 -0
  578. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_units_lane.py +0 -0
  579. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deploy_web_unit.py +0 -0
  580. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deprecation_telemetry.py +0 -0
  581. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_deps.py +0 -0
  582. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_diagnose.py +0 -0
  583. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dispatch.py +0 -0
  584. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dispatch_target_validation.py +0 -0
  585. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_dist_name.py +0 -0
  586. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_done_housekeeping.py +0 -0
  587. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive.py +0 -0
  588. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue_blocked_rendering.py +0 -0
  589. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue_launch_argv.py +0 -0
  590. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  591. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue_roll_pending.py +0 -0
  592. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  593. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_state.py +0 -0
  594. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_drive_tmux.py +0 -0
  595. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_epic_up_capability_detection.py +0 -0
  596. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  597. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_epic_up_image_provenance.py +0 -0
  598. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_errors.py +0 -0
  599. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_events.py +0 -0
  600. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_failure_class.py +0 -0
  601. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_filelock.py +0 -0
  602. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  603. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_fix_of_force_override.py +0 -0
  604. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_fleet_config_health.py +0 -0
  605. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_fleet_health_probes.py +0 -0
  606. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_fleet_health_snapshot.py +0 -0
  607. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_fleet_watchdog.py +0 -0
  608. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_forge_availability.py +0 -0
  609. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_freshness.py +0 -0
  610. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gate_a.py +0 -0
  611. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gate_b.py +0 -0
  612. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gate_snapshot_staleness.py +0 -0
  613. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gates.py +0 -0
  614. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  615. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_gen_mock_index.py +0 -0
  616. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_generated_rust_fixture.py +0 -0
  617. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_generated_rust_requests.py +0 -0
  618. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_generated_types_fixture.py +0 -0
  619. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_github_ops.py +0 -0
  620. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_github_throttle.py +0 -0
  621. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_goal.py +0 -0
  622. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_graph_health.py +0 -0
  623. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_graph_selfheal_absent_2237.py +0 -0
  624. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_handoff.py +0 -0
  625. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_checks.py +0 -0
  626. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_cli.py +0 -0
  627. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_cli_graph.py +0 -0
  628. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_config.py +0 -0
  629. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_context.py +0 -0
  630. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_coord_tui_ci_pin.py +0 -0
  631. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_coord_web_ci_pin.py +0 -0
  632. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_deploy_lane_facts.py +0 -0
  633. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_fix.py +0 -0
  634. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_incident_regression.py +0 -0
  635. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_issues_sync_staleness.py +0 -0
  636. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_pypi.py +0 -0
  637. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_registry.py +0 -0
  638. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_release_cordon_probe.py +0 -0
  639. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_timer_active.py +0 -0
  640. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_toolchain.py +0 -0
  641. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_unit_drift.py +0 -0
  642. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_health_unit_enablement.py +0 -0
  643. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_hooks.py +0 -0
  644. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_human_attended_437.py +0 -0
  645. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_init.py +0 -0
  646. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_install_agent_venv_2911.py +0 -0
  647. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_integration.py +0 -0
  648. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_briefing_echo.py +0 -0
  649. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_pane_log_2541.py +0 -0
  650. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_prefill_state.py +0 -0
  651. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_session_relaunch.py +0 -0
  652. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_test_verdict_backstop.py +0 -0
  653. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_token_attribution.py +0 -0
  654. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_interactive_worktree.py +0 -0
  655. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_issue_store_seam.py +0 -0
  656. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_issues_sync_status.py +0 -0
  657. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_liveness_auditor.py +0 -0
  658. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_liveness_notify.py +0 -0
  659. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_lock_contention_ratchet.py +0 -0
  660. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_machine_onboard.py +0 -0
  661. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_machine_pause.py +0 -0
  662. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_merge_queue.py +0 -0
  663. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_merge_verify.py +0 -0
  664. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_milestone_chat.py +0 -0
  665. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_milestone_dispatch.py +0 -0
  666. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_milestone_gate.py +0 -0
  667. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_milestone_order.py +0 -0
  668. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_milestone_seam.py +0 -0
  669. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_mock_author.py +0 -0
  670. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_model_tiering.py +0 -0
  671. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_models.py +0 -0
  672. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_models_config_labels.py +0 -0
  673. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_needs_attention.py +0 -0
  674. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_network.py +0 -0
  675. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_new_issue_chat.py +0 -0
  676. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_next_release_tag.py +0 -0
  677. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_node_shim.py +0 -0
  678. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_baseline.py +0 -0
  679. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_cli.py +0 -0
  680. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_collect.py +0 -0
  681. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_config.py +0 -0
  682. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_drive_seam.py +0 -0
  683. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_isolation.py +0 -0
  684. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_predicate.py +0 -0
  685. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notifier_service.py +0 -0
  687. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notify.py +0 -0
  688. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_notify_drain.py +0 -0
  689. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_openapi.py +0 -0
  690. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_operational_defaults.py +0 -0
  691. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_overlap_fence.py +0 -0
  692. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_overlap_predict.py +0 -0
  693. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_packaged_deploy_units.py +0 -0
  694. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_parentage.py +0 -0
  695. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_paste_landed.py +0 -0
  696. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  697. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_pipeline.py +0 -0
  698. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_plan_followup_approve_plan_command.py +0 -0
  699. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_plan_followup_pr_command.py +0 -0
  700. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_plan_followup_review_command.py +0 -0
  701. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_plan_only.py +0 -0
  702. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_plan_parser.py +0 -0
  703. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_platform_paths.py +0 -0
  704. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_portal_bridge.py +0 -0
  705. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_portal_config.py +0 -0
  706. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_portal_store.py +0 -0
  707. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_portal_sync.py +0 -0
  708. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_pr_body_lint.py +0 -0
  709. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_prereqs.py +0 -0
  710. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_production_db_guard.py +0 -0
  711. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_progress.py +0 -0
  712. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_provider_seam.py +0 -0
  713. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_providers.py +0 -0
  714. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_providers_config_labels.py +0 -0
  715. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_providers_pty.py +0 -0
  716. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_py_rust_mirror_inventory.py +0 -0
  717. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_quiet_hours.py +0 -0
  718. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_quiet_hours_store_2146.py +0 -0
  719. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reap_merged_sessions.py +0 -0
  720. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reap_stale_interactive_tick.py +0 -0
  721. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile.py +0 -0
  722. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_branch.py +0 -0
  723. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_completions.py +0 -0
  724. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  725. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_merges.py +0 -0
  726. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_no_agent_record.py +0 -0
  727. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_tick.py +0 -0
  728. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reconcile_usage_limit_done.py +0 -0
  729. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_refine_chat.py +0 -0
  730. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_cordon_2101.py +0 -0
  731. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  732. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_cordon_deadlock_2240.py +0 -0
  733. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_cordon_stuck_2490.py +0 -0
  734. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_propagate.py +0 -0
  735. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_propagate_threshold.py +0 -0
  736. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_roll_between_legs_2854.py +0 -0
  737. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_roll_window_handoff.py +0 -0
  738. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_unified_1242.py +0 -0
  739. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_verify.py +0 -0
  740. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_release_window.py +0 -0
  741. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_remote_auto_prune.py +0 -0
  742. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_remote_interactive_reaper.py +0 -0
  743. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_repo_add.py +0 -0
  744. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_repo_edit_2220.py +0 -0
  745. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_repo_graph_fleet_2237.py +0 -0
  746. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_repo_onboard_2220.py +0 -0
  747. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_report_result_push.py +0 -0
  748. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_reports.py +0 -0
  749. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_retry.py +0 -0
  750. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_retry_advisory_1606.py +0 -0
  751. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_retry_type_1636.py +0 -0
  752. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_revalidate.py +0 -0
  753. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review.py +0 -0
  754. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_end_review_without_verdict.py +0 -0
  755. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_parse_failure_diagnostic.py +0 -0
  756. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_reaffirm.py +0 -0
  757. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_state.py +0 -0
  758. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_verdict_backstop.py +0 -0
  759. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_verdict_override_audit.py +0 -0
  760. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_verdict_relay.py +0 -0
  761. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_review_zero_commits.py +0 -0
  762. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_scoped_review_wiring.py +0 -0
  763. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_scorecard.py +0 -0
  764. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_self_health.py +0 -0
  765. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_serve.py +0 -0
  766. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_serve_app_board_trim.py +0 -0
  767. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_serve_rest_routes.py +0 -0
  768. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_session.py +0 -0
  769. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_slice_issue_attribution.py +0 -0
  770. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_smoke.py +0 -0
  771. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_smoke_live_checkout_restore.py +0 -0
  772. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_smoke_workflow.py +0 -0
  773. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_spend_ceiling.py +0 -0
  774. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_spend_ceiling_coordinator.py +0 -0
  775. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_split.py +0 -0
  776. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_split_work.py +0 -0
  777. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_sql_dialect.py +0 -0
  778. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_sqlite_connect_ratchet.py +0 -0
  779. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stage_projection.py +0 -0
  780. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stale_busy_reviewer_697.py +0 -0
  781. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stalled_pipeline.py +0 -0
  782. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_state.py +0 -0
  783. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_state_review_findings_daemon.py +0 -0
  784. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_status_fleet_footer.py +0 -0
  785. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stop_1567.py +0 -0
  786. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_store_contract.py +0 -0
  787. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_store_migrate.py +0 -0
  788. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stuck.py +0 -0
  789. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  790. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_terminal_command.py +0 -0
  791. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_author.py +0 -0
  792. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_chat.py +0 -0
  793. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_orchestrator.py +0 -0
  794. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_report.py +0 -0
  795. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_verdict_parsing.py +0 -0
  796. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_test_verdict_transcript_floor.py +0 -0
  797. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_text_io_encoding_audit.py +0 -0
  798. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_thin_client_board_audit.py +0 -0
  799. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_thin_client_config_load_1080.py +0 -0
  800. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_thin_client_daemon_routing_906.py +0 -0
  801. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_tmux_host.py +0 -0
  802. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_tmux_session.py +0 -0
  803. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_transcript_floor.py +0 -0
  804. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_usage.py +0 -0
  805. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_usage_limits.py +0 -0
  806. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_usage_rollup.py +0 -0
  807. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_venv_live_install_2121.py +0 -0
  808. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_version_single_source.py +0 -0
  809. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_watch.py +0 -0
  810. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  811. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worker_env_venv_isolation.py +0 -0
  812. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worker_events.py +0 -0
  813. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worker_image_pin_sync.py +0 -0
  814. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worker_safety.py +0 -0
  815. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worker_test_scoping.py +0 -0
  816. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worktree.py +0 -0
  817. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  818. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/test_write_parity.py +0 -0
  819. {code_coordinator-0.5.310 → code_coordinator-0.5.311}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.310
3
+ Version: 0.5.311
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.310
3
+ Version: 0.5.311
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.311",
3
+ "distance": 0,
4
+ "node": "g8003167b7c6ac292c1b0e3a06e71cc4dd08761b2",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-31"
8
+ }
@@ -2302,12 +2302,20 @@ class UnreachableWait:
2302
2302
  evidence a genuine transient wouldn't have, and `last_reason` is
2303
2303
  whatever the last sweep to touch this row recorded — useful context,
2304
2304
  never re-interpreted here.
2305
+
2306
+ `dependents` (#2978) is the count of OTHER queue entries whose `after=`
2307
+ names this one — computed against the full entry set the caller passed
2308
+ to :func:`detect_unreachable_waits`, not just the flagged subset, so it
2309
+ is accurate even though those dependents themselves never appear in the
2310
+ result (see the predicate's own docstring for why). `0` for an entry
2311
+ nothing is chained behind.
2305
2312
  """
2306
2313
 
2307
2314
  key: str
2308
2315
  state: str
2309
2316
  deferrals: int
2310
2317
  last_reason: str
2318
+ dependents: int = 0
2311
2319
 
2312
2320
 
2313
2321
  def detect_unreachable_waits(
@@ -2317,35 +2325,73 @@ def detect_unreachable_waits(
2317
2325
  ) -> list[UnreachableWait]:
2318
2326
  """Entries sitting in the #2944 guaranteed-false wait.
2319
2327
 
2320
- ``state in (blocked, parked) AND attempts == 0 AND deferrals >
2321
- min_deferrals`` — see the module comment above this function for why
2322
- that combination can never resolve itself. Pure and cheap (a predicate
2323
- over already-loaded rows, no clock, no I/O), so the same function backs
2324
- both `coord drive-queue status`'s `alert:` line
2325
- (`coord.commands.drive_queue._queue_alert`) and the `coord doctor` WARN
2326
- (`coord.health.checks.wedged_drive_queue`) — one definition of "wedged",
2327
- not two that could drift apart.
2328
-
2329
- An entry with ``attempts > 0`` is excluded unconditionally, however long
2330
- it has sat: it WAS dispatched at least once, so it has (or had) a real
2331
- branch/PR/merge-queue row for a sweep to have a genuine opinion about —
2332
- that is a legitimate wait, not an unreachable one.
2328
+ Two independent shapes, either of which qualifies a `blocked`/`parked`
2329
+ entry — both provably have no branch/PR/merge-queue row for any sweep to
2330
+ ever form an opinion about, which is the actual invariant this predicate
2331
+ is checking, not "attempts == 0" as a proxy for it (#2978 found the proxy
2332
+ wrong for the second shape):
2333
+
2334
+ * ``attempts == 0`` and ``deferrals > min_deferrals`` — never dispatched
2335
+ at all. The original #2944 shape.
2336
+ * ``attempts > 0``, ``state == blocked``, and the entry's own
2337
+ `last_reason` carries #2273's "no assignment was ever created for this
2338
+ run" marker (:func:`_is_dispatch_failure_reason`) — every dispatch
2339
+ attempt died before `coord assign` produced a board-visible row, and
2340
+ the entry has now exhausted its retry budget (the only way to reach
2341
+ `blocked` with that reason: see `_reconcile_running`'s `exhausted`
2342
+ branch). Exhaustion is its own grace period — there is no next attempt
2343
+ left to wait out — so `min_deferrals` is not applied here.
2344
+
2345
+ A `blocked`/`parked` entry whose `last_reason` is instead one of
2346
+ `_resolve_prereqs`'s unsatisfiable-`after=` verdict shapes
2347
+ (:func:`_is_unsatisfiable_prereq_reason`) is excluded UNCONDITIONALLY,
2348
+ regardless of attempts/deferrals — #2978: that shape is
2349
+ :func:`_reconcile_blocked_after`'s to resolve (#2362, widened #2756),
2350
+ not an operator's, and flagging it here directly contradicts that
2351
+ function's own documented behaviour. This is what keeps a chain's
2352
+ dependents (each blocked with "pre-req X is queued but blocked — it will
2353
+ never satisfy") out of the result entirely, leaving only the root that
2354
+ actually needs a human.
2355
+
2356
+ Pure and cheap (a predicate over already-loaded rows, no clock, no I/O),
2357
+ so the same function backs both `coord drive-queue status`'s `alert:`
2358
+ line (`coord.commands.drive_queue._queue_alert`) and the `coord doctor`
2359
+ WARN (`coord.health.checks.wedged_drive_queue`) — one definition of
2360
+ "wedged", not two that could drift apart.
2333
2361
  """
2334
- return [
2335
- UnreachableWait(
2336
- key=e.key, state=e.state, deferrals=e.deferrals, last_reason=e.last_reason
2362
+ entries = list(entries)
2363
+ dependents_of: dict[str, int] = {}
2364
+ for e in entries:
2365
+ for dep in e.after:
2366
+ dependents_of[dep] = dependents_of.get(dep, 0) + 1
2367
+
2368
+ waits: list[UnreachableWait] = []
2369
+ for e in entries:
2370
+ if e.state not in (STATE_BLOCKED, STATE_PARKED):
2371
+ continue
2372
+ if _is_unsatisfiable_prereq_reason(e.last_reason):
2373
+ continue
2374
+ if e.attempts == 0:
2375
+ if e.deferrals <= min_deferrals:
2376
+ continue
2377
+ elif not (e.state == STATE_BLOCKED and _is_dispatch_failure_reason(e.last_reason)):
2378
+ continue
2379
+ waits.append(
2380
+ UnreachableWait(
2381
+ key=e.key,
2382
+ state=e.state,
2383
+ deferrals=e.deferrals,
2384
+ last_reason=e.last_reason,
2385
+ dependents=dependents_of.get(e.key, 0),
2386
+ )
2337
2387
  )
2338
- for e in entries
2339
- if e.state in (STATE_BLOCKED, STATE_PARKED)
2340
- and e.attempts == 0
2341
- and e.deferrals > min_deferrals
2342
- ]
2388
+ return waits
2343
2389
 
2344
2390
 
2345
2391
  def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
2346
2392
  """The queue-level record #2944's predicate raises, in :func:`_hold_alert`'s
2347
- shape — a message naming the entry (or entries), the deferral count that
2348
- is the evidence, and the ONE remedy that actually clears it.
2393
+ shape — a message naming the entry (or entries), the evidence that
2394
+ qualified it, and the ONE remedy that actually clears it.
2349
2395
 
2350
2396
  ``add`` alone does not clear ``blocked`` (the queue list already
2351
2397
  documents this as a footgun elsewhere) — only ``remove`` then ``add``
@@ -2357,29 +2403,52 @@ def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
2357
2403
  ``gate_readings``/``details`` lines are printed) so the remedy is visible
2358
2404
  wherever this alert's ``reason`` is, not just to a caller that also reads
2359
2405
  the structured field.
2406
+
2407
+ #2978: each name also carries its `dependents` count when non-zero — the
2408
+ entries chained behind a flagged root never appear in `waits` (see
2409
+ `detect_unreachable_waits`), so without this an operator has no way to
2410
+ know a fix to the one row named here will also resolve N others they
2411
+ never see mentioned. Explicitly says those dependents need no remedy of
2412
+ their own, since #2944's original wording ("for each entry named above")
2413
+ read, on a real incident, as an instruction to `remove`+`add` entries
2414
+ that were never named — but easy to mis-generalize to "the dependents
2415
+ too" by an operator who does not already know #2756 self-heals them.
2360
2416
  """
2361
- names = ", ".join(
2362
- f"{w.key} ({w.state}, {w.deferrals} deferrals)" for w in waits[:5]
2363
- )
2417
+ def _name(w: UnreachableWait) -> str:
2418
+ base = f"{w.key} ({w.state}, {w.deferrals} deferrals)"
2419
+ if w.dependents:
2420
+ plural = "ies" if w.dependents != 1 else "y"
2421
+ base += (
2422
+ f" — {w.dependents} dependent entr{plural} chained behind it "
2423
+ "will self-heal automatically once this clears (#2756), no "
2424
+ "remedy needed on them"
2425
+ )
2426
+ return base
2427
+
2428
+ names = ", ".join(_name(w) for w in waits[:5])
2364
2429
  more = ", ..." if len(waits) > 5 else ""
2365
2430
  plural = len(waits) != 1
2366
2431
  return QueueAlert(
2367
2432
  reason=(
2368
2433
  f"{len(waits)} queue entr{'ies' if plural else 'y'} stuck in a "
2369
- "guaranteed-false wait — never dispatched (attempts=0) yet "
2370
- f"blocked/parked past {UNREACHABLE_WAIT_MIN_DEFERRALS} deferrals; "
2434
+ "guaranteed-false wait — blocked/parked with no branch/PR/"
2435
+ "merge-queue row any sweep could ever act on (never dispatched, "
2436
+ "or every dispatch attempt died before creating an assignment); "
2371
2437
  f"no sweep can ever clear this on its own: {names}{more}. Fix: "
2372
2438
  "coord drive-queue remove <repo> <issue> && "
2373
- "coord drive-queue add <repo> <issue> for each entry named above."
2439
+ "coord drive-queue add <repo> <issue> for each ROOT entry named "
2440
+ "above — never on a dependent chained behind one."
2374
2441
  ),
2375
2442
  details=tuple(
2376
2443
  f"{w.key}: {w.state}, {w.deferrals} deferrals, "
2377
- f"last_reason={w.last_reason!r}"
2444
+ f"dependents={w.dependents}, last_reason={w.last_reason!r}"
2378
2445
  for w in waits
2379
2446
  ),
2380
2447
  command=(
2381
2448
  "coord drive-queue remove <repo> <issue> && "
2382
- "coord drive-queue add <repo> <issue> — for each entry named above"
2449
+ "coord drive-queue add <repo> <issue> — for each ROOT entry "
2450
+ "named above; any dependents chained behind it self-heal on "
2451
+ "their own (#2756)"
2383
2452
  ),
2384
2453
  )
2385
2454
 
@@ -19,6 +19,15 @@ so this check and that line can never say different things) — this probe
19
19
  just re-derives it, live, from ``drive_queue`` state every time ``coord
20
20
  doctor`` runs, independent of whatever the last tick happened to report.
21
21
 
22
+ #2978: the predicate also flags an ``attempts > 0`` entry that exhausted its
23
+ retry budget without ever getting a #2273 dispatch-layer death past `coord
24
+ assign` (same "no branch/PR ever existed" invariant, just reached a
25
+ different way) — and excludes an entry blocked solely on an unsatisfiable
26
+ ``after=`` pre-req, since that one is ``_reconcile_blocked_after``'s to
27
+ self-heal (#2362/#2756), not an operator's. See
28
+ ``coord.drive_queue.detect_unreachable_waits`` for the exact predicate; this
29
+ probe does not duplicate it, only renders its result.
30
+
22
31
  This is deliberately independent of #2935 (which fixes the specific sweep
23
32
  that produced the #2900/#2907 incident) and #2230 (the sweep's origin): both
24
33
  are about *why* a row gets wedged this way; this check is about the row
@@ -51,16 +60,19 @@ from coord.health.registry import COST_NETWORK, check
51
60
  cost=COST_NETWORK,
52
61
  description=(
53
62
  "Drive-queue rows in `coord.drive_queue`'s #2944 guaranteed-false "
54
- "wait: `blocked`/`parked`, `attempts == 0` (never dispatched — no "
55
- "branch, no PR, no merge-queue row ever existed or ever can), "
56
- "sitting past a few ticks of grace. Reads via `coord.state."
57
- "list_drive_queue`, which — per its own docstring — routes to the "
58
- "daemon over HTTP when `board_service` is set (the common case on a "
59
- "thin-client fleet machine, see `release_cordon.py`) and only reads "
60
- "the local DB directly otherwise; `cost=network` so `--no-network`/"
61
- "timer runs and the automatic per-agent health poll skip it exactly "
62
- "like the other network-costed checks, same precedent as "
63
- "`release_cordon`."
63
+ "wait: `blocked`/`parked` with no branch/PR/merge-queue row any "
64
+ "sweep could ever act on — either `attempts == 0` (never dispatched) "
65
+ "past a few ticks of grace, or `attempts > 0` with an exhausted "
66
+ "#2273 dispatch-layer death (#2978). Excludes an entry blocked "
67
+ "solely on an unsatisfiable `after=` pre-req — that one is "
68
+ "`_reconcile_blocked_after`'s to self-heal (#2756), not an "
69
+ "operator's. Reads via `coord.state.list_drive_queue`, which — per "
70
+ "its own docstring — routes to the daemon over HTTP when "
71
+ "`board_service` is set (the common case on a thin-client fleet "
72
+ "machine, see `release_cordon.py`) and only reads the local DB "
73
+ "directly otherwise; `cost=network` so `--no-network`/timer runs "
74
+ "and the automatic per-agent health poll skip it exactly like the "
75
+ "other network-costed checks, same precedent as `release_cordon`."
64
76
  ),
65
77
  )
66
78
  def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
@@ -92,7 +104,10 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
92
104
  )
93
105
 
94
106
  sample = ", ".join(
95
- f"{w.key} ({w.state}, {w.deferrals} deferrals)" for w in waits[:5]
107
+ f"{w.key} ({w.state}, {w.deferrals} deferrals"
108
+ + (f", {w.dependents} dependents self-heal (#2756)" if w.dependents else "")
109
+ + ")"
110
+ for w in waits[:5]
96
111
  )
97
112
  return CheckResult(
98
113
  check_id="wedged_drive_queue",
@@ -104,11 +119,17 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
104
119
  ),
105
120
  detail=(
106
121
  f"e.g. {sample}" + (", ..." if len(waits) > 5 else "")
107
- + " — never dispatched (attempts=0), cannot clear on its own; "
108
- "fix: coord drive-queue remove <repo> <issue> && "
109
- "coord drive-queue add <repo> <issue>"
122
+ + " — no branch/PR/merge-queue row any sweep could ever act on "
123
+ "(never dispatched, or every dispatch attempt died before "
124
+ "creating an assignment); cannot clear on its own. fix (root "
125
+ "only — any dependents self-heal, #2756): coord drive-queue "
126
+ "remove <repo> <issue> && coord drive-queue add <repo> <issue>"
127
+ ),
128
+ threshold=(
129
+ "warn when any entry is blocked/parked with no branch/PR a sweep "
130
+ "could ever act on: attempts=0 past a few ticks of grace, or "
131
+ "attempts>0 with an exhausted #2273 dispatch-layer death"
110
132
  ),
111
- threshold="warn when any entry is blocked/parked, attempts=0, past a few ticks of grace",
112
133
  values={
113
134
  "count": len(waits),
114
135
  "entries": [
@@ -116,6 +137,7 @@ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
116
137
  "key": w.key,
117
138
  "state": w.state,
118
139
  "deferrals": w.deferrals,
140
+ "dependents": w.dependents,
119
141
  "last_reason": w.last_reason,
120
142
  }
121
143
  for w in waits
@@ -3690,6 +3690,49 @@ def test_status_alert_does_not_trip_for_a_real_merge_gate_wait(cli):
3690
3690
  assert "alert: (none)" in result.output
3691
3691
 
3692
3692
 
3693
+ # ── #2978: a wedged root with dependents chained behind it — the alert must
3694
+ # name the root only, not the dependents, and the fix is remove+add on the
3695
+ # root alone. This is the exact claude-coordinator#2978 ms-5 incident: an
3696
+ # `attempts > 0` root that exhausted its budget on #2273 dispatch-layer
3697
+ # deaths (never got as far as creating an assignment), with eight dependents
3698
+ # blocked behind it on an unsatisfiable `after=` — a shape #2756's
3699
+ # `_reconcile_blocked_after` self-heals on its own the moment the root
3700
+ # clears, so it must never be named here either.
3701
+
3702
+
3703
+ def test_status_alert_names_the_root_only_not_the_chained_dependents(cli):
3704
+ cli("add", REPO, "161")
3705
+ state._update_drive_queue_entry_local(
3706
+ REPO, 161, state="blocked", attempts=2, deferrals=1,
3707
+ last_reason=(
3708
+ "drive session died without landing the work (2/2 attempts) — "
3709
+ "giving up — no assignment was ever created for this run "
3710
+ "(#2273): likely an infrastructure/dispatch-layer failure, not "
3711
+ "a code defect"
3712
+ ),
3713
+ )
3714
+ root_key = f"{REPO}#161"
3715
+ for issue in range(162, 170):
3716
+ cli("add", REPO, str(issue), "--after", "161")
3717
+ state._update_drive_queue_entry_local(
3718
+ REPO, issue, state="blocked", attempts=0, deferrals=40,
3719
+ last_reason=(
3720
+ f"pre-req {root_key} is queued but blocked — it will never "
3721
+ "satisfy"
3722
+ ),
3723
+ )
3724
+
3725
+ result = cli("status")
3726
+ assert result.exit_code == 0, result.output
3727
+ assert "alert: (none)" not in result.output
3728
+ assert root_key in result.output
3729
+ for issue in range(162, 170):
3730
+ assert f"{REPO}#{issue}" not in result.output
3731
+ assert "coord drive-queue remove" in result.output
3732
+ assert "coord drive-queue add" in result.output
3733
+ assert "self-heal" in result.output
3734
+
3735
+
3693
3736
  # ── deploy gates (#1757) ─────────────────────────────────────────────────────
3694
3737
  #
3695
3738
  # The acceptance bar for `--hold-after`. `merged != live`: a queue that
@@ -5371,3 +5371,100 @@ def test_unreachable_wait_alert_names_the_entry_deferrals_and_remedy():
5371
5371
  assert "207 deferrals" in alert.reason
5372
5372
  assert "coord drive-queue remove" in alert.command
5373
5373
  assert "coord drive-queue add" in alert.command
5374
+
5375
+
5376
+ # ── #2978: root-only, and the #2273-exhausted root is no longer excluded ────
5377
+ #
5378
+ # #2944's alert got today's ms-5 incident exactly backwards: it named eight
5379
+ # dependents that needed nothing (each blocked on an unsatisfiable `after=`
5380
+ # pre-req — #2756's to self-heal) and omitted the one entry — the root,
5381
+ # `attempts > 0` — that actually needed an operator. These tests pin both
5382
+ # halves of the fix plus the exact incident shape as a regression.
5383
+
5384
+ _DISPATCH_FAILURE_REASON = (
5385
+ "drive session died without landing the work (2/2 attempts) — giving up "
5386
+ "— no assignment was ever created for this run (#2273): likely an "
5387
+ "infrastructure/dispatch-layer failure, not a code defect"
5388
+ )
5389
+
5390
+
5391
+ def test_detect_unreachable_waits_excludes_an_unsatisfiable_after_block():
5392
+ """#2756 owns this shape (`_reconcile_blocked_after` self-heals it the
5393
+ moment the named pre-req clears) — it must never also be a #2944
5394
+ target, no matter how many deferrals it has accumulated."""
5395
+ dep_key = entry_key(REPO, 161)
5396
+ dependent = entry(
5397
+ 162,
5398
+ state=STATE_BLOCKED,
5399
+ attempts=0,
5400
+ deferrals=40,
5401
+ after=(dep_key,),
5402
+ last_reason=f"pre-req {dep_key} is queued but blocked — it will never satisfy",
5403
+ )
5404
+ assert detect_unreachable_waits([dependent]) == []
5405
+
5406
+
5407
+ def test_detect_unreachable_waits_flags_an_exhausted_dispatch_layer_root():
5408
+ """#2978: an entry that exhausted its attempts without #2273's dispatch
5409
+ layer ever producing a board-visible assignment IS the #2944 shape —
5410
+ `attempts > 0` alone must no longer exclude it."""
5411
+ root = entry(
5412
+ 161,
5413
+ state=STATE_BLOCKED,
5414
+ attempts=2,
5415
+ deferrals=1,
5416
+ last_reason=_DISPATCH_FAILURE_REASON,
5417
+ )
5418
+ waits = detect_unreachable_waits([root])
5419
+ assert [w.key for w in waits] == [entry_key(REPO, 161)]
5420
+
5421
+
5422
+ def test_detect_unreachable_waits_still_ignores_a_real_dispatched_attempt():
5423
+ """An ordinary `blocked` entry with `attempts > 0` and a last_reason that
5424
+ does NOT carry #2273's dispatch-failure marker is still excluded — it
5425
+ was dispatched, has (or had) a real branch/PR, and is a legitimate wait,
5426
+ not an unreachable one."""
5427
+ real_attempt = entry(
5428
+ 4, state=STATE_BLOCKED, attempts=1, deferrals=500, last_reason="CI red"
5429
+ )
5430
+ assert detect_unreachable_waits([real_attempt]) == []
5431
+
5432
+
5433
+ def test_detect_unreachable_waits_reproduces_the_ms5_incident_shape():
5434
+ """The exact claude-coordinator#2978 incident: one root `blocked
5435
+ attempts=2` with a #2273 dispatch-layer death, and eight dependents
5436
+ chained behind it via `after=`, each blocked with the frozen
5437
+ unsatisfiable-pre-req caption. The alert must name the root only — none
5438
+ of the eight dependents, and the root's `dependents` count must be 8 so
5439
+ the rendered alert can tell the operator they self-heal."""
5440
+ root_key = entry_key(REPO, 161)
5441
+ root = entry(
5442
+ 161,
5443
+ state=STATE_BLOCKED,
5444
+ attempts=2,
5445
+ deferrals=1,
5446
+ last_reason=_DISPATCH_FAILURE_REASON,
5447
+ )
5448
+ dependents = [
5449
+ entry(
5450
+ issue,
5451
+ state=STATE_BLOCKED,
5452
+ attempts=0,
5453
+ deferrals=40,
5454
+ after=(root_key,),
5455
+ last_reason=f"pre-req {root_key} is queued but blocked — it will never satisfy",
5456
+ )
5457
+ for issue in range(162, 170)
5458
+ ]
5459
+ assert len(dependents) == 8
5460
+
5461
+ waits = detect_unreachable_waits([root, *dependents])
5462
+ assert [w.key for w in waits] == [root_key]
5463
+ assert waits[0].dependents == 8
5464
+
5465
+ alert = unreachable_wait_alert(waits)
5466
+ assert root_key in alert.reason
5467
+ for dep in dependents:
5468
+ assert dep.key not in alert.reason
5469
+ assert "8 dependent entries" in alert.reason
5470
+ assert "self-heal" in alert.reason
@@ -98,6 +98,55 @@ def test_ok_when_blocked_with_real_attempts_spent(monkeypatch) -> None:
98
98
  assert result.severity == Severity.OK
99
99
 
100
100
 
101
+ _DISPATCH_FAILURE_REASON = (
102
+ "drive session died without landing the work (2/2 attempts) — giving up "
103
+ "— no assignment was ever created for this run (#2273): likely an "
104
+ "infrastructure/dispatch-layer failure, not a code defect"
105
+ )
106
+
107
+
108
+ def test_warn_for_an_exhausted_dispatch_layer_root_despite_attempts_spent(
109
+ monkeypatch,
110
+ ) -> None:
111
+ """#2978: `attempts > 0` no longer buys an unconditional pass — an entry
112
+ that exhausted its retry budget without #2273's dispatch layer ever
113
+ producing an assignment has the identical "no branch/PR for a sweep to
114
+ act on" shape as the original attempts=0 case."""
115
+ monkeypatch.setattr(
116
+ "coord.state.list_drive_queue",
117
+ lambda: [
118
+ _row(161, state="blocked", attempts=2, deferrals=1, last_reason=_DISPATCH_FAILURE_REASON)
119
+ ],
120
+ )
121
+ result = probe_wedged_drive_queue(_health_ctx())
122
+ assert result.severity == Severity.WARN
123
+ assert "claude-coordinator#161" in result.detail
124
+
125
+
126
+ def test_ok_for_a_dependent_blocked_on_an_unsatisfiable_after_prereq(
127
+ monkeypatch,
128
+ ) -> None:
129
+ """#2978: a dependent chained behind a blocked root — `_reconcile_
130
+ blocked_after`'s to self-heal (#2756) — must never warn here, no matter
131
+ how many deferrals it has piled up."""
132
+ root_key = "claude-coordinator#161"
133
+ monkeypatch.setattr(
134
+ "coord.state.list_drive_queue",
135
+ lambda: [
136
+ _row(
137
+ 162,
138
+ state="blocked",
139
+ attempts=0,
140
+ deferrals=40,
141
+ after_json=f'["{root_key}"]',
142
+ last_reason=f"pre-req {root_key} is queued but blocked — it will never satisfy",
143
+ )
144
+ ],
145
+ )
146
+ result = probe_wedged_drive_queue(_health_ctx())
147
+ assert result.severity == Severity.OK
148
+
149
+
101
150
  def test_unknown_when_the_queue_read_raises(monkeypatch) -> None:
102
151
  def _boom():
103
152
  raise RuntimeError("db is locked")
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.5.310",
3
- "distance": 0,
4
- "node": "ga706a8d9e5cc804e73c38968328d2a67cd807eca",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-30"
8
- }