code-coordinator 0.5.301__tar.gz → 0.5.303__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 (863) hide show
  1. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/drive_queue.py +33 -1
  7. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/drive_queue.py +123 -0
  8. code_coordinator-0.5.303/coord/health/checks/wedged_drive_queue.py +124 -0
  9. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/prereqs.py +123 -0
  10. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_drive_queue.py +77 -0
  11. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue.py +82 -1
  12. code_coordinator-0.5.303/tests/test_health_wedged_drive_queue.py +108 -0
  13. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_prereqs.py +165 -0
  14. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/.gitignore +0 -0
  27. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/GOAL.md +0 -0
  29. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/LICENSE +0 -0
  30. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/README.md +0 -0
  32. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/client.py +0 -0
  64. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/machine.py +0 -0
  78. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/pr.py +0 -0
  84. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/store_migrate.py +0 -0
  93. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/config.py +0 -0
  98. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/db.py +0 -0
  108. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dead_end.py +0 -0
  109. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/decomposition_chat.py +0 -0
  110. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/README.md +0 -0
  111. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-agent.service +0 -0
  112. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-db-backup.service +0 -0
  113. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-db-backup.sh +0 -0
  114. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-db-backup.timer +0 -0
  115. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-drive-queue.service +0 -0
  116. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-drive-queue.timer +0 -0
  117. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-failure-notify.service +0 -0
  118. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-fleet-watchdog.service +0 -0
  119. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  120. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-notify.service +0 -0
  121. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-notify.timer +0 -0
  122. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-release-propagate.service +0 -0
  123. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-release-propagate.timer +0 -0
  124. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-release-window.service +0 -0
  125. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-release-window.timer +0 -0
  126. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-serve.service +0 -0
  127. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-web-dist-build.service +0 -0
  128. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-web-dist-build.timer +0 -0
  129. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy/coord-web.service +0 -0
  130. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy_manifest.py +0 -0
  131. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deploy_units.py +0 -0
  132. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deprecation_telemetry.py +0 -0
  133. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/deps.py +0 -0
  134. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/diagnose.py +0 -0
  135. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dispatch.py +0 -0
  136. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/dist_name.py +0 -0
  137. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/drive.py +0 -0
  138. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/drive_state.py +0 -0
  139. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/events.py +0 -0
  140. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/failure_class.py +0 -0
  141. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/filelock.py +0 -0
  142. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/fleet_config_health.py +0 -0
  143. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/forge_availability.py +0 -0
  144. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/freshness.py +0 -0
  145. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/gate_a.py +0 -0
  146. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/gate_b.py +0 -0
  147. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/gate_snapshot.py +0 -0
  148. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/gates.py +0 -0
  149. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/github_ops.py +0 -0
  150. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/github_throttle.py +0 -0
  151. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/goal.py +0 -0
  152. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/graph_health.py +0 -0
  153. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/__init__.py +0 -0
  154. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/aggregate.py +0 -0
  155. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/__init__.py +0 -0
  156. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/_ci_pin.py +0 -0
  157. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  161. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/coord_web_ci_pin.py +0 -0
  162. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/deploy_lane_facts.py +0 -0
  163. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/disk.py +0 -0
  164. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/fleet_board.py +0 -0
  165. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  166. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/fleet_phantom.py +0 -0
  167. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/fleet_unit_drift.py +0 -0
  168. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/graph.py +0 -0
  169. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/graphify_cli.py +0 -0
  170. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/index_lock.py +0 -0
  171. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/issues_sync_staleness.py +0 -0
  172. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/plan_usage.py +0 -0
  173. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/release_cordon.py +0 -0
  174. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/stalled_pipeline.py +0 -0
  177. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/timer_active.py +0 -0
  178. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/toolchain.py +0 -0
  179. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/unit_drift.py +0 -0
  180. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/unit_enablement.py +0 -0
  181. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/checks/worktrees.py +0 -0
  182. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/cli.py +0 -0
  183. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/context.py +0 -0
  184. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/fleet_snapshot.py +0 -0
  185. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/models.py +0 -0
  186. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/pypi.py +0 -0
  187. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/registry.py +0 -0
  188. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/render.py +0 -0
  189. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/health/units.py +0 -0
  190. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/hooks.py +0 -0
  191. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/housekeeping.py +0 -0
  192. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/interactive.py +0 -0
  193. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/issue_store.py +0 -0
  194. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/issues_sync_status.py +0 -0
  195. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/liveness_auditor.py +0 -0
  196. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/machine_onboard.py +0 -0
  197. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/machine_pause.py +0 -0
  198. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/merge_queue.py +0 -0
  199. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/milestone_chat.py +0 -0
  200. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/milestone_dispatch.py +0 -0
  201. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/milestone_gate.py +0 -0
  202. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/milestone_order.py +0 -0
  203. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/mock_author.py +0 -0
  204. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/models.py +0 -0
  205. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/network.py +0 -0
  206. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/new_issue_chat.py +0 -0
  207. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/__init__.py +0 -0
  208. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/baseline.py +0 -0
  209. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/cli.py +0 -0
  210. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/collect.py +0 -0
  211. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/digest.py +0 -0
  212. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/models.py +0 -0
  213. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/predicate.py +0 -0
  214. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/service.py +0 -0
  215. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/store.py +0 -0
  216. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notifier/transport.py +0 -0
  217. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/notify.py +0 -0
  218. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/openapi.py +0 -0
  219. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/overlap_fence.py +0 -0
  220. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/overlap_predict.py +0 -0
  221. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/parentage.py +0 -0
  222. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/parentage_github.py +0 -0
  223. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/pipeline.py +0 -0
  224. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/plan_parser.py +0 -0
  225. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/plans.py +0 -0
  226. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/platform_paths.py +0 -0
  227. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/portal_bridge.py +0 -0
  228. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/portal_store.py +0 -0
  229. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/portal_sync.py +0 -0
  230. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/pr_body_lint.py +0 -0
  231. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/reconcile.py +0 -0
  239. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/reconcile_tick.py +0 -0
  240. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/refine_chat.py +0 -0
  241. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/release_cordon.py +0 -0
  242. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/release_propagate.py +0 -0
  243. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/release_verify.py +0 -0
  244. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/release_window.py +0 -0
  245. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/repo_edit.py +0 -0
  246. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/repo_onboard.py +0 -0
  247. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/reports.py +0 -0
  248. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/rest_schema.py +0 -0
  249. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/revalidate.py +0 -0
  250. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/review.py +0 -0
  251. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/scorecard.py +0 -0
  252. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/self_health.py +0 -0
  253. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/serve_app.py +0 -0
  254. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  255. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  256. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  257. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/portal-followup/SKILL.md +0 -0
  260. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/release-now/SKILL.md +0 -0
  261. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  262. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  263. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/skills/update-issue/SKILL.md +0 -0
  264. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/smoke.py +0 -0
  265. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/spend_ceiling.py +0 -0
  266. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/split_work.py +0 -0
  267. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/sql.py +0 -0
  268. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/stage_projection.py +0 -0
  269. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/state.py +0 -0
  270. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/store_migrate.py +0 -0
  271. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/test_author.py +0 -0
  272. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/test_chat.py +0 -0
  273. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/test_orchestrator.py +0 -0
  274. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/test_report.py +0 -0
  275. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/tui_release.py +0 -0
  276. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/usage.py +0 -0
  277. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/usage_limits.py +0 -0
  278. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/usage_rollup.py +0 -0
  279. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coord/worker_events.py +0 -0
  280. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/coordinator.example.yml +0 -0
  281. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-agent.service +0 -0
  282. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-db-backup.service +0 -0
  283. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-db-backup.sh +0 -0
  284. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-db-backup.timer +0 -0
  285. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-drive-queue.service +0 -0
  286. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-drive-queue.timer +0 -0
  287. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-failure-notify.service +0 -0
  288. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-failure-notify.sh +0 -0
  289. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-fleet-watchdog.service +0 -0
  290. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-fleet-watchdog.timer +0 -0
  291. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-notify.service +0 -0
  292. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-notify.timer +0 -0
  293. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-release-propagate.service +0 -0
  294. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-release-propagate.timer +0 -0
  295. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-release-window.service +0 -0
  296. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-release-window.timer +0 -0
  297. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-serve.service +0 -0
  298. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-web-dist-build.service +0 -0
  299. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-web-dist-build.sh +0 -0
  300. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-web-dist-build.timer +0 -0
  301. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-web-rollback.sh +0 -0
  302. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/coord-web.service +0 -0
  303. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/deploy/node-shim.sh +0 -0
  304. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ADR_COORD_TUI_CI.md +0 -0
  305. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  306. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ADR_COORD_WEB_CI.md +0 -0
  307. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ADR_COORD_WEB_DIST.md +0 -0
  308. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  309. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/AGENT_OPERATIONS.md +0 -0
  310. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ARCHITECTURE.md +0 -0
  311. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ARCH_SECURITY_GATES.md +0 -0
  312. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/COCKPIT.md +0 -0
  313. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/CONTROL_CENTER.md +0 -0
  314. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/COST_DISCIPLINE.md +0 -0
  315. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/CROSS_PLATFORM.md +0 -0
  316. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/CUSTOMER_FACING_APPS.md +0 -0
  317. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/CUSTOMER_PORTAL.md +0 -0
  318. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/DRIVE_QUEUE.md +0 -0
  319. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/EPHEMERAL_WORKERS.md +0 -0
  320. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/FORGE_MIGRATION.md +0 -0
  321. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/GRAPHIFY_SETUP.md +0 -0
  322. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ISSUE_GUIDANCE.md +0 -0
  323. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/MAC_MINI.md +0 -0
  324. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  325. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/NOTIFIER.md +0 -0
  326. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/OPENCODE_VERIFICATION.md +0 -0
  327. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/OPERATING_GOTCHAS.md +0 -0
  328. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/OPERATOR_GUIDES.md +0 -0
  329. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/ORACLE_LOOP.md +0 -0
  330. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/PHONE_WEBAPP.md +0 -0
  331. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/PIPELINE_V2.md +0 -0
  332. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/PLATFORM_EVOLUTION.md +0 -0
  333. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/SECOND_BACKEND.md +0 -0
  334. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/STORE_SERVICE.md +0 -0
  335. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  336. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/WEB_CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/WSL_WINDOWS_WORKER.md +0 -0
  338. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/mocks/web/README.md +0 -0
  339. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/mocks/web/_tokens.css +0 -0
  340. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/mocks/web/issue-detail.html +0 -0
  341. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/mocks/web/pipeline-narrow.html +0 -0
  342. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/docs/mocks/web/pipeline-wide.html +0 -0
  343. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/graphify-out/.gitignore +0 -0
  344. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/install-agent.sh +0 -0
  345. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/pyproject.toml +0 -0
  346. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/audit_review_verdict_overrides.py +0 -0
  347. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  348. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/build-worker-image.sh +0 -0
  349. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/coordinator-machine.py +0 -0
  350. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/epic-down.sh +0 -0
  351. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/epic-up.sh +0 -0
  352. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/preflight.sh +0 -0
  353. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/provision-worker.sh +0 -0
  354. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  355. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  356. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/azure-workers/verify-github-token.sh +0 -0
  357. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/check_gh_argv_containment.py +0 -0
  358. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/codegen.py +0 -0
  359. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-test-runner.sh +0 -0
  360. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  361. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  362. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  363. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  364. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/extract-coord-tui.sh +0 -0
  367. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/fleet_watchdog.py +0 -0
  368. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/gen_board_fixture.py +0 -0
  369. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/gen_mock_index.py +0 -0
  370. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/next_release_tag.py +0 -0
  371. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/run_tests_in_populated_home.sh +0 -0
  372. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/run_tests_without_gh.sh +0 -0
  373. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/smoke_437_interactive.py +0 -0
  374. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/verify_878_review_capture.py +0 -0
  375. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/verify_release_published.py +0 -0
  376. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/scripts/verify_release_wheel.py +0 -0
  377. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/setup.cfg +0 -0
  378. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/SMOKE_SET.md +0 -0
  379. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/__init__.py +0 -0
  380. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-37/conftest.py +0 -0
  381. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-37/contract.md +0 -0
  382. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-37/manifest.yml +0 -0
  383. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  384. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  385. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/contract.md +0 -0
  386. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  387. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  388. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/manifest.yml +0 -0
  389. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-51/tsconfig.json +0 -0
  391. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/backends.py +0 -0
  393. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/conftest.py +0 -0
  394. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/board-pipeline-basic.json +0 -0
  395. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  396. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  397. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  398. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  399. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/all_pass.json +0 -0
  400. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  401. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/mixed_fail.json +0 -0
  402. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  403. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  404. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/skip.json +0 -0
  405. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/playwright/truncated.json +0 -0
  406. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  407. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  408. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  409. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  410. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  411. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  412. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  413. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  414. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_acceptance.py +0 -0
  415. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_acceptance_drivers.py +0 -0
  416. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent.py +0 -0
  417. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_api_error.py +0 -0
  418. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_app.py +0 -0
  419. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_branch_base.py +0 -0
  420. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_branch_capture.py +0 -0
  421. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_config_free_1712.py +0 -0
  422. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_deploy_units_endpoint.py +0 -0
  423. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_dirty_worktree.py +0 -0
  424. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  425. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_graph_self_heal.py +0 -0
  426. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_health_h3.py +0 -0
  427. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_idle_restart.py +0 -0
  428. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_push_failure.py +0 -0
  429. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_reap.py +0 -0
  430. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_repos_and_pull.py +0 -0
  431. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_restart_services_endpoint.py +0 -0
  432. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_skills_self_heal.py +0 -0
  433. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_startup_diagnostics.py +0 -0
  434. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_update.py +0 -0
  435. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_update_bluegreen.py +0 -0
  436. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_usage_limit.py +0 -0
  437. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_agent_zero_commit.py +0 -0
  438. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ambient_home_isolation.py +0 -0
  439. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_approve_dependency_busy_2804.py +0 -0
  440. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_approve_reject_plan.py +0 -0
  441. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_approve_usage_gate.py +0 -0
  442. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_approved_work_2532.py +0 -0
  443. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_assignment_already_recorded_daemon.py +0 -0
  444. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_audit_log.py +0 -0
  445. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_audit_outcome.py +0 -0
  446. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_audit_query.py +0 -0
  447. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_auto_loop.py +0 -0
  448. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_auto_release_publish_2035.py +0 -0
  449. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_backend_selection.py +0 -0
  450. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_base_checkout_restore.py +0 -0
  451. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_block_log.py +0 -0
  452. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_cap_762.py +0 -0
  453. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_fixture.py +0 -0
  454. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_read_path.py +0 -0
  455. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_schema.py +0 -0
  456. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_service.py +0 -0
  457. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_state.py +0 -0
  458. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_board_wire.py +0 -0
  459. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_brain.py +0 -0
  460. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_branch_model.py +0 -0
  461. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_bug_intake.py +0 -0
  462. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_build_worker_image_env_update.py +0 -0
  463. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cargo_cache.py +0 -0
  464. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_check_gh_argv_containment.py +0 -0
  465. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ci_acceptance_gate_1950.py +0 -0
  466. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ci_fix.py +0 -0
  467. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ci_gitlab.py +0 -0
  468. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ci_parity_2091.py +0 -0
  469. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_ci_store.py +0 -0
  470. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_claim.py +0 -0
  471. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_claude_md_budget.py +0 -0
  472. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_acceptance.py +0 -0
  473. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_assign.py +0 -0
  474. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  475. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_assign_interactive_remote.py +0 -0
  476. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_assign_provider.py +0 -0
  477. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  478. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_audit.py +0 -0
  479. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_chat_continue.py +0 -0
  480. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_decide.py +0 -0
  481. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_diagnose_config_provenance.py +0 -0
  482. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_diagnose_forge_availability.py +0 -0
  483. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_diagnose_graph.py +0 -0
  484. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_diagnose_self.py +0 -0
  485. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_doctor.py +0 -0
  486. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_doctor_config_free_1801.py +0 -0
  487. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  488. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_drive.py +0 -0
  489. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_escalate.py +0 -0
  490. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_fix_headless_review.py +0 -0
  491. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_gate_a.py +0 -0
  492. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_install_drift.py +0 -0
  493. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_install_skills.py +0 -0
  494. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_issue_comment.py +0 -0
  495. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_issue_create_label.py +0 -0
  496. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_issue_reopen.py +0 -0
  497. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_issue_view_list.py +0 -0
  498. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_merge.py +0 -0
  499. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_assign.py +0 -0
  500. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_capture.py +0 -0
  501. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_chat_add_child.py +0 -0
  502. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_dispatch.py +0 -0
  503. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_gate_b.py +0 -0
  504. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_gate_c.py +0 -0
  505. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_order.py +0 -0
  506. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  507. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_milestone_ship.py +0 -0
  508. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_network.py +0 -0
  509. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_new_issue_chat.py +0 -0
  510. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_plans.py +0 -0
  511. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_portal.py +0 -0
  512. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_pr.py +0 -0
  513. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_pull_artifact.py +0 -0
  514. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_queue.py +0 -0
  515. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_reattach_sessions.py +0 -0
  516. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_refine_board.py +0 -0
  517. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_release_preflight.py +0 -0
  518. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_release_propagate.py +0 -0
  519. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_release_window.py +0 -0
  520. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_repo_2220.py +0 -0
  521. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  522. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_contested_tag.py +0 -0
  526. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_client_resource_migration_1946.py +0 -0
  538. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_commands_common.py +0 -0
  539. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_comments.py +0 -0
  540. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_completion_summary.py +0 -0
  541. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config.py +0 -0
  542. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config_acceptance.py +0 -0
  543. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config_audit.py +0 -0
  544. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config_pricing.py +0 -0
  545. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  546. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_config_usage_gate.py +0 -0
  547. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_confirm_test.py +0 -0
  548. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_conflict_fix.py +0 -0
  549. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_conflict_fix_semantic.py +0 -0
  550. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  551. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test.py +0 -0
  552. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  553. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test_runner_baseline.py +0 -0
  554. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test_runner_populated_home.py +0 -0
  555. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test_runner_routing.py +0 -0
  556. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_test_runner_toolchain.py +0 -0
  557. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_uat.py +0 -0
  558. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coord_web_sse_restart_live.py +0 -0
  559. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_coordinator_machine.py +0 -0
  560. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_cross_platform_imports.py +0 -0
  561. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dao.py +0 -0
  562. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dashboard.py +0 -0
  563. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dashboard_fixture.py +0 -0
  564. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dashboard_terminal.py +0 -0
  565. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dashboard_terminal_live.py +0 -0
  566. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_db.py +0 -0
  567. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dead_end.py +0 -0
  568. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_decomposition_chat.py +0 -0
  569. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_coord_db_backup.py +0 -0
  570. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_coord_web_dist.py +0 -0
  571. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_coord_web_rollback.py +0 -0
  572. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_drive_queue_unit.py +0 -0
  573. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_failure_notify_unit.py +0 -0
  574. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_manifest.py +0 -0
  575. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_notify_unit.py +0 -0
  576. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_units_lane.py +0 -0
  577. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deploy_web_unit.py +0 -0
  578. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deprecation_telemetry.py +0 -0
  579. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_deps.py +0 -0
  580. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_diagnose.py +0 -0
  581. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dispatch.py +0 -0
  582. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dispatch_target_validation.py +0 -0
  583. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_dist_name.py +0 -0
  584. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_done_housekeeping.py +0 -0
  585. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive.py +0 -0
  586. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue_blocked_rendering.py +0 -0
  587. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue_launch_argv.py +0 -0
  588. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  589. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue_roll_pending.py +0 -0
  590. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  591. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_state.py +0 -0
  592. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_drive_tmux.py +0 -0
  593. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_epic_up_capability_detection.py +0 -0
  594. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  595. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_epic_up_image_provenance.py +0 -0
  596. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_errors.py +0 -0
  597. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_events.py +0 -0
  598. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_failure_class.py +0 -0
  599. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_filelock.py +0 -0
  600. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  601. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_fix_of_force_override.py +0 -0
  602. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_fleet_config_health.py +0 -0
  603. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_fleet_health_probes.py +0 -0
  604. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_fleet_health_snapshot.py +0 -0
  605. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_fleet_watchdog.py +0 -0
  606. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_forge_availability.py +0 -0
  607. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_freshness.py +0 -0
  608. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gate_a.py +0 -0
  609. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gate_b.py +0 -0
  610. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gate_snapshot_staleness.py +0 -0
  611. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gates.py +0 -0
  612. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  613. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_gen_mock_index.py +0 -0
  614. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_generated_rust_fixture.py +0 -0
  615. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_generated_rust_requests.py +0 -0
  616. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_generated_types_fixture.py +0 -0
  617. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_github_ops.py +0 -0
  618. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_github_throttle.py +0 -0
  619. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_goal.py +0 -0
  620. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_graph_health.py +0 -0
  621. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_graph_selfheal_absent_2237.py +0 -0
  622. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_handoff.py +0 -0
  623. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_checks.py +0 -0
  624. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_cli.py +0 -0
  625. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_cli_graph.py +0 -0
  626. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_config.py +0 -0
  627. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_context.py +0 -0
  628. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_coord_tui_ci_pin.py +0 -0
  629. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_coord_web_ci_pin.py +0 -0
  630. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_deploy_lane_facts.py +0 -0
  631. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_fix.py +0 -0
  632. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_incident_regression.py +0 -0
  633. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_issues_sync_staleness.py +0 -0
  634. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_pypi.py +0 -0
  635. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_registry.py +0 -0
  636. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_release_cordon_probe.py +0 -0
  637. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_timer_active.py +0 -0
  638. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_toolchain.py +0 -0
  639. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_unit_drift.py +0 -0
  640. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_health_unit_enablement.py +0 -0
  641. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_hooks.py +0 -0
  642. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_human_attended_437.py +0 -0
  643. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_init.py +0 -0
  644. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_install_agent_venv_2911.py +0 -0
  645. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_integration.py +0 -0
  646. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_briefing_echo.py +0 -0
  647. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_pane_log_2541.py +0 -0
  648. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_prefill_state.py +0 -0
  649. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_session_relaunch.py +0 -0
  650. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_test_verdict_backstop.py +0 -0
  651. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_token_attribution.py +0 -0
  652. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_interactive_worktree.py +0 -0
  653. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_issue_store_seam.py +0 -0
  654. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_issues_sync_status.py +0 -0
  655. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_liveness_auditor.py +0 -0
  656. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_liveness_notify.py +0 -0
  657. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_lock_contention_ratchet.py +0 -0
  658. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_machine_onboard.py +0 -0
  659. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_machine_pause.py +0 -0
  660. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_merge_queue.py +0 -0
  661. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_merge_verify.py +0 -0
  662. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_milestone_chat.py +0 -0
  663. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_milestone_dispatch.py +0 -0
  664. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_milestone_gate.py +0 -0
  665. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_milestone_order.py +0 -0
  666. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_milestone_seam.py +0 -0
  667. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_mock_author.py +0 -0
  668. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_model_tiering.py +0 -0
  669. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_models.py +0 -0
  670. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_models_config_labels.py +0 -0
  671. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_needs_attention.py +0 -0
  672. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_network.py +0 -0
  673. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_new_issue_chat.py +0 -0
  674. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_next_release_tag.py +0 -0
  675. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_node_shim.py +0 -0
  676. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_baseline.py +0 -0
  677. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_cli.py +0 -0
  678. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_collect.py +0 -0
  679. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_config.py +0 -0
  680. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_drive_seam.py +0 -0
  681. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_isolation.py +0 -0
  682. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_predicate.py +0 -0
  683. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_quiet_hours.py +0 -0
  684. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notifier_service.py +0 -0
  685. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notify.py +0 -0
  686. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_notify_drain.py +0 -0
  687. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_openapi.py +0 -0
  688. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_operational_defaults.py +0 -0
  689. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_overlap_fence.py +0 -0
  690. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_overlap_predict.py +0 -0
  691. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_packaged_deploy_units.py +0 -0
  692. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_parentage.py +0 -0
  693. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_paste_landed.py +0 -0
  694. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  695. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_pipeline.py +0 -0
  696. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_plan_followup_approve_plan_command.py +0 -0
  697. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_plan_followup_pr_command.py +0 -0
  698. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_plan_followup_review_command.py +0 -0
  699. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_plan_only.py +0 -0
  700. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_plan_parser.py +0 -0
  701. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_platform_paths.py +0 -0
  702. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_portal_bridge.py +0 -0
  703. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_portal_config.py +0 -0
  704. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_portal_store.py +0 -0
  705. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_portal_sync.py +0 -0
  706. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_pr_body_lint.py +0 -0
  707. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_production_db_guard.py +0 -0
  708. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_progress.py +0 -0
  709. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_provider_seam.py +0 -0
  710. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_providers.py +0 -0
  711. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_providers_config_labels.py +0 -0
  712. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_providers_pty.py +0 -0
  713. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_py_rust_mirror_inventory.py +0 -0
  714. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_quiet_hours.py +0 -0
  715. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_quiet_hours_store_2146.py +0 -0
  716. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reap_merged_sessions.py +0 -0
  717. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reap_stale_interactive_tick.py +0 -0
  718. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile.py +0 -0
  719. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_branch.py +0 -0
  720. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_completions.py +0 -0
  721. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  722. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_merges.py +0 -0
  723. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_no_agent_record.py +0 -0
  724. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_tick.py +0 -0
  725. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reconcile_usage_limit_done.py +0 -0
  726. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_refine_chat.py +0 -0
  727. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_cordon_2101.py +0 -0
  728. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  729. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_cordon_deadlock_2240.py +0 -0
  730. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_cordon_stuck_2490.py +0 -0
  731. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_propagate.py +0 -0
  732. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_propagate_threshold.py +0 -0
  733. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_roll_between_legs_2854.py +0 -0
  734. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_roll_window_handoff.py +0 -0
  735. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_unified_1242.py +0 -0
  736. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_verify.py +0 -0
  737. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_release_window.py +0 -0
  738. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_remote_auto_prune.py +0 -0
  739. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_remote_interactive_reaper.py +0 -0
  740. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_repo_add.py +0 -0
  741. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_repo_edit_2220.py +0 -0
  742. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_repo_graph_fleet_2237.py +0 -0
  743. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_repo_onboard_2220.py +0 -0
  744. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_report_result_push.py +0 -0
  745. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_reports.py +0 -0
  746. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_retry.py +0 -0
  747. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_retry_advisory_1606.py +0 -0
  748. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_retry_type_1636.py +0 -0
  749. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_revalidate.py +0 -0
  750. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review.py +0 -0
  751. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_end_review_without_verdict.py +0 -0
  752. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_parse_failure_diagnostic.py +0 -0
  753. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_reaffirm.py +0 -0
  754. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_state.py +0 -0
  755. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_verdict_backstop.py +0 -0
  756. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_verdict_override_audit.py +0 -0
  757. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_verdict_relay.py +0 -0
  758. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_review_zero_commits.py +0 -0
  759. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_scoped_review_wiring.py +0 -0
  760. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_scorecard.py +0 -0
  761. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_self_health.py +0 -0
  762. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_serve.py +0 -0
  763. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_serve_app_board_trim.py +0 -0
  764. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_serve_rest_routes.py +0 -0
  765. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_session.py +0 -0
  766. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_slice_issue_attribution.py +0 -0
  767. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_smoke.py +0 -0
  768. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_smoke_live_checkout_restore.py +0 -0
  769. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_smoke_workflow.py +0 -0
  770. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_spend_ceiling.py +0 -0
  771. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_spend_ceiling_coordinator.py +0 -0
  772. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_split.py +0 -0
  773. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_split_work.py +0 -0
  774. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_sql_dialect.py +0 -0
  775. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_sqlite_connect_ratchet.py +0 -0
  776. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stage_projection.py +0 -0
  777. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stale_busy_reviewer_697.py +0 -0
  778. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stalled_pipeline.py +0 -0
  779. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_state.py +0 -0
  780. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_state_review_findings_daemon.py +0 -0
  781. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_status_fleet_footer.py +0 -0
  782. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stop_1567.py +0 -0
  783. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_store_contract.py +0 -0
  784. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_store_migrate.py +0 -0
  785. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stuck.py +0 -0
  786. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  787. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_terminal_command.py +0 -0
  788. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_author.py +0 -0
  789. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_chat.py +0 -0
  790. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_orchestrator.py +0 -0
  791. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_report.py +0 -0
  792. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_verdict_parsing.py +0 -0
  793. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_test_verdict_transcript_floor.py +0 -0
  794. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_text_io_encoding_audit.py +0 -0
  795. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_thin_client_board_audit.py +0 -0
  796. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_thin_client_config_load_1080.py +0 -0
  797. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_thin_client_daemon_routing_906.py +0 -0
  798. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_tmux_host.py +0 -0
  799. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_tmux_session.py +0 -0
  800. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_transcript_floor.py +0 -0
  801. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_usage.py +0 -0
  802. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_usage_limits.py +0 -0
  803. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_usage_rollup.py +0 -0
  804. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_venv_live_install_2121.py +0 -0
  805. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_version_single_source.py +0 -0
  806. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_watch.py +0 -0
  807. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  808. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worker_env_venv_isolation.py +0 -0
  809. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worker_events.py +0 -0
  810. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worker_image_pin_sync.py +0 -0
  811. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worker_safety.py +0 -0
  812. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worker_test_scoping.py +0 -0
  813. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worktree.py +0 -0
  814. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  815. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/test_write_parity.py +0 -0
  816. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tests/write_parity.py +0 -0
  817. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  818. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/contract.md +0 -0
  819. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  820. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  821. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  822. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  823. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  824. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/contract.md +0 -0
  825. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  826. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  827. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  828. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  829. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  830. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  831. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  832. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  833. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  834. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  835. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  836. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  837. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  838. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  839. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/contract.md +0 -0
  840. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  841. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  842. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  843. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  844. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  845. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  846. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  847. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  848. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  849. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  850. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  851. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  852. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  853. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  854. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/contract.md +0 -0
  855. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  856. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  857. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  858. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  859. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  860. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  861. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  862. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  863. {code_coordinator-0.5.301 → code_coordinator-0.5.303}/tui/tests/acceptance.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.301
3
+ Version: 0.5.303
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.301
3
+ Version: 0.5.303
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
@@ -248,6 +248,7 @@ coord/health/checks/timer_active.py
248
248
  coord/health/checks/toolchain.py
249
249
  coord/health/checks/unit_drift.py
250
250
  coord/health/checks/unit_enablement.py
251
+ coord/health/checks/wedged_drive_queue.py
251
252
  coord/health/checks/worktrees.py
252
253
  coord/notifier/__init__.py
253
254
  coord/notifier/baseline.py
@@ -601,6 +602,7 @@ tests/test_health_timer_active.py
601
602
  tests/test_health_toolchain.py
602
603
  tests/test_health_unit_drift.py
603
604
  tests/test_health_unit_enablement.py
605
+ tests/test_health_wedged_drive_queue.py
604
606
  tests/test_hooks.py
605
607
  tests/test_human_attended_437.py
606
608
  tests/test_init.py
@@ -165,6 +165,7 @@
165
165
  "coord/health/checks/toolchain.py",
166
166
  "coord/health/checks/unit_drift.py",
167
167
  "coord/health/checks/unit_enablement.py",
168
+ "coord/health/checks/wedged_drive_queue.py",
168
169
  "coord/health/checks/worktrees.py",
169
170
  "coord/health/cli.py",
170
171
  "coord/health/context.py",
@@ -627,6 +628,7 @@
627
628
  "tests/test_health_toolchain.py",
628
629
  "tests/test_health_unit_drift.py",
629
630
  "tests/test_health_unit_enablement.py",
631
+ "tests/test_health_wedged_drive_queue.py",
630
632
  "tests/test_hooks.py",
631
633
  "tests/test_human_attended_437.py",
632
634
  "tests/test_init.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.301",
2
+ "tag": "0.5.303",
3
3
  "distance": 0,
4
- "node": "g26f7e1b979b278db2f5c5a9a510debee5bb45a0a",
4
+ "node": "g0077891657f13dcf2fcd159e513b334616a0127b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-30"
@@ -72,6 +72,7 @@ from coord.drive_queue import (
72
72
  TickPlan,
73
73
  add_preflight_notice,
74
74
  build_board_view,
75
+ detect_unreachable_waits,
75
76
  diagnose_blocked_after,
76
77
  effective_max_fix_rounds,
77
78
  entries_from_rows,
@@ -87,6 +88,7 @@ from coord.drive_queue import (
87
88
  pending_probe_targets,
88
89
  plan_tick,
89
90
  render_plan,
91
+ unreachable_wait_alert,
90
92
  validate_enqueue,
91
93
  )
92
94
  from coord.overlap_predict import (
@@ -1523,6 +1525,30 @@ def _queue_alert() -> dict | None:
1523
1525
  return get_drive_escalation(QUEUE_ALERT_REPO, QUEUE_ALERT_ISSUE)
1524
1526
 
1525
1527
 
1528
+ def _unreachable_wait_alert_dict(rows: list[Mapping[str, Any]]) -> dict | None:
1529
+ """#2944's synthetic queue-level alert, or ``None`` when nothing qualifies.
1530
+
1531
+ Computed fresh from the CURRENT queue rows on every call — deliberately
1532
+ independent of :func:`_queue_alert`'s per-tick escalation record, which a
1533
+ busy queue overwrites (and clears — see the tick's own ``else:
1534
+ _clear_queue_alert()`` branch) every single tick it finds *something*
1535
+ else to launch. A wedged entry with `attempts=0` sits in `blocked`/
1536
+ `parked` for as long as it likes regardless of what else the queue is
1537
+ doing, so its visibility must not depend on a tick ever having nothing
1538
+ better to report — see :func:`coord.drive_queue.detect_unreachable_waits`
1539
+ for the predicate and the #2900/#2907 incident this closes.
1540
+ """
1541
+ waits = detect_unreachable_waits(entries_from_rows(rows))
1542
+ if not waits:
1543
+ return None
1544
+ synthetic = unreachable_wait_alert(waits)
1545
+ return {
1546
+ "reason": synthetic.reason,
1547
+ "gate_readings": " | ".join(synthetic.details),
1548
+ "proposed_command": synthetic.command,
1549
+ }
1550
+
1551
+
1526
1552
  @drive_queue_group.command("status")
1527
1553
  @click.option("--json", "output_json", is_flag=True, default=False, help="Emit counts + alert as JSON.")
1528
1554
  @_CONFIG_OPTION
@@ -1532,7 +1558,13 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
1532
1558
 
1533
1559
  rows = list_drive_queue()
1534
1560
  counts = _counts(rows)
1535
- alert = _queue_alert()
1561
+ # #2944: a tick-raised alert (a HELD gate, "nothing eligible to launch")
1562
+ # takes priority when one exists — it is fresher and, on a busy queue,
1563
+ # `_unreachable_wait_alert_dict` would silently win-and-hide it every
1564
+ # time a real, actionable alert IS present. Only when the tick has
1565
+ # nothing to say (the common, dangerous case a queue with free slots
1566
+ # sits in for hours) does the guaranteed-false-wait check get to speak.
1567
+ alert = _queue_alert() or _unreachable_wait_alert_dict(rows)
1536
1568
  held = fired_holds(entries_from_rows(rows))
1537
1569
  # #2587: read directly from the marker file, not from the last tick's
1538
1570
  # `TickPlan` — `status` may run between ticks (or on a machine that never
@@ -2260,6 +2260,129 @@ def is_unsatisfiable_prereq_reason(text: str | None) -> bool:
2260
2260
  return _is_unsatisfiable_prereq_reason(text)
2261
2261
 
2262
2262
 
2263
+ # ── #2944: the guaranteed-false wait ─────────────────────────────────────────
2264
+ #
2265
+ # An entry with `attempts == 0` has never been dispatched: no `coord drive`
2266
+ # ever ran for it, so it has no branch, no PR, and no merge-queue row — and
2267
+ # never can have one, because nothing was ever built. A `blocked` or `parked`
2268
+ # entry in that state is not waiting on a gate that MIGHT clear; it is
2269
+ # waiting on a gate that structurally cannot exist. Whatever swept this row
2270
+ # last (#2230's merge-gate probe, #2935's after= graph, anything future)
2271
+ # cannot ever answer "yes" for it — the only exit is an operator's `remove` +
2272
+ # `add`.
2273
+ #
2274
+ # Deliberately independent of #2935/#2230: those fix (or will fix) individual
2275
+ # sweeps so they stop MISTAKING this shape for a real probe target. This
2276
+ # predicate does not care which sweep produced the block, or whether one
2277
+ # exists at all — it is the backstop that makes the NEXT undiscovered
2278
+ # instance of "a sweep declines to guess and therefore never terminates"
2279
+ # visible, instead of silent for another 32 hours (claude-coordinator#2900/
2280
+ # #2907: 207 and 186 deferrals, 0 attempts, ~10h and 22.7h blocked
2281
+ # respectively, `alert: (none)` the entire time — see #2944).
2282
+ #
2283
+ # `min_deferrals` is grace, not evidence: `deferrals` on a `blocked`/`parked`
2284
+ # row is whatever it had accumulated before the transition (subsequent ticks
2285
+ # do not bump it further — neither `_reconcile_blocked` nor
2286
+ # `_reconcile_blocked_unreadable` touches `deferrals`), so a fresh entry that
2287
+ # races straight from `waiting` to `blocked` on its very first tick reads
2288
+ # `deferrals=0` here regardless of how long it then sits. ~5 ticks (~15
2289
+ # minutes at the fleet's ~3-minute cadence) is enough that a row flagged here
2290
+ # has genuinely been sitting, not merely landed there this instant.
2291
+ UNREACHABLE_WAIT_MIN_DEFERRALS = 5
2292
+
2293
+
2294
+ @dataclass(frozen=True)
2295
+ class UnreachableWait:
2296
+ """One queue entry stuck in the #2944 guaranteed-false wait.
2297
+
2298
+ See :func:`detect_unreachable_waits` for the predicate. Carries just
2299
+ enough for a caller to build an operator-facing message without
2300
+ re-deriving anything: the key names the entry, `deferrals` is the
2301
+ evidence a genuine transient wouldn't have, and `last_reason` is
2302
+ whatever the last sweep to touch this row recorded — useful context,
2303
+ never re-interpreted here.
2304
+ """
2305
+
2306
+ key: str
2307
+ state: str
2308
+ deferrals: int
2309
+ last_reason: str
2310
+
2311
+
2312
+ def detect_unreachable_waits(
2313
+ entries: Iterable[QueueEntry],
2314
+ *,
2315
+ min_deferrals: int = UNREACHABLE_WAIT_MIN_DEFERRALS,
2316
+ ) -> list[UnreachableWait]:
2317
+ """Entries sitting in the #2944 guaranteed-false wait.
2318
+
2319
+ ``state in (blocked, parked) AND attempts == 0 AND deferrals >
2320
+ min_deferrals`` — see the module comment above this function for why
2321
+ that combination can never resolve itself. Pure and cheap (a predicate
2322
+ over already-loaded rows, no clock, no I/O), so the same function backs
2323
+ both `coord drive-queue status`'s `alert:` line
2324
+ (`coord.commands.drive_queue._queue_alert`) and the `coord doctor` WARN
2325
+ (`coord.health.checks.wedged_drive_queue`) — one definition of "wedged",
2326
+ not two that could drift apart.
2327
+
2328
+ An entry with ``attempts > 0`` is excluded unconditionally, however long
2329
+ it has sat: it WAS dispatched at least once, so it has (or had) a real
2330
+ branch/PR/merge-queue row for a sweep to have a genuine opinion about —
2331
+ that is a legitimate wait, not an unreachable one.
2332
+ """
2333
+ return [
2334
+ UnreachableWait(
2335
+ key=e.key, state=e.state, deferrals=e.deferrals, last_reason=e.last_reason
2336
+ )
2337
+ for e in entries
2338
+ if e.state in (STATE_BLOCKED, STATE_PARKED)
2339
+ and e.attempts == 0
2340
+ and e.deferrals > min_deferrals
2341
+ ]
2342
+
2343
+
2344
+ def unreachable_wait_alert(waits: Sequence[UnreachableWait]) -> QueueAlert:
2345
+ """The queue-level record #2944's predicate raises, in :func:`_hold_alert`'s
2346
+ shape — a message naming the entry (or entries), the deferral count that
2347
+ is the evidence, and the ONE remedy that actually clears it.
2348
+
2349
+ ``add`` alone does not clear ``blocked`` (the queue list already
2350
+ documents this as a footgun elsewhere) — only ``remove`` then ``add``
2351
+ does, so that is the command surfaced here rather than the generic
2352
+ ``coord drive-queue list`` other alerts fall back on; naming the wrong
2353
+ remedy on a state this non-obvious defeats the point of alerting at all.
2354
+ Named INLINE in ``reason`` (not only in ``command``, which
2355
+ ``drive-queue status``'s plain-text rendering never echoes — only its
2356
+ ``gate_readings``/``details`` lines are printed) so the remedy is visible
2357
+ wherever this alert's ``reason`` is, not just to a caller that also reads
2358
+ the structured field.
2359
+ """
2360
+ names = ", ".join(
2361
+ f"{w.key} ({w.state}, {w.deferrals} deferrals)" for w in waits[:5]
2362
+ )
2363
+ more = ", ..." if len(waits) > 5 else ""
2364
+ plural = len(waits) != 1
2365
+ return QueueAlert(
2366
+ reason=(
2367
+ f"{len(waits)} queue entr{'ies' if plural else 'y'} stuck in a "
2368
+ "guaranteed-false wait — never dispatched (attempts=0) yet "
2369
+ f"blocked/parked past {UNREACHABLE_WAIT_MIN_DEFERRALS} deferrals; "
2370
+ f"no sweep can ever clear this on its own: {names}{more}. Fix: "
2371
+ "coord drive-queue remove <repo> <issue> && "
2372
+ "coord drive-queue add <repo> <issue> for each entry named above."
2373
+ ),
2374
+ details=tuple(
2375
+ f"{w.key}: {w.state}, {w.deferrals} deferrals, "
2376
+ f"last_reason={w.last_reason!r}"
2377
+ for w in waits
2378
+ ),
2379
+ command=(
2380
+ "coord drive-queue remove <repo> <issue> && "
2381
+ "coord drive-queue add <repo> <issue> — for each entry named above"
2382
+ ),
2383
+ )
2384
+
2385
+
2263
2386
  def _reconcile_blocked_after(
2264
2387
  entry: QueueEntry,
2265
2388
  board: BoardView,
@@ -0,0 +1,124 @@
1
+ """Drive-queue entries stuck in a guaranteed-false wait (#2944).
2
+
3
+ ``coord drive-queue status``'s ``alert:`` line is a per-tick record — a busy
4
+ queue with free capacity elsewhere clears it every tick that finds
5
+ *something* to launch (see ``coord.commands.drive_queue._run_tick``'s own
6
+ ``else: _clear_queue_alert()`` branch), even while an unrelated entry sits
7
+ wedged for hours. That is exactly what happened to claude-coordinator#2900
8
+ and #2907 on 2026-08-29: both sat ``blocked``, ``attempts=0``, 207 and 186
9
+ deferrals, ~10h and 22.7h respectively — and ``alert: (none)`` read clean the
10
+ entire time, because the rest of the queue kept launching fine.
11
+
12
+ An entry with ``attempts == 0`` has never been dispatched — no branch, no
13
+ PR, no merge-queue row ever existed for it, and none ever can, because
14
+ nothing was ever built. A ``blocked``/``parked`` entry in that state is not
15
+ waiting on a gate that MIGHT clear; it is waiting on a gate that structurally
16
+ cannot exist. ``coord.drive_queue.detect_unreachable_waits`` is the one
17
+ predicate for that shape (also what backs the ``status`` alert line itself,
18
+ so this check and that line can never say different things) — this probe
19
+ just re-derives it, live, from ``drive_queue`` state every time ``coord
20
+ doctor`` runs, independent of whatever the last tick happened to report.
21
+
22
+ This is deliberately independent of #2935 (which fixes the specific sweep
23
+ that produced the #2900/#2907 incident) and #2230 (the sweep's origin): both
24
+ are about *why* a row gets wedged this way; this check is about the row
25
+ being wedged *at all*, whatever sweep — present or future — produced it.
26
+
27
+ WARN, not CRIT: the fix costs an operator ~10 seconds (``coord drive-queue
28
+ remove`` + ``add``) once they know, and this check exists to make sure they
29
+ know — it is not itself an outage.
30
+
31
+ ``cost=COST_NETWORK``, not ``COST_CHEAP``: ``coord.state.list_drive_queue``
32
+ routes to the daemon over HTTP whenever ``board_service`` is set, which is
33
+ the common case on a thin-client fleet machine (same situation
34
+ ``release_cordon.py`` documents for its own board-state read) — so this is a
35
+ real network call on most of the fleet, not a local DB read, and must be
36
+ skippable by ``--no-network``/timer runs and the automatic per-agent health
37
+ poll exactly like the other network-costed checks.
38
+ """
39
+
40
+ from __future__ import annotations
41
+
42
+ from coord.health.models import CheckResult, HealthContext, Severity
43
+ from coord.health.registry import COST_NETWORK, check
44
+
45
+
46
+ @check(
47
+ id="wedged_drive_queue",
48
+ scope="machine",
49
+ title="wedged drive-queue entries",
50
+ order=23,
51
+ cost=COST_NETWORK,
52
+ description=(
53
+ "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`."
64
+ ),
65
+ )
66
+ def probe_wedged_drive_queue(ctx: HealthContext) -> CheckResult:
67
+ del ctx # unused: this check reads local queue state directly, not config
68
+ from coord.drive_queue import ( # noqa: PLC0415
69
+ detect_unreachable_waits,
70
+ entries_from_rows,
71
+ )
72
+ from coord.state import list_drive_queue # noqa: PLC0415
73
+
74
+ try:
75
+ rows = list_drive_queue()
76
+ waits = detect_unreachable_waits(entries_from_rows(rows))
77
+ except Exception as exc: # noqa: BLE001 — a probe must never raise
78
+ return CheckResult(
79
+ check_id="wedged_drive_queue",
80
+ scope="machine",
81
+ severity=Severity.UNKNOWN,
82
+ headroom=f"could not read the drive queue: {exc}",
83
+ error=str(exc),
84
+ )
85
+
86
+ if not waits:
87
+ return CheckResult(
88
+ check_id="wedged_drive_queue",
89
+ scope="machine",
90
+ severity=Severity.OK,
91
+ headroom="0 wedged drive-queue entries",
92
+ )
93
+
94
+ sample = ", ".join(
95
+ f"{w.key} ({w.state}, {w.deferrals} deferrals)" for w in waits[:5]
96
+ )
97
+ return CheckResult(
98
+ check_id="wedged_drive_queue",
99
+ scope="machine",
100
+ severity=Severity.WARN,
101
+ headroom=(
102
+ f"{len(waits)} wedged drive-queue entr"
103
+ f"{'y' if len(waits) == 1 else 'ies'}"
104
+ ),
105
+ detail=(
106
+ 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>"
110
+ ),
111
+ threshold="warn when any entry is blocked/parked, attempts=0, past a few ticks of grace",
112
+ values={
113
+ "count": len(waits),
114
+ "entries": [
115
+ {
116
+ "key": w.key,
117
+ "state": w.state,
118
+ "deferrals": w.deferrals,
119
+ "last_reason": w.last_reason,
120
+ }
121
+ for w in waits
122
+ ],
123
+ },
124
+ )
@@ -278,6 +278,102 @@ def _probe_playwright_browsers(prereq: Prereq, _timeout: float) -> ToolProbe:
278
278
  )
279
279
 
280
280
 
281
+ # --- `windows` capability: the msvc cross-target lives per-toolchain (#2952) --
282
+ #
283
+ # dell64's Windows toolchain is a WSL-side cross-compile: `rustup target add
284
+ # x86_64-pc-windows-msvc` plus `cargo install cargo-xwin` (for the MSVC
285
+ # CRT/SDK cargo-xwin downloads and caches). `cargo-xwin` is an ordinary
286
+ # binary probe, same shape as `cargo`/`opencode` below. The target is not —
287
+ # `rustup target list --installed` is scoped to whichever toolchain is
288
+ # *active*, and quadraui pins a specific one in `rust-toolchain.toml`
289
+ # (`1.97.1` at the time of writing). Adding the target only to the default
290
+ # toolchain leaves the pinned one without it, and a probe that only checked
291
+ # the default would report MET while quadraui's own build still fails —
292
+ # laundering an unbacked claim into a verified one, which is worse than no
293
+ # probe at all. So this asserts the target against EVERY installed
294
+ # toolchain and names the offending one in `what_breaks` when it's missing
295
+ # from any of them.
296
+ WINDOWS_MSVC_TARGET = "x86_64-pc-windows-msvc"
297
+
298
+
299
+ def _rustup_toolchains(timeout: float) -> list[str]:
300
+ """Names of every installed rustup toolchain (`rustup toolchain list`).
301
+
302
+ Returns `[]` if `rustup` itself is missing or the call fails — the
303
+ caller treats that as "cannot confirm the target is installed" rather
304
+ than raising.
305
+ """
306
+ if shutil.which("rustup") is None:
307
+ return []
308
+ try:
309
+ result = subprocess.run(
310
+ ["rustup", "toolchain", "list"],
311
+ capture_output=True, text=True, timeout=timeout,
312
+ )
313
+ except (OSError, subprocess.TimeoutExpired):
314
+ return []
315
+ if result.returncode != 0:
316
+ return []
317
+ toolchains = []
318
+ for line in (result.stdout or "").splitlines():
319
+ line = line.strip()
320
+ if not line:
321
+ continue
322
+ # `rustup toolchain list` suffixes the active one with "(default)"
323
+ # (and possibly "(override)") — strip it, `--toolchain` wants the
324
+ # bare name.
325
+ toolchains.append(line.split()[0])
326
+ return toolchains
327
+
328
+
329
+ def _toolchain_has_target(toolchain: str, target: str, timeout: float) -> bool:
330
+ try:
331
+ result = subprocess.run(
332
+ ["rustup", "target", "list", "--installed", "--toolchain", toolchain],
333
+ capture_output=True, text=True, timeout=timeout,
334
+ )
335
+ except (OSError, subprocess.TimeoutExpired):
336
+ return False
337
+ if result.returncode != 0:
338
+ return False
339
+ installed = {line.strip() for line in (result.stdout or "").splitlines() if line.strip()}
340
+ return target in installed
341
+
342
+
343
+ def _probe_windows_msvc_target(prereq: Prereq, timeout: float) -> ToolProbe:
344
+ """`custom_probe` backing the `windows` capability's cross-target check
345
+ (#2952). See the module comment above `WINDOWS_MSVC_TARGET` for why this
346
+ cannot be a plain binary probe."""
347
+ toolchains = _rustup_toolchains(timeout)
348
+ if not toolchains:
349
+ return ToolProbe(
350
+ tool=prereq.tool, capability=prereq.capability, found=False,
351
+ version=None, min_version=prereq.min_version, meets_floor=None,
352
+ what_breaks=(
353
+ "rustup reports no installed toolchains (or rustup itself "
354
+ f"is missing on PATH) — {prereq.what_breaks}"
355
+ ),
356
+ )
357
+ missing = [
358
+ tc for tc in toolchains
359
+ if not _toolchain_has_target(tc, WINDOWS_MSVC_TARGET, timeout)
360
+ ]
361
+ if missing:
362
+ return ToolProbe(
363
+ tool=prereq.tool, capability=prereq.capability, found=False,
364
+ version=None, min_version=prereq.min_version, meets_floor=None,
365
+ what_breaks=(
366
+ f"{WINDOWS_MSVC_TARGET} missing from toolchain(s) "
367
+ f"{', '.join(missing)} — {prereq.what_breaks}"
368
+ ),
369
+ )
370
+ return ToolProbe(
371
+ tool=prereq.tool, capability=prereq.capability, found=True,
372
+ version=", ".join(sorted(toolchains)), min_version=prereq.min_version,
373
+ meets_floor=None, what_breaks=prereq.what_breaks,
374
+ )
375
+
376
+
281
377
  # Required on every machine, no matter its declared capabilities — coord
282
378
  # itself doesn't function without these.
283
379
  BASELINE_PREREQS: tuple[Prereq, ...] = (
@@ -378,6 +474,33 @@ CAPABILITY_PREREQS: tuple[Prereq, ...] = (
378
474
  ),
379
475
  custom_probe=_probe_opencode,
380
476
  ),
477
+ # #2952: backs the `windows` capability — dell64's WSL-side cross-compile
478
+ # to `x86_64-pc-windows-msvc` via cargo-xwin, routing quadraui's
479
+ # `src/win/` (and vimcode's equivalent) Win-GUI work. Two independent
480
+ # things can silently regress in that one home directory: the
481
+ # `cargo-xwin` binary (`~/.cargo/bin`) and the rustup target (see
482
+ # `_probe_windows_msvc_target` above for why that one needs its own
483
+ # custom probe rather than a plain binary check).
484
+ Prereq(
485
+ tool="cargo-xwin", binary="cargo-xwin", version_args=("--version",),
486
+ version_re=r"(\d+\.\d+\.\d+\S*)", min_version=None, capability="windows",
487
+ what_breaks=(
488
+ "quadraui's `--target x86_64-pc-windows-msvc` cross-compile "
489
+ "cannot link against the MSVC CRT/SDK — `cargo install "
490
+ "cargo-xwin`"
491
+ ),
492
+ ),
493
+ Prereq(
494
+ tool="windows-msvc-target", binary="", version_args=(), version_re="",
495
+ min_version=None, capability="windows",
496
+ what_breaks=(
497
+ f"`rustup target add {WINDOWS_MSVC_TARGET}` is missing from an "
498
+ "installed toolchain — quadraui pins one in rust-toolchain.toml, "
499
+ "so add the target to it explicitly, not just the default "
500
+ "toolchain (#2952)"
501
+ ),
502
+ custom_probe=_probe_windows_msvc_target,
503
+ ),
381
504
  )
382
505
 
383
506
  ALL_PREREQS: tuple[Prereq, ...] = BASELINE_PREREQS + CAPABILITY_PREREQS
@@ -3613,6 +3613,83 @@ def test_status_on_an_empty_queue_says_so(cli):
3613
3613
  assert "alert: (none)" in result.output
3614
3614
 
3615
3615
 
3616
+ # ── #2944: `status`'s `alert:` line for a guaranteed-false wait ─────────────
3617
+ #
3618
+ # claude-coordinator#2900/#2907: an entry with `attempts=0` sat `blocked` for
3619
+ # 10h/22.7h with `status` reading `alert: (none)` the whole time — because
3620
+ # the per-tick alert this line otherwise shows only fires when a tick has
3621
+ # NOTHING to launch anywhere, and a busy queue kept launching other entries
3622
+ # fine. These drive the real CLI end to end with no tick at all (the alert
3623
+ # must be visible from `status` alone, not conditional on ever running one),
3624
+ # manipulating only the tick-owned columns a real tick would eventually
3625
+ # write, via the same seam `update_drive_queue_entry` uses.
3626
+
3627
+
3628
+ def test_status_alert_reports_a_wedged_never_dispatched_blocked_entry(cli):
3629
+ cli("add", REPO, "2900")
3630
+ state._update_drive_queue_entry_local(
3631
+ REPO, 2900, state="blocked", attempts=0, deferrals=207,
3632
+ last_reason="exhausted 2/2 attempts",
3633
+ )
3634
+
3635
+ result = cli("status")
3636
+ assert result.exit_code == 0, result.output
3637
+ assert "alert: (none)" not in result.output
3638
+ assert f"{REPO}#2900" in result.output
3639
+ assert "207 deferrals" in result.output
3640
+ assert "coord drive-queue remove" in result.output
3641
+ assert "coord drive-queue add" in result.output
3642
+
3643
+
3644
+ def test_status_alert_json_also_carries_the_wedged_entry(cli):
3645
+ cli("add", REPO, "2900")
3646
+ state._update_drive_queue_entry_local(
3647
+ REPO, 2900, state="blocked", attempts=0, deferrals=207,
3648
+ )
3649
+
3650
+ result = cli("status", "--json")
3651
+ assert result.exit_code == 0, result.output
3652
+ payload = json.loads(result.output)
3653
+ assert payload["alert"] is not None
3654
+ assert f"{REPO}#2900" in payload["alert"]["reason"]
3655
+ # Same key a tick-raised escalation uses (coord.state's `drive_escalations`
3656
+ # shape — see tests/test_cli_drive_queue.py's other `proposed_command`
3657
+ # assertions) so a JSON consumer of `alert` has one shape regardless of
3658
+ # which of the two sources produced it (#2096).
3659
+ assert "coord drive-queue remove" in payload["alert"]["proposed_command"]
3660
+ assert "coord drive-queue add" in payload["alert"]["proposed_command"]
3661
+ assert "command" not in payload["alert"]
3662
+
3663
+
3664
+ def test_status_alert_does_not_trip_for_a_fresh_transient_block(cli):
3665
+ """Below the grace threshold (deferrals), a `blocked attempts=0` entry
3666
+ reads exactly like it did before #2944 — a real alert here on the FIRST
3667
+ tick an entry lands in `blocked` at all would be a false positive, not a
3668
+ signal."""
3669
+ cli("add", REPO, "2901")
3670
+ state._update_drive_queue_entry_local(
3671
+ REPO, 2901, state="blocked", attempts=0, deferrals=2,
3672
+ )
3673
+
3674
+ result = cli("status")
3675
+ assert result.exit_code == 0, result.output
3676
+ assert "alert: (none)" in result.output
3677
+
3678
+
3679
+ def test_status_alert_does_not_trip_for_a_real_merge_gate_wait(cli):
3680
+ """`attempts > 0` means the entry WAS dispatched — a long `blocked` wait
3681
+ is a legitimate wait on a real merge gate, never this alert's business."""
3682
+ cli("add", REPO, "2902")
3683
+ state._update_drive_queue_entry_local(
3684
+ REPO, 2902, state="blocked", attempts=2, deferrals=500,
3685
+ last_reason="merge gate still shut",
3686
+ )
3687
+
3688
+ result = cli("status")
3689
+ assert result.exit_code == 0, result.output
3690
+ assert "alert: (none)" in result.output
3691
+
3692
+
3616
3693
  # ── deploy gates (#1757) ─────────────────────────────────────────────────────
3617
3694
  #
3618
3695
  # The acceptance bar for `--hold-after`. `merged != live`: a queue that