code-coordinator 0.5.300__tar.gz → 0.5.302__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.300 → code_coordinator-0.5.302}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/drive_queue.py +33 -1
  7. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/drive_queue.py +123 -0
  8. code_coordinator-0.5.302/coord/health/checks/wedged_drive_queue.py +124 -0
  9. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/machine_onboard.py +207 -3
  10. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_drive_queue.py +77 -0
  11. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue.py +82 -1
  12. code_coordinator-0.5.302/tests/test_health_wedged_drive_queue.py +108 -0
  13. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_machine_onboard.py +156 -0
  14. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/.gitignore +0 -0
  27. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/GOAL.md +0 -0
  29. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/LICENSE +0 -0
  30. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/README.md +0 -0
  32. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/client.py +0 -0
  64. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/machine.py +0 -0
  78. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/pr.py +0 -0
  84. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/store_migrate.py +0 -0
  93. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/config.py +0 -0
  98. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/db.py +0 -0
  108. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dead_end.py +0 -0
  109. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/decomposition_chat.py +0 -0
  110. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/README.md +0 -0
  111. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-agent.service +0 -0
  112. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-db-backup.service +0 -0
  113. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-db-backup.sh +0 -0
  114. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-db-backup.timer +0 -0
  115. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-drive-queue.service +0 -0
  116. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-drive-queue.timer +0 -0
  117. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-failure-notify.service +0 -0
  118. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-fleet-watchdog.service +0 -0
  119. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  120. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-notify.service +0 -0
  121. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-notify.timer +0 -0
  122. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-release-propagate.service +0 -0
  123. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-release-propagate.timer +0 -0
  124. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-release-window.service +0 -0
  125. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-release-window.timer +0 -0
  126. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-serve.service +0 -0
  127. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-web-dist-build.service +0 -0
  128. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-web-dist-build.timer +0 -0
  129. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy/coord-web.service +0 -0
  130. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy_manifest.py +0 -0
  131. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deploy_units.py +0 -0
  132. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deprecation_telemetry.py +0 -0
  133. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/deps.py +0 -0
  134. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/diagnose.py +0 -0
  135. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dispatch.py +0 -0
  136. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/dist_name.py +0 -0
  137. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/drive.py +0 -0
  138. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/drive_state.py +0 -0
  139. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/events.py +0 -0
  140. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/failure_class.py +0 -0
  141. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/filelock.py +0 -0
  142. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/fleet_config_health.py +0 -0
  143. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/forge_availability.py +0 -0
  144. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/freshness.py +0 -0
  145. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/gate_a.py +0 -0
  146. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/gate_b.py +0 -0
  147. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/gate_snapshot.py +0 -0
  148. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/gates.py +0 -0
  149. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/github_ops.py +0 -0
  150. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/github_throttle.py +0 -0
  151. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/goal.py +0 -0
  152. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/graph_health.py +0 -0
  153. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/__init__.py +0 -0
  154. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/aggregate.py +0 -0
  155. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/__init__.py +0 -0
  156. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/_ci_pin.py +0 -0
  157. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  161. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/coord_web_ci_pin.py +0 -0
  162. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/deploy_lane_facts.py +0 -0
  163. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/disk.py +0 -0
  164. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/fleet_board.py +0 -0
  165. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  166. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/fleet_phantom.py +0 -0
  167. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/fleet_unit_drift.py +0 -0
  168. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/graph.py +0 -0
  169. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/graphify_cli.py +0 -0
  170. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/index_lock.py +0 -0
  171. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/issues_sync_staleness.py +0 -0
  172. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/plan_usage.py +0 -0
  173. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/release_cordon.py +0 -0
  174. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/stalled_pipeline.py +0 -0
  177. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/timer_active.py +0 -0
  178. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/toolchain.py +0 -0
  179. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/unit_drift.py +0 -0
  180. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/unit_enablement.py +0 -0
  181. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/checks/worktrees.py +0 -0
  182. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/cli.py +0 -0
  183. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/context.py +0 -0
  184. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/fleet_snapshot.py +0 -0
  185. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/models.py +0 -0
  186. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/pypi.py +0 -0
  187. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/registry.py +0 -0
  188. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/render.py +0 -0
  189. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/health/units.py +0 -0
  190. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/hooks.py +0 -0
  191. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/housekeeping.py +0 -0
  192. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/interactive.py +0 -0
  193. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/issue_store.py +0 -0
  194. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/issues_sync_status.py +0 -0
  195. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/liveness_auditor.py +0 -0
  196. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/machine_pause.py +0 -0
  197. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/merge_queue.py +0 -0
  198. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/milestone_chat.py +0 -0
  199. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/milestone_dispatch.py +0 -0
  200. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/milestone_gate.py +0 -0
  201. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/milestone_order.py +0 -0
  202. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/mock_author.py +0 -0
  203. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/models.py +0 -0
  204. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/network.py +0 -0
  205. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/new_issue_chat.py +0 -0
  206. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/__init__.py +0 -0
  207. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/baseline.py +0 -0
  208. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/cli.py +0 -0
  209. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/collect.py +0 -0
  210. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/digest.py +0 -0
  211. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/models.py +0 -0
  212. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/predicate.py +0 -0
  213. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/service.py +0 -0
  214. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/store.py +0 -0
  215. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notifier/transport.py +0 -0
  216. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/notify.py +0 -0
  217. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/openapi.py +0 -0
  218. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/overlap_fence.py +0 -0
  219. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/overlap_predict.py +0 -0
  220. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/parentage.py +0 -0
  221. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/parentage_github.py +0 -0
  222. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/pipeline.py +0 -0
  223. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/plan_parser.py +0 -0
  224. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/plans.py +0 -0
  225. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/platform_paths.py +0 -0
  226. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/portal_bridge.py +0 -0
  227. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/portal_store.py +0 -0
  228. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/portal_sync.py +0 -0
  229. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/pr_body_lint.py +0 -0
  230. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/prereqs.py +0 -0
  231. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/reconcile.py +0 -0
  239. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/reconcile_tick.py +0 -0
  240. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/refine_chat.py +0 -0
  241. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/release_cordon.py +0 -0
  242. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/release_propagate.py +0 -0
  243. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/release_verify.py +0 -0
  244. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/release_window.py +0 -0
  245. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/repo_edit.py +0 -0
  246. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/repo_onboard.py +0 -0
  247. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/reports.py +0 -0
  248. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/rest_schema.py +0 -0
  249. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/revalidate.py +0 -0
  250. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/review.py +0 -0
  251. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/scorecard.py +0 -0
  252. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/self_health.py +0 -0
  253. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/serve_app.py +0 -0
  254. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  255. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  256. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  257. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  258. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/portal-followup/SKILL.md +0 -0
  260. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/release-now/SKILL.md +0 -0
  261. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  262. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  263. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/skills/update-issue/SKILL.md +0 -0
  264. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/smoke.py +0 -0
  265. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/spend_ceiling.py +0 -0
  266. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/split_work.py +0 -0
  267. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/sql.py +0 -0
  268. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/stage_projection.py +0 -0
  269. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/state.py +0 -0
  270. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/store_migrate.py +0 -0
  271. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/test_author.py +0 -0
  272. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/test_chat.py +0 -0
  273. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/test_orchestrator.py +0 -0
  274. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/test_report.py +0 -0
  275. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/tui_release.py +0 -0
  276. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/usage.py +0 -0
  277. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/usage_limits.py +0 -0
  278. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/usage_rollup.py +0 -0
  279. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coord/worker_events.py +0 -0
  280. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/coordinator.example.yml +0 -0
  281. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-agent.service +0 -0
  282. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-db-backup.service +0 -0
  283. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-db-backup.sh +0 -0
  284. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-db-backup.timer +0 -0
  285. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-drive-queue.service +0 -0
  286. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-drive-queue.timer +0 -0
  287. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-failure-notify.service +0 -0
  288. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-failure-notify.sh +0 -0
  289. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-fleet-watchdog.service +0 -0
  290. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-fleet-watchdog.timer +0 -0
  291. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-notify.service +0 -0
  292. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-notify.timer +0 -0
  293. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-release-propagate.service +0 -0
  294. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-release-propagate.timer +0 -0
  295. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-release-window.service +0 -0
  296. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-release-window.timer +0 -0
  297. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-serve.service +0 -0
  298. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-web-dist-build.service +0 -0
  299. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-web-dist-build.sh +0 -0
  300. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-web-dist-build.timer +0 -0
  301. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-web-rollback.sh +0 -0
  302. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/coord-web.service +0 -0
  303. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/deploy/node-shim.sh +0 -0
  304. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ADR_COORD_TUI_CI.md +0 -0
  305. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  306. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ADR_COORD_WEB_CI.md +0 -0
  307. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ADR_COORD_WEB_DIST.md +0 -0
  308. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  309. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/AGENT_OPERATIONS.md +0 -0
  310. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ARCHITECTURE.md +0 -0
  311. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ARCH_SECURITY_GATES.md +0 -0
  312. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/COCKPIT.md +0 -0
  313. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/CONTROL_CENTER.md +0 -0
  314. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/COST_DISCIPLINE.md +0 -0
  315. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/CROSS_PLATFORM.md +0 -0
  316. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/CUSTOMER_FACING_APPS.md +0 -0
  317. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/CUSTOMER_PORTAL.md +0 -0
  318. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/DRIVE_QUEUE.md +0 -0
  319. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/EPHEMERAL_WORKERS.md +0 -0
  320. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/FORGE_MIGRATION.md +0 -0
  321. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/GRAPHIFY_SETUP.md +0 -0
  322. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ISSUE_GUIDANCE.md +0 -0
  323. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/MAC_MINI.md +0 -0
  324. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  325. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/NOTIFIER.md +0 -0
  326. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/OPENCODE_VERIFICATION.md +0 -0
  327. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/OPERATING_GOTCHAS.md +0 -0
  328. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/OPERATOR_GUIDES.md +0 -0
  329. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/ORACLE_LOOP.md +0 -0
  330. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/PHONE_WEBAPP.md +0 -0
  331. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/PIPELINE_V2.md +0 -0
  332. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/PLATFORM_EVOLUTION.md +0 -0
  333. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/SECOND_BACKEND.md +0 -0
  334. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/STORE_SERVICE.md +0 -0
  335. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  336. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/WEB_CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/WSL_WINDOWS_WORKER.md +0 -0
  338. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/mocks/web/README.md +0 -0
  339. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/mocks/web/_tokens.css +0 -0
  340. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/mocks/web/issue-detail.html +0 -0
  341. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/mocks/web/pipeline-narrow.html +0 -0
  342. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/docs/mocks/web/pipeline-wide.html +0 -0
  343. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/graphify-out/.gitignore +0 -0
  344. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/install-agent.sh +0 -0
  345. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/pyproject.toml +0 -0
  346. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/audit_review_verdict_overrides.py +0 -0
  347. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  348. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/build-worker-image.sh +0 -0
  349. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/coordinator-machine.py +0 -0
  350. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/epic-down.sh +0 -0
  351. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/epic-up.sh +0 -0
  352. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/preflight.sh +0 -0
  353. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/provision-worker.sh +0 -0
  354. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  355. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  356. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/azure-workers/verify-github-token.sh +0 -0
  357. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/check_gh_argv_containment.py +0 -0
  358. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/codegen.py +0 -0
  359. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-test-runner.sh +0 -0
  360. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  361. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  362. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  363. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  364. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/extract-coord-tui.sh +0 -0
  367. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/fleet_watchdog.py +0 -0
  368. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/gen_board_fixture.py +0 -0
  369. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/gen_mock_index.py +0 -0
  370. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/next_release_tag.py +0 -0
  371. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/run_tests_in_populated_home.sh +0 -0
  372. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/run_tests_without_gh.sh +0 -0
  373. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/smoke_437_interactive.py +0 -0
  374. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/verify_878_review_capture.py +0 -0
  375. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/verify_release_published.py +0 -0
  376. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/scripts/verify_release_wheel.py +0 -0
  377. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/setup.cfg +0 -0
  378. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/SMOKE_SET.md +0 -0
  379. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/__init__.py +0 -0
  380. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-37/conftest.py +0 -0
  381. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-37/contract.md +0 -0
  382. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-37/manifest.yml +0 -0
  383. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  384. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  385. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/contract.md +0 -0
  386. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  387. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  388. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/manifest.yml +0 -0
  389. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-51/tsconfig.json +0 -0
  391. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/backends.py +0 -0
  393. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/conftest.py +0 -0
  394. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/board-pipeline-basic.json +0 -0
  395. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  396. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  397. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  398. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  399. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/all_pass.json +0 -0
  400. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  401. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/mixed_fail.json +0 -0
  402. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  403. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  404. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/skip.json +0 -0
  405. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/playwright/truncated.json +0 -0
  406. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  407. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  408. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  409. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  410. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  411. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  412. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  413. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  414. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_acceptance.py +0 -0
  415. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_acceptance_drivers.py +0 -0
  416. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent.py +0 -0
  417. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_api_error.py +0 -0
  418. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_app.py +0 -0
  419. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_branch_base.py +0 -0
  420. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_branch_capture.py +0 -0
  421. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_config_free_1712.py +0 -0
  422. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_deploy_units_endpoint.py +0 -0
  423. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_dirty_worktree.py +0 -0
  424. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  425. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_graph_self_heal.py +0 -0
  426. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_health_h3.py +0 -0
  427. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_idle_restart.py +0 -0
  428. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_push_failure.py +0 -0
  429. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_reap.py +0 -0
  430. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_repos_and_pull.py +0 -0
  431. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_restart_services_endpoint.py +0 -0
  432. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_skills_self_heal.py +0 -0
  433. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_startup_diagnostics.py +0 -0
  434. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_update.py +0 -0
  435. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_update_bluegreen.py +0 -0
  436. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_usage_limit.py +0 -0
  437. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_agent_zero_commit.py +0 -0
  438. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ambient_home_isolation.py +0 -0
  439. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_approve_dependency_busy_2804.py +0 -0
  440. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_approve_reject_plan.py +0 -0
  441. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_approve_usage_gate.py +0 -0
  442. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_approved_work_2532.py +0 -0
  443. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_assignment_already_recorded_daemon.py +0 -0
  444. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_audit_log.py +0 -0
  445. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_audit_outcome.py +0 -0
  446. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_audit_query.py +0 -0
  447. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_auto_loop.py +0 -0
  448. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_auto_release_publish_2035.py +0 -0
  449. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_backend_selection.py +0 -0
  450. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_base_checkout_restore.py +0 -0
  451. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_block_log.py +0 -0
  452. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_cap_762.py +0 -0
  453. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_fixture.py +0 -0
  454. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_read_path.py +0 -0
  455. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_schema.py +0 -0
  456. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_service.py +0 -0
  457. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_state.py +0 -0
  458. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_board_wire.py +0 -0
  459. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_brain.py +0 -0
  460. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_branch_model.py +0 -0
  461. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_bug_intake.py +0 -0
  462. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_build_worker_image_env_update.py +0 -0
  463. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cargo_cache.py +0 -0
  464. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_check_gh_argv_containment.py +0 -0
  465. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ci_acceptance_gate_1950.py +0 -0
  466. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ci_fix.py +0 -0
  467. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ci_gitlab.py +0 -0
  468. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ci_parity_2091.py +0 -0
  469. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_ci_store.py +0 -0
  470. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_claim.py +0 -0
  471. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_claude_md_budget.py +0 -0
  472. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_acceptance.py +0 -0
  473. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_assign.py +0 -0
  474. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  475. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_assign_interactive_remote.py +0 -0
  476. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_assign_provider.py +0 -0
  477. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  478. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_audit.py +0 -0
  479. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_chat_continue.py +0 -0
  480. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_decide.py +0 -0
  481. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_diagnose_config_provenance.py +0 -0
  482. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_diagnose_forge_availability.py +0 -0
  483. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_diagnose_graph.py +0 -0
  484. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_diagnose_self.py +0 -0
  485. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_doctor.py +0 -0
  486. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_doctor_config_free_1801.py +0 -0
  487. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  488. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_drive.py +0 -0
  489. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_escalate.py +0 -0
  490. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_fix_headless_review.py +0 -0
  491. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_gate_a.py +0 -0
  492. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_install_drift.py +0 -0
  493. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_install_skills.py +0 -0
  494. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_issue_comment.py +0 -0
  495. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_issue_create_label.py +0 -0
  496. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_issue_reopen.py +0 -0
  497. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_issue_view_list.py +0 -0
  498. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_merge.py +0 -0
  499. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_assign.py +0 -0
  500. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_capture.py +0 -0
  501. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_chat_add_child.py +0 -0
  502. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_dispatch.py +0 -0
  503. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_gate_b.py +0 -0
  504. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_gate_c.py +0 -0
  505. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_order.py +0 -0
  506. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  507. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_milestone_ship.py +0 -0
  508. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_network.py +0 -0
  509. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_new_issue_chat.py +0 -0
  510. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_plans.py +0 -0
  511. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_portal.py +0 -0
  512. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_pr.py +0 -0
  513. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_pull_artifact.py +0 -0
  514. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_queue.py +0 -0
  515. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_reattach_sessions.py +0 -0
  516. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_refine_board.py +0 -0
  517. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_release_preflight.py +0 -0
  518. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_release_propagate.py +0 -0
  519. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_release_window.py +0 -0
  520. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_repo_2220.py +0 -0
  521. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  522. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_contested_tag.py +0 -0
  526. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_client_resource_migration_1946.py +0 -0
  538. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_commands_common.py +0 -0
  539. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_comments.py +0 -0
  540. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_completion_summary.py +0 -0
  541. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config.py +0 -0
  542. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config_acceptance.py +0 -0
  543. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config_audit.py +0 -0
  544. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config_pricing.py +0 -0
  545. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  546. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_config_usage_gate.py +0 -0
  547. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_confirm_test.py +0 -0
  548. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_conflict_fix.py +0 -0
  549. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_conflict_fix_semantic.py +0 -0
  550. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  551. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test.py +0 -0
  552. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  553. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test_runner_baseline.py +0 -0
  554. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test_runner_populated_home.py +0 -0
  555. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test_runner_routing.py +0 -0
  556. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_test_runner_toolchain.py +0 -0
  557. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_uat.py +0 -0
  558. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coord_web_sse_restart_live.py +0 -0
  559. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_coordinator_machine.py +0 -0
  560. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_cross_platform_imports.py +0 -0
  561. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dao.py +0 -0
  562. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dashboard.py +0 -0
  563. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dashboard_fixture.py +0 -0
  564. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dashboard_terminal.py +0 -0
  565. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dashboard_terminal_live.py +0 -0
  566. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_db.py +0 -0
  567. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dead_end.py +0 -0
  568. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_decomposition_chat.py +0 -0
  569. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_coord_db_backup.py +0 -0
  570. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_coord_web_dist.py +0 -0
  571. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_coord_web_rollback.py +0 -0
  572. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_drive_queue_unit.py +0 -0
  573. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_failure_notify_unit.py +0 -0
  574. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_manifest.py +0 -0
  575. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_notify_unit.py +0 -0
  576. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_units_lane.py +0 -0
  577. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deploy_web_unit.py +0 -0
  578. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deprecation_telemetry.py +0 -0
  579. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_deps.py +0 -0
  580. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_diagnose.py +0 -0
  581. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dispatch.py +0 -0
  582. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dispatch_target_validation.py +0 -0
  583. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_dist_name.py +0 -0
  584. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_done_housekeeping.py +0 -0
  585. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive.py +0 -0
  586. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue_blocked_rendering.py +0 -0
  587. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue_launch_argv.py +0 -0
  588. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  589. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue_roll_pending.py +0 -0
  590. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  591. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_state.py +0 -0
  592. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_drive_tmux.py +0 -0
  593. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_epic_up_capability_detection.py +0 -0
  594. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  595. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_epic_up_image_provenance.py +0 -0
  596. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_errors.py +0 -0
  597. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_events.py +0 -0
  598. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_failure_class.py +0 -0
  599. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_filelock.py +0 -0
  600. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  601. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_fix_of_force_override.py +0 -0
  602. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_fleet_config_health.py +0 -0
  603. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_fleet_health_probes.py +0 -0
  604. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_fleet_health_snapshot.py +0 -0
  605. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_fleet_watchdog.py +0 -0
  606. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_forge_availability.py +0 -0
  607. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_freshness.py +0 -0
  608. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gate_a.py +0 -0
  609. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gate_b.py +0 -0
  610. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gate_snapshot_staleness.py +0 -0
  611. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gates.py +0 -0
  612. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  613. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_gen_mock_index.py +0 -0
  614. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_generated_rust_fixture.py +0 -0
  615. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_generated_rust_requests.py +0 -0
  616. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_generated_types_fixture.py +0 -0
  617. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_github_ops.py +0 -0
  618. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_github_throttle.py +0 -0
  619. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_goal.py +0 -0
  620. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_graph_health.py +0 -0
  621. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_graph_selfheal_absent_2237.py +0 -0
  622. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_handoff.py +0 -0
  623. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_checks.py +0 -0
  624. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_cli.py +0 -0
  625. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_cli_graph.py +0 -0
  626. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_config.py +0 -0
  627. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_context.py +0 -0
  628. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_coord_tui_ci_pin.py +0 -0
  629. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_coord_web_ci_pin.py +0 -0
  630. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_deploy_lane_facts.py +0 -0
  631. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_fix.py +0 -0
  632. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_incident_regression.py +0 -0
  633. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_issues_sync_staleness.py +0 -0
  634. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_pypi.py +0 -0
  635. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_registry.py +0 -0
  636. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_release_cordon_probe.py +0 -0
  637. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_timer_active.py +0 -0
  638. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_toolchain.py +0 -0
  639. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_unit_drift.py +0 -0
  640. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_health_unit_enablement.py +0 -0
  641. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_hooks.py +0 -0
  642. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_human_attended_437.py +0 -0
  643. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_init.py +0 -0
  644. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_install_agent_venv_2911.py +0 -0
  645. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_integration.py +0 -0
  646. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_briefing_echo.py +0 -0
  647. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_pane_log_2541.py +0 -0
  648. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_prefill_state.py +0 -0
  649. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_session_relaunch.py +0 -0
  650. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_test_verdict_backstop.py +0 -0
  651. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_token_attribution.py +0 -0
  652. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_interactive_worktree.py +0 -0
  653. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_issue_store_seam.py +0 -0
  654. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_issues_sync_status.py +0 -0
  655. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_liveness_auditor.py +0 -0
  656. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_liveness_notify.py +0 -0
  657. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_lock_contention_ratchet.py +0 -0
  658. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_machine_pause.py +0 -0
  659. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_merge_queue.py +0 -0
  660. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_merge_verify.py +0 -0
  661. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_milestone_chat.py +0 -0
  662. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_milestone_dispatch.py +0 -0
  663. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_milestone_gate.py +0 -0
  664. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_milestone_order.py +0 -0
  665. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_milestone_seam.py +0 -0
  666. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_mock_author.py +0 -0
  667. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_model_tiering.py +0 -0
  668. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_models.py +0 -0
  669. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_models_config_labels.py +0 -0
  670. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_needs_attention.py +0 -0
  671. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_network.py +0 -0
  672. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_new_issue_chat.py +0 -0
  673. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_next_release_tag.py +0 -0
  674. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_node_shim.py +0 -0
  675. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_baseline.py +0 -0
  676. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_cli.py +0 -0
  677. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_collect.py +0 -0
  678. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_config.py +0 -0
  679. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_drive_seam.py +0 -0
  680. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_isolation.py +0 -0
  681. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_predicate.py +0 -0
  682. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_quiet_hours.py +0 -0
  683. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notifier_service.py +0 -0
  684. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notify.py +0 -0
  685. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_notify_drain.py +0 -0
  686. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_openapi.py +0 -0
  687. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_operational_defaults.py +0 -0
  688. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_overlap_fence.py +0 -0
  689. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_overlap_predict.py +0 -0
  690. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_packaged_deploy_units.py +0 -0
  691. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_parentage.py +0 -0
  692. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_paste_landed.py +0 -0
  693. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  694. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_pipeline.py +0 -0
  695. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_plan_followup_approve_plan_command.py +0 -0
  696. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_plan_followup_pr_command.py +0 -0
  697. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_plan_followup_review_command.py +0 -0
  698. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_plan_only.py +0 -0
  699. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_plan_parser.py +0 -0
  700. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_platform_paths.py +0 -0
  701. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_portal_bridge.py +0 -0
  702. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_portal_config.py +0 -0
  703. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_portal_store.py +0 -0
  704. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_portal_sync.py +0 -0
  705. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_pr_body_lint.py +0 -0
  706. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_prereqs.py +0 -0
  707. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_production_db_guard.py +0 -0
  708. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_progress.py +0 -0
  709. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_provider_seam.py +0 -0
  710. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_providers.py +0 -0
  711. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_providers_config_labels.py +0 -0
  712. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_providers_pty.py +0 -0
  713. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_py_rust_mirror_inventory.py +0 -0
  714. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_quiet_hours.py +0 -0
  715. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_quiet_hours_store_2146.py +0 -0
  716. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reap_merged_sessions.py +0 -0
  717. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reap_stale_interactive_tick.py +0 -0
  718. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile.py +0 -0
  719. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_branch.py +0 -0
  720. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_completions.py +0 -0
  721. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  722. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_merges.py +0 -0
  723. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_no_agent_record.py +0 -0
  724. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_tick.py +0 -0
  725. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reconcile_usage_limit_done.py +0 -0
  726. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_refine_chat.py +0 -0
  727. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_cordon_2101.py +0 -0
  728. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  729. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_cordon_deadlock_2240.py +0 -0
  730. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_cordon_stuck_2490.py +0 -0
  731. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_propagate.py +0 -0
  732. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_propagate_threshold.py +0 -0
  733. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_roll_between_legs_2854.py +0 -0
  734. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_roll_window_handoff.py +0 -0
  735. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_unified_1242.py +0 -0
  736. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_verify.py +0 -0
  737. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_release_window.py +0 -0
  738. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_remote_auto_prune.py +0 -0
  739. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_remote_interactive_reaper.py +0 -0
  740. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_repo_add.py +0 -0
  741. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_repo_edit_2220.py +0 -0
  742. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_repo_graph_fleet_2237.py +0 -0
  743. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_repo_onboard_2220.py +0 -0
  744. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_report_result_push.py +0 -0
  745. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_reports.py +0 -0
  746. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_retry.py +0 -0
  747. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_retry_advisory_1606.py +0 -0
  748. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_retry_type_1636.py +0 -0
  749. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_revalidate.py +0 -0
  750. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review.py +0 -0
  751. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_end_review_without_verdict.py +0 -0
  752. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_parse_failure_diagnostic.py +0 -0
  753. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_reaffirm.py +0 -0
  754. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_state.py +0 -0
  755. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_verdict_backstop.py +0 -0
  756. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_verdict_override_audit.py +0 -0
  757. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_verdict_relay.py +0 -0
  758. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_review_zero_commits.py +0 -0
  759. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_scoped_review_wiring.py +0 -0
  760. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_scorecard.py +0 -0
  761. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_self_health.py +0 -0
  762. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_serve.py +0 -0
  763. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_serve_app_board_trim.py +0 -0
  764. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_serve_rest_routes.py +0 -0
  765. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_session.py +0 -0
  766. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_slice_issue_attribution.py +0 -0
  767. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_smoke.py +0 -0
  768. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_smoke_live_checkout_restore.py +0 -0
  769. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_smoke_workflow.py +0 -0
  770. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_spend_ceiling.py +0 -0
  771. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_spend_ceiling_coordinator.py +0 -0
  772. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_split.py +0 -0
  773. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_split_work.py +0 -0
  774. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_sql_dialect.py +0 -0
  775. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_sqlite_connect_ratchet.py +0 -0
  776. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stage_projection.py +0 -0
  777. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stale_busy_reviewer_697.py +0 -0
  778. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stalled_pipeline.py +0 -0
  779. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_state.py +0 -0
  780. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_state_review_findings_daemon.py +0 -0
  781. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_status_fleet_footer.py +0 -0
  782. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stop_1567.py +0 -0
  783. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_store_contract.py +0 -0
  784. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_store_migrate.py +0 -0
  785. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stuck.py +0 -0
  786. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  787. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_terminal_command.py +0 -0
  788. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_author.py +0 -0
  789. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_chat.py +0 -0
  790. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_orchestrator.py +0 -0
  791. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_report.py +0 -0
  792. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_verdict_parsing.py +0 -0
  793. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_test_verdict_transcript_floor.py +0 -0
  794. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_text_io_encoding_audit.py +0 -0
  795. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_thin_client_board_audit.py +0 -0
  796. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_thin_client_config_load_1080.py +0 -0
  797. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_thin_client_daemon_routing_906.py +0 -0
  798. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_tmux_host.py +0 -0
  799. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_tmux_session.py +0 -0
  800. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_transcript_floor.py +0 -0
  801. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_usage.py +0 -0
  802. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_usage_limits.py +0 -0
  803. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_usage_rollup.py +0 -0
  804. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_venv_live_install_2121.py +0 -0
  805. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_version_single_source.py +0 -0
  806. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_watch.py +0 -0
  807. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  808. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worker_env_venv_isolation.py +0 -0
  809. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worker_events.py +0 -0
  810. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worker_image_pin_sync.py +0 -0
  811. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worker_safety.py +0 -0
  812. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worker_test_scoping.py +0 -0
  813. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worktree.py +0 -0
  814. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  815. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/test_write_parity.py +0 -0
  816. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tests/write_parity.py +0 -0
  817. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  818. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/contract.md +0 -0
  819. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  820. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  821. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  822. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  823. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  824. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/contract.md +0 -0
  825. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  826. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  827. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  828. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  829. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  830. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  831. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  832. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  833. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  834. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  835. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  836. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  837. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  838. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  839. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/contract.md +0 -0
  840. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  841. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  842. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  843. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  844. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  845. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  846. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  847. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  848. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  849. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  850. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  851. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  852. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  853. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  854. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/contract.md +0 -0
  855. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  856. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  857. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  858. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  859. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  860. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  861. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  862. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  863. {code_coordinator-0.5.300 → code_coordinator-0.5.302}/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.300
3
+ Version: 0.5.302
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.300
3
+ Version: 0.5.302
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.300",
2
+ "tag": "0.5.302",
3
3
  "distance": 0,
4
- "node": "g94e4815fd8f9649dea8eb46637198841f2c99a16",
4
+ "node": "g4db839a79669e9ada2d3461267662cb4cefd6e52",
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
+ )
@@ -51,6 +51,7 @@ one distinct, *named* finding per defect, with no network and no live agents.
51
51
 
52
52
  from __future__ import annotations
53
53
 
54
+ import re
54
55
  from collections import Counter
55
56
  from dataclasses import dataclass, field
56
57
  from typing import TYPE_CHECKING
@@ -183,6 +184,13 @@ class MachineFacts:
183
184
  linger: bool | None = None
184
185
  linger_error: str | None = None
185
186
 
187
+ # ── Layer 6: coord resolvable from a WORKER-shaped PATH (needs SSH —
188
+ # `/health` cannot see it either: it answers from the AGENT's own
189
+ # process, which still has ~/.coord-venv/bin on PATH) ────────────────
190
+ coord_on_worker_path: bool | None = None
191
+ coord_on_worker_path_error: str | None = None
192
+ coord_on_worker_path_version: str | None = None
193
+
186
194
  def check(self, check_id: str, subject: str | None = None) -> HealthCheckFact | None:
187
195
  for row in self.health_checks:
188
196
  if row.check_id == check_id and (subject is None or row.subject == subject):
@@ -288,6 +296,108 @@ def probe_linger(host: str, *, timeout: float = 20.0) -> tuple[bool | None, str
288
296
  return None, "`loginctl` did not report a Linger property (not systemd?)"
289
297
 
290
298
 
299
+ # #2937 review: this probe must answer "can a worker resolve `coord`?" using
300
+ # the exact same algorithm the agent itself uses to spawn a worker — not a
301
+ # second, hand-rolled PATH-stripping implementation that can silently
302
+ # disagree with it (e.g. on a trailing slash, or a PATH entry that's already
303
+ # an unresolved `.blue`/`.green` path rather than the `~/.coord-venv`
304
+ # symlink name). `coord.agent.worker_coord_reachable()` (#2936) is the
305
+ # canonical, already-shipped answer to that exact question — built on
306
+ # `_worker_subprocess_env`'s realpath-based strip
307
+ # (`coord.agent._pinned_venv_bin_dirs`), the same function every real worker
308
+ # spawn goes through. So instead of re-deriving the strip over SSH, this
309
+ # probe SSHes in and asks the remote host's own pinned interpreter to import
310
+ # and call that function directly — the machine-doctor check and the agent's
311
+ # own startup check are then provably the same code, not two
312
+ # implementations that happen to agree today. The script is sent over
313
+ # stdin (`python3 -`) rather than embedded as a `-c` argument so no
314
+ # shell-quoting layer stands between it and the interpreter.
315
+ _COORD_ON_WORKER_PATH_PROBE_SCRIPT = """\
316
+ import subprocess
317
+ from coord.agent import worker_coord_reachable, _worker_subprocess_env
318
+
319
+ ok, _msg = worker_coord_reachable()
320
+ version = ""
321
+ if ok:
322
+ env = _worker_subprocess_env()
323
+ try:
324
+ result = subprocess.run(
325
+ ["coord", "--version"], env=env, capture_output=True, text=True, timeout=10
326
+ )
327
+ version = (result.stdout or result.stderr or "").strip()
328
+ except Exception:
329
+ version = ""
330
+ print("COORD_ON_WORKER_PATH_OK=" + ("1" if ok else "0"))
331
+ print("VERSION=" + version.replace("\\n", " "))
332
+ """
333
+
334
+
335
+ def probe_coord_on_worker_path(
336
+ host: str, *, timeout: float = 20.0
337
+ ) -> tuple[bool | None, str | None, str | None]:
338
+ """Can a WORKER-shaped shell on *host* resolve ``coord`` at all?
339
+
340
+ This is #2937's whole gap: workers are spawned with ``~/.coord-venv/bin``
341
+ stripped from ``PATH`` (#402, hardened by #2569) so a `pip install` in a
342
+ worktree can never land in the agent's own runtime venv — but nothing
343
+ upstream of that check ever asks whether ``coord`` is *still resolvable*
344
+ once that directory is gone. dell64 passed every existing layer of
345
+ ``coord machine doctor`` — including ``runtime.agent_venv`` (which only
346
+ proves the AGENT can find its own venv) — while being structurally
347
+ incapable of recording a single test verdict, because the agent's PATH
348
+ was the only PATH anything had checked.
349
+
350
+ Delegates the actual found/absent decision to
351
+ :func:`coord.agent.worker_coord_reachable` (#2936), invoked on *host* via
352
+ its own pinned interpreter (``~/.coord-venv/bin/python3``) — see
353
+ :data:`_COORD_ON_WORKER_PATH_PROBE_SCRIPT`. This is deliberately NOT a
354
+ reimplementation of the PATH strip: it is the same function every real
355
+ worker spawn's environment is built from, run where it matters (the
356
+ worker host), so this check and the agent's own startup warning
357
+ (``worker_coord_reachable`` logged at ``AgentServer`` init) can never
358
+ silently disagree.
359
+
360
+ Returns ``(found, error, version)``. Fail-soft, same discipline as
361
+ :func:`probe_linger`: this needs SSH, which ``/health`` structurally
362
+ cannot substitute for (the agent process answering a probe still has its
363
+ own venv on PATH — proving nothing about a worker's shell) — so an SSH
364
+ failure, or the pinned interpreter itself being unreachable/absent,
365
+ reports ``(None, reason, None)``, UNKNOWN, never a fabricated CRIT.
366
+ ``found=False`` — the actual defect this check exists to catch — is the
367
+ one outcome that must never collapse into UNKNOWN.
368
+ """
369
+ import subprocess # noqa: PLC0415
370
+
371
+ try:
372
+ result = subprocess.run(
373
+ [
374
+ "ssh", "-o", "BatchMode=yes",
375
+ "-o", f"ConnectTimeout={max(1, int(timeout))}",
376
+ host, "$HOME/.coord-venv/bin/python3 -",
377
+ ],
378
+ input=_COORD_ON_WORKER_PATH_PROBE_SCRIPT,
379
+ capture_output=True,
380
+ text=True,
381
+ timeout=timeout,
382
+ )
383
+ except (OSError, subprocess.SubprocessError) as exc:
384
+ return None, f"ssh probe failed: {exc}", None
385
+ if result.returncode != 0:
386
+ detail = (result.stderr or result.stdout or "").strip().splitlines()[-1:]
387
+ return None, f"ssh probe failed: {detail[0] if detail else 'no output'}", None
388
+
389
+ text = (result.stdout or "").strip()
390
+ if "COORD_ON_WORKER_PATH_OK=1" in text:
391
+ version = None
392
+ for line in text.splitlines():
393
+ if line.startswith("VERSION="):
394
+ version = line[len("VERSION="):].strip() or None
395
+ return True, None, version
396
+ if "COORD_ON_WORKER_PATH_OK=0" in text:
397
+ return False, None, None
398
+ return None, "worker-PATH probe produced no parseable output", None
399
+
400
+
291
401
  def gather_facts(
292
402
  cfg: "Config",
293
403
  machine_name: str,
@@ -382,6 +492,11 @@ def gather_facts(
382
492
  facts.linger, facts.linger_error = probe_linger(
383
493
  machine.host, timeout=ssh_timeout
384
494
  )
495
+ (
496
+ facts.coord_on_worker_path,
497
+ facts.coord_on_worker_path_error,
498
+ facts.coord_on_worker_path_version,
499
+ ) = probe_coord_on_worker_path(machine.host, timeout=ssh_timeout)
385
500
  return facts
386
501
 
387
502
 
@@ -938,6 +1053,24 @@ def evaluate_graph(facts: MachineFacts) -> list[Finding]:
938
1053
  # ── Layer 6: runtime ─────────────────────────────────────────────────────────
939
1054
 
940
1055
 
1056
+ _VERSION_NUMBER_RE = re.compile(r"\d+(?:\.\d+)+")
1057
+
1058
+
1059
+ def _extract_version_number(text: str | None) -> str | None:
1060
+ """Pull the dotted version number out of free-form text, e.g.
1061
+ ``"coord, version 0.5.290"`` -> ``"0.5.290"``.
1062
+
1063
+ Used so version comparisons here are an EXACT match on the number, never
1064
+ a substring test (``"0.5.29" in "coord, version 0.5.290"`` is ``True``
1065
+ even though those are different releases — #2937 review). Returns
1066
+ ``None`` when no dotted number is found.
1067
+ """
1068
+ if not text:
1069
+ return None
1070
+ match = _VERSION_NUMBER_RE.search(text)
1071
+ return match.group(0) if match else None
1072
+
1073
+
941
1074
  def evaluate_runtime(facts: MachineFacts) -> list[Finding]:
942
1075
  """The agent's own installation: its venv, and whether it survives logout.
943
1076
 
@@ -947,9 +1080,12 @@ def evaluate_runtime(facts: MachineFacts) -> list[Finding]:
947
1080
  because an editable one pins the live fleet's runtime to whatever branch a
948
1081
  worktree happens to have checked out.
949
1082
 
950
- ``linger`` is the one thing ``/health`` structurally cannot see (the agent
951
- answering the probe is proof only that the user manager is up *right
952
- now*), so it is UNKNOWN unless the caller opted into the SSH probe.
1083
+ ``linger`` and ``coord_on_worker_path`` are the two things ``/health``
1084
+ structurally cannot see: the agent answering a probe is proof only that
1085
+ the AGENT's own user manager / PATH is fine *right now*, not that a
1086
+ WORKER spawned on this host (with ``~/.coord-venv/bin`` stripped from
1087
+ PATH, #402/#2569) can survive logout or resolve ``coord`` at all. Both
1088
+ are UNKNOWN unless the caller opted into the SSH probe.
953
1089
  """
954
1090
  out: list[Finding] = []
955
1091
 
@@ -990,6 +1126,74 @@ def evaluate_runtime(facts: MachineFacts) -> list[Finding]:
990
1126
  )
991
1127
  )
992
1128
 
1129
+ if facts.coord_on_worker_path is False:
1130
+ out.append(
1131
+ Finding(
1132
+ layer="runtime", check="runtime.coord_on_worker_path_missing", severity=CRIT,
1133
+ summary=(
1134
+ "`coord` does not resolve on a WORKER-shaped PATH (with "
1135
+ "~/.coord-venv/bin stripped, as #402/#2569 spawn workers) — "
1136
+ "this machine can dispatch and run a worker, but that worker "
1137
+ "cannot run `coord test` to record a verdict. This is exactly "
1138
+ "the #2937 gap: every other layer here, and `/health` itself, "
1139
+ "only ever sees the AGENT's own PATH"
1140
+ ),
1141
+ subject=facts.name,
1142
+ fix=(
1143
+ "install `coord` somewhere on the agent user's PATH outside "
1144
+ "~/.coord-venv (e.g. `pipx install code-coordinator`, or a "
1145
+ "system-wide non-editable install) — the fix must survive "
1146
+ "~/.coord-venv/bin being removed from PATH, because that is "
1147
+ "exactly what a worker's shell does."
1148
+ ),
1149
+ )
1150
+ )
1151
+ elif facts.coord_on_worker_path is True:
1152
+ expected_raw = (facts.version or "").strip()
1153
+ reported_raw = facts.coord_on_worker_path_version or ""
1154
+ expected = _extract_version_number(expected_raw)
1155
+ reported = _extract_version_number(reported_raw)
1156
+ # #2937 review: an EXACT comparison of the extracted version numbers,
1157
+ # not `expected in reported` — a substring test reads a genuine skew
1158
+ # as a match whenever the shorter string happens to be a substring of
1159
+ # the longer one (this project's own scheme: "0.5.29" in "coord,
1160
+ # version 0.5.290" is True even though those are different releases).
1161
+ if expected and expected != (reported or ""):
1162
+ out.append(
1163
+ Finding(
1164
+ layer="runtime", check="runtime.coord_on_worker_path_version_mismatch",
1165
+ severity=WARN,
1166
+ summary=(
1167
+ f"`coord` on the worker PATH reports {reported_raw!r}, but the "
1168
+ f"agent's own /health reports version {expected_raw!r} — a "
1169
+ "worker may record verdicts against a stale or unrelated "
1170
+ "install"
1171
+ ),
1172
+ subject=facts.name,
1173
+ fix="reinstall/upgrade the worker-PATH `coord` to match the agent's version.",
1174
+ )
1175
+ )
1176
+ else:
1177
+ out.append(
1178
+ Finding(
1179
+ layer="runtime", check="runtime.coord_on_worker_path", severity=OK,
1180
+ summary=f"`coord` resolves on a worker-shaped PATH ({reported_raw or 'version unreported'})",
1181
+ subject=facts.name,
1182
+ )
1183
+ )
1184
+ else:
1185
+ out.append(
1186
+ Finding(
1187
+ layer="runtime", check="runtime.coord_on_worker_path_unknown", severity=UNKNOWN,
1188
+ summary=(
1189
+ "worker-PATH `coord` resolution not checked — /health cannot "
1190
+ f"see it (it only proves the AGENT can find coord); "
1191
+ f"{facts.coord_on_worker_path_error or 'pass --ssh to probe it'}"
1192
+ ),
1193
+ subject=facts.name,
1194
+ )
1195
+ )
1196
+
993
1197
  if facts.linger is True:
994
1198
  out.append(
995
1199
  Finding(